Ver Fonte

Merge branch 'new_mbed_tls' of https://192.168.14.200:3000/dtelenkov/bt-670x into new_mbed_tls

Avetisyan Karen há 7 anos atrás
pai
commit
de4324284a
64 ficheiros alterados com 9523 adições e 1807 exclusões
  1. 1 1
      .gdbinit_bt6706
  2. 1 1
      .gdbinit_bt6706_noflash
  3. 1 1
      Makefile
  4. 13 1
      config/common_config.h
  5. 98 115
      docs/BT6702.MIB
  6. 126 144
      docs/SmartUPS _bt6706.MIB
  7. 9 1
      iap/Makefile
  8. 725 702
      iap/Modules/Ethernet/fsdata.c
  9. 14 15
      iap/Modules/Ethernet/netconf.c
  10. 8 8
      iap/Modules/settings_api.c
  11. 4 0
      iap/Modules/settings_api.h
  12. 13 15
      iap/Modules/usart.c
  13. 1 1
      iap/User/main.c
  14. 4 1
      modules/Ethernet/lwipopts.h
  15. 4 3
      modules/Ethernet/netconf.c
  16. 4 40
      modules/Ethernet/private_mib.c
  17. 434 0
      modules/Ethernet/private_mib_bt6706.c
  18. 1 0
      modules/Ethernet/snmp_api.c
  19. 66 5
      modules/Ethernet/trap_api.c
  20. 3219 0
      modules/HTTP_Server/bt6702_fs/fsdata.c
  21. 33 33
      modules/HTTP_Server/bt6706_fs/fsdata.c
  22. 0 178
      modules/HTTP_Server/fs.c
  23. 235 246
      modules/HTTP_Server/http_server.c
  24. 6 47
      modules/HTTP_Server/http_server.h
  25. 11 97
      modules/HTTP_Server/my_ssl_server.c
  26. 24 2
      modules/HTTP_Server/web_params_api.c
  27. 31 7
      modules/Makefile
  28. 65 45
      modules/MegaTec/megatec.c
  29. 1990 0
      modules/Telnet_Server/CLI_Commands.c
  30. 86 0
      modules/Telnet_Server/CLI_Commands.h
  31. 311 0
      modules/Telnet_Server/CLI_Parameters.c
  32. 33 0
      modules/Telnet_Server/CLI_Parameters.h
  33. 420 0
      modules/Telnet_Server/FreeRTOS_CLI.c
  34. 122 0
      modules/Telnet_Server/FreeRTOS_CLI.h
  35. 612 0
      modules/Telnet_Server/telnet_server.c
  36. 24 0
      modules/Telnet_Server/telnet_server.h
  37. 24 0
      modules/common/control_symbol.c
  38. 14 0
      modules/common/control_symbol.h
  39. 6 1
      modules/common/hal.c
  40. 81 0
      modules/log/log.c
  41. 8 0
      modules/log/log.h
  42. 74 39
      modules/monitor/ups_monitor.c
  43. 196 2
      modules/parameters.c
  44. 79 0
      modules/parameters.h
  45. 42 6
      modules/settings_api.c
  46. 25 2
      modules/settings_api.h
  47. 3 1
      modules/testing/testing.c
  48. BIN
      output/BT_6702xx.bin
  49. BIN
      output/iap.bin
  50. 78 10
      service_hw/Commands/bt_6701_commands.c
  51. 15 3
      service_hw/Commands/commands_api.c
  52. 1 1
      service_hw/Ethernet/lwipopts.h
  53. 57 12
      service_hw/Ethernet/netconf.c
  54. 1 0
      service_hw/Ethernet/netconf.h
  55. 8 2
      service_hw/Hardware/hw_init.c
  56. 3 3
      service_hw/Makefile
  57. 31 0
      service_hw/Settings/bt_6701_settings.c
  58. 10 0
      service_hw/Settings/bt_6701_settings.h
  59. 6 0
      thirdparty/FreeRTOS/include/FreeRTOSConfig.h
  60. 1 11
      thirdparty/lwip/port/FreeRTOS/ethernetif.c
  61. BIN
      tracefile.bin
  62. 6 2
      user/init_task.c
  63. 4 2
      user/main.c
  64. 1 1
      user/main.h

+ 1 - 1
.gdbinit_bt6706

@@ -1,5 +1,5 @@
 target remote localhost:3333
 target remote localhost:3333
-file build/bt6702/stm32bt6706/stm32bt6706.elf
+file build/bt6706/stm32bt6706/stm32bt6706.elf
 load
 load
 break Reset_Handler
 break Reset_Handler
 
 

+ 1 - 1
.gdbinit_bt6706_noflash

@@ -1,4 +1,4 @@
 target remote localhost:3333
 target remote localhost:3333
-file build/bt6702/stm32bt6706/stm32bt6706.elf
+file build/bt6706/stm32bt6706/stm32bt6706.elf
 break Reset_Handler
 break Reset_Handler
 monitor halt
 monitor halt

+ 1 - 1
Makefile

@@ -1,4 +1,4 @@
-TARGETS = projects/gcc/tools iap modules  #service_hw 
+TARGETS = projects/gcc/tools iap modules service_hw 
 BUILDDIR = build
 BUILDDIR = build
 
 
 .PHONY: all config $(TARGETS) tools distclean
 .PHONY: all config $(TARGETS) tools distclean

+ 13 - 1
config/common_config.h

@@ -17,8 +17,14 @@
 
 
 /**
 /**
   * @brief  Маркер ревизии платы для валидации *.bin файла
   * @brief  Маркер ревизии платы для валидации *.bin файла
+  *
   */
   */
+#ifdef HARDWARE_BT6706
+#define HW_REV                          "BT-6706"
+#elif HARDWARE_BT6702
 #define HW_REV                          "BT-6702"
 #define HW_REV                          "BT-6702"
+#endif
+
 
 
 #define HW_REV_LEN                      16
 #define HW_REV_LEN                      16
 
 
@@ -27,7 +33,13 @@
 /**
 /**
   * @brief  Версия прошивки
   * @brief  Версия прошивки
   */
   */
+#define VERSION                         "1.1"
+
+#ifdef HARDWARE_BT6706
 #define VERSION                         "1.0"
 #define VERSION                         "1.0"
+#elif HARDWARE_BT6702
+#define VERSION                         "1.1"
+#endif
    
    
 /**
 /**
   * @brief  Адрес сектора настроек
   * @brief  Адрес сектора настроек
@@ -81,7 +93,7 @@
 /**
 /**
   * @brief  Отладочный порт USART и консоль
   * @brief  Отладочный порт USART и консоль
   */
   */
-#define USART_DEBUG_ENABLE
+//#define USART_DEBUG_ENABLE
 
 
 #define SYSTEMTICK_PERIOD_MS  1
 #define SYSTEMTICK_PERIOD_MS  1
 
 

+ 98 - 115
docs/SmartUPS.MIB → docs/BT6702.MIB

@@ -1,5 +1,9 @@
 RoTeK-swt-BT-BT-6702-signals-MIB DEFINITIONS ::= BEGIN
 RoTeK-swt-BT-BT-6702-signals-MIB DEFINITIONS ::= BEGIN
 
 
+IMPORTS
+	enterprises, NOTIFICATION-TYPE
+		FROM SNMPV2-SMI;
+
     rotek           OBJECT IDENTIFIER ::= { enterprises 41752 }
     rotek           OBJECT IDENTIFIER ::= { enterprises 41752 }
     swt             OBJECT IDENTIFIER ::= { rotek 911 }
     swt             OBJECT IDENTIFIER ::= { rotek 911 }
     BT-6702         OBJECT IDENTIFIER ::= { swt 3 }
     BT-6702         OBJECT IDENTIFIER ::= { swt 3 }
@@ -7,61 +11,61 @@ RoTeK-swt-BT-BT-6702-signals-MIB DEFINITIONS ::= BEGIN
     traps           OBJECT IDENTIFIER ::= { BT-6702 2 }
     traps           OBJECT IDENTIFIER ::= { BT-6702 2 }
 
 
 	
 	
-	FWVersion OBJECT-TYPE
+    fwVersion OBJECT-TYPE
     SYNTAX  OCTET STRING
     SYNTAX  OCTET STRING
-    ACCESS  read
+    MAX-ACCESS  read-only
     STATUS  current
     STATUS  current
     DESCRIPTION
     DESCRIPTION
     "FWVersion" 
     "FWVersion" 
     ::= { signals 1 }
     ::= { signals 1 }
 
 
-	RestoreSignal OBJECT-TYPE
+    restoreSignal OBJECT-TYPE
     SYNTAX  INTEGER
     SYNTAX  INTEGER
-    ACCESS  write
+    MAX-ACCESS  write-only
     STATUS  current
     STATUS  current
     DESCRIPTION
     DESCRIPTION
     "Restore settings
     "Restore settings
     1 - restore settings"
     1 - restore settings"
     ::= { signals 2 }
     ::= { signals 2 }
 	
 	
-	RebootSignal OBJECT-TYPE
+    rebootSignal OBJECT-TYPE
     SYNTAX  INTEGER
     SYNTAX  INTEGER
-    ACCESS  write
+    MAX-ACCESS  write-only
     STATUS  current
     STATUS  current
     DESCRIPTION
     DESCRIPTION
     "Reboot device: 
     "Reboot device: 
     1 - reboot"
     1 - reboot"
     ::= { signals 3 }
     ::= { signals 3 }
     
     
-    UPSModel OBJECT-TYPE
+    upsModel OBJECT-TYPE
     SYNTAX  OCTET STRING
     SYNTAX  OCTET STRING
-    ACCESS  read
+    MAX-ACCESS  read-only
     STATUS  current
     STATUS  current
     DESCRIPTION
     DESCRIPTION
     "UPS model" 
     "UPS model" 
     ::= { signals 4 }
     ::= { signals 4 }
     
     
-    DO1 OBJECT-TYPE
+    do1 OBJECT-TYPE
     SYNTAX  OCTET STRING
     SYNTAX  OCTET STRING
-    ACCESS  read-write
+    MAX-ACCESS  read-write
     STATUS  current
     STATUS  current
     DESCRIPTION
     DESCRIPTION
     "0 - open relay1
     "0 - open relay1
     1 - close relay1" 
     1 - close relay1" 
     ::= { signals 5 }
     ::= { signals 5 }
     
     
-    DO2 OBJECT-TYPE
+    do2 OBJECT-TYPE
     SYNTAX  OCTET STRING
     SYNTAX  OCTET STRING
-    ACCESS  read-write
+    MAX-ACCESS  read-write
     STATUS  current
     STATUS  current
     DESCRIPTION
     DESCRIPTION
     "0 - open relay2 
     "0 - open relay2 
     1 - close relay2" 
     1 - close relay2" 
     ::= { signals 6 }
     ::= { signals 6 }
     
     
-    BatTest OBJECT-TYPE
+    batTest OBJECT-TYPE
     SYNTAX  INTEGER
     SYNTAX  INTEGER
-    ACCESS  write
+    MAX-ACCESS  write-only
     STATUS  current
     STATUS  current
     DESCRIPTION
     DESCRIPTION
     "0 - cancel test
     "0 - cancel test
@@ -70,9 +74,9 @@ RoTeK-swt-BT-BT-6702-signals-MIB DEFINITIONS ::= BEGIN
     999 - test till charging"
     999 - test till charging"
     ::= { signals 7 }
     ::= { signals 7 }
     
     
-    Shutdown OBJECT-TYPE
+    shutdown OBJECT-TYPE
     SYNTAX  OCTET STRING
     SYNTAX  OCTET STRING
-    ACCESS  write
+    MAX-ACCESS  write-only
     STATUS  current
     STATUS  current
     DESCRIPTION
     DESCRIPTION
     "Control of shut down UPS load:
     "Control of shut down UPS load:
@@ -81,9 +85,9 @@ RoTeK-swt-BT-BT-6702-signals-MIB DEFINITIONS ::= BEGIN
 	n: 0.2, 0.3, .., 1, 2, .., 10"
 	n: 0.2, 0.3, .., 1, 2, .., 10"
     ::= { signals 8 }
     ::= { signals 8 }
 	
 	
-	DI0 OBJECT-TYPE
+    di0 OBJECT-TYPE
     SYNTAX  OCTET STRING
     SYNTAX  OCTET STRING
-    ACCESS  read
+    MAX-ACCESS  read-only
     STATUS  current
     STATUS  current
     DESCRIPTION
     DESCRIPTION
     "State of dry input
     "State of dry input
@@ -91,65 +95,65 @@ RoTeK-swt-BT-BT-6702-signals-MIB DEFINITIONS ::= BEGIN
     1 - open dry input" 
     1 - open dry input" 
     ::= { signals 9 }
     ::= { signals 9 }
 	
 	
-	IntTemp OBJECT-TYPE
+    intTemp OBJECT-TYPE
     SYNTAX  OCTET STRING
     SYNTAX  OCTET STRING
-    ACCESS  read
+    MAX-ACCESS  read-only
     STATUS  current
     STATUS  current
     DESCRIPTION
     DESCRIPTION
     "Internal temperature" 
     "Internal temperature" 
     ::= { signals 10 }
     ::= { signals 10 }
 	
 	
-	InFreq OBJECT-TYPE
+    inFreq OBJECT-TYPE
     SYNTAX  OCTET STRING
     SYNTAX  OCTET STRING
-    ACCESS  read
+    MAX-ACCESS  read-only
     STATUS  current
     STATUS  current
     DESCRIPTION
     DESCRIPTION
     "Input frequency, Hz" 
     "Input frequency, Hz" 
     ::= { signals 11 }
     ::= { signals 11 }
 	
 	
-	InVoltVAC OBJECT-TYPE
+    inVoltVAC OBJECT-TYPE
     SYNTAX  OCTET STRING
     SYNTAX  OCTET STRING
-    ACCESS  read
+    MAX-ACCESS  read-only
     STATUS  current
     STATUS  current
     DESCRIPTION
     DESCRIPTION
     "Input voltage" 
     "Input voltage" 
     ::= { signals 12 }
     ::= { signals 12 }
 	
 	
-	OutVoltVAC OBJECT-TYPE
+    outVoltVAC OBJECT-TYPE
     SYNTAX  OCTET STRING
     SYNTAX  OCTET STRING
-    ACCESS  read
+    MAX-ACCESS  read-only
     STATUS  current
     STATUS  current
     DESCRIPTION
     DESCRIPTION
     "Output voltage" 
     "Output voltage" 
     ::= { signals 13 }
     ::= { signals 13 }
 	
 	
-	Power OBJECT-TYPE
+    power OBJECT-TYPE
     SYNTAX  OCTET STRING
     SYNTAX  OCTET STRING
-    ACCESS  read
+    MAX-ACCESS  read-only
     STATUS  current
     STATUS  current
     DESCRIPTION
     DESCRIPTION
     "Power, %" 
     "Power, %" 
     ::= { signals 14 }
     ::= { signals 14 }
 	
 	
-	BatCap OBJECT-TYPE
+    batCap OBJECT-TYPE
     SYNTAX  OCTET STRING
     SYNTAX  OCTET STRING
-    ACCESS  read
+    MAX-ACCESS  read-only
     STATUS  current
     STATUS  current
     DESCRIPTION
     DESCRIPTION
     "Battery capacity, %" 
     "Battery capacity, %" 
     ::= { signals 15 }
     ::= { signals 15 }
     
     
-    BatTime OBJECT-TYPE
+    batTime OBJECT-TYPE
     SYNTAX  OCTET STRING
     SYNTAX  OCTET STRING
-    ACCESS  read
+    MAX-ACCESS  read-only
     STATUS  current
     STATUS  current
     DESCRIPTION
     DESCRIPTION
     "Rest working time of battery, min" 
     "Rest working time of battery, min" 
     ::= { signals 16 }
     ::= { signals 16 }
 		
 		
-	ConnectMonitor OBJECT-TYPE
+    connectMonitor OBJECT-TYPE
     SYNTAX  OCTET STRING
     SYNTAX  OCTET STRING
-    ACCESS  read
+    MAX-ACCESS  read-only
     STATUS  current
     STATUS  current
     DESCRIPTION
     DESCRIPTION
     "Connect status:
     "Connect status:
@@ -157,9 +161,9 @@ RoTeK-swt-BT-BT-6702-signals-MIB DEFINITIONS ::= BEGIN
 	1 - connect fail" 
 	1 - connect fail" 
     ::= { signals 17 }
     ::= { signals 17 }
     
     
-    Alarms OBJECT-TYPE
+    alarms OBJECT-TYPE
     SYNTAX  OCTET STRING
     SYNTAX  OCTET STRING
-    ACCESS  read
+    MAX-ACCESS  read-only
     STATUS  current
     STATUS  current
     DESCRIPTION
     DESCRIPTION
     "bit 7 - utility fail
     "bit 7 - utility fail
@@ -174,146 +178,125 @@ RoTeK-swt-BT-BT-6702-signals-MIB DEFINITIONS ::= BEGIN
 
 
 -- DEVICE TRAPS
 -- DEVICE TRAPS
 
 
-	FWVersionUpdate  NOTIFICATION-TYPE
+     fwVersionUpdate  NOTIFICATION-TYPE
+     OBJECTS              { fwVersion }
      STATUS               current
      STATUS               current
-     ENTERPRISE           traps
-     OBJECTS              { FWVersion }
-     DESCRIPTION
+     DESCRIPTION ""
      ::= { traps 1 }
      ::= { traps 1 }
 
 
-    FWVersionUpdated  NOTIFICATION-TYPE
+    fwVersionUpdated  NOTIFICATION-TYPE
+     OBJECTS              { fwVersion }
      STATUS               current
      STATUS               current
-     ENTERPRISE           traps
-     OBJECTS              { FWVersion }
-     DESCRIPTION
+     DESCRIPTION ""
      ::= { traps 2 }
      ::= { traps 2 }
 
 
-	DeviceRestored  NOTIFICATION-TYPE
+     deviceRestored  NOTIFICATION-TYPE
+     OBJECTS              { restoreSignal }
      STATUS               current
      STATUS               current
-     ENTERPRISE           traps
-     OBJECTS              { RestoreSignal }
-     DESCRIPTION
+     DESCRIPTION ""
      ::= { traps 3 }
      ::= { traps 3 }
 
 
-    DeviceRebooted  NOTIFICATION-TYPE
+    deviceRebooted  NOTIFICATION-TYPE
+     OBJECTS              { rebootSignal }
      STATUS               current
      STATUS               current
-     ENTERPRISE           traps
-     OBJECTS              { RebootSignal }
-     DESCRIPTION
+     DESCRIPTION ""
      ::= { traps 4 }
      ::= { traps 4 }
 
 
-	DI0Norm  NOTIFICATION-TYPE
+     di0Norm  NOTIFICATION-TYPE
+     OBJECTS              { di0 }
      STATUS               current
      STATUS               current
-     ENTERPRISE           traps
-     OBJECTS              { DI0 }
-     DESCRIPTION
+     DESCRIPTION ""
      ::= { traps 5 }
      ::= { traps 5 }
 
 
     DI0Alarm  NOTIFICATION-TYPE
     DI0Alarm  NOTIFICATION-TYPE
+     OBJECTS              { di0 }
      STATUS               current
      STATUS               current
-     ENTERPRISE           traps
-     OBJECTS              { DI0 }
-     DESCRIPTION
+     DESCRIPTION ""
      ::= { traps 6 }
      ::= { traps 6 }
      
      
-     DO1Toggled  NOTIFICATION-TYPE
+     do1Toggled  NOTIFICATION-TYPE
+     OBJECTS              { do1 }
      STATUS               current
      STATUS               current
-     ENTERPRISE           traps
-     OBJECTS              { DO1 }
-     DESCRIPTION
+     DESCRIPTION ""
      ::= { traps 7 }
      ::= { traps 7 }
 
 
-    DO2Toggled  NOTIFICATION-TYPE
+    do2Toggled  NOTIFICATION-TYPE
+     OBJECTS              { do2 }
      STATUS               current
      STATUS               current
-     ENTERPRISE           traps
-     OBJECTS              { DO2 }
-     DESCRIPTION
+     DESCRIPTION ""
      ::= { traps 8 }
      ::= { traps 8 }
 
 
-	BatteryTemperatureNorm  NOTIFICATION-TYPE
+     batteryTemperatureNorm  NOTIFICATION-TYPE
+     OBJECTS              { intTemp }
      STATUS               current
      STATUS               current
-     ENTERPRISE           traps
-     OBJECTS              { IntTemp }
-     DESCRIPTION
+     DESCRIPTION ""
      ::= { traps 9 }
      ::= { traps 9 }
 
 
-    BatteryTemperatureAlarm  NOTIFICATION-TYPE
+    batteryTemperatureAlarm  NOTIFICATION-TYPE
+     OBJECTS              { intTemp }
      STATUS               current
      STATUS               current
-     ENTERPRISE           traps
-     OBJECTS              { IntTemp }
-     DESCRIPTION
+     DESCRIPTION ""
      ::= { traps 10 }
      ::= { traps 10 }
 	 
 	 
-	LineAlarm  NOTIFICATION-TYPE
+     lineAlarm  NOTIFICATION-TYPE
+     OBJECTS              { inVoltVAC }
      STATUS               current
      STATUS               current
-     ENTERPRISE           traps
-     OBJECTS              { InVoltVAC }
-     DESCRIPTION
+     DESCRIPTION ""
      ::= { traps 11 }
      ::= { traps 11 }
 
 
-    LineNorm  NOTIFICATION-TYPE
+    lineNorm  NOTIFICATION-TYPE
+     OBJECTS              { inVoltVAC }
      STATUS               current
      STATUS               current
-     ENTERPRISE           traps
-     OBJECTS              { InVoltVAC }
-     DESCRIPTION
+     DESCRIPTION ""
      ::= { traps 12 } 
      ::= { traps 12 } 
 
 
-	LowBatAlarm  NOTIFICATION-TYPE
+     lowBatAlarm  NOTIFICATION-TYPE
+     OBJECTS              { batCap }
      STATUS               current
      STATUS               current
-     ENTERPRISE           traps
-     OBJECTS              { BatCap }
-     DESCRIPTION
+     DESCRIPTION ""
      ::= { traps 13 }
      ::= { traps 13 }
 
 
-    LowBatNorm  NOTIFICATION-TYPE
+     lowBatNorm  NOTIFICATION-TYPE
+     OBJECTS              { batCap }
      STATUS               current
      STATUS               current
-     ENTERPRISE           traps
-     OBJECTS              { BatCap }
-     DESCRIPTION
+     DESCRIPTION ""
      ::= { traps 14 }
      ::= { traps 14 }
 	 
 	 
-	PowerAlarm  NOTIFICATION-TYPE
+     powerAlarm  NOTIFICATION-TYPE
+     OBJECTS              { power }
      STATUS               current
      STATUS               current
-     ENTERPRISE           traps
-     OBJECTS              { Power }
-     DESCRIPTION
+     DESCRIPTION ""
      ::= { traps 15 }
      ::= { traps 15 }
 
 
-    PowerNorm  NOTIFICATION-TYPE
+    powerNorm  NOTIFICATION-TYPE
+     OBJECTS              { power }
      STATUS               current
      STATUS               current
-     ENTERPRISE           traps
-     OBJECTS              { Power }
-     DESCRIPTION
+     DESCRIPTION ""
      ::= { traps 16 }
      ::= { traps 16 }
 
 
 	ConnectMonitorAlarm  NOTIFICATION-TYPE
 	ConnectMonitorAlarm  NOTIFICATION-TYPE
+     OBJECTS              { connectMonitor }
      STATUS               current
      STATUS               current
-     ENTERPRISE           traps
-     OBJECTS              { ConnectMonitor }
-     DESCRIPTION
+     DESCRIPTION ""
      ::= { traps 17 }
      ::= { traps 17 }
 	 
 	 
-	ConnectMonitorNorm  NOTIFICATION-TYPE
+     connectMonitorNorm  NOTIFICATION-TYPE
+     OBJECTS              { connectMonitor }
      STATUS               current
      STATUS               current
-     ENTERPRISE           traps
-     OBJECTS              { ConnectMonitor }
-     DESCRIPTION
+     DESCRIPTION ""
      ::= { traps 18 }
      ::= { traps 18 }
      
      
-     BatteryConnectAlarm  NOTIFICATION-TYPE
+     batteryConnectAlarm  NOTIFICATION-TYPE
+     OBJECTS              { batCap }
      STATUS               current
      STATUS               current
-     ENTERPRISE           traps
-     OBJECTS              { BatCap }
-     DESCRIPTION
+     DESCRIPTION ""
      ::= { traps 19 }
      ::= { traps 19 }
 
 
-    BatteryConnectNorm  NOTIFICATION-TYPE
+    batteryConnectNorm  NOTIFICATION-TYPE
+     OBJECTS              { batCap }
      STATUS               current
      STATUS               current
-     ENTERPRISE           traps
-     OBJECTS              { BatCap }
-     DESCRIPTION
+     DESCRIPTION ""
      ::= { traps 20 }	
      ::= { traps 20 }	
 	
 	
 END
 END
 
 
-

+ 126 - 144
docs/SmartUPS _bt6706.MIB

@@ -1,165 +1,178 @@
-RoTeK-swt-BT-BT-6702-signals-MIB DEFINITIONS ::= BEGIN
+RoTeK-swt-BT-BT-6706-signals-MIB DEFINITIONS ::= BEGIN
+
+IMPORTS
+	enterprises, NOTIFICATION-TYPE
+		FROM SNMPV2-SMI;
 
 
     rotek           OBJECT IDENTIFIER ::= { enterprises 41752 }
     rotek           OBJECT IDENTIFIER ::= { enterprises 41752 }
     swt             OBJECT IDENTIFIER ::= { rotek 911 }
     swt             OBJECT IDENTIFIER ::= { rotek 911 }
-    BT-6702         OBJECT IDENTIFIER ::= { swt 3 }
-    signals         OBJECT IDENTIFIER ::= { BT-6702 1 }
-    traps           OBJECT IDENTIFIER ::= { BT-6702 2 }
+    BT-6706         OBJECT IDENTIFIER ::= { swt 4 }
+    signals         OBJECT IDENTIFIER ::= { BT-6706 1 }
+    traps           OBJECT IDENTIFIER ::= { BT-6706 2 }
 
 
 	
 	
-	FWVersion OBJECT-TYPE
+    fwVersion OBJECT-TYPE
     SYNTAX  OCTET STRING
     SYNTAX  OCTET STRING
-    ACCESS  read
+    MAX-ACCESS  read-only
     STATUS  current
     STATUS  current
     DESCRIPTION
     DESCRIPTION
     "FWVersion" 
     "FWVersion" 
     ::= { signals 1 }
     ::= { signals 1 }
 
 
-	RestoreSignal OBJECT-TYPE
+    restoreSignal OBJECT-TYPE
     SYNTAX  INTEGER
     SYNTAX  INTEGER
-    ACCESS  write
+    MAX-ACCESS  write-only
     STATUS  current
     STATUS  current
     DESCRIPTION
     DESCRIPTION
     "Restore settings
     "Restore settings
     1 - restore settings"
     1 - restore settings"
     ::= { signals 2 }
     ::= { signals 2 }
 	
 	
-	RebootSignal OBJECT-TYPE
+    rebootSignal OBJECT-TYPE
     SYNTAX  INTEGER
     SYNTAX  INTEGER
-    ACCESS  write
+    MAX-ACCESS  write-only
     STATUS  current
     STATUS  current
     DESCRIPTION
     DESCRIPTION
     "Reboot device: 
     "Reboot device: 
     1 - reboot"
     1 - reboot"
     ::= { signals 3 }
     ::= { signals 3 }
     
     
-    UPSModel OBJECT-TYPE
+    upsModel OBJECT-TYPE
     SYNTAX  OCTET STRING
     SYNTAX  OCTET STRING
-    ACCESS  read
+    MAX-ACCESS  read-only
     STATUS  current
     STATUS  current
     DESCRIPTION
     DESCRIPTION
     "UPS model" 
     "UPS model" 
     ::= { signals 4 }
     ::= { signals 4 }
     
     
-    DO1 OBJECT-TYPE
+    do1 OBJECT-TYPE
     SYNTAX  OCTET STRING
     SYNTAX  OCTET STRING
-    ACCESS  read-write
+    MAX-ACCESS  read-write
     STATUS  current
     STATUS  current
     DESCRIPTION
     DESCRIPTION
     "0 - open relay1
     "0 - open relay1
     1 - close relay1" 
     1 - close relay1" 
     ::= { signals 5 }
     ::= { signals 5 }
     
     
-    DO2 OBJECT-TYPE
+    do2 OBJECT-TYPE
     SYNTAX  OCTET STRING
     SYNTAX  OCTET STRING
-    ACCESS  read-write
+    MAX-ACCESS  read-write
     STATUS  current
     STATUS  current
     DESCRIPTION
     DESCRIPTION
     "0 - open relay2 
     "0 - open relay2 
     1 - close relay2" 
     1 - close relay2" 
     ::= { signals 6 }
     ::= { signals 6 }
     
     
-    BatTest OBJECT-TYPE
+    do3 OBJECT-TYPE
+    SYNTAX  OCTET STRING
+    MAX-ACCESS  read-write
+    STATUS  current
+    DESCRIPTION
+    "0 - open relay3 
+    1 - close relay3" 
+    ::= { signals 7 }
+    
+    batTest OBJECT-TYPE
     SYNTAX  INTEGER
     SYNTAX  INTEGER
-    ACCESS  write
+    MAX-ACCESS  write-only
     STATUS  current
     STATUS  current
     DESCRIPTION
     DESCRIPTION
     "0 - cancel test
     "0 - cancel test
     1-99 - run test to x minutes
     1-99 - run test to x minutes
     100 - run test to 10 seconds
     100 - run test to 10 seconds
     999 - test till charging"
     999 - test till charging"
-    ::= { signals 7 }
+    ::= { signals 8 }
     
     
-    Shutdown OBJECT-TYPE
+    shutdown OBJECT-TYPE
     SYNTAX  OCTET STRING
     SYNTAX  OCTET STRING
-    ACCESS  write
+    MAX-ACCESS  write-only
     STATUS  current
     STATUS  current
     DESCRIPTION
     DESCRIPTION
     "Control of shut down UPS load:
     "Control of shut down UPS load:
 	0 - stop shut down load
 	0 - stop shut down load
 	n - shut down load in n minutes
 	n - shut down load in n minutes
 	n: 0.2, 0.3, .., 1, 2, .., 10"
 	n: 0.2, 0.3, .., 1, 2, .., 10"
-    ::= { signals 8 }
+    ::= { signals 9 }
 	
 	
-	DI0 OBJECT-TYPE
+    di0 OBJECT-TYPE
     SYNTAX  OCTET STRING
     SYNTAX  OCTET STRING
-    ACCESS  read
+    MAX-ACCESS  read-only
     STATUS  current
     STATUS  current
     DESCRIPTION
     DESCRIPTION
     "State of dry input
     "State of dry input
     0 - close dry input
     0 - close dry input
     1 - open dry input" 
     1 - open dry input" 
-    ::= { signals 9 }
+    ::= { signals 10 }
 	
 	
-	IntTemp OBJECT-TYPE
+    intTemp OBJECT-TYPE
     SYNTAX  OCTET STRING
     SYNTAX  OCTET STRING
-    ACCESS  read
+    MAX-ACCESS  read-only
     STATUS  current
     STATUS  current
     DESCRIPTION
     DESCRIPTION
     "Internal temperature" 
     "Internal temperature" 
-    ::= { signals 10 }
+    ::= { signals 11 }
 	
 	
-	InFreq OBJECT-TYPE
+    inFreq OBJECT-TYPE
     SYNTAX  OCTET STRING
     SYNTAX  OCTET STRING
-    ACCESS  read
+    MAX-ACCESS  read-only
     STATUS  current
     STATUS  current
     DESCRIPTION
     DESCRIPTION
     "Input frequency, Hz" 
     "Input frequency, Hz" 
-    ::= { signals 11 }
+    ::= { signals 12 }
 	
 	
-	InVoltVAC OBJECT-TYPE
+    inVoltVAC OBJECT-TYPE
     SYNTAX  OCTET STRING
     SYNTAX  OCTET STRING
-    ACCESS  read
+    MAX-ACCESS  read-only
     STATUS  current
     STATUS  current
     DESCRIPTION
     DESCRIPTION
     "Input voltage" 
     "Input voltage" 
-    ::= { signals 12 }
+    ::= { signals 13 }
 	
 	
-	OutVoltVAC OBJECT-TYPE
+    outVoltVAC OBJECT-TYPE
     SYNTAX  OCTET STRING
     SYNTAX  OCTET STRING
-    ACCESS  read
+    MAX-ACCESS  read-only
     STATUS  current
     STATUS  current
     DESCRIPTION
     DESCRIPTION
     "Output voltage" 
     "Output voltage" 
-    ::= { signals 13 }
+    ::= { signals 14 }
 	
 	
-	Power OBJECT-TYPE
+    power OBJECT-TYPE
     SYNTAX  OCTET STRING
     SYNTAX  OCTET STRING
-    ACCESS  read
+    MAX-ACCESS  read-only
     STATUS  current
     STATUS  current
     DESCRIPTION
     DESCRIPTION
     "Power, %" 
     "Power, %" 
-    ::= { signals 14 }
+    ::= { signals 15 }
 	
 	
-	BatCap OBJECT-TYPE
+    batCap OBJECT-TYPE
     SYNTAX  OCTET STRING
     SYNTAX  OCTET STRING
-    ACCESS  read
+    MAX-ACCESS  read-only
     STATUS  current
     STATUS  current
     DESCRIPTION
     DESCRIPTION
     "Battery capacity, %" 
     "Battery capacity, %" 
-    ::= { signals 15 }
+    ::= { signals 16 }
     
     
-    BatTime OBJECT-TYPE
+    batTime OBJECT-TYPE
     SYNTAX  OCTET STRING
     SYNTAX  OCTET STRING
-    ACCESS  read
+    MAX-ACCESS  read-only
     STATUS  current
     STATUS  current
     DESCRIPTION
     DESCRIPTION
     "Rest working time of battery, min" 
     "Rest working time of battery, min" 
-    ::= { signals 16 }
+    ::= { signals 17 }
 		
 		
-	ConnectMonitor OBJECT-TYPE
+    connectMonitor OBJECT-TYPE
     SYNTAX  OCTET STRING
     SYNTAX  OCTET STRING
-    ACCESS  read
+    MAX-ACCESS  read-only
     STATUS  current
     STATUS  current
     DESCRIPTION
     DESCRIPTION
     "Connect status:
     "Connect status:
 	0 - normal;
 	0 - normal;
 	1 - connect fail" 
 	1 - connect fail" 
-    ::= { signals 17 }
+    ::= { signals 18 }
     
     
-    Alarms OBJECT-TYPE
+    alarms OBJECT-TYPE
     SYNTAX  OCTET STRING
     SYNTAX  OCTET STRING
-    ACCESS  read
+    MAX-ACCESS  read-only
     STATUS  current
     STATUS  current
     DESCRIPTION
     DESCRIPTION
     "bit 7 - utility fail
     "bit 7 - utility fail
@@ -170,166 +183,135 @@ RoTeK-swt-BT-BT-6702-signals-MIB DEFINITIONS ::= BEGIN
 	bit 2 - Test in Progress
 	bit 2 - Test in Progress
 	bit 1 - Shutdown Active
 	bit 1 - Shutdown Active
 	bit 0 - Beeper On" 
 	bit 0 - Beeper On" 
-    ::= { signals 18 }
-
-    DO3 OBJECT-TYPE
-    SYNTAX  OCTET STRING
-    ACCESS  read-write
-    STATUS  current
-    DESCRIPTION
-    "0 - open relay2 
-    1 - close relay2" 
     ::= { signals 19 }
     ::= { signals 19 }
 
 
 -- DEVICE TRAPS
 -- DEVICE TRAPS
 
 
-	FWVersionUpdate  NOTIFICATION-TYPE
+     fwVersionUpdate  NOTIFICATION-TYPE
+     OBJECTS              { fwVersion }
      STATUS               current
      STATUS               current
-     ENTERPRISE           traps
-     OBJECTS              { FWVersion }
-     DESCRIPTION
+     DESCRIPTION ""
      ::= { traps 1 }
      ::= { traps 1 }
 
 
-    FWVersionUpdated  NOTIFICATION-TYPE
+    fwVersionUpdated  NOTIFICATION-TYPE
+     OBJECTS              { fwVersion }
      STATUS               current
      STATUS               current
-     ENTERPRISE           traps
-     OBJECTS              { FWVersion }
-     DESCRIPTION
+     DESCRIPTION ""
      ::= { traps 2 }
      ::= { traps 2 }
 
 
-	DeviceRestored  NOTIFICATION-TYPE
+     deviceRestored  NOTIFICATION-TYPE
+     OBJECTS              { restoreSignal }
      STATUS               current
      STATUS               current
-     ENTERPRISE           traps
-     OBJECTS              { RestoreSignal }
-     DESCRIPTION
+     DESCRIPTION ""
      ::= { traps 3 }
      ::= { traps 3 }
 
 
-    DeviceRebooted  NOTIFICATION-TYPE
+    deviceRebooted  NOTIFICATION-TYPE
+     OBJECTS              { rebootSignal }
      STATUS               current
      STATUS               current
-     ENTERPRISE           traps
-     OBJECTS              { RebootSignal }
-     DESCRIPTION
+     DESCRIPTION ""
      ::= { traps 4 }
      ::= { traps 4 }
 
 
-	DI0Norm  NOTIFICATION-TYPE
+     di0Norm  NOTIFICATION-TYPE
+     OBJECTS              { di0 }
      STATUS               current
      STATUS               current
-     ENTERPRISE           traps
-     OBJECTS              { DI0 }
-     DESCRIPTION
+     DESCRIPTION ""
      ::= { traps 5 }
      ::= { traps 5 }
 
 
     DI0Alarm  NOTIFICATION-TYPE
     DI0Alarm  NOTIFICATION-TYPE
+     OBJECTS              { di0 }
      STATUS               current
      STATUS               current
-     ENTERPRISE           traps
-     OBJECTS              { DI0 }
-     DESCRIPTION
+     DESCRIPTION ""
      ::= { traps 6 }
      ::= { traps 6 }
      
      
-     DO1Toggled  NOTIFICATION-TYPE
+     do1Toggled  NOTIFICATION-TYPE
+     OBJECTS              { do1 }
      STATUS               current
      STATUS               current
-     ENTERPRISE           traps
-     OBJECTS              { DO1 }
-     DESCRIPTION
+     DESCRIPTION ""
      ::= { traps 7 }
      ::= { traps 7 }
 
 
-    DO2Toggled  NOTIFICATION-TYPE
+    do2Toggled  NOTIFICATION-TYPE
+     OBJECTS              { do2 }
      STATUS               current
      STATUS               current
-     ENTERPRISE           traps
-     OBJECTS              { DO2 }
-     DESCRIPTION
+     DESCRIPTION ""
      ::= { traps 8 }
      ::= { traps 8 }
-
-    DO3Toggled  NOTIFICATION-TYPE
+     
+     do3Toggled  NOTIFICATION-TYPE
+     OBJECTS              { do3 }
      STATUS               current
      STATUS               current
-     ENTERPRISE           traps
-     OBJECTS              { DO3 }
-     DESCRIPTION
+     DESCRIPTION ""
      ::= { traps 9 }
      ::= { traps 9 }
 
 
-	BatteryTemperatureNorm  NOTIFICATION-TYPE
+     batteryTemperatureNorm  NOTIFICATION-TYPE
+     OBJECTS              { intTemp }
      STATUS               current
      STATUS               current
-     ENTERPRISE           traps
-     OBJECTS              { IntTemp }
-     DESCRIPTION
+     DESCRIPTION ""
      ::= { traps 10 }
      ::= { traps 10 }
 
 
-    BatteryTemperatureAlarm  NOTIFICATION-TYPE
+    batteryTemperatureAlarm  NOTIFICATION-TYPE
+     OBJECTS              { intTemp }
      STATUS               current
      STATUS               current
-     ENTERPRISE           traps
-     OBJECTS              { IntTemp }
-     DESCRIPTION
+     DESCRIPTION ""
      ::= { traps 11 }
      ::= { traps 11 }
 	 
 	 
-	LineAlarm  NOTIFICATION-TYPE
+     lineAlarm  NOTIFICATION-TYPE
+     OBJECTS              { inVoltVAC }
      STATUS               current
      STATUS               current
-     ENTERPRISE           traps
-     OBJECTS              { InVoltVAC }
-     DESCRIPTION
+     DESCRIPTION ""
      ::= { traps 12 }
      ::= { traps 12 }
 
 
-    LineNorm  NOTIFICATION-TYPE
+    lineNorm  NOTIFICATION-TYPE
+     OBJECTS              { inVoltVAC }
      STATUS               current
      STATUS               current
-     ENTERPRISE           traps
-     OBJECTS              { InVoltVAC }
-     DESCRIPTION
+     DESCRIPTION ""
      ::= { traps 13 } 
      ::= { traps 13 } 
 
 
-	LowBatAlarm  NOTIFICATION-TYPE
+     lowBatAlarm  NOTIFICATION-TYPE
+     OBJECTS              { batCap }
      STATUS               current
      STATUS               current
-     ENTERPRISE           traps
-     OBJECTS              { BatCap }
-     DESCRIPTION
+     DESCRIPTION ""
      ::= { traps 14 }
      ::= { traps 14 }
 
 
-    LowBatNorm  NOTIFICATION-TYPE
+     lowBatNorm  NOTIFICATION-TYPE
+     OBJECTS              { batCap }
      STATUS               current
      STATUS               current
-     ENTERPRISE           traps
-     OBJECTS              { BatCap }
-     DESCRIPTION
+     DESCRIPTION ""
      ::= { traps 15 }
      ::= { traps 15 }
 	 
 	 
-	PowerAlarm  NOTIFICATION-TYPE
+     powerAlarm  NOTIFICATION-TYPE
+     OBJECTS              { power }
      STATUS               current
      STATUS               current
-     ENTERPRISE           traps
-     OBJECTS              { Power }
-     DESCRIPTION
+     DESCRIPTION ""
      ::= { traps 16 }
      ::= { traps 16 }
 
 
-    PowerNorm  NOTIFICATION-TYPE
+    powerNorm  NOTIFICATION-TYPE
+     OBJECTS              { power }
      STATUS               current
      STATUS               current
-     ENTERPRISE           traps
-     OBJECTS              { Power }
-     DESCRIPTION
+     DESCRIPTION ""
      ::= { traps 17 }
      ::= { traps 17 }
 
 
 	ConnectMonitorAlarm  NOTIFICATION-TYPE
 	ConnectMonitorAlarm  NOTIFICATION-TYPE
+     OBJECTS              { connectMonitor }
      STATUS               current
      STATUS               current
-     ENTERPRISE           traps
-     OBJECTS              { ConnectMonitor }
-     DESCRIPTION
+     DESCRIPTION ""
      ::= { traps 18 }
      ::= { traps 18 }
 	 
 	 
-	ConnectMonitorNorm  NOTIFICATION-TYPE
+     connectMonitorNorm  NOTIFICATION-TYPE
+     OBJECTS              { connectMonitor }
      STATUS               current
      STATUS               current
-     ENTERPRISE           traps
-     OBJECTS              { ConnectMonitor }
-     DESCRIPTION
+     DESCRIPTION ""
      ::= { traps 19 }
      ::= { traps 19 }
      
      
-     BatteryConnectAlarm  NOTIFICATION-TYPE
+     batteryConnectAlarm  NOTIFICATION-TYPE
+     OBJECTS              { batCap }
      STATUS               current
      STATUS               current
-     ENTERPRISE           traps
-     OBJECTS              { BatCap }
-     DESCRIPTION
+     DESCRIPTION ""
      ::= { traps 20 }
      ::= { traps 20 }
 
 
-    BatteryConnectNorm  NOTIFICATION-TYPE
+    batteryConnectNorm  NOTIFICATION-TYPE
+     OBJECTS              { batCap }
      STATUS               current
      STATUS               current
-     ENTERPRISE           traps
-     OBJECTS              { BatCap }
-     DESCRIPTION
+     DESCRIPTION ""
      ::= { traps 21 }	
      ::= { traps 21 }	
 	
 	
 END
 END
 
 
-

+ 9 - 1
iap/Makefile

@@ -74,7 +74,15 @@ FW_FLASH_CRC = $(shell awk '/IAP_FLASH_CRC_ADDRESS/{print $$3}' ../config/common
 
 
 -include ../Makefile.inc.stm32
 -include ../Makefile.inc.stm32
 
 
-prebuild:
+#Building Web UI FS
+WUI_DIR = ../web_interface/dist/upload
+FSDATA_DIR = ./Modules/Ethernet
+
+$(FSDATA_DIR)/fsdata.c: $(WUI_DIR)/*
+	@../docs/makefsdata.pl $(FSDATA_DIR) $(WUI_DIR)
+
+
+prebuild: $(FSDATA_DIR)/fsdata.c
 	@grep -wl --include *.h --include *.c "DEVICE_MAC" ./ -R | xargs touch
 	@grep -wl --include *.h --include *.c "DEVICE_MAC" ./ -R | xargs touch
 	@grep -wl --include *.h --include *.c "SWOTRACE" ./ ../shared -R | xargs touch
 	@grep -wl --include *.h --include *.c "SWOTRACE" ./ ../shared -R | xargs touch
 	
 	

+ 725 - 702
iap/Modules/Ethernet/fsdata.c

@@ -1,733 +1,756 @@
-#include "lwip/def.h"
-#include "fsdata.h"
-
-
-#define file_NULL (struct fsdata_file *) NULL
-
-
-static const unsigned int dummy_align__error_html = 0;
-static const unsigned char data__error_html[] = {
-/* /error.html (12 chars) */
-0x2f,0x65,0x72,0x72,0x6f,0x72,0x2e,0x68,0x74,0x6d,0x6c,0x00,
-
-/* HTTP header */
+#include "lwip/def.h"
+#include "fsdata.h"
+
+
+#define file_NULL (struct fsdata_file *) NULL
+
+
+static const unsigned int dummy_align__upload_js = 0;
+static const unsigned char data__upload_js[] = {
+/* /upload.js (10 chars) */
+0x2f,0x75,0x70,0x6c,0x6f,0x61,0x64,0x2e,0x6a,0x73,0x00,
+
+/* HTTP header */
+
 /* "HTTP/1.1 200 OK
 /* "HTTP/1.1 200 OK
-" (17 bytes) */
-0x48,0x54,0x54,0x50,0x2f,0x31,0x2e,0x31,0x20,0x32,0x30,0x30,0x20,0x4f,0x4b,0x0d,
-0x0a,
+" (17 bytes) */
+0x48,0x54,0x54,0x50,0x2f,0x31,0x2e,0x31,0x20,0x32,0x30,0x30,0x20,0x4f,0x4b,0x0d,
+0x0a,
 /* "Server: lwIP/1.3.1 (http://savannah.nongnu.org/projects/lwip)
 /* "Server: lwIP/1.3.1 (http://savannah.nongnu.org/projects/lwip)
-" (63 bytes) */
-0x53,0x65,0x72,0x76,0x65,0x72,0x3a,0x20,0x6c,0x77,0x49,0x50,0x2f,0x31,0x2e,0x33,
-0x2e,0x31,0x20,0x28,0x68,0x74,0x74,0x70,0x3a,0x2f,0x2f,0x73,0x61,0x76,0x61,0x6e,
-0x6e,0x61,0x68,0x2e,0x6e,0x6f,0x6e,0x67,0x6e,0x75,0x2e,0x6f,0x72,0x67,0x2f,0x70,
-0x72,0x6f,0x6a,0x65,0x63,0x74,0x73,0x2f,0x6c,0x77,0x69,0x70,0x29,0x0d,0x0a,
-/* "Content-Length: 578
-" (18+ bytes) */
-0x43,0x6f,0x6e,0x74,0x65,0x6e,0x74,0x2d,0x4c,0x65,0x6e,0x67,0x74,0x68,0x3a,0x20,
-0x35,0x37,0x38,0x0d,0x0a,
+" (63 bytes) */
+0x53,0x65,0x72,0x76,0x65,0x72,0x3a,0x20,0x6c,0x77,0x49,0x50,0x2f,0x31,0x2e,0x33,
+0x2e,0x31,0x20,0x28,0x68,0x74,0x74,0x70,0x3a,0x2f,0x2f,0x73,0x61,0x76,0x61,0x6e,
+0x6e,0x61,0x68,0x2e,0x6e,0x6f,0x6e,0x67,0x6e,0x75,0x2e,0x6f,0x72,0x67,0x2f,0x70,
+0x72,0x6f,0x6a,0x65,0x63,0x74,0x73,0x2f,0x6c,0x77,0x69,0x70,0x29,0x0d,0x0a,
+/* "Content-Length: 846
+" (21 bytes) */
+0x43,0x6f,0x6e,0x74,0x65,0x6e,0x74,0x2d,0x4c,0x65,0x6e,0x67,0x74,0x68,0x3a,0x20,
+0x38,0x34,0x36,0x0d,0x0a,
 /* "Connection: Close
 /* "Connection: Close
-" (19 bytes) */
-0x43,0x6f,0x6e,0x6e,0x65,0x63,0x74,0x69,0x6f,0x6e,0x3a,0x20,0x43,0x6c,0x6f,0x73,
-0x65,0x0d,0x0a,
-/* "Content-type: text/html
+" (19 bytes) */
+0x43,0x6f,0x6e,0x6e,0x65,0x63,0x74,0x69,0x6f,0x6e,0x3a,0x20,0x43,0x6c,0x6f,0x73,
+0x65,0x0d,0x0a,
+/* "Content-type: application/x-javascript
 Content-Encoding: gzip
 Content-Encoding: gzip
-
-" (51 bytes) */
-0x43,0x6f,0x6e,0x74,0x65,0x6e,0x74,0x2d,0x74,0x79,0x70,0x65,0x3a,0x20,0x74,0x65,
-0x78,0x74,0x2f,0x68,0x74,0x6d,0x6c,0x0d,0x0a,0x43,0x6f,0x6e,0x74,0x65,0x6e,0x74,
-0x2d,0x45,0x6e,0x63,0x6f,0x64,0x69,0x6e,0x67,0x3a,0x20,0x67,0x7a,0x69,0x70,0x0d,
-0x0a,0x0d,0x0a,
-/* raw file data (578 bytes) */
-0x1f,0x8b,0x08,0x00,0x00,0x00,0x00,0x00,0x04,0x0a,0x6d,0x93,0xcd,0x6e,0xd4,0x30,
-0x10,0xc7,0xef,0x48,0xbc,0x83,0x09,0x17,0x90,0x36,0x9b,0xae,0xa0,0x12,0xb4,0x71,
-0x24,0x54,0x7a,0xe0,0x04,0x07,0x90,0xe0,0xe8,0x24,0xde,0x8d,0x8b,0xe3,0x04,0xc7,
-0xd9,0xed,0xde,0x68,0x39,0x00,0x27,0xc4,0x0b,0xd0,0x57,0xd8,0xb6,0x84,0x5d,0xba,
-0x74,0xfb,0x0a,0x93,0x37,0x62,0xec,0x65,0x3f,0x54,0xa1,0x48,0xf1,0x78,0x66,0x3c,
-0xff,0xf1,0x2f,0x93,0xf0,0xde,0xf3,0x97,0x07,0xaf,0xdf,0xbd,0x3a,0x24,0x99,0xc9,
-0x65,0x74,0xf7,0x4e,0x68,0x57,0x22,0x99,0x1a,0x50,0xcf,0x73,0x7b,0xce,0x52,0xbb,
-0xe6,0xdc,0x30,0x92,0x64,0x4c,0x57,0xdc,0x50,0xaf,0x36,0x7d,0xff,0x89,0x8b,0x3b,
-0x7f,0x66,0x4c,0xe9,0xf3,0x0f,0xb5,0x18,0x52,0xef,0xad,0xff,0xe6,0x99,0x7f,0x50,
-0xe4,0x25,0x33,0x22,0x96,0xdc,0x23,0x49,0xa1,0x0c,0x57,0x78,0xe8,0xc5,0x21,0xe5,
-0xe9,0x80,0x6f,0x8e,0x29,0x96,0x73,0xea,0x0d,0x05,0x1f,0x95,0x85,0x36,0x5b,0x99,
-0x23,0x91,0x9a,0x8c,0xa6,0x7c,0x28,0x12,0xee,0xbb,0x4d,0x87,0x08,0x25,0x8c,0x60,
-0xd2,0xaf,0x12,0x26,0x39,0xed,0x75,0x77,0x3a,0x24,0x67,0xc7,0x22,0xaf,0xf3,0x6d,
-0x57,0x5d,0x71,0xed,0xf6,0x0c,0xb5,0xe9,0x8e,0xd3,0x92,0x42,0xbd,0x27,0x9a,0x4b,
-0xea,0x55,0x66,0x2c,0x79,0x95,0x71,0x8e,0x62,0x99,0xe6,0x7d,0xbc,0x48,0x29,0x0b,
-0x96,0x76,0x93,0xaa,0x72,0xa9,0x46,0x18,0xc9,0x23,0xf8,0xd1,0x7e,0x81,0x19,0x9c,
-0xc3,0x15,0x4c,0x08,0x2c,0xd0,0xb8,0xc6,0xf7,0x05,0xcc,0xa1,0x41,0x6b,0xd6,0x7e,
-0x0b,0x83,0x65,0x22,0x72,0x09,0xb2,0x7f,0x80,0xe2,0x22,0x1d,0x5b,0x50,0x8a,0x0d,
-0x49,0x22,0x59,0x55,0x51,0x0f,0xcd,0x98,0x69,0x2f,0x0a,0x03,0xb4,0x6c,0x2c,0x15,
-0xeb,0xd8,0x48,0xb3,0xb2,0xe4,0x18,0x44,0x77,0xd6,0x43,0xc9,0xdb,0x2a,0xd0,0x10,
-0xb8,0x69,0x3f,0xc2,0xc2,0xf5,0x72,0x81,0xbd,0xcc,0x50,0xac,0x77,0xab,0xcc,0xb2,
-0x7f,0xbf,0x5f,0xe8,0xdc,0x95,0xda,0x52,0x18,0xd4,0x22,0x45,0xfc,0xee,0xce,0xd4,
-0x33,0xfc,0xd8,0xf8,0x4c,0x8a,0x81,0xda,0x4b,0xf0,0x6b,0x70,0xbd,0x6f,0xf3,0x09,
-0x09,0xcb,0x55,0x46,0x52,0xc8,0x42,0xef,0xdd,0x4f,0x9f,0xee,0x3e,0x7a,0xdc,0xc7,
-0x68,0x18,0x47,0x70,0x86,0x0d,0xcc,0xfe,0x83,0xc0,0x3a,0x5d,0x73,0x70,0x89,0x19,
-0x13,0xf8,0x83,0x8f,0x65,0x74,0x09,0x8b,0x65,0x76,0xd3,0x9e,0xc0,0x0d,0x34,0xed,
-0xe7,0x15,0x32,0x82,0xfc,0x16,0x30,0xb5,0xfc,0xf0,0x2a,0x73,0x07,0x76,0x43,0xb9,
-0x1b,0x06,0x31,0x0a,0xea,0x88,0xc0,0x19,0xa6,0xfd,0xc2,0x92,0xf3,0xf6,0x13,0xfc,
-0x6e,0x4f,0xda,0x53,0x98,0x74,0x50,0x0c,0xbd,0x4b,0xc1,0x73,0xe7,0x3f,0xb5,0x78,
-0x9a,0xf6,0x6b,0xfb,0x9d,0xb8,0x06,0xa6,0xc4,0x4a,0xa1,0xd9,0xc0,0x94,0x84,0x55,
-0xc9,0x14,0x11,0x29,0xf5,0x92,0xa2,0x56,0xc6,0x57,0x75,0x1e,0x5b,0xd4,0xbb,0x61,
-0x60,0x23,0x11,0xc1,0xe6,0x1a,0xb8,0xc2,0x42,0xd7,0xf0,0x33,0x0c,0x4a,0xcb,0x34,
-0x40,0x72,0xdb,0x6b,0x95,0x68,0x51,0x1a,0x62,0xc6,0x25,0x8e,0xa8,0x85,0x17,0x1c,
-0xb1,0x21,0x5b,0x7a,0x11,0xaa,0x4e,0xd6,0xb3,0x73,0x84,0xa3,0x83,0x85,0x5d,0xbe,
-0xad,0xb0,0xb6,0x08,0x8e,0x3e,0xca,0xa7,0xc5,0x48,0x3d,0x78,0xb8,0x6f,0x35,0xd6,
-0xa1,0x8d,0xdc,0x6a,0x6c,0x02,0xf7,0x03,0xfe,0x05,0x67,0x63,0x56,0xc9,0x90,0x03,
-0x00,0x00,};
-
-static const unsigned int dummy_align__favicon_ico = 1;
-static const unsigned char data__favicon_ico[] = {
-/* /favicon.ico (13 chars) */
-0x2f,0x66,0x61,0x76,0x69,0x63,0x6f,0x6e,0x2e,0x69,0x63,0x6f,0x00,0x00,0x00,0x00,
-
-/* HTTP header */
+" (64 bytes) */
+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,0x78,0x2d,0x6a,0x61,0x76,0x61,
+0x73,0x63,0x72,0x69,0x70,0x74,0x0d,0x0a,0x43,0x6f,0x6e,0x74,0x65,0x6e,0x74,0x2d,
+0x45,0x6e,0x63,0x6f,0x64,0x69,0x6e,0x67,0x3a,0x20,0x67,0x7a,0x69,0x70,0x0d,0x0a,
+/* "ETag: "nDSMsRN636l3uGC"
+" (25 bytes) */
+0x45,0x54,0x61,0x67,0x3a,0x20,0x22,0x6e,0x44,0x53,0x4d,0x73,0x52,0x4e,0x36,0x33,
+0x36,0x6c,0x33,0x75,0x47,0x43,0x22,0x0d,0x0a,0x0d,0x0a,
+
+/* raw file data (846 bytes) */
+0x1f,0x8b,0x08,0x00,0x00,0x00,0x00,0x00,0x04,0x0a,0xb5,0x54,0xd1,0x4a,0x1b,0x41,
+0x14,0xfd,0x95,0xc9,0x20,0xb2,0x4b,0xd6,0x6d,0xa4,0x08,0xc5,0xed,0x54,0x6a,0xb1,
+0xad,0xa0,0xad,0x94,0x50,0x04,0x91,0x32,0xd9,0xbd,0x89,0x53,0x37,0x33,0xe9,0xee,
+0xac,0x12,0x24,0xa0,0xb1,0xa5,0x85,0x0a,0x85,0xfe,0x40,0x5f,0xfa,0x01,0x22,0xb5,
+0xd5,0xb6,0xe6,0x1b,0x66,0xfe,0xa8,0x77,0x76,0x13,0x89,0x82,0x8f,0x7d,0xd8,0x64,
+0x77,0xe6,0xde,0xb9,0xe7,0x9e,0x73,0xee,0xb4,0x0b,0x19,0x6b,0xa1,0x24,0x99,0xf1,
+0xc0,0x3f,0xc8,0x40,0x17,0x99,0x24,0x89,0x8a,0x8b,0x2e,0x48,0x1d,0x76,0x40,0xaf,
+0xa4,0xe0,0x5e,0x97,0xfb,0xab,0x09,0x46,0x0c,0xda,0x93,0xf8,0x58,0x15,0x52,0x27,
+0x6a,0x5f,0x7a,0xfe,0xc1,0x1e,0xcf,0x08,0xb0,0x85,0x28,0x07,0xbd,0x2a,0x35,0x64,
+0x7b,0x3c,0xf5,0x26,0x81,0xb8,0x3d,0x3e,0x75,0x9e,0x31,0x98,0x9d,0xf5,0xf6,0x85,
+0xc4,0xb4,0x30,0x55,0x31,0x77,0x85,0xc3,0x9d,0x0c,0xda,0x8c,0xde,0xa3,0x7e,0x00,
+0x8f,0x1a,0xb3,0xb3,0x30,0x37,0x17,0xdc,0x55,0x9f,0x96,0x45,0xe7,0x64,0xd1,0x6d,
+0x41,0x46,0xfd,0x50,0x48,0x09,0xd9,0xf3,0xe6,0xfa,0x1a,0x83,0x00,0x06,0xc1,0x3c,
+0xdc,0x9f,0x02,0x88,0xd8,0x9f,0x3c,0x5b,0x75,0x5d,0x39,0x78,0x3a,0x90,0x81,0x8a,
+0x44,0xdb,0xa3,0x1d,0xd5,0xe2,0xf1,0x6e,0x18,0x77,0x04,0x45,0x40,0x4b,0x9e,0x66,
+0xb1,0x92,0x6d,0x91,0x75,0x3d,0x6a,0xbe,0xda,0xcf,0xc4,0x1e,0x9b,0x33,0x73,0x6e,
+0x0f,0xcd,0xb9,0xb9,0x72,0x9f,0x1f,0xed,0xd0,0x8c,0x88,0xfd,0x60,0x46,0xf8,0x72,
+0x81,0xcf,0x39,0x19,0x07,0x5c,0xd9,0x63,0x3b,0xb4,0x27,0xf6,0xc8,0x7e,0xc1,0x25,
+0x82,0x01,0x47,0xe6,0xca,0x8c,0x70,0xd7,0xfd,0x5e,0x12,0x73,0x81,0x27,0x60,0xbc,
+0x3d,0xb4,0xef,0xf1,0xb4,0x4b,0x7b,0xb4,0x84,0x5d,0x4a,0x86,0x75,0x70,0xff,0x97,
+0x39,0xc3,0x22,0xa7,0x76,0xe8,0x12,0x87,0xe6,0xaf,0xab,0xe7,0x9e,0x90,0xfa,0x8b,
+0x9a,0xd5,0x1a,0x81,0xf6,0x2b,0xe2,0x3c,0xc5,0xc6,0x9c,0x6d,0xae,0xaf,0x3d,0xd7,
+0xba,0xf7,0x0a,0xde,0x15,0x90,0xeb,0x25,0x09,0xfb,0xe4,0xe6,0xd2,0xa2,0x5b,0x7a,
+0x8c,0x82,0xee,0xc1,0xe6,0xcb,0xd6,0x5b,0x88,0xb5,0x47,0xd7,0x45,0x9c,0xa9,0x5c,
+0xb5,0x75,0xe8,0x62,0x9b,0xcd,0x0d,0xea,0xfb,0xa1,0xea,0x81,0xf4,0xe8,0xb3,0x95,
+0x26,0x0d,0x20,0xa8,0x35,0xfc,0x40,0x85,0x39,0xc8,0xc4,0xf3,0xf1,0x23,0xe2,0x29,
+0x64,0xda,0x93,0x53,0x5c,0xbe,0xe6,0xa9,0x48,0xb8,0x06,0xc7,0x66,0x5b,0x65,0x5e,
+0xc9,0x28,0x83,0x29,0x7f,0xe4,0xcb,0xfd,0x26,0xef,0xbc,0xe0,0x5d,0xf0,0xa8,0x90,
+0xbd,0x42,0x97,0x9d,0x36,0x22,0xf9,0x50,0x87,0x29,0xc8,0x8e,0xde,0x89,0x64,0xbd,
+0x5e,0x69,0xa1,0x98,0xde,0x92,0xdb,0x81,0x60,0xb5,0xf9,0x52,0x91,0xb6,0x48,0x01,
+0xb5,0x50,0xa1,0xee,0xf7,0xb0,0x00,0x8a,0xd4,0x60,0xee,0xd3,0xad,0xe7,0xe3,0xec,
+0x31,0x17,0xa4,0xc2,0x46,0xcd,0xb7,0x8a,0x7b,0x62,0x7e,0x13,0x24,0xf7,0xd4,0x5c,
+0x9a,0x3f,0xf6,0x98,0x38,0x06,0x9d,0x80,0xbf,0x71,0xe5,0x17,0x3e,0x57,0x88,0xc2,
+0x95,0x09,0xb0,0x92,0xc3,0xcc,0x27,0xa7,0x6e,0x35,0xb6,0x43,0x89,0x60,0x5d,0x7d,
+0xce,0xd8,0x1b,0x74,0xac,0x48,0x9e,0x62,0x3d,0xd7,0x01,0x42,0x70,0xfc,0xcf,0x4c,
+0xbc,0x82,0x4e,0x8b,0x53,0x9e,0xe7,0x6e,0xaf,0xce,0x28,0x49,0x44,0xce,0x5b,0x29,
+0x24,0x34,0x6a,0x65,0xc0,0x77,0x07,0x78,0x46,0x4d,0xdc,0x06,0xf8,0xbd,0x02,0x45,
+0x68,0x9d,0xd7,0x69,0x05,0x0c,0x8d,0x71,0x6a,0xfe,0xa0,0x2b,0x7e,0x38,0x9d,0x03,
+0x52,0xca,0x7f,0x64,0x3f,0xa1,0xab,0x4a,0xb7,0xe1,0x0e,0x7a,0xeb,0xc2,0xf9,0xe6,
+0x2f,0x5a,0x6a,0xd2,0x97,0x39,0x25,0x98,0x31,0xc2,0xcc,0x9f,0xce,0x58,0x04,0x5d,
+0x36,0x2a,0x2d,0xe3,0x6c,0x3a,0x44,0xf7,0x0d,0xf1,0x60,0xe7,0x3a,0xf4,0x92,0x3d,
+0x59,0x24,0x5b,0x58,0xf3,0x66,0x43,0x08,0x60,0x1b,0x99,0xa8,0xcd,0x0f,0x06,0x95,
+0xa5,0x6a,0x8d,0x41,0x29,0xa1,0xe8,0x82,0x2a,0x74,0x74,0x3d,0x6f,0x4a,0x76,0x55,
+0x91,0x43,0x57,0xed,0x01,0x9b,0x1a,0xe0,0x38,0x05,0x9e,0x35,0xab,0x60,0x4f,0x57,
+0xff,0x7e,0x30,0x7e,0x61,0x38,0xf5,0x93,0xbd,0xa9,0x9c,0x9a,0xd3,0x70,0x3c,0x83,
+0x53,0x33,0x87,0x13,0x80,0x77,0x00,0x52,0x5b,0x8d,0xf2,0x7e,0xc6,0x7b,0x48,0x6f,
+0xae,0xfb,0x29,0x84,0xc8,0x6b,0x2f,0xe5,0x7d,0x46,0x5b,0x78,0x39,0xec,0x52,0x27,
+0xc0,0xf5,0x2d,0x73,0x67,0xd0,0x75,0x84,0xe7,0xfb,0x78,0x05,0x3c,0x80,0x05,0x7f,
+0x50,0x6a,0x7d,0x93,0x02,0x46,0x57,0x97,0x37,0xc2,0x96,0x90,0x34,0x9a,0xd6,0x55,
+0xc9,0x38,0x15,0xf1,0xee,0x74,0xb3,0x77,0x00,0xff,0xbf,0xb8,0x11,0x53,0xd1,0x4b,
+0x15,0x4f,0x96,0xb5,0xc4,0x56,0x11,0xd6,0x0e,0x97,0x9d,0x1b,0x22,0x5c,0x8b,0x74,
+0xeb,0x52,0x1e,0x27,0x3a,0xf3,0x62,0x26,0x1a,0xb9,0x00,0xa6,0x77,0x44,0x5e,0x8d,
+0xcf,0xc4,0xe8,0x83,0xe8,0x1f,0x00,0x6b,0x2a,0x2e,0xea,0x05,0x00,0x00,};
+
+static const unsigned int dummy_align__favicon_ico = 1;
+static const unsigned char data__favicon_ico[] = {
+/* /favicon.ico (12 chars) */
+0x2f,0x66,0x61,0x76,0x69,0x63,0x6f,0x6e,0x2e,0x69,0x63,0x6f,0x00,
+
+/* HTTP header */
+
 /* "HTTP/1.1 200 OK
 /* "HTTP/1.1 200 OK
-" (17 bytes) */
-0x48,0x54,0x54,0x50,0x2f,0x31,0x2e,0x31,0x20,0x32,0x30,0x30,0x20,0x4f,0x4b,0x0d,
-0x0a,
+" (17 bytes) */
+0x48,0x54,0x54,0x50,0x2f,0x31,0x2e,0x31,0x20,0x32,0x30,0x30,0x20,0x4f,0x4b,0x0d,
+0x0a,
 /* "Server: lwIP/1.3.1 (http://savannah.nongnu.org/projects/lwip)
 /* "Server: lwIP/1.3.1 (http://savannah.nongnu.org/projects/lwip)
-" (63 bytes) */
-0x53,0x65,0x72,0x76,0x65,0x72,0x3a,0x20,0x6c,0x77,0x49,0x50,0x2f,0x31,0x2e,0x33,
-0x2e,0x31,0x20,0x28,0x68,0x74,0x74,0x70,0x3a,0x2f,0x2f,0x73,0x61,0x76,0x61,0x6e,
-0x6e,0x61,0x68,0x2e,0x6e,0x6f,0x6e,0x67,0x6e,0x75,0x2e,0x6f,0x72,0x67,0x2f,0x70,
-0x72,0x6f,0x6a,0x65,0x63,0x74,0x73,0x2f,0x6c,0x77,0x69,0x70,0x29,0x0d,0x0a,
+" (63 bytes) */
+0x53,0x65,0x72,0x76,0x65,0x72,0x3a,0x20,0x6c,0x77,0x49,0x50,0x2f,0x31,0x2e,0x33,
+0x2e,0x31,0x20,0x28,0x68,0x74,0x74,0x70,0x3a,0x2f,0x2f,0x73,0x61,0x76,0x61,0x6e,
+0x6e,0x61,0x68,0x2e,0x6e,0x6f,0x6e,0x67,0x6e,0x75,0x2e,0x6f,0x72,0x67,0x2f,0x70,
+0x72,0x6f,0x6a,0x65,0x63,0x74,0x73,0x2f,0x6c,0x77,0x69,0x70,0x29,0x0d,0x0a,
 /* "Content-Length: 1150
 /* "Content-Length: 1150
-" (18+ bytes) */
-0x43,0x6f,0x6e,0x74,0x65,0x6e,0x74,0x2d,0x4c,0x65,0x6e,0x67,0x74,0x68,0x3a,0x20,
-0x31,0x31,0x35,0x30,0x0d,0x0a,
+" (22 bytes) */
+0x43,0x6f,0x6e,0x74,0x65,0x6e,0x74,0x2d,0x4c,0x65,0x6e,0x67,0x74,0x68,0x3a,0x20,
+0x31,0x31,0x35,0x30,0x0d,0x0a,
 /* "Connection: Close
 /* "Connection: Close
-" (19 bytes) */
-0x43,0x6f,0x6e,0x6e,0x65,0x63,0x74,0x69,0x6f,0x6e,0x3a,0x20,0x43,0x6c,0x6f,0x73,
-0x65,0x0d,0x0a,
+" (19 bytes) */
+0x43,0x6f,0x6e,0x6e,0x65,0x63,0x74,0x69,0x6f,0x6e,0x3a,0x20,0x43,0x6c,0x6f,0x73,
+0x65,0x0d,0x0a,
 /* "Content-type: image/x-icon
 /* "Content-type: image/x-icon
-
-" (30 bytes) */
-0x43,0x6f,0x6e,0x74,0x65,0x6e,0x74,0x2d,0x74,0x79,0x70,0x65,0x3a,0x20,0x69,0x6d,
-0x61,0x67,0x65,0x2f,0x78,0x2d,0x69,0x63,0x6f,0x6e,0x0d,0x0a,0x0d,0x0a,
-/* raw file data (1150 bytes) */
-0x00,0x00,0x01,0x00,0x01,0x00,0x10,0x10,0x00,0x00,0x00,0x00,0x20,0x00,0x68,0x04,
-0x00,0x00,0x16,0x00,0x00,0x00,0x28,0x00,0x00,0x00,0x10,0x00,0x00,0x00,0x20,0x00,
-0x00,0x00,0x01,0x00,0x20,0x00,0x00,0x00,0x00,0x00,0x40,0x04,0x00,0x00,0x00,0x00,
-0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,
-0xff,0x01,0xff,0xff,0xff,0x01,0xff,0xff,0xff,0x01,0xff,0xff,0xff,0x01,0xff,0xff,
-0xff,0x01,0xff,0xff,0xff,0x01,0xff,0xff,0xff,0x01,0xd2,0xd2,0xd2,0xff,0xd2,0xd2,
-0xd2,0xff,0xff,0xff,0xff,0x01,0xff,0xff,0xff,0x01,0xff,0xff,0xff,0x01,0xff,0xff,
-0xff,0x01,0xff,0xff,0xff,0x01,0xff,0xff,0xff,0x01,0xff,0xff,0xff,0x01,0xff,0xff,
-0xff,0x01,0xff,0xff,0xff,0x01,0xff,0xff,0xff,0x01,0xff,0xff,0xff,0x01,0xff,0xff,
-0xff,0x01,0x8d,0x8d,0x8d,0xff,0x84,0x84,0x84,0xff,0x89,0x89,0x89,0xff,0x89,0x89,
-0x89,0xff,0x84,0x84,0x84,0xff,0x8d,0x8d,0x8d,0xff,0xff,0xff,0xff,0x01,0xff,0xff,
-0xff,0x01,0xff,0xff,0xff,0x01,0xff,0xff,0xff,0x01,0xff,0xff,0xff,0x01,0xff,0xff,
-0xff,0x01,0xff,0xff,0xff,0x01,0xff,0xff,0xff,0x01,0xa4,0xa4,0xa4,0xff,0x84,0x84,
-0x84,0xff,0xae,0xae,0xae,0xff,0xff,0xff,0xff,0x01,0xff,0xff,0xff,0x01,0xff,0xff,
-0xff,0x01,0xff,0xff,0xff,0x01,0xae,0xae,0xae,0xff,0x84,0x84,0x84,0xff,0xa4,0xa4,
-0xa4,0xff,0xff,0xff,0xff,0x01,0xff,0xff,0xff,0x01,0x81,0x81,0x81,0xff,0xff,0xff,
-0xff,0x01,0xff,0xff,0xff,0x01,0xa0,0xa0,0xa0,0xff,0x9a,0x9a,0x9a,0xff,0xff,0xff,
-0xff,0x01,0xc7,0xc7,0xc7,0xff,0x8f,0x8f,0x8f,0xff,0x85,0x85,0x85,0xff,0x85,0x85,
-0x85,0xff,0x8f,0x8f,0x8f,0xff,0xca,0xca,0xca,0xff,0xff,0xff,0xff,0x01,0xd5,0xd5,
-0xd5,0xff,0xff,0xff,0xff,0x01,0x77,0x77,0x77,0xff,0xff,0xff,0xff,0x01,0xff,0xff,
-0xff,0x01,0xd5,0xd5,0xd5,0xff,0x84,0x84,0x84,0xff,0xff,0xff,0xff,0x01,0xa8,0xa8,
-0xa8,0xff,0x8c,0x8c,0x8c,0xff,0xbb,0xbb,0xbb,0xff,0xff,0xff,0xff,0x01,0xff,0xff,
-0xff,0x01,0xba,0xba,0xba,0xff,0xaf,0xaf,0xaf,0xff,0xff,0xff,0xff,0x01,0xff,0xff,
-0xff,0x01,0x65,0x64,0x5b,0xff,0xff,0xff,0xff,0x01,0xff,0xff,0xff,0x01,0xff,0xff,
-0xff,0x01,0x98,0x98,0x98,0xff,0xb0,0xb0,0xb0,0xff,0xd5,0xd5,0xd5,0xff,0x84,0x84,
-0x84,0xff,0xda,0xda,0xda,0xff,0x95,0x95,0x95,0xff,0x84,0x84,0x84,0xff,0x9d,0x9d,
-0x9d,0xff,0xd7,0xd7,0xd7,0xff,0xff,0xff,0xff,0x01,0x98,0x98,0x97,0xff,0x7b,0x7a,
-0x73,0xff,0xdb,0xce,0x79,0xff,0xd2,0xc0,0x55,0xff,0xff,0xff,0xff,0x01,0xff,0xff,
-0xff,0x01,0x93,0x93,0x93,0xff,0xff,0xff,0xff,0x01,0xa4,0xa4,0xa4,0xff,0xbe,0xbe,
-0xbe,0xff,0xbd,0xbd,0xbd,0xff,0xd1,0xd1,0xd1,0xff,0xff,0xff,0xff,0x01,0xff,0xff,
-0xff,0x01,0xb5,0xb4,0xae,0xff,0x5f,0x5f,0x5d,0xff,0x9d,0x97,0x6b,0xff,0xd2,0xc0,
-0x55,0xff,0xff,0xff,0xff,0x01,0xc9,0xb5,0x35,0xff,0xff,0xff,0xff,0x01,0xff,0xff,
-0xff,0x01,0xf0,0xf0,0xf0,0xff,0xff,0xff,0xff,0x01,0xf1,0xf1,0xf1,0xff,0xff,0xff,
-0xff,0x01,0xd5,0xd5,0xd5,0xff,0xd0,0xcf,0xce,0xff,0x85,0x85,0x85,0xff,0x60,0x60,
-0x60,0xff,0x94,0x91,0x85,0xff,0xca,0xb5,0x37,0xff,0xff,0xff,0xff,0x01,0xcc,0xb9,
-0x41,0xff,0xff,0xff,0xff,0x01,0xc9,0xb4,0x33,0xff,0xff,0xff,0xff,0x01,0x62,0x62,
-0x62,0xff,0x5e,0x5d,0x5c,0xff,0x5c,0x5c,0x5c,0xff,0x5e,0x5d,0x5c,0xff,0x61,0x61,
-0x60,0xff,0x67,0x65,0x5b,0xff,0x86,0x84,0x7b,0xff,0xff,0xff,0xff,0x01,0xff,0xff,
-0xff,0x01,0xff,0xff,0xff,0x01,0xca,0xb5,0x37,0xff,0xff,0xff,0xff,0x01,0xcc,0xb9,
-0x41,0xff,0xff,0xff,0xff,0x01,0xc9,0xb4,0x33,0xff,0xff,0xff,0xff,0x01,0xff,0xff,
-0xff,0x01,0xc9,0xb5,0x35,0xff,0xff,0xff,0xff,0x01,0xd2,0xc0,0x55,0xff,0xff,0xff,
-0xff,0x01,0xd4,0xc4,0x5e,0xff,0xd4,0xc3,0x5c,0xff,0xff,0xff,0xff,0x01,0xff,0xff,
-0xff,0x01,0xd4,0xc3,0x5c,0xff,0xd4,0xc4,0x5e,0xff,0xdb,0xce,0x79,0xff,0xd2,0xc0,
-0x55,0xff,0xff,0xff,0xff,0x01,0xc9,0xb5,0x35,0xff,0xff,0xff,0xff,0x01,0xff,0xff,
-0xff,0x01,0xd1,0xc0,0x54,0xff,0xdc,0xcf,0x7d,0xff,0xff,0xff,0xff,0x01,0xc9,0xb4,
-0x33,0xff,0xff,0xff,0xff,0x01,0xd0,0xbe,0x50,0xff,0xc9,0xb4,0x33,0xff,0xc9,0xb4,
-0x33,0xff,0xd2,0xc0,0x55,0xff,0xff,0xff,0xff,0x01,0xc9,0xb4,0x33,0xff,0xff,0xff,
-0xff,0x01,0xdb,0xce,0x79,0xff,0xd2,0xc0,0x55,0xff,0xff,0xff,0xff,0x01,0xff,0xff,
-0xff,0x01,0xff,0xff,0xff,0x01,0xc9,0xb4,0x33,0xff,0xff,0xff,0xff,0x01,0xd9,0xca,
-0x6f,0xff,0xcc,0xb9,0x41,0xff,0xe1,0xd6,0x8f,0xff,0xff,0xff,0xff,0x01,0xff,0xff,
-0xff,0x01,0xe0,0xd5,0x8c,0xff,0xcc,0xb9,0x40,0xff,0xdb,0xce,0x79,0xff,0xff,0xff,
-0xff,0x01,0xc9,0xb4,0x33,0xff,0xff,0xff,0xff,0x01,0xff,0xff,0xff,0x01,0xff,0xff,
-0xff,0x01,0xff,0xff,0xff,0x01,0xd5,0xc5,0x62,0xff,0xd2,0xc1,0x58,0xff,0xff,0xff,
-0xff,0x01,0xff,0xff,0xff,0x01,0xce,0xbb,0x46,0xff,0xc9,0xb5,0x35,0xff,0xc9,0xb5,
-0x35,0xff,0xce,0xbb,0x46,0xff,0xff,0xff,0xff,0x01,0xff,0xff,0xff,0x01,0xd2,0xc0,
-0x55,0xff,0xd5,0xc5,0x62,0xff,0xff,0xff,0xff,0x01,0xff,0xff,0xff,0x01,0xff,0xff,
-0xff,0x01,0xff,0xff,0xff,0x01,0xff,0xff,0xff,0x01,0xd7,0xc8,0x69,0xff,0xc9,0xb4,
-0x33,0xff,0xdb,0xce,0x79,0xff,0xff,0xff,0xff,0x01,0xff,0xff,0xff,0x01,0xff,0xff,
-0xff,0x01,0xff,0xff,0xff,0x01,0xdb,0xce,0x79,0xff,0xc9,0xb4,0x33,0xff,0xd7,0xc8,
-0x69,0xff,0xff,0xff,0xff,0x01,0xff,0xff,0xff,0x01,0xff,0xff,0xff,0x01,0xff,0xff,
-0xff,0x0d,0xff,0xff,0xff,0x01,0xff,0xff,0xff,0x01,0xff,0xff,0xff,0x01,0xff,0xff,
-0xff,0x01,0xcd,0xb9,0x42,0xff,0xc9,0xb4,0x33,0xff,0xcb,0xb7,0x3b,0xff,0xcb,0xb7,
-0x3b,0xff,0xc9,0xb4,0x33,0xff,0xcd,0xb9,0x42,0xff,0xff,0xff,0xff,0x01,0xff,0xff,
-0xff,0x01,0xff,0xff,0xff,0x01,0xff,0xff,0xff,0x01,0xff,0xff,0xff,0x01,0xff,0xff,
-0xff,0x01,0xff,0xff,0xff,0x01,0xff,0xff,0xff,0x01,0xff,0xff,0xff,0x01,0xff,0xff,
-0xff,0x01,0xff,0xff,0xff,0x01,0xff,0xff,0xff,0x01,0xeb,0xe4,0xb5,0xff,0xeb,0xe4,
-0xb5,0xff,0xff,0xff,0xff,0x01,0xff,0xff,0xff,0x01,0xff,0xff,0xff,0x01,0xff,0xff,
-0xff,0x01,0xff,0xff,0xff,0x01,0xff,0xff,0xff,0x01,0xff,0xff,0xff,0x01,0x00,0x00,
-0xff,0xff,0x00,0x00,0xff,0xff,0x00,0x00,0xff,0xff,0x00,0x00,0xff,0xff,0x00,0x00,
-0xff,0xff,0x00,0x00,0xff,0xff,0x00,0x00,0xff,0xff,0x00,0x00,0xff,0xff,0x00,0x00,
-0xff,0xff,0x00,0x00,0xff,0xff,0x00,0x00,0xff,0xff,0x00,0x00,0xff,0xff,0x00,0x00,
-0xff,0xff,0x00,0x00,0xff,0xff,0x00,0x00,0xff,0xff,0x00,0x00,0xff,0xff,};
-
-static const unsigned int dummy_align__index_html = 2;
-static const unsigned char data__index_html[] = {
-/* /index.html (12 chars) */
-0x2f,0x69,0x6e,0x64,0x65,0x78,0x2e,0x68,0x74,0x6d,0x6c,0x00,
-
-/* HTTP header */
+" (28 bytes) */
+0x43,0x6f,0x6e,0x74,0x65,0x6e,0x74,0x2d,0x74,0x79,0x70,0x65,0x3a,0x20,0x69,0x6d,
+0x61,0x67,0x65,0x2f,0x78,0x2d,0x69,0x63,0x6f,0x6e,0x0d,0x0a,
+/* "ETag: "zdkIjdkLOR2ugvo"
+" (25 bytes) */
+0x45,0x54,0x61,0x67,0x3a,0x20,0x22,0x7a,0x64,0x6b,0x49,0x6a,0x64,0x6b,0x4c,0x4f,
+0x52,0x32,0x75,0x67,0x76,0x6f,0x22,0x0d,0x0a,0x0d,0x0a,
+
+/* raw file data (1150 bytes) */
+0x00,0x00,0x01,0x00,0x01,0x00,0x10,0x10,0x00,0x00,0x00,0x00,0x20,0x00,0x68,0x04,
+0x00,0x00,0x16,0x00,0x00,0x00,0x28,0x00,0x00,0x00,0x10,0x00,0x00,0x00,0x20,0x00,
+0x00,0x00,0x01,0x00,0x20,0x00,0x00,0x00,0x00,0x00,0x40,0x04,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,
+0xff,0x01,0xff,0xff,0xff,0x01,0xff,0xff,0xff,0x01,0xff,0xff,0xff,0x01,0xff,0xff,
+0xff,0x01,0xff,0xff,0xff,0x01,0xff,0xff,0xff,0x01,0xd2,0xd2,0xd2,0xff,0xd2,0xd2,
+0xd2,0xff,0xff,0xff,0xff,0x01,0xff,0xff,0xff,0x01,0xff,0xff,0xff,0x01,0xff,0xff,
+0xff,0x01,0xff,0xff,0xff,0x01,0xff,0xff,0xff,0x01,0xff,0xff,0xff,0x01,0xff,0xff,
+0xff,0x01,0xff,0xff,0xff,0x01,0xff,0xff,0xff,0x01,0xff,0xff,0xff,0x01,0xff,0xff,
+0xff,0x01,0x8d,0x8d,0x8d,0xff,0x84,0x84,0x84,0xff,0x89,0x89,0x89,0xff,0x89,0x89,
+0x89,0xff,0x84,0x84,0x84,0xff,0x8d,0x8d,0x8d,0xff,0xff,0xff,0xff,0x01,0xff,0xff,
+0xff,0x01,0xff,0xff,0xff,0x01,0xff,0xff,0xff,0x01,0xff,0xff,0xff,0x01,0xff,0xff,
+0xff,0x01,0xff,0xff,0xff,0x01,0xff,0xff,0xff,0x01,0xa4,0xa4,0xa4,0xff,0x84,0x84,
+0x84,0xff,0xae,0xae,0xae,0xff,0xff,0xff,0xff,0x01,0xff,0xff,0xff,0x01,0xff,0xff,
+0xff,0x01,0xff,0xff,0xff,0x01,0xae,0xae,0xae,0xff,0x84,0x84,0x84,0xff,0xa4,0xa4,
+0xa4,0xff,0xff,0xff,0xff,0x01,0xff,0xff,0xff,0x01,0x81,0x81,0x81,0xff,0xff,0xff,
+0xff,0x01,0xff,0xff,0xff,0x01,0xa0,0xa0,0xa0,0xff,0x9a,0x9a,0x9a,0xff,0xff,0xff,
+0xff,0x01,0xc7,0xc7,0xc7,0xff,0x8f,0x8f,0x8f,0xff,0x85,0x85,0x85,0xff,0x85,0x85,
+0x85,0xff,0x8f,0x8f,0x8f,0xff,0xca,0xca,0xca,0xff,0xff,0xff,0xff,0x01,0xd5,0xd5,
+0xd5,0xff,0xff,0xff,0xff,0x01,0x77,0x77,0x77,0xff,0xff,0xff,0xff,0x01,0xff,0xff,
+0xff,0x01,0xd5,0xd5,0xd5,0xff,0x84,0x84,0x84,0xff,0xff,0xff,0xff,0x01,0xa8,0xa8,
+0xa8,0xff,0x8c,0x8c,0x8c,0xff,0xbb,0xbb,0xbb,0xff,0xff,0xff,0xff,0x01,0xff,0xff,
+0xff,0x01,0xba,0xba,0xba,0xff,0xaf,0xaf,0xaf,0xff,0xff,0xff,0xff,0x01,0xff,0xff,
+0xff,0x01,0x65,0x64,0x5b,0xff,0xff,0xff,0xff,0x01,0xff,0xff,0xff,0x01,0xff,0xff,
+0xff,0x01,0x98,0x98,0x98,0xff,0xb0,0xb0,0xb0,0xff,0xd5,0xd5,0xd5,0xff,0x84,0x84,
+0x84,0xff,0xda,0xda,0xda,0xff,0x95,0x95,0x95,0xff,0x84,0x84,0x84,0xff,0x9d,0x9d,
+0x9d,0xff,0xd7,0xd7,0xd7,0xff,0xff,0xff,0xff,0x01,0x98,0x98,0x97,0xff,0x7b,0x7a,
+0x73,0xff,0xdb,0xce,0x79,0xff,0xd2,0xc0,0x55,0xff,0xff,0xff,0xff,0x01,0xff,0xff,
+0xff,0x01,0x93,0x93,0x93,0xff,0xff,0xff,0xff,0x01,0xa4,0xa4,0xa4,0xff,0xbe,0xbe,
+0xbe,0xff,0xbd,0xbd,0xbd,0xff,0xd1,0xd1,0xd1,0xff,0xff,0xff,0xff,0x01,0xff,0xff,
+0xff,0x01,0xb5,0xb4,0xae,0xff,0x5f,0x5f,0x5d,0xff,0x9d,0x97,0x6b,0xff,0xd2,0xc0,
+0x55,0xff,0xff,0xff,0xff,0x01,0xc9,0xb5,0x35,0xff,0xff,0xff,0xff,0x01,0xff,0xff,
+0xff,0x01,0xf0,0xf0,0xf0,0xff,0xff,0xff,0xff,0x01,0xf1,0xf1,0xf1,0xff,0xff,0xff,
+0xff,0x01,0xd5,0xd5,0xd5,0xff,0xd0,0xcf,0xce,0xff,0x85,0x85,0x85,0xff,0x60,0x60,
+0x60,0xff,0x94,0x91,0x85,0xff,0xca,0xb5,0x37,0xff,0xff,0xff,0xff,0x01,0xcc,0xb9,
+0x41,0xff,0xff,0xff,0xff,0x01,0xc9,0xb4,0x33,0xff,0xff,0xff,0xff,0x01,0x62,0x62,
+0x62,0xff,0x5e,0x5d,0x5c,0xff,0x5c,0x5c,0x5c,0xff,0x5e,0x5d,0x5c,0xff,0x61,0x61,
+0x60,0xff,0x67,0x65,0x5b,0xff,0x86,0x84,0x7b,0xff,0xff,0xff,0xff,0x01,0xff,0xff,
+0xff,0x01,0xff,0xff,0xff,0x01,0xca,0xb5,0x37,0xff,0xff,0xff,0xff,0x01,0xcc,0xb9,
+0x41,0xff,0xff,0xff,0xff,0x01,0xc9,0xb4,0x33,0xff,0xff,0xff,0xff,0x01,0xff,0xff,
+0xff,0x01,0xc9,0xb5,0x35,0xff,0xff,0xff,0xff,0x01,0xd2,0xc0,0x55,0xff,0xff,0xff,
+0xff,0x01,0xd4,0xc4,0x5e,0xff,0xd4,0xc3,0x5c,0xff,0xff,0xff,0xff,0x01,0xff,0xff,
+0xff,0x01,0xd4,0xc3,0x5c,0xff,0xd4,0xc4,0x5e,0xff,0xdb,0xce,0x79,0xff,0xd2,0xc0,
+0x55,0xff,0xff,0xff,0xff,0x01,0xc9,0xb5,0x35,0xff,0xff,0xff,0xff,0x01,0xff,0xff,
+0xff,0x01,0xd1,0xc0,0x54,0xff,0xdc,0xcf,0x7d,0xff,0xff,0xff,0xff,0x01,0xc9,0xb4,
+0x33,0xff,0xff,0xff,0xff,0x01,0xd0,0xbe,0x50,0xff,0xc9,0xb4,0x33,0xff,0xc9,0xb4,
+0x33,0xff,0xd2,0xc0,0x55,0xff,0xff,0xff,0xff,0x01,0xc9,0xb4,0x33,0xff,0xff,0xff,
+0xff,0x01,0xdb,0xce,0x79,0xff,0xd2,0xc0,0x55,0xff,0xff,0xff,0xff,0x01,0xff,0xff,
+0xff,0x01,0xff,0xff,0xff,0x01,0xc9,0xb4,0x33,0xff,0xff,0xff,0xff,0x01,0xd9,0xca,
+0x6f,0xff,0xcc,0xb9,0x41,0xff,0xe1,0xd6,0x8f,0xff,0xff,0xff,0xff,0x01,0xff,0xff,
+0xff,0x01,0xe0,0xd5,0x8c,0xff,0xcc,0xb9,0x40,0xff,0xdb,0xce,0x79,0xff,0xff,0xff,
+0xff,0x01,0xc9,0xb4,0x33,0xff,0xff,0xff,0xff,0x01,0xff,0xff,0xff,0x01,0xff,0xff,
+0xff,0x01,0xff,0xff,0xff,0x01,0xd5,0xc5,0x62,0xff,0xd2,0xc1,0x58,0xff,0xff,0xff,
+0xff,0x01,0xff,0xff,0xff,0x01,0xce,0xbb,0x46,0xff,0xc9,0xb5,0x35,0xff,0xc9,0xb5,
+0x35,0xff,0xce,0xbb,0x46,0xff,0xff,0xff,0xff,0x01,0xff,0xff,0xff,0x01,0xd2,0xc0,
+0x55,0xff,0xd5,0xc5,0x62,0xff,0xff,0xff,0xff,0x01,0xff,0xff,0xff,0x01,0xff,0xff,
+0xff,0x01,0xff,0xff,0xff,0x01,0xff,0xff,0xff,0x01,0xd7,0xc8,0x69,0xff,0xc9,0xb4,
+0x33,0xff,0xdb,0xce,0x79,0xff,0xff,0xff,0xff,0x01,0xff,0xff,0xff,0x01,0xff,0xff,
+0xff,0x01,0xff,0xff,0xff,0x01,0xdb,0xce,0x79,0xff,0xc9,0xb4,0x33,0xff,0xd7,0xc8,
+0x69,0xff,0xff,0xff,0xff,0x01,0xff,0xff,0xff,0x01,0xff,0xff,0xff,0x01,0xff,0xff,
+0xff,0x0d,0xff,0xff,0xff,0x01,0xff,0xff,0xff,0x01,0xff,0xff,0xff,0x01,0xff,0xff,
+0xff,0x01,0xcd,0xb9,0x42,0xff,0xc9,0xb4,0x33,0xff,0xcb,0xb7,0x3b,0xff,0xcb,0xb7,
+0x3b,0xff,0xc9,0xb4,0x33,0xff,0xcd,0xb9,0x42,0xff,0xff,0xff,0xff,0x01,0xff,0xff,
+0xff,0x01,0xff,0xff,0xff,0x01,0xff,0xff,0xff,0x01,0xff,0xff,0xff,0x01,0xff,0xff,
+0xff,0x01,0xff,0xff,0xff,0x01,0xff,0xff,0xff,0x01,0xff,0xff,0xff,0x01,0xff,0xff,
+0xff,0x01,0xff,0xff,0xff,0x01,0xff,0xff,0xff,0x01,0xeb,0xe4,0xb5,0xff,0xeb,0xe4,
+0xb5,0xff,0xff,0xff,0xff,0x01,0xff,0xff,0xff,0x01,0xff,0xff,0xff,0x01,0xff,0xff,
+0xff,0x01,0xff,0xff,0xff,0x01,0xff,0xff,0xff,0x01,0xff,0xff,0xff,0x01,0x00,0x00,
+0xff,0xff,0x00,0x00,0xff,0xff,0x00,0x00,0xff,0xff,0x00,0x00,0xff,0xff,0x00,0x00,
+0xff,0xff,0x00,0x00,0xff,0xff,0x00,0x00,0xff,0xff,0x00,0x00,0xff,0xff,0x00,0x00,
+0xff,0xff,0x00,0x00,0xff,0xff,0x00,0x00,0xff,0xff,0x00,0x00,0xff,0xff,0x00,0x00,
+0xff,0xff,0x00,0x00,0xff,0xff,0x00,0x00,0xff,0xff,0x00,0x00,0xff,0xff,};
+
+static const unsigned int dummy_align__login_html = 2;
+static const unsigned char data__login_html[] = {
+/* /login.html (11 chars) */
+0x2f,0x6c,0x6f,0x67,0x69,0x6e,0x2e,0x68,0x74,0x6d,0x6c,0x00,
+
+/* HTTP header */
+
 /* "HTTP/1.1 200 OK
 /* "HTTP/1.1 200 OK
-" (17 bytes) */
-0x48,0x54,0x54,0x50,0x2f,0x31,0x2e,0x31,0x20,0x32,0x30,0x30,0x20,0x4f,0x4b,0x0d,
-0x0a,
+" (17 bytes) */
+0x48,0x54,0x54,0x50,0x2f,0x31,0x2e,0x31,0x20,0x32,0x30,0x30,0x20,0x4f,0x4b,0x0d,
+0x0a,
 /* "Server: lwIP/1.3.1 (http://savannah.nongnu.org/projects/lwip)
 /* "Server: lwIP/1.3.1 (http://savannah.nongnu.org/projects/lwip)
-" (63 bytes) */
-0x53,0x65,0x72,0x76,0x65,0x72,0x3a,0x20,0x6c,0x77,0x49,0x50,0x2f,0x31,0x2e,0x33,
-0x2e,0x31,0x20,0x28,0x68,0x74,0x74,0x70,0x3a,0x2f,0x2f,0x73,0x61,0x76,0x61,0x6e,
-0x6e,0x61,0x68,0x2e,0x6e,0x6f,0x6e,0x67,0x6e,0x75,0x2e,0x6f,0x72,0x67,0x2f,0x70,
-0x72,0x6f,0x6a,0x65,0x63,0x74,0x73,0x2f,0x6c,0x77,0x69,0x70,0x29,0x0d,0x0a,
-/* "Content-Length: 989
-" (18+ bytes) */
-0x43,0x6f,0x6e,0x74,0x65,0x6e,0x74,0x2d,0x4c,0x65,0x6e,0x67,0x74,0x68,0x3a,0x20,
-0x39,0x38,0x39,0x0d,0x0a,
+" (63 bytes) */
+0x53,0x65,0x72,0x76,0x65,0x72,0x3a,0x20,0x6c,0x77,0x49,0x50,0x2f,0x31,0x2e,0x33,
+0x2e,0x31,0x20,0x28,0x68,0x74,0x74,0x70,0x3a,0x2f,0x2f,0x73,0x61,0x76,0x61,0x6e,
+0x6e,0x61,0x68,0x2e,0x6e,0x6f,0x6e,0x67,0x6e,0x75,0x2e,0x6f,0x72,0x67,0x2f,0x70,
+0x72,0x6f,0x6a,0x65,0x63,0x74,0x73,0x2f,0x6c,0x77,0x69,0x70,0x29,0x0d,0x0a,
+/* "Content-Length: 462
+" (21 bytes) */
+0x43,0x6f,0x6e,0x74,0x65,0x6e,0x74,0x2d,0x4c,0x65,0x6e,0x67,0x74,0x68,0x3a,0x20,
+0x34,0x36,0x32,0x0d,0x0a,
 /* "Connection: Close
 /* "Connection: Close
-" (19 bytes) */
-0x43,0x6f,0x6e,0x6e,0x65,0x63,0x74,0x69,0x6f,0x6e,0x3a,0x20,0x43,0x6c,0x6f,0x73,
-0x65,0x0d,0x0a,
+" (19 bytes) */
+0x43,0x6f,0x6e,0x6e,0x65,0x63,0x74,0x69,0x6f,0x6e,0x3a,0x20,0x43,0x6c,0x6f,0x73,
+0x65,0x0d,0x0a,
 /* "Content-type: text/html
 /* "Content-type: text/html
 Content-Encoding: gzip
 Content-Encoding: gzip
-
-" (51 bytes) */
-0x43,0x6f,0x6e,0x74,0x65,0x6e,0x74,0x2d,0x74,0x79,0x70,0x65,0x3a,0x20,0x74,0x65,
-0x78,0x74,0x2f,0x68,0x74,0x6d,0x6c,0x0d,0x0a,0x43,0x6f,0x6e,0x74,0x65,0x6e,0x74,
-0x2d,0x45,0x6e,0x63,0x6f,0x64,0x69,0x6e,0x67,0x3a,0x20,0x67,0x7a,0x69,0x70,0x0d,
-0x0a,0x0d,0x0a,
-/* raw file data (989 bytes) */
-0x1f,0x8b,0x08,0x00,0x00,0x00,0x00,0x00,0x04,0x0a,0x8d,0x55,0x4d,0x8f,0xdc,0x44,
-0x10,0xbd,0x23,0xf1,0x1f,0x9a,0xbe,0x84,0xa0,0xf5,0x3a,0x39,0x20,0x45,0x60,0x8f,
-0x04,0x21,0x48,0x9c,0xe0,0x90,0x20,0x72,0xec,0xb1,0x7b,0xc7,0x9d,0xf8,0x0b,0xbb,
-0x3d,0x9b,0xbd,0xed,0x07,0x08,0x24,0x56,0x20,0x45,0x48,0x48,0x48,0x44,0x42,0xf0,
-0x03,0x26,0xc3,0x6e,0x76,0x76,0x77,0x76,0xf2,0x17,0xba,0xff,0x11,0xaf,0xba,0xed,
-0xc9,0x68,0xc2,0x81,0x95,0x76,0xdc,0xee,0xea,0xaa,0x7a,0xfd,0xea,0x55,0x39,0x7a,
-0xef,0xb3,0x2f,0xef,0x3f,0x7c,0xfc,0xd5,0x03,0x96,0xe9,0x22,0x1f,0xbd,0xfb,0x4e,
-0x44,0x4f,0x96,0x8b,0x72,0x12,0x73,0xee,0xde,0xa5,0x48,0xe9,0x59,0x48,0x2d,0x58,
-0x92,0x89,0xa6,0x95,0x3a,0xe6,0x9d,0xde,0x0b,0xee,0x39,0xbb,0xdb,0xcf,0xb4,0xae,
-0x03,0xf9,0x6d,0xa7,0xa6,0x31,0xff,0x26,0x78,0xf4,0x49,0x70,0xbf,0x2a,0x6a,0xa1,
-0xd5,0x38,0x97,0x9c,0x25,0x55,0xa9,0x65,0x09,0xa7,0x2f,0x1e,0xc4,0x32,0x9d,0xc8,
-0x37,0x6e,0xa5,0x28,0x64,0xcc,0xa7,0x4a,0xee,0xd7,0x55,0xa3,0x37,0x4e,0xee,0xab,
-0x54,0x67,0x71,0x2a,0xa7,0x2a,0x91,0x81,0x7b,0xd9,0x61,0xaa,0x54,0x5a,0x89,0x3c,
-0x68,0x13,0x91,0xcb,0xf8,0xee,0xee,0x9d,0x1d,0x56,0x88,0x67,0xaa,0xe8,0x8a,0xcd,
-0xad,0xae,0x95,0x8d,0x7b,0x17,0xc8,0x1d,0xdf,0x71,0xb9,0x72,0x55,0x3e,0x65,0x8d,
-0xcc,0x63,0xde,0xea,0x83,0x5c,0xb6,0x99,0x94,0x48,0x96,0x35,0x72,0x0f,0x17,0xa9,
-0xf3,0x4a,0xa4,0xbb,0x49,0xdb,0xba,0xa3,0x5a,0xe9,0x5c,0x8e,0xcc,0x0b,0xf3,0xd2,
-0xdc,0x98,0x95,0x99,0x9b,0x6b,0x73,0x8e,0xd5,0xc2,0x9c,0x33,0xf3,0xda,0x1e,0x9a,
-0x95,0xfd,0x11,0x2f,0x73,0x73,0x65,0x16,0x51,0xe8,0x0f,0x83,0x9b,0x30,0xeb,0x49,
-0x1a,0x57,0xe9,0x01,0x91,0x55,0x8a,0x29,0x4b,0x72,0xd1,0xb6,0x31,0xc7,0x72,0x2c,
-0x1a,0x3e,0x8a,0x42,0xac,0xc8,0x96,0xaa,0x29,0x53,0x69,0xcc,0x93,0xaa,0x2b,0x75,
-0xb0,0xdf,0x88,0x9a,0x32,0x33,0x36,0x18,0x6e,0x39,0x43,0x5a,0xed,0x97,0xb7,0xdc,
-0x3e,0x2c,0xf5,0xc8,0xfc,0x0e,0x34,0x37,0xf6,0x98,0x20,0x00,0x13,0x50,0xd9,0x43,
-0x66,0x5e,0xda,0x13,0x73,0x86,0xe5,0x31,0xc0,0xd1,0x0e,0xb0,0x5e,0x98,0x99,0xf9,
-0xc7,0x1e,0xc2,0xf0,0x8a,0x90,0x33,0xfb,0xc3,0x60,0x60,0x51,0x5b,0x8b,0x72,0x23,
-0x75,0xd9,0x15,0x63,0x09,0x64,0x1f,0x46,0x21,0x59,0x46,0xcc,0x1e,0xc1,0xe5,0x0a,
-0xae,0x37,0xe6,0x6c,0x37,0x0a,0x6b,0x0f,0x2b,0x04,0x60,0xc2,0x3d,0x3c,0x09,0x7f,
-0x7f,0x37,0x02,0x5f,0x53,0x08,0x98,0xb3,0xbb,0xff,0x97,0x36,0x9c,0xc4,0xf9,0xbd,
-0xaa,0x29,0x18,0x13,0x89,0x56,0x55,0x19,0xf3,0x70,0xa8,0xc3,0x44,0x71,0x06,0x49,
-0x65,0x15,0x18,0xaa,0xab,0x16,0x75,0x92,0x65,0xa2,0x0f,0x6a,0xe8,0xa4,0xe8,0x72,
-0xad,0x6a,0xd1,0xe8,0x90,0x7c,0x83,0x54,0x68,0xc1,0x59,0x55,0xb6,0xdd,0xb8,0x50,
-0x50,0x57,0x23,0x75,0xd7,0x94,0xec,0x6b,0x91,0x2b,0x98,0xe4,0xfb,0x3a,0x53,0xed,
-0xed,0x8f,0x1d,0xb6,0x0d,0xc8,0x3e,0x4f,0x40,0x11,0xb6,0x4d,0x93,0x4e,0xa5,0x4e,
-0x9c,0x9e,0xf1,0x5f,0xcd,0xb5,0xfd,0x85,0x81,0xee,0x2d,0x29,0xd0,0xe6,0x96,0x14,
-0x18,0x18,0x3b,0xa7,0x93,0xf6,0x7b,0xfc,0x9e,0x41,0x21,0x4b,0xb3,0xfa,0x68,0xcd,
-0x60,0x45,0x8d,0xc5,0xf0,0x17,0xe5,0x6a,0x64,0xfe,0x84,0x78,0x56,0xa8,0xd7,0xc2,
-0xd5,0x72,0x6e,0x66,0xa8,0xea,0x29,0x45,0x98,0x31,0x67,0x59,0x22,0xfa,0xa9,0xfd,
-0xd9,0x1e,0xfb,0x1a,0x2f,0x50,0xec,0x05,0x83,0xe4,0x90,0x02,0xe2,0x23,0x2d,0x5e,
-0xd2,0xe9,0x15,0xaa,0xb5,0xa0,0x43,0x80,0x79,0xba,0xc3,0xec,0x77,0x28,0xfc,0xa5,
-0xb9,0x7e,0x1b,0x9b,0x3d,0x62,0xc8,0x34,0xb3,0x47,0x24,0x5d,0xa7,0x11,0xa7,0x67,
-0xb3,0x64,0x1f,0xec,0x8e,0x55,0x19,0x85,0x00,0xb5,0x01,0xef,0x2f,0x80,0x98,0x91,
-0x8c,0x3c,0xac,0xd7,0xf6,0xc4,0x2f,0xae,0xd6,0x29,0xec,0xc9,0x5b,0x49,0xb6,0x83,
-0xfc,0x81,0x10,0xaf,0x86,0x10,0x57,0x84,0x16,0x17,0x86,0xb2,0x18,0x37,0xbf,0xad,
-0x05,0x7a,0x41,0xf8,0xed,0x29,0x5f,0x3b,0x47,0x61,0xcf,0x14,0x09,0xbe,0xa7,0x7f,
-0x0e,0xd7,0x0b,0x33,0x77,0x37,0x38,0x26,0x8a,0xe6,0x28,0x09,0xae,0xee,0xbb,0x93,
-0x7e,0xc1,0xc6,0x82,0x5a,0x83,0xe8,0x02,0x0b,0xe7,0xe6,0x12,0x37,0x76,0x4c,0x6e,
-0xf5,0x0b,0x79,0x83,0x65,0x00,0x5b,0x7a,0xe6,0x80,0xe6,0x05,0xfc,0x96,0xf0,0x01,
-0x25,0x3d,0x16,0x52,0xfd,0xa0,0xf5,0xbe,0x29,0x7b,0xb5,0xf7,0xd2,0xd9,0x10,0xbd,
-0xab,0xa9,0x2a,0xeb,0x4e,0xbb,0xb6,0xf2,0x07,0x3e,0x57,0x34,0xf4,0xea,0x5c,0x24,
-0x32,0xab,0xf2,0x54,0x36,0x31,0x37,0x7f,0x23,0x2d,0x8a,0xc3,0x59,0xaa,0x5a,0x1a,
-0x4c,0x10,0xf7,0xb0,0xc2,0xd4,0xf3,0x83,0x62,0x0f,0x7e,0x01,0x4d,0x44,0xce,0xc2,
-0xa1,0x20,0x1b,0xc2,0x25,0xf3,0x23,0x37,0xac,0xd8,0x58,0x97,0xf4,0x1f,0xd4,0x8d,
-0x2a,0x44,0x73,0xe0,0xc7,0x87,0xc3,0xe2,0xfa,0xd8,0x3c,0xb7,0x3f,0x41,0xb4,0x2b,
-0x7b,0xd8,0x37,0xb6,0xaf,0x2e,0x2e,0xb3,0x0d,0xf5,0x53,0x5d,0x72,0xe6,0x9b,0x8b,
-0xc2,0xaf,0xa1,0xf8,0x8b,0x70,0xe6,0xe7,0x33,0x35,0x9a,0x33,0xaf,0x61,0xf5,0xa3,
-0x00,0x11,0x87,0xa1,0xf0,0x66,0xc7,0xe7,0xe8,0xef,0xb4,0x8d,0xb4,0x4f,0xe6,0x5b,
-0x96,0xb3,0xa9,0xc8,0x3b,0x34,0xf6,0x7f,0x68,0xc2,0x11,0xd0,0xe3,0xdd,0x8a,0x95,
-0xe2,0xdb,0x84,0x99,0xd3,0x87,0x1a,0x77,0x5a,0x57,0xb8,0xc5,0x10,0x6a,0xbb,0xa0,
-0xae,0x30,0x93,0x6a,0x2c,0x92,0xa7,0x9c,0xb9,0xd2,0x52,0xeb,0xd3,0xa2,0x4d,0x1a,
-0x55,0xeb,0x3e,0x8c,0x96,0xcf,0x74,0xf8,0x44,0x4c,0x85,0xdf,0xe5,0xac,0x6d,0x92,
-0xf5,0xc7,0xe1,0x09,0xbe,0x0d,0xa0,0xd2,0x9d,0x77,0x21,0x86,0x89,0x38,0x8c,0xfb,
-0xd0,0x7d,0x3c,0xff,0x05,0x8d,0x32,0x0c,0x0f,0x4c,0x07,0x00,0x00,};
-
-static const unsigned int dummy_align__login_html = 3;
-static const unsigned char data__login_html[] = {
-/* /login.html (12 chars) */
-0x2f,0x6c,0x6f,0x67,0x69,0x6e,0x2e,0x68,0x74,0x6d,0x6c,0x00,
-
-/* HTTP header */
+" (49 bytes) */
+0x43,0x6f,0x6e,0x74,0x65,0x6e,0x74,0x2d,0x74,0x79,0x70,0x65,0x3a,0x20,0x74,0x65,
+0x78,0x74,0x2f,0x68,0x74,0x6d,0x6c,0x0d,0x0a,0x43,0x6f,0x6e,0x74,0x65,0x6e,0x74,
+0x2d,0x45,0x6e,0x63,0x6f,0x64,0x69,0x6e,0x67,0x3a,0x20,0x67,0x7a,0x69,0x70,0x0d,
+0x0a,
+/* "ETag: "btPuMKNs4kkQgqn"
+" (25 bytes) */
+0x45,0x54,0x61,0x67,0x3a,0x20,0x22,0x62,0x74,0x50,0x75,0x4d,0x4b,0x4e,0x73,0x34,
+0x6b,0x6b,0x51,0x67,0x71,0x6e,0x22,0x0d,0x0a,0x0d,0x0a,
+
+/* raw file data (462 bytes) */
+0x1f,0x8b,0x08,0x00,0x00,0x00,0x00,0x00,0x04,0x0a,0x8d,0x52,0xbd,0x6e,0x14,0x31,
+0x10,0xee,0xf3,0x14,0xc6,0x35,0x9b,0xbd,0x5c,0x85,0x92,0xf5,0x49,0x28,0x04,0x89,
+0x0a,0x0a,0x90,0xa0,0xf4,0xd9,0x73,0x6b,0x2b,0x5e,0xdb,0xac,0x67,0xef,0x72,0x54,
+0x11,0x05,0x15,0x12,0x88,0x96,0x82,0x57,0x88,0xa0,0xe0,0x50,0x94,0x3c,0x83,0xef,
+0x8d,0x18,0xef,0x1d,0x51,0x44,0x03,0xdb,0xcc,0x7a,0xec,0xf9,0xfe,0xec,0xe6,0xc1,
+0x93,0xe7,0xa7,0x2f,0xdf,0xbc,0x38,0x63,0x06,0x3b,0x37,0x3b,0x68,0x4a,0x61,0x4e,
+0xfa,0x56,0x70,0x5e,0x96,0x20,0x35,0x95,0x0e,0x50,0x32,0x65,0x64,0x9f,0x00,0x05,
+0x1f,0x70,0x51,0x3d,0x2a,0xbb,0x63,0xdb,0x20,0xc6,0x0a,0xde,0x0e,0x76,0x29,0xf8,
+0xeb,0xea,0xd5,0xe3,0xea,0x34,0x74,0x51,0xa2,0x9d,0x3b,0xe0,0x4c,0x05,0x8f,0xe0,
+0x69,0xe6,0xd9,0x99,0x00,0xdd,0xc2,0xdd,0x94,0x97,0x1d,0x08,0xbe,0xb4,0xb0,0x8a,
+0xa1,0xc7,0x7b,0x07,0x57,0x56,0xa3,0x11,0x1a,0x96,0x56,0x41,0x35,0x2e,0x1e,0x32,
+0xeb,0x2d,0x5a,0xe9,0xaa,0xa4,0xa4,0x03,0x71,0x54,0x40,0x9c,0xf5,0xe7,0xac,0x07,
+0x27,0x78,0xc2,0xb5,0x83,0x64,0x00,0x08,0xc5,0xf4,0xb0,0x10,0x7c,0xb1,0x1a,0x7b,
+0x87,0x2a,0xa5,0x72,0x14,0x2d,0x3a,0x98,0x35,0xf5,0xae,0x1e,0x34,0xf5,0xde,0xd4,
+0x3c,0xe8,0x35,0x6d,0x9b,0x29,0x1b,0x8f,0x0b,0x8e,0x70,0x81,0x95,0x74,0xb6,0xf5,
+0xc7,0x4c,0x91,0x6a,0xe8,0x4f,0x58,0x94,0x5a,0x5b,0xdf,0x56,0x18,0xe2,0x31,0x3b,
+0x9a,0x4c,0xe2,0xc5,0x09,0x9f,0xe5,0xcf,0xf9,0xfb,0xf6,0x7d,0xbe,0xdd,0x5e,0xe6,
+0x4d,0xfe,0x99,0xaf,0xb6,0x1f,0xf2,0x66,0xfb,0x89,0x80,0xa7,0x84,0xb7,0x08,0x7d,
+0xc7,0x94,0x93,0x29,0x51,0x52,0xd1,0x05,0xa9,0xab,0xd2,0xe2,0x4c,0x2a,0xb4,0xc1,
+0x0b,0x5e,0x2b,0x03,0xea,0xdc,0x85,0xd6,0xfa,0x43,0xd5,0x5a,0xce,0x28,0x46,0x13,
+0xb4,0xe0,0x31,0x24,0x24,0xc1,0x8c,0xbe,0xc6,0xfa,0x38,0x20,0xb3,0xd4,0xdd,0x61,
+0x3c,0xb5,0x25,0x4e,0x5c,0x47,0x4a,0xad,0xe8,0xe4,0x2c,0x3a,0xa9,0xc0,0x04,0xa7,
+0xa1,0x17,0x3c,0x7f,0xcd,0xb7,0xf9,0x07,0xa9,0xb9,0xa1,0x28,0x77,0xdc,0x23,0x01,
+0x67,0xc9,0xbe,0xa3,0x91,0xe9,0x84,0xb3,0x5d,0xe4,0x43,0x82,0xbe,0xfc,0xf1,0xfa,
+0x3f,0x98,0x22,0xb9,0x58,0x85,0x5e,0xff,0xcd,0xf6,0x8d,0x3c,0x5f,0x12,0xe3,0xf5,
+0xf6,0xe3,0xbf,0xf8,0xee,0x20,0x46,0xbe,0x66,0xa0,0x47,0x76,0xcf,0xe0,0x5e,0xeb,
+0x1c,0xfd,0x1f,0x73,0x69,0x98,0x77,0x96,0xec,0x2d,0xa5,0x1b,0x48,0x78,0xfe,0x42,
+0x34,0xbf,0x28,0xec,0xcd,0x98,0x4c,0x53,0x17,0x80,0xa6,0x2e,0x89,0x96,0xba,0xbf,
+0xc3,0x7a,0x7c,0xbd,0xbf,0x01,0xeb,0x25,0x1e,0xef,0xcd,0x02,0x00,0x00,};
+
+static const unsigned int dummy_align__index_html = 3;
+static const unsigned char data__index_html[] = {
+/* /index.html (11 chars) */
+0x2f,0x69,0x6e,0x64,0x65,0x78,0x2e,0x68,0x74,0x6d,0x6c,0x00,
+
+/* HTTP header */
+
 /* "HTTP/1.1 200 OK
 /* "HTTP/1.1 200 OK
-" (17 bytes) */
-0x48,0x54,0x54,0x50,0x2f,0x31,0x2e,0x31,0x20,0x32,0x30,0x30,0x20,0x4f,0x4b,0x0d,
-0x0a,
+" (17 bytes) */
+0x48,0x54,0x54,0x50,0x2f,0x31,0x2e,0x31,0x20,0x32,0x30,0x30,0x20,0x4f,0x4b,0x0d,
+0x0a,
 /* "Server: lwIP/1.3.1 (http://savannah.nongnu.org/projects/lwip)
 /* "Server: lwIP/1.3.1 (http://savannah.nongnu.org/projects/lwip)
-" (63 bytes) */
-0x53,0x65,0x72,0x76,0x65,0x72,0x3a,0x20,0x6c,0x77,0x49,0x50,0x2f,0x31,0x2e,0x33,
-0x2e,0x31,0x20,0x28,0x68,0x74,0x74,0x70,0x3a,0x2f,0x2f,0x73,0x61,0x76,0x61,0x6e,
-0x6e,0x61,0x68,0x2e,0x6e,0x6f,0x6e,0x67,0x6e,0x75,0x2e,0x6f,0x72,0x67,0x2f,0x70,
-0x72,0x6f,0x6a,0x65,0x63,0x74,0x73,0x2f,0x6c,0x77,0x69,0x70,0x29,0x0d,0x0a,
-/* "Content-Length: 466
-" (18+ bytes) */
-0x43,0x6f,0x6e,0x74,0x65,0x6e,0x74,0x2d,0x4c,0x65,0x6e,0x67,0x74,0x68,0x3a,0x20,
-0x34,0x36,0x36,0x0d,0x0a,
+" (63 bytes) */
+0x53,0x65,0x72,0x76,0x65,0x72,0x3a,0x20,0x6c,0x77,0x49,0x50,0x2f,0x31,0x2e,0x33,
+0x2e,0x31,0x20,0x28,0x68,0x74,0x74,0x70,0x3a,0x2f,0x2f,0x73,0x61,0x76,0x61,0x6e,
+0x6e,0x61,0x68,0x2e,0x6e,0x6f,0x6e,0x67,0x6e,0x75,0x2e,0x6f,0x72,0x67,0x2f,0x70,
+0x72,0x6f,0x6a,0x65,0x63,0x74,0x73,0x2f,0x6c,0x77,0x69,0x70,0x29,0x0d,0x0a,
+/* "Content-Length: 979
+" (21 bytes) */
+0x43,0x6f,0x6e,0x74,0x65,0x6e,0x74,0x2d,0x4c,0x65,0x6e,0x67,0x74,0x68,0x3a,0x20,
+0x39,0x37,0x39,0x0d,0x0a,
 /* "Connection: Close
 /* "Connection: Close
-" (19 bytes) */
-0x43,0x6f,0x6e,0x6e,0x65,0x63,0x74,0x69,0x6f,0x6e,0x3a,0x20,0x43,0x6c,0x6f,0x73,
-0x65,0x0d,0x0a,
+" (19 bytes) */
+0x43,0x6f,0x6e,0x6e,0x65,0x63,0x74,0x69,0x6f,0x6e,0x3a,0x20,0x43,0x6c,0x6f,0x73,
+0x65,0x0d,0x0a,
 /* "Content-type: text/html
 /* "Content-type: text/html
 Content-Encoding: gzip
 Content-Encoding: gzip
-
-" (51 bytes) */
-0x43,0x6f,0x6e,0x74,0x65,0x6e,0x74,0x2d,0x74,0x79,0x70,0x65,0x3a,0x20,0x74,0x65,
-0x78,0x74,0x2f,0x68,0x74,0x6d,0x6c,0x0d,0x0a,0x43,0x6f,0x6e,0x74,0x65,0x6e,0x74,
-0x2d,0x45,0x6e,0x63,0x6f,0x64,0x69,0x6e,0x67,0x3a,0x20,0x67,0x7a,0x69,0x70,0x0d,
-0x0a,0x0d,0x0a,
-/* raw file data (466 bytes) */
-0x1f,0x8b,0x08,0x00,0x00,0x00,0x00,0x00,0x04,0x0a,0x8d,0x52,0xbd,0x6e,0x14,0x31,
-0x10,0xee,0x91,0x78,0x07,0xe3,0x9a,0xcd,0x5e,0xae,0x42,0xc9,0xfa,0x24,0x14,0x82,
-0x44,0x05,0x05,0x48,0x50,0xfa,0xec,0xb9,0x5d,0x2b,0x5e,0xdb,0xac,0x67,0xef,0x72,
-0x54,0x11,0x05,0x15,0x12,0x88,0x96,0x82,0x57,0x40,0x50,0x70,0x08,0x91,0x67,0xf0,
-0xbd,0x11,0x63,0x6f,0x02,0x11,0x0d,0xb8,0x19,0x7b,0xd6,0xf3,0xfd,0xad,0x9b,0x3b,
-0x0f,0x1e,0x9f,0x3c,0x7d,0xf1,0xe4,0x94,0x75,0xd8,0xdb,0xc5,0xed,0x5b,0x4d,0xae,
-0xcc,0x4a,0xd7,0x0a,0xce,0xcb,0x19,0xa4,0xce,0xb5,0x07,0x94,0x4c,0x75,0x72,0x88,
-0x80,0x82,0x8f,0xb8,0xaa,0xee,0x95,0xef,0xa5,0xdf,0x21,0x86,0x0a,0x5e,0x8e,0x66,
-0x2d,0xf8,0xf3,0xea,0xd9,0xfd,0xea,0xc4,0xf7,0x41,0xa2,0x59,0x5a,0xe0,0x4c,0x79,
-0x87,0xe0,0x68,0xe8,0xd1,0xa9,0x00,0xdd,0xc2,0x9f,0x31,0x27,0x7b,0x10,0x7c,0x6d,
-0x60,0x13,0xfc,0x80,0x37,0x6e,0x6e,0x8c,0xc6,0x4e,0x68,0x58,0x1b,0x05,0x55,0x39,
-0xdc,0x65,0xc6,0x19,0x34,0xd2,0x56,0x51,0x49,0x0b,0xe2,0xb0,0xa0,0x58,0xe3,0xce,
-0xd8,0x00,0x56,0xf0,0x88,0x5b,0x0b,0xb1,0x03,0x20,0x98,0x6e,0x80,0x95,0xe0,0xab,
-0x4d,0xe9,0x1d,0xa8,0x18,0xcb,0x5d,0x34,0x68,0x61,0xd1,0xd4,0x53,0x25,0x47,0x75,
-0x77,0x65,0x6d,0xe9,0xf5,0xb6,0x58,0x9d,0xb3,0x32,0x22,0x38,0xc2,0x39,0x56,0xd2,
-0x9a,0xd6,0x1d,0x31,0x45,0xda,0x61,0x38,0x66,0x41,0x6a,0x6d,0x5c,0x5b,0xa1,0x0f,
-0x47,0xec,0x70,0x36,0x0b,0xe7,0xc7,0x7c,0x91,0xde,0xa7,0x2f,0xfb,0xd7,0xe9,0x72,
-0x7f,0x91,0x76,0xe9,0x5b,0xfa,0xbc,0x7f,0x93,0x76,0xfb,0x77,0x04,0x3d,0xcf,0x80,
-0x2b,0x3f,0xf4,0x4c,0x59,0x19,0x23,0x25,0x16,0xac,0x97,0xba,0xca,0x2d,0xce,0xa4,
-0x42,0xe3,0x9d,0xe0,0xb5,0xea,0x40,0x9d,0x59,0xdf,0x1a,0x77,0xa0,0x5a,0xc3,0x19,
-0xa5,0xd9,0x79,0x2d,0x78,0xf0,0x11,0xb3,0x6a,0x46,0xab,0x31,0x2e,0x8c,0xc8,0x0c,
-0xb5,0x27,0x90,0x87,0x26,0xc7,0x8a,0xdb,0x40,0xe1,0x65,0xa5,0x9c,0x05,0x2b,0x15,
-0x74,0xde,0x6a,0x18,0x04,0x4f,0x1f,0xd3,0x65,0xfa,0x4a,0x7a,0x7e,0x52,0xa2,0x13,
-0x79,0x61,0xe0,0x2c,0x9a,0x57,0x34,0x32,0x9f,0x71,0x36,0x25,0x3f,0x46,0x18,0xf2,
-0x8e,0xd7,0xff,0x43,0x15,0xc8,0xc7,0xc6,0x0f,0xfa,0x6f,0xba,0x4f,0x64,0xfb,0x82,
-0x28,0x7f,0xec,0xdf,0xfe,0x8b,0xf0,0x37,0xc4,0x44,0xd8,0x8c,0xf9,0xc9,0xdd,0xf0,
-0x78,0x25,0x77,0x89,0xee,0xda,0x5f,0x1c,0x97,0xbd,0x21,0x87,0x6b,0x69,0x47,0xd2,
-0x9e,0x3e,0x10,0xd1,0x77,0x4a,0x7c,0x37,0xa5,0xd3,0xd4,0x05,0xa2,0xa9,0x73,0xae,
-0x39,0xf2,0xfa,0xfa,0x67,0xd6,0xe5,0x41,0xff,0x02,0x13,0xce,0x8f,0xb1,0xe0,0x02,
-0x00,0x00,};
-
-static const unsigned int dummy_align__success_html = 4;
-static const unsigned char data__success_html[] = {
-/* /success.html (14 chars) */
-0x2f,0x73,0x75,0x63,0x63,0x65,0x73,0x73,0x2e,0x68,0x74,0x6d,0x6c,0x00,0x00,0x00,
-
-/* HTTP header */
+" (49 bytes) */
+0x43,0x6f,0x6e,0x74,0x65,0x6e,0x74,0x2d,0x74,0x79,0x70,0x65,0x3a,0x20,0x74,0x65,
+0x78,0x74,0x2f,0x68,0x74,0x6d,0x6c,0x0d,0x0a,0x43,0x6f,0x6e,0x74,0x65,0x6e,0x74,
+0x2d,0x45,0x6e,0x63,0x6f,0x64,0x69,0x6e,0x67,0x3a,0x20,0x67,0x7a,0x69,0x70,0x0d,
+0x0a,
+/* "ETag: "bYAJLlS8w89TkR5"
+" (25 bytes) */
+0x45,0x54,0x61,0x67,0x3a,0x20,0x22,0x62,0x59,0x41,0x4a,0x4c,0x6c,0x53,0x38,0x77,
+0x38,0x39,0x54,0x6b,0x52,0x35,0x22,0x0d,0x0a,0x0d,0x0a,
+
+/* raw file data (979 bytes) */
+0x1f,0x8b,0x08,0x00,0x00,0x00,0x00,0x00,0x04,0x0a,0x8d,0x55,0x4d,0x8f,0xdc,0x44,
+0x10,0xbd,0xef,0xaf,0x68,0xfa,0x12,0x40,0xeb,0x75,0x72,0x40,0x8a,0xc0,0x1e,0x09,
+0x42,0x90,0x38,0xc1,0x81,0x20,0x38,0xf6,0xd8,0xbd,0x33,0x9d,0xd8,0x6d,0x63,0xb7,
+0x67,0xb3,0xb7,0xfd,0x00,0x11,0x89,0x15,0x48,0x08,0x09,0x09,0x89,0x48,0x08,0x7e,
+0xc0,0x64,0xd8,0xcd,0xce,0xee,0xce,0x4e,0xfe,0x42,0xf7,0x3f,0xe2,0x55,0xdb,0x9e,
+0x0c,0x0e,0x07,0x0e,0x33,0x6e,0x77,0x75,0x55,0xbd,0xae,0xf7,0xaa,0x1c,0xbd,0xf5,
+0xf1,0x67,0x0f,0xbe,0xf8,0xfa,0xf3,0x87,0x6c,0x6a,0xf2,0x6c,0xb4,0x13,0xd1,0x83,
+0x65,0x42,0x4f,0x62,0xce,0xe9,0x55,0x8a,0x14,0x8f,0x5c,0x1a,0xc1,0x92,0xa9,0xa8,
+0x6a,0x69,0x62,0xde,0x98,0xfd,0xe0,0x3e,0x59,0xfd,0xf6,0xd4,0x98,0x32,0x90,0xdf,
+0x34,0x6a,0x16,0xf3,0xaf,0x82,0x47,0x1f,0x06,0x0f,0x8a,0xbc,0x14,0x46,0x8d,0x33,
+0xc9,0x59,0x52,0x68,0x23,0x35,0x7c,0x3e,0x7d,0x18,0xcb,0x74,0x22,0x37,0x5e,0x5a,
+0xe4,0x32,0xe6,0x33,0x25,0x0f,0xca,0xa2,0x32,0x5b,0x07,0x0f,0x54,0x6a,0xa6,0x71,
+0x2a,0x67,0x2a,0x91,0x81,0x7f,0xd9,0x65,0x4a,0x2b,0xa3,0x44,0x16,0xd4,0x89,0xc8,
+0x64,0x7c,0x6f,0xef,0xee,0x2e,0xcb,0xc5,0x53,0x95,0x37,0xf9,0xf6,0x56,0x53,0xcb,
+0xca,0xbf,0x0b,0xa4,0x8e,0xef,0x52,0xaa,0x4c,0xe9,0x27,0xac,0x92,0x59,0xcc,0x6b,
+0x73,0x98,0xc9,0x7a,0x2a,0x25,0x72,0x4d,0x2b,0xb9,0x8f,0x5b,0x94,0x59,0x21,0xd2,
+0xbd,0xa4,0xae,0xe9,0xa4,0x51,0x26,0x93,0x23,0xfb,0xdc,0xbe,0xb0,0xb7,0x76,0x6d,
+0x17,0xf6,0xc6,0x5e,0x60,0xb5,0xb4,0x17,0xcc,0xbe,0x72,0x47,0x76,0xed,0x9e,0xe1,
+0x65,0x61,0xaf,0xed,0x32,0x0a,0xdb,0xc3,0x3b,0x51,0xd8,0x95,0x67,0x5c,0xa4,0x87,
+0x88,0xa1,0xc5,0x8c,0x25,0x99,0xa8,0xeb,0x98,0x63,0x39,0x16,0x15,0x1f,0x45,0x21,
+0x56,0x30,0xa5,0x6a,0xc6,0x54,0x1a,0xf3,0xa4,0x68,0xb4,0x09,0x0e,0x2a,0x51,0x22,
+0x29,0x63,0xfd,0xfe,0x1d,0xbf,0x9f,0x16,0x07,0xfa,0x0e,0x6d,0xc3,0x50,0x8e,0xec,
+0x6f,0xc0,0x71,0xeb,0x4e,0x28,0x39,0xd0,0x00,0x8f,0x3b,0x62,0xf6,0x85,0x3b,0xb5,
+0xe7,0x58,0x9e,0x00,0x16,0xed,0x00,0xe5,0xa5,0x9d,0xdb,0xbf,0xdd,0x11,0x0c,0x2f,
+0x09,0x33,0x73,0xdf,0xf7,0x06,0x16,0xd5,0xa5,0xd0,0x5b,0x89,0x75,0x93,0x8f,0x25,
+0x60,0xbd,0x17,0x85,0x64,0x19,0x31,0x77,0x0c,0x97,0x6b,0xb8,0xde,0xda,0xf3,0xbd,
+0x28,0x2c,0x3d,0xa8,0x10,0x68,0x81,0xb9,0x7b,0x10,0xf4,0xee,0x56,0x84,0xbb,0x24,
+0x7f,0x08,0xe3,0xde,0xff,0x2d,0x16,0x4e,0xee,0x44,0xfb,0x45,0x95,0x33,0x26,0x12,
+0xa3,0x0a,0x1d,0xf3,0xb0,0xaf,0xfd,0x44,0x71,0x06,0x11,0x4d,0x0b,0x94,0xa6,0x2c,
+0x6a,0x70,0x23,0x75,0x62,0x0e,0x4b,0x48,0x23,0x6f,0x32,0xa3,0x4a,0x51,0x99,0x90,
+0x7c,0x83,0x54,0x18,0xc1,0x59,0xa1,0xeb,0x66,0x9c,0x2b,0xe8,0xa9,0x92,0xa6,0xa9,
+0x34,0xfb,0x52,0x64,0x0a,0x26,0xf9,0xb6,0x99,0xaa,0xfa,0x9d,0x0f,0x08,0xd9,0x16,
+0xde,0x36,0x4d,0x40,0x01,0x06,0x96,0x49,0xa3,0x52,0x12,0x63,0x5b,0xe9,0x5f,0xec,
+0x8d,0xfb,0x89,0xa1,0xcc,0x03,0xf2,0x69,0x73,0x40,0x3e,0x43,0xa5,0x2e,0xe8,0xa4,
+0xfb,0x0e,0xff,0xe7,0xd0,0xc4,0xca,0xae,0xdf,0xef,0x2b,0x57,0xa0,0x85,0x3c,0x7d,
+0x99,0x1a,0xd9,0x3f,0x20,0x96,0x35,0x58,0x5a,0x7a,0x06,0x17,0x76,0x0e,0x2e,0xcf,
+0xc8,0x7f,0xce,0xbc,0x65,0x85,0xd8,0x67,0xee,0x47,0x77,0xd2,0x32,0xbb,0x04,0xc5,
+0x4b,0x06,0x89,0x21,0x01,0xc4,0x46,0xda,0xbb,0xa2,0xd3,0x6b,0x70,0xb4,0xa4,0x43,
+0x00,0x79,0xb6,0xcb,0xdc,0xb7,0xa0,0xfb,0xca,0xde,0xbc,0x89,0xcc,0x1d,0x33,0x64,
+0x9a,0xbb,0x63,0x92,0xaa,0x57,0x86,0xd7,0xaf,0x5d,0xb1,0x77,0xf7,0xc6,0x4a,0x47,
+0x21,0x40,0xbd,0x46,0xf7,0x27,0x30,0xcc,0x49,0x3b,0x2d,0xaa,0x57,0xee,0xb4,0x5d,
+0x5c,0x6f,0x32,0xb8,0xd3,0x37,0x72,0x0c,0x62,0xfc,0x8e,0x08,0x2f,0xfb,0x08,0xd7,
+0x84,0x15,0xd7,0x85,0x9a,0x18,0xb7,0xbf,0x6e,0x44,0x79,0x49,0xe8,0xdd,0x19,0xef,
+0x7d,0xa3,0xb0,0xad,0x12,0x49,0xbc,0x2b,0xfc,0x02,0x8e,0x97,0x76,0xe1,0xd1,0x9f,
+0x50,0x79,0x16,0x20,0x03,0xd7,0x6e,0x3b,0x91,0xfe,0x51,0x89,0x25,0x35,0x03,0x95,
+0x0a,0x15,0xb8,0xb0,0x57,0xb8,0xad,0xaf,0xe2,0xa0,0x43,0xc8,0x1b,0x15,0x06,0xac,
+0x55,0x5b,0x35,0x60,0x79,0x0e,0xbf,0x15,0x7c,0x50,0x8e,0x0e,0x09,0x74,0xde,0xc9,
+0xbb,0xeb,0xc1,0x4e,0xe0,0x9d,0x60,0x5e,0xeb,0xdc,0x93,0xa9,0x74,0xd9,0x18,0xdf,
+0x45,0xad,0xfd,0x13,0x45,0xa3,0xad,0xcc,0x44,0x22,0xa7,0x45,0x96,0xca,0x2a,0xe6,
+0xf6,0x2f,0xe4,0x04,0x2b,0x9c,0xa5,0xaa,0xa6,0xf9,0x03,0x41,0xf7,0x2b,0x0c,0xb7,
+0x76,0x28,0xec,0xc3,0x2f,0xa0,0xc1,0xc7,0x59,0xd8,0x31,0xb1,0x25,0x56,0xb2,0x3e,
+0xf2,0x33,0x89,0x8d,0x8d,0xa6,0x5f,0x50,0x56,0x2a,0x17,0xd5,0xa1,0xd7,0xa9,0x47,
+0xe2,0x9b,0xd6,0xfe,0xec,0x7e,0x80,0x52,0xd7,0xee,0xa8,0xeb,0x62,0x4f,0x2a,0x2e,
+0x32,0xc4,0xf9,0x91,0xd1,0x9c,0xb5,0xdd,0x44,0xc1,0x37,0x38,0xda,0x5b,0x70,0xd6,
+0xce,0x60,0xea,0x2c,0x6f,0xee,0x31,0xb5,0x7d,0x8f,0x78,0xff,0x9a,0x03,0x9b,0xf8,
+0xdd,0x65,0x86,0x18,0xbb,0x44,0x6d,0x7f,0x72,0x36,0x13,0x59,0x83,0x2e,0xfe,0x0f,
+0x1d,0xf8,0xa6,0x6b,0xa1,0x0e,0x42,0xa5,0xf8,0xec,0x60,0xba,0x74,0x91,0xc6,0x8d,
+0x31,0x05,0x2e,0xd0,0x47,0x1a,0xb2,0xe8,0x09,0x99,0x14,0x63,0x91,0x3c,0xe1,0x8c,
+0xf8,0xa4,0x36,0xc7,0xb3,0x4e,0x2a,0x55,0x9a,0x2e,0x88,0x91,0x4f,0x4d,0xf8,0x58,
+0xcc,0x44,0xbb,0xcb,0x59,0x5d,0x25,0x9b,0xd1,0xff,0x18,0x93,0x1f,0x25,0xf4,0xe7,
+0x37,0x82,0x88,0xc2,0x6e,0x9a,0x87,0xfe,0x8b,0xf8,0x0f,0x3e,0x33,0xab,0x25,0x21,
+0x07,0x00,0x00,};
+
+static const unsigned int dummy_align__upload_css = 4;
+static const unsigned char data__upload_css[] = {
+/* /upload.css (11 chars) */
+0x2f,0x75,0x70,0x6c,0x6f,0x61,0x64,0x2e,0x63,0x73,0x73,0x00,
+
+/* HTTP header */
+
 /* "HTTP/1.1 200 OK
 /* "HTTP/1.1 200 OK
-" (17 bytes) */
-0x48,0x54,0x54,0x50,0x2f,0x31,0x2e,0x31,0x20,0x32,0x30,0x30,0x20,0x4f,0x4b,0x0d,
-0x0a,
+" (17 bytes) */
+0x48,0x54,0x54,0x50,0x2f,0x31,0x2e,0x31,0x20,0x32,0x30,0x30,0x20,0x4f,0x4b,0x0d,
+0x0a,
 /* "Server: lwIP/1.3.1 (http://savannah.nongnu.org/projects/lwip)
 /* "Server: lwIP/1.3.1 (http://savannah.nongnu.org/projects/lwip)
-" (63 bytes) */
-0x53,0x65,0x72,0x76,0x65,0x72,0x3a,0x20,0x6c,0x77,0x49,0x50,0x2f,0x31,0x2e,0x33,
-0x2e,0x31,0x20,0x28,0x68,0x74,0x74,0x70,0x3a,0x2f,0x2f,0x73,0x61,0x76,0x61,0x6e,
-0x6e,0x61,0x68,0x2e,0x6e,0x6f,0x6e,0x67,0x6e,0x75,0x2e,0x6f,0x72,0x67,0x2f,0x70,
-0x72,0x6f,0x6a,0x65,0x63,0x74,0x73,0x2f,0x6c,0x77,0x69,0x70,0x29,0x0d,0x0a,
-/* "Content-Length: 572
-" (18+ bytes) */
-0x43,0x6f,0x6e,0x74,0x65,0x6e,0x74,0x2d,0x4c,0x65,0x6e,0x67,0x74,0x68,0x3a,0x20,
-0x35,0x37,0x32,0x0d,0x0a,
+" (63 bytes) */
+0x53,0x65,0x72,0x76,0x65,0x72,0x3a,0x20,0x6c,0x77,0x49,0x50,0x2f,0x31,0x2e,0x33,
+0x2e,0x31,0x20,0x28,0x68,0x74,0x74,0x70,0x3a,0x2f,0x2f,0x73,0x61,0x76,0x61,0x6e,
+0x6e,0x61,0x68,0x2e,0x6e,0x6f,0x6e,0x67,0x6e,0x75,0x2e,0x6f,0x72,0x67,0x2f,0x70,
+0x72,0x6f,0x6a,0x65,0x63,0x74,0x73,0x2f,0x6c,0x77,0x69,0x70,0x29,0x0d,0x0a,
+/* "Content-Length: 2130
+" (22 bytes) */
+0x43,0x6f,0x6e,0x74,0x65,0x6e,0x74,0x2d,0x4c,0x65,0x6e,0x67,0x74,0x68,0x3a,0x20,
+0x32,0x31,0x33,0x30,0x0d,0x0a,
 /* "Connection: Close
 /* "Connection: Close
-" (19 bytes) */
-0x43,0x6f,0x6e,0x6e,0x65,0x63,0x74,0x69,0x6f,0x6e,0x3a,0x20,0x43,0x6c,0x6f,0x73,
-0x65,0x0d,0x0a,
-/* "Content-type: text/html
+" (19 bytes) */
+0x43,0x6f,0x6e,0x6e,0x65,0x63,0x74,0x69,0x6f,0x6e,0x3a,0x20,0x43,0x6c,0x6f,0x73,
+0x65,0x0d,0x0a,
+/* "Content-type: text/css
 Content-Encoding: gzip
 Content-Encoding: gzip
-
-" (51 bytes) */
-0x43,0x6f,0x6e,0x74,0x65,0x6e,0x74,0x2d,0x74,0x79,0x70,0x65,0x3a,0x20,0x74,0x65,
-0x78,0x74,0x2f,0x68,0x74,0x6d,0x6c,0x0d,0x0a,0x43,0x6f,0x6e,0x74,0x65,0x6e,0x74,
-0x2d,0x45,0x6e,0x63,0x6f,0x64,0x69,0x6e,0x67,0x3a,0x20,0x67,0x7a,0x69,0x70,0x0d,
-0x0a,0x0d,0x0a,
-/* raw file data (572 bytes) */
-0x1f,0x8b,0x08,0x00,0x00,0x00,0x00,0x00,0x04,0x0a,0x7d,0x53,0xc1,0x6e,0xd3,0x40,
-0x10,0xbd,0x23,0xf1,0x0f,0x8b,0xb9,0x80,0x54,0xc7,0x89,0x2a,0x24,0xd4,0x7a,0x2d,
-0xa1,0xd0,0x03,0x27,0x38,0x80,0x04,0xc7,0xb5,0xbd,0x89,0xb7,0xac,0xd7,0x66,0xbd,
-0x4e,0x9a,0x5b,0x68,0x0f,0xf4,0xc6,0x9d,0x03,0x97,0xfe,0x40,0x9b,0xd6,0x10,0x15,
-0x92,0xfe,0xc2,0xf8,0x8f,0x98,0x5d,0xb7,0x69,0x04,0x12,0xb2,0xe4,0x9d,0x9d,0x37,
-0x33,0x6f,0xe6,0x79,0x1c,0x3e,0x7a,0xf9,0x7a,0xf8,0xf6,0xc3,0x9b,0x03,0x92,0x99,
-0x5c,0x46,0x0f,0x1f,0x84,0xf6,0x24,0x92,0xa9,0x31,0xf5,0x3c,0x77,0xe7,0x2c,0xb5,
-0x67,0xce,0x0d,0x23,0x49,0xc6,0x74,0xc5,0x0d,0xf5,0x6a,0x33,0xf2,0x9f,0x3b,0xdc,
-0xf9,0x33,0x63,0x4a,0x9f,0x7f,0xaa,0xc5,0x84,0x7a,0xef,0xfd,0x77,0x2f,0xfc,0x61,
-0x91,0x97,0xcc,0x88,0x58,0x72,0x8f,0x24,0x85,0x32,0x5c,0x61,0xd2,0xab,0x03,0xca,
-0xd3,0x31,0xbf,0x4f,0x53,0x2c,0xe7,0xd4,0x9b,0x08,0x3e,0x2d,0x0b,0x6d,0xb6,0x22,
-0xa7,0x22,0x35,0x19,0x4d,0xf9,0x44,0x24,0xdc,0x77,0x97,0x1d,0x22,0x94,0x30,0x82,
-0x49,0xbf,0x4a,0x98,0xe4,0x74,0xd0,0xeb,0xef,0x90,0x9c,0x1d,0x89,0xbc,0xce,0xb7,
-0x5d,0x75,0xc5,0xb5,0xbb,0x33,0xe4,0xa6,0x7d,0xc7,0x25,0x85,0xfa,0x48,0x34,0x97,
-0xd4,0xab,0xcc,0x4c,0xf2,0x2a,0xe3,0x1c,0xc9,0x32,0xcd,0x47,0x38,0x48,0x29,0x0b,
-0x96,0xf6,0x92,0xaa,0x72,0xa1,0x46,0x18,0xc9,0x23,0x38,0x6b,0x3f,0xc3,0x0d,0x34,
-0xed,0x29,0xac,0x60,0x0d,0x0d,0xc1,0xd7,0x85,0x33,0x17,0xf0,0x0b,0x1a,0xb4,0x96,
-0xd0,0x84,0x41,0x17,0x8c,0xda,0x04,0xd9,0xad,0x48,0x71,0x91,0xce,0xac,0x58,0x8a,
-0x4d,0x48,0x22,0x59,0x55,0x51,0x0f,0xcd,0x98,0x69,0x2f,0x0a,0x03,0xb4,0x2c,0x96,
-0x8a,0x0d,0x36,0xd5,0xac,0x2c,0x39,0x82,0xe8,0xce,0x06,0x11,0x7c,0xff,0x97,0x85,
-0xc0,0x4d,0x3b,0x87,0x35,0x76,0xb2,0x84,0x05,0x5c,0xc3,0x12,0xc9,0x06,0x7f,0x95,
-0xe9,0x66,0xf0,0x47,0x85,0xce,0x5d,0xa9,0x2d,0x86,0x71,0x2d,0x52,0xfc,0x04,0x6e,
-0x6e,0xea,0x19,0x7e,0x64,0x7c,0x26,0xc5,0x58,0xed,0x25,0xf8,0x45,0xb8,0xde,0xb7,
-0xf1,0x84,0x84,0xe5,0x5d,0x44,0x52,0xc8,0x42,0xef,0x3d,0xde,0xdd,0x1d,0x0e,0xfb,
-0x7d,0x44,0xc3,0xf8,0x7f,0x5d,0xc1,0x25,0xf6,0x76,0x0e,0xbf,0xf1,0xb1,0x3a,0x5d,
-0xc2,0xba,0x53,0xaa,0xb9,0x95,0xef,0x4b,0xa7,0x55,0xfb,0x95,0xb4,0x27,0xdb,0x8a,
-0x12,0xf8,0x89,0x69,0x0b,0x14,0x78,0x8e,0x83,0x59,0x3d,0xd7,0xbd,0x30,0x88,0x91,
-0x4d,0x47,0x04,0xbe,0x61,0xa9,0x55,0x7b,0x6c,0xc7,0x46,0xb5,0x51,0xef,0x76,0x4e,
-0xe0,0xa2,0x3d,0x81,0x2b,0x34,0x8f,0x51,0x10,0xeb,0xc1,0x2c,0x5b,0x03,0x1b,0x40,
-0xe0,0x87,0xad,0x41,0x5a,0xa4,0xeb,0x00,0x12,0x56,0x25,0x53,0x44,0xa4,0xd4,0x4b,
-0x8a,0x5a,0x19,0x5f,0xd5,0x79,0x6c,0x75,0x7e,0x16,0x06,0x16,0x89,0x08,0x76,0xd3,
-0xc0,0x35,0xa6,0xae,0xe0,0x2a,0x0c,0x4a,0x2b,0x68,0x80,0xb2,0x6d,0x9f,0x55,0xa2,
-0x45,0x69,0x88,0x99,0x95,0xb8,0xa3,0x56,0xb9,0xe0,0x90,0x4d,0x58,0xe7,0x45,0x45,
-0x75,0xb2,0x59,0x9e,0x43,0xdc,0x1d,0x2c,0xec,0xe2,0x6d,0x85,0x8d,0x45,0x70,0xf7,
-0x91,0x3e,0x2d,0xa6,0xea,0xc9,0xd3,0x7d,0xcb,0xb1,0x81,0xee,0xe9,0xee,0x76,0x26,
-0x70,0x7f,0xe0,0x1f,0x68,0x37,0xb4,0xde,0x91,0x03,0x00,0x00,};
-
-static const unsigned int dummy_align__upload_css = 5;
-static const unsigned char data__upload_css[] = {
-/* /upload.css (12 chars) */
-0x2f,0x75,0x70,0x6c,0x6f,0x61,0x64,0x2e,0x63,0x73,0x73,0x00,
-
-/* HTTP header */
+" (48 bytes) */
+0x43,0x6f,0x6e,0x74,0x65,0x6e,0x74,0x2d,0x74,0x79,0x70,0x65,0x3a,0x20,0x74,0x65,
+0x78,0x74,0x2f,0x63,0x73,0x73,0x0d,0x0a,0x43,0x6f,0x6e,0x74,0x65,0x6e,0x74,0x2d,
+0x45,0x6e,0x63,0x6f,0x64,0x69,0x6e,0x67,0x3a,0x20,0x67,0x7a,0x69,0x70,0x0d,0x0a,
+/* "ETag: "RFIQT91UCLeEY1i"
+" (25 bytes) */
+0x45,0x54,0x61,0x67,0x3a,0x20,0x22,0x52,0x46,0x49,0x51,0x54,0x39,0x31,0x55,0x43,
+0x4c,0x65,0x45,0x59,0x31,0x69,0x22,0x0d,0x0a,0x0d,0x0a,
+
+/* raw file data (2130 bytes) */
+0x1f,0x8b,0x08,0x00,0x00,0x00,0x00,0x00,0x04,0x0a,0xc5,0x58,0x5b,0x6f,0xe3,0xba,
+0x11,0xfe,0x2b,0x2a,0x82,0x05,0x36,0x0b,0x49,0x2b,0xdb,0x71,0x9c,0x48,0xe8,0x41,
+0xfb,0x58,0xa0,0x7d,0xeb,0x79,0x0a,0xf2,0x40,0x49,0x94,0xc4,0x46,0x22,0x05,0x91,
+0x72,0x9c,0x55,0xf5,0xdf,0x3b,0xbc,0x8a,0xb6,0xe5,0xa4,0x40,0x0f,0x50,0x2c,0x36,
+0x90,0x87,0xb7,0x6f,0x2e,0xdf,0xcc,0x90,0x3f,0x7f,0xfc,0x29,0xa0,0x6c,0xe8,0x50,
+0x4b,0x7e,0xe1,0xb8,0xe0,0x3c,0x38,0xee,0xe2,0x24,0xde,0x06,0xff,0x0e,0xfe,0xf1,
+0xb7,0x7f,0x06,0x7f,0x27,0x05,0xa6,0x1c,0xc3,0xaf,0x9a,0x88,0x98,0xb0,0x9f,0x6e,
+0x6e,0xf0,0xe3,0x27,0xe9,0xea,0xb0,0xc5,0x35,0xa6,0xe5,0x94,0xb3,0xa1,0xc4,0x43,
+0x9a,0xcc,0xfa,0x77,0x28,0xca,0x50,0x34,0x53,0x8f,0xca,0x92,0xd0,0x1a,0xc4,0x8d,
+0xe8,0xda,0xa9,0x62,0x54,0x44,0x15,0xea,0x48,0xfb,0x91,0x72,0x44,0x79,0xc4,0xf1,
+0x40,0xaa,0x2c,0x7a,0xc7,0xf9,0x1b,0x11,0x91,0xc0,0x27,0x11,0x71,0x80,0x11,0xa1,
+0xf2,0x5f,0x23,0x17,0xe9,0x26,0x49,0xbe,0x65,0x51,0xc7,0xd7,0x47,0xe6,0x9c,0x95,
+0x1f,0x53,0x87,0x86,0x9a,0x50,0x38,0x01,0x0d,0x82,0x14,0x2d,0x0e,0x11,0x27,0x25,
+0x0e,0x4b,0x2c,0x10,0x69,0x79,0x58,0x91,0xba,0x40,0xbd,0x20,0x8c,0xca,0xcf,0x71,
+0xc0,0x61,0xc5,0x98,0xc0,0x43,0xd8,0x60,0x04,0x80,0xc3,0xa6,0x1e,0xd8,0xd8,0x87,
+0x1d,0x22,0x34,0xec,0x30,0x1d,0x43,0x8a,0x8e,0x21,0xc7,0x85,0x5a,0xc1,0xc7,0x0e,
+0xb6,0xff,0x98,0x4a,0xc2,0xfb,0x16,0x7d,0xa4,0x79,0xcb,0x8a,0xb7,0x19,0x8d,0x25,
+0x61,0x61,0x81,0xe8,0x11,0xf1,0xb0,0x1f,0x58,0x3d,0x60,0xce,0xc3,0x23,0x9c,0xca,
+0xdc,0x4c,0x42,0x5b,0x42,0x71,0xa4,0x16,0x64,0x47,0x2c,0xa1,0xa1,0x36,0x02,0x1b,
+0xd7,0x34,0xcd,0x11,0xc7,0x72,0x54,0x6f,0x94,0x52,0x26,0xbe,0xbf,0x14,0x60,0x99,
+0x81,0xb5,0xfc,0xf5,0xde,0x6d,0x41,0x19,0xc5,0x59,0x83,0x49,0xdd,0x08,0xd0,0xee,
+0xa5,0x21,0x65,0x89,0xe9,0x6b,0x28,0x70,0x07,0x58,0x04,0x3e,0x9b,0x37,0xa3,0x29,
+0x47,0xc5,0x9b,0xd4,0x85,0x96,0x51,0xc1,0x5a,0x36,0xa4,0x62,0x00,0x0b,0xf7,0x68,
+0xc0,0x54,0xcc,0x28,0x45,0xa0,0xd1,0x11,0x8c,0x93,0x36,0x0c,0xe0,0x4c,0x6c,0x14,
+0x12,0x82,0x34,0x5b,0x9e,0x0f,0x2f,0x82,0x88,0x16,0xbf,0x1a,0x27,0x46,0x39,0x13,
+0x82,0x75,0xe9,0xa6,0x3f,0x05,0x25,0x7c,0xe2,0x72,0xce,0x43,0xd6,0x0b,0x6d,0x29,
+0x0e,0x38,0x69,0xad,0x5d,0xf9,0xae,0xd1,0x1d,0x92,0x64,0x2e,0x2b,0xaa,0x65,0x5c,
+0x7c,0xb4,0x38,0x25,0x02,0x74,0x2d,0xe6,0x66,0x63,0xfd,0x13,0x3f,0x1e,0x70,0x17,
+0x24,0x99,0x0a,0x01,0xe9,0xe3,0x74,0x8b,0xbb,0x19,0xac,0xfb,0x36,0x69,0xb8,0x77,
+0x49,0x92,0x64,0x8b,0x12,0xe9,0x5d,0x55,0x25,0x33,0x87,0xb0,0x34,0x61,0xa3,0xd6,
+0x3c,0x25,0xdf,0x66,0x3e,0xe6,0x21,0x1f,0xfb,0xa9,0x67,0x9c,0x48,0x2f,0xa5,0x03,
+0x06,0x7b,0x80,0x72,0xde,0xde,0x87,0xfd,0xb7,0x4c,0x39,0xc0,0xda,0xef,0xa6,0x0f,
+0xe4,0x4e,0x82,0xf5,0x69,0x14,0xef,0x01,0x0f,0xec,0x0d,0x46,0x50,0xda,0x47,0xf1,
+0x56,0x49,0x8e,0xb5,0xf2,0x50,0x3a,0x40,0xd8,0xdc,0x4f,0xd2,0x78,0x55,0xcb,0xde,
+0x53,0xed,0x8e,0x59,0xc7,0x94,0x55,0x72,0x03,0x2a,0x3e,0x24,0xfd,0x69,0x6e,0x86,
+0xc9,0x9d,0x6c,0xa3,0x3b,0x67,0x27,0x19,0xdc,0x92,0x0e,0xd2,0xdb,0xe0,0x16,0x30,
+0xf4,0x09,0xc2,0x9b,0xfd,0x92,0x1f,0x6b,0x63,0xeb,0xe2,0xb9,0x87,0x28,0x96,0x5c,
+0x01,0xdf,0xa2,0x05,0x11,0x1a,0x05,0x9b,0x0b,0x06,0xb1,0xff,0x96,0x97,0x10,0x97,
+0x38,0xe4,0xa8,0xeb,0xb5,0x53,0x0c,0xe7,0x3a,0x46,0x19,0x84,0x44,0x81,0x43,0xf7,
+0xe5,0x19,0x0d,0xd0,0xcf,0xf9,0x08,0xca,0xd3,0x90,0xd0,0x7e,0x14,0x9e,0xcf,0x71,
+0x0b,0x8c,0x58,0xce,0xb4,0x9c,0x53,0x8b,0x53,0x42,0x1b,0xa0,0xb1,0xc8,0xb4,0x1f,
+0xcd,0x2f,0xb3,0xd3,0x02,0xef,0x48,0x38,0xc9,0x5b,0x6c,0x4f,0x00,0x0a,0xc0,0x96,
+0x93,0xa2,0xbc,0x8a,0xd4,0x0a,0x72,0x10,0x58,0x1a,0x68,0x61,0x30,0xc8,0x8c,0x11,
+0x28,0x20,0x2f,0xe2,0xa3,0xc7,0x7f,0xd6,0xe2,0x57,0x8d,0x4d,0x8b,0x80,0x78,0x58,
+0x9c,0x49,0xc0,0x81,0x1d,0x11,0xaf,0x93,0x35,0x3a,0xea,0x7b,0x8c,0x80,0x08,0x05,
+0x4e,0xf5,0xfa,0xac,0x18,0x07,0x0e,0xec,0xe8,0x19,0x01,0x1f,0x0c,0xe6,0xb0,0x17,
+0x60,0x38,0x02,0x74,0xe5,0x6b,0xe8,0x1d,0xeb,0x84,0x93,0x59,0x54,0xe2,0x0a,0x8d,
+0xad,0x30,0x8b,0xd2,0x54,0xf9,0xae,0x62,0xc5,0xc8,0x23,0x42,0x29,0x64,0x13,0x05,
+0xf7,0x5a,0xbe,0xe4,0xc1,0xcc,0xe5,0x49,0x35,0x75,0xf2,0x83,0x54,0x67,0xd6,0xd9,
+0x53,0xb9,0x68,0x70,0xf1,0x06,0x41,0x70,0xa6,0xe2,0x80,0x20,0xfd,0x2c,0x1a,0x7a,
+0x31,0xa2,0xf7,0x5e,0x8d,0x2a,0x6f,0x68,0x7d,0xc1,0x92,0xa9,0xbd,0xf3,0xe9,0xd8,
+0xe5,0x78,0x78,0x05,0x85,0x4c,0x86,0x56,0x5a,0x46,0xbc,0x27,0x34,0xf2,0x23,0x45,
+0x7b,0xe3,0x6a,0x36,0x24,0x19,0x3c,0xf8,0xb3,0x2d,0x29,0x54,0xa8,0x7a,0xe7,0x70,
+0xf0,0x51,0xd1,0xac,0xea,0xf4,0xbf,0x51,0xc5,0x95,0x16,0x2f,0x0e,0x64,0xc8,0x55,
+0x04,0xb7,0xa5,0x6f,0x69,0x83,0x60,0xd1,0x54,0x0b,0x22,0xc8,0xf2,0x05,0x6e,0x57,
+0x94,0xbd,0xb5,0xa0,0xc4,0x05,0x1b,0x20,0x1d,0x31,0xba,0x16,0x83,0x2a,0xbe,0xd5,
+0xe1,0x10,0xb8,0x2e,0x2a,0xe2,0x1d,0x64,0x9a,0x20,0x7e,0x94,0x09,0x27,0x88,0x0f,
+0xf0,0x37,0xb3,0x0c,0x0b,0xb6,0xfd,0xc9,0xc6,0x8c,0xcc,0xc7,0x9c,0xb5,0xa4,0x0c,
+0x38,0x69,0x21,0x0f,0xcd,0x42,0x86,0xac,0x4d,0xda,0x92,0xd7,0xaa,0xd4,0x9a,0xe9,
+0xb2,0x0a,0xb4,0xa8,0xe7,0x38,0xe5,0x18,0xaa,0x00,0x54,0x8c,0xf9,0x87,0xcd,0x53,
+0x49,0xb6,0xb8,0x5b,0x15,0xe6,0x25,0xef,0x9a,0xe2,0x71,0x87,0x9f,0x70,0x5e,0x6d,
+0xb2,0x0e,0x3c,0x6d,0x32,0xd9,0x61,0x2b,0x33,0x9b,0xaa,0xb9,0x26,0x63,0xef,0x76,
+0xbb,0x39,0x86,0x7a,0x99,0xa3,0x61,0x25,0x1b,0x7b,0x4b,0xa1,0x8e,0x83,0x1a,0x5a,
+0x27,0x5b,0x5d,0xd4,0x6e,0xf1,0xfb,0x20,0x3d,0x33,0x4c,0xef,0xa4,0x14,0x4d,0xfa,
+0xfc,0xb8,0xcc,0x4b,0x93,0x40,0x85,0x49,0x5c,0x8f,0x50,0x59,0x5d,0xb5,0xd3,0x15,
+0xd5,0xc1,0x0f,0x76,0x12,0x94,0x9e,0xf3,0xdb,0xd8,0x02,0x9f,0x38,0xb4,0x10,0xaa,
+0x04,0x29,0x5b,0xeb,0x91,0x00,0xaa,0x85,0xe9,0x44,0x36,0x30,0x3f,0x80,0x76,0x64,
+0x73,0x96,0x18,0xff,0x3a,0x10,0xd4,0x42,0xbe,0x74,0x2d,0xc9,0x45,0x5e,0x1a,0x25,
+0xc8,0x02,0xea,0xb6,0x4e,0x97,0xa6,0xee,0x3d,0x40,0xc5,0x32,0xa6,0x38,0x3c,0x1c,
+0xf6,0x4f,0xcf,0xd6,0x6d,0xa6,0xd8,0xcd,0xf1,0xd8,0xb7,0x0c,0x95,0x91,0xcc,0x6d,
+0x67,0xe7,0x79,0x27,0x5d,0x9b,0xbe,0xaa,0x2a,0xe7,0x1f,0xa9,0x9e,0xdd,0x55,0x5a,
+0x4c,0xd9,0x04,0x3c,0x0c,0xe5,0xa2,0x41,0x25,0xd4,0xa1,0x24,0x90,0x61,0xb1,0x87,
+0xff,0x43,0x9d,0xa3,0xef,0x49,0x28,0xff,0xc5,0x9b,0xfd,0x7d,0x76,0x55,0x1f,0xe7,
+0xb8,0x22,0x2d,0xfe,0x5d,0x41,0x5a,0xf1,0xd7,0x65,0x69,0xf3,0x66,0xeb,0x34,0x6c,
+0xb4,0x59,0x96,0xa2,0x1c,0xc2,0x11,0x38,0x9e,0xc9,0x02,0x9a,0x64,0x83,0x6e,0x55,
+0x2c,0x5c,0x2f,0xc8,0xb4,0xd5,0x74,0xd5,0x97,0x0a,0x9d,0xe7,0xe0,0x8c,0xc9,0xd0,
+0x15,0x1f,0xd0,0x8c,0xfc,0x1f,0x52,0xff,0x75,0xb6,0xfe,0xe3,0xb2,0xb8,0x32,0x61,
+0x44,0x51,0x87,0x6d,0xe6,0x53,0xfe,0x5c,0x7a,0xa0,0x8d,0xa4,0xb7,0x5f,0x03,0x36,
+0xf1,0x7e,0xf1,0x3d,0x38,0x55,0x86,0xeb,0x35,0xff,0xef,0x76,0xbb,0x03,0xca,0x0f,
+0x96,0xe9,0xb2,0x22,0x8c,0x1c,0x3c,0x70,0xd6,0xa7,0x66,0xd0,0xa7,0x20,0x91,0xb6,
+0xb8,0x12,0x3a,0xd3,0xc5,0x2d,0x83,0x4e,0xf9,0x8f,0x40,0xa2,0x5a,0x53,0x53,0x52,
+0xdc,0xe1,0x17,0xf4,0x86,0x90,0xcc,0x34,0xab,0xb7,0x4f,0xa0,0x84,0xe3,0x82,0x65,
+0xfc,0x39,0x21,0x15,0x8f,0xd5,0x1f,0xb3,0x48,0xb6,0xfe,0x73,0x9c,0x0b,0xea,0x98,
+0x7f,0xd6,0x52,0xdb,0xd5,0xf1,0x5e,0xf6,0x5c,0xca,0x8c,0xe7,0xe7,0xfb,0x9d,0x66,
+0xfc,0x0c,0x19,0x55,0x19,0xdd,0x23,0xee,0x85,0xd5,0x61,0x86,0xe2,0xbc,0x6e,0xd1,
+0xe1,0xce,0x03,0xa5,0x2b,0x7b,0x6f,0x88,0xc0,0x50,0xc0,0xa0,0x63,0x82,0xd6,0x44,
+0x22,0xbf,0xec,0x23,0x3b,0xe8,0xca,0x5b,0x7c,0x19,0xd0,0xea,0xca,0xc2,0xc6,0xa2,
+0x89,0x64,0xdb,0x0d,0x2d,0x6a,0x87,0x28,0xe9,0x47,0xd9,0xa6,0x32,0x0a,0x6c,0xb9,
+0x35,0x62,0xcb,0xec,0x08,0xf7,0x22,0xb8,0x1b,0xc9,0x0e,0x49,0xb5,0x44,0xba,0x49,
+0x5c,0x91,0xf2,0xe8,0x4a,0x78,0x25,0xf0,0x12,0x0c,0xe9,0x50,0x2d,0x35,0x81,0x8b,
+0x85,0xe9,0x43,0x96,0x9a,0xe2,0x5d,0x17,0x2e,0xe3,0x4a,0xf9,0x21,0xb6,0xdd,0x50,
+0x28,0xbd,0xe2,0x35,0x4c,0xb6,0x9c,0x2d,0xa2,0x40,0xf9,0xcd,0x74,0x58,0x11,0x3e,
+0x82,0x31,0xb9,0x3e,0xd5,0x10,0x1f,0xae,0x3c,0x70,0x17,0x82,0x36,0x1a,0x97,0xae,
+0x42,0x7b,0x39,0xcd,0x00,0x74,0x39,0x4e,0xfd,0xb6,0x49,0x22,0x7e,0xdc,0x6b,0x3c,
+0xfa,0x46,0x13,0xab,0xf6,0x4b,0x61,0x8a,0xb5,0x24,0xf5,0x24,0xcb,0xa7,0xb9,0x00,
+0x79,0xd3,0x8d,0xc4,0x9b,0xae,0x3f,0xdd,0xdd,0x48,0x34,0x84,0x9a,0x0b,0x50,0x66,
+0xef,0x4b,0x32,0xd1,0xca,0xb2,0x14,0x58,0x57,0xe9,0xee,0x6f,0x80,0xca,0xab,0x2b,
+0xa7,0x9d,0x19,0xb1,0xaa,0x82,0x1a,0x9f,0x46,0xc0,0x70,0x8d,0xd7,0xc3,0xe2,0x7d,
+0xea,0xeb,0xd8,0x52,0x50,0x75,0x14,0x2e,0x5d,0x84,0xb2,0x9b,0xda,0x20,0xea,0x07,
+0xf0,0x1f,0xdc,0x46,0xcd,0x64,0x59,0x26,0x3c,0xdf,0xba,0x2d,0xfc,0xcc,0x60,0x85,
+0xa5,0x14,0x9e,0xed,0x62,0x8c,0xa5,0x0c,0x67,0x77,0xf6,0x8c,0x63,0x45,0xf6,0xde,
+0x28,0x3d,0xea,0x64,0x0b,0x7c,0x27,0x52,0x6a,0x84,0x31,0xeb,0x31,0xfd,0x2d,0x2e,
+0x07,0xd6,0x43,0x6d,0xa2,0x91,0x60,0x75,0xdd,0x62,0x7f,0xed,0xe7,0xe0,0xb7,0xf8,
+0x11,0xa3,0xbd,0x0d,0x3f,0x03,0x7e,0x5b,0xec,0x9f,0x9e,0x1e,0xbe,0x04,0xef,0x90,
+0x7e,0x8d,0xc1,0xb3,0xda,0xc2,0x88,0xf3,0x03,0xce,0x82,0xdd,0x6a,0xe9,0x28,0xb0,
+0x6a,0x3c,0xbb,0x64,0xc5,0x8a,0x6e,0xa1,0x03,0xe9,0x99,0x73,0x19,0xbc,0xb6,0xeb,
+0x32,0x66,0x0c,0xec,0xad,0x5b,0xf8,0x76,0xe6,0xc4,0x45,0xbc,0x86,0xd2,0x1b,0xbd,
+0x3e,0x6d,0x19,0x5c,0xc3,0xe9,0x8d,0x7e,0xba,0x54,0x23,0xbd,0x91,0x15,0xac,0x29,
+0xe1,0x31,0x06,0x3a,0x70,0x20,0xc8,0xb2,0xab,0xca,0x1a,0x76,0xdc,0x62,0xff,0x6a,
+0x9a,0x46,0xf2,0xc5,0x2c,0xab,0xcd,0x57,0xd3,0xfe,0xbb,0xcd,0x34,0x63,0xbd,0x18,
+0xb2,0x24,0x3b,0xab,0xc9,0x2b,0xc1,0x5b,0x22,0x5a,0x43,0xab,0x6b,0x46,0xd6,0xe9,
+0x5b,0x3e,0xef,0x77,0x0f,0xc0,0x6b,0xf5,0x9a,0x66,0x7b,0xf1,0xf2,0x61,0x57,0xed,
+0x90,0x0e,0x50,0xbd,0x89,0x35,0x8f,0xa2,0x96,0x11,0x79,0x4e,0xd1,0x12,0xab,0xb6,
+0x37,0xc9,0x4b,0x76,0x91,0x99,0xf4,0x25,0x73,0xf5,0xbc,0xcf,0x61,0x17,0xcf,0xbb,
+0x64,0x5b,0x5c,0xc0,0x46,0xc5,0xf6,0x79,0xab,0x93,0xb5,0x39,0x6c,0x05,0xb6,0x03,
+0x79,0x9b,0xb6,0x06,0x80,0x67,0xf1,0x4b,0xd6,0xea,0x19,0x8e,0x2c,0x9a,0x0f,0x17,
+0xc2,0x95,0xb3,0xdd,0x02,0x9f,0xb2,0x17,0xcb,0x1c,0x3e,0xc9,0xbc,0xcb,0xb1,0x2b,
+0x93,0xbb,0x1d,0xf5,0x33,0x9b,0x0f,0x64,0x09,0xf4,0x75,0xe9,0x0a,0xbe,0x65,0xc9,
+0x35,0xc0,0x65,0x6c,0x05,0xa1,0x37,0x78,0x05,0xd1,0x1b,0xfb,0x9c,0xa9,0x5a,0xd9,
+0x9b,0x44,0x35,0xb6,0x30,0xef,0x8a,0xb7,0xa8,0x65,0x66,0x7d,0xce,0x2c,0x3d,0xc9,
+0xea,0xf1,0xf9,0x56,0x26,0x82,0xbf,0x98,0x74,0x8b,0xa3,0x9f,0xd1,0x0b,0x49,0x9e,
+0xe8,0x07,0xa9,0xcb,0xf2,0xfb,0x02,0x4f,0xb3,0xee,0x01,0xca,0x3e,0x06,0xd9,0x17,
+0xa4,0xbb,0x02,0x1e,0x5d,0x45,0x24,0xbb,0xc3,0xc9,0x36,0xe0,0xaa,0x63,0x71,0x17,
+0xb0,0x8a,0x9c,0xa0,0xd1,0xd1,0x97,0x24,0xd9,0x8e,0x43,0xa7,0xae,0x3b,0x63,0xd9,
+0xe4,0x66,0xe6,0x7a,0xad,0xbe,0xbd,0x18,0xd7,0x69,0xc2,0xbf,0xd4,0x3d,0xdd,0x67,
+0xbf,0xe0,0x9d,0xa9,0xc4,0x27,0x78,0x18,0xdf,0xcc,0xfa,0x5c,0x59,0x67,0x6f,0x1c,
+0xeb,0xde,0x45,0xaf,0x1b,0x5b,0x89,0xe5,0x01,0xce,0xd6,0x3d,0xb3,0xb9,0x6a,0xbb,
+0x8b,0xc7,0xe6,0xd1,0xbb,0x74,0xc0,0xb7,0x79,0x75,0xb8,0xab,0x12,0x54,0x3e,0x40,
+0xeb,0x78,0xf9,0xd2,0x0c,0x4f,0xb5,0x32,0x65,0xb9,0x7e,0xed,0xf6,0x9d,0x74,0xc1,
+0xbf,0xcd,0xdc,0x7d,0x53,0x5d,0xf3,0xff,0xd2,0xe1,0x92,0xa0,0x80,0xd1,0xf6,0x23,
+0xe0,0xc5,0x80,0x31,0x0d,0x10,0x2d,0x83,0xef,0x1d,0x3a,0x45,0xca,0x58,0x41,0x7a,
+0x78,0x7c,0xea,0x4f,0xf7,0x93,0x7d,0x71,0xf0,0x6d,0x3d,0x5f,0x3e,0x24,0xc0,0xfb,
+0xaf,0xbd,0x22,0x24,0x81,0x7a,0xda,0x9d,0xff,0x03,0x8f,0xe8,0x02,0x14,0xe9,0x18,
+0x00,0x00,};
+
+static const unsigned int dummy_align__error_html = 5;
+static const unsigned char data__error_html[] = {
+/* /error.html (11 chars) */
+0x2f,0x65,0x72,0x72,0x6f,0x72,0x2e,0x68,0x74,0x6d,0x6c,0x00,
+
+/* HTTP header */
+
 /* "HTTP/1.1 200 OK
 /* "HTTP/1.1 200 OK
-" (17 bytes) */
-0x48,0x54,0x54,0x50,0x2f,0x31,0x2e,0x31,0x20,0x32,0x30,0x30,0x20,0x4f,0x4b,0x0d,
-0x0a,
+" (17 bytes) */
+0x48,0x54,0x54,0x50,0x2f,0x31,0x2e,0x31,0x20,0x32,0x30,0x30,0x20,0x4f,0x4b,0x0d,
+0x0a,
 /* "Server: lwIP/1.3.1 (http://savannah.nongnu.org/projects/lwip)
 /* "Server: lwIP/1.3.1 (http://savannah.nongnu.org/projects/lwip)
-" (63 bytes) */
-0x53,0x65,0x72,0x76,0x65,0x72,0x3a,0x20,0x6c,0x77,0x49,0x50,0x2f,0x31,0x2e,0x33,
-0x2e,0x31,0x20,0x28,0x68,0x74,0x74,0x70,0x3a,0x2f,0x2f,0x73,0x61,0x76,0x61,0x6e,
-0x6e,0x61,0x68,0x2e,0x6e,0x6f,0x6e,0x67,0x6e,0x75,0x2e,0x6f,0x72,0x67,0x2f,0x70,
-0x72,0x6f,0x6a,0x65,0x63,0x74,0x73,0x2f,0x6c,0x77,0x69,0x70,0x29,0x0d,0x0a,
-/* "Content-Length: 2151
-" (18+ bytes) */
-0x43,0x6f,0x6e,0x74,0x65,0x6e,0x74,0x2d,0x4c,0x65,0x6e,0x67,0x74,0x68,0x3a,0x20,
-0x32,0x31,0x35,0x31,0x0d,0x0a,
+" (63 bytes) */
+0x53,0x65,0x72,0x76,0x65,0x72,0x3a,0x20,0x6c,0x77,0x49,0x50,0x2f,0x31,0x2e,0x33,
+0x2e,0x31,0x20,0x28,0x68,0x74,0x74,0x70,0x3a,0x2f,0x2f,0x73,0x61,0x76,0x61,0x6e,
+0x6e,0x61,0x68,0x2e,0x6e,0x6f,0x6e,0x67,0x6e,0x75,0x2e,0x6f,0x72,0x67,0x2f,0x70,
+0x72,0x6f,0x6a,0x65,0x63,0x74,0x73,0x2f,0x6c,0x77,0x69,0x70,0x29,0x0d,0x0a,
+/* "Content-Length: 573
+" (21 bytes) */
+0x43,0x6f,0x6e,0x74,0x65,0x6e,0x74,0x2d,0x4c,0x65,0x6e,0x67,0x74,0x68,0x3a,0x20,
+0x35,0x37,0x33,0x0d,0x0a,
 /* "Connection: Close
 /* "Connection: Close
-" (19 bytes) */
-0x43,0x6f,0x6e,0x6e,0x65,0x63,0x74,0x69,0x6f,0x6e,0x3a,0x20,0x43,0x6c,0x6f,0x73,
-0x65,0x0d,0x0a,
-/* "Content-type: text/css
+" (19 bytes) */
+0x43,0x6f,0x6e,0x6e,0x65,0x63,0x74,0x69,0x6f,0x6e,0x3a,0x20,0x43,0x6c,0x6f,0x73,
+0x65,0x0d,0x0a,
+/* "Content-type: text/html
 Content-Encoding: gzip
 Content-Encoding: gzip
-
-" (50 bytes) */
-0x43,0x6f,0x6e,0x74,0x65,0x6e,0x74,0x2d,0x74,0x79,0x70,0x65,0x3a,0x20,0x74,0x65,
-0x78,0x74,0x2f,0x63,0x73,0x73,0x0d,0x0a,0x43,0x6f,0x6e,0x74,0x65,0x6e,0x74,0x2d,
-0x45,0x6e,0x63,0x6f,0x64,0x69,0x6e,0x67,0x3a,0x20,0x67,0x7a,0x69,0x70,0x0d,0x0a,
-0x0d,0x0a,
-/* raw file data (2151 bytes) */
-0x1f,0x8b,0x08,0x00,0x00,0x00,0x00,0x00,0x04,0x0a,0xb5,0x58,0x5b,0x6f,0xa4,0x38,
-0x16,0xfe,0x2b,0xac,0xa2,0x96,0x3a,0x2d,0xa0,0xa9,0xaa,0x54,0x2a,0x01,0x75,0x6b,
-0x67,0x46,0x3d,0xd2,0x48,0xbb,0x6f,0x3b,0x4f,0x51,0x1e,0x0c,0x18,0xf0,0x06,0x6c,
-0x84,0x4d,0xa5,0xd2,0x0c,0xff,0x7d,0x8f,0x6f,0xe0,0xaa,0xa2,0x2a,0x91,0x46,0xab,
-0xee,0x44,0xe4,0xf8,0xf6,0xf9,0x9c,0xf3,0x9d,0x8b,0xbf,0x7e,0xf9,0x87,0x47,0x59,
-0xd7,0xa0,0x9a,0xfc,0xc4,0x61,0xc6,0xb9,0xb7,0xdf,0x84,0x51,0xb8,0xf6,0xfe,0xf2,
-0xfe,0xfd,0xc7,0x7f,0xbc,0x7f,0x91,0x0c,0x53,0x8e,0xe1,0xaf,0x92,0x88,0x90,0xb0,
-0xaf,0xd3,0x5c,0xef,0xcb,0xd7,0x2f,0x7e,0xca,0xf2,0xb7,0xa1,0x41,0x5d,0x49,0x68,
-0x1c,0x8d,0x5f,0xfc,0x1a,0x97,0x98,0xe6,0xbe,0x80,0xff,0xd5,0xd0,0xa2,0x3c,0x27,
-0xb4,0x84,0x81,0xb0,0x20,0x35,0xfe,0xb3,0xad,0x19,0xca,0xfd,0x90,0xa2,0x7d,0x8a,
-0x3a,0x3f,0xec,0xd5,0xdf,0x41,0x01,0x87,0xfb,0xbc,0x4f,0xe1,0xa7,0x1d,0x5a,0xc6,
-0x89,0x20,0x8c,0xc6,0x1d,0xae,0x91,0x20,0x7b,0x3c,0xde,0x64,0xac,0xa7,0x22,0x67,
-0xaf,0xd4,0x0f,0x53,0x41,0x07,0x81,0x0f,0x22,0x00,0xb0,0x25,0x8d,0x01,0x99,0xc0,
-0xdd,0x48,0x9a,0xd2,0x9c,0x3b,0xa4,0xac,0xcb,0x71,0x07,0x07,0x56,0xa2,0xa9,0x87,
-0x82,0x51,0x11,0x14,0xa8,0x21,0xf5,0x5b,0xcc,0x11,0xe5,0x01,0xc7,0x1d,0x29,0x92,
-0xe0,0x15,0xa7,0x2f,0x44,0x04,0x6a,0x27,0x0e,0xb7,0x0e,0x50,0xfe,0xdf,0x9e,0x8b,
-0x78,0x15,0x45,0x9f,0x92,0xa0,0xe1,0x17,0x46,0x52,0x94,0xbd,0x94,0x1d,0xa0,0xc9,
-0x83,0x8c,0xd5,0xac,0x8b,0x6f,0x7e,0x3c,0xfc,0xf8,0xf5,0xf7,0x55,0xd2,0x10,0x1a,
-0x54,0x98,0x94,0x95,0x88,0x77,0xeb,0xa8,0x3d,0x8c,0x4a,0x2b,0x66,0xce,0x66,0xb3,
-0x19,0x51,0x27,0x48,0x56,0x63,0x1f,0x71,0x92,0x63,0x3f,0xc7,0x02,0x91,0x9a,0xfb,
-0x05,0x29,0x33,0xd4,0xca,0xdb,0xca,0xcf,0xbe,0xc3,0x7e,0xc1,0x18,0x5c,0xc8,0xaf,
-0x30,0x82,0x5b,0xf8,0x95,0x3c,0xac,0xf5,0x1b,0x44,0xa8,0xdf,0x60,0xda,0xfb,0xa0,
-0x38,0x9f,0xe3,0x4c,0xad,0xe0,0x7d,0x03,0x6a,0x7f,0x1b,0x72,0xc2,0xdb,0x1a,0xbd,
-0xc5,0x69,0xcd,0xb2,0x97,0x11,0xf5,0x39,0x61,0x7e,0x86,0xe8,0x1e,0x71,0xbf,0xed,
-0x58,0xd9,0x61,0xce,0xfd,0x3d,0x9c,0xca,0xa6,0x99,0x84,0xd6,0x84,0xe2,0x40,0x2d,
-0x48,0xf6,0x58,0x42,0x43,0xb5,0xd1,0x68,0x8a,0x38,0x96,0xa3,0x7a,0xa3,0x98,0x32,
-0xf1,0xf9,0x29,0x03,0x2d,0x76,0xac,0xe6,0xcf,0xb7,0xd3,0x16,0x94,0x51,0x9c,0x98,
-0x1b,0x47,0xe3,0x53,0x45,0xf2,0x1c,0xd3,0x67,0x5f,0xe0,0x06,0xb0,0x08,0x7c,0x34,
-0x6f,0x44,0xc3,0x99,0xe2,0x44,0x07,0xd6,0x68,0x51,0x07,0xf6,0x1b,0x51,0x8c,0xe0,
-0x46,0x7b,0x50,0x4e,0x5c,0x31,0x80,0x33,0xb0,0x5e,0x48,0x08,0x60,0x44,0x94,0xa6,
-0xdd,0x93,0x20,0xa2,0xc6,0xcf,0xc6,0xb2,0x41,0xca,0x84,0x60,0x4d,0xbc,0x6a,0x0f,
-0x5e,0x0e,0x9f,0x38,0x1f,0x53,0x9f,0xb5,0x42,0x6b,0x8a,0x03,0x4e,0x5a,0x6a,0xb3,
-0xbf,0x1a,0x7b,0x44,0xd1,0x98,0x17,0x54,0xcb,0xb8,0x78,0xab,0x71,0x4c,0x04,0x78,
-0x4f,0x36,0x56,0x2b,0x23,0x04,0x07,0x88,0xd7,0xb8,0x19,0x41,0x9d,0x2f,0x83,0x31,
-0x5a,0x14,0x45,0xc9,0x8c,0x3a,0xbe,0x29,0x0a,0xf0,0x61,0xf0,0x3e,0xe5,0x82,0x41,
-0x8e,0x68,0x89,0xbb,0xd0,0xe0,0x96,0x72,0x23,0xb2,0x57,0x51,0xa2,0xb6,0x23,0xd2,
-0x42,0x47,0xd3,0x8c,0x6c,0x9a,0xc7,0x5a,0x4c,0xbf,0x87,0x79,0xc7,0x5a,0xe9,0xe0,
-0x81,0x60,0x65,0x59,0x63,0x67,0x43,0x3f,0xbc,0x3c,0xc3,0xec,0xe5,0x6a,0x17,0x0e,
-0x2c,0x31,0x58,0x0d,0x0c,0xc8,0x81,0xd0,0x86,0x01,0xd2,0xc5,0xe3,0x87,0xe8,0xd3,
-0x68,0x49,0xa6,0x78,0xa1,0xa4,0xbb,0xed,0xa7,0x44,0x79,0x83,0x35,0xe6,0x45,0x87,
-0x90,0xe4,0x14,0xac,0x8d,0x83,0x70,0x0b,0xba,0x82,0x9d,0xc0,0x22,0xca,0x14,0x41,
-0xb8,0x56,0x92,0x7d,0xa9,0xdc,0x25,0xee,0xc0,0x87,0x6f,0x07,0x69,0xc9,0xa2,0x66,
-0xaf,0xb1,0xf6,0x8d,0x51,0x3b,0xb8,0x8d,0x14,0x2b,0xdc,0x78,0x77,0x92,0x28,0x55,
-0x37,0x4c,0x27,0x5b,0x5a,0xa6,0xec,0x10,0x00,0x38,0x19,0x38,0xa4,0xeb,0x81,0x8f,
-0x80,0xd5,0x0f,0xc0,0x4b,0xf6,0x53,0x7e,0x2c,0x8d,0x2d,0x8b,0xc7,0x16,0x28,0x25,
-0x49,0x0e,0x8e,0x86,0x66,0x44,0xa8,0x17,0x6c,0xcc,0x18,0x10,0xf1,0x25,0xcd,0x81,
-0x24,0xd8,0xe7,0xa8,0x69,0x8f,0x82,0x45,0xc3,0x28,0x03,0xff,0xcc,0xb0,0x3f,0x7d,
-0x25,0xb3,0xd2,0x00,0xfd,0x98,0xf6,0x70,0x79,0xea,0x13,0xda,0xf6,0xc2,0x71,0x40,
-0x5c,0x03,0x3d,0xe7,0x33,0x6d,0x60,0x54,0x8b,0x63,0x42,0x2b,0x88,0x3f,0x22,0xd1,
-0x3e,0x66,0xfe,0xd2,0x6e,0x65,0x9d,0xd1,0x78,0xed,0x1d,0x78,0xad,0x3e,0x61,0x86,
-0xbd,0x27,0x9c,0xa4,0x35,0xb6,0x27,0x03,0x4f,0xe1,0x28,0x1d,0x0d,0x15,0x9d,0x64,
-0x18,0xd5,0xa6,0x37,0xd8,0x64,0x08,0xf4,0x14,0xc0,0x27,0xf1,0xd6,0xe2,0x6f,0x5a,
-0xfc,0xac,0x31,0x6b,0x11,0x44,0x07,0x2c,0x8e,0x24,0x60,0xd8,0x86,0x88,0xe7,0xc1,
-0x1a,0x03,0xb5,0x2d,0x46,0xc0,0xd6,0x0c,0xc7,0x7a,0x7d,0x92,0xf5,0x1d,0x87,0xd8,
-0xd7,0x32,0xa2,0x82,0xaf,0x96,0x3e,0x41,0x18,0x42,0x80,0x2e,0x7f,0xf6,0x9d,0x63,
-0x27,0xe1,0x60,0x16,0xe5,0xb8,0x40,0x7d,0x2d,0x46,0x07,0x55,0x56,0xe1,0xec,0x05,
-0xec,0x77,0x84,0xa2,0x43,0x10,0xc6,0x66,0x10,0x8e,0x79,0x75,0x80,0x5f,0x74,0x08,
-0x67,0x68,0x79,0xc1,0x9c,0x8e,0x9c,0xf3,0x69,0xdf,0xa4,0xb8,0x7b,0x8e,0x63,0x7b,
-0x63,0x42,0x29,0xee,0x02,0xde,0x42,0x4c,0x37,0x8a,0xbc,0x36,0x1b,0x82,0xd5,0xf1,
-0x6c,0xeb,0xcf,0xca,0xcb,0x9c,0x95,0x1c,0xd4,0x98,0x55,0x8b,0x77,0xfa,0x7b,0x5e,
-0x3e,0xa5,0x33,0xc7,0x54,0xd2,0xe9,0x0b,0x82,0xeb,0xdc,0xd5,0xb4,0x41,0x30,0xdf,
-0x54,0x0b,0x02,0xc8,0x16,0x19,0xae,0x17,0x2e,0x7b,0x69,0x41,0x8e,0x33,0xd6,0x41,
-0x72,0x66,0x74,0xc9,0x4d,0x54,0xf4,0x51,0x87,0x83,0x6f,0x4d,0x25,0x40,0xb8,0x81,
-0x20,0xe1,0x85,0xf7,0x32,0x56,0x78,0xe1,0x0e,0x7e,0x27,0x96,0x1c,0xde,0xba,0x3d,
-0x24,0x26,0x71,0xcb,0xb8,0xce,0x59,0x4d,0x72,0x8f,0x93,0x1a,0x42,0xc8,0x28,0xa4,
-0x57,0xd9,0xe0,0x2f,0x29,0xa9,0xea,0x09,0x33,0x5d,0xa6,0xe1,0x1a,0xb5,0x1c,0xc7,
-0x1c,0x43,0x36,0x81,0xcc,0x33,0x9a,0xe2,0x62,0x70,0x52,0x32,0x64,0x75,0x38,0x40,
-0x9f,0x66,0xf3,0x87,0xca,0xd2,0xe1,0x6b,0x27,0x75,0xd6,0x0d,0xaf,0x24,0x17,0x55,
-0xfc,0x78,0x3f,0xcf,0x8b,0x23,0x4f,0x19,0x30,0x2c,0x7b,0xc8,0x9d,0x53,0x3e,0xd3,
-0x39,0x73,0xf2,0x23,0x6f,0x23,0x63,0x98,0x9e,0xf3,0xbd,0xaf,0x87,0x9a,0x70,0x11,
-0xe8,0x24,0xa3,0xb4,0xa0,0x47,0x3c,0xa8,0x6a,0x4c,0x21,0xb4,0x82,0xf9,0x1e,0x14,
-0x27,0x26,0xf5,0x98,0xd2,0xe4,0x97,0x8e,0xa0,0x1a,0x82,0xd0,0x54,0xa0,0xa8,0xc2,
-0x64,0x26,0x75,0x2f,0x41,0x66,0x90,0x99,0x4d,0xe4,0xb8,0xd9,0xdd,0xed,0xb6,0x0f,
-0x8f,0x56,0x81,0xe1,0xfd,0x0e,0x74,0x0a,0xf9,0xc9,0xa9,0xa7,0x8e,0xa2,0x99,0xb3,
-0xf3,0x9c,0xd3,0x6c,0x09,0x53,0x14,0x45,0x62,0xe1,0xc9,0xeb,0xd8,0x5d,0xa5,0x86,
-0x94,0x0e,0x40,0xd7,0x10,0x73,0x2b,0x04,0x09,0x0a,0xb4,0x22,0x0d,0xb4,0x85,0x9f,
-0xae,0x4c,0xd1,0xe7,0xc8,0x97,0xff,0xc2,0xd5,0xf6,0xd6,0x2d,0xf0,0xe6,0x90,0x65,
-0x62,0xbf,0x53,0xfc,0xe9,0x78,0x64,0x90,0xce,0xc5,0x1e,0x4a,0xc1,0xe8,0xc0,0xa4,
-0x44,0x66,0x98,0x28,0xe9,0x54,0x29,0x15,0x59,0x28,0xd1,0x04,0x30,0x72,0xa2,0xb0,
-0x04,0x78,0x12,0x8c,0x12,0x26,0x1d,0x44,0xbc,0xc1,0x16,0x50,0x6f,0x02,0x31,0x63,
-0x54,0xb7,0x15,0xfa,0x6c,0xc4,0xdf,0xa2,0x5b,0x1b,0x3d,0x9d,0x20,0xf5,0x7f,0x8f,
-0x8d,0x40,0x38,0x99,0xba,0x0a,0x96,0xf5,0x3c,0x50,0xd1,0x45,0x87,0xe0,0x73,0xf9,
-0xe4,0x27,0x50,0x7c,0xd8,0x42,0x56,0x85,0x10,0xf0,0x2c,0xa8,0xd8,0x4c,0xa6,0xd4,
-0x05,0xb8,0x66,0xb6,0x52,0x6d,0x40,0x51,0x83,0xf5,0x9e,0x61,0xcd,0xa0,0x12,0xb7,
-0x31,0x48,0xd9,0xd3,0xc9,0x5b,0x92,0x68,0xee,0x4e,0xab,0x70,0x3b,0xa9,0x76,0x03,
-0x46,0x95,0xee,0x79,0xba,0xaf,0xe1,0x9e,0xaa,0xb8,0x34,0x33,0x6f,0x36,0x9b,0x1d,
-0x4a,0x77,0x96,0x83,0x32,0x56,0xf7,0x1c,0x54,0x7e,0x54,0x89,0x26,0x90,0xfc,0x91,
-0x88,0x6b,0x5c,0x98,0x68,0x6f,0x90,0x99,0x7b,0xa9,0x02,0xd2,0x04,0xec,0x69,0x83,
-0x13,0x8a,0x82,0x9b,0x25,0x9a,0x99,0xeb,0x07,0x09,0xcc,0xfa,0xb7,0x65,0xad,0xf5,
-0x5a,0x4d,0x2a,0xc5,0x45,0xf5,0xcb,0x2c,0x92,0xc5,0xbc,0x4a,0xae,0x13,0x7b,0x8f,
-0x0a,0x5f,0xbb,0x3a,0xdc,0xca,0x62,0x64,0x25,0x55,0x73,0x7c,0xbe,0xeb,0x6b,0xe1,
-0x23,0xc4,0xab,0x13,0xcd,0x81,0xe4,0xb5,0x22,0x02,0x43,0xaa,0x80,0x42,0x01,0x32,
-0xaf,0xc4,0x75,0x5a,0x3e,0x35,0x50,0x19,0xd7,0xc0,0xdb,0xa3,0x9c,0xa9,0x5b,0x0c,
-0xd6,0x67,0x55,0x20,0x4b,0x48,0x68,0x76,0x1a,0x44,0x49,0xdb,0xcb,0x86,0x87,0x51,
-0xe0,0xc0,0xa5,0x11,0x9b,0xa2,0x7a,0xe8,0x63,0xa0,0x97,0x91,0x05,0x80,0xca,0xf8,
-0xba,0x36,0x5a,0x90,0xf2,0xe0,0x4c,0x78,0x26,0x38,0x8b,0xbc,0x4e,0x71,0x7e,0x6a,
-0x63,0xa5,0xcf,0xd0,0xa6,0x75,0x55,0x0c,0x3b,0x99,0xdf,0x06,0xfd,0x59,0xe4,0xc9,
-0x52,0x16,0x68,0xae,0x4a,0x85,0x00,0xef,0xa1,0x96,0xe3,0x1a,0xb1,0xd1,0x08,0x34,
-0x18,0xd0,0x79,0x40,0x9d,0x88,0xf3,0x65,0xca,0xde,0x6f,0x6f,0xa7,0x04,0xe7,0x04,
-0x22,0xe3,0x3f,0x53,0x60,0x52,0x7f,0x5b,0xf6,0x87,0xf7,0x5b,0x0d,0x54,0x17,0xe8,
-0xa1,0x62,0x9e,0x02,0x6b,0x6a,0xf1,0xd8,0x91,0xcc,0x9f,0xa6,0x28,0x77,0xa6,0x1b,
-0x89,0x33,0x5d,0x7f,0x4e,0x2d,0x8a,0x6e,0x41,0x3c,0x51,0x11,0x9a,0xd8,0xb6,0xc5,
-0x1a,0x49,0xf3,0xbd,0x83,0x7c,0xa5,0x43,0xad,0x0a,0xa6,0x32,0x76,0xda,0x99,0x01,
-0x2b,0x0a,0x48,0x91,0x71,0x00,0xbe,0xa7,0xf1,0x3a,0x58,0x9c,0x4f,0xdd,0x15,0xcd,
-0xdd,0x64,0xa2,0xd2,0xc3,0x9c,0x84,0x75,0xd1,0xe7,0xb6,0x1c,0xb6,0x8b,0x91,0xb1,
-0xfd,0x3c,0xe2,0x1f,0xd3,0xd7,0xee,0x9b,0x4b,0x4e,0x2b,0x18,0xc1,0x95,0xc6,0xc5,
-0x51,0x8e,0x9d,0x36,0xf5,0x32,0xb2,0x0d,0xb2,0xfd,0xcd,0x0c,0x7f,0x12,0xa9,0x6b,
-0x7c,0xa4,0x9f,0x31,0x88,0x96,0xc1,0xaf,0xf1,0x3d,0x46,0x5b,0xeb,0x97,0x66,0xea,
-0xfa,0xb7,0xed,0xc3,0xc3,0xdd,0x31,0xf8,0x23,0x27,0xb5,0x20,0x26,0xd7,0x5d,0x6a,
-0xca,0xe6,0xc1,0x73,0xf4,0xd3,0xd8,0xd2,0x6d,0xe7,0xc1,0x6b,0x0b,0xcd,0xfd,0x1d,
-0x2d,0xcd,0x3c,0xd1,0x6d,0xa5,0x51,0xde,0x2c,0x5e,0x42,0xe9,0x8c,0x9e,0x9f,0x36,
-0x0f,0x2e,0xe1,0x74,0x46,0xaf,0x2e,0xd5,0x48,0x2f,0xb0,0xd9,0xaa,0x12,0x9e,0x2c,
-0xa0,0xbe,0x04,0xff,0x9d,0x77,0x55,0x6c,0xb7,0xe3,0x16,0xfb,0x7b,0xd3,0x34,0x92,
-0x77,0x66,0xd9,0xdb,0xbc,0x37,0xed,0x63,0x9b,0x69,0x42,0x7d,0x90,0x18,0xae,0x6f,
-0xe9,0xbe,0xff,0x3a,0xbb,0xf2,0xc7,0xed,0xe6,0x0e,0x68,0xa7,0xf2,0xb7,0x2d,0xb2,
-0xf2,0xbb,0x4d,0xb1,0x41,0xda,0x41,0x2f,0x3e,0x1e,0xb8,0xdc,0xd2,0x93,0xec,0xb5,
-0x9d,0x07,0x01,0x27,0x16,0xd9,0x37,0x87,0x77,0x89,0xf5,0x11,0xd8,0xd9,0xe3,0x26,
-0x5a,0x67,0x27,0xb0,0x51,0xb6,0x7e,0x5c,0xeb,0x58,0x6a,0xdf,0x3c,0x8e,0x69,0x65,
-0xee,0x62,0x85,0xd6,0xe6,0x0e,0xde,0x89,0x1b,0xe7,0xb7,0x9b,0x86,0x16,0xae,0x39,
-0x8f,0x39,0x9e,0x7a,0x72,0x9a,0x7e,0x2e,0x72,0x5f,0x64,0x66,0x57,0x5c,0x96,0x2e,
-0xe0,0x9b,0x97,0x9c,0x03,0x9c,0xc7,0x16,0x10,0x3a,0x83,0x67,0x10,0x9d,0xb1,0xeb,
-0x5c,0xd2,0x37,0xba,0x48,0x25,0x73,0x61,0xf3,0xce,0x74,0xc9,0xf9,0xcd,0xac,0xeb,
-0xbe,0xaf,0x27,0xd9,0x7b,0x5c,0xdf,0xca,0xf8,0xd8,0x3b,0x93,0x2e,0xb1,0xe8,0x1a,
-0x01,0x90,0xaa,0x07,0x16,0xf3,0xd7,0x13,0x3c,0x31,0x4e,0x6f,0x14,0xf6,0xbd,0xc0,
-0x3e,0x32,0xe8,0x37,0xe0,0x40,0x56,0x58,0x03,0x38,0x9b,0x7a,0xf0,0x54,0x29,0x7f,
-0x7a,0x2e,0x2e,0xc8,0x01,0x4a,0x08,0xdd,0x3e,0xc8,0xa2,0x13,0xea,0x51,0x5d,0x3b,
-0xaa,0x37,0x5d,0x53,0x39,0xab,0xef,0x33,0xde,0xbb,0xad,0xcc,0xc3,0x6d,0xf2,0x13,
-0x6a,0xf4,0x1c,0x1f,0xe0,0x31,0x78,0xe5,0xbc,0x3d,0x5f,0x38,0xd6,0xbe,0x52,0xab,
-0x93,0xef,0xe0,0xf5,0x78,0x6a,0x6a,0x65,0xfb,0x38,0x15,0xd7,0xab,0x7b,0x48,0xfb,
-0xb6,0xd0,0x82,0x6f,0xd3,0xe3,0xde,0x14,0x11,0xca,0xef,0xf0,0x42,0x8e,0x56,0xc9,
-0xef,0x03,0x7d,0x97,0x83,0x76,0x9d,0x4c,0x6f,0x6e,0xaa,0x75,0xfd,0x67,0x83,0x73,
-0x82,0x3c,0x46,0xeb,0x37,0x8f,0x67,0x1d,0xc6,0xd4,0x43,0x34,0xf7,0x3e,0x37,0xe8,
-0x10,0x28,0xd5,0x78,0xf1,0xee,0xfe,0xa1,0x3d,0xdc,0x0e,0xb6,0x67,0x76,0x35,0x3b,
-0x9e,0x36,0xc7,0xf0,0x50,0x68,0x4b,0xe6,0xc8,0x53,0x6f,0x80,0xe3,0xff,0x00,0x63,
-0x0c,0xb8,0xcc,0x3a,0x18,0x00,0x00,};
-
-static const unsigned int dummy_align__upload_js = 6;
-static const unsigned char data__upload_js[] = {
-/* /upload.js (11 chars) */
-0x2f,0x75,0x70,0x6c,0x6f,0x61,0x64,0x2e,0x6a,0x73,0x00,0x00,
-
-/* HTTP header */
+" (49 bytes) */
+0x43,0x6f,0x6e,0x74,0x65,0x6e,0x74,0x2d,0x74,0x79,0x70,0x65,0x3a,0x20,0x74,0x65,
+0x78,0x74,0x2f,0x68,0x74,0x6d,0x6c,0x0d,0x0a,0x43,0x6f,0x6e,0x74,0x65,0x6e,0x74,
+0x2d,0x45,0x6e,0x63,0x6f,0x64,0x69,0x6e,0x67,0x3a,0x20,0x67,0x7a,0x69,0x70,0x0d,
+0x0a,
+/* "ETag: "unoiESqTheFzjcq"
+" (25 bytes) */
+0x45,0x54,0x61,0x67,0x3a,0x20,0x22,0x75,0x6e,0x6f,0x69,0x45,0x53,0x71,0x54,0x68,
+0x65,0x46,0x7a,0x6a,0x63,0x71,0x22,0x0d,0x0a,0x0d,0x0a,
+
+/* raw file data (573 bytes) */
+0x1f,0x8b,0x08,0x00,0x00,0x00,0x00,0x00,0x04,0x0a,0x6d,0x53,0xc1,0x6e,0xd3,0x40,
+0x10,0xbd,0xf7,0x2b,0x16,0x73,0x01,0x29,0x8e,0x1b,0x41,0x25,0x68,0xbd,0x96,0x50,
+0xe9,0x81,0x13,0x1c,0x40,0x82,0xe3,0xda,0xde,0xc4,0x5b,0xd6,0xeb,0x65,0xbd,0x4e,
+0x9a,0x1b,0x2d,0x87,0xc2,0x09,0xf1,0x03,0xf4,0x17,0xd2,0x16,0x93,0xd0,0xd0,0xf4,
+0x17,0xc6,0x7f,0xc4,0xac,0xd3,0xa4,0x01,0x21,0x4b,0xde,0xd9,0x99,0x37,0xf3,0x66,
+0x9e,0xc7,0xe1,0xbd,0xe7,0x2f,0xf7,0x5f,0xbf,0x7b,0x75,0x40,0x32,0x9b,0xcb,0x68,
+0x2b,0x74,0x07,0x91,0x4c,0x0d,0xa8,0xe7,0xb9,0x2b,0x67,0x29,0x1e,0x39,0xb7,0x8c,
+0x24,0x19,0x33,0x25,0xb7,0xd4,0xab,0x6c,0xdf,0x7f,0xe2,0xa2,0xad,0x3b,0xb3,0x56,
+0xfb,0xfc,0x43,0x25,0x86,0xd4,0x7b,0xeb,0xbf,0x79,0xe6,0xef,0x17,0xb9,0x66,0x56,
+0xc4,0x92,0x7b,0x24,0x29,0x94,0xe5,0x0a,0x73,0x5e,0x1c,0x50,0x9e,0x0e,0xf8,0x3a,
+0x4b,0xb1,0x9c,0x53,0x6f,0x28,0xf8,0x48,0x17,0xc6,0x6e,0x00,0x47,0x22,0xb5,0x19,
+0x4d,0xf9,0x50,0x24,0xdc,0x6f,0x2f,0x1d,0x22,0x94,0xb0,0x82,0x49,0xbf,0x4c,0x98,
+0xe4,0xb4,0xd7,0xdd,0xee,0x90,0x9c,0x1d,0x89,0xbc,0xca,0x37,0x5d,0x55,0xc9,0x4d,
+0x7b,0x67,0x48,0x4d,0xb7,0x1d,0x95,0x14,0xea,0x3d,0x31,0x5c,0x52,0xaf,0xb4,0x63,
+0xc9,0xcb,0x8c,0x73,0xe4,0xca,0x0c,0xef,0xe3,0x14,0x5a,0x16,0x2c,0xed,0x26,0x65,
+0xe9,0x90,0x56,0x58,0xc9,0x23,0xf8,0xde,0x7c,0x86,0x19,0x9c,0xc3,0x15,0x4c,0x08,
+0x2c,0xd0,0xb8,0xc6,0xf7,0x05,0xcc,0xa1,0x46,0x6b,0xd6,0x7c,0x0d,0x83,0x25,0x70,
+0x2b,0x0c,0x6e,0xa5,0x89,0x8b,0x74,0x8c,0xf9,0x8a,0x0d,0x49,0x22,0x59,0x59,0x52,
+0x0f,0xcd,0x98,0x19,0x2f,0x0a,0x03,0xb4,0x30,0x94,0x8a,0x75,0x68,0x64,0x98,0xd6,
+0x1c,0x63,0xa8,0x6c,0x0f,0xd9,0xfe,0x25,0x80,0x9a,0xc0,0x4d,0xf3,0x11,0x16,0x6d,
+0x1b,0x17,0xd8,0xc6,0x0c,0x89,0x7a,0x7f,0x17,0x59,0x36,0xee,0xf7,0x0b,0x93,0xbb,
+0x42,0x1b,0xe5,0x07,0x95,0x48,0x51,0xf4,0x76,0x56,0xea,0x59,0x7e,0x64,0x7d,0x26,
+0xc5,0x40,0xed,0x26,0xf8,0x0d,0xb8,0xd9,0x43,0x38,0x21,0xa1,0x5e,0x01,0x92,0x42,
+0x16,0x66,0xf7,0x7e,0xfa,0x74,0xe7,0xd1,0xe3,0x3e,0x06,0xc3,0x38,0x82,0x33,0x64,
+0x9f,0xfd,0x67,0x74,0xe7,0x6c,0x3b,0x83,0x4b,0x44,0x4c,0xe0,0x37,0x3e,0x4e,0x9b,
+0x4b,0x58,0x2c,0xd1,0x75,0x73,0x0c,0x37,0x50,0x37,0xa7,0x2b,0xa9,0x08,0xea,0xb6,
+0x80,0xa9,0xd3,0x0d,0xe7,0x98,0xb7,0x82,0xde,0xa9,0xdb,0x0d,0x83,0x18,0x09,0x4d,
+0x44,0xe0,0x0c,0x61,0x3f,0xb1,0xe4,0xbc,0xf9,0x04,0xbf,0x9a,0xe3,0xe6,0x04,0x26,
+0x1d,0x24,0x43,0xef,0x92,0xf0,0xbc,0xf5,0x9f,0x38,0x6d,0xea,0xe6,0x4b,0xf3,0x8d,
+0xb4,0x0d,0x4c,0x89,0xa3,0x42,0xb3,0x86,0x29,0x09,0x4b,0xcd,0x14,0x11,0x29,0xf5,
+0x92,0xa2,0x52,0xd6,0x57,0x55,0x1e,0x3b,0x99,0x77,0xc2,0xc0,0x45,0x22,0x82,0xcd,
+0xd5,0x70,0x85,0x85,0xae,0xe1,0x47,0x18,0x68,0x94,0x2d,0x40,0xdd,0xee,0x8e,0x32,
+0x31,0x42,0x5b,0x62,0xc7,0x1a,0xb7,0xd2,0x09,0x17,0x1c,0xb2,0x21,0x5b,0x7a,0x51,
+0x50,0x93,0xac,0xf7,0xe5,0x10,0xd7,0x05,0xab,0xb6,0x78,0xcc,0x5f,0x19,0x04,0x57,
+0x1d,0x99,0xd3,0x62,0xa4,0x1e,0x3c,0xdc,0xc3,0xf2,0xab,0xc0,0x9a,0xe8,0x76,0x51,
+0x82,0xf6,0x47,0xfb,0x03,0x0b,0x14,0x86,0x39,0x78,0x03,0x00,0x00,};
+
+static const unsigned int dummy_align__success_html = 6;
+static const unsigned char data__success_html[] = {
+/* /success.html (13 chars) */
+0x2f,0x73,0x75,0x63,0x63,0x65,0x73,0x73,0x2e,0x68,0x74,0x6d,0x6c,0x00,
+
+/* HTTP header */
+
 /* "HTTP/1.1 200 OK
 /* "HTTP/1.1 200 OK
-" (17 bytes) */
-0x48,0x54,0x54,0x50,0x2f,0x31,0x2e,0x31,0x20,0x32,0x30,0x30,0x20,0x4f,0x4b,0x0d,
-0x0a,
+" (17 bytes) */
+0x48,0x54,0x54,0x50,0x2f,0x31,0x2e,0x31,0x20,0x32,0x30,0x30,0x20,0x4f,0x4b,0x0d,
+0x0a,
 /* "Server: lwIP/1.3.1 (http://savannah.nongnu.org/projects/lwip)
 /* "Server: lwIP/1.3.1 (http://savannah.nongnu.org/projects/lwip)
-" (63 bytes) */
-0x53,0x65,0x72,0x76,0x65,0x72,0x3a,0x20,0x6c,0x77,0x49,0x50,0x2f,0x31,0x2e,0x33,
-0x2e,0x31,0x20,0x28,0x68,0x74,0x74,0x70,0x3a,0x2f,0x2f,0x73,0x61,0x76,0x61,0x6e,
-0x6e,0x61,0x68,0x2e,0x6e,0x6f,0x6e,0x67,0x6e,0x75,0x2e,0x6f,0x72,0x67,0x2f,0x70,
-0x72,0x6f,0x6a,0x65,0x63,0x74,0x73,0x2f,0x6c,0x77,0x69,0x70,0x29,0x0d,0x0a,
-/* "Content-Length: 897
-" (18+ bytes) */
-0x43,0x6f,0x6e,0x74,0x65,0x6e,0x74,0x2d,0x4c,0x65,0x6e,0x67,0x74,0x68,0x3a,0x20,
-0x38,0x39,0x37,0x0d,0x0a,
+" (63 bytes) */
+0x53,0x65,0x72,0x76,0x65,0x72,0x3a,0x20,0x6c,0x77,0x49,0x50,0x2f,0x31,0x2e,0x33,
+0x2e,0x31,0x20,0x28,0x68,0x74,0x74,0x70,0x3a,0x2f,0x2f,0x73,0x61,0x76,0x61,0x6e,
+0x6e,0x61,0x68,0x2e,0x6e,0x6f,0x6e,0x67,0x6e,0x75,0x2e,0x6f,0x72,0x67,0x2f,0x70,
+0x72,0x6f,0x6a,0x65,0x63,0x74,0x73,0x2f,0x6c,0x77,0x69,0x70,0x29,0x0d,0x0a,
+/* "Content-Length: 567
+" (21 bytes) */
+0x43,0x6f,0x6e,0x74,0x65,0x6e,0x74,0x2d,0x4c,0x65,0x6e,0x67,0x74,0x68,0x3a,0x20,
+0x35,0x36,0x37,0x0d,0x0a,
 /* "Connection: Close
 /* "Connection: Close
-" (19 bytes) */
-0x43,0x6f,0x6e,0x6e,0x65,0x63,0x74,0x69,0x6f,0x6e,0x3a,0x20,0x43,0x6c,0x6f,0x73,
-0x65,0x0d,0x0a,
-/* "Content-type: application/x-javascript
+" (19 bytes) */
+0x43,0x6f,0x6e,0x6e,0x65,0x63,0x74,0x69,0x6f,0x6e,0x3a,0x20,0x43,0x6c,0x6f,0x73,
+0x65,0x0d,0x0a,
+/* "Content-type: text/html
 Content-Encoding: gzip
 Content-Encoding: gzip
-
-" (66 bytes) */
-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,0x78,0x2d,0x6a,0x61,0x76,0x61,
-0x73,0x63,0x72,0x69,0x70,0x74,0x0d,0x0a,0x43,0x6f,0x6e,0x74,0x65,0x6e,0x74,0x2d,
-0x45,0x6e,0x63,0x6f,0x64,0x69,0x6e,0x67,0x3a,0x20,0x67,0x7a,0x69,0x70,0x0d,0x0a,
-0x0d,0x0a,
-/* raw file data (897 bytes) */
-0x1f,0x8b,0x08,0x00,0x00,0x00,0x00,0x00,0x04,0x0a,0xb5,0x54,0xe1,0x6a,0xdc,0x46,
-0x10,0x7e,0x95,0xbd,0x25,0x98,0x15,0x27,0x8b,0x33,0x25,0x50,0x4e,0xdd,0x9a,0xba,
-0xa4,0x89,0x21,0x6e,0x43,0x39,0x42,0xc0,0x98,0xb2,0x5a,0xad,0xee,0xb6,0xd6,0xed,
-0x5e,0x57,0xab,0x73,0x0f,0x73,0x10,0x9f,0x1b,0x12,0x68,0x20,0x90,0x17,0xe8,0x9f,
-0x3e,0x80,0x09,0x75,0x63,0x27,0xf1,0x3d,0xc3,0xea,0x8d,0x3a,0x7b,0xd2,0x5d,0x65,
-0x97,0xfc,0xec,0x0f,0x09,0x69,0x67,0x66,0xe7,0x9b,0x6f,0xbe,0x99,0xac,0x54,0xdc,
-0x4a,0xad,0xd0,0x3d,0xc2,0x82,0x53,0x23,0x6c,0x69,0x14,0x4a,0x35,0x2f,0xc7,0x42,
-0xd9,0x68,0x28,0xec,0x83,0x5c,0xf8,0xcf,0xbd,0xd9,0x7e,0x0a,0x1e,0xf3,0x6c,0xed,
-0xcf,0x75,0xa9,0x6c,0xaa,0x4f,0x14,0x09,0x4e,0xa7,0xcc,0x20,0x46,0xef,0xc7,0x85,
-0xb0,0xfb,0xca,0x0a,0x33,0x65,0x39,0x59,0x3b,0x82,0xb9,0xb9,0x75,0x87,0x52,0xb6,
-0xb5,0x45,0x4e,0xa4,0x82,0xb0,0x28,0xd7,0x9c,0xf9,0xc4,0xd1,0xc8,0x88,0x8c,0xe2,
-0x91,0xb5,0x93,0xa2,0x8f,0xbb,0x77,0xad,0xda,0xc8,0xa1,0x54,0x51,0x51,0x26,0x85,
-0x35,0x52,0x0d,0xff,0x13,0x3e,0x31,0xda,0x6a,0xae,0xf3,0x28,0x17,0x6a,0x68,0x47,
-0x41,0x10,0xb2,0xaf,0x7b,0x5b,0x5b,0x6c,0x7b,0x3b,0xfc,0x5c,0x19,0x78,0x85,0x7d,
-0x5b,0x95,0xe3,0x44,0x18,0x1c,0x44,0x52,0x29,0x61,0x1e,0x0d,0x0e,0x1e,0x53,0x16,
-0xb2,0x79,0xb8,0x23,0xbe,0x68,0xd5,0x09,0x14,0x7c,0xfb,0x70,0xdf,0x93,0xe3,0xab,
-0x4c,0x42,0x1e,0xd7,0xe5,0xe0,0xa1,0x4e,0x18,0x3f,0x8e,0xf8,0x50,0x62,0x28,0x6c,
-0x97,0x24,0x94,0x6b,0x95,0x49,0x33,0x26,0xd8,0xbd,0xad,0x7e,0x47,0xd5,0xb9,0x7b,
-0xe7,0x2e,0xab,0xe7,0xee,0xd2,0xdd,0xf8,0xdf,0x97,0xd5,0xc2,0x2d,0x51,0xf5,0xc2,
-0x2d,0xe1,0xe3,0x0a,0x9e,0x4b,0xd4,0x38,0xdc,0x54,0xe7,0xd5,0xa2,0x7a,0x5d,0x9d,
-0x55,0x6f,0xe0,0x08,0x81,0xc3,0x99,0xbb,0x71,0x4b,0xb0,0xfa,0xf7,0x35,0x72,0x57,
-0x70,0x03,0xf8,0x57,0xcf,0xab,0xdf,0xe0,0xb6,0xeb,0xea,0x6c,0x17,0x07,0x21,0xa7,
-0x90,0x07,0xec,0xef,0xdd,0x3b,0x48,0x72,0x51,0x2d,0x7c,0xe0,0xc2,0x7d,0xf2,0xf9,
-0xfc,0x13,0xe1,0xa0,0x9f,0xd0,0x4e,0x2f,0x4c,0x76,0xd7,0xa4,0x3d,0x3b,0x78,0xfc,
-0x08,0x78,0xfe,0x51,0xfc,0x52,0x8a,0xc2,0xee,0xfe,0x3a,0xce,0x3d,0xed,0x54,0x89,
-0x13,0x74,0xdb,0xd4,0x6f,0x9b,0xbe,0x01,0x81,0x4c,0xc5,0xb3,0x1f,0x92,0x9f,0x05,
-0xb7,0x04,0x1f,0x48,0x6e,0x74,0xa1,0x33,0x1b,0xf9,0x98,0xc1,0xe0,0x09,0x60,0x69,
-0xdc,0x23,0x3d,0x11,0x8a,0xe0,0x87,0x0f,0x06,0x38,0x64,0x61,0xa7,0xf7,0xaf,0xa1,
-0x10,0x2a,0x25,0x81,0x3f,0xea,0x4f,0xb5,0x4c,0x11,0xcb,0x85,0xb1,0x84,0xb7,0x78,
-0x7e,0xca,0x72,0x99,0x32,0x2b,0x3c,0xd3,0x99,0x36,0x64,0xc5,0x36,0x65,0x2d,0x09,
-0x16,0x7b,0xb3,0x01,0x1b,0x7e,0xcf,0xc6,0x82,0x60,0xa9,0x26,0xa5,0x5d,0x91,0xd0,
-0x8b,0xf9,0x57,0x49,0xd3,0xfc,0x98,0x77,0xbb,0x75,0x9f,0x52,0x9a,0x1c,0xf2,0xa3,
-0x50,0xd0,0xce,0x4e,0x2c,0x33,0x82,0x33,0x99,0x0b,0x68,0x53,0x1a,0xd9,0xd9,0x44,
-0x04,0xa7,0x70,0xd4,0xa3,0xfe,0xd7,0x9f,0x17,0x6b,0xe9,0x34,0x3a,0xad,0xb1,0x61,
-0xf7,0x47,0xdd,0x16,0xe4,0x3e,0x20,0xe0,0xfd,0xc2,0x5d,0xbb,0x8f,0xd5,0x39,0xf2,
-0xe4,0xfa,0xde,0x7e,0x80,0x93,0xf7,0xf0,0xdc,0x00,0x0a,0x9f,0x26,0x84,0x4c,0x1e,
-0x73,0xb6,0xbe,0xf5,0xb0,0x77,0x14,0x29,0x00,0xeb,0xf3,0x67,0x94,0xfe,0x04,0x43,
-0x21,0xd3,0xef,0x20,0x9f,0xaf,0x20,0x38,0x85,0x98,0x5e,0x78,0x8f,0x34,0x32,0x02,
-0x15,0xf2,0x9c,0x15,0x85,0xb7,0x75,0x29,0x46,0xa9,0x2c,0x58,0x92,0x8b,0x14,0xc7,
-0x89,0x11,0xec,0x78,0x0e,0x77,0x74,0x44,0x70,0x07,0xe0,0x9f,0x35,0x28,0x84,0xbb,
-0x59,0x17,0xd7,0xc0,0x40,0x33,0x17,0xee,0x23,0x08,0xe6,0x2f,0x2f,0x81,0x10,0xad,
-0x94,0x71,0x56,0xbd,0x02,0xc1,0xad,0x84,0x08,0x16,0x90,0xdd,0x95,0x97,0xd4,0x27,
-0x50,0xdb,0xba,0x2e,0x77,0x81,0x20,0x62,0x09,0x91,0x7f,0x7b,0xcd,0x21,0x10,0xe0,
-0x72,0xa5,0x26,0xaf,0xe0,0x05,0x08,0x73,0x01,0x17,0x7b,0x41,0x82,0xcc,0xaa,0xd7,
-0x7d,0x74,0x08,0x39,0x6f,0x17,0x04,0x00,0x8e,0x80,0x89,0xce,0xce,0x7c,0x5e,0xa3,
-0xec,0xf4,0xe6,0x9e,0x0e,0x2b,0xc7,0x42,0x97,0x36,0xde,0xcc,0xa2,0x56,0x63,0x5d,
-0x16,0x62,0xac,0xa7,0x82,0xb6,0x76,0x04,0xcf,0x05,0x33,0x83,0xda,0x99,0x34,0x41,
-0x41,0xd8,0x7c,0x50,0x58,0x2c,0x6b,0x5b,0x2b,0xa6,0x19,0xcd,0xd6,0x24,0xc2,0x5c,
-0x40,0x5b,0x3b,0x30,0xff,0x04,0xa8,0xad,0xc7,0xfc,0xc4,0xb0,0x09,0xd0,0x5b,0xd8,
-0x59,0x2e,0x22,0xe0,0x75,0x92,0xb3,0x19,0xc5,0x09,0xec,0x9f,0x63,0xec,0x1b,0xb0,
-0x59,0x64,0x9f,0x75,0xda,0x78,0x90,0x20,0x80,0xf5,0xf0,0xa5,0xb8,0x1f,0xcc,0x57,
-0xbd,0xbe,0x4d,0x01,0xc5,0xfb,0x7b,0x4f,0xa2,0x44,0x2a,0x1c,0xb7,0xfb,0xaa,0x15,
-0xcf,0x25,0x3f,0x6e,0x17,0xcb,0x68,0x0b,0x33,0x0e,0x37,0x2b,0xe6,0x7f,0xc7,0x0e,
-0xb8,0xca,0x49,0xae,0x59,0xba,0x67,0x15,0x94,0x0b,0xd0,0x46,0x4c,0x0d,0x6f,0x35,
-0x62,0xd3,0xa8,0x3b,0xbb,0xbf,0x09,0xf4,0x02,0x86,0x48,0x10,0x73,0x29,0xa8,0x1d,
-0xc9,0xa2,0x1e,0xa1,0xb5,0xd8,0xe7,0xf1,0x3f,0x4d,0x51,0xa3,0x3c,0x51,0x06,0x00,
-0x00,};
-
-
-
-const struct fsdata_file file__error_html[] = { {
-file_NULL,
-data__error_html,
-data__error_html + 12,
-sizeof(data__error_html) - 12,
-1,
-}};
-
-const struct fsdata_file file__favicon_ico[] = { {
-file__error_html,
-data__favicon_ico,
-data__favicon_ico + 16,
-sizeof(data__favicon_ico) - 16,
-1,
-}};
-
-const struct fsdata_file file__index_html[] = { {
-file__favicon_ico,
-data__index_html,
-data__index_html + 12,
-sizeof(data__index_html) - 12,
-1,
-}};
-
-const struct fsdata_file file__login_html[] = { {
-file__index_html,
-data__login_html,
-data__login_html + 12,
-sizeof(data__login_html) - 12,
-1,
-}};
-
-const struct fsdata_file file__success_html[] = { {
-file__login_html,
-data__success_html,
-data__success_html + 16,
-sizeof(data__success_html) - 16,
-1,
-}};
-
-const struct fsdata_file file__upload_css[] = { {
-file__success_html,
-data__upload_css,
-data__upload_css + 12,
-sizeof(data__upload_css) - 12,
-1,
-}};
-
-const struct fsdata_file file__upload_js[] = { {
-file__upload_css,
-data__upload_js,
-data__upload_js + 12,
-sizeof(data__upload_js) - 12,
-1,
-}};
-
-#define FS_ROOT file__upload_js
-#define FS_NUMFILES 7
-
+" (49 bytes) */
+0x43,0x6f,0x6e,0x74,0x65,0x6e,0x74,0x2d,0x74,0x79,0x70,0x65,0x3a,0x20,0x74,0x65,
+0x78,0x74,0x2f,0x68,0x74,0x6d,0x6c,0x0d,0x0a,0x43,0x6f,0x6e,0x74,0x65,0x6e,0x74,
+0x2d,0x45,0x6e,0x63,0x6f,0x64,0x69,0x6e,0x67,0x3a,0x20,0x67,0x7a,0x69,0x70,0x0d,
+0x0a,
+/* "ETag: "bxarfS4hHmnhQru"
+" (25 bytes) */
+0x45,0x54,0x61,0x67,0x3a,0x20,0x22,0x62,0x78,0x61,0x72,0x66,0x53,0x34,0x68,0x48,
+0x6d,0x6e,0x68,0x51,0x72,0x75,0x22,0x0d,0x0a,0x0d,0x0a,
+
+/* raw file data (567 bytes) */
+0x1f,0x8b,0x08,0x00,0x00,0x00,0x00,0x00,0x04,0x0a,0x7d,0x53,0xc1,0x8e,0xd3,0x30,
+0x10,0xbd,0xef,0x57,0x98,0x70,0x01,0x69,0xd3,0xb4,0x5a,0x21,0xa1,0xdd,0x38,0x12,
+0x2a,0x7b,0xe0,0x04,0x07,0x90,0xe0,0xe8,0x38,0x6e,0xe3,0xc5,0x71,0x82,0xe3,0xb4,
+0xdb,0x5b,0xd9,0x3d,0xc0,0x8d,0x3b,0x07,0x2e,0xfc,0x00,0xdb,0xdd,0x40,0xb5,0xd0,
+0xee,0x2f,0x4c,0xfe,0x88,0x71,0xd2,0x96,0x22,0x24,0x14,0x29,0x1e,0xfb,0xcd,0xbc,
+0x37,0x7e,0x99,0x84,0xf7,0x9e,0x3e,0x1f,0xbe,0x7c,0xf3,0xe2,0x94,0xa4,0x36,0x53,
+0xd1,0x41,0xe8,0x16,0xa2,0x98,0x1e,0x53,0xcf,0x73,0x5b,0xc1,0x12,0x5c,0x32,0x61,
+0x19,0xe1,0x29,0x33,0xa5,0xb0,0xd4,0xab,0xec,0xc8,0x7f,0xec,0xd0,0xf6,0x38,0xb5,
+0xb6,0xf0,0xc5,0xbb,0x4a,0x4e,0xa8,0xf7,0xda,0x7f,0xf5,0xc4,0x1f,0xe6,0x59,0xc1,
+0xac,0x8c,0x95,0xf0,0x08,0xcf,0xb5,0x15,0x1a,0x6b,0x9e,0x9d,0x52,0x91,0x8c,0xc5,
+0xae,0x4a,0xb3,0x4c,0x50,0x6f,0x22,0xc5,0xb4,0xc8,0x8d,0xdd,0x4b,0x9c,0xca,0xc4,
+0xa6,0x34,0x11,0x13,0xc9,0x85,0xdf,0x6e,0x0e,0x89,0xd4,0xd2,0x4a,0xa6,0xfc,0x92,
+0x33,0x25,0xe8,0xa0,0xd7,0x3f,0x24,0x19,0x3b,0x97,0x59,0x95,0xed,0x1f,0x55,0xa5,
+0x30,0xed,0x9e,0xa1,0x34,0xed,0x3b,0x29,0x25,0xf5,0x5b,0x62,0x84,0xa2,0x5e,0x69,
+0x67,0x4a,0x94,0xa9,0x10,0xa8,0x95,0x1a,0x31,0xc2,0x5b,0x14,0x2a,0x67,0x49,0x8f,
+0x97,0xa5,0xcb,0xb4,0xd2,0x2a,0x11,0xc1,0xd7,0xe6,0x3d,0xdc,0x41,0xdd,0x7c,0x84,
+0x15,0xac,0xa1,0x26,0xf8,0xba,0x6a,0xc3,0x05,0xfc,0x84,0x1a,0xa3,0x25,0xd4,0x61,
+0xd0,0x25,0x1f,0x84,0xc1,0xc6,0x9e,0x38,0x4f,0x66,0xc8,0xa1,0xd9,0x84,0x70,0xc5,
+0xca,0x92,0x7a,0x18,0xc6,0xcc,0x78,0x51,0x18,0x60,0x84,0x50,0x22,0x77,0xd0,0xd4,
+0xb0,0xa2,0x10,0x88,0xa1,0xbb,0x83,0x08,0xbe,0xfc,0x2b,0x40,0xe0,0xae,0x99,0xc3,
+0x1a,0x9b,0x58,0xc2,0x02,0x6e,0x61,0x89,0x42,0x83,0xbf,0x49,0xba,0xe6,0xfd,0x51,
+0x6e,0x32,0x47,0xb4,0x47,0x3f,0xae,0x64,0x82,0xc6,0xb7,0xf7,0xa5,0x9e,0x15,0xe7,
+0xd6,0x67,0x4a,0x8e,0xf5,0x31,0xc7,0xef,0x20,0xcc,0x09,0xa6,0x13,0x12,0x16,0xdb,
+0x04,0x9e,0xab,0xdc,0x1c,0xdf,0x3f,0x3a,0x1a,0x0e,0xfb,0x7d,0x04,0xc3,0xf8,0x7f,
+0x2d,0xc1,0x35,0x36,0xf6,0x0d,0x7e,0xe1,0xe3,0xfc,0xb9,0x86,0x75,0xe7,0x50,0xbd,
+0xb1,0xed,0x43,0xe7,0x51,0xf3,0x89,0x34,0x97,0xfb,0x4e,0x12,0xf8,0x81,0x65,0x0b,
+0x34,0x76,0x8e,0xb7,0x72,0x3e,0xae,0x7b,0x61,0x10,0xa3,0x9a,0x89,0x08,0x7c,0x46,
+0xaa,0x55,0x73,0xe1,0xee,0x8c,0x2e,0xa3,0xcf,0xcd,0x9c,0xc0,0x55,0x73,0x09,0x37,
+0x18,0x5e,0xa0,0x1b,0xee,0x04,0xab,0x1c,0x07,0x36,0x80,0xc0,0x77,0xc7,0x41,0x1a,
+0x94,0xeb,0x00,0x12,0x96,0x05,0xd3,0x44,0x26,0xd4,0xe3,0x79,0xa5,0xad,0xaf,0xab,
+0x2c,0x76,0x1e,0x3f,0x0a,0x03,0x87,0x44,0x04,0xbb,0xa9,0xe1,0x16,0x4b,0x57,0x70,
+0x13,0x06,0x05,0x7a,0x16,0xa0,0x69,0x7f,0x96,0x92,0x1b,0x59,0x58,0x62,0x67,0x05,
+0x8e,0xa5,0x73,0x2d,0x38,0x63,0x13,0xd6,0x9d,0xa2,0x9b,0x86,0xef,0x06,0xe6,0x0c,
+0xe7,0x05,0x59,0xdb,0x7c,0xac,0xdf,0x06,0x04,0x67,0x1d,0x95,0x93,0x7c,0xaa,0x1f,
+0x3c,0x3c,0x41,0xfa,0x2d,0xb0,0x13,0xda,0x4c,0x49,0xd0,0xfe,0x69,0xbf,0x01,0x5c,
+0x64,0x7a,0x0a,0x79,0x03,0x00,0x00,};
+
+const struct fsdata_file file__upload_js[] = {{
+	file_NULL,
+	data__upload_js,
+	data__upload_js + 11,
+	sizeof(data__upload_js) - 11,
+	1,
+}};
+
+const struct fsdata_file file__favicon_ico[] = {{
+	file__upload_js,
+	data__favicon_ico,
+	data__favicon_ico + 13,
+	sizeof(data__favicon_ico) - 13,
+	1,
+}};
+
+const struct fsdata_file file__login_html[] = {{
+	file__favicon_ico,
+	data__login_html,
+	data__login_html + 12,
+	sizeof(data__login_html) - 12,
+	1,
+}};
+
+const struct fsdata_file file__index_html[] = {{
+	file__login_html,
+	data__index_html,
+	data__index_html + 12,
+	sizeof(data__index_html) - 12,
+	1,
+}};
+
+const struct fsdata_file file__upload_css[] = {{
+	file__index_html,
+	data__upload_css,
+	data__upload_css + 12,
+	sizeof(data__upload_css) - 12,
+	1,
+}};
+
+const struct fsdata_file file__error_html[] = {{
+	file__upload_css,
+	data__error_html,
+	data__error_html + 12,
+	sizeof(data__error_html) - 12,
+	1,
+}};
+
+const struct fsdata_file file__success_html[] = {{
+	file__error_html,
+	data__success_html,
+	data__success_html + 14,
+	sizeof(data__success_html) - 14,
+	1,
+}};
+
+#define FS_ROOT file__success_html
+#define FS_NUMFILES 7

+ 14 - 15
iap/Modules/Ethernet/netconf.c

@@ -1,6 +1,9 @@
 /* Includes ------------------------------------------------------------------*/
 /* Includes ------------------------------------------------------------------*/
 #include "lwip/mem.h"
 #include "lwip/mem.h"
 #include "lwip/memp.h"
 #include "lwip/memp.h"
+#include "lwip/tcp.h"
+#include "lwip/udp.h"
+#include "netif/etharp.h"
 #include "lwip/dhcp.h"
 #include "lwip/dhcp.h"
 #include "ethernetif.h"
 #include "ethernetif.h"
 #include "tcpip.h"
 #include "tcpip.h"
@@ -8,11 +11,10 @@
 #include "netconf.h"
 #include "netconf.h"
 #include "common_config.h"
 #include "common_config.h"
 #include "settings_api.h"
 #include "settings_api.h"
-#include "netconf.h"
 #include "tinystdio.h"
 #include "tinystdio.h"
 #include "lwip/init.h"
 #include "lwip/init.h"
 #include "lwip/timeouts.h"
 #include "lwip/timeouts.h"
-#include "netif/etharp.h"
+#include "lwip/sys.h"
 
 
 /* Private typedef -----------------------------------------------------------*/
 /* Private typedef -----------------------------------------------------------*/
 #define MAX_DHCP_TRIES        4
 #define MAX_DHCP_TRIES        4
@@ -146,14 +148,15 @@ void LwIP_Pkt_Handle(void)
   */
   */
 void LwIP_Periodic_Handle(__IO uint32_t localtime)
 void LwIP_Periodic_Handle(__IO uint32_t localtime)
 {
 {
+
   if (sSettings.sWebParams.dhcpEnable)
   if (sSettings.sWebParams.dhcpEnable)
   {
   {
     /* Fine DHCP periodic process every 500ms */
     /* Fine DHCP periodic process every 500ms */
 
 
-      if ((DHCP_state != DHCP_ADDRESS_ASSIGNED)&&(DHCP_state != DHCP_TIMEOUT)) {
-        /* process DHCP state machine */
-        LwIP_DHCP_Process_Handle();    
-      }
+	  if ((DHCP_state != DHCP_ADDRESS_ASSIGNED)&&(DHCP_state != DHCP_TIMEOUT)) {
+		/* process DHCP state machine */
+		LwIP_DHCP_Process_Handle();
+	  }
   }
   }
 
 
   sys_check_timeouts();
   sys_check_timeouts();
@@ -169,7 +172,7 @@ void LwIP_DHCP_Process_Handle()
   struct ip4_addr ipaddr;
   struct ip4_addr ipaddr;
   struct ip4_addr netmask;
   struct ip4_addr netmask;
   struct ip4_addr gw;
   struct ip4_addr gw;
-  static uint8_t dhcpTry = 0;
+  struct dhcp *dhcp = netif_dhcp_data(&netif);
 
 
   switch (DHCP_state)
   switch (DHCP_state)
   {
   {
@@ -208,20 +211,16 @@ void LwIP_DHCP_Process_Handle()
 
 
       } else {
       } else {
         /* DHCP timeout */
         /* DHCP timeout */
-        if (dhcpTry++ > MAX_DHCP_TRIES)
+        if (dhcp->tries > MAX_DHCP_TRIES)
 		{
 		{
           DHCP_state = DHCP_TIMEOUT;
           DHCP_state = DHCP_TIMEOUT;
 
 
           /* Stop DHCP */
           /* Stop DHCP */
           dhcp_stop(&netif);
           dhcp_stop(&netif);
 
 
-//		  ipaddr.addr = ipaddr_addr(sSettings.sWebTempParams.ip);
-//	      netmask.addr = ipaddr_addr(sSettings.sWebTempParams.mask);
-//	      gw.addr = ipaddr_addr(sSettings.sWebTempParams.gate);
-          
-          ipaddr.addr = ipaddr_addr("192.168.14.48");
-          netmask.addr = ipaddr_addr("255.255.255.0");
-          gw.addr = ipaddr_addr("192.168.14.1");
+		  ipaddr.addr = ipaddr_addr(sSettings.sWebTempParams.ip);
+	      netmask.addr = ipaddr_addr(sSettings.sWebTempParams.mask);
+	      gw.addr = ipaddr_addr(sSettings.sWebTempParams.gate);
 
 
           netif_set_addr(&netif, &ipaddr , &netmask, &gw);
           netif_set_addr(&netif, &ipaddr , &netmask, &gw);
 		  
 		  

+ 8 - 8
iap/Modules/settings_api.c

@@ -45,10 +45,10 @@ void SETTINGS_SetBootParamsDef(void)
   */
   */
 void SETTINGS_SetWebParamsDef(void)
 void SETTINGS_SetWebParamsDef(void)
 {
 {
-  strcpy(sSettings.sWebParams.ip, "192.168.1.2");
-  strcpy(sSettings.sWebParams.gate, "192.168.1.1");
+  strcpy(sSettings.sWebParams.ip, "192.168.0.254");
+  strcpy(sSettings.sWebParams.gate, "192.168.0.1");
   strcpy(sSettings.sWebParams.mask, "255.255.255.0");
   strcpy(sSettings.sWebParams.mask, "255.255.255.0");
-  sSettings.sWebParams.dhcpEnable = 1;
+  sSettings.sWebParams.dhcpEnable = 0;
 }
 }
 
 
 /**
 /**
@@ -56,10 +56,10 @@ void SETTINGS_SetWebParamsDef(void)
   */
   */
 void SETTINGS_SetTempWebParamsDef(void)
 void SETTINGS_SetTempWebParamsDef(void)
 {
 {
-  strcpy(sSettings.sWebTempParams.ip, "192.168.1.2");
-  strcpy(sSettings.sWebTempParams.gate, "192.168.1.1");
+  strcpy(sSettings.sWebTempParams.ip, "192.168.0.254");
+  strcpy(sSettings.sWebTempParams.gate, "192.168.0.1");
   strcpy(sSettings.sWebTempParams.mask, "255.255.255.0");
   strcpy(sSettings.sWebTempParams.mask, "255.255.255.0");
-  sSettings.sWebTempParams.dhcpEnable = 1;
+  sSettings.sWebTempParams.dhcpEnable = 0;
 }
 }
 
 
 /**
 /**
@@ -67,9 +67,9 @@ void SETTINGS_SetTempWebParamsDef(void)
   */
   */
 void SETTINGS_SetInfoDef(void)
 void SETTINGS_SetInfoDef(void)
 {
 {
-  strcpy(sSettings.sInfo.productionData, "09.10.2015");
+  strcpy(sSettings.sInfo.productionData, "00.00.00 00:00");
   strcpy(sSettings.sInfo.mac, DEVICE_MAC);
   strcpy(sSettings.sInfo.mac, DEVICE_MAC);
-  strcpy(sSettings.sInfo.serialNumber, "KN-03-00003");
+  strcpy(sSettings.sInfo.serialNumber, DEVICE_SERIAL);
   strcpy(sSettings.sInfo.comments, "");
   strcpy(sSettings.sInfo.comments, "");
 }
 }
 
 

+ 4 - 0
iap/Modules/settings_api.h

@@ -17,6 +17,10 @@
 #include "stm32f4xx.h"
 #include "stm32f4xx.h"
 #include <stdbool.h>
 #include <stdbool.h>
 
 
+#ifndef DEVICE_SERIAL
+#define DEVICE_SERIAL "7020000"
+#endif
+
 /**
 /**
 * @brief  Параметры обновления ПО
 * @brief  Параметры обновления ПО
   */
   */

+ 13 - 15
iap/Modules/usart.c

@@ -15,11 +15,12 @@
 #include "tinystdio.h"
 #include "tinystdio.h"
 
 
    
    
-#ifdef __GNUC__    
+
+#ifdef __GNUC__
   #define PUTCHAR_PROTOTYPE int __io_putchar(int ch)
   #define PUTCHAR_PROTOTYPE int __io_putchar(int ch)
-#else    
+#else
   #define PUTCHAR_PROTOTYPE int fputc(int ch, FILE *f)    
   #define PUTCHAR_PROTOTYPE int fputc(int ch, FILE *f)    
-#endif  
+#endif
 
 
 
 
 PUTCHAR_PROTOTYPE   
 PUTCHAR_PROTOTYPE   
@@ -29,11 +30,8 @@ PUTCHAR_PROTOTYPE
 }   
 }   
 
 
 void putchar_(uint8_t c) {
 void putchar_(uint8_t c) {
-    //while (!(USER_USART->SR & USART_FLAG_TXE));
-    //USER_USART->DR = (uint16_t)c;
-#ifdef SWOTRACE
-    ITM_SendChar(c);
-#endif
+    while (!(USER_USART->SR & USART_FLAG_TXE));
+    USER_USART->DR = (uint16_t)c;
 }
 }
 
 
 void putc_(void* p, char c) {
 void putc_(void* p, char c) {
@@ -50,23 +48,23 @@ void InitUSART( void) {
   GPIO_InitTypeDef  GPIO_InitStructure;
   GPIO_InitTypeDef  GPIO_InitStructure;
   USART_InitTypeDef USART_InitStructure;
   USART_InitTypeDef USART_InitStructure;
     
     
-  RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOB, ENABLE);
+  RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA, ENABLE);
   RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1, ENABLE);
   RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1, ENABLE);
     
     
-  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6 | GPIO_Pin_7;
+  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9 | GPIO_Pin_10;
   GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
   GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
   GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;
   GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;
   GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
   GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
   GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;
   GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;
-  GPIO_Init(GPIOB, &GPIO_InitStructure);
+  GPIO_Init(GPIOA, &GPIO_InitStructure);
 
 
-  GPIO_PinAFConfig(GPIOB, GPIO_PinSource6, GPIO_AF_USART1);
-  GPIO_PinAFConfig(GPIOB, GPIO_PinSource7, GPIO_AF_USART1);
+  GPIO_PinAFConfig(GPIOA, GPIO_PinSource9, GPIO_AF_USART1);
+  GPIO_PinAFConfig(GPIOA, GPIO_PinSource10, GPIO_AF_USART1);
 
 
   USART_InitStructure.USART_BaudRate = 115200;
   USART_InitStructure.USART_BaudRate = 115200;
-  USART_InitStructure.USART_WordLength = USART_WordLength_9b;
+  USART_InitStructure.USART_WordLength = USART_WordLength_8b;
   USART_InitStructure.USART_StopBits = USART_StopBits_1;
   USART_InitStructure.USART_StopBits = USART_StopBits_1;
-  USART_InitStructure.USART_Parity = USART_Parity_Even;
+  USART_InitStructure.USART_Parity = USART_Parity_No;
   USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;
   USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;
   USART_InitStructure.USART_Mode = USART_Mode_Tx | USART_Mode_Rx;
   USART_InitStructure.USART_Mode = USART_Mode_Tx | USART_Mode_Rx;
   USART_Init(USER_USART, &USART_InitStructure);
   USART_Init(USER_USART, &USART_InitStructure);

+ 1 - 1
iap/User/main.c

@@ -133,7 +133,7 @@ void main(void)
   
   
   /* Загружается Bootloader... */
   /* Загружается Bootloader... */
   
   
-  SysTick_Config(120000);
+  SysTick_Config(168000);//120000
   LED_Init();
   LED_Init();
 
 
 
 

+ 4 - 1
modules/Ethernet/lwipopts.h

@@ -106,6 +106,9 @@ a lot of data that needs to be copied, this should be set high. */
 #define MEMP_NUM_NETBUF                 7
 #define MEMP_NUM_NETBUF                 7
 
 
 
 
+#define TCP_LISTEN_BACKLOG              1
+
+
 /* ---------- TCP options ---------- */
 /* ---------- TCP options ---------- */
 #define LWIP_TCP                1
 #define LWIP_TCP                1
 #define TCP_TTL                 255
 #define TCP_TTL                 255
@@ -243,7 +246,7 @@ The STM32F4x7 allows computing and verifying the IP, UDP, TCP and ICMP checksums
    -----------------------------------
    -----------------------------------
 */
 */
 
 
-#define LWIP_DEBUG
+//#define LWIP_DEBUG
 
 
 #define TCP_DEBUG                       LWIP_DBG_OFF
 #define TCP_DEBUG                       LWIP_DBG_OFF
 #define ETHARP_DEBUG                    LWIP_DBG_OFF
 #define ETHARP_DEBUG                    LWIP_DBG_OFF

+ 4 - 3
modules/Ethernet/netconf.c

@@ -167,10 +167,11 @@ void LwIP_DHCP_task(void * pvParameters)
   struct ip4_addr gw;
   struct ip4_addr gw;
   uint8_t DHCP_state;  
   uint8_t DHCP_state;  
   DHCP_state = DHCP_START;
   DHCP_state = DHCP_START;
-  static uint8_t dhcpTry = 0;
   
   
+
   for (;;)
   for (;;)
   {
   {
+	  struct dhcp *dhcp = netif_dhcp_data(&xnetif);
     switch (DHCP_state)
     switch (DHCP_state)
     {
     {
       case DHCP_START:
       case DHCP_START:
@@ -239,7 +240,7 @@ void LwIP_DHCP_task(void * pvParameters)
         {
         {
           /* DHCP timeout */
           /* DHCP timeout */
           //if (xnetif.dhcp->tries > MAX_DHCP_TRIES)
           //if (xnetif.dhcp->tries > MAX_DHCP_TRIES)
-          if (dhcpTry++ > MAX_DHCP_TRIES)
+          if (dhcp->tries > MAX_DHCP_TRIES)
           {
           {
             DHCP_state = DHCP_TIMEOUT;
             DHCP_state = DHCP_TIMEOUT;
 
 
@@ -282,7 +283,7 @@ void LwIP_DHCP_task(void * pvParameters)
       default: break;
       default: break;
     }
     }
 
 
-    vTaskDelay(1500);
+    vTaskDelay(250);
   }   
   }   
 }
 }
 
 

+ 4 - 40
modules/Ethernet/private_mib.c

@@ -1,3 +1,5 @@
+#ifdef HARDWARE_BT6702
+
 #include "stm32f4xx.h"  
 #include "stm32f4xx.h"  
 #include "private_mib.h"
 #include "private_mib.h"
 #include "parameters.h"
 #include "parameters.h"
@@ -31,11 +33,6 @@ static s16_t signal_get_value(struct snmp_node_instance* instance, void* value);
 static snmp_err_t signal_set_value(struct snmp_node_instance* instance, u16_t len, void* value);
 static snmp_err_t signal_set_value(struct snmp_node_instance* instance, u16_t len, void* value);
 static snmp_err_t signal_set_test(struct snmp_node_instance* instance, u16_t len, void* value);
 static snmp_err_t signal_set_test(struct snmp_node_instance* instance, u16_t len, void* value);
 
 
-#ifdef HARDWARE_BT6706
-/* signal .1.3.6.1.4.1.41752.911.3.1.19  */
-static const struct snmp_scalar_node signal19 = SNMP_SCALAR_CREATE_NODE(19, SNMP_NODE_INSTANCE_READ_WRITE, SNMP_ASN1_TYPE_OCTET_STRING, signal_get_value, signal_set_test, signal_set_value);
-
-#endif
 
 
 /* signal .1.3.6.1.4.1.41752.911.3.1.18  */
 /* signal .1.3.6.1.4.1.41752.911.3.1.18  */
 static const struct snmp_scalar_node signal18 = SNMP_SCALAR_CREATE_NODE_READONLY(18, SNMP_ASN1_TYPE_OCTET_STRING, signal_get_value);
 static const struct snmp_scalar_node signal18 = SNMP_SCALAR_CREATE_NODE_READONLY(18, SNMP_ASN1_TYPE_OCTET_STRING, signal_get_value);
@@ -115,9 +112,6 @@ static const struct snmp_node* const signals_nodes[] = {
 	&signal16.node.node,
 	&signal16.node.node,
 	&signal17.node.node,
 	&signal17.node.node,
 	&signal18.node.node,
 	&signal18.node.node,
-#ifdef HARDWARE_BT6706
-	&signal19.node.node
-#endif
 };
 };
 static const struct snmp_tree_node signals_node = SNMP_CREATE_TREE_NODE(1, signals_nodes);
 static const struct snmp_tree_node signals_node = SNMP_CREATE_TREE_NODE(1, signals_nodes);
 
 
@@ -215,11 +209,6 @@ static s16_t signal_get_value(struct snmp_node_instance* instance, void* value)
 	case 18: /* Alarms */
 	case 18: /* Alarms */
 		GetAlarmStr((char*)paramStr, &paramLength);
 		GetAlarmStr((char*)paramStr, &paramLength);
 		break;
 		break;
-#ifdef HARDWARE_BT6706
-	case 19: /* DO2*/
-		GetDOUTStatusStr((char*)paramStr, &paramLength, 2);
-		break;
-#endif
 	default:
 	default:
 	break;
 	break;
     }
     }
@@ -332,20 +321,6 @@ static snmp_err_t signal_set_value(struct snmp_node_instance* instance, u16_t le
   			log_event_data(LOG_SHUTDOWN_UPS, "Администратор");
   			log_event_data(LOG_SHUTDOWN_UPS, "Администратор");
   	  }
   	  }
   	  break;
   	  break;
-#ifdef HARDWARE_BT6706
-	case 19: /* DO2*/
-		if(sSettings.sInOuts.ro_type_source[2] == SNMP_SET){
-			  val_string = (char*)value;
-			  SetROStr(val_string, 2);
-			  if(val_string[0] == 0x31)
-				  strcat(str, "Замкнуто");
-			  else
-				  strcat(str, "Разомкнуто");
-			//  SNMP_SendUserTrap(DO1_TOGGLED);
-			  log_event_data(LOG_DO2_STATE, str);
-		  }
-		break;
-#endif
       default :
       default :
     	  return SNMP_ERR_GENERROR;
     	  return SNMP_ERR_GENERROR;
       break;
       break;
@@ -414,25 +389,14 @@ static snmp_err_t signal_set_test(struct snmp_node_instance* instance, u16_t len
   		   }
   		   }
   		}
   		}
   	  break;
   	  break;
-#ifdef HARDWARE_BT6706
-	case 19: /* DO2*/
-		if ( len <= 1 )
-		{
-		   val_string = (char*)value;
-		   val_string[len] = 0;
-		   if(atoi(val_string) <= 1){
-			   if(sSettings.sInOuts.ro_type_source[2] == SNMP_SET)
-				 ret = SNMP_ERR_NOERROR;
-		   }
-		}
-		break;
-#endif
     };
     };
 
 
 
 
   return ret;
   return ret;
 }
 }
 
 
+#endif
+
 
 
 
 
 
 

+ 434 - 0
modules/Ethernet/private_mib_bt6706.c

@@ -0,0 +1,434 @@
+/*
+ * private_mib_bt6706.c
+ *
+ *  Created on: 17.11.2017
+ *      Author: balbekova
+ */
+
+
+#ifdef HARDWARE_BT6706
+
+#include "stm32f4xx.h"
+#include "private_mib.h"
+#include "parameters.h"
+#include "settings_api.h"
+#include "log.h"
+#include "megatec.h"
+
+#include "FreeRTOS.h"
+#include "task.h"
+
+#ifdef PRINTF_STDLIB
+#include <stdio.h>
+#endif
+#ifdef PRINTF_CUSTOM
+#include "tinystdio.h"
+#endif
+
+#include "lwip/apps/snmp_scalar.h"
+#include "lwip/apps/snmp.h"
+//#include "snmp_core.h"
+
+extern struct snmp_mib mib2;
+
+/**
+  * @brief  Общая структура настроек
+  */
+extern SETTINGS_t sSettings;
+
+
+static s16_t signal_get_value(struct snmp_node_instance* instance, void* value);
+static snmp_err_t signal_set_value(struct snmp_node_instance* instance, u16_t len, void* value);
+static snmp_err_t signal_set_test(struct snmp_node_instance* instance, u16_t len, void* value);
+
+
+/* signal .1.3.6.1.4.1.41752.911.4.1.19  */
+static const struct snmp_scalar_node signal19 = SNMP_SCALAR_CREATE_NODE_READONLY(19, SNMP_ASN1_TYPE_OCTET_STRING, signal_get_value);
+
+/* signal .1.3.6.1.4.1.41752.911.4.1.18  */
+static const struct snmp_scalar_node signal18 = SNMP_SCALAR_CREATE_NODE_READONLY(18, SNMP_ASN1_TYPE_OCTET_STRING, signal_get_value);
+
+/* signal .1.3.6.1.4.1.41752.911.4.1.17  */
+static const struct snmp_scalar_node signal17 = SNMP_SCALAR_CREATE_NODE_READONLY(17, SNMP_ASN1_TYPE_OCTET_STRING, signal_get_value);
+
+/* signal .1.3.6.1.4.1.41752.911.4.1.16  */
+static const struct snmp_scalar_node signal16 = SNMP_SCALAR_CREATE_NODE_READONLY(16, SNMP_ASN1_TYPE_OCTET_STRING, signal_get_value);
+
+/* signal .1.3.6.1.4.1.41752.911.4.1.15  */
+static const struct snmp_scalar_node signal15 = SNMP_SCALAR_CREATE_NODE_READONLY(15, SNMP_ASN1_TYPE_OCTET_STRING, signal_get_value);
+
+/* signal .1.3.6.1.4.1.41752.911.4.1.14  */
+static const struct snmp_scalar_node signal14 = SNMP_SCALAR_CREATE_NODE_READONLY(14, SNMP_ASN1_TYPE_OCTET_STRING, signal_get_value);
+
+/* signal .1.3.6.1.4.1.41752.911.4.1.13  */
+static const struct snmp_scalar_node signal13 = SNMP_SCALAR_CREATE_NODE_READONLY(13, SNMP_ASN1_TYPE_OCTET_STRING, signal_get_value);
+
+/* signal .1.3.6.1.4.1.41752.911.4.1.12  */
+static const struct snmp_scalar_node signal12 = SNMP_SCALAR_CREATE_NODE_READONLY(12, SNMP_ASN1_TYPE_OCTET_STRING, signal_get_value);
+
+/* signal .1.3.6.1.4.1.41752.911.4.1.11  */
+static const struct snmp_scalar_node signal11 = SNMP_SCALAR_CREATE_NODE_READONLY(11, SNMP_ASN1_TYPE_OCTET_STRING, signal_get_value);
+
+/* signal .1.3.6.1.4.1.41752.911.4.1.9  */
+static const struct snmp_scalar_node signal10 = SNMP_SCALAR_CREATE_NODE_READONLY(10, SNMP_ASN1_TYPE_OCTET_STRING, signal_get_value);
+
+/* signal .1.3.6.1.4.1.41752.911.4.1.9  */
+static const struct snmp_scalar_node signal9 = SNMP_SCALAR_CREATE_NODE(9, SNMP_NODE_INSTANCE_WRITE_ONLY, SNMP_ASN1_TYPE_OCTET_STRING, NULL, signal_set_test, signal_set_value);
+
+/* signal .1.3.6.1.4.1.41752.911.4.1.8  */
+static const struct snmp_scalar_node signal8 = SNMP_SCALAR_CREATE_NODE(8, SNMP_NODE_INSTANCE_WRITE_ONLY, SNMP_ASN1_TYPE_INTEGER, NULL, signal_set_test, signal_set_value);
+
+/* signal .1.3.6.1.4.1.41752.911.4.1.7  */
+static const struct snmp_scalar_node signal7 = SNMP_SCALAR_CREATE_NODE(7, SNMP_NODE_INSTANCE_READ_WRITE, SNMP_ASN1_TYPE_OCTET_STRING, signal_get_value, signal_set_test, signal_set_value);
+
+/* signal .1.3.6.1.4.1.41752.911.4.1.6  */
+static const struct snmp_scalar_node signal6 = SNMP_SCALAR_CREATE_NODE(6, SNMP_NODE_INSTANCE_READ_WRITE, SNMP_ASN1_TYPE_OCTET_STRING, signal_get_value, signal_set_test, signal_set_value);
+
+/* signal .1.3.6.1.4.1.41752.911.4.1.5  */
+static const struct snmp_scalar_node signal5 = SNMP_SCALAR_CREATE_NODE(5, SNMP_NODE_INSTANCE_READ_WRITE, SNMP_ASN1_TYPE_OCTET_STRING, signal_get_value, signal_set_test, signal_set_value);
+
+/* signal .1.3.6.1.4.1.41752.911.4.1.4  */
+static const struct snmp_scalar_node signal4 = SNMP_SCALAR_CREATE_NODE_READONLY(4, SNMP_ASN1_TYPE_OCTET_STRING, signal_get_value);
+
+/* signal .1.3.6.1.4.1.41752.911.4.1.3  */
+static const struct snmp_scalar_node signal3 = SNMP_SCALAR_CREATE_NODE(3, SNMP_NODE_INSTANCE_WRITE_ONLY, SNMP_ASN1_TYPE_INTEGER, NULL, signal_set_test, signal_set_value);
+
+/* signal .1.3.6.1.4.1.41752.911.4.1.2  */
+static const struct snmp_scalar_node signal2 = SNMP_SCALAR_CREATE_NODE(2, SNMP_NODE_INSTANCE_WRITE_ONLY, SNMP_ASN1_TYPE_INTEGER, NULL, signal_set_test, signal_set_value);
+
+/* signal .1.3.6.1.4.1.41752.911.4.1.1  */
+static const struct snmp_scalar_node signal1 = SNMP_SCALAR_CREATE_NODE_READONLY(1, SNMP_ASN1_TYPE_OCTET_STRING, signal_get_value);
+
+
+// signals .1.3.6.1.4.1.41752.911.4.1
+static const struct snmp_node* const signals_nodes[] = {
+	&signal1.node.node,
+	&signal2.node.node,
+	&signal3.node.node,
+	&signal4.node.node,
+	&signal5.node.node,
+	&signal6.node.node,
+	&signal7.node.node,
+	&signal8.node.node,
+	&signal9.node.node,
+	&signal10.node.node,
+	&signal11.node.node,
+	&signal12.node.node,
+	&signal13.node.node,
+	&signal14.node.node,
+	&signal15.node.node,
+	&signal16.node.node,
+	&signal17.node.node,
+	&signal18.node.node,
+	&signal19.node.node
+};
+static const struct snmp_tree_node signals_node = SNMP_CREATE_TREE_NODE(1, signals_nodes);
+
+// bt_6702 .1.3.6.1.4.1.41752.911.4
+static const struct snmp_node* const bt6706_nodes[] = {
+  &signals_node.node
+};
+static const struct snmp_tree_node bt6706_node = SNMP_CREATE_TREE_NODE(4, bt6706_nodes);
+
+// swt .1.3.6.1.4.1.41752.911
+static const struct snmp_node* const swt_nodes[] = {
+  &bt6706_node.node
+};
+static const struct snmp_tree_node swt_node = SNMP_CREATE_TREE_NODE(911, swt_nodes);
+
+// rotek .1.3.6.1.4.1.41752
+static const struct snmp_node* const rotek_nodes[] = {
+  &swt_node.node
+};
+static const struct snmp_tree_node rotek_node = SNMP_CREATE_TREE_NODE(41752, rotek_nodes);
+
+// enterprises .1.3.6.1.4.1
+static const struct snmp_node* const enterprises_nodes[] = {
+  &rotek_node.node
+};
+static const struct snmp_tree_node enterprises_node = SNMP_CREATE_TREE_NODE(1, enterprises_nodes);
+
+// private .1.3.6.1.4
+static const struct snmp_node* const private_nodes[] = {
+  &enterprises_node.node
+};
+static const struct snmp_tree_node private_root = SNMP_CREATE_TREE_NODE(0, private_nodes);
+
+static const u32_t prvmib_base_oid[] = { 1,3,6,1,4 };
+static const struct snmp_mib private_mib = SNMP_MIB_CREATE(prvmib_base_oid, &private_root.node);
+
+
+
+
+void lwip_privmib_init(void)
+{
+    static const struct snmp_mib *my_snmp_mibs[] = {&mib2, &private_mib};
+
+    snmp_set_mibs(my_snmp_mibs, LWIP_ARRAYSIZE(my_snmp_mibs));
+}
+
+
+
+static s16_t signal_get_value(struct snmp_node_instance* instance, void* value)
+{
+	u8_t *paramStr = (u8_t*)value;
+	u8_t paramLength = 0;
+    u32_t oid = instance->node->oid; // id сигнала
+
+    switch (oid){
+	case 1: /* FWVersion */
+		GetVersionStr((char*)paramStr, &paramLength);
+		break;
+	case 4: /* UPSModel*/
+		GetUPSModelStr((char*)paramStr, &paramLength);
+		break;
+	case 5: /* DO1*/
+		GetDOUTStatusStr((char*)paramStr, &paramLength, 0);
+		break;
+	case 6: /* DO2*/
+		GetDOUTStatusStr((char*)paramStr, &paramLength, 1);
+		break;
+	case 7: /* DO3*/
+		GetDOUTStatusStr((char*)paramStr, &paramLength, 2);
+		break;
+	case 10: /* DIO*/
+		GetDINStatusStr((char*)paramStr, &paramLength, 0);
+		break;
+	case 11: /* IntTemp */
+		GetInternalTempStr((char*)paramStr, &paramLength);
+		break;
+	case 12: /* InFreq */
+		GetInputFreqStr((char*)paramStr, &paramLength);
+		break;
+	case 13: /* InVoltVAC */
+		GetInputVoltageStr((char*)paramStr, &paramLength);
+		break;
+	case 14: /* OutVoltVAC */
+		GetOutputVoltageStr((char*)paramStr, &paramLength);
+		break;
+	case 15: /* Power */
+		GetPowerStr((char*)paramStr, &paramLength);
+		break;
+	case 16: /* BatCap */
+		GetBatCapacityStr((char*)paramStr, &paramLength);
+		break;
+	case 17: /* BatTime */
+		GetRuntimeStr((char*)paramStr, &paramLength);
+		break;
+	case 18: /* ConnectMonitor */
+		GetConnectMonitorStr((char*)paramStr, &paramLength);
+		break;
+	case 19: /* Alarms */
+		GetAlarmStr((char*)paramStr, &paramLength);
+		break;
+	default:
+	break;
+    }
+
+    return paramLength;
+
+}
+
+static snmp_err_t signal_set_value(struct snmp_node_instance* instance, u16_t len, void* value)
+{
+
+	u32_t oid = instance->node->oid; // id сигнала
+	char *val_string;
+	char str[20];
+	int8_t res = 0;
+	s32_t val;
+
+     memset(str, 0, 20);
+
+    switch (oid)
+    {
+      case 2: /* RestoreSignal */
+        val = *(s32_t*)value;
+        if (val == 1) {
+      //	SNMP_SendUserTrap(DEVICE_RESTORED);
+  		log_event_data(LOG_SYSTEM_DEFCONFIG, "Администратор");
+  		vTaskDelay(500);
+  		SETTINGS_SetPartDefault();
+  		SETTINGS_Save();
+        }
+      break;
+      case 3: /* RebootSignal */
+        val = *(s32_t*)value;
+        if (val == 1){
+#ifndef BT6702_SERVICE
+  	//	SNMP_SendUserTrap(DEVICE_REBOOTED);
+  		log_event_data(LOG_SYSTEM_BOOT, "Администратор");
+
+  		vTaskDelay(1010);
+  		LOG_Disable();
+#endif
+  		NVIC_SystemReset();
+        }
+      break;
+  	case 5: /* DO1 */
+  	  if(sSettings.sInOuts.ro_type_source[0] == SNMP_SET){
+  		  val_string = (char*)value;
+  		  SetROStr(val_string, 0);
+  		  if(val_string[0] == 0x31)
+  			  strcat(str, "Замкнуто");
+  		  else
+  			  strcat(str, "Разомкнуто");
+  		//  SNMP_SendUserTrap(DO0_TOGGLED);
+  		  log_event_data(LOG_DO0_STATE, str);
+  	  }
+  	  break;
+  	case 6: /* DO2 */
+  	  if(sSettings.sInOuts.ro_type_source[1] == SNMP_SET){
+  		  val_string = (char*)value;
+  		  SetROStr(val_string, 1);
+  		  if(val_string[0] == 0x31)
+  			  strcat(str, "Замкнуто");
+  		  else
+  			  strcat(str, "Разомкнуто");
+  		//  SNMP_SendUserTrap(DO1_TOGGLED);
+  		  log_event_data(LOG_DO1_STATE, str);
+  	  }
+  	  break;
+	case 7: /* DO2*/
+		if(sSettings.sInOuts.ro_type_source[2] == SNMP_SET){
+			  val_string = (char*)value;
+			  SetROStr(val_string, 2);
+			  if(val_string[0] == 0x31)
+				  strcat(str, "Замкнуто");
+			  else
+				  strcat(str, "Разомкнуто");
+			//  SNMP_SendUserTrap(DO1_TOGGLED);
+			  log_event_data(LOG_DO2_STATE, str);
+		  }
+		break;
+  	case 8: /* BatTest */
+  	  val =*(s32_t*)value;
+  	  if(val == 0){
+  		  res = ups_metac_service_pdu(ups_cancel_test);
+  		  if(res == 1){
+  			  log_event_data(LOG_TEST_UPS, "Администратор (Останов)");
+  		  }
+  	  }
+  	  else if(val > 0 && val < 100){
+  		  TimeParam = val;
+  		  res = ups_metac_service_pdu(ups_test_time);
+  		  if(res == 1){
+  			  log_event_data(LOG_TEST_UPS, "Администратор (Запущен)");
+  		  }
+  	  }
+  	  else if(val == 100){
+  		  res = ups_metac_service_pdu(ups_test_10sec);
+  		  if(res == 1){
+  			  log_event_data(LOG_TEST_UPS, "Администратор (Запущен)");
+  		  }
+  	  }
+  	  else if(val == 999){
+  		  res = ups_metac_service_pdu(ups_test_low_bat);
+  		  if(res == 1){
+  			  log_event_data(LOG_TEST_UPS, "Администратор (Запущен)");
+  		  }
+  	  }
+  	  break;
+  	case 9: /* Shutdown UPS */
+  	  val_string = (char*)value;
+  	  float shtdn_val = atof(val_string);
+  	  if(shtdn_val == 0){
+  		  res = ups_metac_service_pdu(ups_cancel_shut_down);
+  		 	if(res == 1){
+  		 		log_event_data(LOG_SHUTDOWN_UPS, "Администратор (Останов)");
+  		 	}
+  	  }
+  	  else{
+  		TimeParamFloat = shtdn_val;
+  		res = ups_metac_service_pdu(ups_shutdown);
+  		if(res == 1)
+  			log_event_data(LOG_SHUTDOWN_UPS, "Администратор");
+  	  }
+  	  break;
+      default :
+    	  return SNMP_ERR_GENERROR;
+      break;
+    };
+
+  return SNMP_ERR_NOERROR;
+}
+
+static snmp_err_t signal_set_test(struct snmp_node_instance* instance, u16_t len, void* value)
+{
+	snmp_err_t ret = SNMP_ERR_WRONGVALUE;
+    char *val_string;
+    int32_t val;
+    u32_t oid = instance->node->oid; // id сигнала
+
+    switch (oid)
+    {
+      case 2:
+        if ( len == sizeof(s32_t) )
+        {
+        	ret = SNMP_ERR_NOERROR;
+        }
+        break;
+
+      case 3:
+        if ( len == sizeof(s32_t) )
+        {
+        	ret = SNMP_ERR_NOERROR;
+        }
+        break;
+  	case 5: /* DO1 */
+  		if ( len <= 1 )
+  	    {
+  		   val_string = (char*)value;
+  		   val_string[len] = 0;
+  		   if(atoi(val_string) <= 1){
+  			   if(sSettings.sInOuts.ro_type_source[0] == SNMP_SET)
+  				 ret = SNMP_ERR_NOERROR;
+  		   }
+  	    }
+  	  break;
+  	case 6: /* DO2 */
+  		if ( len <= 1 )
+  		{
+  		   val_string = (char*)value;
+  		   val_string[len] = 0;
+  		   if(atoi(val_string) <= 1){
+  			   if(sSettings.sInOuts.ro_type_source[1] == SNMP_SET)
+  				 ret = SNMP_ERR_NOERROR;
+  		   }
+  		}
+  	  break;
+  	case 7: /* DO2*/
+		if ( len <= 1 )
+		{
+		   val_string = (char*)value;
+		   val_string[len] = 0;
+		   if(atoi(val_string) <= 1){
+			   if(sSettings.sInOuts.ro_type_source[2] == SNMP_SET)
+				 ret = SNMP_ERR_NOERROR;
+		   }
+		}
+		break;
+  	case 8: /* BatTest */
+  	   val = *((s32_t*)value);
+  	   if((val >= 0 && val <= 100) || val == 999){
+  		 ret = SNMP_ERR_NOERROR;
+  	   }
+  	  break;
+  	case 9: /* Shutdown UPS */
+  		if ( len <= 3 )
+  		{
+  		   val_string = (char*)value;
+  		   val_string[len] = 0;
+  		   if(atof(val_string) <= 10){
+  			 ret = SNMP_ERR_NOERROR;
+  		   }
+  		}
+  	  break;
+    };
+
+
+  return ret;
+}
+
+#endif
+

+ 1 - 0
modules/Ethernet/snmp_api.c

@@ -122,6 +122,7 @@ void snmp_trap_tread(void *arg)
 	  SNMP_SetManagerIP(sSettings.sSnmp.managerIP5);
 	  SNMP_SetManagerIP(sSettings.sSnmp.managerIP5);
 	  SNMP_SendVarbindTrap(&traps[trapName]);
 	  SNMP_SendVarbindTrap(&traps[trapName]);
 	}
 	}
+    vTaskDelay(10);
   }  
   }  
 
 
 }
 }

+ 66 - 5
modules/Ethernet/trap_api.c

@@ -78,13 +78,21 @@ void SNMP_InitTrapsBase(void)
   
   
   /* 5. DI0Norm */ // +
   /* 5. DI0Norm */ // +
    traps[DI0_NORM].trapId = DI0_NORM;
    traps[DI0_NORM].trapId = DI0_NORM;
-   traps[DI0_NORM].varbindId = 9;
+#ifdef HARDWARE_BT6702
+  traps[DI0_NORM].varbindId = 9;
+#elif HARDWARE_BT6706
+  traps[DI0_NORM].varbindId = 10;
+#endif
    traps[DI0_NORM].trapEnable = true;
    traps[DI0_NORM].trapEnable = true;
    traps[DI0_NORM].handle = GetDIN0StatusStr; /* State DIN */
    traps[DI0_NORM].handle = GetDIN0StatusStr; /* State DIN */
 
 
    /* 6. DI0Alarm */ // +
    /* 6. DI0Alarm */ // +
    traps[DI0_ALARM].trapId = DI0_ALARM;
    traps[DI0_ALARM].trapId = DI0_ALARM;
-   traps[DI0_ALARM].varbindId = 9;
+#ifdef HARDWARE_BT6702
+  traps[DI0_ALARM].varbindId = 9;
+#elif HARDWARE_BT6706
+  traps[DI0_ALARM].varbindId = 10;
+#endif
    traps[DI0_ALARM].trapEnable = true;
    traps[DI0_ALARM].trapEnable = true;
    traps[DI0_ALARM].handle = GetDIN0StatusStr; /* State DIN */
    traps[DI0_ALARM].handle = GetDIN0StatusStr; /* State DIN */
 
 
@@ -103,80 +111,128 @@ void SNMP_InitTrapsBase(void)
 #ifdef HARDWARE_BT6706
 #ifdef HARDWARE_BT6706
     /* 8. DO1Toggle */ // +
     /* 8. DO1Toggle */ // +
     traps[DO2_TOGGLED].trapId = DO2_TOGGLED;
     traps[DO2_TOGGLED].trapId = DO2_TOGGLED;
-    traps[DO2_TOGGLED].varbindId = 19;
+    traps[DO2_TOGGLED].varbindId = 7;
     traps[DO2_TOGGLED].trapEnable = true;
     traps[DO2_TOGGLED].trapEnable = true;
     traps[DO2_TOGGLED].handle = GetDOUT2StatusStr; /* State DO2 */
     traps[DO2_TOGGLED].handle = GetDOUT2StatusStr; /* State DO2 */
 #endif
 #endif
 
 
   /* 9. BatteryTemperatureNorm */ // +
   /* 9. BatteryTemperatureNorm */ // +
   traps[BATTERY_TEMPERATURE_NORM].trapId = BATTERY_TEMPERATURE_NORM;
   traps[BATTERY_TEMPERATURE_NORM].trapId = BATTERY_TEMPERATURE_NORM;
+#ifdef HARDWARE_BT6702
   traps[BATTERY_TEMPERATURE_NORM].varbindId = 10;
   traps[BATTERY_TEMPERATURE_NORM].varbindId = 10;
+#elif HARDWARE_BT6706
+  traps[BATTERY_TEMPERATURE_NORM].varbindId = 11;
+#endif
   traps[BATTERY_TEMPERATURE_NORM].trapEnable = true;
   traps[BATTERY_TEMPERATURE_NORM].trapEnable = true;
   traps[BATTERY_TEMPERATURE_NORM].handle = GetInternalTempStr; /* BatteryTemperature */  
   traps[BATTERY_TEMPERATURE_NORM].handle = GetInternalTempStr; /* BatteryTemperature */  
   
   
   /* 10. BatteryTemperatureAlarm */ // +
   /* 10. BatteryTemperatureAlarm */ // +
   traps[BATTERY_TEMPERATURE_ALARM].trapId = BATTERY_TEMPERATURE_ALARM;
   traps[BATTERY_TEMPERATURE_ALARM].trapId = BATTERY_TEMPERATURE_ALARM;
+#ifdef HARDWARE_BT6702
   traps[BATTERY_TEMPERATURE_ALARM].varbindId = 10;
   traps[BATTERY_TEMPERATURE_ALARM].varbindId = 10;
+#elif HARDWARE_BT6706
+  traps[BATTERY_TEMPERATURE_ALARM].varbindId = 11;
+#endif
   traps[BATTERY_TEMPERATURE_ALARM].trapEnable = true;
   traps[BATTERY_TEMPERATURE_ALARM].trapEnable = true;
   traps[BATTERY_TEMPERATURE_ALARM].handle = GetInternalTempStr; /* BatteryTemperature */
   traps[BATTERY_TEMPERATURE_ALARM].handle = GetInternalTempStr; /* BatteryTemperature */
   
   
   /* 11. LineAlarm */ // +
   /* 11. LineAlarm */ // +
   traps[LINE_ALARM].trapId = LINE_ALARM;
   traps[LINE_ALARM].trapId = LINE_ALARM;
+#ifdef HARDWARE_BT6702
   traps[LINE_ALARM].varbindId = 12;
   traps[LINE_ALARM].varbindId = 12;
+#elif HARDWARE_BT6706
+  traps[LINE_ALARM].varbindId = 13;
+#endif
   traps[LINE_ALARM].trapEnable = true;
   traps[LINE_ALARM].trapEnable = true;
   traps[LINE_ALARM].handle = GetInputVoltageStr; /* LineAlarm */
   traps[LINE_ALARM].handle = GetInputVoltageStr; /* LineAlarm */
   
   
   /* 12. LineNorm */ // +
   /* 12. LineNorm */ // +
   traps[LINE_NORM].trapId = LINE_NORM;
   traps[LINE_NORM].trapId = LINE_NORM;
+#ifdef HARDWARE_BT6702
   traps[LINE_NORM].varbindId = 12;
   traps[LINE_NORM].varbindId = 12;
+#elif HARDWARE_BT6706
+  traps[LINE_NORM].varbindId = 13;
+#endif
   traps[LINE_NORM].trapEnable = true;
   traps[LINE_NORM].trapEnable = true;
   traps[LINE_NORM].handle = GetInputVoltageStr; /* LineNorm */
   traps[LINE_NORM].handle = GetInputVoltageStr; /* LineNorm */
   
   
   /* 13. LowBatAlarm */ // +
   /* 13. LowBatAlarm */ // +
   traps[LOW_BAT_ALARM].trapId = LOW_BAT_ALARM;
   traps[LOW_BAT_ALARM].trapId = LOW_BAT_ALARM;
+#ifdef HARDWARE_BT6702
   traps[LOW_BAT_ALARM].varbindId = 15;
   traps[LOW_BAT_ALARM].varbindId = 15;
+#elif HARDWARE_BT6706
+  traps[LOW_BAT_ALARM].varbindId = 16;
+#endif
   traps[LOW_BAT_ALARM].trapEnable = true;
   traps[LOW_BAT_ALARM].trapEnable = true;
   traps[LOW_BAT_ALARM].handle = GetBatCapacityStr; /* LowBatAlarm */
   traps[LOW_BAT_ALARM].handle = GetBatCapacityStr; /* LowBatAlarm */
   
   
   /* 14. LowBatNorm */ // +
   /* 14. LowBatNorm */ // +
   traps[LOW_BAT_NORM].trapId = LOW_BAT_NORM;
   traps[LOW_BAT_NORM].trapId = LOW_BAT_NORM;
+#ifdef HARDWARE_BT6702
   traps[LOW_BAT_NORM].varbindId = 15;
   traps[LOW_BAT_NORM].varbindId = 15;
+#elif HARDWARE_BT6706
+  traps[LOW_BAT_NORM].varbindId = 16;
+#endif
   traps[LOW_BAT_NORM].trapEnable = true;
   traps[LOW_BAT_NORM].trapEnable = true;
   traps[LOW_BAT_NORM].handle = GetBatCapacityStr; /* LowBatNorm */
   traps[LOW_BAT_NORM].handle = GetBatCapacityStr; /* LowBatNorm */
   
   
   /* 15. PowerAlarm */ // +
   /* 15. PowerAlarm */ // +
   traps[POWER_ALARM].trapId = POWER_ALARM;
   traps[POWER_ALARM].trapId = POWER_ALARM;
+#ifdef HARDWARE_BT6702
   traps[POWER_ALARM].varbindId = 14;
   traps[POWER_ALARM].varbindId = 14;
+#elif HARDWARE_BT6706
+  traps[POWER_ALARM].varbindId = 15;
+#endif
   traps[POWER_ALARM].trapEnable = true;
   traps[POWER_ALARM].trapEnable = true;
   traps[POWER_ALARM].handle = GetPowerStr; /* PowerAlarm */
   traps[POWER_ALARM].handle = GetPowerStr; /* PowerAlarm */
   
   
   /* 16. PowerNorm */ // +
   /* 16. PowerNorm */ // +
   traps[POWER_NORM].trapId = POWER_NORM;
   traps[POWER_NORM].trapId = POWER_NORM;
+#ifdef HARDWARE_BT6702
   traps[POWER_NORM].varbindId = 14;
   traps[POWER_NORM].varbindId = 14;
+#elif HARDWARE_BT6706
+  traps[POWER_NORM].varbindId = 15;
+#endif
   traps[POWER_NORM].trapEnable = true;
   traps[POWER_NORM].trapEnable = true;
   traps[POWER_NORM].handle = GetPowerStr; /* PowerNorm */
   traps[POWER_NORM].handle = GetPowerStr; /* PowerNorm */
   
   
   /* 17. ConnectMonitorAlarm */ //
   /* 17. ConnectMonitorAlarm */ //
   traps[CONNECT_MONITOR_ALARM].trapId = CONNECT_MONITOR_ALARM;
   traps[CONNECT_MONITOR_ALARM].trapId = CONNECT_MONITOR_ALARM;
+#ifdef HARDWARE_BT6702
   traps[CONNECT_MONITOR_ALARM].varbindId = 17;
   traps[CONNECT_MONITOR_ALARM].varbindId = 17;
+#elif HARDWARE_BT6706
+  traps[CONNECT_MONITOR_ALARM].varbindId = 18;
+#endif
   traps[CONNECT_MONITOR_ALARM].trapEnable = true;
   traps[CONNECT_MONITOR_ALARM].trapEnable = true;
   traps[CONNECT_MONITOR_ALARM].handle = GetConnectMonitorStr;//GetConnectMonitorStr; /* ConnectMonitor */
   traps[CONNECT_MONITOR_ALARM].handle = GetConnectMonitorStr;//GetConnectMonitorStr; /* ConnectMonitor */
   
   
   /* 18. ConnectMonitorNorm */ //
   /* 18. ConnectMonitorNorm */ //
   traps[CONNECT_MONITOR_NORM].trapId = CONNECT_MONITOR_NORM;
   traps[CONNECT_MONITOR_NORM].trapId = CONNECT_MONITOR_NORM;
+#ifdef HARDWARE_BT6702
   traps[CONNECT_MONITOR_NORM].varbindId = 17;
   traps[CONNECT_MONITOR_NORM].varbindId = 17;
+#elif HARDWARE_BT6706
+  traps[CONNECT_MONITOR_NORM].varbindId = 18;
+#endif
   traps[CONNECT_MONITOR_NORM].trapEnable = true;
   traps[CONNECT_MONITOR_NORM].trapEnable = true;
   traps[CONNECT_MONITOR_NORM].handle = GetConnectMonitorStr;//GetConnectMonitorStr; /* ConnectMonitor */
   traps[CONNECT_MONITOR_NORM].handle = GetConnectMonitorStr;//GetConnectMonitorStr; /* ConnectMonitor */
 
 
   /* 19. BatteryConnectAlarm */ // +
   /* 19. BatteryConnectAlarm */ // +
   traps[BATTERY_CONNECT_ALARM].trapId = BATTERY_CONNECT_ALARM;
   traps[BATTERY_CONNECT_ALARM].trapId = BATTERY_CONNECT_ALARM;
+#ifdef HARDWARE_BT6702
   traps[BATTERY_CONNECT_ALARM].varbindId = 15;
   traps[BATTERY_CONNECT_ALARM].varbindId = 15;
+#elif HARDWARE_BT6706
+  traps[BATTERY_CONNECT_ALARM].varbindId = 16;
+#endif
   traps[BATTERY_CONNECT_ALARM].trapEnable = true;
   traps[BATTERY_CONNECT_ALARM].trapEnable = true;
   traps[BATTERY_CONNECT_ALARM].handle = GetBatCapacityStr; /* LowBatAlarm */
   traps[BATTERY_CONNECT_ALARM].handle = GetBatCapacityStr; /* LowBatAlarm */
 
 
   /* 20. BatteryConnectNorm */ // +
   /* 20. BatteryConnectNorm */ // +
   traps[BATTERY_CONNECT_NORM].trapId = BATTERY_CONNECT_NORM;
   traps[BATTERY_CONNECT_NORM].trapId = BATTERY_CONNECT_NORM;
+#ifdef HARDWARE_BT6702
   traps[BATTERY_CONNECT_NORM].varbindId = 15;
   traps[BATTERY_CONNECT_NORM].varbindId = 15;
+#elif HARDWARE_BT6706
+  traps[BATTERY_CONNECT_NORM].varbindId = 16;
+#endif
   traps[BATTERY_CONNECT_NORM].trapEnable = true;
   traps[BATTERY_CONNECT_NORM].trapEnable = true;
   traps[BATTERY_CONNECT_NORM].handle = GetBatCapacityStr; /* LowBatNorm */
   traps[BATTERY_CONNECT_NORM].handle = GetBatCapacityStr; /* LowBatNorm */
 }
 }
@@ -226,11 +282,16 @@ bool SNMP_SendMessageTrap(TRAP_t trap, char* str, uint8_t len)
 struct snmp_varbind vb1, vb2, vb;
 struct snmp_varbind vb1, vb2, vb;
 char msg[50];
 char msg[50];
 uint32_t snmp_time = 0;
 uint32_t snmp_time = 0;
-struct snmp_obj_id trapObjId = {11, {1, 3, 6, 1, 4, 1, 41752, 911, 3, 2, 1}};
+
 struct snmp_obj_id  mib2_base_oid_systime ={ 9, { 1, 3, 6, 1, 2, 1, 1, 3, 0 }};
 struct snmp_obj_id  mib2_base_oid_systime ={ 9, { 1, 3, 6, 1, 2, 1, 1, 3, 0 }};
 struct snmp_obj_id  trap_oid = {11, {1, 3, 6, 1, 6, 3, 1, 1, 4, 1, 0}};
 struct snmp_obj_id  trap_oid = {11, {1, 3, 6, 1, 6, 3, 1, 1, 4, 1, 0}};
+#ifdef HARDWARE_BT6702
+struct snmp_obj_id trapObjId = {11, {1, 3, 6, 1, 4, 1, 41752, 911, 3, 2, 1}};
 struct snmp_obj_id varObjId  = {11, {1, 3, 6, 1, 4, 1, 41752, 911, 3, 1, 1}};
 struct snmp_obj_id varObjId  = {11, {1, 3, 6, 1, 4, 1, 41752, 911, 3, 1, 1}};
-
+#elif HARDWARE_BT6706
+struct snmp_obj_id trapObjId = {11, {1, 3, 6, 1, 4, 1, 41752, 911, 4, 2, 1}};
+struct snmp_obj_id varObjId  = {11, {1, 3, 6, 1, 4, 1, 41752, 911, 4, 1, 1}};
+#endif
 /**
 /**
   * @brief  Отправка трапа с переменной, зарегистрированного в базе.
   * @brief  Отправка трапа с переменной, зарегистрированного в базе.
   * @retval 
   * @retval 

+ 3219 - 0
modules/HTTP_Server/bt6702_fs/fsdata.c

@@ -0,0 +1,3219 @@
+#include "lwip/def.h"
+#include "fsdata.h"
+
+
+#define file_NULL (struct fsdata_file *) NULL
+
+
+static const unsigned int dummy_align__rslogin_html = 0;
+static const unsigned char data__rslogin_html[] = {
+/* /rslogin.html (13 chars) */
+0x2f,0x72,0x73,0x6c,0x6f,0x67,0x69,0x6e,0x2e,0x68,0x74,0x6d,0x6c,0x00,
+
+/* HTTP header */
+
+/* "HTTP/1.1 200 OK
+" (17 bytes) */
+0x48,0x54,0x54,0x50,0x2f,0x31,0x2e,0x31,0x20,0x32,0x30,0x30,0x20,0x4f,0x4b,0x0d,
+0x0a,
+/* "Server: lwIP/1.3.1 (http://savannah.nongnu.org/projects/lwip)
+" (63 bytes) */
+0x53,0x65,0x72,0x76,0x65,0x72,0x3a,0x20,0x6c,0x77,0x49,0x50,0x2f,0x31,0x2e,0x33,
+0x2e,0x31,0x20,0x28,0x68,0x74,0x74,0x70,0x3a,0x2f,0x2f,0x73,0x61,0x76,0x61,0x6e,
+0x6e,0x61,0x68,0x2e,0x6e,0x6f,0x6e,0x67,0x6e,0x75,0x2e,0x6f,0x72,0x67,0x2f,0x70,
+0x72,0x6f,0x6a,0x65,0x63,0x74,0x73,0x2f,0x6c,0x77,0x69,0x70,0x29,0x0d,0x0a,
+/* "Content-Length: 599
+" (21 bytes) */
+0x43,0x6f,0x6e,0x74,0x65,0x6e,0x74,0x2d,0x4c,0x65,0x6e,0x67,0x74,0x68,0x3a,0x20,
+0x35,0x39,0x39,0x0d,0x0a,
+/* "Connection: Close
+" (19 bytes) */
+0x43,0x6f,0x6e,0x6e,0x65,0x63,0x74,0x69,0x6f,0x6e,0x3a,0x20,0x43,0x6c,0x6f,0x73,
+0x65,0x0d,0x0a,
+/* "Content-type: text/html
+Content-Encoding: gzip
+" (49 bytes) */
+0x43,0x6f,0x6e,0x74,0x65,0x6e,0x74,0x2d,0x74,0x79,0x70,0x65,0x3a,0x20,0x74,0x65,
+0x78,0x74,0x2f,0x68,0x74,0x6d,0x6c,0x0d,0x0a,0x43,0x6f,0x6e,0x74,0x65,0x6e,0x74,
+0x2d,0x45,0x6e,0x63,0x6f,0x64,0x69,0x6e,0x67,0x3a,0x20,0x67,0x7a,0x69,0x70,0x0d,
+0x0a,
+/* "ETag: "9f1M3plnLAoe1IS"
+" (25 bytes) */
+0x45,0x54,0x61,0x67,0x3a,0x20,0x22,0x39,0x66,0x31,0x4d,0x33,0x70,0x6c,0x6e,0x4c,
+0x41,0x6f,0x65,0x31,0x49,0x53,0x22,0x0d,0x0a,0x0d,0x0a,
+
+/* raw file data (599 bytes) */
+0x1f,0x8b,0x08,0x00,0x00,0x00,0x00,0x00,0x04,0x0a,0x7d,0x54,0xc1,0x6e,0xd4,0x30,
+0x10,0xfd,0x15,0x63,0x24,0x4e,0x75,0xb7,0x7b,0x41,0xa8,0xc4,0x91,0x50,0xe9,0x81,
+0x13,0x08,0x81,0x04,0x47,0x27,0x99,0xdd,0x4c,0x71,0x6c,0x63,0x3b,0xd9,0xdd,0x5b,
+0xc5,0x81,0x13,0x12,0x88,0x2b,0x48,0xfc,0x02,0xa2,0x07,0x8a,0x10,0xfd,0x86,0xec,
+0x1f,0x31,0x4e,0xb6,0xdb,0x46,0x48,0x1c,0xe2,0xf5,0xd8,0x33,0xe3,0x37,0xef,0x3d,
+0x6d,0x76,0xe7,0xf1,0xd3,0x93,0x17,0xaf,0x9f,0x9d,0xb2,0x3a,0x36,0x3a,0xcf,0xd2,
+0xca,0xb4,0x32,0x4b,0xc9,0x39,0x45,0xa0,0xaa,0x3c,0x6b,0x20,0x2a,0x56,0xd6,0xca,
+0x07,0x88,0x92,0xb7,0x71,0x21,0x1e,0xd0,0xdd,0x70,0x5a,0xc7,0xe8,0x04,0xbc,0x6d,
+0xb1,0x93,0xfc,0x95,0x78,0xf9,0x48,0x9c,0xd8,0xc6,0xa9,0x88,0x85,0x06,0xce,0x4a,
+0x6b,0x22,0x18,0x2a,0x79,0x72,0x2a,0xa1,0x5a,0xc2,0x75,0x91,0x51,0x0d,0x48,0xde,
+0x21,0xac,0x9c,0xf5,0xf1,0x56,0xde,0x0a,0xab,0x58,0xcb,0x0a,0x3a,0x2c,0x41,0x0c,
+0xc1,0x01,0x1a,0x8c,0xa8,0xb4,0x08,0xa5,0xd2,0x20,0xe7,0x07,0x8d,0x5a,0x63,0xd3,
+0x36,0xfb,0xb8,0x0d,0xe0,0x87,0x40,0xd1,0x93,0xf2,0x88,0x9e,0x88,0x18,0x35,0xe4,
+0xfd,0xd7,0xfe,0xaa,0xff,0xd3,0x5f,0x6e,0xdf,0xf5,0x57,0xdb,0xf3,0xfe,0x92,0xf6,
+0x17,0xd9,0x6c,0xbc,0xcb,0x34,0x9a,0x37,0xac,0xf6,0xb0,0x90,0xbc,0x51,0x68,0x0e,
+0xcb,0x10,0x38,0xf3,0xa0,0x25,0x0f,0x71,0xa3,0x21,0xd4,0x00,0x91,0x3a,0x85,0xd2,
+0xa3,0x8b,0x2c,0x6e,0x1c,0xc1,0x8d,0xb0,0x8e,0xb3,0x33,0xd5,0xa9,0xf1,0x94,0xb3,
+0xe0,0x4b,0xc9,0xbd,0xd5,0x70,0x78,0x16,0x28,0x79,0x36,0x9e,0xd3,0x66,0x24,0xad,
+0xb0,0xd5,0x26,0xcf,0x2a,0xec,0x58,0xa9,0x55,0x08,0x92,0x1b,0xd5,0x15,0xca,0xb3,
+0xf1,0x47,0x54,0xb0,0x50,0xad,0x8e,0xd7,0xe1,0x02,0xd7,0x50,0x89,0x68,0x1d,0x75,
+0xfa,0xa7,0x46,0xa4,0x8e,0xe0,0xc7,0xab,0x3c,0x53,0x3b,0xe8,0x77,0x89,0xb9,0xb1,
+0xb5,0xb6,0x4b,0x9b,0x20,0x28,0xfa,0xa8,0x7a,0xba,0xde,0x6a,0xb7,0xf2,0xca,0x39,
+0x6a,0xc4,0xb0,0x92,0x7c,0xa7,0x0e,0xd5,0xd5,0xf3,0xfc,0xb9,0xaa,0xb0,0x0d,0xac,
+0xff,0xd4,0xff,0xd8,0x33,0xf6,0xb3,0xff,0xbe,0x7d,0x4f,0x0c,0x7e,0xa4,0x91,0xe6,
+0x13,0x58,0x4e,0x19,0xd0,0x6c,0x58,0xaf,0x07,0x99,0xe2,0x1e,0xaf,0x12,0x05,0x74,
+0xbe,0xb0,0xbe,0x61,0xaa,0x8c,0x68,0x8d,0xe4,0x04,0x35,0x11,0xbe,0x44,0xce,0xc8,
+0x40,0xb5,0x25,0x20,0xce,0x86,0x64,0x82,0xfd,0x28,0x68,0xc4,0x50,0x92,0x16,0x81,
+0x86,0xc4,0x4a,0xce,0xd1,0xaa,0xa0,0x37,0xe9,0x6c,0xd7,0x83,0xe7,0xfd,0x17,0x92,
+0xf8,0x22,0x49,0x7b,0x7c,0xcf,0x14,0xc1,0x3d,0xcc,0x66,0x43,0x52,0x9e,0xa1,0x71,
+0xed,0x6d,0xdd,0xf6,0xdd,0x87,0x96,0x69,0x70,0xd2,0x8d,0x13,0xf7,0xc9,0x87,0x03,
+0xa2,0x91,0x92,0xdd,0x96,0x3c,0xa6,0xc1,0x2c,0xc9,0x8a,0x7c,0x7e,0x9f,0x84,0x4e,
+0x9e,0x48,0x4e,0xf1,0x04,0x5d,0x78,0x5c,0xd6,0xf1,0x98,0xcd,0x8f,0xdc,0x7a,0x8a,
+0xca,0x91,0xca,0x04,0xea,0x1b,0xb1,0x76,0x4e,0xc0,0x7e,0x6f,0x3f,0xfc,0x0f,0x56,
+0xca,0x5e,0x59,0x5f,0xfd,0x17,0xda,0x4d,0x52,0x12,0x6c,0x78,0x80,0x4d,0xc1,0xe5,
+0x6c,0x32,0x6c,0x68,0x8b,0x06,0x6f,0xc8,0x2c,0xa2,0x61,0xf4,0x09,0xe7,0x91,0xd0,
+0x6f,0x38,0xeb,0x94,0x6e,0x69,0x94,0xfe,0x33,0x01,0xfc,0x45,0x42,0x5f,0xd2,0x08,
+0xb3,0x44,0xca,0xd4,0x32,0x3b,0x13,0x8d,0x16,0x9e,0x0d,0x7f,0x0c,0x7f,0x01,0xba,
+0xa9,0x59,0x6b,0x28,0x04,0x00,0x00,};
+
+static const unsigned int dummy_align__rotek_png = 1;
+static const unsigned char data__rotek_png[] = {
+/* /rotek.png (10 chars) */
+0x2f,0x72,0x6f,0x74,0x65,0x6b,0x2e,0x70,0x6e,0x67,0x00,
+
+/* HTTP header */
+
+/* "HTTP/1.1 200 OK
+" (17 bytes) */
+0x48,0x54,0x54,0x50,0x2f,0x31,0x2e,0x31,0x20,0x32,0x30,0x30,0x20,0x4f,0x4b,0x0d,
+0x0a,
+/* "Server: lwIP/1.3.1 (http://savannah.nongnu.org/projects/lwip)
+" (63 bytes) */
+0x53,0x65,0x72,0x76,0x65,0x72,0x3a,0x20,0x6c,0x77,0x49,0x50,0x2f,0x31,0x2e,0x33,
+0x2e,0x31,0x20,0x28,0x68,0x74,0x74,0x70,0x3a,0x2f,0x2f,0x73,0x61,0x76,0x61,0x6e,
+0x6e,0x61,0x68,0x2e,0x6e,0x6f,0x6e,0x67,0x6e,0x75,0x2e,0x6f,0x72,0x67,0x2f,0x70,
+0x72,0x6f,0x6a,0x65,0x63,0x74,0x73,0x2f,0x6c,0x77,0x69,0x70,0x29,0x0d,0x0a,
+/* "Content-Length: 7905
+" (22 bytes) */
+0x43,0x6f,0x6e,0x74,0x65,0x6e,0x74,0x2d,0x4c,0x65,0x6e,0x67,0x74,0x68,0x3a,0x20,
+0x37,0x39,0x30,0x35,0x0d,0x0a,
+/* "Connection: Close
+" (19 bytes) */
+0x43,0x6f,0x6e,0x6e,0x65,0x63,0x74,0x69,0x6f,0x6e,0x3a,0x20,0x43,0x6c,0x6f,0x73,
+0x65,0x0d,0x0a,
+/* "Content-type: image/png
+" (25 bytes) */
+0x43,0x6f,0x6e,0x74,0x65,0x6e,0x74,0x2d,0x74,0x79,0x70,0x65,0x3a,0x20,0x69,0x6d,
+0x61,0x67,0x65,0x2f,0x70,0x6e,0x67,0x0d,0x0a,
+/* "ETag: "gd0EKd5jxufQRwD"
+" (25 bytes) */
+0x45,0x54,0x61,0x67,0x3a,0x20,0x22,0x67,0x64,0x30,0x45,0x4b,0x64,0x35,0x6a,0x78,
+0x75,0x66,0x51,0x52,0x77,0x44,0x22,0x0d,0x0a,0x0d,0x0a,
+
+/* raw file data (7905 bytes) */
+0x89,0x50,0x4e,0x47,0x0d,0x0a,0x1a,0x0a,0x00,0x00,0x00,0x0d,0x49,0x48,0x44,0x52,
+0x00,0x00,0x01,0x57,0x00,0x00,0x00,0xae,0x08,0x06,0x00,0x00,0x00,0x82,0xdb,0x4e,
+0x7d,0x00,0x00,0x1e,0xa8,0x49,0x44,0x41,0x54,0x78,0xda,0xec,0x9d,0x0f,0x94,0x5c,
+0x57,0x5d,0xc7,0x7f,0x29,0xd9,0x6c,0x92,0x26,0xcd,0xa4,0x4d,0x04,0xda,0x4a,0x26,
+0x08,0xda,0x08,0x34,0xb3,0xb6,0x95,0x3f,0x16,0x32,0x69,0x39,0x88,0x80,0x66,0xb6,
+0x5a,0x44,0x51,0xb3,0x2b,0x22,0x5a,0xa0,0xd9,0x05,0xfc,0x57,0x85,0xdd,0xe5,0x80,
+0x15,0x95,0xb3,0x9b,0x83,0x50,0x45,0xe9,0x4e,0x10,0x05,0xdb,0x43,0xb3,0x81,0xd6,
+0x82,0xd0,0xee,0xa4,0xa2,0x80,0x05,0x77,0x0a,0x1e,0x8a,0xfc,0xdb,0xd7,0x43,0x29,
+0x3d,0x34,0x34,0x93,0xa6,0x6d,0xfe,0xe2,0x7a,0x7f,0xbb,0xf7,0x66,0xdf,0xbe,0xbc,
+0x77,0xff,0xcd,0x7b,0x33,0xf3,0x66,0xbf,0x9f,0x73,0xee,0xd9,0xd9,0x99,0x79,0x6f,
+0xee,0xfb,0x73,0xbf,0xef,0x77,0x7f,0xf7,0x77,0x7f,0x77,0xc5,0xdc,0xdc,0x1c,0x01,
+0x00,0x00,0x48,0x97,0x73,0x70,0x0a,0x00,0x00,0x00,0xe2,0x0a,0x00,0x00,0x10,0x57,
+0x00,0x00,0x80,0xb8,0x02,0x00,0x00,0x80,0xb8,0x02,0x00,0x00,0xc4,0x15,0x00,0x00,
+0x20,0xae,0x00,0x00,0x00,0x20,0xae,0x00,0x00,0x00,0x71,0x05,0x00,0x00,0x88,0x2b,
+0x00,0x00,0x00,0x88,0x2b,0x00,0x00,0x40,0x5c,0x01,0x00,0x00,0xe2,0x0a,0x00,0x00,
+0x00,0xe2,0x0a,0x00,0x00,0x10,0x57,0x00,0x00,0x80,0xb8,0x02,0x00,0x00,0x80,0xb8,
+0x02,0x00,0x00,0xc4,0x15,0x00,0x00,0x20,0xae,0x00,0x00,0x00,0x20,0xae,0x00,0x00,
+0x00,0x71,0x05,0x00,0x00,0x88,0x2b,0x00,0x00,0x00,0x88,0x2b,0x00,0x00,0x40,0x5c,
+0x01,0x00,0x00,0xe2,0x0a,0x00,0x00,0x00,0xe2,0x0a,0x00,0x00,0x10,0x57,0x00,0x00,
+0x80,0xb8,0x02,0x00,0x00,0x80,0xb8,0x02,0x00,0x00,0xc4,0x15,0x00,0x00,0x20,0xae,
+0x00,0x00,0xb0,0x7c,0x59,0x99,0xd5,0x8e,0xaf,0xae,0x5c,0x9b,0xf8,0xd9,0xf4,0x35,
+0xd7,0x75,0xc3,0xb9,0x2b,0x88,0x52,0x0a,0xfd,0x5f,0x0e,0xbd,0xae,0x85,0x5e,0x07,
+0xb2,0x00,0xdf,0x13,0x7d,0xe8,0x21,0xea,0xbb,0x67,0x0a,0x27,0x02,0x68,0xb9,0x6b,
+0xea,0xd6,0xe5,0x21,0xae,0x5d,0x46,0x49,0x8a,0xe7,0x76,0xf9,0xba,0x64,0xf8,0xfe,
+0x48,0xcc,0x7b,0x75,0x29,0xb2,0x07,0xe5,0xeb,0x1a,0x4e,0x2b,0x00,0xb0,0x5c,0x97,
+0x9d,0xb1,0x24,0x4a,0x45,0x94,0x5d,0x52,0x54,0x0b,0x29,0x09,0x74,0x49,0xee,0x97,
+0x69,0x48,0x81,0x3d,0x20,0xca,0x94,0xfc,0x1f,0x00,0xd0,0x25,0xc0,0xe7,0xba,0x14,
+0x16,0xd2,0x49,0x51,0x0e,0xcb,0xbf,0x95,0x94,0x84,0x55,0x27,0xe0,0xea,0xf7,0xf6,
+0x87,0x84,0x17,0x00,0x00,0x71,0xed,0x0a,0x06,0x44,0x99,0x15,0x65,0x5a,0xbe,0x6e,
+0x07,0x15,0x29,0xb0,0xb3,0xb2,0x0e,0x05,0x5c,0x16,0x00,0x20,0xae,0x79,0x17,0x55,
+0xb6,0x1e,0x8b,0x1d,0x52,0xa7,0xa2,0xac,0x0f,0xd7,0x6b,0x08,0xb7,0x28,0x00,0x10,
+0xd7,0xbc,0x75,0xff,0x67,0x32,0x10,0xd5,0x5a,0xca,0x6e,0x83,0x71,0x29,0xb2,0x65,
+0xdc,0xaa,0x00,0xe4,0x8b,0xe5,0x36,0xa0,0xc5,0x82,0x35,0xd2,0x84,0x45,0xa8,0x46,
+0xf9,0x1f,0x90,0xaf,0xb9,0x34,0x0c,0xbf,0x57,0x92,0x02,0xbe,0x5d,0x8a,0x64,0xc9,
+0xf1,0x37,0x79,0x5b,0x76,0x57,0xf0,0xa0,0xd7,0x20,0x61,0xe0,0x0b,0x00,0x88,0x6b,
+0x87,0xc1,0xa2,0xb6,0xdf,0xd1,0x52,0x6d,0x48,0x51,0x3b,0x20,0x45,0xd5,0x55,0xd8,
+0x1a,0x31,0xd6,0x6c,0x41,0x8a,0x2c,0x47,0x22,0xb8,0x0c,0x98,0x55,0xe4,0x76,0x83,
+0xb2,0x4e,0x00,0x00,0xb8,0x05,0xda,0xce,0x90,0x74,0x03,0xd8,0x0a,0x6b,0x4d,0x8a,
+0xd8,0xd6,0x90,0x98,0xa5,0x65,0x31,0x36,0x42,0x56,0xe8,0x46,0xf9,0xd7,0xd6,0x9d,
+0x50,0x90,0x0f,0x88,0x71,0xdc,0xba,0x00,0x40,0x5c,0xdb,0xcd,0xa4,0x83,0x18,0xb1,
+0xc8,0xed,0x94,0xa5,0xda,0xa2,0x2e,0x78,0x55,0xfe,0xde,0x56,0xf9,0xda,0xf6,0x61,
+0x31,0x4d,0x88,0x28,0x00,0x00,0xe2,0xda,0x06,0x0a,0xd2,0x5a,0x1d,0x70,0x14,0xd5,
+0x5a,0x9b,0xea,0x1b,0x84,0xac,0x65,0x9b,0x3a,0x94,0x21,0xb0,0x00,0x74,0x2e,0xdd,
+0xea,0x73,0x2d,0x48,0xe1,0x31,0x0d,0x1e,0xb1,0x65,0x3a,0x26,0xca,0x84,0xe7,0xef,
+0x14,0x0d,0xae,0x86,0x80,0xdc,0xf3,0x0a,0x04,0x52,0xe4,0xd5,0x04,0x03,0x9d,0x78,
+0x96,0xe4,0x71,0xf6,0x13,0xf2,0x17,0x00,0x00,0x71,0xed,0x10,0x61,0xad,0x49,0x4b,
+0xd1,0x45,0x94,0x58,0xf0,0x76,0xd0,0x62,0xae,0x01,0x5b,0xf8,0xb7,0x38,0xb2,0xe0,
+0x20,0xd9,0x0f,0x8c,0x4d,0xc9,0xef,0xaa,0x99,0x62,0x3a,0x81,0xdd,0x2f,0x05,0x19,
+0x91,0x04,0x00,0xc0,0x2d,0xd0,0x56,0x61,0x1d,0x93,0x62,0x64,0x23,0xac,0x6a,0xe6,
+0xd4,0x9c,0xfc,0x3b,0x44,0xee,0x71,0xa7,0x65,0xb9,0x1d,0x6f,0xaf,0xa6,0xba,0xda,
+0xb8,0x2b,0x1a,0xd2,0x2a,0x1d,0x34,0x7c,0xaf,0x04,0x17,0x01,0x00,0x10,0x57,0xda,
+0x79,0xdb,0x07,0xb2,0xda,0xf5,0xa4,0x41,0x58,0x95,0x58,0x8d,0x5a,0x88,0x34,0x8b,
+0xe1,0x2c,0x65,0x33,0xe7,0x3f,0x9c,0x53,0x60,0xd4,0x42,0x14,0xab,0xa2,0xf4,0x19,
+0x2c,0x53,0x25,0xb0,0x00,0x00,0x58,0xae,0xa9,0x32,0x6e,0x10,0xc1,0x86,0xb4,0x56,
+0x4d,0x31,0xa2,0x6c,0x51,0xce,0xc8,0xfd,0x15,0x5b,0x60,0x69,0x8f,0x48,0x11,0x37,
+0x09,0x7e,0xdd,0xa2,0xeb,0x5f,0x92,0xa2,0x0d,0x00,0x80,0xb8,0xa6,0x66,0x09,0x0e,
+0x59,0x08,0x6b,0xdd,0xc2,0xf2,0x6b,0x47,0x9e,0x81,0xb0,0xc8,0x96,0x9b,0x14,0xd8,
+0x01,0x6a,0x5f,0xf2,0x19,0x00,0x40,0x17,0x89,0x6b,0xc1,0x60,0xad,0xd9,0x08,0xab,
+0x9a,0x64,0x50,0x6e,0xf3,0xb1,0x14,0xa5,0xc0,0x8f,0x36,0x29,0xb0,0xad,0xb0,0xba,
+0x01,0x00,0x9d,0x28,0xae,0x29,0xfa,0x5d,0x4d,0xe1,0x4a,0xfd,0x1a,0x61,0x55,0xc2,
+0xec,0x3a,0xe3,0x89,0x5d,0x0b,0x6a,0x50,0x8c,0x67,0x59,0xad,0x88,0x29,0x1b,0xe5,
+0xe7,0xc3,0xe4,0x3e,0xc3,0x6b,0x84,0xf4,0x03,0x54,0x26,0x81,0x35,0x3d,0x70,0x00,
+0x00,0xb0,0x5c,0x8d,0xee,0x00,0x9d,0x9f,0x95,0x85,0xad,0xa6,0x11,0x20,0x97,0xfc,
+0xad,0xbc,0x9f,0x41,0x29,0x9c,0x6a,0x50,0xac,0xa6,0x11,0x38,0x95,0x57,0x60,0x42,
+0x7e,0x7f,0xa3,0xfc,0x6b,0x9b,0x17,0xa0,0x6c,0x21,0xb0,0xc3,0x86,0xed,0x91,0xb2,
+0x10,0x00,0x88,0xab,0x97,0x3b,0x60,0xdc,0x60,0x5d,0x4e,0x18,0x84,0xd5,0x26,0x43,
+0x55,0x95,0x16,0x66,0x4d,0xa9,0x29,0xb1,0xcd,0x30,0x25,0x05,0xd6,0x76,0xaa,0xab,
+0x29,0xc4,0xaa,0x4a,0xfa,0x09,0x10,0x23,0x84,0xf0,0x2c,0x00,0x96,0x9f,0xb8,0x36,
+0xe9,0x1a,0x60,0xab,0xac,0x98,0xf0,0x59,0x40,0xc9,0xb1,0xa1,0xb6,0xc2,0xaa,0xba,
+0xde,0xae,0x13,0x0d,0x6c,0x50,0xf5,0xb3,0x99,0xea,0x6a,0x12,0xd8,0x61,0x83,0xdb,
+0x03,0x49,0x5e,0x00,0x80,0xe5,0xea,0x64,0xb5,0xee,0xd1,0x7c,0xae,0xcb,0x7b,0x6a,
+0x8a,0x85,0x65,0xd8,0x9f,0xda,0x47,0xd9,0xe7,0x19,0x08,0x68,0xd1,0x2f,0x6b,0x23,
+0xb0,0xba,0xe3,0x4d,0x62,0x80,0x30,0xb8,0x05,0xc0,0xf2,0x13,0x57,0x4f,0xeb,0x75,
+0x48,0x63,0xc9,0x4d,0x69,0x44,0x71,0x94,0xcc,0xb1,0xb0,0x36,0x93,0x0c,0xa2,0x42,
+0x5f,0x8e,0x29,0x2e,0x82,0x36,0x41,0x76,0x93,0x04,0x26,0x35,0x56,0xb6,0xc9,0x3d,
+0x00,0x00,0x80,0xe5,0xda,0x94,0xd5,0x9a,0x64,0x05,0x96,0x0d,0x22,0x63,0x3b,0xc9,
+0x40,0x59,0x83,0x6a,0x86,0xd5,0x61,0x69,0x55,0x46,0xcb,0x2c,0x2d,0x9d,0xea,0x6a,
+0xf2,0x7d,0xda,0xc6,0xb0,0x56,0x34,0xd6,0x76,0x03,0xd6,0x2b,0x00,0x9d,0x41,0x47,
+0x24,0x6e,0x61,0xeb,0x75,0xfa,0x9a,0xeb,0x6c,0xbf,0xae,0xcb,0xde,0x3f,0x46,0xf1,
+0xfe,0xd1,0x34,0x62,0x61,0xd5,0x94,0xd8,0x3d,0x64,0x3f,0x48,0xa4,0x96,0xcf,0xe6,
+0xc2,0xbe,0xcf,0xbd,0xd2,0xc2,0x6c,0x18,0x04,0x56,0xe7,0x63,0x9d,0xa4,0xf8,0x28,
+0x85,0x86,0xdc,0xff,0x88,0x46,0x60,0x47,0x9b,0xbc,0x54,0xe3,0xe4,0xbe,0x4c,0x8d,
+0xe9,0x81,0x72,0x44,0xbe,0xae,0x91,0x5f,0x16,0x31,0xb5,0x94,0x0e,0x3f,0x3c,0x37,
+0xa4,0x5c,0x3f,0xb0,0xc0,0x3e,0x5a,0x3a,0x00,0xcb,0xed,0x60,0x97,0x4b,0x13,0x6f,
+0xc1,0xfd,0x95,0xc5,0xd8,0x48,0x53,0xac,0x98,0x9b,0x9b,0xcb,0x64,0xc7,0x57,0x57,
+0xae,0x75,0xde,0xc6,0x52,0x60,0x67,0x35,0x56,0xd8,0xd6,0x84,0x13,0x3c,0x6a,0xb0,
+0x5a,0x4d,0x79,0x5c,0x6d,0xd2,0xff,0xd9,0x62,0x93,0xe6,0xd0,0x26,0x4a,0x60,0x30,
+0x41,0x68,0x66,0x13,0xb6,0x0b,0xe4,0xf9,0x69,0x86,0xb9,0x16,0xdc,0x93,0x81,0xec,
+0x3d,0xec,0x55,0xd7,0xb2,0x70,0xe8,0x21,0xea,0xbb,0x67,0x2a,0x7a,0x9c,0xfc,0xb0,
+0xd8,0x0d,0x31,0x6d,0x09,0xc3,0x91,0xfb,0x75,0x9a,0xec,0x27,0xdc,0xd4,0x2c,0xc5,
+0x75,0x92,0xfc,0x66,0x16,0x9e,0x31,0x8c,0xee,0x9a,0xba,0x15,0x6e,0x81,0x26,0x28,
+0x69,0x84,0xb5,0x9a,0x20,0xac,0x45,0x83,0xb0,0x9a,0x62,0x61,0x27,0x65,0xd7,0x3e,
+0xad,0x90,0x26,0x35,0x82,0xdf,0x4c,0x0c,0x6b,0x52,0x37,0x5f,0x59,0xaf,0x94,0x70,
+0x1e,0x2a,0x4d,0x9e,0xfb,0x56,0x50,0xa4,0xc5,0xa4,0x39,0xd1,0x07,0x5a,0x31,0xe4,
+0x8e,0x19,0x27,0x08,0x6b,0xab,0xa8,0x37,0x71,0x2f,0xd4,0x33,0x14,0xd6,0xc0,0xa2,
+0xc7,0x09,0x71,0x55,0xee,0x01,0x03,0xbb,0x35,0x9f,0x25,0x89,0xca,0x88,0xe1,0xa9,
+0x6a,0x8a,0x85,0x1d,0xc8,0xe8,0x70,0xcb,0x16,0xd6,0xa9,0xce,0xff,0x3b,0xa2,0xd9,
+0x2e,0x89,0x5d,0x4d,0xd4,0xb7,0xd8,0x86,0x5b,0x82,0xcf,0xbd,0x9a,0x96,0xac,0x96,
+0x19,0x1f,0x20,0xd0,0x6a,0x6a,0x91,0xfb,0xc0,0xc5,0xd0,0x78,0xc0,0x60,0x68,0xcc,
+0x78,0x5e,0x53,0x16,0xd4,0xbe,0x4e,0x15,0xd6,0x8e,0xb4,0x5c,0x0d,0x02,0x5b,0xd1,
+0x9c,0xe8,0x7a,0xc2,0xc5,0x1b,0xd0,0x74,0x27,0x9a,0x8d,0x85,0x4d,0xc3,0x12,0xd7,
+0x09,0xac,0x2e,0xa4,0x2c,0xc9,0x7a,0x0d,0x34,0xa2,0x9c,0x07,0xcb,0xf5,0x2c,0x51,
+0x3f,0xbe,0x76,0xfd,0xf4,0xe9,0x9e,0x5e,0xcc,0x36,0x6b,0x0f,0x41,0x93,0x0f,0xd9,
+0x7a,0x06,0x6d,0x6c,0x8a,0x72,0x90,0x1c,0x3e,0x4f,0x6e,0x81,0xa2,0xe6,0xc2,0xee,
+0xd3,0x08,0x90,0xce,0xd2,0x0d,0x34,0xdd,0x94,0x92,0xe5,0x45,0x56,0x93,0x01,0xc2,
+0x79,0x05,0xf8,0xff,0x7e,0x72,0x9b,0x85,0x95,0xf4,0x00,0x18,0xd3,0x6c,0x9b,0x14,
+0x35,0x71,0x40,0x73,0x43,0x97,0x3d,0xcf,0xff,0xf6,0x76,0x5d,0x78,0x21,0xae,0xf4,
+0xe0,0xb3,0x2e,0x85,0xcc,0x75,0x86,0xb8,0xba,0xde,0x3f,0xf5,0x94,0x85,0xb5,0x2a,
+0xdb,0x56,0xc7,0xaf,0xba,0xd1,0x91,0xe2,0x9a,0x60,0xbd,0x56,0x0c,0x22,0xe7,0x22,
+0x3e,0x0d,0x8d,0x3b,0x60,0xc8,0xc2,0xc2,0xab,0x46,0x04,0x34,0x48,0xb0,0x1e,0xd5,
+0xf2,0xd9,0xa6,0x35,0xba,0x4a,0x94,0x3c,0x93,0x6a,0x42,0xf3,0x10,0x18,0x70,0x3c,
+0x1f,0x3e,0x8d,0xa3,0xdd,0x96,0xeb,0x3c,0xdf,0x85,0xb8,0xb6,0x8b,0x83,0x91,0xff,
+0xb7,0x38,0x0a,0x73,0x23,0xe6,0x3e,0x9a,0xf5,0xbc,0x9f,0x86,0xc9,0xbc,0x2a,0x07,
+0xc4,0xd5,0x43,0x60,0xb7,0x6b,0x2e,0x60,0x90,0x20,0x06,0x45,0x8d,0x38,0x36,0x12,
+0xac,0x63,0x53,0x2c,0xac,0x5a,0x76,0x25,0xb0,0x3c,0x94,0x86,0xbc,0x29,0x4c,0xdd,
+0x98,0x21,0xcd,0x0d,0xb7,0x4f,0x63,0x89,0x56,0x12,0x7e,0xb3,0x96,0xb0,0xcd,0x8e,
+0x26,0x7a,0x0e,0x6d,0xe3,0x74,0x4f,0x2f,0x35,0x36,0x5f,0x04,0xa9,0x6b,0x3d,0xcd,
+0x0c,0x66,0x05,0x09,0xbd,0x34,0x9f,0xc1,0xe1,0x41,0xf2,0x5f,0x48,0x14,0xe2,0x6a,
+0x10,0xd8,0x24,0x8b,0xab,0x96,0xf0,0xfd,0x8a,0xc1,0x25,0x10,0x87,0x2e,0xd1,0x89,
+0xcb,0x24,0x83,0xa4,0x7a,0xda,0xe4,0x61,0x4d,0xb2,0x5e,0x93,0xd8,0x65,0x69,0x71,
+0x34,0x63,0xb9,0x96,0x09,0xc0,0x2d,0xe0,0x2e,0xae,0x07,0x23,0xf7,0x90,0x8f,0xb0,
+0x72,0x7b,0xe9,0xa3,0xe6,0x93,0x26,0x41,0x5c,0xe3,0x58,0xf3,0xf8,0x11,0x9d,0xe5,
+0x34,0x7f,0x01,0x5f,0xf0,0xe9,0x8f,0x44,0x05,0x76,0x87,0xe6,0x49,0x1c,0xc4,0x88,
+0x71,0x91,0xf4,0x3e,0x5a,0x5d,0x5e,0x58,0x17,0x2b,0x40,0x27,0xb0,0xe5,0x84,0x9b,
+0xb7,0xa1,0x11,0x75,0xe3,0x43,0x27,0x85,0x2e,0xbe,0xab,0xd5,0x5a,0x33,0x94,0xac,
+0x08,0xff,0x46,0x40,0x20,0x6d,0xcb,0xd5,0xf5,0xbe,0x51,0xd7,0x60,0xc0,0x53,0x58,
+0x03,0xea,0xe0,0x50,0x2b,0x13,0x79,0x58,0x5a,0x9b,0x1b,0x76,0x85,0x03,0xc9,0xe7,
+0x55,0x66,0xd3,0x85,0x67,0x5d,0x7c,0x16,0xc9,0x63,0xe7,0x9e,0x77,0xe6,0x8d,0xbe,
+0x7f,0x3f,0x40,0x33,0x2f,0xde,0x95,0x24,0x3a,0xf3,0x83,0x3d,0x3f,0xfb,0xd9,0x8f,
+0x45,0xdf,0xd7,0x09,0xeb,0x58,0x8a,0xa2,0x50,0x97,0xfb,0x4b,0xb2,0x52,0xf7,0x50,
+0xbc,0x5f,0xe9,0x40,0x82,0x35,0x5e,0x94,0x37,0x6d,0xc3,0xd0,0x9d,0x8b,0xba,0x13,
+0xb2,0x14,0x57,0x9b,0xa0,0xf1,0x21,0x4a,0x27,0x63,0x97,0x8a,0xed,0x8d,0x9b,0xf9,
+0xc6,0xf7,0x80,0xef,0xb2,0x3d,0xb6,0xb3,0x8a,0xca,0xe4,0x96,0xbb,0x61,0xd8,0x51,
+0x2c,0x5c,0x16,0x9d,0x9c,0xd2,0xf4,0xca,0xd2,0x6a,0x8b,0xae,0xf7,0xfa,0x00,0xf9,
+0x25,0x6e,0xb7,0x99,0x0e,0x0e,0x71,0x4d,0xb0,0xb4,0xd4,0xdf,0xed,0xa1,0xc6,0x5e,
+0x8a,0x36,0x7c,0x8b,0xd8,0xd7,0x99,0x50,0x23,0x3b,0x73,0xd3,0x6e,0xbd,0xff,0x5e,
+0x3a,0xd5,0xd3,0x4b,0x8f,0x17,0x36,0xcd,0x8f,0x36,0x73,0x51,0xd6,0x0d,0xef,0xf3,
+0x89,0xf3,0xce,0x3f,0xb3,0x7f,0x39,0x33,0x6c,0xb7,0xa6,0xf1,0x9e,0xd5,0x2d,0x7f,
+0xce,0x17,0x3f,0x4d,0x1b,0x1f,0xf9,0x1e,0xfd,0x68,0x65,0x0f,0x3d,0xbc,0xe5,0x12,
+0xba,0xe8,0x3b,0xff,0x43,0x27,0x7b,0xd7,0xd0,0x7f,0xbd,0xf4,0x35,0x36,0xe7,0x60,
+0x42,0x8a,0x68,0xdc,0xcd,0x5a,0x49,0x10,0x57,0x93,0x25,0x5a,0x8b,0xa9,0x77,0x23,
+0x41,0x48,0xcb,0x8e,0x0f,0x0b,0x17,0x3f,0xad,0xed,0x7e,0x27,0xa4,0x4b,0xc3,0xda,
+0xe5,0xb0,0xf2,0xe4,0x89,0xb8,0x06,0xd8,0xaf,0xb1,0x52,0x6b,0xb2,0x4b,0x39,0xe3,
+0x29,0xb0,0x35,0x87,0xfb,0x99,0x1c,0x8e,0xdb,0x16,0xd7,0x87,0xe0,0x7d,0x19,0xf7,
+0x0c,0x5c,0x2d,0xd7,0x0a,0xf9,0x25,0x0d,0x52,0x83,0xc1,0xb9,0x15,0xd6,0xac,0xc5,
+0xb5,0x28,0x6f,0xbc,0xed,0xf2,0xa2,0x94,0x28,0xc3,0xc4,0xcd,0x6b,0x9e,0x78,0xec,
+0x4c,0x98,0x51,0x41,0x88,0x1e,0x97,0x28,0x8f,0x6f,0xd8,0x44,0xbd,0xc7,0x9f,0x18,
+0x91,0xdf,0x0b,0x68,0x31,0x3e,0xb6,0xa8,0x69,0x7c,0x7b,0xd5,0x45,0x56,0x82,0x7a,
+0x6c,0x5d,0x81,0x8e,0xaf,0x39,0x37,0xf6,0xcb,0x2f,0xfe,0xe4,0x87,0xe6,0x05,0xf7,
+0xfb,0xc5,0x6d,0x34,0xbb,0xed,0x0a,0x32,0x58,0xc3,0x93,0x09,0x0d,0xaa,0x14,0x63,
+0xdd,0x04,0x1e,0x62,0x59,0xa7,0x74,0xfc,0xa5,0xcd,0x0c,0x62,0xa4,0xc6,0xba,0x23,
+0x87,0x7c,0x2c,0x1b,0x15,0xcf,0x3c,0xed,0x71,0xcc,0x36,0x42,0xb5,0x3d,0xc3,0x73,
+0xe3,0x2a,0x66,0xb5,0x8c,0xf5,0xc2,0x75,0x30,0xd4,0x47,0x58,0xab,0x94,0xa3,0x88,
+0x00,0x1d,0x59,0xfa,0x5c,0x55,0x77,0x60,0x48,0x36,0xf0,0xb6,0x67,0xc4,0xe7,0xc6,
+0xd9,0x73,0xe2,0xd8,0x7c,0x37,0xee,0xdc,0xc7,0x1e,0x9d,0x94,0x16,0xcd,0xdc,0x95,
+0xb7,0xdf,0xbc,0x9f,0x2d,0xdd,0x4d,0x0f,0xcd,0xd2,0xca,0x53,0x27,0xe2,0x2e,0x36,
+0xbd,0xf0,0x53,0xff,0xe8,0xde,0xaf,0xd4,0x5b,0xdd,0x3e,0xe1,0x52,0xae,0xbe,0xa7,
+0x46,0x0a,0x82,0x50,0xa0,0xf4,0x66,0xe4,0x78,0x77,0x33,0xf9,0xda,0xc4,0x08,0x66,
+0xc3,0x41,0x74,0x5c,0xcf,0x9d,0xed,0x31,0xa7,0x3d,0x15,0xb4,0x19,0xab,0x38,0x6b,
+0xdf,0x64,0x31,0xe3,0xfd,0x0f,0x76,0x8b,0xb0,0xb6,0xcb,0x2d,0xd0,0x71,0xf4,0x9c,
+0x3c,0x5e,0x2a,0x0a,0x71,0x0d,0x5b,0xb8,0x8d,0xcd,0x17,0xd2,0xe1,0x4d,0x17,0xd1,
+0xa1,0x0b,0xb7,0x36,0x9e,0xff,0x99,0x7f,0xf6,0xde,0x37,0x8b,0x76,0x82,0x05,0xab,
+0xdc,0x18,0x25,0x87,0x86,0xdd,0x70,0xb4,0x28,0xee,0xa3,0x78,0x3f,0xad,0x8b,0x58,
+0x66,0x65,0x3d,0x95,0x5d,0x1a,0xeb,0xe6,0xef,0xcf,0x46,0xad,0x7e,0x57,0x21,0x39,
+0x40,0xd9,0xc4,0xea,0xba,0x08,0xce,0x7d,0x8e,0xfb,0xde,0xe2,0xf8,0xfd,0x34,0x8e,
+0xaf,0xae,0xb9,0xcf,0xb2,0x12,0x57,0x15,0xae,0x58,0xed,0x26,0x5d,0xc9,0x52,0x5c,
+0x73,0xeb,0x2f,0x61,0x0b,0x97,0xcb,0xc5,0xdf,0xfa,0x0a,0xff,0x7b,0xf8,0xc9,0xf5,
+0x85,0xba,0x6c,0x9c,0x53,0x3e,0xd6,0xc1,0x95,0x77,0x4c,0xd2,0xe7,0x5e,0x39,0x98,
+0x74,0x23,0x97,0x52,0x10,0xcb,0x2c,0x29,0x79,0x34,0x4e,0x9b,0x7d,0xee,0x77,0xb9,
+0x1e,0x4f,0x7b,0xe0,0xeb,0xe1,0xae,0xf5,0x84,0xa7,0x68,0xa4,0x4d,0xd6,0x96,0xa5,
+0xab,0x98,0x4d,0xa7,0x70,0x4c,0x5b,0x13,0xda,0x6e,0x39,0xc3,0x7b,0xac,0xda,0x6d,
+0xc2,0x9a,0xb5,0xb8,0xd6,0x42,0x56,0x4c,0x38,0x6f,0xa7,0x8b,0x75,0x93,0x74,0x71,
+0xb7,0x84,0x6e,0xbc,0x4c,0x7d,0xb9,0xcc,0xda,0xa3,0x8d,0x79,0x9f,0xf1,0xea,0x27,
+0x8f,0x8e,0x9c,0x5a,0xb5,0x3a,0x90,0x22,0xbb,0xcf,0xa5,0xb1,0x24,0xe4,0xac,0x7d,
+0x20,0x07,0xf7,0x88,0xeb,0xb4,0xd7,0x92,0xe1,0xb3,0x1d,0xae,0x0f,0x88,0x6d,0x5f,
+0xba,0x3b,0xfc,0xaf,0xef,0x68,0x78,0x16,0x0f,0x7b,0x57,0xf1,0x0b,0x32,0x16,0xef,
+0x34,0x08,0x32,0xb4,0x8a,0x93,0x18,0x20,0x7d,0xb2,0x77,0x88,0x6b,0xcc,0x53,0x7a,
+0x67,0x8a,0xfb,0xab,0x59,0xdc,0xe8,0x67,0xca,0xa9,0xde,0x35,0x3b,0x7a,0x4e,0x1c,
+0x2b,0xa4,0x7d,0x53,0xf4,0x9c,0x3c,0x5e,0xec,0x79,0xf4,0xe1,0xa1,0xf3,0x88,0x86,
+0xa4,0xd0,0xaa,0x44,0xc2,0x01,0x75,0x27,0xed,0xb0,0x9e,0x16,0x85,0xf5,0xcb,0x77,
+0x47,0x07,0xb2,0xa6,0x3a,0xe8,0xdc,0x6c,0xf7,0x68,0x13,0xad,0xec,0xe2,0xa7,0xd9,
+0xc6,0xb6,0x64,0xf8,0xbb,0x2a,0x11,0xfd,0x68,0x37,0x35,0x9c,0x73,0xba,0xe8,0x58,
+0x02,0x79,0x73,0x54,0xe5,0x45,0x62,0x61,0xe7,0x30,0x9c,0x15,0xf2,0xef,0xe0,0x89,
+0x35,0xeb,0xb8,0x3b,0x59,0xe3,0xa9,0x94,0x69,0x09,0x2d,0x5b,0xb3,0xc5,0xfb,0xef,
+0x9d,0x25,0x8b,0xf4,0x84,0x31,0x03,0x5c,0x3b,0x72,0xe0,0x52,0x29,0xb7,0xeb,0x87,
+0x59,0x58,0x43,0xee,0x00,0x25,0x4e,0xbe,0x0f,0x31,0xd7,0x87,0x84,0xcd,0x35,0x70,
+0x11,0xc0,0x5a,0xc6,0xf5,0x4d,0xcb,0x20,0x6a,0x97,0xd8,0xbb,0xac,0xf0,0x01,0x71,
+0xed,0x20,0xea,0x52,0x74,0xd5,0x1c,0xff,0x33,0x82,0x9b,0x96,0xd5,0xc9,0x51,0x08,
+0x32,0x02,0x41,0x25,0x72,0x2e,0x5a,0x08,0x6c,0x52,0x03,0x4a,0x1a,0xf8,0x70,0x15,
+0xe3,0x0d,0x2d,0xb6,0x5a,0x53,0x81,0x2d,0xd5,0x2b,0xee,0xba,0x25,0x2a,0xac,0x3e,
+0x02,0xd5,0xcc,0xb1,0xd8,0xfa,0x8e,0xb3,0x72,0x09,0xb4,0xc3,0x72,0x7d,0xa0,0x8d,
+0xf5,0x61,0x61,0xed,0xaa,0x85,0x34,0xf3,0x22,0xae,0x45,0x57,0x0b,0x4a,0x88,0x9d,
+0xad,0xe0,0xaa,0x94,0x81,0x5b,0x95,0xd8,0x0a,0xcb,0xd6,0xdb,0x72,0x5c,0x79,0xea,
+0x44,0xa1,0xf7,0xd8,0xe3,0x43,0xd2,0x9a,0x9d,0xd4,0xd4,0x5b,0x97,0x58,0x26,0xd0,
+0xdc,0x80,0x2e,0x62,0x5c,0x6a,0xb2,0xa1,0xb7,0xb4,0x81,0x73,0x18,0x1c,0x5b,0xab,
+0x2c,0xac,0x11,0x57,0x80,0x4d,0xe3,0x37,0xe1,0x1a,0xa3,0x59,0xb7,0x10,0x83,0xac,
+0x42,0xd4,0x7c,0x5c,0x0e,0x59,0x5a,0xae,0xc5,0x16,0x59,0x95,0x43,0xd4,0x45,0x0b,
+0x69,0xe6,0x45,0x5c,0x07,0x64,0xb7,0x7b,0x2e,0x54,0xd4,0x2a,0xab,0xd6,0x08,0xd1,
+0x3b,0xd3,0x88,0x13,0x04,0x47,0x89,0x2d,0xa7,0x09,0xec,0x3b,0xbe,0x76,0xbd,0x4f,
+0xc8,0xcf,0x92,0x7a,0x0b,0x91,0x55,0xf5,0x8c,0x8a,0xec,0x6e,0x8f,0x2e,0x64,0x29,
+0x25,0x37,0x82,0x6d,0x43,0x6f,0xa9,0xb8,0xb2,0xbb,0x86,0xc3,0xd6,0x38,0x14,0xae,
+0x09,0x6b,0x32,0x2d,0x2b,0xb3,0x91,0xf2,0xb9,0xa9,0x65,0x58,0xdf,0x56,0x88,0x6b,
+0xab,0xe8,0x1a,0xeb,0x35,0x2f,0xe2,0x1a,0x77,0x63,0x96,0x35,0x56,0xa1,0x4a,0xc6,
+0xcb,0x96,0xe3,0x28,0xf9,0x4d,0x62,0xa8,0xcb,0x6d,0xfb,0x82,0x6d,0x57,0x6c,0x3d,
+0xb6,0x6e,0xc3,0xf0,0xa9,0xde,0x35,0x5e,0xdd,0x52,0x39,0x71,0x21,0x2c,0xb2,0xba,
+0x15,0x12,0x82,0x04,0xcb,0xb2,0xec,0xd1,0x28,0xca,0x4d,0x8a,0x71,0xcb,0xad,0x27,
+0x9e,0xa6,0x3c,0xf3,0x92,0x5d,0x3a,0x81,0xf5,0xa1,0xe2,0x78,0xfd,0x6d,0xae,0x73,
+0xd9,0xe3,0x7e,0xca,0xd2,0x8d,0xd1,0x2c,0xba,0x07,0x4a,0xb9,0x85,0xf5,0x18,0xe8,
+0x16,0xeb,0x35,0x2f,0x93,0x08,0x1a,0x86,0x9b,0xbc,0x16,0xf3,0xfd,0x52,0xe8,0xa6,
+0x18,0x09,0xdd,0x40,0xfb,0xc8,0x30,0x2a,0x19,0x63,0xd9,0xf2,0x76,0x3c,0x18,0x36,
+0x21,0x84,0xb6,0xf8,0xd4,0xef,0x7e,0xa3,0xb2,0xe6,0xf1,0x23,0x3e,0x2b,0x8f,0xce,
+0x3f,0x10,0x2e,0xbf,0xfb,0xd6,0xc6,0xd7,0x2f,0xdb,0x59,0x48,0x10,0x90,0xbd,0x1e,
+0x37,0x78,0xcd,0xb1,0x71,0xd6,0x3b,0xb4,0x81,0x9f,0xb1,0x60,0xef,0xbf,0xfc,0xaa,
+0x79,0xf7,0x40,0x4a,0xb8,0xae,0x1d,0x76,0xc0,0xe2,0x3b,0x5b,0x1c,0xef,0xdf,0x86,
+0xe3,0x7d,0xe2,0x82,0x6b,0x32,0x18,0xd7,0x36,0xe6,0x1b,0x29,0x50,0x97,0x0f,0x35,
+0xd7,0xfb,0x68,0x84,0xba,0x60,0xa6,0x56,0x5e,0xc4,0xd5,0x34,0x8a,0x59,0x4b,0x10,
+0x9c,0x4a,0x8c,0x58,0xec,0x21,0xcb,0x90,0x8f,0xd5,0x4f,0x1e,0x5d,0xd8,0xe8,0xfe,
+0x7b,0x49,0x58,0xae,0x67,0x09,0x2d,0x2d,0xa6,0x29,0xdc,0xed,0x72,0x03,0xad,0x6f,
+0x3c,0x52,0x60,0xe1,0xe0,0x84,0x2f,0xdc,0x0d,0x0e,0x25,0x95,0x21,0x4a,0x0e,0xa6,
+0xde,0xe5,0x68,0x65,0x95,0x3d,0xcf,0x67,0xbb,0xbb,0xa6,0xf3,0xf0,0x83,0x87,0xcf,
+0x8b,0xba,0x06,0x4d,0x88,0x7d,0x91,0xdc,0x16,0xc0,0xd3,0xa5,0x77,0xf4,0xad,0x4b,
+0xd6,0x56,0x6b,0x8d,0xb2,0x9d,0xfa,0x5a,0xf2,0x6c,0xb3,0x3b,0x69,0x71,0x59,0x7a,
+0x57,0xeb,0x75,0x8c,0x72,0x1e,0xde,0x98,0xa7,0x68,0x81,0x24,0x11,0xd9,0xe1,0x68,
+0x7d,0x24,0x65,0xef,0x67,0xd8,0xa1,0xbe,0x9f,0x62,0x1c,0xeb,0x9c,0x53,0x96,0x07,
+0xc9,0xc2,0xd3,0x64,0xe5,0xc5,0x67,0xa1,0x9e,0x5f,0xf2,0xe5,0x64,0xef,0x5a,0xa7,
+0x18,0x4c,0x1e,0x0d,0xe7,0x9c,0x05,0x3c,0x45,0x56,0x5a,0xcb,0xf3,0x69,0xf3,0x38,
+0x41,0x4c,0x24,0xaa,0xa0,0xa4,0xb9,0xc1,0x0f,0x3a,0x76,0xe9,0x03,0x4b,0x2b,0xca,
+0xd5,0x7a,0xe2,0xec,0x54,0x2b,0x62,0xca,0x4e,0xf2,0x0c,0x10,0xe7,0x8c,0x66,0x29,
+0xb8,0x29,0x5c,0xd3,0x1a,0xda,0x5e,0xc3,0xb2,0xa3,0xd0,0xb8,0x90,0x65,0xfc,0x6c,
+0x2b,0xc4,0x95,0x0d,0x84,0x3e,0x79,0xcd,0xab,0x9e,0x22,0x99,0x7b,0xdf,0x6b,0x9e,
+0xc4,0xd5,0xd5,0xaf,0xa8,0x6b,0x24,0x49,0x6b,0x6b,0x4d,0xd0,0xe2,0x7a,0x56,0xb3,
+0xb2,0x8c,0x47,0x6f,0x2e,0x99,0xbc,0x3b,0xee,0xf7,0xfa,0xa5,0xd0,0x3a,0x89,0x09,
+0x0b,0x36,0x5b,0xb2,0xdb,0xbe,0x7c,0xf7,0x91,0x2b,0x6f,0xbf,0xd9,0xa5,0xbe,0xba,
+0xe3,0xac,0xb4,0xd8,0x25,0x10,0x68,0x1e,0x8a,0xa3,0xe4,0x31,0xa1,0x24,0xc6,0x6d,
+0x32,0xe0,0xb8,0x8b,0x01,0x72,0x9f,0x2e,0x3c,0x96,0x81,0xd8,0xb8,0xe6,0x14,0xc8,
+0x32,0x7e,0xb6,0x15,0xc2,0x1a,0xed,0xd2,0xef,0xf3,0xf8,0xdd,0x01,0xca,0xb9,0xef,
+0x35,0x4f,0xe2,0x7a,0x50,0x63,0x89,0x96,0x1d,0xbb,0x77,0x65,0xcd,0x85,0xeb,0x8f,
+0x08,0x0c,0x5b,0xb1,0x33,0x49,0x42,0x9b,0x20,0x32,0x2c,0x26,0x1b,0xc9,0x61,0xad,
+0x2d,0xee,0xfe,0x0a,0x4b,0x76,0x44,0xfe,0x56,0xc9,0xb2,0x5b,0x1b,0x24,0x88,0x65,
+0x91,0x0c,0x2b,0x37,0x64,0x20,0xae,0x75,0x8b,0xcf,0x9b,0x9d,0x5d,0x55,0x20,0xfb,
+0x59,0x3c,0x25,0x0f,0xab,0xd5,0xd6,0xca,0x4a,0xeb,0xc1,0x93,0x86,0xa0,0x65,0xdd,
+0x75,0x76,0x3d,0xd6,0xbd,0x09,0x46,0x8b,0x4f,0x78,0x63,0xae,0xad,0xd7,0x6e,0x70,
+0x0b,0x30,0xbb,0x1c,0x5d,0x03,0xcc,0xa4,0x46,0x04,0x06,0x13,0x6e,0xb2,0xb0,0xd0,
+0x8e,0x46,0x6f,0xbc,0x55,0x27,0x9e,0x8c,0x6b,0xac,0x5b,0x8f,0x16,0x36,0xf7,0xdb,
+0x5a,0x18,0x9c,0xa1,0xeb,0xfc,0x1f,0x3c,0x38,0x23,0xf7,0x6f,0x0a,0xac,0xde,0xeb,
+0x68,0xb5,0xba,0x74,0x7b,0xb3,0x48,0x90,0xed,0x64,0xc1,0xa9,0xd5,0x27,0x62,0x1a,
+0x9c,0xc9,0x82,0x55,0xd7,0xc9,0x35,0x42,0x64,0xcc,0xf2,0x7b,0x59,0x86,0x61,0xb9,
+0xc6,0xcf,0xf2,0xb9,0x98,0xcb,0xb0,0xec,0x77,0x3c,0xd6,0x7a,0x82,0xa1,0x53,0xf5,
+0xb4,0x5e,0xcb,0x94,0x53,0xf2,0x24,0xae,0xba,0x15,0x4d,0x07,0x3c,0x2c,0x91,0xb2,
+0x46,0x84,0xaa,0x86,0x9b,0xa1,0x28,0x1b,0xb9,0xd5,0xb4,0x57,0x29,0x68,0x3b,0x65,
+0x31,0x36,0x34,0xe9,0x7f,0x1d,0xb9,0xf2,0xf6,0x9b,0x67,0xd6,0x1d,0x39,0x34,0xa0,
+0x39,0x1f,0x55,0x47,0xb7,0x47,0x40,0xd9,0x4c,0x20,0x08,0x32,0x10,0x19,0x32,0x3c,
+0x18,0xa3,0x13,0x34,0x4a,0xf2,0x3a,0xcc,0x92,0xdf,0xf2,0x31,0x2e,0x03,0x28,0x9d,
+0x94,0x20,0xbb,0x93,0xa8,0x7b,0x18,0x02,0x5d,0x6b,0xbd,0xe6,0x6d,0xfa,0xab,0x6e,
+0x90,0x6a,0xc0,0xc3,0x1a,0x99,0xd4,0x58,0x09,0x83,0x96,0x96,0x4c,0x59,0xee,0x47,
+0x3b,0xed,0x35,0x24,0x2e,0xd6,0x22,0xcb,0xb9,0x0b,0xd8,0x17,0x2b,0x53,0x1f,0xc6,
+0xdd,0xac,0x0d,0x47,0x97,0x87,0x4b,0xb7,0x3c,0xcb,0xd9,0x47,0x56,0xac,0x6b,0x1c,
+0x32,0x59,0x35,0xe1,0x89,0x25,0x33,0xe4,0xbf,0x5e,0x56,0x9d,0xdc,0x92,0x86,0x14,
+0x53,0x12,0x9c,0xa4,0xfb,0x29,0xaf,0x04,0x86,0xcf,0x7c,0xac,0xd7,0x72,0x5e,0xcf,
+0x49,0xde,0xc4,0x55,0x77,0x71,0x76,0x7b,0x58,0xaf,0x05,0xd2,0x87,0x89,0x70,0x83,
+0xeb,0x27,0x3b,0x7f,0x91,0xca,0xec,0x33,0x2b,0xbb,0x52,0x67,0x6e,0x88,0xf5,0x8d,
+0x47,0x74,0x22,0x6b,0xb4,0x6c,0x9e,0xfd,0x95,0xcf,0xcd,0x2f,0xba,0x18,0x8a,0xbf,
+0x8d,0x5d,0xd7,0xcb,0x70,0x1e,0x98,0x7d,0x19,0x5d,0x17,0x5b,0x8b,0xd4,0xa9,0x9b,
+0x9e,0x30,0x93,0x2e,0x8b,0x1e,0x51,0x7f,0x86,0xd6,0xe5,0x7d,0xb4,0x7c,0x30,0x1d,
+0xeb,0xb2,0xb2,0x5e,0xf3,0x26,0xae,0xa6,0x41,0xaa,0xa4,0x27,0xdc,0xb0,0x66,0x9f,
+0x15,0x43,0x37,0x92,0x7f,0x6f,0xab,0xe3,0x53,0xb7,0x22,0xad,0xaa,0x19,0x83,0xcb,
+0xa0,0x46,0x8b,0x39,0x0d,0xb4,0x02,0xce,0x6b,0x82,0xbd,0xf0,0x53,0x1f,0x51,0x7e,
+0xc8,0xf9,0x68,0x04,0x0e,0xd7,0x72,0x58,0x1e,0xbc,0x4e,0xd9,0x85,0xec,0xa4,0x1e,
+0x37,0xdb,0x42,0x61,0xb5,0x7a,0xc0,0x35,0x61,0x59,0xba,0x9e,0xf3,0x80,0xf2,0x4b,
+0xcd,0xe2,0x5c,0xd4,0x3c,0xf6,0x9b,0x4b,0xeb,0x35,0x8f,0x59,0xb1,0xf6,0x7a,0x3c,
+0xe1,0xa6,0x0c,0x5d,0xe2,0x21,0x83,0x08,0xaa,0x35,0x9b,0x94,0xc8,0xda,0x8e,0x7c,
+0x96,0xa4,0x65,0x3c,0x6b,0xb0,0xda,0xaa,0xb4,0x18,0xc2,0xa5,0x15,0x9c,0xbe,0x7b,
+0xa6,0xe8,0x45,0x77,0x7e,0x78,0x4b,0x42,0xc8,0xd6,0x88,0xe7,0x79,0x6b,0x46,0x14,
+0x5c,0x67,0x1f,0xd9,0xb9,0x04,0x8e,0xfc,0xb0,0x55,0xc2,0x9a,0x75,0x80,0xbf,0xab,
+0x58,0xd6,0x28,0xbf,0xd8,0x1c,0xeb,0x98,0xe7,0xbe,0x73,0x67,0xbd,0xe6,0x51,0x5c,
+0x6b,0xa4,0x1f,0xa4,0x4a,0x7a,0xc2,0x99,0xac,0x43,0x95,0x87,0xc0,0x74,0xf3,0xa8,
+0xc4,0x2e,0xfd,0xb2,0x6b,0x5e,0x8b,0xd9,0xaf,0x1a,0x7c,0x9b,0x90,0xdf,0xeb,0x23,
+0xbb,0x55,0x4a,0x47,0xa5,0xc8,0x6a,0x1b,0x18,0x67,0xdd,0xa2,0xb3,0x47,0xc3,0x4b,
+0x9a,0x07,0x84,0xcf,0x68,0xad,0xad,0x18,0xbb,0x88,0xd3,0xf6,0x0e,0x12,0x01,0x1f,
+0x61,0xf5,0x11,0x57,0x1f,0xcb,0x35,0xaf,0x02,0x1b,0x34,0xd9,0x7e,0xbb,0xca,0x7a,
+0xcd,0x6b,0x3e,0x57,0xd3,0x20,0x55,0x92,0xc0,0x98,0x7c,0x6b,0x23,0xa4,0x1f,0xe4,
+0x8a,0x5a,0xc3,0x2a,0x3f,0x2c,0x8b,0x6d,0x78,0x56,0xd2,0x46,0xf9,0xfe,0xb0,0xfc,
+0x5e,0xc3,0xa3,0xe1,0x6b,0x7d,0xbd,0x1c,0xb2,0x75,0xba,0xa7,0x97,0x2d,0xe2,0xd2,
+0x33,0xbe,0x39,0xdf,0x7e,0xc7,0x53,0xb4,0x5a,0x95,0x35,0x5d,0x4b,0x59,0x3c,0x3a,
+0x21,0x19,0xf2,0x94,0x7c,0xd8,0xf9,0xba,0x48,0xb2,0x08,0x51,0x8b,0x32,0x4c,0xf9,
+0x5b,0xf2,0xa4,0x96,0x52,0xfb,0xed,0x1a,0xeb,0x35,0xaf,0xe2,0x5a,0xd5,0x3c,0xfd,
+0x8a,0x1a,0x0b,0xb4,0x46,0xe6,0x84,0x10,0x6c,0xfd,0x4d,0x53,0xfb,0x43,0x62,0x94,
+0xaf,0x77,0x42,0xe3,0x26,0x50,0xd9,0xbf,0xf6,0x93,0x3e,0x03,0xd6,0x84,0x67,0x1d,
+0xfa,0xc9,0x1c,0x61,0x90,0xc9,0x80,0xcd,0xe9,0x9e,0x55,0x59,0x58,0x55,0xfd,0x64,
+0x3f,0x40,0x99,0x44,0x2b,0x02,0xfc,0xd5,0xbc,0xfc,0x20,0x47,0x6d,0xb2,0xee,0xd8,
+0x7e,0x7d,0xae,0x41,0xae,0xac,0xd7,0x3c,0xaf,0x44,0x30,0x68,0x78,0xc2,0x95,0x34,
+0x17,0x76,0xc2,0xa2,0x01,0x85,0x03,0xf9,0xb3,0x40,0xcd,0x36,0x52,0x81,0xda,0xc5,
+0x04,0x61,0x1c,0x36,0x34,0xb4,0xc2,0x4f,0x7c,0xf5,0x3f,0x2b,0x31,0x59,0xfb,0xc3,
+0x56,0x82,0xaf,0x98,0x28,0x6b,0x7f,0xa7,0x3c,0x6f,0xf5,0x14,0x05,0x44,0x8b,0x9c,
+0xfa,0x9a,0x86,0xf5,0x16,0xd0,0xa2,0xbf,0x7c,0x2a,0xa5,0xeb,0x66,0x4b,0x33,0x21,
+0x6a,0x75,0x69,0x61,0x0f,0x37,0xd1,0x95,0x6e,0x25,0xae,0xc7,0xea,0x1b,0x39,0x30,
+0x49,0x39,0x61,0xc5,0xdc,0xdc,0x5c,0x26,0x3b,0xbe,0xba,0x72,0x6d,0x2b,0xea,0x3f,
+0xad,0x79,0x92,0x05,0xa4,0xf7,0x75,0x4e,0x92,0xdd,0x5c,0xf5,0x86,0xbc,0x11,0x26,
+0x52,0x6a,0xec,0x2a,0x64,0x2b,0x6e,0xcd,0xa0,0x31,0xcd,0xef,0xa8,0xd9,0x5a,0x43,
+0x49,0x3b,0x7e,0xf0,0x59,0x97,0xd2,0x37,0x2f,0xbd,0x32,0xae,0x81,0xe6,0x92,0x9d,
+0xb7,0x7d,0x40,0xc5,0x2f,0xbb,0xa6,0x77,0x0c,0xa4,0x90,0x1e,0xa0,0x7c,0x0f,0x10,
+0x01,0x07,0xee,0x9a,0xba,0x15,0xe2,0x9a,0x22,0x45,0xd2,0x4f,0x73,0x54,0xc9,0x54,
+0x92,0x60,0xa1,0x72,0x99,0xcd,0xa3,0x1a,0xac,0xab,0x1f,0x95,0xe1,0xf0,0xac,0x5d,
+0x64,0x4e,0xdc,0x1c,0xd0,0xa2,0xaf,0x36,0x69,0x3f,0x89,0x7e,0x61,0x4e,0x63,0x78,
+0xff,0x65,0x57,0x9d,0xd1,0xa7,0x3c,0x8b,0x4b,0x24,0xcc,0x4c,0xad,0xe4,0xab,0x5b,
+0x4a,0xbd,0x26,0x1f,0x28,0x0d,0x48,0x0d,0xc4,0x15,0xe2,0xda,0x3c,0xa3,0xa4,0x77,
+0x74,0x57,0x0d,0x2e,0x04,0xad,0x58,0x19,0xba,0x6d,0x75,0xd9,0x1d,0x8a,0x6b,0xd0,
+0x6c,0x51,0x6f,0xa0,0xa5,0x49,0xbb,0x5d,0xd0,0x0d,0xba,0x14,0x48,0xe3,0x67,0x95,
+0x02,0x3b,0x21,0xc4,0x69,0x3e,0xbe,0x77,0xfa,0x9a,0xeb,0xba,0x41,0x5c,0x01,0xc8,
+0x95,0xb8,0xae,0xec,0x82,0x73,0xca,0xe2,0xba,0x43,0x23,0x60,0xdc,0xad,0x3c,0x48,
+0xc9,0xa1,0x48,0x53,0x52,0xc4,0xf6,0x3b,0x76,0x3d,0x4b,0x94,0xcd,0xa0,0x97,0x4a,
+0x1c,0x53,0x37,0xb8,0x2a,0x76,0x26,0x3d,0x58,0xd8,0xff,0x7a,0xde,0xa3,0x0f,0x97,
+0xa5,0x08,0xc3,0x8a,0x03,0xa0,0x0d,0x74,0xcb,0xd2,0xda,0xa6,0x11,0x60,0x93,0x7f,
+0x35,0x90,0x96,0x62,0x33,0x83,0x3f,0x69,0x30,0x46,0x6e,0x61,0x42,0xa3,0x52,0x64,
+0xcf,0xaa,0xf3,0xda,0xa3,0x0d,0x16,0xfe,0x69,0xea,0xb2,0xb5,0xe0,0x01,0x80,0xb8,
+0xb6,0x16,0x9b,0x18,0x56,0x9b,0x49,0x02,0xa3,0x52,0xdc,0xaa,0x2d,0xae,0x3f,0xff,
+0xde,0x56,0x8b,0xfa,0x15,0x63,0xde,0xab,0x69,0x04,0xb9,0x74,0x6a,0xd5,0x6a,0x08,
+0x2c,0x00,0x6d,0xa0,0x1b,0x7c,0xae,0x51,0x17,0x80,0x29,0x54,0xa3,0x4a,0x76,0x8b,
+0x9f,0xb1,0x90,0xed,0x91,0xfb,0xcc,0x42,0x9c,0x54,0x9e,0x04,0xdb,0x54,0x77,0xca,
+0xfa,0xe6,0xfa,0xc7,0x05,0x99,0x73,0x1d,0xc7,0x13,0x2c,0x74,0xdb,0x63,0x9e,0xa7,
+0x53,0x7c,0xb4,0xf0,0xb9,0x02,0x17,0x3a,0xcd,0xe7,0x7a,0x4e,0x97,0x9d,0xdf,0x2a,
+0x99,0x67,0x7f,0xb0,0xf8,0xcc,0x90,0x79,0x1a,0x63,0x20,0x45,0x4c,0xad,0x28,0xe0,
+0x13,0x21,0x10,0xc7,0x14,0x2d,0xc6,0x5d,0xda,0xac,0x54,0xa0,0x26,0x0a,0x0c,0x84,
+0xea,0x1f,0x37,0xc9,0x41,0xe5,0x3f,0x18,0xf3,0x7c,0xe8,0x40,0xd4,0x00,0x80,0xb8,
+0x1a,0xbb,0xf6,0xa6,0x6e,0xbd,0x9a,0x24,0x30,0xe4,0x20,0xda,0xfd,0x52,0x68,0x55,
+0x60,0x77,0x95,0xf4,0xc1,0xdd,0x2a,0xbf,0x80,0x12,0x7c,0xf6,0x8d,0xae,0x90,0xfb,
+0xa9,0x5a,0x0a,0x35,0x47,0x32,0xf0,0x14,0xd7,0x72,0x4c,0xfd,0x93,0x92,0x74,0x8f,
+0x26,0x58,0xa9,0x10,0x58,0x00,0x5a,0xc8,0xca,0x2e,0x3d,0xae,0xc1,0x90,0xa0,0xe8,
+0x2c,0x42,0xee,0x46,0xef,0x22,0x87,0xb5,0xae,0x28,0xdb,0xd4,0x7d,0x61,0x97,0xc4,
+0x38,0xe9,0x97,0x6b,0x09,0xe7,0xa2,0xad,0xc6,0x3c,0x0c,0xea,0x74,0xf6,0x80,0x16,
+0x9f,0x8f,0x83,0x64,0xe9,0x53,0x66,0x81,0xcd,0x6b,0x18,0x17,0x00,0xb0,0x5c,0xb3,
+0x15,0x58,0x1b,0x3f,0x63,0x99,0x16,0x97,0x06,0x69,0xf7,0xc0,0x8f,0x9a,0x12,0x3b,
+0x43,0x76,0xab,0x96,0x4e,0x68,0x84,0x52,0xcd,0x4f,0x8f,0x5a,0xc8,0x93,0xe4,0xb0,
+0x22,0x2a,0x2c,0x58,0x00,0x20,0xae,0x49,0xdd,0x79,0x63,0x22,0x6a,0xc9,0x50,0x48,
+0x64,0x8b,0x2d,0xae,0x67,0x51,0x8a,0x2a,0xff,0xfe,0x88,0xa5,0xc8,0x0f,0x92,0x3e,
+0x09,0xb8,0x12,0xd8,0xb8,0x48,0x82,0x49,0x72,0x88,0xd1,0x8d,0x49,0xca,0x0d,0x00,
+0x58,0xe6,0xe2,0xaa,0x04,0xd6,0x36,0x77,0x67,0x74,0xa9,0x96,0x81,0x8c,0xeb,0xa6,
+0x66,0x87,0xb9,0x88,0x6a,0x40,0x6e,0xe1,0x62,0x41,0xcc,0xf1,0xab,0x19,0x5e,0x4e,
+0x96,0x3a,0x04,0x16,0x00,0x88,0x6b,0x52,0x17,0xd9,0x25,0xf5,0x9e,0x12,0xbe,0xc3,
+0x21,0xa1,0x6d,0x76,0x46,0x56,0x91,0x16,0x07,0x96,0x0e,0x7b,0x08,0xb8,0x6f,0x2e,
+0xd2,0xb8,0xac,0xfb,0x45,0x72,0x5f,0x36,0x19,0x56,0x2c,0x00,0x96,0xac,0x5c,0x46,
+0xc7,0xaa,0xd2,0xf7,0x1d,0x20,0xb7,0x55,0x42,0x0b,0x52,0x68,0x2b,0xa1,0xfd,0xa8,
+0x41,0xad,0x23,0x94,0x9c,0x28,0x44,0x25,0x1a,0x51,0xf9,0x05,0x4a,0xe4,0xef,0xd3,
+0x0d,0x48,0x9f,0xcc,0xc5,0x45,0x60,0xc3,0x61,0x5c,0x65,0xe9,0x06,0x19,0x76,0xdd,
+0x99,0x12,0x58,0x0c,0x78,0x01,0x00,0x71,0x55,0xd4,0x68,0x71,0x36,0xd4,0x1e,0x0f,
+0xc1,0x2b,0x50,0xeb,0x92,0xf6,0xa6,0x9d,0xee,0x30,0x4e,0x60,0xd9,0x0d,0x72,0xd0,
+0x57,0xb8,0x75,0x56,0x2c,0x84,0x17,0xc0,0x2d,0xb0,0x3c,0x19,0xa5,0xc5,0x45,0x01,
+0x3b,0x31,0xb9,0x49,0x55,0xba,0x00,0x46,0x53,0xae,0x5f,0x9c,0x8b,0xc0,0x27,0x2b,
+0x18,0x00,0x00,0xe2,0xaa,0x15,0x9a,0xb0,0xc8,0x06,0x1d,0x50,0x9f,0x31,0xb2,0x9f,
+0xbd,0xd5,0xcc,0xef,0x84,0xa3,0x28,0xd2,0x9a,0x7d,0x06,0x00,0x80,0xb8,0x26,0x8a,
+0xac,0xcd,0xba,0x51,0x69,0xa3,0xa6,0xc4,0x6e,0x94,0xf5,0x68,0x85,0xc8,0x87,0x07,
+0xf9,0x06,0x71,0x0b,0x00,0x90,0x2e,0x2b,0x71,0x0a,0x62,0x85,0x6e,0x8a,0x16,0x7d,
+0xab,0xbb,0xe4,0xdf,0x62,0x8a,0xbf,0xc1,0xe2,0x59,0xa3,0x45,0x5f,0x67,0xbb,0xac,
+0xc6,0x56,0xcc,0x36,0x03,0x00,0xe2,0x0a,0xce,0xb2,0x66,0xa7,0x42,0x56,0xac,0x1a,
+0xfd,0x67,0xa1,0xdd,0x22,0xc5,0xb6,0x68,0x10,0xdd,0x40,0x16,0xde,0xd7,0x7d,0x21,
+0x31,0x0b,0x70,0x7a,0x01,0xe8,0x6e,0x32,0x4b,0x39,0x08,0x00,0x00,0xcb,0x19,0xf8,
+0x5c,0x01,0x00,0x00,0xe2,0x0a,0x00,0x00,0x10,0x57,0x00,0x00,0x80,0xb8,0x02,0x00,
+0x00,0x80,0xb8,0x02,0x00,0x00,0xc4,0x15,0x00,0x00,0x20,0xae,0x00,0x00,0x00,0x20,
+0xae,0x00,0x00,0x00,0x71,0x05,0x00,0x00,0x88,0x2b,0x00,0x00,0x00,0x88,0x2b,0x00,
+0x00,0x40,0x5c,0x01,0x00,0x00,0xe2,0x0a,0x00,0x00,0x00,0xe2,0x0a,0x00,0x00,0x10,
+0x57,0x00,0x00,0x80,0xb8,0x02,0x00,0x00,0x80,0xb8,0x02,0x00,0x00,0xc4,0x15,0x00,
+0x00,0x20,0xae,0x00,0x00,0x00,0x20,0xae,0x00,0x00,0x00,0x71,0x05,0x00,0x00,0x88,
+0x2b,0x00,0x00,0x00,0x88,0x2b,0x00,0x00,0x40,0x5c,0x01,0x00,0x00,0xe2,0x0a,0x00,
+0x00,0x00,0xe2,0x0a,0x00,0x00,0x10,0x57,0x00,0x00,0xc8,0x1d,0x2b,0x2e,0xfb,0x52,
+0x6b,0x7f,0xf0,0x4b,0x97,0xcd,0x2d,0x7d,0xa3,0xbf,0xbf,0x3d,0x47,0xbe,0x7f,0x3f,
+0xae,0x3e,0x00,0x20,0x33,0x56,0x2e,0xfb,0x33,0xd0,0x2e,0x71,0xb7,0x14,0xf9,0x23,
+0xb7,0xed,0x6a,0xfb,0x29,0xda,0x70,0xcd,0x01,0xb4,0x14,0x00,0x3a,0xd8,0x2d,0xf0,
+0xfb,0x4d,0x6c,0xdb,0x23,0xca,0x2f,0x89,0xf2,0xb7,0x6c,0xfc,0x8a,0x72,0x48,0x94,
+0xff,0x13,0xe5,0xa8,0x28,0xdf,0x16,0xe5,0xe3,0xa2,0xbc,0x51,0x94,0x1f,0x6b,0xf1,
+0xf9,0xfb,0x75,0x51,0x5e,0xd0,0xc1,0xd7,0xf7,0x72,0x51,0x7e,0x13,0xb7,0x39,0x00,
+0xdd,0x2b,0xae,0xaf,0x15,0xe5,0xcf,0x3d,0x2d,0xeb,0xd7,0x89,0x12,0x88,0xc2,0xe6,
+0xd3,0x1b,0x44,0xb9,0x4c,0x94,0x0b,0x44,0x59,0x21,0xca,0x3a,0x51,0x9e,0x29,0xca,
+0x35,0xa2,0xfc,0x8d,0x28,0x0f,0x8a,0xf2,0x7e,0x51,0x36,0xb5,0xe0,0x98,0xd6,0x8a,
+0xf2,0x1e,0x51,0xc6,0x65,0x5d,0x3a,0x8d,0x15,0xb2,0x6e,0xef,0x91,0xe7,0x09,0x00,
+0xd0,0x65,0xe2,0x7a,0x95,0x28,0x37,0x8b,0xd2,0xeb,0xb8,0xdd,0x76,0x51,0xea,0xa2,
+0xfc,0x83,0x28,0x17,0x3a,0x58,0xb8,0xd7,0x89,0xf2,0x1d,0x51,0x7e,0x37,0xe3,0xe3,
+0xfa,0x23,0x51,0x2e,0x96,0x96,0xeb,0x6b,0x3b,0xf0,0xda,0xbe,0x5a,0x94,0x2b,0x45,
+0x79,0xba,0x28,0x7f,0x82,0x5b,0x1d,0x80,0xee,0x12,0xd7,0xe7,0x89,0x72,0x9b,0x28,
+0xab,0x44,0x59,0xe3,0xb0,0xdd,0xab,0x44,0xf9,0x0f,0x51,0x9e,0x13,0x7a,0x8f,0xdd,
+0x00,0x77,0x8b,0x72,0x83,0x74,0x11,0xbc,0x58,0x94,0x9f,0x97,0x62,0xfa,0x51,0x51,
+0x1e,0x0f,0x7d,0x77,0xbd,0x28,0x7f,0x27,0xad,0xd9,0x2c,0x8e,0xf1,0x19,0xa2,0xbc,
+0x2d,0xf4,0xff,0x5f,0x48,0x4b,0xb6,0x53,0xe0,0xba,0xfc,0x65,0xe8,0xff,0xb7,0x88,
+0xb2,0x15,0xb7,0x3b,0x00,0xad,0x23,0xcb,0x01,0xad,0xcd,0x52,0x58,0x37,0x78,0x58,
+0xba,0x1f,0x97,0x82,0xac,0xb8,0x43,0x94,0x3f,0x14,0xe5,0x6b,0x09,0xdb,0xdc,0x24,
+0x7f,0xe7,0x7a,0x69,0xa5,0x29,0x21,0x7f,0xa3,0x14,0xd7,0xeb,0x52,0x3e,0xb6,0xf7,
+0x44,0xc4,0xf4,0x22,0x51,0xfe,0x58,0x94,0x77,0x74,0xc8,0x75,0x7d,0xab,0x7c,0x00,
+0x28,0x56,0xcb,0x3a,0xbf,0x1a,0xb7,0x3c,0x00,0xf9,0xb6,0x5c,0xb9,0x31,0x7f,0x52,
+0x94,0x67,0x45,0x2c,0x4f,0x1b,0x8b,0xf0,0xd6,0x90,0xb0,0x9e,0x12,0xe5,0xf5,0xd2,
+0x92,0xfd,0x9a,0x61,0xdb,0x23,0xa2,0x4c,0xd2,0xc2,0x60,0x57,0x18,0x1e,0x48,0x1b,
+0x4c,0xf1,0xd8,0x7e,0x4e,0x94,0x5f,0xb5,0x10,0xb4,0x76,0xa1,0x84,0x3e,0xca,0xb5,
+0xa2,0xbc,0x04,0xb7,0x3c,0x00,0xf9,0x15,0x57,0x1e,0x48,0x61,0x3f,0xe9,0xf3,0x23,
+0xef,0xff,0xd0,0x62,0xdb,0x0f,0x88,0x72,0xbe,0x7c,0x7d,0x52,0x94,0x57,0xca,0x7d,
+0xd9,0x5a,0xca,0xec,0x36,0xf8,0xf1,0x98,0xcf,0x26,0xc8,0xde,0x6f,0x6b,0x3a,0x5f,
+0x13,0x14,0x3f,0x80,0x15,0xed,0x8a,0xb7,0x0b,0x9d,0x8b,0x62,0x2f,0x61,0xe2,0x08,
+0x00,0xb9,0x15,0xd7,0x77,0xd2,0xd9,0x03,0x3c,0x2c,0x94,0xa6,0x90,0xa0,0xab,0xa4,
+0x98,0x2a,0xd8,0xfa,0xfa,0x8c,0xe5,0x6f,0xb2,0x4b,0xe0,0xb3,0xa2,0x3c,0x3b,0xf4,
+0xde,0xdf,0x8b,0xf2,0x84,0x7c,0x7d,0x9e,0x28,0x6f,0x4f,0xe1,0xd8,0xf8,0x18,0x2e,
+0x97,0xaf,0x4f,0x8b,0x72,0x58,0x16,0x35,0x33,0x42,0x0d,0x22,0xb5,0x8b,0xf0,0xe0,
+0xda,0x5c,0xa8,0x7e,0xa7,0xe5,0x7b,0x25,0x51,0x7e,0x1b,0xb7,0x3d,0x00,0xf9,0x13,
+0x57,0x6e,0xd8,0x7f,0x1a,0x79,0x6f,0x4e,0x36,0xe8,0x4f,0x1b,0xb6,0x1d,0x0e,0xbd,
+0xfe,0x6f,0x69,0x65,0xd9,0xc0,0x56,0xda,0xa7,0x44,0xb9,0x34,0xf4,0xde,0xfb,0x68,
+0x21,0x5a,0xe0,0xc6,0xd0,0x7b,0xbb,0x45,0xd9,0xd8,0xc4,0xb1,0xad,0x8b,0xec,0xef,
+0x0b,0xd2,0xca,0xe6,0xf2,0x58,0xc8,0x6a,0x1f,0x6f,0x93,0x75,0xa8,0x7e,0x5b,0x59,
+0xd5,0x8f,0x85,0xea,0xf7,0x85,0xd0,0xf7,0xde,0x25,0x1f,0x36,0x00,0x80,0x9c,0x88,
+0x2b,0x5b,0x6c,0x37,0xc7,0x74,0x99,0x79,0x50,0xe9,0x9f,0x0c,0xdb,0xb2,0x00,0xbc,
+0x3c,0xf4,0x3f,0xc7,0xc4,0xda,0xf8,0x68,0xd9,0x37,0xfb,0x09,0x5a,0x1a,0xc8,0xbf,
+0x4f,0x94,0x3d,0xf2,0x35,0xc7,0xbc,0xaa,0x28,0x02,0x1e,0xe4,0xba,0xa6,0x89,0xe3,
+0xe3,0x81,0xb2,0xa7,0x5b,0x7c,0x8f,0x2d,0xdb,0xdf,0x6a,0xc3,0xb5,0x7c,0x2d,0xd9,
+0x4d,0x68,0x78,0xaa,0x28,0x7f,0x86,0x5b,0x1f,0x80,0x7c,0x88,0x2b,0x0f,0x5c,0xa9,
+0x90,0xab,0xa8,0x8b,0xe0,0x26,0x8b,0xed,0xcb,0xb4,0x18,0xb9,0xc0,0x16,0xd7,0x27,
+0x2d,0xb6,0x79,0x8a,0x28,0xb7,0x88,0x72,0x75,0xe8,0x3d,0xae,0xc3,0xeb,0x42,0xdd,
+0xf4,0x86,0x14,0x5f,0xc5,0xd5,0x9e,0xc7,0xc7,0x61,0x4c,0x6f,0x71,0xf8,0xfe,0x8d,
+0xd4,0xda,0xc0,0xfd,0x73,0x69,0xc1,0xd7,0x6a,0xcb,0xf5,0xb4,0x74,0xb0,0x11,0x00,
+0x90,0xa1,0xb8,0xbe,0x84,0xfc,0x82,0xe1,0x37,0x48,0x01,0xdb,0x1c,0x79,0x9f,0x45,
+0x75,0xc4,0x72,0x1f,0xdb,0x43,0xaf,0x3f,0x4f,0x0b,0x3e,0x5a,0x53,0x17,0x98,0x2d,
+0xd4,0xf0,0xc4,0xfb,0x7f,0x13,0xe5,0xd7,0x44,0xf9,0x51,0xe4,0xbb,0xb5,0x84,0xdf,
+0x71,0x81,0x07,0xaa,0x56,0x3b,0x7c,0xff,0x69,0xb4,0x10,0x8f,0xdb,0x2a,0x78,0x42,
+0xc3,0x45,0x0e,0xdf,0xe7,0x09,0x1d,0x7f,0x85,0xdb,0x1f,0x80,0x6c,0xc5,0xb5,0x57,
+0x8a,0xc7,0xb4,0x28,0x1f,0x14,0xe5,0xa7,0x1d,0xb6,0x7f,0x8a,0xb4,0x16,0xb7,0x45,
+0xde,0x67,0xb1,0x7d,0xb3,0xc3,0x7e,0x2e,0x0e,0xbd,0xfe,0x86,0xc5,0xf7,0xdf,0x1f,
+0x79,0x10,0xf0,0x84,0x83,0xfe,0x04,0x51,0xfe,0xdf,0x84,0xdf,0xb1,0x65,0x87,0x28,
+0xbf,0xe2,0xb1,0xdd,0x30,0xb5,0x26,0x70,0x3f,0x3a,0xa1,0xc1,0x96,0x0a,0x2d,0x0c,
+0x22,0x02,0x00,0x32,0x12,0xd7,0x3b,0x45,0xf9,0x03,0xf9,0x9a,0x07,0x87,0x3e,0x4a,
+0xf6,0x53,0x55,0xdf,0x17,0xd3,0x40,0xbf,0x98,0x60,0x41,0xea,0x08,0x5b,0x85,0x4f,
+0x58,0x74,0xb9,0xc3,0x49,0x60,0x66,0x68,0x21,0xca,0xe0,0xc9,0x84,0xef,0x1f,0x0e,
+0xbd,0x3e,0xcf,0xe3,0xfc,0x4c,0x78,0x9e,0xdb,0xd5,0x2d,0xb2,0x0e,0xf9,0xc1,0xb8,
+0xc6,0x73,0xdb,0xbd,0xf2,0x01,0x09,0x00,0xc8,0x40,0x5c,0x3f,0x1c,0x79,0xef,0x52,
+0xb2,0x8b,0xd7,0xdc,0x43,0x67,0x67,0xba,0xfa,0x96,0x28,0xbf,0xa8,0x11,0xba,0x24,
+0x8e,0x87,0x5e,0x9f,0xaf,0xf9,0x1e,0x0f,0x2a,0x85,0x03,0xe4,0xef,0xa7,0x85,0x29,
+0xb0,0x47,0x34,0xdb,0x5c,0x10,0x7a,0x7d,0xd4,0xb1,0x5e,0x1c,0xe5,0x50,0x6a,0xe2,
+0xfc,0xfe,0x32,0x2d,0xf8,0x93,0xb3,0x82,0x07,0x11,0x9b,0x99,0x75,0xf5,0x5c,0xca,
+0x3e,0x07,0x03,0x00,0xcb,0x56,0x5c,0xd9,0x77,0x79,0x57,0xe4,0x7d,0xee,0xd2,0xbf,
+0x42,0xb3,0x1d,0xcf,0xed,0x7f,0x6f,0xe4,0xbd,0x47,0x44,0xf9,0x05,0xf9,0xd7,0x95,
+0x07,0x23,0xdd,0xdc,0x38,0x78,0x0a,0x6b,0x38,0xb3,0xd6,0xac,0x28,0x2f,0xb3,0xf8,
+0xbd,0x67,0x86,0x5e,0x7f,0xd7,0xa1,0x4e,0x6c,0xe5,0xbe,0x2b,0x85,0x73,0x3c,0x9e,
+0x91,0x75,0x78,0x0e,0xa5,0x93,0x91,0x6b,0x4c,0x94,0x02,0x9a,0x02,0x00,0xe9,0x37,
+0x50,0x1e,0x59,0x7f,0x7d,0xc4,0xaa,0xe3,0x06,0xcb,0x61,0x55,0x4f,0x8b,0xd9,0xe6,
+0x79,0xd2,0xda,0x0d,0x0b,0xc6,0x93,0xd2,0x62,0xfd,0x96,0x67,0x3d,0xee,0x0b,0xbd,
+0x7e,0x21,0x2d,0x64,0xb7,0x0a,0xf3,0x1b,0xb4,0x90,0x84,0x45,0xf1,0x90,0x14,0xd6,
+0x07,0x2d,0xf6,0x1d,0xb6,0x1c,0xbf,0xe2,0x50,0x27,0x0e,0x57,0x7a,0x6a,0x0a,0xe7,
+0x98,0x2d,0xdf,0xc1,0x0c,0xae,0x1d,0x87,0x7b,0x5d,0x9e,0xc2,0x7e,0x78,0x20,0xf2,
+0x1d,0x68,0x0a,0x00,0xa4,0x2f,0xae,0xca,0x0a,0x7c,0x6b,0xe4,0x33,0x16,0x96,0xc9,
+0x88,0x65,0xc4,0xc9,0xa8,0xff,0x95,0x96,0x26,0x63,0x61,0xdf,0x2a,0xfb,0x58,0xbf,
+0xd8,0x44,0x3d,0x6a,0xb4,0x38,0x8b,0x68,0x83,0xb4,0x8c,0x15,0x1c,0x11,0x50,0x0d,
+0xd5,0x83,0x73,0x07,0xbc,0xdc,0x52,0xc8,0xd7,0xd1,0xd2,0x88,0x82,0xcf,0x5a,0xd6,
+0x87,0x67,0x7a,0x5d,0x9f,0xe2,0x79,0x7e,0x37,0xa5,0x1b,0xb8,0xcf,0x59,0xbf,0x6e,
+0x4c,0x71,0x7f,0x6f,0x12,0xe5,0xa7,0xd0,0x1c,0x00,0x48,0x5f,0x5c,0x19,0x9e,0xc3,
+0x7f,0x67,0xe4,0x73,0x16,0x31,0x15,0x90,0xcf,0x83,0x5d,0x1c,0x05,0x70,0x71,0x8c,
+0x0b,0xe1,0x13,0x4d,0xd6,0xe3,0x51,0x5a,0x98,0x65,0xa5,0xb8,0x41,0xd6,0x8d,0xe3,
+0x52,0x6f,0x09,0x59,0xc9,0xec,0x5b,0xe5,0x24,0x2e,0x5f,0xb5,0xdc,0xef,0x9e,0x90,
+0xa8,0x1d,0x13,0xc5,0x76,0xe1,0x2c,0xf6,0x39,0xf7,0xa6,0x78,0x9e,0xf9,0xa1,0xf4,
+0xf6,0x14,0xf7,0x77,0x43,0x42,0xaf,0xc2,0x17,0xee,0x29,0xbc,0x17,0xcd,0x01,0x80,
+0x6c,0xc4,0x95,0xdd,0x03,0xbf,0x43,0x4b,0x47,0xd7,0x19,0x0e,0x4e,0xef,0x13,0xe5,
+0x43,0x74,0x76,0x32,0x16,0x8e,0x16,0xb8,0x29,0xa5,0xba,0x8c,0x87,0x5e,0xff,0x0c,
+0x2d,0x2c,0xe9,0xc2,0xa2,0xbd,0x2a,0xe4,0x7a,0xe8,0x77,0xb0,0x90,0xd9,0x12,0x0b,
+0x0f,0x7e,0xed,0x93,0x22,0x6e,0x82,0x05,0xbd,0x92,0xc1,0xb9,0x7e,0x33,0x2d,0xcd,
+0x7d,0xe0,0x0b,0x87,0x77,0x0d,0x65,0x50,0x3f,0x8e,0xb8,0x78,0x19,0x9a,0x04,0x00,
+0xe9,0x8b,0x2b,0xc3,0xbe,0xcc,0x37,0x46,0xde,0x63,0x0b,0xee,0x1e,0x51,0x5e,0x13,
+0x79,0x9f,0x85,0x6f,0x38,0xc5,0xba,0xdc,0x2d,0x5d,0x0e,0x8a,0xd7,0xd3,0x62,0x76,
+0x27,0x8e,0x5f,0xe5,0x51,0xf1,0x69,0x07,0x4b,0xf1,0x00,0x2d,0xce,0x92,0xe2,0x59,
+0x5f,0x36,0x83,0x53,0x6c,0x21,0xdb,0x86,0x5e,0x5d,0x22,0xad,0xea,0x5b,0xc8,0x2e,
+0x51,0x76,0x5a,0x81,0xfb,0xbc,0x0f,0x9b,0x09,0x0d,0x6b,0x43,0xf5,0xbb,0xc4,0x72,
+0xdf,0x7c,0xec,0x58,0xb4,0x12,0x80,0x0c,0xc4,0x95,0xe1,0x38,0xd7,0x8f,0x45,0xde,
+0x8b,0x4e,0xe5,0xe4,0xe5,0x57,0x5c,0x63,0x59,0x6d,0xb8,0x2e,0xc6,0xba,0xe4,0x1c,
+0x03,0x3c,0x78,0x73,0x87,0xe5,0x3e,0x78,0xf5,0x82,0xcf,0xd3,0x52,0x1f,0x22,0x4f,
+0x5d,0xfd,0x9e,0xc5,0xb6,0x1c,0x96,0xf4,0x5c,0xcb,0xdf,0xe1,0x75,0xba,0xae,0x95,
+0xa5,0xc7,0x72,0x1b,0xf6,0xff,0xbe,0xb4,0x89,0xf3,0x53,0xa6,0x85,0xf0,0x2e,0xdb,
+0xae,0xbe,0xaa,0x9f,0xed,0x9a,0x62,0xdb,0x28,0xfd,0xc4,0xe2,0x00,0x40,0x5c,0x23,
+0x22,0x97,0x14,0xb6,0xc4,0x23,0xf4,0x3e,0xb1,0xac,0x36,0x3c,0x20,0xc5,0xe0,0x64,
+0xa4,0x8e,0x6c,0x35,0xff,0xa4,0x61,0xdb,0x75,0xd2,0x3a,0xbd,0x97,0x96,0x86,0x5f,
+0xdd,0x24,0x5d,0x1a,0x26,0x38,0x1c,0x69,0xcc,0xa1,0xae,0x0f,0xd3,0xc2,0x8c,0xb6,
+0x0f,0x92,0x79,0xba,0x6e,0xd4,0xfd,0xe1,0x63,0x1d,0x3e,0x25,0xe2,0x3a,0x31,0x71,
+0x32,0x54,0xbf,0x87,0x1d,0xb6,0xe3,0xc8,0x81,0x0b,0xd0,0x34,0x00,0x68,0x8e,0xa4,
+0x46,0xce,0x7e,0xd7,0x01,0x5a,0x18,0x5d,0x0f,0x47,0x0b,0x70,0x86,0xa9,0x57,0x90,
+0x5d,0x08,0x54,0x33,0xee,0x01,0xb6,0xce,0xfe,0x25,0xd4,0xdd,0x66,0x1f,0x28,0x47,
+0x10,0x1c,0x94,0x9f,0xd7,0x65,0x1d,0x79,0xc2,0x01,0x0f,0xb0,0xbd,0x48,0x0a,0x7e,
+0x74,0x49,0x19,0x4e,0xbe,0x6d,0x3b,0x0d,0x97,0x45,0x65,0xb3,0x43,0x3d,0x39,0x5a,
+0xe1,0x0d,0xf2,0x35,0xaf,0x4c,0xb0,0xca,0x72,0xbb,0xe7,0x4a,0x97,0x87,0xab,0xaf,
+0x9a,0xc3,0xb9,0x5c,0x26,0x34,0x1c,0x0b,0xd5,0x8f,0xa7,0x34,0xdb,0x0e,0x80,0xb1,
+0xb0,0x72,0x4e,0x88,0xeb,0xd1,0x3c,0x00,0x48,0x5f,0x5c,0x95,0xc8,0x8d,0xd3,0x62,
+0x36,0x28,0x76,0x01,0xf0,0x7c,0xfe,0xaf,0xb6,0xa0,0x5e,0xb7,0xd3,0xc2,0x72,0x2a,
+0x1f,0xa1,0xc5,0x45,0x0a,0xd9,0x82,0xdd,0x29,0x8b,0x09,0x7e,0x08,0xbc,0x55,0x5a,
+0x6d,0x36,0xb0,0x4f,0xf2,0x4d,0x8e,0x75,0x5c,0x1d,0xb2,0x90,0x5d,0xb3,0x8b,0xbd,
+0x53,0xba,0x5f,0x1a,0x96,0xdf,0xe7,0x88,0x07,0xd7,0xa5,0xc9,0xcf,0x09,0xd5,0x6f,
+0xb5,0xe3,0xb6,0x3c,0xf3,0x8e,0x07,0x14,0xbf,0x86,0x26,0x02,0x40,0xba,0x6e,0x01,
+0xc5,0x0d,0x21,0x31,0xe5,0xcc,0x4b,0x9f,0x68,0x61,0xdd,0xea,0xd2,0x52,0x63,0xeb,
+0xeb,0xfb,0x96,0xdb,0x9c,0x92,0xd6,0xea,0x33,0x1d,0x84,0x95,0xf9,0x6b,0xb2,0xf7,
+0x9b,0x2a,0x38,0x80,0xff,0xdb,0xb2,0xac,0x77,0xdc,0x76,0x13,0xd9,0x67,0x0c,0xf3,
+0xb1,0xaa,0x49,0xd6,0x49,0xd5,0xcf,0x75,0xb2,0xc1,0x4a,0x47,0x17,0x04,0x00,0xc0,
+0xc1,0x72,0x65,0x4e,0xd0,0xc2,0xec,0xa8,0xdf,0xa3,0xf6,0xc4,0x41,0x9e,0x96,0x22,
+0x59,0xa5,0x85,0x98,0x5b,0x0e,0x17,0xba,0x82,0x16,0xa6,0xc8,0x72,0xf7,0x95,0x93,
+0xbc,0xfc,0x40,0x0a,0x31,0x4f,0xe1,0xbd,0x55,0xfe,0xef,0xca,0xab,0x3a,0xfc,0x3a,
+0xbd,0x8d,0xfc,0x32,0x5f,0x01,0x00,0xda,0xc4,0xff,0x0b,0x30,0x00,0xa5,0xb0,0xb9,
+0x06,0x96,0xff,0x77,0x96,0x00,0x00,0x00,0x00,0x49,0x45,0x4e,0x44,0xae,0x42,0x60,
+0x82,};
+
+static const unsigned int dummy_align__favicon_ico = 2;
+static const unsigned char data__favicon_ico[] = {
+/* /favicon.ico (12 chars) */
+0x2f,0x66,0x61,0x76,0x69,0x63,0x6f,0x6e,0x2e,0x69,0x63,0x6f,0x00,
+
+/* HTTP header */
+
+/* "HTTP/1.1 200 OK
+" (17 bytes) */
+0x48,0x54,0x54,0x50,0x2f,0x31,0x2e,0x31,0x20,0x32,0x30,0x30,0x20,0x4f,0x4b,0x0d,
+0x0a,
+/* "Server: lwIP/1.3.1 (http://savannah.nongnu.org/projects/lwip)
+" (63 bytes) */
+0x53,0x65,0x72,0x76,0x65,0x72,0x3a,0x20,0x6c,0x77,0x49,0x50,0x2f,0x31,0x2e,0x33,
+0x2e,0x31,0x20,0x28,0x68,0x74,0x74,0x70,0x3a,0x2f,0x2f,0x73,0x61,0x76,0x61,0x6e,
+0x6e,0x61,0x68,0x2e,0x6e,0x6f,0x6e,0x67,0x6e,0x75,0x2e,0x6f,0x72,0x67,0x2f,0x70,
+0x72,0x6f,0x6a,0x65,0x63,0x74,0x73,0x2f,0x6c,0x77,0x69,0x70,0x29,0x0d,0x0a,
+/* "Content-Length: 1150
+" (22 bytes) */
+0x43,0x6f,0x6e,0x74,0x65,0x6e,0x74,0x2d,0x4c,0x65,0x6e,0x67,0x74,0x68,0x3a,0x20,
+0x31,0x31,0x35,0x30,0x0d,0x0a,
+/* "Connection: Close
+" (19 bytes) */
+0x43,0x6f,0x6e,0x6e,0x65,0x63,0x74,0x69,0x6f,0x6e,0x3a,0x20,0x43,0x6c,0x6f,0x73,
+0x65,0x0d,0x0a,
+/* "Content-type: image/x-icon
+" (28 bytes) */
+0x43,0x6f,0x6e,0x74,0x65,0x6e,0x74,0x2d,0x74,0x79,0x70,0x65,0x3a,0x20,0x69,0x6d,
+0x61,0x67,0x65,0x2f,0x78,0x2d,0x69,0x63,0x6f,0x6e,0x0d,0x0a,
+/* "ETag: "QTXuDZeFIuH4rCo"
+" (25 bytes) */
+0x45,0x54,0x61,0x67,0x3a,0x20,0x22,0x51,0x54,0x58,0x75,0x44,0x5a,0x65,0x46,0x49,
+0x75,0x48,0x34,0x72,0x43,0x6f,0x22,0x0d,0x0a,0x0d,0x0a,
+
+/* raw file data (1150 bytes) */
+0x00,0x00,0x01,0x00,0x01,0x00,0x10,0x10,0x00,0x00,0x00,0x00,0x20,0x00,0x68,0x04,
+0x00,0x00,0x16,0x00,0x00,0x00,0x28,0x00,0x00,0x00,0x10,0x00,0x00,0x00,0x20,0x00,
+0x00,0x00,0x01,0x00,0x20,0x00,0x00,0x00,0x00,0x00,0x40,0x04,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,
+0xff,0x01,0xff,0xff,0xff,0x01,0xff,0xff,0xff,0x01,0xff,0xff,0xff,0x01,0xff,0xff,
+0xff,0x01,0xff,0xff,0xff,0x01,0xff,0xff,0xff,0x01,0xd2,0xd2,0xd2,0xff,0xd2,0xd2,
+0xd2,0xff,0xff,0xff,0xff,0x01,0xff,0xff,0xff,0x01,0xff,0xff,0xff,0x01,0xff,0xff,
+0xff,0x01,0xff,0xff,0xff,0x01,0xff,0xff,0xff,0x01,0xff,0xff,0xff,0x01,0xff,0xff,
+0xff,0x01,0xff,0xff,0xff,0x01,0xff,0xff,0xff,0x01,0xff,0xff,0xff,0x01,0xff,0xff,
+0xff,0x01,0x8d,0x8d,0x8d,0xff,0x84,0x84,0x84,0xff,0x89,0x89,0x89,0xff,0x89,0x89,
+0x89,0xff,0x84,0x84,0x84,0xff,0x8d,0x8d,0x8d,0xff,0xff,0xff,0xff,0x01,0xff,0xff,
+0xff,0x01,0xff,0xff,0xff,0x01,0xff,0xff,0xff,0x01,0xff,0xff,0xff,0x01,0xff,0xff,
+0xff,0x01,0xff,0xff,0xff,0x01,0xff,0xff,0xff,0x01,0xa4,0xa4,0xa4,0xff,0x84,0x84,
+0x84,0xff,0xae,0xae,0xae,0xff,0xff,0xff,0xff,0x01,0xff,0xff,0xff,0x01,0xff,0xff,
+0xff,0x01,0xff,0xff,0xff,0x01,0xae,0xae,0xae,0xff,0x84,0x84,0x84,0xff,0xa4,0xa4,
+0xa4,0xff,0xff,0xff,0xff,0x01,0xff,0xff,0xff,0x01,0x81,0x81,0x81,0xff,0xff,0xff,
+0xff,0x01,0xff,0xff,0xff,0x01,0xa0,0xa0,0xa0,0xff,0x9a,0x9a,0x9a,0xff,0xff,0xff,
+0xff,0x01,0xc7,0xc7,0xc7,0xff,0x8f,0x8f,0x8f,0xff,0x85,0x85,0x85,0xff,0x85,0x85,
+0x85,0xff,0x8f,0x8f,0x8f,0xff,0xca,0xca,0xca,0xff,0xff,0xff,0xff,0x01,0xd5,0xd5,
+0xd5,0xff,0xff,0xff,0xff,0x01,0x77,0x77,0x77,0xff,0xff,0xff,0xff,0x01,0xff,0xff,
+0xff,0x01,0xd5,0xd5,0xd5,0xff,0x84,0x84,0x84,0xff,0xff,0xff,0xff,0x01,0xa8,0xa8,
+0xa8,0xff,0x8c,0x8c,0x8c,0xff,0xbb,0xbb,0xbb,0xff,0xff,0xff,0xff,0x01,0xff,0xff,
+0xff,0x01,0xba,0xba,0xba,0xff,0xaf,0xaf,0xaf,0xff,0xff,0xff,0xff,0x01,0xff,0xff,
+0xff,0x01,0x65,0x64,0x5b,0xff,0xff,0xff,0xff,0x01,0xff,0xff,0xff,0x01,0xff,0xff,
+0xff,0x01,0x98,0x98,0x98,0xff,0xb0,0xb0,0xb0,0xff,0xd5,0xd5,0xd5,0xff,0x84,0x84,
+0x84,0xff,0xda,0xda,0xda,0xff,0x95,0x95,0x95,0xff,0x84,0x84,0x84,0xff,0x9d,0x9d,
+0x9d,0xff,0xd7,0xd7,0xd7,0xff,0xff,0xff,0xff,0x01,0x98,0x98,0x97,0xff,0x7b,0x7a,
+0x73,0xff,0xdb,0xce,0x79,0xff,0xd2,0xc0,0x55,0xff,0xff,0xff,0xff,0x01,0xff,0xff,
+0xff,0x01,0x93,0x93,0x93,0xff,0xff,0xff,0xff,0x01,0xa4,0xa4,0xa4,0xff,0xbe,0xbe,
+0xbe,0xff,0xbd,0xbd,0xbd,0xff,0xd1,0xd1,0xd1,0xff,0xff,0xff,0xff,0x01,0xff,0xff,
+0xff,0x01,0xb5,0xb4,0xae,0xff,0x5f,0x5f,0x5d,0xff,0x9d,0x97,0x6b,0xff,0xd2,0xc0,
+0x55,0xff,0xff,0xff,0xff,0x01,0xc9,0xb5,0x35,0xff,0xff,0xff,0xff,0x01,0xff,0xff,
+0xff,0x01,0xf0,0xf0,0xf0,0xff,0xff,0xff,0xff,0x01,0xf1,0xf1,0xf1,0xff,0xff,0xff,
+0xff,0x01,0xd5,0xd5,0xd5,0xff,0xd0,0xcf,0xce,0xff,0x85,0x85,0x85,0xff,0x60,0x60,
+0x60,0xff,0x94,0x91,0x85,0xff,0xca,0xb5,0x37,0xff,0xff,0xff,0xff,0x01,0xcc,0xb9,
+0x41,0xff,0xff,0xff,0xff,0x01,0xc9,0xb4,0x33,0xff,0xff,0xff,0xff,0x01,0x62,0x62,
+0x62,0xff,0x5e,0x5d,0x5c,0xff,0x5c,0x5c,0x5c,0xff,0x5e,0x5d,0x5c,0xff,0x61,0x61,
+0x60,0xff,0x67,0x65,0x5b,0xff,0x86,0x84,0x7b,0xff,0xff,0xff,0xff,0x01,0xff,0xff,
+0xff,0x01,0xff,0xff,0xff,0x01,0xca,0xb5,0x37,0xff,0xff,0xff,0xff,0x01,0xcc,0xb9,
+0x41,0xff,0xff,0xff,0xff,0x01,0xc9,0xb4,0x33,0xff,0xff,0xff,0xff,0x01,0xff,0xff,
+0xff,0x01,0xc9,0xb5,0x35,0xff,0xff,0xff,0xff,0x01,0xd2,0xc0,0x55,0xff,0xff,0xff,
+0xff,0x01,0xd4,0xc4,0x5e,0xff,0xd4,0xc3,0x5c,0xff,0xff,0xff,0xff,0x01,0xff,0xff,
+0xff,0x01,0xd4,0xc3,0x5c,0xff,0xd4,0xc4,0x5e,0xff,0xdb,0xce,0x79,0xff,0xd2,0xc0,
+0x55,0xff,0xff,0xff,0xff,0x01,0xc9,0xb5,0x35,0xff,0xff,0xff,0xff,0x01,0xff,0xff,
+0xff,0x01,0xd1,0xc0,0x54,0xff,0xdc,0xcf,0x7d,0xff,0xff,0xff,0xff,0x01,0xc9,0xb4,
+0x33,0xff,0xff,0xff,0xff,0x01,0xd0,0xbe,0x50,0xff,0xc9,0xb4,0x33,0xff,0xc9,0xb4,
+0x33,0xff,0xd2,0xc0,0x55,0xff,0xff,0xff,0xff,0x01,0xc9,0xb4,0x33,0xff,0xff,0xff,
+0xff,0x01,0xdb,0xce,0x79,0xff,0xd2,0xc0,0x55,0xff,0xff,0xff,0xff,0x01,0xff,0xff,
+0xff,0x01,0xff,0xff,0xff,0x01,0xc9,0xb4,0x33,0xff,0xff,0xff,0xff,0x01,0xd9,0xca,
+0x6f,0xff,0xcc,0xb9,0x41,0xff,0xe1,0xd6,0x8f,0xff,0xff,0xff,0xff,0x01,0xff,0xff,
+0xff,0x01,0xe0,0xd5,0x8c,0xff,0xcc,0xb9,0x40,0xff,0xdb,0xce,0x79,0xff,0xff,0xff,
+0xff,0x01,0xc9,0xb4,0x33,0xff,0xff,0xff,0xff,0x01,0xff,0xff,0xff,0x01,0xff,0xff,
+0xff,0x01,0xff,0xff,0xff,0x01,0xd5,0xc5,0x62,0xff,0xd2,0xc1,0x58,0xff,0xff,0xff,
+0xff,0x01,0xff,0xff,0xff,0x01,0xce,0xbb,0x46,0xff,0xc9,0xb5,0x35,0xff,0xc9,0xb5,
+0x35,0xff,0xce,0xbb,0x46,0xff,0xff,0xff,0xff,0x01,0xff,0xff,0xff,0x01,0xd2,0xc0,
+0x55,0xff,0xd5,0xc5,0x62,0xff,0xff,0xff,0xff,0x01,0xff,0xff,0xff,0x01,0xff,0xff,
+0xff,0x01,0xff,0xff,0xff,0x01,0xff,0xff,0xff,0x01,0xd7,0xc8,0x69,0xff,0xc9,0xb4,
+0x33,0xff,0xdb,0xce,0x79,0xff,0xff,0xff,0xff,0x01,0xff,0xff,0xff,0x01,0xff,0xff,
+0xff,0x01,0xff,0xff,0xff,0x01,0xdb,0xce,0x79,0xff,0xc9,0xb4,0x33,0xff,0xd7,0xc8,
+0x69,0xff,0xff,0xff,0xff,0x01,0xff,0xff,0xff,0x01,0xff,0xff,0xff,0x01,0xff,0xff,
+0xff,0x0d,0xff,0xff,0xff,0x01,0xff,0xff,0xff,0x01,0xff,0xff,0xff,0x01,0xff,0xff,
+0xff,0x01,0xcd,0xb9,0x42,0xff,0xc9,0xb4,0x33,0xff,0xcb,0xb7,0x3b,0xff,0xcb,0xb7,
+0x3b,0xff,0xc9,0xb4,0x33,0xff,0xcd,0xb9,0x42,0xff,0xff,0xff,0xff,0x01,0xff,0xff,
+0xff,0x01,0xff,0xff,0xff,0x01,0xff,0xff,0xff,0x01,0xff,0xff,0xff,0x01,0xff,0xff,
+0xff,0x01,0xff,0xff,0xff,0x01,0xff,0xff,0xff,0x01,0xff,0xff,0xff,0x01,0xff,0xff,
+0xff,0x01,0xff,0xff,0xff,0x01,0xff,0xff,0xff,0x01,0xeb,0xe4,0xb5,0xff,0xeb,0xe4,
+0xb5,0xff,0xff,0xff,0xff,0x01,0xff,0xff,0xff,0x01,0xff,0xff,0xff,0x01,0xff,0xff,
+0xff,0x01,0xff,0xff,0xff,0x01,0xff,0xff,0xff,0x01,0xff,0xff,0xff,0x01,0x00,0x00,
+0xff,0xff,0x00,0x00,0xff,0xff,0x00,0x00,0xff,0xff,0x00,0x00,0xff,0xff,0x00,0x00,
+0xff,0xff,0x00,0x00,0xff,0xff,0x00,0x00,0xff,0xff,0x00,0x00,0xff,0xff,0x00,0x00,
+0xff,0xff,0x00,0x00,0xff,0xff,0x00,0x00,0xff,0xff,0x00,0x00,0xff,0xff,0x00,0x00,
+0xff,0xff,0x00,0x00,0xff,0xff,0x00,0x00,0xff,0xff,0x00,0x00,0xff,0xff,};
+
+static const unsigned int dummy_align__main_js = 3;
+static const unsigned char data__main_js[] = {
+/* /main.js (8 chars) */
+0x2f,0x6d,0x61,0x69,0x6e,0x2e,0x6a,0x73,0x00,
+
+/* HTTP header */
+
+/* "HTTP/1.1 200 OK
+" (17 bytes) */
+0x48,0x54,0x54,0x50,0x2f,0x31,0x2e,0x31,0x20,0x32,0x30,0x30,0x20,0x4f,0x4b,0x0d,
+0x0a,
+/* "Server: lwIP/1.3.1 (http://savannah.nongnu.org/projects/lwip)
+" (63 bytes) */
+0x53,0x65,0x72,0x76,0x65,0x72,0x3a,0x20,0x6c,0x77,0x49,0x50,0x2f,0x31,0x2e,0x33,
+0x2e,0x31,0x20,0x28,0x68,0x74,0x74,0x70,0x3a,0x2f,0x2f,0x73,0x61,0x76,0x61,0x6e,
+0x6e,0x61,0x68,0x2e,0x6e,0x6f,0x6e,0x67,0x6e,0x75,0x2e,0x6f,0x72,0x67,0x2f,0x70,
+0x72,0x6f,0x6a,0x65,0x63,0x74,0x73,0x2f,0x6c,0x77,0x69,0x70,0x29,0x0d,0x0a,
+/* "Content-Length: 10480
+" (23 bytes) */
+0x43,0x6f,0x6e,0x74,0x65,0x6e,0x74,0x2d,0x4c,0x65,0x6e,0x67,0x74,0x68,0x3a,0x20,
+0x31,0x30,0x34,0x38,0x30,0x0d,0x0a,
+/* "Connection: Close
+" (19 bytes) */
+0x43,0x6f,0x6e,0x6e,0x65,0x63,0x74,0x69,0x6f,0x6e,0x3a,0x20,0x43,0x6c,0x6f,0x73,
+0x65,0x0d,0x0a,
+/* "Content-type: application/x-javascript
+Content-Encoding: gzip
+" (64 bytes) */
+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,0x78,0x2d,0x6a,0x61,0x76,0x61,
+0x73,0x63,0x72,0x69,0x70,0x74,0x0d,0x0a,0x43,0x6f,0x6e,0x74,0x65,0x6e,0x74,0x2d,
+0x45,0x6e,0x63,0x6f,0x64,0x69,0x6e,0x67,0x3a,0x20,0x67,0x7a,0x69,0x70,0x0d,0x0a,
+/* "ETag: "OAkoNV3GunRSOkX"
+" (25 bytes) */
+0x45,0x54,0x61,0x67,0x3a,0x20,0x22,0x4f,0x41,0x6b,0x6f,0x4e,0x56,0x33,0x47,0x75,
+0x6e,0x52,0x53,0x4f,0x6b,0x58,0x22,0x0d,0x0a,0x0d,0x0a,
+
+/* raw file data (10480 bytes) */
+0x1f,0x8b,0x08,0x00,0x00,0x00,0x00,0x00,0x04,0x0a,0xed,0x7d,0x0b,0x73,0x1b,0x47,
+0x92,0xe6,0x5f,0x69,0xf6,0x7a,0x25,0xc0,0x6c,0x80,0x00,0x08,0x52,0x24,0xa0,0x16,
+0x43,0x2f,0xdb,0xda,0x90,0x2c,0x9d,0x24,0x8f,0x77,0x8f,0xe2,0x30,0x9a,0x40,0x93,
+0xe8,0x35,0xd0,0x0d,0x75,0x37,0x48,0xc9,0x22,0x23,0x3c,0x9e,0x9d,0xdd,0x89,0x18,
+0xc7,0xfa,0x62,0xee,0xe2,0xee,0xe2,0xe2,0xe6,0xf6,0x5e,0x3f,0xc0,0xeb,0x1d,0xed,
+0x68,0xc6,0x8f,0x89,0xb8,0x5f,0x00,0xfe,0xa3,0xfb,0xbe,0xac,0xaa,0x7e,0x00,0x20,
+0x4d,0xf9,0xb5,0x3b,0x71,0x17,0x21,0x91,0x5d,0x55,0x59,0xaf,0xac,0xcc,0xac,0xac,
+0xcc,0xac,0xe2,0xfe,0x24,0xec,0xa5,0x41,0x14,0x5a,0x6f,0x54,0xfc,0xea,0x8b,0xd8,
+0x4f,0x27,0x71,0x68,0xf5,0xa3,0xde,0x64,0xe4,0x87,0x69,0xfd,0xc0,0x4f,0x6f,0x0f,
+0x7d,0x7e,0xde,0x78,0x7e,0xa7,0x0f,0x88,0x93,0x7d,0x03,0xbf,0xef,0xf5,0xfd,0x3b,
+0x61,0xc2,0x5a,0x7e,0x3d,0x49,0x9f,0x0f,0xfd,0x7a,0x34,0xf6,0x7a,0x41,0xfa,0xdc,
+0x6d,0x38,0x19,0x54,0x5a,0xa9,0xbe,0x38,0xf4,0x62,0x2b,0x74,0xc7,0x5e,0x9c,0xf8,
+0x6f,0x0d,0x23,0x2f,0xad,0xcc,0xc0,0x57,0xbb,0x95,0x70,0xd9,0xad,0x37,0x56,0xab,
+0xd7,0x9a,0x4b,0xee,0x52,0xe3,0xd2,0xa5,0x59,0x08,0x37,0x74,0x8e,0x82,0xb0,0x1f,
+0x1d,0xd5,0x63,0xff,0xe9,0xc4,0x4f,0xd2,0xb7,0x62,0x6f,0xe4,0x57,0x6c,0x9d,0xb2,
+0xab,0x95,0xb4,0x5a,0x3d,0xa9,0x14,0x46,0xd7,0xf7,0x52,0xef,0x2d,0x19,0x21,0x06,
+0xb0,0x1f,0xc5,0x15,0x0e,0xc2,0x77,0xb7,0xbd,0x9e,0xd3,0xef,0x39,0x41,0xb8,0xbb,
+0x8f,0xba,0x4e,0x34,0x49,0xd5,0xc7,0xf8,0x28,0x76,0xf6,0xbc,0x74,0xb7,0xe7,0x8d,
+0x51,0x18,0xfa,0xf1,0x6e,0xea,0x8f,0xc6,0xcc,0x4a,0x83,0x91,0x3f,0xf4,0xf7,0x53,
+0x27,0x79,0x10,0x1d,0xf9,0xb1,0x93,0xdc,0x40,0x9e,0x1f,0x3f,0xdf,0x71,0x52,0xb7,
+0xd1,0x4d,0xaf,0xfa,0xf5,0xa1,0x1f,0x1e,0xa4,0x83,0x6e,0xba,0xbc,0x5c,0xcd,0x70,
+0xb2,0x9d,0xee,0x14,0x06,0xf3,0xce,0xe3,0x7b,0x77,0x7b,0xb1,0xef,0xa5,0x3e,0xb1,
+0xc5,0x91,0xa4,0x6e,0x86,0x62,0x55,0x70,0x4b,0x63,0x1c,0x13,0x3b,0x20,0xba,0x2b,
+0x55,0x27,0x9c,0x85,0xd1,0x2b,0x51,0xb1,0xfb,0xc1,0xa1,0x5d,0xed,0x72,0x56,0x61,
+0x5d,0x46,0xcb,0x0e,0x5c,0xbf,0x1b,0xd6,0xf7,0x83,0x38,0x49,0x6f,0x0e,0x82,0x61,
+0xbf,0x5b,0x4d,0xeb,0xde,0x78,0xec,0x87,0x7d,0x49,0x02,0x32,0x2f,0xab,0x76,0xf5,
+0x3a,0xa7,0xb3,0xcb,0x59,0xf1,0x9d,0x74,0xd1,0x7a,0x9a,0x15,0xeb,0x07,0xc9,0x78,
+0xe8,0x3d,0x77,0xd3,0xe3,0x63,0x7b,0x6f,0x18,0xf5,0x3e,0xb0,0xbf,0xdd,0x52,0xaf,
+0x7d,0x8f,0x4b,0x0d,0x3c,0x8c,0x7e,0xe2,0x0d,0x03,0x2c,0x39,0xe8,0x58,0xd3,0x1b,
+0xe6,0xe1,0x84,0x8e,0xe7,0x04,0x4e,0xec,0x44,0x4e,0xe2,0x0c,0x1d,0x2c,0xbc,0x33,
+0x71,0xc6,0x5d,0xdf,0x7d,0x83,0x84,0xe3,0xf5,0x77,0x7b,0xd1,0x68,0x34,0x09,0x41,
+0xb0,0x76,0x15,0x8b,0x89,0xdc,0xa3,0x38,0x48,0xfd,0x52,0x76,0xc8,0xec,0x91,0x17,
+0x7a,0x07,0x7e,0x7c,0xe7,0x01,0xe0,0xbc,0x52,0x46,0x0b,0x39,0x41,0x29,0x67,0x15,
+0x39,0x71,0x29,0xa7,0x8d,0x9c,0xa8,0x94,0xb3,0x86,0x9c,0x84,0x39,0xc1,0xd8,0xeb,
+0xf7,0x63,0xa4,0x86,0x4c,0x1d,0x1c,0xe1,0xab,0xa7,0x20,0x93,0x0f,0xf0,0xdd,0xe7,
+0x77,0x9c,0xec,0x26,0x7e,0x7c,0xe8,0x13,0x6c,0xa2,0x33,0xc6,0x51,0x9c,0x22,0x39,
+0xd6,0xc9,0x0f,0x7c,0xcc,0xa0,0x4b,0xb2,0x1a,0x81,0x7b,0xcc,0xda,0xa2,0x6e,0x7f,
+0xd0,0x1b,0xdb,0xd5,0x7a,0x6f,0xe0,0xf7,0x3e,0xf0,0xfb,0xc7,0xc7,0x15,0x8d,0x26,
+0xff,0xce,0x03,0x76,0xec,0x27,0x49,0x25,0x71,0x6c,0xeb,0xce,0x83,0xda,0xf4,0xb3,
+0xe9,0x6f,0x4f,0x3f,0x9a,0xbe,0x3c,0xfd,0x99,0x75,0xfa,0xf3,0xd3,0x9f,0x9d,0x7e,
+0x8c,0xc4,0xd7,0xd3,0xdf,0xf3,0x6b,0xfa,0xf9,0xf4,0x33,0xbb,0x8a,0xca,0x68,0xbc,
+0x59,0x75,0xe6,0x9b,0x18,0xce,0x37,0xf1,0xcb,0xe9,0x17,0xa7,0x7f,0x3f,0xfd,0xdd,
+0x37,0x54,0xec,0x39,0xf6,0xf4,0x33,0x6b,0xfa,0x5f,0xa7,0x9f,0x9d,0xfe,0x6c,0xfa,
+0x07,0x7e,0xfe,0x11,0x9d,0xfe,0x16,0x89,0x97,0xe8,0xf6,0x55,0xde,0x69,0xd5,0x51,
+0x88,0xf0,0x43,0x6f,0x6f,0xe8,0xf7,0xf3,0x29,0x41,0x52,0xcc,0x8f,0xa7,0x3f,0x37,
+0x9e,0x87,0xd7,0x6f,0xdd,0x79,0xef,0x91,0x25,0x0d,0x7f,0x84,0xf9,0xbc,0xc4,0xec,
+0x16,0xcd,0xe9,0xdd,0xc9,0x68,0xcf,0x8f,0x2b,0x13,0x34,0x30,0xfd,0x87,0xe9,0xd7,
+0xa7,0x1f,0x9d,0x7e,0x6c,0x5d,0xb4,0xee,0xf5,0xe1,0x78,0xe0,0x85,0x90,0x9a,0x71,
+0xd0,0xab,0x8c,0xd9,0xc2,0x7f,0xe1,0x64,0x2c,0x4c,0x8e,0xc8,0x7c,0x35,0xfd,0x47,
+0x20,0xf6,0x63,0x4c,0xd2,0xeb,0xf5,0x80,0xf8,0x6f,0x6a,0x77,0x11,0xa2,0x43,0xb6,
+0xfa,0x3f,0x64,0xf4,0x32,0x07,0xeb,0xd1,0xbb,0xf7,0x1e,0x58,0xcd,0x1c,0x4f,0xd9,
+0xe2,0x94,0x06,0xe3,0x3b,0xf6,0x43,0x90,0xbb,0x75,0x33,0x27,0xf7,0xb9,0xd5,0x2c,
+0x55,0x48,0x1d,0xfb,0x7d,0x72,0xc2,0xb9,0x35,0x72,0x12,0xf2,0x16,0x0e,0x0b,0xac,
+0x31,0xd7,0x4b,0x5e,0x27,0x58,0x58,0x07,0xcc,0x73,0x4e,0x9d,0x78,0x61,0x1d,0xb0,
+0xd7,0x39,0x75,0xa2,0x85,0x75,0xc0,0x80,0x59,0x9d,0x51,0x2e,0x02,0xe7,0x49,0x49,
+0xa4,0xa1,0xda,0xbe,0x66,0xe4,0x75,0x26,0x8b,0x87,0x01,0x78,0x4f,0x8b,0xd3,0xa2,
+0x34,0xb6,0xa7,0xbf,0x99,0xbe,0x9c,0xfe,0x91,0x94,0x06,0x8a,0x7b,0x05,0x86,0xf8,
+0x64,0xfa,0xd5,0xf4,0x6b,0x8b,0x5c,0x31,0xfd,0x2d,0xfe,0x7f,0x65,0x2f,0xa7,0xcb,
+0xf6,0x92,0xed,0x2c,0x2d,0xad,0xfc,0xb4,0xd2,0x5a,0xdb,0x6e,0xd4,0xd6,0x76,0x8e,
+0x5b,0xf8,0xd5,0xde,0xc1,0x8f,0xcd,0x9d,0xe3,0xed,0x46,0x73,0x67,0x4b,0x3e,0xe5,
+0xc7,0x56,0xf5,0x49,0xfd,0x5f,0x06,0xee,0x8d,0x95,0x7a,0x8a,0x4d,0x17,0xbb,0xf2,
+0xa1,0x37,0x9c,0xf8,0x44,0x1e,0x18,0x12,0xdf,0x5a,0xe6,0xd6,0xf6,0xa2,0x67,0x60,
+0xca,0xd2,0x76,0x53,0x75,0x20,0x2d,0xe6,0x71,0xab,0x59,0xec,0x47,0x43,0x6c,0x6d,
+0x6b,0xfb,0x49,0xbf,0xbe,0xb3,0x5c,0xd9,0xea,0xf8,0xb5,0xad,0x27,0xfd,0xe5,0xea,
+0xd6,0xf7,0x38,0x9b,0x12,0xdb,0x5c,0x70,0x4e,0xd8,0x42,0x56,0x7e,0xca,0x05,0xf5,
+0x6a,0x1f,0x5e,0xaf,0xfd,0xdb,0x9d,0xe5,0x37,0x56,0x16,0xd3,0x0f,0x24,0xd0,0xf4,
+0x8b,0xe9,0x4b,0x4b,0xe8,0xc4,0x9a,0x7e,0x89,0xe4,0x3f,0x53,0x32,0x52,0x8e,0x41,
+0xb2,0x88,0x1c,0xf8,0x67,0x11,0x2f,0x9f,0x58,0x90,0x2c,0x00,0x06,0x89,0xfd,0x81,
+0x24,0xf6,0x05,0x73,0x41,0x73,0x5f,0x01,0xf2,0x0f,0xf8,0xfd,0xd2,0xa2,0xf4,0xc1,
+0xe7,0xe7,0xa7,0xbf,0xb2,0xa6,0xaf,0xac,0xd3,0xbf,0x9d,0xbe,0x3a,0xfd,0x1b,0x88,
+0xb7,0x5f,0x91,0xfa,0xbc,0xef,0xbc,0xb8,0x9a,0x12,0xfc,0xf7,0xc6,0x50,0xef,0xa8,
+0x25,0x6a,0x1d,0xc7,0xaf,0x43,0x75,0xa2,0x36,0x93,0xd4,0xa9,0x8f,0xed,0x07,0xd0,
+0x11,0xf9,0x23,0xd9,0x6e,0xec,0x40,0xbd,0x59,0xf9,0x69,0xfd,0x45,0xd3,0x39,0x79,
+0x52,0xef,0xc5,0xe9,0x1b,0x2b,0x07,0x06,0x0b,0xe9,0xa5,0x4b,0xa1,0x1a,0x52,0x5a,
+0x0f,0xa1,0xe6,0x55,0xb7,0x26,0xaa,0xdd,0xb4,0xda,0xf1,0x86,0x7e,0x9c,0x56,0xec,
+0xe9,0xff,0x06,0x03,0xfd,0x7e,0xfa,0x85,0x16,0xe9,0x9c,0xec,0xe9,0xdf,0x60,0xa2,
+0xd8,0x44,0x44,0xc6,0x82,0xd3,0x5e,0x62,0x23,0x63,0x5a,0xf8,0xed,0x2b,0xcc,0x1a,
+0x58,0x79,0x65,0x49,0x01,0x77,0x34,0xa6,0x88,0xc3,0xe9,0x57,0x4b,0xd8,0x49,0x97,
+0x9a,0x39,0xa5,0x26,0x93,0xbd,0x51,0x90,0xbe,0x05,0xa5,0x22,0x81,0x2e,0xd1,0x8b,
+0x42,0xe8,0x4d,0x23,0x74,0xf9,0x6b,0xe0,0x0e,0x4d,0xaa,0xdd,0x03,0xf5,0x98,0xfc,
+0x3b,0xe2,0xdd,0x3a,0xfd,0x05,0xf6,0x0a,0x0e,0xe1,0x63,0x62,0x9a,0x2c,0xff,0x0a,
+0xab,0x05,0x10,0x66,0x9d,0x7e,0xc2,0x4e,0xb1,0xc3,0x99,0x3d,0x95,0x2b,0xb2,0x65,
+0x57,0xb1,0x75,0x81,0x87,0xc2,0x74,0x5c,0x0b,0x42,0x6c,0xd2,0x59,0x92,0x9b,0x7d,
+0xc0,0x5d,0x3b,0x1a,0x53,0x9d,0x49,0xb6,0x57,0x77,0x14,0xd7,0x71,0xb3,0xcf,0xc0,
+0x35,0x23,0x3a,0xb3,0xba,0xcf,0x16,0x80,0x98,0x87,0x4d,0xa1,0xae,0x26,0x52,0xa9,
+0x76,0x16,0xf1,0xaa,0x52,0xd8,0x8d,0x3a,0xa7,0x75,0xb9,0x02,0xbf,0x6a,0x94,0x67,
+0x4b,0x19,0xfa,0x47,0x16,0x71,0x72,0x0b,0xeb,0xd8,0x35,0x9a,0x25,0xfa,0xc2,0x6a,
+0xda,0x8e,0xaf,0xb4,0x8f,0xd0,0x25,0xd4,0x5f,0xde,0xbb,0xfb,0x4e,0x9a,0x8e,0x1f,
+0x2a,0x45,0x1d,0x3a,0x69,0x04,0x25,0xb4,0x62,0x3f,0xb8,0xff,0xe8,0xb1,0xed,0xd8,
+0x2b,0x49,0x7c,0xb8,0x8b,0xf5,0xde,0x55,0x1d,0xd4,0x7b,0x07,0x01,0x68,0xb0,0x01,
+0x6d,0xb7,0xae,0x73,0xa2,0x70,0x1c,0x47,0x07,0x54,0x4e,0x5c,0x73,0x8a,0xc8,0x29,
+0xea,0x9e,0x97,0x0e,0xea,0xfb,0xc3,0x08,0xaa,0x2f,0x14,0x6f,0x10,0x9b,0xdf,0x5f,
+0xf1,0xeb,0x69,0x94,0x7a,0xc3,0x37,0x9b,0x8d,0x46,0xb5,0x8b,0xf5,0x4a,0x22,0x90,
+0xd9,0x30,0x3a,0xa8,0x40,0xbc,0xfe,0xb9,0x5d,0x3d,0x41,0xd3,0x51,0x48,0x58,0x97,
+0x1f,0x7e,0x1c,0x47,0x71,0xde,0x72,0xf5,0x45,0xab,0xd1,0x70,0xdd,0x74,0x10,0x24,
+0x38,0xc4,0x78,0xe9,0x24,0xd9,0xb2,0x9b,0xb6,0xeb,0x2e,0x87,0x38,0x6a,0x24,0x63,
+0xb4,0xe6,0x3f,0xf6,0x9f,0xa5,0x5b,0x15,0x43,0x79,0xff,0x0b,0x3c,0xf5,0x47,0xf0,
+0xde,0x2f,0xb1,0xaa,0x5f,0x83,0x74,0xf4,0xb9,0x04,0xba,0xb0,0xa8,0x9f,0xa8,0x25,
+0x3c,0x50,0xcd,0x69,0xf5,0xbf,0x01,0x16,0xdb,0x3f,0x89,0x51,0x2b,0x57,0x94,0xfe,
+0xe0,0xd7,0xcf,0x49,0x0a,0x67,0x90,0xb0,0xbd,0xb8,0x3e,0x64,0x41,0x3e,0x52,0x99,
+0x5a,0x02,0x0d,0x1f,0xa7,0x9f,0x9c,0x7e,0x45,0xdb,0x7b,0xf0,0xfe,0x2d,0x10,0x2f,
+0x16,0xbe,0x17,0x4d,0xc2,0xb4,0x76,0x14,0x7b,0x24,0xa9,0x85,0x8b,0x4e,0xdd,0x4a,
+0xa0,0x70,0xbc,0x0a,0xcf,0x04,0xca,0x20,0x8a,0x87,0x2c,0xe9,0xea,0x26,0xd4,0x9e,
+0x03,0x5f,0x75,0xa8,0x0e,0x59,0x6c,0x50,0x65,0x7a,0x49,0x72,0x14,0xc5,0xfd,0xf7,
+0x40,0xd4,0x68,0x59,0x36,0x0f,0xa5,0x69,0x47,0xc3,0xfe,0xf8,0x88,0x8a,0x9c,0xca,
+0x13,0x35,0x1b,0xc4,0x53,0xcc,0x13,0x4d,0x5b,0xe5,0xc5,0xfe,0x18,0x87,0xa7,0x0c,
+0x3a,0x98,0x17,0xa0,0x58,0x42,0x37,0xd5,0x27,0xb1,0xe3,0x63,0xa6,0xc2,0x52,0xca,
+0xd3,0xa9,0x2d,0xb3,0x8c,0x22,0x5c,0x4f,0x3f,0xd5,0x02,0x81,0x7b,0x32,0x75,0xcf,
+0x2f,0xb0,0x2e,0xc2,0xda,0x10,0x0a,0x9d,0x70,0xc9,0x75,0xbd,0x7c,0xe1,0x4d,0x0d,
+0xa8,0xc8,0x6a,0xf5,0x4e,0x7f,0x35,0xfd,0x92,0x2a,0xeb,0x67,0x60,0x78,0x91,0xd4,
+0x4c,0x8a,0xe0,0xa1,0x7c,0xfe,0x9c,0x25,0xdc,0xe8,0x4f,0xff,0xfe,0xf4,0x63,0xca,
+0x18,0x60,0xa5,0x3c,0x6b,0xd7,0xb6,0x99,0x59,0x9e,0x76,0x29,0xb3,0x3c,0x6f,0x14,
+0x55,0x3b,0x36,0x68,0xd3,0xf5,0xb3,0x69,0x40,0xc7,0xb0,0x28,0xd5,0x21,0xdf,0xa9,
+0x68,0x40,0xce,0xc9,0x34,0xb0,0x11,0xfc,0x4e,0xc6,0x40,0x71,0xf8,0x92,0x1b,0x83,
+0x85,0xa1,0x7c,0xc1,0xf9,0x62,0x83,0xa0,0xd0,0x92,0x31,0xff,0x13,0x37,0x0b,0xce,
+0xf8,0x6b,0xd4,0x87,0x10,0x03,0x0c,0x25,0x17,0x24,0xda,0xcf,0xca,0x02,0x2c,0x9b,
+0xe4,0xe9,0x27,0xc4,0x4c,0xa0,0xc5,0x33,0xa4,0x96,0xfe,0x0c,0xf3,0x4f,0xaf,0xba,
+0x45,0x0e,0x80,0x18,0xc0,0x99,0xd6,0x50,0x02,0x16,0x96,0xac,0xbe,0x35,0x01,0x25,
+0x50,0xa6,0xbb,0xf6,0xb2,0xbf,0x6c,0x5f,0x22,0x42,0x40,0x23,0x48,0x81,0x57,0x2f,
+0x11,0x13,0x2a,0x05,0x4d,0xf7,0xed,0xdb,0x10,0x17,0x99,0x00,0xa8,0xbe,0x50,0x0b,
+0x27,0xd4,0x5f,0x64,0xcc,0xb3,0x19,0xf0,0xa4,0xda,0xc9,0x98,0xf6,0x1f,0xcc,0x22,
+0x11,0x11,0x99,0x02,0xa6,0xe6,0x3e,0xa7,0xa2,0x7d,0x5f,0x6b,0x95,0xb3,0x24,0x6d,
+0x08,0x89,0x9f,0x3e,0x7e,0x3e,0x16,0x03,0x00,0xc9,0x13,0x07,0x6a,0xec,0x8d,0xbd,
+0xd4,0xef,0xdf,0x09,0xfb,0xfe,0xb3,0x2d,0xbd,0x19,0x28,0xe9,0xbf,0x3b,0x04,0xad,
+0xf7,0x86,0xc0,0xc5,0xbb,0xc0,0xd5,0xb2,0x6b,0x5b,0x83,0xa0,0xdf,0xf7,0x43,0x45,
+0x2f,0xe9,0x38,0xdb,0x23,0x2e,0x02,0x83,0x8e,0xaf,0xa7,0x69,0x1c,0xec,0x4d,0x60,
+0x7e,0x80,0xe9,0x20,0x51,0x67,0x28,0x27,0xff,0x14,0xda,0xcc,0xb6,0x96,0x6c,0x27,
+0x52,0x1b,0xd3,0x79,0xe3,0xd0,0x10,0x17,0xe8,0x41,0xba,0xc0,0x84,0xd2,0xe4,0x39,
+0xcd,0x4d,0x23,0xff,0xdc,0x29,0x16,0x01,0xcf,0xc1,0x04,0x74,0x8a,0x99,0x76,0x5c,
+0x48,0xb2,0xa1,0x95,0x8c,0xbd,0x70,0xb7,0xb9,0x1b,0xed,0xef,0xb6,0x04,0x63,0x84,
+0x2b,0x36,0xe3,0xca,0x16,0x59,0xc3,0x56,0x91,0xc6,0xd1,0x50,0x40,0xe6,0x87,0xb4,
+0xb8,0x29,0xc2,0x7d,0x43,0x53,0xba,0xb7,0xd8,0x1f,0x45,0x87,0xfe,0x22,0xcc,0x0b,
+0x2e,0x74,0x43,0xe7,0x40,0x81,0x7c,0x29,0x1d,0xcc,0x6a,0x97,0x11,0xb6,0x78,0x74,
+0x19,0xf0,0x37,0x0c,0xb1,0x08,0x77,0xce,0x08,0x44,0x3a,0xcd,0x29,0x28,0xb3,0x64,
+0xb1,0x00,0x9b,0x19,0x2d,0x61,0x37,0x3c,0x13,0x0b,0xdf,0x40,0x12,0x8b,0x67,0x78,
+0x16,0x65,0x2c,0x18,0xc4,0x3c,0x75,0xcc,0x30,0xd2,0x2c,0x59,0xcc,0x14,0xcf,0x93,
+0xc4,0x02,0x80,0x22,0xa2,0x67,0x8a,0x75,0xf3,0x17,0x60,0x0e,0xe2,0x59,0xd3,0xc3,
+0x05,0xa0,0x8b,0x5b,0x3d,0x37,0x77,0x6e,0xdb,0xb9,0x82,0xd4,0x6c,0x74,0xd1,0xc6,
+0x9d,0x10,0x26,0x4a,0x6c,0xad,0x95,0x82,0x00,0xd5,0x67,0xd4,0x26,0x36,0xca,0x4b,
+0x97,0x96,0x44,0x06,0x41,0x50,0x97,0xb5,0x16,0x28,0x62,0x1d,0x03,0x80,0xdd,0xcf,
+0x87,0x2c,0x98,0xd5,0x6f,0x06,0xb1,0xbf,0xef,0xda,0x03,0x68,0x78,0x1d,0x7b,0x79,
+0xb6,0x30,0x8a,0x83,0x83,0x20,0xa4,0xe6,0x99,0x40,0xe2,0x84,0x07,0x73,0xb5,0xa1,
+0xda,0xa5,0x11,0x78,0x54,0x6f,0xc7,0x55,0x18,0xde,0xae,0xc1,0xde,0x9b,0xd6,0x6a,
+0x44,0x82,0x52,0x56,0x60,0x44,0x81,0x15,0x06,0x98,0xcd,0x4d,0x9b,0xa9,0x93,0x9e,
+0x38,0x4d,0x7f,0xb5,0x30,0x77,0xda,0xb6,0x1e,0x41,0x61,0xf3,0x95,0x9e,0x53,0x36,
+0x75,0x89,0x38,0x35,0xd6,0x35,0x48,0xda,0x0b,0x49,0x40,0xda,0xdf,0x2e,0x0a,0x3b,
+0xf2,0x68,0xa1,0xbb,0x08,0xb4,0x62,0xe3,0x6c,0x2c,0xe7,0x30,0x04,0x31,0x20,0x63,
+0xf8,0x06,0x18,0xdd,0xf7,0x39,0x50,0x05,0x34,0xc5,0x5e,0x3f,0x98,0x24,0x05,0x44,
+0xc1,0x9e,0x38,0x67,0x46,0x13,0x74,0x15,0x0c,0x8d,0xe7,0xb1,0x2d,0x47,0x09,0x50,
+0x65,0x82,0xbc,0x08,0xa0,0xa8,0x79,0xe7,0x0c,0x56,0x37,0x28,0x46,0xcc,0xf3,0xda,
+0x53,0x88,0x2c,0x8e,0xf2,0x82,0xeb,0x9a,0x8f,0xf6,0x35,0x2a,0xc8,0xa8,0x2f,0x0e,
+0xaf,0x46,0x7f,0x01,0xf8,0xc2,0xd2,0x78,0x93,0x74,0x50,0x58,0x98,0xe4,0x88,0x19,
+0x14,0x28,0xca,0x5c,0xcb,0xa3,0x1c,0x86,0x9e,0x2f,0xd6,0x39,0x38,0x94,0xad,0xa2,
+0x04,0x7c,0x81,0xa1,0x68,0xc4,0xe7,0x1d,0xe8,0x8e,0xc5,0xcc,0x5b,0xa2,0x9b,0x5c,
+0x93,0x09,0xc2,0xfd,0xe8,0x27,0x99,0xdd,0xa7,0x68,0x6b,0x57,0x76,0x75,0xc8,0xa2,
+0x59,0x55,0xdf,0xc8,0x18,0xcc,0xac,0xa0,0xec,0xd3,0xf6,0x0e,0xc3,0x80,0xc9,0x14,
+0xeb,0xb5,0x57,0xb0,0x5e,0xeb,0x4e,0xfc,0xa2,0x85,0xa5,0x05,0xef,0x04,0xce,0xe1,
+0x34,0x6f,0xc8,0xd1,0x1d,0xc6,0x91,0xd3,0xbf,0x15,0x53,0x1e,0x6a,0x16,0x4c,0xd3,
+0xe5,0x3a,0xb0,0x66,0xc2,0xc4,0x0c,0xcb,0x36,0xd5,0x5e,0xad,0xe5,0x8b,0x25,0x05,
+0x9a,0x2f,0x4c,0x23,0xdf,0x58,0x1f,0xba,0xa8,0x98,0x72,0xbf,0x54,0x2a,0x31,0x5a,
+0xa1,0xc2,0xff,0x4a,0xdb,0xa7,0x55,0xcf,0x5e,0x8e,0xa1,0xb3,0x06,0x0e,0xb7,0xca,
+0x37,0x1b,0x12,0x67,0x6c,0x43,0x4f,0x2c,0x5a,0x87,0x46,0xc6,0x30,0x52,0x36,0x2f,
+0xca,0x79,0x04,0xea,0xff,0x0f,0x6c,0x1e,0xaa,0x64,0xf6,0x21,0xa8,0xf8,0xdf,0xca,
+0xf4,0xa7,0xec,0x10,0x77,0x40,0x39,0xdf,0x97,0x3d,0xe5,0x15,0x74,0x78,0x65,0x60,
+0x51,0x46,0x96,0x4f,0x95,0x3d,0x65,0x96,0x38,0xc9,0x41,0x34,0x91,0x33,0x9f,0xc2,
+0x5a,0x0c,0x3b,0xdf,0xd2,0x1e,0x02,0x47,0xe8,0x5f,0x3c,0xba,0xff,0x2e,0xfd,0x63,
+0x4e,0xa8,0x96,0xd2,0xeb,0x56,0x3c,0x57,0xef,0x80,0x65,0xa3,0xc7,0x16,0x4e,0x32,
+0x33,0x76,0x90,0x0e,0xb3,0x34,0xf0,0x75,0x68,0xc0,0x87,0xfe,0x5f,0xde,0xdf,0xfb,
+0x6b,0x1c,0x00,0x2a,0xf6,0xbd,0xa0,0x17,0x47,0x49,0xb4,0x9f,0xd6,0xd9,0xca,0xe3,
+0xc7,0x0f,0xec,0x2a,0xad,0x3f,0x34,0x9a,0xc8,0x21,0xc8,0x17,0xfb,0x88,0x07,0xdb,
+0x05,0xbd,0x56,0xcf,0x69,0xa5,0xf0,0xd5,0xf9,0xda,0x2d,0x6c,0xef,0x72,0xf4,0x76,
+0x82,0x6e,0x1b,0x87,0x56,0x88,0x51,0x00,0x8a,0x6c,0xc1,0x0e,0x2e,0x06,0x8e,0x8a,
+0x8f,0x6c,0x56,0x9d,0x24,0xd5,0xad,0x4a,0xe0,0x72,0x32,0x75,0x71,0xc9,0x56,0x08,
+0x9e,0x5b,0x3a,0xb0,0x23,0x57,0x02,0x58,0x2f,0xa8,0x53,0xc0,0xc0,0x80,0x4a,0x34,
+0x30,0x14,0xc4,0xd6,0x64,0x4c,0xcd,0x66,0x0c,0x8f,0x18,0x96,0x33,0x39,0x0a,0xd2,
+0xde,0xa0,0x62,0x78,0x1c,0x2d,0xa6,0x03,0x9e,0xef,0xea,0xc9,0x30,0xe8,0xf9,0x95,
+0xa6,0x53,0x5b,0xab,0xc2,0x88,0xe6,0x25,0xbe,0x0d,0x89,0x94,0x42,0x25,0x48,0xec,
+0x0e,0xbe,0x1e,0x43,0x8f,0x86,0xf3,0xb5,0x62,0x32,0x31,0x51,0xd9,0xdf,0xbb,0x7b,
+0x18,0xfa,0x07,0x5d,0xa9,0x00,0x43,0x47,0x1a,0xc5,0xcf,0xed,0x0e,0x70,0xff,0x80,
+0xdd,0x61,0x39,0x7b,0x93,0x38,0x86,0xd8,0x60,0xef,0x46,0x74,0x54,0x4f,0x72,0xe6,
+0x03,0xe4,0xcd,0xb7,0xef,0x64,0xda,0x90,0x13,0x76,0x83,0x7d,0x3a,0xfb,0xd0,0x8d,
+0x58,0x9a,0x94,0x4a,0x13,0xba,0xaf,0x6d,0xd5,0xc3,0x81,0x98,0x27,0xec,0xaf,0xf1,
+0x5b,0xdb,0xf4,0x3e,0x57,0x07,0xc9,0xcf,0x79,0x6a,0x46,0xae,0x36,0xb3,0x2e,0xb2,
+0xf4,0x55,0x1d,0x8c,0x60,0x2f,0x8a,0xbe,0xe3,0x10,0x20,0xba,0xe8,0xb7,0x7a,0x29,
+0xe7,0xd7,0x7f,0x82,0xf1,0xf6,0xe7,0xf8,0x52,0x83,0x59,0xe0,0xb2,0xfb,0x1a,0x2c,
+0x81,0x8e,0xd5,0x62,0x7d,0xb7,0xb9,0xd3,0x3a,0xa0,0x2c,0x1e,0x66,0xee,0x3c,0x32,
+0x7f,0x2d,0x56,0x2d,0x98,0xb0,0x4e,0x7f,0xae,0xad,0x5a,0xcc,0xcc,0x5d,0x86,0xd2,
+0x7f,0x58,0x55,0x5a,0x67,0x25,0xfd,0xf1,0x18,0x25,0xd5,0x14,0x0b,0xae,0xc9,0x09,
+0xe3,0xfa,0xd0,0x83,0x11,0x57,0x2c,0xf4,0x7a,0x44,0xfe,0xa5,0xe6,0xd5,0xab,0x69,
+0xf5,0xda,0xb5,0x82,0x0f,0x1c,0x64,0x72,0x87,0x06,0x44,0x05,0xc8,0x80,0x88,0x82,
+0x0e,0x6a,0xdb,0xe2,0x71,0x57,0x42,0xdc,0x56,0xfa,0x2d,0x8c,0x31,0x29,0x0e,0xf5,
+0xd1,0xbe,0x95,0x6e,0xc1,0xe5,0xdf,0x49,0x21,0xc0,0x1b,0x5d,0xef,0xaa,0x31,0x3e,
+0x75,0x3d,0x04,0x05,0x88,0xdc,0x0f,0xce,0x74,0xe6,0xd3,0x7f,0x14,0x14,0xfa,0x91,
+0x11,0x6c,0x87,0xdb,0xde,0xce,0x4e,0x3d,0xe8,0x85,0x4e,0xa0,0xcd,0x76,0xf4,0x15,
+0x83,0x7f,0xee,0x22,0x16,0xc1,0xb5,0x9b,0x8d,0xf1,0x33,0x1b,0x45,0x69,0x90,0x0e,
+0x7d,0xb7,0x58,0x45,0x72,0xb0,0xb5,0x63,0xec,0x45,0x7f,0x4c,0x50,0x64,0x13,0xf0,
+0xbd,0x37,0x4a,0x1e,0xfa,0x88,0x81,0x48,0x06,0xe0,0x62,0x23,0xdc,0x6c,0x7e,0x24,
+0x51,0x28,0xa6,0x1a,0x7b,0x59,0x8c,0xad,0xb1,0x87,0xb8,0x8b,0x11,0xc2,0x11,0x32,
+0x59,0x93,0xd9,0x84,0x97,0xfd,0xfa,0x64,0xd7,0x23,0x66,0x61,0xcc,0x47,0x62,0xa4,
+0x13,0x9e,0xbb,0xbd,0x03,0xb7,0x38,0x7e,0xc4,0xae,0x42,0x7c,0xea,0xac,0xd1,0x09,
+0x6e,0x12,0x6d,0x78,0x90,0xcc,0xf7,0x15,0xfa,0xc2,0x4d,0x62,0x95,0xae,0x70,0x93,
+0xc0,0x8e,0xde,0xcb,0x12,0xeb,0x74,0x87,0x9b,0x92,0x56,0xb5,0x0b,0x59,0x70,0xfd,
+0x26,0x44,0x40,0x7e,0x46,0x28,0xc5,0x97,0x5c,0xbf,0x59,0x5d,0x86,0xb3,0xf4,0xd7,
+0x72,0xb8,0x17,0x40,0x65,0xfb,0xc4,0xd1,0x03,0xd6,0x5f,0xd3,0xce,0x95,0xea,0xd6,
+0xf5,0xbb,0xd7,0x1f,0xde,0xdb,0x7d,0x78,0xfb,0x56,0x47,0x7d,0xbd,0xfd,0xf0,0xf6,
+0xed,0x77,0xa9,0x19,0xdd,0x3a,0xa7,0xf5,0x5b,0xc5,0xd6,0x05,0xf0,0x75,0x5b,0xd7,
+0x01,0x28,0x67,0x4f,0x40,0x03,0xc8,0x2c,0xfe,0x3d,0xb4,0x1c,0x0e,0x29,0xaf,0xf4,
+0xba,0xdd,0x99,0x38,0x97,0xb3,0xfb,0x33,0x10,0xa5,0x0e,0x4d,0x26,0xaa,0xbd,0x6e,
+0x8f,0x08,0xa8,0x39,0xbb,0x33,0x14,0xb2,0x9f,0x3f,0x97,0x59,0x29,0xc8,0xf9,0xf6,
+0x43,0xa7,0x71,0xce,0xf2,0x8c,0x47,0x51,0x9f,0x5b,0x40,0xbe,0xfe,0xf1,0x96,0x7d,
+0xe3,0x39,0xed,0x87,0x76,0xc7,0xbe,0x11,0x45,0x49,0x6a,0x45,0xb1,0x75,0x63,0xc2,
+0x10,0x95,0x68,0xcb,0xab,0x8f,0x27,0x20,0x75,0xdb,0x7f,0x06,0x93,0xd9,0x28,0x08,
+0xc5,0x56,0x4f,0x1b,0xbb,0xce,0x0f,0xe1,0xda,0xf0,0x60,0x75,0x73,0x92,0x4b,0x97,
+0x4c,0x5e,0x0f,0xbb,0x1a,0xc3,0x30,0x86,0x79,0x56,0x32,0x98,0xc8,0x79,0x1b,0xb9,
+0x8a,0x86,0x42,0x67,0x15,0xb4,0xdc,0x3b,0x3e,0x0e,0x66,0x1b,0xca,0xcb,0x69,0x24,
+0x5d,0xd8,0xbb,0xd3,0xcb,0x8b,0x18,0x69,0x84,0xa8,0xa2,0xbb,0x11,0x83,0x40,0xfa,
+0xa5,0xfc,0xc7,0x70,0xbd,0x72,0x64,0x46,0x38,0xd9,0x63,0x51,0x01,0x76,0x03,0x8a,
+0x2a,0xdb,0xf1,0x8a,0x45,0x38,0x77,0x63,0x73,0x36,0x45,0x81,0xd8,0x58,0x74,0x5c,
+0x53,0x09,0x59,0x25,0x66,0xd1,0x00,0xf9,0x92,0xe4,0x35,0x8a,0xcb,0xd2,0x3b,0x9b,
+0x59,0x64,0x15,0x24,0x64,0xea,0xec,0x5e,0x72,0x18,0x76,0xf4,0x7f,0x3e,0xbb,0xa9,
+0x69,0xda,0x04,0x5b,0xa1,0x66,0xb1,0x37,0x83,0xbf,0xe6,0x39,0x44,0xc0,0x71,0x2a,
+0x33,0x0d,0x84,0xe2,0xd9,0x3d,0x97,0xc0,0x84,0xc0,0xbf,0x84,0xfe,0xfe,0x95,0xf4,
+0x5f,0x2a,0x9b,0x19,0xc2,0x39,0x13,0xee,0x07,0xf4,0xb0,0xe5,0xc4,0x07,0xe9,0x87,
+0xac,0x2d,0x7b,0xfa,0xdf,0x71,0x36,0xa1,0xe9,0xfd,0x4b,0x68,0x04,0x5f,0x31,0xe2,
+0x03,0xd4,0x38,0xfd,0x4f,0xc8,0xcc,0x33,0xc8,0xca,0xaa,0xfe,0xa2,0xf9,0xb6,0xcf,
+0x99,0x6f,0x1c,0xcd,0xf5,0x8a,0x2c,0xf4,0x5a,0xee,0x00,0x3d,0xce,0x0f,0x83,0xbd,
+0xaa,0xfa,0xc5,0x5e,0x31,0x6e,0xb6,0x70,0xa6,0x14,0x8c,0x23,0xc4,0x71,0x94,0xe7,
+0x89,0xac,0xd7,0xe9,0x91,0xf5,0xe7,0x7a,0x6c,0x9d,0xd1,0xa3,0x56,0x90,0x41,0xea,
+0x37,0xa3,0xe8,0x83,0x00,0xf6,0xea,0xd0,0x4f,0x91,0x12,0xc5,0x71,0x57,0x29,0xbd,
+0x7d,0xf8,0x1b,0xeb,0x0b,0xb2,0x33,0x4f,0x40,0xa1,0x76,0xdf,0x3f,0x84,0x1a,0x5a,
+0x13,0x9f,0x9f,0x9d,0xb1,0x6c,0x0b,0x9a,0x91,0x9c,0x75,0xdf,0x8d,0xd2,0x60,0xff,
+0x39,0xf6,0x36,0x54,0x31,0x1a,0x69,0x69,0x6f,0x54,0x36,0xa7,0xd2,0xd6,0xd7,0xd0,
+0x76,0x31,0xe3,0x48,0xa2,0x07,0x06,0xaa,0x18,0x23,0x3a,0xbe,0xa0,0x7e,0x48,0x0f,
+0x83,0xf2,0xc1,0xfc,0xfc,0xf4,0xef,0x8c,0xc2,0x24,0xf1,0x1e,0x74,0x19,0x4f,0x5f,
+0xd6,0x15,0x2b,0x9f,0xd1,0xdd,0x1a,0x6c,0x5c,0xd5,0x93,0x82,0xb6,0x6d,0x74,0x5f,
+0x6c,0xba,0xd9,0x2e,0xad,0x15,0x63,0xd9,0xa5,0xa9,0x09,0xd3,0x99,0x92,0x8f,0x11,
+0x07,0x4d,0x2c,0xb5,0x86,0xd9,0x85,0xae,0xee,0x61,0x05,0x52,0xf8,0x30,0x6f,0xc2,
+0xde,0x0d,0xdd,0x19,0x6e,0xa4,0xae,0x52,0x62,0x52,0xa8,0xeb,0x07,0x3e,0xb7,0xd2,
+0x05,0x6a,0xb5,0xeb,0x93,0x62,0x08,0x30,0x0c,0xe0,0x0f,0x2f,0x51,0x81,0xaa,0x98,
+0x64,0xfa,0x90,0x67,0x05,0xa1,0x85,0x53,0x11,0x3c,0xcf,0x12,0x67,0x79,0xb6,0xb2,
+0x93,0x62,0x57,0x80,0x56,0x80,0x20,0xb5,0xab,0xbd,0x34,0x1e,0xee,0xc2,0xf7,0x3d,
+0x41,0x74,0x80,0x0e,0xa1,0x8c,0x8d,0xb6,0x14,0x9d,0xa9,0x2d,0xa5,0x70,0x1a,0x76,
+0xa3,0x02,0x45,0x52,0x51,0xaa,0x23,0x28,0x31,0xc0,0x49,0xaa,0x6b,0x57,0xb7,0xe3,
+0x1d,0x07,0xc5,0x7d,0xb7,0xd0,0x3c,0xf2,0x96,0x11,0x09,0x58,0xd2,0x87,0xa2,0xea,
+0xc9,0x3c,0x96,0x66,0x14,0xa6,0x0b,0x52,0x23,0xa2,0x14,0xe6,0x89,0x74,0x96,0xc2,
+0x7a,0x43,0xdf,0x8b,0xcd,0xa2,0x63,0x03,0x4a,0xab,0x0e,0x7f,0xba,0x05,0xca,0x2b,
+0x2e,0x19,0x8c,0xac,0x0e,0x69,0xe1,0x24,0x5f,0x57,0x59,0xd6,0x94,0xce,0x1b,0xac,
+0x45,0xe6,0xb8,0x0f,0xe1,0xd1,0x16,0x41,0x86,0xcd,0x80,0xab,0x5b,0x5a,0xa7,0xcb,
+0x57,0x07,0xcd,0x6b,0xd3,0xff,0x08,0x31,0xf4,0x11,0x14,0x78,0x10,0xa8,0x0a,0x1d,
+0xf9,0xc7,0xd3,0x5f,0xc1,0x8a,0xf1,0x6a,0xfa,0xfb,0xab,0x2b,0x28,0xbf,0x8a,0x68,
+0x52,0x4b,0x1c,0x49,0x2e,0x96,0x3b,0xf4,0x87,0x96,0xfc,0xac,0xf5,0xfd,0x7d,0x6f,
+0x32,0x4c,0xed,0x79,0x80,0xda,0x00,0xc7,0x4b,0xa8,0xa2,0xf6,0xb5,0x69,0xc1,0xb7,
+0x7d,0x75,0x05,0x0d,0x5d,0xbb,0x3a,0xb6,0x84,0xdb,0x5d,0x9b,0x24,0x57,0x83,0xa9,
+0xe8,0x20,0xec,0x58,0x3d,0x8c,0xcc,0x8f,0xbb,0xa8,0xf0,0x1f,0x30,0x8c,0xaf,0x14,
+0x27,0x58,0x60,0x97,0x8f,0xc1,0x30,0x10,0x92,0x62,0x9c,0xf9,0x1c,0x5f,0xf0,0x95,
+0xd6,0xaf,0xae,0x8c,0xaf,0xa9,0xc6,0x2e,0x17,0x39,0x61,0x06,0x3d,0x45,0xb5,0x75,
+0x01,0x43,0xc8,0x06,0x07,0x33,0xf8,0x59,0x87,0xc6,0x1c,0xaf,0x99,0x3a,0xeb,0x2b,
+0x76,0x30,0x44,0x1c,0x92,0xa8,0xc1,0x4c,0x26,0xad,0x34,0xfb,0x02,0x59,0x19,0xaa,
+0xa5,0x8e,0xff,0x46,0xa5,0x50,0x00,0x8a,0x5c,0x0e,0x8b,0x52,0x33,0xdd,0x0e,0x4b,
+0x34,0xea,0xed,0x90,0xe9,0x16,0xf3,0x96,0x1a,0x45,0x72,0xf2,0x6d,0x09,0xa6,0x20,
+0x3b,0x42,0xac,0xc0,0x03,0x30,0x30,0x50,0x25,0xd6,0x01,0x15,0x82,0x7d,0x0e,0x52,
+0xba,0xfe,0xd5,0x22,0xde,0x8a,0x03,0x2c,0x08,0x10,0xd8,0x81,0x32,0xa9,0xb4,0xec,
+0x16,0x83,0xbc,0xc6,0xb1,0x7f,0xf8,0x7a,0x1d,0x22,0xde,0x1b,0x4e,0x86,0xac,0xb9,
+0x5a,0xa9,0x39,0x64,0xbf,0xf7,0xe0,0x91,0x34,0x58,0x14,0x7f,0x93,0x71,0xb2,0xbb,
+0x60,0xc5,0xff,0x04,0x45,0x20,0x67,0xf2,0xdd,0x25,0xa0,0x8d,0x78,0x18,0x44,0x47,
+0xc0,0xa9,0x9c,0xb7,0x07,0x91,0xa7,0xac,0x3b,0x5b,0x05,0x4d,0x6f,0x5e,0x54,0x56,
+0x97,0xcb,0x55,0x18,0x0d,0xdd,0x99,0x07,0x5b,0x00,0xa5,0x84,0x6c,0xb9,0x76,0xd0,
+0xff,0x53,0x10,0xb3,0x1c,0xf3,0x8c,0x2c,0xf9,0xff,0xa2,0xf6,0x5a,0x49,0xd4,0x2e,
+0x40,0x51,0x51,0xdc,0x16,0x8a,0x8b,0x3a,0x48,0x51,0x74,0x2c,0x50,0x28,0x16,0x59,
+0x10,0x2e,0x24,0x72,0x73,0x22,0x2b,0x4b,0xdc,0x3c,0x9f,0x2a,0x00,0x88,0xaf,0x24,
+0x73,0x17,0x72,0x05,0xe0,0x64,0x94,0x45,0xae,0x98,0x17,0xce,0x25,0xae,0x40,0x15,
+0xe1,0x8a,0x79,0xb0,0x22,0x57,0x68,0xa8,0xef,0x45,0xac,0x17,0xd0,0x2b,0xea,0x5b,
+0xa6,0x0b,0xcc,0x88,0x76,0x23,0x1b,0x7f,0x08,0xe9,0x6e,0xda,0x46,0xf0,0xc9,0xac,
+0x80,0x37,0x45,0x17,0xee,0x36,0x93,0xf1,0xa6,0xa6,0x5f,0x16,0xf3,0x93,0x74,0x7f,
+0x63,0xb7,0xef,0xf7,0x70,0xa0,0xa7,0xe5,0xd6,0xec,0xb7,0x54,0x54,0x61,0x57,0x6a,
+0x68,0x93,0x5a,0x76,0xcf,0x86,0xdb,0x6d,0x25,0x44,0x00,0x0d,0x8e,0x03,0xf1,0x4d,
+0x54,0xba,0x9e,0x56,0xbc,0x2a,0xee,0x93,0xb4,0xae,0x6c,0x85,0xd7,0x9a,0x8d,0x56,
+0x1b,0x36,0x6f,0xfc,0x5a,0x43,0x0c,0xd8,0x56,0xe8,0x36,0x1b,0xcd,0xf5,0x4e,0xb3,
+0xd9,0x60,0x12,0x05,0xcc,0x58,0x6d,0xc1,0xc8,0xbd,0xec,0x3e,0x12,0x17,0x75,0x7d,
+0x3f,0x8e,0x46,0x37,0x75,0x53,0x95,0xb0,0xb6,0xd1,0xde,0x80,0xf5,0x1b,0xc5,0xaa,
+0x03,0x69,0xdc,0x38,0x60,0x0a,0xa6,0xc2,0x51,0x12,0xf8,0xb8,0x94,0x91,0xa8,0x1b,
+0x27,0xca,0xa6,0xb8,0x54,0xa9,0xc1,0x79,0xae,0xb5,0xc6,0xd0,0x3b,0x0c,0x0e,0x3c,
+0x18,0xb0,0xeb,0x8c,0x79,0xba,0x7e,0x00,0x0d,0x08,0x5a,0x2b,0x42,0x7d,0xee,0xc3,
+0x22,0x7d,0xef,0xd1,0x9d,0xdb,0x16,0x83,0x3e,0x97,0x16,0x81,0x8d,0x3c,0xda,0xd4,
+0x57,0x1e,0xc7,0x01,0x62,0x7e,0xd2,0xfa,0x9b,0xf1,0xe1,0x13,0xcc,0xe0,0x49,0x7d,
+0x05,0x47,0x03,0x63,0x85,0xb3,0x70,0xfb,0x66,0xef,0xae,0x44,0xdb,0x2a,0x8f,0x04,
+0x0c,0xdd,0x41,0x72,0x2f,0xda,0x63,0x8c,0x6d,0x70,0xff,0x51,0xa5,0xaa,0x4d,0xaf,
+0x56,0x7e,0x50,0xc1,0x05,0x0b,0x7d,0x10,0xe1,0x01,0x75,0x91,0xd5,0x16,0x47,0x19,
+0xc4,0xae,0x9d,0xfe,0x02,0xfa,0x22,0xd5,0x34,0xf1,0xae,0x30,0xc2,0x0c,0x9f,0xac,
+0xcb,0xe3,0xcd,0xc7,0x38,0xec,0xfc,0x11,0x19,0x5f,0xf3,0x20,0xb3,0xd4,0x94,0xa3,
+0x04,0x94,0x6b,0x44,0xa7,0x82,0xfd,0x7a,0xbc,0x79,0x04,0x03,0x3d,0xe2,0x7b,0x8b,
+0x47,0x0e,0x68,0xfc,0x74,0x7f,0xdc,0x82,0x69,0xa2,0xeb,0xb9,0x99,0x27,0x80,0x41,
+0xc1,0xdc,0xb6,0xd2,0xad,0xb4,0x13,0xf3,0xaa,0x19,0x01,0x2a,0x38,0xa0,0xef,0xda,
+0xcb,0x15,0xc9,0xb8,0x07,0xa5,0x16,0x06,0xca,0xe5,0xa6,0xca,0x94,0xbc,0x77,0xa2,
+0x49,0x8c,0xc8,0xdc,0x65,0x05,0x10,0x84,0x08,0x6b,0x62,0x92,0x95,0x52,0x19,0x4d,
+0xb4,0x20,0x0c,0x15,0x36,0x46,0x9b,0xa1,0xa6,0x12,0x78,0xa5,0x0e,0x0b,0x18,0x7f,
+0x7d,0x1c,0x8d,0x2b,0xd5,0x2d,0x44,0xa2,0x6d,0xd9,0x1d,0xc6,0xa3,0xd9,0x38,0x5a,
+0x14,0x3c,0x2f,0x09,0x5a,0xc5,0xe1,0xaa,0x62,0x06,0x5f,0xe5,0x20,0xa9,0xc4,0x03,
+0xbb,0xd8,0x00,0x33,0xb7,0x09,0x4c,0xc0,0x2e,0x43,0x68,0xf7,0xa8,0x89,0x03,0x0d,
+0x50,0xea,0x17,0x05,0xfe,0x94,0x42,0xae,0xa2,0x3a,0xec,0xb9,0xb7,0x0f,0xb1,0xc0,
+0x77,0xe1,0xe7,0xf0,0x61,0x05,0xa9,0xd8,0x8c,0x9b,0x2b,0x05,0xbd,0x95,0x91,0xda,
+0x84,0x12,0x29,0xf7,0xec,0x8e,0x82,0x7e,0x3a,0x00,0x67,0x94,0x8b,0xcb,0x38,0x77,
+0x03,0x55,0x7c,0x8e,0xd7,0xf8,0x84,0x93,0xd0,0xa1,0xb1,0x86,0xae,0x20,0xe7,0x41,
+0x49,0xe2,0x32,0x2a,0x06,0xc5,0x2a,0x66,0x4f,0x55,0x96,0x99,0x37,0x9d,0x2b,0x25,
+0x3e,0xa8,0x22,0x63,0x8e,0xfc,0x47,0xc9,0x23,0xef,0xd0,0xbf,0x1f,0xdf,0x87,0x47,
+0xeb,0x06,0x70,0x54,0xfd,0x46,0x88,0x0a,0xcc,0xe8,0xd5,0xae,0x3f,0x4c,0x7c,0xe3,
+0x31,0x93,0x35,0x41,0x94,0x31,0xf3,0x44,0x97,0x0d,0xdd,0xf7,0x1e,0xde,0x45,0xdc,
+0x38,0xef,0xd4,0x29,0x3f,0x1a,0xd2,0x08,0x83,0x05,0x21,0x9e,0x75,0x51,0x03,0xc7,
+0x60,0xd8,0xd9,0x25,0x7c,0x25,0x33,0xaa,0xbb,0xf6,0x61,0x90,0x04,0xe0,0x19,0x5c,
+0x02,0xeb,0x98,0x18,0xbb,0xa0,0xce,0x90,0x1a,0xae,0x85,0xeb,0x39,0x59,0x6b,0x7b,
+0x51,0xff,0x79,0xe9,0x04,0x09,0xe3,0x5a,0x80,0xe0,0xb8,0xa0,0xf7,0x01,0x0c,0x08,
+0x65,0x30,0x85,0x73,0x75,0xef,0x8e,0x86,0xf7,0x13,0xc1,0xf3,0xc2,0xb0,0xe6,0x73,
+0x97,0x30,0xdb,0x51,0x17,0xc6,0x3a,0x33,0xba,0x79,0x86,0x04,0x66,0x28,0xe4,0x9b,
+0xeb,0x73,0x64,0xb3,0x0e,0x3e,0x31,0x8d,0xdc,0x4f,0x07,0xa0,0x48,0x88,0x63,0x2c,
+0xe9,0xea,0x5c,0xb8,0xa2,0x21,0x87,0x6c,0xda,0x6a,0x25,0xb2,0x4b,0x31,0xa2,0xd4,
+0x02,0xdf,0x69,0x9d,0xee,0x11,0x75,0x16,0xb4,0x1d,0x38,0xc0,0x4c,0x4c,0xe3,0x6c,
+0xbc,0x16,0x64,0x63,0xdf,0xcd,0xc2,0xdb,0x01,0x29,0xa1,0x02,0x6e,0x16,0xa8,0x06,
+0xaf,0xfa,0x04,0xde,0x1b,0x4d,0xff,0x23,0x2f,0x46,0x98,0xd1,0xe3,0x68,0x6c,0x1c,
+0x21,0xd4,0x23,0xe8,0x17,0x7c,0x17,0xdb,0x01,0xa4,0x2c,0x04,0x6e,0x7a,0xc3,0xc7,
+0x46,0xe2,0x83,0x94,0x68,0x2c,0x7a,0x96,0x3e,0x0a,0xf6,0x86,0x38,0xb2,0x56,0x4f,
+0x84,0xac,0x30,0x29,0x1c,0xc0,0xb2,0x30,0x35,0x35,0x1d,0x15,0x84,0x6c,0xe2,0xdd,
+0xba,0xa5,0x36,0x8b,0x2b,0x1a,0x16,0x5d,0x29,0x60,0x75,0x31,0x4e,0xc1,0x81,0x59,
+0x54,0x91,0x4c,0xb6,0x78,0xde,0x4a,0x67,0x4d,0xd5,0x75,0xe1,0x4a,0xa1,0x9e,0x2a,
+0xdc,0x27,0xe6,0x9a,0x21,0x16,0x75,0xee,0x82,0x62,0x06,0x45,0xd7,0x6e,0x7e,0x45,
+0x91,0xa0,0x73,0xb7,0x16,0x33,0xd8,0x99,0x12,0x02,0x67,0x9d,0xd0,0x2e,0xa7,0x90,
+0x5c,0xe8,0xb9,0x55,0x02,0xc1,0x75,0xac,0x79,0x90,0xd5,0x12,0x48,0x7b,0x11,0x48,
+0xbb,0x04,0x82,0xcb,0x56,0xf3,0xad,0xac,0x11,0x44,0x19,0x41,0xd5,0x20,0x94,0x01,
+0x95,0xb9,0xca,0x48,0x99,0xe5,0x22,0xa9,0x72,0xf3,0x01,0x8b,0xd1,0x52,0x86,0x9a,
+0x85,0x55,0x99,0x99,0xa8,0x0c,0x56,0x90,0x48,0x2a,0x93,0x7d,0x70,0xc4,0x2c,0x1d,
+0x38,0x65,0x32,0x99,0x64,0x76,0x39,0x74,0x0c,0xfb,0x3e,0x33,0xa4,0xcf,0xfc,0xea,
+0x65,0x36,0x83,0x2c,0xfe,0x48,0x03,0xe8,0x38,0x28,0xd3,0xa6,0x8e,0x35,0x32,0x85,
+0x79,0x88,0x3b,0x9a,0x65,0xd9,0x51,0x5f,0x17,0xa9,0x80,0xa1,0x42,0x35,0x64,0xe8,
+0xa2,0xf9,0x80,0x1c,0xa9,0xab,0xb3,0x09,0x34,0x1b,0x2a,0x84,0xc6,0x55,0x16,0x89,
+0xdd,0x04,0x8c,0x2e,0xe9,0x0b,0x23,0x59,0xb0,0xb0,0xb9,0x50,0x82,0x7d,0x42,0xfa,
+0x45,0x38,0xc7,0x05,0xa0,0x21,0x52,0x5e,0x03,0xba,0xa5,0xa1,0x7f,0x78,0x01,0xa1,
+0x76,0xc2,0x39,0x49,0x00,0xec,0x64,0x18,0x00,0xe1,0x99,0x39,0xe3,0x12,0x8d,0x89,
+0xb7,0xa6,0xfe,0xa1,0x22,0xaf,0xc5,0x6e,0x76,0x06,0xb4,0x59,0x99,0xac,0x98,0x78,
+0xcf,0x12,0x68,0xf9,0x6c,0x81,0x33,0x03,0x58,0x94,0x3e,0xe6,0xb6,0x48,0xd6,0xd0,
+0x4f,0x28,0xd7,0xb0,0x7c,0x59,0x46,0x26,0xfa,0xcc,0x2e,0x69,0x96,0x53,0x20,0x95,
+0xf4,0x5a,0x58,0x54,0x6a,0x64,0x66,0x08,0x6a,0x32,0x0b,0xab,0xf1,0xc4,0x32,0x49,
+0x7b,0x05,0x1e,0x45,0x8a,0x73,0x85,0x6e,0x96,0x85,0x58,0xa0,0x6d,0x26,0x99,0x9d,
+0xaa,0x00,0x68,0x83,0x1e,0x26,0x99,0x3d,0x13,0x97,0x6b,0x8a,0x8b,0xd9,0x1a,0x81,
+0x85,0x9e,0x30,0x69,0xa7,0x10,0xc6,0xe9,0x94,0x62,0xce,0x9c,0x42,0x78,0x9c,0xc3,
+0x6e,0x68,0x29,0x65,0x00,0x3d,0x7a,0x43,0x45,0x46,0x37,0xe8,0x09,0xa1,0xe0,0xdb,
+0x78,0x0b,0x4a,0x1e,0x80,0x92,0x9d,0x35,0xd7,0x98,0x5f,0xdb,0xb4,0x5f,0x34,0x58,
+0xc2,0xb5,0x44,0xd7,0x9d,0xde,0x44,0xe5,0xe6,0x82,0x26,0x47,0xd7,0x3f,0x3e,0x7e,
+0x71,0xe2,0x14,0xb3,0xe0,0xc9,0x1f,0xc1,0x12,0x66,0xeb,0xe0,0xd7,0xa5,0x2c,0xae,
+0x00,0xa6,0x0a,0x43,0xc5,0x1a,0x66,0xae,0xda,0xb5,0xcd,0xcd,0x59,0x65,0xbf,0x60,
+0x97,0x2d,0x5c,0x78,0xa0,0xda,0x3e,0x95,0x4b,0x1f,0x9f,0x43,0xc3,0x7f,0xa9,0x63,
+0xa8,0x70,0xd1,0x5a,0xf4,0x66,0xf1,0x0c,0x98,0xd3,0x97,0x58,0x3f,0xfd,0x2a,0xce,
+0x41,0xe1,0xb2,0x4d,0x07,0x03,0x4c,0x98,0xa2,0x20,0x43,0x07,0xd4,0xc1,0x3d,0x0d,
+0xa7,0xd6,0xac,0x76,0xa9,0x27,0x99,0xbb,0x1e,0xe2,0x4c,0xc3,0x94,0x75,0xfc,0x00,
+0x22,0xef,0x66,0x6f,0x71,0xcc,0xdd,0xdf,0x80,0x6f,0x55,0xae,0xf4,0xcd,0x15,0x94,
+0xbc,0x20,0x3c,0x39,0xf2,0xf5,0x85,0xfb,0xfb,0xfb,0x67,0xa3,0xf3,0x7c,0xdc,0x79,
+0xfb,0xb0,0x40,0x23,0xd2,0xb8,0x88,0x4f,0xc9,0x03,0xf6,0xbe,0x23,0xfe,0xc4,0x90,
+0x0d,0x7f,0x1f,0xee,0xbc,0xc3,0xe5,0xa3,0x43,0xd2,0xbe,0x37,0xa4,0xd2,0x1c,0x30,
+0xe6,0xe4,0xbf,0x77,0xac,0x32,0x2e,0xee,0x6d,0x9f,0x2f,0x74,0xe0,0x58,0x23,0xd1,
+0x6d,0x08,0x31,0xd8,0x8f,0xe6,0x75,0x16,0xb0,0xdc,0x04,0xb7,0x11,0xe5,0xea,0x43,
+0xee,0xf3,0x44,0xf4,0x87,0x64,0x92,0xb1,0xe9,0x8d,0xe7,0xa5,0x95,0x62,0xa9,0xe4,
+0xb1,0x10,0x8a,0xaf,0x96,0x26,0xc5,0x62,0x9d,0x4b,0x80,0xfd,0x23,0x7d,0x94,0x9e,
+0x69,0x21,0xcb,0x97,0x2e,0xbc,0x9e,0x7a,0x2d,0xa1,0xdc,0x89,0xca,0x25,0x00,0x36,
+0xba,0x90,0x71,0x7e,0xc5,0x4e,0x24,0x8f,0x85,0xa5,0xc0,0x54,0xc8,0x33,0x49,0xb3,
+0xc0,0x84,0xae,0x15,0xe4,0x52,0xf2,0x3c,0xb9,0xab,0x03,0xe3,0x09,0x31,0x13,0xaa,
+0x8a,0xca,0x3a,0x87,0x85,0x5c,0x9d,0x6c,0x98,0x33,0x9d,0x97,0xca,0x0c,0xf0,0x22,
+0x4c,0x11,0x50,0x61,0xeb,0x5f,0xa7,0x48,0x33,0xa3,0x82,0x96,0xef,0x87,0x75,0x39,
+0x7d,0x5e,0xbd,0xb2,0xbe,0x09,0x73,0x0a,0x30,0x00,0x0b,0x06,0xe6,0xad,0xb6,0xe3,
+0xb2,0x5b,0x4a,0xa2,0x0f,0x10,0xe5,0x3b,0xa9,0x31,0x54,0x01,0x40,0x51,0x28,0xe7,
+0xa5,0x62,0xd8,0xe2,0xb9,0x0d,0xb8,0xa2,0xc2,0xcc,0xb7,0xbf,0xa5,0xef,0xab,0x76,
+0x6c,0x71,0x7f,0x9d,0x28,0x23,0x84,0x3c,0x9d,0xc1,0x58,0x1f,0xbc,0xf0,0xc2,0x8a,
+0x0c,0xcc,0x31,0x2f,0xbd,0x30,0x9d,0x85,0xcf,0x64,0xcf,0xbe,0x30,0x37,0x8f,0x71,
+0x71,0x10,0x89,0xc2,0x1c,0x09,0x48,0x31,0xaf,0xc1,0x30,0x83,0x62,0x0d,0x0f,0xc3,
+0x48,0x6b,0x26,0x5a,0x41,0x35,0x68,0x52,0x28,0x02,0x10,0x39,0x84,0x4f,0xc5,0x98,
+0x3a,0x4c,0xef,0x32,0x03,0xc5,0xea,0xf5,0x18,0x96,0xa8,0x2f,0x66,0xdd,0x50,0x31,
+0x1f,0x92,0xa9,0xbf,0x75,0x43,0x78,0x7b,0xe6,0x26,0xdc,0xa3,0x37,0x55,0x24,0xb8,
+0x93,0xb9,0xe7,0x5d,0xfb,0xcf,0xf6,0xf7,0xd7,0x1a,0x6b,0x0d,0x38,0xb3,0x25,0x70,
+0xe9,0xaf,0x6e,0xdf,0xbd,0x7b,0xff,0x7d,0x66,0x37,0xbc,0x7e,0x1b,0x9e,0x40,0x95,
+0x2d,0x51,0x4c,0xc8,0x5d,0x5d,0xed,0xf5,0x1a,0x00,0xa6,0xab,0xd1,0x29,0x78,0xa8,
+0xdc,0x6d,0x7b,0xb0,0x0b,0x0d,0xc6,0x1b,0xed,0xe2,0x4e,0xee,0x60,0x17,0xa6,0xac,
+0x30,0x55,0x9f,0xe4,0x54,0x19,0xb8,0xbd,0xe3,0x90,0x2e,0x95,0x7f,0xc2,0xdd,0x7e,
+0x11,0xf4,0x3b,0x80,0x94,0xe4,0x21,0x40,0xc5,0x28,0xaa,0x42,0xac,0xe4,0x98,0xd9,
+0xd1,0x06,0xd7,0x13,0xa7,0x08,0xb9,0x7f,0x21,0x50,0xac,0x01,0xdc,0xc0,0xaf,0x01,
+0xda,0xcb,0x06,0x80,0x23,0xf0,0x79,0xdd,0x67,0x70,0xd6,0x54,0xa2,0xa8,0x16,0xc3,
+0x62,0xed,0x2e,0xd4,0x39,0xdf,0x04,0xca,0x5b,0x94,0x10,0x96,0xc5,0x0d,0xaa,0x40,
+0xdb,0x0c,0x34,0x1b,0xa3,0x8e,0x1a,0xcc,0x70,0xa4,0x10,0xad,0x71,0x39,0x07,0x85,
+0x20,0x3a,0x6d,0xd1,0x73,0x5f,0x5c,0x0f,0xfb,0x71,0x84,0x25,0x28,0xd8,0x69,0xf4,
+0x85,0x9e,0x73,0x2c,0x88,0xba,0xd2,0x0a,0x6c,0x10,0xce,0x8d,0xa1,0xd7,0xfb,0xe0,
+0x06,0x22,0x21,0x9e,0xbf,0x5e,0x1b,0x79,0x3d,0x69,0x06,0xa6,0xc5,0xd7,0xab,0x1f,
+0x3c,0x18,0xc0,0x45,0x7d,0x1c,0xe0,0xc5,0x19,0xfc,0x88,0xfa,0xd2,0x0a,0x6c,0x41,
+0xb1,0xf7,0x7a,0xed,0x48,0x15,0xeb,0x5e,0x10,0x06,0xd2,0xc2,0xfb,0xf2,0x1c,0x54,
+0xf2,0x7a,0x6d,0xdc,0xb9,0xad,0x0c,0xa4,0xd2,0x82,0x17,0x2e,0xc2,0x84,0xc1,0x78,
+0x5d,0xe3,0xae,0x82,0xf0,0xae,0x2c,0x2f,0xc7,0x45,0x29,0x5b,0xcc,0xad,0x05,0x30,
+0x19,0x6a,0x09,0x42,0x8f,0x16,0x61,0xd4,0x88,0xa8,0x1e,0x8f,0x87,0xcf,0xf1,0xa6,
+0x8f,0xb2,0x1b,0x88,0xad,0x52,0xe2,0x50,0x02,0x75,0x15,0xeb,0x46,0xf4,0xac,0x62,
+0x0b,0x4c,0xcd,0xc0,0xd8,0xce,0x0b,0xa8,0xbf,0x09,0x3c,0xb9,0x88,0xec,0xf9,0x35,
+0x94,0x38,0x5e,0xd2,0xa5,0x7d,0x16,0xd7,0x17,0x9c,0xec,0x62,0x6f,0xf1,0xdd,0x01,
+0xad,0x83,0xa8,0xbb,0xe5,0xbc,0x01,0x8c,0x2b,0xc2,0xa7,0xbf,0xa0,0x1d,0x37,0x7f,
+0x88,0xe0,0xe5,0xf4,0x0f,0xea,0x02,0xec,0xec,0xe5,0x5f,0x04,0xad,0x00,0x94,0x31,
+0x2c,0xbf,0x45,0x98,0x80,0x7a,0xef,0x00,0x17,0x83,0x61,0xf9,0xfd,0xa4,0x6e,0x4d,
+0xff,0xb3,0x34,0x02,0x35,0x07,0x5a,0x0f,0x87,0xa0,0x9e,0x96,0xf8,0x2d,0xbd,0xf8,
+0xec,0x4e,0x45,0x49,0xff,0x92,0x5a,0x10,0xdf,0x9a,0xf8,0x9c,0x2f,0x53,0xbc,0x34,
+0x5a,0x11,0xa0,0x9b,0x0d,0xbe,0x64,0xc1,0xa7,0x29,0x50,0xa1,0x6e,0x3b,0x7b,0x07,
+0x12,0x92,0xd9,0xa1,0x60,0x53,0xb2,0x8a,0x9e,0x66,0x93,0xb7,0xba,0xba,0x0a,0x49,
+0x13,0x0f,0x3b,0xd8,0x84,0xe5,0x1d,0x06,0xa5,0x9b,0x24,0x83,0xe8,0xa8,0xa3,0x37,
+0x25,0xa8,0x2e,0x46,0xfb,0xc7,0x65,0x4e,0x1c,0x59,0xae,0xb6,0x60,0xd7,0x54,0x81,
+0x3f,0xbb,0xea,0xb2,0x3f,0xcd,0xb7,0x73,0x28,0x2e,0x87,0x06,0x9d,0x87,0x60,0xcc,
+0xea,0xf3,0xd3,0x4f,0xa7,0xbf,0x43,0x64,0x0f,0xee,0x7e,0x43,0x15,0x55,0xf6,0x70,
+0x4c,0x80,0x57,0x4a,0xb8,0x0e,0xbc,0xed,0x8d,0xcb,0x28,0xc4,0x0c,0xde,0x73,0xc9,
+0xa7,0xe4,0x43,0xf8,0xae,0xae,0xc1,0xf0,0x55,0x98,0xd2,0xfe,0xfe,0xbe,0x8d,0x01,
+0xde,0xfa,0xab,0x77,0x77,0xdf,0xbf,0x7d,0xc3,0xd5,0xbf,0x79,0x1e,0xe8,0xea,0xef,
+0xba,0x58,0x85,0xdd,0x17,0xd0,0x76,0x3a,0x99,0x81,0x6d,0xd6,0x58,0xbc,0x95,0x09,
+0x02,0xb9,0x91,0x00,0x83,0xe9,0x0b,0xcf,0xf5,0x8e,0x8f,0x97,0x9a,0xb0,0x01,0xcc,
+0x02,0xc3,0x0a,0x86,0xb7,0xb0,0xaa,0x27,0x39,0xb7,0xe8,0x6b,0x0c,0x00,0x4d,0x53,
+0xaf,0x37,0x90,0x1e,0xb1,0x17,0x86,0xb0,0xa1,0xe3,0x7a,0xc3,0x89,0xa3,0xec,0x5d,
+0x79,0xf7,0x2a,0x5d,0x32,0x57,0x9f,0x3b,0x82,0x05,0xf0,0xe7,0x0c,0xa2,0xef,0x2f,
+0x1c,0xc4,0xad,0xfb,0xf7,0xe0,0x8e,0xce,0x27,0x6a,0x9e,0xa7,0xc3,0x5d,0x06,0x1c,
+0xa0,0xf4,0xfa,0xcb,0xd6,0x85,0x00,0x27,0x98,0x04,0x7d,0xbc,0x4a,0x86,0x67,0x21,
+0xd4,0x27,0xd4,0xb4,0x24,0xee,0x69,0x8b,0x64,0x15,0x48,0x61,0x70,0x02,0x76,0xb9,
+0x5b,0x2a,0xac,0x45,0x20,0xcb,0x59,0x45,0xb5,0x44,0xcb,0x56,0x18,0x5e,0xe4,0x41,
+0x3c,0x39,0x7c,0xe3,0x8e,0x11,0x1f,0x0a,0x61,0x5b,0xb8,0x98,0x30,0x7e,0x10,0xe3,
+0xb9,0x3b,0x78,0x78,0xe0,0x01,0x92,0xc6,0x66,0xf2,0x8a,0xad,0x41,0x63,0xf4,0xc2,
+0x9e,0x3f,0xbc,0x31,0xd9,0x43,0xf8,0x0e,0x6e,0x39,0xb1,0x91,0x13,0x07,0x03,0x7e,
+0x2c,0xc3,0x2e,0xcd,0x91,0xa1,0x1a,0xa9,0x8b,0x39,0xf6,0x8f,0x76,0x05,0xe1,0x75,
+0xc1,0x03,0xce,0x3d,0x66,0x96,0xc6,0x1d,0x05,0xc7,0x1a,0x62,0x8f,0xa0,0x79,0xf3,
+0x5c,0x0c,0x65,0x8c,0x47,0x33,0xec,0x47,0xda,0x0e,0x0a,0x1f,0x17,0xa4,0x8d,0xa1,
+0x29,0xc5,0x23,0xee,0x0b,0xc8,0x94,0x42,0x6f,0xf9,0x23,0x69,0xca,0x60,0x83,0x97,
+0xd2,0xba,0xe6,0x18,0x95,0x85,0xb6,0xd3,0x6d,0x56,0x51,0x4e,0x95,0x5b,0x50,0x0e,
+0xc4,0xbd,0xf1,0x18,0xaa,0x4d,0x25,0xca,0xdd,0x21,0xcb,0xad,0xf6,0x9b,0xe1,0x9b,
+0xeb,0x0d,0xfe,0xe3,0x3d,0x4d,0xf8,0x5b,0x22,0x3c,0xcb,0xf1,0xf6,0xbd,0xc7,0xca,
+0xcb,0x46,0x87,0x49,0x46,0xcb,0x3d,0x89,0xed,0x73,0xe1,0x70,0xe1,0xc1,0x32,0xa4,
+0xe3,0xef,0xbd,0x87,0x77,0xf0,0x3c,0x15,0x9e,0xdb,0xc0,0xe0,0x61,0xc6,0x5f,0xae,
+0xe0,0x19,0x8e,0xae,0xe5,0x3f,0x1b,0x07,0x70,0x36,0x00,0x2a,0xc1,0xc3,0x07,0xc8,
+0xf5,0x98,0xcb,0x3b,0x26,0xc8,0xf2,0x54,0x56,0xc0,0x2c,0x44,0xa8,0x7b,0x41,0x88,
+0xcc,0x40,0x65,0x22,0x16,0xb8,0x6b,0x25,0x3e,0xbc,0xd0,0x3e,0xe2,0x2f,0xf9,0x06,
+0x08,0x70,0x5d,0x98,0x77,0xc1,0xcb,0x58,0x7a,0x66,0x4f,0x06,0xa6,0xa3,0xc9,0x56,
+0xba,0x4f,0x92,0x95,0x03,0xbe,0xf8,0xd6,0xe8,0x32,0x24,0x42,0x62,0xf9,0x61,0xbd,
+0xe5,0xcd,0x59,0xa0,0x9a,0x59,0x3c,0x6b,0x28,0x8f,0x9e,0xcc,0x25,0x73,0xb9,0x29,
+0x67,0x66,0x79,0x4e,0xfa,0xd0,0x6c,0xdc,0x98,0xcb,0x4d,0x58,0x7a,0x54,0xd8,0x5b,
+0x35,0x7f,0x3f,0x6a,0x32,0x1c,0x9e,0x40,0x76,0x0d,0x0b,0x43,0x55,0xde,0x3d,0xd0,
+0x82,0x5a,0x41,0xa2,0x1c,0xa4,0x80,0x25,0x59,0x8c,0xce,0x4a,0x5a,0x40,0x51,0xaa,
+0xb0,0x11,0x96,0x50,0x14,0x4a,0x66,0x01,0xbb,0x8f,0x07,0x13,0xc7,0x6a,0x34,0x6b,
+0x7f,0xe1,0x85,0xb5,0x2b,0x0d,0xab,0xd1,0xe8,0xf0,0x5f,0xd3,0xc2,0xe2,0x01,0x73,
+0x39,0x09,0xbd,0x97,0x06,0x43,0x50,0xba,0xa1,0x28,0x26,0x21,0xa4,0x26,0xf2,0x5c,
+0x61,0x69,0xc0,0xda,0x9c,0x2e,0xe1,0x81,0x62,0x47,0x48,0xf1,0x16,0xe1,0xc0,0x4b,
+0xee,0x1f,0x85,0x64,0x1a,0x18,0xe7,0x9f,0xc3,0x4b,0x06,0xe7,0x27,0x8d,0x0a,0x98,
+0x09,0x7f,0xb9,0xf4,0xaf,0x63,0x9d,0xde,0x28,0xb4,0x64,0xf8,0xfd,0xbc,0xe7,0x28,
+0x73,0x51,0x5a,0x7f,0xec,0xed,0x15,0x9e,0x8c,0xc1,0x12,0x9b,0x97,0x2a,0xe1,0x05,
+0xa8,0xbe,0x90,0x83,0x3f,0x5c,0xb1,0x0a,0x8d,0x09,0x58,0x25,0x4f,0x28,0x4b,0xcc,
+0x9e,0x78,0x0c,0x10,0x1b,0xd2,0xf7,0x51,0x5a,0x48,0x1d,0x1f,0x9b,0xa6,0x70,0x54,
+0x36,0x66,0x9b,0x70,0xd7,0xe3,0x35,0x2e,0x30,0x04,0x80,0xa3,0x3c,0x75,0x06,0x30,
+0xf4,0x16,0xb2,0x27,0x00,0xf9,0x35,0x03,0xc4,0x13,0xe5,0x70,0x9b,0x3e,0x10,0xe0,
+0x01,0x06,0x0a,0x48,0x18,0x42,0x55,0x98,0x53,0x3d,0xc9,0x64,0x11,0x80,0x5c,0xf4,
+0x4f,0x51,0x86,0x5b,0xd4,0xe2,0x59,0x79,0xa1,0x03,0x2d,0x3a,0xa1,0x90,0x8e,0x8f,
+0x37,0x30,0x73,0x6f,0x83,0x5a,0x07,0xdf,0xec,0x31,0x75,0xae,0x18,0x9e,0x5f,0x31,
+0x0b,0x28,0xc2,0x05,0xe4,0x6f,0xd2,0x0a,0x33,0xa0,0x77,0x93,0x41,0x84,0xc2,0x0d,
+0xa2,0x97,0xb8,0xe2,0x39,0x94,0x1e,0x93,0x71,0xbe,0x42,0x7a,0xa1,0xe5,0xae,0x07,
+0x9d,0x81,0x1e,0x57,0xf9,0x46,0x1c,0x1d,0xe1,0xd8,0xfd,0x68,0x32,0xa6,0x6d,0x1c,
+0x8c,0x9f,0x79,0xf4,0x19,0xf7,0x19,0xba,0x90,0x78,0xf2,0xb6,0x68,0x82,0x18,0xa5,
+0x2e,0x23,0x3e,0x71,0xdd,0x24,0x41,0xd8,0xbd,0x5f,0x17,0x77,0xc5,0x23,0x7a,0x38,
+0x1f,0x0d,0x7c,0x90,0xb9,0x14,0xe0,0x08,0x07,0x40,0x37,0xe4,0xa3,0x43,0xfd,0xbe,
+0x76,0x2f,0x3a,0xf3,0xae,0x52,0x63,0xb8,0xf2,0xd1,0x49,0xb0,0xed,0xef,0x74,0x7d,
+0x36,0x8d,0x9d,0xdf,0xab,0x30,0x49,0x73,0xd2,0x89,0x33,0x37,0xbc,0xe2,0x5c,0x14,
+0x9e,0x97,0x2a,0x4b,0x19,0x67,0x81,0xd7,0xf4,0x06,0xc2,0xd7,0x4f,0xb1,0xb9,0x2e,
+0x28,0x49,0x6e,0x3c,0x7f,0xec,0x1d,0xf0,0x9d,0x0e,0x3c,0x89,0x39,0x81,0x38,0xd8,
+0x0f,0x42,0x3c,0x51,0x98,0x49,0xcf,0x4c,0x16,0x14,0xab,0xcf,0x6e,0xd0,0xe0,0x85,
+0xac,0xe9,0xc2,0x8e,0x0c,0x7e,0x20,0x1d,0xe4,0x83,0xd4,0x37,0x0f,0xe7,0x1e,0xb5,
+0x74,0x46,0xce,0x21,0xee,0xf7,0x91,0x8a,0xc2,0x1d,0x67,0x1f,0x9f,0xb2,0xb7,0xec,
+0x25,0xe0,0x33,0x67,0x80,0xad,0x10,0x49,0x38,0x48,0xd3,0xe8,0x1d,0x0f,0xb7,0x20,
+0x8c,0xc9,0xa3,0xda,0x1d,0xab,0x22,0xd9,0xde,0xde,0x42,0x1c,0xc4,0xbf,0x99,0xe0,
+0x0e,0x82,0x96,0xd8,0xa8,0x79,0x58,0xe0,0x11,0xf0,0xe9,0x84,0x5d,0xf0,0x48,0xaa,
+0x28,0x05,0x6d,0xf3,0xba,0xce,0x18,0x32,0x61,0x72,0x7c,0x4c,0x02,0x54,0x6f,0x92,
+0x72,0x03,0x3b,0xe0,0x2a,0xb8,0xfb,0xdb,0x07,0x3b,0xdd,0x03,0xac,0x03,0x68,0x23,
+0x62,0x38,0x07,0x44,0xb9,0x8d,0x60,0x80,0x99,0xf1,0xc0,0x93,0x3a,0x52,0x79,0x32,
+0x3c,0x24,0xe1,0xa7,0xc5,0x40,0x2f,0x5d,0x1a,0xb8,0x2e,0x6c,0x76,0xa8,0x3b,0x42,
+0x16,0x3c,0x84,0xb0,0x45,0xee,0xc2,0xcf,0x1f,0xc1,0x71,0x0d,0x8e,0x8e,0x9f,0xbf,
+0x48,0x50,0xef,0x8d,0x0a,0x82,0x79,0xa1,0x3c,0x23,0x66,0x02,0xfe,0xca,0x13,0x5c,
+0xc6,0xa8,0xf4,0x5c,0x80,0x08,0x4d,0xa1,0x9d,0x9b,0x74,0x3a,0x56,0xf0,0xe2,0xa0,
+0x30,0xac,0x0f,0xaa,0x66,0xe4,0x85,0xcf,0x2e,0x54,0x11,0xde,0xc0,0x54,0x45,0x0f,
+0x10,0xfe,0x2a,0x4f,0x71,0x1d,0xd6,0x35,0x5f,0xb9,0x7d,0xb6,0xa4,0x48,0x0f,0x2d,
+0x88,0xf9,0xa2,0xe0,0xa1,0x2f,0x5c,0x28,0xb3,0x32,0x19,0x81,0x45,0xc2,0xad,0x49,
+0xa8,0xa8,0x37,0xe9,0x1c,0xf6,0xfb,0x95,0xd0,0x21,0xdc,0xc9,0x49,0x25,0x82,0x6e,
+0x55,0x3d,0xc1,0x7d,0x12,0x5c,0xc0,0xe4,0xb8,0xf5,0x74,0x86,0x55,0xca,0x73,0x35,
+0x15,0x7c,0x6f,0x55,0x70,0xff,0xa3,0x8f,0x30,0x73,0xb9,0x78,0x42,0x71,0x74,0x53,
+0xdd,0x7a,0x44,0x43,0x7d,0x6a,0x1f,0xa0,0x9e,0x45,0x73,0x2a,0x96,0xcc,0x4c,0x09,
+0x2b,0x69,0x26,0x34,0xac,0x76,0x96,0xd0,0x3e,0xae,0x9e,0x40,0x55,0xca,0x5a,0x2a,
+0x8c,0xa6,0x87,0x6b,0x83,0x05,0x4c,0x15,0x5b,0x25,0x54,0x5e,0xac,0xb0,0x55,0x68,
+0x1a,0x45,0x87,0x46,0xc2,0xe1,0xa8,0xa3,0xf4,0x9b,0xbd,0xc2,0x19,0xcd,0xdc,0x81,
+0x86,0x8c,0x61,0x53,0x29,0x1c,0xf2,0xfb,0xb8,0x5f,0x5c,0x4d,0x07,0x90,0x19,0x16,
+0x99,0xf5,0x36,0x5f,0xe7,0xaa,0xd8,0xef,0x46,0x16,0x2c,0x29,0xbc,0x20,0x6e,0x49,
+0x30,0x0c,0x3c,0xb7,0x56,0x0a,0x69,0xe4,0xa7,0x56,0xd0,0xb7,0xf6,0xf1,0xec,0x45,
+0x1f,0xe1,0x1b,0xac,0x2d,0xbb,0x31,0xa3,0x81,0x72,0x5e,0x05,0x47,0x0a,0x7a,0xc8,
+0x93,0x70,0x58,0x78,0x7b,0x38,0x21,0xe3,0x9e,0x8c,0x3d,0xc1,0x53,0x2f,0x08,0x14,
+0x32,0xbb,0xee,0xa2,0x4e,0x35,0xb0,0x05,0x6b,0xab,0xaf,0xba,0x91,0x20,0xe0,0x81,
+0xaf,0x7b,0x67,0xa7,0x5a,0x1c,0x4b,0x8c,0x4b,0xa9,0x53,0x2d,0x06,0x70,0x7a,0xa3,
+0xc2,0x51,0x20,0x80,0x02,0xff,0xf2,0x3d,0x5a,0xad,0x6a,0xb9,0xb1,0x22,0xe6,0x00,
+0x5c,0xa1,0x58,0x17,0xf2,0x30,0x29,0xee,0x3b,0xa0,0x17,0x82,0xe3,0x0e,0x6e,0x91,
+0x08,0xf0,0x04,0xb1,0x59,0xcc,0x12,0x31,0x10,0xa3,0xa0,0xd5,0xe2,0xda,0x75,0xc9,
+0x22,0x33,0xab,0x0c,0xee,0x2a,0x51,0x7b,0xce,0x39,0x73,0x08,0x29,0x4c,0xc1,0x82,
+0x02,0x7b,0x39,0xb5,0x20,0xdb,0xfa,0x12,0x1e,0x6e,0x81,0xa5,0xa2,0x5e,0x80,0xdd,
+0xaf,0x8f,0x18,0x8d,0x74,0x40,0xfc,0xd4,0x2d,0xb1,0x57,0xf1,0xd3,0x22,0xfb,0x5a,
+0x9e,0x01,0x0e,0xb8,0x5a,0x66,0x1f,0xcb,0x46,0x8f,0x08,0x95,0xa4,0x24,0x60,0x78,
+0xd7,0xd8,0x1c,0xe6,0x62,0x07,0x03,0x85,0xe7,0x23,0xdf,0x58,0x0d,0x36,0xa8,0x8e,
+0xa6,0x5a,0x27,0x86,0x8c,0x0a,0x67,0x14,0x7b,0x6a,0x9a,0xd0,0xd2,0x9d,0x02,0xca,
+0x72,0xfc,0xe7,0x77,0xb7,0x15,0x01,0xaa,0x15,0x40,0x2b,0x9a,0x1f,0x11,0x61,0x02,
+0x8d,0x9f,0x4f,0xd6,0x28,0x06,0xc3,0xd3,0xa6,0x65,0x56,0x28,0x16,0x42,0x1e,0x14,
+0xc5,0xc6,0x89,0xba,0x53,0xa2,0x64,0x63,0xde,0x25,0x44,0x92,0x68,0xf4,0x7c,0x8b,
+0x18,0x8f,0x92,0x81,0x62,0xe0,0x5b,0x3b,0xda,0x7d,0x0c,0x6a,0x56,0x14,0x1c,0xf0,
+0xe4,0x16,0x98,0x2b,0x0c,0x0e,0x32,0xcd,0x56,0xc6,0xfd,0xd2,0x33,0xbb,0xa4,0xa1,
+0xf5,0xd4,0x65,0x56,0x49,0xf3,0xec,0xc0,0x19,0xa6,0xa9,0x32,0xdb,0x6d,0x80,0x22,
+0x75,0x05,0x7b,0xa1,0xc2,0x69,0xd6,0x42,0x69,0x0d,0x19,0xd6,0x0b,0xa3,0xe6,0x33,
+0xd0,0x1c,0x37,0x47,0x2d,0x32,0x7b,0xd1,0xd0,0x41,0xca,0x9e,0x1b,0x2f,0x1a,0x7a,
+0x24,0x43,0x8f,0x76,0xba,0x91,0x92,0xfe,0x64,0x53,0x6f,0x3b,0x42,0x98,0x66,0xae,
+0x30,0x73,0xd8,0x2f,0x98,0xc9,0x93,0x00,0x1e,0x93,0x49,0xd1,0x95,0x57,0xff,0xeb,
+0x28,0xc0,0xc5,0x77,0xa2,0x41,0xae,0x82,0x9f,0x04,0x10,0xe7,0x01,0x79,0xc5,0x91,
+0x27,0xc3,0x08,0x67,0x82,0x38,0x4c,0x3d,0xbc,0x31,0x88,0x29,0xe4,0x68,0x05,0xd7,
+0x70,0x62,0x78,0x6c,0x90,0xfa,0x2b,0xdf,0x05,0x3f,0x5f,0x27,0x2a,0xe8,0x38,0xbe,
+0x83,0x6d,0x25,0x18,0x15,0x10,0x21,0x11,0x30,0x3a,0x54,0x30,0xd3,0xbb,0xea,0x04,
+0x32,0x38,0xc7,0x89,0x13,0xa9,0x8a,0x71,0xa2,0xad,0xfc,0xf4,0x49,0xb2,0x7c,0x8c,
+0xff,0x85,0x27,0x2d,0x49,0x55,0x78,0x37,0x1b,0x37,0xe2,0xe1,0x13,0xa3,0x74,0x50,
+0xf7,0x0d,0x83,0x0f,0x7d,0xd5,0x72,0xde,0x9f,0x11,0x91,0xee,0xca,0x93,0x04,0x6d,
+0xe4,0xaf,0x62,0xea,0x5e,0xd2,0x6a,0xd6,0x14,0x9f,0x03,0x66,0x5b,0x66,0x1f,0xcb,
+0x1b,0x29,0x6c,0x4b,0x4b,0x4b,0x14,0xab,0x0f,0xfd,0x83,0xdb,0xcf,0xc6,0x15,0xfb,
+0xc9,0x93,0x3d,0xe0,0x6f,0x59,0x7e,0x3b,0x36,0x6e,0x1e,0x23,0x4a,0x4f,0xde,0x75,
+0xed,0x99,0xc0,0x1c,0xb4,0x67,0x36,0x85,0xbc,0x3d,0x61,0x9b,0xc2,0x86,0xc9,0x34,
+0x96,0xa5,0x18,0xcf,0x63,0x86,0x97,0x87,0xf8,0xe0,0x92,0x9f,0xbd,0xcc,0xfd,0x4e,
+0x1b,0x13,0x84,0xa3,0x66,0xda,0x2c,0xb7,0x30,0x83,0x94,0x62,0xfb,0x33,0x93,0x46,
+0xa3,0x25,0xd1,0x9b,0xc9,0xfb,0xbc,0x7d,0x6d,0xe1,0x00,0xdb,0x20,0xe6,0x13,0x27,
+0x74,0xa3,0x5f,0x49,0x0c,0x9f,0xd6,0xea,0x8a,0x3b,0x85,0x59,0x4d,0xa1,0xf3,0x05,
+0xe5,0xd0,0x2d,0xba,0xd0,0xe0,0xa1,0xe4,0xbd,0x99,0x5f,0x04,0xd7,0x37,0x9d,0xe7,
+0x50,0x0c,0x82,0x26,0xaa,0x05,0xc5,0x0c,0x7e,0x2c,0xef,0x4e,0x66,0xa3,0x40,0xb8,
+0x1a,0xf9,0x24,0x06,0x0b,0x28,0x3e,0x51,0xab,0xc1,0x74,0x8e,0x46,0xa8,0x06,0xfa,
+0x42,0x2a,0xf3,0xb3,0xed,0xc7,0x13,0x0c,0x2c,0x52,0xdc,0x4a,0x28,0x30,0x1a,0xba,
+0xc7,0xbd,0x92,0x06,0x82,0xcc,0x6e,0x92,0x29,0x81,0xe0,0x1d,0x2f,0xee,0x41,0xd9,
+0xe2,0xc5,0x79,0x7e,0x65,0x3c,0x5a,0x63,0xe4,0x2e,0x78,0x34,0xc4,0xc1,0x45,0x17,
+0xe9,0x67,0x1d,0x60,0x03,0x50,0x41,0x94,0x97,0x0a,0xe2,0x2a,0xc0,0x5c,0xc2,0xed,
+0x60,0xa7,0x1b,0x28,0x9e,0xc7,0xeb,0x18,0x4c,0x1a,0x50,0x17,0xec,0x8e,0xb8,0x50,
+0x79,0x82,0xc1,0xdb,0x6e,0xee,0x18,0x84,0xf3,0x5b,0xcb,0x23,0xdb,0x96,0x59,0x65,
+0x9a,0x6a,0x61,0x2a,0x5a,0x8a,0xd2,0x2e,0x92,0xdb,0x7e,0xf2,0x39,0x30,0xac,0x0f,
+0x47,0x99,0x42,0x88,0xed,0x9f,0x61,0x64,0x4a,0x28,0x72,0x1a,0xe1,0x96,0x91,0x87,
+0x0d,0xd0,0x6e,0x07,0xaf,0x49,0x81,0x7e,0xde,0xc1,0x26,0xb5,0xa0,0x0b,0xdc,0x8f,
+0x53,0x15,0xcf,0xea,0x4b,0x54,0x53,0x20,0x53,0x38,0x62,0x60,0x9e,0xba,0xc0,0xbe,
+0x83,0x66,0x67,0xce,0x30,0x85,0xe6,0x8d,0x44,0x0d,0x61,0x47,0x82,0x72,0x97,0x6e,
+0x5d,0xb6,0xad,0x91,0xdf,0x0f,0x18,0x10,0x2b,0x8e,0x35,0xdb,0x5a,0xb9,0xf6,0x24,
+0xbc,0xdc,0xb9,0x6c,0xcb,0xef,0xae,0xa1,0x58,0x75,0x2e,0xaa,0x5c,0x7e,0x12,0x5e,
+0x45,0x08,0xdb,0x07,0x16,0x5e,0x18,0x45,0x15,0x1e,0x93,0x12,0x1e,0x93,0xf0,0x38,
+0x20,0x26,0xef,0xda,0x97,0xf1,0xa2,0x22,0x4d,0x77,0xf9,0x08,0x1e,0x4e,0x86,0xfe,
+0xb9,0x03,0x98,0xe9,0xff,0xda,0xe5,0x8e,0x7d,0xcd,0x5e,0xd4,0xaf,0xf4,0x66,0xe5,
+0xb1,0x7c,0x2b,0x38,0xb1,0xa1,0xc3,0x90,0x8f,0x38,0x5e,0x5d,0x91,0xd2,0x6b,0xf3,
+0xb2,0x16,0x5b,0x9f,0x1d,0xc9,0x23,0x27,0xf9,0x71,0x88,0x76,0x2a,0x4a,0xc3,0xfc,
+0xaf,0x38,0xe4,0x86,0x32,0xc8,0x3e,0xa3,0x44,0x5b,0x7c,0xc7,0x3f,0x4b,0xc0,0xe2,
+0xa1,0xcc,0x20,0x6a,0x5d,0x70,0x44,0x43,0x33,0x4b,0xb4,0xf6,0xc1,0x2c,0x2c,0xcf,
+0xbd,0x1e,0x79,0x71,0xc8,0xb3,0x4e,0x03,0xf2,0x86,0xdb,0x16,0x35,0xc2,0x23,0x7f,
+0xef,0x83,0x20,0xd5,0xef,0xd0,0x5e,0x0f,0x03,0x68,0x92,0xb0,0xd5,0xc9,0x5f,0x8e,
+0x10,0x05,0x54,0x0f,0x62,0xa6,0x24,0x70,0xd5,0x6a,0x68,0x37,0xa7,0x7b,0x65,0x7d,
+0x03,0x1c,0xbc,0x54,0x81,0xda,0x81,0x9b,0xd6,0x91,0xbb,0x84,0xe3,0xb7,0x1f,0x63,
+0x8b,0x46,0x24,0x5d,0xcf,0xe7,0x89,0x06,0x7b,0x0f,0xcd,0x61,0x70,0x62,0x59,0x41,
+0x62,0xed,0xf9,0x54,0x56,0x61,0x5b,0xe8,0x43,0x47,0xb2,0x3c,0x4b,0xde,0x42,0x0b,
+0xd2,0x60,0x42,0x85,0x12,0x8f,0x97,0xc8,0xc4,0xcb,0x7d,0x5a,0x7d,0x14,0xa6,0x11,
+0x80,0xf7,0x26,0x07,0xa2,0x4e,0xe1,0xe6,0x19,0x9c,0x0a,0xd6,0x3a,0x32,0x10,0x50,
+0x9d,0x18,0x82,0x5c,0x5a,0xaa,0xe0,0x38,0x14,0x5c,0xba,0x14,0x41,0x2a,0xe0,0x7c,
+0x0c,0x9d,0x22,0x29,0x84,0x84,0x7b,0x3c,0xff,0x94,0xee,0x8d,0x15,0xff,0x5e,0x47,
+0xc0,0x52,0x51,0x45,0x5c,0x9a,0xf1,0x60,0x38,0x3c,0xc2,0xc6,0x18,0xba,0xf2,0xca,
+0xc3,0xc8,0x7b,0x56,0x19,0x2d,0x37,0xd7,0x41,0xa4,0x46,0xc1,0xcd,0xa7,0x55,0x7c,
+0x45,0xce,0xc7,0x9f,0x01,0x20,0x95,0x85,0x35,0x6c,0xc3,0xd9,0x02,0xc5,0x58,0x2d,
+0xad,0x81,0x5c,0x8f,0x63,0xef,0x79,0x6e,0xa1,0xe0,0x7b,0xcf,0x08,0xbc,0xd8,0xe2,
+0xf1,0x66,0x1b,0x51,0x8d,0x32,0x7d,0x7b,0x79,0xb2,0x73,0x7c,0xec,0x6f,0xf7,0x75,
+0x69,0xde,0x01,0x48,0x00,0x82,0xea,0x10,0x9e,0x2e,0x4b,0x2e,0xda,0x6e,0xa7,0xcb,
+0xe3,0x4c,0x52,0xa4,0x27,0x55,0xa4,0xe0,0x68,0x71,0x40,0x1d,0x5b,0x41,0x27,0xc1,
+0x4b,0xa4,0xf9,0x18,0xf8,0xba,0x90,0x9a,0xde,0x36,0xec,0x0a,0xea,0xef,0x98,0xcc,
+0x0e,0x66,0xe4,0x8d,0x71,0xba,0x42,0xa4,0xe5,0x38,0xef,0x12,0x58,0x51,0xd0,0xdb,
+0xf6,0x4d,0xb1,0xd2,0x42,0x6c,0xab,0x0f,0x4d,0x3a,0xf6,0x4e,0xb9,0x02,0xce,0x77,
+0xb0,0xb3,0xf2,0x39,0x01,0x30,0xdc,0xf2,0x84,0x96,0x05,0x9e,0x83,0x31,0x3d,0x28,
+0xc9,0xb0,0xf2,0xaa,0xd9,0x19,0xdc,0xd0,0xec,0x9d,0x9b,0x40,0xbc,0x6e,0x78,0xd5,
+0xd8,0xfd,0xba,0xa1,0x92,0x93,0xfe,0x36,0x6d,0x5f,0x3b,0xd4,0xa5,0xf4,0xa7,0x56,
+0x7d,0xf4,0x24,0xbc,0x13,0xb4,0xd1,0xc0,0x86,0xeb,0xc9,0xbc,0xbd,0x0e,0x8e,0x70,
+0x9e,0x50,0xb9,0xfe,0xb3,0x16,0xf0,0xe6,0x8e,0xa2,0x0f,0x31,0x6c,0x45,0xf1,0x74,
+0xdc,0xba,0x76,0x99,0xc4,0xe0,0x5b,0x74,0x6d,0x33,0x9f,0xe5,0x09,0xce,0xdb,0x0d,
+0x58,0x0c,0x10,0xf9,0x19,0x7d,0xa8,0x73,0xcb,0xf0,0xb0,0x21,0x48,0xa1,0x42,0xc4,
+0x4c,0xd9,0xc0,0x3d,0x04,0xfb,0xed,0x77,0xf5,0xe3,0x3f,0x86,0x9a,0xc0,0x8e,0xe6,
+0x33,0xe7,0x69,0x83,0xdc,0x45,0x31,0xf4,0x40,0x1b,0xd6,0x5b,0xde,0xfa,0x31,0x84,
+0xd1,0x91,0x94,0xdd,0xe9,0xb9,0x03,0x2c,0x30,0xc8,0xaa,0xf8,0x20,0x90,0x46,0x2f,
+0x0a,0xb1,0xd6,0xc5,0x02,0x3e,0xe7,0x70,0x08,0x4b,0xef,0x60,0x2b,0x97,0x2d,0xe5,
+0x31,0xe3,0xac,0x61,0x8c,0xf0,0x33,0x05,0x1e,0xde,0x95,0xcb,0x04,0xd2,0x4c,0x19,
+0xfa,0x3f,0xab,0x1a,0x46,0x60,0x86,0xa0,0x2f,0xca,0x76,0xe6,0xce,0x4f,0x1a,0xb3,
+0x22,0x71,0x70,0x6a,0xe2,0x9f,0xac,0x01,0x2b,0x50,0x48,0x84,0x51,0x0a,0x6e,0xa7,
+0x3c,0x2d,0x1c,0x8c,0x7a,0x54,0x55,0x17,0x99,0x90,0x94,0xa7,0x63,0xeb,0xc5,0x89,
+0xf6,0x79,0x29,0x4d,0x53,0x1e,0x7d,0x71,0xc1,0xef,0x78,0xa5,0xa2,0xf3,0x02,0x2f,
+0xc5,0x74,0x2e,0x5f,0x4d,0x0e,0x29,0x3f,0x78,0x39,0xc0,0x6e,0x35,0xb0,0x31,0xf8,
+0xc1,0xc1,0x00,0x61,0x5d,0xfc,0x3e,0x0c,0xfc,0x23,0xf8,0x16,0x5d,0x1b,0x16,0x5e,
+0xab,0x79,0x65,0xb3,0x25,0x3f,0x6c,0xeb,0xd9,0x68,0x18,0x42,0x88,0xc9,0x83,0x8e,
+0x2b,0x2b,0x47,0x47,0x47,0xf5,0xa3,0xd5,0x7a,0x14,0x1f,0xac,0xe0,0x0e,0x40,0x63,
+0x05,0x0d,0xe2,0x02,0x30,0x2d,0xee,0x16,0xe2,0xb3,0xef,0xf1,0x76,0x8d,0xb5,0xd6,
+0x6e,0x1f,0xb6,0xdb,0x1b,0x4f,0xd1,0x4c,0xbb,0xb6,0x69,0xb5,0x56,0xd3,0x5a,0x6b,
+0xd5,0xda,0x1c,0xd4,0x56,0x5b,0x8d,0xa7,0xb5,0x66,0xdb,0x6a,0x20,0x5d,0xdb,0x4c,
+0x6b,0x9b,0xf8,0x7d,0x58,0x5b,0x6f,0x3f,0x6d,0x30,0x97,0xa9,0x94,0x05,0x83,0x56,
+0xab,0x7d,0x58,0x5b,0x5d,0x6b,0xcd,0xe6,0x03,0x92,0xb5,0xd1,0xa2,0xb5,0x99,0xb2,
+0xe1,0x0f,0x47,0xed,0xe6,0xba,0x65,0x20,0x37,0x6a,0x57,0x56,0x6b,0xad,0x2b,0xe8,
+0xae,0xb9,0xb9,0x21,0xff,0x91,0xd0,0x79,0x16,0xbe,0x90,0x6b,0xb1,0xe4,0xca,0xaa,
+0x85,0x02,0xe4,0xc8,0x2f,0x9d,0x5b,0xc8,0x22,0x80,0x6e,0x81,0xd5,0x00,0xfb,0xe1,
+0x08,0x43,0xb2,0x1a,0x98,0x51,0xab,0xb1,0x59,0xc3,0x05,0x21,0x6b,0x75,0x63,0xad,
+0xbe,0x86,0x79,0x5d,0xd9,0xac,0xaf,0xa1,0x2a,0x7e,0xd6,0x24,0x0b,0xfe,0xcb,0x55,
+0xf5,0x45,0x30,0x55,0xae,0x7f,0x66,0x25,0x39,0x8c,0xae,0xa9,0x5a,0x91,0xfa,0x79,
+0xe3,0x84,0x52,0xe5,0xfa,0x27,0xd3,0x02,0xf3,0xa1,0x8d,0x73,0xf6,0x10,0x7b,0xfc,
+0xe5,0xe5,0x62,0x90,0xc7,0x32,0xf5,0x02,0x6c,0xb6,0x87,0x07,0xd7,0x2e,0x23,0x20,
+0x12,0xef,0xfe,0xc8,0x3b,0x0f,0x2f,0xf1,0x47,0x01,0xe0,0x0f,0xa6,0x37,0x96,0x1f,
+0xea,0x82,0xcf,0xab,0xd3,0x4f,0xa1,0x4a,0x95,0x1e,0x3b,0xf9,0xf1,0x48,0x64,0x03,
+0xcb,0xd0,0x6a,0x6f,0x1c,0x02,0xa7,0xc4,0xe8,0x3a,0x16,0xc6,0x6a,0x03,0x99,0xed,
+0x35,0xa0,0x7d,0x50,0x6b,0xad,0xad,0x3f,0xad,0xb5,0xd6,0x41,0x25,0xed,0x35,0x14,
+0x71,0x35,0xf1,0x75,0x58,0x13,0x70,0x16,0x48,0x3a,0x95,0xc2,0x01,0x81,0x09,0x8b,
+0x06,0x90,0x9f,0x4a,0x4b,0x1f,0x8e,0x56,0x41,0x50,0x8d,0xb5,0xf5,0x61,0xad,0xb5,
+0x61,0x61,0x7f,0x06,0xd1,0xb1,0x9b,0x56,0x03,0x6b,0xa5,0x3a,0xc2,0xc7,0x6c,0x57,
+0x58,0x41,0x76,0x46,0x20,0x74,0xc7,0xaa,0x35,0x55,0x55,0xba,0xbc,0x22,0xb9,0x69,
+0xbb,0x2d,0x60,0x03,0x52,0xb2,0xea,0x16,0x19,0xd2,0x31,0x00,0xd0,0xf6,0xdc,0xd2,
+0xe0,0xe1,0xa0,0x85,0xeb,0xf2,0xef,0xe0,0x11,0x96,0x67,0x02,0x65,0x21,0xd4,0xc1,
+0xe6,0x47,0x5b,0x81,0xd6,0xe6,0xa6,0xb5,0xd1,0x5c,0x1d,0xd6,0xda,0xad,0x96,0x85,
+0xff,0xc0,0xcf,0xa6,0xc2,0x2a,0xa7,0xa2,0xd0,0x0e,0x04,0x6c,0xb6,0xf9,0x9f,0x85,
+0xfa,0x1f,0x70,0x27,0xb8,0x1f,0x82,0xcd,0x81,0xe0,0xd6,0x53,0x29,0xc1,0xb4,0x89,
+0x39,0x59,0x80,0x61,0xb3,0x7d,0x05,0x5c,0x7f,0x05,0x24,0xbb,0x06,0xb2,0x5f,0x5b,
+0x04,0xd1,0x80,0x64,0x91,0xba,0xe8,0x8c,0xff,0xb8,0x22,0x7a,0xdd,0x9a,0xed,0xa6,
+0xb5,0xb1,0x2a,0x6c,0xff,0xff,0x2c,0x33,0x4b,0x68,0xd6,0x42,0x9a,0xf9,0x0d,0xee,
+0xd7,0x7d,0xc4,0xc8,0x0e,0xb0,0xae,0x79,0x68,0xe8,0x47,0xa3,0x99,0xf5,0xf5,0xb6,
+0xb5,0xb1,0xb9,0x4e,0xa1,0xbe,0xb6,0x5e,0x5b,0x07,0x43,0x6d,0x6e,0x60,0xdd,0x90,
+0xdb,0xc2,0xfa,0xe3,0xbf,0x85,0x6f,0xd0,0xcb,0x86,0xb5,0xde,0xe4,0x2f,0x80,0x30,
+0x97,0x10,0xf2,0x9f,0xdf,0xaa,0x84,0xcb,0xbb,0xd1,0xb2,0x36,0xc8,0x68,0xab,0x6d,
+0x88,0xfc,0xd6,0x3a,0xbe,0x5a,0x57,0x1a,0x4f,0xdb,0x10,0x9d,0x2d,0x6b,0x13,0x92,
+0x15,0x42,0x20,0xdd,0x58,0x05,0x4b,0xad,0x35,0x9e,0x22,0xab,0xdd,0x42,0x2f,0x48,
+0x6d,0xe2,0x07,0xe8,0x93,0x32,0x77,0x03,0x9f,0x4f,0x6b,0xe8,0xee,0x0a,0xda,0x5f,
+0x6b,0x22,0xa7,0xb9,0xd1,0x4c,0x6b,0x6b,0xac,0xd4,0x6a,0xc9,0xe6,0xd3,0x68,0x5b,
+0x6d,0xb2,0x3c,0x64,0x39,0xaa,0x35,0x1b,0xac,0xd6,0x5c,0x27,0x80,0xfe,0xa9,0x72,
+0x58,0x5a,0x00,0xac,0xa9,0x3a,0x84,0x03,0x8d,0x4b,0x1d,0xfe,0xc4,0x24,0x58,0x93,
+0x85,0xa0,0x56,0x54,0xe1,0x34,0x5a,0x4d,0xe9,0x10,0xa2,0x89,0xb8,0xe0,0x28,0x30,
+0xb5,0xe6,0x53,0xf0,0x15,0x26,0x22,0xe3,0xc4,0x75,0x51,0xf4,0xcd,0xc1,0xd7,0x38,
+0xf8,0xa7,0xab,0xcd,0x5a,0x7b,0x15,0x83,0xaf,0xad,0x35,0xd2,0x4d,0x8c,0x14,0x1c,
+0xd2,0x86,0x44,0x6b,0x60,0x37,0x23,0x1a,0xc0,0x37,0x8d,0x94,0x98,0xb1,0x80,0x99,
+0x0f,0x47,0xd8,0x1b,0x1b,0x94,0x42,0x87,0xf8,0x0d,0xcc,0xaf,0xa1,0xd9,0x0d,0x6b,
+0xb3,0x81,0x9d,0xb3,0x81,0xad,0x00,0x3f,0x91,0xe6,0xbf,0xcd,0x06,0xb7,0x51,0x80,
+0xd4,0xd6,0x5a,0xaa,0x20,0x95,0x32,0xc0,0x22,0xc9,0x7f,0x9b,0x8d,0x0b,0x8b,0x26,
+0xfc,0x1d,0x93,0x72,0xac,0x32,0xde,0x40,0x3d,0x91,0xf0,0x45,0xf5,0xfe,0xd4,0x02,
+0x92,0x5b,0xfd,0x41,0x74,0x89,0xcd,0x16,0xa6,0x7c,0x65,0xfd,0xe9,0xda,0x2a,0xe4,
+0xfb,0xa6,0x20,0x05,0x52,0x36,0x5d,0xa5,0xa8,0x65,0xf2,0x70,0x75,0x83,0x1b,0xc8,
+0x1a,0xa8,0xc6,0x64,0x11,0x33,0x44,0x1e,0xd2,0x87,0xcd,0x75,0xe2,0x6c,0x7d,0xbd,
+0x46,0x91,0xd4,0xa4,0x56,0xd0,0x5c,0xb5,0xda,0x57,0x06,0x58,0x22,0xee,0x30,0xeb,
+0xdc,0x61,0x90,0x85,0x62,0x90,0xd4,0x15,0x7e,0x1e,0xd6,0x36,0x59,0x87,0x45,0x2a,
+0x23,0x55,0xe5,0x03,0xa9,0xc1,0x0a,0x6c,0x08,0x65,0xa9,0x6a,0x92,0x5d,0x7c,0x38,
+0xc2,0x08,0x9a,0x2d,0xe8,0x2b,0x1b,0x6d,0x34,0xdd,0xda,0xc0,0x46,0xb5,0x01,0xf2,
+0x83,0x46,0x23,0xfa,0x0d,0x76,0x14,0xaa,0x34,0xba,0x53,0xad,0xfc,0x40,0x7d,0x11,
+0xc5,0xe8,0x50,0xfa,0x83,0xc0,0xb4,0x44,0x4d,0x12,0x2d,0x49,0xfa,0xd2,0x6a,0x0e,
+0x94,0x24,0xa5,0x23,0xa1,0xc9,0x01,0xda,0xbe,0xf0,0x1a,0xfe,0x06,0x3b,0xfd,0xef,
+0xe4,0xcd,0xc9,0xdf,0xf3,0x1a,0xef,0x47,0x12,0x81,0xc4,0x90,0x2b,0xf5,0xe7,0x0d,
+0xf0,0x38,0xe4,0xa7,0xd4,0x04,0xd4,0xba,0xf2,0x12,0xc2,0x82,0x45,0xfd,0xe1,0x14,
+0xc4,0x66,0xbb,0xb1,0x31,0x00,0xbd,0x1e,0x12,0x5f,0x03,0x52,0xee,0x21,0x27,0x37,
+0x22,0x0e,0x6b,0x40,0xe6,0x80,0x6a,0xa4,0x2e,0x94,0x4f,0x29,0x05,0x98,0x14,0x02,
+0x48,0x97,0xf1,0x4b,0x8a,0x50,0x07,0xfb,0x46,0xeb,0x90,0xda,0xc0,0x02,0x8d,0xa2,
+0x09,0xe1,0xb5,0x58,0xa5,0x20,0xfc,0xac,0x4a,0x21,0xd0,0xf3,0x3a,0x85,0x74,0xfe,
+0xa7,0xdd,0xc3,0x6b,0xe8,0x8d,0xff,0x13,0x41,0x79,0x8c,0x5e,0x7b,0xa5,0x69,0x47,
+0x47,0x13,0xda,0x27,0x27,0xdd,0xff,0x0b,0xf8,0xef,0x0d,0x28,0x11,0x74,0x00,0x00,};
+
+static const unsigned int dummy_align__login_html = 4;
+static const unsigned char data__login_html[] = {
+/* /login.html (11 chars) */
+0x2f,0x6c,0x6f,0x67,0x69,0x6e,0x2e,0x68,0x74,0x6d,0x6c,0x00,
+
+/* HTTP header */
+
+/* "HTTP/1.1 200 OK
+" (17 bytes) */
+0x48,0x54,0x54,0x50,0x2f,0x31,0x2e,0x31,0x20,0x32,0x30,0x30,0x20,0x4f,0x4b,0x0d,
+0x0a,
+/* "Server: lwIP/1.3.1 (http://savannah.nongnu.org/projects/lwip)
+" (63 bytes) */
+0x53,0x65,0x72,0x76,0x65,0x72,0x3a,0x20,0x6c,0x77,0x49,0x50,0x2f,0x31,0x2e,0x33,
+0x2e,0x31,0x20,0x28,0x68,0x74,0x74,0x70,0x3a,0x2f,0x2f,0x73,0x61,0x76,0x61,0x6e,
+0x6e,0x61,0x68,0x2e,0x6e,0x6f,0x6e,0x67,0x6e,0x75,0x2e,0x6f,0x72,0x67,0x2f,0x70,
+0x72,0x6f,0x6a,0x65,0x63,0x74,0x73,0x2f,0x6c,0x77,0x69,0x70,0x29,0x0d,0x0a,
+/* "Content-Length: 593
+" (21 bytes) */
+0x43,0x6f,0x6e,0x74,0x65,0x6e,0x74,0x2d,0x4c,0x65,0x6e,0x67,0x74,0x68,0x3a,0x20,
+0x35,0x39,0x33,0x0d,0x0a,
+/* "Connection: Close
+" (19 bytes) */
+0x43,0x6f,0x6e,0x6e,0x65,0x63,0x74,0x69,0x6f,0x6e,0x3a,0x20,0x43,0x6c,0x6f,0x73,
+0x65,0x0d,0x0a,
+/* "Content-type: text/html
+Content-Encoding: gzip
+" (49 bytes) */
+0x43,0x6f,0x6e,0x74,0x65,0x6e,0x74,0x2d,0x74,0x79,0x70,0x65,0x3a,0x20,0x74,0x65,
+0x78,0x74,0x2f,0x68,0x74,0x6d,0x6c,0x0d,0x0a,0x43,0x6f,0x6e,0x74,0x65,0x6e,0x74,
+0x2d,0x45,0x6e,0x63,0x6f,0x64,0x69,0x6e,0x67,0x3a,0x20,0x67,0x7a,0x69,0x70,0x0d,
+0x0a,
+/* "ETag: "bnhSALm0pY9yfWa"
+" (25 bytes) */
+0x45,0x54,0x61,0x67,0x3a,0x20,0x22,0x62,0x6e,0x68,0x53,0x41,0x4c,0x6d,0x30,0x70,
+0x59,0x39,0x79,0x66,0x57,0x61,0x22,0x0d,0x0a,0x0d,0x0a,
+
+/* raw file data (593 bytes) */
+0x1f,0x8b,0x08,0x00,0x00,0x00,0x00,0x00,0x04,0x0a,0x7d,0x54,0xc1,0x6e,0xd4,0x30,
+0x10,0xfd,0x15,0x63,0x24,0x4e,0x75,0xb7,0x7b,0x41,0xa8,0xc4,0x91,0x50,0xe9,0x81,
+0x13,0x1c,0x40,0x82,0xa3,0x93,0xcc,0x6e,0xa6,0x38,0xb6,0xb1,0x9d,0xec,0xee,0xad,
+0xe2,0xc0,0x09,0x09,0xc4,0x15,0x24,0x7e,0x01,0xd1,0x03,0x45,0x88,0x7e,0x43,0xf6,
+0x8f,0x18,0x27,0xdb,0x6d,0x23,0xa4,0x1e,0xe2,0xf5,0xd8,0x33,0xe3,0x37,0xef,0x3d,
+0x6d,0x76,0xef,0xe9,0xf3,0x93,0x97,0x6f,0x5e,0x9c,0xb2,0x3a,0x36,0x3a,0xcf,0xd2,
+0xca,0xb4,0x32,0x4b,0xc9,0x39,0x45,0xa0,0xaa,0x3c,0x6b,0x20,0x2a,0x56,0xd6,0xca,
+0x07,0x88,0x92,0xb7,0x71,0x21,0x1e,0xd1,0xdd,0x70,0x5a,0xc7,0xe8,0x04,0xbc,0x6b,
+0xb1,0x93,0xfc,0xb5,0x78,0xf5,0x44,0x9c,0xd8,0xc6,0xa9,0x88,0x85,0x06,0xce,0x4a,
+0x6b,0x22,0x18,0x2a,0x79,0x76,0x2a,0xa1,0x5a,0xc2,0x75,0x91,0x51,0x0d,0x48,0xde,
+0x21,0xac,0x9c,0xf5,0xf1,0x56,0xde,0x0a,0xab,0x58,0xcb,0x0a,0x3a,0x2c,0x41,0x0c,
+0xc1,0x01,0x1a,0x8c,0xa8,0xb4,0x08,0xa5,0xd2,0x20,0xe7,0x07,0x8d,0x5a,0x63,0xd3,
+0x36,0xfb,0xb8,0x0d,0xe0,0x87,0x40,0xd1,0x93,0xf2,0x88,0x9e,0x88,0x18,0x35,0xe4,
+0xfd,0xb7,0xfe,0xaa,0xff,0xdb,0x5f,0x6e,0xdf,0xf7,0x57,0xdb,0xf3,0xfe,0x92,0xf6,
+0x17,0xd9,0x6c,0xbc,0xcb,0x34,0x9a,0xb7,0xac,0xf6,0xb0,0x90,0xbc,0x51,0x68,0x0e,
+0xcb,0x10,0x38,0xf3,0xa0,0x25,0x0f,0x71,0xa3,0x21,0xd4,0x00,0x91,0x3a,0x85,0xd2,
+0xa3,0x8b,0x2c,0x6e,0x1c,0xc1,0x8d,0xb0,0x8e,0xb3,0x33,0xd5,0xa9,0xf1,0x94,0xb3,
+0xe0,0x4b,0xc9,0xbd,0xd5,0x70,0x78,0x16,0x28,0x79,0x36,0x9e,0xd3,0x66,0x24,0xad,
+0xb0,0xd5,0x26,0xcf,0x2a,0xec,0x58,0xa9,0x55,0x08,0x92,0x1b,0xd5,0x15,0xca,0xb3,
+0xf1,0x47,0x54,0xb0,0x50,0xad,0x8e,0xd7,0xe1,0x02,0xd7,0x50,0x89,0x68,0x1d,0x75,
+0xfa,0xaf,0x46,0xa4,0x8e,0xe0,0xc7,0xab,0x3c,0x53,0x3b,0xe8,0xf7,0x89,0xb9,0xb1,
+0xb5,0xb6,0x4b,0x9b,0x20,0x28,0xfa,0xa8,0x7a,0xba,0xde,0x6a,0xb7,0xf2,0xca,0x39,
+0x6a,0xc4,0xb0,0x92,0x7c,0xa7,0x0e,0xd5,0xd5,0xf3,0xbc,0xff,0xdc,0xff,0xdc,0x53,
+0xf5,0xab,0xff,0xb1,0xfd,0x40,0xd4,0x7d,0xa2,0x59,0xe6,0x13,0x3c,0x4e,0x19,0xd0,
+0x6c,0x58,0xaf,0x27,0x98,0x02,0x1e,0xaf,0xd2,0xec,0x74,0xbe,0xb0,0xbe,0x61,0xaa,
+0x8c,0x68,0x8d,0xe4,0x84,0x31,0x31,0xbd,0x44,0xce,0xc8,0x39,0xb5,0x25,0x04,0xce,
+0x86,0xa4,0xfe,0x7e,0x06,0x34,0x62,0x28,0x49,0x8b,0x40,0x43,0x2a,0x25,0xcb,0x68,
+0x55,0xd0,0x9b,0x74,0xb6,0xeb,0xc1,0xf3,0xfe,0x2b,0x69,0x7b,0x91,0x34,0x3d,0x7e,
+0x60,0x8a,0xe0,0x1e,0x67,0xb3,0x21,0x29,0xcf,0xd0,0xb8,0xf6,0xb6,0x60,0xfb,0xee,
+0x43,0xcb,0x34,0x31,0x09,0xc6,0x89,0xf4,0x64,0xc0,0x01,0xd1,0xc8,0xc5,0x6e,0x4b,
+0xe6,0xd2,0x60,0x96,0xe4,0x41,0x3e,0x7f,0x48,0x0a,0x27,0x33,0x24,0x8b,0x78,0x82,
+0x2e,0x3c,0x2e,0xeb,0x78,0xcc,0xe6,0x47,0x6e,0x3d,0x45,0xe5,0x48,0x5e,0x02,0xf5,
+0x9d,0x58,0x3b,0x27,0x60,0x7f,0xb6,0x1f,0xef,0x82,0x95,0xb2,0x57,0xd6,0x57,0x77,
+0x42,0xbb,0x49,0x4a,0x4a,0x0d,0x0f,0xb0,0x29,0xb8,0x9c,0x4d,0x86,0x0d,0x6d,0xd1,
+0xe0,0x0d,0x99,0x45,0x34,0x8c,0x3e,0xe1,0x3c,0x12,0xfa,0x0d,0x67,0x9d,0xd2,0x2d,
+0x8d,0xd2,0x7f,0x21,0x80,0xbf,0x49,0xe8,0x4b,0x1a,0x61,0x96,0x48,0x99,0x7a,0x65,
+0xe7,0x9e,0xd1,0xbb,0xb3,0xe1,0x1f,0xe1,0x1f,0x6a,0x1c,0x5f,0x15,0x21,0x04,0x00,
+0x00,};
+
+static const unsigned int dummy_align__index_html = 5;
+static const unsigned char data__index_html[] = {
+/* /index.html (11 chars) */
+0x2f,0x69,0x6e,0x64,0x65,0x78,0x2e,0x68,0x74,0x6d,0x6c,0x00,
+
+/* HTTP header */
+
+/* "HTTP/1.1 200 OK
+" (17 bytes) */
+0x48,0x54,0x54,0x50,0x2f,0x31,0x2e,0x31,0x20,0x32,0x30,0x30,0x20,0x4f,0x4b,0x0d,
+0x0a,
+/* "Server: lwIP/1.3.1 (http://savannah.nongnu.org/projects/lwip)
+" (63 bytes) */
+0x53,0x65,0x72,0x76,0x65,0x72,0x3a,0x20,0x6c,0x77,0x49,0x50,0x2f,0x31,0x2e,0x33,
+0x2e,0x31,0x20,0x28,0x68,0x74,0x74,0x70,0x3a,0x2f,0x2f,0x73,0x61,0x76,0x61,0x6e,
+0x6e,0x61,0x68,0x2e,0x6e,0x6f,0x6e,0x67,0x6e,0x75,0x2e,0x6f,0x72,0x67,0x2f,0x70,
+0x72,0x6f,0x6a,0x65,0x63,0x74,0x73,0x2f,0x6c,0x77,0x69,0x70,0x29,0x0d,0x0a,
+/* "Content-Length: 1076
+" (22 bytes) */
+0x43,0x6f,0x6e,0x74,0x65,0x6e,0x74,0x2d,0x4c,0x65,0x6e,0x67,0x74,0x68,0x3a,0x20,
+0x31,0x30,0x37,0x36,0x0d,0x0a,
+/* "Connection: Close
+" (19 bytes) */
+0x43,0x6f,0x6e,0x6e,0x65,0x63,0x74,0x69,0x6f,0x6e,0x3a,0x20,0x43,0x6c,0x6f,0x73,
+0x65,0x0d,0x0a,
+/* "Content-type: text/html
+Content-Encoding: gzip
+" (49 bytes) */
+0x43,0x6f,0x6e,0x74,0x65,0x6e,0x74,0x2d,0x74,0x79,0x70,0x65,0x3a,0x20,0x74,0x65,
+0x78,0x74,0x2f,0x68,0x74,0x6d,0x6c,0x0d,0x0a,0x43,0x6f,0x6e,0x74,0x65,0x6e,0x74,
+0x2d,0x45,0x6e,0x63,0x6f,0x64,0x69,0x6e,0x67,0x3a,0x20,0x67,0x7a,0x69,0x70,0x0d,
+0x0a,
+/* "ETag: "OX5zsfvaAOfeim9"
+" (25 bytes) */
+0x45,0x54,0x61,0x67,0x3a,0x20,0x22,0x4f,0x58,0x35,0x7a,0x73,0x66,0x76,0x61,0x41,
+0x4f,0x66,0x65,0x69,0x6d,0x39,0x22,0x0d,0x0a,0x0d,0x0a,
+
+/* raw file data (1076 bytes) */
+0x1f,0x8b,0x08,0x00,0x00,0x00,0x00,0x00,0x04,0x0a,0xbd,0x56,0x5d,0x8f,0xdb,0x44,
+0x14,0xfd,0x2b,0x83,0x79,0xd9,0x4a,0xeb,0x0d,0xdb,0x27,0x84,0x62,0x4b,0xcb,0xb6,
+0x48,0x7d,0xa2,0x42,0x80,0xe0,0x29,0x9a,0xd8,0x93,0x78,0x8a,0xbf,0x3a,0x9e,0x24,
+0xbb,0x6f,0xfb,0xd1,0x42,0xab,0x45,0x0a,0x42,0x80,0xfa,0xc2,0xe7,0x2f,0xd8,0x02,
+0x81,0x6c,0x36,0xbb,0xfd,0x0b,0xe3,0x7f,0xc4,0xb9,0xe3,0x78,0x37,0x64,0x4d,0x28,
+0x95,0xe8,0x83,0x9d,0x8c,0x3d,0xf7,0xde,0x73,0xcf,0x3d,0xf7,0x7a,0xda,0x6f,0xdc,
+0x79,0x7f,0xf7,0xc3,0x4f,0xef,0xdf,0x65,0x91,0x4e,0x62,0xbf,0x4d,0x77,0x16,0xf3,
+0xb4,0xef,0x39,0x0e,0x56,0x82,0x87,0x7e,0x3b,0x11,0x9a,0xb3,0x20,0xe2,0xaa,0x10,
+0xda,0x73,0x06,0xba,0xe7,0xbe,0x8d,0x77,0xf6,0x69,0xa4,0x75,0xee,0x8a,0x87,0x03,
+0x39,0xf4,0x9c,0x4f,0xdc,0x8f,0x76,0xdc,0xdd,0x2c,0xc9,0xb9,0x96,0xdd,0x58,0x38,
+0x2c,0xc8,0x52,0x2d,0x52,0x98,0xdc,0xbb,0xeb,0x89,0xb0,0x2f,0x6a,0xa3,0x94,0x27,
+0xc2,0x73,0x86,0x52,0x8c,0xf2,0x4c,0xe9,0xa5,0x7d,0x23,0x19,0xea,0xc8,0x0b,0xc5,
+0x50,0x06,0xc2,0xb5,0x8b,0x4d,0x99,0x4a,0x2d,0x79,0xec,0x16,0x01,0x8f,0x85,0xb7,
+0xbd,0x99,0xf0,0x3d,0x99,0x0c,0x92,0xab,0xf5,0xa0,0x10,0xca,0x2e,0x38,0x42,0x7a,
+0x6f,0x21,0x84,0x96,0x3a,0x16,0xbe,0xf9,0xd1,0x9c,0x96,0x07,0xe6,0xd4,0xcc,0xcd,
+0xa4,0x3c,0x2a,0x0f,0xca,0x93,0x76,0xab,0x7a,0xd3,0x8e,0x65,0xfa,0x19,0x8b,0x94,
+0xe8,0x79,0x4e,0xc2,0x65,0xba,0x15,0x14,0x85,0xc3,0x94,0x88,0x3d,0xa7,0xd0,0xfb,
+0xb1,0x28,0x22,0x21,0x34,0xfc,0x14,0x81,0x92,0xb9,0x66,0x7a,0x3f,0x07,0x58,0x2d,
+0xf6,0x74,0xeb,0x01,0x1f,0xf2,0xea,0xa9,0xc3,0x0a,0x15,0x78,0x8e,0xca,0x62,0xb1,
+0xf5,0xa0,0xc0,0xe6,0x56,0xf5,0x1c,0x7f,0x2a,0xca,0xba,0x59,0xb8,0xef,0xb7,0x43,
+0x39,0x64,0x41,0xcc,0x8b,0xc2,0x73,0x52,0x3e,0xec,0x72,0xc5,0xaa,0x1f,0x37,0x14,
+0x3d,0x3e,0x88,0x75,0xbd,0xec,0xc9,0x3d,0x11,0xba,0x3a,0xcb,0xe1,0xe9,0x86,0x8d,
+0x4b,0x1e,0x85,0xaa,0x5e,0xf9,0x6d,0xbe,0x80,0x2e,0xd3,0x50,0xec,0x6d,0x51,0xb9,
+0x40,0x60,0x15,0x23,0xce,0xfa,0x19,0x61,0xe1,0xb8,0xe0,0xa6,0xbe,0xd7,0x16,0x6f,
+0x3a,0x4c,0x86,0xc8,0x59,0xa4,0x03,0x57,0xa2,0x36,0x8b,0xad,0x83,0xb8,0xb6,0x07,
+0xb8,0x1a,0x11,0xfe,0x56,0xbb,0xe9,0x8f,0x0f,0xca,0xd6,0x06,0xe6,0x81,0x96,0x43,
+0x94,0xb7,0x89,0x74,0x02,0x43,0xe6,0xcb,0x2e,0xa0,0x23,0x2d,0xd3,0x7e,0x51,0xc1,
+0xf7,0xcd,0xf7,0xa8,0xd5,0x21,0x55,0xc9,0x5c,0x9a,0x33,0x33,0x33,0xd3,0x2a,0x87,
+0x55,0x33,0x99,0xf6,0xb2,0xda,0xe4,0x99,0xb9,0x28,0x1f,0x99,0x4b,0x98,0xcc,0x61,
+0xfc,0xb9,0x99,0x96,0xe3,0x66,0xa3,0x48,0x16,0x3a,0x53,0xfb,0xb5,0xdd,0x77,0xe5,
+0x31,0x6c,0x2e,0x20,0x8c,0xf3,0xeb,0xfd,0xad,0x01,0x94,0x5f,0x51,0xb6,0x44,0xff,
+0x48,0xf1,0x3c,0x07,0xf1,0x96,0xb5,0x85,0x96,0xc1,0x45,0xb4,0xdd,0x98,0x27,0x1e,
+0x2f,0xd7,0x2e,0xe7,0xa9,0x88,0x99,0xbd,0xd7,0xd5,0x86,0xed,0x92,0xf7,0xea,0x15,
+0xd5,0x16,0x4c,0x54,0x31,0x8a,0xfb,0xd9,0x88,0x0a,0x6d,0x9e,0x11,0x1b,0x48,0xee,
+0x0b,0x00,0x9d,0x9a,0x19,0x33,0x2f,0x90,0xdf,0x11,0x30,0x63,0x89,0x3c,0xc9,0x0b,
+0x55,0x32,0x2f,0x34,0xd7,0xa2,0x43,0xb5,0x84,0x82,0xad,0x78,0x3d,0xa7,0x17,0x67,
+0x5c,0xbf,0xc3,0x94,0xec,0x47,0xa4,0xe2,0x65,0x21,0xdc,0x88,0x4e,0x2a,0xc5,0x1e,
+0x4d,0xbd,0x53,0x8b,0xa0,0x5a,0xe8,0xae,0x4b,0xce,0xe9,0xa5,0xc2,0x15,0xfa,0xe6,
+0xeb,0xf2,0x31,0xaa,0xf3,0x3b,0x20,0x5c,0x9a,0x09,0xb3,0x0c,0xbe,0x40,0x5b,0x8d,
+0xcd,0x1f,0x66,0x62,0x61,0x4e,0xd8,0xc6,0xc7,0x3b,0xbb,0xb7,0xd0,0x66,0x18,0x19,
+0x74,0x15,0x48,0xd1,0xe2,0xdc,0xd9,0x25,0x20,0xb4,0xc4,0x0f,0xbd,0x69,0x59,0xa7,
+0x57,0x8e,0x4f,0x5e,0xdd,0xf5,0x9d,0x7f,0x71,0x5d,0x63,0x3e,0x2d,0xc7,0x0c,0x74,
+0x5a,0x99,0x81,0x58,0x70,0xd9,0x80,0x53,0xa6,0x9d,0x9e,0x12,0x0f,0x9b,0xc1,0xd6,
+0xfc,0x44,0x32,0x0c,0x05,0xf5,0x4e,0x45,0xca,0x35,0xf6,0x97,0x0a,0x91,0x0d,0xf4,
+0x9a,0x18,0x95,0x53,0x74,0x83,0xf9,0x0d,0xd4,0x1e,0x9b,0x3f,0xd1,0x0b,0x4d,0x40,
+0xf3,0x11,0x8d,0x83,0x7f,0x64,0xf4,0x17,0x54,0x64,0x06,0x9d,0x3f,0x85,0x78,0xce,
+0x18,0xe4,0x3e,0x41,0x91,0xa6,0x66,0xde,0x90,0x72,0x9e,0x64,0x21,0xcd,0xe5,0x06,
+0x5f,0x8d,0x09,0xa3,0xed,0xa0,0x01,0x68,0xb2,0x6e,0x3a,0x06,0xb0,0xbf,0x62,0x71,
+0x40,0xb1,0xd0,0x93,0xe0,0x83,0x95,0x87,0x24,0x57,0xe0,0xb7,0x8d,0x69,0xce,0x1a,
+0xe2,0xf2,0x98,0xab,0xa4,0x29,0x6e,0xcb,0xea,0x0f,0x80,0x20,0xd6,0xfa,0xbe,0xaa,
+0xdb,0xff,0xda,0x56,0xef,0x72,0xad,0x85,0x82,0xd2,0xcd,0x57,0x00,0x0e,0x66,0xcc,
+0x1c,0xd7,0x79,0x39,0xb6,0x4d,0x86,0x69,0x50,0x9e,0x90,0xa4,0x9f,0x03,0x2f,0x84,
+0x61,0xf9,0x9a,0x5e,0x35,0x59,0xf7,0x75,0x36,0xd9,0xb7,0x98,0x66,0x33,0xe8,0x93,
+0x86,0xe1,0x97,0xab,0x88,0x6e,0x36,0x56,0x97,0xeb,0x4e,0xc0,0xe9,0xab,0xd1,0x50,
+0xbf,0x85,0x42,0x91,0xdd,0xb1,0x1d,0xad,0xd4,0xa5,0x17,0xc8,0x19,0x8d,0x70,0x04,
+0x45,0xcc,0x31,0x54,0x26,0xc8,0x15,0x39,0xdb,0x91,0xd8,0xa4,0x33,0x99,0xa6,0x42,
+0x75,0xb4,0x48,0xd6,0x86,0xf8,0xc1,0x4e,0x2b,0xc8,0xa0,0x7c,0x02,0xbf,0x13,0xac,
+0xc6,0x0c,0x0b,0x92,0xdd,0x9c,0xa2,0xd1,0x57,0xf8,0x39,0x35,0x9d,0xfd,0x06,0xaf,
+0x0e,0x07,0xca,0x41,0xcb,0x44,0x74,0x62,0xd1,0xb3,0x03,0x6b,0x75,0x4e,0xfc,0x0f,
+0x8a,0x80,0x12,0x7e,0x46,0xd2,0x8f,0xa1,0x59,0xd4,0x1d,0x84,0x83,0x18,0x1a,0xaf,
+0x33,0x8b,0xb1,0x1e,0xaf,0xe1,0xeb,0xac,0xfc,0x37,0x68,0x99,0x43,0x00,0x00,0x6b,
+0x80,0x42,0x8a,0x3c,0x23,0x12,0xed,0xfc,0x6a,0xe8,0x9f,0x50,0x6e,0xaf,0xab,0xfa,
+0x4f,0xe0,0xfe,0x1c,0x97,0xed,0xc8,0xca,0xd3,0x62,0x50,0xb1,0xed,0x06,0x6f,0x2a,
+0x7b,0x55,0x6f,0xb7,0x1b,0xbd,0xdd,0x6e,0xc2,0xd6,0x54,0xc7,0x45,0x97,0x57,0xa7,
+0xa5,0x97,0x38,0x70,0xd9,0xf3,0xda,0xdf,0x0f,0x5c,0x6b,0xad,0xfc,0x90,0x6b,0xfe,
+0x1e,0x8e,0x4f,0xf7,0xd2,0x8d,0x5b,0x9b,0x39,0x57,0x3c,0x29,0x3e,0x10,0x18,0xf2,
+0x45,0xb4,0x81,0x2f,0xd5,0xf5,0xa1,0x8d,0xce,0xbe,0x7f,0x01,0x6d,0x9a,0x6f,0x1f,
+0x0b,0x0b,0x00,0x00,};
+
+static const unsigned int dummy_align__role_js = 6;
+static const unsigned char data__role_js[] = {
+/* /role.js (8 chars) */
+0x2f,0x72,0x6f,0x6c,0x65,0x2e,0x6a,0x73,0x00,
+
+/* HTTP header */
+
+/* "HTTP/1.1 200 OK
+" (17 bytes) */
+0x48,0x54,0x54,0x50,0x2f,0x31,0x2e,0x31,0x20,0x32,0x30,0x30,0x20,0x4f,0x4b,0x0d,
+0x0a,
+/* "Server: lwIP/1.3.1 (http://savannah.nongnu.org/projects/lwip)
+" (63 bytes) */
+0x53,0x65,0x72,0x76,0x65,0x72,0x3a,0x20,0x6c,0x77,0x49,0x50,0x2f,0x31,0x2e,0x33,
+0x2e,0x31,0x20,0x28,0x68,0x74,0x74,0x70,0x3a,0x2f,0x2f,0x73,0x61,0x76,0x61,0x6e,
+0x6e,0x61,0x68,0x2e,0x6e,0x6f,0x6e,0x67,0x6e,0x75,0x2e,0x6f,0x72,0x67,0x2f,0x70,
+0x72,0x6f,0x6a,0x65,0x63,0x74,0x73,0x2f,0x6c,0x77,0x69,0x70,0x29,0x0d,0x0a,
+/* "Content-Length: 2318
+" (22 bytes) */
+0x43,0x6f,0x6e,0x74,0x65,0x6e,0x74,0x2d,0x4c,0x65,0x6e,0x67,0x74,0x68,0x3a,0x20,
+0x32,0x33,0x31,0x38,0x0d,0x0a,
+/* "Connection: Close
+" (19 bytes) */
+0x43,0x6f,0x6e,0x6e,0x65,0x63,0x74,0x69,0x6f,0x6e,0x3a,0x20,0x43,0x6c,0x6f,0x73,
+0x65,0x0d,0x0a,
+/* "Content-type: application/x-javascript
+Content-Encoding: gzip
+" (64 bytes) */
+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,0x78,0x2d,0x6a,0x61,0x76,0x61,
+0x73,0x63,0x72,0x69,0x70,0x74,0x0d,0x0a,0x43,0x6f,0x6e,0x74,0x65,0x6e,0x74,0x2d,
+0x45,0x6e,0x63,0x6f,0x64,0x69,0x6e,0x67,0x3a,0x20,0x67,0x7a,0x69,0x70,0x0d,0x0a,
+/* "ETag: "bJIoeM11f3YHUDn"
+" (25 bytes) */
+0x45,0x54,0x61,0x67,0x3a,0x20,0x22,0x62,0x4a,0x49,0x6f,0x65,0x4d,0x31,0x31,0x66,
+0x33,0x59,0x48,0x55,0x44,0x6e,0x22,0x0d,0x0a,0x0d,0x0a,
+
+/* raw file data (2318 bytes) */
+0x1f,0x8b,0x08,0x00,0x00,0x00,0x00,0x00,0x04,0x0a,0xb5,0x58,0xef,0x8e,0xdb,0xc6,
+0x11,0x7f,0x15,0xde,0x26,0xb8,0xe3,0x5a,0x3c,0x9a,0x72,0x52,0x17,0x16,0x8f,0x3e,
+0xe4,0xce,0x6e,0xec,0xc0,0x67,0x07,0x39,0x15,0x4d,0x61,0x18,0xc6,0x8a,0x5c,0x49,
+0xeb,0xa3,0x76,0x59,0x72,0xa9,0xb3,0x7a,0x27,0xa0,0x35,0xd0,0x4f,0x2d,0x10,0xb4,
+0x9f,0x8a,0x7e,0x68,0xd0,0x37,0x48,0x8b,0x18,0x08,0xd0,0x26,0xcf,0xa0,0x7b,0xa3,
+0xfe,0x76,0x49,0x4a,0x94,0xee,0x64,0x1b,0x05,0x0a,0xdb,0x89,0x38,0x3b,0xb3,0x3b,
+0x3b,0x7f,0x7e,0x33,0xb3,0xc3,0x52,0xc6,0x5a,0x28,0xe9,0xc4,0x39,0x67,0x9a,0x9f,
+0x96,0x83,0xa7,0x6c,0x2a,0x46,0xcc,0xd0,0x5c,0x7a,0x31,0x65,0xb9,0xa3,0xa3,0x44,
+0xc5,0xe5,0x84,0x4b,0xed,0x57,0x4c,0x0f,0x53,0x6e,0xbe,0x5c,0x92,0x88,0x29,0xa1,
+0x21,0xc8,0x29,0x2b,0x8a,0xa7,0x6c,0xc2,0x23,0x52,0x94,0x03,0xc9,0xa6,0x24,0x34,
+0x82,0x7c,0xab,0x60,0x99,0x42,0x8e,0xb7,0xe5,0x20,0xe4,0xe0,0xdf,0x80,0xe5,0xfb,
+0x46,0xde,0xd3,0x3e,0xcb,0x32,0x2e,0x93,0xe3,0xb1,0x48,0x13,0x97,0x53,0xbb,0xa1,
+0x8a,0x9e,0x6f,0x53,0x25,0x15,0x84,0x7a,0xef,0x5a,0x7c,0x11,0xaa,0xe7,0xc1,0x0b,
+0x5f,0x48,0xc9,0xf3,0x47,0xfd,0x93,0x27,0xd1,0xde,0x01,0x73,0xc6,0x39,0x1f,0x46,
+0x64,0x2c,0x0a,0xad,0xf2,0x99,0x3f,0xd6,0x93,0x94,0xdc,0x5f,0xfc,0x63,0xf1,0xd3,
+0xe2,0x9f,0x57,0x7f,0xbc,0x7a,0xb3,0xf8,0xe1,0xea,0x1b,0x67,0xf1,0x37,0x7c,0xfe,
+0x78,0xf5,0xe6,0xea,0x77,0xf8,0xff,0xbf,0xf1,0xe7,0x2d,0x7e,0x7d,0x77,0x70,0x9b,
+0xdd,0xdf,0xf3,0xd4,0xf3,0xee,0xcd,0x3b,0x96,0x59,0xf1,0xf2,0xfa,0xae,0x57,0xbf,
+0xc7,0x9e,0x3f,0x5d,0x7d,0xb3,0xf8,0x71,0xf1,0xc3,0xe2,0xad,0xb3,0xf8,0xeb,0xe2,
+0xcf,0x8b,0x6f,0xab,0x9d,0xc8,0xed,0x35,0xf6,0x28,0x3a,0x17,0x32,0x51,0xe7,0x7e,
+0xaa,0x62,0xeb,0x0a,0x3f,0x63,0x7a,0x2c,0x61,0xe1,0x43,0x7b,0x8b,0x96,0xc1,0x19,
+0xdc,0x37,0xe5,0xa4,0x47,0x6e,0x5f,0x3b,0x74,0xfb,0x2e,0xbb,0xbb,0xae,0xd5,0xfd,
+0xfa,0x3e,0xd4,0xe3,0x6b,0x96,0x37,0xc7,0x5d,0xa7,0x75,0x41,0xfb,0xd8,0xad,0x9d,
+0x3d,0x24,0x74,0x4d,0x44,0xd3,0xf9,0xb0,0x89,0xaa,0x8f,0x5d,0x4d,0x2f,0x72,0xae,
+0xcb,0x5c,0x3a,0x4b,0xef,0x8c,0xb8,0xae,0x43,0xe8,0x68,0xf6,0x38,0x01,0xc7,0x8a,
+0x3f,0xc6,0x85,0xcf,0x84,0x14,0xda,0xc8,0xc5,0x29,0x67,0xf9,0x63,0xa9,0x79,0x3e,
+0x65,0xa9,0xab,0xc5,0x84,0xab,0x52,0x53,0x2f,0x2e,0xe1,0xae,0xc9,0xb1,0xe1,0x04,
+0x97,0x57,0xd3,0xa3,0x82,0xeb,0x25,0x6f,0x8b,0xc5,0xeb,0xf2,0x4f,0x5a,0x07,0xa4,
+0x6a,0xf4,0xac,0xd4,0x88,0xec,0x5a,0xa9,0x54,0xb1,0xe4,0xeb,0x93,0x27,0x0f,0x54,
+0xec,0x12,0xac,0xe1,0x00,0x3f,0x1e,0x89,0x43,0xd2,0x39,0x81,0xc1,0xfd,0x9c,0xc1,
+0x0b,0x13,0x97,0x7a,0xe4,0xf3,0x87,0x7d,0xe2,0x35,0xd7,0x82,0x78,0xc2,0x53,0xae,
+0xf9,0xb1,0x52,0x67,0x82,0xbb,0x24,0x57,0x29,0x37,0xf1,0xb7,0x46,0x14,0x09,0x48,
+0x9b,0x7e,0xac,0x22,0xee,0x36,0x8e,0x12,0xb2,0x0a,0xb8,0x39,0xf5,0x76,0xba,0x2b,
+0x0b,0xb4,0x14,0xd2,0x1e,0xf7,0x94,0x27,0xab,0x2c,0x14,0xa1,0x2b,0x9a,0xa8,0x80,
+0xc2,0x8f,0xb4,0xce,0xbe,0xe2,0xbf,0x29,0x79,0xa1,0x0f,0x25,0x3f,0x77,0xd6,0x49,
+0x3d,0x43,0xaa,0x8f,0xfe,0xcc,0x06,0xc8,0xd7,0xcf,0x06,0xaf,0x78,0x8c,0x9c,0x3d,
+0x11,0x71,0xae,0x0a,0x35,0xd4,0xbe,0x11,0xe9,0xf7,0xbf,0x24,0x94,0xfa,0x0a,0xa9,
+0xe6,0x72,0x4f,0x7b,0x3b,0x01,0xf5,0x84,0x0f,0x53,0xd6,0x7b,0x3f,0xe2,0x2c,0xe1,
+0xb9,0x4b,0x8e,0x15,0xdc,0x20,0xf5,0x7e,0x7f,0x96,0x71,0xe2,0x11,0xe4,0x66,0x2a,
+0xaa,0xc8,0xbc,0xfd,0xaa,0x50,0x12,0xd9,0x6c,0x12,0x9e,0x85,0xc2,0x57,0x12,0x40,
+0x92,0xcc,0x0a,0x0d,0x34,0x89,0xc7,0x4c,0x8e,0x78,0xd4,0x32,0xdb,0xa7,0x51,0x24,
+0x7c,0xcb,0x70,0x6a,0x18,0x10,0x87,0x77,0x82,0x20,0x8a,0x5c,0x06,0xb2,0x11,0x29,
+0x0b,0x7a,0xe8,0x66,0xe7,0xc9,0xe3,0xe2,0x58,0xe5,0x39,0x14,0xb6,0xec,0x45,0xa6,
+0x64,0xc1,0xfb,0xfc,0xb5,0xf6,0x48,0xb3,0x19,0x89,0x22,0x0d,0x65,0xd4,0xd0,0x51,
+0xbb,0xbb,0xca,0x04,0x60,0x3a,0x73,0x05,0xa5,0xbd,0x18,0xbc,0x70,0x07,0x52,0x67,
+0xe4,0x92,0x87,0x79,0xae,0x72,0xdc,0x70,0x6e,0x6f,0x25,0x13,0x57,0xb6,0x62,0x81,
+0x25,0xc9,0xa9,0xca,0x6d,0xa8,0x0d,0x55,0xee,0x6e,0x40,0xd6,0x2a,0x4a,0x8b,0xa3,
+0xd9,0x71,0x83,0x70,0x08,0x7a,0x88,0xb0,0x81,0xf5,0xb7,0x8a,0x82,0x50,0x1d,0xe0,
+0x28,0x2e,0x47,0x7a,0x1c,0xaa,0x4e,0x87,0xf2,0xe7,0xea,0x85,0x8f,0x8d,0x1f,0x4e,
+0x61,0xae,0x27,0x00,0x16,0x0e,0xbc,0x71,0x49,0x0c,0x73,0x9d,0xad,0x05,0x50,0x75,
+0x9a,0x46,0xda,0xfb,0x38,0xe9,0x33,0xad,0x73,0x31,0x28,0x35,0x62,0xc9,0xec,0x8f,
+0xc0,0x51,0xd1,0x0d,0x6b,0x89,0x30,0x36,0x01,0x34,0xc3,0xe0,0xc5,0xb9,0xd0,0xf1,
+0xd8,0xe6,0x09,0x2b,0x38,0x61,0x29,0xcb,0x27,0x05,0xe9,0x99,0x7d,0x65,0xb4,0xc4,
+0x8d,0x31,0x2b,0xc6,0x7e,0x01,0x6f,0xc1,0xf5,0x1f,0x11,0x0a,0xc0,0x0a,0xcd,0x71,
+0x96,0xd9,0x95,0x26,0xc0,0x68,0x38,0x80,0x43,0xce,0xc2,0xd8,0xec,0x92,0xe4,0x33,
+0x21,0xb3,0x52,0x63,0x23,0xb0,0x3d,0xc8,0x67,0x8f,0xed,0x17,0x62,0x63,0x9d,0x2f,
+0xe7,0x29,0x13,0x15,0xd3,0x57,0xf6,0xa7,0xe5,0x98,0x77,0xa3,0x48,0x1d,0x5a,0xbd,
+0x11,0x42,0xad,0x3b,0xad,0xf4,0xf6,0xc8,0x7e,0x97,0xd0,0xde,0x7b,0x78,0xc0,0x32,
+0x6f,0x39,0x0a,0xaa,0xd4,0x99,0x06,0x54,0xb0,0x86,0x0b,0xdb,0xb5,0xc5,0x26,0x61,
+0x73,0xc9,0xd0,0x81,0x6d,0x1a,0x77,0xde,0xe0,0x20,0x2b,0x2f,0x23,0xeb,0xa7,0xda,
+0x2e,0x11,0x24,0xc4,0xd0,0x95,0x80,0x3a,0x04,0x15,0xad,0x91,0xa1,0x94,0xbc,0x88,
+0x59,0xc6,0x41,0x07,0xdc,0xcd,0x2b,0x2a,0x21,0xab,0x4c,0xc5,0x15,0x1b,0xad,0xac,
+0x1d,0xeb,0x9d,0x75,0x87,0x44,0xa4,0x53,0xcb,0xa2,0x70,0x61,0x67,0x75,0x3f,0xa8,
+0x93,0x38,0x32,0x89,0xf9,0x00,0x91,0x8f,0x4c,0x81,0x7c,0x1f,0x98,0xe6,0x0a,0x13,
+0x00,0xf6,0x17,0xed,0x7c,0x72,0x37,0x08,0x6e,0xa9,0x5b,0x06,0xb3,0x3c,0x19,0xc9,
+0x0e,0x09,0x1d,0xfe,0x3a,0x83,0xd7,0x0b,0xec,0x29,0x7c,0xad,0x3e,0x3f,0xe9,0x9f,
+0x22,0x54,0xe4,0xc8,0xa5,0xf3,0x25,0xa0,0xc6,0xd6,0x02,0x91,0x5c,0xe9,0xb6,0x86,
+0x44,0x30,0xda,0x26,0xab,0x51,0x72,0xb5,0x75,0x7f,0x5c,0x7a,0x4e,0xd0,0x75,0xbe,
+0x60,0xd2,0xe9,0xde,0xfb,0x79,0xe0,0x04,0x41,0xcf,0xfc,0xed,0x3a,0x38,0x2e,0x6c,
+0x5d,0x19,0x8a,0x7e,0x71,0xfa,0xec,0xa9,0x6b,0x91,0xa9,0xba,0x92,0x0c,0xe5,0xff,
+0x09,0x96,0x2c,0xa4,0x88,0x88,0x00,0x8f,0x4d,0xb2,0x37,0x0e,0xf6,0x51,0x6e,0x32,
+0x95,0xb9,0xf4,0x10,0x97,0x38,0x24,0x3d,0xfc,0x77,0x97,0x84,0xb2,0xc2,0xb0,0x0a,
+0xa7,0x45,0x87,0xbc,0x84,0xbd,0xdc,0xc6,0xd8,0x74,0x65,0x61,0x8b,0x70,0x60,0x7e,
+0x27,0x4a,0x99,0x10,0xd3,0x9e,0x08,0x81,0x56,0xf2,0x26,0xb4,0xd2,0x20,0x2f,0xd1,
+0x4a,0x44,0xc6,0x24,0x28,0xd0,0x79,0x81,0x58,0x01,0xfb,0x0a,0xad,0x50,0x38,0x2d,
+0x24,0x29,0x64,0x29,0x20,0x08,0x42,0xe8,0x68,0xe0,0xb8,0x06,0xc3,0x9c,0x78,0xcc,
+0xe3,0xb3,0xa7,0x4a,0x8b,0xe1,0x0c,0x35,0x85,0xe8,0xbc,0xe4,0xb8,0xea,0x2a,0xdc,
+0x89,0xe4,0x1a,0x61,0xa2,0xe1,0xef,0xe2,0x65,0x85,0xa6,0x28,0x2a,0x87,0x16,0xec,
+0x5e,0x36,0x0b,0xe8,0x69,0x90,0xdd,0xb4,0xb7,0x41,0x45,0x29,0x85,0x42,0x28,0x5d,
+0xdd,0xf5,0x2d,0x13,0x3e,0x15,0x31,0xdf,0xe7,0x15,0x32,0x1e,0x56,0x9f,0x2f,0xed,
+0x67,0xb3,0xd3,0x1a,0xad,0xde,0x67,0xa5,0x34,0xd4,0xfb,0x92,0xe5,0x6c,0x62,0xa2,
+0x80,0x5e,0xd4,0x30,0x84,0x5f,0x06,0x40,0x9c,0xa0,0x57,0x27,0x4a,0x7d,0x17,0xe3,
+0x37,0x39,0xc9,0x2c,0xba,0x38,0xdd,0x1b,0x16,0x27,0x45,0xb5,0x76,0xe7,0xfa,0x1a,
+0x9f,0x30,0x91,0xce,0x57,0x07,0x27,0x3c,0x16,0x13,0x96,0xf6,0xd5,0x91,0x90,0x2c,
+0x9f,0x19,0xe8,0xab,0x0e,0x73,0xf5,0xfd,0xfb,0x48,0x31,0xa4,0x47,0x9d,0x1b,0x77,
+0x5a,0x36,0x1e,0x58,0xe6,0xbe,0x7a,0x50,0x49,0xaf,0xa4,0x1c,0xeb,0x32,0xf4,0x0c,
+0xb8,0x48,0x5b,0x20,0x1e,0x98,0x13,0x0c,0x15,0x97,0xaa,0x0f,0x30,0x7d,0x8c,0x6f,
+0xbd,0xc5,0x93,0xc3,0x6e,0x2f,0xa0,0x07,0x07,0x7c,0xa5,0x18,0xcb,0x73,0x36,0xb3,
+0x42,0x27,0xac,0x30,0x4d,0x49,0xd3,0x5d,0x6c,0x9e,0xbd,0x79,0x83,0xe6,0x28,0x12,
+0x0f,0x02,0xd2,0xd1,0x5e,0x40,0x2f,0x5b,0xa4,0xae,0x21,0x75,0x29,0x42,0x67,0x19,
+0x30,0x36,0x56,0xea,0xca,0x7b,0xa4,0x5e,0x57,0x3a,0x5a,0x30,0x15,0x49,0xa4,0x3d,
+0xfb,0x4b,0x65,0xa6,0x42,0x14,0x11,0xbf,0xbc,0xbc,0x98,0x7b,0x64,0xc2,0x8b,0x82,
+0x8d,0x38,0x11,0xd2,0x69,0x2f,0x5f,0x5e,0xba,0xed,0x4f,0xbf,0x66,0x8b,0xc8,0xc6,
+0x11,0x3d,0xe7,0x11,0x4f,0x53,0xe5,0xfc,0x4a,0xe5,0x69,0xb2,0x83,0xc2,0x44,0x06,
+0xa3,0x58,0xa5,0xa8,0xaa,0xef,0xd9,0xb0,0x66,0x8b,0xc8,0x47,0x41,0x70,0xef,0xde,
+0xdd,0xbb,0x46,0x54,0xa3,0x84,0x7f,0x90,0xf0,0x92,0x11,0xe2,0xc3,0x21,0x3a,0x4c,
+0x8f,0x14,0x63,0x75,0xfe,0xbe,0x33,0x0d,0x4f,0x64,0x7a,0x18,0x52,0xe6,0xe9,0xfb,
+0x98,0xc1,0x12,0xed,0x74,0xe9,0xbc,0x95,0x6e,0x55,0x1f,0x77,0x79,0xd9,0x22,0x99,
+0x2e,0xee,0xf2,0x92,0xb4,0x3b,0xb6,0xed,0x7d,0x35,0x8c,0xfa,0xfe,0x86,0x8f,0x7a,
+0x9f,0x99,0x78,0xf1,0xb3,0x5c,0x69,0x65,0x7a,0x18,0xa4,0x5d,0xc2,0x5f,0x3f,0x1b,
+0x42,0x7a,0xcb,0x4a,0xd4,0x04,0x40,0xe5,0x70,0x6e,0x7c,0x1b,0xb4,0xaa,0x9c,0xf5,
+0x64,0xdd,0x85,0xf0,0x03,0x15,0xd2,0x0b,0x54,0x1d,0x43,0x7c,0xce,0x51,0xd2,0x56,
+0x35,0x8d,0x87,0x9d,0x0e,0xaf,0x4b,0xd9,0x7e,0x77,0x5e,0x75,0x6d,0x75,0x03,0xdd,
+0xee,0xab,0x57,0xe7,0xd1,0x8b,0xe6,0x68,0xc7,0x36,0x4a,0x4d,0xc2,0x1d,0x74,0x83,
+0x43,0x12,0x60,0xec,0x20,0xb4,0xa3,0x57,0xf1,0xc9,0x31,0xaa,0x35,0xc1,0xaf,0x5d,
+0x6e,0x70,0xd7,0x54,0x3b,0x97,0xd2,0x0e,0xf1,0x11,0xce,0x15,0xe9,0x04,0xdd,0xe4,
+0xd8,0xa5,0x9d,0x6e,0x45,0xb5,0x6c,0xbf,0x28,0xd3,0xf4,0xd7,0xe8,0xf7,0x41,0x26,
+0xce,0x92,0xf3,0x91,0x2a,0xf3,0xc2,0x4a,0xf7,0x96,0xb4,0x13,0x21,0xd1,0x28,0x6d,
+0x52,0x4f,0x39,0x1a,0xbf,0xc4,0x50,0xe7,0x06,0xbe,0x55,0x58,0x69,0xea,0x34,0xea,
+0x9b,0xac,0xb4,0xbd,0x91,0x27,0x56,0x45,0x58,0xa3,0x01,0x5d,0x96,0x46,0xe8,0xda,
+0x1e,0x4b,0xd0,0xb3,0x61,0xc2,0x18,0xa8,0xd7,0xa8,0x37,0x85,0x9e,0xa1,0xa3,0x54,
+0x19,0x8b,0x85,0x9e,0x45,0x40,0x54,0xcf,0x45,0x75,0xae,0x4b,0xb9,0x81,0xf8,0x65,
+0x31,0x47,0xe5,0xbe,0xb5,0xc2,0x15,0xda,0xb9,0xcb,0x3f,0xbd,0x25,0x9b,0xf2,0xf3,
+0x5b,0x25,0xf9,0xb3,0xe1,0x10,0xc0,0x0d,0x35,0xd1,0xe1,0x89,0x7d,0x89,0x76,0xbb,
+0xb5,0xd1,0xbe,0x6a,0x0d,0xb1,0xdb,0xf5,0xf9,0x40,0xad,0x57,0xb3,0xae,0x2d,0x43,
+0xf3,0xb9,0x4b,0xc3,0x3a,0x3c,0x95,0x34,0x73,0x46,0xdb,0xcd,0x08,0x98,0xb5,0x20,
+0xdf,0xd9,0x1e,0xe5,0xbb,0xbb,0xf0,0x3c,0xd6,0x5b,0x59,0xc2,0x4a,0x3d,0x46,0x9b,
+0x6d,0x2d,0xdc,0x7a,0x2f,0xd8,0xbc,0x82,0x19,0xed,0x51,0x14,0xb7,0xbe,0x0b,0xd8,
+0x29,0x5e,0x6d,0x5d,0x66,0x68,0xd4,0x94,0x5f,0x8d,0x50,0xaf,0xd8,0x94,0x15,0x71,
+0x2e,0x32,0xdd,0x9b,0x2a,0x91,0xb8,0x01,0x0d,0x89,0xa7,0x5a,0xf3,0x3d,0x59,0xfc,
+0x05,0x43,0xfc,0x1f,0x30,0xb5,0x7f,0xef,0xb8,0xa4,0xd3,0x52,0xb6,0x34,0x83,0x34,
+0xe2,0x96,0x50,0x23,0xa1,0xa4,0x6d,0xce,0xd1,0x32,0x9b,0xc9,0x10,0xe3,0x2f,0x90,
+0xb4,0x1e,0x05,0x09,0xbe,0x5a,0x23,0x72,0x35,0x1f,0x1a,0x22,0x4a,0xed,0xf2,0x6d,
+0x02,0x2e,0xdb,0x7c,0xac,0x98,0xcf,0xbd,0x0d,0x14,0x5d,0x4b,0x76,0xa1,0x37,0x0c,
+0xbf,0x83,0xf2,0x62,0x06,0x01,0x91,0xd0,0xdd,0xdd,0x35,0x54,0x36,0x80,0x76,0xcd,
+0xaa,0x5b,0x5e,0x61,0x4c,0x05,0xa8,0x76,0x81,0x42,0x2d,0xb5,0xa5,0xed,0x2f,0xf6,
+0x4d,0x24,0x63,0xa1,0x0a,0xe5,0x01,0x8b,0xcf,0x46,0xb9,0x2a,0xf1,0xc0,0x62,0xb0,
+0xbc,0x12,0xac,0x0b,0x87,0x5f,0x23,0xf7,0x92,0xd9,0x22,0xf6,0x3a,0xcb,0x12,0x9f,
+0x6d,0x93,0xb6,0xdd,0xa1,0x59,0xd5,0x5a,0x73,0xdf,0x08,0xd4,0x43,0xe4,0xfa,0x4e,
+0x75,0xdd,0xb9,0x66,0xc3,0xb5,0x5a,0xe6,0x03,0xab,0x2b,0x33,0x6c,0x0f,0x0e,0x4c,
+0x4f,0xda,0x0e,0x46,0xaa,0x7d,0xf9,0x81,0x96,0x0e,0xfe,0xed,0x27,0x66,0x12,0xcd,
+0xf7,0x85,0x9c,0xf2,0x5c,0xf3,0xc4,0x38,0xbe,0xad,0x12,0x59,0x7c,0x6b,0x02,0x05,
+0xef,0x33,0xff,0xb2,0x0f,0x3c,0xdf,0xe3,0xed,0xe7,0xcd,0xd5,0x9f,0x0c,0x1b,0xb2,
+0xb5,0x35,0xc9,0xd4,0xd1,0x82,0x19,0xb8,0x35,0xa8,0xef,0x01,0x9b,0x8c,0xe5,0x1b,
+0x03,0x42,0xdb,0x0e,0xd9,0xf3,0xf6,0xf0,0x68,0xb0,0xe7,0x39,0x65,0x96,0x00,0x02,
+0x33,0xd4,0x60,0x8a,0xe0,0x5f,0x8f,0x15,0x45,0xe7,0x35,0x52,0x2f,0x85,0x63,0x26,
+0x63,0x9e,0x1e,0xd9,0xdb,0xd4,0x90,0xb5,0x35,0x21,0x96,0x77,0x96,0x37,0xdd,0xf9,
+0x9c,0xe5,0x12,0x9d,0x63,0xeb,0xd2,0xa6,0x6d,0x35,0x48,0x36,0x61,0x39,0xde,0x1f,
+0x9e,0xf0,0xa1,0x8e,0xc8,0xcf,0x32,0xc4,0x85,0xdc,0xb0,0xc6,0xdf,0x61,0x89,0xff,
+0x2c,0xde,0xe2,0xa5,0xea,0x3b,0xb3,0xf8,0x3f,0xd8,0xa0,0xba,0xc6,0x2f,0x3f,0xd8,
+0x12,0x18,0xcc,0x97,0x48,0x3c,0x50,0xc9,0x0c,0x99,0x5c,0xc0,0x55,0x47,0x1c,0xb3,
+0x1c,0x47,0xd9,0x5b,0x5f,0x8c,0xcd,0xb3,0xe0,0x53,0x95,0xf0,0xc2,0xbe,0x4f,0x0d,
+0xf1,0x4a,0xf1,0x58,0xba,0xab,0x34,0xa2,0xef,0x4c,0x41,0xdb,0xd2,0x6e,0xe4,0x60,
+0x4b,0xb6,0x46,0xb1,0x15,0x25,0x5c,0x3f,0x3c,0xe7,0x13,0x35,0xe5,0xd5,0xcb,0x24,
+0x1e,0xaf,0xe6,0xe1,0x7f,0x01,0x04,0xdb,0x49,0x1e,0x45,0x15,0x00,0x00,};
+
+static const unsigned int dummy_align__main_css = 7;
+static const unsigned char data__main_css[] = {
+/* /main.css (9 chars) */
+0x2f,0x6d,0x61,0x69,0x6e,0x2e,0x63,0x73,0x73,0x00,
+
+/* HTTP header */
+
+/* "HTTP/1.1 200 OK
+" (17 bytes) */
+0x48,0x54,0x54,0x50,0x2f,0x31,0x2e,0x31,0x20,0x32,0x30,0x30,0x20,0x4f,0x4b,0x0d,
+0x0a,
+/* "Server: lwIP/1.3.1 (http://savannah.nongnu.org/projects/lwip)
+" (63 bytes) */
+0x53,0x65,0x72,0x76,0x65,0x72,0x3a,0x20,0x6c,0x77,0x49,0x50,0x2f,0x31,0x2e,0x33,
+0x2e,0x31,0x20,0x28,0x68,0x74,0x74,0x70,0x3a,0x2f,0x2f,0x73,0x61,0x76,0x61,0x6e,
+0x6e,0x61,0x68,0x2e,0x6e,0x6f,0x6e,0x67,0x6e,0x75,0x2e,0x6f,0x72,0x67,0x2f,0x70,
+0x72,0x6f,0x6a,0x65,0x63,0x74,0x73,0x2f,0x6c,0x77,0x69,0x70,0x29,0x0d,0x0a,
+/* "Content-Length: 9898
+" (22 bytes) */
+0x43,0x6f,0x6e,0x74,0x65,0x6e,0x74,0x2d,0x4c,0x65,0x6e,0x67,0x74,0x68,0x3a,0x20,
+0x39,0x38,0x39,0x38,0x0d,0x0a,
+/* "Connection: Close
+" (19 bytes) */
+0x43,0x6f,0x6e,0x6e,0x65,0x63,0x74,0x69,0x6f,0x6e,0x3a,0x20,0x43,0x6c,0x6f,0x73,
+0x65,0x0d,0x0a,
+/* "Content-type: text/css
+Content-Encoding: gzip
+" (48 bytes) */
+0x43,0x6f,0x6e,0x74,0x65,0x6e,0x74,0x2d,0x74,0x79,0x70,0x65,0x3a,0x20,0x74,0x65,
+0x78,0x74,0x2f,0x63,0x73,0x73,0x0d,0x0a,0x43,0x6f,0x6e,0x74,0x65,0x6e,0x74,0x2d,
+0x45,0x6e,0x63,0x6f,0x64,0x69,0x6e,0x67,0x3a,0x20,0x67,0x7a,0x69,0x70,0x0d,0x0a,
+/* "ETag: "8UFDnLY4BTXkyB4"
+" (25 bytes) */
+0x45,0x54,0x61,0x67,0x3a,0x20,0x22,0x38,0x55,0x46,0x44,0x6e,0x4c,0x59,0x34,0x42,
+0x54,0x58,0x6b,0x79,0x42,0x34,0x22,0x0d,0x0a,0x0d,0x0a,
+
+/* raw file data (9898 bytes) */
+0x1f,0x8b,0x08,0x00,0x00,0x00,0x00,0x00,0x04,0x0a,0xcd,0x3d,0x5b,0x8e,0x23,0x39,
+0x72,0x57,0x91,0xa7,0xd0,0x76,0xb7,0x5b,0x29,0xe8,0x55,0x2f,0x09,0x5b,0xb0,0xbd,
+0x1f,0xf6,0xa7,0x01,0xef,0x7e,0x0d,0x1a,0x83,0x94,0x94,0x2a,0xe5,0xb6,0xa4,0x14,
+0x24,0x55,0x3f,0x46,0xd0,0x1d,0x0c,0x03,0x06,0x0c,0x18,0x5e,0xaf,0xf7,0x02,0xbe,
+0x4a,0x1f,0xc9,0xf1,0x24,0x83,0x4c,0x66,0x4a,0xd5,0x3b,0x18,0x18,0x6d,0xcf,0x96,
+0x92,0x64,0x30,0x22,0x18,0x11,0x0c,0x06,0x83,0xe4,0xea,0xb8,0x59,0x9f,0x96,0xd5,
+0xf6,0x98,0x2d,0xf3,0x4d,0xb9,0xfe,0x3a,0x39,0xe4,0xdb,0x43,0x76,0x28,0xf6,0xe5,
+0x72,0x9a,0x6d,0x0e,0xd9,0xb1,0xf8,0x72,0xcc,0x0e,0xe5,0xcf,0x45,0x96,0x2f,0xfe,
+0xf0,0x72,0x38,0x4e,0x06,0xfd,0xfe,0x9b,0x69,0xf6,0xb9,0x98,0x7d,0x2c,0x8f,0xe9,
+0xd2,0xf3,0xac,0x5a,0x7c,0x3d,0x6d,0xf2,0xfd,0x73,0xb9,0x9d,0xf4,0xcf,0xf9,0xfe,
+0x58,0xce,0xd7,0x45,0x37,0x3f,0x94,0x8b,0xa2,0xbb,0x28,0x8e,0x79,0xb9,0x3e,0x74,
+0x97,0xe5,0xf3,0x3c,0xdf,0x1d,0xcb,0x6a,0x8b,0x7f,0xbe,0xec,0x8b,0xee,0xb2,0xaa,
+0x8e,0xc5,0xbe,0xbb,0x2a,0xf2,0x05,0xfc,0xcf,0x26,0x2f,0xb7,0xdd,0x4d,0xb1,0x7d,
+0xe9,0x6e,0xf3,0x4f,0xdd,0x43,0x31,0xa7,0xaa,0x87,0x97,0x0d,0xc0,0xfd,0x7a,0x5a,
+0x94,0x87,0xdd,0x3a,0xff,0x3a,0x99,0xad,0xab,0xf9,0xc7,0x73,0xfe,0xb2,0x28,0xab,
+0xee,0x3c,0xdf,0x7e,0xca,0x0f,0xdd,0xdd,0xbe,0x7a,0xde,0x17,0x87,0x43,0xf7,0x13,
+0x74,0x57,0xb9,0x9a,0xe5,0x76,0x5d,0x6e,0x8b,0xcc,0x34,0x98,0x6c,0xab,0xe3,0xdb,
+0x1f,0xe7,0x40,0xfa,0xbe,0x5a,0x1f,0x3e,0xbc,0x73,0x55,0xb7,0xd5,0xb6,0x98,0xae,
+0x8a,0xf2,0x79,0x75,0x04,0xf4,0x15,0xde,0xe9,0x53,0x81,0x84,0xe4,0xeb,0x2c,0x5f,
+0x97,0xcf,0xdb,0xc9,0x2c,0x3f,0x14,0x08,0xf2,0xfc,0xe3,0xaa,0x5c,0x2c,0x8a,0xed,
+0x87,0xee,0xb1,0xd8,0x00,0x52,0xc7,0x22,0x00,0x74,0xce,0x4f,0xb3,0x7c,0xfe,0xf1,
+0x79,0x5f,0xbd,0x6c,0x17,0xd9,0xbc,0x5a,0x57,0xfb,0xc9,0x71,0x0f,0x3c,0xde,0xe5,
+0xfb,0x62,0x7b,0x0c,0x39,0xb9,0x28,0xe6,0xd5,0x3e,0x47,0x4a,0xb3,0xc3,0xc7,0x72,
+0x37,0xa9,0x66,0x7f,0x00,0xc2,0x0f,0xe7,0x7c,0x92,0x03,0xfd,0x9f,0x80,0x87,0x93,
+0x55,0x05,0x78,0x9c,0xaa,0x97,0x23,0x91,0xf3,0xb9,0x5c,0x1c,0x57,0x80,0xe4,0x31,
+0x9f,0xad,0x8b,0xd3,0xac,0xda,0x03,0xeb,0xb0,0x93,0x75,0xbe,0x3b,0x14,0x13,0xfd,
+0x63,0x2a,0x05,0xd0,0xe7,0xbc,0xdc,0x3e,0xe3,0x98,0xcc,0x66,0xfb,0x1f,0x8f,0xe5,
+0x71,0x5d,0x7c,0xd0,0x56,0xb3,0xea,0x78,0xac,0x36,0xc0,0x14,0x20,0x9e,0x06,0xdd,
+0x23,0x33,0x01,0xd4,0x8b,0x3d,0x76,0xd8,0x5c,0xd2,0x59,0x40,0xfb,0x62,0x71,0x9e,
+0x75,0x0f,0xc0,0xcf,0xed,0x33,0xcb,0xd4,0x67,0xe6,0x62,0xb9,0x5d,0x81,0x40,0x1d,
+0xd3,0x85,0xb3,0x6a,0x0d,0xd0,0xcf,0x8b,0xe5,0x96,0xdb,0x1c,0x8e,0x5f,0xd7,0xc5,
+0xa4,0x3c,0x02,0x9b,0xe7,0xe7,0xd5,0x40,0x3e,0x82,0x04,0x4e,0x86,0xc5,0x66,0x2a,
+0x62,0xd5,0xbb,0xbb,0x2f,0x36,0x9d,0xfe,0x19,0x7e,0x7e,0xac,0x33,0xf8,0x66,0xb9,
+0xec,0x4f,0x99,0xd7,0x37,0xfd,0x7e,0xff,0x7c,0xd8,0xe4,0x6b,0x91,0x72,0x14,0xe5,
+0xc9,0x43,0xff,0xcd,0xf9,0xf0,0x02,0xa8,0xbe,0xec,0x0c,0xf8,0xfb,0xdb,0x37,0x53,
+0xe2,0xaa,0x8e,0xfd,0x74,0x57,0x1d,0x4a,0x1c,0x8d,0xc9,0xbe,0x80,0x81,0x85,0x01,
+0x98,0x36,0x09,0x01,0x40,0x03,0x46,0x12,0x07,0xb3,0xde,0xf0,0xb6,0xd8,0x00,0xfc,
+0xdd,0xe9,0x58,0xed,0x26,0x59,0x0f,0x7f,0x95,0x9b,0x67,0x65,0x34,0xd3,0x87,0x7c,
+0x3e,0x1f,0x3e,0x3d,0x93,0x14,0x4e,0xf6,0x20,0xfb,0xef,0x4e,0x38,0xb4,0xcb,0x75,
+0xf5,0x79,0xc2,0x12,0x75,0x9e,0x57,0xa0,0x30,0x1f,0x67,0x0b,0x90,0xe9,0xa2,0x7b,
+0xc8,0x37,0x82,0xac,0x28,0xea,0xa6,0xda,0x56,0x38,0xa2,0x45,0xd7,0xfd,0x35,0x25,
+0x45,0x26,0x12,0x07,0xd0,0x29,0x2b,0x96,0x6a,0x22,0x7c,0xe9,0x8c,0xfb,0xbb,0x2f,
+0xe7,0xd5,0x1e,0x50,0xf9,0x82,0x4a,0x8d,0xc2,0x80,0x0a,0x00,0x82,0x98,0xc1,0x27,
+0x27,0xf4,0x53,0x87,0xc9,0xa7,0xf2,0x50,0x82,0x68,0x9d,0x67,0x2f,0x40,0xdb,0xb6,
+0x5b,0x6e,0x77,0x2f,0xc7,0x6e,0xb5,0x3b,0xa2,0x3c,0xef,0x40,0x2d,0xd7,0x20,0x9f,
+0x20,0xf8,0x5f,0x8e,0x20,0xcd,0x39,0xf1,0x72,0x22,0x83,0xad,0x23,0xd5,0x3f,0x6b,
+0x75,0x66,0xb5,0x88,0xc4,0x3d,0x0c,0x8b,0x05,0xea,0x89,0x8f,0xba,0xe4,0x3e,0x4e,
+0x24,0x92,0xa4,0x38,0xcb,0x6a,0xcf,0x62,0x7a,0xfe,0xf1,0xf8,0x75,0x57,0xfc,0x06,
+0x94,0xbd,0x38,0x7e,0xe8,0xf2,0x0f,0x18,0x87,0x4d,0x09,0xbf,0x04,0xf4,0x0a,0xac,
+0x5b,0x87,0x4b,0xf8,0xcb,0x87,0x93,0x9a,0xae,0x7c,0xb7,0x2b,0x72,0x50,0xc4,0x79,
+0x31,0xe1,0x22,0x01,0x27,0xf5,0x26,0x93,0x6c,0x53,0xfd,0x9c,0x2d,0xab,0xf9,0xcb,
+0x21,0x2b,0xb7,0x5b,0x30,0x49,0xb6,0xbb,0xc6,0x62,0x41,0x20,0x51,0xce,0x80,0xeb,
+0x05,0x75,0xb9,0x98,0xee,0xf2,0xc5,0x82,0x15,0x35,0xc0,0xdd,0xa0,0xb4,0x87,0xe2,
+0x10,0x21,0x8f,0xae,0x29,0x53,0x6c,0xa2,0x42,0x41,0x25,0xfc,0xaa,0x46,0x65,0x32,
+0xd8,0x7d,0x11,0x6d,0xee,0xfc,0x03,0x0d,0xfb,0xef,0x60,0x7c,0x41,0x98,0x8a,0xf5,
+0x02,0x38,0x2d,0xe8,0x52,0xad,0x43,0xb5,0x2e,0x17,0x9d,0x43,0xb9,0x06,0xc1,0x75,
+0xe3,0xdd,0x19,0xee,0xbe,0x38,0x0a,0x7a,0x23,0x90,0xfe,0x4e,0xef,0x0e,0x55,0xa2,
+0xd3,0xbb,0x47,0x55,0x58,0x17,0xcf,0xc5,0x76,0x61,0x45,0x50,0xcc,0x13,0x4a,0x20,
+0x2b,0xad,0x8a,0x90,0x9a,0x79,0x32,0x6f,0xd0,0xc1,0x97,0x8c,0x0d,0x1e,0xcd,0x41,
+0x8e,0x49,0xd3,0xcf,0xab,0xf2,0x58,0x64,0xa4,0x0b,0xa0,0x4e,0x7b,0x50,0xf6,0xb3,
+0x13,0x49,0x27,0xc9,0xf9,0xcb,0xb1,0x3a,0x93,0xfc,0x32,0x4f,0xe7,0xab,0x62,0xfe,
+0x11,0xba,0xfc,0xc0,0x42,0x2d,0x83,0x9b,0xc3,0x4c,0x82,0x26,0xd1,0xa9,0x87,0xc1,
+0xcd,0x75,0x68,0xc1,0x6c,0x5f,0x36,0xb3,0x62,0xff,0x01,0x86,0x55,0xa6,0x44,0x92,
+0x15,0x40,0xa6,0xdc,0x66,0xcc,0x66,0x0b,0xbf,0x56,0x1b,0x0c,0x39,0x58,0x6c,0x53,
+0xfb,0x24,0xc6,0x27,0x46,0xf7,0x00,0xc2,0x3a,0x5f,0x25,0xc5,0x17,0x69,0xa5,0xd1,
+0x99,0xea,0xb4,0x50,0x2d,0x97,0x30,0x52,0x93,0x0c,0x46,0xc2,0xe2,0x2a,0x30,0x3c,
+0xae,0xfc,0x21,0x83,0x99,0x73,0x5e,0xac,0x13,0xe8,0x36,0x35,0xf0,0x53,0x43,0x4a,
+0x9d,0xc8,0xb4,0xf9,0x4e,0x88,0xe7,0x19,0xcc,0x8c,0xf3,0x62,0x45,0xa6,0xfe,0x14,
+0x0e,0x72,0x85,0xb3,0xd2,0xf1,0xeb,0xa4,0x77,0x3b,0x3e,0xfb,0x56,0xcb,0x72,0x5d,
+0x64,0x2f,0xbb,0x75,0x95,0x2f,0x04,0xb1,0x54,0x57,0xcc,0x61,0x32,0x7b,0x6a,0x77,
+0xce,0x93,0x7c,0x89,0x7e,0xc4,0x64,0x56,0x80,0xa5,0x28,0x5c,0xab,0xf4,0x98,0x92,
+0x0a,0xa4,0x8b,0x92,0x5f,0xcf,0x68,0x51,0xd8,0x90,0x89,0x19,0xfe,0xfb,0x7d,0x99,
+0xaf,0xbb,0xff,0x54,0x80,0x0e,0xa0,0x7b,0x00,0x76,0xda,0xfb,0x4f,0xea,0x25,0xe5,
+0xbb,0x6c,0x05,0xee,0x04,0xf8,0x0d,0xab,0x63,0xdd,0x07,0x08,0xec,0x60,0xd2,0xa6,
+0xaa,0x6f,0xa6,0x7a,0xe1,0xcd,0xbc,0x7e,0xb1,0xf3,0x96,0x7c,0x63,0x37,0xac,0xe6,
+0x7c,0xdc,0x14,0x0f,0xc5,0x6c,0x39,0xd0,0xe9,0x71,0x34,0x1a,0x39,0x6b,0x9f,0x81,
+0xf7,0x37,0x07,0x67,0x68,0xad,0x13,0x01,0xe9,0x99,0x05,0x3d,0xe8,0x8d,0x87,0x0f,
+0xb7,0xf7,0x83,0xf1,0xe8,0xdc,0x9b,0x1d,0xb7,0x19,0x4d,0x03,0x99,0x4e,0x8a,0x4f,
+0xfe,0x9b,0x0c,0x82,0xff,0x90,0xac,0xc4,0x43,0xd4,0xa5,0x5a,0xc7,0xaa,0x5a,0xcf,
+0xf2,0xbd,0x6d,0xa8,0x9f,0xb4,0x1a,0x78,0x91,0xf9,0x7e,0x59,0x7e,0xd1,0x3a,0xee,
+0xb7,0xab,0x00,0x73,0x19,0xf8,0x8d,0xa0,0x51,0xcb,0xf5,0x4b,0xb9,0x70,0xf5,0xa2,
+0xcf,0xb5,0xea,0xb5,0x8a,0x22,0x3c,0xdd,0xde,0x62,0x9d,0xad,0xaa,0x7d,0xf9,0x33,
+0x42,0x58,0x77,0x16,0x0e,0x64,0xed,0xbb,0xc2,0xc4,0xd9,0xc9,0x36,0xe9,0xd1,0x07,
+0xe2,0x93,0xf6,0xd2,0x56,0x45,0xc1,0x6c,0xaa,0x05,0x78,0x9a,0xec,0x12,0x6b,0xbb,
+0xe0,0x9b,0x56,0x04,0xef,0x58,0xcb,0xf1,0x4f,0xf3,0x19,0x98,0xe9,0x5d,0x41,0xd6,
+0x89,0x1e,0x54,0x09,0x3e,0x47,0xd5,0xd9,0xf7,0x36,0xf0,0xb0,0xb2,0x7c,0x0c,0xab,
+0x86,0x75,0x5c,0xb7,0xbb,0xfc,0xb9,0x70,0x43,0xc8,0x3f,0xb4,0xdd,0x2e,0xdf,0xa2,
+0x8d,0x81,0xa5,0x81,0xb6,0x35,0x5f,0xb4,0xd2,0x1e,0x9c,0x1f,0x41,0x15,0xff,0xe4,
+0xcf,0xce,0x9f,0xe6,0x69,0x40,0x1c,0x96,0xc9,0x0f,0x9d,0x1f,0xd8,0xb8,0x89,0xca,
+0xfc,0xd2,0x9a,0x0e,0x23,0x87,0x0b,0x12,0x71,0x9f,0x32,0xf4,0xe5,0x6e,0xc7,0xbb,
+0x2f,0x7f,0x55,0x6e,0x76,0xd5,0xfe,0x98,0x83,0xef,0x4e,0xf2,0x37,0x01,0xb7,0x6f,
+0xc5,0x7e,0x31,0x2f,0x0c,0xf6,0xa8,0xe5,0x53,0x33,0x51,0x89,0x23,0xba,0x5c,0x2e,
+0xcf,0x02,0xf3,0xa9,0x87,0x44,0x90,0xa4,0x9e,0x64,0x56,0xc9,0xa8,0x19,0xac,0xae,
+0xc0,0x64,0x2f,0xca,0x4f,0x4f,0xbd,0x75,0xf5,0x5c,0x9d,0x18,0xca,0x70,0x7c,0x0b,
+0x53,0xaa,0x4c,0x0c,0x0f,0xf8,0xb7,0x78,0xc1,0x54,0x9b,0x6b,0xea,0x54,0x49,0x0b,
+0x9c,0xa9,0xd7,0xfa,0xc9,0xcb,0x7e,0xfd,0x76,0x0f,0x84,0x7c,0xec,0xed,0xb6,0xcf,
+0xef,0x3a,0xdb,0x2a,0xdb,0x17,0xe0,0xf9,0x1c,0x3b,0x19,0x00,0xea,0x64,0x03,0x04,
+0x67,0x90,0x35,0xd3,0xcf,0x54,0xa7,0x34,0x0f,0x8d,0x56,0x82,0xe0,0x32,0xe2,0x7c,
+0xcf,0xa6,0xd3,0xaf,0x6d,0xc8,0xed,0x94,0xa2,0x2a,0x4b,0xb7,0x49,0x7e,0x3d,0xf7,
+0xd0,0x8b,0xcf,0xaa,0x8f,0x6e,0xa0,0xaf,0x27,0xa2,0xdf,0xc9,0xee,0x47,0x40,0x41,
+0x0c,0x78,0x70,0x0f,0x73,0x5f,0xe7,0xe1,0xde,0x13,0x77,0x07,0x7f,0x0a,0x71,0x03,
+0x18,0xc6,0x29,0x38,0xda,0xf9,0x71,0xb2,0x2e,0x96,0x47,0xe1,0xa6,0x19,0x01,0xfd,
+0x82,0x63,0x8e,0x73,0x28,0x23,0x98,0xaf,0x37,0xe5,0xf6,0x3b,0x70,0xcc,0x6e,0x11,
+0x97,0x5f,0x15,0xcf,0xfc,0x0f,0xdf,0x83,0xe7,0xe8,0xd7,0xc5,0x73,0x96,0x2f,0xbe,
+0x07,0xcb,0x01,0x8c,0xe4,0xaf,0xc3,0x4d,0xb6,0x96,0xa7,0xfa,0x2a,0x10,0xe4,0x00,
+0xcc,0x22,0x05,0x08,0x60,0x8a,0x44,0x01,0x11,0xc3,0xba,0x28,0x96,0xf9,0xcb,0x1a,
+0x7c,0x64,0xaf,0x16,0x5e,0xfb,0xa7,0xe4,0x51,0xac,0xf2,0x05,0x58,0xb6,0x7e,0x07,
+0xbd,0x6c,0xd4,0xc0,0xfd,0xf3,0x2c,0x7f,0xdb,0xef,0xe2,0xbf,0xde,0xf0,0x5d,0x0c,
+0xa9,0xa3,0x90,0x67,0xb0,0x54,0x59,0x88,0xe7,0x74,0x33,0x1a,0xdd,0xe7,0xb3,0xfb,
+0xf6,0xba,0x13,0x5a,0xba,0x74,0xb5,0xbd,0x60,0x16,0xc2,0x93,0x68,0x82,0xa2,0x98,
+0x0f,0x06,0xc3,0x7b,0xab,0x4a,0x5c,0x60,0xc2,0x15,0x8d,0x5d,0xa2,0x0f,0xaa,0xd8,
+0xdd,0xdf,0x37,0xa3,0x06,0x7c,0x7a,0x5a,0x97,0x4f,0xf9,0x29,0xf0,0x2a,0x60,0x5d,
+0x2f,0x38,0x30,0x65,0xe4,0xd0,0xb1,0xad,0xc1,0xd1,0xae,0x45,0x1d,0xc8,0xc3,0x54,
+0xca,0x78,0x7e,0x3a,0x79,0x7d,0x76,0x48,0x42,0x67,0xf2,0x99,0x6d,0xb2,0x58,0xcd,
+0xbe,0xad,0x00,0xd8,0x34,0x34,0x65,0x3c,0xd5,0x3c,0xa3,0x29,0x40,0x73,0xab,0x2b,
+0x1b,0x98,0xc9,0x68,0xb5,0xcf,0x26,0x18,0x7b,0xd2,0x9a,0x68,0x52,0x26,0x7d,0x35,
+0x21,0x52,0xad,0x0f,0x91,0x85,0x03,0x04,0xd2,0x28,0xb6,0x41,0x31,0x16,0x35,0xd8,
+0x1c,0x98,0x22,0x94,0x10,0x97,0xba,0xb0,0x69,0x45,0x0e,0x5d,0x21,0xd5,0x8c,0x19,
+0xb2,0x3c,0xf3,0x2b,0xe2,0x17,0x58,0xcf,0xee,0xe7,0x10,0x94,0x9a,0xae,0x0b,0x88,
+0xc4,0xe0,0xa2,0x82,0xa3,0x3d,0xbd,0x3e,0xc6,0x4d,0x2e,0xc0,0x55,0xb2,0x26,0x63,
+0xb4,0x01,0x8e,0x28,0xea,0xc9,0x48,0x12,0xff,0xe6,0x18,0x14,0xf5,0xef,0x57,0x02,
+0x14,0x39,0x52,0x32,0x9e,0xf2,0x1e,0x47,0xac,0x54,0x26,0xc6,0xc3,0xf1,0xf2,0x76,
+0x0c,0x1a,0x40,0x11,0x2a,0x61,0x0a,0x98,0xe1,0x0e,0x2f,0x21,0x6f,0xfa,0x83,0x7c,
+0x30,0x2b,0xea,0x58,0x74,0x46,0x0f,0xa0,0x5e,0xeb,0x92,0x26,0xb9,0x97,0xa3,0x67,
+0x4f,0x3e,0x83,0x96,0xb0,0x78,0x9a,0xba,0x81,0xe1,0x09,0x74,0x08,0x3a,0xe5,0xc6,
+0x37,0x16,0x7a,0xe6,0x9d,0xc0,0x02,0x21,0xf4,0x7e,0x74,0xef,0x01,0x79,0xa4,0xcb,
+0xee,0x08,0x4f,0x5a,0x10,0xe7,0x87,0x55,0xb1,0x98,0xfe,0x0c,0xb1,0x80,0x45,0xf1,
+0x05,0x44,0x61,0xa8,0x41,0xb7,0x58,0xd5,0xad,0xba,0x48,0x88,0xd3,0xc9,0x06,0x22,
+0x0b,0x04,0x69,0x4f,0x2a,0x44,0xf8,0x49,0x14,0x00,0x94,0xc7,0x3a,0x13,0x28,0x4c,
+0xe7,0xe3,0x8a,0xc3,0x1f,0xec,0x5f,0xd0,0xa7,0x1e,0x47,0xfc,0xcc,0xc4,0xcd,0xc2,
+0xad,0x10,0x87,0x64,0x95,0xa8,0xd2,0xd3,0x11,0x9d,0xae,0xa7,0xe3,0xfe,0xe9,0xb8,
+0xe8,0x72,0x3b,0xf3,0x69,0xe5,0x3e,0xa1,0xbb,0x13,0xd5,0x72,0x9f,0x7c,0x2d,0xd4,
+0xb6,0xa8,0x96,0xfb,0xb4,0x52,0x3a,0x89,0xc6,0x40,0xc3,0xdd,0xba,0x21,0x8e,0xa0,
+0x6d,0x20,0x78,0xba,0x2e,0x94,0xe1,0x34,0x98,0x5e,0x2a,0x16,0x8b,0xc5,0x59,0x31,
+0x36,0xbd,0xe8,0x7a,0x43,0x23,0xb1,0xa4,0x89,0x0a,0x42,0x64,0x0b,0xc5,0x58,0x64,
+0xcb,0x40,0x91,0xf1,0x78,0x7f,0x14,0x68,0x93,0x65,0xb9,0x07,0xb5,0x9c,0xaf,0xca,
+0x35,0x50,0xe5,0xd8,0xd3,0x5e,0xcd,0x31,0x03,0x86,0x8c,0x1c,0xfb,0x8b,0xe0,0xda,
+0xeb,0x39,0x78,0x84,0x55,0x88,0xd2,0x3e,0xfc,0xe9,0x30,0xbc,0x5c,0x75,0x75,0x12,
+0x65,0x43,0x9e,0x82,0xc9,0x33,0xb2,0xf0,0x9e,0x24,0xc2,0x96,0x27,0xb9,0xd5,0x11,
+0x21,0x4b,0x4e,0x66,0x02,0x10,0x56,0x18,0xa0,0x0f,0xdb,0x43,0x01,0xec,0xab,0x89,
+0x59,0xb2,0x50,0xa9,0xb5,0x85,0x4e,0xce,0x94,0xbe,0x64,0x61,0xaa,0xa5,0x93,0x8a,
+0x54,0x4b,0x57,0xe8,0x05,0x93,0xac,0x03,0xb1,0x02,0x34,0x05,0x6d,0x51,0x81,0x91,
+0x28,0xfc,0xc3,0x04,0xb4,0x6e,0xbc,0xc4,0xb8,0x5a,0x29,0xf2,0x14,0x82,0x29,0x73,
+0x38,0xfa,0xb2,0x3a,0x71,0x89,0xb2,0x44,0x3b,0x87,0xbd,0x23,0xcd,0xb7,0x73,0x65,
+0x3a,0xca,0x17,0xb1,0x77,0x2d,0xae,0x81,0x26,0x56,0x44,0xa2,0x6d,0x20,0x1c,0x3a,
+0xda,0x10,0xdb,0x2f,0x77,0x66,0xac,0x27,0xdb,0xe3,0x2a,0xab,0x96,0x19,0x06,0x62,
+0xdf,0x56,0x8b,0xc5,0xbb,0x94,0xe7,0xf3,0xb8,0x84,0x7f,0x0a,0x81,0xe6,0x0e,0xc7,
+0x30,0x71,0x40,0x12,0x12,0x76,0xbb,0x84,0x7f,0x6c,0x62,0x3b,0xa0,0x67,0x3f,0xce,
+0xd7,0xf9,0xe1,0xf0,0xb7,0xbf,0x81,0x3f,0xb3,0x0f,0x7e,0x16,0x38,0x1c,0x21,0x2c,
+0x3f,0x9f,0xea,0x14,0xc9,0x03,0x0b,0x75,0x5e,0x36,0x5b,0x71,0xf0,0xc9,0x55,0xa0,
+0xef,0x9d,0xe3,0x22,0x80,0xd2,0x95,0xaf,0xab,0xe0,0xeb,0x25,0xd8,0x05,0x44,0x47,
+0xd8,0xd5,0x60,0x27,0x84,0x80,0x38,0x7a,0xc0,0x86,0xf4,0x76,0x81,0xb5,0x9e,0x43,
+0x6c,0x1d,0x16,0x4b,0x80,0x13,0x6c,0xfc,0xdc,0xe4,0xf3,0xd9,0x68,0xde,0xaf,0xbb,
+0x58,0x37,0xcb,0x07,0xfc,0x97,0x9e,0xba,0x9b,0x26,0x7a,0xa7,0xd3,0x6e,0x6c,0x57,
+0xd8,0x39,0x4d,0x6a,0x12,0x65,0x1f,0xf7,0xfb,0xf1,0x6c,0xf2,0x2b,0xa2,0x32,0xfc,
+0x85,0x70,0x51,0xd9,0x81,0x48,0xff,0xae,0xda,0x1e,0x60,0x1f,0xe6,0x64,0x3c,0xf0,
+0x5e,0x7f,0xf0,0xc6,0x87,0xb0,0x20,0x38,0x84,0x81,0xde,0xbf,0xdb,0x14,0x8b,0x32,
+0xef,0x40,0x38,0xab,0x28,0xb6,0x1d,0x70,0x9d,0x3b,0x6f,0x7d,0xf8,0xf8,0xfe,0x0e,
+0xd6,0x85,0xef,0x4e,0x6c,0xde,0x60,0x39,0xec,0xa0,0x36,0x4e,0xa7,0xb4,0x4a,0xd6,
+0x50,0x32,0x84,0xc9,0x78,0x83,0x86,0x36,0x48,0xdd,0x57,0xf6,0xed,0x70,0xcf,0x14,
+0x31,0x80,0x1a,0x10,0xa2,0xcf,0x38,0x9e,0x06,0x61,0x14,0x99,0x9e,0x1a,0xf4,0xd4,
+0xe3,0xf0,0x24,0x46,0x37,0x9c,0xce,0xd5,0x7e,0x1b,0x64,0xa5,0xa2,0x15,0x3d,0x99,
+0xca,0x5b,0x2b,0x39,0x43,0x53,0xeb,0xf2,0xe9,0x58,0xb7,0x54,0x6d,0x95,0xda,0x20,
+0x39,0x89,0x74,0xd6,0x26,0x01,0xc9,0x55,0x5a,0x9d,0xc2,0x08,0xfe,0xe7,0x7d,0xbe,
+0xab,0x8f,0xb9,0x10,0xec,0x2c,0xb2,0xda,0xed,0x66,0xde,0xb8,0xaa,0x96,0x49,0x76,
+0x42,0x6d,0x64,0x58,0xaa,0xe5,0xea,0xb5,0x2d,0x3d,0x3b,0xbf,0xbb,0xe5,0xab,0xfb,
+0x74,0x3c,0x5d,0xbc,0xb6,0x4f,0xd7,0x32,0xe8,0x53,0x9d,0x04,0x5e,0xd4,0x5c,0x1e,
+0x94,0x80,0xd3,0x60,0xb2,0xc5,0xb7,0x7a,0x25,0xa3,0x5f,0xd7,0xd0,0xf0,0xf9,0x3b,
+0x1b,0xae,0x26,0xaf,0x6b,0xe8,0x78,0xb5,0xf8,0xde,0x86,0xb6,0x47,0xe5,0x31,0x2f,
+0x60,0x5e,0x23,0xce,0xa6,0x77,0xef,0xbd,0xd6,0xd5,0xbf,0x2e,0xcd,0x41,0xc3,0x66,
+0x45,0x36,0x0d,0x85,0xc9,0x41,0xc3,0x66,0xe5,0xbe,0xd0,0x50,0xbd,0x16,0xa8,0x46,
+0x8b,0xe8,0xfe,0xd9,0x6f,0x2f,0xa2,0x65,0x67,0x3b,0xdc,0xd7,0x65,0x92,0x5b,0x4d,
+0xc3,0x1f,0xec,0x03,0xa1,0x43,0x4b,0xe1,0xe3,0x53,0x68,0x27,0x71,0xd9,0x93,0x9a,
+0x5d,0x97,0x4b,0x6d,0x88,0x6b,0x39,0x5e,0x17,0x98,0x75,0x9a,0x8f,0x74,0xe2,0xc6,
+0x5f,0x5b,0x84,0x66,0x70,0xfb,0x0e,0x20,0x5d,0xae,0x24,0xe8,0x51,0xf0,0x1c,0xe6,
+0x01,0xb7,0x30,0xc2,0x95,0x75,0x87,0x66,0x13,0x26,0x44,0x39,0x90,0x46,0x2b,0xf4,
+0x1a,0x92,0xeb,0xfa,0x66,0xe7,0x80,0xc3,0xeb,0x28,0xaa,0x80,0xc0,0x53,0x6f,0xb1,
+0xaf,0x76,0x10,0x79,0xda,0x76,0xdc,0x5f,0x10,0xd2,0x7e,0x7e,0x86,0xb4,0x11,0xee,
+0x45,0x77,0x8d,0x98,0xaf,0x19,0x25,0x87,0x28,0x77,0x69,0x09,0x51,0x8b,0x68,0xf8,
+0xd5,0x33,0x05,0x69,0x9a,0xc1,0x3c,0xf5,0x28,0x01,0xa3,0x6b,0x41,0xcb,0xb7,0xa7,
+0x3c,0xfc,0x1a,0xfd,0x4c,0xb4,0xa3,0x4f,0xb0,0x76,0x4f,0x76,0x87,0x52,0x0a,0x21,
+0x7b,0x5d,0xc8,0x1b,0x6e,0xc7,0xab,0x74,0xf5,0xb8,0x64,0x18,0x52,0x0b,0x4f,0x62,
+0x20,0x04,0xe2,0x31,0x70,0xc3,0xf9,0x0e,0x4c,0xc0,0x93,0xd0,0x01,0x18,0x50,0x9e,
+0x8d,0xad,0xa2,0x1c,0x73,0x82,0xad,0x4d,0x3c,0x94,0x8e,0x81,0x98,0xc1,0xc6,0xf5,
+0x46,0x38,0xd0,0x06,0xb6,0xd6,0x46,0x6d,0x86,0x78,0x2c,0x20,0x54,0xaa,0x1a,0xd9,
+0x1e,0x06,0xfc,0xe5,0xe0,0x34,0xc4,0x62,0x67,0xe7,0x84,0x1a,0x48,0x5b,0x78,0x05,
+0x4a,0xb6,0x7a,0x2b,0x2c,0x45,0x95,0x85,0xc8,0xf3,0x3b,0xc3,0x39,0x45,0xb1,0xa5,
+0x18,0x3e,0x07,0x87,0xa0,0x1e,0x87,0xe2,0x4d,0x99,0xa8,0x53,0x40,0x8b,0x37,0xd9,
+0xf5,0xee,0x7d,0xd9,0x35,0x94,0xf8,0xda,0x6d,0x90,0x94,0x0e,0x1d,0x5a,0xb0,0x03,
+0x26,0x98,0x55,0x43,0x39,0x2a,0x8e,0x88,0x75,0x04,0x05,0x5a,0xfa,0xbe,0x45,0xb2,
+0xea,0xa8,0x99,0xd8,0x85,0xe2,0x86,0xbc,0xb3,0x3d,0x39,0xa1,0xa8,0x31,0x55,0x0d,
+0xa8,0x5a,0xa8,0xf7,0x46,0x2a,0xaf,0xee,0x4a,0xec,0xf4,0xd9,0xb4,0x55,0x12,0x44,
+0x13,0xcd,0x70,0xbb,0xca,0x44,0xb2,0x04,0x17,0x1a,0x87,0x87,0xd6,0x55,0xae,0x94,
+0x7e,0xd5,0x27,0xb6,0x58,0xdb,0xfc,0xde,0x5c,0xc4,0x5f,0xaf,0xaa,0xbc,0xe8,0xd3,
+0xd4,0x43,0xd5,0xce,0x96,0xaf,0xf5,0x5e,0x3b,0x71,0x54,0x4f,0xb6,0xee,0x70,0x27,
+0x2d,0x08,0x02,0xa3,0x9d,0x8f,0x10,0xc1,0x18,0xc9,0x7b,0x76,0xf1,0x1d,0x71,0x2c,
+0x02,0xa6,0xc4,0x74,0xe9,0x2a,0x11,0x86,0xca,0x5c,0xac,0x1b,0x96,0x98,0x26,0xb6,
+0x92,0x91,0x8b,0xda,0xca,0x43,0xcc,0x1b,0x01,0x66,0xb7,0xcd,0xaa,0x34,0xc4,0xf8,
+0xec,0x4f,0x58,0x3c,0x87,0x1d,0x5e,0xd1,0xc2,0xcd,0xf2,0xa4,0xf9,0x8e,0x11,0xb6,
+0x43,0xaf,0x79,0xd8,0x9f,0xff,0xd5,0xd4,0x9d,0xaf,0x11,0xd7,0x77,0x9d,0x89,0x7a,
+0xfa,0x09,0x95,0xa3,0x39,0x96,0x5a,0xc3,0xac,0x58,0x82,0x44,0x6b,0x9d,0xf5,0x64,
+0xc3,0x1f,0xd5,0xe2,0xe0,0x2a,0x0f,0x1b,0x4d,0x0c,0x1d,0x96,0xa3,0xa8,0x9a,0x53,
+0xbe,0xc8,0x22,0x33,0x4c,0x69,0x23,0xa3,0xa5,0x4d,0x91,0x55,0x5e,0x6a,0x82,0x9a,
+0xaa,0xa9,0x3a,0xa6,0x6a,0x87,0x84,0xb1,0xc9,0xba,0x2a,0x0b,0x5e,0xfe,0xfd,0x3c,
+0x24,0xe3,0x79,0x65,0x3b,0x2f,0xa4,0xda,0x3f,0xa2,0x9a,0xe4,0x72,0x08,0xb1,0x66,
+0x08,0x22,0xde,0x0a,0x1f,0x24,0xd7,0x21,0x46,0x58,0x4b,0x51,0xe2,0xb5,0xe3,0xb6,
+0x11,0xce,0xdc,0x0e,0x1c,0x1b,0x67,0xf6,0x12,0x8c,0x08,0x68,0x05,0x9d,0x6d,0xc5,
+0x3f,0x12,0x77,0xe2,0x62,0x80,0xc6,0xdb,0xb3,0x06,0xda,0xa5,0xff,0x08,0x7c,0x4c,
+0x96,0x16,0x5b,0xb2,0xd0,0x44,0x5f,0x8b,0x6e,0xa7,0x07,0x9b,0xa7,0xcf,0xea,0xba,
+0xdd,0x60,0xac,0x6c,0x79,0x9b,0x70,0x7c,0x21,0xbb,0x47,0xc5,0x23,0x42,0x8c,0x87,
+0xe5,0x1a,0xbc,0x98,0xdd,0x01,0x6a,0xb8,0x40,0x87,0xdd,0x26,0x1b,0x85,0xa1,0x54,
+0x21,0x93,0x3c,0xe0,0x4d,0xb1,0xdb,0x75,0xc7,0xc4,0x71,0xdd,0x82,0xeb,0x60,0x8c,
+0xa4,0x73,0x87,0xee,0x3a,0xcf,0x0b,0x8f,0xf8,0xf7,0xb9,0x27,0x90,0x3b,0x90,0xf7,
+0xdb,0xe4,0xd9,0xf2,0xe6,0xa0,0x09,0x70,0x09,0xd3,0xee,0xc7,0xf7,0xb7,0x0f,0x10,
+0x67,0x14,0x10,0x3a,0xd0,0xa9,0x88,0x24,0x2d,0x07,0xae,0x71,0xe2,0x23,0x58,0x66,
+0x75,0xab,0xf6,0x46,0xb6,0xbd,0xa2,0x8a,0xb0,0xcd,0x0a,0xf9,0xbd,0xb2,0x0a,0x12,
+0xb9,0x95,0x9a,0xb2,0x2f,0x96,0xda,0x3d,0x93,0xd0,0x1c,0xc4,0xa4,0xcf,0x94,0x20,
+0x92,0x0d,0xbb,0xfc,0xbf,0x23,0xb3,0x45,0xe9,0xa6,0x18,0xd9,0xef,0x22,0xb6,0x61,
+0x3a,0x49,0x36,0x6e,0xae,0x45,0x26,0x85,0x2a,0x0d,0x25,0xa7,0x64,0x7c,0xff,0x46,
+0x3a,0x19,0xc9,0x97,0x11,0x24,0x45,0x73,0x77,0x63,0xf9,0x32,0x1c,0xf7,0xc6,0xf0,
+0x8d,0x83,0x5d,0x6e,0xab,0x1e,0x29,0x33,0xa3,0xab,0xe9,0x7b,0xe0,0x50,0x40,0xc8,
+0x0d,0xf2,0x88,0x8f,0x5b,0xc3,0x72,0xd8,0xe8,0x56,0x33,0x18,0x28,0xcc,0x70,0x01,
+0xff,0x84,0xde,0x9b,0x61,0x81,0xff,0xa6,0xa2,0x5b,0x6a,0x2d,0x25,0xcc,0x4a,0x64,
+0x9e,0x7b,0x87,0xfc,0x13,0xf0,0xf3,0x97,0x82,0x7d,0xbe,0xc1,0xa3,0x05,0x59,0x09,
+0x2c,0x09,0xe8,0x12,0x61,0xbc,0x45,0xb9,0xb4,0x1b,0xfc,0x16,0x17,0xa3,0x66,0x13,
+0xdd,0xb7,0xa4,0x93,0x12,0xd5,0xcb,0x7c,0x95,0xe1,0xf0,0x42,0xc2,0xf8,0x26,0xdf,
+0x96,0xbb,0x17,0x4c,0x1a,0xaf,0xb6,0xb0,0x45,0xd9,0x54,0x32,0x7f,0xd9,0x1f,0x20,
+0x2e,0xbc,0xab,0x4a,0x8a,0x12,0x6b,0xc2,0xcd,0x0b,0x9c,0xbf,0x80,0x33,0x18,0x98,
+0x5c,0x4d,0x52,0xc3,0xb9,0x36,0x89,0xaf,0x87,0xac,0xf6,0x31,0xfe,0x00,0x87,0x07,
+0x28,0xe6,0x6e,0x28,0xf6,0xe1,0xf6,0xc9,0xcd,0x78,0x3c,0x86,0xa8,0xce,0x0c,0x76,
+0xa6,0x73,0xd8,0xfd,0x43,0x7b,0xc4,0xbb,0x7b,0x66,0x32,0x56,0xf9,0x18,0xbf,0xb1,
+0xb1,0x64,0x0e,0x6c,0x53,0xdb,0x72,0xbb,0xac,0x2e,0xb6,0xd5,0x90,0x6c,0xb5,0x5d,
+0x7f,0xed,0xec,0x20,0x47,0xf9,0x78,0x92,0x1d,0x7c,0x39,0xdc,0xf0,0xf4,0xb2,0xd6,
+0x6c,0x05,0xf8,0x33,0x18,0x96,0x73,0xd0,0x38,0x19,0xd4,0xed,0x4c,0xee,0xef,0x60,
+0x1b,0x55,0xa3,0xba,0x4f,0xba,0xc3,0x07,0x7f,0xb8,0xa0,0x38,0x65,0x28,0xe1,0x4e,
+0xaf,0xc4,0xb1,0x2c,0xce,0x89,0x4a,0xc1,0xd9,0x83,0x41,0x0f,0x0e,0x1c,0xa4,0xc4,
+0x26,0x38,0x58,0x72,0x33,0x5f,0xe5,0xdb,0xe7,0xe2,0x9f,0x61,0xaf,0xe2,0x33,0x4c,
+0x40,0x5d,0xf8,0x0d,0x59,0xc6,0xbf,0xdf,0x2d,0xe0,0x58,0x08,0x7e,0xec,0xde,0xec,
+0xf1,0x24,0x0b,0x64,0xeb,0xee,0x0f,0xbf,0xad,0xb6,0x90,0xa0,0xdf,0xbd,0xe1,0x24,
+0xd7,0x7f,0x81,0x4d,0x7b,0x58,0xa7,0x1f,0xe8,0xcc,0xc0,0xa0,0xff,0xc6,0x6b,0x98,
+0xee,0x66,0x5f,0x66,0x93,0xdf,0xe4,0x77,0xbb,0xe3,0xba,0x12,0x06,0x25,0x74,0x2b,
+0xe0,0x09,0x1c,0x8f,0x70,0xf1,0x10,0xb0,0x0c,0xba,0x4f,0x2a,0x7b,0xf0,0xde,0xae,
+0xd0,0xde,0xba,0xb1,0xd1,0xb7,0x60,0xc0,0xfd,0x06,0x38,0x28,0x3c,0xec,0xa7,0x63,
+0x86,0x20,0x6f,0xab,0xbb,0xc1,0x83,0x2c,0x06,0xb2,0x6e,0xbc,0x5d,0x2d,0x1b,0x20,
+0x7e,0xcf,0x44,0x74,0x2c,0xcc,0xe1,0x76,0xb0,0x2e,0x6d,0xd9,0x07,0x8b,0x2e,0x36,
+0xa9,0x2f,0x6b,0x44,0x24,0x44,0xa6,0xd9,0x57,0x28,0x8a,0xe2,0x9c,0x6a,0x61,0x05,
+0x3e,0xd1,0x09,0x82,0xc7,0xfc,0x0c,0xdd,0x6a,0x0a,0x86,0x5d,0xfa,0xe6,0xbc,0x0c,
+0x13,0x16,0xc1,0xa3,0x1f,0x6a,0xaf,0xd1,0xed,0x61,0x18,0x10,0xbc,0xd0,0x61,0xc1,
+0x33,0x19,0xe6,0xbb,0x26,0x4d,0xd8,0xb1,0x2a,0xee,0xf1,0x9f,0x9a,0xca,0x20,0x8f,
+0x82,0x6d,0x43,0x1d,0x16,0x8e,0x49,0x2b,0x1f,0xe3,0x4d,0xae,0xab,0xb9,0x6f,0x68,
+0x33,0x94,0x09,0x15,0x32,0x07,0x8a,0xb9,0x78,0x84,0xd3,0x34,0x8a,0x5a,0xbf,0x43,
+0x87,0x60,0x9a,0xb5,0x18,0x62,0x7e,0x8b,0xe2,0x53,0x39,0x2f,0x38,0xf4,0xa7,0xca,
+0xec,0x37,0x6e,0xc2,0x52,0xc8,0xbe,0x80,0xdc,0x91,0x77,0x5c,0x0c,0xe9,0xb9,0xb0,
+0xc7,0x46,0x96,0xb6,0x03,0x83,0xb8,0x5d,0x1c,0x60,0x7d,0x56,0x48,0xa1,0x5a,0x54,
+0x8c,0x2a,0x0a,0x8c,0x5d,0xf9,0x05,0x12,0x51,0xe9,0x98,0xd5,0x64,0x00,0xf6,0x02,
+0x06,0x05,0x18,0x66,0x7d,0x99,0x47,0xcc,0x39,0x91,0xef,0x0d,0x8c,0x0c,0x92,0x47,
+0x30,0x9f,0x10,0x66,0xa8,0x97,0x19,0x80,0x3a,0xc9,0xb4,0x31,0x02,0xc5,0xb2,0x3a,
+0xcc,0xa5,0x94,0x7e,0x55,0x13,0x13,0xdc,0x60,0x55,0xde,0x04,0xdb,0x54,0x6c,0xd0,
+0x78,0xde,0x56,0x57,0x40,0xfe,0x57,0xe7,0xe8,0x48,0x8d,0xd0,0xdb,0x83,0x63,0x77,
+0xc4,0x8d,0xa4,0xac,0x9a,0x31,0x19,0x40,0xbf,0xe2,0x90,0x69,0x18,0xb2,0xcf,0xce,
+0x15,0x1b,0xca,0x47,0x18,0xe2,0x78,0x33,0xd1,0x26,0x75,0x0c,0x7b,0xe3,0x31,0x54,
+0xa9,0xeb,0x7a,0x94,0x9f,0x11,0xa4,0x78,0x58,0x2f,0x60,0x3e,0x9f,0xab,0x5c,0x63,
+0x1a,0xba,0x97,0x7a,0x75,0x36,0xbd,0x9d,0xe2,0xa8,0x86,0x09,0x21,0x28,0x91,0x4f,
+0x25,0x1e,0x49,0xe2,0xd3,0x1b,0x88,0xc9,0x87,0x30,0xb3,0xac,0x37,0x42,0x39,0xad,
+0x1d,0xe3,0xaa,0xe3,0x9c,0xd2,0x6b,0x45,0xee,0xf6,0x36,0xe5,0x5b,0x13,0x72,0xce,
+0xa8,0x66,0xe5,0x06,0x72,0x9f,0x59,0x23,0xc5,0x7c,0xf0,0x9e,0x89,0x5a,0x57,0x24,
+0x56,0x3d,0x1c,0xca,0x1c,0xec,0x27,0x4a,0x68,0xa5,0x9c,0xf8,0xae,0x6b,0xbd,0x44,
+0x91,0xba,0x4b,0xe7,0x9b,0x05,0x1e,0x96,0xf8,0x69,0x05,0xe1,0xca,0x0a,0x8e,0x48,
+0xd6,0x89,0x66,0xee,0x0d,0xfb,0x26,0x13,0x16,0xa5,0xd4,0xfa,0x36,0xe7,0x9b,0xe7,
+0x02,0xb6,0x6c,0xe0,0xa4,0x63,0xf7,0x06,0x4e,0x90,0xd0,0x5f,0x8d,0x90,0x06,0x0f,
+0x18,0xb5,0x33,0xf2,0x7e,0xbe,0x99,0xad,0x7f,0x42,0xd6,0x26,0x9a,0xe8,0xbc,0x31,
+0xa4,0x4a,0x70,0xba,0x63,0x2d,0x76,0xa2,0xaf,0x10,0x10,0x95,0xb4,0x08,0x38,0x52,
+0xdc,0xb4,0x86,0x7c,0x1a,0x82,0x76,0xc0,0x86,0x39,0x25,0xdb,0x29,0xf4,0x81,0x27,
+0xa0,0x03,0x59,0xd4,0xa7,0x3a,0xbc,0xbb,0xbb,0x3b,0xab,0x96,0xe8,0x51,0x26,0x87,
+0x5e,0x4d,0x17,0x26,0x9b,0xfe,0xa5,0x8a,0x32,0xe8,0xdd,0x25,0xf5,0xa4,0xbe,0xeb,
+0xd9,0x90,0x1d,0xf5,0xff,0xd8,0xbd,0xb4,0x43,0x56,0x53,0x01,0xa3,0xec,0x76,0xb7,
+0x45,0xd5,0xc0,0x05,0xaa,0x61,0x14,0x64,0xea,0x83,0x04,0x79,0x38,0x70,0x47,0x27,
+0x42,0xe4,0x8b,0x66,0x1f,0x62,0x1d,0x5f,0x28,0xce,0x50,0xfd,0x8b,0xa9,0xce,0x7f,
+0xba,0x63,0x6d,0xc7,0x55,0xb9,0x95,0x73,0x6d,0x7a,0x50,0x0a,0x43,0x2d,0xbc,0x12,
+0xd5,0x79,0x82,0xcf,0xfb,0xe1,0x09,0x3a,0xb6,0x41,0x5a,0x13,0x92,0x5c,0xfc,0x91,
+0x2a,0x3c,0xaf,0x62,0x7b,0x36,0x68,0x71,0x6a,0xa4,0xac,0x48,0xd1,0xa8,0x91,0xa5,
+0xa9,0x65,0x49,0x7a,0x82,0x89,0x54,0xa1,0xc6,0x8a,0xab,0xe1,0xa5,0x9c,0xea,0x82,
+0xcd,0x2f,0xc5,0xd2,0xec,0x40,0x95,0x90,0x7b,0x75,0xec,0xf4,0x3b,0xa0,0x8a,0xb5,
+0x74,0xe2,0xc1,0x30,0xdc,0xad,0xba,0x54,0x97,0xce,0xf4,0xf4,0x40,0x1d,0xf0,0x34,
+0x31,0xc4,0xfb,0x00,0xcb,0x1f,0xf5,0xd7,0x07,0x38,0xa6,0xcd,0x07,0x00,0xfd,0x27,
+0x88,0x42,0x80,0xfa,0xc8,0xe2,0x25,0x2b,0x3e,0xc1,0x34,0x7c,0x60,0x0b,0x28,0xeb,
+0x1a,0x38,0x61,0x0d,0x39,0x7a,0x70,0xa2,0x15,0x32,0x27,0x13,0xb8,0xe3,0x4a,0x12,
+0x6c,0xa2,0x5b,0x88,0xd3,0x6f,0x5d,0x4f,0xf6,0xee,0x6e,0xf9,0x8c,0x91,0x78,0x32,
+0x27,0xc3,0xd4,0xba,0x5a,0x9b,0x99,0x42,0xea,0xa1,0xbd,0x25,0xa1,0xe3,0x13,0xbc,
+0x80,0x46,0xa7,0x37,0x3a,0x74,0x0a,0xc8,0x90,0x85,0x1c,0xce,0x0c,0x98,0x1a,0x80,
+0x17,0x69,0xe3,0xb3,0x48,0xd2,0xa5,0x19,0x63,0x75,0x03,0x64,0xa4,0x82,0x6a,0x46,
+0xe4,0x5c,0x35,0x92,0x83,0x6e,0xaf,0xda,0x15,0x5b,0xbf,0xf5,0x26,0x1b,0x6e,0x74,
+0xdc,0xe9,0x2a,0xaa,0x8a,0x3b,0xfc,0xa7,0xd3,0x86,0x10,0x96,0x2f,0xf0,0xdf,0x45,
+0xe4,0x1d,0xa6,0x97,0x71,0x30,0xec,0xf4,0x62,0x17,0x76,0xa0,0x62,0x10,0x10,0xee,
+0x44,0x25,0xc9,0x3c,0x6d,0x92,0xe0,0xa2,0x6b,0xe8,0x90,0x04,0x41,0x52,0xde,0xf9,
+0x42,0xaf,0x57,0xf5,0x32,0x61,0xb0,0x69,0xe7,0xe5,0x32,0x40,0xd2,0x7f,0x4e,0x61,
+0x69,0x4a,0xeb,0xbd,0xf9,0xc2,0x14,0x9e,0xa6,0xb4,0xb5,0x29,0x63,0xda,0xa0,0x3d,
+0x4a,0x58,0x93,0x76,0x69,0xb9,0xe2,0x7e,0x01,0x8c,0xf0,0xfa,0x42,0x2d,0xa5,0xe6,
+0x52,0x35,0x26,0xeb,0x52,0x2d,0x36,0x79,0x46,0x86,0x44,0x4e,0x93,0x2a,0x19,0x48,
+0x55,0x1c,0xc5,0xc4,0x55,0xa9,0x77,0xa8,0xbc,0xbe,0x73,0x23,0x88,0x19,0x40,0xf4,
+0xf0,0xab,0xda,0x81,0xc8,0xfd,0x72,0xb5,0xf1,0x64,0x44,0xa4,0x31,0xa3,0x05,0x1f,
+0x97,0x40,0x61,0x11,0x28,0xca,0x4f,0xd2,0x45,0xfd,0x66,0x86,0x51,0x3e,0x29,0xa7,
+0x6c,0x35,0xab,0xee,0x5a,0xed,0xa2,0xba,0x4b,0xc5,0x76,0xe4,0x87,0xa0,0xed,0x39,
+0xb8,0x9a,0x41,0xe8,0x7a,0x38,0xbf,0x7d,0x78,0x80,0x18,0xcd,0x05,0xe4,0x1d,0xa6,
+0xcd,0xea,0xae,0x38,0x18,0x1e,0xc7,0xea,0x2e,0x55,0x9c,0x0a,0xb2,0x26,0xc5,0x5f,
+0x93,0xcc,0x4b,0xa9,0x7b,0xdc,0xd0,0x21,0x69,0x89,0xd1,0x86,0x09,0xbe,0x3a,0x3c,
+0x38,0x84,0x15,0x60,0xe3,0xd5,0xaf,0xe1,0x73,0x0a,0x4b,0xdf,0xc8,0x5a,0x25,0x41,
+0xd3,0x17,0xa6,0xf0,0x34,0xa5,0x75,0x39,0x31,0x85,0xed,0xea,0x2e,0x5d,0x35,0xaa,
+0xbb,0x72,0x4c,0xee,0xfb,0x68,0xd2,0x3d,0xad,0xd6,0xae,0xa1,0x52,0x4b,0xa9,0xb9,
+0x00,0x4c,0xf8,0x7f,0xa9,0x56,0x93,0xba,0xcb,0xc9,0x9d,0x50,0x78,0x13,0x9a,0x17,
+0x29,0xbd,0x36,0xab,0xe9,0x3d,0xe8,0x77,0x20,0xf4,0x30,0x69,0xe3,0xba,0x12,0xf2,
+0xb5,0x55,0xd5,0x49,0xab,0xeb,0x16,0x23,0xe1,0x69,0x86,0x2d,0xae,0xf1,0x0a,0x84,
+0x75,0xae,0xd3,0x94,0x30,0xf9,0xc2,0xba,0x40,0xb8,0x32,0x65,0xbe,0xd5,0x5f,0x5f,
+0xd8,0xd6,0xf0,0x5a,0x9b,0xe2,0xa0,0x29,0x63,0xd2,0x96,0xf1,0x5a,0xe3,0xe2,0xc0,
+0xb5,0x92,0xec,0xc8,0xba,0x68,0x6e,0x1c,0xbc,0xb4,0x77,0x9b,0x1e,0x63,0xa7,0xf8,
+0x81,0x6e,0x3b,0x50,0xae,0xb8,0x15,0x47,0x5f,0xab,0x85,0xcd,0xae,0x92,0xa3,0xc8,
+0xd8,0xa6,0x7a,0x87,0x09,0x23,0x95,0xa8,0x24,0x43,0x97,0x82,0xe4,0x2d,0x45,0x9a,
+0x34,0x5f,0xde,0x4a,0x9b,0xa9,0xd6,0x42,0x9c,0xaf,0xd5,0x4a,0x9d,0xa9,0x76,0x1d,
+0xb0,0xab,0x6c,0x9c,0xe3,0xcb,0x25,0x63,0xe7,0x2a,0x2a,0xc5,0x17,0x4c,0x90,0xaf,
+0xcf,0xd8,0x5e,0x5b,0x5d,0x79,0x70,0x75,0xfd,0x57,0x82,0x67,0xcb,0x28,0xb6,0x26,
+0xad,0x84,0x6a,0xed,0x82,0x19,0x3e,0x61,0x24,0x1d,0x89,0xaf,0xb6,0x96,0x87,0x97,
+0xf9,0x1c,0x6e,0xbf,0x72,0x00,0xd4,0x28,0x8c,0xe7,0x79,0x31,0x86,0x08,0x54,0x6c,
+0x67,0x9b,0xad,0xa5,0xb4,0xb8,0xc6,0x5a,0xc6,0x9d,0xea,0x40,0x92,0xd1,0xab,0x15,
+0x1a,0x19,0x8b,0xcb,0x74,0x88,0x92,0x0d,0xad,0xee,0xd5,0x1a,0x5e,0xb4,0x96,0x71,
+0x0b,0x65,0x4c,0x7a,0xa0,0xc6,0xe3,0xc7,0xc5,0xd8,0x9d,0x57,0xd4,0xf9,0xe3,0xf1,
+0x61,0x3c,0x82,0x1d,0x66,0xd4,0xeb,0x18,0x5c,0x2b,0xc9,0x8e,0xac,0x66,0x6b,0x19,
+0xc3,0x6b,0xb3,0x96,0x71,0x5d,0x67,0xc3,0xd8,0xa4,0x34,0x16,0xb7,0xe2,0xe8,0x80,
+0x58,0xcf,0xa8,0x11,0x94,0xa3,0x28,0xc9,0x8b,0x94,0x4b,0xd7,0x0c,0xca,0x58,0xcb,
+0xb8,0x92,0xb7,0x4c,0x69,0xd2,0x7c,0x79,0x2b,0x6d,0xa6,0x5a,0x8b,0xf0,0xf9,0x5a,
+0xad,0xd4,0x99,0x6a,0xd7,0x01,0x6b,0xb7,0x96,0x31,0xc9,0x8d,0xd6,0x32,0xae,0xa8,
+0x14,0x37,0x99,0xb3,0x5a,0xfd,0x76,0x73,0x16,0x57,0x57,0x1e,0x5c,0x0b,0xfe,0x82,
+0xfb,0x58,0x03,0x7f,0x85,0xb5,0xbc,0x9d,0xcf,0x1e,0x6e,0x5d,0xd4,0x5c,0x94,0x90,
+0xcd,0x52,0x5a,0x09,0x23,0x6b,0xa9,0xed,0x63,0x9b,0x87,0xfb,0x9f,0x0c,0x00,0x77,
+0xae,0xeb,0xa6,0xf2,0x6e,0xf6,0xb0,0xc8,0x5f,0x65,0x2a,0xb9,0xc5,0x35,0xa6,0x32,
+0xe8,0x51,0x87,0x90,0x2c,0x4a,0x58,0x62,0x44,0x2b,0x28,0xd0,0x61,0xa9,0x37,0xb1,
+0xe6,0x31,0x6c,0x72,0xd1,0x36,0x06,0xd5,0xdb,0x0d,0xe3,0x68,0x30,0xeb,0x2f,0x6a,
+0x6b,0xd4,0xbb,0xc7,0x7c,0x36,0x4f,0xb0,0xb4,0x99,0x40,0x47,0x47,0xb3,0x49,0x0c,
+0xb1,0x32,0x33,0x57,0xbc,0x6a,0x0d,0x2a,0x3a,0x3b,0xc6,0x16,0x23,0x5d,0xd6,0x8c,
+0x97,0x6b,0x6e,0xcd,0x60,0x1a,0x88,0x23,0x01,0x6d,0x60,0x43,0x95,0xa6,0x61,0x74,
+0xdd,0xd8,0x95,0x6d,0x00,0xc3,0x9b,0x99,0x04,0x21,0xbe,0xb0,0x99,0x12,0x53,0xa7,
+0x09,0x0b,0x5f,0xa5,0x99,0x16,0x53,0xe7,0x0a,0x30,0xed,0xb6,0x2e,0x20,0xb0,0xd1,
+0xd0,0x05,0xb5,0x94,0xbe,0x26,0x33,0x14,0x56,0x66,0x0c,0xaf,0xaa,0xab,0x14,0x5f,
+0x57,0xf9,0x35,0x80,0xaf,0xb1,0x6c,0xb3,0x79,0x7f,0xe1,0x32,0x9e,0xd4,0xb2,0x91,
+0x15,0x49,0x68,0x51,0x6c,0xd6,0xa4,0x71,0xb3,0x59,0xfb,0x9c,0xef,0xb7,0xb8,0x85,
+0x11,0x2f,0x99,0x8b,0x22,0x1f,0x8e,0x20,0x9e,0x1c,0xb7,0x6c,0x76,0x02,0xa5,0xc5,
+0x35,0x96,0x2d,0xee,0x54,0x47,0x8e,0x2c,0x55,0xad,0xd0,0xc8,0x52,0x5c,0xa6,0x23,
+0x93,0x6c,0x68,0xad,0x5c,0xad,0xe1,0x45,0x43,0x17,0xb7,0x68,0xb7,0x75,0xc5,0xfc,
+0xf1,0x7e,0xa0,0x99,0x32,0xba,0x27,0xbd,0xb8,0x7d,0xb8,0x1d,0x0c,0x79,0x94,0x62,
+0x70,0xad,0x24,0x3b,0xb2,0x9a,0x2d,0x5e,0x0c,0xaf,0xcd,0x09,0x8c,0xeb,0x3a,0x8b,
+0xc2,0xe6,0xa2,0xb1,0xb8,0x15,0x47,0x07,0xc4,0x5a,0xbf,0x46,0x50,0x8e,0x22,0x34,
+0x80,0xcd,0xb5,0x5a,0x86,0xda,0xf5,0x67,0xcd,0x60,0x0c,0xc9,0x5b,0xa0,0x34,0x69,
+0xbe,0xbc,0x95,0x36,0x53,0xad,0x05,0x23,0x5f,0xab,0x95,0x3a,0x53,0xed,0x3a,0x60,
+0xed,0x86,0x31,0x26,0xb9,0xd1,0x36,0xc6,0x15,0x95,0xe2,0x26,0x2b,0x56,0xab,0xcf,
+0xd8,0x5e,0x5b,0x5d,0x79,0x70,0x75,0xfd,0x57,0x82,0xbf,0xc2,0x54,0x2e,0xfb,0xf9,
+0x62,0x1c,0x9b,0x4a,0x36,0x4b,0x69,0x25,0x8c,0xac,0xa5,0xb6,0x8f,0x6d,0x9e,0x77,
+0x02,0x17,0x98,0xb2,0xb7,0xaf,0x19,0xcb,0xc5,0x78,0xb4,0x1c,0xbd,0xca,0x0d,0x94,
+0x16,0xd7,0x18,0xcb,0xa8,0x4f,0x1d,0x46,0x32,0x79,0x71,0x99,0x11,0xb0,0xa8,0x48,
+0x87,0x27,0xd5,0xcc,0x1a,0xca,0xb8,0xd9,0x45,0x3b,0x19,0x35,0x68,0x37,0x93,0xf3,
+0xc7,0x51,0x7f,0x18,0xbb,0xe9,0xf9,0x7c,0xf8,0x38,0xd4,0x1d,0xdc,0x90,0xc1,0x6d,
+0xc4,0x3a,0x8a,0x9a,0x8d,0x64,0x8c,0x9b,0x99,0xcd,0x62,0xc7,0x30,0xaa,0xea,0xac,
+0x0d,0xdb,0x91,0xa6,0xd2,0x36,0xfc,0x1c,0x08,0x6b,0x20,0x9b,0x00,0x39,0x62,0xd0,
+0x3e,0x36,0x56,0x6a,0x1e,0x5e,0xd7,0x99,0xb5,0x8e,0x11,0x1c,0x6f,0x88,0x92,0x44,
+0xf9,0xe2,0x36,0xaa,0x4c,0xad,0x66,0x6c,0x7c,0xa5,0x36,0xba,0x4c,0xad,0xab,0x40,
+0xb5,0xdb,0xc5,0x88,0xd8,0x46,0xb3,0x18,0xd5,0x53,0x5a,0x9b,0xcc,0x56,0x5c,0x9d,
+0x31,0xbd,0xb2,0xb6,0x52,0x7f,0x6d,0xf5,0xd7,0x01,0xbf,0xc2,0x22,0x2e,0x1e,0x6f,
+0x47,0xe3,0x9a,0x5b,0x42,0xd6,0x8a,0x2d,0x62,0x44,0x5e,0x64,0x10,0xb5,0x79,0xb3,
+0x41,0x84,0x24,0xbf,0x8f,0xb5,0xab,0x3b,0x34,0x06,0x46,0x57,0xcf,0xe9,0x1e,0xa5,
+0x4b,0x3e,0x23,0x0b,0x84,0xed,0x58,0x0a,0xf1,0x2f,0x1d,0x04,0x57,0xa4,0x8c,0x73,
+0x1f,0xbc,0xac,0x34,0x0e,0x2c,0xa1,0x62,0x34,0x9c,0xb1,0xb0,0xfe,0xea,0x95,0x79,
+0x25,0xcc,0x99,0x10,0xc3,0x1a,0x42,0xd6,0x66,0x62,0x55,0xd6,0xbb,0x53,0xb0,0xa7,
+0x65,0xfa,0xf6,0x30,0x1b,0x1a,0x0a,0xcf,0x8a,0x79,0xff,0x76,0x90,0xd7,0x52,0x81,
+0xfc,0xad,0xfa,0x6d,0x04,0xfa,0x4e,0x3c,0xbb,0xe2,0xee,0x4c,0x49,0xbb,0x3e,0x11,
+0x51,0xed,0x02,0x69,0xe8,0x16,0xf4,0xdd,0x95,0x64,0x71,0x1a,0xd3,0x3a,0x9f,0x15,
+0xeb,0x38,0xdf,0x72,0x0a,0xc1,0x3f,0x7a,0x9b,0xc1,0x66,0x48,0xc7,0x69,0xa5,0x92,
+0x5d,0x47,0x97,0xaa,0x62,0x12,0xa1,0xf4,0x04,0xc9,0x79,0x90,0x90,0x1a,0xdc,0xf2,
+0x1d,0x9e,0xef,0x87,0x7c,0x2d,0x38,0xa3,0x22,0x37,0x77,0x9f,0xb4,0x27,0xbe,0x2e,
+0xd4,0xc2,0xa4,0x7a,0x9f,0x07,0xab,0x41,0x59,0x48,0x9a,0x21,0xe5,0xc9,0xfa,0x23,
+0x1d,0x70,0xac,0x05,0x8d,0xb2,0x1c,0xeb,0x76,0x7f,0xba,0x5b,0x8a,0x13,0x19,0x8c,
+0xda,0x5b,0x40,0x57,0x32,0xd5,0xd5,0xc0,0x76,0x00,0xe9,0x6e,0x64,0x56,0x0e,0xea,
+0xb4,0xfe,0xdb,0x24,0xee,0xba,0x84,0x47,0xf7,0xee,0x80,0xbd,0xdd,0xb0,0x8e,0x2d,
+0x01,0x0b,0xf4,0x8d,0xfa,0x08,0x3b,0x0f,0xa4,0x3d,0x55,0x6e,0xec,0x75,0xaa,0x58,
+0x9c,0x06,0xd7,0x7b,0x43,0xa7,0xf4,0xb9,0xde,0x17,0x7f,0x8e,0xbb,0xe0,0xaf,0x6c,
+0xf3,0x34,0x87,0x53,0xd6,0x56,0x84,0x02,0x98,0xae,0xe3,0xf6,0x3d,0xfe,0xc7,0xb0,
+0xce,0x7f,0xac,0x8d,0x1f,0x15,0xf1,0xd7,0x64,0x2b,0x53,0x94,0x68,0xeb,0x47,0x80,
+0x1a,0xeb,0x99,0x4c,0xca,0x31,0xcd,0xe0,0xa8,0x23,0x8f,0xab,0xdc,0x4a,0x1d,0x96,
+0x92,0xc0,0x21,0x6b,0xa4,0x94,0x10,0x61,0x9c,0xed,0x17,0xdb,0xa9,0xfb,0x4e,0x19,
+0xcc,0x5c,0x62,0x4e,0x70,0x05,0x9d,0x11,0x9f,0x02,0x70,0xf4,0x25,0x01,0xee,0xa9,
+0x67,0xc1,0x89,0xf6,0x10,0x05,0x0e,0x45,0xe2,0x2c,0x9e,0x40,0xd4,0x1c,0x6a,0xc8,
+0xd9,0x3b,0xbe,0xb5,0xa7,0x7d,0xdf,0xf1,0x17,0x7f,0xda,0x96,0x3f,0xc4,0x37,0x47,
+0xc0,0x6d,0x5f,0xbc,0x91,0x15,0x4e,0x03,0x75,0xf8,0xf6,0xa4,0xba,0x45,0x09,0x8e,
+0x3e,0x18,0x71,0x32,0x08,0x99,0x06,0xaf,0x44,0x05,0x4f,0x51,0xd2,0x09,0x16,0xbd,
+0x3d,0x40,0x8f,0x9f,0x49,0x8a,0x7b,0x54,0x18,0x20,0xa0,0x57,0x64,0x48,0x9e,0x5e,
+0x9d,0x2d,0x46,0x08,0x03,0xfe,0x79,0x46,0xd5,0xdb,0x28,0x8f,0x10,0x31,0x1c,0x87,
+0x26,0xbc,0x82,0xb2,0x00,0x2d,0x60,0x51,0x1d,0xec,0x2b,0xd9,0x92,0x1c,0x21,0x04,
+0x6c,0x38,0x1d,0x48,0x74,0x38,0x34,0x51,0xcd,0x57,0x76,0xfe,0x97,0x8c,0x09,0xf6,
+0xdc,0xc6,0xde,0x60,0x48,0x2e,0x0e,0xe0,0x2f,0x32,0x18,0x0d,0xaa,0x2a,0x62,0x0f,
+0x08,0x73,0x85,0x2b,0xc6,0x8c,0x94,0x58,0x71,0x6a,0x1a,0x22,0x81,0x66,0x06,0xaa,
+0xc6,0x7e,0x36,0xa3,0x9e,0x4d,0x01,0x53,0x3c,0x42,0xed,0x20,0x22,0xe6,0x29,0x5a,
+0x7f,0xe1,0xe0,0x09,0xf6,0x1e,0xb7,0x3a,0x5b,0x18,0x7b,0x83,0x9c,0xed,0x3a,0x50,
+0x8b,0xa9,0xd8,0x1b,0x39,0x92,0x1c,0x94,0x19,0x95,0xa9,0x5d,0x71,0x53,0x9f,0x8e,
+0x28,0x33,0xb7,0x56,0xcf,0xe5,0x8a,0xd7,0xa4,0xff,0x7d,0x6c,0xfb,0xf4,0x08,0x17,
+0xdb,0x93,0xe0,0x52,0x57,0x44,0x0b,0x3f,0x18,0x8c,0xd8,0x5a,0xaf,0x9f,0x2f,0x81,
+0xa1,0x93,0x06,0xea,0xc8,0x10,0x1c,0xfc,0x62,0x00,0x35,0xe0,0x9d,0x70,0x82,0x2f,
+0x25,0x7b,0x03,0x2f,0x5d,0xe2,0xf5,0xa5,0xba,0x17,0x11,0x20,0x33,0x8e,0x9e,0xe3,
+0x29,0x81,0x49,0x2a,0xcd,0xdb,0x40,0xcc,0x0e,0x1b,0x62,0x0f,0x0b,0xed,0x61,0xa3,
+0x9c,0xa5,0xe4,0x7c,0xbc,0xc1,0xc7,0x38,0x8f,0xc4,0x1f,0xe8,0xa7,0x70,0xd7,0x6f,
+0xf7,0xdc,0x5e,0x54,0x42,0x7f,0xb2,0x2f,0x07,0x03,0xfa,0xcb,0xc1,0x81,0xc6,0x7b,
+0x0b,0x60,0x3e,0x7c,0x2d,0xe4,0x1c,0xe9,0xe4,0xc3,0x8d,0xb1,0x2f,0xfc,0x23,0xbc,
+0x9b,0x51,0xfc,0x86,0xdf,0x23,0xf9,0x70,0x0a,0xcf,0xf5,0xe2,0x85,0xfe,0x78,0xe7,
+0x07,0x64,0xea,0x8b,0x8d,0x9d,0xd0,0x91,0x39,0x39,0x09,0x39,0xee,0xc3,0xe9,0x90,
+0x8d,0xbb,0xf6,0x0a,0x3d,0x55,0x6d,0x81,0xb7,0x2e,0x38,0x37,0x97,0xf8,0x68,0xde,
+0x1c,0x10,0x39,0xa1,0x6b,0xa9,0xed,0x9d,0x52,0x13,0xbe,0xdf,0x0a,0x69,0xbc,0x91,
+0xd3,0x83,0xb5,0x05,0x86,0x1c,0x01,0x75,0x12,0x90,0xbe,0x8f,0x1c,0x6e,0xbb,0xb2,
+0x98,0xf0,0xd3,0x0c,0x10,0x0c,0xa2,0x17,0xa3,0x26,0x3f,0xfc,0xf5,0x76,0x76,0xd8,
+0x4d,0x7f,0x98,0xd2,0x8b,0x4d,0xe5,0x1a,0x1f,0x71,0x91,0x97,0xab,0x90,0x60,0x4e,
+0x61,0xfc,0x67,0x4b,0x01,0x3b,0xea,0xce,0xd1,0x73,0xb7,0x36,0x6a,0x33,0x38,0x97,
+0x09,0x6c,0x82,0x53,0x74,0x07,0x47,0x34,0x37,0x61,0xa7,0x01,0x0f,0x93,0xc3,0x8b,
+0x05,0x40,0x97,0xb9,0x1a,0x8c,0x2e,0xab,0x8e,0x21,0xd5,0x6e,0xdb,0xe6,0xb3,0x4f,
+0xc4,0x5a,0xdf,0x49,0xa7,0x76,0x9e,0xd3,0x1d,0x6f,0x1d,0xe1,0x19,0x51,0xc1,0x05,
+0xaa,0x75,0xf2,0xe4,0xa8,0xd7,0x77,0x52,0xc2,0x6b,0xa5,0x12,0x23,0x51,0x1f,0x34,
+0x47,0x5b,0x46,0xd7,0x55,0xe1,0x81,0x79,0xef,0xed,0x8b,0x88,0xe0,0x6d,0x09,0xd3,
+0xfa,0xaa,0x00,0x6c,0x33,0x1e,0xb1,0x89,0x71,0x9d,0xa0,0x26,0x76,0x23,0x02,0x26,
+0x38,0x4a,0x26,0x7d,0xf2,0xe1,0x0e,0xff,0xd5,0x9a,0xb2,0x2f,0x9e,0x94,0x97,0xb8,
+0xae,0x8c,0xf0,0xef,0xf2,0x59,0xb2,0x43,0x53,0x1c,0x75,0xad,0x59,0x50,0xa9,0x08,
+0x44,0x68,0xe2,0xcd,0x01,0xa2,0xab,0x25,0xd6,0x8d,0xe1,0x40,0xcf,0x54,0xd2,0x91,
+0xf3,0xe0,0xd4,0xb8,0x3f,0x0d,0x4a,0x82,0xd1,0x99,0x8c,0xee,0xc1,0x1c,0xc8,0x99,
+0x51,0x5c,0x81,0x86,0xe7,0x4d,0xef,0xf8,0xc2,0x50,0xcf,0x51,0x27,0x9e,0xa8,0x93,
+0x56,0x45,0x5c,0x01,0xcb,0x2d,0xcf,0x57,0x30,0xe5,0xc1,0x41,0x17,0x71,0x7c,0xf5,
+0xf6,0x12,0xbc,0xb7,0xc1,0xd8,0x05,0x23,0xa0,0xcd,0x68,0xd7,0x10,0x93,0x33,0xef,
+0xbf,0x12,0x62,0x37,0xa8,0xf9,0xf8,0x58,0x22,0x2b,0x43,0x70,0xbe,0xdb,0xe0,0xef,
+0xaa,0x99,0xd5,0x98,0xfa,0x96,0x42,0x3d,0xdd,0xd3,0xa7,0x0b,0x6a,0x62,0xd5,0x39,
+0xd5,0x8a,0x8c,0x77,0x10,0x60,0x18,0xe1,0x7c,0xa0,0x3a,0x04,0x43,0xc6,0xda,0x2f,
+0x9d,0xc3,0x81,0xd4,0x37,0x1e,0x0e,0x37,0xf6,0x78,0xe9,0x00,0xa0,0xd2,0x50,0xff,
+0xe1,0x80,0xd0,0xa5,0x3e,0x06,0x09,0xbf,0x1a,0xe9,0xd4,0x8e,0x98,0x32,0xd0,0xe8,
+0x96,0x08,0xbd,0xdc,0x44,0x3c,0x02,0x5c,0x6e,0x25,0xc1,0x05,0xf4,0x0c,0x7b,0x0f,
+0x78,0x86,0x96,0x01,0x8e,0x47,0x6f,0xce,0xa0,0x64,0x37,0x9f,0x80,0xb3,0x70,0x63,
+0x00,0x3e,0x03,0x09,0x93,0xb4,0x13,0x29,0x92,0x22,0xa5,0x9d,0x6c,0x05,0x71,0xc3,
+0xeb,0xea,0x84,0xde,0x92,0x18,0x8e,0x6e,0xbb,0x77,0x8f,0xf8,0x7f,0xbd,0x07,0xbc,
+0xac,0x30,0xba,0xdc,0x3a,0xaa,0x33,0x78,0xa7,0xc1,0x17,0x4a,0x8a,0xf1,0xaf,0x15,
+0xb9,0x6e,0x2f,0xc7,0x3b,0x84,0xb3,0x93,0x0c,0x0f,0xa1,0xd1,0xb3,0x32,0x6c,0xc9,
+0xec,0x41,0x4b,0x02,0x2c,0xf2,0xe3,0x40,0xb3,0x92,0x98,0x21,0xd2,0xc3,0xa4,0xf8,
+0x40,0x8b,0x52,0xea,0x4e,0x60,0x9a,0xc3,0xe7,0x58,0x1e,0xba,0x01,0x63,0x79,0x97,
+0x4a,0xa9,0xf9,0xbe,0x33,0xbb,0xd6,0xde,0xd8,0x03,0xbb,0x72,0x52,0x31,0x75,0x88,
+0x4d,0x7d,0x27,0x9c,0x96,0xf0,0xff,0xed,0x7b,0x1e,0xfd,0xfb,0xf4,0x01,0xbc,0xc6,
+0xba,0xea,0x3d,0x99,0x2d,0x24,0x71,0x79,0x29,0x42,0x66,0x4f,0xaf,0x75,0x7a,0x83,
+0xdb,0x43,0xd7,0x3b,0x71,0xb5,0xb2,0x69,0x56,0xf1,0xf3,0x10,0x7c,0x00,0xee,0xfb,
+0xe1,0xfc,0x12,0xc8,0xe0,0xcb,0x47,0xf0,0x30,0x96,0x08,0x00,0xc7,0x2f,0x4f,0x16,
+0xa5,0xc9,0xcd,0xdd,0x5d,0xbe,0x2c,0x1e,0xf5,0xc0,0x65,0xfb,0x69,0xc7,0x26,0x06,
+0x76,0xd1,0x43,0x00,0xd7,0x9b,0x47,0x01,0xae,0x09,0xe8,0x0e,0xee,0x6f,0xbb,0xc3,
+0xd1,0xa8,0xdb,0xbb,0x0b,0x2e,0xee,0xbc,0x34,0x6a,0xad,0x80,0x22,0x62,0xf8,0x59,
+0xc6,0xfa,0x03,0x77,0x37,0x8f,0x8f,0x40,0x8e,0xbc,0x6e,0x37,0x88,0x1a,0xe1,0x91,
+0x5e,0x8e,0xd4,0xa4,0x1b,0x46,0xd5,0xcd,0xf3,0x82,0x70,0xdc,0x3d,0xf1,0x9a,0x1e,
+0x76,0x56,0x6b,0x03,0x7d,0x14,0x5f,0xc0,0x87,0x5c,0xd8,0x44,0x02,0x8e,0xb5,0x9a,
+0x30,0xb6,0xda,0x08,0x58,0xf4,0xd8,0x41,0xfa,0x11,0xec,0x33,0x1d,0x04,0xfd,0xd0,
+0x0d,0xbf,0xc3,0x4b,0x9f,0x0b,0x9c,0x52,0xd3,0x47,0x42,0x2d,0x88,0x7a,0xb7,0x37,
+0x70,0xfd,0x46,0x13,0x4f,0x4c,0x87,0xa9,0xbd,0x95,0x00,0x70,0xfd,0x80,0xa9,0x7b,
+0xf2,0x31,0x40,0x56,0xaf,0x63,0xa0,0x4b,0xc1,0x8d,0x1d,0x6f,0x79,0x4e,0x91,0xa6,
+0x74,0xb9,0x3f,0xfc,0xad,0x77,0xcb,0xf5,0x7a,0x19,0x42,0x83,0x6d,0x62,0x87,0xbb,
+0xa2,0x85,0xbf,0xb3,0x69,0x81,0xb9,0x0c,0xa7,0x98,0x7e,0xfa,0x78,0xb7,0xb0,0x3d,
+0x80,0x19,0x5b,0xca,0x00,0x2a,0x1b,0x4c,0xf2,0x09,0x1b,0xe2,0xcf,0x75,0x24,0x05,
+0x20,0xdd,0xf3,0x53,0xce,0x93,0xd8,0x46,0x78,0xd8,0x38,0xa2,0x4e,0xd5,0x82,0x06,
+0x38,0xc6,0xf0,0x66,0xc7,0x35,0x7d,0x1b,0x20,0xc2,0x2d,0x41,0x44,0x64,0x4a,0x89,
+0x0e,0xea,0x99,0x1f,0xf0,0xea,0x34,0xc8,0xda,0xb5,0x95,0x71,0x75,0xe6,0x99,0xd3,
+0x4c,0xcf,0x53,0x28,0x23,0x7e,0x02,0x8a,0x9a,0x28,0xd3,0x78,0xa3,0xe3,0x7b,0x06,
+0x53,0xf7,0x2a,0x22,0x0a,0x70,0xad,0x9a,0x7e,0x9b,0xda,0x7a,0x29,0xf5,0x47,0x84,
+0xae,0x61,0xb9,0x76,0xd9,0x21,0xac,0x53,0x1d,0x73,0x89,0x2e,0x86,0x29,0x2a,0x89,
+0xb7,0xd3,0x04,0x42,0xe3,0xa0,0xd0,0x60,0xc4,0x4f,0xa6,0x86,0x75,0x89,0x1a,0xeb,
+0x25,0xd1,0x07,0xf3,0x4c,0x83,0xdb,0xc6,0x10,0x16,0x52,0x64,0x23,0xee,0x71,0x95,
+0x1f,0xb2,0x65,0x51,0x2c,0xd0,0x9f,0x09,0x65,0xc5,0x7d,0xa6,0xcb,0x91,0xe0,0xb2,
+0x68,0xb7,0x05,0xd4,0xed,0x31,0x27,0xeb,0x4b,0x23,0x95,0x58,0xbb,0x7e,0xa4,0xed,
+0x26,0x8a,0x28,0x84,0x43,0x89,0x9f,0x3c,0x4c,0xe5,0x1b,0x53,0x25,0x43,0x0f,0x0b,
+0x06,0xf1,0x4d,0xc8,0x75,0x14,0xdf,0x84,0x59,0x97,0x70,0x26,0xe5,0x1e,0x15,0x7b,
+0x49,0x5d,0x70,0xd3,0x97,0xe9,0x2d,0xcd,0x5f,0x65,0x3f,0xcc,0x11,0xe8,0xe7,0x58,
+0xe6,0x6a,0x11,0x98,0xe5,0x06,0xc6,0x4b,0x41,0xa2,0x6d,0x3c,0x30,0xee,0x42,0x0d,
+0x3b,0x30,0x19,0xb9,0xc2,0x8e,0xc7,0xef,0xdd,0x5f,0x02,0xf7,0xbd,0x30,0x5d,0xda,
+0xa0,0x3f,0x8d,0x4e,0x9f,0xa7,0x49,0x3a,0x0e,0xd1,0xb8,0x76,0x47,0xed,0xf5,0xac,
+0x4d,0x2a,0xc5,0x34,0x0a,0xc1,0x38,0x22,0x04,0x39,0x4f,0x55,0x12,0x5b,0xa1,0x51,
+0xca,0x74,0xf5,0x82,0xa4,0x3a,0xa5,0xe4,0xf0,0x1c,0x8a,0x0e,0x0d,0x61,0xe0,0xd6,
+0xcb,0x2b,0xc4,0x89,0x69,0x2c,0x39,0xdc,0xed,0xf5,0x78,0xd0,0xba,0xa9,0x96,0x2e,
+0x43,0x24,0x59,0x6a,0x26,0x54,0xd3,0x98,0xc1,0x25,0x5b,0x72,0x91,0x6f,0xa6,0x71,
+0x2c,0x73,0x8f,0x43,0x6d,0x94,0x3d,0x20,0x16,0x0b,0x61,0x99,0xff,0x9c,0x20,0x2e,
+0x1e,0x8c,0xe4,0xf6,0x3f,0x21,0xa3,0x03,0x90,0x98,0xef,0x1d,0x10,0xd7,0x55,0xa0,
+0xb9,0xf1,0xd7,0x36,0x34,0xa4,0x61,0xaa,0x0a,0x61,0x21,0x06,0x33,0x85,0x84,0xf5,
+0x4a,0x74,0x72,0xdd,0x78,0x6b,0x31,0x32,0x2b,0x19,0x32,0x3f,0xf8,0x22,0xa5,0x8a,
+0xb8,0x2c,0x86,0xf1,0x53,0x68,0x90,0xfa,0xb8,0x72,0x7c,0x81,0x2b,0x1d,0xf1,0x4a,
+0x2d,0x37,0x57,0xf3,0xfa,0x4f,0xef,0x32,0x82,0x77,0x70,0xe1,0x56,0x0d,0x96,0x48,
+0xb6,0xa7,0xb2,0x8a,0xc4,0x20,0x97,0xde,0xa9,0x43,0x7f,0xfb,0x05,0xa2,0xe4,0xb0,
+0xda,0x25,0x0a,0x2c,0x11,0x35,0x1e,0x07,0x95,0xe1,0xfe,0x1c,0xea,0x18,0x2f,0x8a,
+0x6f,0xe8,0xd7,0xd9,0xf2,0xfa,0x1d,0x4a,0x88,0xcc,0x38,0xbe,0xe4,0x53,0xa9,0x9d,
+0xd0,0x25,0xf1,0xba,0x1c,0xc5,0x45,0x9d,0x3c,0xcf,0xd5,0x96,0xa0,0x07,0xae,0xe9,
+0xe5,0x10,0xa5,0x21,0x60,0xe8,0x03,0x81,0xe4,0xf1,0x7d,0xff,0x7d,0x7c,0xbf,0x85,
+0xb3,0xc6,0x70,0x4f,0xdf,0x1c,0x2e,0xee,0xab,0x5d,0xd1,0xa7,0x73,0x4b,0x38,0x20,
+0x17,0x18,0x03,0xd7,0x6b,0xea,0x3a,0xb9,0x4f,0x77,0xce,0xc8,0x70,0x8d,0xf0,0x01,
+0xc9,0x24,0x93,0x30,0xbc,0x21,0x3c,0x6a,0x3b,0xc9,0xf2,0x5a,0x1e,0xf9,0xf7,0x9e,
+0xf9,0xa9,0x9c,0xf8,0x8e,0x42,0x59,0x96,0x51,0xf8,0x3d,0xe8,0x1e,0x64,0x23,0xba,
+0xdd,0x90,0xaf,0x2e,0x6c,0x63,0x95,0x8c,0xb7,0x21,0x85,0x83,0x7f,0x70,0xbd,0x5a,
+0x05,0xfc,0xfd,0x4a,0x01,0x0e,0xef,0x7f,0x71,0x8e,0x4c,0x10,0x58,0x62,0xcd,0x80,
+0xd0,0x2f,0xc7,0x40,0xe5,0x89,0x3e,0x8e,0x9f,0xdb,0xdb,0xc9,0x6e,0xfb,0xa0,0x35,
+0x7a,0xc5,0xdb,0xbe,0x82,0x1b,0xa6,0xf8,0x2a,0x4e,0x71,0x08,0x49,0x13,0x82,0x81,
+0xab,0xcb,0x6f,0x5b,0x57,0x5e,0x89,0xe0,0xd2,0xcf,0xc7,0x3b,0x0d,0x33,0xe0,0xe9,
+0xc1,0x1a,0x16,0xf0,0x74,0x31,0xbc,0x7f,0x7b,0xfc,0x54,0xad,0x8f,0x03,0xb8,0xf1,
+0xd1,0xff,0x1a,0x06,0xbf,0x46,0xc1,0xaf,0xf1,0xc9,0xac,0xb3,0xf1,0xb6,0x9a,0x41,
+0x78,0x59,0x4d,0x8d,0xf9,0xe4,0x07,0xbc,0xea,0x6a,0xc9,0x80,0xfc,0xba,0xcb,0x54,
+0x67,0x08,0x2a,0xf4,0xff,0x67,0xb9,0x0d,0xef,0xda,0x8c,0x2e,0xd2,0x6c,0x16,0x3d,
+0xb9,0xa9,0xcf,0x88,0x9d,0xf8,0x76,0x63,0x54,0x45,0x3f,0xd2,0x9a,0xf2,0x4f,0x91,
+0x31,0x73,0x81,0x9f,0xba,0x03,0x62,0xbf,0xc1,0x91,0x35,0x85,0x7c,0xbb,0x9f,0x8a,
+0x92,0xca,0x89,0x84,0xbc,0x6d,0xcc,0x2a,0x70,0x24,0x91,0xd3,0xe4,0x99,0x46,0x73,
+0x03,0x7d,0x4b,0xdd,0x21,0x25,0x8b,0x76,0xf6,0x40,0x31,0x1c,0xa2,0xd6,0x54,0xae,
+0x82,0x96,0xc4,0x0c,0x7e,0xa3,0xd6,0x17,0x17,0xb7,0xf8,0x2f,0x44,0x58,0x02,0xf5,
+0xf8,0x14,0x87,0xa5,0xc3,0x7d,0x96,0x2c,0x38,0xc5,0x8c,0xfd,0x1e,0xe8,0x52,0x69,
+0xc3,0xfc,0xb0,0x04,0xd3,0x06,0x4b,0xf8,0xa7,0x68,0x72,0x4a,0x86,0xa4,0x79,0xc1,
+0xf3,0x7a,0xfa,0x5d,0x66,0x2e,0x8d,0x7b,0x19,0x73,0xaf,0x11,0x9a,0xd4,0xc5,0x56,
+0x7d,0x08,0xab,0xf1,0xf3,0xd3,0x7e,0x7a,0xb8,0x54,0xff,0x7a,0xd0,0x0d,0xdc,0xe9,
+0xf4,0xe6,0xf9,0xbe,0x38,0xb6,0x32,0x49,0xea,0x88,0x09,0xc5,0x09,0x5f,0x65,0x88,
+0x1e,0xc5,0xb5,0xec,0x5d,0x97,0x26,0xaf,0x01,0xae,0x93,0x94,0x60,0x18,0xdf,0xbe,
+0x0a,0x22,0x05,0xef,0x7f,0x83,0x1b,0x81,0xee,0x85,0x88,0x5b,0x6c,0x02,0x31,0xf8,
+0xdb,0xa1,0x08,0x30,0x0b,0xf2,0x3d,0xde,0xdf,0xec,0x5b,0xd9,0x25,0xc3,0x4e,0xee,
+0xa3,0x85,0x25,0x43,0xba,0x02,0x4a,0xd8,0x07,0xb3,0x74,0x36,0x91,0x5b,0x89,0x84,
+0xd4,0xf7,0x50,0x34,0x4f,0x4f,0x2f,0xeb,0x3c,0x59,0xd8,0xbc,0x6c,0x32,0x1a,0x16,
+0x3a,0x38,0xb4,0x5c,0x48,0xa3,0xf2,0x2a,0x5c,0xd1,0xaa,0x7b,0x5c,0x23,0x2f,0xca,
+0xea,0xd3,0xa4,0x87,0xb7,0x59,0x2a,0x8f,0xdd,0xc5,0x73,0x69,0x14,0x60,0x98,0x36,
+0xa5,0xe3,0x07,0xcd,0x1c,0x22,0xfc,0x04,0x06,0x9e,0x03,0xff,0x9c,0x3d,0xf6,0x61,
+0x58,0x34,0x53,0xf1,0x91,0x77,0x6c,0xe1,0x79,0x12,0x7c,0xb4,0x3d,0x24,0xd5,0x59,
+0x07,0xbf,0x00,0x92,0x57,0x0b,0x51,0xe7,0x69,0x52,0x53,0x07,0x8c,0x7e,0x18,0x9e,
+0x89,0x55,0xa2,0xcf,0x5e,0xc1,0xf8,0xfa,0xde,0x84,0xc6,0x90,0x3b,0x12,0xab,0x05,
+0x7d,0x34,0xb2,0x4f,0xbf,0x4d,0x24,0x1d,0x2f,0x43,0x36,0x62,0x29,0xd7,0xf9,0x4a,
+0x1e,0x1a,0x56,0xd6,0x62,0xbc,0x93,0x59,0xb9,0xe0,0x68,0xd2,0xfb,0x4c,0x83,0x30,
+0x9b,0x85,0xc7,0xd6,0x50,0x4c,0xb1,0xdb,0xb5,0xf5,0x0b,0x71,0x35,0x2a,0x76,0x57,
+0x2c,0x6a,0x6f,0x53,0x94,0x62,0x1b,0x05,0x4a,0x64,0xf2,0x46,0x9e,0xe4,0xaa,0x6b,
+0xa7,0x4b,0x1a,0xb6,0xd7,0x5e,0xd8,0xda,0x28,0x45,0x8c,0xbc,0x33,0x73,0xad,0x8a,
+0xad,0xa4,0x4b,0xb0,0xe4,0x2f,0x31,0x7d,0x67,0xd6,0x0d,0x3f,0x06,0xf4,0xf6,0xb0,
+0x9d,0x19,0x7a,0x10,0xca,0xd5,0x4d,0x40,0x13,0x81,0x7c,0x7c,0x00,0x8d,0x87,0x0b,
+0x6b,0xcd,0x70,0x01,0x7b,0x43,0x06,0x84,0x44,0xc4,0xa5,0x62,0xc9,0xbd,0xec,0xd0,
+0x03,0x36,0xb8,0xc4,0xc1,0x07,0x83,0xd4,0xa4,0x86,0x1f,0x63,0x9d,0xe1,0x6b,0xde,
+0x31,0x00,0x98,0xcd,0xd7,0xe5,0xfc,0x63,0x17,0xde,0x99,0x86,0x47,0xa5,0xf0,0xee,
+0xf7,0x0b,0x1f,0xa5,0xf7,0x70,0x61,0xae,0x9c,0xec,0x3f,0xc0,0x75,0x7d,0xf8,0xa2,
+0x75,0x94,0x58,0xa1,0x3a,0x2b,0x02,0xb2,0xa0,0x67,0x98,0x69,0xa3,0xe5,0x06,0x9a,
+0x9c,0x6f,0x0e,0xab,0xea,0x33,0xdc,0x79,0xba,0xf0,0x69,0x12,0x41,0xa8,0x54,0x66,
+0x1c,0x7e,0x1b,0x20,0x8a,0x09,0xbc,0xb6,0x3f,0x01,0x12,0xaa,0x37,0xbf,0xf1,0x82,
+0x39,0x56,0xc7,0xe2,0x70,0xb4,0xce,0xa6,0x13,0x7a,0xc1,0x01,0x5d,0x45,0xab,0xc5,
+0xea,0xd3,0xa7,0x52,0x28,0x11,0x96,0x08,0x26,0xa7,0xc5,0xd0,0x07,0x93,0x3d,0x8b,
+0xbf,0x83,0xac,0x26,0xfa,0x10,0x57,0x90,0x94,0xdd,0xe6,0xb3,0x34,0xd8,0xea,0x94,
+0xc4,0x4f,0xe7,0xad,0xe4,0x45,0x18,0x38,0xb3,0x2f,0x61,0x47,0x43,0xc9,0xae,0xa1,
+0xea,0x50,0xbb,0xd0,0xb5,0xe7,0x87,0xb9,0x3f,0xd7,0xc0,0x05,0x8f,0x95,0xb6,0x20,
+0x0c,0x13,0xf4,0x53,0xad,0x4f,0xb7,0xe0,0x87,0xe0,0xa4,0xde,0x21,0x4a,0x83,0xe2,
+0x0a,0x1c,0x56,0x0e,0x6f,0x05,0x66,0x13,0xea,0x89,0xd5,0xae,0xc0,0x64,0x3d,0x63,
+0x81,0x8f,0x8d,0x78,0x94,0xfc,0xb7,0x1a,0x4e,0xa6,0x28,0x42,0xca,0x97,0xd4,0xb0,
+0x32,0x45,0xcd,0x8d,0x18,0xaf,0x54,0xc4,0x42,0x89,0x4b,0x06,0x55,0xb4,0x50,0x31,
+0x6d,0x03,0x20,0x7c,0x6c,0xab,0xa2,0xb8,0xb7,0xd6,0x61,0x22,0x5a,0xab,0x34,0x65,
+0x9d,0xcc,0x07,0xf8,0x4f,0x6d,0x80,0x08,0xaa,0xde,0x00,0xf1,0xbc,0xff,0x87,0x7f,
+0x34,0x3b,0x4c,0x30,0x2f,0xf2,0x23,0xba,0x5c,0xed,0x79,0x5f,0x7c,0x05,0x49,0xa2,
+0x67,0x52,0x60,0x34,0xeb,0x47,0x12,0x30,0x4a,0xa3,0x93,0xad,0x59,0x81,0xa3,0xbf,
+0x89,0x11,0x19,0x6f,0x9f,0x07,0x78,0x4f,0xb6,0x5d,0xe4,0xdd,0xc3,0xab,0xba,0xd6,
+0x5e,0x0f,0xd4,0x88,0xa1,0x8a,0xd7,0x57,0x51,0x57,0x5f,0xf3,0x6b,0xb4,0x41,0x48,
+0xa5,0x87,0xa8,0x89,0x86,0x49,0xb1,0xd9,0x1d,0xbf,0x9e,0x94,0x12,0x9e,0x99,0x61,
+0x34,0x21,0xc7,0x82,0x48,0x4c,0x2c,0xe7,0xc0,0xbd,0xa0,0xac,0x75,0xc8,0x5a,0xc3,
+0x2a,0x22,0xe3,0xfa,0x8b,0x59,0x6e,0x74,0x3f,0x69,0x7d,0x43,0x63,0x2d,0xfc,0xcc,
+0x0e,0xbb,0x62,0xae,0x6e,0x0e,0x3b,0xac,0xe4,0x6b,0x71,0xda,0x12,0x7d,0xf0,0xd3,
+0x97,0x73,0x92,0x46,0x90,0xe6,0xf6,0xee,0x44,0x93,0x44,0xcf,0xbf,0x06,0x9b,0xf1,
+0x87,0xe8,0xfd,0x14,0x33,0xac,0x62,0x88,0xcc,0x7e,0xa5,0x71,0xf8,0x22,0xc7,0xc6,
+0x97,0xf0,0xcb,0xd1,0xb5,0x7e,0x3a,0xf4,0x2c,0x44,0xc8,0xc5,0x34,0x46,0xf0,0x02,
+0x15,0x3d,0x6e,0x4d,0x4f,0xc3,0xbf,0x85,0x7b,0xe2,0x65,0x1e,0x44,0xa7,0x8d,0x98,
+0x7f,0x5d,0xb3,0xc9,0xac,0x00,0x17,0x1e,0x1f,0xea,0xe1,0x9c,0xb9,0xbf,0xf9,0xf6,
+0xaf,0xdf,0xfe,0x0d,0xfe,0xff,0x4f,0xdf,0xfe,0xe3,0xdb,0xff,0xfe,0x4d,0x23,0x96,
+0xb6,0xef,0xe1,0xbb,0x3a,0x90,0xff,0x26,0x00,0x7f,0xa4,0xff,0xfe,0xf9,0xdb,0xbf,
+0x7f,0xfb,0xf3,0x75,0xa0,0x46,0x09,0x50,0x7f,0x82,0xe6,0xff,0xf9,0xed,0xdf,0xaf,
+0x03,0x30,0x4e,0x00,0xf8,0x9f,0x6f,0x7f,0xfc,0xf6,0x3f,0xdf,0xfe,0x0c,0xff,0xfd,
+0xdf,0x6f,0xff,0x05,0x64,0x5d,0x09,0x6a,0xf0,0x8e,0x1f,0xe0,0x4e,0x8c,0x51,0x48,
+0xfd,0x55,0xd5,0x46,0xd7,0x41,0x1b,0xbf,0x0b,0x1d,0x39,0x88,0x56,0x5e,0x35,0x06,
+0x03,0xa5,0xfb,0x2a,0x64,0xdc,0x88,0x5d,0x55,0xdb,0x0d,0xca,0x55,0xb5,0xfd,0x08,
+0x38,0x8d,0x77,0x9b,0x38,0xe4,0xde,0xda,0x37,0x27,0x24,0x3a,0x80,0x51,0x0d,0x51,
+0x74,0x7c,0x10,0xaa,0x51,0x72,0x1b,0x11,0xd8,0x3b,0x8d,0xe1,0x5c,0xad,0x26,0x08,
+0xf0,0xf2,0xa6,0x86,0xa7,0x5d,0x34,0x34,0x72,0x97,0x70,0x15,0xd6,0x96,0xf7,0xe7,
+0x9c,0x51,0xa3,0xda,0x9c,0x9c,0x8a,0x26,0x26,0xc8,0xae,0x19,0xbe,0x6b,0x26,0xa5,
+0xa6,0xae,0xe7,0x1e,0x87,0x87,0x78,0x45,0xdd,0x84,0x26,0x25,0x86,0x85,0x91,0xc6,
+0x28,0xc7,0x4a,0xfd,0x22,0xf2,0xe6,0x42,0xd7,0x0d,0xa6,0xa9,0x2b,0x82,0xd5,0x34,
+0x91,0x2c,0xf3,0x4d,0xb9,0xfe,0x3a,0x39,0xe4,0xdb,0x03,0xbc,0xf3,0xb3,0x2f,0xe1,
+0x3a,0x22,0x08,0x58,0x16,0xbf,0xdf,0xe1,0x15,0xfe,0x09,0x26,0xea,0x23,0xe3,0x9a,
+0x28,0x6b,0x6a,0xf3,0x3a,0x5f,0xa8,0xf3,0x4d,0x9d,0x50,0xa0,0xc1,0xea,0x4f,0x25,
+0xac,0x20,0x2b,0x64,0xf8,0xe0,0x96,0x72,0x2e,0x1b,0xc3,0xbe,0xfd,0x40,0xb1,0xa9,
+0xc8,0xf6,0x73,0x6e,0x73,0x77,0x75,0xdc,0xac,0x6d,0x6c,0x41,0x52,0x9e,0xed,0x06,
+0x14,0x58,0xf7,0xe2,0xf8,0xc1,0x7e,0xd1,0x15,0xb5,0xae,0x3c,0xf0,0xf9,0xb0,0x7c,
+0x9f,0x6f,0xe7,0xc5,0x84,0xdb,0x47,0xae,0xf9,0xb9,0xda,0x61,0xfa,0x9b,0xf7,0x84,
+0xcc,0x84,0x30,0xa1,0xd7,0xdc,0xb8,0xd9,0x84,0x73,0x6f,0xc8,0xc3,0x80,0xad,0xa2,
+0x6d,0xb1,0xe7,0x5e,0xeb,0xdf,0x55,0xef,0x81,0x74,0x75,0xcc,0x9b,0xf7,0xed,0x68,
+0xb7,0x8c,0x78,0x0c,0x6f,0xdb,0x6c,0x0a,0x5d,0xdd,0x8e,0x12,0x7e,0x41,0xe0,0x07,
+0x40,0x32,0xba,0xf2,0x15,0xdd,0x08,0x9a,0x14,0xa5,0x37,0x13,0xa2,0xd3,0xf4,0xd7,
+0x48,0x7a,0x74,0x6a,0xe7,0x1d,0x6b,0x9f,0x02,0xcc,0x68,0x72,0x70,0x45,0xd6,0x17,
+0x43,0x5c,0x09,0xea,0x1e,0x0f,0x09,0x68,0xad,0xdb,0x50,0xed,0x86,0x10,0x70,0x51,
+0xba,0x29,0x02,0x20,0xb3,0x99,0xd3,0xb6,0xc8,0xdb,0x89,0xa8,0x72,0xca,0xa3,0x4f,
+0xbc,0x68,0x77,0xa4,0x93,0xfd,0x0e,0x8a,0x0b,0xe5,0xd3,0xab,0x3f,0xe5,0x77,0xa0,
+0x46,0x8f,0xb8,0x33,0xec,0x85,0x9b,0x32,0xe8,0x3d,0x71,0x8a,0x94,0x63,0x8f,0x7c,
+0xa8,0x9d,0x92,0x52,0xfb,0x25,0x57,0x39,0xe3,0x33,0x4a,0xa0,0x8a,0x5b,0x78,0x41,
+0x29,0xc3,0x27,0x0d,0x75,0x88,0x86,0xb4,0x9b,0xa2,0xea,0x92,0x7d,0xe5,0x00,0x8b,
+0xfb,0xfd,0x45,0x14,0xc8,0x0d,0x13,0x0d,0x51,0xc8,0xab,0x86,0x51,0x23,0x57,0x2c,
+0xee,0x96,0xde,0xef,0x85,0x9d,0x5f,0x78,0x21,0xf8,0x70,0xfc,0xba,0x96,0xf7,0x3f,
+0x8c,0x0b,0x88,0x26,0x59,0x94,0x4e,0xdf,0x58,0x21,0xf8,0xca,0xc0,0xde,0x08,0x9e,
+0x08,0xea,0xc0,0x5d,0xf7,0x2e,0x3a,0x65,0x53,0x10,0x29,0x50,0xea,0xac,0xe5,0x04,
+0x93,0xa7,0x20,0x78,0x81,0x2f,0x48,0xc1,0xbb,0x65,0x89,0x93,0x00,0xba,0x37,0x8d,
+0xd9,0x1c,0x94,0x95,0xc4,0x19,0xfb,0x5d,0xf9,0x11,0xf9,0x22,0x3f,0xfc,0x30,0x55,
+0x99,0x23,0x83,0x1e,0xb4,0x31,0xe0,0xe5,0xfb,0xe9,0xe7,0xaa,0xda,0x4c,0x60,0xd5,
+0x07,0x43,0x11,0xce,0x07,0x36,0x5f,0x9d,0x79,0x39,0x19,0xbc,0x81,0x44,0x3c,0xf8,
+0xcf,0xe0,0x8d,0x7a,0x82,0xcd,0x01,0xc4,0xc9,0x58,0x02,0x1b,0x08,0x38,0x6a,0x0f,
+0xc9,0x1e,0xab,0xb1,0xae,0x50,0xe1,0x78,0x30,0x90,0x0f,0xe1,0x86,0x9f,0x86,0x3f,
+0x55,0xcb,0x9f,0xf4,0x29,0x3b,0x0c,0xd0,0xc9,0xf7,0x81,0xfd,0x3e,0x7e,0x78,0x4d,
+0xe7,0xd7,0xc3,0xa5,0xfe,0xa4,0xc3,0x11,0x76,0xa8,0x2f,0xe8,0x19,0x44,0x08,0x41,
+0xfd,0x7e,0x77,0xd7,0x1b,0x40,0x6a,0x2f,0xa3,0x4e,0x28,0x6a,0xc9,0x68,0xd8,0x1b,
+0xde,0xbd,0x1a,0xcb,0xab,0x3a,0x35,0xc8,0x04,0x5d,0x32,0xf6,0xab,0x31,0x63,0x33,
+0x46,0xfc,0xc7,0xca,0x75,0x8c,0xeb,0x21,0x7b,0xe5,0xab,0xd7,0x66,0x4b,0xad,0xbe,
+0x3c,0x74,0x3f,0xee,0x01,0xea,0x66,0x3c,0xb4,0x60,0xfc,0xd8,0x1b,0x6a,0x01,0x75,
+0xad,0x05,0xc3,0x51,0xef,0xf5,0x43,0x72,0x15,0x2e,0x86,0x58,0xe2,0xbc,0xf6,0x68,
+0xbe,0x07,0x98,0x30,0x13,0xf0,0x80,0xc7,0xba,0x88,0x9e,0x8a,0xeb,0xc1,0x83,0x7c,
+0xf4,0x5d,0x93,0x1f,0xf4,0x71,0xbe,0x78,0x7d,0xe4,0x8f,0xef,0x8b,0x6d,0xc2,0x78,
+0x54,0x8f,0x4c,0x1b,0x3c,0x30,0x0b,0xab,0xcb,0x05,0xbc,0x90,0xe9,0x7d,0x1d,0xfb,
+0xea,0x1a,0xc7,0x3f,0xc1,0x66,0xe2,0x54,0xc6,0x3b,0x37,0x53,0xe7,0x92,0xf0,0xc6,
+0xbe,0xee,0x2d,0x4d,0xfd,0x20,0xd8,0xe7,0x2c,0x24,0xad,0x34,0x7e,0xd2,0xc2,0x4c,
+0xe6,0x12,0x3c,0xee,0xfb,0x1d,0x71,0x39,0x9b,0x13,0xa1,0xf8,0xa4,0x0f,0x66,0x8a,
+0x10,0xa8,0x99,0x52,0x59,0x60,0xe1,0x89,0x93,0xe9,0xfd,0x4a,0x2b,0x61,0xdd,0xce,
+0xff,0x07,0x4e,0x43,0x80,0x06,0x55,0xa2,0x00,0x00,};
+
+static const unsigned int dummy_align__ups_history_html = 8;
+static const unsigned char data__ups_history_html[] = {
+/* /ups_history.html (17 chars) */
+0x2f,0x75,0x70,0x73,0x5f,0x68,0x69,0x73,0x74,0x6f,0x72,0x79,0x2e,0x68,0x74,0x6d,0x6c,0x00,
+
+/* HTTP header */
+
+/* "HTTP/1.1 200 OK
+" (17 bytes) */
+0x48,0x54,0x54,0x50,0x2f,0x31,0x2e,0x31,0x20,0x32,0x30,0x30,0x20,0x4f,0x4b,0x0d,
+0x0a,
+/* "Server: lwIP/1.3.1 (http://savannah.nongnu.org/projects/lwip)
+" (63 bytes) */
+0x53,0x65,0x72,0x76,0x65,0x72,0x3a,0x20,0x6c,0x77,0x49,0x50,0x2f,0x31,0x2e,0x33,
+0x2e,0x31,0x20,0x28,0x68,0x74,0x74,0x70,0x3a,0x2f,0x2f,0x73,0x61,0x76,0x61,0x6e,
+0x6e,0x61,0x68,0x2e,0x6e,0x6f,0x6e,0x67,0x6e,0x75,0x2e,0x6f,0x72,0x67,0x2f,0x70,
+0x72,0x6f,0x6a,0x65,0x63,0x74,0x73,0x2f,0x6c,0x77,0x69,0x70,0x29,0x0d,0x0a,
+/* "Content-Length: 1169
+" (22 bytes) */
+0x43,0x6f,0x6e,0x74,0x65,0x6e,0x74,0x2d,0x4c,0x65,0x6e,0x67,0x74,0x68,0x3a,0x20,
+0x31,0x31,0x36,0x39,0x0d,0x0a,
+/* "Connection: Close
+" (19 bytes) */
+0x43,0x6f,0x6e,0x6e,0x65,0x63,0x74,0x69,0x6f,0x6e,0x3a,0x20,0x43,0x6c,0x6f,0x73,
+0x65,0x0d,0x0a,
+/* "Content-type: text/html
+Content-Encoding: gzip
+" (49 bytes) */
+0x43,0x6f,0x6e,0x74,0x65,0x6e,0x74,0x2d,0x74,0x79,0x70,0x65,0x3a,0x20,0x74,0x65,
+0x78,0x74,0x2f,0x68,0x74,0x6d,0x6c,0x0d,0x0a,0x43,0x6f,0x6e,0x74,0x65,0x6e,0x74,
+0x2d,0x45,0x6e,0x63,0x6f,0x64,0x69,0x6e,0x67,0x3a,0x20,0x67,0x7a,0x69,0x70,0x0d,
+0x0a,
+/* "ETag: "9aLWXAgVcVBrbgZ"
+" (25 bytes) */
+0x45,0x54,0x61,0x67,0x3a,0x20,0x22,0x39,0x61,0x4c,0x57,0x58,0x41,0x67,0x56,0x63,
+0x56,0x42,0x72,0x62,0x67,0x5a,0x22,0x0d,0x0a,0x0d,0x0a,
+
+/* raw file data (1169 bytes) */
+0x1f,0x8b,0x08,0x00,0x00,0x00,0x00,0x00,0x04,0x0a,0x8d,0x56,0xcd,0x6e,0xdb,0x46,
+0x10,0x7e,0x15,0x86,0x2d,0x6c,0x11,0x10,0xa9,0xa8,0xbd,0x14,0xb0,0xc8,0xa2,0x70,
+0x73,0x08,0x50,0xb4,0x06,0xdc,0x14,0xed,0xc9,0x58,0x91,0x23,0x71,0xe3,0xd5,0x92,
+0xd9,0x5d,0x52,0x56,0xea,0x02,0xb6,0xd3,0xb4,0x87,0x14,0x48,0xe2,0x43,0x11,0x14,
+0x28,0x82,0xf4,0x09,0x8c,0x14,0x41,0xd3,0x9f,0x24,0xaf,0xb0,0x7c,0xa3,0xce,0x2e,
+0x49,0x85,0x82,0x65,0x43,0x07,0x89,0xcb,0xdd,0xf9,0xd9,0xf9,0xe6,0x9b,0x19,0x8e,
+0x6e,0x7c,0xfe,0xd5,0xee,0xd7,0xdf,0xed,0xdd,0x72,0x52,0x35,0x63,0xd1,0xc8,0xfc,
+0x3b,0x8c,0xf0,0x69,0xe8,0xba,0xf8,0x06,0x24,0x89,0x46,0x33,0x50,0xc4,0x89,0x53,
+0x22,0x24,0xa8,0xd0,0x2d,0xd4,0xc4,0xff,0x04,0xcf,0xec,0x6e,0xaa,0x54,0xee,0xc3,
+0xbd,0x82,0x96,0xa1,0xfb,0xad,0x7f,0xe7,0x33,0x7f,0x37,0x9b,0xe5,0x44,0xd1,0x31,
+0x03,0xd7,0x89,0x33,0xae,0x80,0xa3,0xca,0xed,0x5b,0x21,0x24,0x53,0x68,0x95,0x38,
+0x99,0x41,0xe8,0x96,0x14,0xe6,0x79,0x26,0x54,0x47,0x6e,0x4e,0x13,0x95,0x86,0x09,
+0x94,0x34,0x06,0xdf,0xbe,0xf4,0x29,0xa7,0x8a,0x12,0xe6,0xcb,0x98,0x30,0x08,0x87,
+0xfd,0x19,0x39,0xa2,0xb3,0x62,0xb6,0x7c,0x2f,0x24,0x08,0xfb,0x42,0xd0,0x65,0x78,
+0x13,0x5d,0x28,0xaa,0x18,0x44,0xfa,0xd7,0xea,0x41,0x75,0xa2,0xdf,0xe8,0x0b,0xfd,
+0xaf,0x53,0x9d,0xea,0xb7,0xd5,0x69,0x75,0x86,0xff,0x8f,0x71,0xeb,0x75,0xf5,0xd8,
+0xd1,0xcf,0xf4,0x53,0xfd,0x7c,0x34,0xa8,0xa5,0x47,0x8c,0xf2,0x43,0x27,0x15,0x30,
+0x09,0xdd,0x19,0xa1,0x3c,0x88,0xa5,0x74,0x1d,0x01,0x2c,0x74,0xa5,0x5a,0x30,0x90,
+0x29,0x80,0x42,0xdb,0x32,0x16,0x34,0x57,0x8e,0x5a,0xe4,0x18,0x80,0x82,0x23,0x35,
+0xb8,0x4b,0x4a,0x52,0xef,0xba,0x8e,0x14,0x71,0xe8,0x8a,0x8c,0x41,0x70,0x57,0xa2,
+0xf0,0xa0,0xde,0xc7,0x45,0x0d,0xe3,0x38,0x4b,0x16,0xd1,0x28,0xa1,0xa5,0x13,0x33,
+0x22,0x65,0xe8,0x72,0x52,0x8e,0x89,0x70,0xea,0x87,0x9f,0xc0,0x84,0x14,0x4c,0xb5,
+0xaf,0x13,0x7a,0x04,0x89,0xaf,0xb2,0x1c,0x2d,0x5d,0xd2,0xf1,0x8d,0x45,0x10,0xf5,
+0x51,0x34,0x22,0xcd,0xd5,0x29,0x4f,0xe0,0x28,0x30,0x29,0x44,0x50,0x6b,0x1f,0x2c,
+0x9b,0x66,0xe6,0x2e,0x04,0x7f,0x68,0xa6,0xfd,0x6f,0x35,0x3e,0x70,0x1d,0x9a,0x60,
+0xcc,0xc0,0x0b,0x9f,0x62,0xbe,0x1a,0xd1,0x82,0xb5,0xfa,0x78,0xb9,0xf6,0x46,0xb8,
+0xac,0xa5,0xcd,0x22,0x42,0xc8,0xd6,0x3a,0x8e,0xf4,0x73,0x7d,0x81,0xc8,0x5f,0xe8,
+0xff,0xf4,0xab,0xea,0xac,0x3a,0xa9,0x1e,0xd5,0xde,0x8d,0x7c,0x57,0x07,0xc9,0xa4,
+0x28,0x9f,0xca,0xfa,0xbe,0x91,0xfe,0x1d,0xd5,0x30,0x47,0xa8,0xfa,0x56,0xff,0xad,
+0xff,0xd1,0xaf,0xd7,0xab,0x51,0x3e,0xc9,0x5a,0x95,0x67,0xfa,0x4d,0xf5,0x23,0x26,
+0xf5,0x04,0x7d,0x5d,0x54,0x3f,0x99,0xc4,0xae,0x57,0x2a,0x72,0x79,0x90,0x52,0xa9,
+0x32,0xb1,0x58,0x85,0x87,0xc4,0x8a,0x96,0x48,0xcc,0x2e,0x5d,0xde,0x9b,0x18,0x14,
+0x58,0x11,0x35,0x6c,0x9d,0x14,0x18,0x5a,0x23,0x47,0x10,0x7e,0x8b,0x9d,0x2c,0xc6,
+0x08,0xc8,0x04,0x11,0x69,0xf2,0x1d,0x0b,0x20,0x0a,0xf6,0x8b,0xf1,0x97,0xa4,0xa4,
+0x53,0x2c,0x86,0x8c,0xf7,0xbc,0x0e,0x1b,0x6c,0x1a,0x3a,0xf6,0xe6,0x82,0xe4,0x79,
+0x6b,0xad,0xa9,0x19,0xb4,0x96,0x0e,0x57,0x6e,0x75,0x1d,0x89,0x51,0xb4,0xcb,0x11,
+0x65,0x6a,0xc1,0x17,0x20,0xf3,0x8c,0x4b,0x1b,0xde,0xc8,0x6e,0xd9,0xeb,0xda,0xd5,
+0x92,0x1e,0xf5,0x7e,0x73,0x83,0x96,0x82,0xe8,0x5c,0xd5,0x94,0x55,0xc2,0x2c,0x5b,
+0x2e,0xe4,0xe9,0x47,0x88,0xd4,0x79,0xf5,0x30,0x70,0x6c,0x61,0xbd,0xab,0x4e,0x02,
+0xac,0xa0,0xf4,0xb2,0xcc,0x13,0xfd,0x12,0x65,0x5e,0x6e,0x20,0x79,0x5e,0x3d,0xda,
+0x40,0x0a,0xb9,0xa1,0xff,0x44,0x2a,0x3d,0xd0,0x7f,0x21,0x33,0x2e,0xd6,0x3b,0xb5,
+0x17,0xab,0x7e,0xae,0x69,0x84,0xac,0x38,0xbb,0x4a,0xd0,0x58,0x33,0x77,0xb7,0x51,
+0x38,0xfa,0x89,0xfe,0x4d,0x3f,0x5d,0x6f,0xf2,0x0f,0xfd,0x0a,0xa9,0xf5,0x0e,0x89,
+0x8c,0x84,0x46,0x6e,0x9a,0x96,0x72,0x85,0xf7,0x17,0xc6,0x9f,0x15,0x39,0x5d,0x6f,
+0xeb,0x1c,0x75,0xd1,0x9a,0xa1,0xa8,0x81,0x6c,0x60,0xb0,0xc5,0x95,0xed,0xb0,0xca,
+0xf4,0x06,0x9b,0x9e,0x86,0xa5,0x07,0x09,0x51,0x04,0xf3,0x30,0xb0,0x27,0xe6,0x69,
+0x72,0x8a,0xcf,0x25,0x79,0x4c,0xd9,0x1a,0xb2,0x60,0xbf,0x31,0xcd,0xc6,0xf0,0xc9,
+0x6c,0x21,0x15,0x1b,0xce,0x2d,0x73,0x3c,0x56,0xdc,0x9f,0x8a,0xac,0x30,0x9d,0x64,
+0x5c,0x28,0x95,0xf1,0x36,0xa1,0x78,0xe2,0x98,0xd3,0xa6,0xf5,0xb8,0x4e,0xc6,0x63,
+0x46,0xe3,0xc3,0xd0,0x9d,0x82,0xba,0xb3,0xb7,0xbf,0x47,0xa6,0xd0,0x1b,0x7a,0xa8,
+0x27,0x73,0xc2,0x1d,0x22,0x28,0xf1,0x53,0x9a,0x24,0xc0,0xb1,0xfb,0x89,0x02,0xeb,
+0xe6,0x78,0x8b,0x91,0x7b,0x45,0xb6,0x83,0xf4,0x46,0x09,0xbc,0x5f,0xed,0x20,0x72,
+0x36,0xf6,0x94,0x0b,0x28,0x5b,0x57,0xd7,0x79,0x42,0x47,0x42,0x5c,0xf2,0xd3,0xa5,
+0x7d,0x4e,0xa6,0x94,0xdb,0x72,0xc3,0x0b,0x53,0x9e,0x17,0xdd,0x46,0x5d,0xd7,0x6a,
+0x5c,0x08,0x81,0x13,0x09,0x25,0x71,0x3c,0x49,0x7a,0x1f,0xbb,0xf8,0xd0,0x8d,0xb6,
+0xf8,0x58,0xe6,0x3b,0x83,0xfa,0x51,0x87,0x6a,0xa0,0x34,0x52,0x8c,0xce,0x28,0x36,
+0xfe,0x9b,0xcb,0xf8,0x2c,0xfe,0x9b,0xa2,0xc8,0x71,0x42,0x6c,0x14,0x9b,0x58,0x17,
+0xdb,0xc6,0x18,0x6e,0x77,0xb2,0x95,0x9b,0x29,0x7d,0x9b,0xab,0xde,0x87,0xbd,0x4e,
+0x00,0x5e,0x60,0x86,0xd5,0x6e,0x3d,0x8f,0x3d,0x6f,0xfb,0xea,0x84,0x6e,0x09,0x9b,
+0xcf,0xe3,0x65,0xc0,0x4d,0x42,0x1b,0xe6,0xad,0x8f,0x3c,0x17,0x74,0x46,0xc4,0xc2,
+0xa7,0xbc,0x04,0xa1,0x20,0xa9,0xc1,0x4e,0x58,0x46,0x92,0xb6,0xed,0xbe,0xe7,0xd6,
+0xb6,0x00,0x55,0x08,0x24,0x1e,0xcb,0xc6,0x5f,0xa0,0x44,0xcf,0xed,0x76,0xe7,0x78,
+0x4a,0x3f,0x35,0xc0,0x87,0x84,0x31,0xb7,0xbf,0x7a,0x24,0x4b,0xb7,0xaf,0xb0,0x40,
+0x02,0x9a,0x2c,0x43,0x30,0x89,0x1a,0xb3,0x03,0x13,0x1e,0xf6,0xa6,0x17,0x58,0xf6,
+0x0f,0x4d,0x8d,0xda,0x29,0x7f,0x56,0xfd,0x82,0x4d,0xc8,0xd9,0xdd,0xff,0xa6,0x8d,
+0xa6,0xad,0x12,0xd4,0x98,0x50,0x74,0xd0,0x16,0x54,0x4b,0xdb,0x95,0x19,0x39,0xa8,
+0x07,0xf6,0x06,0x33,0xdf,0x7e,0x32,0xac,0xce,0xfc,0x6b,0xb5,0xa2,0x4e,0xc2,0x86,
+0x5e,0x1f,0x53,0xd5,0x25,0xa6,0x17,0x64,0xfc,0x10,0x16,0x58,0x18,0xf8,0x91,0x30,
+0x29,0x38,0x8e,0x28,0x9c,0x20,0xe0,0x7d,0x0f,0xc7,0xc7,0x3d,0x08,0xe7,0x38,0xe5,
+0xb3,0x79,0x00,0x25,0x12,0xd9,0xdb,0xa1,0x93,0x9e,0x3b,0xfc,0xd8,0x0d,0xc3,0x1e,
+0x04,0xa8,0xb4,0x9b,0x25,0x28,0x05,0xc1,0x3c,0xa5,0x71,0xea,0x79,0x0d,0xd4,0x1d,
+0x77,0x5d,0x7e,0xac,0x3a,0x2d,0x09,0x2b,0xc0,0xf3,0xfa,0x37,0x86,0x3f,0x20,0x5c,
+0xf6,0x43,0x07,0xe1,0xb1,0x5f,0x85,0xff,0x03,0xc0,0x13,0x57,0x38,0x25,0x0a,0x00,
+0x00,};
+
+static const unsigned int dummy_align__info_html = 9;
+static const unsigned char data__info_html[] = {
+/* /info.html (10 chars) */
+0x2f,0x69,0x6e,0x66,0x6f,0x2e,0x68,0x74,0x6d,0x6c,0x00,
+
+/* HTTP header */
+
+/* "HTTP/1.1 200 OK
+" (17 bytes) */
+0x48,0x54,0x54,0x50,0x2f,0x31,0x2e,0x31,0x20,0x32,0x30,0x30,0x20,0x4f,0x4b,0x0d,
+0x0a,
+/* "Server: lwIP/1.3.1 (http://savannah.nongnu.org/projects/lwip)
+" (63 bytes) */
+0x53,0x65,0x72,0x76,0x65,0x72,0x3a,0x20,0x6c,0x77,0x49,0x50,0x2f,0x31,0x2e,0x33,
+0x2e,0x31,0x20,0x28,0x68,0x74,0x74,0x70,0x3a,0x2f,0x2f,0x73,0x61,0x76,0x61,0x6e,
+0x6e,0x61,0x68,0x2e,0x6e,0x6f,0x6e,0x67,0x6e,0x75,0x2e,0x6f,0x72,0x67,0x2f,0x70,
+0x72,0x6f,0x6a,0x65,0x63,0x74,0x73,0x2f,0x6c,0x77,0x69,0x70,0x29,0x0d,0x0a,
+/* "Content-Length: 1110
+" (22 bytes) */
+0x43,0x6f,0x6e,0x74,0x65,0x6e,0x74,0x2d,0x4c,0x65,0x6e,0x67,0x74,0x68,0x3a,0x20,
+0x31,0x31,0x31,0x30,0x0d,0x0a,
+/* "Connection: Close
+" (19 bytes) */
+0x43,0x6f,0x6e,0x6e,0x65,0x63,0x74,0x69,0x6f,0x6e,0x3a,0x20,0x43,0x6c,0x6f,0x73,
+0x65,0x0d,0x0a,
+/* "Content-type: text/html
+Content-Encoding: gzip
+" (49 bytes) */
+0x43,0x6f,0x6e,0x74,0x65,0x6e,0x74,0x2d,0x74,0x79,0x70,0x65,0x3a,0x20,0x74,0x65,
+0x78,0x74,0x2f,0x68,0x74,0x6d,0x6c,0x0d,0x0a,0x43,0x6f,0x6e,0x74,0x65,0x6e,0x74,
+0x2d,0x45,0x6e,0x63,0x6f,0x64,0x69,0x6e,0x67,0x3a,0x20,0x67,0x7a,0x69,0x70,0x0d,
+0x0a,
+/* "ETag: "K41MckQhe87LNzX"
+" (25 bytes) */
+0x45,0x54,0x61,0x67,0x3a,0x20,0x22,0x4b,0x34,0x31,0x4d,0x63,0x6b,0x51,0x68,0x65,
+0x38,0x37,0x4c,0x4e,0x7a,0x58,0x22,0x0d,0x0a,0x0d,0x0a,
+
+/* raw file data (1110 bytes) */
+0x1f,0x8b,0x08,0x00,0x00,0x00,0x00,0x00,0x04,0x0a,0x9d,0x56,0xdd,0x6e,0xdb,0x36,
+0x18,0x7d,0x15,0x56,0xbb,0x69,0x81,0x28,0x6e,0x76,0xb5,0x0b,0x4b,0x40,0x91,0x15,
+0x43,0x81,0x75,0x0d,0xd0,0x0e,0xd8,0xae,0x0a,0x5a,0xa2,0x6d,0xb6,0x12,0xa9,0x49,
+0x94,0x63,0xdf,0x25,0xd9,0xd6,0x5d,0x74,0x40,0x8b,0x60,0x18,0x8a,0xa0,0x6b,0xd7,
+0x3d,0x41,0xba,0x36,0x9b,0xdb,0xfc,0xf4,0x15,0xa8,0x37,0xda,0xf9,0x48,0xcb,0x89,
+0x17,0x27,0xfb,0xb9,0x90,0x4d,0x8a,0xfc,0x7e,0x78,0xbe,0xf3,0x1d,0xaa,0x7b,0xe5,
+0xd3,0x3b,0xeb,0xf7,0xbe,0xde,0xb8,0xc9,0x86,0x26,0xcf,0xe2,0x2e,0xfd,0xb2,0x8c,
+0xab,0x41,0x14,0x04,0x98,0x09,0x9e,0xc6,0xdd,0x5c,0x18,0xce,0x92,0x21,0x2f,0x2b,
+0x61,0xa2,0xa0,0x36,0xfd,0xf0,0x13,0xac,0xb9,0xb7,0x43,0x63,0x8a,0x50,0x7c,0x53,
+0xcb,0x51,0x14,0x7c,0x15,0x7e,0x79,0x23,0x5c,0xd7,0x79,0xc1,0x8d,0xec,0x65,0x22,
+0x60,0x89,0x56,0x46,0x28,0x98,0xdc,0xba,0x19,0x89,0x74,0x20,0x5a,0x23,0xc5,0x73,
+0x11,0x05,0x23,0x29,0x36,0x0b,0x5d,0x9a,0x33,0xfb,0x36,0x65,0x6a,0x86,0x51,0x2a,
+0x46,0x32,0x11,0xa1,0x9b,0xac,0x48,0x25,0x8d,0xe4,0x59,0x58,0x25,0x3c,0x13,0xd1,
+0xda,0x4a,0xce,0xc7,0x32,0xaf,0xf3,0xf9,0xbc,0xae,0x44,0xe9,0x26,0x1c,0x21,0xa3,
+0xeb,0x08,0x61,0xa4,0xc9,0x44,0x6c,0x9f,0xd9,0xe3,0xe6,0x3b,0x7b,0xd2,0x6c,0xd9,
+0x23,0xbb,0xdf,0x3c,0xb2,0xd3,0xe6,0x49,0xb7,0xe3,0xd7,0xba,0x99,0x54,0x0f,0xd9,
+0xb0,0x14,0xfd,0x28,0xc8,0xb9,0x54,0xab,0x49,0x55,0x05,0xac,0x14,0x59,0x14,0x54,
+0x66,0x92,0x89,0x6a,0x28,0x84,0x81,0xa7,0x2a,0x29,0x65,0x61,0x98,0x99,0x14,0x48,
+0xd7,0x88,0xb1,0xe9,0x3c,0xe0,0x23,0xee,0xdf,0x06,0xac,0x2a,0x93,0x28,0x28,0x75,
+0x26,0x56,0x1f,0x54,0xd8,0xdc,0xf1,0xef,0x31,0xf0,0xa0,0xf5,0x74,0x3a,0x89,0xbb,
+0xa9,0x1c,0xb1,0x24,0xe3,0x55,0x15,0x05,0x8a,0x8f,0x7a,0xbc,0x64,0xfe,0x2f,0x4c,
+0x45,0x9f,0xd7,0x99,0x69,0xa7,0x7d,0x39,0x16,0x69,0x68,0x74,0x01,0x4f,0xe7,0x6c,
+0x42,0xf2,0x28,0x4a,0xbf,0x14,0x77,0xf9,0x2c,0x75,0xa9,0x52,0x31,0x5e,0xa5,0x82,
+0x01,0x42,0x1f,0x23,0xd3,0x03,0x4d,0xb9,0x70,0x3c,0x70,0xd3,0xfe,0xb6,0x16,0x1f,
+0x05,0x4c,0xa6,0x38,0xb3,0x50,0x75,0x28,0x51,0x9d,0xd9,0xd6,0x3a,0x6b,0xed,0x91,
+0x5c,0x9b,0x11,0x86,0x7e,0x37,0x0d,0x62,0x40,0xb6,0x34,0x70,0x6c,0x5f,0x02,0xdd,
+0x2d,0xbb,0x0f,0x94,0x0f,0x9a,0x9d,0x66,0xab,0x79,0xec,0xa3,0xd3,0xfe,0xb3,0x36,
+0xa0,0x8e,0x91,0x6a,0x50,0xf9,0x7c,0x63,0xfb,0x0b,0xcc,0xb6,0xc9,0xc0,0x9e,0xd8,
+0x77,0xf6,0xbd,0x9d,0x2e,0x37,0x93,0xaa,0xaf,0x17,0x8f,0xc8,0x13,0x23,0x47,0xa0,
+0xd2,0xf2,0x02,0xd3,0xc1,0xff,0x1e,0x7a,0x28,0x2b,0xa3,0xcb,0x49,0x1b,0xf9,0xe7,
+0xe6,0x5b,0x44,0x3d,0x46,0xca,0x87,0xa7,0x31,0x3b,0x35,0xb8,0xef,0x21,0x3b,0x03,
+0xff,0x66,0xc9,0x8b,0x02,0xc0,0x3b,0xd4,0x66,0x6c,0x06,0x16,0xc3,0xb5,0x0b,0xa2,
+0x63,0xa1,0x0b,0x30,0x09,0xe3,0x11,0xcf,0x64,0x8a,0x46,0xd0,0x2a,0xec,0xe9,0x31,
+0x01,0x4d,0x11,0xfa,0xba,0xcc,0xdd,0xf2,0xdd,0x2f,0x6e,0x6f,0xd0,0xd9,0x02,0x46,
+0xe7,0xd1,0x2a,0x0a,0xdc,0x49,0x93,0x81,0x0c,0x18,0x1a,0x6b,0xa8,0xe1,0x62,0xe3,
+0xce,0xdd,0x7b,0x30,0x34,0xc4,0xec,0xb6,0x40,0x7e,0x32,0xcb,0x6b,0x4e,0x22,0xd3,
+0x0b,0x9d,0x33,0x6c,0xf6,0xe4,0x33,0x25,0x0d,0xd1,0x80,0x59,0x55,0x70,0x38,0xff,
+0x18,0x78,0xed,0x01,0xe9,0xe3,0x19,0xe2,0x87,0xf6,0x10,0xe5,0xda,0x62,0xa8,0x1a,
+0x5e,0xa2,0x37,0x76,0x5c,0xa7,0x4c,0x31,0x7e,0x63,0xf7,0xd1,0x27,0x43,0x24,0x4c,
+0x4e,0x30,0x72,0x12,0x60,0x3c,0x9d,0x9d,0xdf,0xb4,0x4d,0x46,0x69,0x25,0x70,0xba,
+0xd2,0x71,0xd3,0xee,0x02,0xd5,0x03,0x7b,0xd4,0x3c,0x61,0x8e,0x0f,0xaf,0xe1,0x71,
+0x87,0xd8,0x60,0xa0,0x20,0x66,0xa9,0x8d,0x43,0xa2,0x2e,0x8c,0xcc,0x49,0x1a,0xdc,
+0x46,0x17,0xd4,0x47,0x89,0xed,0x73,0x24,0xf7,0x16,0x3e,0x0f,0x9b,0x1f,0xe7,0x6e,
+0x1c,0x7f,0x75,0x2a,0xb2,0xa5,0x16,0x3f,0x81,0x55,0x3b,0x76,0x9f,0xd9,0x0f,0x8e,
+0x58,0x53,0xfb,0xa7,0xfd,0x9d,0x9c,0x10,0xd5,0x30,0xa2,0x93,0xf9,0x6c,0xc8,0x4d,
+0x51,0x6a,0x54,0x68,0x79,0xe8,0x5d,0x82,0xa7,0xd9,0x26,0xd5,0x60,0xa0,0xf8,0x8b,
+0x05,0xc3,0xfe,0xe6,0x48,0x94,0x15,0xaa,0xb6,0x2c,0x87,0xdb,0x37,0xd6,0x19,0xb8,
+0xf5,0x96,0xd0,0x68,0xb6,0x17,0xec,0x72,0x9e,0xf0,0x34,0xa5,0x3e,0x3e,0x7f,0xd6,
+0x57,0x14,0xd0,0x4e,0xd1,0x0b,0xc7,0xcd,0x63,0xfb,0x8e,0xa1,0x12,0x27,0xae,0xa7,
+0xb6,0x16,0x5c,0x40,0xed,0x94,0xeb,0x70,0x3a,0xc7,0x02,0x58,0xbb,0x28,0x29,0xc2,
+0x12,0x5c,0x70,0xf5,0xa8,0xb5,0x8a,0xbb,0x52,0x15,0xf5,0x59,0x11,0x0b,0xd0,0xe1,
+0xa4,0xbf,0x7a,0x53,0xb5,0xd4,0x9e,0x0d,0x67,0x22,0x42,0x24,0x0d,0x89,0xed,0x10,
+0x37,0xb0,0x91,0x8f,0x33,0xa1,0x06,0xd0,0xe5,0x60,0xed,0x3a,0xe9,0xeb,0xf9,0xdc,
+0x9f,0xd3,0x49,0x89,0x42,0xf6,0x03,0x9e,0x43,0x3c,0x7f,0x20,0x0d,0xd0,0xca,0x1e,
+0xfc,0x73,0x1a,0xd5,0xa4,0xfa,0x5c,0x27,0xae,0x53,0x7c,0x9f,0x65,0xf3,0xd9,0xff,
+0xcd,0x87,0x98,0x7e,0x44,0xe0,0x11,0xdf,0x9d,0x3c,0x4d,0x49,0x5f,0x7c,0xe9,0x2f,
+0x06,0x24,0xd1,0x39,0x94,0x11,0xf7,0x11,0x91,0x63,0x3e,0xf9,0xaf,0x49,0x74,0xda,
+0x56,0xb9,0xb8,0x13,0x9f,0x79,0xb4,0x9a,0x1f,0x1c,0x46,0xef,0x99,0x7d,0x4d,0x00,
+0x02,0x3c,0xa2,0xc0,0x01,0x66,0x24,0x89,0x54,0xff,0x37,0xf6,0x04,0x54,0x76,0xed,
+0xb9,0x4f,0x7b,0xdd,0x15,0x76,0x69,0x6b,0xfa,0x36,0x3f,0x82,0xd1,0xa9,0xc1,0x29,
+0xe3,0xa1,0x02,0x4f,0xed,0x0b,0x16,0x40,0x7d,0x5f,0xda,0x3d,0x66,0x7f,0x45,0x8c,
+0xdf,0x10,0x71,0x2f,0x58,0x5a,0xd5,0xe5,0xdd,0x57,0x17,0xd5,0xfd,0xfc,0xc2,0x0e,
+0xbc,0xb4,0x71,0xc8,0x74,0x79,0xf3,0xb4,0xa8,0x75,0x9c,0xc0,0xc5,0xdd,0x5e,0x6d,
+0x8c,0x56,0xb3,0xab,0xd7,0x4f,0x02,0xa6,0x55,0x92,0xc9,0xe4,0x21,0x6e,0x5d,0x61,
+0xea,0x52,0xb1,0xaa,0xee,0xe5,0xd2,0xdc,0x82,0x8c,0x5e,0xbd,0xb6,0x72,0x65,0x6d,
+0x7e,0x0b,0xf6,0x8c,0x62,0x78,0xc2,0xa2,0x94,0x39,0x2f,0x27,0x38,0xf5,0x2b,0x88,
+0xd1,0xf7,0x00,0xd7,0x83,0xb2,0x43,0x7a,0xe2,0x9d,0x82,0xce,0x44,0x77,0xfc,0xf9,
+0xeb,0xd2,0xcb,0xdc,0xbf,0xb8,0xf8,0xdd,0x77,0xc3,0xe2,0xc5,0x7f,0xa9,0x55,0x4c,
+0x02,0xfd,0x99,0x30,0x57,0xaf,0x9d,0xfd,0x52,0xa0,0x4f,0xae,0xbf,0x00,0x58,0xf0,
+0xb0,0xd7,0x82,0x09,0x00,0x00,};
+
+static const unsigned int dummy_align__history_html = 10;
+static const unsigned char data__history_html[] = {
+/* /history.html (13 chars) */
+0x2f,0x68,0x69,0x73,0x74,0x6f,0x72,0x79,0x2e,0x68,0x74,0x6d,0x6c,0x00,
+
+/* HTTP header */
+
+/* "HTTP/1.1 200 OK
+" (17 bytes) */
+0x48,0x54,0x54,0x50,0x2f,0x31,0x2e,0x31,0x20,0x32,0x30,0x30,0x20,0x4f,0x4b,0x0d,
+0x0a,
+/* "Server: lwIP/1.3.1 (http://savannah.nongnu.org/projects/lwip)
+" (63 bytes) */
+0x53,0x65,0x72,0x76,0x65,0x72,0x3a,0x20,0x6c,0x77,0x49,0x50,0x2f,0x31,0x2e,0x33,
+0x2e,0x31,0x20,0x28,0x68,0x74,0x74,0x70,0x3a,0x2f,0x2f,0x73,0x61,0x76,0x61,0x6e,
+0x6e,0x61,0x68,0x2e,0x6e,0x6f,0x6e,0x67,0x6e,0x75,0x2e,0x6f,0x72,0x67,0x2f,0x70,
+0x72,0x6f,0x6a,0x65,0x63,0x74,0x73,0x2f,0x6c,0x77,0x69,0x70,0x29,0x0d,0x0a,
+/* "Content-Length: 1086
+" (22 bytes) */
+0x43,0x6f,0x6e,0x74,0x65,0x6e,0x74,0x2d,0x4c,0x65,0x6e,0x67,0x74,0x68,0x3a,0x20,
+0x31,0x30,0x38,0x36,0x0d,0x0a,
+/* "Connection: Close
+" (19 bytes) */
+0x43,0x6f,0x6e,0x6e,0x65,0x63,0x74,0x69,0x6f,0x6e,0x3a,0x20,0x43,0x6c,0x6f,0x73,
+0x65,0x0d,0x0a,
+/* "Content-type: text/html
+Content-Encoding: gzip
+" (49 bytes) */
+0x43,0x6f,0x6e,0x74,0x65,0x6e,0x74,0x2d,0x74,0x79,0x70,0x65,0x3a,0x20,0x74,0x65,
+0x78,0x74,0x2f,0x68,0x74,0x6d,0x6c,0x0d,0x0a,0x43,0x6f,0x6e,0x74,0x65,0x6e,0x74,
+0x2d,0x45,0x6e,0x63,0x6f,0x64,0x69,0x6e,0x67,0x3a,0x20,0x67,0x7a,0x69,0x70,0x0d,
+0x0a,
+/* "ETag: "OHQIU6Cbyz2WHAg"
+" (25 bytes) */
+0x45,0x54,0x61,0x67,0x3a,0x20,0x22,0x4f,0x48,0x51,0x49,0x55,0x36,0x43,0x62,0x79,
+0x7a,0x32,0x57,0x48,0x41,0x67,0x22,0x0d,0x0a,0x0d,0x0a,
+
+/* raw file data (1086 bytes) */
+0x1f,0x8b,0x08,0x00,0x00,0x00,0x00,0x00,0x04,0x0a,0x8d,0x56,0x5d,0x6f,0xdc,0x44,
+0x14,0xfd,0x2b,0xee,0x80,0x92,0xb5,0xb4,0xde,0xed,0x8a,0x17,0xa4,0xac,0x8d,0x50,
+0xe8,0x43,0x25,0x04,0x95,0x4a,0x11,0x3c,0x45,0xb3,0xf6,0xdd,0xf5,0x34,0xb3,0x33,
+0xee,0x78,0xec,0xcd,0x42,0x90,0x68,0x0b,0xbc,0x14,0xa9,0x12,0x0f,0x88,0x17,0x84,
+0xf8,0x07,0x01,0x29,0x52,0x4a,0xd3,0xfc,0x06,0xef,0x3f,0xe2,0x8c,0x3f,0x36,0x8e,
+0xba,0x94,0x28,0x4a,0x3c,0x1e,0xdf,0x3b,0xf7,0xde,0x73,0xce,0xbd,0x93,0xe9,0x9d,
+0x4f,0x3e,0x3f,0xfc,0xe2,0xeb,0x07,0xf7,0xbc,0xd4,0x2e,0x65,0x34,0x75,0x7f,0x3d,
+0xc9,0xd5,0x22,0x64,0x0c,0x6f,0xc4,0x93,0x68,0xba,0x24,0xcb,0xbd,0x38,0xe5,0x26,
+0x27,0x1b,0xb2,0xc2,0xce,0x83,0x0f,0xf1,0xad,0xde,0x4d,0xad,0xcd,0x02,0x7a,0x52,
+0x88,0x32,0x64,0x5f,0x05,0x8f,0x3e,0x0e,0x0e,0xf5,0x32,0xe3,0x56,0xcc,0x24,0x31,
+0x2f,0xd6,0xca,0x92,0x82,0xcb,0xfd,0x7b,0x21,0x25,0x0b,0xea,0x9c,0x14,0x5f,0x52,
+0xc8,0x4a,0x41,0xab,0x4c,0x1b,0xdb,0xb3,0x5b,0x89,0xc4,0xa6,0x61,0x42,0xa5,0x88,
+0x29,0xa8,0x5f,0x86,0x42,0x09,0x2b,0xb8,0x0c,0xf2,0x98,0x4b,0x0a,0x27,0xc3,0x25,
+0x3f,0x11,0xcb,0x62,0xb9,0x7d,0x2f,0x72,0x32,0xf5,0x0b,0x47,0xc8,0xf0,0x2e,0x42,
+0x58,0x61,0x25,0x45,0xd5,0xaf,0x9b,0xe7,0x9b,0xef,0xab,0x37,0xd5,0x59,0xf5,0xda,
+0xdb,0x3c,0xad,0xae,0xaa,0xbf,0x36,0x2f,0x36,0xcf,0xaa,0x8b,0xea,0x95,0x57,0xfd,
+0x83,0xd7,0x37,0x9b,0x67,0xf8,0x7e,0x55,0xbd,0xc6,0xcf,0x39,0x56,0x67,0xd3,0x71,
+0xe3,0x39,0x95,0x42,0x1d,0x7b,0xa9,0xa1,0x79,0xc8,0x96,0x5c,0xa8,0x51,0x9c,0xe7,
+0xcc,0x33,0x24,0x43,0x96,0xdb,0xb5,0xa4,0x3c,0x25,0xb2,0x88,0x93,0xc7,0x46,0x64,
+0xd6,0xb3,0xeb,0x0c,0xc5,0x58,0x3a,0xb1,0xe3,0xc7,0xbc,0xe4,0xcd,0x2e,0xf3,0x72,
+0x13,0x87,0xcc,0x68,0x49,0xa3,0xc7,0x39,0x8c,0xc7,0xcd,0x3e,0x16,0x0d,0xa4,0x33,
+0x9d,0xac,0xa3,0x69,0x22,0x4a,0x2f,0x96,0x3c,0xcf,0x43,0xa6,0x78,0x39,0xe3,0xc6,
+0x6b,0x1e,0x41,0x42,0x73,0x5e,0x48,0xdb,0xbd,0xce,0xc5,0x09,0x25,0x81,0xd5,0x19,
+0x4e,0x7a,0xcb,0x27,0x70,0x27,0x92,0x69,0x3e,0x45,0x53,0xde,0xa6,0x2e,0x54,0x42,
+0x27,0x23,0x47,0x27,0x00,0x6e,0x62,0x48,0xbd,0xd0,0x2e,0x17,0x8e,0x5f,0x1c,0xd3,
+0xfd,0xed,0x3c,0xde,0x63,0x9e,0x48,0x50,0x33,0xa9,0x22,0x10,0xe0,0xae,0x35,0x2d,
+0x64,0xe7,0x8f,0xe4,0xba,0x8c,0xb0,0x6c,0xac,0xdd,0x22,0x02,0x64,0x3b,0x03,0x47,
+0xd5,0x1f,0xd5,0x99,0xc3,0xb6,0xba,0x04,0xc6,0xc0,0x7b,0xf3,0xa2,0x89,0xee,0xec,
+0xfb,0x3e,0x10,0x96,0x15,0x6a,0x91,0x37,0xf9,0x46,0xd5,0xef,0x70,0x7b,0xda,0x12,
+0xf4,0x0a,0x74,0x5d,0xec,0x76,0x13,0x6a,0xae,0x3b,0x97,0xdf,0xc0,0xe8,0x0f,0xd5,
+0x15,0xa2,0x5d,0xc2,0xf9,0xa7,0xea,0x62,0xf3,0x72,0xb7,0x53,0x2a,0x72,0xab,0xcd,
+0xfa,0x26,0x34,0x3c,0xb6,0xa2,0x84,0x40,0xfb,0xb2,0xb9,0x76,0x1f,0x17,0xe8,0x8c,
+0x06,0xb2,0x1e,0xfc,0x4e,0xde,0xd0,0x07,0xa0,0xaf,0x71,0xcb,0x8b,0x19,0xc0,0x98,
+0x03,0x8d,0x96,0xeb,0xd8,0x10,0xb7,0xf4,0xb0,0x98,0x7d,0xc6,0x4b,0xb1,0x40,0x53,
+0x68,0x35,0xf0,0x7b,0x4a,0xa8,0x29,0xe8,0x9d,0xb7,0x32,0x3c,0xcb,0xba,0xd3,0xda,
+0xde,0xc1,0x69,0xe9,0xe4,0x46,0x56,0xb7,0x15,0x33,0xdc,0xfa,0x5a,0xb1,0xae,0x3f,
+0x02,0x43,0x79,0xa6,0x55,0x5e,0x97,0x3a,0xad,0xb7,0xea,0xd4,0xeb,0xd5,0x56,0x26,
+0xcd,0x7e,0x9b,0x4d,0x27,0x45,0x24,0x62,0x1b,0xe9,0x5a,0xe3,0x96,0x9d,0x26,0xb2,
+0x14,0xa0,0xfd,0xd9,0x6b,0xaf,0x73,0xf4,0x51,0xba,0xcb,0xc2,0x11,0x0a,0x7e,0x5e,
+0xa2,0x27,0x2f,0xaa,0xdd,0x56,0xbf,0x80,0xbd,0xf3,0xea,0xd2,0x31,0xe7,0xce,0x18,
+0xbb,0x50,0x58,0xd5,0x43,0xc8,0xba,0x96,0xa9,0xb3,0x6d,0x09,0x3c,0x4a,0xb8,0xe5,
+0x48,0x6b,0x5c,0x7f,0x71,0x4f,0x57,0x22,0x9e,0x5b,0x5c,0x9d,0x9a,0x1d,0x8e,0x68,
+0x43,0xd7,0x83,0x0e,0x6a,0xb7,0x05,0x96,0x5a,0x3a,0xb6,0x25,0xcf,0xac,0x0a,0x16,
+0x46,0x17,0xae,0xc1,0x66,0x85,0xb5,0x5a,0x75,0xf5,0xe1,0x8b,0xe7,0xbe,0xb6,0x1d,
+0xc9,0x3c,0xad,0x62,0x29,0xe2,0xe3,0x90,0x2d,0xc8,0x3e,0xe0,0x0b,0x1a,0x4c,0x7c,
+0x38,0xe5,0x19,0x57,0x1e,0x37,0x82,0x07,0xa9,0x48,0x12,0x52,0x98,0x08,0xa6,0x80,
+0x9e,0x4e,0xf7,0x24,0x7f,0x52,0xe8,0x03,0xd0,0x0e,0x0b,0x24,0xd7,0x9c,0x1e,0x79,
+0xb7,0x0e,0x93,0x19,0x2a,0xeb,0x38,0xef,0x0a,0x83,0x28,0xc6,0xbc,0x15,0xa4,0xcf,
+0x7f,0xc6,0x17,0x42,0xd5,0x1a,0x44,0xb6,0x42,0x65,0x45,0x7f,0x72,0x35,0x02,0x8e,
+0x0b,0x63,0x30,0xae,0x61,0x89,0xd9,0x9d,0x8b,0x6f,0x30,0xd6,0x26,0x2c,0xda,0x53,
+0xb3,0x3c,0x3b,0x18,0x37,0x8f,0xa6,0x4e,0x07,0xa2,0xb3,0x92,0x62,0x29,0x30,0x09,
+0xef,0x6e,0x8b,0xab,0x91,0xbf,0x2d,0x7e,0x0a,0x23,0xf3,0xff,0x0b,0x33,0xbb,0x0a,
+0xbb,0x35,0x7a,0xfb,0x1d,0x49,0x99,0xbb,0xbc,0xee,0x2b,0x3b,0x78,0x7f,0xd0,0x4b,
+0xdd,0x1f,0xb9,0xb9,0x7d,0xd8,0x5c,0x53,0xbe,0xbf,0xff,0xdf,0x3c,0xee,0x99,0x9a,
+0xc6,0xd3,0x6d,0xa9,0x2d,0x8f,0xad,0xda,0x76,0xd7,0x9c,0x19,0xb1,0xe4,0x66,0x1d,
+0x08,0x55,0x92,0xb1,0x94,0x34,0x30,0x27,0x52,0xf3,0xe4,0xa8,0x15,0xf1,0xb5,0x9e,
+0xf6,0x0d,0xd9,0xc2,0x40,0x6c,0x52,0xcf,0x3e,0x85,0xc5,0x80,0x75,0x83,0x2a,0x5e,
+0x88,0x8f,0x1c,0xdc,0x21,0x97,0x92,0x0d,0xaf,0xb7,0xf3,0x92,0x0d,0x2d,0x8c,0x46,
+0x22,0xd9,0xa6,0xee,0xa8,0x99,0xc9,0x23,0x57,0x56,0xd3,0x97,0x9b,0x1f,0xeb,0xf9,
+0x8b,0x9e,0xc3,0x38,0xfd,0xd9,0xab,0xfe,0xf6,0x0e,0x1f,0x7e,0xd9,0x55,0xd1,0x75,
+0x04,0x3c,0xe6,0x02,0x87,0x77,0xcd,0xd3,0xa9,0xf4,0xc6,0x35,0x31,0x6e,0xee,0xac,
+0x5b,0x5c,0x7b,0xf5,0xad,0x79,0xf3,0xda,0x7b,0xa7,0x57,0xd4,0xb1,0x34,0xf1,0x87,
+0xe0,0xa7,0xaf,0x43,0x7f,0xa4,0xd5,0x31,0xad,0xd1,0x04,0xb8,0x24,0xe7,0x85,0xc2,
+0x98,0xc6,0x14,0x25,0xff,0x5b,0x3a,0x3d,0x1d,0x50,0xb8,0xc2,0x2d,0xa7,0x57,0x23,
+0x2a,0xa1,0x5b,0xff,0x40,0xcc,0x07,0x6c,0xf2,0x01,0x0b,0xc3,0x01,0x8d,0xe0,0x74,
+0xa8,0x13,0x58,0xd1,0x68,0x95,0x8a,0x38,0xf5,0xfd,0x16,0xdf,0x2e,0x56,0x5f,0x11,
+0x37,0x23,0x96,0x5c,0x16,0xe4,0xfb,0xc3,0x3b,0x93,0xef,0x00,0x54,0x7d,0xcb,0x03,
+0x98,0xfa,0xdf,0xa3,0x7f,0x01,0xea,0x78,0x54,0x6f,0x2e,0x09,0x00,0x00,};
+
+static const unsigned int dummy_align__settings_html = 11;
+static const unsigned char data__settings_html[] = {
+/* /settings.html (14 chars) */
+0x2f,0x73,0x65,0x74,0x74,0x69,0x6e,0x67,0x73,0x2e,0x68,0x74,0x6d,0x6c,0x00,
+
+/* HTTP header */
+
+/* "HTTP/1.1 200 OK
+" (17 bytes) */
+0x48,0x54,0x54,0x50,0x2f,0x31,0x2e,0x31,0x20,0x32,0x30,0x30,0x20,0x4f,0x4b,0x0d,
+0x0a,
+/* "Server: lwIP/1.3.1 (http://savannah.nongnu.org/projects/lwip)
+" (63 bytes) */
+0x53,0x65,0x72,0x76,0x65,0x72,0x3a,0x20,0x6c,0x77,0x49,0x50,0x2f,0x31,0x2e,0x33,
+0x2e,0x31,0x20,0x28,0x68,0x74,0x74,0x70,0x3a,0x2f,0x2f,0x73,0x61,0x76,0x61,0x6e,
+0x6e,0x61,0x68,0x2e,0x6e,0x6f,0x6e,0x67,0x6e,0x75,0x2e,0x6f,0x72,0x67,0x2f,0x70,
+0x72,0x6f,0x6a,0x65,0x63,0x74,0x73,0x2f,0x6c,0x77,0x69,0x70,0x29,0x0d,0x0a,
+/* "Content-Length: 4976
+" (22 bytes) */
+0x43,0x6f,0x6e,0x74,0x65,0x6e,0x74,0x2d,0x4c,0x65,0x6e,0x67,0x74,0x68,0x3a,0x20,
+0x34,0x39,0x37,0x36,0x0d,0x0a,
+/* "Connection: Close
+" (19 bytes) */
+0x43,0x6f,0x6e,0x6e,0x65,0x63,0x74,0x69,0x6f,0x6e,0x3a,0x20,0x43,0x6c,0x6f,0x73,
+0x65,0x0d,0x0a,
+/* "Content-type: text/html
+Content-Encoding: gzip
+" (49 bytes) */
+0x43,0x6f,0x6e,0x74,0x65,0x6e,0x74,0x2d,0x74,0x79,0x70,0x65,0x3a,0x20,0x74,0x65,
+0x78,0x74,0x2f,0x68,0x74,0x6d,0x6c,0x0d,0x0a,0x43,0x6f,0x6e,0x74,0x65,0x6e,0x74,
+0x2d,0x45,0x6e,0x63,0x6f,0x64,0x69,0x6e,0x67,0x3a,0x20,0x67,0x7a,0x69,0x70,0x0d,
+0x0a,
+/* "ETag: "uCEWC36KTN5h9ig"
+" (25 bytes) */
+0x45,0x54,0x61,0x67,0x3a,0x20,0x22,0x75,0x43,0x45,0x57,0x43,0x33,0x36,0x4b,0x54,
+0x4e,0x35,0x68,0x39,0x69,0x67,0x22,0x0d,0x0a,0x0d,0x0a,
+
+/* raw file data (4976 bytes) */
+0x1f,0x8b,0x08,0x00,0x00,0x00,0x00,0x00,0x04,0x0a,0xdd,0x5c,0x6b,0x73,0x1b,0xc7,
+0x95,0xfd,0x2b,0xe3,0xf1,0x6e,0x02,0x16,0x09,0x90,0xe0,0xc3,0x96,0x15,0x02,0xa9,
+0x44,0x92,0x1d,0x55,0xd9,0x31,0xcb,0xa2,0xe2,0xa4,0x52,0x5b,0xac,0x01,0x30,0x24,
+0x26,0x02,0x66,0x90,0x99,0x01,0x29,0xc5,0xe5,0x2a,0x3d,0xec,0x24,0x5b,0x56,0x22,
+0x59,0xb6,0x93,0x94,0x63,0xcb,0x96,0x36,0xfb,0xf8,0x92,0x0d,0x6d,0x4a,0x36,0xf5,
+0xa0,0xfc,0x17,0x06,0xff,0x28,0xe7,0xdc,0xee,0x79,0x01,0x18,0x10,0x94,0xa8,0xfd,
+0xb0,0x1f,0x44,0xcf,0x0c,0xba,0xfb,0x9e,0xbe,0xef,0xbe,0xdd,0xed,0xd5,0x17,0x4e,
+0xbf,0x79,0x6a,0xfd,0x17,0x6b,0x67,0x8c,0x76,0xd8,0xed,0xd4,0x57,0xf9,0xd7,0xe8,
+0x58,0xee,0x56,0xcd,0x34,0xf1,0x66,0x5b,0xad,0xfa,0x6a,0xd7,0x0e,0x2d,0xa3,0xd9,
+0xb6,0xfc,0xc0,0x0e,0x6b,0x66,0x3f,0xdc,0x2c,0x9f,0xc0,0x6f,0xf2,0xb5,0x1d,0x86,
+0xbd,0xb2,0xfd,0xeb,0xbe,0xb3,0x5d,0x33,0x7f,0x5e,0x3e,0xff,0xa3,0xf2,0x29,0xaf,
+0xdb,0xb3,0x42,0xa7,0xd1,0xb1,0x4d,0xa3,0xe9,0xb9,0xa1,0xed,0xa2,0xcb,0xd9,0x33,
+0x35,0xbb,0xb5,0x65,0xc7,0x9d,0x5c,0xab,0x6b,0xd7,0xcc,0x6d,0xc7,0xde,0xe9,0x79,
+0x7e,0x98,0x69,0xb7,0xe3,0xb4,0xc2,0x76,0xad,0x65,0x6f,0x3b,0x4d,0xbb,0x2c,0x2f,
+0x73,0x8e,0xeb,0x84,0x8e,0xd5,0x29,0x07,0x4d,0xab,0x63,0xd7,0xaa,0x73,0x5d,0xeb,
+0xa2,0xd3,0xed,0x77,0x93,0xf7,0x7e,0x60,0xfb,0xf2,0x62,0x81,0x64,0x6d,0x01,0x24,
+0x42,0x27,0xec,0xd8,0xf5,0xe8,0xf3,0x68,0x77,0x70,0x65,0x70,0x75,0x70,0x39,0x7a,
+0x12,0x3d,0x88,0x1e,0x46,0xfb,0xab,0xf3,0xea,0x97,0xd5,0x8e,0xe3,0x5e,0x30,0xda,
+0xbe,0xbd,0x59,0x33,0xbb,0x96,0xe3,0x56,0x9a,0x41,0x60,0x1a,0xbe,0xdd,0xa9,0x99,
+0x41,0x78,0xa9,0x63,0x07,0x6d,0xdb,0x0e,0x31,0x4e,0xd0,0xf4,0x9d,0x5e,0x68,0x84,
+0x97,0x7a,0x00,0x1b,0xda,0x17,0xc3,0xf9,0x5f,0x59,0xdb,0x96,0xfa,0x6a,0x1a,0x81,
+0xdf,0xac,0x99,0xbe,0xd7,0xb1,0x2b,0xbf,0x0a,0xd0,0x78,0x5e,0x7d,0xc7,0x83,0x62,
+0x59,0xc3,0x6b,0x5d,0xaa,0xaf,0xb6,0x9c,0x6d,0xc3,0x69,0xd5,0xcc,0xa6,0xd7,0x77,
+0xc3,0xf2,0x8e,0x6f,0xf5,0xd0,0x34,0xf7,0xb1,0xe5,0xed,0xb8,0xf8,0xd6,0xab,0x47,
+0x9f,0x02,0xe7,0x81,0xc6,0xfb,0x28,0x7a,0x14,0xdd,0x1f,0x5c,0x36,0xa2,0xaf,0x06,
+0xd7,0xa2,0x7b,0x78,0xbc,0x6a,0x44,0xdf,0xf1,0x4b,0x74,0x3f,0xfa,0x36,0xda,0x8d,
+0xf6,0x06,0x97,0xf1,0xc3,0x37,0x78,0x3b,0x30,0x06,0xbf,0x8b,0x7f,0x30,0x56,0x83,
+0x9e,0xe5,0x66,0x08,0xba,0xfd,0x6e,0xc3,0xf6,0xcd,0xfa,0x0a,0xe0,0xe1,0x97,0xba,
+0x31,0xb8,0x82,0x2e,0x0f,0xd1,0xf5,0x20,0xba,0x57,0x59,0x9d,0xef,0x01,0x2e,0xd0,
+0x64,0x20,0xb5,0x21,0x78,0x7b,0xcd,0x0a,0x82,0x1d,0xcf,0x6f,0x01,0xd7,0xa6,0xe7,
+0x77,0x0d,0xab,0x19,0x3a,0x9e,0x0b,0x7d,0x30,0x20,0xf2,0xb6,0x87,0xf9,0xf4,0xbc,
+0x80,0x1c,0x02,0xea,0x3b,0xd1,0x63,0xa2,0x88,0x76,0x09,0x70,0x57,0x98,0xfd,0x68,
+0x70,0xc3,0x50,0x5f,0xbe,0x1e,0xbc,0x8f,0x49,0xdd,0x33,0xa2,0xaf,0x49,0x79,0x9f,
+0xe2,0x40,0xe3,0xc7,0x83,0x6b,0x06,0x26,0x85,0x66,0x27,0x05,0x42,0x60,0x77,0xec,
+0x66,0x68,0x28,0xa5,0xe8,0x78,0x5b,0x8e,0xbb,0xc1,0x67,0x53,0x4d,0x24,0x87,0xe8,
+0x3c,0x84,0x0d,0x75,0xe9,0x00,0x60,0xcd,0x24,0xb6,0x32,0x55,0x0c,0x52,0x00,0x18,
+0xaf,0x47,0x94,0xc6,0xb6,0xd5,0xe9,0x43,0x5e,0x66,0x3d,0xba,0x35,0xf8,0x20,0xfa,
+0x4a,0x78,0xb3,0x4f,0xba,0x04,0xf8,0x04,0x54,0xaf,0x83,0x83,0x4f,0xa2,0xaf,0x01,
+0x96,0x60,0x80,0x62,0x75,0x5e,0x75,0x1d,0x1e,0x82,0x9a,0x65,0xd6,0xf9,0xb7,0xa8,
+0x85,0xd5,0xea,0x3a,0x90,0x9e,0xfc,0x27,0x6d,0x33,0xaf,0x26,0x54,0x5f,0x6d,0xf8,
+0xea,0x9f,0xe3,0xf6,0xfa,0xa1,0xcc,0xc6,0xeb,0xb4,0x7a,0x3b,0x2d,0x53,0xeb,0x54,
+0x2f,0xe6,0xf3,0xd8,0x19,0x19,0xbd,0x8e,0xd5,0xb4,0xdb,0xe8,0x62,0xfb,0x35,0x33,
+0xba,0xab,0x24,0x37,0xf8,0xf7,0x68,0x3f,0x7a,0x90,0x65,0xf6,0xf5,0x84,0x21,0xc2,
+0x3b,0x68,0xa6,0xf3,0x1b,0x30,0x60,0x71,0x01,0xe2,0xb2,0x2e,0x76,0x6c,0x77,0x0b,
+0x26,0x65,0x56,0x5f,0x32,0x35,0x87,0x89,0x01,0x84,0x4d,0xc3,0xea,0x87,0x5e,0x13,
+0xd6,0xda,0xb1,0x43,0xb4,0xf7,0x36,0x37,0xc1,0xc4,0x51,0xc8,0x2e,0x8c,0xf4,0x29,
+0x21,0x7f,0x4e,0x3e,0x43,0x08,0xcf,0x04,0x97,0xf4,0x8f,0x0c,0xd7,0xb7,0x7b,0xb6,
+0x05,0xc7,0xa2,0x6c,0xf7,0x48,0x7c,0xfe,0x42,0x40,0x5f,0x8d,0x9e,0x40,0x97,0xa1,
+0x37,0x83,0xeb,0xd4,0xe5,0xe3,0x9b,0xc7,0x5b,0x1a,0xd9,0xe1,0xcc,0x57,0xd8,0x1b,
+0xfd,0x30,0xf4,0x5c,0x6d,0x0b,0x1d,0x2f,0xb0,0xcb,0x9c,0x4d,0x19,0xce,0x18,0x86,
+0x9a,0x48,0xbe,0x11,0xba,0x06,0xfe,0x95,0x5b,0xfc,0xea,0x97,0x1d,0x77,0xdb,0xf6,
+0x43,0x1b,0x8a,0xa6,0xad,0x21,0xba,0x0d,0x65,0xd7,0x86,0x6a,0xd6,0x8d,0x55,0xa5,
+0x91,0x8a,0x42,0xd0,0x6f,0x74,0x1d,0x3a,0x61,0x65,0x55,0xf1,0x50,0x41,0xbf,0xd9,
+0xb4,0x41,0x29,0x1d,0xcb,0x73,0x9b,0x1d,0xa7,0x79,0x01,0x5e,0xcf,0x0e,0xfb,0xbe,
+0x8b,0x80,0x60,0x37,0x2f,0x9c,0x52,0xf6,0xf9,0xf6,0xe9,0xd2,0xcc,0xdc,0x0b,0xd5,
+0x3c,0xc1,0xef,0xc0,0xc2,0x5d,0x58,0x9a,0xb0,0x11,0xca,0x35,0x4f,0x8b,0x1d,0x76,
+0x39,0xfd,0x5e,0xc7,0xb3,0x5a,0xa7,0x80,0xd7,0xd9,0x74,0x9a,0x56,0xc8,0x20,0x21,
+0x5e,0x47,0xf9,0x03,0xf5,0xb3,0x69,0x78,0xae,0xc2,0x99,0x50,0xc7,0xcc,0x9c,0x16,
+0x9a,0x9f,0x97,0xfe,0xa5,0xb0,0xed,0x04,0x33,0xe8,0x0a,0x97,0xf4,0xe7,0xc4,0x41,
+0x7e,0x0b,0xb7,0xbf,0x2b,0x4e,0x0f,0xfe,0xf2,0x2a,0x70,0xbc,0x07,0xe3,0xc1,0x27,
+0x3c,0xef,0x2a,0xf7,0x47,0x5f,0xac,0x27,0xae,0x28,0x89,0x93,0xee,0xd1,0xf0,0x35,
+0x93,0xe8,0xbe,0xd5,0x4f,0xaf,0x3a,0x8c,0x69,0x79,0xab,0xfc,0x1b,0x68,0x3d,0x88,
+0x1e,0x99,0x46,0xcb,0x09,0x18,0x80,0xd0,0x38,0x7e,0x4a,0x38,0xba,0x89,0x7e,0x65,
+0xf1,0x68,0xca,0xd1,0xc6,0xee,0x0b,0x9f,0x15,0x78,0x8a,0x4e,0xc4,0xd7,0xf3,0x9d,
+0xae,0xe5,0x5f,0x02,0x6d,0x71,0xd7,0xda,0x83,0x41,0x13,0x0d,0x20,0x17,0x42,0xd1,
+0x6e,0xec,0xca,0x47,0xe0,0xfd,0x38,0x84,0x9a,0x28,0x91,0x92,0x62,0x42,0x5e,0x81,
+0x8f,0xad,0x1f,0x2c,0xb3,0xe4,0xe7,0x58,0x0e,0x2a,0x00,0x64,0x15,0x62,0x54,0xe5,
+0x9a,0x90,0x4e,0x32,0x5e,0x0c,0xf6,0x68,0xba,0x76,0xa8,0x76,0xe5,0x95,0x31,0xd6,
+0xdb,0xac,0x2c,0xc7,0xaa,0x51,0x1a,0xbf,0x34,0x05,0xd7,0xda,0x6e,0x58,0x3e,0x7c,
+0x1d,0xff,0x53,0x6e,0xd9,0x9b,0x56,0xbf,0xc3,0xe0,0x22,0xaf,0x9b,0xce,0x45,0xbb,
+0x55,0x0e,0xbd,0x38,0x0c,0xe7,0xfa,0x94,0x19,0xb9,0x45,0xf2,0x12,0x13,0x2d,0x9d,
+0x22,0x38,0x6e,0xcb,0xbe,0x58,0x61,0x5a,0x94,0xb0,0x00,0x8e,0xd6,0x83,0x90,0xe6,
+0xad,0x3c,0x13,0xe3,0x1e,0x2f,0x2a,0x73,0xed,0xda,0x6e,0xbf,0xec,0x20,0x40,0xe9,
+0xa6,0xfd,0x4e,0xac,0x6a,0x40,0x13,0x23,0xc2,0xa3,0x6a,0xcd,0x87,0x3a,0x52,0x93,
+0xfa,0x6a,0x3c,0x4c,0x86,0x70,0x3d,0xfa,0x42,0x82,0xeb,0x2e,0x8d,0x98,0x39,0xc2,
+0xe0,0x03,0x45,0x9d,0xed,0xb3,0x7d,0x90,0xa0,0x85,0x8e,0xbb,0x15,0xe4,0xf1,0x32,
+0x80,0x6f,0xc3,0xb0,0xc6,0xe5,0x44,0x9c,0xc3,0xf0,0x28,0x8e,0xbb,0xe9,0xa9,0x11,
+0xea,0xd1,0x5f,0x90,0x94,0xbc,0x27,0xde,0xf0,0x31,0x20,0xfc,0x16,0x46,0x84,0x80,
+0x39,0xae,0x13,0x0c,0x30,0xf4,0xfc,0x4b,0x71,0xbf,0x3f,0x0d,0xae,0xc1,0xfc,0x91,
+0x18,0x44,0x8f,0xd2,0xf6,0xf3,0x7d,0x64,0x98,0x23,0x22,0x63,0x5e,0x44,0x93,0xd3,
+0x99,0x8b,0xe4,0x8c,0xe0,0x45,0xbb,0x3a,0x16,0x30,0x3e,0xaf,0x82,0x95,0xb4,0x4b,
+0xed,0x03,0x10,0xf6,0xcb,0x0d,0xef,0x22,0xd9,0xcc,0xf1,0xc5,0x7b,0xf0,0x67,0x3e,
+0xc0,0x25,0xc5,0xe9,0x4b,0xc2,0x9b,0xe6,0x96,0x93,0xa6,0x32,0x6b,0x6f,0x9e,0x5b,
+0x47,0xcf,0x38,0x29,0x0b,0xad,0x06,0xda,0xa1,0x97,0x56,0x0d,0xf5,0xae,0x1a,0x08,
+0xdd,0xf4,0x3b,0x24,0xc6,0xcc,0x2f,0xcb,0xfe,0x17,0x03,0xb7,0xdb,0x4b,0x4d,0x45,
+0xf1,0x7d,0xdd,0x6a,0x98,0xf5,0x73,0x3f,0x7d,0x63,0x2d,0xe5,0x43,0xae,0x8f,0xe3,
+0x7a,0x7d,0x64,0x53,0xd1,0x1d,0x70,0xec,0x7d,0x38,0x28,0x64,0x2a,0x0f,0x11,0x71,
+0x90,0x0b,0x82,0x79,0x0f,0x21,0xed,0x02,0x59,0xbf,0xe8,0xda,0xe1,0x0e,0xfb,0x51,
+0x25,0x90,0x1d,0x30,0xd4,0x4a,0x96,0xc3,0x34,0xec,0x50,0x4d,0x79,0x11,0x79,0x0d,
+0xd3,0x6c,0x3d,0xc0,0x65,0xf1,0xd3,0x57,0x0a,0x20,0xfa,0x56,0xab,0xef,0x60,0xb2,
+0xd1,0x87,0xa0,0xc3,0xf4,0x89,0xb9,0xde,0x15,0x06,0x46,0x49,0xb1,0xaf,0x17,0x74,
+0x73,0x43,0x30,0x83,0x89,0x18,0xf3,0xd6,0xc7,0x59,0xc5,0x19,0x52,0x04,0x4a,0x2b,
+0xcf,0x3a,0xf0,0x1d,0x19,0xab,0x2d,0xc2,0xdb,0x46,0x46,0xea,0x32,0x2e,0x64,0xbc,
+0x35,0x7f,0xec,0x88,0xc5,0x42,0xdd,0x63,0xf6,0x8a,0xdd,0x8e,0x34,0x62,0x2a,0x6e,
+0x04,0x48,0x31,0x99,0x1e,0x6e,0xf9,0x5e,0x7f,0xc8,0xfa,0x9b,0x5e,0xc7,0xa0,0xbf,
+0xdd,0xa8,0x6e,0x78,0x9b,0x1b,0x8b,0x14,0xa9,0xd5,0xb0,0x3b,0x06,0xd4,0x87,0x0b,
+0x04,0xd7,0x42,0x48,0x3d,0xbb,0x96,0x68,0xc4,0x48,0x73,0x11,0x00,0xf9,0xc7,0x8c,
+0xbd,0x0a,0x6b,0x62,0xef,0x1c,0xd8,0x91,0x2e,0xb9,0x00,0xcc,0xa5,0x45,0x32,0x3a,
+0x75,0x36,0x49,0x6a,0x45,0xc9,0x33,0x08,0x54,0x48,0x4c,0x3f,0xc4,0xb6,0x34,0x0e,
+0xef,0x62,0x32,0xe4,0x08,0xf5,0x1c,0xe0,0xc5,0xe7,0x07,0x18,0x10,0x86,0x10,0x93,
+0xb9,0xca,0xfc,0xc7,0x41,0x5e,0x9a,0x12,0xf2,0xd2,0xf3,0x83,0x0c,0x08,0x43,0x90,
+0x97,0x26,0x42,0x5e,0x9e,0x12,0xf2,0xf2,0xf3,0x83,0x0c,0x08,0x43,0x90,0x97,0x27,
+0x42,0x5e,0x99,0x12,0x32,0x16,0x8d,0xcf,0x4b,0x93,0x01,0x61,0x08,0xf2,0x4a,0x02,
+0x79,0x24,0x3a,0x8c,0xa8,0x6f,0xd6,0x3c,0x7d,0x84,0xec,0x0d,0x2c,0x62,0xba,0x7d,
+0x94,0x09,0x2e,0x15,0xcf,0xec,0x2d,0xb4,0x33,0x50,0x9a,0x50,0xed,0x8e,0x7d,0x66,
+0xc3,0x30,0xd4,0xec,0x86,0xbf,0x66,0x97,0x63,0xe9,0x84,0x33,0x96,0xb0,0xe3,0x3b,
+0xa1,0x3d,0xcd,0x74,0xde,0x66,0xc3,0xe7,0x38,0x9f,0x11,0x20,0x6a,0x42,0x23,0x9f,
+0xc7,0xcf,0x48,0x89,0x30,0xfb,0x37,0x8e,0xae,0x2a,0xd4,0x65,0x62,0x2b,0xdd,0x38,
+0x44,0x3f,0xe2,0xb3,0x99,0x8a,0x89,0x63,0x9f,0x18,0x15,0x8f,0xcb,0xdf,0xb7,0x97,
+0x63,0x48,0x89,0xb2,0x2d,0xea,0x58,0x10,0x7d,0x8c,0x8c,0xe7,0x0a,0xc2,0x30,0x42,
+0x18,0xa2,0xec,0x81,0x8a,0xb1,0xba,0xb0,0xc1,0xc8,0xdc,0x5e,0x46,0xc5,0x89,0xa9,
+0x7f,0x3c,0x84,0xbc,0x60,0x4e,0xa1,0x2a,0x04,0x85,0x28,0x02,0x84,0xed,0xa4,0xbc,
+0xa3,0x42,0x3a,0x4a,0x51,0x6d,0xf5,0x19,0x6b,0x64,0x0c,0x8d,0xd4,0x4a,0x2a,0x13,
+0x5c,0x69,0xde,0xe7,0x82,0x45,0xe2,0x2a,0xfe,0xde,0x40,0x8c,0x45,0x46,0xa0,0xda,
+0xcf,0x73,0x2c,0xf4,0x04,0x6f,0xd0,0x59,0x55,0x98,0x64,0xf8,0x56,0x1d,0x61,0x27,
+0xe4,0x47,0xfc,0xcb,0x95,0x53,0x5a,0x0e,0x52,0x19,0x46,0x57,0x79,0xd0,0xb9,0x4b,
+0x2e,0xc6,0x0c,0x57,0x3d,0x50,0x41,0x8b,0xbe,0x04,0x1c,0x46,0xf9,0xc7,0x48,0x44,
+0x0e,0x90,0x95,0x5c,0x4d,0x8b,0x1b,0xf9,0x2a,0x4b,0x15,0x8d,0x99,0xa2,0x8f,0x69,
+0x98,0x54,0x41,0x04,0x98,0x86,0xae,0x30,0xcf,0x0b,0x8b,0xe2,0x48,0x90,0x91,0x7d,
+0xc2,0xfd,0x24,0x12,0x4f,0x92,0xcc,0x97,0x48,0x2a,0x50,0x26,0xc3,0xfa,0x2b,0x91,
+0xca,0x07,0xaa,0xe0,0x74,0x0c,0x72,0xf9,0x8b,0x14,0xab,0x9e,0xa0,0xb8,0x46,0x01,
+0x3c,0x7c,0x6a,0x01,0xf8,0x9e,0x16,0x80,0x3c,0x4c,0x23,0x00,0xf2,0xf4,0x53,0xe8,
+0x04,0x8b,0x56,0xfb,0x52,0xdc,0x83,0xfa,0x21,0xdd,0x42,0x51,0x8d,0x8b,0x69,0x26,
+0x77,0x92,0x83,0x8f,0x2f,0x5a,0x21,0xc2,0x22,0xcb,0x67,0x91,0xef,0x69,0x47,0x40,
+0xc0,0x63,0xb2,0x6a,0x9c,0x3b,0xb3,0x9e,0x8a,0x7d,0x8c,0x34,0xb5,0xe6,0x21,0x7f,
+0x18,0xab,0x79,0xbe,0x87,0xf0,0x4f,0xcd,0x93,0x87,0xff,0x4f,0x13,0x9f,0xd7,0xa6,
+0x97,0x57,0xe3,0x71,0xee,0x4e,0x12,0xf4,0x8c,0x5f,0x98,0xc2,0xdb,0x1d,0x9a,0xcb,
+0x1f,0x97,0xcf,0xcb,0x9a,0x1d,0x0b,0x39,0x58,0x40,0xa1,0x5e,0xaf,0x33,0xe1,0xd8,
+0xfb,0xa9,0x50,0x1b,0x97,0x42,0xd4,0x12,0x5d,0xca,0x3e,0x5c,0x6e,0xe9,0x18,0xde,
+0x6a,0x37,0x7b,0xda,0xc7,0xc8,0x13,0xca,0x44,0x52,0x13,0x82,0xcf,0xc1,0xfb,0xb9,
+0x10,0x35,0x9a,0x12,0x2a,0x33,0x06,0x96,0xb0,0x2c,0xbf,0x5e,0x83,0x4a,0xab,0xba,
+0xda,0xd9,0xb5,0x32,0x34,0xfa,0x1e,0x14,0xf5,0xfe,0xe0,0x8a,0x28,0x37,0x34,0x9e,
+0x4e,0x87,0xf5,0x99,0x54,0xf3,0x51,0xb7,0xd7,0x79,0x88,0x62,0x71,0x26,0x5e,0x3a,
+0x3d,0xab,0xd5,0xc2,0xba,0x51,0x6b,0x57,0x02,0x3f,0x76,0x1f,0x79,0x0a,0x20,0x9d,
+0xec,0x07,0x88,0x75,0xc3,0x98,0x92,0xb1,0xb3,0xec,0x88,0xb9,0x10,0x0f,0x73,0x94,
+0x6c,0x3d,0x86,0xa4,0x02,0xa6,0x7e,0x8b,0x5d,0x5d,0x06,0xfa,0xd6,0xce,0xd4,0xb0,
+0x7f,0x0f,0xae,0xfd,0x91,0x65,0xff,0x63,0x07,0x4b,0x10,0x0a,0x28,0x9e,0xc6,0x80,
+0xec,0x5a,0xc1,0x85,0x62,0x98,0xd1,0x67,0xb2,0x08,0x64,0x89,0x4d,0x4a,0xeb,0xf7,
+0x10,0xb7,0x18,0x23,0x53,0x81,0x1d,0x17,0x53,0x15,0x0e,0x85,0x54,0x9e,0x63,0xac,
+0x59,0xa3,0x53,0xcf,0x24,0x29,0xab,0x49,0xbd,0xba,0x8d,0x75,0x43,0xaf,0x27,0x0f,
+0xc9,0x35,0x80,0x3f,0x59,0x08,0x63,0xa4,0x31,0x89,0xc9,0xd1,0x16,0x93,0x5c,0x3c,
+0x4c,0x0a,0x61,0x37,0xe1,0xd9,0xb9,0x1d,0x83,0x2d,0x11,0xee,0x44,0x50,0xff,0x01,
+0x40,0x87,0xb3,0xaf,0xc4,0x10,0xe8,0xef,0xef,0x93,0xa7,0x4c,0x34,0x32,0x0c,0x95,
+0x20,0x1e,0xaf,0x66,0x33,0x8a,0x35,0x41,0x5e,0xc9,0x3a,0xdc,0x00,0x21,0xd8,0x1c,
+0xfe,0xee,0x1a,0x25,0x18,0xdc,0x7e,0x74,0x30,0x73,0xac,0xca,0xa5,0xcb,0x77,0xd5,
+0xfc,0x1e,0x04,0xb6,0x20,0x28,0x9a,0xd0,0x0e,0xc2,0x8d,0xd0,0xc1,0x0e,0x4f,0x5e,
+0x8c,0xaa,0xee,0xa8,0x4b,0x98,0x71,0x11,0x52,0x9b,0x76,0x52,0x74,0x54,0xf5,0x3c,
+0xd6,0x83,0x55,0x31,0xfa,0xfb,0x0d,0x2b,0x5c,0xc7,0x80,0xa5,0x77,0x36,0xfb,0x6e,
+0xf3,0xa4,0x29,0xe3,0xce,0xf1,0xef,0xc9,0x7f,0x29,0x65,0x48,0xcd,0x54,0x04,0xd3,
+0xbb,0x33,0xdf,0x57,0x19,0xcb,0x77,0xf4,0x06,0xd1,0xc3,0x0c,0x27,0x56,0xe7,0x15,
+0x4d,0x94,0xc7,0x8f,0x05,0x09,0xea,0xc0,0xdc,0x32,0x45,0x95,0x7e,0x02,0x51,0x6e,
+0x84,0x3d,0x31,0x20,0x62,0x24,0x5c,0xa8,0xea,0xdd,0xc0,0x2b,0xcc,0xfc,0x78,0x81,
+0xa0,0x2c,0xd7,0x53,0x18,0x6e,0x2b,0x99,0xb3,0x6e,0x83,0x4c,0x42,0x6a,0xe3,0x89,
+0x22,0x24,0x54,0x47,0xeb,0x73,0x79,0xbf,0x7a,0x98,0x4e,0x8f,0xdd,0xc7,0x7c,0x0c,
+0x8a,0x48,0xa4,0xb4,0x82,0x43,0xdf,0xa2,0x3d,0x4e,0x94,0x3a,0x7d,0x24,0x66,0x53,
+0x7f,0x54,0x78,0xd9,0x90,0x5d,0x21,0x56,0xbf,0xc6,0x6d,0x40,0x26,0xb3,0x39,0xa2,
+0x30,0x39,0x3e,0xb6,0x9f,0xcb,0xbe,0xdd,0xf0,0x3c,0xd6,0xae,0xbe,0x10,0x97,0x90,
+0xdd,0x75,0x95,0x4d,0x85,0x67,0x1d,0xbf,0xdf,0xe3,0xde,0x05,0xc6,0xbf,0x8d,0x2d,
+0x4a,0x25,0x0e,0xa6,0xb2,0x92,0xec,0x33,0x52,0xde,0x4e,0x08,0x3c,0xab,0x38,0xb0,
+0x0d,0xae,0xb7,0x8b,0x35,0xf0,0x23,0xf3,0x3c,0x31,0xb5,0xf3,0x6b,0xe7,0xd6,0xbc,
+0x1d,0xdb,0x7f,0x73,0x73,0x33,0x36,0x37,0xcd,0x27,0xd1,0xf0,0xcc,0x1e,0x93,0x01,
+0x3f,0x76,0x15,0x0a,0x86,0xc0,0xc5,0x0c,0x56,0x44,0x8f,0xb2,0xf1,0x33,0xea,0xf5,
+0x18,0xfa,0xdc,0xb5,0x9c,0xb3,0x36,0x43,0xdb,0xa7,0xb9,0xf7,0x7b,0x41,0xcf,0xdb,
+0x90,0x57,0x33,0x6b,0xf0,0x44,0x16,0x83,0x91,0xdc,0x23,0x81,0xf2,0x8c,0x1e,0x55,
+0x0f,0x5c,0xc9,0x6e,0xc2,0xff,0xdf,0x3b,0xd4,0xec,0xb4,0xf3,0x2e,0xb5,0x38,0x3e,
+0xea,0x8a,0xee,0x91,0xc2,0x63,0x61,0xf1,0xf7,0x38,0x42,0x25,0x4b,0x83,0x13,0x42,
+0xe5,0x5b,0x3f,0x3a,0x7d,0xf6,0xfc,0x39,0xbd,0x97,0xa7,0x6a,0xad,0x23,0x21,0x31,
+0xce,0x4c,0x9f,0x2e,0x8f,0xf5,0x83,0x0d,0xdb,0x95,0x3d,0x3c,0xbd,0x6e,0xc9,0xbc,
+0xa7,0x39,0x2d,0xf8,0xe6,0xf4,0x83,0x4c,0x56,0x7b,0x6b,0x58,0xb3,0x8a,0x92,0x55,
+0x8c,0xcf,0x92,0x3b,0xf7,0x39,0x8a,0xf2,0x55,0x38,0x33,0x95,0x80,0xe0,0xef,0xb1,
+0xc6,0x63,0xba,0xb5,0x0c,0x7d,0x95,0x49,0xa5,0x1f,0x62,0xa5,0xc9,0xa4,0x11,0xf8,
+0x51,0x9f,0xcd,0x51,0xdb,0xc2,0xf9,0x18,0xc0,0x55,0x26,0xd2,0x79,0xee,0xaa,0x3e,
+0x0f,0x9c,0x8a,0x72,0x82,0x52,0xbd,0x66,0x6a,0x4d,0x63,0x8b,0x67,0x44,0xcc,0x83,
+0x0a,0x85,0xcc,0x55,0x5b,0x68,0x72,0x04,0xe4,0xb9,0x80,0x26,0xf1,0x14,0x33,0xde,
+0xc6,0xb3,0xf5,0x82,0x5d,0x58,0xa7,0x34,0xda,0x4e,0xab,0x65,0x63,0xbf,0x50,0x0e,
+0x03,0xdd,0xc3,0xe6,0x07,0xb7,0xe0,0xa7,0x00,0x9b,0x74,0x3c,0xca,0x52,0x05,0x0c,
+0x13,0x2c,0x09,0x66,0xbe,0xc5,0x98,0xd3,0x6c,0xba,0x88,0x9f,0x93,0xac,0x75,0xdc,
+0x61,0xa6,0x63,0x36,0xd7,0x60,0x07,0x47,0x28,0xda,0xca,0x54,0xe3,0xe7,0xd4,0x4c,
+0xf9,0x5b,0xb1,0x91,0x26,0x8b,0x4d,0x24,0x5e,0xfb,0x5c,0x59,0xc9,0xbe,0xe6,0x1f,
+0x13,0x46,0x17,0x4f,0x3e,0x59,0x18,0x1f,0x39,0x6b,0xd9,0xb2,0xc3,0xb2,0xda,0x47,
+0x4f,0xe2,0xa9,0x3e,0x47,0xd1,0xe8,0x78,0x8d,0xd7,0x71,0x06,0xa2,0x64,0xa2,0x0d,
+0x9b,0x54,0xb8,0x41,0x39,0x67,0xf2,0x51,0x9f,0x89,0xa8,0xf8,0xf6,0xaf,0xcd,0x39,
+0x9e,0x71,0xa8,0x38,0x2d,0xa4,0xb0,0xe9,0x41,0xaf,0x46,0x67,0x43,0xf6,0x8f,0xe2,
+0xac,0x16,0xa7,0xdd,0xb8,0x98,0xe6,0x81,0x2c,0x59,0x8e,0x0d,0x9d,0x7b,0xd0,0xa7,
+0x07,0x24,0xec,0xd1,0x29,0xa0,0x3b,0x4e,0x03,0xf0,0xf8,0x94,0x0e,0x15,0x3a,0x44,
+0x4f,0xc8,0x3a,0x9e,0x9e,0x05,0xd8,0x58,0x55,0x2c,0xc8,0x9f,0xd1,0x50,0xd5,0x80,
+0x71,0x68,0x2b,0x15,0x9c,0xd2,0xc8,0x23,0x2a,0x8e,0x68,0xb2,0xd9,0x18,0x5b,0xff,
+0x54,0xcb,0xbd,0xff,0x18,0x49,0x87,0x99,0x7e,0x73,0xc3,0xd5,0x88,0xf6,0x71,0x68,
+0x4d,0x56,0x5e,0x2a,0xbb,0xc4,0xfa,0xeb,0xb8,0x82,0x5c,0xc6,0xc9,0xf6,0xc3,0xe6,
+0x04,0x7f,0xf5,0xdf,0xb2,0xbc,0x66,0xa6,0x8e,0x03,0x8c,0xb2,0xc4,0xc6,0x0a,0x11,
+0x3b,0xb4,0x3a,0xc0,0x64,0xd6,0x82,0x23,0xce,0x39,0x2e,0x02,0x6b,0xdb,0xcd,0x15,
+0x7c,0xb5,0x8f,0x12,0xda,0x54,0x01,0x3e,0x0c,0x17,0x81,0xcb,0xd5,0xc5,0x0a,0x0a,
+0xc1,0xa5,0xd7,0xde,0x58,0x37,0xf0,0x7c,0x72,0x61,0x61,0xc6,0x88,0xfe,0x2e,0xe9,
+0x29,0xb7,0x39,0x59,0xa6,0x79,0x38,0x67,0xc0,0xca,0x51,0x42,0x01,0xcf,0xbe,0xc1,
+0x5f,0x5d,0x89,0x4d,0x4b,0x86,0xf9,0x4a,0x71,0xb9,0x5a,0xcd,0x8c,0x58,0x55,0x23,
+0xca,0x7a,0x04,0x5c,0xc6,0x1c,0x0d,0x54,0x13,0xf6,0x51,0x0c,0xba,0x36,0xf8,0x43,
+0xf4,0x00,0x43,0xdf,0xc1,0x90,0x5c,0x34,0x60,0x91,0x30,0xbe,0xd0,0x59,0xae,0x2e,
+0x64,0x06,0x5c,0x50,0x03,0x7e,0x84,0x5e,0x84,0xf4,0x80,0x0b,0xe6,0x82,0x7e,0xaf,
+0xa4,0xdd,0x5e,0x51,0xbd,0x6e,0xca,0xda,0x5b,0xaa,0xac,0x85,0xbd,0x4e,0xa4,0xbd,
+0x4e,0xa8,0x5e,0x77,0xb1,0x9c,0xe1,0xf1,0x46,0xb0,0x02,0x19,0xee,0x2e,0x56,0xed,
+0x1c,0x81,0xf5,0xfb,0x58,0x73,0x50,0xb2,0x2d,0x61,0x22,0xff,0x13,0xdd,0x14,0x7d,
+0xfa,0x94,0x8d,0xf0,0x0f,0x3a,0x86,0xd5,0x76,0x01,0xba,0x97,0x53,0x3a,0x2f,0xc7,
+0x73,0x92,0x9a,0xc0,0x33,0x8f,0xfc,0x52,0x3a,0xf2,0x4b,0x6a,0xe4,0xff,0x62,0x66,
+0xce,0xd3,0x24,0x00,0xc5,0x73,0x91,0x6a,0xf7,0x61,0x0a,0xf4,0x90,0xcf,0x67,0x50,
+0x03,0x1e,0x56,0xc0,0x8c,0x0b,0xe7,0xb2,0x92,0x52,0x5c,0x51,0x14,0x6f,0xd1,0x3b,
+0xc9,0x22,0x90,0x75,0xf5,0x29,0x79,0x05,0x6a,0x1f,0xa2,0xed,0x9e,0xac,0x29,0x76,
+0xf1,0xf6,0x57,0xd0,0x45,0x95,0xb0,0x90,0xee,0x72,0x4a,0x77,0x59,0xd1,0xbd,0x09,
+0x9a,0x8f,0x44,0x46,0xd9,0xca,0xe2,0x08,0xfd,0xac,0x84,0x40,0x07,0xaf,0xc2,0x1b,
+0x2c,0x94,0x07,0x57,0x84,0xee,0x6e,0x19,0x69,0x0f,0x5e,0x0a,0x49,0x2f,0x55,0x90,
+0x9b,0x28,0xb3,0x59,0x3a,0xb9,0x44,0xab,0xf9,0x7c,0x70,0x1d,0x8b,0x20,0x1c,0xdf,
+0x52,0xa7,0x6e,0xc5,0x4e,0x70,0xfa,0x76,0xc2,0x08,0x89,0xe1,0x2d,0x29,0xf0,0x1f,
+0x0a,0x88,0x6f,0x31,0xe9,0x47,0x50,0xb9,0x1b,0x64,0x87,0x98,0x09,0x18,0x38,0xb8,
+0x52,0x8e,0x6e,0x46,0x0f,0xd0,0x00,0xe5,0x1c,0xfc,0xf0,0x31,0x4c,0x91,0xda,0x02,
+0x93,0xc4,0x8c,0x85,0x64,0x21,0xa1,0x8c,0x85,0x6b,0x03,0xbf,0xc3,0x71,0xd0,0x97,
+0xcb,0x73,0x0c,0x8e,0xa1,0x0b,0xd8,0x06,0x51,0x14,0x0e,0x9b,0x35,0x73,0xcd,0x7c,
+0xee,0x25,0x21,0x55,0xa4,0x79,0xc8,0xe9,0x16,0xd1,0x01,0xd0,0xa2,0x6b,0xa3,0x3c,
+0x73,0xef,0x06,0x36,0x94,0xd4,0xbe,0x0e,0x15,0x04,0x94,0xa0,0x6b,0x83,0x0f,0xd0,
+0xb9,0x50,0xde,0x89,0x1f,0x00,0xb7,0xb9,0x19,0x85,0xb3,0x29,0x98,0x04,0x2c,0x8d,
+0x5b,0x26,0x9f,0x88,0x3a,0xcb,0x81,0x15,0x91,0x20,0xcb,0x10,0x28,0xb9,0x44,0x07,
+0xf2,0xc6,0x23,0xc9,0x18,0x19,0x6b,0x70,0xf5,0x85,0x12,0x57,0xef,0xa2,0x2d,0x00,
+0x5c,0x48,0x35,0x9d,0xe7,0xac,0xf6,0x66,0x90,0x13,0x24,0xcd,0x01,0x79,0xac,0xf8,
+0x3a,0x08,0xb0,0x14,0x82,0x63,0xdb,0x20,0xb9,0x07,0x22,0x7b,0x7c,0xc2,0x57,0x94,
+0x4d,0xa5,0xea,0x0d,0x77,0x87,0x37,0x95,0x95,0xee,0x47,0xdf,0x14,0x71,0x34,0x95,
+0xd3,0xac,0x96,0xd3,0xa7,0x64,0x63,0xf4,0xb5,0x10,0xa0,0xe3,0xa5,0xbc,0xa4,0xa4,
+0x02,0x9e,0x62,0x68,0x7c,0xff,0x5f,0xe8,0x81,0x66,0xc0,0xcd,0xc1,0x7b,0xf8,0x2c,
+0xc7,0x1e,0x8b,0x28,0x2c,0x25,0xf6,0x32,0xab,0x55,0xee,0x33,0xca,0x04,0xb3,0x57,
+0xf2,0xa1,0x2f,0x3e,0xe0,0x49,0x24,0x6a,0x3f,0xbd,0x3f,0x17,0x29,0x38,0x99,0x8e,
+0xbf,0x7b,0x20,0xf6,0xa1,0xcc,0x0d,0x5e,0x4d,0x48,0xff,0x7d,0x70,0xb9,0x1c,0x7d,
+0x49,0x45,0x2d,0x56,0xf2,0xd4,0x4a,0x40,0x50,0xac,0xe4,0x2e,0x26,0x04,0xfe,0x60,
+0x44,0x90,0x2a,0xc2,0x99,0xda,0xf5,0xec,0x72,0xac,0x5a,0x80,0x51,0x86,0xda,0x53,
+0x84,0xfb,0xc0,0xf2,0x99,0x2a,0xeb,0x41,0x8c,0x57,0xf1,0xf6,0x09,0xc6,0x03,0xa3,
+0x38,0xa6,0xc6,0x89,0x62,0x2b,0x9e,0xee,0xb2,0xb5,0x58,0x13,0x4e,0xa5,0x17,0x53,
+0x8b,0x4d,0x19,0xd4,0x04,0x24,0xb4,0x43,0x0e,0xe4,0xe3,0x40,0xdb,0x78,0xef,0x9d,
+0x3a,0xbc,0x59,0xed,0xf0,0x3e,0xa1,0x0a,0x69,0x8e,0x51,0x44,0x29,0xd7,0xb0,0xc1,
+0x08,0x04,0x0c,0x72,0xc4,0xae,0x78,0x47,0xf5,0x03,0x07,0xb8,0x43,0x22,0x28,0x77,
+0x07,0xbf,0x47,0x7f,0x71,0xd2,0xc5,0x24,0x13,0x94,0x2b,0x0a,0x25,0x7d,0xe5,0x63,
+0x0c,0x89,0x8d,0x51,0x0c,0x42,0xcc,0xf4,0xed,0x98,0x38,0x3c,0x3d,0x7c,0x02,0xbe,
+0xc5,0x0a,0xa8,0xbc,0x9a,0x38,0x28,0xf2,0x90,0x56,0x57,0xc8,0x8d,0x95,0xca,0xcb,
+0x19,0x42,0xcb,0x2b,0xb0,0x35,0xa2,0xe5,0xa9,0x62,0x2a,0x07,0x02,0x77,0x11,0xc2,
+0x34,0xee,0xcc,0xea,0xb8,0x83,0x78,0xcb,0x6e,0x4c,0xb4,0x80,0x86,0xc2,0x43,0x15,
+0x3c,0xba,0x2f,0x68,0xb1,0x3c,0xd3,0xf8,0x0b,0x5d,0x4c,0x1a,0x22,0x67,0x75,0x88,
+0xa4,0x06,0xd2,0xc6,0x18,0x7e,0x99,0x97,0xfc,0xa7,0xbc,0x23,0x6b,0x92,0xe1,0x99,
+0x9d,0x50,0x0a,0x4c,0x85,0x0b,0xcd,0x39,0x8d,0xef,0xb3,0x3a,0xbe,0x43,0xd5,0xd1,
+0x0d,0x42,0xc3,0x20,0x52,0x05,0x14,0x95,0xba,0xa3,0x2c,0x0d,0x43,0xb2,0x82,0x7c,
+0x19,0xbf,0x7d,0x04,0xa2,0xb0,0x0e,0xf9,0xbb,0x57,0xc4,0x84,0x34,0xe9,0x98,0xd5,
+0x49,0xc7,0x3f,0xb4,0x48,0x60,0x66,0x18,0xe4,0x2e,0x91,0x63,0xe8,0x27,0x78,0x66,
+0x11,0x00,0xdb,0x01,0x78,0xba,0x0d,0x1d,0x11,0xec,0xf2,0x95,0x9e,0x0d,0x57,0x18,
+0xa0,0x21,0x85,0xac,0x79,0x25,0x09,0x3f,0x20,0x23,0x3a,0x7b,0x13,0xde,0x8e,0x82,
+0xdd,0xc5,0xe0,0x30,0x51,0x0c,0x04,0x7e,0x63,0x08,0x9c,0xca,0x2e,0x36,0xb4,0x4c,
+0x6a,0x35,0x5b,0xd5,0xa9,0xd5,0x2d,0x19,0x84,0xc1,0x01,0xf9,0xa8,0x0a,0xe2,0x82,
+0x3c,0x1f,0xd2,0xc5,0xe7,0xde,0x84,0xcf,0x55,0x3b,0x6d,0xe2,0x9d,0x24,0x64,0x7d,
+0x84,0x29,0x41,0xd9,0x8b,0xf8,0x93,0xc9,0x0e,0x67,0xab,0xda,0x9f,0x52,0x4d,0xf7,
+0xf0,0x0f,0xb0,0x45,0x08,0x77,0xc0,0x23,0xa5,0x1c,0x64,0x38,0x82,0x07,0xf3,0xf4,
+0x5c,0xec,0xc0,0xec,0x3e,0xe7,0x0f,0x98,0x21,0x5c,0xbf,0xa8,0x3e,0x26,0x2f,0xee,
+0x9e,0x0e,0xa9,0x90,0x78,0xc6,0xc5,0xc6,0xc9,0xee,0x6d,0x88,0x43,0x55,0x64,0xe9,
+0x4f,0x6f,0x09,0x0f,0x95,0xa7,0xdd,0x83,0x1a,0xa9,0x68,0xf1,0x37,0xe1,0xe9,0x37,
+0x62,0xac,0x24,0xf6,0x18,0x86,0x4b,0x93,0x80,0xb2,0xa5,0xa4,0xd2,0x9d,0x73,0x59,
+0x40,0x64,0xb2,0x7f,0x2c,0x58,0x26,0x64,0xff,0x5f,0x82,0x24,0x86,0x26,0xcb,0x8e,
+0x27,0xe1,0x17,0x72,0x4c,0xf8,0xe5,0x21,0x5d,0x2a,0x73,0xaf,0x04,0x2b,0xb3,0x75,
+0x5c,0x73,0x4a,0x4e,0xd1,0x2b,0xf7,0x16,0xdf,0x1e,0x90,0x23,0x21,0xd0,0x76,0x95,
+0xb3,0x3d,0x48,0xe7,0x96,0x6f,0xc6,0x83,0x0b,0x14,0x3d,0xd9,0x23,0xe6,0x0d,0x9e,
+0xf3,0x6e,0x92,0x8a,0xfb,0x99,0x6e,0xc5,0x2c,0x91,0xa2,0xb8,0x3a,0xaf,0x82,0xf2,
+0xf8,0x46,0x7a,0xe2,0x7a,0x64,0x85,0x23,0x6a,0x2c,0xf6,0x3c,0x0d,0x77,0xb2,0xc7,
+0xdb,0x15,0x8d,0x09,0x2b,0xa3,0x3c,0x88,0x64,0x69,0x9c,0x91,0x9c,0x6c,0x32,0xa9,
+0xbd,0x2c,0x30,0x6f,0x22,0xcc,0x64,0xcf,0x6d,0x3a,0x31,0x66,0x81,0x2a,0x2a,0x63,
+0x81,0xe6,0x2e,0x21,0xb4,0xdb,0x27,0xbb,0xdd,0xb8,0xf4,0x94,0x87,0x36,0x0e,0x3c,
+0xc4,0x2f,0x47,0x7f,0xf5,0xa6,0x7d,0xf2,0x3a,0x71,0x1a,0x47,0x2e,0x4c,0xea,0x53,
+0x48,0x63,0xd1,0xab,0x82,0x53,0x42,0x58,0xd5,0x70,0x32,0xaf,0xa9,0x6e,0x4a,0x45,
+0xf7,0x4d,0x9c,0x78,0xf2,0x0b,0x54,0xf3,0x95,0x6a,0x65,0x71,0xf1,0xa5,0x4a,0x75,
+0x49,0xfe,0x99,0x75,0x8c,0x52,0xad,0x04,0xa1,0x6f,0x85,0xfd,0xee,0x62,0xc5,0xef,
+0x17,0xe9,0xea,0x89,0x13,0x95,0xea,0xf2,0xcb,0x95,0xc5,0x95,0xe5,0xca,0xe2,0x12,
+0xaa,0x99,0xe8,0xb7,0x78,0xe4,0x7e,0x08,0x88,0xe8,0xb7,0x34,0x4d,0x3f,0x8f,0x73,
+0x80,0x7d,0x7c,0x8c,0x28,0x74,0x0d,0x5e,0x0d,0xb1,0x29,0x85,0x56,0x6c,0x0f,0xa8,
+0xbd,0x86,0xc1,0x25,0x17,0x47,0x97,0xe3,0xfb,0x70,0xd9,0x2f,0x13,0x25,0xc6,0xf2,
+0x2c,0x33,0x0c,0xfa,0xbf,0x03,0x14,0x0e,0x6e,0xb0,0x1e,0x04,0x9f,0x3f,0x78,0x9f,
+0x01,0x04,0x0e,0x34,0x2d,0x7c,0xc1,0x31,0x1e,0xd5,0x88,0x0e,0x39,0xb3,0x9c,0x45,
+0x39,0xf6,0x6e,0x4c,0x3d,0xae,0x37,0x89,0x53,0x1c,0x2d,0xea,0xf4,0x0c,0xb9,0x8a,
+0x59,0x33,0xe5,0x12,0xe8,0xc9,0xea,0xc2,0xc2,0xbf,0x42,0x97,0xa7,0x29,0xba,0xe9,
+0x3b,0x34,0x13,0xee,0x2d,0xa9,0x8b,0x44,0xaf,0xe2,0xa0,0x75,0xa0,0x2e,0x2d,0xa1,
+0x96,0x0d,0x9e,0x70,0x4d,0xc9,0x54,0x3d,0xbf,0x41,0x34,0xe5,0xfe,0xe1,0xf0,0xbd,
+0x2b,0xfa,0x59,0xb5,0x8f,0x08,0xd7,0x0a,0xb9,0xdf,0x41,0xe6,0x07,0xb6,0x73,0xe5,
+0x98,0xd4,0xb3,0x78,0xfb,0x92,0x95,0x99,0x84,0x17,0xea,0x74,0xdc,0x14,0xd7,0x4e,
+0xe5,0xd6,0x6a,0xfe,0xda,0xe9,0xc4,0x5e,0xf5,0xd3,0xbf,0xf8,0xe9,0xc6,0xdb,0x67,
+0x7e,0x5c,0x59,0xc7,0xed,0x86,0x0a,0x10,0xf5,0x7b,0xa5,0x77,0x9c,0x16,0x76,0xcb,
+0xf5,0x6d,0x87,0x39,0xdc,0x72,0x3c,0xe5,0x79,0x17,0x1c,0x3b,0x38,0xf9,0xc2,0xc2,
+0xbb,0x33,0x3f,0xd8,0xe6,0x15,0x9a,0xd8,0x51,0xfc,0x8c,0x57,0x2a,0x7f,0x80,0x6e,
+0x72,0xb5,0xe4,0xb5,0x33,0xeb,0x60,0x1b,0x76,0xdb,0x38,0x3f,0xbd,0x8f,0x39,0x53,
+0x89,0x8b,0x9a,0xdc,0x85,0xe7,0x41,0xfb,0xd2,0xcc,0x3b,0xb8,0xf9,0xb2,0xe9,0xf8,
+0xdd,0x92,0xa9,0xd2,0x27,0x30,0x97,0xb5,0x23,0x2e,0xff,0x51,0x5c,0x93,0x7c,0x49,
+0x6a,0x0f,0x0c,0xea,0x50,0x53,0xde,0x76,0xc5,0x35,0x51,0x26,0xec,0x12,0xf6,0x10,
+0xda,0x91,0xc4,0x4a,0x9c,0xd7,0x81,0x18,0x11,0x5c,0xb6,0x46,0x7f,0x68,0xce,0x7c,
+0xef,0x7b,0x25,0xde,0x1a,0xfb,0xf9,0x1b,0xaf,0x9f,0xf6,0x9a,0x25,0x73,0x73,0x67,
+0x43,0x01,0xd1,0x95,0x53,0x40,0x34,0x67,0xe6,0xc4,0x79,0xac,0xf1,0x66,0xda,0xcc,
+0xbb,0xc4,0x8b,0x09,0xa8,0xf2,0xe3,0x58,0xb4,0x68,0x90,0xb9,0xa5,0x3b,0x03,0xa3,
+0xc6,0x55,0xe0,0x0a,0x36,0xf1,0xe1,0x6b,0x2f,0xb1,0x50,0xea,0x35,0x2f,0x98,0x1c,
+0x46,0xdd,0xa7,0x3a,0x95,0x16,0x67,0xb1,0xd5,0x38,0xb6,0xb1,0x10,0x55,0xad,0x79,
+0x37,0x4b,0xa8,0xaa,0x93,0x51,0x19,0x26,0x25,0x03,0xbe,0xca,0x3b,0x5b,0x7a,0xd3,
+0xb2,0x26,0x95,0x5e,0x5e,0xd3,0x0a,0x7e,0xb9,0xf0,0x6f,0x15,0xfa,0x4b,0x19,0xac,
+0x29,0x17,0x00,0xa5,0x8a,0xfc,0x34,0x73,0x70,0x3d,0x1c,0xb6,0x9d,0x72,0x0a,0x43,
+0x6d,0xd5,0x04,0x1c,0xd7,0xb5,0xfd,0x9f,0xac,0xbf,0xf1,0x7a,0x2d,0x81,0x3d,0xf4,
+0x43,0x3a,0x7a,0x6e,0x3e,0xa6,0xa9,0xf0,0xcb,0xf4,0xd5,0xce,0xfd,0xd3,0x4c,0x20,
+0x15,0x82,0x3a,0x03,0xb0,0x16,0x5f,0xa0,0x9d,0x24,0x01,0xc5,0xb4,0xec,0xad,0xc9,
+0x42,0xd2,0xea,0x2e,0xa3,0x1e,0x54,0xee,0x1a,0xc7,0x02,0x31,0x85,0x6f,0xfa,0xfa,
+0x6e,0xfe,0xa3,0xbe,0x20,0x3b,0xee,0xa3,0xbe,0x86,0x9a,0xff,0x69,0x92,0x96,0x25,
+0x5c,0x3f,0x6c,0x7e,0xd2,0x50,0x78,0x9a,0x7a,0x99,0xb1,0xd3,0xaa,0xd6,0x6a,0xd8,
+0x55,0x38,0xf5,0xda,0xd9,0x12,0xae,0x6d,0xc2,0x02,0xc4,0x42,0x60,0x3f,0x78,0x5c,
+0x47,0x50,0xc1,0xcd,0xa3,0x52,0x46,0x1b,0x77,0x70,0xe7,0xcc,0xdb,0xa9,0x40,0xd7,
+0x71,0x85,0xdf,0x73,0x2b,0xea,0x92,0x3c,0xe2,0x53,0xf6,0x56,0xd9,0xbb,0x73,0x55,
+0x7b,0x49,0x99,0x54,0xe6,0xa8,0xc4,0xe1,0xd4,0x79,0xa2,0x22,0x26,0x5f,0x9a,0xda,
+0xdc,0x84,0x5d,0x72,0x4b,0xbe,0x40,0xc8,0x73,0x49,0x8b,0xd2,0x0b,0x0b,0x30,0xf5,
+0xec,0x55,0x7c,0xfe,0x1f,0x0d,0xfe,0x09,0x97,0xa2,0x11,0x62,0xe1,0x40,0x00,0x00,};
+
+const struct fsdata_file file__rslogin_html[] = {{
+	file_NULL,
+	data__rslogin_html,
+	data__rslogin_html + 14,
+	sizeof(data__rslogin_html) - 14,
+	1,
+}};
+
+const struct fsdata_file file__rotek_png[] = {{
+	file__rslogin_html,
+	data__rotek_png,
+	data__rotek_png + 11,
+	sizeof(data__rotek_png) - 11,
+	1,
+}};
+
+const struct fsdata_file file__favicon_ico[] = {{
+	file__rotek_png,
+	data__favicon_ico,
+	data__favicon_ico + 13,
+	sizeof(data__favicon_ico) - 13,
+	1,
+}};
+
+const struct fsdata_file file__main_js[] = {{
+	file__favicon_ico,
+	data__main_js,
+	data__main_js + 9,
+	sizeof(data__main_js) - 9,
+	1,
+}};
+
+const struct fsdata_file file__login_html[] = {{
+	file__main_js,
+	data__login_html,
+	data__login_html + 12,
+	sizeof(data__login_html) - 12,
+	1,
+}};
+
+const struct fsdata_file file__index_html[] = {{
+	file__login_html,
+	data__index_html,
+	data__index_html + 12,
+	sizeof(data__index_html) - 12,
+	1,
+}};
+
+const struct fsdata_file file__role_js[] = {{
+	file__index_html,
+	data__role_js,
+	data__role_js + 9,
+	sizeof(data__role_js) - 9,
+	1,
+}};
+
+const struct fsdata_file file__main_css[] = {{
+	file__role_js,
+	data__main_css,
+	data__main_css + 10,
+	sizeof(data__main_css) - 10,
+	1,
+}};
+
+const struct fsdata_file file__ups_history_html[] = {{
+	file__main_css,
+	data__ups_history_html,
+	data__ups_history_html + 18,
+	sizeof(data__ups_history_html) - 18,
+	1,
+}};
+
+const struct fsdata_file file__info_html[] = {{
+	file__ups_history_html,
+	data__info_html,
+	data__info_html + 11,
+	sizeof(data__info_html) - 11,
+	1,
+}};
+
+const struct fsdata_file file__history_html[] = {{
+	file__info_html,
+	data__history_html,
+	data__history_html + 14,
+	sizeof(data__history_html) - 14,
+	1,
+}};
+
+const struct fsdata_file file__settings_html[] = {{
+	file__history_html,
+	data__settings_html,
+	data__settings_html + 15,
+	sizeof(data__settings_html) - 15,
+	1,
+}};
+
+#define FS_ROOT file__settings_html
+#define FS_NUMFILES 12

+ 33 - 33
modules/HTTP_Server/fsdata.c → modules/HTTP_Server/bt6706_fs/fsdata.c

@@ -34,10 +34,10 @@ static const unsigned char data__rotek_png[] = {
 " (25 bytes) */
 " (25 bytes) */
 0x43,0x6f,0x6e,0x74,0x65,0x6e,0x74,0x2d,0x74,0x79,0x70,0x65,0x3a,0x20,0x69,0x6d,
 0x43,0x6f,0x6e,0x74,0x65,0x6e,0x74,0x2d,0x74,0x79,0x70,0x65,0x3a,0x20,0x69,0x6d,
 0x61,0x67,0x65,0x2f,0x70,0x6e,0x67,0x0d,0x0a,
 0x61,0x67,0x65,0x2f,0x70,0x6e,0x67,0x0d,0x0a,
-/* "ETag: "UUNVNgKhLDI4xEk"
+/* "ETag: "hft6BHJzlVbP0gK"
 " (25 bytes) */
 " (25 bytes) */
-0x45,0x54,0x61,0x67,0x3a,0x20,0x22,0x55,0x55,0x4e,0x56,0x4e,0x67,0x4b,0x68,0x4c,
-0x44,0x49,0x34,0x78,0x45,0x6b,0x22,0x0d,0x0a,0x0d,0x0a,
+0x45,0x54,0x61,0x67,0x3a,0x20,0x22,0x68,0x66,0x74,0x36,0x42,0x48,0x4a,0x7a,0x6c,
+0x56,0x62,0x50,0x30,0x67,0x4b,0x22,0x0d,0x0a,0x0d,0x0a,
 
 
 /* raw file data (7905 bytes) */
 /* raw file data (7905 bytes) */
 0x89,0x50,0x4e,0x47,0x0d,0x0a,0x1a,0x0a,0x00,0x00,0x00,0x0d,0x49,0x48,0x44,0x52,
 0x89,0x50,0x4e,0x47,0x0d,0x0a,0x1a,0x0a,0x00,0x00,0x00,0x0d,0x49,0x48,0x44,0x52,
@@ -565,10 +565,10 @@ static const unsigned char data__favicon_ico[] = {
 " (28 bytes) */
 " (28 bytes) */
 0x43,0x6f,0x6e,0x74,0x65,0x6e,0x74,0x2d,0x74,0x79,0x70,0x65,0x3a,0x20,0x69,0x6d,
 0x43,0x6f,0x6e,0x74,0x65,0x6e,0x74,0x2d,0x74,0x79,0x70,0x65,0x3a,0x20,0x69,0x6d,
 0x61,0x67,0x65,0x2f,0x78,0x2d,0x69,0x63,0x6f,0x6e,0x0d,0x0a,
 0x61,0x67,0x65,0x2f,0x78,0x2d,0x69,0x63,0x6f,0x6e,0x0d,0x0a,
-/* "ETag: "iqZm2rkujWskpmN"
+/* "ETag: "LsicHMgt7XRD5o4"
 " (25 bytes) */
 " (25 bytes) */
-0x45,0x54,0x61,0x67,0x3a,0x20,0x22,0x69,0x71,0x5a,0x6d,0x32,0x72,0x6b,0x75,0x6a,
-0x57,0x73,0x6b,0x70,0x6d,0x4e,0x22,0x0d,0x0a,0x0d,0x0a,
+0x45,0x54,0x61,0x67,0x3a,0x20,0x22,0x4c,0x73,0x69,0x63,0x48,0x4d,0x67,0x74,0x37,
+0x58,0x52,0x44,0x35,0x6f,0x34,0x22,0x0d,0x0a,0x0d,0x0a,
 
 
 /* raw file data (1150 bytes) */
 /* raw file data (1150 bytes) */
 0x00,0x00,0x01,0x00,0x01,0x00,0x10,0x10,0x00,0x00,0x00,0x00,0x20,0x00,0x68,0x04,
 0x00,0x00,0x01,0x00,0x01,0x00,0x10,0x10,0x00,0x00,0x00,0x00,0x20,0x00,0x68,0x04,
@@ -676,10 +676,10 @@ Content-Encoding: gzip
 0x70,0x6c,0x69,0x63,0x61,0x74,0x69,0x6f,0x6e,0x2f,0x78,0x2d,0x6a,0x61,0x76,0x61,
 0x70,0x6c,0x69,0x63,0x61,0x74,0x69,0x6f,0x6e,0x2f,0x78,0x2d,0x6a,0x61,0x76,0x61,
 0x73,0x63,0x72,0x69,0x70,0x74,0x0d,0x0a,0x43,0x6f,0x6e,0x74,0x65,0x6e,0x74,0x2d,
 0x73,0x63,0x72,0x69,0x70,0x74,0x0d,0x0a,0x43,0x6f,0x6e,0x74,0x65,0x6e,0x74,0x2d,
 0x45,0x6e,0x63,0x6f,0x64,0x69,0x6e,0x67,0x3a,0x20,0x67,0x7a,0x69,0x70,0x0d,0x0a,
 0x45,0x6e,0x63,0x6f,0x64,0x69,0x6e,0x67,0x3a,0x20,0x67,0x7a,0x69,0x70,0x0d,0x0a,
-/* "ETag: "1M47Nip6R4GSI4p"
+/* "ETag: "Ix1fgIdTzWxk3Lo"
 " (25 bytes) */
 " (25 bytes) */
-0x45,0x54,0x61,0x67,0x3a,0x20,0x22,0x31,0x4d,0x34,0x37,0x4e,0x69,0x70,0x36,0x52,
-0x34,0x47,0x53,0x49,0x34,0x70,0x22,0x0d,0x0a,0x0d,0x0a,
+0x45,0x54,0x61,0x67,0x3a,0x20,0x22,0x49,0x78,0x31,0x66,0x67,0x49,0x64,0x54,0x7a,
+0x57,0x78,0x6b,0x33,0x4c,0x6f,0x22,0x0d,0x0a,0x0d,0x0a,
 
 
 /* raw file data (10334 bytes) */
 /* raw file data (10334 bytes) */
 0x1f,0x8b,0x08,0x00,0x00,0x00,0x00,0x00,0x04,0x0a,0xed,0x7d,0x09,0x73,0x1b,0x49,
 0x1f,0x8b,0x08,0x00,0x00,0x00,0x00,0x00,0x04,0x0a,0xed,0x7d,0x09,0x73,0x1b,0x49,
@@ -1361,10 +1361,10 @@ Content-Encoding: gzip
 0x78,0x74,0x2f,0x68,0x74,0x6d,0x6c,0x0d,0x0a,0x43,0x6f,0x6e,0x74,0x65,0x6e,0x74,
 0x78,0x74,0x2f,0x68,0x74,0x6d,0x6c,0x0d,0x0a,0x43,0x6f,0x6e,0x74,0x65,0x6e,0x74,
 0x2d,0x45,0x6e,0x63,0x6f,0x64,0x69,0x6e,0x67,0x3a,0x20,0x67,0x7a,0x69,0x70,0x0d,
 0x2d,0x45,0x6e,0x63,0x6f,0x64,0x69,0x6e,0x67,0x3a,0x20,0x67,0x7a,0x69,0x70,0x0d,
 0x0a,
 0x0a,
-/* "ETag: "GnsKpwNVmxk6Jwq"
+/* "ETag: "1aaH58OFqelFm2M"
 " (25 bytes) */
 " (25 bytes) */
-0x45,0x54,0x61,0x67,0x3a,0x20,0x22,0x47,0x6e,0x73,0x4b,0x70,0x77,0x4e,0x56,0x6d,
-0x78,0x6b,0x36,0x4a,0x77,0x71,0x22,0x0d,0x0a,0x0d,0x0a,
+0x45,0x54,0x61,0x67,0x3a,0x20,0x22,0x31,0x61,0x61,0x48,0x35,0x38,0x4f,0x46,0x71,
+0x65,0x6c,0x46,0x6d,0x32,0x4d,0x22,0x0d,0x0a,0x0d,0x0a,
 
 
 /* raw file data (593 bytes) */
 /* raw file data (593 bytes) */
 0x1f,0x8b,0x08,0x00,0x00,0x00,0x00,0x00,0x04,0x0a,0x7d,0x54,0xc1,0x6e,0xd4,0x30,
 0x1f,0x8b,0x08,0x00,0x00,0x00,0x00,0x00,0x04,0x0a,0x7d,0x54,0xc1,0x6e,0xd4,0x30,
@@ -1438,10 +1438,10 @@ Content-Encoding: gzip
 0x78,0x74,0x2f,0x68,0x74,0x6d,0x6c,0x0d,0x0a,0x43,0x6f,0x6e,0x74,0x65,0x6e,0x74,
 0x78,0x74,0x2f,0x68,0x74,0x6d,0x6c,0x0d,0x0a,0x43,0x6f,0x6e,0x74,0x65,0x6e,0x74,
 0x2d,0x45,0x6e,0x63,0x6f,0x64,0x69,0x6e,0x67,0x3a,0x20,0x67,0x7a,0x69,0x70,0x0d,
 0x2d,0x45,0x6e,0x63,0x6f,0x64,0x69,0x6e,0x67,0x3a,0x20,0x67,0x7a,0x69,0x70,0x0d,
 0x0a,
 0x0a,
-/* "ETag: "8wVGXWVZ2gjTHZY"
+/* "ETag: "jM7T88BhuHeNBZf"
 " (25 bytes) */
 " (25 bytes) */
-0x45,0x54,0x61,0x67,0x3a,0x20,0x22,0x38,0x77,0x56,0x47,0x58,0x57,0x56,0x5a,0x32,
-0x67,0x6a,0x54,0x48,0x5a,0x59,0x22,0x0d,0x0a,0x0d,0x0a,
+0x45,0x54,0x61,0x67,0x3a,0x20,0x22,0x6a,0x4d,0x37,0x54,0x38,0x38,0x42,0x68,0x75,
+0x48,0x65,0x4e,0x42,0x5a,0x66,0x22,0x0d,0x0a,0x0d,0x0a,
 
 
 /* raw file data (1084 bytes) */
 /* raw file data (1084 bytes) */
 0x1f,0x8b,0x08,0x00,0x00,0x00,0x00,0x00,0x04,0x0a,0xbd,0x56,0xdb,0x6e,0xdb,0x46,
 0x1f,0x8b,0x08,0x00,0x00,0x00,0x00,0x00,0x04,0x0a,0xbd,0x56,0xdb,0x6e,0xdb,0x46,
@@ -1545,10 +1545,10 @@ Content-Encoding: gzip
 0x70,0x6c,0x69,0x63,0x61,0x74,0x69,0x6f,0x6e,0x2f,0x78,0x2d,0x6a,0x61,0x76,0x61,
 0x70,0x6c,0x69,0x63,0x61,0x74,0x69,0x6f,0x6e,0x2f,0x78,0x2d,0x6a,0x61,0x76,0x61,
 0x73,0x63,0x72,0x69,0x70,0x74,0x0d,0x0a,0x43,0x6f,0x6e,0x74,0x65,0x6e,0x74,0x2d,
 0x73,0x63,0x72,0x69,0x70,0x74,0x0d,0x0a,0x43,0x6f,0x6e,0x74,0x65,0x6e,0x74,0x2d,
 0x45,0x6e,0x63,0x6f,0x64,0x69,0x6e,0x67,0x3a,0x20,0x67,0x7a,0x69,0x70,0x0d,0x0a,
 0x45,0x6e,0x63,0x6f,0x64,0x69,0x6e,0x67,0x3a,0x20,0x67,0x7a,0x69,0x70,0x0d,0x0a,
-/* "ETag: "c6uNepuPKTZmhL5"
+/* "ETag: "mxcIbyUurcnoN4R"
 " (25 bytes) */
 " (25 bytes) */
-0x45,0x54,0x61,0x67,0x3a,0x20,0x22,0x63,0x36,0x75,0x4e,0x65,0x70,0x75,0x50,0x4b,
-0x54,0x5a,0x6d,0x68,0x4c,0x35,0x22,0x0d,0x0a,0x0d,0x0a,
+0x45,0x54,0x61,0x67,0x3a,0x20,0x22,0x6d,0x78,0x63,0x49,0x62,0x79,0x55,0x75,0x72,
+0x63,0x6e,0x6f,0x4e,0x34,0x52,0x22,0x0d,0x0a,0x0d,0x0a,
 
 
 /* raw file data (2318 bytes) */
 /* raw file data (2318 bytes) */
 0x1f,0x8b,0x08,0x00,0x00,0x00,0x00,0x00,0x04,0x0a,0xb5,0x58,0xef,0x8e,0xdb,0xc6,
 0x1f,0x8b,0x08,0x00,0x00,0x00,0x00,0x00,0x04,0x0a,0xb5,0x58,0xef,0x8e,0xdb,0xc6,
@@ -1728,10 +1728,10 @@ Content-Encoding: gzip
 0x43,0x6f,0x6e,0x74,0x65,0x6e,0x74,0x2d,0x74,0x79,0x70,0x65,0x3a,0x20,0x74,0x65,
 0x43,0x6f,0x6e,0x74,0x65,0x6e,0x74,0x2d,0x74,0x79,0x70,0x65,0x3a,0x20,0x74,0x65,
 0x78,0x74,0x2f,0x63,0x73,0x73,0x0d,0x0a,0x43,0x6f,0x6e,0x74,0x65,0x6e,0x74,0x2d,
 0x78,0x74,0x2f,0x63,0x73,0x73,0x0d,0x0a,0x43,0x6f,0x6e,0x74,0x65,0x6e,0x74,0x2d,
 0x45,0x6e,0x63,0x6f,0x64,0x69,0x6e,0x67,0x3a,0x20,0x67,0x7a,0x69,0x70,0x0d,0x0a,
 0x45,0x6e,0x63,0x6f,0x64,0x69,0x6e,0x67,0x3a,0x20,0x67,0x7a,0x69,0x70,0x0d,0x0a,
-/* "ETag: "VxmJisjVOoWj4AN"
+/* "ETag: "Jh3y80tLiNPNI2O"
 " (25 bytes) */
 " (25 bytes) */
-0x45,0x54,0x61,0x67,0x3a,0x20,0x22,0x56,0x78,0x6d,0x4a,0x69,0x73,0x6a,0x56,0x4f,
-0x6f,0x57,0x6a,0x34,0x41,0x4e,0x22,0x0d,0x0a,0x0d,0x0a,
+0x45,0x54,0x61,0x67,0x3a,0x20,0x22,0x4a,0x68,0x33,0x79,0x38,0x30,0x74,0x4c,0x69,
+0x4e,0x50,0x4e,0x49,0x32,0x4f,0x22,0x0d,0x0a,0x0d,0x0a,
 
 
 /* raw file data (9898 bytes) */
 /* raw file data (9898 bytes) */
 0x1f,0x8b,0x08,0x00,0x00,0x00,0x00,0x00,0x04,0x0a,0xcd,0x3d,0x5b,0x8e,0x23,0x39,
 0x1f,0x8b,0x08,0x00,0x00,0x00,0x00,0x00,0x04,0x0a,0xcd,0x3d,0x5b,0x8e,0x23,0x39,
@@ -2386,10 +2386,10 @@ Content-Encoding: gzip
 0x78,0x74,0x2f,0x68,0x74,0x6d,0x6c,0x0d,0x0a,0x43,0x6f,0x6e,0x74,0x65,0x6e,0x74,
 0x78,0x74,0x2f,0x68,0x74,0x6d,0x6c,0x0d,0x0a,0x43,0x6f,0x6e,0x74,0x65,0x6e,0x74,
 0x2d,0x45,0x6e,0x63,0x6f,0x64,0x69,0x6e,0x67,0x3a,0x20,0x67,0x7a,0x69,0x70,0x0d,
 0x2d,0x45,0x6e,0x63,0x6f,0x64,0x69,0x6e,0x67,0x3a,0x20,0x67,0x7a,0x69,0x70,0x0d,
 0x0a,
 0x0a,
-/* "ETag: "MCKGnuZXOSct8VJ"
+/* "ETag: "kVY2NnUsN6WTOuV"
 " (25 bytes) */
 " (25 bytes) */
-0x45,0x54,0x61,0x67,0x3a,0x20,0x22,0x4d,0x43,0x4b,0x47,0x6e,0x75,0x5a,0x58,0x4f,
-0x53,0x63,0x74,0x38,0x56,0x4a,0x22,0x0d,0x0a,0x0d,0x0a,
+0x45,0x54,0x61,0x67,0x3a,0x20,0x22,0x6b,0x56,0x59,0x32,0x4e,0x6e,0x55,0x73,0x4e,
+0x36,0x57,0x54,0x4f,0x75,0x56,0x22,0x0d,0x0a,0x0d,0x0a,
 
 
 /* raw file data (1169 bytes) */
 /* raw file data (1169 bytes) */
 0x1f,0x8b,0x08,0x00,0x00,0x00,0x00,0x00,0x04,0x0a,0x8d,0x56,0xcd,0x6e,0xdb,0x46,
 0x1f,0x8b,0x08,0x00,0x00,0x00,0x00,0x00,0x04,0x0a,0x8d,0x56,0xcd,0x6e,0xdb,0x46,
@@ -2499,10 +2499,10 @@ Content-Encoding: gzip
 0x78,0x74,0x2f,0x68,0x74,0x6d,0x6c,0x0d,0x0a,0x43,0x6f,0x6e,0x74,0x65,0x6e,0x74,
 0x78,0x74,0x2f,0x68,0x74,0x6d,0x6c,0x0d,0x0a,0x43,0x6f,0x6e,0x74,0x65,0x6e,0x74,
 0x2d,0x45,0x6e,0x63,0x6f,0x64,0x69,0x6e,0x67,0x3a,0x20,0x67,0x7a,0x69,0x70,0x0d,
 0x2d,0x45,0x6e,0x63,0x6f,0x64,0x69,0x6e,0x67,0x3a,0x20,0x67,0x7a,0x69,0x70,0x0d,
 0x0a,
 0x0a,
-/* "ETag: "BMepwj8YPljYfUO"
+/* "ETag: "XlsKVDpotYAc4kR"
 " (25 bytes) */
 " (25 bytes) */
-0x45,0x54,0x61,0x67,0x3a,0x20,0x22,0x42,0x4d,0x65,0x70,0x77,0x6a,0x38,0x59,0x50,
-0x6c,0x6a,0x59,0x66,0x55,0x4f,0x22,0x0d,0x0a,0x0d,0x0a,
+0x45,0x54,0x61,0x67,0x3a,0x20,0x22,0x58,0x6c,0x73,0x4b,0x56,0x44,0x70,0x6f,0x74,
+0x59,0x41,0x63,0x34,0x6b,0x52,0x22,0x0d,0x0a,0x0d,0x0a,
 
 
 /* raw file data (1110 bytes) */
 /* raw file data (1110 bytes) */
 0x1f,0x8b,0x08,0x00,0x00,0x00,0x00,0x00,0x04,0x0a,0x9d,0x56,0xdd,0x6e,0xdb,0x36,
 0x1f,0x8b,0x08,0x00,0x00,0x00,0x00,0x00,0x04,0x0a,0x9d,0x56,0xdd,0x6e,0xdb,0x36,
@@ -2608,10 +2608,10 @@ Content-Encoding: gzip
 0x78,0x74,0x2f,0x68,0x74,0x6d,0x6c,0x0d,0x0a,0x43,0x6f,0x6e,0x74,0x65,0x6e,0x74,
 0x78,0x74,0x2f,0x68,0x74,0x6d,0x6c,0x0d,0x0a,0x43,0x6f,0x6e,0x74,0x65,0x6e,0x74,
 0x2d,0x45,0x6e,0x63,0x6f,0x64,0x69,0x6e,0x67,0x3a,0x20,0x67,0x7a,0x69,0x70,0x0d,
 0x2d,0x45,0x6e,0x63,0x6f,0x64,0x69,0x6e,0x67,0x3a,0x20,0x67,0x7a,0x69,0x70,0x0d,
 0x0a,
 0x0a,
-/* "ETag: "ZZuC9cZv6Vvnpl5"
+/* "ETag: "l1u7V2ukirC3qr8"
 " (25 bytes) */
 " (25 bytes) */
-0x45,0x54,0x61,0x67,0x3a,0x20,0x22,0x5a,0x5a,0x75,0x43,0x39,0x63,0x5a,0x76,0x36,
-0x56,0x76,0x6e,0x70,0x6c,0x35,0x22,0x0d,0x0a,0x0d,0x0a,
+0x45,0x54,0x61,0x67,0x3a,0x20,0x22,0x6c,0x31,0x75,0x37,0x56,0x32,0x75,0x6b,0x69,
+0x72,0x43,0x33,0x71,0x72,0x38,0x22,0x0d,0x0a,0x0d,0x0a,
 
 
 /* raw file data (1086 bytes) */
 /* raw file data (1086 bytes) */
 0x1f,0x8b,0x08,0x00,0x00,0x00,0x00,0x00,0x04,0x0a,0x8d,0x56,0x5d,0x6f,0xdc,0x44,
 0x1f,0x8b,0x08,0x00,0x00,0x00,0x00,0x00,0x04,0x0a,0x8d,0x56,0x5d,0x6f,0xdc,0x44,
@@ -2715,10 +2715,10 @@ Content-Encoding: gzip
 0x78,0x74,0x2f,0x68,0x74,0x6d,0x6c,0x0d,0x0a,0x43,0x6f,0x6e,0x74,0x65,0x6e,0x74,
 0x78,0x74,0x2f,0x68,0x74,0x6d,0x6c,0x0d,0x0a,0x43,0x6f,0x6e,0x74,0x65,0x6e,0x74,
 0x2d,0x45,0x6e,0x63,0x6f,0x64,0x69,0x6e,0x67,0x3a,0x20,0x67,0x7a,0x69,0x70,0x0d,
 0x2d,0x45,0x6e,0x63,0x6f,0x64,0x69,0x6e,0x67,0x3a,0x20,0x67,0x7a,0x69,0x70,0x0d,
 0x0a,
 0x0a,
-/* "ETag: "JrJ0BuVr70bgik6"
+/* "ETag: "Hi27sTDTgj2KFjB"
 " (25 bytes) */
 " (25 bytes) */
-0x45,0x54,0x61,0x67,0x3a,0x20,0x22,0x4a,0x72,0x4a,0x30,0x42,0x75,0x56,0x72,0x37,
-0x30,0x62,0x67,0x69,0x6b,0x36,0x22,0x0d,0x0a,0x0d,0x0a,
+0x45,0x54,0x61,0x67,0x3a,0x20,0x22,0x48,0x69,0x32,0x37,0x73,0x54,0x44,0x54,0x67,
+0x6a,0x32,0x4b,0x46,0x6a,0x42,0x22,0x0d,0x0a,0x0d,0x0a,
 
 
 /* raw file data (4444 bytes) */
 /* raw file data (4444 bytes) */
 0x1f,0x8b,0x08,0x00,0x00,0x00,0x00,0x00,0x04,0x0a,0xed,0x5b,0x6b,0x73,0x1b,0xd5,
 0x1f,0x8b,0x08,0x00,0x00,0x00,0x00,0x00,0x04,0x0a,0xed,0x5b,0x6b,0x73,0x1b,0xd5,

+ 0 - 178
modules/HTTP_Server/fs.c

@@ -1,178 +0,0 @@
-/**
- * Copyright (c) 2001-2003 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. 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 lwIP TCP/IP stack.
- * 
- * Author: Adam Dunkels <adam@sics.se>
- *
- **/
-#include "lwip/opt.h"
-#include "lwip/def.h"
-#include "fs.h"
-#include "fsdata.h"
-#include <string.h>
-
-/** Set this to 1 to include "fsdata_custom.c" instead of "fsdata.c" for the
- * file system (to prevent changing the file included in CVS) */
-#ifndef HTTPD_USE_CUSTUM_FSDATA
-#define HTTPD_USE_CUSTUM_FSDATA 0
-#endif
-
-#if HTTPD_USE_CUSTUM_FSDATA
-#include "fsdata_custom.c"
-#else /* HTTPD_USE_CUSTUM_FSDATA */
-#include "fsdata.c"
-#endif /* HTTPD_USE_CUSTUM_FSDATA */
-
-/*-----------------------------------------------------------------------------------*/
-/* Define the number of open files that we can support. */
-#ifndef LWIP_MAX_OPEN_FILES
-#define LWIP_MAX_OPEN_FILES     10
-#endif
-
-/* Define the file system memory allocation structure. */
-struct fs_table {
-  struct fs_file file;
-  u8_t inuse;
-};
-
-/* Allocate file system memory */
-struct fs_table fs_memory[LWIP_MAX_OPEN_FILES];
-
-#if LWIP_HTTPD_CUSTOM_FILES
-int fs_open_custom(struct fs_file *file, const char *name);
-void fs_close_custom(struct fs_file *file);
-#endif /* LWIP_HTTPD_CUSTOM_FILES */
-
-
-/*-----------------------------------------------------------------------------------*/
-static struct fs_file *
-fs_malloc(void)
-{
-  int i;
-  for(i = 0; i < LWIP_MAX_OPEN_FILES; i++) {
-    if(fs_memory[i].inuse == 0) {
-      fs_memory[i].inuse = 1;
-      return(&fs_memory[i].file);
-    }
-  }
-  return(NULL);
-}
-
-/*-----------------------------------------------------------------------------------*/
-static void
-fs_free(struct fs_file *file)
-{
-  int i;
-  for(i = 0; i < LWIP_MAX_OPEN_FILES; i++) {
-    if(&fs_memory[i].file == file) {
-      fs_memory[i].inuse = 0;
-      break;
-    }
-  }
-  return;
-}
-
-/*-----------------------------------------------------------------------------------*/
-struct fs_file *
-fs_open(const char *name)
-{
-  struct fs_file *file;
-  const struct fsdata_file *f;
-
-  file = fs_malloc();
-  if(file == NULL) {
-    return NULL;
-  }
-
-#if LWIP_HTTPD_CUSTOM_FILES
-  if(fs_open_custom(file, name)) {
-    file->is_custom_file = 1;
-    return file;
-  }
-  file->is_custom_file = 0;
-#endif /* LWIP_HTTPD_CUSTOM_FILES */
-
-  for(f = FS_ROOT; f != NULL; f = f->next) {
-    if (!strcmp(name, (char *)f->name)) {
-      file->data = (const char *)f->data;
-      file->len = f->len;
-      file->index = f->len;
-      file->pextension = NULL;
-      file->http_header_included = f->http_header_included;
-#if HTTPD_PRECALCULATED_CHECKSUM
-      file->chksum_count = f->chksum_count;
-      file->chksum = f->chksum;
-#endif /* HTTPD_PRECALCULATED_CHECKSUM */
-#if LWIP_HTTPD_FILE_STATE
-      file->state = fs_state_init(file, name);
-#endif /* #if LWIP_HTTPD_FILE_STATE */
-      return file;
-    }
-  }
-  fs_free(file);
-  return NULL;
-}
-
-/*-----------------------------------------------------------------------------------*/
-void
-fs_close(struct fs_file *file)
-{
-#if LWIP_HTTPD_CUSTOM_FILES
-  if (file->is_custom_file) {
-    fs_close_custom(file);
-  }
-#endif /* LWIP_HTTPD_CUSTOM_FILES */
-#if LWIP_HTTPD_FILE_STATE
-  fs_state_free(file, file->state);
-#endif /* #if LWIP_HTTPD_FILE_STATE */
-  fs_free(file);
-}
-/*-----------------------------------------------------------------------------------*/
-int
-fs_read(struct fs_file *file, char *buffer, int count)
-{
-  int read;
-
-  if(file->index == file->len) {
-    return -1;
-  }
-
-  read = file->len - file->index;
-  if(read > count) {
-    read = count;
-  }
-
-  MEMCPY(buffer, (file->data + file->index), read);
-  file->index += read;
-
-  return(read);
-}
-/*-----------------------------------------------------------------------------------*/
-int fs_bytes_left(struct fs_file *file)
-{
-  return file->len - file->index;
-}

+ 235 - 246
modules/HTTP_Server/http_server.c

@@ -10,7 +10,7 @@
 #include "parameters.h"
 #include "parameters.h"
 #include "urlcode.h"
 #include "urlcode.h"
 #include "trap_params.h"
 #include "trap_params.h"
-#include "fsdata.c"
+#include "bt6706_fs/fsdata.c"
 #include "settings_api.h"
 #include "settings_api.h"
 #include "netconf.h"
 #include "netconf.h"
 #include "common_config.h"
 #include "common_config.h"
@@ -20,7 +20,6 @@
 #include "megatec.h"
 #include "megatec.h"
 #include "log.h"
 #include "log.h"
 #include "hal.h"
 #include "hal.h"
-#include "radius_user.h"
 #include "sntp_api.h"
 #include "sntp_api.h"
 
 
 #ifdef PRINTF_STDLIB
 #ifdef PRINTF_STDLIB
@@ -54,8 +53,7 @@ char* send_file(char *filename, char *pnonmatch,  struct fs_file *file, uint16_t
 static uint32_t Parse_Header(char *data, uint32_t len, const char *field, uint32_t flen, char *value);
 static uint32_t Parse_Header(char *data, uint32_t len, const char *field, uint32_t flen, char *value);
 bool GetFileName(char *inStr, char *fileName, uint8_t *fileNameLen);
 bool GetFileName(char *inStr, char *fileName, uint8_t *fileNameLen);
 
 
-
-SET_PAGE_t SET_PAGE = SET_PAGE_IDLE;
+REQ_TYPE_SEND_t HTTPTypeAnswer = COMMON_ANSWER;
 
 
 #define SEND_BUF_MAX_LEN   2000
 #define SEND_BUF_MAX_LEN   2000
 #define RECIVE_BUF_MAX_LEN   1500
 #define RECIVE_BUF_MAX_LEN   1500
@@ -124,9 +122,6 @@ unsigned long log_ptr = 0;
 unsigned long log_size = 0;
 unsigned long log_size = 0;
 bool fLogTransInprog = false;
 bool fLogTransInprog = false;
 
 
-
-static bool fl_raddius_net_err = false;
-
 /**
 /**
   * @brief  Общая структура настроек
   * @brief  Общая структура настроек
   */
   */
@@ -183,63 +178,64 @@ static err_t http_recv(void *arg, struct tcp_pcb *pcb,  struct pbuf *p, err_t er
 		  memcpy(receiveBuf, p->payload , receivedBufLen);
 		  memcpy(receiveBuf, p->payload , receivedBufLen);
 		  /* Cut received string */
 		  /* Cut received string */
 		  receiveBuf[receivedBufLen] = '\0';
 		  receiveBuf[receivedBufLen] = '\0';
-
-		  Cockie();
-		  getAuthenticatedState();
-
-		  if (!Authenticated)
-		  {
-			  hs->file = AuthenticatedFalseRoutine(&sendBufLoadLen);
-			  hs->left = sendBufLoadLen;
-			  send_data(pcb, hs);
-			  tcp_sent(pcb, http_sent);
-		  }
-		  else
-		  {
-			  hs->file = AuthenticatedTrueRoutine(&sendBufLoadLen);
-			  hs->left = sendBufLoadLen;
-			  send_data(pcb, hs);
-			  tcp_sent(pcb, http_sent);
-		  }
-
-	      // На производстве
-		  if (strncmp(data, "GET /setProdate.cgi", 19) == 0 && strncmp(sSettings.sFlags.testState, "T2OK", 4) == 0)
+		  if (strncmp(data, "GET /setProdate.cgi", 19) == 0 && strncmp(sSettings.sFlags.testState, "T2OK", 4))
 		  {
 		  {
-	        HTTP_Prodate(receiveBuf, sendBuf, receivedBufLen, &sendBufLoadLen);
+			HTTP_Prodate(receiveBuf, sendBuf, receivedBufLen, &sendBufLoadLen);
 
 
 			hs->file = sendBuf;
 			hs->file = sendBuf;
-	        hs->left = sendBufLoadLen;
+			hs->left = sendBufLoadLen;
 			send_data(pcb, hs);
 			send_data(pcb, hs);
 			tcp_sent(pcb, http_sent);
 			tcp_sent(pcb, http_sent);
 		  }
 		  }
+		  else{
+			  Cockie();
+			  if( DataFlag == 0 && DataFlag2 == 0 ){
+				  getAuthenticatedState();
+			  }
+			  if (DataFlag >= 1)
+				 Authenticated = true;
+			  else if(DataFlag2 >= 1)
+				 Authenticated = true;
+
+			  if (!Authenticated)
+			  {
+				  hs->file = AuthenticatedFalseRoutine(&sendBufLoadLen);
+				  hs->left = sendBufLoadLen;
+				  send_data(pcb, hs);
+				  tcp_sent(pcb, http_sent);
+			  }
+			  else
+			  {
+				  HTTPTypeAnswer = COMMON_ANSWER;
+				  hs->file = AuthenticatedTrueRoutine(&sendBufLoadLen);
+				  hs->left = sendBufLoadLen;
+				  if(hs->file != 0){
+					  send_data(pcb, hs);
+					  switch(HTTPTypeAnswer){
+					  case HISTORY_ANSWER:
+						  tcp_sent(pcb, http_sent_history);
+						  break;
+					  case UPS_HISTORY_ANSWER:
+						  tcp_sent(pcb, http_sent_log);
+						  break;
+					  default:
+						  tcp_sent(pcb, http_sent);
+						  break;
+					  }
+				  }
+			  }
+		  }
+
 		}
 		}
 	    pbuf_free(p);
 	    pbuf_free(p);
-	    close_conn(pcb,hs);
-	  }
-	  if (err == ERR_OK && p == NULL)
-	  {
-	    close_conn(pcb, hs);
 	  }
 	  }
 	  return ERR_OK;
 	  return ERR_OK;
 }
 }
 
 
-
-/**
-  * @brief Error callback for log file transfer
-  */
-static void http_sent_log_err(void * arg, err_t err)
-{
-    (void)err;
-    (void)arg;
-    /* Clear file transfer in progress flag */
-    fLogTransInprog = false;
-}
-
-
 /**
 /**
   * @brief Sent callback for log file transfer (messages as is, not ordered)
   * @brief Sent callback for log file transfer (messages as is, not ordered)
   */
   */
-static err_t http_sent_log(void *arg, struct tcp_pcb *pcb, u16_t len)
+static err_t http_sent_history(void *arg, struct tcp_pcb *pcb, u16_t len)
 {
 {
   struct http_state *hs;
   struct http_state *hs;
   uint32_t nbytes = 0;
   uint32_t nbytes = 0;
@@ -255,11 +251,11 @@ static err_t http_sent_log(void *arg, struct tcp_pcb *pcb, u16_t len)
   else
   else
   {
   {
 	  memset(logFileBuf, 0, FILE_BUF_MAX_LEN);
 	  memset(logFileBuf, 0, FILE_BUF_MAX_LEN);
-      if (log_ptr + FILE_BUF_MAX_LEN_LOG <= log_size) {
-          nbytes = LOG_GetData(log_ptr, logFileBuf, FILE_BUF_MAX_LEN_LOG, start);
+      if (log_ptr + FILE_BUF_MAX_LEN <= log_size) {
+          nbytes = History_GetData(log_ptr, logFileBuf, FILE_BUF_MAX_LEN, start);
       }
       }
       else if (log_ptr < log_size) {
       else if (log_ptr < log_size) {
-          nbytes = LOG_GetData(log_ptr, logFileBuf, (log_size - log_ptr), start);
+          nbytes = History_GetData(log_ptr, logFileBuf, (log_size - log_ptr), start);
       }
       }
       else {
       else {
           nbytes = 0;
           nbytes = 0;
@@ -281,7 +277,7 @@ static err_t http_sent_log(void *arg, struct tcp_pcb *pcb, u16_t len)
       hs->file = logFileBuf;
       hs->file = logFileBuf;
       hs->left = nbytes;
       hs->left = nbytes;
       send_data(pcb, hs);
       send_data(pcb, hs);
-      tcp_sent(pcb, http_sent_log);
+      tcp_sent(pcb, http_sent_history);
 
 
   }
   }
   return ERR_OK;
   return ERR_OK;
@@ -290,7 +286,7 @@ static err_t http_sent_log(void *arg, struct tcp_pcb *pcb, u16_t len)
 /**
 /**
   * @brief Sent callback for log file transfer (messages as is, not ordered)
   * @brief Sent callback for log file transfer (messages as is, not ordered)
   */
   */
-static err_t http_sent_history(void *arg, struct tcp_pcb *pcb, u16_t len)
+static err_t http_sent_log(void *arg, struct tcp_pcb *pcb, u16_t len)
 {
 {
   struct http_state *hs;
   struct http_state *hs;
   uint32_t nbytes = 0;
   uint32_t nbytes = 0;
@@ -306,11 +302,11 @@ static err_t http_sent_history(void *arg, struct tcp_pcb *pcb, u16_t len)
   else
   else
   {
   {
 	  memset(logFileBuf, 0, FILE_BUF_MAX_LEN);
 	  memset(logFileBuf, 0, FILE_BUF_MAX_LEN);
-      if (log_ptr + FILE_BUF_MAX_LEN <= log_size) {
-          nbytes = History_GetData(log_ptr, logFileBuf, FILE_BUF_MAX_LEN, start);
+      if (log_ptr + FILE_BUF_MAX_LEN_LOG <= log_size) {
+          nbytes = LOG_GetData(log_ptr, logFileBuf, FILE_BUF_MAX_LEN_LOG, start);
       }
       }
       else if (log_ptr < log_size) {
       else if (log_ptr < log_size) {
-          nbytes = History_GetData(log_ptr, logFileBuf, (log_size - log_ptr), start);
+          nbytes = LOG_GetData(log_ptr, logFileBuf, (log_size - log_ptr), start);
       }
       }
       else {
       else {
           nbytes = 0;
           nbytes = 0;
@@ -332,12 +328,22 @@ static err_t http_sent_history(void *arg, struct tcp_pcb *pcb, u16_t len)
       hs->file = logFileBuf;
       hs->file = logFileBuf;
       hs->left = nbytes;
       hs->left = nbytes;
       send_data(pcb, hs);
       send_data(pcb, hs);
-      tcp_sent(pcb, http_sent_history);
+      tcp_sent(pcb, http_sent_log);
 
 
   }
   }
   return ERR_OK;
   return ERR_OK;
 }
 }
 
 
+/**
+  * @brief Error callback for log file transfer
+  */
+static void http_sent_log_err(void * arg, err_t err)
+{
+    (void)err;
+    (void)arg;
+    /* Clear file transfer in progress flag */
+    fLogTransInprog = false;
+}
 
 
 /**
 /**
   * @brief  callback function for handling connection errors
   * @brief  callback function for handling connection errors
@@ -372,7 +378,7 @@ static err_t http_sent(void *arg, struct tcp_pcb *pcb, u16_t len)
   }
   }
   else
   else
   {
   {
-    close_conn(pcb, hs);      
+    close_conn(pcb, hs);
   }
   }
   return ERR_OK;
   return ERR_OK;
 }
 }
@@ -436,6 +442,9 @@ static err_t http_accept(void *arg, struct tcp_pcb *pcb, err_t err)
 {
 {
   struct http_state *hs;
   struct http_state *hs;
 
 
+  /* set priority for the newly accepted tcp connection newpcb */
+    tcp_setprio(pcb, TCP_PRIO_MIN);
+
   /* Allocate memory for the structure that holds the state of the connection */
   /* Allocate memory for the structure that holds the state of the connection */
   hs = mem_malloc(sizeof(struct http_state));
   hs = mem_malloc(sizeof(struct http_state));
 
 
@@ -493,20 +502,32 @@ void HTTP_Init()
 {
 {
 	char buf[MAX_WEB_COOKIE_LEN];
 	char buf[MAX_WEB_COOKIE_LEN];
 	uint8_t user_id;
 	uint8_t user_id;
-
+	err_t err;
     struct tcp_pcb *pcb;
     struct tcp_pcb *pcb;
 
 
-    pcb = tcp_new();
-    tcp_bind(pcb, IP_ADDR_ANY, 80);
-    pcb = tcp_listen(pcb);
-    tcp_accept(pcb, http_accept);
+    /*create new pcb*/
+      pcb = tcp_new_ip_type(IPADDR_TYPE_ANY);
+      LWIP_ASSERT("httpd_init: tcp_new failed", pcb != NULL);
+
+      /* set lowest prio to HTTP connections */
+      //tcp_setprio(pcb, TCP_PRIO_MIN);
+
+      /* bind HTTP traffic to pcb */
+      err = tcp_bind(pcb, IP_ANY_TYPE, 80);
+      LWIP_UNUSED_ARG(err); /* in case of LWIP_NOASSERT */
+      LWIP_ASSERT("httpd_init: tcp_bind failed", err == ERR_OK);
+
+      /* start listening on port 80 */
+      pcb = tcp_listen(pcb);
+      /* define callback function for TCP connection setup */
+      tcp_accept(pcb, http_accept);
 
 
     for (user_id = 0; user_id < MAX_WEB_USERS; user_id++) {
     for (user_id = 0; user_id < MAX_WEB_USERS; user_id++) {
-	/* Flush user cookie by random value */
-	sprintf(buf, "%X", (unsigned int)GetRandomNumber());
-	HTTP_SetUserCookie(buf, user_id);
+		/* Flush user cookie by random value */
+		sprintf(buf, "%X", (unsigned int)GetRandomNumber());
+		HTTP_SetUserCookie(buf, user_id);
 
 
-	/* Create user logout timers */
+		/* Create user logout timers */
 		users[user_id].LogoutTimer =
 		users[user_id].LogoutTimer =
 				xTimerCreate("LogoutTmr", WEB_LOGOUT_TIME, pdFALSE, ( void * ) user_id, LogoutTimerCallback);
 				xTimerCreate("LogoutTmr", WEB_LOGOUT_TIME, pdFALSE, ( void * ) user_id, LogoutTimerCallback);
 	  }
 	  }
@@ -779,6 +800,22 @@ void HTTP_SetSettings(char *buf, uint16_t lenBuf)
   }
   }
   memset(value, 0, len);
   memset(value, 0, len);
 
 
+#ifdef HARDWARE_BT6706
+  /* Сетевые параметры */
+  GetParamValue(buf, "tn_enabled=", value, &valueLen);
+  SetTelnetEnableStateStr(value);
+	if (strncmp(value, "on", 2) == 0)
+	{
+		memset(value, 0, len);
+
+		GetParamValue(buf, "tn_port=", value, &valueLen);
+		SetTelnetPortStr(value);
+		memset(value, 0, len);
+	}
+	memset(value, 0, len);
+#endif
+
+#ifdef HARDWARE_BT6702
   GetParamValue(buf, "swauth=", value, &valueLen);
   GetParamValue(buf, "swauth=", value, &valueLen);
   SetAuthEnableStateStr(value);
   SetAuthEnableStateStr(value);
 
 
@@ -809,6 +846,7 @@ void HTTP_SetSettings(char *buf, uint16_t lenBuf)
 		}
 		}
   }
   }
   memset(value, 0, len);
   memset(value, 0, len);
+#endif
 
 
   // Параметры реле и сухих контактов
   // Параметры реле и сухих контактов
   GetParamValue(buf, "di1=", value, &valueLen);
   GetParamValue(buf, "di1=", value, &valueLen);
@@ -871,6 +909,9 @@ void HTTP_SetSettings(char *buf, uint16_t lenBuf)
   /* Если параметры WEB изменились выставляем флаг, сохраняем настройки и перезагружаемся */
   /* Если параметры WEB изменились выставляем флаг, сохраняем настройки и перезагружаемся */
   if (GetStateWebReinit() == true)
   if (GetStateWebReinit() == true)
   {	
   {	
+#ifdef HARDWARE_BT6706
+  telnet_act = false;
+#endif
 	SetWebReinitFlag(true);
 	SetWebReinitFlag(true);
 	HTTP_SaveSettings();
 	HTTP_SaveSettings();
     /* Блокируем управление ключем на тау секунд*/
     /* Блокируем управление ключем на тау секунд*/
@@ -878,7 +919,9 @@ void HTTP_SetSettings(char *buf, uint16_t lenBuf)
     vTaskDelay(1010);
     vTaskDelay(1010);
     Reboot();
     Reboot();
   }	
   }	
-  
+#ifdef HARDWARE_BT6706
+  telnet_act = false;
+#endif
   HTTP_SaveSettings();
   HTTP_SaveSettings();
 }
 }
 
 
@@ -914,7 +957,10 @@ void HTTP_SetInfo(char *buf, uint16_t lenBuf)
   url_decode(str, sizeof(str), value);
   url_decode(str, sizeof(str), value);
   SetComment(str);
   SetComment(str);
   memset(value, 0, len);
   memset(value, 0, len);
- 
+
+#ifdef HARDWARE_BT6706
+  telnet_act = false;
+#endif
   HTTP_SaveSettings();
   HTTP_SaveSettings();
 }
 }
 
 
@@ -1033,7 +1079,9 @@ void HTTP_ConfirmBootPwd(char *bufIn, char *bufOut, uint16_t lenBufIn, uint16_t
   uint8_t valueLen;
   uint8_t valueLen;
   
   
   memset(value, 0, 20);
   memset(value, 0, 20);
-  
+#ifdef HARDWARE_BT6706
+  telnet_act = false;
+#endif
   /* Запускаем задачу отложенной перезагрузки. Контроллер должен успеть
   /* Запускаем задачу отложенной перезагрузки. Контроллер должен успеть
      отправить ответ серверу о статусе пароля */
      отправить ответ серверу о статусе пароля */
   HTTP_StartResetTask(true); 
   HTTP_StartResetTask(true); 
@@ -1197,6 +1245,7 @@ uint8_t GetCookieValue(char *inStr, char *paramName, char *paramValue, uint8_t *
 {
 {
   char *beginValue = 0;
   char *beginValue = 0;
   char *endValue = 0;
   char *endValue = 0;
+  char *endValueTemp = 0;
   int  len = 0;
   int  len = 0;
   char *strPtr = 0;
   char *strPtr = 0;
 
 
@@ -1206,6 +1255,9 @@ uint8_t GetCookieValue(char *inStr, char *paramName, char *paramValue, uint8_t *
   {
   {
     beginValue = strpbrk(strPtr,"=");
     beginValue = strpbrk(strPtr,"=");
     endValue = strpbrk(strPtr,";");
     endValue = strpbrk(strPtr,";");
+    endValueTemp = strpbrk(strPtr,"\r");
+	if(endValueTemp != 0 && endValueTemp < endValue)
+	   endValue = endValueTemp;
     if (endValue == 0)
     if (endValue == 0)
       endValue = strpbrk(strPtr,"\n");
       endValue = strpbrk(strPtr,"\n");
     len = endValue - beginValue - 1;
     len = endValue - beginValue - 1;
@@ -1358,8 +1410,7 @@ static void HTTP_ForceUserLogout(uint8_t user_id)
   */
   */
 void LogoutTimerCallback(TimerHandle_t pxTimer) {
 void LogoutTimerCallback(TimerHandle_t pxTimer) {
     uint8_t user_id = (uint8_t)pvTimerGetTimerID( pxTimer );
     uint8_t user_id = (uint8_t)pvTimerGetTimerID( pxTimer );
-	if( sSettings.sRADIUS.Auth_enable )
-		HTTP_ForceUserLogout(user_id);
+	HTTP_ForceUserLogout(user_id);
 }
 }
 
 
 /**
 /**
@@ -1407,7 +1458,9 @@ int HTTP_ChangeUserPwd(char *bufIn, char *bufOut, uint16_t lenBufIn, uint16_t *l
 				 {
 				 {
 
 
 					 memcpy(sSettings.sAuth[user_id].password, password, 11);
 					 memcpy(sSettings.sAuth[user_id].password, password, 11);
-
+#ifdef HARDWARE_BT6706
+  telnet_act = false;
+#endif
 					 HTTP_SaveSettings();
 					 HTTP_SaveSettings();
 					 log_event_data(LOG_PSW_CHANGE, name_login);
 					 log_event_data(LOG_PSW_CHANGE, name_login);
 					 strcat(bufOut, "Пароль успешно изменён");
 					 strcat(bufOut, "Пароль успешно изменён");
@@ -1436,19 +1489,12 @@ int HTTP_ChangeUserPwd(char *bufIn, char *bufOut, uint16_t lenBufIn, uint16_t *l
 //
 //
 void Cockie(void)
 void Cockie(void)
 {
 {
-  char* endPtr;
-  uint32_t len;
   receiveBuf[receivedBufLen] = '\0';
   receiveBuf[receivedBufLen] = '\0';
   //printf("receive %s \r\n", receiveBuf);
   //printf("receive %s \r\n", receiveBuf);
   // Get cookie "uname" value 
   // Get cookie "uname" value 
   memset(CookieBuf, 0, sizeof(CookieBuf));
   memset(CookieBuf, 0, sizeof(CookieBuf));
   CookiePtr = strstr(receiveBuf, "uname=");
   CookiePtr = strstr(receiveBuf, "uname=");
-  endPtr = strstr(CookiePtr, "\r");
-  len =  (endPtr - CookiePtr)+2;
-  if(len < 50)
-	strncpy(CookieBuf, CookiePtr,len);
-  else
-	strncpy(CookieBuf, CookiePtr, 50);
+  strncpy(CookieBuf, CookiePtr, 50);
   
   
   //printf("********CookieBuf1= %s\r\n", CookieBuf);
   //printf("********CookieBuf1= %s\r\n", CookieBuf);
   memset(name, 0, MAX_WEB_COOKIE_LEN);
   memset(name, 0, MAX_WEB_COOKIE_LEN);
@@ -1459,10 +1505,7 @@ void Cockie(void)
   memset(CookieBuf, 0, sizeof(CookieBuf));
   memset(CookieBuf, 0, sizeof(CookieBuf));
   // Get cookie "id" value 
   // Get cookie "id" value 
   CookiePtr = strstr(receiveBuf, " id=");
   CookiePtr = strstr(receiveBuf, " id=");
-  if(len < 50)
- 	strncpy(CookieBuf, CookiePtr,len);
-  else
-    strncpy(CookieBuf, CookiePtr, 50);
+  strncpy(CookieBuf, CookiePtr, 50);
    
    
   //printf("********CookieBuf1= %s\r\n", CookieBuf);
   //printf("********CookieBuf1= %s\r\n", CookieBuf);
   memset(id, 0, MAX_WEB_COOKIE_LEN);
   memset(id, 0, MAX_WEB_COOKIE_LEN);
@@ -1615,7 +1658,6 @@ char* AuthenticatedFalseRoutine(uint16_t* sendLen)
 char* AuthenticatedTrueRoutine(uint16_t* sendLen)
 char* AuthenticatedTrueRoutine(uint16_t* sendLen)
 {
 {
     char *DataOffset;
     char *DataOffset;
-    char *ptr;
     
     
  if (strncmp(receiveBuf, "GET /getJson.cgi", 16) == 0) // +
  if (strncmp(receiveBuf, "GET /getJson.cgi", 16) == 0) // +
     {
     {
@@ -1626,7 +1668,6 @@ char* AuthenticatedTrueRoutine(uint16_t* sendLen)
     else if (strncmp(receiveBuf, "GET /settings.cgi", 17) == 0) // +
     else if (strncmp(receiveBuf, "GET /settings.cgi", 17) == 0) // +
     {
     {
         if (seclevel == 0) {
         if (seclevel == 0) {
-            SET_PAGE = SET_PAGE_PAGE2;
             if (HTTP_SettingsPage(receiveBuf, sendBuf, receivedBufLen, sendLen) == SEND_REQUIRED_YES)
             if (HTTP_SettingsPage(receiveBuf, sendBuf, receivedBufLen, sendLen) == SEND_REQUIRED_YES)
             {
             {
                 *sendLen = strlen(sendBuf);
                 *sendLen = strlen(sendBuf);
@@ -1641,41 +1682,53 @@ char* AuthenticatedTrueRoutine(uint16_t* sendLen)
         {
         {
             DataOffset = 0;
             DataOffset = 0;
             // POST Packet received 
             // POST Packet received 
-            TotalReceived = 0;
-            TotalData = 0;
-            memset(sendBuf, 0, strlen(sendBuf));
-
-            // parse packet for Content-length field
-            size = Parse_Content_Length(receiveBuf, receivedBufLen);
-            DataOffset = strstr(receiveBuf, "managerIP");
-
-            /* case of MSIE8 : we do not receive data in the POST packet*/
-            if (DataOffset == 0)
+            if (DataFlag2 == 0)
             {
             {
-                //ssl_server_read();
-        //        SSL_ReadRoutine(&ssl, (unsigned char*)receiveBuf);
-                DataOffset = strstr(receiveBuf, "managerIP");
-            }           
-
-            TotalReceived = receivedBufLen - (DataOffset - &receiveBuf[0]);
-            TotalData += TotalReceived;
-            strncat(sendBuf,  DataOffset, TotalReceived);
-
-            for (int i = TotalData; i < size; i ++)
-            {
-                //ssl_server_read();
-             //   SSL_ReadRoutine(&ssl, (unsigned char*)receiveBuf);
-                strncat(sendBuf,  receiveBuf, receivedBufLen);
-                TotalData += receivedBufLen;
+				TotalReceived = 0;
+				memset(sendBuf, 0, strlen(sendBuf));
+				// parse packet for Content-length field
+				size = Parse_Content_Length(receiveBuf, receivedBufLen);
+				DataOffset = strstr(receiveBuf, "managerIP");
+
+				// case of MSIE8 : we do not receive data in the POST packet
+				if (DataOffset == 0)
+				{
+					 DataFlag2++;
+					return 0;
+				}
+				else{
+					TotalReceived = receivedBufLen - (DataOffset - &receiveBuf[0]);
+					strncat(sendBuf,  DataOffset, TotalReceived);
+				}
             }
             }
+
+            if (DataFlag2 == 0)
+			{
+			 DataFlag2++;
+			}
+			else if (DataFlag2 == 1)
+			{
+			 /* parse packet for the octet-stream field */
+			   DataOffset = strstr(receiveBuf, "managerIP");
+			   TotalReceived += receivedBufLen;
+			   strncat(sendBuf,  DataOffset, TotalReceived);
+			   DataFlag2++;
+			}
+			 /* DataFlag >1 => the packet is data only  */
+			 else
+			 {
+			   TotalReceived +=receivedBufLen;
+			   strncat(sendBuf,  receiveBuf, receivedBufLen);
+			 }
             // check if last data packet 
             // check if last data packet 
-            if (TotalData == size)
+            if (TotalReceived == size)
             {
             {
                 DBG printf("State: Received %d bytes\r\n", (int)TotalData);
                 DBG printf("State: Received %d bytes\r\n", (int)TotalData);
                 //  printf("receive %s \r\n", sendBuf);
                 //  printf("receive %s \r\n", sendBuf);
                 strncat(sendBuf,  " ", 1);
                 strncat(sendBuf,  " ", 1);
                 HTTP_SetSettings(sendBuf, strlen(sendBuf));
                 HTTP_SetSettings(sendBuf, strlen(sendBuf));
                 memset(sendBuf, 0, size);
                 memset(sendBuf, 0, size);
+                DataFlag2 = 0;
                 strcpy(sendBuf, "HTTP/1.1 200 OK\r\n");
                 strcpy(sendBuf, "HTTP/1.1 200 OK\r\n");
                 strcat(sendBuf, "\r\n\r\n");
                 strcat(sendBuf, "\r\n\r\n");
                 strcat(sendBuf,"<!DOCTYPE html><html lang=""><head><meta http-equiv=\"refresh\" content=\"0;url=/settings.html\"/></head></html>\r\n\r\n");
                 strcat(sendBuf,"<!DOCTYPE html><html lang=""><head><meta http-equiv=\"refresh\" content=\"0;url=/settings.html\"/></head></html>\r\n\r\n");
@@ -1683,9 +1736,9 @@ char* AuthenticatedTrueRoutine(uint16_t* sendLen)
                 *sendLen = sendBufLoadLen;
                 *sendLen = sendBufLoadLen;
                 return sendBuf;
                 return sendBuf;
             }
             }
-        }  
+        }
         return 0;
         return 0;
-    } 
+    }
     else if (strncmp(receiveBuf, "GET /info.cgi", 13) == 0) // +
     else if (strncmp(receiveBuf, "GET /info.cgi", 13) == 0) // +
     {
     {
         if (HTTP_InfoPage(receiveBuf, sendBuf, receivedBufLen, sendLen) == SEND_REQUIRED_YES)
         if (HTTP_InfoPage(receiveBuf, sendBuf, receivedBufLen, sendLen) == SEND_REQUIRED_YES)
@@ -1695,55 +1748,62 @@ char* AuthenticatedTrueRoutine(uint16_t* sendLen)
     }
     }
     else if (strncmp(receiveBuf, "POST /info.cgi", 14) == 0)
     else if (strncmp(receiveBuf, "POST /info.cgi", 14) == 0)
     {
     {
-        if (seclevel == 0) 
-        {
-            DataOffset = 0;
-            // POST Packet received
-            TotalReceived = 0;
-            TotalData = 0;
-            memset(sendBuf, 0, strlen(sendBuf));
-            // parse packet for Content-length field
-            size = Parse_Content_Length(receiveBuf, receivedBufLen);
-            DataOffset = strstr(receiveBuf, "owner");
-
-            // case of MSIE8 : we do not receive data in the POST packet
-            if (DataOffset == 0)
-            {
-               // SSL_ReadRoutine(&ssl, (unsigned char*)receiveBuf);
-                DataOffset = strstr(receiveBuf, "owner");
-            }
+		DataOffset = 0;
+		// POST Packet received
+		if (DataFlag == 0)
+		{
+			TotalReceived = 0;
+			memset(sendBuf, 0, strlen(sendBuf));
+			// parse packet for Content-length field
+			size = Parse_Content_Length(receiveBuf, receivedBufLen);
+			DataOffset = strstr(receiveBuf, "owner");
+
+			// case of MSIE8 : we do not receive data in the POST packet
+			if (DataOffset == 0)
+			{
+				 DataFlag++;
+				return 0;
+			}
+			else{
+				TotalReceived = receivedBufLen - (DataOffset - &receiveBuf[0]);
+				strncat(sendBuf,  DataOffset, TotalReceived);
+			}
+		}
 
 
-            TotalReceived = receivedBufLen - (DataOffset - &receiveBuf[0]);
-            TotalData += TotalReceived;
-            strncat(sendBuf,  DataOffset, TotalReceived);
+		if (DataFlag == 0)
+		{
+		 DataFlag++;
+		}
+		else if (DataFlag == 1)
+		{
+		 /* parse packet for the octet-stream field */
+		   DataOffset = strstr(receiveBuf, "owner");
+		   TotalReceived += receivedBufLen;
+		   strncat(sendBuf,  DataOffset, TotalReceived);
+		   DataFlag++;
+		}
+		 /* DataFlag >1 => the packet is data only  */
+		 else
+		 {
+		   TotalReceived +=receivedBufLen;
+		   strncat(sendBuf,  receiveBuf, receivedBufLen);
+		 }
+
+		// check if last data packet
+		if (TotalReceived == size)
+		{
+			strncat(sendBuf,  " ", 1);
+			HTTP_SetInfo(sendBuf, strlen(sendBuf));
+			DataFlag = 0;
+			memset(sendBuf, 0, size);
 
 
-            // check if last data packet 
-            if (TotalReceived == size)
-            {
-                strncat(sendBuf,  " ", 1);
-                HTTP_SetInfo(sendBuf, strlen(sendBuf));
-                DataFlag = 0;
-                BrowserFlag = 0;
-                memset(sendBuf, 0, size);
+			strcpy(sendBuf, "HTTP/1.1 200 OK\r\n");
+			strcat(sendBuf, "\r\n\r\n");
+			strcat(sendBuf,"<!DOCTYPE html><html lang=""><head><meta http-equiv=\"refresh\" content=\"0;url=/info.html\"/></head></html>\r\n\r\n");
 
 
-                strcpy(sendBuf, "HTTP/1.1 200 OK\r\n");
-                strcat(sendBuf, "\r\n\r\n");
-                strcat(sendBuf,"<!DOCTYPE html><html lang=""><head><meta http-equiv=\"refresh\" content=\"0;url=/info.html\"/></head></html>\r\n\r\n");
-                
-                *sendLen = strlen(sendBuf);
-                return sendBuf;
-            }
-            // not last data packet 
-            else
-            {
-                // write data in flash 
-                if(receivedBufLen)
-                {
-                    strncat(sendBuf,  ptr, receivedBufLen);
-                    //memcpy(receiveBufTemp, ptr, receivedBufLen);
-                }
-            }
-        }
+			*sendLen = strlen(sendBuf);
+			return sendBuf;
+		}
     }
     }
     else if (strncmp(receiveBuf, "GET /history.cgi", 16) == 0)
     else if (strncmp(receiveBuf, "GET /history.cgi", 16) == 0)
     {
     {
@@ -1752,8 +1812,8 @@ char* AuthenticatedTrueRoutine(uint16_t* sendLen)
     
     
         if (res == SEND_REQUIRED_FILE)
         if (res == SEND_REQUIRED_FILE)
         {
         {
-            HTTP_SendHistory();
-            return 0;
+        	HTTPTypeAnswer = HISTORY_ANSWER;
+           return sendBuf;
         }
         }
         else if (res == SEND_REQUIRED_YES) 
         else if (res == SEND_REQUIRED_YES) 
         {
         {
@@ -1768,9 +1828,8 @@ char* AuthenticatedTrueRoutine(uint16_t* sendLen)
     
     
         if (res == SEND_REQUIRED_FILE)
         if (res == SEND_REQUIRED_FILE)
         {
         {
-
-            HTTP_SendLog();
-            return 0;
+        	HTTPTypeAnswer = UPS_HISTORY_ANSWER;
+        	return sendBuf;
         }
         }
         else if (res == SEND_REQUIRED_YES) 
         else if (res == SEND_REQUIRED_YES) 
         {
         {
@@ -1792,6 +1851,9 @@ char* AuthenticatedTrueRoutine(uint16_t* sendLen)
     /* Сброс настроек и сохранине */
     /* Сброс настроек и сохранине */
     else if (strncmp(receiveBuf, "GET /reset.cgi", 14) == 0)
     else if (strncmp(receiveBuf, "GET /reset.cgi", 14) == 0)
     {
     {
+#ifdef HARDWARE_BT6706
+  telnet_act = false;
+#endif
         HTTP_ResetSettings();
         HTTP_ResetSettings();
         HTTP_SaveSettings();
         HTTP_SaveSettings();
     
     
@@ -1802,11 +1864,17 @@ char* AuthenticatedTrueRoutine(uint16_t* sendLen)
     /* Перезагрузка контроллера */
     /* Перезагрузка контроллера */
     else if (strncmp(receiveBuf, "GET /reboot.cgi", 15) == 0)
     else if (strncmp(receiveBuf, "GET /reboot.cgi", 15) == 0)
     {
     {
+#ifdef HARDWARE_BT6706
+    	telnet_act = false;
+#endif
         HTTP_Reboot();
         HTTP_Reboot();
     }
     }
     /* Подтверждение новых сетевых настроек */
     /* Подтверждение новых сетевых настроек */
     else if (strncmp(receiveBuf, "GET /confirm.cgi", 16) == 0)
     else if (strncmp(receiveBuf, "GET /confirm.cgi", 16) == 0)
     {
     {
+#ifdef HARDWARE_BT6706
+    	  telnet_act = false;
+#endif
         SetWebReinitFlag(false);
         SetWebReinitFlag(false);
         SetConfirmWebParamsFlag();
         SetConfirmWebParamsFlag();
     
     
@@ -1826,12 +1894,6 @@ char* AuthenticatedTrueRoutine(uint16_t* sendLen)
         HTTP_ChangeUserPwd(receiveBuf, sendBuf, receivedBufLen, sendLen);
         HTTP_ChangeUserPwd(receiveBuf, sendBuf, receivedBufLen, sendLen);
         return sendBuf;
         return sendBuf;
     }
     }
-    // На производстве
-    else if (strncmp(receiveBuf, "GET /setProdate.cgi", 19) == 0)
-    {
-        HTTP_Prodate(receiveBuf, sendBuf, receivedBufLen, sendLen);
-        return sendBuf;
-    }
     /* Check common GET request */
     /* Check common GET request */
 	  else if (strncmp(receiveBuf, "GET", 3) == 0) {
 	  else if (strncmp(receiveBuf, "GET", 3) == 0) {
 		  char filename[MAX_FILENAME_LEN];
 		  char filename[MAX_FILENAME_LEN];
@@ -1862,79 +1924,6 @@ char* AuthenticatedTrueRoutine(uint16_t* sendLen)
     return 0;
     return 0;
 }
 }
 
 
-/**
-  * @brief Send callback for log file transfer (messages as is, not ordered)
-  */
-void HTTP_SendHistory(void)
-{
-	struct http_state *hs;
-    uint32_t nbytes = 0;
-    static bool start = true;
-
-    memset(logFileBuf, 0, FILE_BUF_MAX_LEN);
-    
-    if (log_ptr + FILE_BUF_MAX_LEN <= log_size) {
-        nbytes = History_GetData(log_ptr, logFileBuf, FILE_BUF_MAX_LEN, start);
-    }
-    else if (log_ptr < log_size) {
-        nbytes = History_GetData(log_ptr, logFileBuf, (log_size - log_ptr), start);
-    }
-    else {
-        nbytes = 0;
-    }
-    log_ptr += nbytes;
-
-    start = false;
-    
-    if (nbytes == 0) {
-        // File transfer finished. 
-        start = true;
-        // Clear file transfer in progress flag 
-        fLogTransInprog = false;
-        return;
-    }
-    hs->file = logFileBuf;
-	 hs->left = nbytes;
-	// send_data(pcb, hs);
- //  SSL_SendFrames(&ssl, logFileBuf, nbytes);
-    HTTP_SendHistory();
-}
-
-/**
-  * @brief Sent callback for log file transfer (messages as is, not ordered)
-  */
-void HTTP_SendLog(void)
-{
-    uint32_t nbytes = 0;
-    static bool start = true;
-
-	memset(logFileBuf, 0, FILE_BUF_MAX_LEN);
-    if (log_ptr + FILE_BUF_MAX_LEN_LOG <= log_size) {
-        nbytes = LOG_GetData(log_ptr, logFileBuf, FILE_BUF_MAX_LEN_LOG, start);
-    }
-    else if (log_ptr < log_size) {
-        nbytes = LOG_GetData(log_ptr, logFileBuf, (log_size - log_ptr), start);
-    }
-    else {
-        nbytes = 0;
-    }
-    log_ptr += nbytes;
-
-    start = false;
-    if (nbytes == 0) {
-        // File transfer finished. 
-        start = true;
-        // Clear file transfer in progress flag 
-        fLogTransInprog = false;
-        return;
-    }
-
- //   SSL_SendFrames(&ssl, logFileBuf, nbytes);
-    HTTP_SendLog();
-  
-    return;
-}
-
 /**
 /**
   * @brief  sends file from flash FS
   * @brief  sends file from flash FS
   * @param  filename: pointer to the file name to send
   * @param  filename: pointer to the file name to send

+ 6 - 47
modules/HTTP_Server/http_server.h

@@ -11,27 +11,11 @@
 
 
 typedef enum
 typedef enum
 {
 {
-  SSL_ACCEPT = 0,
-  SSL_ERROR,
-  SSL_CRITICAL_ERROR,
-  SSL_HANDSHAKE,
-  SSL_READ,
-  SSL_PROCESSING,
-  SSL_CLOSE,
-  SSL_WRITE,
-  SSL_WRITE_OK,
-  SSL_WRITE_ERROR,
-  
-} SSL_SERVER_STATE;
+	COMMON_ANSWER = 0,
+	HISTORY_ANSWER,
+	UPS_HISTORY_ANSWER
 
 
-typedef enum
-{
-  SET_PAGE_IDLE = 0,
-  SET_PAGE_PAGE1,
-  SET_PAGE_PAGE2,
-  SET_PAGE_PAGE3,
-  SET_PAGE_PAGE4,
-} SET_PAGE_t;
+} REQ_TYPE_SEND_t;
 
 
 typedef enum
 typedef enum
 {
 {
@@ -57,10 +41,6 @@ static err_t http_accept(void *arg, struct tcp_pcb *pcb, err_t err);
 static err_t http_recv(void *arg, struct tcp_pcb *pcb,  struct pbuf *p, err_t err);
 static err_t http_recv(void *arg, struct tcp_pcb *pcb,  struct pbuf *p, err_t err);
 
 
 
 
-
-
-void http_server_netconn_init();
-
 /**
 /**
   * @brief  Выводим запросы в консоль
   * @brief  Выводим запросы в консоль
   */
   */
@@ -142,41 +122,20 @@ void ClearParamString(char *inBuf);
 void HTTP_ReplaceSimbol(char *str, char sim1, char sim2);
 void HTTP_ReplaceSimbol(char *str, char sim1, char sim2);
 
 
 
 
-// -----------------------------------------------------------------------------
-//
-//
-//  SSL тесты
-//
-//
-// -----------------------------------------------------------------------------
 
 
 #ifdef __cplusplus
 #ifdef __cplusplus
  extern "C" {
  extern "C" {
 #endif
 #endif
 
 
 
 
-/* Exported types ------------------------------------------------------------*/
-typedef struct
-{
-  uint32_t State;
-}rng_state;
-
 void Cockie(void);
 void Cockie(void);
 void getAuthenticatedState(void);
 void getAuthenticatedState(void);
-void ssl_server(void *pvParameters);
 
 
 
 
-int RandVal(void* arg);
-void HTTP_SendHistory(void);
-void HTTP_SendLog(void);
-void HTTPS_Init();
-int SSL_ReadRoutine(mbedtls_ssl_context *ssl, unsigned char* recvBuf);
-char* SSL_ProcessingRoutine(uint16_t* sendLen);
-SSL_SERVER_STATE SSL_WriteRoutine(mbedtls_ssl_context *ssl, char *data, int datalen);
+char* HTTP_SendHistory(uint16_t *Len);
+char* HTTP_SendLog(uint16_t *Len);
 char* AuthenticatedFalseRoutine(uint16_t* sendLen);
 char* AuthenticatedFalseRoutine(uint16_t* sendLen);
 char* AuthenticatedTrueRoutine(uint16_t* sendLen);
 char* AuthenticatedTrueRoutine(uint16_t* sendLen);
-SSL_SERVER_STATE SSL_SendFrames(mbedtls_ssl_context *ssl, char *data, int datalen);
-SSL_SERVER_STATE SSL_Write(mbedtls_ssl_context *ssl, char *data, int datalen);
 
 
 #ifdef __cplusplus
 #ifdef __cplusplus
 }
 }

+ 11 - 97
modules/HTTP_Server/my_ssl_server.c

@@ -16,7 +16,7 @@
 #include "parameters.h"
 #include "parameters.h"
 #include "urlcode.h"
 #include "urlcode.h"
 #include "trap_params.h"
 #include "trap_params.h"
-#include "fsdata.c"
+#include "bt6702_fs/fsdata.c"
 #include "settings_api.h"
 #include "settings_api.h"
 #include "netconf.h"
 #include "netconf.h"
 #include "common_config.h"
 #include "common_config.h"
@@ -165,7 +165,6 @@ static err_t http_recv(void *arg, struct tcp_pcb *pcb,  struct pbuf *p, err_t er
 {
 {
 	  char *data;
 	  char *data;
 	  struct http_state *hs;
 	  struct http_state *hs;
-	  struct fs_file file = {0, 0};
 	  char buf[150];
 	  char buf[150];
 
 
 	  hs = arg;
 	  hs = arg;
@@ -181,7 +180,7 @@ static err_t http_recv(void *arg, struct tcp_pcb *pcb,  struct pbuf *p, err_t er
 		  memcpy(receiveBuf, p->payload , receivedBufLen);
 		  memcpy(receiveBuf, p->payload , receivedBufLen);
 
 
 	      // На производстве
 	      // На производстве
-		  if (strncmp(data, "GET /setProdate.cgi", 19) == 0 && strncmp(sSettings.sFlags.testState, "T2OK", 4) == 0)
+		  if (strncmp(data, "GET /setProdate.cgi", 19) == 0 && strncmp(sSettings.sFlags.testState, "T2OK", 4))
 		  {
 		  {
 	        HTTP_Prodate(receiveBuf, sendBuf, receivedBufLen, &sendBufLoadLen);
 	        HTTP_Prodate(receiveBuf, sendBuf, receivedBufLen, &sendBufLoadLen);
 
 
@@ -487,7 +486,6 @@ static int fs_open(char *name, struct fs_file *file)
   */
   */
 void HTTP_Init()
 void HTTP_Init()
 {
 {
-
     struct tcp_pcb *pcb;
     struct tcp_pcb *pcb;
 
 
     pcb = tcp_new();
     pcb = tcp_new();
@@ -555,9 +553,8 @@ int HTTP_InfoPage(char *bufIn, char *bufOut, uint16_t lenBufIn, uint16_t *lenBuf
 
 
 int HTTP_HistoryPage(char *bufIn, char *bufOut, uint16_t lenBufIn, uint16_t *lenBufOut)
 int HTTP_HistoryPage(char *bufIn, char *bufOut, uint16_t lenBufIn, uint16_t *lenBufOut)
 {
 {
-  uint8_t i, valueLen = 0;
+  uint8_t valueLen = 0;
   char value[20];
   char value[20];
-  uint32_t nbytes = 0;
 
 
   (void)lenBufIn;
   (void)lenBufIn;
 
 
@@ -609,9 +606,8 @@ int HTTP_HistoryPage(char *bufIn, char *bufOut, uint16_t lenBufIn, uint16_t *len
 
 
 int HTTP_UpsHistoryPage(char *bufIn, char *bufOut, uint16_t lenBufIn, uint16_t *lenBufOut)
 int HTTP_UpsHistoryPage(char *bufIn, char *bufOut, uint16_t lenBufIn, uint16_t *lenBufOut)
 {
 {
-  uint8_t i, valueLen = 0;
+  uint8_t valueLen = 0;
   char value[20];
   char value[20];
-  uint32_t nbytes = 0;
 
 
   (void)lenBufIn;
   (void)lenBufIn;
 
 
@@ -1005,13 +1001,6 @@ void HTTP_UPSshutdown(char *bufIn, char *bufOut, uint16_t lenBufIn, uint16_t *le
   */
   */
 void HTTP_ConfirmBootPwd(char *bufIn, char *bufOut, uint16_t lenBufIn, uint16_t *lenBufOut)
 void HTTP_ConfirmBootPwd(char *bufIn, char *bufOut, uint16_t lenBufIn, uint16_t *lenBufOut)
 {
 {
-  char tempStr[50];
-  strncpy(tempStr, bufIn, 50);
-  char value[20];
-  uint8_t valueLen;
-
-  memset(value, 0, 20);
-
   /* Запускаем задачу отложенной перезагрузки. Контроллер должен успеть
   /* Запускаем задачу отложенной перезагрузки. Контроллер должен успеть
      отправить ответ серверу о статусе пароля */
      отправить ответ серверу о статусе пароля */
   HTTP_StartResetTask(true);
   HTTP_StartResetTask(true);
@@ -1032,7 +1021,7 @@ int HTTP_ConfirmWebPwd(char *bufIn, char *bufOut, uint16_t lenBufIn, uint16_t *l
 	  char tempStr[50];
 	  char tempStr[50];
 	  char login[20];
 	  char login[20];
 	  char password[20];
 	  char password[20];
-	  uint8_t valueLen, user_id;
+	  uint8_t valueLen, user_id = 0xff;
 	  char *strPtr = 0;
 	  char *strPtr = 0;
 	  char WebPassword[MAX_WEB_PASSWD_LEN];
 	  char WebPassword[MAX_WEB_PASSWD_LEN];
 	  char WebLogin[MAX_WEB_LOGIN_LEN];
 	  char WebLogin[MAX_WEB_LOGIN_LEN];
@@ -1261,6 +1250,7 @@ uint8_t GetCookieValue(char *inStr, char *paramName, char *paramValue, uint8_t *
 {
 {
   char *beginValue = 0;
   char *beginValue = 0;
   char *endValue = 0;
   char *endValue = 0;
+  char *endValueTemp = 0;
   int  len = 0;
   int  len = 0;
   char *strPtr = 0;
   char *strPtr = 0;
 
 
@@ -1270,6 +1260,9 @@ uint8_t GetCookieValue(char *inStr, char *paramName, char *paramValue, uint8_t *
   {
   {
     beginValue = strpbrk(strPtr,"=");
     beginValue = strpbrk(strPtr,"=");
     endValue = strpbrk(strPtr,";");
     endValue = strpbrk(strPtr,";");
+    endValueTemp = strpbrk(strPtr,"\r");
+    if(endValueTemp != 0 && endValueTemp < endValue)
+       endValue = endValueTemp;
     if (endValue == 0)
     if (endValue == 0)
       endValue = strpbrk(strPtr,"\n");
       endValue = strpbrk(strPtr,"\n");
     len = endValue - beginValue - 1;
     len = endValue - beginValue - 1;
@@ -1543,18 +1536,11 @@ struct fs_file file = {0, 0};
 //
 //
 void Cockie(void)
 void Cockie(void)
 {
 {
-  char* endPtr;
-  uint32_t len;
   receiveBuf[receivedBufLen] = '\0';
   receiveBuf[receivedBufLen] = '\0';
   //printf("receive %s \r\n", receiveBuf);
   //printf("receive %s \r\n", receiveBuf);
   // Get cookie "uname" value
   // Get cookie "uname" value
   memset(CookieBuf, 0, sizeof(CookieBuf));
   memset(CookieBuf, 0, sizeof(CookieBuf));
   CookiePtr = strstr(receiveBuf, "uname=");
   CookiePtr = strstr(receiveBuf, "uname=");
-  endPtr = strstr(CookiePtr, "\r");
-  len =  (endPtr - CookiePtr)+2;
-  if(len < 50)
-	strncpy(CookieBuf, CookiePtr,len);
-  else
 	strncpy(CookieBuf, CookiePtr, 50);
 	strncpy(CookieBuf, CookiePtr, 50);
 
 
   //printf("********CookieBuf1= %s\r\n", CookieBuf);
   //printf("********CookieBuf1= %s\r\n", CookieBuf);
@@ -1566,10 +1552,7 @@ void Cockie(void)
   memset(CookieBuf, 0, sizeof(CookieBuf));
   memset(CookieBuf, 0, sizeof(CookieBuf));
   // Get cookie "id" value
   // Get cookie "id" value
   CookiePtr = strstr(receiveBuf, " id=");
   CookiePtr = strstr(receiveBuf, " id=");
-  if(len < 50)
- 	strncpy(CookieBuf, CookiePtr,len);
-  else
-    strncpy(CookieBuf, CookiePtr, 50);
+  strncpy(CookieBuf, CookiePtr, 50);
 
 
   //printf("********CookieBuf1= %s\r\n", CookieBuf);
   //printf("********CookieBuf1= %s\r\n", CookieBuf);
   memset(id, 0, MAX_WEB_COOKIE_LEN);
   memset(id, 0, MAX_WEB_COOKIE_LEN);
@@ -1997,69 +1980,7 @@ char* AuthenticatedTrueRoutine(uint16_t* sendLen)
     char *DataOffset;
     char *DataOffset;
     char *ptr;
     char *ptr;
 
 
-  /*  if (strncmp(receiveBuf, "GET /main.css", 13) == 0) // +
-    {
-        fs_open("/main.css", &file);
-        *sendLen = file.len;
-        return file.data;
-    }
-    else if (strncmp(receiveBuf, "GET /rotek.png", 14) == 0) // +
-    {
-        fs_open("/rotek.png", &file);
-        *sendLen = file.len;
-        return file.data;
-    }
-    else if (strncmp(receiveBuf, "GET /favicon.ico", 16) == 0) // ?
-    {
-        fs_open("/favicon.ico", &file);
-        *sendLen = file.len;
-        return file.data;
-    }
-    else if (strncmp(receiveBuf, "GET /main.js", 12) == 0) // +
-    {
-        fs_open("/main.js", &file);
-        *sendLen = file.len;
-        return file.data;
-    }
-    else if (strncmp(receiveBuf, "GET /role.js", 12) == 0)
-    {
-        fs_open("/role.js", &file);
-        *sendLen = file.len;
-        return file.data;
-    }
-    else if (strncmp(receiveBuf, "GET /settings.html", 18) == 0) // +
-    {
-        HTTP_UpdateUserLoginTime(user_id);
-        if (seclevel == 0)
-            fs_open("/settings.html", &file);
-        else
-            fs_open("/index.html", &file);
-
-        *sendLen = file.len;
-        return file.data;
-    }
-    else if (strncmp(receiveBuf, "GET /info.html", 14) == 0) // +
-    {
-        HTTP_UpdateUserLoginTime(user_id);
-        fs_open("/info.html", &file);
-        *sendLen = file.len;
-        return file.data;
-    }
-    else if (strncmp(receiveBuf, "GET /history.html", 17) == 0)
-    {
-        HTTP_UpdateUserLoginTime(user_id);
-        fs_open("/history.html", &file);
-        *sendLen = file.len;
-        return file.data;
-    }
-    else if (strncmp(receiveBuf, "GET /ups_history.html", 21) == 0)
-    {
-        HTTP_UpdateUserLoginTime(user_id);
-        fs_open("/ups_history.html", &file);
-        *sendLen = file.len;
-        return file.data;
-    }
-    else*/ if (strncmp(receiveBuf, "GET /getJson.cgi", 16) == 0) // +
+    if (strncmp(receiveBuf, "GET /getJson.cgi", 16) == 0) // +
     {
     {
         HTTP_GetParamsPage1(sendBuf);
         HTTP_GetParamsPage1(sendBuf);
         *sendLen = strlen(sendBuf);
         *sendLen = strlen(sendBuf);
@@ -2563,14 +2484,8 @@ char* send_file(char *filename, char *pnonmatch,  struct fs_file *file, uint16_t
         DBG printf(sendBuf);
         DBG printf(sendBuf);
         *Len = strlen(sendBuf);
         *Len = strlen(sendBuf);
         return sendBuf;
         return sendBuf;
-        //hs->file = sendBuf;
-        //hs->left = strlen(sendBuf);
     }
     }
     else {
     else {
-        /* Send file */
-        //DBG printf("%s\r\n\r\n", filename);
-        //hs->file = file->data;
-        //hs->left = file->len;
     	*Len = file->len;
     	*Len = file->len;
     	return file->data;
     	return file->data;
     }
     }
@@ -2654,7 +2569,6 @@ bool GetFileName(char *inStr, char *fileName, uint8_t *fileNameLen)
   }
   }
 }
 }
 
 
-
 #endif
 #endif
 
 
 
 

+ 24 - 2
modules/HTTP_Server/web_params_api.c

@@ -204,6 +204,17 @@ void HTTP_GetSettings(char *buf)
   strcat(buf, "\",\"dhcp\":");
   strcat(buf, "\",\"dhcp\":");
   strncat(buf, str, len);
   strncat(buf, str, len);
 
 
+#ifdef HARDWARE_BT6706
+  GetTelnetPortStr(str, &len);
+  strcat(buf, ",\"tn_port\":\"");
+  strncat(buf, str, len);
+
+  GetTelnetEnableStateStr(str, &len);
+  strcat(buf, "\",\"tn_enabled\":");
+  strncat(buf, str, len);
+#endif
+
+#ifdef HARDWARE_BT6702
   GetAuthEnableStateStr(str, &len);
   GetAuthEnableStateStr(str, &len);
   strcat(buf, ",\"swauth\":");
   strcat(buf, ",\"swauth\":");
   strncat(buf, str, len);
   strncat(buf, str, len);
@@ -228,6 +239,7 @@ void HTTP_GetSettings(char *buf)
   GetRDSEnableStateStr(str, &len);
   GetRDSEnableStateStr(str, &len);
   strcat(buf, "\",\"rs_enabled\":");
   strcat(buf, "\",\"rs_enabled\":");
   strncat(buf, str, len);
   strncat(buf, str, len);
+#endif
 
 
   /* Параметры даты и времени */
   /* Параметры даты и времени */
   GetDateStr(str, &len);
   GetDateStr(str, &len);
@@ -451,7 +463,12 @@ void HTTP_SaveSettings(void)
 //  taskENTER_CRITICAL();
 //  taskENTER_CRITICAL();
   
   
   SETTINGS_Save();
   SETTINGS_Save();
-  
+
+#ifdef HARDWARE_BT6706
+	  if(telnet_act)
+		  log_event_data(LOG_SETTING_SAVE, name_login_telnet);
+	  else
+#endif
   log_event_data(LOG_SETTING_SAVE, name_login);
   log_event_data(LOG_SETTING_SAVE, name_login);
 
 
 //  taskEXIT_CRITICAL();
 //  taskEXIT_CRITICAL();
@@ -498,7 +515,12 @@ void vTaskReboot(void * pvParameters)
 	if (mode)
 	if (mode)
 	{
 	{
 	  SNMP_SendUserTrap(FW_VERSION_UPDATE);
 	  SNMP_SendUserTrap(FW_VERSION_UPDATE);
-	  log_event_data(LOG_UPDATE_SOFT, name_login);
+#ifdef HARDWARE_BT6706
+	  if(telnet_act)
+		  log_event_data(LOG_UPDATE_SOFT, name_login_telnet);
+	  else
+#endif
+		  log_event_data(LOG_UPDATE_SOFT, name_login);
 	  SetLoadMode();
 	  SetLoadMode();
 	  HTTP_SaveSettings();
 	  HTTP_SaveSettings();
       vTaskDelay(2000);
       vTaskDelay(2000);

+ 31 - 7
modules/Makefile

@@ -1,9 +1,9 @@
 TARGET := stm32$(HARDWARE)
 TARGET := stm32$(HARDWARE)
 
 
 
 
-#ifeq ($(DEBUG), 1)
+ifeq ($(DEBUG), 1)
 	CFLAGS += -DDEBUG -g
 	CFLAGS += -DDEBUG -g
-#endif
+endif
 
 
 ifeq ($(MAC),)
 ifeq ($(MAC),)
 	#Print default MAC
 	#Print default MAC
@@ -47,7 +47,9 @@ INCLUDES += -Icommon
 INCLUDES += -Imonitor
 INCLUDES += -Imonitor
 INCLUDES += -Ilog
 INCLUDES += -Ilog
 INCLUDES += -Itesting
 INCLUDES += -Itesting
+ifeq ($(HARDWARE), bt6702)
 INCLUDES += -Iradius
 INCLUDES += -Iradius
+endif
 INCLUDES += -Imbedtls_api
 INCLUDES += -Imbedtls_api
 CSRC += $(wildcard leds/*.c)
 CSRC += $(wildcard leds/*.c)
 CSRC += $(wildcard buttons/*.c)
 CSRC += $(wildcard buttons/*.c)
@@ -58,7 +60,9 @@ CSRC += $(wildcard common/*.c)
 CSRC += $(wildcard monitor/*.c)
 CSRC += $(wildcard monitor/*.c)
 CSRC += $(wildcard log/*.c)
 CSRC += $(wildcard log/*.c)
 CSRC += $(wildcard testing/*.c)
 CSRC += $(wildcard testing/*.c)
+ifeq ($(HARDWARE), bt6702)
 CSRC += $(wildcard radius/*.c)
 CSRC += $(wildcard radius/*.c)
+endif
 CSRC += $(wildcard mbedtls_api/*.c)
 CSRC += $(wildcard mbedtls_api/*.c)
 
 
 CFLAGS += -DOS_FREERTOS
 CFLAGS += -DOS_FREERTOS
@@ -90,8 +94,14 @@ CSRC += $(wildcard ../thirdparty/FreeRTOS/portable/MemMang/heap_4.c)
     INCLUDES += -IEthernet
     INCLUDES += -IEthernet
  # INCLUDES += -I../stm32/stm32f4x7_ethernet 
  # INCLUDES += -I../stm32/stm32f4x7_ethernet 
  	INCLUDES += -ISTM32F4x7_ETH_Driver
  	INCLUDES += -ISTM32F4x7_ETH_Driver
-   CSRC += $(wildcard HTTP_Server/http_server.c)
-    CSRC += $(wildcard HTTP_Server/my_ssl_server.c)
+ifeq ($(HARDWARE), bt6702) 	
+   CSRC += $(wildcard HTTP_Server/my_ssl_server.c)
+endif
+ifeq ($(HARDWARE), bt6706)  
+      INCLUDES += -ITelnet_Server 
+      CSRC += $(wildcard HTTP_Server/http_server.c)
+      CSRC += $(wildcard Telnet_Server/*.c)
+endif
     CSRC += $(wildcard HTTP_Server/trap_params.c)
     CSRC += $(wildcard HTTP_Server/trap_params.c)
     CSRC += $(wildcard HTTP_Server/web_params_api.c)
     CSRC += $(wildcard HTTP_Server/web_params_api.c)
     CSRC += $(wildcard ../thirdparty/lwip/src/*.c)
     CSRC += $(wildcard ../thirdparty/lwip/src/*.c)
@@ -103,6 +113,7 @@ CSRC += $(wildcard ../thirdparty/FreeRTOS/portable/MemMang/heap_4.c)
 #    CSRC += $(wildcard ../thirdparty/lwip/src/netif/ppp/*.c)
 #    CSRC += $(wildcard ../thirdparty/lwip/src/netif/ppp/*.c)
     CSRC += $(wildcard ../thirdparty/lwip/port/FreeRTOS/*.c)
     CSRC += $(wildcard ../thirdparty/lwip/port/FreeRTOS/*.c)
     CSRC += $(wildcard Ethernet/*.c)
     CSRC += $(wildcard Ethernet/*.c)
+
   #  CSRC += $(wildcard ../stm32/stm32f4x7_ethernet/*.c)
   #  CSRC += $(wildcard ../stm32/stm32f4x7_ethernet/*.c)
   	CSRC += $(wildcard STM32F4x7_ETH_Driver/*.c)
   	CSRC += $(wildcard STM32F4x7_ETH_Driver/*.c)
     
     
@@ -118,6 +129,7 @@ INCLUDES += -I../thirdparty/mbedTLS/include/
 
 
 CSRC += $(wildcard ../thirdparty/mbedTLS/library/*.c)
 CSRC += $(wildcard ../thirdparty/mbedTLS/library/*.c)
 
 
+ifeq ($(HARDWARE), bt6702)
 #RADDIUS_SERVER
 #RADDIUS_SERVER
 
 
 INCLUDES += -I../thirdparty/FreeRadius/
 INCLUDES += -I../thirdparty/FreeRadius/
@@ -125,30 +137,42 @@ INCLUDES += -I../thirdparty/FreeRadius/include/
 INCLUDES += -I../thirdparty/FreeRadius/lib/
 INCLUDES += -I../thirdparty/FreeRadius/lib/
 
 
 CSRC += $(wildcard ../thirdparty/FreeRadius/lib/*.c)
 CSRC += $(wildcard ../thirdparty/FreeRadius/lib/*.c)
-    
+endif
     
     
 CFLAGS += -DUSE_STDPERIPH_DRIVER -DSTM32F40_41xxx -DLOG_ENABLE -DMBEDTLS_CONFIG_FILE='<mbedtls_config.h>'
 CFLAGS += -DUSE_STDPERIPH_DRIVER -DSTM32F40_41xxx -DLOG_ENABLE -DMBEDTLS_CONFIG_FILE='<mbedtls_config.h>'
 
 
+ifeq ($(HARDWARE), bt6702)
 BUILDDIR = ../build/bt6702/$(TARGET)
 BUILDDIR = ../build/bt6702/$(TARGET)
+endif
+
+ifeq ($(HARDWARE), bt6706)
+BUILDDIR = ../build/bt6706/$(TARGET)
+endif
 
 
 FW_FLASH_START = $(shell awk '/USER_FLASH_FIRST_PAGE_ADDRESS/{print $$3}' ../config/common_config.h )
 FW_FLASH_START = $(shell awk '/USER_FLASH_FIRST_PAGE_ADDRESS/{print $$3}' ../config/common_config.h )
 FW_FLASH_CRC = $(shell awk '/USER_FLASH_CRC_ADDRESS/{print $$3}' ../config/common_config.h )
 FW_FLASH_CRC = $(shell awk '/USER_FLASH_CRC_ADDRESS/{print $$3}' ../config/common_config.h )
 
 
+ifeq ($(HARDWARE), bt6702)
 FW_NAME = BT_6702xx
 FW_NAME = BT_6702xx
+endif
+
+ifeq ($(HARDWARE), bt6706)
+FW_NAME = BT_6706xx
+endif
 
 
 -include ../Makefile.inc.stm32
 -include ../Makefile.inc.stm32
 
 
 #Building Web UI FS
 #Building Web UI FS
 ifeq ($(HARDWARE), bt6706)
 ifeq ($(HARDWARE), bt6706)
 	WUI_DIR = ../web_interface/dist/wui-6
 	WUI_DIR = ../web_interface/dist/wui-6
+	FSDATA_DIR = ./HTTP_Server/bt6706_fs
 endif
 endif
 
 
 ifeq ($(HARDWARE), bt6702)
 ifeq ($(HARDWARE), bt6702)
 	WUI_DIR = ../web_interface/dist/wui
 	WUI_DIR = ../web_interface/dist/wui
+	FSDATA_DIR = ./HTTP_Server/bt6702_fs
 endif
 endif
 
 
-FSDATA_DIR = ./HTTP_Server
-
 $(FSDATA_DIR)/fsdata.c: $(WUI_DIR)/*
 $(FSDATA_DIR)/fsdata.c: $(WUI_DIR)/*
 	@../docs/makefsdata.pl $(FSDATA_DIR) $(WUI_DIR)
 	@../docs/makefsdata.pl $(FSDATA_DIR) $(WUI_DIR)
 
 

+ 65 - 45
modules/MegaTec/megatec.c

@@ -139,21 +139,48 @@ bool ups_megatec_rx_pdu(void)
 		ups_pdu.data[ups_pdu.len++] = c;
 		ups_pdu.data[ups_pdu.len++] = c;
 	}
 	}
 
 
+	DBG printf("UPS raw data: %s\r\n", ups_pdu.data);
+	DBG printf("UPS raw data len: %d\r\n", ups_pdu.len);
+
 	if (ups_pdu.len == 0)
 	if (ups_pdu.len == 0)
 		return false;
 		return false;
 
 
 	return true;
 	return true;
 }
 }
 
 
+int8_t get_ups_param(char *buf, char *param, char *val)
+{
+	char *endValue;
+	int8_t param_len;
+
+	memset(val, 0, 10);
+	endValue = strpbrk(buf, param);
+	if(endValue != NULL){
+		param_len = endValue - buf;
+		if(param_len < 10){
+			strncpy(val, buf, param_len);
+		}
+		else{
+			param_len = 0;
+		}
+	}
+	else{
+		param_len = 0;
+	}
+	DBG printf("UPS parameter: %s\r\n", val);
+
+	return param_len;
+}
+
 void ups_status_response(char *data)
 void ups_status_response(char *data)
 {
 {
 	uint8_t i;
 	uint8_t i;
-	char *endValue;
 	char value[10];
 	char value[10];
 	uint8_t len = 0;
 	uint8_t len = 0;
+	DBG printf("ups_status_response: %s\r\n", data);
 	if(data[0] != '(')
 	if(data[0] != '(')
 		return;
 		return;
-
+	DBG printf("ups_status_parser_start\r\n");
 	UPS.Present = true;
 	UPS.Present = true;
 	UPS.Flag_Present = true;
 	UPS.Flag_Present = true;
 	UPS.cnt_err_ups = 0;
 	UPS.cnt_err_ups = 0;
@@ -165,66 +192,54 @@ void ups_status_response(char *data)
 
 
 	data++;
 	data++;
 
 
-	memset(value, 0, 10);
-	endValue = strpbrk(data," ");
-	len = endValue - data;
-	strncpy(value, data, len);
+	DBG printf("UPS ups_status_parser_startr: %s\r\n", data);
+
+	len = get_ups_param(data, " ", value);
 	data += (len + 1);
 	data += (len + 1);
-	UPS.VAC_in = atof(value);
+	if(len > 0)
+		UPS.VAC_in = atof(value);
 
 
 	//TODO
 	//TODO
-	memset(value, 0, 10);
-	endValue = strpbrk(data," ");
-	len = endValue - data;
-	strncpy(value, data, len);
+	len = get_ups_param(data, " ", value);
 	data += (len + 1);
 	data += (len + 1);
 
 
-	memset(value, 0, 10);
-	endValue = strpbrk(data," ");
-	len = endValue - data;
-	strncpy(value, data, len);
+	len = get_ups_param(data, " ", value);
 	data += (len + 1);
 	data += (len + 1);
-	UPS.VAC_out = atof(value);
+	if(len > 0)
+		UPS.VAC_out = atof(value);
 
 
-	memset(value, 0, 10);
-	endValue = strpbrk(data," ");
-	len = endValue - data;
-	strncpy(value, data, len);
+	len = get_ups_param(data, " ", value);
 	data += (len + 1);
 	data += (len + 1);
-	UPS.Load = atoi(value);
+	if(len > 0)
+		UPS.Load = atoi(value);
 
 
-	memset(value, 0, 10);
-	endValue = strpbrk(data," ");
-	len = endValue - data;
-	strncpy(value, data, len);
+	len = get_ups_param(data, " ", value);
 	data += (len + 1);
 	data += (len + 1);
-	UPS.Freq_in = atof(value);
+	if(len > 0)
+		UPS.Freq_in = atof(value);
 
 
 	//TODO
 	//TODO
-	memset(value, 0, 10);
-	endValue = strpbrk(data," ");
-	len = endValue - data;
-	strncpy(value, data, len);
+	len = get_ups_param(data, " ", value);
 	data += (len + 1);
 	data += (len + 1);
-	UPS.SOC = 100*((atof(value)) - 1.6)/0.7;
+	if(len > 0)
+		UPS.SOC = 100*((atof(value)) - 1.6)/0.7;
 
 
-	memset(value, 0, 10);
-	endValue = strpbrk(data," ");
-	len = endValue - data;
-	strncpy(value, data, len);
+	len = get_ups_param(data, " ", value);
 	data += (len + 1);
 	data += (len + 1);
-	UPS.Temp = atof(value);
+	if(len > 0)
+		UPS.Temp = atof(value);
 
 
-	memset(value, 0, 10);
-	endValue = strpbrk(data,"\r");
-	len = endValue - data;
-	strncpy(value, data, len);
-	uint8_t stat = 0;
-	for(i = 0; i < len; i ++)
-	{
-		stat |= (value[i] - 0x30) << (7-i);
+
+	len = get_ups_param(data, "\r", value);
+	data += (len + 1);
+	if(len > 0){
+		uint8_t stat = 0;
+		for(i = 0; i < len; i ++)
+		{
+			stat |= (value[i] - 0x30) << (7-i);
+		}
+		UPS.Status = stat;
 	}
 	}
-	UPS.Status = stat;
 }
 }
 
 
 void ups_info_response(char *data)
 void ups_info_response(char *data)
@@ -283,12 +298,17 @@ void ups_remain_time_response(char *data)
 	if(data[0] != '(')
 	if(data[0] != '(')
 		return;
 		return;
 
 
+	DBG printf("ups_remain_time_response: %s\r\n", data);
+
 	UPS.Present = true;
 	UPS.Present = true;
 	UPS.Flag_Present = true;
 	UPS.Flag_Present = true;
 	UPS.cnt_err_ups = 0;
 	UPS.cnt_err_ups = 0;
 
 
 	data++;
 	data++;
 
 
+	if(strlen(data) > 5)
+		return;
+
 	memset(value, 0, 10);
 	memset(value, 0, 10);
 	strcpy(value, data);
 	strcpy(value, data);
 	if((UPS.Status >> 7) & 0x01)
 	if((UPS.Status >> 7) & 0x01)

+ 1990 - 0
modules/Telnet_Server/CLI_Commands.c

@@ -0,0 +1,1990 @@
+/*
+ * CLI_Commands.c
+ *
+ *  Created on: 28.11.2017
+ *      Author: balbekova
+ */
+
+/* FreeRTOS includes. */
+#include "FreeRTOS.h"
+#include "task.h"
+
+/* Standard includes. */
+#include <stdint.h>
+#ifdef PRINTF_STDLIB
+#include <stdio.h>
+#endif
+#ifdef PRINTF_CUSTOM
+#include "tinystdio.h"
+#endif
+#include <string.h>
+#include <stdlib.h>
+
+/* FreeRTOS+CLI includes. */
+#include "FreeRTOS_CLI.h"
+
+#include "snmp_api.h"
+#include "trap_api.h"
+#include "sntp_api.h"
+#include "lwip/ip_addr.h"
+#include "settings_api.h"
+#include "log.h"
+#include "megatec.h"
+#include "web_params_api.h"
+#include "hal.h"
+#include "parameters.h"
+#include "CLI_Commands.h"
+#include "CLI_Parameters.h"
+#include "telnet_server.h"
+#include "netconf.h"
+#include "control_symbol.h"
+
+
+#define in_range_digit(c, lo, up)  	((uint8_t)c >= lo && (uint8_t)c <= up)
+#define isdigit_int(c)           	in_range_digit(c, '0', '9')
+#define isfloatdigit(c)          	(isdigit_int(c) || in_range_digit(c, '.', '.'))
+
+extern state_telnet_server_t telnetState;
+extern uint8_t id_change_pwd;
+
+
+const int8_t * const pcInvalidCommand = ( int8_t * ) "Неправильно введены параметры команды.  Введите \"help\" для просмотра списка поддерживаемых команд.\r\n\r\n";
+const int8_t * const pcPermissionDenied = ( int8_t * ) "Отказ в доступе!\r\n\r\n";
+
+
+const char* info_args_list[] =
+{
+	"address",
+    "owner",
+    "comments",
+};
+
+const char* ups_args_list[] =
+{
+	"battest",
+    "shutdown",
+};
+
+const char* systime_args_list[] =
+{
+	"date",
+    "time",
+};
+
+const char* network_args_list[] =
+{
+	"info",
+	"dhcp",
+    "ip",
+    "gw",
+    "mask",
+};
+
+const char* snmp_args_list[] =
+{
+	"info",
+	"server",
+    "community",
+};
+
+const char* ntp_args_list[] =
+{
+	"ENA",
+	"DIS",
+	"info",
+	"set",
+};
+
+const char* config_args_list[] =
+{
+	"info",
+	"load",
+};
+
+const char* netconfig_args_list[] =
+{
+	"apply",
+	"confirm",
+};
+
+const char* history_args_list[] =
+{
+	"EVENTS",
+	"UPS",
+};
+
+const char* sensor_args_list[] =
+{
+	"info",
+	"setup",
+};
+
+const char* user_args_list[] =
+{
+	"passwd",
+};
+
+/**
+  * @brief  Общая структура настроек
+  */
+extern SETTINGS_t sSettings;
+
+extern user_level_t telnet_code_auth;
+
+/*
+ * Implements the controller's information command.
+ */
+static portBASE_TYPE prvTaskInfoCommand( int8_t *pcWriteBuffer, size_t xWriteBufferLen, const int8_t *pcCommandString );
+
+/*
+ * Implements the reboot command.
+ */
+static portBASE_TYPE prvTaskRebootCommand( int8_t *pcWriteBuffer, size_t xWriteBufferLen, const int8_t *pcCommandString );
+
+/*
+ * Implements the systime command.
+ */
+static portBASE_TYPE prvTaskSystimeCommand( int8_t *pcWriteBuffer, size_t xWriteBufferLen, const int8_t *pcCommandString );
+
+/*
+ * Implements the ntp command.
+ */
+static portBASE_TYPE prvTaskNTPCommand( int8_t *pcWriteBuffer, size_t xWriteBufferLen, const int8_t *pcCommandString );
+
+/*
+ * Implements the network command.
+ */
+static portBASE_TYPE prvTaskNetworkCommand( int8_t *pcWriteBuffer, size_t xWriteBufferLen, const int8_t *pcCommandString );
+
+/*
+ * Implements the snmp command.
+ */
+static portBASE_TYPE prvTaskSNMPCommand( int8_t *pcWriteBuffer, size_t xWriteBufferLen, const int8_t *pcCommandString );
+
+/*
+ * Implements the change password command.
+ */
+static portBASE_TYPE prvTaskUserCommand( int8_t *pcWriteBuffer, size_t xWriteBufferLen, const int8_t *pcCommandString );
+
+/*
+ * Implements the config command.
+ */
+static portBASE_TYPE prvTaskConfigCommand( int8_t *pcWriteBuffer, size_t xWriteBufferLen, const int8_t *pcCommandString );
+
+/*
+ * Implements the netconfig command.
+ */
+static portBASE_TYPE prvTaskNetConfigCommand( int8_t *pcWriteBuffer, size_t xWriteBufferLen, const int8_t *pcCommandString );
+
+/*
+ * Implements the history command.
+ */
+static portBASE_TYPE prvTaskHistoryCommand( int8_t *pcWriteBuffer, size_t xWriteBufferLen, const int8_t *pcCommandString );
+
+/*
+ * Implements the sensor info command.
+ */
+static portBASE_TYPE prvTaskSensorCommand( int8_t *pcWriteBuffer, size_t xWriteBufferLen, const int8_t *pcCommandString );
+
+/*
+ * Implements the firmware download http command.
+ */
+static portBASE_TYPE prvTaskUploadCommand( int8_t *pcWriteBuffer, size_t xWriteBufferLen, const int8_t *pcCommandString );
+
+/*
+ * Implements the ups command.
+ */
+static portBASE_TYPE prvTaskUPSCommand( int8_t *pcWriteBuffer, size_t xWriteBufferLen, const int8_t *pcCommandString );
+
+
+/* Structure that defines the "info" command line command.   This
+generates a table that shows how much run time each task has */
+static const CLI_Command_Definition_t prvInfoCommandDefinition =
+{
+	( const int8_t * const ) "info", /* The command string to type. */
+	( const int8_t * const ) "\tinfo: вывод информации о контроллере\r\n"
+	 	 	 	 	 	 	 "\tinfo address <adrr>: установка поля \"адрес расположения контролируемого объекта\"\r\n"
+	 	 	 	 	 	 	 "\tinfo owner <owner>: установка поля \"организация (собственник)\"\r\n"
+	 	 	 	 	 	 	 "\tinfo comments <comment>: установка поля \"комментарии\"\r\n",
+	prvTaskInfoCommand, /* The function to run. */
+	-1 /* The user can enter any number of commands. */
+};
+
+/* Structure that defines the "reboot" command line command.   This
+generates a table that shows how much run time each task has */
+static const CLI_Command_Definition_t prvRebootCommandDefinition =
+{
+	( const int8_t * const ) "reboot", /* The command string to type. */
+	( const int8_t * const ) "\treboot: перезагрузка Контроллера\r\n",
+	prvTaskRebootCommand, /* The function to run. */
+	0 /* No parameters are expected. */
+};
+
+/* Structure that defines the "systime" command line command.   This
+generates a table that shows how much run time each task has */
+static const CLI_Command_Definition_t prvSystimeCommandDefinition =
+{
+	( const int8_t * const ) "systime", /* The command string to type. */
+	( const int8_t * const ) "\tsystime: вывод системного времени\r\n"
+	 	 	 	 	 	 	 "\tsystime date <YYYY-MM-DD>: установка даты\r\n"
+	 	 	 	 	 	 	 "\tsystime time <HH:MM>: установка времени\r\n",
+	prvTaskSystimeCommand, /* The function to run. */
+	-1 /* The user can enter any number of commands. */
+};
+
+/* Structure that defines the "ntp" command line command.   This
+generates a table that shows how much run time each task has */
+static const CLI_Command_Definition_t prvNTPCommandDefinition =
+{
+	( const int8_t * const ) "ntp", /* The command string to type. */
+	( const int8_t * const ) "\tntp ENA|DIS: разрешение/запрет синхронизации времени\r\n"
+	 	 	 	 	 	 	 "\tntp set IP <A.B.C.D>: установка сервера NTP\r\n"
+	 	 	 	 	 	 	 "\tntp info: вывод информации о сервере NTP\r\n"
+	 	 	 	 	 	 	 "\tntp set gmt <SIGN><NUM>: установка часового пояса\r\n",
+	prvTaskNTPCommand, /* The function to run. */
+	-1 /* The user can enter any number of commands. */
+};
+
+/* Structure that defines the "network" command line command.   This
+generates a table that shows how much run time each task has */
+static const CLI_Command_Definition_t prvNetworkCommandDefinition =
+{
+	( const int8_t * const ) "network", /* The command string to type. */
+	( const int8_t * const ) "\tnetwork info вывод информации о текущих сетевых настройках:\r\n"
+	 	 	 	 	 	 	 "\tnetwork dhcp ENA|DIS: разрешение/запрет получения IP по DHCP\r\n"
+	 	 	 	 	 	 	 "\tnetwork ip <A.B.C.D>: установка статического IP\r\n"
+	 	 	 	 	 	 	 "\tnetwork gw <A.B.C.D>: установка шлюза\r\n"
+	 	 	 	 	 	 	 "\tnetwork mask <A.B.C.D>: установка маски подсети\r\n",
+	prvTaskNetworkCommand, /* The function to run. */
+	-1 /* The user can enter any number of commands. */
+};
+
+/* Structure that defines the "snmp" command line command.   This
+generates a table that shows how much run time each task has */
+static const CLI_Command_Definition_t prvSNMPCommandDefinition =
+{
+	( const int8_t * const ) "snmp", /* The command string to type. */
+	( const int8_t * const ) "\tsnmp info: вывод информации о текущих SNMP настройках\r\n"
+	 	 	 	 	 	 	 "\tsnmp server <NUM> <A.B.C.D>: установка сервера SNMP\r\n"
+	 	 	 	 	 	 	 "\tsnmp community read <read>: установка Read community\r\n"
+	 	 	 	 	 	 	 "\tsnmp community write <write>: установка Write community\r\n",
+	prvTaskSNMPCommand, /* The function to run. */
+	-1 /* The user can enter any number of commands. */
+};
+
+/* Structure that defines the "user" command line command.   This
+generates a table that shows how much run time each task has */
+static const CLI_Command_Definition_t prvUserCommandDefinition =
+{
+	( const int8_t * const ) "user", /* The command string to type. */
+	( const int8_t * const ) "\tuser passwd <name>: установка пароля для пользователя <name>\r\n",
+	prvTaskUserCommand, /* The function to run. */
+	2 /* Two parameters are expected, which can take any value. */
+};
+
+/* Structure that defines the "config" command line command.   This
+generates a table that shows how much run time each task has */
+static const CLI_Command_Definition_t prvConfigCommandDefinition =
+{
+	( const int8_t * const ) "config", /* The command string to type. */
+	( const int8_t * const ) "\tconfig info: вывод информации о состоянии конфигураций\r\n"
+	 	 	 	 	 	 	 "\tconfig load default: загрузка конфигурации по умолчанию\r\n",
+	prvTaskConfigCommand, /* The function to run. */
+	-1 /* Two parameters are expected, which can take any value. */
+};
+
+/* Structure that defines the "config" command line command.   This
+generates a table that shows how much run time each task has */
+static const CLI_Command_Definition_t prvNetConfigCommandDefinition =
+{
+	( const int8_t * const ) "netconfig", /* The command string to type. */
+	( const int8_t * const ) "\tnetconfig apply: применение конфигурации сетевых настроек\r\n"
+	 	 	 	 	 	 	 "\tnetconfig confirm: подтверждение конфигурации сетевых настроек\r\n",
+	prvTaskNetConfigCommand, /* The function to run. */
+	1 /* Two parameters are expected, which can take any value. */
+};
+
+/* Structure that defines the "history" command line command.   This
+generates a table that shows how much run time each task has */
+static const CLI_Command_Definition_t prvHistoryCommandDefinition =
+{
+	( const int8_t * const ) "history", /* The command string to type. */
+	( const int8_t * const ) "\thistory show EVENTS|UPS <num_page>:	вывод журнала\r\n",
+	prvTaskHistoryCommand, /* The function to run. */
+	3 /* Two parameters are expected, which can take any value. */
+};
+
+/* Structure that defines the "sensor info" command line command.   This
+generates a table that shows how much run time each task has */
+static const CLI_Command_Definition_t prvSensorCommandDefinition =
+{
+	( const int8_t * const ) "sensor", /* The command string to type. */
+	( const int8_t * const ) "\tsensor info: вывод параметров системы\r\n"
+								"\tsensor 	setup DI <num> <state>: установка нормального состояния сухого контакта:\r\n"
+								"\t\t\t\t0 - разомкнутое состояние\r\n"
+								"\t\t\t\t1 - замкнутое состояние\r\n"
+								"\tsensor 	setup DO <num> <issue>: установка источника срабатывания реле:\r\n"
+								"\t\t\t\t1 - Наличие сети\r\n"
+								"\t\t\t\t2 - Наличие выходного напряжения\r\n"
+								"\t\t\t\t3 - Разряд АКБ\r\n"
+								"\t\t\t\t4 - Отклбчение АКБ\r\n"
+								"\t\t\t\t5 - SNMP SET\r\n",
+	prvTaskSensorCommand, /* The function to run. */
+	-1 /* No parameters are expected. */
+};
+
+/* Structure that defines the "firmware dowmload http" command line command.   This
+generates a table that shows how much run time each task has */
+static const CLI_Command_Definition_t prvUploadCommandDefinition =
+{
+	( const int8_t * const ) "firmware download http", /* The command string to type. */
+	( const int8_t * const ) "\tfirmware download http: переход в режим обновления через Web-сервер\r\n",
+	prvTaskUploadCommand, /* The function to run. */
+	2 /* No parameters are expected. */
+};
+
+/* Structure that defines the "ups" command line command.   This
+generates a table that shows how much run time each task has */
+static const CLI_Command_Definition_t prvUPSCommandDefinition =
+{
+	( const int8_t * const ) "ups", /* The command string to type. */
+	( const int8_t * const ) "\tups battest <num>: управление процедурой тестирония АКБ:\r\n"
+	 	 	 	 	 	 	 "\t\t\t\t0 - Остановить тестирование\r\n"
+	 	 	 	 	 	 	 "\t\t\t\t1-99 - Запустить тест на x минут\r\n"
+	 	 	 	 	 	 	 "\t\t\t\t100 - Тестирование в течение 10 секунд\r\n"
+	 	 	 	 	 	 	 "\t\t\t\t999 - Тестирование до разряда\r\n"
+	 	 	 	 	 	 	 "\tups shutdown <num>: управление отключением нагрузки ИБП:\r\n"
+	 	 	 	 	 	 	 "\t\t\t\t0 - Остановить процедуру отключения нагрузки\r\n"
+	 	 	 	 	 	 	 "\t\t\t\tn - Отключить нагрузку через n минут\r\n"
+	 	 	 	 	 	 	 "\t\t\t\tn: 0.2, 0.3, ..., 1, 2, ..., 10\r\n",
+	prvTaskUPSCommand, /* The function to run. */
+	2 /* Two parameters are expected, which can take any value. */
+};
+
+/*-----------------------------------------------------------*/
+
+void vRegisterCLICommands( void )
+{
+	/* Register all the command line commands defined immediately above. */
+	FreeRTOS_CLIRegisterCommand( &prvInfoCommandDefinition );
+	FreeRTOS_CLIRegisterCommand( &prvRebootCommandDefinition );
+	FreeRTOS_CLIRegisterCommand( &prvSystimeCommandDefinition );
+	FreeRTOS_CLIRegisterCommand( &prvNTPCommandDefinition );
+	FreeRTOS_CLIRegisterCommand( &prvNetworkCommandDefinition );
+	FreeRTOS_CLIRegisterCommand( &prvSNMPCommandDefinition );
+	FreeRTOS_CLIRegisterCommand( &prvUserCommandDefinition );
+	FreeRTOS_CLIRegisterCommand( &prvConfigCommandDefinition );
+	FreeRTOS_CLIRegisterCommand( &prvNetConfigCommandDefinition );
+	FreeRTOS_CLIRegisterCommand( &prvHistoryCommandDefinition );
+	FreeRTOS_CLIRegisterCommand( &prvSensorCommandDefinition );
+	FreeRTOS_CLIRegisterCommand( &prvUploadCommandDefinition );
+	FreeRTOS_CLIRegisterCommand( &prvUPSCommandDefinition );
+}
+/*-----------------------------------------------------------*/
+
+static portBASE_TYPE prvTaskInfoCommand( int8_t *pcWriteBuffer, size_t xWriteBufferLen, const int8_t *pcCommandString )
+{
+	int8_t *pcParameterString;
+	signed portBASE_TYPE xParameterStringLength, xReturn;
+	portBASE_TYPE xParameterNumber = 1;
+	char str[110];
+	uint8_t len;
+	int8_t num_arg = 0;
+	uint8_t i;
+	static uint8_t page = 0;
+
+	( void ) pcCommandString;
+	( void ) xWriteBufferLen;
+	configASSERT( pcWriteBuffer );
+
+	num_arg = prvGetNumberOfParameters(pcCommandString);
+	memset(pcWriteBuffer, 0, configCOMMAND_INT_MAX_OUTPUT_SIZE);
+	if(num_arg == 0){
+		const int8_t * const pcInfoTableHeader = ( int8_t * ) "\r\n**************Информация о Контроллере**************\r\n";
+		const int8_t * const pcUPSInfoTableHeader = ( int8_t * ) "\r\n*****************Информация об ИБП******************\r\n";
+		if(!page){
+			/* Return the next command help string, before moving the pointer on to
+			the next command in the list. */
+			strncpy( ( char * ) pcWriteBuffer, ( const char * ) pcInfoTableHeader, strlen( ( char * ) pcInfoTableHeader ) );
+
+			GetWorkTimeStr(str, &len);
+			strcat(( char * ) pcWriteBuffer, "Время работы:\t\t\t");
+			strncat(( char * ) pcWriteBuffer, str, len);
+
+			strcat(( char * ) pcWriteBuffer, "\r\nМодель:\t\t\t\t");
+			GetModelStr(str, &len);
+			strncat(( char * ) pcWriteBuffer, str, len);
+
+			strcat(( char * ) pcWriteBuffer, "\r\nДата производства:\t\t");
+			GetProductionDataStr(str, &len);
+			strncat(( char * ) pcWriteBuffer, str, len);
+
+			strcat(( char * ) pcWriteBuffer, "\r\nВерсия ПО:\t\t\t");
+			GetVersionStr(str, &len);
+			strncat(( char * ) pcWriteBuffer, str, len);
+
+			strcat(( char * ) pcWriteBuffer, "\r\nMAC адрес:\t\t\t");
+			GetMacStr(str, &len);
+			strncat(( char * ) pcWriteBuffer, str, len);
+
+			strcat(( char * ) pcWriteBuffer, "\r\nСерийный номер:\t\t\t");
+			GetSerialNumberStr(str, &len);
+			strncat(( char * ) pcWriteBuffer, str, len);
+
+			strcat(( char * ) pcWriteBuffer, "\r\nВладелец:\t\t\t");
+			GetOwnerStr(str, &len);
+			strncat(( char * ) pcWriteBuffer, str, len);
+
+			strcat(( char * ) pcWriteBuffer, "\r\nМестоположение:\t\t\t");
+			GetLocationStr(str, &len);
+			strncat(( char * ) pcWriteBuffer, str, len);
+
+			strcat(( char * ) pcWriteBuffer, "\r\nКомментарии:\t\t\t");
+			GetCommentsStr(str, &len);
+			strncat(( char * ) pcWriteBuffer, str, len);
+
+			page = 1;
+			xReturn = pdTRUE;
+		}
+		else{
+
+			strncat( ( char * ) pcWriteBuffer, ( const char * ) pcUPSInfoTableHeader, strlen( ( char * ) pcUPSInfoTableHeader ) );
+
+			strcat(( char * ) pcWriteBuffer, "\r\nКомпания:\t\t\tАО\"НПК РоТеК\"");
+
+			strcat(( char * ) pcWriteBuffer, "\r\nМодель:\t\t\t\t");
+			GetUPSModelStr(str, &len);
+			strncat(( char * ) pcWriteBuffer, str, len);
+
+			strcat(( char * ) pcWriteBuffer, "\r\nВерсия ПО:\t\t\t");
+			GetUPSVersionStr(str, &len);
+			strncat(( char * ) pcWriteBuffer, str, len);
+
+			strcat(( char * ) pcWriteBuffer, "\r\n");
+
+			page = 0;
+			/* There are no more commands in the list, so there will be no more
+			strings to return after this one and pdFALSE should be returned. */
+			xReturn = pdFALSE;
+		}
+	}
+	else if(num_arg == 1)
+	{
+		strncpy( ( char * ) pcWriteBuffer, ( const char * ) pcInvalidCommand, strlen( ( char * ) pcInvalidCommand ) );
+		xReturn = pdFALSE;
+	}
+	else{
+		/* Obtain the parameter string. */
+		pcParameterString = ( int8_t * ) FreeRTOS_CLIGetParameter
+																(
+																	pcCommandString,		/* The command string itself. */
+																	xParameterNumber,		/* Return the next parameter. */
+																	&xParameterStringLength	/* Store the parameter string length. */
+																);
+		for(i = 0; i < INFO_ALL_ARGS; i ++){
+			if( strncmp( ( const char * ) pcParameterString, info_args_list[i], strlen(info_args_list[i]) ) == 0 ){
+				break;
+			}
+		}
+		xParameterNumber ++;
+	//	xParameterNumber ++;
+		/* Obtain the parameter string. */
+		pcParameterString = ( int8_t * ) FreeRTOS_CLIGetParameter
+																(
+																	pcCommandString,		/* The command string itself. */
+																	xParameterNumber,		/* Return the next parameter. */
+																	&xParameterStringLength	/* Store the parameter string length. */
+																);
+		memset(str, 0, sizeof(str));
+		xParameterStringLength = strlen(( const char * ) pcParameterString);
+		if(xParameterStringLength > (int32_t)sizeof(str))
+			xParameterStringLength = sizeof(str) - 1;
+		strncat(str, ( const char * ) pcParameterString, strlen(( const char * ) pcParameterString));
+		if(control_string_en_digit(str, strlen(str))){
+			switch(i){
+			case INFO_ADDRESS:
+				if(telnet_code_auth == ADMIN)
+					SetLocation(str);
+				else
+					strncpy( ( char * ) pcWriteBuffer, ( const char * ) pcPermissionDenied, strlen( ( char * ) pcPermissionDenied ) );
+				break;
+			case INFO_OWNER:
+				if(telnet_code_auth == ADMIN)
+					SetOwner(str);
+				else
+					strncpy( ( char * ) pcWriteBuffer, ( const char * ) pcPermissionDenied, strlen( ( char * ) pcPermissionDenied ) );
+				break;
+			case INFO_COMMENTS:
+				if(telnet_code_auth == ADMIN)
+					SetComment(str);
+				else
+					strncpy( ( char * ) pcWriteBuffer, ( const char * ) pcPermissionDenied, strlen( ( char * ) pcPermissionDenied ) );
+				break;
+			default:
+				strncpy( ( char * ) pcWriteBuffer, ( const char * ) pcInvalidCommand, strlen( ( char * ) pcInvalidCommand ) );
+				break;
+			}
+			if(i >= INFO_ADDRESS && i <= INFO_COMMENTS){
+				SETTINGS_Save();
+				log_event_data(LOG_SETTING_SAVE, name_login_telnet);
+			}
+		}
+		else{
+			strncpy( ( char * ) pcWriteBuffer, ( const char * ) pcInvalidCommand, strlen( ( char * ) pcInvalidCommand ) );
+		}
+		xReturn = pdFALSE;
+	}
+
+	return xReturn;
+}
+
+static portBASE_TYPE prvTaskRebootCommand( int8_t *pcWriteBuffer, size_t xWriteBufferLen, const int8_t *pcCommandString ){
+
+	static bool start_reboot = true;
+	const int8_t *const pcRebootHeader = ( int8_t * ) "Контроллер будет перезагружен через 1 секунду\r\n";
+
+	( void ) pcCommandString;
+	( void ) xWriteBufferLen;
+
+	if(telnet_code_auth != ADMIN){
+		strncpy( ( char * ) pcWriteBuffer, ( const char * ) pcPermissionDenied, strlen( ( char * ) pcPermissionDenied ) );
+		return pdFALSE;
+	}
+
+	if(start_reboot){
+		start_reboot = false;
+		strcpy( ( char * ) pcWriteBuffer, ( char * ) pcRebootHeader );
+		return pdTRUE;
+	}
+	else{
+		telnet_act = true;
+		Reboot();
+		return pdFALSE;
+	}
+}
+
+static portBASE_TYPE prvTaskSystimeCommand( int8_t *pcWriteBuffer, size_t xWriteBufferLen, const int8_t *pcCommandString ){
+	int8_t *pcParameterString;
+	signed portBASE_TYPE xParameterStringLength, xReturn;
+	portBASE_TYPE xParameterNumber = 1;
+	char str[110];
+	uint8_t len;
+	uint8_t i;
+	uint8_t fail = 0;
+	uint16_t temp = 0;
+
+	( void ) pcCommandString;
+	( void ) xWriteBufferLen;
+	configASSERT( pcWriteBuffer );
+
+	memset(pcWriteBuffer, 0, configCOMMAND_INT_MAX_OUTPUT_SIZE);
+	/* Obtain the parameter string. */
+	pcParameterString = ( int8_t * ) FreeRTOS_CLIGetParameter
+															(
+																pcCommandString,		/* The command string itself. */
+																xParameterNumber,		/* Return the next parameter. */
+																&xParameterStringLength	/* Store the parameter string length. */
+															);
+	if(pcParameterString == NULL){
+		const int8_t * const pcInfoTableHeader = ( int8_t * ) "\r\n******Системное время Контроллера******\r\n";
+		/* Return the next command help string, before moving the pointer on to
+		the next command in the list. */
+		strncpy( ( char * ) pcWriteBuffer, ( const char * ) pcInfoTableHeader, strlen( ( char * ) pcInfoTableHeader ) );
+
+		GetDateStr(str, &len);
+		strcat(( char * ) pcWriteBuffer, "Дата:\t\t\t");
+		strncat(( char * ) pcWriteBuffer, str, len);
+
+		strcat(( char * ) pcWriteBuffer, "\r\nВремя:\t\t\t");
+		GetTimeStr(str, &len);
+		strncat(( char * ) pcWriteBuffer, str, len);
+
+		strcat(( char * ) pcWriteBuffer, "\r\n");
+
+		/* There are no more commands in the list, so there will be no more
+		strings to return after this one and pdFALSE should be returned. */
+		xReturn = pdFALSE;
+	}
+	else{
+		if(telnet_code_auth != ADMIN){
+			strncpy( ( char * ) pcWriteBuffer, ( const char * ) pcPermissionDenied, strlen( ( char * ) pcPermissionDenied ) );
+			return pdFALSE;
+		}
+		for(i = 0; i < ARG_SYSTIME_ALL; i ++){
+			if( strncmp( ( const char * ) pcParameterString, systime_args_list[i], strlen(systime_args_list[i]) ) == 0 ){
+				break;
+			}
+		}
+		if(i != ARG_SYSTIME_ALL){
+			if(sSettings.sSNTP.sntpEnable){
+				strncpy( ( char * ) pcWriteBuffer, ( const char * ) pcPermissionDenied, strlen( ( char * ) pcPermissionDenied ) );
+				return pdFALSE;
+			}
+		}
+
+		xParameterNumber ++;
+		/* Obtain the parameter string. */
+		pcParameterString = ( int8_t * ) FreeRTOS_CLIGetParameter
+																(
+																	pcCommandString,		/* The command string itself. */
+																	xParameterNumber,		/* Return the next parameter. */
+																	&xParameterStringLength	/* Store the parameter string length. */
+																);
+		if(pcParameterString == NULL){
+			strncpy( ( char * ) pcWriteBuffer, ( const char * ) pcInvalidCommand, strlen( ( char * ) pcInvalidCommand ) );
+			return pdFALSE;
+		}
+		memset(str, 0, sizeof(str));
+		xParameterStringLength = strlen(( const char * ) pcParameterString);
+		if(xParameterStringLength > (int32_t)sizeof(str))
+			xParameterStringLength = sizeof(str) - 1;
+		strncat(str, ( const char * ) pcParameterString, strlen(( const char * ) pcParameterString));
+		switch(i){
+		case ARG_SYSTIME_DATA:
+			if(xParameterStringLength == 10){
+			  for(uint8_t j = 0; j < xParameterStringLength; j++)
+			  {
+				  if(j != 4 && j != 7)
+				  {
+					  if(str[j] > 0x39 || str[j] < 0x30){
+						  fail = 1;
+					  }
+				  }
+				  else if(j == 4 || j == 7){
+					  if(str[j] != '-')
+						  fail = 1;
+				  }
+			  }
+			  if(!fail)
+			  {
+				  temp = 1000*(str[0] - 0x30) + 100*(str[1] - 0x30) + 10*(str[2] - 0x30) + str[3] - 0x30;
+				  if(temp > 2099 || temp < 2000)
+					  fail = 1;
+				  temp = 0;
+				  temp = 10*(str[5] - 0x30) + (str[6] - 0x30);
+				  if(temp > 12)
+					  fail = 1;
+				  temp = 0;
+				  temp = 10*(str[8] - 0x30) + (str[9] - 0x30);
+				  if(temp > 31)
+					  fail = 1;
+			  }
+			}
+			else{
+				fail = 1;
+			}
+			if(!fail){
+				SetDateStr(str);
+				SETTINGS_Save();
+				log_event_data(LOG_SETTING_SAVE, name_login_telnet);
+			}
+			else
+				strncpy( ( char * ) pcWriteBuffer, ( const char * ) pcInvalidCommand, strlen( ( char * ) pcInvalidCommand ) );
+			break;
+		case ARG_SYSTIME_TIME:
+			if(xParameterStringLength == 5){
+			  for(uint8_t j = 0; j < xParameterStringLength; j++)
+			  {
+				  if(j != 2)
+				  {
+					  if(str[j] > 0x39 || str[j] < 0x30)
+						  fail = 1;
+				  }
+				  else if(j == 2){
+					  if(str[j]  != ':')
+						  fail = 1;
+				  }
+			  }
+			  if(!fail)
+			  {
+				  temp = 10*(str[0] - 0x30) + (str[1] - 0x30);
+				  if(temp > 23)
+					  fail = 1;
+				  temp = 0;
+				  temp = 10*(str[3] - 0x30) + (str[4] - 0x30);
+				  if(temp > 59)
+					  fail = 1;
+			  }
+			}
+			else{
+				fail = 1;
+			}
+			if(!fail){
+				SetTimeStr(str);
+				SETTINGS_Save();
+				log_event_data(LOG_SETTING_SAVE, name_login_telnet);
+			}
+			else
+				strncpy( ( char * ) pcWriteBuffer, ( const char * ) pcInvalidCommand, strlen( ( char * ) pcInvalidCommand ) );
+			break;
+		default:
+			strncpy( ( char * ) pcWriteBuffer, ( const char * ) pcInvalidCommand, strlen( ( char * ) pcInvalidCommand ) );
+			break;
+		}
+		xReturn = pdFALSE;
+	}
+
+	return xReturn;
+}
+
+/*
+ * Implements the ntp command.
+ */
+static portBASE_TYPE prvTaskNTPCommand( int8_t *pcWriteBuffer, size_t xWriteBufferLen, const int8_t *pcCommandString ){
+	int8_t *pcParameterString;
+	signed portBASE_TYPE xParameterStringLength, xReturn;
+	portBASE_TYPE xParameterNumber = 1;
+	char str[110];
+	char str_temp[110];
+	uint8_t len;
+	uint8_t i;
+	bool enable_old_sntp;
+
+	const int8_t * const pcInfoTableHeader = ( int8_t * ) "\r\n************NTP настройки Контроллера************\r\n";
+
+	( void ) pcCommandString;
+	( void ) xWriteBufferLen;
+	configASSERT( pcWriteBuffer );
+
+	memset(pcWriteBuffer, 0, configCOMMAND_INT_MAX_OUTPUT_SIZE);
+	/* Obtain the parameter string. */
+	pcParameterString = ( int8_t * ) FreeRTOS_CLIGetParameter
+															(
+																pcCommandString,		/* The command string itself. */
+																xParameterNumber,		/* Return the next parameter. */
+																&xParameterStringLength	/* Store the parameter string length. */
+															);
+	if(pcParameterString == NULL){
+		strncpy( ( char * ) pcWriteBuffer, ( const char * ) pcInvalidCommand, strlen( ( char * ) pcInvalidCommand ) );
+		return pdFALSE;
+	}
+
+	for(i = 0; i < ARG_NTP_ALL; i ++){
+		if( strncmp( ( const char * ) pcParameterString, ntp_args_list[i], strlen(ntp_args_list[i]) ) == 0 ){
+			break;
+		}
+	}
+
+	if(telnet_code_auth != ADMIN && i !=ARG_NTP_INFO){
+		strncpy( ( char * ) pcWriteBuffer, ( const char * ) pcPermissionDenied, strlen( ( char * ) pcPermissionDenied ) );
+		return pdFALSE;
+	}
+
+	xParameterNumber ++;
+	/* Obtain the parameter string. */
+	pcParameterString = ( int8_t * ) FreeRTOS_CLIGetParameter
+															(
+																pcCommandString,		/* The command string itself. */
+																xParameterNumber,		/* Return the next parameter. */
+																&xParameterStringLength	/* Store the parameter string length. */
+															);
+	xParameterNumber ++;
+	if(pcParameterString == NULL){
+		switch(i){
+		case ARG_NTP_ENABLE:
+			enable_old_sntp = sSettings.sSNTP.sntpEnable;
+			SetSntpStateStr("1");
+			if(sSettings.sSNTP.sntpEnable != enable_old_sntp){
+				SETTINGS_Save();
+				log_event_data(LOG_SETTING_SAVE, name_login_telnet);
+				SNTP_Init();
+				//vTaskDelay(7000);
+				SNTP_Poll();
+			}
+			break;
+		case ARG_NTP_DISABLE:
+			enable_old_sntp = sSettings.sSNTP.sntpEnable;
+			SetSntpStateStr("0");
+			if(sSettings.sSNTP.sntpEnable != enable_old_sntp){
+				SETTINGS_Save();
+				log_event_data(LOG_SETTING_SAVE, name_login_telnet);
+				SNTP_Init();
+				//vTaskDelay(7000);
+				SNTP_Poll();
+			}
+			break;
+		case ARG_NTP_INFO:
+			/* Return the next command help string, before moving the pointer on to
+			the next command in the list. */
+			strncpy( ( char * ) pcWriteBuffer, ( const char * ) pcInfoTableHeader, strlen( ( char * ) pcInfoTableHeader ) );
+
+			GetSntpStateStrRU(str, &len);
+			strcat(( char * ) pcWriteBuffer, "Режим установки времени:\t");
+			strncat(( char * ) pcWriteBuffer, str, len);
+
+			strcat(( char * ) pcWriteBuffer, "\r\nIP адрес NTP сервера:\t\t");
+			GetSntpServerIpStr(str, &len);
+			strncat(( char * ) pcWriteBuffer, str, len);
+
+			strcat(( char * ) pcWriteBuffer, "\r\nЧасовой пояс:\t\t\t");
+			GetSntpTimeZoneStr(str, &len);
+			strncat(( char * ) pcWriteBuffer, str, len);
+
+			strcat(( char * ) pcWriteBuffer, "\r\nПоследняя дата синхронизации:\t");
+			GetSntpLastDataStr(str, &len);
+			strncat(( char * ) pcWriteBuffer, str, len);
+
+			strcat(( char * ) pcWriteBuffer, "\r\n");
+			break;
+		default:
+			strncpy( ( char * ) pcWriteBuffer, ( const char * ) pcInvalidCommand, strlen( ( char * ) pcInvalidCommand ) );
+			break;
+		}
+		return pdFALSE;
+	}
+
+	if(i == ARG_NTP_SET){
+		memset(str, 0, sizeof(str));
+		if(xParameterStringLength > (int32_t)sizeof(str))
+			xParameterStringLength = sizeof(str) - 1;
+		strncat(str, ( const char * ) pcParameterString, xParameterStringLength);
+		pcParameterString = ( int8_t * ) FreeRTOS_CLIGetParameter
+																(
+																	pcCommandString,		/* The command string itself. */
+																	xParameterNumber,		/* Return the next parameter. */
+																	&xParameterStringLength	/* Store the parameter string length. */
+																);
+		if(pcParameterString != NULL){
+			memset(str_temp, 0, sizeof(str_temp));
+			if(xParameterStringLength > (int32_t)sizeof(str_temp))
+				xParameterStringLength = sizeof(str_temp) - 1;
+			strncat(str_temp, ( const char * ) pcParameterString, xParameterStringLength);
+			if(strncmp(str, "IP", 2) == 0){
+				if(xParameterStringLength <= 15){
+					if(ipaddr_addr(str_temp) != IPADDR_NONE){
+						if(strncmp(str_temp, sSettings.sSNTP.ip, strlen(str_temp)) != 0){
+							SetSntpServerIpStr(str_temp);
+							SETTINGS_Save();
+							log_event_data(LOG_SETTING_SAVE, name_login_telnet);
+							SNTP_Init();
+							//vTaskDelay(7000);
+							SNTP_Poll();
+						}
+					}
+					else{
+						strncpy( ( char * ) pcWriteBuffer, ( const char * ) pcInvalidCommand, strlen( ( char * ) pcInvalidCommand ) );
+					}
+				}
+				else{
+					strncpy( ( char * ) pcWriteBuffer, ( const char * ) pcInvalidCommand, strlen( ( char * ) pcInvalidCommand ) );
+				}
+			}
+			else if(strncmp(str, "gmt", 3) == 0){
+				if(xParameterStringLength > 1 && xParameterStringLength < 5){
+					bool fail = false;
+					if(str_temp[0] != '-' && str_temp[0] != '+')
+						fail = true;
+					if(!isdigit_int(str_temp[1]) && (!isdigit_int(str_temp[2]) && str_temp[2] != '.') && (!isdigit_int(str_temp[3]) && str_temp[3] != '.'))
+						fail = true;
+					if(xParameterStringLength == 5){
+						if(!isdigit_int(str_temp[4]))
+							fail = true;
+					}
+					if(!fail){
+						float value = atof(str_temp);
+						if(value > -12.0 && value < 12.0){
+							SetSntpTimeZoneStr(str_temp);
+							SETTINGS_Save();
+							log_event_data(LOG_SETTING_SAVE, name_login_telnet);
+						}
+						else
+							strncpy( ( char * ) pcWriteBuffer, ( const char * ) pcInvalidCommand, strlen( ( char * ) pcInvalidCommand ) );
+					}
+					else{
+						strncpy( ( char * ) pcWriteBuffer, ( const char * ) pcInvalidCommand, strlen( ( char * ) pcInvalidCommand ) );
+					}
+				}
+				else{
+					strncpy( ( char * ) pcWriteBuffer, ( const char * ) pcInvalidCommand, strlen( ( char * ) pcInvalidCommand ) );
+				}
+			}
+			else{
+				strncpy( ( char * ) pcWriteBuffer, ( const char * ) pcInvalidCommand, strlen( ( char * ) pcInvalidCommand ) );
+			}
+		}
+		else{
+			strncpy( ( char * ) pcWriteBuffer, ( const char * ) pcInvalidCommand, strlen( ( char * ) pcInvalidCommand ) );
+		}
+	}
+	else{
+		strncpy( ( char * ) pcWriteBuffer, ( const char * ) pcInvalidCommand, strlen( ( char * ) pcInvalidCommand ) );
+	}
+	xReturn = pdFALSE;
+
+	return xReturn;
+}
+
+/*
+ * Implements the network command.
+ */
+static portBASE_TYPE prvTaskNetworkCommand( int8_t *pcWriteBuffer, size_t xWriteBufferLen, const int8_t *pcCommandString ){
+	int8_t *pcParameterString;
+	signed portBASE_TYPE xParameterStringLength, xReturn;
+	portBASE_TYPE xParameterNumber = 1;
+	char str[110];
+	uint8_t i;
+
+	( void ) pcCommandString;
+	( void ) xWriteBufferLen;
+	configASSERT( pcWriteBuffer );
+
+	memset(pcWriteBuffer, 0, configCOMMAND_INT_MAX_OUTPUT_SIZE);
+	/* Obtain the parameter string. */
+	pcParameterString = ( int8_t * ) FreeRTOS_CLIGetParameter
+															(
+																pcCommandString,		/* The command string itself. */
+																xParameterNumber,		/* Return the next parameter. */
+																&xParameterStringLength	/* Store the parameter string length. */
+															);
+	if(pcParameterString == NULL){
+		strncpy( ( char * ) pcWriteBuffer, ( const char * ) pcInvalidCommand, strlen( ( char * ) pcInvalidCommand ) );
+		return pdFALSE;
+	}
+
+	for(i = 0; i < ARG_NETWORK_ALL; i ++){
+		if( strncmp( ( const char * ) pcParameterString, network_args_list[i], strlen(network_args_list[i]) ) == 0 ){
+			break;
+		}
+	}
+	if(telnet_code_auth != ADMIN && i !=ARG_NETWORK_INFO){
+		strncpy( ( char * ) pcWriteBuffer, ( const char * ) pcPermissionDenied, strlen( ( char * ) pcPermissionDenied ) );
+		return pdFALSE;
+	}
+	if(i != ARG_NETWORK_ALL && i != ARG_NETWORK_DHCP && i != ARG_NETWORK_INFO){
+		if(sSettings.sWebTempParams.dhcpEnable){
+			strncpy( ( char * ) pcWriteBuffer, ( const char * ) pcPermissionDenied, strlen( ( char * ) pcPermissionDenied ) );
+			return pdFALSE;
+		}
+	}
+
+	xParameterNumber ++;
+	/* Obtain the parameter string. */
+	pcParameterString = ( int8_t * ) FreeRTOS_CLIGetParameter
+															(
+																pcCommandString,		/* The command string itself. */
+																xParameterNumber,		/* Return the next parameter. */
+																&xParameterStringLength	/* Store the parameter string length. */
+															);
+	if(pcParameterString == NULL){
+		if(i == ARG_NETWORK_INFO){
+			net_config_param(pcWriteBuffer);
+		}
+		else{
+			strncpy( ( char * ) pcWriteBuffer, ( const char * ) pcInvalidCommand, strlen( ( char * ) pcInvalidCommand ) );
+		}
+		return pdFALSE;
+	}
+	memset(str, 0, sizeof(str));
+	xParameterStringLength = strlen(( const char * ) pcParameterString);
+	if(xParameterStringLength > (int32_t)sizeof(str))
+		xParameterStringLength = sizeof(str) - 1;
+	strncat(str, ( const char * ) pcParameterString, strlen(( const char * ) pcParameterString));
+	switch(i){
+	case ARG_NETWORK_DHCP:
+		if(strncmp(str, "ENA", 3) == 0){
+			SetUDPDhcpStateStr("True");
+			strcpy( ( char * ) pcWriteBuffer, "\t\tСохраните конфигурацию сетевых настроек\r\n" );
+		}
+		else if(strncmp(str, "DIS", 3) == 0){
+			SetUDPDhcpStateStr("False");
+			strcpy( ( char * ) pcWriteBuffer, "\t\tСохраните конфигурацию сетевых настроек\r\n" );
+		}
+		else
+			strncpy( ( char * ) pcWriteBuffer, ( const char * ) pcInvalidCommand, strlen( ( char * ) pcInvalidCommand ) );
+		break;
+	case ARG_NETWORK_IP:
+		if(xParameterStringLength <= 15){
+			if(ipaddr_addr(str) != IPADDR_NONE){
+				SetIPStr(str);
+				strcpy( ( char * ) pcWriteBuffer, "\t\tСохраните конфигурацию сетевых настроек\r\n" );
+			}
+			else
+				strncpy( ( char * ) pcWriteBuffer, ( const char * ) pcInvalidCommand, strlen( ( char * ) pcInvalidCommand ) );
+		}
+		else{
+			strncpy( ( char * ) pcWriteBuffer, ( const char * ) pcInvalidCommand, strlen( ( char * ) pcInvalidCommand ) );
+		}
+		break;
+	case ARG_NETWORK_GW:
+		if(xParameterStringLength <= 15){
+			if(ipaddr_addr(str) != IPADDR_NONE){
+				SetGatewayStr(str);
+				strcpy( ( char * ) pcWriteBuffer, "\t\tСохраните конфигурацию сетевых настроек\r\n" );
+			}
+			else
+				strncpy( ( char * ) pcWriteBuffer, ( const char * ) pcInvalidCommand, strlen( ( char * ) pcInvalidCommand ) );
+		}
+		else{
+			strncpy( ( char * ) pcWriteBuffer, ( const char * ) pcInvalidCommand, strlen( ( char * ) pcInvalidCommand ) );
+		}
+		break;
+	case ARG_NETWORK_MASK:
+		if(xParameterStringLength <= 15){
+			if(ipaddr_addr(str) != IPADDR_NONE){
+				SetMaskStr(str);
+				strcpy( ( char * ) pcWriteBuffer, "\t\tСохраните конфигурацию сетевых настроек\r\n" );
+			}
+			else
+				strncpy( ( char * ) pcWriteBuffer, ( const char * ) pcInvalidCommand, strlen( ( char * ) pcInvalidCommand ) );
+		}
+		else{
+			strncpy( ( char * ) pcWriteBuffer, ( const char * ) pcInvalidCommand, strlen( ( char * ) pcInvalidCommand ) );
+		}
+		break;
+	default:
+		strncpy( ( char * ) pcWriteBuffer, ( const char * ) pcInvalidCommand, strlen( ( char * ) pcInvalidCommand ) );
+		break;
+	}
+	xReturn = pdFALSE;
+
+
+	return xReturn;
+}
+
+/*
+ * Implements the snmp command.
+ */
+static portBASE_TYPE prvTaskSNMPCommand( int8_t *pcWriteBuffer, size_t xWriteBufferLen, const int8_t *pcCommandString ){
+	int8_t *pcParameterString;
+	signed portBASE_TYPE xParameterStringLength, xReturn;
+	portBASE_TYPE xParameterNumber = 1;
+	char str[20];
+	char temp_str[20];
+	uint8_t i;
+
+	( void ) pcCommandString;
+	( void ) xWriteBufferLen;
+	configASSERT( pcWriteBuffer );
+
+	memset(pcWriteBuffer, 0, configCOMMAND_INT_MAX_OUTPUT_SIZE);
+	/* Obtain the parameter string. */
+	pcParameterString = ( int8_t * ) FreeRTOS_CLIGetParameter
+															(
+																pcCommandString,		/* The command string itself. */
+																xParameterNumber,		/* Return the next parameter. */
+																&xParameterStringLength	/* Store the parameter string length. */
+															);
+	if(pcParameterString == NULL){
+		strncpy( ( char * ) pcWriteBuffer, ( const char * ) pcInvalidCommand, strlen( ( char * ) pcInvalidCommand ) );
+		return pdFALSE;
+	}
+
+	for(i = 0; i < ARG_SNMP_ALL; i ++){
+		if( strncmp( ( const char * ) pcParameterString, snmp_args_list[i], strlen(snmp_args_list[i]) ) == 0 ){
+			break;
+		}
+	}
+
+	if(telnet_code_auth != ADMIN && i !=ARG_SNMP_INFO){
+		strncpy( ( char * ) pcWriteBuffer, ( const char * ) pcPermissionDenied, strlen( ( char * ) pcPermissionDenied ) );
+		return pdFALSE;
+	}
+	xParameterNumber ++;
+	/* Obtain the parameter string. */
+	pcParameterString = ( int8_t * ) FreeRTOS_CLIGetParameter
+															(
+																pcCommandString,		/* The command string itself. */
+																xParameterNumber,		/* Return the next parameter. */
+																&xParameterStringLength	/* Store the parameter string length. */
+															);
+	xParameterNumber ++;
+	if(pcParameterString == NULL){
+		if(i == ARG_SNMP_INFO){
+			snmp_config_param(pcWriteBuffer);
+		}
+		else{
+			strncpy( ( char * ) pcWriteBuffer, ( const char * ) pcInvalidCommand, strlen( ( char * ) pcInvalidCommand ) );
+		}
+		return pdFALSE;
+	}
+	memset(str, 0, sizeof(str));
+	if(xParameterStringLength > (int32_t)sizeof(str))
+		xParameterStringLength = sizeof(str) - 1;
+	strncat(str, ( const char * ) pcParameterString, xParameterStringLength);
+	switch(i){
+	case ARG_SNMP_SERVER:
+		if(xParameterStringLength == 1 && isdigit_int(str[0])){
+			int32_t temp = atoi(str);
+			if(temp > 0 && temp < 6){
+				pcParameterString = ( int8_t * ) FreeRTOS_CLIGetParameter
+																		(
+																			pcCommandString,		/* The command string itself. */
+																			xParameterNumber,		/* Return the next parameter. */
+																			&xParameterStringLength	/* Store the parameter string length. */
+																		);
+				if(pcParameterString != NULL){
+					memset(str, 0, sizeof(str));
+					xParameterStringLength = strlen(( const char * ) pcParameterString);
+					if(xParameterStringLength > (int32_t)sizeof(str))
+						xParameterStringLength = sizeof(str) - 1;
+					strncat(str, ( const char * ) pcParameterString, strlen(( const char * ) pcParameterString));
+					if(xParameterStringLength <= 15){
+						if(ipaddr_addr(str) != IPADDR_NONE){
+							switch(temp){
+							case 1:
+								SetManagerIp(str);
+								break;
+							case 2:
+								SetManagerIp2(str);
+								break;
+							case 3:
+								SetManagerIp3(str);
+								break;
+							case 4:
+								SetManagerIp4(str);
+								break;
+							case 5:
+								SetManagerIp5(str);
+								break;
+							}
+							if(temp > 0 && temp < 6){
+								SETTINGS_Save();
+								log_event_data(LOG_SETTING_SAVE, name_login_telnet);
+							}
+						}
+						else{
+							strncpy( ( char * ) pcWriteBuffer, ( const char * ) pcInvalidCommand, strlen( ( char * ) pcInvalidCommand ) );
+						}
+					}
+					else{
+						strncpy( ( char * ) pcWriteBuffer, ( const char * ) pcInvalidCommand, strlen( ( char * ) pcInvalidCommand ) );
+					}
+				}
+				else{
+					strncpy( ( char * ) pcWriteBuffer, ( const char * ) pcInvalidCommand, strlen( ( char * ) pcInvalidCommand ) );
+				}
+			}
+			else{
+				strncpy( ( char * ) pcWriteBuffer, ( const char * ) pcInvalidCommand, strlen( ( char * ) pcInvalidCommand ) );
+			}
+		}
+		else{
+			strncpy( ( char * ) pcWriteBuffer, ( const char * ) pcInvalidCommand, strlen( ( char * ) pcInvalidCommand ) );
+		}
+		break;
+	case ARG_SNMP_COMMUNITY:
+		pcParameterString = ( int8_t * ) FreeRTOS_CLIGetParameter
+																(
+																	pcCommandString,		/* The command string itself. */
+																	xParameterNumber,		/* Return the next parameter. */
+																	&xParameterStringLength	/* Store the parameter string length. */
+																);
+		if(pcParameterString != NULL){
+			memset(temp_str, 0, sizeof(temp_str));
+			xParameterStringLength = strlen(( const char * ) pcParameterString);
+			if(xParameterStringLength > (int32_t)sizeof(temp_str))
+			xParameterStringLength = sizeof(temp_str) - 1;
+			strncat(temp_str, ( const char * ) pcParameterString, strlen(( const char * ) pcParameterString));
+			if(control_string_en_digit(temp_str, strlen(temp_str))){
+				if(strncmp(str, "read", 4) == 0){
+					SetReadCommunity(temp_str);
+					SETTINGS_Save();
+					log_event_data(LOG_SETTING_SAVE, name_login_telnet);
+				}
+				else if(strncmp(str, "write", 5) == 0){
+					SetWriteCommunity(temp_str);
+					SETTINGS_Save();
+					log_event_data(LOG_SETTING_SAVE, name_login_telnet);
+				}
+				else
+					strncpy( ( char * ) pcWriteBuffer, ( const char * ) pcInvalidCommand, strlen( ( char * ) pcInvalidCommand ) );
+			}
+			else{
+				strncpy( ( char * ) pcWriteBuffer, ( const char * ) pcInvalidCommand, strlen( ( char * ) pcInvalidCommand ) );
+			}
+		}
+		else{
+			strncpy( ( char * ) pcWriteBuffer, ( const char * ) pcInvalidCommand, strlen( ( char * ) pcInvalidCommand ) );
+		}
+		break;
+	default:
+		strncpy( ( char * ) pcWriteBuffer, ( const char * ) pcInvalidCommand, strlen( ( char * ) pcInvalidCommand ) );
+		break;
+	}
+	xReturn = pdFALSE;
+
+
+	return xReturn;
+}
+
+/*
+ * Implements the change password command.
+ */
+static portBASE_TYPE prvTaskUserCommand( int8_t *pcWriteBuffer, size_t xWriteBufferLen, const int8_t *pcCommandString ){
+	int8_t *pcParameterString;
+	signed portBASE_TYPE xParameterStringLength, xReturn;
+	portBASE_TYPE xParameterNumber = 1;
+	uint8_t i;
+	char temp_str[MAX_WEB_LOGIN_LEN];
+	char WebLogin[MAX_WEB_LOGIN_LEN];
+	uint8_t valueLen, user_id;
+
+	const int8_t * const pcChangePWDHeader = ( int8_t * ) "\r\nВведите новый пароль:";
+
+	( void ) pcCommandString;
+	( void ) xWriteBufferLen;
+	configASSERT( pcWriteBuffer );
+
+	memset(pcWriteBuffer, 0, configCOMMAND_INT_MAX_OUTPUT_SIZE);
+
+	if(telnet_code_auth != ADMIN){
+		strncpy( ( char * ) pcWriteBuffer, ( const char * ) pcPermissionDenied, strlen( ( char * ) pcPermissionDenied ) );
+		return pdFALSE;
+	}
+	/* Obtain the parameter string. */
+	pcParameterString = ( int8_t * ) FreeRTOS_CLIGetParameter
+															(
+																pcCommandString,		/* The command string itself. */
+																xParameterNumber,		/* Return the next parameter. */
+																&xParameterStringLength	/* Store the parameter string length. */
+															);
+	if(pcParameterString == NULL){
+		strncpy( ( char * ) pcWriteBuffer, ( const char * ) pcInvalidCommand, strlen( ( char * ) pcInvalidCommand ) );
+		return pdFALSE;
+	}
+
+	for(i = 0; i < ARG_USER_ALL; i ++){
+		if( strncmp( ( const char * ) pcParameterString, user_args_list[i], strlen(user_args_list[i]) ) == 0 ){
+			break;
+		}
+	}
+
+	xParameterNumber ++;
+	/* Obtain the parameter string. */
+	pcParameterString = ( int8_t * ) FreeRTOS_CLIGetParameter
+															(
+																pcCommandString,		/* The command string itself. */
+																xParameterNumber,		/* Return the next parameter. */
+																&xParameterStringLength	/* Store the parameter string length. */
+															);
+	if(i == ARG_USER_PWD){
+		memset(temp_str, 0, sizeof(temp_str));
+		xParameterStringLength = strlen(( const char * ) pcParameterString);
+		if(xParameterStringLength > (int32_t)sizeof(temp_str)){
+			strncpy( ( char * ) pcWriteBuffer, ( const char * ) pcInvalidCommand, strlen( ( char * ) pcInvalidCommand ) );
+		}
+		else{
+			strncat(temp_str, ( const char * ) pcParameterString, strlen(( const char * ) pcParameterString));
+			for (user_id = 0; user_id < MAX_WEB_USERS; user_id++) {
+
+				GetUserLogin(user_id, WebLogin, &valueLen);
+
+				/* Check login and password */
+				if (strncmp(WebLogin, temp_str, MAX_WEB_LOGIN_LEN) == 0) {
+
+					/* Login and pass are valid */
+					id_change_pwd = user_id;
+					strncpy( ( char * ) pcWriteBuffer, ( const char * ) pcChangePWDHeader, strlen( ( char * ) pcChangePWDHeader ) );
+					telnetState = TELNET_CHANGE_PWD;
+					break;
+				}
+			}
+			if(telnetState != TELNET_CHANGE_PWD){
+				strncpy( ( char * ) pcWriteBuffer, ( const char * ) pcInvalidCommand, strlen( ( char * ) pcInvalidCommand ) );
+			}
+		}
+	}
+	else{
+		strncpy( ( char * ) pcWriteBuffer, ( const char * ) pcInvalidCommand, strlen( ( char * ) pcInvalidCommand ) );
+	}
+
+	xReturn = pdFALSE;
+
+
+	return xReturn;
+}
+
+/*
+ * Implements the config command.
+ */
+static portBASE_TYPE prvTaskConfigCommand( int8_t *pcWriteBuffer, size_t xWriteBufferLen, const int8_t *pcCommandString ){
+	int8_t *pcParameterString;
+	signed portBASE_TYPE xParameterStringLength, xReturn;
+	portBASE_TYPE xParameterNumber = 1;
+	char str[110];
+	uint8_t i;
+	static uint8_t config_menu = 0;
+
+	const int8_t * const pcInfoTableHeader = ( int8_t * ) "\r\n*********Конфигурация Контроллера*********\r\n";
+
+	( void ) pcCommandString;
+	( void ) xWriteBufferLen;
+	configASSERT( pcWriteBuffer );
+
+	memset(pcWriteBuffer, 0, configCOMMAND_INT_MAX_OUTPUT_SIZE);
+	/* Obtain the parameter string. */
+	pcParameterString = ( int8_t * ) FreeRTOS_CLIGetParameter
+															(
+																pcCommandString,		/* The command string itself. */
+																xParameterNumber,		/* Return the next parameter. */
+																&xParameterStringLength	/* Store the parameter string length. */
+															);
+	if(pcParameterString == NULL){
+		strncpy( ( char * ) pcWriteBuffer, ( const char * ) pcInvalidCommand, strlen( ( char * ) pcInvalidCommand ) );
+		return pdFALSE;
+	}
+
+	for(i = 0; i < ARG_CONFIG_ALL; i ++){
+		if( strncmp( ( const char * ) pcParameterString, config_args_list[i], strlen(config_args_list[i]) ) == 0 ){
+			break;
+		}
+	}
+
+	if(telnet_code_auth != ADMIN && i !=ARG_CONFIG_INFO){
+		strncpy( ( char * ) pcWriteBuffer, ( const char * ) pcPermissionDenied, strlen( ( char * ) pcPermissionDenied ) );
+		return pdFALSE;
+	}
+
+	xParameterNumber ++;
+	/* Obtain the parameter string. */
+	pcParameterString = ( int8_t * ) FreeRTOS_CLIGetParameter
+															(
+																pcCommandString,		/* The command string itself. */
+																xParameterNumber,		/* Return the next parameter. */
+																&xParameterStringLength	/* Store the parameter string length. */
+															);
+	if(pcParameterString == NULL){
+		switch(i){
+		case ARG_CONFIG_INFO:
+			switch(config_menu){
+			case 0:
+				/* Return the next command help string, before moving the pointer on to
+				the next command in the list. */
+				strncpy( ( char * ) pcWriteBuffer, ( const char * ) pcInfoTableHeader, strlen( ( char * ) pcInfoTableHeader ) );
+				snmp_config_param(pcWriteBuffer);
+				break;
+			case 1:
+				inouts_config_param(pcWriteBuffer);
+				break;
+			case 2:
+				net_config_param(pcWriteBuffer);
+				break;
+			case 3:
+				time_config_param(pcWriteBuffer);
+				break;
+			}
+
+			config_menu ++;
+			if(config_menu == 4){
+				config_menu = 0;
+				return pdFALSE;
+			}
+			else{
+				return pdTRUE;
+			}
+			break;
+		default:
+			strncpy( ( char * ) pcWriteBuffer, ( const char * ) pcInvalidCommand, strlen( ( char * ) pcInvalidCommand ) );
+			break;
+		}
+		return pdFALSE;
+	}
+	if(i == ARG_CONFIG_LOAD){
+		memset(str, 0, sizeof(str));
+		xParameterStringLength = strlen(( const char * ) pcParameterString);
+		if(xParameterStringLength > (int32_t)sizeof(str))
+			xParameterStringLength = sizeof(str) - 1;
+		strncat(str, ( const char * ) pcParameterString, xParameterStringLength);
+		if(xParameterStringLength < 13){
+			if(strncmp(str, "default", 7) == 0){
+				  SNMP_SendUserTrap(DEVICE_RESTORED);
+				  log_event_data(LOG_SYSTEM_DEFCONFIG, name_login_telnet);
+				  vTaskDelay(500);
+				  SETTINGS_SetPartDefault();
+				  SETTINGS_Save();
+				  log_event_data(LOG_SETTING_SAVE, name_login_telnet);
+				  strcpy( ( char * ) pcWriteBuffer, "\t\tНастройки сброшены к настройкам по умолчанию!\r\n");
+			}
+			else{
+				strncpy( ( char * ) pcWriteBuffer, ( const char * ) pcInvalidCommand, strlen( ( char * ) pcInvalidCommand ) );
+			}
+		}
+		else{
+			strncpy( ( char * ) pcWriteBuffer, ( const char * ) pcInvalidCommand, strlen( ( char * ) pcInvalidCommand ) );
+		}
+	}
+	else{
+		strncpy( ( char * ) pcWriteBuffer, ( const char * ) pcInvalidCommand, strlen( ( char * ) pcInvalidCommand ) );
+	}
+
+	xReturn = pdFALSE;
+
+
+	return xReturn;
+}
+
+/*
+ * Implements the config command.
+ */
+static portBASE_TYPE prvTaskNetConfigCommand( int8_t *pcWriteBuffer, size_t xWriteBufferLen, const int8_t *pcCommandString ){
+	int8_t *pcParameterString;
+	portBASE_TYPE xParameterNumber = 1;
+	signed portBASE_TYPE xParameterStringLength;
+	uint8_t i;
+	static start = 0;
+
+	( void ) pcCommandString;
+	( void ) xWriteBufferLen;
+	configASSERT( pcWriteBuffer );
+
+	memset(pcWriteBuffer, 0, configCOMMAND_INT_MAX_OUTPUT_SIZE);
+	/* Obtain the parameter string. */
+	pcParameterString = ( int8_t * ) FreeRTOS_CLIGetParameter
+															(
+																pcCommandString,		/* The command string itself. */
+																xParameterNumber,		/* Return the next parameter. */
+																&xParameterStringLength	/* Store the parameter string length. */
+															);
+
+	for(i = 0; i < ARG_NETCONFIG_ALL; i ++){
+		if( strncmp( ( const char * ) pcParameterString, netconfig_args_list[i], strlen(netconfig_args_list[i]) ) == 0 ){
+			break;
+		}
+	}
+
+	if(telnet_code_auth != ADMIN){
+		strncpy( ( char * ) pcWriteBuffer, ( const char * ) pcPermissionDenied, strlen( ( char * ) pcPermissionDenied ) );
+		return pdFALSE;
+	}
+
+	switch(i){
+	case ARG_NETCONFIG_APPLY:
+		if(!start){
+		  /* Если параметры WEB изменились выставляем флаг, сохраняем настройки и перезагружаемся */
+		  if (GetStateWebReinit() == true)
+		  {
+			  start = 1;
+#ifdef HARDWARE_BT6706
+		  telnet_act = true;
+#endif
+			SetWebReinitFlag(true);
+			HTTP_SaveSettings();
+			strcpy( ( char * ) pcWriteBuffer, "\t\tНастройки сохранены! Контроллер будет перезагружен\r\n\tПосле перезагрузки подтвердите изменения сетевых настроек\r\n");
+			return pdTRUE;
+
+		  }
+		}
+		else{
+#ifdef HARDWARE_BT6706
+		  telnet_act = true;
+#endif
+			start = 0;
+			vTaskDelay(1010);
+			Reboot();
+		}
+		break;
+	case ARG_NETCONFIG_CONFIRM:
+		telnet_act = true;
+		SetWebReinitFlag(false);
+		SetConfirmWebParamsFlag();
+		strcpy( ( char * ) pcWriteBuffer, "\t\tСетевые настройки подтверждены!\r\n");
+		break;
+	default:
+		strncpy( ( char * ) pcWriteBuffer, ( const char * ) pcInvalidCommand, strlen( ( char * ) pcInvalidCommand ) );
+		break;
+	}
+
+	return pdFALSE;
+
+}
+
+/*
+ * Implements the history command.
+ */
+static portBASE_TYPE prvTaskHistoryCommand( int8_t *pcWriteBuffer, size_t xWriteBufferLen, const int8_t *pcCommandString ){
+	int8_t *pcParameterString;
+	signed portBASE_TYPE xParameterStringLength, xReturn;
+	portBASE_TYPE xParameterNumber = 1;
+	char str[110];
+	uint8_t i;
+	static int16_t num_page = 0;
+	static int16_t num_page_temp = 1;
+	static bool start = true;
+
+	const int8_t * const pcUPShistoryTableHeader = ( int8_t * ) "\r\n***********Журнал событий ИБП***********\r\n";
+	const int8_t * const pcControllerHistoryTableHeader = ( int8_t * ) "\r\n***********Журнал событий Контроллера***********\r\n";
+
+	( void ) pcCommandString;
+	( void ) xWriteBufferLen;
+	configASSERT( pcWriteBuffer );
+
+	memset(pcWriteBuffer, 0, configCOMMAND_INT_MAX_OUTPUT_SIZE);
+	/* Obtain the parameter string. */
+	pcParameterString = ( int8_t * ) FreeRTOS_CLIGetParameter
+															(
+																pcCommandString,		/* The command string itself. */
+																xParameterNumber,		/* Return the next parameter. */
+																&xParameterStringLength	/* Store the parameter string length. */
+															);
+	if(pcParameterString == NULL){
+		strncpy( ( char * ) pcWriteBuffer, ( const char * ) pcInvalidCommand, strlen( ( char * ) pcInvalidCommand ) );
+		return pdFALSE;
+	}
+
+	if( strncmp( ( const char * ) pcParameterString, "show", xParameterStringLength ) != 0 ){
+		strncpy( ( char * ) pcWriteBuffer, ( const char * ) pcInvalidCommand, strlen( ( char * ) pcInvalidCommand ) );
+			return pdFALSE;
+	}
+
+	xParameterNumber ++;
+	/* Obtain the parameter string. */
+	pcParameterString = ( int8_t * ) FreeRTOS_CLIGetParameter
+															(
+																pcCommandString,		/* The command string itself. */
+																xParameterNumber,		/* Return the next parameter. */
+																&xParameterStringLength	/* Store the parameter string length. */
+															);
+
+	for(i = 0; i < ARG_HISTORY_ALL; i ++){
+		if( strncmp( ( const char * ) pcParameterString, history_args_list[i], strlen(history_args_list[i]) ) == 0 ){
+			break;
+		}
+	}
+
+	xParameterNumber ++;
+	/* Obtain the parameter string. */
+	pcParameterString = ( int8_t * ) FreeRTOS_CLIGetParameter
+															(
+																pcCommandString,		/* The command string itself. */
+																xParameterNumber,		/* Return the next parameter. */
+																&xParameterStringLength	/* Store the parameter string length. */
+															);
+	memset(str, 0, sizeof(str));
+	if(xParameterStringLength > 5){
+		strncpy( ( char * ) pcWriteBuffer, ( const char * ) pcInvalidCommand, strlen( ( char * ) pcInvalidCommand ) );
+		return pdFALSE;
+	}
+	strncat(str, ( const char * ) pcParameterString, xParameterStringLength);
+
+	if(num_page == 0){
+		num_page = atoi(str);
+		if(num_page <= 0){
+			strncpy( ( char * ) pcWriteBuffer, ( const char * ) pcInvalidCommand, strlen( ( char * ) pcInvalidCommand ) );
+			return pdFALSE;
+		}
+	}
+
+	switch(i){
+	case ARG_HISTORY_EVENTS:
+		if(start){
+			start = false;
+			/* Return the next command help string, before moving the pointer on to
+			the next command in the list. */
+			strncpy( ( char * ) pcWriteBuffer, ( const char * ) pcControllerHistoryTableHeader, strlen( ( char * ) pcControllerHistoryTableHeader ) );
+			memset(str, 0, sizeof(str));
+			strcat(( char * ) pcWriteBuffer, "\r\n");
+			sprintf(str, "Количество страниц журнала: %d\r\n", History_GetPageCount());
+			strncat(( char * ) pcWriteBuffer, str, strlen(str));
+			strcat(( char * ) pcWriteBuffer, "\r\n");
+
+			if(num_page > History_GetPageCount())
+				num_page = History_GetPageCount();
+		}
+
+		History_GetPage_tabs(( char * ) pcWriteBuffer, num_page_temp);
+
+		num_page --;
+		num_page_temp ++;
+		if(num_page == 0){
+			num_page = 0;
+			num_page_temp = 1;
+			start = true;
+			xReturn = pdFALSE;
+		}
+		else{
+			xReturn = pdTRUE;
+		}
+		break;
+	case ARG_HISTORY_UPS:
+		if(start){
+			start = false;
+			/* Return the next command help string, before moving the pointer on to
+			the next command in the list. */
+			strncpy( ( char * ) pcWriteBuffer, ( const char * ) pcUPShistoryTableHeader, strlen( ( char * ) pcUPShistoryTableHeader ) );
+			memset(str, 0, sizeof(str));
+			sprintf(str, "Количество страниц журнала: %d\r\n", LOG_GetPageCount());
+			strncat(( char * ) pcWriteBuffer, str, strlen(str));
+
+			if(num_page > LOG_GetPageCount())
+				num_page = LOG_GetPageCount();
+		}
+
+		LOG_GetPage_tabs(( char * ) pcWriteBuffer, num_page_temp);
+
+		num_page --;
+		num_page_temp ++;
+		if(num_page == 0){
+			num_page = 0;
+			num_page_temp = 1;
+			start = true;
+			xReturn = pdFALSE;
+		}
+		else{
+			xReturn = pdTRUE;
+		}
+		break;
+	default:
+		strncpy( ( char * ) pcWriteBuffer, ( const char * ) pcInvalidCommand, strlen( ( char * ) pcInvalidCommand ) );
+		xReturn = pdFALSE;
+		break;
+	}
+
+	return xReturn;
+}
+
+/*
+ * Implements the sensor info command.
+ */
+static portBASE_TYPE prvTaskSensorCommand( int8_t *pcWriteBuffer, size_t xWriteBufferLen, const int8_t *pcCommandString ){
+	int8_t *pcParameterString;
+	signed portBASE_TYPE xParameterStringLength, xReturn;
+	portBASE_TYPE xParameterNumber = 1;
+	uint8_t i;
+	char str[10];
+	char temp_str[10];
+	int32_t val = 0, val2 = 0;
+	uint8_t fail = 0;
+	static uint8_t config_menu = 0;
+
+	const int8_t * const pcSensorTableHeader = ( int8_t * ) "\r\n*********Параметры Контроллера*********\r\n";
+
+	( void ) pcCommandString;
+	( void ) xWriteBufferLen;
+	configASSERT( pcWriteBuffer );
+
+	memset(pcWriteBuffer, 0, configCOMMAND_INT_MAX_OUTPUT_SIZE);
+	/* Obtain the parameter string. */
+	pcParameterString = ( int8_t * ) FreeRTOS_CLIGetParameter
+															(
+																pcCommandString,		/* The command string itself. */
+																xParameterNumber,		/* Return the next parameter. */
+																&xParameterStringLength	/* Store the parameter string length. */
+															);
+	if(pcParameterString == NULL){
+		strncpy( ( char * ) pcWriteBuffer, ( const char * ) pcInvalidCommand, strlen( ( char * ) pcInvalidCommand ) );
+		return pdFALSE;
+	}
+
+	for(i = 0; i < ARG_SENSOR_ALL; i ++){
+		if( strncmp( ( const char * ) pcParameterString, sensor_args_list[i], strlen(sensor_args_list[i]) ) == 0 ){
+			break;
+		}
+	}
+
+	xParameterNumber ++;
+	/* Obtain the parameter string. */
+	pcParameterString = ( int8_t * ) FreeRTOS_CLIGetParameter
+															(
+																pcCommandString,		/* The command string itself. */
+																xParameterNumber,		/* Return the next parameter. */
+																&xParameterStringLength	/* Store the parameter string length. */
+															);
+	if(pcParameterString == NULL){
+		if(i == ARG_SENSOR_INFO){
+			switch(config_menu){
+			case 0:
+				/* Return the next command help string, before moving the pointer on to
+				the next command in the list. */
+				strncpy( ( char * ) pcWriteBuffer, ( const char * ) pcSensorTableHeader, strlen( ( char * ) pcSensorTableHeader ) );
+				ups_sensor_param(pcWriteBuffer);
+				break;
+			case 1:
+				ups_sensor_akb_param(pcWriteBuffer);
+				break;
+			case 2:
+				inouts_sensor_param(pcWriteBuffer);
+				break;
+			}
+
+			config_menu ++;
+			if(config_menu == 3){
+				config_menu = 0;
+				return pdFALSE;
+			}
+			else{
+				return pdTRUE;
+			}
+		}
+		else{
+			strncpy( ( char * ) pcWriteBuffer, ( const char * ) pcInvalidCommand, strlen( ( char * ) pcInvalidCommand ) );
+		}
+	}
+	else{
+		switch(i){
+		case ARG_SENSOR_SETUP:
+			if(telnet_code_auth != ADMIN){
+				strncpy( ( char * ) pcWriteBuffer, ( const char * ) pcPermissionDenied, strlen( ( char * ) pcPermissionDenied ) );
+				return pdFALSE;
+			}
+			memset(str, 0, sizeof(str));
+			if(xParameterStringLength > (int32_t)sizeof(str))
+				xParameterStringLength = sizeof(str) - 1;
+			strncat(str, ( const char * ) pcParameterString, xParameterStringLength);
+			if(xParameterStringLength < 3){
+				xParameterNumber ++;
+				/* Obtain the parameter string. */
+				pcParameterString = ( int8_t * ) FreeRTOS_CLIGetParameter
+																		(
+																			pcCommandString,		/* The command string itself. */
+																			xParameterNumber,		/* Return the next parameter. */
+																			&xParameterStringLength	/* Store the parameter string length. */
+																		);
+				memset(temp_str, 0, sizeof(str));
+				if(xParameterStringLength > 1){
+					fail = 1;
+					break;
+				}
+				strncat(temp_str, ( const char * ) pcParameterString, xParameterStringLength);
+				if(!isdigit_int(temp_str[0])){
+					fail = 1;
+					break;
+				}
+				val = atoi(temp_str);
+
+				xParameterNumber ++;
+				/* Obtain the parameter string. */
+				pcParameterString = ( int8_t * ) FreeRTOS_CLIGetParameter
+																		(
+																			pcCommandString,		/* The command string itself. */
+																			xParameterNumber,		/* Return the next parameter. */
+																			&xParameterStringLength	/* Store the parameter string length. */
+																		);
+				memset(temp_str, 0, sizeof(str));
+				if(xParameterStringLength > 1){
+					fail = 1;
+					break;
+				}
+				strncat(temp_str, ( const char * ) pcParameterString, xParameterStringLength);
+				if(!isdigit_int(temp_str[0])){
+					fail = 1;
+					break;
+				}
+				if(strncmp(str, "DI", 2) == 0){
+					if(val != 1){
+						fail = 1;
+						break;
+					}
+
+					val2 = atoi(temp_str);
+					if(val2 < 0 || val2 > 1){
+						fail = 1;
+						break;
+					}
+					SetDINTypeActStr(temp_str, (val - 1));
+					SETTINGS_Save();
+					log_event_data(LOG_SETTING_SAVE, name_login_telnet);
+
+				}
+				else if(strncmp(str, "DO", 2) == 0){
+					if(val < 1 || val > 3){
+						fail = 1;
+						break;
+					}
+
+					val2 = atoi(temp_str);
+					if(val2 < 1 || val2 > 5){
+						fail = 1;
+						break;
+					}
+					SetROTypeActStr(temp_str, (val - 1));
+					SETTINGS_Save();
+					log_event_data(LOG_SETTING_SAVE, name_login_telnet);
+				}
+			}
+			else{
+				fail = 1;
+			}
+
+		break;
+		default:
+			strncpy( ( char * ) pcWriteBuffer, ( const char * ) pcInvalidCommand, strlen( ( char * ) pcInvalidCommand ) );
+		break;
+		}
+	}
+
+	if(fail)
+		strncpy( ( char * ) pcWriteBuffer, ( const char * ) pcInvalidCommand, strlen( ( char * ) pcInvalidCommand ) );
+
+	xReturn = pdFALSE;
+
+
+	return xReturn;
+}
+
+/*
+ * Implements the firmware download http command.
+ */
+static portBASE_TYPE prvTaskUploadCommand( int8_t *pcWriteBuffer, size_t xWriteBufferLen, const int8_t *pcCommandString ){
+	static bool start_update = true;
+	const int8_t *const pcUploadHeader = ( int8_t * ) "Контроллер переводится в режим загрузчика\r\n";
+
+	( void ) pcCommandString;
+	( void ) xWriteBufferLen;
+
+	if(telnet_code_auth != ADMIN){
+		strncpy( ( char * ) pcWriteBuffer, ( const char * ) pcPermissionDenied, strlen( ( char * ) pcPermissionDenied ) );
+		return pdFALSE;
+	}
+
+	if(start_update){
+		start_update = false;
+		strcpy( ( char * ) pcWriteBuffer, ( char * ) pcUploadHeader );
+		return pdTRUE;
+	}
+	else{
+		telnet_act = true;
+		HTTP_StartResetTask(true);
+		return pdFALSE;
+	}
+}
+
+/*
+ * Implements the ups command.
+ */
+static portBASE_TYPE prvTaskUPSCommand( int8_t *pcWriteBuffer, size_t xWriteBufferLen, const int8_t *pcCommandString ){
+	int8_t *pcParameterString;
+	signed portBASE_TYPE xParameterStringLength, xReturn;
+	portBASE_TYPE xParameterNumber = 1;
+	char str[110];
+	int32_t val = 0;
+	float val_float = 0;
+	int8_t res = 0;
+	uint8_t i;
+
+	( void ) pcCommandString;
+	( void ) xWriteBufferLen;
+	configASSERT( pcWriteBuffer );
+
+	memset(pcWriteBuffer, 0, configCOMMAND_INT_MAX_OUTPUT_SIZE);
+
+	if(telnet_code_auth != ADMIN && i !=ARG_CONFIG_INFO){
+		strncpy( ( char * ) pcWriteBuffer, ( const char * ) pcPermissionDenied, strlen( ( char * ) pcPermissionDenied ) );
+		return pdFALSE;
+	}
+
+	/* Obtain the parameter string. */
+	pcParameterString = ( int8_t * ) FreeRTOS_CLIGetParameter
+															(
+																pcCommandString,		/* The command string itself. */
+																xParameterNumber,		/* Return the next parameter. */
+																&xParameterStringLength	/* Store the parameter string length. */
+															);
+	for(i = 0; i < ARG_UPS_ALL; i ++){
+		if( strncmp( ( const char * ) pcParameterString, ups_args_list[i], strlen(ups_args_list[i]) ) == 0 ){
+			break;
+		}
+	}
+	xParameterNumber ++;
+
+	/* Obtain the parameter string. */
+	pcParameterString = ( int8_t * ) FreeRTOS_CLIGetParameter
+															(
+																pcCommandString,		/* The command string itself. */
+																xParameterNumber,		/* Return the next parameter. */
+																&xParameterStringLength	/* Store the parameter string length. */
+															);
+	memset(str, 0, sizeof(str));
+	if(xParameterStringLength > 3){
+		strncpy( ( char * ) pcWriteBuffer, ( const char * ) pcInvalidCommand, strlen( ( char * ) pcInvalidCommand ) );
+		return pdFALSE;
+	}
+	strncat(str, ( const char * ) pcParameterString, xParameterStringLength);
+
+	switch(i){
+	case ARG_UPS_BATTEST:
+		for(uint8_t j = 0; j < xParameterStringLength; j++){
+			if(!isdigit_int(str[j])){
+				strncpy( ( char * ) pcWriteBuffer, ( const char * ) pcInvalidCommand, strlen( ( char * ) pcInvalidCommand ) );
+				return pdFALSE;
+			}
+		}
+		val = atoi(str);
+		 if(val == 0){
+			  res = ups_metac_service_pdu(ups_cancel_test);
+			  if(res == 1){
+				  log_event_data(LOG_TEST_UPS, "Администратор (Останов)");
+				  strcpy( ( char * ) pcWriteBuffer, "\t\tТест остановлен!\r\n");
+			  }
+			  else{
+				  strcpy( ( char * ) pcWriteBuffer, "\t\tТест не удалось остановить!\r\n");
+			  }
+		  }
+		  else if(val > 0 && val < 100){
+			  TimeParam = val;
+			  res = ups_metac_service_pdu(ups_test_time);
+			  if(res == 1){
+				  log_event_data(LOG_TEST_UPS, "Администратор (Запущен)");
+				  strcpy( ( char * ) pcWriteBuffer, "\t\tТест запущен!\r\n");
+			  }
+			  else{
+				  strcpy( ( char * ) pcWriteBuffer, "\t\tТест не удалось запустить!\r\n");
+			  }
+		  }
+		  else if(val == 100){
+			  res = ups_metac_service_pdu(ups_test_10sec);
+			  if(res == 1){
+				  log_event_data(LOG_TEST_UPS, "Администратор (Запущен)");
+				  strcpy( ( char * ) pcWriteBuffer, "\t\tТест запущен!\r\n");
+			  }
+			  else{
+				  strcpy( ( char * ) pcWriteBuffer, "\t\tТест не удалось запустить!\r\n");
+			  }
+		  }
+		  else if(val == 999){
+			  res = ups_metac_service_pdu(ups_test_low_bat);
+			  if(res == 1){
+				  log_event_data(LOG_TEST_UPS, "Администратор (Запущен)");
+				  strcpy( ( char * ) pcWriteBuffer, "\t\ttТест запущен!\r\n");
+			  }
+			  else{
+				  strcpy( ( char * ) pcWriteBuffer, "\t\tТест не удалось запустить!\r\n");
+			  }
+		  }
+		  else{
+			  strncpy( ( char * ) pcWriteBuffer, ( const char * ) pcInvalidCommand, strlen( ( char * ) pcInvalidCommand ) );
+		  }
+		break;
+	case ARG_UPS_SHUTDOWN:
+		for(uint8_t j = 0; j < xParameterStringLength; j++){
+			if(!isfloatdigit(str[j])){
+				strncpy( ( char * ) pcWriteBuffer, ( const char * ) pcInvalidCommand, strlen( ( char * ) pcInvalidCommand ) );
+				return pdFALSE;
+			}
+		}
+		val_float = atof(str);
+		if(val_float == 0){
+			  res = ups_metac_service_pdu(ups_cancel_shut_down);
+				if(res == 1){
+					log_event_data(LOG_SHUTDOWN_UPS, "Администратор (Останов)");
+					strcpy( ( char * ) pcWriteBuffer, "\t\t\tВыключение нагрузки ИБП отменено!\r\n");
+				}
+				 else{
+				     strcpy( ( char * ) pcWriteBuffer, "\t\tВыключение нагрузки ИБП не удалось отменить!\r\n");
+			     }
+		}
+		else if(val_float > 0 && val_float <= 10){
+			TimeParamFloat = val_float;
+			res = ups_metac_service_pdu(ups_shutdown);
+			if(res == 1){
+				log_event_data(LOG_SHUTDOWN_UPS, "Администратор");
+				strcpy( ( char * ) pcWriteBuffer, "\t\tОтключение нагрузки ИБП!\r\n");
+			}
+			else{
+				strcpy( ( char * ) pcWriteBuffer, "\t\tОтключение нагрузки ИБП не удалось!\r\n");
+			}
+		}
+		 else{
+			 strncpy( ( char * ) pcWriteBuffer, ( const char * ) pcInvalidCommand, strlen( ( char * ) pcInvalidCommand ) );
+		}
+		break;
+	default:
+		strncpy( ( char * ) pcWriteBuffer, ( const char * ) pcInvalidCommand, strlen( ( char * ) pcInvalidCommand ) );
+		break;
+	}
+	xReturn = pdFALSE;
+
+	return xReturn;
+}
+
+/*-----------------------------------------------------------*/
+

+ 86 - 0
modules/Telnet_Server/CLI_Commands.h

@@ -0,0 +1,86 @@
+/*
+ * CLI_Commands.h
+ *
+ *  Created on: 29.11.2017
+ *      Author: balbekova
+ */
+
+#ifndef CLI_COMMANDS_H_
+#define CLI_COMMANDS_H_
+
+
+typedef enum{
+	INFO_ADDRESS = 0,
+	INFO_OWNER,
+	INFO_COMMENTS,
+	INFO_ALL_ARGS
+}info_args_t;
+
+typedef enum{
+	ARG_UPS_BATTEST = 0,
+	ARG_UPS_SHUTDOWN,
+	ARG_UPS_ALL
+}ups_args_t;
+
+typedef enum{
+	ARG_SYSTIME_DATA = 0,
+	ARG_SYSTIME_TIME,
+	ARG_SYSTIME_ALL
+}systime_args_t;
+
+typedef enum{
+	ARG_NETWORK_INFO = 0,
+	ARG_NETWORK_DHCP,
+	ARG_NETWORK_IP,
+	ARG_NETWORK_GW,
+	ARG_NETWORK_MASK,
+	ARG_NETWORK_ALL
+}network_args_t;
+
+typedef enum{
+	ARG_SNMP_INFO = 0,
+	ARG_SNMP_SERVER,
+	ARG_SNMP_COMMUNITY,
+	ARG_SNMP_ALL
+}snmp_args_t;
+
+typedef enum{
+	ARG_NTP_ENABLE = 0,
+	ARG_NTP_DISABLE,
+	ARG_NTP_INFO,
+	ARG_NTP_SET,
+	ARG_NTP_ALL
+}ntp_args_t;
+
+typedef enum{
+	ARG_CONFIG_INFO = 0,
+	ARG_CONFIG_LOAD,
+	ARG_CONFIG_ALL
+}config_args_t;
+
+typedef enum{
+	ARG_NETCONFIG_APPLY = 0,
+	ARG_NETCONFIG_CONFIRM,
+	ARG_NETCONFIG_ALL
+}netconfig_args_t;
+
+typedef enum{
+	ARG_HISTORY_EVENTS = 0,
+	ARG_HISTORY_UPS,
+	ARG_HISTORY_ALL
+}history_args_t;
+
+typedef enum{
+	ARG_SENSOR_INFO = 0,
+	ARG_SENSOR_SETUP,
+	ARG_SENSOR_ALL
+}sensor_args_t;
+
+typedef enum{
+	ARG_USER_PWD = 0,
+	ARG_USER_ALL
+}user_args_t;
+
+void vRegisterCLICommands(void);
+
+#endif /* CLI_COMMANDS_H_ */

+ 311 - 0
modules/Telnet_Server/CLI_Parameters.c

@@ -0,0 +1,311 @@
+/*
+ * CLI_Parameters.c
+ *
+ *  Created on: 04.12.2017
+ *      Author: balbekova
+ */
+
+#include <stdint.h>
+#include <string.h>
+#ifdef PRINTF_STDLIB
+#include <stdio.h>
+#endif
+#ifdef PRINTF_CUSTOM
+#include "tinystdio.h"
+#endif
+
+#include "CLI_Parameters.h"
+#include "parameters.h"
+#include "settings_api.h"
+
+
+/**
+  * @brief  Общая структура настроек
+  */
+extern SETTINGS_t sSettings;
+
+
+//Настройки SNMP
+void snmp_config_param(int8_t *buf)
+{
+	char str[20];
+	uint8_t len = 0;
+
+
+	const int8_t * const pcInfoTableHeader = ( int8_t * ) "\r\n***********SNMP настройки Контроллера***********\r\n";
+	/* Return the next command help string, before moving the pointer on to
+	the next command in the list. */
+	strncpy( ( char * ) buf, ( const char * ) pcInfoTableHeader, strlen( ( char * ) pcInfoTableHeader ) );
+
+	GetManagerIp(str, &len);
+	strcat(( char * ) buf, "Ceрвер 1:\t\t\t");
+	strncat(( char * ) buf, str, len);
+
+	strcat(( char * ) buf, "\r\nСервер 2:\t\t\t");
+	GetManagerIp2(str, &len);
+	strncat(( char * ) buf, str, len);
+
+	strcat(( char * ) buf, "\r\nСервер 3:\t\t\t");
+	GetManagerIp3(str, &len);
+	strncat(( char * ) buf, str, len);
+
+	strcat(( char * ) buf, "\r\nСервер 4:\t\t\t");
+	GetManagerIp4(str, &len);
+	strncat(( char * ) buf, str, len);
+
+	strcat(( char * ) buf, "\r\nСервер 5:\t\t\t");
+	GetManagerIp5(str, &len);
+	strncat(( char * ) buf, str, len);
+
+	strcat(( char * ) buf, "\r\nRead community:\t\t\t");
+	GetReadCommunity(str, &len);
+	strncat(( char * ) buf, str, len);
+
+	strcat(( char * ) buf, "\r\nWrite community:\t\t");
+	GetWriteCommunity(str, &len);
+	strncat(( char * ) buf, str, len);
+
+	strcat(( char * ) buf, "\r\n");
+}
+
+//Настройки сухих контактов
+void inouts_config_param(int8_t *buf)
+{
+	char str[20];
+	char str_temp[20];
+	uint8_t len = 0;
+
+	const int8_t * const pcInOutsTableHeader = ( int8_t * ) "\r\n*********Настройки сухих контактов Контроллера*********\r\n";
+	const int8_t * const pcDryInsTableHeader = ( int8_t * ) "Дискретные входы\r\n";
+	const int8_t * const pcDryInsTableHeader2 = ( int8_t * ) "\r\nКонтакт\t\tНормальное состояние\r\n";
+	const int8_t * const pcRelaysTableHeader = ( int8_t * ) "Релейные выходы\r\n";
+	const int8_t * const pcRelaysTableHeader2 = ( int8_t * ) "\r\nКонтакт\t\tИсточник\r\n";
+	const int8_t * const pcSharedTableHeader = ( int8_t * ) "------------+--------------------------------------------\r\n";
+
+
+	/* Return the next command help string, before moving the pointer on to
+	the next command in the list. */
+	strncpy( ( char * ) buf, ( const char * ) pcInOutsTableHeader, strlen( ( char * ) pcInOutsTableHeader ) );
+
+	strncat( ( char * ) buf, ( const char * ) pcDryInsTableHeader, strlen( ( char * ) pcDryInsTableHeader ) );
+	strncat( ( char * ) buf, ( const char * ) pcDryInsTableHeader2, strlen( ( char * ) pcDryInsTableHeader2 ) );
+	strncat( ( char * ) buf, ( const char * ) pcSharedTableHeader, strlen( ( char * ) pcSharedTableHeader ) );
+
+	GetDINTypeActStr(str, &len, 0);
+	strcat(( char * ) buf, "1:\t\t");
+	switch(str[0]){
+	case '0':
+		strcat(( char * ) buf, "Разомкнут\r\n");
+		break;
+	case '1':
+		strcat(( char * ) buf, "Замкнут\r\n");
+		break;
+	}
+	strncat( ( char * ) buf, ( const char * ) pcSharedTableHeader, strlen( ( char * ) pcSharedTableHeader ) );
+	strcat(( char * ) buf, "\r\n");
+
+	strncat( ( char * ) buf, ( const char * ) pcRelaysTableHeader, strlen( ( char * ) pcRelaysTableHeader ) );
+	strncat( ( char * ) buf, ( const char * ) pcRelaysTableHeader2, strlen( ( char * ) pcRelaysTableHeader2 ) );
+	strncat( ( char * ) buf, ( const char * ) pcSharedTableHeader, strlen( ( char * ) pcSharedTableHeader ) );
+
+	for(uint8_t i = 0; i < OUTPUTS_TOTAL_COUNT; i++){
+		GetROTypeActStr(str, &len, i);
+		memset(str_temp, 0, strlen(str_temp));
+		sprintf(str_temp, "%d:\t\t", i);
+		strncat(( char * ) buf, str_temp, strlen(str_temp));
+		switch(str[0]){
+		case '0':
+			strcat(( char * ) buf, "Наличие сети\r\n");
+			break;
+		case '1':
+			strcat(( char * ) buf, "Наличие выходного напряжения\r\n");
+			break;
+		case '2':
+			strcat(( char * ) buf, "Разряд АКБ\r\n");
+			break;
+		case '3':
+			strcat(( char * ) buf, "Отключение АКБ\r\n");
+			break;
+		case '4':
+			strcat(( char * ) buf, "SNMP SET\r\n");
+			break;
+		}
+		strcat(( char * ) buf, "\r\n");
+	}
+	strncat( ( char * ) buf, ( const char * ) pcSharedTableHeader, strlen( ( char * ) pcSharedTableHeader ) );
+}
+
+//Сетевые настройки
+void net_config_param(int8_t *buf)
+{
+	char str[20];
+	uint8_t len = 0;
+
+	const int8_t * const pcInfoTableHeader = ( int8_t * ) "\r\n*********Сетевые настройки Контроллера*********\r\n";
+	/* Return the next command help string, before moving the pointer on to
+	the next command in the list. */
+	strncpy( ( char * ) buf, ( const char * ) pcInfoTableHeader, strlen( ( char * ) pcInfoTableHeader ) );
+
+	GetDhcpStateStrRu(str, &len);
+	strcat(( char * ) buf, "DHCP:\t\t\t\t");
+	strncat(( char * ) buf, str, len);
+
+	strcat(( char * ) buf, "\r\nIP адрес:\t\t\t");
+	GetIpStr(str, &len);
+	strncat(( char * ) buf, str, len);
+
+	strcat(( char * ) buf, "\r\nАдрес шлюза:\t\t\t");
+	GetGatewayStr(str, &len);
+	strncat(( char * ) buf, str, len);
+
+	strcat(( char * ) buf, "\r\nАдрес маски подсети:\t\t");
+	GetMaskStr(str, &len);
+	strncat(( char * ) buf, str, len);
+
+
+	strcat(( char * ) buf, "\r\n");
+}
+
+//Настройки времени
+void time_config_param(int8_t *buf)
+{
+	char str[20];
+	uint8_t len = 0;
+
+	const int8_t * const pcTimeTableHeader = ( int8_t * ) "\r\n*********Настройки времени Контроллера*********\r\n";
+	/* Return the next command help string, before moving the pointer on to
+	the next command in the list. */
+	strncpy( ( char * ) buf, ( const char * ) pcTimeTableHeader, strlen( ( char * ) pcTimeTableHeader ) );
+
+	GetSntpStateStrRU(str, &len);
+	strcat(( char * ) buf, "Режим установки времени:\t");
+	strncat(( char * ) buf, str, len);
+
+	strcat(( char * ) buf, "\r\nЧасовой пояс:\t\t\t");
+	GetSntpTimeZoneStr(str, &len);
+	strncat(( char * ) buf, str, len);
+
+	if(sSettings.sSNTP.sntpEnable){
+		strcat(( char * ) buf, "\r\nIP адрес NTP сервера:\t\t");
+		GetSntpServerIpStr(str, &len);
+		strncat(( char * ) buf, str, len);
+
+		strcat(( char * ) buf, "\r\nПоследняя дата синхронизации:\t");
+		GetSntpLastDataStr(str, &len);
+		strncat(( char * ) buf, str, len);
+
+	}
+	else{
+		GetDateStr(str, &len);
+		strcat(( char * ) buf, "Дата:\t\t\t");
+		strncat(( char * ) buf, str, len);
+
+		strcat(( char * ) buf, "\r\nВремя:\t\t\t");
+		GetTimeStr(str, &len);
+		strncat(( char * ) buf, str, len);
+	}
+
+	strcat(( char * ) buf, "\r\n");
+}
+
+//Параметры ИБП
+void ups_sensor_param(int8_t *buf)
+{
+	char str[20];
+	uint8_t len = 0;
+
+	GetConnectUPSAlarmStr(str, &len);
+	strcat(( char * ) buf, "\r\nСвязь с ИБП:\t\t\t\t");
+	strncat(( char * ) buf, str, len);
+
+	const int8_t * const pcUPSInfoTableHeader = ( int8_t * ) "\r\n\r\n***********Параметры источника питания***********\r\n";
+	/* Return the next command help string, before moving the pointer on to
+	the next command in the list. */
+	strncat( ( char * ) buf, ( const char * ) pcUPSInfoTableHeader, strlen( ( char * ) pcUPSInfoTableHeader ) );
+
+	GetInputVoltageStr(str, &len);
+	strcat(( char * ) buf, "Входное напряжение (VAC):\t\t");
+	strncat(( char * ) buf, str, len);
+
+	strcat(( char * ) buf, "\r\nВыходное напряжение (VAC):\t\t");
+	GetOutputVoltageStr(str, &len);
+	strncat(( char * ) buf, str, len);
+
+	strcat(( char * ) buf, "\r\nВходная частота:\t\t\t");
+	GetInputFreqStr(str, &len);
+	strncat(( char * ) buf, str, len);
+
+	strcat(( char * ) buf, "\r\nНагрузка:\t\t\t\t");
+	GetPowerStr(str, &len);
+	strncat(( char * ) buf, str, len);
+
+	strcat(( char * ) buf, "\r\nТекущий режим:\t\t\t\t");
+	GetUPSModeStr(str, &len);
+	strncat(( char * ) buf, str, len);
+
+	strcat(( char * ) buf, "\r\nСтатус:\t\t\t\t\t");
+	GetUPSAlarmStr(str, &len);
+	strncat(( char * ) buf, str, len);
+
+	strcat(( char * ) buf, "\r\n");
+}
+
+//Параметры аккумуляторных батарей
+void ups_sensor_akb_param(int8_t *buf)
+{
+	char str[20];
+	uint8_t len = 0;
+
+	const int8_t * const pcAKBInfoTableHeader = ( int8_t * ) "\r\n*********Параметры аккумуляторных батарей*********\r\n";
+	/* Return the next command help string, before moving the pointer on to
+	the next command in the list. */
+	strncpy( ( char * ) buf, ( const char * ) pcAKBInfoTableHeader, strlen( ( char * ) pcAKBInfoTableHeader ) );
+
+	GetBatCapacityStr(str, &len);
+	strcat(( char * ) buf, "Емкость батареи:\t\t\t");
+	strncat(( char * ) buf, str, len);
+
+	strcat(( char * ) buf, "\r\nВнутренняя температура:\t\t\t");
+	GetInternalTempStr(str, &len);
+	strncat(( char * ) buf, str, len);
+
+	strcat(( char * ) buf, "\r\nОставшееся время работы:\t\t");
+	GetRuntimeStr(str, &len);
+	strncat(( char * ) buf, str, len);
+
+	strcat(( char * ) buf, "\r\nСтатус:\t\t\t\t\t");
+	GetAKBAlarmStr(str, &len);
+	strncat(( char * ) buf, str, len);
+
+	strcat(( char * ) buf, "\r\n");
+}
+
+//Параметры сухих контактов
+void inouts_sensor_param(int8_t *buf)
+{
+	char str[20];
+	uint8_t len = 0;
+
+	const int8_t * const pcInOutsInfoTableHeader = ( int8_t * ) "\r\n************Параметры сухих контактов************\r\n";
+	/* Return the next command help string, before moving the pointer on to
+	the next command in the list. */
+	strncpy( ( char * ) buf, ( const char * ) pcInOutsInfoTableHeader, strlen( ( char * ) pcInOutsInfoTableHeader ) );
+
+	GetDIN0StatusStrRU(str, &len);
+	strcat(( char * ) buf, "Дискретный вход:\t\t\t");
+	strncat(( char * ) buf, str, len);
+
+	strcat(( char * ) buf, "\r\nРелейный выход 1:\t\t\t");
+	GetDOUTStatusStrRU(str, &len, 0);
+	strncat(( char * ) buf, str, len);
+
+	strcat(( char * ) buf, "\r\nРелейный выход 2:\t\t\t");
+	GetDOUTStatusStrRU(str, &len, 1);
+	strncat(( char * ) buf, str, len);
+
+	strcat(( char * ) buf, "\r\nРелейный выход 3:\t\t\t");
+	GetDOUTStatusStrRU(str, &len, 2);
+	strncat(( char * ) buf, str, len);
+
+	strcat(( char * ) buf, "\r\n");
+}

+ 33 - 0
modules/Telnet_Server/CLI_Parameters.h

@@ -0,0 +1,33 @@
+/*
+ * CLI_Parameters.h
+ *
+ *  Created on: 04.12.2017
+ *      Author: balbekova
+ */
+
+#ifndef CLI_PARAMETERS_H_
+#define CLI_PARAMETERS_H_
+
+
+//Настройки SNMP
+void snmp_config_param(int8_t *buf);
+
+//Настройки сухих контактов
+void inouts_config_param(int8_t *buf);
+
+//Сетевые настройки
+void net_config_param(int8_t *buf);
+
+//Настройки времени
+void time_config_param(int8_t *buf);
+
+//Параметры ИБП
+void ups_sensor_param(int8_t *buf);
+
+//Параметры аккумуляторных батарей
+void ups_sensor_akb_param(int8_t *buf);
+
+//Параметры сухих контактов
+void inouts_sensor_param(int8_t *buf);
+
+#endif /* CLI_PARAMETERS_H_ */

+ 420 - 0
modules/Telnet_Server/FreeRTOS_CLI.c

@@ -0,0 +1,420 @@
+/*
+ * FreeRTOS+CLI V1.0.1 (C) 2012 Real Time Engineers ltd.
+ *
+ * FreeRTOS+CLI is an add-on component to FreeRTOS.  It is not, in itself, part
+ * of the FreeRTOS kernel.  FreeRTOS+CLI is licensed separately from FreeRTOS,
+ * and uses a different license to FreeRTOS.  FreeRTOS+CLI uses a dual license
+ * model, information on which is provided below:
+ *
+ * - Open source licensing -
+ * FreeRTOS+CLI is a free download and may be used, modified and distributed
+ * without charge provided the user adheres to version two of the GNU General
+ * Public license (GPL) and does not remove the copyright notice or this text.
+ * The GPL V2 text is available on the gnu.org web site, and on the following
+ * URL: http://www.FreeRTOS.org/gpl-2.0.txt
+ *
+ * - Commercial licensing -
+ * Businesses and individuals who wish to incorporate FreeRTOS+CLI into
+ * proprietary software for redistribution in any form must first obtain a
+ * (very) low cost commercial license - and in-so-doing support the maintenance,
+ * support and further development of the FreeRTOS+CLI product.  Commercial
+ * licenses can be obtained from http://shop.freertos.org and do not require any
+ * source files to be changed.
+ *
+ * FreeRTOS+CLI is distributed in the hope that it will be useful.  You cannot
+ * use FreeRTOS+CLI unless you agree that you use the software 'as is'.
+ * FreeRTOS+CLI is provided WITHOUT ANY WARRANTY; without even the implied
+ * warranties of NON-INFRINGEMENT, MERCHANTABILITY or FITNESS FOR A PARTICULAR
+ * PURPOSE. Real Time Engineers Ltd. disclaims all conditions and terms, be they
+ * implied, expressed, or statutory.
+ *
+ * 1 tab == 4 spaces!
+ *
+ * http://www.FreeRTOS.org
+ * http://www.FreeRTOS.org/FreeRTOS-Plus
+ *
+ */
+
+/* Standard includes. */
+#include <string.h>
+#include <stdint.h>
+
+/* FreeRTOS includes. */
+#include "FreeRTOS.h"
+#include "task.h"
+
+/* Utils includes. */
+#include "FreeRTOS_CLI.h"
+
+
+typedef struct xCOMMAND_INPUT_LIST
+{
+	const CLI_Command_Definition_t *pxCommandLineDefinition;
+	struct xCOMMAND_INPUT_LIST *pxNext;
+} CLI_Definition_List_Item_t;
+
+/*
+ * The callback function that is executed when "help" is entered.  This is the
+ * only default command that is always present.
+ */
+static portBASE_TYPE prvHelpCommand( int8_t *pcWriteBuffer, size_t xWriteBufferLen, const int8_t *pcCommandString );
+
+/* The definition of the "help" command.  This command is always at the front
+of the list of registered commands. */
+static const CLI_Command_Definition_t xHelpCommand =
+{
+	( const int8_t * const ) "help",
+	( const int8_t * const ) "\r\n\thelp: вывод краткого описания поддерживаемых команд\r\n",
+	prvHelpCommand,
+	0
+};
+
+/* The definition of the list of commands.  Commands that are registered are
+added to this list. */
+static CLI_Definition_List_Item_t xRegisteredCommands =
+{
+	&xHelpCommand,	/* The first command in the list is always the help command, defined in this file. */
+	NULL,
+};
+
+/* A buffer into which command outputs can be written is declared here, rather
+than in the command console implementation, to allow multiple command consoles
+to share the same buffer.  For example, an application may allow access to the
+command interpreter by UART and by Ethernet.  Sharing a buffer is done purely
+to save RAM.  Note, however, that the command console itself is not re-entrant,
+so only one command interpreter interface can be used at any one time.  For that
+reason, no attempt at providing mutual exclusion to the cOutputBuffer array is
+attempted. */
+static int8_t cOutputBuffer[ configCOMMAND_INT_MAX_OUTPUT_SIZE ];
+
+/*-----------------------------------------------------------*/
+
+portBASE_TYPE FreeRTOS_CLIRegisterCommand( const CLI_Command_Definition_t * const pxCommandToRegister )
+{
+static CLI_Definition_List_Item_t *pxLastCommandInList = &xRegisteredCommands;
+CLI_Definition_List_Item_t *pxNewListItem;
+portBASE_TYPE xReturn = pdFAIL;
+
+	/* Check the parameter is not NULL. */
+	configASSERT( pxCommandToRegister );
+
+	/* Create a new list item that will reference the command being registered. */
+	pxNewListItem = ( CLI_Definition_List_Item_t * ) pvPortMalloc( sizeof( CLI_Definition_List_Item_t ) );
+	configASSERT( pxNewListItem );
+
+	if( pxNewListItem != NULL )
+	{
+		taskENTER_CRITICAL();
+		{
+			/* Reference the command being registered from the newly created
+			list item. */
+			pxNewListItem->pxCommandLineDefinition = pxCommandToRegister;
+
+			/* The new list item will get added to the end of the list, so
+			pxNext has nowhere to point. */
+			pxNewListItem->pxNext = NULL;
+
+			/* Add the newly created list item to the end of the already existing
+			list. */
+			pxLastCommandInList->pxNext = pxNewListItem;
+
+			/* Set the end of list marker to the new list item. */
+			pxLastCommandInList = pxNewListItem;
+		}
+		taskEXIT_CRITICAL();
+
+		xReturn = pdPASS;
+	}
+
+	return xReturn;
+}
+/*-----------------------------------------------------------*/
+
+portBASE_TYPE FreeRTOS_CLIProcessCommand( const int8_t * const pcCommandInput, int8_t * pcWriteBuffer, size_t xWriteBufferLen  )
+{
+	static const CLI_Definition_List_Item_t *pxCommand = NULL;
+	portBASE_TYPE xReturn = pdTRUE;
+	const int8_t *pcRegisteredCommandString;
+	size_t xCommandStringLength;
+
+	/* Note:  This function is not re-entrant.  It must not be called from more
+	thank one task. */
+
+	if( pxCommand == NULL )
+	{
+		/* Search for the command string in the list of registered commands. */
+		for( pxCommand = &xRegisteredCommands; pxCommand != NULL; pxCommand = pxCommand->pxNext )
+		{
+			pcRegisteredCommandString = pxCommand->pxCommandLineDefinition->pcCommand;
+			xCommandStringLength = strlen( ( const char * ) pcRegisteredCommandString );
+
+			/* To ensure the string lengths match exactly, so as not to pick up
+			a sub-string of a longer command, check the byte after the expected
+			end of the string is either the end of the string or a space before
+			a parameter. */
+			if( ( pcCommandInput[ xCommandStringLength ] == ' ' ) || ( pcCommandInput[ xCommandStringLength ] == 0x00 ) )
+			{
+				if( strncmp( ( const char * ) pcCommandInput, ( const char * ) pcRegisteredCommandString, xCommandStringLength ) == 0 )
+				{
+					/* The command has been found.  Check it has the expected
+					number of parameters.  If cExpectedNumberOfParameters is -1,
+					then there could be a variable number of parameters and no
+					check is made. */
+					if( pxCommand->pxCommandLineDefinition->cExpectedNumberOfParameters >= 0 )
+					{
+						if( prvGetNumberOfParameters( pcCommandInput ) != pxCommand->pxCommandLineDefinition->cExpectedNumberOfParameters )
+						{
+							xReturn = pdFALSE;
+						}
+					}
+
+					break;
+				}
+			}
+		}
+	}
+
+	if( ( pxCommand != NULL ) && ( xReturn == pdFALSE ) )
+	{
+		/* The command was found, but the number of parameters with the command
+		was incorrect. */
+		strncpy( ( char * ) pcWriteBuffer, "Неправильно введены параметры команды.  Введите \"help\" для просмотра списка поддерживаемых команд.\r\n\r\n", xWriteBufferLen );
+		pxCommand = NULL;
+	}
+	else if( pxCommand != NULL )
+	{
+		/* Call the callback function that is registered to this command. */
+		xReturn = pxCommand->pxCommandLineDefinition->pxCommandInterpreter( pcWriteBuffer, xWriteBufferLen, pcCommandInput );
+
+		/* If xReturn is pdFALSE, then no further strings will be returned
+		after this one, and	pxCommand can be reset to NULL ready to search
+		for the next entered command. */
+		if( xReturn == pdFALSE )
+		{
+			pxCommand = NULL;
+		}
+	}
+	else
+	{
+		/* pxCommand was NULL, the command was not found. */
+		strncpy( ( char * ) pcWriteBuffer, ( const char * const ) "Команда не поддерживается.  Введите \"help\" для просмотра списка поддерживаемых команд.\r\n\r\n", xWriteBufferLen );
+		xReturn = pdFALSE;
+	}
+
+	return xReturn;
+}
+/*-----------------------------------------------------------*/
+
+int8_t *FreeRTOS_CLIGetOutputBuffer( void )
+{
+	return cOutputBuffer;
+}
+/*-----------------------------------------------------------*/
+
+const int8_t *FreeRTOS_CLIGetParameter( const int8_t *pcCommandString, unsigned portBASE_TYPE uxWantedParameter, portBASE_TYPE *pxParameterStringLength )
+{
+unsigned portBASE_TYPE uxParametersFound = 0;
+const int8_t *pcReturn = NULL;
+
+	*pxParameterStringLength = 0;
+
+	while( uxParametersFound < uxWantedParameter )
+	{
+		/* Index the character pointer past the current word.  If this is the start
+		of the command string then the first word is the command itself. */
+		while( ( ( *pcCommandString ) != 0x00 ) && ( ( *pcCommandString ) != ' ' ) )
+		{
+			pcCommandString++;
+		}
+
+		/* Find the start of the next string. */
+		while( ( ( *pcCommandString ) != 0x00 ) && ( ( *pcCommandString ) == ' ' ) )
+		{
+			pcCommandString++;
+		}
+
+		/* Was a string found? */
+		if( *pcCommandString != 0x00 )
+		{
+			/* Is this the start of the required parameter? */
+			uxParametersFound++;
+
+			if( uxParametersFound == uxWantedParameter )
+			{
+				/* How long is the parameter? */
+				pcReturn = pcCommandString;
+				while( ( ( *pcCommandString ) != 0x00 ) && ( ( *pcCommandString ) != ' ' ) )
+				{
+					( *pxParameterStringLength )++;
+					pcCommandString++;
+				}
+
+				if( *pxParameterStringLength == 0 )
+				{
+					pcReturn = NULL;
+				}
+
+				break;
+			}
+		}
+		else
+		{
+			break;
+		}
+	}
+
+	return pcReturn;
+}
+/*-----------------------------------------------------------*/
+
+static portBASE_TYPE prvHelpCommand( int8_t *pcWriteBuffer, size_t xWriteBufferLen, const int8_t *pcCommandString )
+{
+	static const CLI_Definition_List_Item_t * pxCommand = NULL;
+	signed portBASE_TYPE xReturn;
+
+	( void ) pcCommandString;
+	//configASSERT( pcWriteBuffer );
+
+	if( pxCommand == NULL )
+	{
+		/* Reset the pxCommand pointer back to the start of the list. */
+		pxCommand = &xRegisteredCommands;
+	}
+	memset(pcWriteBuffer, 0, configCOMMAND_INT_MAX_OUTPUT_SIZE);
+
+	/* Return the next command help string, before moving the pointer on to
+	the next command in the list. */
+	strncpy( ( char * ) pcWriteBuffer, ( const char * ) pxCommand->pxCommandLineDefinition->pcHelpString, xWriteBufferLen );
+	pxCommand = pxCommand->pxNext;
+
+	if( pxCommand == NULL )
+	{
+		/* There are no more commands in the list, so there will be no more
+		strings to return after this one and pdFALSE should be returned. */
+		xReturn = pdFALSE;
+	}
+	else
+	{
+		xReturn = pdTRUE;
+	}
+
+	return xReturn;
+}
+/*-----------------------------------------------------------*/
+
+int8_t prvGetNumberOfParameters( const int8_t * pcCommandString )
+{
+int8_t cParameters = 0;
+portBASE_TYPE xLastCharacterWasSpace = pdFALSE;
+
+	/* Count the number of space delimited words in pcCommandString. */
+	while( *pcCommandString != 0x00 )
+	{
+		if( ( *pcCommandString ) == ' ' )
+		{
+			if( xLastCharacterWasSpace != pdTRUE )
+			{
+				cParameters++;
+				xLastCharacterWasSpace = pdTRUE;
+			}
+		}
+		else
+		{
+			xLastCharacterWasSpace = pdFALSE;
+		}
+
+		pcCommandString++;
+	}
+
+	/* If the command string ended with spaces, then there will have been too
+	many parameters counted. */
+	if( xLastCharacterWasSpace == pdTRUE )
+	{
+		cParameters--;
+	}
+
+	/* The value returned is one less than the number of space delimited words,
+	as the first word should be the command itself. */
+	return cParameters;
+}
+
+/*-----------------------------------------------------------*/
+
+portBASE_TYPE FreeRTOS_CLICompleteCMDCommand( const int8_t * const pcCommandInput, int8_t * pcWriteBuffer)
+{
+	const CLI_Definition_List_Item_t *pxCommand = NULL;
+	portBASE_TYPE xReturn = pdFALSE;
+	const int8_t *pcRegisteredCommandString;
+	size_t xCommandStringLength;
+	int8_t args = 0;
+	char* compl_world;
+	uint8_t cnt_complete = 0 ;
+	uint8_t len = 0;
+	char* end_compl_word;
+	char* end_compl_word2;
+
+	args = prvGetNumberOfParameters(pcCommandInput);
+
+	memset(pcWriteBuffer, 0, configCOMMAND_INT_MAX_OUTPUT_SIZE);
+
+	if(args == 0){
+		for( pxCommand = &xRegisteredCommands; pxCommand != NULL; pxCommand = pxCommand->pxNext )
+		{
+			if (strstr ((char *)pxCommand->pxCommandLineDefinition->pcCommand, (char *)pcCommandInput) == (char *)pxCommand->pxCommandLineDefinition->pcCommand) {
+				compl_world  = (char *)pxCommand->pxCommandLineDefinition->pcCommand;
+				compl_world  += strlen((char *)pcCommandInput);
+				len = strlen(compl_world);
+				cnt_complete ++;
+			}
+		}
+	}
+	else{
+		/* Search for the command string in the list of registered commands. */
+		for( pxCommand = &xRegisteredCommands; pxCommand != NULL; pxCommand = pxCommand->pxNext )
+		{
+			len = 0;
+			pcRegisteredCommandString = pxCommand->pxCommandLineDefinition->pcCommand;
+			xCommandStringLength = strlen( ( const char * ) pcRegisteredCommandString );
+
+			/* To ensure the string lengths match exactly, so as not to pick up
+			a sub-string of a longer command, check the byte after the expected
+			end of the string is either the end of the string or a space before
+			a parameter. */
+			if( ( pcCommandInput[ xCommandStringLength ] == ' ' ) || ( pcCommandInput[ xCommandStringLength ] == 0x00 ) )
+			{
+				if( strncmp( ( const char * ) pcCommandInput, ( const char * ) pcRegisteredCommandString, xCommandStringLength ) == 0 )
+				{
+					compl_world = strstr ((char *)pxCommand->pxCommandLineDefinition->pcHelpString, (char *)pcCommandInput);
+					while (compl_world != NULL) {
+						compl_world  += (strlen((char *)pcCommandInput) - 1 );
+						end_compl_word = strstr(compl_world, ":");
+						if(end_compl_word != NULL){
+							end_compl_word2 = strstr(compl_world, " ");
+
+							if(end_compl_word2 == NULL){
+								if(end_compl_word2 < end_compl_word){
+									if(end_compl_word2[1] != '<'){
+										len = end_compl_word2 - compl_world;
+									}
+								}
+							}
+							else
+								if(strstr(compl_world, ">") == NULL)
+									len = end_compl_word - compl_world;
+							}
+						compl_world = strstr ((char *)pxCommand->pxCommandLineDefinition->pcHelpString, compl_world);
+						cnt_complete ++;
+					}
+
+					break;
+				}
+			}
+		}
+	}
+	if(cnt_complete == 1 && len != 0){
+		strncat((char *)pcWriteBuffer, compl_world, len);
+	}
+
+	return xReturn;
+}
+

+ 122 - 0
modules/Telnet_Server/FreeRTOS_CLI.h

@@ -0,0 +1,122 @@
+/*
+ * FreeRTOS+CLI V1.0.1 (C) 2012 Real Time Engineers ltd.
+ *
+ * FreeRTOS+CLI is an add-on component to FreeRTOS.  It is not, in itself, part 
+ * of the FreeRTOS kernel.  FreeRTOS+CLI is licensed separately from FreeRTOS, 
+ * and uses a different license to FreeRTOS.  FreeRTOS+CLI uses a dual license 
+ * model, information on which is provided below:
+ *
+ * - Open source licensing -
+ * FreeRTOS+CLI is a free download and may be used, modified and distributed
+ * without charge provided the user adheres to version two of the GNU General
+ * Public license (GPL) and does not remove the copyright notice or this text.
+ * The GPL V2 text is available on the gnu.org web site, and on the following
+ * URL: http://www.FreeRTOS.org/gpl-2.0.txt
+ *
+ * - Commercial licensing -
+ * Businesses and individuals who wish to incorporate FreeRTOS+CLI into
+ * proprietary software for redistribution in any form must first obtain a 
+ * (very) low cost commercial license - and in-so-doing support the maintenance, 
+ * support and further development of the FreeRTOS+CLI product.  Commercial 
+ * licenses can be obtained from http://shop.freertos.org and do not require any 
+ * source files to be changed.
+ *
+ * FreeRTOS+CLI is distributed in the hope that it will be useful.  You cannot
+ * use FreeRTOS+CLI unless you agree that you use the software 'as is'.
+ * FreeRTOS+CLI is provided WITHOUT ANY WARRANTY; without even the implied
+ * warranties of NON-INFRINGEMENT, MERCHANTABILITY or FITNESS FOR A PARTICULAR
+ * PURPOSE. Real Time Engineers Ltd. disclaims all conditions and terms, be they
+ * implied, expressed, or statutory.
+ *
+ * 1 tab == 4 spaces!
+ *
+ * http://www.FreeRTOS.org
+ * http://www.FreeRTOS.org/FreeRTOS-Plus
+ *
+ */
+
+#ifndef COMMAND_INTERPRETER_H
+#define COMMAND_INTERPRETER_H
+
+/* The prototype to which callback functions used to process command line
+commands must comply.  pcWriteBuffer is a buffer into which the output from 
+executing the command can be written, xWriteBufferLen is the length, in bytes of 
+the pcWriteBuffer buffer, and pcCommandString is the entire string as input by
+the user (from which parameters can be extracted).*/
+typedef portBASE_TYPE (*pdCOMMAND_LINE_CALLBACK)( int8_t *pcWriteBuffer, size_t xWriteBufferLen, const int8_t * pcCommandString );
+
+/* The structure that defines command line commands.  A command line command
+should be defined by declaring a const structure of this type. */
+typedef struct xCOMMAND_LINE_INPUT
+{
+	const int8_t * const pcCommand;				/* The command that causes pxCommandInterpreter to be executed.  For example "help".  Must be all lower case. */
+	const int8_t * const pcHelpString;			/* String that describes how to use the command.  Should start with the command itself, and end with "\r\n".  For example "help: Returns a list of all the commands\r\n". */
+	const pdCOMMAND_LINE_CALLBACK pxCommandInterpreter;	/* A pointer to the callback function that will return the output generated by the command. */
+	int8_t cExpectedNumberOfParameters;			/* Commands expect a fixed number of parameters, which may be zero. */
+} CLI_Command_Definition_t;
+
+/* For backward compatibility. */
+#define xCommandLineInput CLI_Command_Definition_t
+
+/*
+ * Register the command passed in using the pxCommandToRegister parameter.
+ * Registering a command adds the command to the list of commands that are
+ * handled by the command interpreter.  Once a command has been registered it
+ * can be executed from the command line.
+ */
+portBASE_TYPE FreeRTOS_CLIRegisterCommand( const CLI_Command_Definition_t * const pxCommandToRegister );
+
+/*
+ * Runs the command interpreter for the command string "pcCommandInput".  Any
+ * output generated by running the command will be placed into pcWriteBuffer.
+ * xWriteBufferLen must indicate the size, in bytes, of the buffer pointed to
+ * by pcWriteBuffer.
+ *
+ * FreeRTOS_CLIProcessCommand should be called repeatedly until it returns pdFALSE.
+ *
+ * pcCmdIntProcessCommand is not reentrant.  It must not be called from more
+ * than one task - or at least - by more than one task at a time.
+ */
+portBASE_TYPE FreeRTOS_CLIProcessCommand( const int8_t * const pcCommandInput, int8_t * pcWriteBuffer, size_t xWriteBufferLen  );
+
+/*-----------------------------------------------------------*/
+
+/*
+ * A buffer into which command outputs can be written is declared in the
+ * main command interpreter, rather than in the command console implementation,
+ * to allow application that provide access to the command console via multiple
+ * interfaces to share a buffer, and therefore save RAM.  Note, however, that
+ * the command interpreter itself is not re-entrant, so only one command
+ * console interface can be used at any one time.  For that reason, no attempt
+ * is made to provide any mutual exclusion mechanism on the output buffer.
+ *
+ * FreeRTOS_CLIGetOutputBuffer() returns the address of the output buffer.
+ */
+int8_t *FreeRTOS_CLIGetOutputBuffer( void );
+
+/*
+ * Return a pointer to the xParameterNumber'th word in pcCommandString.
+ */
+const int8_t *FreeRTOS_CLIGetParameter( const int8_t *pcCommandString, unsigned portBASE_TYPE uxWantedParameter, portBASE_TYPE *pxParameterStringLength );
+
+/*
+ * Return the number of parameters that follow the command name.
+ */
+int8_t prvGetNumberOfParameters( const int8_t * pcCommandString );
+
+portBASE_TYPE FreeRTOS_CLICompleteCMDCommand( const int8_t * const pcCommandInput, int8_t * pcWriteBuffer);
+
+#endif /* COMMAND_INTERPRETER_H */
+
+
+
+
+
+
+
+
+
+
+
+
+

+ 612 - 0
modules/Telnet_Server/telnet_server.c

@@ -0,0 +1,612 @@
+/*
+ * telnet_server.c
+ *
+ *  Created on: 24.11.2017
+ *      Author: balbekova
+ */
+
+/* Standard includes. */
+#include <string.h>
+
+/* lwIP core includes */
+#include "lwip/opt.h"
+#include "lwip/sockets.h"
+
+/* FreeRTOS includes. */
+#include "FreeRTOS.h"
+#include "task.h"
+#include "fr_timers.h"
+
+/* Utils includes. */
+#include "FreeRTOS_CLI.h"
+#include "CLI_Commands.h"
+#include "telnet_server.h"
+#include "settings_api.h"
+#include "parameters.h"
+#include "control_symbol.h"
+#include "log.h"
+#include "web_params_api.h"
+
+
+
+/* Dimensions the buffer into which input characters are placed. */
+#define cmdMAX_INPUT_SIZE	144
+/* Repeat Login timeout, 1 seconds */
+#define REPEAT_SENSOR_INFO_TIME		configTICK_RATE_HZ*1*1
+
+static portBASE_TYPE FreeRTOS_CLIAuthProcess( const int8_t * const pcCommandInput, int8_t * pcWriteBuffer  );
+static portBASE_TYPE FreeRTOS_ChangePWDProcess( const int8_t * const pcCommandInput, int8_t * pcWriteBuffer  );
+void SensorInfoTimerCallback(TimerHandle_t pxTimer);
+
+TimerHandle_t RepeatSensorInfoTimer;
+
+state_telnet_server_t telnetState = TELNET_AUTH;
+uint8_t id_change_pwd = 0;
+user_level_t telnet_code_auth = USER;
+
+static int32_t lClientFd;
+static int32_t lSocket;
+static int8_t *pcOutputString;
+static bool flagTelnetChange = false;
+static struct fd_set master_set, read_set, write_set;
+static int max_sd;
+static struct sockaddr_in sa;
+
+/**
+  * @brief  Общая структура настроек
+  */
+extern SETTINGS_t sSettings;
+
+/*-----------------------------------------------------------*/
+
+/* Stop server */
+static void stop_server(void) {
+    /* Clean up all of the sockets that are open */
+    for (int i = 0; i <= max_sd; ++i)
+    {
+       if (FD_ISSET(i, &master_set)) {
+          DBG printf("Close sock %d\n", i);
+          closesocket(i);
+          FD_CLR(i, &master_set);
+       }
+    }
+    DBG printf("Portgw stopped\n");
+}
+
+/* Start server */
+static bool start_server(uint16_t port)
+{
+    int res;
+
+    lSocket = socket(PF_INET, SOCK_STREAM, 0);
+
+    if (lSocket < 0) {
+      DBG printf("Socket create failed\r\n");
+      return false;
+    }
+
+    res = fcntl(lSocket, F_SETFL, O_NONBLOCK);
+    if (res < 0) {
+        DBG printf("fcntl() failed");
+        closesocket(lSocket);
+        return false;
+    }
+
+    memset(&sa, 0, sizeof(struct sockaddr_in));
+    sa.sin_family = AF_INET;
+    sa.sin_addr.s_addr = IPADDR_ANY;
+    sa.sin_port = htons(port);
+
+    if (bind(lSocket, (struct sockaddr *)&sa, sizeof(sa)) == -1)
+    {
+        DBG printf("Bind to port %d failed\n", port);
+        closesocket(lSocket);
+        return false;
+    }
+
+    res = listen(lSocket, 20);
+    if (res < 0) {
+        DBG printf("Listen failed failed\r\n");
+        closesocket(lSocket);
+        return false;
+    }
+
+    FD_ZERO(&master_set);
+    max_sd = lSocket;
+    FD_SET(lSocket, &master_set);
+
+    DBG printf("Port %d opened\n", port);
+
+    return true;
+}
+
+
+void vBasicSocketsCommandInterpreterTask( void *pvParameters )
+{
+	int32_t lBytes, lAddrLen = sizeof( struct sockaddr_in );
+	struct sockaddr_in sLocalAddr;
+	struct sockaddr_in client_addr;
+	const int8_t * const pcWelcomeMessage = ( const int8_t * ) "BT6706 command server - connection accepted.\r\nlogin:";
+	static const int8_t * const pcEndOfCommandOutputString = ( int8_t * ) "\r\n[Нажмите клавишу ENTER для повторного выполнения предыдущей команды]\r\n>";
+	int8_t cInChar, cInputIndex;
+	static int8_t cInputString[ cmdMAX_INPUT_SIZE ] = { 0 }, cLastInputString[ cmdMAX_INPUT_SIZE ] = { 0 };
+	portBASE_TYPE xReturned;
+	int new_sd;
+    int desc_ready, rc;
+    struct timeval timeout;
+    bool close_conn;
+    uint16_t port;
+    bool enabled;
+    bool firstrun = true;
+
+    FD_ZERO(&master_set);
+
+	timeout.tv_sec = 5;
+	timeout.tv_usec = 0;
+
+	( void ) pvParameters;
+	pcOutputString = FreeRTOS_CLIGetOutputBuffer();
+    enabled = sSettings.sTelnet.TelnetEnable;
+    port = ( uint16_t ) sSettings.sTelnet.port;
+
+    while (1) {
+		/* Check if network settings was changed */
+		if ((sSettings.sTelnet.port != port) ||
+				(sSettings.sTelnet.TelnetEnable != enabled) ||
+				(firstrun))
+		{
+
+			if (!firstrun || sSettings.sTelnet.port != port) {
+				/* Stop server */
+				stop_server();
+			}
+
+			if (sSettings.sTelnet.TelnetEnable) {
+				/* (Re)start server */
+				if (!start_server(sSettings.sTelnet.port)) {
+					DBG printf("Server start error\n");
+					firstrun = true;
+					vTaskDelay(5000);
+					continue;
+				}
+			}
+			else {
+				/* Obtain the address of the output buffer.  Note there is no mutual
+				exclusion on this buffer as it is assumed only one command console
+				interface will be used at any one time. */
+				firstrun = true;
+				vTaskDelay(5000);
+				continue;
+			}
+			firstrun = false;
+
+			port = sSettings.sTelnet.port;
+			enabled = sSettings.sTelnet.TelnetEnable;
+		}
+
+		if (!enabled) {
+			firstrun = true;
+			vTaskDelay(5000);
+			continue;
+		}
+
+
+
+		memcpy(&read_set, &master_set, sizeof(master_set));
+
+		DBG printf("Waiting on select()...\n");
+		rc = select(max_sd + 1, &read_set, NULL, NULL, &timeout);
+
+		DBG printf("  select() returned %d\n", rc);
+
+		if (rc < 0) {
+			DBG printf("  select() failed\n");
+		}
+
+		if (rc == 0) {
+			DBG printf("  select() timed out.\n");
+		}
+
+		/* One or more descriptors are readable.  Need to         \
+		 * determine which ones they are.                         */
+		desc_ready = rc;
+
+		for (int i=0; i <= max_sd  &&  desc_ready > 0; ++i) {
+			/*******************************************************/
+			/* Check to see if this descriptor is ready            */
+			/*******************************************************/
+			if (FD_ISSET(i, &read_set)) {
+				/* A descriptor was found that was readable - one  \
+				* less has to be looked for.  This is being done   \
+				* so that we can stop looking at the working set   \
+				* once we have found all of the descriptors that   \
+				* were ready.                                      */
+				desc_ready -= 1;
+
+				/* Check to see if this is the listening socket     */
+				if (i == lSocket) {
+					DBG printf("  Listening socket is readable\n");
+
+					/* Accept all incoming connections that are      */
+					/* queued up on the listening socket before we   */
+					/* loop back and call select again.              */
+					do {
+
+						/* Accept each incoming connection.  If       */
+						/* accept fails with EWOULDBLOCK, then we     */
+						/* have accepted all of them.  Any other      */
+						/* failure on accept will cause us to end the */
+						/* server.                                    */
+						new_sd = accept(lSocket, NULL, NULL);
+						if (new_sd < 0) {
+							if (errno != EWOULDBLOCK) {
+								DBG printf("  accept() failed\n");
+							}
+							break;
+						}
+
+						/* Add the new incoming connection to the     */
+						/* master read set                            */
+						printf("  New incoming connection - %d\n", new_sd);
+						FD_SET(new_sd, &master_set);
+						if (new_sd > max_sd) {
+							max_sd = new_sd;
+							recv( new_sd, cInputString, 27, 0 );
+							telnetState = TELNET_AUTH;
+							send( new_sd, pcWelcomeMessage, strlen( ( const char * ) pcWelcomeMessage ), 0 );
+
+							cInputIndex = 0;
+							memset( cInputString, 0x00, cmdMAX_INPUT_SIZE );
+						}
+
+						/* Loop back up and accept another incoming   */
+						/* connection                                 */
+					} while (new_sd != -1);
+				}
+
+				/* This is not the listening socket, therefore an   */
+				/* existing connection must be readable             */
+				else {
+					DBG printf("  Descriptor %d is readable\n", i);
+					close_conn = false;
+
+					/* Receive data on this connection until the  */
+					/* recv fails with EWOULDBLOCK.  If any other */
+					/* failure occurs, we will close the          */
+					/* connection.                                */
+					if ((lBytes = recv(i, &cInChar, sizeof( cInChar ), 0 )) > 0) {
+
+						if( lBytes > 0L )
+						{
+							if( cInChar == '\n' )
+							{
+								switch(telnetState){
+								case TELNET_AUTH:
+									if(FreeRTOS_CLIAuthProcess(cInputString, pcOutputString)){
+										send( i, pcOutputString, strlen( ( const char * ) pcOutputString ), 0 );
+										cInputIndex = 0;
+										memset( cInputString, 0x00, cmdMAX_INPUT_SIZE );
+									}
+									else{
+										/* Set lBytes to 0 to close the connection. */
+										lBytes = 0L;
+									}
+									break;
+								case TELNET_CMD:
+									/* The input string has been terminated.  Was the
+									input a quit command? */
+									if( strcmp( "quit", ( const char * ) cInputString ) == 0 )
+									{
+										/* Set lBytes to 0 to close the connection. */
+										lBytes = 0L;
+									}
+									else
+									{
+										/* The input string was not a quit command.
+										Pass the string to the command interpreter. */
+
+										/* See if the command is empty, indicating that the last command is
+										to be executed again. */
+										if( cInputIndex == 0 )
+										{
+											strcpy( ( char * ) cInputString, ( char * ) cLastInputString );
+										}
+
+										/* Transmit a line separator, just to make the
+										output easier to read. */
+										lwip_send( lClientFd, "\r\n", strlen( "\r\n" ), 0 );
+
+										do
+										{
+											/* Ensure there is not a string lingering in
+											the output buffer. */
+											pcOutputString[ 0 ] = 0x00;
+											xReturned = FreeRTOS_CLIProcessCommand( cInputString, pcOutputString, configCOMMAND_INT_MAX_OUTPUT_SIZE );
+											send( i, pcOutputString, strlen( ( const char * ) pcOutputString ), 0 );
+
+										} while( xReturned != pdFALSE );
+
+										if( strcmp( "sensor info", ( const char * ) cInputString ) == 0 ){
+											strcpy( ( char * ) cLastInputString, ( char * ) cInputString );
+											cInputIndex = 0;
+											memset( cInputString, 0x00, cmdMAX_INPUT_SIZE );
+											lClientFd = i;
+											xTimerStart(RepeatSensorInfoTimer, 0);
+										}
+										else{
+
+											/* All the strings generated by the input
+											command have been sent.  Clear the input
+											string ready to receive the next command.
+											Remember the command that was just processed
+											first in case it is to be processed again. */
+											strcpy( ( char * ) cLastInputString, ( char * ) cInputString );
+											cInputIndex = 0;
+											memset( cInputString, 0x00, cmdMAX_INPUT_SIZE );
+											if(telnetState != TELNET_CHANGE_PWD)
+												send( i, pcEndOfCommandOutputString, strlen( ( const char * ) pcEndOfCommandOutputString ), 0 );
+										}
+									}
+									break;
+								case TELNET_CHANGE_PWD:
+									FreeRTOS_ChangePWDProcess(cInputString, pcOutputString);
+									send( i, pcOutputString, strlen( ( const char * ) pcOutputString ), 0 );
+									cInputIndex = 0;
+									memset( cInputString, 0x00, cmdMAX_INPUT_SIZE );
+									break;
+
+								}
+
+							}
+							else
+							{
+								if( cInChar == '\r' )
+								{
+									/* Ignore the character. */
+								}
+								else if( cInChar == '\b' )
+								{
+									/* Backspace was pressed.  Erase the last
+									character in the string - if any. */
+									if( cInputIndex > 0 )
+									{
+										cInputIndex--;
+										cInputString[ cInputIndex ] = '\0';
+									}
+								}
+								else if( cInChar == '\t' ){
+									/*FreeRTOS_CLICompleteCMDCommand(cInputString, pcOutputString);
+									strcpy((char *)cInputString, (char *)pcOutputString);
+									send( i, pcOutputString, strlen( ( const char * ) pcOutputString ), 0 );*/
+								}
+								else
+								{
+									/* A character was entered.  Add it to the string
+									entered so far.  When a \n is entered the complete
+									string will be passed to the command interpreter. */
+									if( cInputIndex < cmdMAX_INPUT_SIZE )
+									{
+										cInputString[ cInputIndex ] = cInChar;
+										cInputIndex++;
+									}
+									if( strcmp( "\377\364\377\375\006", ( const char * ) cInputString ) == 0 ){
+										xTimerStop(RepeatSensorInfoTimer, 0);
+										cInputIndex = 0;
+										memset( cInputString, 0x00, cmdMAX_INPUT_SIZE );
+										cInputString[0] = 255;
+										cInputString[1] = 251;
+										cInputString[2] = 6;
+										cInputString[3] = 255;
+										cInputString[4] = 242;
+										//if(telnetState != TELNET_CHANGE_PWD)
+											//lwip_send( lClientFd, pcEndOfCommandOutputString, strlen( ( const char * ) pcEndOfCommandOutputString ), 0 );
+										send( i, cInputString, strlen( ( const char * ) cInputString ), 0 );
+										memset( cInputString, 0x00, cmdMAX_INPUT_SIZE );
+										if(telnetState != TELNET_CHANGE_PWD)
+											send( i, pcEndOfCommandOutputString, strlen( ( const char * ) pcEndOfCommandOutputString ), 0 );
+									}
+								}
+							}
+						}
+					}
+
+					if (lBytes < 0) {
+						if (errno != EWOULDBLOCK){
+							DBG printf("  recv() failed\n");
+							close_conn = true;
+						}
+					}
+
+					/* Check to see if the connection has been    */
+					/* closed by the client                       */
+					if (lBytes == 0) {
+						DBG printf("  Connection closed\n");
+						close_conn = true;
+					}
+
+					/* If the close_conn flag was turned on, we need */
+					/* to clean up this active connection.  This     */
+					/* clean up process includes removing the        */
+					/* descriptor from the master set and            */
+					/* determining the new maximum descriptor value  */
+					/* based on the bits that are still turned on in */
+					/* the master set.                               */
+					if (close_conn) {
+						closesocket(i);
+						FD_CLR(i, &master_set);
+						if (i == max_sd) {
+						   while (FD_ISSET(max_sd, &master_set) == false) {
+							  max_sd -= 1;
+						   }
+						}
+					}
+				}
+			}
+		}
+    }
+
+}
+
+void telnet_server_init(void) {
+	vRegisterCLICommands();
+	xTaskCreate(vBasicSocketsCommandInterpreterTask, ( char * ) "vBasicSocketsCommandInterpreterTask", 8*configMINIMAL_STACK_SIZE , NULL, tskIDLE_PRIORITY + 1, NULL);
+	 RepeatSensorInfoTimer = xTimerCreate("SensorInfoTmr", REPEAT_SENSOR_INFO_TIME, pdFALSE, ( void * ) 0, SensorInfoTimerCallback);
+}
+
+void SensorInfoTimerCallback(TimerHandle_t pxTimer) {
+	portBASE_TYPE xReturned = pdTRUE;
+
+	do
+	{
+		/* Ensure there is not a string lingering in
+		the output buffer. */
+		pcOutputString[ 0 ] = 0x00;
+		xReturned = FreeRTOS_CLIProcessCommand( "sensor info", pcOutputString, configCOMMAND_INT_MAX_OUTPUT_SIZE );
+		lwip_send( lClientFd, pcOutputString, strlen( ( const char * ) pcOutputString ), 0 );
+
+	} while( xReturned != pdFALSE );
+	xTimerStart(RepeatSensorInfoTimer, 0);
+}
+
+static portBASE_TYPE FreeRTOS_CLIAuthProcess( const int8_t * const pcCommandInput, int8_t * pcWriteBuffer  )
+{
+	portBASE_TYPE xReturn = pdTRUE;
+	uint32_t len;
+	uint8_t valueLen, user_id;
+	char WebPassword[MAX_WEB_PASSWD_LEN];
+	char WebLogin[MAX_WEB_LOGIN_LEN];
+	static uint8_t login_err = 0;
+	static uint8_t telnet_state_auth = 0;
+	static char login[ cmdMAX_INPUT_SIZE ] = { 0 };
+	char password[ cmdMAX_INPUT_SIZE ] = { 0 };
+	const int8_t * const pcPSWHeader = ( int8_t * ) "\r\npassword:";
+	const int8_t * const pcLoginHeader = ( int8_t * ) "\r\nlogin:";
+
+	memset(pcWriteBuffer, 0, configCOMMAND_INT_MAX_OUTPUT_SIZE);
+
+	if(telnet_state_auth == 0){
+		telnet_state_auth = 1;
+		memset(login, 0, cmdMAX_INPUT_SIZE);
+		len = strlen((char *)pcCommandInput);
+		strncpy(login, (char *)pcCommandInput, len);
+		strncpy( ( char * ) pcWriteBuffer, ( const char * ) pcPSWHeader, strlen( ( char * ) pcPSWHeader ) );
+		xReturn = pdTRUE;
+	}
+	else{
+		memset(name_login_telnet, 0, 50);
+		telnet_state_auth = 0;
+		memset(password, 0, cmdMAX_INPUT_SIZE);
+		len = strlen((char *)pcCommandInput);
+		strncpy(password, (char *)pcCommandInput, len);
+		for (user_id = 0; user_id < MAX_WEB_USERS; user_id++) {
+
+			GetUserLogin(user_id, WebLogin, &valueLen);
+			GetUserPassword(user_id, WebPassword, &valueLen);
+
+			/* Check login and password */
+			if ((strncmp(WebLogin, login, MAX_WEB_LOGIN_LEN) == 0) &&
+				(strncmp(WebPassword, password, MAX_WEB_PASSWD_LEN) == 0)) {
+
+				/* Login and pass are valid */
+				telnet_code_auth = user_id;
+				login_err = 0;
+				strcpy( ( char * ) pcWriteBuffer, "\r\nАвторизация успешно пройдена\r\n>" );
+				telnetState = TELNET_CMD;
+				xReturn = pdTRUE;
+				break;
+			}
+			else{
+				xReturn = pdFALSE;
+			}
+		}
+		if(xReturn == pdFALSE){
+			if(login_err < 4){
+				login_err ++;
+				strcpy( ( char * ) pcWriteBuffer, "\r\nОшибка авторизации\r\n" );
+				strncat( ( char * ) pcWriteBuffer, ( const char * ) pcLoginHeader, strlen( ( char * ) pcLoginHeader ) );
+				xReturn = pdTRUE;
+			}
+			else{
+				login_err = 0;
+				xReturn = pdFALSE;
+			}
+		}
+		switch (user_id) {
+			  case 0:
+				  snprintf(name_login_telnet, sizeof(name_login_telnet), "Администратор");
+				  break;
+			  case 1:
+				  snprintf(name_login_telnet, sizeof(name_login_telnet), "Пользователь");
+				  break;
+			  default:
+				  break;
+		  }
+
+			log_event_data(LOG_LOGIN_TELNET, name_login_telnet);
+	}
+
+
+	return xReturn;
+}
+
+static portBASE_TYPE FreeRTOS_ChangePWDProcess( const int8_t * const pcCommandInput, int8_t * pcWriteBuffer  )
+{
+	portBASE_TYPE xReturn = pdTRUE;
+	uint32_t len;
+	static uint8_t telnet_state_change_pwd = 0;
+	static char password[ MAX_WEB_LOGIN_LEN ] = { 0 };
+	char password2[ MAX_WEB_LOGIN_LEN ] = { 0 };
+	const int8_t * const pcNewPSWHeader = ( int8_t * ) "\r\nВведите повторно новый пароль:";
+
+	memset(pcWriteBuffer, 0, configCOMMAND_INT_MAX_OUTPUT_SIZE);
+
+	if(telnet_state_change_pwd == 0){
+		telnet_state_change_pwd = 1;
+		memset(password, 0, MAX_WEB_LOGIN_LEN);
+		len = strlen((char *)pcCommandInput);
+		if(len >= MAX_WEB_LOGIN_LEN){
+			strcpy( ( char * ) pcWriteBuffer, "\r\nОшибка при вводе нового пароля\r\n>" );
+			telnetState = TELNET_CMD;
+		}
+		else{
+			if(!control_string_en_digit((char *)pcCommandInput, len)){
+				strcpy( ( char * ) pcWriteBuffer, "\r\nОшибка при вводе нового пароля\r\n>" );
+				telnetState = TELNET_CMD;
+			}
+			else{
+				strncpy(password, (char *)pcCommandInput, len);
+				strncpy( ( char * ) pcWriteBuffer, ( const char * ) pcNewPSWHeader, strlen( ( char * ) pcNewPSWHeader ) );
+			}
+		}
+	}
+	else{
+		telnet_state_change_pwd = 0;
+		memset(password2, 0, cmdMAX_INPUT_SIZE);
+		len = strlen((char *)pcCommandInput);
+		if(len >= MAX_WEB_LOGIN_LEN){
+			strcpy( ( char * ) pcWriteBuffer, "\r\nОшибка при вводе нового пароля\r\n>" );
+			telnetState = TELNET_CMD;
+		}
+		else{
+			strncpy(password2, (char *)pcCommandInput, len);
+
+			if (strncmp(password, password2, MAX_WEB_PASSWD_LEN) == 0) {
+				memcpy(sSettings.sAuth[id_change_pwd].password, password, 11);
+				telnet_act = true;
+				 HTTP_SaveSettings();
+				 log_event_data(LOG_PSW_CHANGE, name_login_telnet);
+				strcpy( ( char * ) pcWriteBuffer, "\r\nПароль успешно изменен\r\n>" );
+				telnetState = TELNET_CMD;
+				xReturn = pdTRUE;
+			}
+			else{
+				strcpy( ( char * ) pcWriteBuffer, "\r\nОшибка при вводе нового пароля\r\n>" );
+				telnetState = TELNET_CMD;
+			}
+		}
+	}
+
+
+	return xReturn;
+}
+

+ 24 - 0
modules/Telnet_Server/telnet_server.h

@@ -0,0 +1,24 @@
+/*
+ * telnet_server.h
+ *
+ *  Created on: 24.11.2017
+ *      Author: balbekova
+ */
+
+#ifndef TELNET_SERVER_H_
+#define TELNET_SERVER_H_
+
+typedef enum{
+	TELNET_AUTH = 0,
+	TELNET_CMD,
+	TELNET_CHANGE_PWD
+}state_telnet_server_t;
+
+
+void telnet_server_init(void);
+
+void telnet_server_close(void);
+
+void telnet_server_port_change(void);
+
+#endif /* TELNET_SERVER_H_ */

+ 24 - 0
modules/common/control_symbol.c

@@ -0,0 +1,24 @@
+/*
+ * control_symbol.c
+ *
+ *  Created on: 06.12.2017
+ *      Author: balbekova
+ */
+#include <stdint.h>
+#include <stdbool.h>
+
+
+bool control_string_en_digit(char *str, uint8_t len)
+{
+	uint8_t i;
+	bool fail = true;
+
+	for(i = 0; i < len; i++){
+		if(str[i] < 0x21 || str[i] > 0x7e){
+			fail = false;
+			break;
+		}
+	}
+	return fail;
+}
+

+ 14 - 0
modules/common/control_symbol.h

@@ -0,0 +1,14 @@
+/*
+ * control_symbol.h
+ *
+ *  Created on: 06.12.2017
+ *      Author: balbekova
+ */
+
+#ifndef CONTROL_SYMBOL_H_
+#define CONTROL_SYMBOL_H_
+
+bool control_string_en_digit(char *str, uint8_t len);
+
+
+#endif /* CONTROL_SYMBOL_H_ */

+ 6 - 1
modules/common/hal.c

@@ -19,7 +19,12 @@
 void Reboot(void) {
 void Reboot(void) {
 #ifndef BT6702_SERVICE
 #ifndef BT6702_SERVICE
 	SNMP_SendUserTrap(DEVICE_REBOOTED);
 	SNMP_SendUserTrap(DEVICE_REBOOTED);
-	log_event_data(LOG_SYSTEM_BOOT, name_login);
+#ifdef HARDWARE_BT6706
+	  if(telnet_act)
+		  log_event_data(LOG_SYSTEM_BOOT, name_login_telnet);
+	  else
+#endif
+		  log_event_data(LOG_SYSTEM_BOOT, name_login);
 
 
 	vTaskDelay(1010);
 	vTaskDelay(1010);
 	LOG_Disable();
 	LOG_Disable();

+ 81 - 0
modules/log/log.c

@@ -12,6 +12,9 @@
 char logFileBuf[FILE_BUF_MAX_LEN];
 char logFileBuf[FILE_BUF_MAX_LEN];
 
 
 char name_login[50];
 char name_login[50];
+char name_login_telnet[50];
+
+bool telnet_act = false;
 
 
 const char* logsStrShortRu[] =
 const char* logsStrShortRu[] =
 {
 {
@@ -21,6 +24,9 @@ const char* logsStrShortRu[] =
     "Включение",
     "Включение",
     "Смена пароля",
     "Смена пароля",
     "Сохранение настроек",
     "Сохранение настроек",
+#ifdef HARDWARE_BT6706
+    "Авторизация (Telnet)",
+#endif
     "Авторизация",
     "Авторизация",
     "Тест ИБП",
     "Тест ИБП",
     "Откл. нагрузки ИБП",
     "Откл. нагрузки ИБП",
@@ -285,6 +291,8 @@ void log_add(char *log_data)
 	len = strlen(log_data);
 	len = strlen(log_data);
 
 
 	strncpy(buf_value, log_data, len);
 	strncpy(buf_value, log_data, len);
+
+	DBG printf("UPS log data: %s\r\n", log_data);
 	buf_value[0] = '\"';
 	buf_value[0] = '\"';
 
 
 	for(i = 0; i < len; i++)
 	for(i = 0; i < len; i++)
@@ -328,6 +336,36 @@ uint32_t LOG_GetTotalSTRCount(void)
 	return ringfs_count_estimate(&fs);
 	return ringfs_count_estimate(&fs);
 }
 }
 
 
+void LOG_GetPage_tabs(char *str, uint32_t page)
+{
+	TM_RTC_t rtc_data;
+	log_entry_t entry;
+	char buf[20];
+	uint8_t i;
+	int start =LOG_GetTotalSTRCount();//(fs.write.sector*fs.slots_per_sector + fs.write.slot);
+
+	memset(buf, 0, 20);
+	for(i=0; i < 10; i++){
+		fs.cursor_position =  start - 10*(page-1) - 1 - i;
+		if(fs.cursor_position < 0)
+			break;
+		else{
+			fs.cursor.sector = (fs.read.sector + fs.cursor_position/fs.slots_per_sector)%fs.flash->sector_count;
+			fs.cursor.slot = fs.cursor_position%fs.slots_per_sector;
+		}
+		entry.type = LOG_VALUE;
+		log_fetch(&entry, portMAX_DELAY);
+		entry.data[49] = 0;
+		strncat(str, entry.data, strlen(entry.data));
+		TM_RTC_GetDateTimeFromUnix(&rtc_data, entry.timestamp);
+		sprintf(buf, "%02i.%02i.%02i %02i:%02i:%02i",  rtc_data.date, rtc_data.month,
+		rtc_data.year, rtc_data.hours, rtc_data.minutes, rtc_data.seconds);
+		strcat(str, buf);
+		strcat(str, "\",");
+		strcat(str, "\r\n");
+	}
+}
+
 void LOG_GetPage(char *str, uint32_t page)
 void LOG_GetPage(char *str, uint32_t page)
 {
 {
 	TM_RTC_t rtc_data;
 	TM_RTC_t rtc_data;
@@ -433,6 +471,49 @@ void History_GetPage(char *str, uint32_t page)
 	}
 	}
 }
 }
 
 
+void History_GetPage_tabs(char *str, uint32_t page)
+{
+	TM_RTC_t rtc_data;
+	log_entry_t entry;
+	char buf[50];
+	uint8_t i;
+	int start =History_GetTotalSTRCount();//(fs.write.sector*fs.slots_per_sector + fs.write.slot);
+
+	memset(buf, 0, 50);
+	for(i=0; i < 10; i++){
+		fs2.cursor_position =  start - 10*(page-1) - 1 - i;
+		if(fs2.cursor_position < 0)
+			break;
+		else{
+			fs2.cursor.sector = (fs2.read.sector + fs2.cursor_position/fs.slots_per_sector)%fs2.flash->sector_count;
+			fs2.cursor.slot = fs2.cursor_position%fs2.slots_per_sector;
+		}
+		entry.type = LOG_LOGIN;
+		log_fetch(&entry, portMAX_DELAY);
+		//sprintf(buf, "%-50s", logsStrShortRu[entry.type]);
+		strncat(str, logsStrShortRu[entry.type], (strlen(logsStrShortRu[entry.type]) ));
+		for(uint8_t j = 0; j < (25 - strlen(logsStrShortRu[entry.type])/2); j ++)
+			strcat(str, " ");
+
+		strcat(str, "\t");
+
+		memset(buf, 0, 50);
+		entry.data[49] = 0;
+		strncat(str, entry.data, (strlen(entry.data) ));
+		for(uint8_t j = 0; j < (25 - strlen(entry.data)/2); j ++)
+			strcat(str, " ");
+
+		strcat(str, "\t");
+
+		memset(buf, 0, 50);
+		TM_RTC_GetDateTimeFromUnix(&rtc_data, entry.timestamp);
+		sprintf(buf, "%02i.%02i.%02i %02i:%02i:%02i",  rtc_data.date, rtc_data.month,
+		rtc_data.year, rtc_data.hours, rtc_data.minutes, rtc_data.seconds);
+		strcat(str, buf);
+		strcat(str, "\r\n");
+	}
+}
+
 uint32_t History_GetData(int ptr, char *str, uint32_t size, bool start)
 uint32_t History_GetData(int ptr, char *str, uint32_t size, bool start)
 {
 {
 	TM_RTC_t rtc_data;
 	TM_RTC_t rtc_data;

+ 8 - 0
modules/log/log.h

@@ -11,6 +11,9 @@
 extern char logFileBuf[FILE_BUF_MAX_LEN];
 extern char logFileBuf[FILE_BUF_MAX_LEN];
 
 
 extern char name_login[50];
 extern char name_login[50];
+extern char name_login_telnet[50];
+
+extern bool telnet_act;
 
 
 typedef __packed enum {
 typedef __packed enum {
 	LOG_SYSTEM_BOOT = 0x00,			// device booted
 	LOG_SYSTEM_BOOT = 0x00,			// device booted
@@ -19,6 +22,9 @@ typedef __packed enum {
 	LOG_TURN_ON,		//
 	LOG_TURN_ON,		//
 	LOG_PSW_CHANGE,		//
 	LOG_PSW_CHANGE,		//
 	LOG_SETTING_SAVE,		//
 	LOG_SETTING_SAVE,		//
+#ifdef HARDWARE_BT6706
+	LOG_LOGIN_TELNET,		//
+#endif
 	LOG_LOGIN,		//
 	LOG_LOGIN,		//
 	LOG_TEST_UPS,		//
 	LOG_TEST_UPS,		//
 	LOG_SHUTDOWN_UPS,
 	LOG_SHUTDOWN_UPS,
@@ -73,12 +79,14 @@ bool LOG_Disable(void);
 uint32_t LOG_GetPageCount(void);
 uint32_t LOG_GetPageCount(void);
 uint32_t LOG_GetTotalSTRCount(void);
 uint32_t LOG_GetTotalSTRCount(void);
 void LOG_GetPage(char *str, uint32_t page);
 void LOG_GetPage(char *str, uint32_t page);
+void LOG_GetPage_tabs(char *str, uint32_t page);
 uint32_t LOG_GetData(int ptr, char *str, uint32_t size, bool start);
 uint32_t LOG_GetData(int ptr, char *str, uint32_t size, bool start);
 
 
 uint32_t History_GetPageCount(void);
 uint32_t History_GetPageCount(void);
 uint32_t History_GetTotalSTRCount(void);
 uint32_t History_GetTotalSTRCount(void);
 void History_GetPage(char *str, uint32_t page);
 void History_GetPage(char *str, uint32_t page);
 uint32_t History_GetData(int ptr, char *str, uint32_t size, bool start);
 uint32_t History_GetData(int ptr, char *str, uint32_t size, bool start);
+void History_GetPage_tabs(char *str, uint32_t page);
 
 
 
 
 #endif /* LOG_H */
 #endif /* LOG_H */

+ 74 - 39
modules/monitor/ups_monitor.c

@@ -55,7 +55,7 @@ void UPS_Monitor(void *params)
 	vTaskDelay(5000);
 	vTaskDelay(5000);
   for (;;)
   for (;;)
   {
   {
-	  flCriticalAlarm = false;
+		flCriticalAlarm = false;
 	  flNonCriticalAlarm = false;
 	  flNonCriticalAlarm = false;
     // Проверяем флаг подключения UPS
     // Проверяем флаг подключения UPS
    if (UPS.Present)
    if (UPS.Present)
@@ -101,6 +101,11 @@ void UPS_DI0Monitor(void)
 		  SNMP_SendUserTrap(DI0_ALARM);
 		  SNMP_SendUserTrap(DI0_ALARM);
 		  flUpdateLog = true;
 		  flUpdateLog = true;
 	  }
 	  }
+	  else{
+		  log_event_data(LOG_ALARM_DIO, "Норма");
+		  SNMP_SendUserTrap(DI0_NORM);
+		  flUpdateLog = true;
+	  }
 	  return;
 	  return;
 	}
 	}
 
 
@@ -131,12 +136,12 @@ void relay_setup_log(uint8_t *curr_source, ro_type_source_t src_act_ro, uint8_t
 {
 {
 	uint8_t i = 0;
 	uint8_t i = 0;
 
 
-	flUpdateLog = true;
 	for(i = 0; i < OUTPUTS_TOTAL_COUNT; i ++){
 	for(i = 0; i < OUTPUTS_TOTAL_COUNT; i ++){
 		if(curr_source[i] == src_act_ro){
 		if(curr_source[i] == src_act_ro){
 			  SetROInt(state_relay, i);
 			  SetROInt(state_relay, i);
 			  SNMP_SendUserTrap((DO0_TOGGLED+i));
 			  SNMP_SendUserTrap((DO0_TOGGLED+i));
 			  if(state_relay){
 			  if(state_relay){
+				  flUpdateLog = true;
 #ifdef HARDWARE_BT6706
 #ifdef HARDWARE_BT6706
 				  log_event_data((LOG_DO0_STATE + i), "Разомкнуто");
 				  log_event_data((LOG_DO0_STATE + i), "Разомкнуто");
 #elif HARDWARE_BT6702
 #elif HARDWARE_BT6702
@@ -145,6 +150,7 @@ void relay_setup_log(uint8_t *curr_source, ro_type_source_t src_act_ro, uint8_t
 
 
 			  }
 			  }
 			  else{
 			  else{
+				  flUpdateLog = true;
 #ifdef HARDWARE_BT6706
 #ifdef HARDWARE_BT6706
 				  log_event_data((LOG_DO0_STATE + i), "Замкнуто");
 				  log_event_data((LOG_DO0_STATE + i), "Замкнуто");
 #elif HARDWARE_BT6702
 #elif HARDWARE_BT6702
@@ -155,32 +161,40 @@ void relay_setup_log(uint8_t *curr_source, ro_type_source_t src_act_ro, uint8_t
 	}
 	}
 }
 }
 
 
-void relay_setup_log_change(uint8_t *curr_source, uint8_t *prev_source, ro_type_source_t src_act_ro, uint8_t state_relay)
+void relay_setup_log_change(uint8_t *curr_source, uint8_t *prev_source, ro_type_source_t src_act_ro)
 {
 {
 	uint8_t i = 0;
 	uint8_t i = 0;
 
 
-	flUpdateLog = true;
 	for(i = 0; i < OUTPUTS_TOTAL_COUNT; i ++){
 	for(i = 0; i < OUTPUTS_TOTAL_COUNT; i ++){
-		if(get_state_din_outs(DOUT1 + i)){
-			if(curr_source[i] != prev_source[i] && (prev_source[i] == src_act_ro || curr_source[i] == src_act_ro)){
-				  SetROInt(state_relay, i);
-				  SNMP_SendUserTrap((DO0_TOGGLED+i));
-				  if(state_relay){
+		if(curr_source[i] != prev_source[i] && (prev_source[i] == src_act_ro || curr_source[i] == src_act_ro)){
 #ifdef HARDWARE_BT6706
 #ifdef HARDWARE_BT6706
-					  log_event_data((LOG_DO0_STATE + i), "Разомкнуто");
+			if(curr_source[i] != src_act_ro){
+				flUpdateLog = true;
+				 SetROInt(0, i);
+				 SNMP_SendUserTrap((DO0_TOGGLED+i));
+				  log_event_data((LOG_DO0_STATE + i), "Замкнуто");
+			  }
+			  else{
+				  flUpdateLog = true;
+				  SetROInt(1, i);
+				  SNMP_SendUserTrap((DO0_TOGGLED+i));
+				  log_event_data((LOG_DO0_STATE + i), "Разомкнуто");
+			  }
 #elif HARDWARE_BT6702
 #elif HARDWARE_BT6702
-					  log_event_data((LOG_DO0_STATE + i), "Замкнуто");
+			  if(curr_source[i] != src_act_ro){
+				  flUpdateLog = true;
+				  SetROInt(0, i);
+				  SNMP_SendUserTrap((DO0_TOGGLED+i));
+				  log_event_data((LOG_DO0_STATE + i), "Разомкнуто");
+			  }
+			  else{
+				  flUpdateLog = true;
+				  SetROInt(1, i);
+				 SNMP_SendUserTrap((DO0_TOGGLED+i));
+				  log_event_data((LOG_DO0_STATE + i), "Замкнуто");
+			  }
 #endif
 #endif
 
 
-				  }
-				  else{
-#ifdef HARDWARE_BT6706
-					  log_event_data((LOG_DO0_STATE + i), "Замкнуто");
-#elif HARDWARE_BT6702
-					  log_event_data((LOG_DO0_STATE + i), "Разомкнуто");
-#endif
-				  }
-			}
 		}
 		}
 	}
 	}
 }
 }
@@ -211,6 +225,9 @@ void UPS_CriticalAlarmMonitor(void)
 	if(CriticalAlarmCurrent){
 	if(CriticalAlarmCurrent){
 	  relay_setup_log(CurrROtype_Sourse, CRITICAL, 1);
 	  relay_setup_log(CurrROtype_Sourse, CRITICAL, 1);
 	}
 	}
+	else{
+		relay_setup_log(CurrROtype_Sourse, CRITICAL, 0);
+	}
 	return;
 	return;
   }
   }
 
 
@@ -237,9 +254,7 @@ void UPS_CriticalAlarmMonitor(void)
   else
   else
   {
   {
 	  if(CriticalAlarmCurrent)
 	  if(CriticalAlarmCurrent)
-		  relay_setup_log_change(CurrROtype_Sourse, OldROtype_Sourse, CRITICAL, 1);
-	  else
-		  relay_setup_log_change(CurrROtype_Sourse, OldROtype_Sourse, CRITICAL, 0);
+		  relay_setup_log_change(CurrROtype_Sourse, OldROtype_Sourse, CRITICAL);
 
 
   }
   }
 
 
@@ -273,6 +288,8 @@ void UPS_NonCriticalAlarmMonitor(void)
 		 OldROtype_Sourse[i] = CurrROtype_Sourse[i];
 		 OldROtype_Sourse[i] = CurrROtype_Sourse[i];
 	  if(NonCriticalAlarmCurrent)
 	  if(NonCriticalAlarmCurrent)
 		  relay_setup_log(CurrROtype_Sourse, NON_CRITICAL, 1);
 		  relay_setup_log(CurrROtype_Sourse, NON_CRITICAL, 1);
+	  else
+		  relay_setup_log(CurrROtype_Sourse, NON_CRITICAL, 0);
 
 
 	return;
 	return;
   }
   }
@@ -290,9 +307,7 @@ void UPS_NonCriticalAlarmMonitor(void)
   else
   else
   {
   {
 	  if(NonCriticalAlarmCurrent)
 	  if(NonCriticalAlarmCurrent)
-		  relay_setup_log_change(CurrROtype_Sourse, OldROtype_Sourse, CRITICAL, 1);
-	  else
-		  relay_setup_log_change(CurrROtype_Sourse, OldROtype_Sourse, CRITICAL, 0);
+		  relay_setup_log_change(CurrROtype_Sourse, OldROtype_Sourse, NON_CRITICAL);
   }
   }
 
 
   for(i = 0; i < OUTPUTS_TOTAL_COUNT; i ++){
   for(i = 0; i < OUTPUTS_TOTAL_COUNT; i ++){
@@ -335,6 +350,14 @@ void UPS_LineFailMonitor(void)
     	relay_setup_log(CurrROtype_Sourse, AC_PRESENT, 1);
     	relay_setup_log(CurrROtype_Sourse, AC_PRESENT, 1);
 #endif
 #endif
     }
     }
+    else{
+#ifdef HARDWARE_BT6706
+      relay_setup_log(CurrROtype_Sourse, AC_PRESENT, 0);
+#endif
+      log_event_data(LOG_ALARM_LINE, "Норма");
+      SNMP_SendUserTrap(LINE_NORM);
+      flUpdateLog = true;
+    }
 
 
     return;
     return;
   }
   }
@@ -368,9 +391,7 @@ void UPS_LineFailMonitor(void)
 #ifdef HARDWARE_BT6706
 #ifdef HARDWARE_BT6706
   else{
   else{
 	  if (lineFailCurrent)
 	  if (lineFailCurrent)
-		  relay_setup_log_change(CurrROtype_Sourse, OldROtype_Sourse, AC_PRESENT, 1);
-	  else
-		  relay_setup_log_change(CurrROtype_Sourse, OldROtype_Sourse, AC_PRESENT, 0);
+		  relay_setup_log_change(CurrROtype_Sourse, OldROtype_Sourse, AC_PRESENT);
   }
   }
 
 
   for(i = 0; i < OUTPUTS_TOTAL_COUNT; i ++){
   for(i = 0; i < OUTPUTS_TOTAL_COUNT; i ++){
@@ -422,7 +443,7 @@ void UPS_VACoutputMonitor(void)
 	  flUpdateLog = true;
 	  flUpdateLog = true;
 	}
 	}
     else{
     else{
-    	relay_setup_log_change(CurrROtype_Sourse, OldROtype_Sourse, DC_PRESENT, 1);
+    	relay_setup_log_change(CurrROtype_Sourse, OldROtype_Sourse, DC_PRESENT);
     }
     }
   }
   }
   /* Отслеживается нормализация */
   /* Отслеживается нормализация */
@@ -441,9 +462,6 @@ void UPS_VACoutputMonitor(void)
 	 // SNMP_SendUserTrap(POWER_NORM);
 	 // SNMP_SendUserTrap(POWER_NORM);
 	  flUpdateLog = true;
 	  flUpdateLog = true;
 	}
 	}
-    else{
-    	relay_setup_log_change(CurrROtype_Sourse, OldROtype_Sourse, DC_PRESENT, 0);
-    }
   }
   }
 
 
   for(i = 0; i < OUTPUTS_TOTAL_COUNT; i ++){
   for(i = 0; i < OUTPUTS_TOTAL_COUNT; i ++){
@@ -487,6 +505,14 @@ void UPS_LowBatMonitor(void)
       relay_setup_log(CurrROtype_Sourse, CHARGE_AKB, 1);
       relay_setup_log(CurrROtype_Sourse, CHARGE_AKB, 1);
 #endif
 #endif
     }
     }
+    else{
+	  SNMP_SendUserTrap(LOW_BAT_NORM);
+	  log_event_data(LOG_ALARM_LOW_BAT, "Норма");
+	  flUpdateLog = true;
+#ifdef HARDWARE_BT6706
+	  relay_setup_log(CurrROtype_Sourse, CHARGE_AKB, 0);
+#endif
+	}
     return;
     return;
   }
   }
   if (lowBatCurrent)
   if (lowBatCurrent)
@@ -514,9 +540,7 @@ void UPS_LowBatMonitor(void)
 #ifdef HARDWARE_BT6706
 #ifdef HARDWARE_BT6706
   else{
   else{
 	  if (lowBatCurrent)
 	  if (lowBatCurrent)
-		  relay_setup_log_change(CurrROtype_Sourse, OldROtype_Sourse, CHARGE_AKB, 1);
-	  else
-		  relay_setup_log_change(CurrROtype_Sourse, OldROtype_Sourse, CHARGE_AKB, 0);
+		  relay_setup_log_change(CurrROtype_Sourse, OldROtype_Sourse, CHARGE_AKB);
   }
   }
 
 
   for(i = 0; i < OUTPUTS_TOTAL_COUNT; i ++){
   for(i = 0; i < OUTPUTS_TOTAL_COUNT; i ++){
@@ -635,6 +659,11 @@ void UPS_ConnectMonitor(void)
     	SNMP_SendUserTrap(CONNECT_MONITOR_ALARM);
     	SNMP_SendUserTrap(CONNECT_MONITOR_ALARM);
     	flUpdateLog = true;
     	flUpdateLog = true;
     }
     }
+    else{
+    	log_event_data(LOG_ALARM_UPS, "Норма");
+		SNMP_SendUserTrap(CONNECT_MONITOR_NORM);
+		flUpdateLog = true;
+    }
     return;
     return;
   }
   }
   if (!connectCurrent)
   if (!connectCurrent)
@@ -692,6 +721,14 @@ void UPS_BatteryConnectMonitor(void)
 	  flUpdateLog = true;
 	  flUpdateLog = true;
 #ifdef HARDWARE_BT6706
 #ifdef HARDWARE_BT6706
       relay_setup_log(CurrROtype_Sourse, OFF_AKB, 1);
       relay_setup_log(CurrROtype_Sourse, OFF_AKB, 1);
+#endif
+    }
+    else{
+    	log_event_data(LOG_ALARM_AKB, "Норма");
+		  SNMP_SendUserTrap(BATTERY_CONNECT_NORM);
+		  flUpdateLog = true;
+#ifdef HARDWARE_BT6706
+		  relay_setup_log(CurrROtype_Sourse, OFF_AKB, 0);
 #endif
 #endif
     }
     }
     return;
     return;
@@ -721,9 +758,7 @@ void UPS_BatteryConnectMonitor(void)
 #ifdef HARDWARE_BT6706
 #ifdef HARDWARE_BT6706
   else{
   else{
 	  if (AKBconnectCurrent)
 	  if (AKBconnectCurrent)
-		  relay_setup_log_change(CurrROtype_Sourse, OldROtype_Sourse, OFF_AKB, 1);
-	  else
-		  relay_setup_log_change(CurrROtype_Sourse, OldROtype_Sourse, OFF_AKB, 0);
+		  relay_setup_log_change(CurrROtype_Sourse, OldROtype_Sourse, OFF_AKB);
   }
   }
 
 
   for(i = 0; i < OUTPUTS_TOTAL_COUNT; i ++){
   for(i = 0; i < OUTPUTS_TOTAL_COUNT; i ++){

+ 196 - 2
modules/parameters.c

@@ -19,12 +19,14 @@
 #include "snmp_api.h"
 #include "snmp_api.h"
 #include "snmp.h"
 #include "snmp.h"
 #include "megatec.h"
 #include "megatec.h"
+#ifdef HARDWARE_BT6706
+#include "telnet_server.h"
+#endif
 #endif
 #endif
 #include "sntp.h"
 #include "sntp.h"
 #include "lwip/snmp.h"
 #include "lwip/snmp.h"
 #include "lwip/sys.h"
 #include "lwip/sys.h"
 #include "common_config.h"
 #include "common_config.h"
-#include "settings_api.h"
 //#include "d_inouts.h"
 //#include "d_inouts.h"
 #include "gpio.h"
 #include "gpio.h"
 //#if defined HARDWARE_BT6702
 //#if defined HARDWARE_BT6702
@@ -37,6 +39,7 @@
 #include <string.h>
 #include <string.h>
 #include <stdlib.h>
 #include <stdlib.h>
 #include <math.h>   
 #include <math.h>   
+
 //#endif
 //#endif
 /**
 /**
   * @brief  Структура для хранения состояний дискретных входов
   * @brief  Структура для хранения состояний дискретных входов
@@ -167,6 +170,65 @@ void GetAlarmStr(char *str, uint8_t *len)
 	*len = strlen(str);
 	*len = strlen(str);
 
 
 }
 }
+
+/**
+  * @brief  Индикация аварийных ситуаций
+  */
+void GetUPSAlarmStr(char *str, uint8_t *len)
+{
+	if(((UPS.Status>>7)&0x01) || ((UPS.Status>>4)&0x01) || (UPS.Alarm & 0x01))
+		strcpy(str, "Авария");
+	else if(!((UPS.Status>>7)&0x01) && !((UPS.Status>>4)&0x01) && !(UPS.Alarm & 0x01))
+		strcpy(str, "Норма");
+	else if(((UPS.Status>>1)&0x01))
+		strcat(str, "/Отключение нагрузки");
+
+	*len = strlen(str);
+
+}
+
+/**
+  * @brief  Индикация аварийных ситуаций
+  */
+void GetAKBAlarmStr(char *str, uint8_t *len)
+{
+	if(((UPS.Status>>6)&0x01) || ((UPS.Alarm>>1) & 0x01))
+		strcpy(str, "Авария");
+	else if(!((UPS.Status>>6)&0x01) && !((UPS.Alarm>>1) & 0x01))
+		strcpy(str, "Норма");
+	else if(((UPS.Status>>2)&0x01))
+		strcat(str, "/Тестирование");
+
+	*len = strlen(str);
+}
+
+/**
+  * @brief  Индикация аварийных ситуаций
+  */
+void GetConnectUPSAlarmStr(char *str, uint8_t *len)
+{
+
+	if(((UPS.Alarm>>2) & 0x01))
+		strcpy(str, "Авария");
+	else if(!((UPS.Alarm>>2) & 0x01))
+		strcpy(str, "Норма");
+
+	*len = strlen(str);
+
+}
+
+/**
+  * @brief  Индикация аварийных ситуаций
+  */
+void GetUPSModeStr(char *str, uint8_t *len)
+{
+	if((UPS.Status>>5)&0x01)
+		sprintf(str, "Bypass");
+	else
+		sprintf(str, "Boost or Buck");
+
+	*len = strlen(str);
+}
 #endif
 #endif
 // ************************************************************************** //
 // ************************************************************************** //
 //                             Параметры даты и времени
 //                             Параметры даты и времени
@@ -232,6 +294,23 @@ void GetSntpStateStr(char *str, uint8_t *len)
   }
   }
 }
 }
 
 
+/**
+  * @brief  Состояние SNTP (Ready for PRS!)
+  */
+void GetSntpStateStrRU(char *str, uint8_t *len)
+{
+  if (sSettings.sSNTP.sntpEnable)
+  {
+    sprintf(str, "%s", "авто"); //авто
+    *len = strlen(str);
+  }
+  else
+  {
+    sprintf(str, "%s", "ручной"); //ручной
+    *len = strlen(str);
+  }
+}
+
 /**
 /**
   * @brief  IP адрес SNTP сервера (Ready for PRS!)
   * @brief  IP адрес SNTP сервера (Ready for PRS!)
   */
   */
@@ -289,6 +368,18 @@ void GetDIN0StatusStr(char *str, uint8_t *len)
 	*len = strlen(str);
 	*len = strlen(str);
 }
 }
 
 
+/**
+  * @brief  Состояние сухого контакта
+  */
+void GetDIN0StatusStrRU(char *str, uint8_t *len)
+{
+	if(get_state_din_outs(DIN1)^1)
+		sprintf(str, "Разомкнут" );
+	else
+		sprintf(str, "Замкнут" );
+	*len = strlen(str);
+}
+
 /**
 /**
   * @brief  Источник срабатывания реле
   * @brief  Источник срабатывания реле
   */
   */
@@ -312,6 +403,26 @@ void GetDOUTStatusStr(char *str, uint8_t *len, uint8_t num)
 	*len = strlen(str);
 	*len = strlen(str);
 }
 }
 
 
+/**
+  * @brief  Состояние релейного выхода
+  */
+void GetDOUTStatusStrRU(char *str, uint8_t *len, uint8_t num)
+{
+#ifdef HARDWARE_BT6706
+	if (get_state_din_outs(DOUT1+num)^1)
+		sprintf(str, "Замкнут");
+	else
+		sprintf(str, "Разомкнут");
+#elif HARDWARE_BT6702
+	if(get_state_din_outs(DOUT1+num))
+		sprintf(str, "Замкнут");
+	else
+		sprintf(str, "Разомкнут");
+#endif
+
+	*len = strlen(str);
+}
+
 /**
 /**
   * @brief  Состояние релейного выхода
   * @brief  Состояние релейного выхода
   */
   */
@@ -344,7 +455,7 @@ void GetDOUT1StatusStr(char *str, uint8_t *len)
   */
   */
 void GetDOUT2StatusStr(char *str, uint8_t *len)
 void GetDOUT2StatusStr(char *str, uint8_t *len)
 {
 {
-	sprintf(str, "%d", (get_state_din_outs(DOUT3)^3));
+	sprintf(str, "%d", (get_state_din_outs(DOUT3)^1));
 	*len = strlen(str);
 	*len = strlen(str);
 }
 }
 #endif
 #endif
@@ -590,6 +701,30 @@ void GetDhcpStateUDP(char *str, uint8_t *len)
 	  *len = strlen(str);
 	  *len = strlen(str);
 }
 }
 
 
+/**
+  * @brief  Настройка DHCP
+  */
+void GetDhcpStateStrRu(char *str, uint8_t *len)
+{
+	  /* Если сейчас временные настройки или был загружен файл конфигурации */
+	  if (sSettings.sFlags.netsettingsChanged)
+	  {
+	    if (sSettings.sWebTempParams.dhcpEnable)
+	      sprintf(str, "%s", "Вкл");
+	    else
+	      sprintf(str, "%s", "Откл");
+	  }
+	  else
+	  {
+	    if (sSettings.sWebParams.dhcpEnable)
+	      sprintf(str, "%s", "Вкл");
+	    else
+	      sprintf(str, "%s", "Откл");
+	  }
+
+	  *len = strlen(str);
+}
+
 // ************************************************************************** //
 // ************************************************************************** //
 //                             Параметры SNMP
 //                             Параметры SNMP
 
 
@@ -644,6 +779,7 @@ void GetManagerIp5(char *str, uint8_t *len)
   *len = strlen(str);
   *len = strlen(str);
 }
 }
 
 
+#ifdef HARDWARE_BT6702
 // ************************************************************************** //
 // ************************************************************************** //
 //                             Параметры RADIUS
 //                             Параметры RADIUS
 
 
@@ -713,6 +849,37 @@ void GetAuthEnableStateStr(char *str, uint8_t *len)
   *len = 1;
   *len = 1;
 }
 }
 
 
+#endif
+
+#ifdef HARDWARE_BT6706
+// ************************************************************************** //
+//                             Параметры Telnet
+
+/**
+  * @brief Текущий Порт
+  */
+void GetTelnetPortStr(char *str, uint8_t *len)
+{
+  sprintf(str, "%d", sSettings.sTelnet.port);
+
+  *len = strlen(str);
+}
+
+/**
+  * @brief  Настройка вкл/ выкл Telnet сервера
+  */
+void GetTelnetEnableStateStr(char *str, uint8_t *len)
+{
+    if (sSettings.sTelnet.TelnetEnable)
+      *str = '1';
+    else
+      *str = '0';
+
+  *len = 1;
+}
+
+#endif
+
 // ************************************************************************** //
 // ************************************************************************** //
 //                          Флаги
 //                          Флаги
 
 
@@ -899,6 +1066,7 @@ void SetComment(char *str)
   strcpy(sSettings.sInfo.comments, str);
   strcpy(sSettings.sInfo.comments, str);
 }
 }
 
 
+#ifdef HARDWARE_BT6702
 // ************************************************************************** //
 // ************************************************************************** //
 //                             Сетевые параметры RADIUS сервера
 //                             Сетевые параметры RADIUS сервера
 /**
 /**
@@ -954,7 +1122,33 @@ void SetAuthEnableStateStr(char *str)
   else
   else
 	  sSettings.sRADIUS.Auth_enable = 0;
 	  sSettings.sRADIUS.Auth_enable = 0;
 }
 }
+#endif
+
+#ifdef HARDWARE_BT6706
+// ************************************************************************** //
+//                             Параметры Telnet
+#ifndef BT6702_SERVICE
+/**
+  * @brief Текущий Порт
+  */
+void SetTelnetPortStr(char *str)
+{
+	sSettings.sTelnet.port = atoi(str);
+}
 
 
+/**
+  * @brief  Настройка вкл/ выкл Telnet сервера
+  */
+void SetTelnetEnableStateStr(char *str)
+{
+	  if (strncmp(str, "on", 2) == 0)
+		  sSettings.sTelnet.TelnetEnable = 1;
+	  else
+		  sSettings.sTelnet.TelnetEnable = 0;
+
+}
+#endif
+#endif
 // ************************************************************************** //
 // ************************************************************************** //
 //                             Параметры даты и времени
 //                             Параметры даты и времени
 
 

+ 79 - 0
modules/parameters.h

@@ -49,6 +49,26 @@ void GetModeEn(char *str, uint8_t *len);
   */
   */
 void GetAlarmStr(char *str, uint8_t *len);
 void GetAlarmStr(char *str, uint8_t *len);
 
 
+/**
+  * @brief  Индикация аварийных ситуаций
+  */
+void GetUPSAlarmStr(char *str, uint8_t *len);
+
+/**
+  * @brief  Индикация аварийных ситуаций
+  */
+void GetAKBAlarmStr(char *str, uint8_t *len);
+
+/**
+  * @brief  Индикация аварийных ситуаций
+  */
+void GetConnectUPSAlarmStr(char *str, uint8_t *len);
+
+/**
+  * @brief  Индикация аварийных ситуаций
+  */
+void GetUPSModeStr(char *str, uint8_t *len);
+
 /**
 /**
   * @brief  Текущее время ч/м/с
   * @brief  Текущее время ч/м/с
   */
   */
@@ -81,6 +101,11 @@ void GetUnixTimeStr(char *str, uint8_t *len);
   */
   */
 void GetSntpStateStr(char *str, uint8_t *len);
 void GetSntpStateStr(char *str, uint8_t *len);
 
 
+/**
+  * @brief  Состояние SNTP (Ready for PRS!)
+  */
+void GetSntpStateStrRU(char *str, uint8_t *len);
+
 /**
 /**
   * @brief  IP адрес SNTP сервера (Ready for PRS!)
   * @brief  IP адрес SNTP сервера (Ready for PRS!)
   */
   */
@@ -192,6 +217,11 @@ void GetDhcpStateStr(char *str, uint8_t *len);
   */
   */
 void GetDhcpStateUDP(char *str, uint8_t *len);
 void GetDhcpStateUDP(char *str, uint8_t *len);
 
 
+/**
+  * @brief  Настройка DHCP
+  */
+void GetDhcpStateStrRu(char *str, uint8_t *len);
+
 // ************************************************************************** //
 // ************************************************************************** //
 //                             Параметры SNMP
 //                             Параметры SNMP
 /**
 /**
@@ -218,6 +248,7 @@ void GetManagerIp3(char *str, uint8_t *len);
 void GetManagerIp4(char *str, uint8_t *len);
 void GetManagerIp4(char *str, uint8_t *len);
 void GetManagerIp5(char *str, uint8_t *len);
 void GetManagerIp5(char *str, uint8_t *len);
 
 
+#ifdef HARDWARE_BT6702
 // ************************************************************************** //
 // ************************************************************************** //
 //                             Параметры RADIUS
 //                             Параметры RADIUS
 
 
@@ -251,6 +282,8 @@ void GetRDSEnableStateStr(char *str, uint8_t *len);
   */
   */
 void GetAuthEnableStateStr(char *str, uint8_t *len);
 void GetAuthEnableStateStr(char *str, uint8_t *len);
 
 
+#endif
+
 // ************************************************************************** //
 // ************************************************************************** //
 //                             Параметры реле/сухих контактов
 //                             Параметры реле/сухих контактов
 
 
@@ -269,6 +302,11 @@ void GetDINStatusStr(char *str, uint8_t *len, uint8_t num);
   */
   */
 void GetDIN0StatusStr(char *str, uint8_t *len);
 void GetDIN0StatusStr(char *str, uint8_t *len);
 
 
+/**
+  * @brief  Состояние сухого контакта
+  */
+void GetDIN0StatusStrRU(char *str, uint8_t *len);
+
 /**
 /**
   * @brief  Источник срабатывания реле
   * @brief  Источник срабатывания реле
   */
   */
@@ -278,6 +316,11 @@ void GetROTypeActStr(char *str, uint8_t *len, uint8_t num);
   */
   */
 void GetDOUTStatusStr(char *str, uint8_t *len, uint8_t num);
 void GetDOUTStatusStr(char *str, uint8_t *len, uint8_t num);
 
 
+/**
+  * @brief  Состояние релейного выхода
+  */
+void GetDOUTStatusStrRU(char *str, uint8_t *len, uint8_t num);
+
 /**
 /**
   * @brief  Состояние релейного выхода
   * @brief  Состояние релейного выхода
   */
   */
@@ -295,6 +338,23 @@ void GetDOUT1StatusStr(char *str, uint8_t *len);
 void GetDOUT2StatusStr(char *str, uint8_t *len);
 void GetDOUT2StatusStr(char *str, uint8_t *len);
 #endif
 #endif
 
 
+
+#ifdef HARDWARE_BT6706
+// ************************************************************************** //
+//                             Параметры Telnet
+
+/**
+  * @brief Текущий Порт
+  */
+void GetTelnetPortStr(char *str, uint8_t *len);
+
+/**
+  * @brief  Настройка вкл/ выкл Telnet сервера
+  */
+void GetTelnetEnableStateStr(char *str, uint8_t *len);
+
+#endif
+
 // ************************************************************************** //
 // ************************************************************************** //
 //                                Флаги
 //                                Флаги
 
 
@@ -394,6 +454,8 @@ void SetLocation(char *str);
   */
   */
 void SetComment(char *str);
 void SetComment(char *str);
 
 
+#ifdef HARDWARE_BT6702
+
 // ************************************************************************** //
 // ************************************************************************** //
 //                             Сетевые параметры RADIUS сервера
 //                             Сетевые параметры RADIUS сервера
 /**
 /**
@@ -426,6 +488,23 @@ void SetRDSEnableStateStr(char *str);
   */
   */
 void SetAuthEnableStateStr(char *str);
 void SetAuthEnableStateStr(char *str);
 
 
+#endif
+
+#ifdef HARDWARE_BT6706
+// ************************************************************************** //
+//                             Параметры Telnet
+
+/**
+  * @brief Текущий Порт
+  */
+void SetTelnetPortStr(char *str);
+
+/**
+  * @brief  Настройка вкл/ выкл Telnet сервера
+  */
+void SetTelnetEnableStateStr(char *str);
+#endif
+
 // ************************************************************************** //
 // ************************************************************************** //
 //                             Параметры даты и времени
 //                             Параметры даты и времени
 
 

+ 42 - 6
modules/settings_api.c

@@ -70,9 +70,9 @@ void SETTINGS_SetBootParamsDef(void)
 void SETTINGS_SetWebParamsDef(void)
 void SETTINGS_SetWebParamsDef(void)
 {
 {
 	  strcpy(sSettings.sWebParams.ip, "192.168.0.254");
 	  strcpy(sSettings.sWebParams.ip, "192.168.0.254");
-	  strcpy(sSettings.sWebParams.gate, "192.168.14.1");
+	  strcpy(sSettings.sWebParams.gate, "192.168.0.1");
 	  strcpy(sSettings.sWebParams.mask, "255.255.255.0");
 	  strcpy(sSettings.sWebParams.mask, "255.255.255.0");
-	  sSettings.sWebParams.dhcpEnable = 1;
+	  sSettings.sWebParams.dhcpEnable = 0;
 }
 }
 
 
 /**
 /**
@@ -95,7 +95,7 @@ void SETTINGS_SetSnmpDef(void)
   strcpy(sSettings.sSnmp.readCommunity, "public");
   strcpy(sSettings.sSnmp.readCommunity, "public");
   strcpy(sSettings.sSnmp.writeCommunity, "public");
   strcpy(sSettings.sSnmp.writeCommunity, "public");
   strcpy(sSettings.sSnmp.sysContact, "");
   strcpy(sSettings.sSnmp.sysContact, "");
-  strcpy(sSettings.sSnmp.sysName, "BT-6702");
+  strcpy(sSettings.sSnmp.sysName, HW_REV);
   strcpy(sSettings.sSnmp.sysLocation, "");
   strcpy(sSettings.sSnmp.sysLocation, "");
   strcpy(sSettings.sSnmp.managerIP, "0.0.0.0");
   strcpy(sSettings.sSnmp.managerIP, "0.0.0.0");
   strcpy(sSettings.sSnmp.managerIP2, "0.0.0.0");
   strcpy(sSettings.sSnmp.managerIP2, "0.0.0.0");
@@ -152,13 +152,21 @@ void SETTINGS_SetServiceDef(void)
         case 0:
         case 0:
             sSettings.sAuth[user_id].level = ADMIN;
             sSettings.sAuth[user_id].level = ADMIN;
             strcpy(sSettings.sAuth[user_id].login, "admin");
             strcpy(sSettings.sAuth[user_id].login, "admin");
+#ifdef HARDWARE_BT6706
+            strcpy(sSettings.sAuth[user_id].password, "12345");
+#elif HARDWARE_BT6702
             strcpy(sSettings.sAuth[user_id].password, "R04ekR4MP2");
             strcpy(sSettings.sAuth[user_id].password, "R04ekR4MP2");
+#endif
             break;
             break;
         case 1:
         case 1:
         default:
         default:
         	sSettings.sAuth[user_id].level = USER;
         	sSettings.sAuth[user_id].level = USER;
             strcpy(sSettings.sAuth[user_id].login, "user");
             strcpy(sSettings.sAuth[user_id].login, "user");
+#ifdef HARDWARE_BT6706
+            strcpy(sSettings.sAuth[user_id].password, "1234");
+#elif HARDWARE_BT6702
             strcpy(sSettings.sAuth[user_id].password, "R03ekR4MP2");
             strcpy(sSettings.sAuth[user_id].password, "R03ekR4MP2");
+#endif
             break;
             break;
         }
         }
     }
     }
@@ -192,12 +200,13 @@ void SETTINGS_SetINOUTSDef(void)
 	sSettings.sInOuts.din_type_act[0] = DI_CONN;
 	sSettings.sInOuts.din_type_act[0] = DI_CONN;
 }
 }
 
 
+#ifdef HARDWARE_BT6702
 /**
 /**
   * @brief  Установить параметры RADIUS по умолчанию
   * @brief  Установить параметры RADIUS по умолчанию
   */
   */
 void SETTINGS_SetRADIUSDef(void)
 void SETTINGS_SetRADIUSDef(void)
 {
 {
-  sSettings.sRADIUS.Auth_enable = false;
+  sSettings.sRADIUS.Auth_enable = true;
   //sSettings.sRADIUS.RDSEnable = false;
   //sSettings.sRADIUS.RDSEnable = false;
   // todo вернуть на значение false
   // todo вернуть на значение false
   sSettings.sRADIUS.RDSEnable = false;
   sSettings.sRADIUS.RDSEnable = false;
@@ -218,7 +227,19 @@ void SETTINGS_SetSSLcrtDef(void){
 	//memcpy(sSettings.our_srv_key, (unsigned char *) mbedtls_test_srv_key, mbedtls_test_srv_key_len);
 	//memcpy(sSettings.our_srv_key, (unsigned char *) mbedtls_test_srv_key, mbedtls_test_srv_key_len);
   
   
 }
 }
-  
+#endif
+
+#ifdef HARDWARE_BT6706
+/**
+  * @brief  Установить параметры Telnet
+  */
+void SETTINGS_SetTelnetDef(void){
+	sSettings.sTelnet.TelnetEnable = true;
+	sSettings.sTelnet.port = 23;
+}
+
+#endif
+
 /**
 /**
   * @brief  Сброс настроек в значения по умолчанию
   * @brief  Сброс настроек в значения по умолчанию
   */
   */
@@ -230,8 +251,13 @@ void SETTINGS_SetDefault(void)
   SETTINGS_SetServiceDef();
   SETTINGS_SetServiceDef();
   SETTINGS_SetSntpDef();
   SETTINGS_SetSntpDef();
   SETTINGS_SetINOUTSDef();
   SETTINGS_SetINOUTSDef();
+#ifdef HARDWARE_BT6702
   SETTINGS_SetRADIUSDef();
   SETTINGS_SetRADIUSDef();
   SETTINGS_SetSSLcrtDef();
   SETTINGS_SetSSLcrtDef();
+#endif
+#ifdef HARDWARE_BT6706
+  SETTINGS_SetTelnetDef();
+#endif
 
 
   sSettings.CritSecCRC = SETTINGS_GetCritSecCRC();
   sSettings.CritSecCRC = SETTINGS_GetCritSecCRC();
 }
 }
@@ -268,8 +294,13 @@ void SETTINGS_SetAllDefault(void)
   SETTINGS_SetServiceDef();
   SETTINGS_SetServiceDef();
   SETTINGS_SetSntpDef();
   SETTINGS_SetSntpDef();
   SETTINGS_SetINOUTSDef();
   SETTINGS_SetINOUTSDef();
+#ifdef HARDWARE_BT6702
   SETTINGS_SetRADIUSDef();
   SETTINGS_SetRADIUSDef();
   SETTINGS_SetSSLcrtDef();
   SETTINGS_SetSSLcrtDef();
+#endif
+#ifdef HARDWARE_BT6706
+  SETTINGS_SetTelnetDef();
+#endif
   
   
   sSettings.CritSecCRC = SETTINGS_GetCritSecCRC();
   sSettings.CritSecCRC = SETTINGS_GetCritSecCRC();
 
 
@@ -289,9 +320,14 @@ void SETTINGS_SetDefaultDebug(void)
   //SETTINGS_SetServiceDef();
   //SETTINGS_SetServiceDef();
   SETTINGS_SetSntpDef();
   SETTINGS_SetSntpDef();
   SETTINGS_SetINOUTSDef();
   SETTINGS_SetINOUTSDef();
-  SETTINGS_SetRADIUSDef();
   //SETTINGS_SetInfoDef();
   //SETTINGS_SetInfoDef();
+#ifdef HARDWARE_BT6702
+  SETTINGS_SetRADIUSDef();
   SETTINGS_SetSSLcrtDef();
   SETTINGS_SetSSLcrtDef();
+#endif
+#ifdef HARDWARE_BT6706
+  SETTINGS_SetTelnetDef();
+#endif
   
   
   sSettings.CritSecCRC = SETTINGS_GetCritSecCRC();
   sSettings.CritSecCRC = SETTINGS_GetCritSecCRC();
 
 

+ 25 - 2
modules/settings_api.h

@@ -171,12 +171,22 @@ typedef struct
   bool Auth_enable;
   bool Auth_enable;
   char    ServerIP[16];
   char    ServerIP[16];
   char    rds_password[17];
   char    rds_password[17];
-  bool RDSEnable;  // 0 - DHCP отключен, 1 - включен
+  bool RDSEnable;  // 0 - отключен, 1 - включен
   uint32_t port;
   uint32_t port;
   uint32_t key_access;
   uint32_t key_access;
 
 
 } RADIUS_t;
 } RADIUS_t;
 
 
+/**
+  * @brief  Параметры Telnet
+  */
+typedef struct
+{
+  bool TelnetEnable;  // 0 - отключен, 1 - включен
+  uint32_t port;
+
+} TELNET_t;
+
 /**
 /**
   * @brief  Общая структура настроек
   * @brief  Общая структура настроек
   */
   */
@@ -198,9 +208,14 @@ typedef struct
   AUTH_t		sAuth[MAX_WEB_USERS];
   AUTH_t		sAuth[MAX_WEB_USERS];
   SNTP_t        sSNTP;
   SNTP_t        sSNTP;
   INOUTS_t		sInOuts;
   INOUTS_t		sInOuts;
+#ifdef HARDWARE_BT6702
   RADIUS_t		sRADIUS;
   RADIUS_t		sRADIUS;
   //char			our_srv_crt[1205];
   //char			our_srv_crt[1205];
   char			our_srv_crt[1705];
   char			our_srv_crt[1705];
+#endif
+#ifdef HARDWARE_BT6706
+  TELNET_t		sTelnet;
+#endif
   uint32_t      controlWorld;  // Слово для контроля целостности структуры настроек
   uint32_t      controlWorld;  // Слово для контроля целостности структуры настроек
   
   
 } SETTINGS_t;
 } SETTINGS_t;
@@ -250,7 +265,7 @@ void SETTINGS_SetSntpDef(void);
   * @brief  Установить параметры настроек сухих контактов / реле по умолчанию
   * @brief  Установить параметры настроек сухих контактов / реле по умолчанию
   */
   */
 void SETTINGS_SetINOUTSDef(void);
 void SETTINGS_SetINOUTSDef(void);
-
+#ifdef HARDWARE_BT6702
 /**
 /**
   * @brief  Установить параметры RADIUS по умолчанию
   * @brief  Установить параметры RADIUS по умолчанию
   */
   */
@@ -260,6 +275,14 @@ void SETTINGS_SetRADIUSDef(void);
   * @brief  Установить параметры сертификата сервера по умолчанию
   * @brief  Установить параметры сертификата сервера по умолчанию
   */
   */
 void SETTINGS_SetSSLcrtDef(void);
 void SETTINGS_SetSSLcrtDef(void);
+#endif
+
+#ifdef HARDWARE_BT6706
+/**
+  * @brief  Установить параметры Telnet
+  */
+void SETTINGS_SetTelnetDef(void);
+#endif
 
 
 /**
 /**
   * @brief  Установить значение сервисных настроек по умолчанию
   * @brief  Установить значение сервисных настроек по умолчанию

+ 3 - 1
modules/testing/testing.c

@@ -78,6 +78,8 @@ void vTaskTesting(void *params)
 	  /* Если все прошло хорошо*/
 	  /* Если все прошло хорошо*/
 	  if (fServer)
 	  if (fServer)
 	  {
 	  {
+		  SETTINGS_SetAllDefault();
+		  SETTINGS_Save();
         LED_On(LED_INIT_R);
         LED_On(LED_INIT_R);
 		/* Устанавливаем статус тестирования "T2OK" и сохраняем настройки */
 		/* Устанавливаем статус тестирования "T2OK" и сохраняем настройки */
 		SETTINGS_SetT2OK();
 		SETTINGS_SetT2OK();
@@ -85,7 +87,7 @@ void vTaskTesting(void *params)
         LED_Off(LED_INIT_R);
         LED_Off(LED_INIT_R);
 	    fServer = false;
 	    fServer = false;
 	    vTaskDelay(2000);
 	    vTaskDelay(2000);
-	    Reboot();
+	  //  Reboot();
 	    vTaskDelete(NULL);
 	    vTaskDelete(NULL);
       }
       }
       
       

BIN
output/BT_6702xx.bin


BIN
output/iap.bin


+ 78 - 10
service_hw/Commands/bt_6701_commands.c

@@ -15,7 +15,11 @@
 #include "commands_api.h"
 #include "commands_api.h"
 #include "common_config.h"
 #include "common_config.h"
 #include "gpio.h"
 #include "gpio.h"
+#if defined HARDWARE_BT6702
 #include "board_bt6702.h"
 #include "board_bt6702.h"
+#elif defined HARDWARE_BT6706
+#include "board_bt6706.h"
+#endif
 #include "buttons.h"
 #include "buttons.h"
 #include "led.h"
 #include "led.h"
 #include "netconf.h"
 #include "netconf.h"
@@ -53,6 +57,11 @@ extern BUTTON_NO_FIX_t defButton;
 extern uint8_t SetCounter;
 extern uint8_t SetCounter;
 extern BUTTON_NO_FIX_t setButton;
 extern BUTTON_NO_FIX_t setButton;
 
 
+/**
+  * @brief  Флаг ининциализации Eth интерфейса
+  */
+extern unsigned char eth_ready_flag;
+
 // -------------------------------------------------------------------------- //
 // -------------------------------------------------------------------------- //
 //                              __weak функции
 //                              __weak функции
 
 
@@ -96,10 +105,22 @@ void Test_U232(void)
 void Test_DRY(void)
 void Test_DRY(void)
 {
 {
     uint8_t inputState;
     uint8_t inputState;
-    
+#ifdef HARDWARE_BT6706
+    uint8_t start_state = 0;
+    uint8_t end_state = 1;
+    set_state_douts(DOUT1, 1);
+    set_state_douts(DOUT2, 1);
+    set_state_douts(DOUT3, 1);
+#endif
+
+#ifdef HARDWARE_BT6702
+    uint8_t start_state = 1;
+    uint8_t end_state = 0;
+#endif
+    vTaskDelay(10);
     inputState = get_state_din_outs(DIN1);
     inputState = get_state_din_outs(DIN1);
     
     
-    set_state_douts(DOUT1, 1);
+    set_state_douts(DOUT1, start_state);
     
     
     vTaskDelay(10);
     vTaskDelay(10);
         
         
@@ -109,7 +130,7 @@ void Test_DRY(void)
         return;
         return;
     }  
     }  
 
 
-    set_state_douts(DOUT1, 0);
+    set_state_douts(DOUT1, end_state);
     
     
     vTaskDelay(10);
     vTaskDelay(10);
     
     
@@ -121,7 +142,31 @@ void Test_DRY(void)
     
     
     inputState = get_state_din_outs(DIN1);
     inputState = get_state_din_outs(DIN1);
 
 
-	set_state_douts(DOUT2, 1);
+	set_state_douts(DOUT2, start_state);
+
+	vTaskDelay(10);
+
+	if (get_state_din_outs(DIN1) == inputState) {
+		printf("DRY FAIL\r\n");
+		TEST_SetTest(TEST_WAIT);
+		return;
+	}
+
+	set_state_douts(DOUT2, end_state);
+
+	vTaskDelay(10);
+
+	if (get_state_din_outs(DIN1) != inputState) {
+		printf("DRY FAIL\r\n");
+		TEST_SetTest(TEST_WAIT);
+		return;
+	}
+
+	vTaskDelay(10);
+#ifdef HARDWARE_BT6706
+    inputState = get_state_din_outs(DIN1);
+
+	set_state_douts(DOUT3, start_state);
 
 
 	vTaskDelay(10);
 	vTaskDelay(10);
 
 
@@ -131,7 +176,7 @@ void Test_DRY(void)
 		return;
 		return;
 	}
 	}
 
 
-	set_state_douts(DOUT2, 0);
+	set_state_douts(DOUT3, end_state);
 
 
 	vTaskDelay(10);
 	vTaskDelay(10);
 
 
@@ -142,6 +187,7 @@ void Test_DRY(void)
 	}
 	}
 
 
 	vTaskDelay(10);
 	vTaskDelay(10);
+#endif
 
 
     printf("DRY OK\r\n");
     printf("DRY OK\r\n");
     TEST_SetTest(TEST_WAIT);
     TEST_SetTest(TEST_WAIT);
@@ -274,14 +320,36 @@ void COM_TestSPIflash(void)
 void Test_Ethernet(void)
 void Test_Ethernet(void)
 {
 {
     static bool ethernetInit = false;
     static bool ethernetInit = false;
+    int timeout = 100; /* 10 sec timeout */
   
   
-    if (ethernetInit == false)
+   // if (ethernetInit == false)
     {
     {
-        ethernetInit = true;
-        ETH_BSP_Config();
-        LwIP_Init();
-        sys_thread_new("HTTP", vTaskTcpServer, NULL, 4*configMINIMAL_STACK_SIZE, tskIDLE_PRIORITY);
+        if (eth_ready_flag == 0) {
+        	if(!ethernetInit){
+        		ethernetInit = true;
+				ETH_BSP_Config();
+				 LwIP_Init();
+        	}
+        	else{
+        		init_get_ip_address_controller();
+        	}
+        }
+        /* Waiting ETH init */
+        while ((eth_ready_flag == 0) && (timeout-- > 0)) {
+            vTaskDelay(100);
+        }
+
+        if (eth_ready_flag == 0) {
+            printf("ETH FAIL\r\n");
+        }
+        else {
+            sys_thread_new("HTTP", vTaskTcpServer, NULL, 4*configMINIMAL_STACK_SIZE, tskIDLE_PRIORITY);
+            ethernetInit = true;
+        }
     }
     }
+  /*  else {
+        printf("ETH OK\r\n");
+    }*/
    
    
 	TEST_SetTest(TEST_WAIT);
 	TEST_SetTest(TEST_WAIT);
 }
 }

+ 15 - 3
service_hw/Commands/commands_api.c

@@ -13,6 +13,7 @@
 #include "stm32f4xx.h"  
 #include "stm32f4xx.h"  
 #include "commands_api.h"
 #include "commands_api.h"
 #include "settings_api.h"
 #include "settings_api.h"
+#include "sys_api.h"
 #include "buttons.h"
 #include "buttons.h"
 #include "led.h"
 #include "led.h"
 #include "parameters.h"
 #include "parameters.h"
@@ -67,11 +68,17 @@ extern char STM_ID[33];
 extern char STM_ID_HEX[12];
 extern char STM_ID_HEX[12];
 uint8_t MAC[6];
 uint8_t MAC[6];
 
 
+/**
+  * @brief  Общая структура настроек
+  */
+extern SETTINGS_t sSettings;
+
 /**
 /**
   * @brief  
   * @brief  
   */
   */
 void vTestCommands(void *params)
 void vTestCommands(void *params)
 {
 {
+
     for (;;)
     for (;;)
     {
     {
         if (fUpdatable) {
         if (fUpdatable) {
@@ -88,8 +95,8 @@ void vTestCommands(void *params)
         		 }
         		 }
         	}
         	}
             //COM_TestEthernet();
             //COM_TestEthernet();
-        	COM_SetMAC();
 
 
+        	SETTINGS_SetInfoDef();
             Test_Ethernet();
             Test_Ethernet();
             vTaskDelay(8000);
             vTaskDelay(8000);
 
 
@@ -109,6 +116,7 @@ void vTestCommands(void *params)
             //sSettings.bootParams.loadMode = 1;
             //sSettings.bootParams.loadMode = 1;
             SetLoadMode();
             SetLoadMode();
             COM_TestSerno();
             COM_TestSerno();
+
             COM_SetTestState(T2READY);
             COM_SetTestState(T2READY);
             vTaskDelay(1000);
             vTaskDelay(1000);
             NVIC_SystemReset();
             NVIC_SystemReset();
@@ -152,6 +160,7 @@ void vTestCommands(void *params)
             break;
             break;
 
 
             case TEST_ETHERNET :
             case TEST_ETHERNET :
+            	COM_SetMAC();
                 Test_Ethernet();
                 Test_Ethernet();
             break;
             break;
             
             
@@ -304,13 +313,16 @@ void COM_SetMAC(void)
 
 
   /* Восьмой бит первого октета должен быть равен 0 */
   /* Восьмой бит первого октета должен быть равен 0 */
 
 
-  MAC[0] = octet1 & 0xFE;
+/*  MAC[0] = octet1 & 0xFE;
   MAC[1] = octet2;
   MAC[1] = octet2;
   MAC[2] = octet3;
   MAC[2] = octet3;
 
 
   MAC[3] = 0x00;
   MAC[3] = 0x00;
   MAC[4] = 0x00;
   MAC[4] = 0x00;
-  MAC[5] = 0x00;
+  MAC[5] = 0x00;*/
+
+  /* Устанавливаем MAC, но не сохраняем */
+  snprintf(sSettings.sInfo.mac, MAC_LEN, "%02X-%02X-%02X-00-00-00", octet1 & 0xFE, octet2, octet3);
 
 
 }
 }
 
 

+ 1 - 1
service_hw/Ethernet/lwipopts.h

@@ -151,7 +151,7 @@ The STM32F4x7 allows computing and verifying the IP, UDP, TCP and ICMP checksums
  - To use this feature let the following define uncommented.
  - To use this feature let the following define uncommented.
  - To disable it and process by CPU comment the  the checksum.
  - To disable it and process by CPU comment the  the checksum.
 */
 */
-#define CHECKSUM_BY_HARDWARE 
+#define CHECKSUM_BY_HARDWARE
 
 
 
 
 #ifdef CHECKSUM_BY_HARDWARE
 #ifdef CHECKSUM_BY_HARDWARE

+ 57 - 12
service_hw/Ethernet/netconf.c

@@ -20,7 +20,7 @@
 #include <string.h>
 #include <string.h>
 
 
 
 
-#define MAX_DHCP_TRIES 3
+#define MAX_DHCP_TRIES 4
 
 
 #define TIME_COUNTER_10_MIN   600
 #define TIME_COUNTER_10_MIN   600
 #define TIME_COUNTER_1_MIN    60
 #define TIME_COUNTER_1_MIN    60
@@ -30,11 +30,22 @@
   */
   */
 struct netif xnetif; 
 struct netif xnetif; 
 
 
+
+/**
+  * @brief  Флаг ининциализации Eth интерфейса
+  */
+unsigned char eth_ready_flag = 0;
+
 /**
 /**
   * @brief  Задача получения сетевый параметров по DHCP протоколу
   * @brief  Задача получения сетевый параметров по DHCP протоколу
   */
   */
 TaskHandle_t xHandleDHCP = NULL;
 TaskHandle_t xHandleDHCP = NULL;
 
 
+/**
+  * @brief  Общая структура настроек
+  */
+extern SETTINGS_t sSettings;
+
 
 
 void LwIP_Init(void)
 void LwIP_Init(void)
 {
 {
@@ -62,6 +73,11 @@ void LwIP_Init(void)
                 tskIDLE_PRIORITY + 2, &xHandleDHCP);
                 tskIDLE_PRIORITY + 2, &xHandleDHCP);
 }
 }
 
 
+void init_get_ip_address_controller(void){
+	 xTaskCreate(LwIP_DHCP_task, "DHCPClient", configMINIMAL_STACK_SIZE * 2, NULL,
+	                tskIDLE_PRIORITY + 2, &xHandleDHCP);
+}
+
 /**
 /**
   * @brief  LwIP_DHCP_Process_Handle
   * @brief  LwIP_DHCP_Process_Handle
   * @param  None
   * @param  None
@@ -74,10 +90,11 @@ void LwIP_DHCP_task(void * pvParameters)
   struct ip4_addr gw;
   struct ip4_addr gw;
   uint8_t DHCP_state;  
   uint8_t DHCP_state;  
   DHCP_state = DHCP_START;
   DHCP_state = DHCP_START;
-  static uint8_t dhcpTry = 0;
+
 
 
   for (;;)
   for (;;)
   {
   {
+	  struct dhcp *dhcp = netif_dhcp_data(&xnetif);
     switch (DHCP_state)
     switch (DHCP_state)
     {
     {
       case DHCP_START:
       case DHCP_START:
@@ -117,22 +134,50 @@ void LwIP_DHCP_task(void * pvParameters)
           
           
 		  printf("ETH OK\r\n");
 		  printf("ETH OK\r\n");
 		  
 		  
+		  /* Установлен динамический IP. *
+		   * Ждем инициализацию интерфейса и выставляем флаг готовности. */
+		  vTaskDelay(2000);
+		  eth_ready_flag = 1;
+
           vTaskDelete(xHandleDHCP);
           vTaskDelete(xHandleDHCP);
         }
         }
         else
         else
         {
         {
           /* DHCP timeout */
           /* DHCP timeout */
-          if (dhcpTry++ > MAX_DHCP_TRIES)
+          if (dhcp->tries > MAX_DHCP_TRIES)
           {
           {
-            DHCP_state = DHCP_TIMEOUT;
-
-            /* Stop DHCP */
-            dhcp_stop(&xnetif);
-			
-			/* Сообщение о неудачной попытке получить IP */
-			printf("ETH FAIL\r\n");
-			
-			vTaskDelete(xHandleDHCP);
+              DHCP_state = DHCP_TIMEOUT;
+
+              /* Stop DHCP */
+              dhcp_stop(&xnetif);
+
+  		/*	if (sSettings.sFlags.netsettingsChanged == true)
+  		    {
+  			  ipaddr.addr = ipaddr_addr(sSettings.sWebTempParams.ip);
+  	          netmask.addr = ipaddr_addr(sSettings.sWebTempParams.mask);
+  	          gw.addr = ipaddr_addr(sSettings.sWebTempParams.gate);
+  			}
+  			else
+  			{
+  			  ipaddr.addr = ipaddr_addr(sSettings.sWebParams.ip);
+  	          netmask.addr = ipaddr_addr(sSettings.sWebParams.mask);
+  	          gw.addr = ipaddr_addr(sSettings.sWebParams.gate);
+  			}
+
+              //Static address used
+              netif_set_addr(&xnetif, &ipaddr , &netmask, &gw);
+
+              printf("DHCP timeout\n\r");
+              printf("\n\rStatic IP address\n\r");
+  			printf(ipaddr_ntoa(&ipaddr));
+  		    printf("\n\r");*/
+
+  		    /* Установлен динамический IP. *
+  		    * Ждем инициализацию интерфейса и выставляем флаг готовности. */
+  		    vTaskDelay(2000);
+  		    eth_ready_flag = 0;
+
+  			vTaskDelete(xHandleDHCP);
           }
           }
         }
         }
       }
       }

+ 1 - 0
service_hw/Ethernet/netconf.h

@@ -44,6 +44,7 @@ void LwIP_Init(void);
 
 
 void LwIP_DHCP_task(void * pvParameters);
 void LwIP_DHCP_task(void * pvParameters);
 
 
+void init_get_ip_address_controller(void);
 
 
 #ifdef __cplusplus
 #ifdef __cplusplus
 }
 }

+ 8 - 2
service_hw/Hardware/hw_init.c

@@ -15,6 +15,7 @@
 #include "wdg.h"
 #include "wdg.h"
 #include "usart.h"
 #include "usart.h"
 #include "settings_api.h"
 #include "settings_api.h"
+#include "bt_6701_settings.h"
 #include "buttons.h"
 #include "buttons.h"
 #include "commands_api.h"
 #include "commands_api.h"
 #include "led.h"
 #include "led.h"
@@ -65,10 +66,13 @@ void BT_6702_Init(void)
    
    
 	InitUSART();
 	InitUSART();
 	MICRORL_Init();
 	MICRORL_Init();
+
+	init_settings();
   
   
     SETTINGS_Load();
     SETTINGS_Load();
-    /*SETTINGS_SetTempWebParamsDef();
-    SETTINGS_Save();*/
+    Service_SETTINGS_SetWebParamsDef();
+    Service_SETTINGS_SetTempWebParamsDef();
+    SETTINGS_Save();
     
     
     COM_ReadTestState();
     COM_ReadTestState();
     
     
@@ -88,6 +92,8 @@ void BT_6702_Init(void)
     xTaskCreate(vTestCommands, "TestProcessing", 2*configMINIMAL_STACK_SIZE, NULL, tskIDLE_PRIORITY, NULL);
     xTaskCreate(vTestCommands, "TestProcessing", 2*configMINIMAL_STACK_SIZE, NULL, tskIDLE_PRIORITY, NULL);
   
   
     printf("Hello world\r\n");
     printf("Hello world\r\n");
+
+
 }
 }
 
 
 
 

+ 3 - 3
service_hw/Makefile

@@ -1,9 +1,9 @@
 TARGET := stm32$(HARDWARE)service
 TARGET := stm32$(HARDWARE)service
 
 
 
 
-#ifeq ($(DEBUG), 1)
+ifeq ($(DEBUG), 1)
 	CFLAGS += -DDEBUG -g
 	CFLAGS += -DDEBUG -g
-#endif
+endif
 
 
 ifeq ($(MAC),)
 ifeq ($(MAC),)
 	#Print default MAC
 	#Print default MAC
@@ -57,7 +57,7 @@ CSRC += $(wildcard buttons/*.c)
 CSRC += $(wildcard ../modules/jumper/*.c)
 CSRC += $(wildcard ../modules/jumper/*.c)
 CSRC += $(wildcard ../modules/d_inouts/*.c)
 CSRC += $(wildcard ../modules/d_inouts/*.c)
 CSRC += $(wildcard ../modules/common/*.c)
 CSRC += $(wildcard ../modules/common/*.c)
-CSRC += $(wildcard ../modules/mbedtls_api/*.c)
+#CSRC += $(wildcard ../modules/mbedtls_api/*.c)
 CSRC += $(wildcard ../modules/*.c)
 CSRC += $(wildcard ../modules/*.c)
 
 
 CFLAGS += -DOS_FREERTOS
 CFLAGS += -DOS_FREERTOS

+ 31 - 0
service_hw/Settings/bt_6701_settings.c

@@ -88,6 +88,37 @@ void SETTINGS_SetMac(char *mac)
 }
 }
 
 
 
 
+/**
+  * @brief  Установить параметры сетевого подключения по умолчанию
+  */
+void Service_SETTINGS_SetWebParamsDef(void)
+{
+#ifdef HARDWARE_BT6706
+	  strcpy(sSettings.sWebParams.ip, "192.168.0.6");
+#elif HARDWARE_BT6702
+	  strcpy(sSettings.sWebParams.ip, "192.168.0.2");
+#endif
+	  strcpy(sSettings.sWebParams.gate, "192.168.0.1");
+	  strcpy(sSettings.sWebParams.mask, "255.255.255.0");
+	  sSettings.sWebParams.dhcpEnable = 1;
+}
+
+/**
+  * @brief  Установить временные параметры сетевого подключения по умолчанию
+  */
+void Service_SETTINGS_SetTempWebParamsDef(void)
+{
+#ifdef HARDWARE_BT6706
+	  strcpy(sSettings.sWebTempParams.ip, "192.168.0.6");
+#elif HARDWARE_BT6702
+	  strcpy(sSettings.sWebTempParams.ip, "192.168.0.2");
+#endif
+	  strcpy(sSettings.sWebTempParams.gate, "192.168.0.1");
+	  strcpy(sSettings.sWebTempParams.mask, "255.255.255.0");
+	  sSettings.sWebTempParams.dhcpEnable = 1;
+}
+
+
 
 
 
 
 
 

+ 10 - 0
service_hw/Settings/bt_6701_settings.h

@@ -39,6 +39,16 @@ void SETTINGS_SetSerno(char *serno);
   */
   */
 void SETTINGS_SetMac(char *mac);
 void SETTINGS_SetMac(char *mac);
 
 
+/**
+  * @brief  Установить параметры сетевого подключения по умолчанию
+  */
+void Service_SETTINGS_SetWebParamsDef(void);
+
+/**
+  * @brief  Установить временные параметры сетевого подключения по умолчанию
+  */
+void Service_SETTINGS_SetTempWebParamsDef(void);
+
 #endif /* #ifndef __BT_6701_SETTINGS_H */
 #endif /* #ifndef __BT_6701_SETTINGS_H */
 
 
 /********************************* (C) РОТЕК **********************************/
 /********************************* (C) РОТЕК **********************************/

+ 6 - 0
thirdparty/FreeRTOS/include/FreeRTOSConfig.h

@@ -159,5 +159,11 @@ See http://www.FreeRTOS.org/RTOS-Cortex-M3-M4.html. */
 #define vPortSVCHandler SVC_Handler
 #define vPortSVCHandler SVC_Handler
 #define xPortSysTickHandler SysTick_Handler
 #define xPortSysTickHandler SysTick_Handler
 
 
+/* Dimensions a buffer that can be used by the FreeRTOS+CLI command
+interpreter.  Set this value to 1 to save RAM if FreeRTOS+CLI does not supply
+the output butter.  See the FreeRTOS+CLI documentation for more information:
+http://www.FreeRTOS.org/FreeRTOS-Plus/FreeRTOS_Plus_CLI/ */
+#define configCOMMAND_INT_MAX_OUTPUT_SIZE			3*1024
+
 #endif /* FREERTOS_CONFIG_H */
 #endif /* FREERTOS_CONFIG_H */
 
 

+ 1 - 11
thirdparty/lwip/port/FreeRTOS/ethernetif.c

@@ -112,16 +112,7 @@ static void low_level_init(struct netif *netif)
  
  
   /* set netif MAC hardware address length */
   /* set netif MAC hardware address length */
   netif->hwaddr_len = ETHARP_HWADDR_LEN;
   netif->hwaddr_len = ETHARP_HWADDR_LEN;
-	
-  /* set netif MAC hardware address */
-#ifdef BT6702_SERVICE
-  netif->hwaddr[0] =  MAC[0];
-  netif->hwaddr[1] =  MAC[1];
-  netif->hwaddr[2] =  MAC[2];
-  netif->hwaddr[3] =  MAC[3];
-  netif->hwaddr[4] =  MAC[4];
-  netif->hwaddr[5] =  MAC[5];
-#else
+
   SETTINGS_GetMac(mac);
   SETTINGS_GetMac(mac);
 
 
   netif->hwaddr[0] =  mac[0];
   netif->hwaddr[0] =  mac[0];
@@ -130,7 +121,6 @@ static void low_level_init(struct netif *netif)
   netif->hwaddr[3] =  mac[3];
   netif->hwaddr[3] =  mac[3];
   netif->hwaddr[4] =  mac[4];
   netif->hwaddr[4] =  mac[4];
   netif->hwaddr[5] =  mac[5];
   netif->hwaddr[5] =  mac[5];
-#endif
 
 
   /* set netif maximum transfer unit */
   /* set netif maximum transfer unit */
   netif->mtu = 1500;
   netif->mtu = 1500;

BIN
tracefile.bin


+ 6 - 2
user/init_task.c

@@ -26,6 +26,7 @@
 #include "snmp_api.h"
 #include "snmp_api.h"
 #ifdef HARDWARE_BT6706
 #ifdef HARDWARE_BT6706
 #include "http_server.h"
 #include "http_server.h"
+#include "telnet_server.h"
 #elif HARDWARE_BT6702
 #elif HARDWARE_BT6702
 #include "my_ssl_server.h"
 #include "my_ssl_server.h"
 #endif
 #endif
@@ -39,10 +40,11 @@
 //#include "ups_params.h"
 //#include "ups_params.h"
 //#include "ups_monitor.h"
 //#include "ups_monitor.h"
 #include "lwip/stats.h"
 #include "lwip/stats.h"
+#ifdef HARDWARE_BT6702
 #include "radius_user.h"
 #include "radius_user.h"
 #include "cert_req.h"
 #include "cert_req.h"
 #include "parse_rsa.h"
 #include "parse_rsa.h"
-
+#endif
 #ifdef PRINTF_STDLIB
 #ifdef PRINTF_STDLIB
 #include <stdio.h>
 #include <stdio.h>
 #endif
 #endif
@@ -155,7 +157,9 @@ void InitTask(void *params)
 	   else{
 	   else{
 		   UDP_netsetting_init();
 		   UDP_netsetting_init();
 	   }
 	   }
-
+#ifdef HARDWARE_BT6706
+	   telnet_server_init();
+#endif
  /* HTTPS_Init();
  /* HTTPS_Init();
   xTaskCreate(ssl_server, "SSL", 10*configMINIMAL_STACK_SIZE, NULL, SSL_TASK_PRIO, NULL);  
   xTaskCreate(ssl_server, "SSL", 10*configMINIMAL_STACK_SIZE, NULL, SSL_TASK_PRIO, NULL);  
   UDP_netsetting_init();*/
   UDP_netsetting_init();*/

+ 4 - 2
user/main.c

@@ -46,14 +46,16 @@ int main()
 	FLASH_ClearFlag(FLASH_FLAG_PGPERR);
 	FLASH_ClearFlag(FLASH_FLAG_PGPERR);
 	FLASH_ClearFlag(FLASH_FLAG_PGSERR);
 	FLASH_ClearFlag(FLASH_FLAG_PGSERR);
 
 
-/*	if (FLASH_OB_GetRDP() != SET) {
+#ifndef DEBUG
+	if (FLASH_OB_GetRDP() != SET) {
 		FLASH_Unlock();                           // this line is critical!
 		FLASH_Unlock();                           // this line is critical!
 		FLASH_OB_Unlock();
 		FLASH_OB_Unlock();
 		FLASH_OB_RDPConfig(OB_RDP_Level_1);
 		FLASH_OB_RDPConfig(OB_RDP_Level_1);
 		FLASH_OB_Launch();                        // Option Bytes programming
 		FLASH_OB_Launch();                        // Option Bytes programming
 		FLASH_OB_Lock();
 		FLASH_OB_Lock();
 		FLASH_Lock();
 		FLASH_Lock();
-	}*/
+	}
+#endif
 
 
 	gpio_init();
 	gpio_init();
 
 

+ 1 - 1
user/main.h

@@ -59,7 +59,7 @@
 #define __packed		__attribute__(( packed ))
 #define __packed		__attribute__(( packed ))
 #endif
 #endif
    
    
-#define OUR_DEBUG
+//#define OUR_DEBUG
 
 
 #ifdef OUR_DEBUG
 #ifdef OUR_DEBUG
 #define DBG
 #define DBG