src/http/NyLPC_cHttpBodyWriter.d src/http/NyLPC_cHttpBodyWriter.o: \\r
- ../src/http/NyLPC_cHttpBodyWriter.c ../src/http/NyLPC_cHttpBodyWriter.h \\r
- ../src/http/NyLPC_cHttpHeaderWriter.h \\r
+ ../src/http/NyLPC_cHttpBodyWriter.c \\r
+ D:\project.sourceforge\MiMic\trunk\lib\src\include/NyLPC_utils.h \\r
+ D:\project.sourceforge\MiMic\trunk\lib\src\include/../utils/NyLPC_cRomFileSet.h \\r
D:\project.sourceforge\MiMic\trunk\lib\src\include/NyLPC_stdlib.h \\r
D:\project.sourceforge\MiMic\trunk\lib\src\include/NyLPC_config.h \\r
D:\project.sourceforge\MiMic\trunk\lib\src\include/../NyLPC_cMiMicEnv.h \\r
D:\project.sourceforge\MiMic\trunk\lib\src\include/../NyLPC_cFifoBuffer.h \\r
D:\project.sourceforge\MiMic\trunk\lib\src\include/../NyLPC_cPtrStream.h \\r
D:\project.sourceforge\MiMic\trunk\lib\src\include/../NyLPC_cStr.h \\r
- ../src/http/NyLPC_cHttpStream.h \\r
+ D:\project.sourceforge\MiMic\trunk\lib\src\include/../utils/NyLPC_cFormatTextReader.h \\r
+ D:\project.sourceforge\MiMic\trunk\lib\src\include/../utils/NyLPC_cFormatWriter.h \\r
+ ../src/http/NyLPC_cHttpBodyWriter.h \\r
+ ../src/http/NyLPC_cHttpHeaderWriter.h ../src/http/NyLPC_cHttpStream.h \\r
D:\project.sourceforge\MiMic\trunk\lib\src\include/NyLPC_config.h \\r
../src/http/NyLPC_iHttpPtrStream.h ../src/http/../uip/NyLPC_cTcpSocket.h \\r
../src/http/../uip/NyLPC_uip.h \\r
../src/http/NyLPC_cHttpBasicHeaderParser.h \\r
../src/http/NyLPC_cHttpdConfig.h\r
\r
-../src/http/NyLPC_cHttpBodyWriter.h:\r
+D:\project.sourceforge\MiMic\trunk\lib\src\include/NyLPC_utils.h:\r
\r
-../src/http/NyLPC_cHttpHeaderWriter.h:\r
+D:\project.sourceforge\MiMic\trunk\lib\src\include/../utils/NyLPC_cRomFileSet.h:\r
\r
D:\project.sourceforge\MiMic\trunk\lib\src\include/NyLPC_stdlib.h:\r
\r
\r
D:\project.sourceforge\MiMic\trunk\lib\src\include/../NyLPC_cStr.h:\r
\r
+D:\project.sourceforge\MiMic\trunk\lib\src\include/../utils/NyLPC_cFormatTextReader.h:\r
+\r
+D:\project.sourceforge\MiMic\trunk\lib\src\include/../utils/NyLPC_cFormatWriter.h:\r
+\r
+../src/http/NyLPC_cHttpBodyWriter.h:\r
+\r
+../src/http/NyLPC_cHttpHeaderWriter.h:\r
+\r
../src/http/NyLPC_cHttpStream.h:\r
\r
D:\project.sourceforge\MiMic\trunk\lib\src\include/NyLPC_config.h:\r
#include "NyLPC_flash.h"\r
#include "NyLPC_http.h"\r
#include "NyLPC_cMiMicConfiglation.h"\r
-\r
+#include "NyLPC_net.h"\r
/**\r
* Onchip flashを使ったコンフィギュレーション保存システムです。\r
*/\r
/**\r
* コンフィギュレーション値はホストオーダーで保存する。\r
*/\r
-const struct NyLPC_TMimicConfigulation factory_default=\r
+const struct NyLPC_TMiMicConfigulation factory_default=\r
{\r
- 0xffffffff,\r
- 0x02010203,0x0405ffff,\r
+ 0xffffffff, //fastboot\r
+ "MiMic020102030405",\r
+ 0x02010203,0x0405ffff, //Mac addr\r
+ //IPv4\r
+ NyLPC_TcNetConfig_IPV4_FLAG_MODE_MANUAL, //flags\r
IP2Int(192,168,0,39),\r
IP2Int(255,255,255,0),\r
IP2Int(192,168,0,254),\r
- 80,\r
- 0x0000FFFF\r
+ //ServerFlags\r
+ NyLPC_TcNetConfig_SERVICE_FLAG_MDNS,\r
+ //HTTP\r
+ 80, //HTTP-Port\r
+ 0 //padding\r
};\r
\r
\r
* ユーザコンフィギュレーションを更新する。\r
* この関数をコールするときは、割込/FreeRTOSを一時停止すること。\r
*/\r
-NyLPC_TBool NyLPC_cMiMicConfiglation_updateConfigulation(const struct NyLPC_TMimicConfigulation* i_congfiglation)\r
+NyLPC_TBool NyLPC_cMiMicConfiglation_updateConfigulation(const struct NyLPC_TMiMicConfigulation* i_congfiglation)\r
{\r
const NyLPC_TUInt32* volatile fast_boot=&(factory_default.fast_boot);\r
//イレース\r
NyLPC_OnErrorGoto(Error);\r
}\r
//コンフィギュレーションを書き込む。\r
- if(!NyLPC_cOnchipFlashWriter_writeSector(MIMIC_CONFIGLATION_FLASH_SECTOR,0x00000000,i_congfiglation,sizeof(struct NyLPC_TMimicConfigulation))){\r
+ if(!NyLPC_cOnchipFlashWriter_writeSector(MIMIC_CONFIGLATION_FLASH_SECTOR,0x00000000,i_congfiglation,sizeof(struct NyLPC_TMiMicConfigulation))){\r
NyLPC_OnErrorGoto(Error);\r
}\r
//プログラム済フラッシュの一部を書き換えてユーザコンフィギュレーションをONにする。\r
/**\r
* コンフィギュレーション値を返す。\r
*/\r
-const struct NyLPC_TMimicConfigulation* NyLPC_cMiMicConfiglation_loadFromFlash(void)\r
+const struct NyLPC_TMiMicConfigulation* NyLPC_cMiMicConfiglation_loadFromFlash(void)\r
{\r
if(NyLPC_cMiMicConfiglation_hasUserConfigulation()){\r
//userコンフィギュレーション読むよ\r
- return (const struct NyLPC_TMimicConfigulation*)(MIMIC_CONFIGLATION_FLASH_SECTOR_ADDR);\r
+ return (const struct NyLPC_TMiMicConfigulation*)(MIMIC_CONFIGLATION_FLASH_SECTOR_ADDR);\r
}else{\r
//Userコンフィギュレーションない\r
return &factory_default;\r
}\r
}\r
-const struct NyLPC_TMimicConfigulation* NyLPC_cMiMicConfiglation_loadFactoryDefault(void)\r
+const struct NyLPC_TMiMicConfigulation* NyLPC_cMiMicConfiglation_loadFactoryDefault(void)\r
{\r
return &factory_default;\r
}\r
extern "C" {\r
#endif /* __cplusplus */\r
\r
+\r
/**\r
* IPアドレスはネットワークオーダーで格納する。\r
* 構造体は4バイトアライメントであること。\r
*/\r
-struct NyLPC_TMimicConfigulation{\r
- /**\r
- * ROM焼検出用。0xFFFFFFFFを書く\r
- */\r
+struct NyLPC_TMiMicConfigulation{\r
+ /** ROM焼検出用。0xFFFFFFFFを書く */\r
NyLPC_TUInt32 fast_boot;\r
+ /** ホスト名*/\r
+ NyLPC_TChar hostname[32];\r
+ /** MACアドレスの下位4bit*/\r
NyLPC_TUInt32 mac_00_01_02_03;\r
+ /** MACアドレスの上位2bit*/\r
NyLPC_TUInt32 mac_04_05_xx_xx;\r
+ /*\r
+ * IPv4設定\r
+ */\r
+\r
+ /**\r
+ * 0-1bit 起動モード\r
+ * 0:default,1:DHCP,2:AUTOIP,3:APIPA\r
+ */\r
+ NyLPC_TUInt32 ipv4_flags;\r
+ /** IPV4アドレス*/\r
NyLPC_TUInt32 ipv4_addr_net;\r
NyLPC_TUInt32 ipv4_mask_net;\r
NyLPC_TUInt32 ipv4_drut_net;\r
- NyLPC_TUInt32 ipv4_port;\r
- NyLPC_TUInt32 accessmode;\r
+\r
+ /*\r
+ * Service setting\r
+ */\r
+\r
+ /**\r
+ * Service flags\r
+ * 0:mdns ON/OFF\r
+ */\r
+ NyLPC_TUInt32 srv_flags;\r
+ /** HTTPポート番号*/\r
+ NyLPC_TUInt16 http_port;\r
+ NyLPC_TUInt16 padding;\r
+\r
};\r
\r
/**\r
* この関数は、RTOSが停止中に実行すること。\r
* この関数は384バイト程度のスタックが必要です。\r
*/\r
-NyLPC_TBool NyLPC_cMiMicConfiglation_updateConfigulation(const struct NyLPC_TMimicConfigulation* i_congfiglation);\r
+NyLPC_TBool NyLPC_cMiMicConfiglation_updateConfigulation(const struct NyLPC_TMiMicConfigulation* i_congfiglation);\r
/**\r
* コンフィギュレーション値を返す。\r
* この関数は、RTOSが停止中に実行すること。\r
*/\r
-const struct NyLPC_TMimicConfigulation* NyLPC_cMiMicConfiglation_loadFromFlash(void);\r
-const struct NyLPC_TMimicConfigulation* NyLPC_cMiMicConfiglation_loadFactoryDefault(void);\r
+const struct NyLPC_TMiMicConfigulation* NyLPC_cMiMicConfiglation_loadFromFlash(void);\r
+const struct NyLPC_TMiMicConfigulation* NyLPC_cMiMicConfiglation_loadFactoryDefault(void);\r
\r
#ifdef __cplusplus\r
}\r
\r
\r
#include <stdlib.h>\r
+#include "NyLPC_utils.h"\r
#include "NyLPC_cHttpBodyWriter.h"\r
\r
\r
\r
\r
\r
-static NyLPC_TBool print(void* i_inst,const char* i_fmt,va_list args);\r
+/**\r
+ * PrintHandler\r
+ */\r
+static NyLPC_TBool printHandler(void* i_inst,const void* i_buf,NyLPC_TUInt32 i_len)\r
+{\r
+ //エラー状態ならFALSE\r
+ if(((NyLPC_TcHttpBodyWriter_t*)i_inst)->_is_error){\r
+ return NyLPC_TBool_FALSE;\r
+ }\r
+ ((NyLPC_TcHttpBodyWriter_t*)i_inst)->_size_of_sent+=i_len;\r
+ if(!NyLPC_iHttpPtrStream_write(((NyLPC_TcHttpBodyWriter_t*)i_inst)->_ref_stream,i_buf,i_len)){\r
+ ((NyLPC_TcHttpBodyWriter_t*)i_inst)->_is_error=NyLPC_TUInt8_TRUE;\r
+ return NyLPC_TBool_FALSE;\r
+ }\r
+ return NyLPC_TBool_TRUE;\r
+}\r
+\r
\r
\r
void NyLPC_cHttpBodyWriter_initialize(NyLPC_TcHttpBodyWriter_t* i_inst,NyLPC_TcHttpStream_t* i_stream)\r
*/\r
NyLPC_TBool NyLPC_cHttpBodyWriter_write(NyLPC_TcHttpBodyWriter_t* i_inst,const void* i_buf,NyLPC_TUInt32 i_len)\r
{\r
- //エラー状態ならFALSE\r
- if(i_inst->_is_error){\r
- return NyLPC_TBool_FALSE;\r
- }\r
- i_inst->_size_of_sent+=i_len;\r
- if(!NyLPC_iHttpPtrStream_write(i_inst->_ref_stream,i_buf,i_len)){\r
- i_inst->_is_error=NyLPC_TUInt8_TRUE;\r
- return NyLPC_TBool_FALSE;\r
- }\r
- return NyLPC_TBool_TRUE;\r
+ return printHandler(i_inst,i_buf,i_len);\r
}\r
+\r
/**\r
* HttpBodyの書き込みを完了します。\r
* @return\r
return NyLPC_TBool_FALSE;\r
}\r
va_start(a,i_fmt);\r
- ret=print(i_inst,i_fmt,a);\r
+ ret= NyLPC_cFormatWriter_print(printHandler,i_inst,i_fmt,a);\r
va_end(a);\r
return ret;\r
}\r
if(i_inst->_is_error){\r
return NyLPC_TBool_FALSE;\r
}\r
- ret=print(i_inst,i_fmt,i_args);\r
+ ret=NyLPC_cFormatWriter_print(printHandler,i_inst,i_fmt,i_args);\r
return ret;\r
}\r
\r
-#define NUM_OF_WORK 16\r
-\r
-static NyLPC_TBool print(void* i_inst,const char* i_fmt,va_list args)\r
-{\r
- const char* rp=i_fmt;\r
- const char* sp;\r
- char wk[NUM_OF_WORK];\r
- NyLPC_TUInt32 ut;\r
- int ol=0;\r
- while(*rp!='\0'){\r
- if(*rp=='%'){\r
- rp++;\r
- switch (*rp){\r
- case 's':\r
- sp=va_arg(args,const char*);\r
- while(*sp!=0){\r
- wk[ol]=*sp;\r
- ol++;\r
- sp++;\r
- //バッファフルなら書込み。\r
- if(ol>=NUM_OF_WORK){\r
- NyLPC_cHttpBodyWriter_write((NyLPC_TcHttpBodyWriter_t*)i_inst,wk,NUM_OF_WORK);\r
- ol=0;\r
- }\r
- }\r
- rp++;\r
- continue;\r
- case 'c':\r
- wk[ol]=(char)va_arg(args,int);\r
- rp++;\r
- ol++;\r
- break;\r
- case 'd':\r
- //ワークを空にする。\r
- if(ol>0){\r
- NyLPC_cHttpBodyWriter_write((NyLPC_TcHttpBodyWriter_t*)i_inst,wk,ol);\r
- ol=0;\r
- }\r
- NyLPC_itoa((va_arg(args,int)),wk,10);\r
- //強制コミット\r
- NyLPC_cHttpBodyWriter_write((NyLPC_TcHttpBodyWriter_t*)i_inst,wk,strlen(wk));\r
- rp++;\r
- continue;\r
- case 'u':\r
- //ワークを空にする。\r
- if(ol>0){\r
- NyLPC_cHttpBodyWriter_write((NyLPC_TcHttpBodyWriter_t*)i_inst,wk,ol);\r
- }\r
- ut=va_arg(args,NyLPC_TUInt32);\r
- ol=15;\r
- wk[ol--]='\0';\r
- do{\r
- wk[ol--]='0'+(ut%10);\r
- ut/=10;\r
- }while(ut>0);\r
- NyLPC_cHttpBodyWriter_write((NyLPC_TcHttpBodyWriter_t*)i_inst,(wk+ol+1),14-ol);\r
- ol=0;\r
- rp++;\r
- continue;\r
- case 'x':\r
- //ワークを空にする。\r
- if(ol>0){\r
- NyLPC_cHttpBodyWriter_write((NyLPC_TcHttpBodyWriter_t*)i_inst,wk,ol);\r
- ol=0;\r
- }\r
- NyLPC_uitoa((va_arg(args,unsigned int)),wk,16);\r
- //強制コミット\r
- NyLPC_cHttpBodyWriter_write((NyLPC_TcHttpBodyWriter_t*)i_inst,wk,strlen(wk));\r
- rp++;\r
- continue;\r
-// case 'X':\r
- case '%':\r
- wk[ol]='%';\r
- ol++;\r
- rp++;\r
- break;\r
- case '\0':\r
- //オワタ(ループ抜けるためにrpはそのまま。)\r
- break;\r
- default:\r
- wk[ol]=*rp;\r
- ol++;\r
- }\r
- //バッファフルなら書込み。\r
- if(ol>=NUM_OF_WORK){\r
- NyLPC_cHttpBodyWriter_write((NyLPC_TcHttpBodyWriter_t*)i_inst,wk,NUM_OF_WORK);\r
- ol=0;\r
- }\r
- }else if(*rp==0){\r
- //オワタ\r
- break;\r
- }else{\r
- wk[ol]=*rp;\r
- ol++;\r
- rp++;\r
- if(ol>=NUM_OF_WORK){\r
- NyLPC_cHttpBodyWriter_write((NyLPC_TcHttpBodyWriter_t*)i_inst,wk,NUM_OF_WORK);\r
- ol=0;\r
- }\r
- }\r
- }\r
- //どこかでエラーが起こってればFALSE返す。\r
- return NyLPC_cHttpBodyWriter_write((NyLPC_TcHttpBodyWriter_t*)i_inst,wk,ol);\r
-}\r
-\r
-\r
-\r
/**\r
* テスト用のコード。\r
*/\r
\r
#include "../utils/NyLPC_cRomFileSet.h"\r
#include "../utils/NyLPC_cFormatTextReader.h"\r
+#include "../utils/NyLPC_cFormatWriter.h"\r
#ifdef __cplusplus\r
extern "C" {\r
#endif /* __cplusplus */\r
\r
void NyLPC_cNet_start(NyLPC_TcNet_t* i_inst,const NyLPC_TcNetConfig_t* i_ref_config)\r
{\r
- NyLPC_cUipService_start(&(i_ref_config->interface_setting.ethernet));\r
+ NyLPC_cUipService_start(&(i_ref_config->super));\r
//プラットフォーム名を推測(デバイス名の初めの1文字だけ見る。)\r
switch(*(NyLPC_cUipService_refDeviceName())){\r
case 'L':\r
* ネットワークスタックを停止します。\r
* サービスは開始中でなければなりません。\r
* start関数で開始済である必要があります。\r
+ * この関数をコールする前に、全てのTCPソケットを閉じ、非同期なソケット操作を停止してください。\r
*/\r
void NyLPC_cNet_stop(NyLPC_TcNet_t* i_inst);\r
\r
#include "../flash/NyLPC_cMiMicConfiglation.h"\r
\r
\r
-static void update(NyLPC_TcNetConfig_t* i_inst,const struct NyLPC_TMimicConfigulation* pdata);\r
+static void update(NyLPC_TcNetConfig_t* i_inst,const struct NyLPC_TMiMicConfigulation* pdata);\r
\r
\r
void NyLPC_cNetConfig_initialize(NyLPC_TcNetConfig_t* i_inst,NyLPC_TBool i_is_factory_default)\r
*/\r
//#define ETHERNET_FRAME_LEN 1480\r
#define ETHERNET_FRAME_LEN 1400\r
-static void update(NyLPC_TcNetConfig_t* i_inst,const struct NyLPC_TMimicConfigulation* pdata)\r
+static void update(NyLPC_TcNetConfig_t* i_inst,const struct NyLPC_TMiMicConfigulation* pdata)\r
{\r
struct NyLPC_TEthAddr ea;\r
struct NyLPC_TIPv4Addr ip,mask,drt;\r
ip.v=NyLPC_htonl(pdata->ipv4_addr_net);\r
mask.v=NyLPC_htonl(pdata->ipv4_mask_net);\r
drt.v=NyLPC_htonl(pdata->ipv4_drut_net);\r
- i_inst->version=1;\r
- i_inst->interface_type=NyLPC_cNetConfig_INTERFACE_TYPE_ETHERNET;\r
- NyLPC_cIPv4Config_initialzeForEthernet(&i_inst->interface_setting.ethernet,&ea,ETHERNET_FRAME_LEN);\r
- NyLPC_cIPv4Config_setDefaultRoute(&i_inst->interface_setting.ethernet,&drt);\r
- NyLPC_cIPv4Config_setIp(&i_inst->interface_setting.ethernet,&ip,&mask);\r
+ strcpy(i_inst->hostname,"MiMic");\r
+ NyLPC_cIPv4Config_initialzeForEthernet(&i_inst->super,&ea,ETHERNET_FRAME_LEN);\r
+ NyLPC_cIPv4Config_setDefaultRoute(&i_inst->super,&drt);\r
+ NyLPC_cIPv4Config_setIp(&i_inst->super,&ip,&mask);\r
+ i_inst->services.flags=pdata->srv_flags;\r
+ i_inst->services.http_port=pdata->http_port;\r
+ i_inst->tcp_mode=pdata->ipv4_flags;\r
return;\r
}\r
\r
#ifdef __cplusplus\r
extern "C" {\r
#endif /* __cplusplus */\r
-#define NyLPC_cNetConfig_INTERFACE_TYPE_ETHERNET 1\r
\r
+#define NyLPC_TcNetConfig_HOSTNAME_LEN 32\r
/**\r
* クラス型を定義します。\r
* NyLPC_cNetConfigクラスは、NyLPC_NetConfigの初期化データを保持します。\r
\r
\r
/**\r
- * NyLPC_TcFifoBufferクラスの構造体です。\r
+ * NyLPC_TcIPv4Configクラスの継承クラスです。\r
+ * IPv4設定にネットワーク設定項目を加えます。\r
+ * 加えられる項目は全て[RECOMMEND]パラメータです。\r
*/\r
struct NyLPC_TcNetConfig\r
{\r
- /** Must be 1*/\r
- NyLPC_TUInt16 version;\r
- /** インタフェイスタイプ*/\r
- NyLPC_TUInt16 interface_type;\r
+ NyLPC_TcIPv4Config_t super;\r
+ /**\r
+ * ホスト名\r
+ */\r
+ NyLPC_TChar hostname[NyLPC_TcNetConfig_HOSTNAME_LEN];\r
+ /**\r
+ * tcp初期設定モードのフラグ値\r
+ * NyLPC_TcNetConfig_IPV4_FLAG_Xの組み合わせ\r
+ */\r
+ NyLPC_TUInt32 tcp_mode;\r
+ struct{\r
+ /**\r
+ * サービスのフラグセット。\r
+ * NyLPC_TcNetConfig_SERVICE_FLAG_xの組み合わせ\r
+ * bit 01:IP初期設定のモード. 0:Manual指定,1:DHCP指定,2:AutoIP指定,3:APIPA指定\r
+ */\r
+ NyLPC_TUInt32 flags;\r
+ NyLPC_TUInt16 http_port;\r
+ NyLPC_TUInt16 padding;\r
+ }services;\r
+\r
/** インタフェイス層の設定*/\r
- union{\r
- /** Ethernet mac address */\r
- NyLPC_TcIPv4Config_t ethernet;\r
-//\r
-// struct{\r
-// struct NyLPC_TEthAddr mac_addr;\r
-// }ethernet2;\r
- }interface_setting;\r
};\r
+#define NyLPC_TcNetConfig_IPV4_FLAG_MODE_MASK 3\r
+#define NyLPC_TcNetConfig_IPV4_FLAG_MODE_MANUAL 0\r
+#define NyLPC_TcNetConfig_IPV4_FLAG_MODE_DHCP 1\r
+#define NyLPC_TcNetConfig_IPV4_FLAG_MODE_AUTOIP 2\r
+#define NyLPC_TcNetConfig_IPV4_FLAG_MODE_APIPA (NyLPC_TcNetConfig_IPV4_FLAG_MODE_DHCP|NyLPC_TcNetConfig_IPV4_FLAG_MODE_AUTOIP)\r
+\r
+#define NyLPC_TcNetConfig_SERVICE_FLAG_MDNS 1\r
\r
/**\r
* フラッシュメモリから設定値を読み出して、インスタンスを初期化します。\r
#endif\r
\r
/** Httpdセッションスレッドのスタックサイズ*/\r
-#define NyLPC_TcHttpdThread_SIZE_OF_THREAD_STACK 1024\r
+#define NyLPC_TcHttpdThread_SIZE_OF_THREAD_STACK 1024+128\r
\r
typedef struct NyLPC_TcHttpdThread NyLPC_TcHttpdThread_t;\r
/**\r
#include "NyLPC_flash.h"\r
#include "../NyLPC_cHttpdConnection_protected.h"\r
#include "../../NyLPC_cNet.h"\r
+#include <ctype.h>\r
\r
-#define MOD_VERSION "ModMiMicSetting/1.2"\r
-#define SIZE_OF_SETUP_PARAM 7\r
+#define MOD_VERSION "ModMiMicSetting/1.3"\r
+#define SIZE_OF_SETUP_PARAM 8\r
struct TModMiMicSettingRequest\r
{\r
struct NyLPC_THttpBasicHeader super;\r
NyLPC_TcMiMicDbCompiler_t _binparser;\r
union{\r
struct{\r
- /**pパラメータ。最大長さは16。長さ6であること。\r
- * [0]:MACAddrの、[0][1][2][3]\r
- * [1]:MACAddrの、[4][5][X][X]\r
- * [2]:IPAddr(Networkorder)\r
- * [3]:Subnetmask(Networkorder)\r
- * [4]:Defaultgateway\r
- * [5]:[0:port0][1:port1][X][X]\r
- * [6]:accessmode [0:AC1][1:AC2][X][X]\r
+ /**pパラメータ。最大長さは16。\r
+ * 詳細はNyLPC_TcModMiMicSetting_tを参照\r
*/\r
NyLPC_TUInt32 param_buf[SIZE_OF_SETUP_PARAM];\r
+ NyLPC_TChar host_name[NyLPC_TcNetConfig_HOSTNAME_LEN];\r
NyLPC_TUInt16 param_len;\r
+ NyLPC_TUInt16 host_len;\r
NyLPC_TUInt32 cval;//コマンド値\r
}setup;\r
struct{\r
#define ST_PARSE_QUERY_VALUE 3 //Query読み出し中\r
#define ST_PARSE_QUERY_VALUE_P 4\r
#define ST_PARSE_QUERY_VALUE_C 5\r
+#define ST_PARSE_QUERY_VALUE_HOST 6\r
/**\r
* コンテンツID定義(コンテンツ名に対応)\r
*/\r
\r
#define QNAME_ID_P 4\r
#define QNAME_ID_C 5\r
+#define QNAME_ID_HOST 6\r
#define QNAME_ID_UNKNOWN 0\r
\r
#define QVAL_C_GET 1\r
{\r
{"p",QNAME_ID_P},\r
{"c",QNAME_ID_C},\r
+ {"host",QNAME_ID_HOST},\r
{NULL,QNAME_ID_UNKNOWN}\r
};\r
\r
switch(out->_content_id)\r
{\r
case CONTENT_ID_SETUP:\r
- out->content.setup.param_len=0;\r
+ out->content.setup.param_len=0;//クエリが無い場合の初期値\r
+ out->content.setup.host_len =0;//クエリが無い場合の初期値\r
out->content.setup.cval=QVAL_C_UNKNOWN;\r
break;\r
default:\r
case QNAME_ID_C:\r
out->_astate=ST_PARSE_QUERY_VALUE_C;\r
break;\r
+ case QNAME_ID_HOST:\r
+ out->_astate=ST_PARSE_QUERY_VALUE_HOST;//_host_nameに蓄積\r
+ out->content.setup.host_len=0;\r
+ break;\r
default:\r
out->_astate=ST_PARSE_QUERY_VALUE;\r
break;\r
//クエリ値解析完了\r
out->_astate=ST_PARSE_QUERY_NAME;\r
return NyLPC_TBool_TRUE;\r
+ case ST_PARSE_QUERY_VALUE_HOST:\r
+ //未知のクエリは無視\r
+ if(i_c!='\0' && i_c!='&'){\r
+ //許可する文字列は、[:AlNum:]||'_'\r
+ if(!isalnum(i_c) && i_c!='_'){\r
+ NyLPC_OnErrorGoto(ERROR);\r
+ }\r
+ out->content.setup.host_name[out->content.setup.host_len++]=i_c;\r
+ if(out->content.setup.host_len>=NyLPC_TcNetConfig_HOSTNAME_LEN){\r
+ //長すぎ\r
+ NyLPC_OnErrorGoto(ERROR);\r
+ }\r
+ return NyLPC_TBool_TRUE;\r
+ }\r
+ //クエリ値解析完了\r
+ out->content.setup.host_name[out->content.setup.host_len]='\0';\r
+ out->_astate=ST_PARSE_QUERY_NAME;\r
+ return NyLPC_TBool_TRUE;\r
case ST_PARSE_QUERY_VALUE_C:\r
if(i_c!='\0' && i_c!='&'){\r
if(!NyLPC_cStr_put(&(out->_tstr),i_c)){\r
static void setup_proc(NyLPC_TcHttpdConnection_t* i_connection,struct TModMiMicSettingRequest* i_req)\r
{\r
NyLPC_TBool ret;\r
- const struct NyLPC_TMimicConfigulation* config;\r
- struct NyLPC_TMimicConfigulation cfg_image;\r
- const NyLPC_TcIPv4Config_t* currebt_cfg;\r
+ const struct NyLPC_TMiMicConfigulation* config;\r
+ struct NyLPC_TMiMicConfigulation cfg_image;\r
+ const NyLPC_TcNetConfig_t* currebt_cfg;\r
NyLPC_Assert(\r
(NyLPC_cHttpdConnection_getMethod(i_connection)==NyLPC_THttpMethodType_GET)||\r
(NyLPC_cHttpdConnection_getMethod(i_connection)==NyLPC_THttpMethodType_HEAD));\r
}\r
if(NyLPC_cHttpdConnection_getMethod(i_connection)==NyLPC_THttpMethodType_GET){\r
config=NyLPC_cMiMicConfiglation_loadFromFlash();\r
- //JSONを書く。\r
+ //Flashの内容から\r
if(!NyLPC_cHttpdConnection_sendResponseBodyF(i_connection,\r
"{"\r
"\"application\":\""MOD_VERSION";"NyLPC_cMiMicEnv_VERSION";%s\","\r
+ "\"landev\":\"%s\",",\r
+ NyLPC_cNet_PlatformName,\r
+ NyLPC_cUipService_refDeviceName()\r
+ ))\r
+ {\r
+ NyLPC_OnErrorGoto(Error);\r
+ }\r
+ if(!NyLPC_cHttpdConnection_sendResponseBodyF(i_connection,\r
+ "\"cfg\":{"\r
"\"mac00010203\":%u,"\r
"\"mac0405xxxx\":%u,"\r
- "\"ip\":%u,"\r
- "\"mask\":%u,"\r
- "\"droute\":%u,"\r
- "\"port\":%u,"\r
- "\"access\":%u,",\r
- NyLPC_cNet_PlatformName,\r
+ "\"host\":\"%s\","\r
+ "\"ipv4\":{"\r
+ "\"flags\":%u,"\r
+ "\"ip\":%u,"\r
+ "\"mask\":%u,"\r
+ "\"droute\":%u,"\r
+ "},"\r
+ "\"services\":{"\r
+ "\"flags\":%u,"\r
+ "\"http_port\":%u"\r
+ "}},",\r
config->mac_00_01_02_03,\r
config->mac_04_05_xx_xx,\r
+ config->hostname,\r
+ config->ipv4_flags,\r
config->ipv4_addr_net,\r
config->ipv4_mask_net,\r
config->ipv4_drut_net,\r
- config->ipv4_port,\r
- config->accessmode\r
+ config->srv_flags,\r
+ config->http_port\r
)){\r
NyLPC_OnErrorGoto(Error);\r
}\r
//write current status\r
- currebt_cfg=NyLPC_cUipService_refCurrentConfig();\r
+ currebt_cfg=(const NyLPC_TcNetConfig_t*)NyLPC_cUipService_refCurrentConfig();\r
if(!NyLPC_cHttpdConnection_sendResponseBodyF(i_connection,\r
- "\"info\":{"\r
- "\"landev\":\"%s\","\r
- "\"mac00010203\":%u,"\r
- "\"mac0405xxxx\":%u,"\r
+ "\"cur\":{"\r
+ "\"mac00010203\":%u,"\r
+ "\"mac0405xxxx\":%u,"\r
+ "\"host\":\"%s\","\r
+ "\"ipv4\":{"\r
+ "\"flags\":%u,"\r
"\"ip\":%u,"\r
"\"mask\":%u,"\r
- "\"droute\":%u"\r
- "}}",\r
- NyLPC_cUipService_refDeviceName(),\r
- (currebt_cfg->eth_mac.addr[0]<<24)|(currebt_cfg->eth_mac.addr[1]<<16)|(currebt_cfg->eth_mac.addr[2]<<8)|currebt_cfg->eth_mac.addr[3],\r
- (currebt_cfg->eth_mac.addr[4]<<24)|(currebt_cfg->eth_mac.addr[5]<<16),\r
- NyLPC_ntohl(currebt_cfg->ip_addr.v),\r
- NyLPC_ntohl(currebt_cfg->netmask.v),\r
- NyLPC_ntohl(currebt_cfg->dr_addr.v)\r
+ "\"droute\":%u,"\r
+ "},"\r
+ "\"services\":{"\r
+ "\"flags\":%u,"\r
+ "\"http_port\":%u"\r
+ "}}}",\r
+ (currebt_cfg->super.eth_mac.addr[0]<<24)|(currebt_cfg->super.eth_mac.addr[1]<<16)|(currebt_cfg->super.eth_mac.addr[2]<<8)|currebt_cfg->super.eth_mac.addr[3],\r
+ (currebt_cfg->super.eth_mac.addr[4]<<24)|(currebt_cfg->super.eth_mac.addr[5]<<16),\r
+ currebt_cfg->hostname,\r
+ currebt_cfg->tcp_mode,\r
+ NyLPC_ntohl(currebt_cfg->super.ip_addr.v),\r
+ NyLPC_ntohl(currebt_cfg->super.netmask.v),\r
+ NyLPC_ntohl(currebt_cfg->super.dr_addr.v),\r
+ currebt_cfg->services.flags,\r
+ currebt_cfg->services.http_port\r
)){\r
NyLPC_OnErrorGoto(Error);\r
}\r
break;\r
case QVAL_C_UPDATE:\r
//check parameter length\r
- if(i_req->content.setup.param_len!=SIZE_OF_SETUP_PARAM)\r
+ if(i_req->content.setup.param_len!=SIZE_OF_SETUP_PARAM || i_req->content.setup.host_len<1)\r
{\r
NyLPC_cHttpdUtils_sendErrorResponse(i_connection,500);\r
}else{\r
cfg_image.fast_boot=0xffffffff;\r
cfg_image.mac_00_01_02_03=(i_req->content.setup.param_buf[0]);\r
cfg_image.mac_04_05_xx_xx=(i_req->content.setup.param_buf[1]&0xffff0000);\r
- cfg_image.ipv4_addr_net =i_req->content.setup.param_buf[2];\r
- cfg_image.ipv4_mask_net =i_req->content.setup.param_buf[3];\r
- cfg_image.ipv4_drut_net =i_req->content.setup.param_buf[4];\r
- cfg_image.ipv4_port =(NyLPC_TUInt16)(i_req->content.setup.param_buf[5]>>16);\r
- cfg_image.accessmode=(i_req->content.setup.param_buf[6]);\r
+ cfg_image.ipv4_flags =i_req->content.setup.param_buf[2];\r
+ cfg_image.ipv4_addr_net =i_req->content.setup.param_buf[3];\r
+ cfg_image.ipv4_mask_net =i_req->content.setup.param_buf[4];\r
+ cfg_image.ipv4_drut_net =i_req->content.setup.param_buf[5];\r
+ cfg_image.srv_flags =i_req->content.setup.param_buf[6];\r
+ cfg_image.http_port =(NyLPC_TUInt16)(i_req->content.setup.param_buf[7]>>16);\r
+ strcpy(cfg_image.hostname,i_req->content.setup.host_name);\r
//一応確認。\r
- if((cfg_image.ipv4_port==0)|| (cfg_image.accessmode & 0xFEFE0000)!=0x00000000){\r
+ if(cfg_image.http_port==0){\r
NyLPC_cHttpdUtils_sendErrorResponse(i_connection,500);\r
}else{\r
//FreeRTOSの停止\r
\r
/**\r
* MiMicの動作設定CGIです。MiMicの設定値をオンチップフラッシュへ保存/読み出しします。\r
+ * uipServiceはNyLPC_TcNetConfig_tを継承したインスタンスで初期化してください。\r
*\r
* JSONAPIとして、以下のAPIを提供します。\r
* ./setup.api?c=[update|get]&p=[:param:]\r
* mac0405xxxx: [:HEX32:],\r
* ip: [:HEX32:],\r
* mask: [:HEX32:],\r
- * droute: [:HEX32:]\r
- * port: [:HEX16:]\r
- * access\":%u}",\r
- * c=update pパラメタの内容でFlashをアップデートする。\r
- * [:param:]=[:emac:][:hostaddr:][:subnetmask:][:defaultroot:][:port:]\r
- * ROMパラメータ。固定長のHEX文字列である。\r
- * [:emac:]=[[:HEX32:]{2}}\r
- * ビックエンディアン48bit値+パディング16bit\r
- * [:hostaddr:]=[:HEX32:]\r
- * IPアドレス。32bit値。ビックエンディアン\r
- * [:subnetmask:]=[:HEX32:]\r
- * サブネットマスク。32bit値。ビックエンディアン\r
- * [:defaultroot:]=[:HEX32:]\r
- * defaultrootアドレス。32bit値。ビックエンディアン\r
- * [:port:]=[:HEX32:]\r
- * ポート番号。2桁のHEX値である。ビックエンディアン。値16bit、パディング16bit\r
+ * droute: [:HEX32:],\r
*\r
+ * port: [:HEX16:],\r
+ * access\":%u}",\r
+ * c=update pパラメタ/hostの内容でFlashをアップデートする。\r
+ * pパラメタは32bitの16進数文字列。\r
+ * [ 0] emac_0123 ビックエンディアン48bit値+パディング16bit\r
+ * [ 1] emac_45xx :\r
+ * [emac4][emac5][x][x]\r
+ * [ 2] ipv4_flags IPV4設定フラグ\r
+ * [ 3] ipv4_ip IPアドレス。32bit値。ビックエンディアン\r
+ * [ 4] ipv4_mask サブネットマスク。32bit値。ビックエンディアン\r
+ * [ 5] ipv4_deoute defaultrootアドレス。32bit値。ビックエンディアン\r
+ * [ 6] service_flag\r
+ * [ 7] http_param HTTPサービスポート番号。2桁のHEX値である。ビックエンディアン。値16bit、パディング16bit\r
+ * [port_h][port_l][x][x]\r
*/\r
typedef struct NyLPC_TcModMiMicSetting NyLPC_TcModMiMicSetting_t;\r
\r
\r
NyLPC_TBool NyLPC_cMutex_unlock(NyLPC_TcMutex_t* i_inst);\r
\r
+#define NyLPC_cMutex_isLocked(i_inst) ((i_inst)->_lock_count>0)\r
#define NyLPC_cMutex_finalize(i_inst)\r
\r
#ifdef __cplusplus\r
}\r
\r
/**\r
- * テーブルにある有効なソケットのperiodicをすべて呼び出します。\r
+ * テーブルにある有効なソケットのstartを全て呼び出します。\r
*/\r
-static void cSocketTbl_callUpdateConfiguration(\r
+static void cSocketTbl_callSocketStart(\r
NyLPC_TcPtrTbl_t* i_inst,\r
const NyLPC_TcIPv4Config_t* i_cfg)\r
{\r
}\r
switch(p[i]->_typeid){\r
case NyLPC_TcBaseSocket_TYPEID_UDP_SOCK:\r
- NyLPC_cUdpSocket_updateConfigulation((NyLPC_TcUdpSocket_t*)(p[i]),i_cfg);\r
+ NyLPC_cUdpSocket_startService((NyLPC_TcUdpSocket_t*)(p[i]),i_cfg);\r
+ break;\r
+ case NyLPC_TcBaseSocket_TYPEID_TCP_SOCK:\r
+ NyLPC_cTcpSocket_startService((NyLPC_TcTcpSocket_t*)(p[i]),i_cfg);\r
+ break;\r
+ default:\r
+ continue;\r
+ }\r
+ }\r
+}\r
+/**\r
+ * テーブルにある有効なソケットのstartを全て呼び出します。\r
+ */\r
+static void cSocketTbl_callSocketStop(\r
+ NyLPC_TcPtrTbl_t* i_inst)\r
+{\r
+ NyLPC_TcBaseSocket_t** p=(NyLPC_TcBaseSocket_t**)(i_inst->buf);\r
+ int i;\r
+ for(i=i_inst->size-1;i>=0;i--){\r
+ if(p[i]==NULL){\r
+ continue;\r
+ }\r
+ switch(p[i]->_typeid){\r
+ case NyLPC_TcBaseSocket_TYPEID_UDP_SOCK:\r
+ NyLPC_cUdpSocket_stopService((NyLPC_TcUdpSocket_t*)(p[i]));\r
break;\r
case NyLPC_TcBaseSocket_TYPEID_TCP_SOCK:\r
- NyLPC_cTcpSocket_updateConfigulation((NyLPC_TcTcpSocket_t*)(p[i]),i_cfg);\r
+ NyLPC_cTcpSocket_stopService((NyLPC_TcTcpSocket_t*)(p[i]));\r
break;\r
default:\r
continue;\r
}\r
}\r
}\r
+\r
/****************************************************\r
* NyLPC_cIPv4\r
***************************************************/\r
cSocketTbl_initialize(&(i_inst->_socket_tbl),(void**)(i_inst->_socket_array_buf));\r
//instanceの初期化\r
NyLPC_cMutex_initialize(&(i_inst->_sock_mutex));\r
+ NyLPC_cMutex_initialize(&(i_inst->_listener_mutex));\r
i_inst->_ref_config=NULL;\r
return;\r
}\r
{\r
cSocketTbl_finalize(&(i_inst->_socket_tbl));\r
NyLPC_cMutex_finalize(&(i_inst->_sock_mutex));\r
+ NyLPC_cMutex_finalize(&(i_inst->_listener_mutex));\r
return;\r
}\r
\r
//リストの初期化、ここでするべき?しないべき?\r
i_inst->_ref_config=i_ref_configlation;\r
//configulationのアップデートを登録されてるソケットに通知\r
- cSocketTbl_callUpdateConfiguration(&(i_inst->_socket_tbl),i_ref_configlation);\r
+ cSocketTbl_callSocketStart(&(i_inst->_socket_tbl),i_ref_configlation);\r
return;\r
}\r
\r
void NyLPC_cIPv4_stop(\r
NyLPC_TcIPv4_t* i_inst)\r
{\r
- //実行タイミングが未設計。当分は使わないこと。\r
- //新規ソケットの生成を打ち切って、すべてのソケットが停止するのを待つ?\r
+ cSocketTbl_callSocketStop(&(i_inst->_socket_tbl));\r
i_inst->_ref_config=NULL;\r
return;\r
}\r
const NyLPC_TcIPv4Config_t* _ref_config;\r
/** ソケットリソースの保護用。コールバック関数から呼び出されるソケット内部のリソース保護に使用する共通MUTEX*/\r
NyLPC_TcMutex_t _sock_mutex;\r
+ /** リスナリソースの保護用。コールバック関数から呼び出されるソケット内部のリソース保護に使用する共通MUTEX*/\r
+ NyLPC_TcMutex_t _listener_mutex;\r
/** NyLPC_cTcpSocketを管理するポインタリストです。*/\r
NyLPC_TcPtrTbl_t _socket_tbl;\r
/** _socket_tblが使用するメモリ領域です。*/\r
* このMutexはソケット同士の干渉が起こらない処理にだけ使ってください。\r
*/\r
#define NyLPC_cIPv4_getSockMutex(i_inst) (&((i_inst)->_sock_mutex))\r
-\r
+/**\r
+ * リスナーリソースとコールバックの排他処理に使う共通MUTEXを返します。\r
+ */\r
+#define NyLPC_cIPv4_getListenerMutex(i_inst) (&((i_inst)->_listener_mutex))\r
\r
#ifdef __cplusplus\r
}\r
#include "NyLPC_stdlib.h"\r
\r
\r
-#define lockResource(i_inst) NyLPC_cMutex_lock(&((i_inst)->_mutex))\r
-#define unlockResource(i_inst) NyLPC_cMutex_unlock(&((i_inst)->_mutex))\r
+#define lockResource(i_inst) NyLPC_cMutex_lock(((i_inst)->_mutex))\r
+#define unlockResource(i_inst) NyLPC_cMutex_unlock(((i_inst)->_mutex))\r
\r
\r
/**\r
//uipサービスは初期化済であること。\r
NyLPC_Assert(NyLPC_TcUipService_isInitService());\r
//初期化\r
- NyLPC_cMutex_initialize(&(i_inst->_mutex));\r
+ // NyLPC_cMutex_initialize(&(i_inst->_mutex));\r
+ i_inst->_mutex=NyLPC_cIPv4_getListenerMutex(&srv->_tcpv4);// NyLPC_cMutex_initialize(&(i_inst->_mutex));\r
i_inst->_port=NyLPC_htons(i_port);\r
i_inst->_ref_sock=NULL;\r
//管理リストへ登録。\r
/** バインドするためのソケット*/\r
NyLPC_TcTcpSocket_t* _ref_sock;\r
/** タスク間の調停用Mutex\r
- * cTcpSocketのAPIをコールしている箇所があるので、そこをどうにかしないと共有化はムリ。\r
+ * Listener用の共通Mutexポインタ\r
*/\r
- NyLPC_TcMutex_t _mutex;\r
+ NyLPC_TcMutex_t* _mutex;\r
};\r
/**\r
* この関数は、TCPのリスナーを初期化します。\r
NyLPC_Assert(NyLPC_TcUipService_isInitService());\r
\r
NyLPC_cFifoBuffer_initialize(&(i_inst->rxbuf),i_rbuf,i_rbuf_len);\r
- // NyLPC_AbortIfNot(NyLPC_cMutex_initialize(&(i_inst->_smutex)));\r
- i_inst->_smutex=NyLPC_cIPv4_getSockMutex(&(srv->_tcpv4));\r
+ // NyLPC_AbortIfNot(NyLPC_cMutex_initialize(&(i_inst->_smutex)));//個別Mutex\r
+ i_inst->_smutex=NyLPC_cIPv4_getSockMutex(&(srv->_tcpv4));//共有Mutex\r
i_inst->tcpstateflags=UIP_CLOSED;\r
i_inst->txbuf.rp=i_inst->txbuf.wp=0;\r
for(i=0;i<NyLPC_TcTcpSocket_NUMBER_OF_TXQ;i++){\r
return;\r
}\r
\r
-/**\r
- * この関数は、NyLPC_cTcpListenerが呼び出すシステムAPIです。\r
- * uipコアタスクが実行します。\r
- * ソケットを、SYNパケットで初期化して、UIP_SYN_RECV状態にします。\r
- * @return\r
- * 遷移に成功すると、TRUEを返します。\r
- */\r
+\r
NyLPC_TBool NyLPC_cTcpSocket_setSynPayload(NyLPC_TcTcpSocket_t* i_inst,const NyLPC_TcIPv4Payload_t* i_ipp)\r
{\r
NyLPC_TUInt16 tmp16;\r
- //ソケットが無効であること。\r
+// NyLPC_Assert(NyLPC_cMutex_isLocked(i_inst->_smutex));\r
lockResource(i_inst);\r
+ //ソケットが無効であること。\r
if(i_inst->tcpstateflags==UIP_CLOSED)\r
{\r
//localipとdefault_mmsは別枠で設定\r
}\r
\r
/**\r
- * 定期的に実行する関数。最低でも1s単位で実行してください。\r
* uipサービスタスクが実行する関数です。\r
+ * 定期的に実行する関数。最低でも1s単位で実行してください。\r
*/\r
void NyLPC_cTcpSocket_periodic(\r
NyLPC_TcTcpSocket_t* i_inst)\r
NyLPC_cStopwatch_finalize(&sw);\r
return;\r
}\r
-\r
+/**\r
+ * uipサービスタスクが実行する関数です。\r
+ * サービスの開始を通知します。\r
+ */\r
+void NyLPC_cTcpSocket_startService(NyLPC_TcTcpSocket_t* i_inst,const NyLPC_TcIPv4Config_t* i_config)\r
+{\r
+ NyLPC_Assert(i_inst->tcpstateflags==UIP_CLOSED);//閉じてなければおかしい。\r
+ i_inst->uip_connr.lipaddr=&(i_config->ip_addr);\r
+ i_inst->uip_connr.default_mss=i_config->default_mss;\r
+ //NyLPC_cTcpSocket_setSynPayload関数でも実行するけど、IFのリセット時なのでここでもやる。\r
+ NyLPC_cFifoBuffer_clear(&(i_inst->rxbuf));\r
+ return;\r
+}\r
+/**\r
+ * uipサービスタスクが実行する関数です。\r
+ * サービスの停止を通知します。\r
+ */\r
+void NyLPC_cTcpSocket_stopService(NyLPC_TcTcpSocket_t* i_inst)\r
+{\r
+ lockResource(i_inst);\r
+ if(i_inst->tcpstateflags==UIP_CLOSED)\r
+ {\r
+ unlockResource(i_inst);\r
+ }else{\r
+ i_inst->tcpstateflags=UIP_CLOSED;\r
+ resetTxQWithUnlock(i_inst);\r
+ sendRst(i_inst);\r
+ }\r
+ return;\r
+}\r
\r
/**\r
* この関数は、rxパケットを処理して、ソケットの状態を更新します。\r
return NyLPC_TBool_FALSE;\r
}\r
\r
-void NyLPC_cTcpSocket_updateConfigulation(NyLPC_TcTcpSocket_t* i_inst,const NyLPC_TcIPv4Config_t* i_config)\r
-{\r
- i_inst->uip_connr.lipaddr=&(i_config->ip_addr);\r
- i_inst->uip_connr.default_mss=i_config->default_mss;\r
- return;\r
-}\r
+\r
\r
\r
\r
NyLPC_TcTcpSocket_t* i_inst);\r
\r
/**\r
- * ソケットをlisten済みにマークします。cTcpListenerからコールします。\r
+ * uipサービスタスクが実行する関数です。\r
+ * uipコアタスクが実行します。\r
+ * コール前に共有MUTEXにロックをかけてください。\r
+ * ソケットを、SYNパケットで初期化して、UIP_SYN_RECV状態にします。\r
+ * @return\r
+ * 遷移に成功すると、TRUEを返します。\r
*/\r
NyLPC_TBool NyLPC_cTcpSocket_setSynPayload(NyLPC_TcTcpSocket_t* i_inst,const NyLPC_TcIPv4Payload_t* i_ipp);\r
\r
-void NyLPC_cTcpSocket_updateConfigulation(\r
- NyLPC_TcTcpSocket_t* i_inst,\r
- const NyLPC_TcIPv4Config_t* i_config);\r
+/**\r
+ * uipサービスタスクが実行する関数です。\r
+ * サービスの開始を通知します。\r
+ * この関数は他のAPIが非同期に実行されないことが保証される状況で使用する必要があります。\r
+ */\r
+void NyLPC_cTcpSocket_startService(NyLPC_TcTcpSocket_t* i_inst,const NyLPC_TcIPv4Config_t* i_config);\r
+\r
+/**\r
+ * uipサービスタスクが実行する関数です。\r
+ * サービスの停止を通知します。\r
+ * この関数は他のAPIが非同期に実行されないことが保証される状況で使用する必要があります。\r
+ */\r
+void NyLPC_cTcpSocket_stopService(NyLPC_TcTcpSocket_t* i_inst);\r
+\r
\r
#ifdef __cplusplus\r
}\r
return i_len;\r
}\r
\r
-void NyLPC_cUdpSocket_updateConfigulation(NyLPC_TcUdpSocket_t* i_inst,const NyLPC_TcIPv4Config_t* i_config)\r
+void NyLPC_cUdpSocket_startService(NyLPC_TcUdpSocket_t* i_inst,const NyLPC_TcIPv4Config_t* i_config)\r
{\r
i_inst->uip_udp_conn.lipaddr=i_config->ip_addr;\r
+ //受信バッファのクリア\r
+ NyLPC_cFifoBuffer_clear(&(i_inst->rxbuf));\r
return;\r
}\r
\r
\r
+void NyLPC_cUdpSocket_stopService(NyLPC_TcUdpSocket_t* i_inst)\r
+{\r
+ //停止処理?\r
+}\r
\r
NyLPC_TBool NyLPC_cUdpSocket_parseRx(\r
NyLPC_TcUdpSocket_t* i_inst,\r
NyLPC_TcIPv4Payload_t* o_ipp);\r
+\r
/**\r
- * この関数は、ネットワークコンフィギュレーションのアップデートを通知します。\r
+ * uipサービスタスクが実行する関数です。\r
+ * サービスの開始を通知します。\r
+ * この関数は他のAPIが非同期に実行されないことが保証される状況で使用する必要があります。\r
*/\r
-void NyLPC_cUdpSocket_updateConfigulation(\r
- NyLPC_TcUdpSocket_t* i_inst,\r
- const NyLPC_TcIPv4Config_t* i_config);\r
+void NyLPC_cUdpSocket_startService(NyLPC_TcUdpSocket_t* i_inst,const NyLPC_TcIPv4Config_t* i_config);\r
\r
+/**\r
+ * uipサービスタスクが実行する関数です。\r
+ * サービスの停止を通知します。\r
+ * この関数は他のAPIが非同期に実行されないことが保証される状況で使用する必要があります。\r
+ */\r
+void NyLPC_cUdpSocket_stopService(NyLPC_TcUdpSocket_t* i_inst);\r
\r
\r
#ifdef __cplusplus\r
/**\r
* UIP処理を停止します。\r
* この関数はリエントラントではありません。複数のタスクから共有するときには、排他ロックを掛けてください。\r
+ * 関数を使用する前に、全ての非同期ソケット操作を停止してください。\r
*/\r
void NyLPC_cUipService_stop(void);\r
\r
<name>app.RemoteMCU</name>\r
<comment></comment>\r
<projects>\r
- <project>NyLPCLib</project>\r
- <project>FreeRTOSLib</project>\r
</projects>\r
<buildSpec>\r
<buildCommand>\r
{\r
{\r
"setup.html",\r
- 9074,\r
+ 9684,\r
"text/html",\r
- "\x3C\x68\x74\x6D\x6C\x3E\x0D\x0A\x3C\x68\x65\x61\x64\x3E\x0D\x0A\x3C\x6D\x65\x74\x61\x20\x68\x74\x74\x70\x2D\x65\x71\x75\x69\x76\x3D\x22\x43\x6F\x6E\x74\x65\x6E\x74\x2D\x54\x79\x70\x65\x22\x20\x63\x6F\x6E\x74\x65\x6E\x74\x3D\x22\x74\x65\x78\x74\x2F\x68\x74\x6D\x6C\x3B\x20\x63\x68\x61\x72\x73\x65\x74\x3D\x55\x54\x46\x2D\x38\x22\x3E\x0D\x0A\x3C\x6C\x69\x6E\x6B\x20\x68\x72\x65\x66\x3D\x22\x2E\x2F\x6D\x69\x6D\x69\x63\x2E\x63\x73\x73\x22\x20\x72\x65\x6C\x3D\x22\x73\x74\x79\x6C\x65\x73\x68\x65\x65\x74\x22\x20\x74\x79\x70\x65\x3D\x22\x74\x65\x78\x74\x2F\x63\x73\x73\x22\x3E\x0D\x0A\x3C\x73\x63\x72\x69\x70\x74\x20\x73\x72\x63\x3D\x22\x2E\x2F\x73\x6C\x69\x62\x2E\x6A\x73\x22\x3E\x3C\x2F\x73\x63\x72\x69\x70\x74\x3E\x0D\x0A\x0D\x0A\x3C\x73\x74\x79\x6C\x65\x20\x69\x64\x3D\x22\x75\x73\x65\x72\x2D\x73\x74\x79\x6C\x65\x2D\x6E\x79\x61\x74\x6C\x61\x2D\x62\x67\x2D\x69\x6D\x67\x22\x3E\x0D\x0A\x09\x62\x6F\x64\x79\x7B\x0D\x0A\x09\x09\x77\x69\x64\x74\x68\x3A\x39\x35\x25\x3B\x0D\x0A\x09\x09\x68\x65\x69\x67\x68\x74\x3A\x39\x35\x25\x3B\x0D\x0A\x09\x7D\x0D\x0A\x09\x2E\x74\x61\x62\x6C\x65\x2C\x70\x7B\x0D\x0A\x09\x09\x77\x69\x64\x74\x68\x3A\x34\x38\x30\x70\x78\x3B\x0D\x0A\x09\x7D\x0D\x0A\x09\x2E\x74\x61\x62\x6C\x65\x20\x74\x64\x0D\x0A\x09\x7B\x0D\x0A\x09\x09\x6D\x61\x72\x67\x69\x6E\x3A\x32\x70\x78\x20\x32\x70\x78\x20\x32\x70\x78\x20\x32\x70\x78\x3B\x0D\x0A\x09\x09\x70\x61\x64\x64\x69\x6E\x67\x3A\x32\x70\x78\x20\x32\x70\x78\x20\x32\x70\x78\x20\x32\x70\x78\x3B\x0D\x0A\x09\x7D\x0D\x0A\x09\x2E\x74\x65\x78\x74\x5F\x72\x6F\x77\x2C\x20\x2E\x69\x6E\x70\x75\x74\x5F\x72\x6F\x77\x7B\x0D\x0A\x09\x09\x68\x65\x69\x67\x68\x74\x3A\x32\x35\x70\x78\x3B\x0D\x0A\x09\x09\x62\x61\x63\x6B\x67\x72\x6F\x75\x6E\x64\x2D\x63\x6F\x6C\x6F\x72\x3A\x23\x34\x31\x36\x39\x45\x31\x3B\x0D\x0A\x09\x09\x63\x6F\x6C\x6F\x72\x3A\x77\x68\x69\x74\x65\x3B\x0D\x0A\x09\x09\x62\x6F\x72\x64\x65\x72\x3A\x73\x6F\x6C\x69\x64\x20\x31\x70\x78\x20\x23\x61\x61\x61\x61\x61\x61\x3B\x0D\x0A\x09\x09\x66\x6F\x6E\x74\x2D\x77\x65\x69\x67\x68\x74\x3A\x62\x6F\x6C\x64\x3B\x0D\x0A\x09\x7D\x0D\x0A\x09\x2E\x74\x64\x31\x7B\x0D\x0A\x09\x09\x66\x6F\x6E\x74\x2D\x77\x65\x69\x67\x68\x74\x3A\x62\x6F\x6C\x64\x3B\x0D\x0A\x09\x09\x66\x6F\x6E\x74\x2D\x73\x69\x7A\x65\x3A\x31\x34\x70\x78\x3B\x0D\x0A\x09\x09\x77\x69\x64\x74\x68\x3A\x31\x32\x30\x70\x78\x3B\x0D\x0A\x09\x7D\x0D\x0A\x09\x2E\x74\x64\x32\x7B\x0D\x0A\x09\x09\x66\x6F\x6E\x74\x2D\x77\x65\x69\x67\x68\x74\x3A\x6E\x6F\x72\x6D\x61\x6C\x3B\x0D\x0A\x09\x09\x66\x6F\x6E\x74\x2D\x73\x69\x7A\x65\x3A\x31\x32\x70\x78\x3B\x0D\x0A\x09\x7D\x0D\x0A\x09\x2E\x69\x6E\x70\x75\x74\x5F\x72\x6F\x77\x20\x69\x6E\x70\x75\x74\x7B\x0D\x0A\x09\x09\x77\x69\x64\x74\x68\x3A\x32\x30\x30\x70\x78\x3B\x0D\x0A\x09\x09\x62\x6F\x72\x64\x65\x72\x3A\x73\x6F\x6C\x69\x64\x20\x31\x70\x78\x20\x23\x61\x61\x61\x61\x61\x61\x3B\x0D\x0A\x09\x7D\x0D\x0A\x09\x62\x75\x74\x74\x6F\x6E\x7B\x0D\x0A\x09\x09\x66\x6F\x6E\x74\x2D\x77\x65\x69\x67\x68\x74\x3A\x62\x6F\x6C\x64\x3B\x0D\x0A\x09\x09\x74\x65\x78\x74\x2D\x61\x6C\x69\x67\x6E\x3A\x63\x65\x6E\x74\x65\x72\x3B\x0D\x0A\x09\x09\x66\x6F\x6E\x74\x2D\x73\x69\x7A\x65\x3A\x31\x32\x70\x78\x3B\x0D\x0A\x09\x09\x70\x61\x64\x64\x69\x6E\x67\x3A\x30\x70\x78\x3B\x0D\x0A\x09\x09\x77\x69\x64\x74\x68\x3A\x36\x30\x70\x78\x3B\x68\x65\x69\x67\x68\x74\x3A\x34\x30\x70\x78\x3B\x0D\x0A\x09\x7D\x0D\x0A\x09\x70\x7B\x0D\x0A\x09\x09\x66\x6F\x6E\x74\x2D\x73\x69\x7A\x65\x3A\x39\x70\x78\x3B\x0D\x0A\x09\x7D\x0D\x0A\x3C\x2F\x73\x74\x79\x6C\x65\x3E\x0D\x0A\x3C\x73\x63\x72\x69\x70\x74\x20\x74\x79\x70\x65\x3D\x22\x74\x65\x78\x74\x2F\x6A\x61\x76\x61\x73\x63\x72\x69\x70\x74\x22\x3E\x0D\x0A\x0D\x0A\x76\x61\x72\x20\x61\x70\x70\x3B\x0D\x0A\x66\x75\x6E\x63\x74\x69\x6F\x6E\x20\x67\x65\x74\x45\x6C\x65\x6D\x28\x69\x64\x29\x7B\x72\x65\x74\x75\x72\x6E\x20\x64\x6F\x63\x75\x6D\x65\x6E\x74\x2E\x67\x65\x74\x45\x6C\x65\x6D\x65\x6E\x74\x42\x79\x49\x64\x28\x69\x64\x29\x3B\x7D\x0D\x0A\x0D\x0A\x66\x75\x6E\x63\x74\x69\x6F\x6E\x20\x73\x74\x72\x32\x48\x65\x78\x41\x72\x72\x61\x79\x28\x69\x5F\x73\x74\x72\x2C\x64\x65\x6C\x69\x6D\x2C\x6C\x65\x6E\x2C\x64\x69\x67\x69\x74\x29\x0D\x0A\x7B\x0D\x0A\x09\x76\x61\x72\x20\x6C\x3D\x69\x5F\x73\x74\x72\x2E\x73\x70\x6C\x69\x74\x28\x64\x65\x6C\x69\x6D\x29\x3B\x0D\x0A\x09\x69\x66\x28\x6C\x2E\x6C\x65\x6E\x67\x74\x68\x3D\x3D\x6C\x65\x6E\x29\x7B\x0D\x0A\x09\x09\x76\x61\x72\x20\x72\x3D\x6E\x65\x77\x20\x41\x72\x72\x61\x79\x28\x29\x3B\x0D\x0A\x09\x09\x66\x6F\x72\x28\x76\x61\x72\x20\x69\x3D\x30\x3B\x69\x3C\x6C\x65\x6E\x3B\x69\x2B\x2B\x29\x7B\x0D\x0A\x09\x09\x09\x76\x61\x72\x20\x76\x3D\x70\x61\x72\x73\x65\x49\x6E\x74\x28\x6C\x5B\x69\x5D\x2C\x64\x69\x67\x69\x74\x29\x3B\x0D\x0A\x09\x09\x09\x69\x66\x28\x21\x69\x73\x4E\x61\x4E\x28\x76\x29\x20\x26\x26\x20\x76\x3E\x3D\x30\x20\x26\x26\x20\x76\x3C\x3D\x32\x35\x35\x29\x7B\x0D\x0A\x09\x09\x09\x09\x72\x2E\x70\x75\x73\x68\x28\x76\x29\x3B\x0D\x0A\x09\x09\x09\x7D\x65\x6C\x73\x65\x7B\x0D\x0A\x09\x09\x09\x09\x74\x68\x72\x6F\x77\x20\x22\x73\x74\x72\x32\x48\x65\x78\x41\x72\x72\x61\x79\x20\x66\x61\x69\x6C\x65\x64\x2E\x22\x3B\x0D\x0A\x09\x09\x09\x7D\x0D\x0A\x09\x09\x7D\x0D\x0A\x09\x09\x72\x65\x74\x75\x72\x6E\x20\x72\x3B\x0D\x0A\x09\x7D\x0D\x0A\x09\x74\x68\x72\x6F\x77\x20\x22\x73\x74\x72\x32\x48\x65\x78\x41\x72\x72\x61\x79\x20\x66\x61\x69\x6C\x65\x64\x2E\x22\x3B\x0D\x0A\x7D\x0D\x0A\x0D\x0A\x66\x75\x6E\x63\x74\x69\x6F\x6E\x20\x69\x6E\x74\x32\x68\x65\x78\x32\x28\x76\x61\x6C\x29\x0D\x0A\x7B\x0D\x0A\x09\x76\x61\x72\x20\x72\x3D\x76\x61\x6C\x2E\x74\x6F\x53\x74\x72\x69\x6E\x67\x28\x31\x36\x29\x3B\x0D\x0A\x09\x69\x66\x28\x72\x2E\x6C\x65\x6E\x67\x74\x68\x3C\x32\x29\x7B\x0D\x0A\x09\x09\x72\x3D\x22\x30\x22\x2B\x72\x3B\x0D\x0A\x09\x7D\x0D\x0A\x09\x72\x65\x74\x75\x72\x6E\x20\x72\x3B\x0D\x0A\x7D\x0D\x0A\x66\x75\x6E\x63\x74\x69\x6F\x6E\x20\x61\x72\x72\x61\x79\x54\x6F\x48\x65\x78\x28\x61\x72\x29\x0D\x0A\x7B\x0D\x0A\x09\x69\x66\x28\x61\x72\x3D\x3D\x6E\x75\x6C\x6C\x29\x7B\x0D\x0A\x09\x09\x72\x65\x74\x75\x72\x6E\x20\x6E\x75\x6C\x6C\x3B\x0D\x0A\x09\x7D\x0D\x0A\x09\x76\x61\x72\x20\x72\x65\x74\x3D\x22\x22\x3B\x0D\x0A\x09\x66\x6F\x72\x28\x76\x61\x72\x20\x69\x3D\x30\x3B\x69\x3C\x61\x72\x2E\x6C\x65\x6E\x67\x74\x68\x3B\x69\x2B\x2B\x29\x7B\x0D\x0A\x09\x09\x72\x65\x74\x2B\x3D\x69\x6E\x74\x32\x68\x65\x78\x32\x28\x61\x72\x5B\x69\x5D\x29\x3B\x0D\x0A\x09\x7D\x0D\x0A\x09\x72\x65\x74\x75\x72\x6E\x20\x72\x65\x74\x3B\x0D\x0A\x7D\x0D\x0A\x66\x75\x6E\x63\x74\x69\x6F\x6E\x20\x69\x6E\x74\x32\x73\x74\x72\x28\x76\x61\x6C\x29\x7B\x72\x65\x74\x75\x72\x6E\x20\x76\x61\x6C\x2E\x74\x6F\x53\x74\x72\x69\x6E\x67\x28\x31\x30\x29\x3B\x7D\x0D\x0A\x66\x75\x6E\x63\x74\x69\x6F\x6E\x20\x69\x6E\x74\x32\x49\x70\x41\x64\x64\x72\x28\x76\x29\x7B\x72\x65\x74\x75\x72\x6E\x20\x69\x6E\x74\x32\x73\x74\x72\x28\x28\x76\x3E\x3E\x32\x34\x29\x26\x30\x78\x66\x66\x29\x2B\x22\x2E\x22\x2B\x69\x6E\x74\x32\x73\x74\x72\x28\x28\x76\x3E\x3E\x31\x36\x29\x26\x30\x78\x66\x66\x29\x2B\x22\x2E\x22\x2B\x69\x6E\x74\x32\x73\x74\x72\x28\x28\x76\x3E\x3E\x38\x29\x26\x30\x78\x66\x66\x29\x2B\x22\x2E\x22\x2B\x69\x6E\x74\x32\x73\x74\x72\x28\x28\x76\x3E\x3E\x30\x29\x26\x30\x78\x66\x66\x29\x3B\x7D\x0D\x0A\x66\x75\x6E\x63\x74\x69\x6F\x6E\x20\x69\x6E\x74\x32\x4D\x61\x63\x41\x64\x64\x72\x28\x76\x31\x2C\x76\x32\x29\x7B\x72\x65\x74\x75\x72\x6E\x20\x69\x6E\x74\x32\x68\x65\x78\x32\x28\x28\x76\x31\x3E\x3E\x32\x34\x29\x26\x30\x78\x66\x66\x29\x2B\x22\x3A\x22\x2B\x69\x6E\x74\x32\x68\x65\x78\x32\x28\x28\x76\x31\x3E\x3E\x31\x36\x29\x26\x30\x78\x66\x66\x29\x2B\x22\x3A\x22\x2B\x69\x6E\x74\x32\x68\x65\x78\x32\x28\x28\x76\x31\x3E\x3E\x38\x29\x26\x30\x78\x66\x66\x29\x2B\x22\x3A\x22\x2B\x69\x6E\x74\x32\x68\x65\x78\x32\x28\x28\x76\x31\x3E\x3E\x30\x29\x26\x30\x78\x66\x66\x29\x2B\x22\x3A\x22\x2B\x69\x6E\x74\x32\x68\x65\x78\x32\x28\x28\x76\x32\x3E\x3E\x32\x34\x29\x26\x30\x78\x66\x66\x29\x2B\x22\x3A\x22\x2B\x69\x6E\x74\x32\x68\x65\x78\x32\x28\x28\x76\x32\x3E\x3E\x31\x36\x29\x26\x30\x78\x66\x66\x29\x3B\x7D\x0D\x0A\x0D\x0A\x0D\x0A\x76\x61\x72\x20\x55\x69\x3D\x6E\x65\x77\x20\x4F\x62\x6A\x65\x63\x74\x28\x29\x3B\x0D\x0A\x55\x69\x2E\x49\x70\x41\x64\x64\x72\x49\x6E\x70\x75\x74\x3D\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x69\x64\x29\x0D\x0A\x7B\x0D\x0A\x09\x76\x61\x72\x20\x5F\x74\x3D\x74\x68\x69\x73\x3B\x0D\x0A\x09\x5F\x74\x2E\x5F\x74\x61\x67\x73\x3D\x7B\x0D\x0A\x09\x09\x69\x6E\x70\x75\x74\x3A\x67\x65\x74\x45\x6C\x65\x6D\x28\x69\x64\x29\x0D\x0A\x09\x7D\x3B\x0D\x0A\x09\x5F\x74\x2E\x65\x76\x65\x6E\x74\x73\x3D\x7B\x0D\x0A\x09\x09\x6F\x6E\x63\x68\x61\x6E\x67\x65\x3A\x6E\x75\x6C\x6C\x0D\x0A\x09\x7D\x3B\x0D\x0A\x09\x5F\x74\x2E\x5F\x74\x61\x67\x73\x2E\x69\x6E\x70\x75\x74\x2E\x6F\x6E\x43\x68\x61\x6E\x67\x65\x3D\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x29\x0D\x0A\x09\x7B\x0D\x0A\x09\x09\x69\x66\x28\x5F\x74\x2E\x65\x76\x65\x6E\x74\x73\x2E\x6F\x6E\x63\x68\x61\x6E\x67\x65\x21\x3D\x6E\x75\x6C\x6C\x29\x7B\x0D\x0A\x09\x09\x09\x5F\x74\x2E\x65\x76\x65\x6E\x74\x73\x2E\x6F\x6E\x63\x68\x61\x6E\x67\x65\x28\x29\x3B\x0D\x0A\x09\x09\x7D\x0D\x0A\x09\x7D\x0D\x0A\x09\x5F\x74\x2E\x67\x65\x74\x49\x70\x41\x64\x64\x72\x3D\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x29\x7B\x0D\x0A\x09\x09\x72\x65\x74\x75\x72\x6E\x20\x73\x74\x72\x32\x48\x65\x78\x41\x72\x72\x61\x79\x28\x5F\x74\x2E\x5F\x74\x61\x67\x73\x2E\x69\x6E\x70\x75\x74\x2E\x76\x61\x6C\x75\x65\x2C\x22\x2E\x22\x2C\x34\x2C\x31\x30\x29\x3B\x0D\x0A\x09\x7D\x0D\x0A\x09\x5F\x74\x2E\x67\x65\x74\x54\x65\x78\x74\x3D\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x29\x7B\x0D\x0A\x09\x09\x72\x65\x74\x75\x72\x6E\x20\x5F\x74\x2E\x5F\x74\x61\x67\x73\x2E\x69\x6E\x70\x75\x74\x2E\x76\x61\x6C\x75\x65\x3B\x0D\x0A\x09\x7D\x0D\x0A\x09\x5F\x74\x2E\x73\x65\x74\x49\x70\x56\x61\x6C\x75\x65\x3D\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x76\x31\x29\x0D\x0A\x09\x7B\x0D\x0A\x09\x09\x5F\x74\x2E\x5F\x74\x61\x67\x73\x2E\x69\x6E\x70\x75\x74\x2E\x76\x61\x6C\x75\x65\x3D\x69\x6E\x74\x32\x49\x70\x41\x64\x64\x72\x28\x76\x31\x29\x3B\x0D\x0A\x09\x7D\x0D\x0A\x7D\x0D\x0A\x0D\x0A\x55\x69\x2E\x4D\x61\x63\x41\x64\x64\x72\x3D\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x69\x64\x29\x0D\x0A\x7B\x0D\x0A\x09\x74\x68\x69\x73\x2E\x5F\x74\x61\x67\x73\x3D\x7B\x0D\x0A\x09\x09\x69\x6E\x70\x75\x74\x3A\x67\x65\x74\x45\x6C\x65\x6D\x28\x69\x64\x29\x0D\x0A\x09\x7D\x3B\x0D\x0A\x09\x74\x68\x69\x73\x2E\x65\x76\x65\x6E\x74\x73\x3D\x7B\x0D\x0A\x09\x09\x6F\x6E\x63\x68\x61\x6E\x67\x65\x3A\x6E\x75\x6C\x6C\x0D\x0A\x09\x7D\x3B\x0D\x0A\x09\x76\x61\x72\x20\x5F\x74\x3D\x74\x68\x69\x73\x3B\x0D\x0A\x09\x74\x68\x69\x73\x2E\x5F\x74\x61\x67\x73\x2E\x69\x6E\x70\x75\x74\x2E\x6F\x6E\x43\x68\x61\x6E\x67\x65\x3D\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x29\x0D\x0A\x09\x7B\x0D\x0A\x09\x09\x69\x66\x28\x5F\x74\x2E\x65\x76\x65\x6E\x74\x73\x2E\x6F\x6E\x63\x68\x61\x6E\x67\x65\x21\x3D\x6E\x75\x6C\x6C\x29\x7B\x0D\x0A\x09\x09\x09\x5F\x74\x2E\x65\x76\x65\x6E\x74\x73\x2E\x6F\x6E\x63\x68\x61\x6E\x67\x65\x28\x29\x3B\x0D\x0A\x09\x09\x7D\x0D\x0A\x09\x7D\x09\x0D\x0A\x7D\x0D\x0A\x55\x69\x2E\x4D\x61\x63\x41\x64\x64\x72\x2E\x70\x72\x6F\x74\x6F\x74\x79\x70\x65\x3D\x0D\x0A\x7B\x0D\x0A\x09\x65\x76\x65\x6E\x74\x73\x3A\x6E\x75\x6C\x6C\x2C\x0D\x0A\x09\x5F\x74\x61\x67\x73\x3A\x6E\x75\x6C\x6C\x2C\x0D\x0A\x09\x67\x65\x74\x4D\x61\x63\x41\x64\x64\x72\x3A\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x29\x7B\x0D\x0A\x09\x09\x72\x65\x74\x75\x72\x6E\x20\x73\x74\x72\x32\x48\x65\x78\x41\x72\x72\x61\x79\x28\x74\x68\x69\x73\x2E\x5F\x74\x61\x67\x73\x2E\x69\x6E\x70\x75\x74\x2E\x76\x61\x6C\x75\x65\x2C\x22\x3A\x22\x2C\x36\x2C\x31\x36\x29\x3B\x0D\x0A\x09\x7D\x2C\x0D\x0A\x09\x67\x65\x74\x54\x65\x78\x74\x3A\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x29\x0D\x0A\x09\x7B\x0D\x0A\x09\x09\x72\x65\x74\x75\x72\x6E\x20\x74\x68\x69\x73\x2E\x5F\x74\x61\x67\x73\x2E\x69\x6E\x70\x75\x74\x2E\x76\x61\x6C\x75\x65\x3B\x0D\x0A\x09\x7D\x2C\x0D\x0A\x09\x73\x65\x74\x4D\x61\x63\x56\x61\x6C\x75\x65\x3A\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x76\x31\x2C\x76\x32\x29\x0D\x0A\x09\x7B\x0D\x0A\x09\x09\x74\x68\x69\x73\x2E\x5F\x74\x61\x67\x73\x2E\x69\x6E\x70\x75\x74\x2E\x76\x61\x6C\x75\x65\x3D\x69\x6E\x74\x32\x4D\x61\x63\x41\x64\x64\x72\x28\x76\x31\x2C\x76\x32\x29\x3B\x0D\x0A\x09\x7D\x0D\x0A\x7D\x0D\x0A\x0D\x0A\x55\x69\x2E\x41\x63\x63\x65\x73\x73\x4D\x6F\x64\x65\x3D\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x69\x64\x29\x0D\x0A\x7B\x0D\x0A\x09\x74\x68\x69\x73\x2E\x5F\x74\x61\x67\x73\x3D\x7B\x0D\x0A\x09\x09\x73\x65\x6C\x65\x63\x74\x3A\x67\x65\x74\x45\x6C\x65\x6D\x28\x69\x64\x29\x0D\x0A\x09\x7D\x3B\x0D\x0A\x09\x74\x68\x69\x73\x2E\x65\x76\x65\x6E\x74\x73\x3D\x7B\x0D\x0A\x09\x09\x6F\x6E\x63\x68\x61\x6E\x67\x65\x3A\x6E\x75\x6C\x6C\x0D\x0A\x09\x7D\x3B\x0D\x0A\x09\x76\x61\x72\x20\x5F\x74\x3D\x74\x68\x69\x73\x3B\x0D\x0A\x09\x74\x68\x69\x73\x2E\x5F\x74\x61\x67\x73\x2E\x73\x65\x6C\x65\x63\x74\x2E\x6F\x6E\x43\x68\x61\x6E\x67\x65\x3D\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x29\x0D\x0A\x09\x7B\x0D\x0A\x09\x09\x69\x66\x28\x5F\x74\x2E\x65\x76\x65\x6E\x74\x73\x2E\x6F\x6E\x63\x68\x61\x6E\x67\x65\x21\x3D\x6E\x75\x6C\x6C\x29\x7B\x0D\x0A\x09\x09\x09\x5F\x74\x2E\x65\x76\x65\x6E\x74\x73\x2E\x6F\x6E\x63\x68\x61\x6E\x67\x65\x28\x29\x3B\x0D\x0A\x09\x09\x7D\x0D\x0A\x09\x7D\x09\x0D\x0A\x7D\x0D\x0A\x55\x69\x2E\x41\x63\x63\x65\x73\x73\x4D\x6F\x64\x65\x2E\x70\x72\x6F\x74\x6F\x74\x79\x70\x65\x3D\x0D\x0A\x7B\x0D\x0A\x09\x65\x76\x65\x6E\x74\x73\x3A\x6E\x75\x6C\x6C\x2C\x0D\x0A\x09\x5F\x74\x61\x67\x73\x3A\x6E\x75\x6C\x6C\x2C\x0D\x0A\x09\x67\x65\x74\x4D\x6F\x64\x65\x3A\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x29\x7B\x0D\x0A\x09\x09\x72\x65\x74\x75\x72\x6E\x20\x74\x68\x69\x73\x2E\x5F\x74\x61\x67\x73\x2E\x73\x65\x6C\x65\x63\x74\x2E\x73\x65\x6C\x65\x63\x74\x65\x64\x49\x6E\x64\x65\x78\x20\x3B\x0D\x0A\x09\x7D\x2C\x0D\x0A\x09\x73\x65\x74\x56\x61\x6C\x75\x65\x3A\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x76\x31\x29\x0D\x0A\x09\x7B\x0D\x0A\x09\x09\x74\x68\x69\x73\x2E\x5F\x74\x61\x67\x73\x2E\x73\x65\x6C\x65\x63\x74\x2E\x73\x65\x6C\x65\x63\x74\x65\x64\x49\x6E\x64\x65\x78\x20\x3D\x76\x31\x3B\x0D\x0A\x09\x7D\x0D\x0A\x7D\x0D\x0A\x0D\x0A\x0D\x0A\x0D\x0A\x55\x69\x2E\x55\x70\x64\x61\x74\x65\x42\x75\x74\x74\x6F\x6E\x3D\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x69\x64\x29\x0D\x0A\x7B\x0D\x0A\x09\x74\x68\x69\x73\x2E\x5F\x74\x61\x67\x73\x3D\x7B\x62\x75\x74\x74\x6F\x6E\x3A\x67\x65\x74\x45\x6C\x65\x6D\x28\x69\x64\x29\x7D\x3B\x0D\x0A\x09\x74\x68\x69\x73\x2E\x65\x76\x65\x6E\x74\x73\x3D\x7B\x6F\x6E\x63\x6C\x69\x63\x6B\x3A\x6E\x75\x6C\x6C\x7D\x0D\x0A\x09\x76\x61\x72\x20\x5F\x74\x3D\x74\x68\x69\x73\x3B\x0D\x0A\x09\x74\x68\x69\x73\x2E\x5F\x74\x61\x67\x73\x2E\x62\x75\x74\x74\x6F\x6E\x2E\x6F\x6E\x63\x6C\x69\x63\x6B\x3D\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x29\x0D\x0A\x09\x7B\x0D\x0A\x09\x09\x69\x66\x28\x5F\x74\x2E\x65\x76\x65\x6E\x74\x73\x2E\x6F\x6E\x63\x6C\x69\x63\x6B\x21\x3D\x6E\x75\x6C\x6C\x29\x7B\x0D\x0A\x09\x09\x09\x5F\x74\x2E\x65\x76\x65\x6E\x74\x73\x2E\x6F\x6E\x63\x6C\x69\x63\x6B\x28\x29\x3B\x0D\x0A\x09\x09\x7D\x09\x09\x0D\x0A\x09\x7D\x0D\x0A\x09\x74\x68\x69\x73\x2E\x5F\x74\x61\x67\x73\x2E\x62\x75\x74\x74\x6F\x6E\x2E\x64\x69\x73\x61\x62\x6C\x65\x64\x3D\x66\x61\x6C\x73\x65\x3B\x0D\x0A\x7D\x0D\x0A\x55\x69\x2E\x55\x70\x64\x61\x74\x65\x42\x75\x74\x74\x6F\x6E\x2E\x70\x72\x6F\x74\x6F\x74\x79\x70\x65\x3D\x0D\x0A\x7B\x0D\x0A\x09\x65\x76\x65\x6E\x74\x73\x3A\x6E\x75\x6C\x6C\x2C\x5F\x74\x61\x67\x73\x3A\x6E\x75\x6C\x6C\x2C\x0D\x0A\x09\x64\x69\x73\x61\x62\x6C\x65\x3A\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x29\x7B\x74\x68\x69\x73\x2E\x5F\x74\x61\x67\x73\x2E\x62\x75\x74\x74\x6F\x6E\x2E\x64\x69\x73\x61\x62\x6C\x65\x64\x3D\x74\x72\x75\x65\x3B\x7D\x0D\x0A\x7D\x0D\x0A\x55\x69\x2E\x43\x61\x6E\x63\x65\x6C\x42\x75\x74\x74\x6F\x6E\x3D\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x69\x64\x29\x0D\x0A\x7B\x0D\x0A\x09\x74\x68\x69\x73\x2E\x5F\x74\x61\x67\x73\x3D\x7B\x62\x75\x74\x74\x6F\x6E\x3A\x67\x65\x74\x45\x6C\x65\x6D\x28\x69\x64\x29\x7D\x3B\x0D\x0A\x09\x74\x68\x69\x73\x2E\x5F\x74\x61\x67\x73\x2E\x62\x75\x74\x74\x6F\x6E\x2E\x6F\x6E\x63\x6C\x69\x63\x6B\x3D\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x29\x0D\x0A\x09\x7B\x0D\x0A\x09\x09\x69\x66\x28\x77\x69\x6E\x64\x6F\x77\x2E\x63\x6F\x6E\x66\x69\x72\x6D\x28\x27\x44\x6F\x20\x79\x6F\x75\x20\x77\x61\x6E\x74\x20\x74\x6F\x20\x63\x61\x6E\x63\x65\x6C\x3F\x27\x29\x29\x7B\x0D\x0A\x09\x09\x09\x64\x6F\x63\x75\x6D\x65\x6E\x74\x2E\x6C\x6F\x63\x61\x74\x69\x6F\x6E\x3D\x22\x2E\x2F\x69\x6E\x64\x65\x78\x2E\x68\x74\x6D\x6C\x22\x3B\x0D\x0A\x09\x09\x7D\x0D\x0A\x09\x7D\x0D\x0A\x7D\x0D\x0A\x0D\x0A\x0D\x0A\x0D\x0A\x66\x75\x6E\x63\x74\x69\x6F\x6E\x20\x41\x70\x70\x6C\x69\x63\x61\x74\x69\x6F\x6E\x28\x29\x0D\x0A\x7B\x0D\x0A\x09\x76\x61\x72\x20\x53\x45\x54\x55\x50\x5F\x41\x50\x49\x3D\x22\x2F\x73\x65\x74\x75\x70\x2F\x73\x65\x74\x75\x70\x2E\x61\x70\x69\x22\x3B\x20\x0D\x0A\x09\x76\x61\x72\x20\x75\x69\x3D\x7B\x0D\x0A\x09\x09\x6D\x61\x63\x61\x64\x64\x72\x3A\x6E\x65\x77\x20\x55\x69\x2E\x4D\x61\x63\x41\x64\x64\x72\x28\x22\x6D\x61\x63\x61\x64\x64\x72\x69\x6E\x70\x75\x74\x22\x29\x2C\x0D\x0A\x09\x09\x63\x61\x6E\x63\x65\x6C\x3A\x6E\x65\x77\x20\x55\x69\x2E\x43\x61\x6E\x63\x65\x6C\x42\x75\x74\x74\x6F\x6E\x28\x22\x63\x61\x6E\x63\x65\x6C\x22\x29\x2C\x0D\x0A\x09\x09\x75\x70\x64\x61\x74\x65\x3A\x6E\x65\x77\x20\x55\x69\x2E\x55\x70\x64\x61\x74\x65\x42\x75\x74\x74\x6F\x6E\x28\x22\x75\x70\x64\x61\x74\x65\x62\x74\x6E\x22\x29\x2C\x0D\x0A\x09\x09\x69\x70\x61\x64\x64\x72\x3A\x6E\x65\x77\x20\x55\x69\x2E\x49\x70\x41\x64\x64\x72\x49\x6E\x70\x75\x74\x28\x22\x69\x70\x69\x6E\x70\x75\x74\x22\x29\x2C\x0D\x0A\x09\x09\x73\x75\x62\x6E\x65\x74\x6D\x61\x73\x6B\x3A\x6E\x65\x77\x20\x55\x69\x2E\x49\x70\x41\x64\x64\x72\x49\x6E\x70\x75\x74\x28\x22\x73\x75\x62\x6E\x65\x74\x69\x6E\x70\x75\x74\x22\x29\x2C\x0D\x0A\x09\x09\x64\x67\x61\x74\x65\x77\x61\x79\x3A\x6E\x65\x77\x20\x55\x69\x2E\x49\x70\x41\x64\x64\x72\x49\x6E\x70\x75\x74\x28\x22\x64\x67\x69\x6E\x70\x75\x74\x22\x29\x2C\x0D\x0A\x09\x09\x6D\x76\x6D\x5F\x61\x63\x3A\x6E\x65\x77\x20\x55\x69\x2E\x41\x63\x63\x65\x73\x73\x4D\x6F\x64\x65\x28\x22\x6D\x76\x6D\x73\x65\x6C\x65\x63\x74\x22\x29\x2C\x0D\x0A\x09\x09\x73\x65\x74\x75\x70\x5F\x61\x63\x3A\x6E\x65\x77\x20\x55\x69\x2E\x41\x63\x63\x65\x73\x73\x4D\x6F\x64\x65\x28\x22\x73\x65\x74\x75\x70\x73\x65\x6C\x65\x63\x74\x22\x29\x0D\x0A\x09\x7D\x0D\x0A\x09\x75\x69\x2E\x75\x70\x64\x61\x74\x65\x2E\x65\x76\x65\x6E\x74\x73\x2E\x6F\x6E\x63\x6C\x69\x63\x6B\x3D\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x29\x7B\x0D\x0A\x09\x09\x2F\x2F\xE5\x80\xA4\xE3\x83\x81\xE3\x82\xA7\xE3\x83\x83\xE3\x82\xAF\x0D\x0A\x09\x09\x74\x72\x79\x7B\x0D\x0A\x09\x09\x09\x76\x61\x72\x20\x73\x71\x3D\x30\x3B\x0D\x0A\x09\x09\x09\x76\x61\x72\x20\x6D\x61\x63\x3D\x75\x69\x2E\x6D\x61\x63\x61\x64\x64\x72\x2E\x67\x65\x74\x4D\x61\x63\x41\x64\x64\x72\x28\x29\x3B\x0D\x0A\x09\x09\x09\x73\x71\x3D\x31\x3B\x0D\x0A\x09\x09\x09\x76\x61\x72\x20\x69\x70\x3D\x75\x69\x2E\x69\x70\x61\x64\x64\x72\x2E\x67\x65\x74\x49\x70\x41\x64\x64\x72\x28\x29\x3B\x0D\x0A\x09\x09\x09\x73\x71\x3D\x32\x3B\x0D\x0A\x09\x09\x09\x76\x61\x72\x20\x73\x75\x62\x6E\x65\x74\x3D\x75\x69\x2E\x73\x75\x62\x6E\x65\x74\x6D\x61\x73\x6B\x2E\x67\x65\x74\x49\x70\x41\x64\x64\x72\x28\x29\x3B\x0D\x0A\x09\x09\x09\x73\x71\x3D\x33\x3B\x0D\x0A\x09\x09\x09\x76\x61\x72\x20\x64\x67\x61\x74\x65\x3D\x75\x69\x2E\x64\x67\x61\x74\x65\x77\x61\x79\x2E\x67\x65\x74\x49\x70\x41\x64\x64\x72\x28\x29\x3B\x0D\x0A\x09\x09\x09\x73\x71\x3D\x34\x3B\x0D\x0A\x09\x09\x09\x76\x61\x72\x20\x70\x6D\x3D\x61\x72\x72\x61\x79\x54\x6F\x48\x65\x78\x28\x6D\x61\x63\x29\x2B\x22\x66\x66\x66\x66\x22\x0D\x0A\x09\x09\x09\x09\x2B\x61\x72\x72\x61\x79\x54\x6F\x48\x65\x78\x28\x69\x70\x29\x0D\x0A\x09\x09\x09\x09\x2B\x61\x72\x72\x61\x79\x54\x6F\x48\x65\x78\x28\x73\x75\x62\x6E\x65\x74\x29\x0D\x0A\x09\x09\x09\x09\x2B\x61\x72\x72\x61\x79\x54\x6F\x48\x65\x78\x28\x64\x67\x61\x74\x65\x29\x0D\x0A\x09\x09\x09\x09\x2B\x22\x30\x30\x35\x30\x30\x30\x30\x30\x22\x0D\x0A\x09\x09\x09\x09\x2B\x69\x6E\x74\x32\x68\x65\x78\x32\x28\x75\x69\x2E\x6D\x76\x6D\x5F\x61\x63\x2E\x67\x65\x74\x4D\x6F\x64\x65\x28\x29\x29\x2B\x69\x6E\x74\x32\x68\x65\x78\x32\x28\x75\x69\x2E\x73\x65\x74\x75\x70\x5F\x61\x63\x2E\x67\x65\x74\x4D\x6F\x64\x65\x28\x29\x29\x2B\x22\x66\x66\x66\x66\x22\x3B\x0D\x0A\x09\x09\x09\x73\x71\x3D\x35\x3B\x0D\x0A\x09\x09\x09\x2F\x2F\x4C\x50\x43\x58\x50\x72\x65\x73\x73\x6F\xE3\x81\xB8\xE9\x80\x81\xE4\xBF\xA1\x0D\x0A\x09\x09\x09\x76\x61\x72\x20\x72\x65\x74\x3D\x65\x76\x61\x6C\x28\x22\x28\x22\x2B\x73\x6C\x69\x62\x2E\x78\x68\x72\x28\x53\x45\x54\x55\x50\x5F\x41\x50\x49\x2B\x22\x3F\x63\x3D\x75\x70\x64\x61\x74\x65\x26\x70\x3D\x22\x2B\x70\x6D\x29\x2E\x72\x65\x73\x70\x6F\x6E\x73\x65\x54\x65\x78\x74\x2B\x22\x29\x22\x29\x3B\x0D\x0A\x09\x09\x09\x73\x71\x3D\x36\x3B\x0D\x0A\x09\x09\x09\x69\x66\x28\x72\x65\x74\x2E\x72\x65\x73\x75\x6C\x74\x21\x3D\x30\x78\x30\x29\x7B\x0D\x0A\x09\x09\x09\x09\x61\x6C\x65\x72\x74\x28\x22\x43\x6F\x6E\x66\x69\x67\x75\x72\x61\x74\x69\x6F\x6E\x20\x75\x70\x64\x61\x74\x65\x20\x69\x73\x20\x66\x61\x69\x6C\x65\x64\x2E\x20\x63\x6F\x64\x65\x3D\x30\x78\x22\x2B\x72\x65\x74\x2E\x72\x65\x73\x75\x6C\x74\x29\x3B\x0D\x0A\x09\x09\x09\x7D\x65\x6C\x73\x65\x7B\x0D\x0A\x09\x09\x09\x09\x61\x6C\x65\x72\x74\x28\x22\x43\x6F\x6E\x66\x69\x67\x75\x72\x61\x74\x69\x6F\x6E\x20\x69\x73\x20\x63\x68\x61\x6E\x67\x65\x64\x2E\x5C\x6E\x20\x52\x65\x73\x74\x61\x72\x74\x20\x74\x68\x65\x20\x4D\x69\x4D\x69\x63\x52\x65\x6D\x6F\x74\x65\x4D\x43\x55\x20\x74\x6F\x20\x65\x6E\x61\x62\x6C\x65\x20\x74\x68\x65\x20\x73\x65\x74\x74\x69\x6E\x67\x2E\x22\x29\x3B\x0D\x0A\x09\x09\x09\x7D\x0D\x0A\x09\x09\x7D\x63\x61\x74\x63\x68\x28\x65\x29\x7B\x0D\x0A\x09\x09\x09\x73\x77\x69\x74\x63\x68\x28\x73\x71\x29\x7B\x0D\x0A\x09\x09\x09\x63\x61\x73\x65\x20\x30\x3A\x09\x61\x6C\x65\x72\x74\x28\x22\x49\x6E\x76\x61\x6C\x69\x64\x20\x4D\x41\x43\x20\x61\x64\x64\x72\x65\x73\x73\x20\x27\x22\x2B\x75\x69\x2E\x6D\x61\x63\x61\x64\x64\x72\x2E\x67\x65\x74\x54\x65\x78\x74\x28\x29\x2B\x22\x27\x22\x29\x3B\x62\x72\x65\x61\x6B\x3B\x0D\x0A\x09\x09\x09\x63\x61\x73\x65\x20\x31\x3A\x20\x61\x6C\x65\x72\x74\x28\x22\x49\x6E\x76\x61\x6C\x69\x64\x20\x49\x50\x20\x61\x64\x64\x72\x65\x73\x73\x20\x27\x22\x2B\x75\x69\x2E\x69\x70\x61\x64\x64\x72\x2E\x67\x65\x74\x54\x65\x78\x74\x28\x29\x2B\x22\x27\x22\x29\x3B\x62\x72\x65\x61\x6B\x3B\x0D\x0A\x09\x09\x09\x63\x61\x73\x65\x20\x32\x3A\x09\x61\x6C\x65\x72\x74\x28\x22\x49\x6E\x76\x61\x6C\x69\x64\x20\x73\x75\x62\x6E\x65\x74\x20\x6D\x61\x73\x6B\x20\x27\x22\x2B\x75\x69\x2E\x73\x75\x62\x6E\x65\x74\x6D\x61\x73\x6B\x2E\x67\x65\x74\x54\x65\x78\x74\x28\x29\x2B\x22\x27\x22\x29\x3B\x62\x72\x65\x61\x6B\x3B\x0D\x0A\x09\x09\x09\x63\x61\x73\x65\x20\x33\x3A\x20\x61\x6C\x65\x72\x74\x28\x22\x49\x6E\x76\x61\x6C\x69\x64\x20\x64\x65\x66\x61\x75\x6C\x74\x20\x67\x61\x74\x65\x77\x61\x79\x27\x22\x2B\x75\x69\x2E\x64\x67\x61\x74\x65\x77\x61\x79\x2E\x67\x65\x74\x54\x65\x78\x74\x28\x29\x2B\x22\x27\x22\x29\x3B\x62\x72\x65\x61\x6B\x3B\x0D\x0A\x09\x09\x09\x63\x61\x73\x65\x20\x36\x3A\x20\x61\x6C\x65\x72\x74\x28\x22\x4D\x69\x4D\x69\x63\x20\x63\x6F\x6E\x66\x69\x67\x75\x72\x61\x74\x69\x6F\x6E\x20\x70\x72\x6F\x63\x65\x73\x73\x20\x66\x61\x69\x6C\x65\x64\x20\x61\x74\x20\x58\x48\x52\x2E\x22\x29\x3B\x62\x72\x65\x61\x6B\x3B\x0D\x0A\x09\x09\x09\x64\x65\x66\x61\x75\x6C\x74\x3A\x0D\x0A\x09\x09\x09\x09\x61\x6C\x65\x72\x74\x28\x22\x4D\x69\x4D\x69\x63\x20\x63\x6F\x6E\x66\x69\x67\x75\x72\x61\x74\x69\x6F\x6E\x20\x70\x72\x6F\x63\x65\x73\x73\x20\x66\x61\x69\x6C\x65\x64\x20\x62\x79\x20\x27\x22\x2B\x65\x2E\x74\x6F\x53\x74\x72\x69\x6E\x67\x28\x29\x2B\x22\x27\x2E\x22\x29\x3B\x62\x72\x65\x61\x6B\x3B\x0D\x0A\x09\x09\x09\x7D\x0D\x0A\x09\x09\x7D\x0D\x0A\x09\x09\x0D\x0A\x09\x7D\x0D\x0A\x09\x74\x72\x79\x7B\x0D\x0A\x09\x09\x66\x75\x6E\x63\x74\x69\x6F\x6E\x20\x73\x65\x74\x49\x6E\x6E\x65\x72\x48\x54\x4D\x4C\x28\x6E\x2C\x76\x29\x7B\x67\x65\x74\x45\x6C\x65\x6D\x28\x6E\x29\x2E\x69\x6E\x6E\x65\x72\x48\x54\x4D\x4C\x3D\x76\x3B\x7D\x0D\x0A\x09\x09\x76\x61\x72\x20\x63\x66\x67\x3D\x65\x76\x61\x6C\x28\x22\x28\x22\x2B\x73\x6C\x69\x62\x2E\x78\x68\x72\x28\x53\x45\x54\x55\x50\x5F\x41\x50\x49\x2B\x22\x3F\x63\x3D\x67\x65\x74\x22\x29\x2E\x72\x65\x73\x70\x6F\x6E\x73\x65\x54\x65\x78\x74\x2B\x22\x29\x22\x29\x3B\x0D\x0A\x09\x09\x73\x65\x74\x49\x6E\x6E\x65\x72\x48\x54\x4D\x4C\x28\x22\x74\x64\x5F\x63\x75\x72\x5F\x76\x65\x72\x73\x69\x6F\x6E\x22\x2C\x63\x66\x67\x2E\x61\x70\x70\x6C\x69\x63\x61\x74\x69\x6F\x6E\x29\x3B\x0D\x0A\x09\x09\x73\x65\x74\x49\x6E\x6E\x65\x72\x48\x54\x4D\x4C\x28\x22\x74\x64\x5F\x63\x75\x72\x5F\x6C\x61\x6E\x22\x2C\x63\x66\x67\x2E\x69\x6E\x66\x6F\x2E\x6C\x61\x6E\x64\x65\x76\x29\x3B\x0D\x0A\x09\x09\x73\x65\x74\x49\x6E\x6E\x65\x72\x48\x54\x4D\x4C\x28\x22\x74\x64\x5F\x63\x75\x72\x5F\x63\x64\x72\x22\x2C\x63\x66\x67\x2E\x69\x6E\x66\x6F\x2E\x63\x6F\x72\x65\x64\x62\x67\x29\x3B\x0D\x0A\x09\x09\x73\x65\x74\x49\x6E\x6E\x65\x72\x48\x54\x4D\x4C\x28\x22\x74\x64\x5F\x63\x75\x72\x5F\x6D\x61\x63\x22\x2C\x69\x6E\x74\x32\x4D\x61\x63\x41\x64\x64\x72\x28\x63\x66\x67\x2E\x69\x6E\x66\x6F\x2E\x6D\x61\x63\x30\x30\x30\x31\x30\x32\x30\x33\x2C\x63\x66\x67\x2E\x69\x6E\x66\x6F\x2E\x6D\x61\x63\x30\x34\x30\x35\x78\x78\x78\x78\x29\x29\x3B\x0D\x0A\x09\x09\x73\x65\x74\x49\x6E\x6E\x65\x72\x48\x54\x4D\x4C\x28\x22\x74\x64\x5F\x63\x75\x72\x5F\x69\x70\x22\x2C\x69\x6E\x74\x32\x49\x70\x41\x64\x64\x72\x28\x63\x66\x67\x2E\x69\x6E\x66\x6F\x2E\x69\x70\x29\x29\x3B\x0D\x0A\x09\x09\x73\x65\x74\x49\x6E\x6E\x65\x72\x48\x54\x4D\x4C\x28\x22\x74\x64\x5F\x63\x75\x72\x5F\x6D\x61\x73\x6B\x22\x2C\x69\x6E\x74\x32\x49\x70\x41\x64\x64\x72\x28\x63\x66\x67\x2E\x69\x6E\x66\x6F\x2E\x6D\x61\x73\x6B\x29\x29\x3B\x0D\x0A\x09\x09\x73\x65\x74\x49\x6E\x6E\x65\x72\x48\x54\x4D\x4C\x28\x22\x74\x64\x5F\x63\x75\x72\x5F\x64\x72\x6F\x75\x74\x65\x22\x2C\x69\x6E\x74\x32\x49\x70\x41\x64\x64\x72\x28\x63\x66\x67\x2E\x69\x6E\x66\x6F\x2E\x64\x72\x6F\x75\x74\x65\x29\x29\x3B\x0D\x0A\x09\x09\x0D\x0A\x09\x09\x75\x69\x2E\x6D\x61\x63\x61\x64\x64\x72\x2E\x73\x65\x74\x4D\x61\x63\x56\x61\x6C\x75\x65\x28\x63\x66\x67\x2E\x6D\x61\x63\x30\x30\x30\x31\x30\x32\x30\x33\x2C\x63\x66\x67\x2E\x6D\x61\x63\x30\x34\x30\x35\x78\x78\x78\x78\x29\x3B\x0D\x0A\x09\x09\x75\x69\x2E\x69\x70\x61\x64\x64\x72\x2E\x73\x65\x74\x49\x70\x56\x61\x6C\x75\x65\x28\x63\x66\x67\x2E\x69\x70\x29\x3B\x0D\x0A\x09\x09\x75\x69\x2E\x73\x75\x62\x6E\x65\x74\x6D\x61\x73\x6B\x2E\x73\x65\x74\x49\x70\x56\x61\x6C\x75\x65\x28\x63\x66\x67\x2E\x6D\x61\x73\x6B\x29\x3B\x0D\x0A\x09\x09\x75\x69\x2E\x64\x67\x61\x74\x65\x77\x61\x79\x2E\x73\x65\x74\x49\x70\x56\x61\x6C\x75\x65\x28\x63\x66\x67\x2E\x64\x72\x6F\x75\x74\x65\x29\x3B\x0D\x0A\x09\x09\x75\x69\x2E\x6D\x76\x6D\x5F\x61\x63\x2E\x73\x65\x74\x56\x61\x6C\x75\x65\x28\x28\x63\x66\x67\x2E\x61\x63\x63\x65\x73\x73\x3E\x3E\x32\x34\x29\x26\x30\x78\x66\x66\x29\x3B\x0D\x0A\x09\x09\x75\x69\x2E\x73\x65\x74\x75\x70\x5F\x61\x63\x2E\x73\x65\x74\x56\x61\x6C\x75\x65\x28\x28\x63\x66\x67\x2E\x61\x63\x63\x65\x73\x73\x3E\x3E\x31\x36\x29\x26\x30\x78\x66\x66\x29\x3B\x0D\x0A\x09\x7D\x63\x61\x74\x63\x68\x28\x65\x29\x7B\x0D\x0A\x09\x09\x75\x69\x2E\x75\x70\x64\x61\x74\x65\x2E\x64\x69\x73\x61\x62\x6C\x65\x28\x29\x3B\x0D\x0A\x09\x09\x61\x6C\x65\x72\x74\x28\x22\x4D\x69\x4D\x69\x63\x20\x63\x6F\x6E\x66\x69\x67\x75\x72\x61\x74\x6F\x72\x20\x66\x61\x69\x6C\x65\x64\x20\x69\x6E\x69\x74\x69\x61\x6C\x69\x7A\x61\x74\x69\x6F\x6E\x2E\x27\x22\x2B\x65\x2E\x74\x6F\x53\x74\x72\x69\x6E\x67\x28\x29\x2B\x22\x27\x22\x29\x3B\x0D\x0A\x09\x7D\x09\x0D\x0A\x7D\x0D\x0A\x0D\x0A\x0D\x0A\x66\x75\x6E\x63\x74\x69\x6F\x6E\x20\x69\x6E\x69\x74\x28\x29\x0D\x0A\x7B\x0D\x0A\x09\x61\x70\x70\x3D\x6E\x65\x77\x20\x41\x70\x70\x6C\x69\x63\x61\x74\x69\x6F\x6E\x28\x29\x3B\x0D\x0A\x7D\x0D\x0A\x0D\x0A\x0D\x0A\x3C\x2F\x73\x63\x72\x69\x70\x74\x3E\x0D\x0A\x3C\x2F\x68\x65\x61\x64\x3E\x0D\x0A\x3C\x62\x6F\x64\x79\x20\x6F\x6E\x6C\x6F\x61\x64\x3D\x22\x69\x6E\x69\x74\x28\x29\x3B\x22\x3E\x0D\x0A\x3C\x68\x31\x3E\x4D\x69\x4D\x69\x63\x20\x52\x65\x6D\x6F\x74\x65\x4D\x43\x55\x20\x6F\x6E\x2D\x63\x68\x69\x70\x20\x63\x6F\x6E\x66\x69\x67\x75\x72\x61\x74\x69\x6F\x6E\x20\x3C\x2F\x68\x31\x3E\x0D\x0A\x3C\x68\x72\x2F\x3E\x0D\x0A\x0D\x0A\x09\x3C\x68\x32\x3E\x43\x75\x72\x72\x65\x6E\x74\x20\x63\x6F\x6E\x66\x69\x67\x75\x72\x61\x74\x69\x6F\x6E\x3C\x2F\x68\x32\x3E\x0D\x0A\x09\x3C\x74\x61\x62\x6C\x65\x20\x63\x6C\x61\x73\x73\x3D\x22\x74\x61\x62\x6C\x65\x22\x3E\x0D\x0A\x09\x09\x3C\x74\x72\x20\x63\x6C\x61\x73\x73\x3D\x22\x74\x65\x78\x74\x5F\x72\x6F\x77\x22\x20\x3E\x3C\x74\x64\x20\x63\x6C\x61\x73\x73\x3D\x22\x74\x64\x31\x22\x3E\x56\x65\x72\x73\x69\x6F\x6E\x3C\x2F\x74\x64\x3E\x3C\x74\x64\x20\x63\x6C\x61\x73\x73\x3D\x22\x74\x64\x32\x22\x20\x69\x64\x3D\x22\x74\x64\x5F\x63\x75\x72\x5F\x76\x65\x72\x73\x69\x6F\x6E\x22\x3E\x3C\x2F\x74\x64\x3E\x3C\x2F\x74\x72\x3E\x0D\x0A\x09\x09\x3C\x74\x72\x20\x63\x6C\x61\x73\x73\x3D\x22\x74\x65\x78\x74\x5F\x72\x6F\x77\x22\x20\x3E\x3C\x74\x64\x20\x63\x6C\x61\x73\x73\x3D\x22\x74\x64\x31\x22\x3E\x4C\x41\x4E\x20\x50\x48\x59\x3C\x2F\x74\x64\x3E\x3C\x74\x64\x20\x63\x6C\x61\x73\x73\x3D\x22\x74\x64\x32\x22\x20\x69\x64\x3D\x22\x74\x64\x5F\x63\x75\x72\x5F\x6C\x61\x6E\x22\x3E\x3C\x2F\x74\x64\x3E\x3C\x2F\x74\x72\x3E\x0D\x0A\x09\x09\x3C\x74\x72\x20\x63\x6C\x61\x73\x73\x3D\x22\x74\x65\x78\x74\x5F\x72\x6F\x77\x22\x20\x3E\x3C\x74\x64\x20\x63\x6C\x61\x73\x73\x3D\x22\x74\x64\x31\x22\x3E\x43\x44\x52\x20\x74\x79\x70\x65\x3C\x2F\x74\x64\x3E\x3C\x74\x64\x20\x63\x6C\x61\x73\x73\x3D\x22\x74\x64\x32\x22\x20\x69\x64\x3D\x22\x74\x64\x5F\x63\x75\x72\x5F\x63\x64\x72\x22\x3E\x3C\x2F\x74\x64\x3E\x3C\x2F\x74\x72\x3E\x0D\x0A\x09\x09\x3C\x74\x72\x20\x63\x6C\x61\x73\x73\x3D\x22\x74\x65\x78\x74\x5F\x72\x6F\x77\x22\x20\x3E\x3C\x74\x64\x20\x63\x6C\x61\x73\x73\x3D\x22\x74\x64\x31\x22\x3E\x4D\x41\x43\x20\x61\x64\x64\x72\x65\x73\x73\x3C\x2F\x74\x64\x3E\x3C\x74\x64\x20\x63\x6C\x61\x73\x73\x3D\x22\x74\x64\x32\x22\x20\x69\x64\x3D\x22\x74\x64\x5F\x63\x75\x72\x5F\x6D\x61\x63\x22\x3E\x3C\x2F\x74\x64\x3E\x3C\x2F\x74\x72\x3E\x0D\x0A\x09\x09\x3C\x74\x72\x20\x63\x6C\x61\x73\x73\x3D\x22\x74\x65\x78\x74\x5F\x72\x6F\x77\x22\x20\x3E\x3C\x74\x64\x20\x63\x6C\x61\x73\x73\x3D\x22\x74\x64\x31\x22\x3E\x49\x50\x20\x61\x64\x64\x72\x65\x73\x73\x3C\x2F\x74\x64\x3E\x3C\x74\x64\x20\x63\x6C\x61\x73\x73\x3D\x22\x74\x64\x32\x22\x20\x69\x64\x3D\x22\x74\x64\x5F\x63\x75\x72\x5F\x69\x70\x22\x3E\x3C\x2F\x74\x64\x3E\x3C\x2F\x74\x72\x3E\x0D\x0A\x09\x09\x3C\x74\x72\x20\x63\x6C\x61\x73\x73\x3D\x22\x74\x65\x78\x74\x5F\x72\x6F\x77\x22\x20\x3E\x3C\x74\x64\x20\x63\x6C\x61\x73\x73\x3D\x22\x74\x64\x31\x22\x3E\x4E\x65\x74\x20\x4D\x61\x73\x6B\x3C\x2F\x74\x64\x3E\x3C\x74\x64\x20\x63\x6C\x61\x73\x73\x3D\x22\x74\x64\x32\x22\x20\x69\x64\x3D\x22\x74\x64\x5F\x63\x75\x72\x5F\x6D\x61\x73\x6B\x22\x3E\x3C\x2F\x74\x64\x3E\x3C\x2F\x74\x72\x3E\x0D\x0A\x09\x09\x3C\x74\x72\x20\x63\x6C\x61\x73\x73\x3D\x22\x74\x65\x78\x74\x5F\x72\x6F\x77\x22\x20\x3E\x3C\x74\x64\x20\x63\x6C\x61\x73\x73\x3D\x22\x74\x64\x31\x22\x3E\x44\x65\x66\x61\x75\x6C\x74\x20\x67\x61\x74\x65\x77\x61\x79\x3C\x2F\x74\x64\x3E\x3C\x74\x64\x20\x63\x6C\x61\x73\x73\x3D\x22\x74\x64\x32\x22\x20\x69\x64\x3D\x22\x74\x64\x5F\x63\x75\x72\x5F\x64\x72\x6F\x75\x74\x65\x22\x3E\x3C\x2F\x74\x64\x3E\x3C\x2F\x74\x72\x3E\x0D\x0A\x09\x3C\x2F\x74\x61\x62\x6C\x65\x3E\x0D\x0A\x09\x3C\x70\x3E\x0D\x0A\x49\x66\x20\x6C\x6F\x63\x61\x6C\x20\x73\x65\x74\x74\x69\x6E\x67\x20\x66\x69\x6C\x65\x20\x61\x76\x61\x69\x6C\x61\x62\x6C\x65\x2C\x20\x63\x75\x72\x72\x65\x6E\x74\x20\x69\x6E\x66\x6F\x72\x6D\x61\x74\x69\x6F\x6E\x20\x6D\x69\x67\x68\x74\x20\x62\x65\x20\x64\x69\x66\x66\x65\x72\x65\x6E\x74\x20\x77\x69\x74\x68\x20\x6F\x6E\x63\x68\x69\x70\x2D\x73\x65\x74\x74\x69\x6E\x67\x2E\x20\x54\x6F\x20\x66\x75\x6C\x6C\x79\x20\x65\x6E\x61\x62\x6C\x65\x20\x6F\x6E\x2D\x63\x68\x69\x70\x20\x73\x65\x74\x74\x69\x6E\x67\x2C\x20\x70\x6C\x65\x61\x73\x65\x20\x72\x65\x6D\x6F\x76\x65\x20\x74\x68\x65\x20\x73\x65\x74\x74\x69\x6E\x67\x20\x66\x69\x6C\x65\x20\x22\x2F\x6D\x69\x6D\x69\x63\x2E\x63\x66\x67\x22\x20\x69\x6E\x20\x6D\x62\x65\x64\x20\x20\x6C\x6F\x63\x61\x6C\x20\x66\x69\x6C\x65\x20\x73\x79\x73\x74\x65\x6D\x20\x6F\x72\x20\x53\x44\x63\x61\x72\x64\x20\x66\x69\x6C\x65\x20\x73\x79\x73\x74\x65\x6D\x2E\x0D\x0A\x09\x3C\x2F\x70\x3E\x0D\x0A\x09\x0D\x0A\x09\x3C\x68\x32\x3E\x45\x74\x68\x65\x72\x6E\x65\x74\x3C\x2F\x68\x32\x3E\x0D\x0A\x09\x3C\x74\x61\x62\x6C\x65\x20\x63\x6C\x61\x73\x73\x3D\x22\x74\x61\x62\x6C\x65\x22\x3E\x0D\x0A\x09\x09\x3C\x74\x72\x20\x63\x6C\x61\x73\x73\x3D\x22\x69\x6E\x70\x75\x74\x5F\x72\x6F\x77\x22\x3E\x3C\x74\x64\x20\x63\x6C\x61\x73\x73\x3D\x22\x74\x64\x31\x22\x3E\x4D\x41\x43\x20\x61\x64\x64\x72\x65\x73\x73\x3C\x2F\x74\x64\x3E\x3C\x74\x64\x3E\x3C\x69\x6E\x70\x75\x74\x20\x69\x64\x3D\x22\x6D\x61\x63\x61\x64\x64\x72\x69\x6E\x70\x75\x74\x22\x20\x74\x79\x70\x65\x3D\x22\x74\x65\x78\x74\x22\x2F\x3E\x3C\x2F\x74\x64\x3E\x3C\x2F\x74\x72\x3E\x0D\x0A\x09\x09\x3C\x74\x72\x20\x63\x6C\x61\x73\x73\x3D\x22\x69\x6E\x70\x75\x74\x5F\x72\x6F\x77\x22\x3E\x3C\x74\x64\x20\x63\x6C\x61\x73\x73\x3D\x22\x74\x64\x31\x22\x3E\x49\x50\x20\x61\x64\x64\x72\x65\x73\x73\x3C\x2F\x74\x64\x3E\x3C\x74\x64\x3E\x3C\x69\x6E\x70\x75\x74\x20\x69\x64\x3D\x22\x69\x70\x69\x6E\x70\x75\x74\x22\x20\x74\x79\x70\x65\x3D\x22\x74\x65\x78\x74\x22\x2F\x3E\x3C\x2F\x74\x64\x3E\x3C\x2F\x74\x72\x3E\x0D\x0A\x09\x09\x3C\x74\x72\x20\x63\x6C\x61\x73\x73\x3D\x22\x69\x6E\x70\x75\x74\x5F\x72\x6F\x77\x22\x3E\x3C\x74\x64\x20\x63\x6C\x61\x73\x73\x3D\x22\x74\x64\x31\x22\x3E\x53\x75\x62\x6E\x65\x74\x20\x6D\x61\x73\x6B\x3C\x2F\x74\x64\x3E\x3C\x74\x64\x3E\x3C\x69\x6E\x70\x75\x74\x20\x69\x64\x3D\x22\x73\x75\x62\x6E\x65\x74\x69\x6E\x70\x75\x74\x22\x20\x74\x79\x70\x65\x3D\x22\x74\x65\x78\x74\x22\x2F\x3E\x3C\x2F\x74\x64\x3E\x3C\x2F\x74\x72\x3E\x0D\x0A\x09\x09\x3C\x74\x72\x20\x63\x6C\x61\x73\x73\x3D\x22\x69\x6E\x70\x75\x74\x5F\x72\x6F\x77\x22\x3E\x3C\x74\x64\x20\x63\x6C\x61\x73\x73\x3D\x22\x74\x64\x31\x22\x3E\x44\x65\x66\x61\x75\x6C\x74\x20\x67\x61\x74\x65\x77\x61\x79\x3C\x2F\x74\x64\x3E\x3C\x74\x64\x3E\x3C\x69\x6E\x70\x75\x74\x20\x69\x64\x3D\x22\x64\x67\x69\x6E\x70\x75\x74\x22\x20\x74\x79\x70\x65\x3D\x22\x74\x65\x78\x74\x22\x2F\x3E\x3C\x2F\x74\x64\x3E\x3C\x2F\x74\x72\x3E\x0D\x0A\x09\x3C\x2F\x74\x61\x62\x6C\x65\x3E\x0D\x0A\x09\x3C\x68\x32\x3E\x53\x65\x63\x75\x72\x69\x74\x79\x28\x75\x6E\x73\x75\x70\x70\x6F\x72\x74\x65\x64\x29\x3C\x2F\x68\x32\x3E\x0D\x0A\x09\x3C\x74\x61\x62\x6C\x65\x20\x63\x6C\x61\x73\x73\x3D\x22\x74\x61\x62\x6C\x65\x22\x3E\x0D\x0A\x09\x09\x3C\x74\x72\x20\x63\x6C\x61\x73\x73\x3D\x22\x69\x6E\x70\x75\x74\x5F\x72\x6F\x77\x22\x3E\x3C\x74\x64\x20\x63\x6C\x61\x73\x73\x3D\x22\x74\x64\x31\x22\x3E\x73\x65\x74\x75\x70\x2E\x61\x70\x69\x3C\x2F\x74\x64\x3E\x3C\x74\x64\x3E\x3C\x73\x65\x6C\x65\x63\x74\x20\x69\x64\x3D\x22\x73\x65\x74\x75\x70\x73\x65\x6C\x65\x63\x74\x22\x20\x73\x74\x79\x6C\x65\x3D\x22\x76\x69\x73\x69\x62\x69\x6C\x69\x74\x79\x3A\x68\x69\x64\x64\x65\x6E\x22\x3E\x3C\x6F\x70\x74\x69\x6F\x6E\x20\x76\x61\x6C\x75\x65\x3D\x22\x30\x22\x3E\x53\x75\x62\x6E\x65\x74\x20\x6F\x6E\x6C\x79\x3C\x2F\x6F\x70\x74\x69\x6F\x6E\x3E\x3C\x6F\x70\x74\x69\x6F\x6E\x20\x76\x61\x6C\x75\x65\x3D\x22\x31\x22\x3E\x41\x6C\x6C\x3C\x2F\x6F\x70\x74\x69\x6F\x6E\x3E\x3C\x2F\x73\x65\x6C\x65\x63\x74\x3E\x3C\x2F\x64\x69\x76\x3E\x0D\x0A\x09\x09\x3C\x74\x72\x20\x63\x6C\x61\x73\x73\x3D\x22\x69\x6E\x70\x75\x74\x5F\x72\x6F\x77\x22\x3E\x3C\x74\x64\x20\x63\x6C\x61\x73\x73\x3D\x22\x74\x64\x31\x22\x3E\x6D\x76\x6D\x2E\x61\x70\x69\x3C\x2F\x74\x64\x3E\x3C\x74\x64\x3E\x3C\x73\x65\x6C\x65\x63\x74\x20\x69\x64\x3D\x22\x6D\x76\x6D\x73\x65\x6C\x65\x63\x74\x22\x20\x73\x74\x79\x6C\x65\x3D\x22\x76\x69\x73\x69\x62\x69\x6C\x69\x74\x79\x3A\x68\x69\x64\x64\x65\x6E\x22\x3E\x3C\x6F\x70\x74\x69\x6F\x6E\x20\x76\x61\x6C\x75\x65\x3D\x22\x30\x22\x3E\x53\x75\x62\x6E\x65\x74\x20\x6F\x6E\x6C\x79\x3C\x2F\x6F\x70\x74\x69\x6F\x6E\x3E\x3C\x6F\x70\x74\x69\x6F\x6E\x20\x76\x61\x6C\x75\x65\x3D\x22\x31\x22\x3E\x41\x6C\x6C\x3C\x2F\x6F\x70\x74\x69\x6F\x6E\x3E\x3C\x2F\x73\x65\x6C\x65\x63\x74\x3E\x3C\x2F\x64\x69\x76\x3E\x0D\x0A\x09\x3C\x2F\x74\x61\x62\x6C\x65\x3E\x0D\x0A\x09\x3C\x62\x72\x2F\x3E\x0D\x0A\x09\x3C\x62\x72\x2F\x3E\x0D\x0A\x09\x3C\x62\x75\x74\x74\x6F\x6E\x20\x69\x64\x3D\x22\x75\x70\x64\x61\x74\x65\x62\x74\x6E\x22\x3E\x55\x70\x64\x61\x74\x65\x3C\x2F\x62\x75\x74\x74\x6F\x6E\x3E\x0D\x0A\x09\x3C\x62\x75\x74\x74\x6F\x6E\x20\x69\x64\x3D\x22\x63\x61\x6E\x63\x65\x6C\x22\x3E\x43\x61\x6E\x63\x65\x6C\x3C\x2F\x62\x75\x74\x74\x6F\x6E\x3E\x0D\x0A\x3C\x64\x69\x76\x20\x63\x6C\x61\x73\x73\x3D\x22\x66\x6F\x6F\x74\x65\x72\x22\x3E\x0D\x0A\x3C\x61\x20\x68\x72\x65\x66\x3D\x22\x68\x74\x74\x70\x3A\x2F\x2F\x6E\x79\x61\x74\x6C\x61\x2E\x6A\x70\x2F\x6D\x69\x6D\x69\x63\x2F\x77\x70\x22\x20\x61\x6C\x74\x3D\x22\x68\x74\x74\x70\x3A\x2F\x2F\x6E\x79\x61\x74\x6C\x61\x2E\x6A\x70\x2F\x6D\x69\x6D\x69\x63\x2F\x77\x70\x22\x3E\x0D\x0A\x3C\x69\x6D\x67\x20\x73\x72\x63\x3D\x22\x2E\x2F\x6D\x69\x6D\x69\x63\x6C\x6F\x67\x6F\x2E\x70\x6E\x67\x22\x2F\x3E\x3C\x2F\x61\x3E\x0D\x0A\x4D\x69\x4D\x69\x63\x3C\x62\x72\x2F\x3E\x0D\x0A\x43\x6F\x70\x79\x72\x69\x67\x68\x74\x20\x28\x43\x29\x20\x32\x30\x31\x31\x2D\x32\x30\x31\x33\x20\x6E\x79\x61\x74\x6C\x61\x2E\x6A\x70\x20\x41\x6C\x6C\x20\x52\x69\x67\x68\x74\x73\x20\x52\x65\x73\x65\x72\x76\x65\x64\x2E\x0D\x0A\x3C\x2F\x64\x69\x76\x3E\x0D\x0A\x3C\x2F\x62\x6F\x64\x79\x3E\x0D\x0A"\r
+ "\x3C\x68\x74\x6D\x6C\x3E\x0D\x0A\x3C\x68\x65\x61\x64\x3E\x0D\x0A\x3C\x6D\x65\x74\x61\x20\x68\x74\x74\x70\x2D\x65\x71\x75\x69\x76\x3D\x22\x43\x6F\x6E\x74\x65\x6E\x74\x2D\x54\x79\x70\x65\x22\x20\x63\x6F\x6E\x74\x65\x6E\x74\x3D\x22\x74\x65\x78\x74\x2F\x68\x74\x6D\x6C\x3B\x20\x63\x68\x61\x72\x73\x65\x74\x3D\x55\x54\x46\x2D\x38\x22\x3E\x0D\x0A\x3C\x6C\x69\x6E\x6B\x20\x68\x72\x65\x66\x3D\x22\x2E\x2F\x6D\x69\x6D\x69\x63\x2E\x63\x73\x73\x22\x20\x72\x65\x6C\x3D\x22\x73\x74\x79\x6C\x65\x73\x68\x65\x65\x74\x22\x20\x74\x79\x70\x65\x3D\x22\x74\x65\x78\x74\x2F\x63\x73\x73\x22\x3E\x0D\x0A\x3C\x73\x63\x72\x69\x70\x74\x20\x73\x72\x63\x3D\x22\x2E\x2F\x73\x6C\x69\x62\x2E\x6A\x73\x22\x3E\x3C\x2F\x73\x63\x72\x69\x70\x74\x3E\x0D\x0A\x0D\x0A\x3C\x73\x74\x79\x6C\x65\x20\x69\x64\x3D\x22\x75\x73\x65\x72\x2D\x73\x74\x79\x6C\x65\x2D\x6E\x79\x61\x74\x6C\x61\x2D\x62\x67\x2D\x69\x6D\x67\x22\x3E\x0D\x0A\x09\x62\x6F\x64\x79\x7B\x0D\x0A\x09\x09\x77\x69\x64\x74\x68\x3A\x39\x35\x25\x3B\x0D\x0A\x09\x09\x68\x65\x69\x67\x68\x74\x3A\x39\x35\x25\x3B\x0D\x0A\x09\x7D\x0D\x0A\x09\x62\x75\x74\x74\x6F\x6E\x7B\x0D\x0A\x09\x09\x66\x6F\x6E\x74\x2D\x77\x65\x69\x67\x68\x74\x3A\x62\x6F\x6C\x64\x3B\x0D\x0A\x09\x09\x74\x65\x78\x74\x2D\x61\x6C\x69\x67\x6E\x3A\x63\x65\x6E\x74\x65\x72\x3B\x0D\x0A\x09\x09\x66\x6F\x6E\x74\x2D\x73\x69\x7A\x65\x3A\x31\x32\x70\x78\x3B\x0D\x0A\x09\x09\x70\x61\x64\x64\x69\x6E\x67\x3A\x30\x70\x78\x3B\x0D\x0A\x09\x09\x77\x69\x64\x74\x68\x3A\x36\x30\x70\x78\x3B\x68\x65\x69\x67\x68\x74\x3A\x34\x30\x70\x78\x3B\x0D\x0A\x09\x7D\x0D\x0A\x09\x2E\x65\x78\x70\x7B\x0D\x0A\x09\x09\x66\x6F\x6E\x74\x2D\x73\x69\x7A\x65\x3A\x39\x70\x78\x3B\x0D\x0A\x09\x7D\x0D\x0A\x09\x2E\x74\x61\x62\x6C\x65\x31\x2C\x70\x7B\x0D\x0A\x09\x09\x77\x69\x64\x74\x68\x3A\x34\x38\x30\x70\x78\x3B\x0D\x0A\x09\x7D\x0D\x0A\x09\x2E\x74\x61\x62\x6C\x65\x31\x20\x74\x72\x0D\x0A\x09\x7B\x0D\x0A\x09\x09\x68\x65\x69\x67\x68\x74\x3A\x32\x35\x70\x78\x3B\x0D\x0A\x09\x09\x62\x61\x63\x6B\x67\x72\x6F\x75\x6E\x64\x2D\x63\x6F\x6C\x6F\x72\x3A\x23\x34\x31\x36\x39\x45\x31\x3B\x0D\x0A\x09\x09\x63\x6F\x6C\x6F\x72\x3A\x77\x68\x69\x74\x65\x3B\x0D\x0A\x09\x09\x62\x6F\x72\x64\x65\x72\x3A\x73\x6F\x6C\x69\x64\x20\x31\x70\x78\x20\x23\x61\x61\x61\x61\x61\x61\x3B\x0D\x0A\x09\x09\x66\x6F\x6E\x74\x2D\x77\x65\x69\x67\x68\x74\x3A\x62\x6F\x6C\x64\x3B\x0D\x0A\x09\x7D\x0D\x0A\x09\x2E\x74\x61\x62\x6C\x65\x31\x20\x74\x64\x0D\x0A\x09\x7B\x0D\x0A\x09\x09\x6D\x61\x72\x67\x69\x6E\x3A\x32\x70\x78\x20\x32\x70\x78\x20\x32\x70\x78\x20\x32\x70\x78\x3B\x0D\x0A\x09\x09\x70\x61\x64\x64\x69\x6E\x67\x3A\x32\x70\x78\x20\x32\x70\x78\x20\x32\x70\x78\x20\x32\x70\x78\x3B\x0D\x0A\x09\x09\x66\x6F\x6E\x74\x2D\x73\x69\x7A\x65\x3A\x31\x32\x70\x78\x3B\x0D\x0A\x09\x7D\x0D\x0A\x09\x2E\x74\x61\x62\x6C\x65\x31\x20\x2E\x63\x6F\x6C\x31\x7B\x0D\x0A\x09\x09\x77\x69\x64\x74\x68\x3A\x31\x32\x30\x70\x78\x3B\x0D\x0A\x09\x7D\x0D\x0A\x09\x2E\x74\x61\x62\x6C\x65\x31\x20\x70\x7B\x0D\x0A\x09\x09\x66\x6F\x6E\x74\x2D\x77\x65\x69\x67\x68\x74\x3A\x6E\x6F\x72\x6D\x61\x6C\x3B\x0D\x0A\x09\x09\x77\x69\x64\x74\x68\x3A\x31\x30\x30\x25\x3B\x0D\x0A\x09\x7D\x0D\x0A\x09\x69\x6E\x70\x75\x74\x2C\x73\x65\x6C\x65\x63\x74\x0D\x0A\x09\x7B\x0D\x0A\x09\x09\x62\x6F\x72\x64\x65\x72\x3A\x73\x6F\x6C\x69\x64\x20\x31\x70\x78\x20\x23\x61\x61\x61\x61\x61\x61\x3B\x0D\x0A\x09\x7D\x0D\x0A\x09\x2E\x74\x61\x62\x6C\x65\x31\x20\x69\x6E\x70\x75\x74\x2C\x73\x65\x6C\x65\x63\x74\x0D\x0A\x09\x7B\x0D\x0A\x09\x09\x77\x69\x64\x74\x68\x3A\x32\x30\x30\x70\x78\x3B\x0D\x0A\x09\x7D\x0D\x0A\x09\x2E\x74\x61\x62\x6C\x65\x32\x20\x69\x6E\x70\x75\x74\x0D\x0A\x09\x7B\x0D\x0A\x09\x09\x77\x69\x64\x74\x68\x3A\x31\x30\x30\x70\x78\x3B\x0D\x0A\x09\x7D\x0D\x0A\x3C\x2F\x73\x74\x79\x6C\x65\x3E\x0D\x0A\x3C\x73\x63\x72\x69\x70\x74\x20\x74\x79\x70\x65\x3D\x22\x74\x65\x78\x74\x2F\x6A\x61\x76\x61\x73\x63\x72\x69\x70\x74\x22\x3E\x0D\x0A\x0D\x0A\x76\x61\x72\x20\x61\x70\x70\x3B\x0D\x0A\x66\x75\x6E\x63\x74\x69\x6F\x6E\x20\x67\x65\x74\x45\x6C\x65\x6D\x28\x69\x64\x29\x7B\x72\x65\x74\x75\x72\x6E\x20\x64\x6F\x63\x75\x6D\x65\x6E\x74\x2E\x67\x65\x74\x45\x6C\x65\x6D\x65\x6E\x74\x42\x79\x49\x64\x28\x69\x64\x29\x3B\x7D\x0D\x0A\x0D\x0A\x66\x75\x6E\x63\x74\x69\x6F\x6E\x20\x73\x74\x72\x32\x48\x65\x78\x41\x72\x72\x61\x79\x28\x69\x5F\x73\x74\x72\x2C\x64\x65\x6C\x69\x6D\x2C\x6C\x65\x6E\x2C\x64\x69\x67\x69\x74\x29\x0D\x0A\x7B\x0D\x0A\x09\x76\x61\x72\x20\x6C\x3D\x69\x5F\x73\x74\x72\x2E\x73\x70\x6C\x69\x74\x28\x64\x65\x6C\x69\x6D\x29\x3B\x0D\x0A\x09\x69\x66\x28\x6C\x2E\x6C\x65\x6E\x67\x74\x68\x3D\x3D\x6C\x65\x6E\x29\x7B\x0D\x0A\x09\x09\x76\x61\x72\x20\x72\x3D\x6E\x65\x77\x20\x41\x72\x72\x61\x79\x28\x29\x3B\x0D\x0A\x09\x09\x66\x6F\x72\x28\x76\x61\x72\x20\x69\x3D\x30\x3B\x69\x3C\x6C\x65\x6E\x3B\x69\x2B\x2B\x29\x7B\x0D\x0A\x09\x09\x09\x76\x61\x72\x20\x76\x3D\x70\x61\x72\x73\x65\x49\x6E\x74\x28\x6C\x5B\x69\x5D\x2C\x64\x69\x67\x69\x74\x29\x3B\x0D\x0A\x09\x09\x09\x69\x66\x28\x21\x69\x73\x4E\x61\x4E\x28\x76\x29\x20\x26\x26\x20\x76\x3E\x3D\x30\x20\x26\x26\x20\x76\x3C\x3D\x32\x35\x35\x29\x7B\x0D\x0A\x09\x09\x09\x09\x72\x2E\x70\x75\x73\x68\x28\x76\x29\x3B\x0D\x0A\x09\x09\x09\x7D\x65\x6C\x73\x65\x7B\x0D\x0A\x09\x09\x09\x09\x74\x68\x72\x6F\x77\x20\x22\x73\x74\x72\x32\x48\x65\x78\x41\x72\x72\x61\x79\x20\x66\x61\x69\x6C\x65\x64\x2E\x22\x3B\x0D\x0A\x09\x09\x09\x7D\x0D\x0A\x09\x09\x7D\x0D\x0A\x09\x09\x72\x65\x74\x75\x72\x6E\x20\x72\x3B\x0D\x0A\x09\x7D\x0D\x0A\x09\x74\x68\x72\x6F\x77\x20\x22\x73\x74\x72\x32\x48\x65\x78\x41\x72\x72\x61\x79\x20\x66\x61\x69\x6C\x65\x64\x2E\x22\x3B\x0D\x0A\x7D\x0D\x0A\x0D\x0A\x66\x75\x6E\x63\x74\x69\x6F\x6E\x20\x69\x6E\x74\x32\x68\x65\x78\x28\x76\x2C\x64\x29\x7B\x76\x61\x72\x20\x72\x3D\x76\x2E\x74\x6F\x53\x74\x72\x69\x6E\x67\x28\x31\x36\x29\x3B\x77\x68\x69\x6C\x65\x28\x72\x2E\x6C\x65\x6E\x67\x74\x68\x3C\x64\x29\x7B\x72\x3D\x22\x30\x22\x2B\x72\x3B\x7D\x72\x65\x74\x75\x72\x6E\x20\x72\x3B\x7D\x0D\x0A\x66\x75\x6E\x63\x74\x69\x6F\x6E\x20\x69\x6E\x74\x32\x68\x65\x78\x32\x28\x76\x29\x7B\x72\x65\x74\x75\x72\x6E\x20\x69\x6E\x74\x32\x68\x65\x78\x28\x76\x2C\x32\x29\x3B\x7D\x0D\x0A\x66\x75\x6E\x63\x74\x69\x6F\x6E\x20\x61\x72\x72\x61\x79\x54\x6F\x48\x65\x78\x28\x61\x72\x29\x0D\x0A\x7B\x0D\x0A\x09\x69\x66\x28\x61\x72\x3D\x3D\x6E\x75\x6C\x6C\x29\x7B\x72\x65\x74\x75\x72\x6E\x20\x6E\x75\x6C\x6C\x3B\x7D\x0D\x0A\x09\x76\x61\x72\x20\x72\x65\x74\x3D\x22\x22\x3B\x0D\x0A\x09\x66\x6F\x72\x28\x76\x61\x72\x20\x69\x3D\x30\x3B\x69\x3C\x61\x72\x2E\x6C\x65\x6E\x67\x74\x68\x3B\x69\x2B\x2B\x29\x7B\x0D\x0A\x09\x09\x72\x65\x74\x2B\x3D\x69\x6E\x74\x32\x68\x65\x78\x32\x28\x61\x72\x5B\x69\x5D\x29\x3B\x0D\x0A\x09\x7D\x0D\x0A\x09\x72\x65\x74\x75\x72\x6E\x20\x72\x65\x74\x3B\x0D\x0A\x7D\x0D\x0A\x66\x75\x6E\x63\x74\x69\x6F\x6E\x20\x69\x6E\x74\x32\x73\x74\x72\x28\x76\x61\x6C\x29\x7B\x72\x65\x74\x75\x72\x6E\x20\x76\x61\x6C\x2E\x74\x6F\x53\x74\x72\x69\x6E\x67\x28\x31\x30\x29\x3B\x7D\x0D\x0A\x66\x75\x6E\x63\x74\x69\x6F\x6E\x20\x69\x6E\x74\x32\x49\x70\x41\x64\x64\x72\x28\x76\x29\x7B\x72\x65\x74\x75\x72\x6E\x20\x69\x6E\x74\x32\x73\x74\x72\x28\x28\x76\x3E\x3E\x32\x34\x29\x26\x30\x78\x66\x66\x29\x2B\x22\x2E\x22\x2B\x69\x6E\x74\x32\x73\x74\x72\x28\x28\x76\x3E\x3E\x31\x36\x29\x26\x30\x78\x66\x66\x29\x2B\x22\x2E\x22\x2B\x69\x6E\x74\x32\x73\x74\x72\x28\x28\x76\x3E\x3E\x38\x29\x26\x30\x78\x66\x66\x29\x2B\x22\x2E\x22\x2B\x69\x6E\x74\x32\x73\x74\x72\x28\x28\x76\x3E\x3E\x30\x29\x26\x30\x78\x66\x66\x29\x3B\x7D\x0D\x0A\x66\x75\x6E\x63\x74\x69\x6F\x6E\x20\x69\x6E\x74\x32\x4D\x61\x63\x41\x64\x64\x72\x28\x76\x31\x2C\x76\x32\x29\x7B\x72\x65\x74\x75\x72\x6E\x20\x69\x6E\x74\x32\x68\x65\x78\x32\x28\x28\x76\x31\x3E\x3E\x32\x34\x29\x26\x30\x78\x66\x66\x29\x2B\x22\x3A\x22\x2B\x69\x6E\x74\x32\x68\x65\x78\x32\x28\x28\x76\x31\x3E\x3E\x31\x36\x29\x26\x30\x78\x66\x66\x29\x2B\x22\x3A\x22\x2B\x69\x6E\x74\x32\x68\x65\x78\x32\x28\x28\x76\x31\x3E\x3E\x38\x29\x26\x30\x78\x66\x66\x29\x2B\x22\x3A\x22\x2B\x69\x6E\x74\x32\x68\x65\x78\x32\x28\x28\x76\x31\x3E\x3E\x30\x29\x26\x30\x78\x66\x66\x29\x2B\x22\x3A\x22\x2B\x69\x6E\x74\x32\x68\x65\x78\x32\x28\x28\x76\x32\x3E\x3E\x32\x34\x29\x26\x30\x78\x66\x66\x29\x2B\x22\x3A\x22\x2B\x69\x6E\x74\x32\x68\x65\x78\x32\x28\x28\x76\x32\x3E\x3E\x31\x36\x29\x26\x30\x78\x66\x66\x29\x3B\x7D\x0D\x0A\x0D\x0A\x76\x61\x72\x20\x55\x69\x3D\x6E\x65\x77\x20\x4F\x62\x6A\x65\x63\x74\x28\x29\x3B\x0D\x0A\x55\x69\x2E\x49\x70\x41\x64\x64\x72\x49\x6E\x70\x75\x74\x3D\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x69\x64\x29\x0D\x0A\x7B\x0D\x0A\x09\x76\x61\x72\x20\x5F\x74\x3D\x74\x68\x69\x73\x3B\x0D\x0A\x09\x5F\x74\x2E\x5F\x74\x61\x67\x73\x3D\x7B\x0D\x0A\x09\x09\x69\x6E\x70\x75\x74\x3A\x67\x65\x74\x45\x6C\x65\x6D\x28\x69\x64\x29\x0D\x0A\x09\x7D\x3B\x0D\x0A\x09\x5F\x74\x2E\x67\x65\x74\x49\x70\x41\x64\x64\x72\x3D\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x29\x7B\x0D\x0A\x09\x09\x09\x72\x65\x74\x75\x72\x6E\x20\x73\x74\x72\x32\x48\x65\x78\x41\x72\x72\x61\x79\x28\x5F\x74\x2E\x5F\x74\x61\x67\x73\x2E\x69\x6E\x70\x75\x74\x2E\x76\x61\x6C\x75\x65\x2C\x22\x2E\x22\x2C\x34\x2C\x31\x30\x29\x3B\x0D\x0A\x09\x7D\x0D\x0A\x09\x5F\x74\x2E\x67\x65\x74\x54\x65\x78\x74\x3D\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x29\x7B\x0D\x0A\x09\x09\x72\x65\x74\x75\x72\x6E\x20\x5F\x74\x2E\x5F\x74\x61\x67\x73\x2E\x69\x6E\x70\x75\x74\x2E\x76\x61\x6C\x75\x65\x3B\x0D\x0A\x09\x7D\x0D\x0A\x09\x5F\x74\x2E\x73\x65\x74\x49\x70\x56\x61\x6C\x75\x65\x3D\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x76\x31\x29\x0D\x0A\x09\x7B\x0D\x0A\x09\x09\x5F\x74\x2E\x5F\x74\x61\x67\x73\x2E\x69\x6E\x70\x75\x74\x2E\x76\x61\x6C\x75\x65\x3D\x69\x6E\x74\x32\x49\x70\x41\x64\x64\x72\x28\x76\x31\x29\x3B\x0D\x0A\x09\x7D\x0D\x0A\x7D\x0D\x0A\x55\x69\x2E\x49\x70\x53\x65\x74\x74\x69\x6E\x67\x3D\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x69\x64\x29\x0D\x0A\x7B\x0D\x0A\x09\x76\x61\x72\x20\x5F\x74\x3D\x74\x68\x69\x73\x3B\x0D\x0A\x09\x5F\x74\x2E\x5F\x74\x61\x67\x73\x3D\x7B\x0D\x0A\x09\x09\x6D\x6F\x64\x65\x3A\x67\x65\x74\x45\x6C\x65\x6D\x28\x69\x64\x2B\x22\x5F\x6D\x6F\x64\x65\x22\x29\x2C\x0D\x0A\x09\x09\x64\x69\x76\x3A\x67\x65\x74\x45\x6C\x65\x6D\x28\x69\x64\x2B\x22\x5F\x64\x69\x76\x22\x29\x0D\x0A\x09\x7D\x3B\x0D\x0A\x09\x5F\x74\x2E\x65\x76\x65\x6E\x74\x73\x3D\x7B\x0D\x0A\x09\x09\x6F\x6E\x63\x68\x61\x6E\x67\x65\x3A\x6E\x75\x6C\x6C\x0D\x0A\x09\x7D\x3B\x0D\x0A\x09\x5F\x74\x2E\x61\x64\x64\x72\x3D\x6E\x65\x77\x20\x55\x69\x2E\x49\x70\x41\x64\x64\x72\x49\x6E\x70\x75\x74\x28\x69\x64\x2B\x22\x5F\x61\x64\x64\x72\x22\x29\x3B\x0D\x0A\x09\x5F\x74\x2E\x6D\x61\x73\x6B\x3D\x6E\x65\x77\x20\x55\x69\x2E\x49\x70\x41\x64\x64\x72\x49\x6E\x70\x75\x74\x28\x69\x64\x2B\x22\x5F\x6D\x61\x73\x6B\x22\x29\x3B\x0D\x0A\x09\x5F\x74\x2E\x67\x77\x3D\x6E\x65\x77\x20\x55\x69\x2E\x49\x70\x41\x64\x64\x72\x49\x6E\x70\x75\x74\x28\x69\x64\x2B\x22\x5F\x64\x65\x66\x67\x77\x22\x29\x3B\x0D\x0A\x09\x5F\x74\x2E\x5F\x74\x61\x67\x73\x2E\x6D\x6F\x64\x65\x2E\x61\x64\x64\x45\x76\x65\x6E\x74\x4C\x69\x73\x74\x65\x6E\x65\x72\x28\x22\x63\x68\x61\x6E\x67\x65\x22\x2C\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x29\x0D\x0A\x09\x7B\x0D\x0A\x09\x09\x5F\x74\x2E\x5F\x74\x61\x67\x73\x2E\x64\x69\x76\x2E\x73\x74\x79\x6C\x65\x2E\x76\x69\x73\x69\x62\x69\x6C\x69\x74\x79\x3D\x28\x5F\x74\x2E\x5F\x74\x61\x67\x73\x2E\x6D\x6F\x64\x65\x2E\x73\x65\x6C\x65\x63\x74\x65\x64\x49\x6E\x64\x65\x78\x3D\x3D\x30\x29\x3F\x22\x76\x69\x73\x69\x62\x6C\x65\x22\x3A\x22\x68\x69\x64\x64\x65\x6E\x22\x3B\x0D\x0A\x09\x09\x69\x66\x28\x5F\x74\x2E\x65\x76\x65\x6E\x74\x73\x2E\x6F\x6E\x63\x68\x61\x6E\x67\x65\x21\x3D\x6E\x75\x6C\x6C\x29\x7B\x0D\x0A\x09\x09\x09\x5F\x74\x2E\x65\x76\x65\x6E\x74\x73\x2E\x6F\x6E\x63\x68\x61\x6E\x67\x65\x28\x5F\x74\x2E\x5F\x74\x61\x67\x73\x2E\x6D\x6F\x64\x65\x2E\x73\x65\x6C\x65\x63\x74\x65\x64\x49\x6E\x64\x65\x78\x29\x3B\x0D\x0A\x09\x09\x7D\x0D\x0A\x09\x7D\x29\x3B\x0D\x0A\x09\x5F\x74\x2E\x73\x65\x74\x56\x61\x6C\x75\x65\x3D\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x76\x29\x0D\x0A\x09\x7B\x0D\x0A\x09\x09\x5F\x74\x2E\x5F\x74\x61\x67\x73\x2E\x6D\x6F\x64\x65\x2E\x73\x65\x6C\x65\x63\x74\x65\x64\x49\x6E\x64\x65\x78\x3D\x28\x76\x2E\x66\x6C\x61\x67\x73\x20\x26\x20\x30\x78\x30\x33\x29\x3B\x0D\x0A\x09\x09\x5F\x74\x2E\x5F\x74\x61\x67\x73\x2E\x64\x69\x76\x2E\x73\x74\x79\x6C\x65\x2E\x76\x69\x73\x69\x62\x69\x6C\x69\x74\x79\x3D\x28\x5F\x74\x2E\x5F\x74\x61\x67\x73\x2E\x6D\x6F\x64\x65\x2E\x73\x65\x6C\x65\x63\x74\x65\x64\x49\x6E\x64\x65\x78\x3D\x3D\x30\x29\x3F\x22\x76\x69\x73\x69\x62\x6C\x65\x22\x3A\x22\x68\x69\x64\x64\x65\x6E\x22\x3B\x0D\x0A\x09\x09\x5F\x74\x2E\x61\x64\x64\x72\x2E\x73\x65\x74\x49\x70\x56\x61\x6C\x75\x65\x28\x76\x2E\x69\x70\x29\x3B\x0D\x0A\x09\x09\x5F\x74\x2E\x6D\x61\x73\x6B\x2E\x73\x65\x74\x49\x70\x56\x61\x6C\x75\x65\x28\x76\x2E\x6D\x61\x73\x6B\x29\x3B\x0D\x0A\x09\x09\x5F\x74\x2E\x67\x77\x2E\x73\x65\x74\x49\x70\x56\x61\x6C\x75\x65\x28\x76\x2E\x64\x72\x6F\x75\x74\x65\x29\x3B\x0D\x0A\x09\x7D\x3B\x0D\x0A\x09\x5F\x74\x2E\x67\x65\x74\x56\x61\x6C\x75\x65\x3D\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x29\x0D\x0A\x09\x7B\x0D\x0A\x09\x09\x76\x61\x72\x20\x72\x65\x74\x3D\x7B\x7D\x3B\x0D\x0A\x09\x09\x76\x61\x72\x20\x65\x72\x72\x3B\x0D\x0A\x09\x09\x74\x72\x79\x7B\x0D\x0A\x09\x09\x09\x65\x72\x72\x3D\x22\x49\x50\x20\x4D\x6F\x64\x65\x22\x3B\x0D\x0A\x09\x09\x09\x72\x65\x74\x2E\x66\x6C\x61\x67\x3D\x5F\x74\x2E\x5F\x74\x61\x67\x73\x2E\x6D\x6F\x64\x65\x2E\x73\x65\x6C\x65\x63\x74\x65\x64\x49\x6E\x64\x65\x78\x3B\x0D\x0A\x09\x09\x09\x65\x72\x72\x3D\x22\x49\x50\x20\x41\x64\x64\x72\x65\x73\x73\x22\x3B\x0D\x0A\x09\x09\x09\x72\x65\x74\x2E\x61\x64\x64\x72\x3D\x5F\x74\x2E\x61\x64\x64\x72\x2E\x67\x65\x74\x49\x70\x41\x64\x64\x72\x28\x29\x3B\x0D\x0A\x09\x09\x09\x65\x72\x72\x3D\x22\x49\x50\x20\x4D\x61\x73\x6B\x22\x3B\x0D\x0A\x09\x09\x09\x72\x65\x74\x2E\x6D\x61\x73\x6B\x3D\x5F\x74\x2E\x6D\x61\x73\x6B\x2E\x67\x65\x74\x49\x70\x41\x64\x64\x72\x28\x29\x3B\x0D\x0A\x09\x09\x09\x65\x72\x72\x3D\x22\x49\x50\x20\x47\x61\x74\x65\x77\x61\x79\x22\x3B\x0D\x0A\x09\x09\x09\x72\x65\x74\x2E\x67\x77\x3D\x5F\x74\x2E\x67\x77\x2E\x67\x65\x74\x49\x70\x41\x64\x64\x72\x28\x29\x3B\x0D\x0A\x09\x09\x09\x72\x65\x74\x75\x72\x6E\x20\x72\x65\x74\x3B\x0D\x0A\x09\x09\x7D\x63\x61\x74\x63\x68\x28\x65\x29\x7B\x0D\x0A\x09\x09\x09\x74\x68\x72\x6F\x77\x20\x22\x49\x6E\x76\x61\x6C\x69\x64\x20\x76\x61\x6C\x75\x65\x3A\x22\x2B\x65\x72\x72\x3B\x0D\x0A\x09\x09\x7D\x0D\x0A\x09\x7D\x0D\x0A\x7D\x0D\x0A\x55\x69\x2E\x4D\x61\x63\x41\x64\x64\x72\x3D\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x69\x64\x29\x0D\x0A\x7B\x0D\x0A\x09\x76\x61\x72\x20\x5F\x74\x3D\x74\x68\x69\x73\x3B\x0D\x0A\x09\x5F\x74\x2E\x5F\x74\x61\x67\x73\x3D\x7B\x0D\x0A\x09\x09\x69\x6E\x70\x75\x74\x3A\x67\x65\x74\x45\x6C\x65\x6D\x28\x69\x64\x29\x0D\x0A\x09\x7D\x3B\x0D\x0A\x09\x5F\x74\x2E\x67\x65\x74\x4D\x61\x63\x41\x64\x64\x72\x3D\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x29\x0D\x0A\x09\x7B\x0D\x0A\x09\x09\x74\x72\x79\x7B\x0D\x0A\x09\x09\x09\x72\x65\x74\x75\x72\x6E\x20\x73\x74\x72\x32\x48\x65\x78\x41\x72\x72\x61\x79\x28\x5F\x74\x2E\x5F\x74\x61\x67\x73\x2E\x69\x6E\x70\x75\x74\x2E\x76\x61\x6C\x75\x65\x2C\x22\x3A\x22\x2C\x36\x2C\x31\x36\x29\x3B\x0D\x0A\x09\x09\x7D\x63\x61\x74\x63\x68\x28\x65\x29\x7B\x0D\x0A\x09\x09\x09\x74\x68\x72\x6F\x77\x20\x22\x49\x6E\x76\x61\x6C\x69\x64\x20\x4D\x41\x43\x20\x61\x64\x64\x72\x65\x73\x73\x20\x27\x22\x2B\x5F\x74\x2E\x5F\x74\x61\x67\x73\x2E\x69\x6E\x70\x75\x74\x2E\x76\x61\x6C\x75\x65\x2B\x22\x27\x22\x3B\x0D\x0A\x09\x09\x7D\x0D\x0A\x09\x7D\x0D\x0A\x09\x5F\x74\x2E\x73\x65\x74\x4D\x61\x63\x56\x61\x6C\x75\x65\x3D\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x76\x31\x2C\x76\x32\x29\x0D\x0A\x09\x7B\x0D\x0A\x09\x09\x5F\x74\x2E\x5F\x74\x61\x67\x73\x2E\x69\x6E\x70\x75\x74\x2E\x76\x61\x6C\x75\x65\x3D\x69\x6E\x74\x32\x4D\x61\x63\x41\x64\x64\x72\x28\x76\x31\x2C\x76\x32\x29\x3B\x0D\x0A\x09\x7D\x0D\x0A\x7D\x0D\x0A\x55\x69\x2E\x48\x6F\x73\x74\x4E\x61\x6D\x65\x3D\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x69\x64\x29\x0D\x0A\x7B\x0D\x0A\x09\x76\x61\x72\x20\x5F\x74\x3D\x74\x68\x69\x73\x3B\x0D\x0A\x09\x5F\x74\x2E\x5F\x74\x61\x67\x73\x3D\x7B\x0D\x0A\x09\x09\x69\x6E\x70\x75\x74\x3A\x67\x65\x74\x45\x6C\x65\x6D\x28\x69\x64\x29\x0D\x0A\x09\x7D\x3B\x0D\x0A\x09\x5F\x74\x2E\x67\x65\x74\x56\x61\x6C\x75\x65\x3D\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x29\x0D\x0A\x09\x7B\x0D\x0A\x09\x09\x76\x61\x72\x20\x72\x3D\x5F\x74\x2E\x5F\x74\x61\x67\x73\x2E\x69\x6E\x70\x75\x74\x2E\x76\x61\x6C\x75\x65\x3B\x0D\x0A\x09\x09\x69\x66\x28\x72\x2E\x6C\x65\x6E\x67\x74\x68\x3C\x31\x20\x7C\x7C\x72\x2E\x6C\x65\x6E\x67\x74\x68\x3E\x33\x31\x20\x7C\x7C\x20\x72\x2E\x6D\x61\x74\x63\x68\x28\x2F\x5B\x5E\x28\x61\x2D\x7A\x30\x2D\x39\x5F\x29\x5D\x2F\x69\x29\x29\x7B\x0D\x0A\x09\x09\x09\x74\x68\x72\x6F\x77\x20\x22\x49\x6E\x76\x61\x6C\x69\x64\x20\x48\x6F\x73\x74\x20\x6E\x61\x6D\x65\x2E\x22\x0D\x0A\x09\x09\x7D\x0D\x0A\x09\x09\x72\x65\x74\x75\x72\x6E\x20\x72\x3B\x0D\x0A\x09\x7D\x2C\x0D\x0A\x09\x5F\x74\x2E\x73\x65\x74\x56\x61\x6C\x75\x65\x3D\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x76\x31\x29\x0D\x0A\x09\x7B\x0D\x0A\x09\x09\x5F\x74\x2E\x5F\x74\x61\x67\x73\x2E\x69\x6E\x70\x75\x74\x2E\x76\x61\x6C\x75\x65\x3D\x76\x31\x3B\x0D\x0A\x09\x7D\x0D\x0A\x7D\x0D\x0A\x55\x69\x2E\x53\x65\x72\x76\x69\x63\x65\x73\x3D\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x69\x64\x29\x0D\x0A\x7B\x0D\x0A\x09\x76\x61\x72\x20\x5F\x74\x3D\x74\x68\x69\x73\x3B\x0D\x0A\x09\x5F\x74\x2E\x5F\x74\x61\x67\x73\x3D\x7B\x0D\x0A\x09\x09\x68\x74\x74\x70\x5F\x70\x6F\x72\x74\x3A\x67\x65\x74\x45\x6C\x65\x6D\x28\x69\x64\x2B\x22\x5F\x68\x74\x74\x70\x5F\x70\x6F\x72\x74\x22\x29\x2C\x0D\x0A\x09\x09\x6D\x64\x6E\x73\x3A\x67\x65\x74\x45\x6C\x65\x6D\x28\x69\x64\x2B\x22\x5F\x6D\x64\x6E\x73\x5F\x73\x77\x22\x29\x0D\x0A\x09\x7D\x3B\x0D\x0A\x09\x5F\x74\x2E\x67\x65\x74\x56\x61\x6C\x75\x65\x3D\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x29\x0D\x0A\x09\x7B\x0D\x0A\x09\x09\x76\x61\x72\x20\x72\x3D\x7B\x0D\x0A\x09\x09\x09\x70\x6F\x72\x74\x3A\x70\x61\x72\x73\x65\x49\x6E\x74\x28\x5F\x74\x2E\x5F\x74\x61\x67\x73\x2E\x68\x74\x74\x70\x5F\x70\x6F\x72\x74\x2E\x76\x61\x6C\x75\x65\x29\x2C\x0D\x0A\x09\x09\x09\x66\x6C\x61\x67\x3A\x5F\x74\x2E\x5F\x74\x61\x67\x73\x2E\x6D\x64\x6E\x73\x2E\x73\x65\x6C\x65\x63\x74\x65\x64\x49\x6E\x64\x65\x78\x26\x30\x78\x30\x31\x7D\x3B\x0D\x0A\x09\x09\x69\x66\x28\x69\x73\x4E\x61\x4E\x28\x72\x2E\x70\x6F\x72\x74\x29\x20\x7C\x7C\x20\x72\x2E\x70\x6F\x72\x74\x3C\x3D\x30\x29\x7B\x0D\x0A\x09\x09\x09\x74\x68\x72\x6F\x77\x20\x22\x49\x6E\x76\x61\x6C\x69\x64\x20\x70\x6F\x72\x74\x20\x6E\x75\x6D\x62\x65\x72\x22\x3B\x0D\x0A\x09\x09\x7D\x0D\x0A\x09\x09\x72\x65\x74\x75\x72\x6E\x20\x72\x3B\x0D\x0A\x09\x7D\x0D\x0A\x09\x5F\x74\x2E\x69\x6E\x69\x74\x3D\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x63\x66\x67\x29\x0D\x0A\x09\x7B\x0D\x0A\x09\x09\x5F\x74\x2E\x5F\x74\x61\x67\x73\x2E\x68\x74\x74\x70\x5F\x70\x6F\x72\x74\x2E\x76\x61\x6C\x75\x65\x3D\x63\x66\x67\x2E\x68\x74\x74\x70\x5F\x70\x6F\x72\x74\x3B\x0D\x0A\x09\x09\x5F\x74\x2E\x5F\x74\x61\x67\x73\x2E\x6D\x64\x6E\x73\x2E\x73\x65\x6C\x65\x63\x74\x65\x64\x49\x6E\x64\x65\x78\x3D\x28\x63\x66\x67\x2E\x66\x6C\x61\x67\x73\x26\x30\x78\x30\x31\x29\x21\x3D\x30\x3F\x31\x3A\x30\x3B\x0D\x0A\x09\x7D\x0D\x0A\x7D\x0D\x0A\x0D\x0A\x0D\x0A\x55\x69\x2E\x43\x6D\x64\x3D\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x69\x64\x29\x0D\x0A\x7B\x0D\x0A\x09\x76\x61\x72\x20\x5F\x74\x3D\x74\x68\x69\x73\x3B\x0D\x0A\x09\x5F\x74\x2E\x5F\x74\x61\x67\x73\x3D\x7B\x0D\x0A\x09\x09\x75\x70\x64\x61\x74\x65\x3A\x67\x65\x74\x45\x6C\x65\x6D\x28\x69\x64\x2B\x22\x5F\x75\x70\x64\x61\x74\x65\x22\x29\x2C\x0D\x0A\x09\x09\x63\x61\x6E\x63\x65\x6C\x3A\x67\x65\x74\x45\x6C\x65\x6D\x28\x69\x64\x2B\x22\x5F\x63\x61\x6E\x63\x65\x6C\x22\x29\x0D\x0A\x09\x7D\x3B\x0D\x0A\x09\x5F\x74\x2E\x65\x76\x65\x6E\x74\x73\x3D\x7B\x6F\x6E\x75\x70\x64\x61\x74\x65\x3A\x6E\x75\x6C\x6C\x7D\x0D\x0A\x09\x5F\x74\x2E\x5F\x74\x61\x67\x73\x2E\x75\x70\x64\x61\x74\x65\x2E\x6F\x6E\x63\x6C\x69\x63\x6B\x3D\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x29\x0D\x0A\x09\x7B\x0D\x0A\x09\x09\x69\x66\x28\x5F\x74\x2E\x65\x76\x65\x6E\x74\x73\x2E\x6F\x6E\x75\x70\x64\x61\x74\x65\x21\x3D\x6E\x75\x6C\x6C\x29\x7B\x0D\x0A\x09\x09\x09\x5F\x74\x2E\x65\x76\x65\x6E\x74\x73\x2E\x6F\x6E\x75\x70\x64\x61\x74\x65\x28\x29\x3B\x0D\x0A\x09\x09\x7D\x09\x09\x0D\x0A\x09\x7D\x0D\x0A\x09\x5F\x74\x2E\x5F\x74\x61\x67\x73\x2E\x63\x61\x6E\x63\x65\x6C\x2E\x6F\x6E\x63\x6C\x69\x63\x6B\x3D\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x29\x0D\x0A\x09\x7B\x0D\x0A\x09\x09\x69\x66\x28\x77\x69\x6E\x64\x6F\x77\x2E\x63\x6F\x6E\x66\x69\x72\x6D\x28\x27\x44\x6F\x20\x79\x6F\x75\x20\x77\x61\x6E\x74\x20\x74\x6F\x20\x63\x61\x6E\x63\x65\x6C\x3F\x27\x29\x29\x7B\x0D\x0A\x09\x09\x09\x64\x6F\x63\x75\x6D\x65\x6E\x74\x2E\x6C\x6F\x63\x61\x74\x69\x6F\x6E\x3D\x22\x2E\x2F\x69\x6E\x64\x65\x78\x2E\x68\x74\x6D\x6C\x22\x3B\x0D\x0A\x09\x09\x7D\x0D\x0A\x09\x7D\x0D\x0A\x09\x5F\x74\x2E\x5F\x74\x61\x67\x73\x2E\x75\x70\x64\x61\x74\x65\x2E\x64\x69\x73\x61\x62\x6C\x65\x64\x3D\x66\x61\x6C\x73\x65\x3B\x0D\x0A\x09\x5F\x74\x2E\x64\x69\x73\x61\x62\x6C\x65\x3D\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x29\x7B\x5F\x74\x2E\x5F\x74\x61\x67\x73\x2E\x75\x70\x64\x61\x74\x65\x2E\x64\x69\x73\x61\x62\x6C\x65\x64\x3D\x74\x72\x75\x65\x3B\x7D\x0D\x0A\x7D\x0D\x0A\x0D\x0A\x0D\x0A\x66\x75\x6E\x63\x74\x69\x6F\x6E\x20\x41\x70\x70\x6C\x69\x63\x61\x74\x69\x6F\x6E\x28\x29\x0D\x0A\x7B\x0D\x0A\x09\x76\x61\x72\x20\x53\x45\x54\x55\x50\x5F\x41\x50\x49\x3D\x22\x2F\x73\x65\x74\x75\x70\x2F\x73\x65\x74\x75\x70\x2E\x61\x70\x69\x22\x3B\x20\x0D\x0A\x09\x76\x61\x72\x20\x75\x69\x3D\x7B\x0D\x0A\x09\x09\x6D\x61\x63\x61\x64\x64\x72\x3A\x6E\x65\x77\x20\x55\x69\x2E\x4D\x61\x63\x41\x64\x64\x72\x28\x22\x69\x6E\x5F\x65\x6D\x61\x63\x22\x29\x2C\x0D\x0A\x09\x09\x63\x6D\x64\x3A\x6E\x65\x77\x20\x55\x69\x2E\x43\x6D\x64\x28\x22\x63\x6D\x64\x22\x29\x2C\x0D\x0A\x09\x09\x69\x70\x73\x65\x74\x3A\x6E\x65\x77\x20\x55\x69\x2E\x49\x70\x53\x65\x74\x74\x69\x6E\x67\x28\x22\x69\x6E\x5F\x69\x70\x22\x29\x2C\x0D\x0A\x09\x09\x73\x72\x76\x3A\x6E\x65\x77\x20\x55\x69\x2E\x53\x65\x72\x76\x69\x63\x65\x73\x28\x22\x73\x72\x76\x22\x29\x2C\x0D\x0A\x09\x09\x68\x6F\x73\x74\x6E\x61\x6D\x65\x3A\x6E\x65\x77\x20\x55\x69\x2E\x48\x6F\x73\x74\x4E\x61\x6D\x65\x28\x22\x69\x6E\x5F\x68\x6F\x73\x74\x22\x29\x0D\x0A\x09\x7D\x0D\x0A\x09\x75\x69\x2E\x63\x6D\x64\x2E\x65\x76\x65\x6E\x74\x73\x2E\x6F\x6E\x75\x70\x64\x61\x74\x65\x3D\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x29\x7B\x0D\x0A\x09\x09\x2F\x2F\xE5\x80\xA4\xE3\x83\x81\xE3\x82\xA7\xE3\x83\x83\xE3\x82\xAF\x0D\x0A\x09\x74\x72\x79\x7B\x0D\x0A\x09\x09\x76\x61\x72\x20\x6D\x61\x63\x3D\x75\x69\x2E\x6D\x61\x63\x61\x64\x64\x72\x2E\x67\x65\x74\x4D\x61\x63\x41\x64\x64\x72\x28\x29\x3B\x0D\x0A\x09\x09\x76\x61\x72\x20\x68\x6F\x73\x74\x3D\x75\x69\x2E\x68\x6F\x73\x74\x6E\x61\x6D\x65\x2E\x67\x65\x74\x56\x61\x6C\x75\x65\x28\x29\x3B\x0D\x0A\x09\x09\x76\x61\x72\x20\x69\x70\x76\x34\x3D\x75\x69\x2E\x69\x70\x73\x65\x74\x2E\x67\x65\x74\x56\x61\x6C\x75\x65\x28\x29\x3B\x0D\x0A\x09\x09\x76\x61\x72\x20\x73\x72\x76\x3D\x75\x69\x2E\x73\x72\x76\x2E\x67\x65\x74\x56\x61\x6C\x75\x65\x28\x29\x3B\x0D\x0A\x09\x09\x76\x61\x72\x20\x70\x6D\x3D\x61\x72\x72\x61\x79\x54\x6F\x48\x65\x78\x28\x6D\x61\x63\x29\x2B\x22\x66\x66\x66\x66\x22\x0D\x0A\x09\x09\x09\x2B\x69\x6E\x74\x32\x68\x65\x78\x28\x69\x70\x76\x34\x2E\x66\x6C\x61\x67\x2C\x38\x29\x2B\x61\x72\x72\x61\x79\x54\x6F\x48\x65\x78\x28\x69\x70\x76\x34\x2E\x61\x64\x64\x72\x29\x2B\x61\x72\x72\x61\x79\x54\x6F\x48\x65\x78\x28\x69\x70\x76\x34\x2E\x6D\x61\x73\x6B\x29\x2B\x61\x72\x72\x61\x79\x54\x6F\x48\x65\x78\x28\x69\x70\x76\x34\x2E\x67\x77\x29\x0D\x0A\x09\x09\x09\x2B\x69\x6E\x74\x32\x68\x65\x78\x28\x73\x72\x76\x2E\x66\x6C\x61\x67\x2C\x38\x29\x2B\x69\x6E\x74\x32\x68\x65\x78\x28\x73\x72\x76\x2E\x70\x6F\x72\x74\x2C\x34\x29\x2B\x22\x30\x30\x30\x30\x22\x3B\x0D\x0A\x09\x09\x2F\x2F\x4C\x50\x43\x58\x50\x72\x65\x73\x73\x6F\xE3\x81\xB8\xE9\x80\x81\xE4\xBF\xA1\x0D\x0A\x09\x09\x76\x61\x72\x20\x72\x65\x74\x3D\x65\x76\x61\x6C\x28\x22\x28\x22\x2B\x73\x6C\x69\x62\x2E\x78\x68\x72\x28\x53\x45\x54\x55\x50\x5F\x41\x50\x49\x2B\x22\x3F\x63\x3D\x75\x70\x64\x61\x74\x65\x26\x70\x3D\x22\x2B\x70\x6D\x2B\x22\x26\x68\x6F\x73\x74\x3D\x22\x2B\x68\x6F\x73\x74\x29\x2E\x72\x65\x73\x70\x6F\x6E\x73\x65\x54\x65\x78\x74\x2B\x22\x29\x22\x29\x3B\x0D\x0A\x09\x09\x09\x69\x66\x28\x72\x65\x74\x2E\x72\x65\x73\x75\x6C\x74\x21\x3D\x30\x78\x30\x29\x7B\x0D\x0A\x09\x09\x09\x09\x74\x68\x72\x6F\x77\x20\x22\x43\x6F\x6E\x66\x69\x67\x75\x72\x61\x74\x69\x6F\x6E\x20\x75\x70\x64\x61\x74\x65\x20\x69\x73\x20\x66\x61\x69\x6C\x65\x64\x2E\x20\x63\x6F\x64\x65\x3D\x30\x78\x22\x2B\x72\x65\x74\x2E\x72\x65\x73\x75\x6C\x74\x3B\x0D\x0A\x09\x09\x09\x7D\x65\x6C\x73\x65\x7B\x0D\x0A\x09\x09\x09\x09\x74\x68\x72\x6F\x77\x20\x22\x43\x6F\x6E\x66\x69\x67\x75\x72\x61\x74\x69\x6F\x6E\x20\x69\x73\x20\x63\x68\x61\x6E\x67\x65\x64\x2E\x5C\x6E\x20\x52\x65\x73\x74\x61\x72\x74\x20\x74\x68\x65\x20\x4D\x69\x4D\x69\x63\x52\x65\x6D\x6F\x74\x65\x4D\x43\x55\x20\x74\x6F\x20\x65\x6E\x61\x62\x6C\x65\x20\x74\x68\x65\x20\x73\x65\x74\x74\x69\x6E\x67\x2E\x22\x3B\x0D\x0A\x09\x09\x09\x7D\x0D\x0A\x09\x7D\x63\x61\x74\x63\x68\x28\x65\x29\x7B\x0D\x0A\x09\x09\x61\x6C\x65\x72\x74\x28\x65\x29\x3B\x0D\x0A\x09\x7D\x0D\x0A\x0D\x0A\x09\x7D\x0D\x0A\x09\x74\x72\x79\x7B\x0D\x0A\x09\x09\x66\x75\x6E\x63\x74\x69\x6F\x6E\x20\x73\x65\x74\x49\x6E\x6E\x65\x72\x48\x54\x4D\x4C\x28\x6E\x2C\x76\x29\x7B\x67\x65\x74\x45\x6C\x65\x6D\x28\x6E\x29\x2E\x69\x6E\x6E\x65\x72\x48\x54\x4D\x4C\x3D\x76\x3B\x7D\x0D\x0A\x09\x09\x76\x61\x72\x20\x63\x66\x67\x3D\x65\x76\x61\x6C\x28\x22\x28\x22\x2B\x73\x6C\x69\x62\x2E\x78\x68\x72\x28\x53\x45\x54\x55\x50\x5F\x41\x50\x49\x2B\x22\x3F\x63\x3D\x67\x65\x74\x22\x29\x2E\x72\x65\x73\x70\x6F\x6E\x73\x65\x54\x65\x78\x74\x2B\x22\x29\x22\x29\x3B\x0D\x0A\x09\x09\x73\x65\x74\x49\x6E\x6E\x65\x72\x48\x54\x4D\x4C\x28\x22\x63\x75\x72\x5F\x76\x65\x72\x73\x69\x6F\x6E\x22\x2C\x63\x66\x67\x2E\x61\x70\x70\x6C\x69\x63\x61\x74\x69\x6F\x6E\x29\x3B\x0D\x0A\x09\x09\x73\x65\x74\x49\x6E\x6E\x65\x72\x48\x54\x4D\x4C\x28\x22\x63\x75\x72\x5F\x6C\x61\x6E\x22\x2C\x63\x66\x67\x2E\x6C\x61\x6E\x64\x65\x76\x29\x3B\x0D\x0A\x09\x09\x73\x65\x74\x49\x6E\x6E\x65\x72\x48\x54\x4D\x4C\x28\x22\x63\x75\x72\x5F\x68\x6F\x73\x74\x22\x2C\x63\x66\x67\x2E\x63\x75\x72\x2E\x68\x6F\x73\x74\x29\x3B\x0D\x0A\x09\x09\x73\x65\x74\x49\x6E\x6E\x65\x72\x48\x54\x4D\x4C\x28\x22\x63\x75\x72\x5F\x6D\x61\x63\x22\x2C\x69\x6E\x74\x32\x4D\x61\x63\x41\x64\x64\x72\x28\x63\x66\x67\x2E\x63\x75\x72\x2E\x6D\x61\x63\x30\x30\x30\x31\x30\x32\x30\x33\x2C\x63\x66\x67\x2E\x63\x75\x72\x2E\x6D\x61\x63\x30\x34\x30\x35\x78\x78\x78\x78\x29\x29\x3B\x0D\x0A\x09\x09\x73\x65\x74\x49\x6E\x6E\x65\x72\x48\x54\x4D\x4C\x28\x22\x63\x75\x72\x5F\x69\x70\x22\x2C\x69\x6E\x74\x32\x49\x70\x41\x64\x64\x72\x28\x63\x66\x67\x2E\x63\x75\x72\x2E\x69\x70\x76\x34\x2E\x69\x70\x29\x29\x3B\x0D\x0A\x09\x09\x73\x65\x74\x49\x6E\x6E\x65\x72\x48\x54\x4D\x4C\x28\x22\x63\x75\x72\x5F\x6D\x61\x73\x6B\x22\x2C\x69\x6E\x74\x32\x49\x70\x41\x64\x64\x72\x28\x63\x66\x67\x2E\x63\x75\x72\x2E\x69\x70\x76\x34\x2E\x6D\x61\x73\x6B\x29\x29\x3B\x0D\x0A\x09\x09\x73\x65\x74\x49\x6E\x6E\x65\x72\x48\x54\x4D\x4C\x28\x22\x63\x75\x72\x5F\x64\x72\x6F\x75\x74\x65\x22\x2C\x69\x6E\x74\x32\x49\x70\x41\x64\x64\x72\x28\x63\x66\x67\x2E\x63\x75\x72\x2E\x69\x70\x76\x34\x2E\x64\x72\x6F\x75\x74\x65\x29\x29\x3B\x0D\x0A\x09\x09\x73\x65\x74\x49\x6E\x6E\x65\x72\x48\x54\x4D\x4C\x28\x22\x63\x75\x72\x5F\x73\x65\x72\x76\x69\x63\x65\x22\x2C\x0D\x0A\x09\x09\x09\x22\x48\x74\x74\x70\x20\x50\x6F\x72\x74\x3D\x22\x2B\x63\x66\x67\x2E\x63\x75\x72\x2E\x73\x65\x72\x76\x69\x63\x65\x73\x2E\x68\x74\x74\x70\x5F\x70\x6F\x72\x74\x2B\x22\x2C\x22\x2B\x0D\x0A\x09\x09\x09\x22\x6D\x44\x4E\x53\x3D\x22\x2B\x28\x28\x63\x66\x67\x2E\x63\x75\x72\x2E\x73\x65\x72\x76\x69\x63\x65\x73\x2E\x66\x6C\x61\x67\x73\x26\x30\x78\x30\x31\x29\x3F\x22\x45\x6E\x61\x62\x6C\x65\x22\x3A\x22\x44\x69\x73\x61\x62\x6C\x65\x22\x29\x29\x3B\x0D\x0A\x09\x09\x75\x69\x2E\x6D\x61\x63\x61\x64\x64\x72\x2E\x73\x65\x74\x4D\x61\x63\x56\x61\x6C\x75\x65\x28\x63\x66\x67\x2E\x63\x66\x67\x2E\x6D\x61\x63\x30\x30\x30\x31\x30\x32\x30\x33\x2C\x63\x66\x67\x2E\x63\x66\x67\x2E\x6D\x61\x63\x30\x34\x30\x35\x78\x78\x78\x78\x29\x3B\x0D\x0A\x09\x09\x75\x69\x2E\x69\x70\x73\x65\x74\x2E\x73\x65\x74\x56\x61\x6C\x75\x65\x28\x63\x66\x67\x2E\x63\x66\x67\x2E\x69\x70\x76\x34\x29\x3B\x0D\x0A\x09\x09\x75\x69\x2E\x68\x6F\x73\x74\x6E\x61\x6D\x65\x2E\x73\x65\x74\x56\x61\x6C\x75\x65\x28\x63\x66\x67\x2E\x63\x66\x67\x2E\x68\x6F\x73\x74\x29\x3B\x0D\x0A\x09\x09\x75\x69\x2E\x73\x72\x76\x2E\x69\x6E\x69\x74\x28\x63\x66\x67\x2E\x63\x66\x67\x2E\x73\x65\x72\x76\x69\x63\x65\x73\x29\x3B\x0D\x0A\x09\x7D\x63\x61\x74\x63\x68\x28\x65\x29\x7B\x0D\x0A\x09\x09\x75\x69\x2E\x75\x70\x64\x61\x74\x65\x2E\x64\x69\x73\x61\x62\x6C\x65\x28\x29\x3B\x0D\x0A\x09\x09\x61\x6C\x65\x72\x74\x28\x22\x4D\x69\x4D\x69\x63\x20\x63\x6F\x6E\x66\x69\x67\x75\x72\x61\x74\x6F\x72\x20\x66\x61\x69\x6C\x65\x64\x20\x69\x6E\x69\x74\x69\x61\x6C\x69\x7A\x61\x74\x69\x6F\x6E\x2E\x27\x22\x2B\x65\x2E\x74\x6F\x53\x74\x72\x69\x6E\x67\x28\x29\x2B\x22\x27\x22\x29\x3B\x0D\x0A\x09\x7D\x0D\x0A\x7D\x0D\x0A\x0D\x0A\x0D\x0A\x66\x75\x6E\x63\x74\x69\x6F\x6E\x20\x69\x6E\x69\x74\x28\x29\x0D\x0A\x7B\x0D\x0A\x09\x61\x70\x70\x3D\x6E\x65\x77\x20\x41\x70\x70\x6C\x69\x63\x61\x74\x69\x6F\x6E\x28\x29\x3B\x0D\x0A\x7D\x0D\x0A\x0D\x0A\x0D\x0A\x3C\x2F\x73\x63\x72\x69\x70\x74\x3E\x0D\x0A\x3C\x2F\x68\x65\x61\x64\x3E\x0D\x0A\x3C\x62\x6F\x64\x79\x20\x6F\x6E\x6C\x6F\x61\x64\x3D\x22\x69\x6E\x69\x74\x28\x29\x3B\x22\x3E\x0D\x0A\x3C\x68\x31\x3E\x4D\x69\x4D\x69\x63\x20\x52\x65\x6D\x6F\x74\x65\x4D\x43\x55\x20\x63\x6F\x6E\x66\x69\x67\x75\x72\x61\x74\x69\x6F\x6E\x20\x3C\x2F\x68\x31\x3E\x0D\x0A\x3C\x68\x72\x2F\x3E\x0D\x0A\x09\x3C\x68\x32\x3E\x43\x75\x72\x72\x65\x6E\x74\x20\x63\x6F\x6E\x66\x69\x67\x75\x72\x61\x74\x69\x6F\x6E\x3C\x2F\x68\x32\x3E\x0D\x0A\x09\x3C\x74\x61\x62\x6C\x65\x20\x63\x6C\x61\x73\x73\x3D\x22\x74\x61\x62\x6C\x65\x31\x20\x22\x3E\x0D\x0A\x09\x09\x3C\x63\x6F\x6C\x67\x72\x6F\x75\x70\x3E\x3C\x63\x6F\x6C\x20\x73\x70\x61\x6E\x3D\x22\x31\x22\x20\x63\x6C\x61\x73\x73\x3D\x22\x63\x6F\x6C\x31\x22\x20\x2F\x3E\x3C\x2F\x63\x6F\x6C\x67\x72\x6F\x75\x70\x3E\x0D\x0A\x09\x09\x3C\x63\x6F\x6C\x67\x72\x6F\x75\x70\x3E\x3C\x63\x6F\x6C\x20\x73\x70\x61\x6E\x3D\x22\x32\x22\x20\x63\x6C\x61\x73\x73\x3D\x22\x63\x6F\x6C\x32\x22\x20\x2F\x3E\x3C\x2F\x63\x6F\x6C\x67\x72\x6F\x75\x70\x3E\x0D\x0A\x09\x09\x3C\x74\x72\x3E\x3C\x74\x64\x3E\x56\x65\x72\x73\x69\x6F\x6E\x3C\x2F\x74\x64\x3E\x3C\x74\x64\x3E\x3C\x70\x20\x69\x64\x3D\x22\x63\x75\x72\x5F\x76\x65\x72\x73\x69\x6F\x6E\x22\x3E\x3C\x2F\x70\x3E\x3C\x2F\x74\x64\x3E\x3C\x2F\x74\x72\x3E\x0D\x0A\x09\x09\x3C\x74\x72\x3E\x3C\x74\x64\x3E\x4C\x41\x4E\x20\x50\x48\x59\x3C\x2F\x74\x64\x3E\x3C\x74\x64\x3E\x3C\x70\x20\x69\x64\x3D\x22\x63\x75\x72\x5F\x6C\x61\x6E\x22\x3C\x2F\x70\x3E\x3C\x2F\x74\x64\x3E\x3C\x2F\x74\x72\x3E\x0D\x0A\x09\x09\x3C\x74\x72\x3E\x3C\x74\x64\x3E\x4D\x41\x43\x20\x41\x64\x64\x72\x65\x73\x73\x3C\x2F\x74\x64\x3E\x3C\x74\x64\x3E\x3C\x70\x20\x69\x64\x3D\x22\x63\x75\x72\x5F\x6D\x61\x63\x22\x3E\x3C\x2F\x70\x3E\x3C\x2F\x74\x64\x3E\x3C\x2F\x74\x72\x3E\x0D\x0A\x09\x09\x3C\x74\x72\x3E\x3C\x74\x64\x3E\x48\x6F\x73\x74\x20\x4E\x61\x6D\x65\x3C\x2F\x74\x64\x3E\x3C\x74\x64\x3E\x3C\x70\x20\x69\x64\x3D\x22\x63\x75\x72\x5F\x68\x6F\x73\x74\x22\x3E\x3C\x2F\x70\x3E\x3C\x2F\x74\x64\x3E\x3C\x2F\x74\x72\x3E\x0D\x0A\x09\x09\x3C\x74\x72\x3E\x3C\x74\x64\x3E\x49\x50\x20\x41\x64\x64\x72\x65\x73\x73\x3C\x2F\x74\x64\x3E\x3C\x74\x64\x3E\x3C\x70\x20\x69\x64\x3D\x22\x63\x75\x72\x5F\x69\x70\x22\x3E\x3C\x2F\x70\x3E\x3C\x2F\x74\x64\x3E\x3C\x2F\x74\x72\x3E\x0D\x0A\x09\x09\x3C\x74\x72\x3E\x3C\x74\x64\x3E\x4E\x65\x74\x20\x4D\x61\x73\x6B\x3C\x2F\x74\x64\x3E\x3C\x74\x64\x3E\x3C\x70\x20\x69\x64\x3D\x22\x63\x75\x72\x5F\x6D\x61\x73\x6B\x22\x3E\x3C\x2F\x70\x3E\x3C\x2F\x74\x64\x3E\x3C\x2F\x74\x72\x3E\x0D\x0A\x09\x09\x3C\x74\x72\x3E\x3C\x74\x64\x3E\x44\x65\x66\x61\x75\x6C\x74\x20\x47\x61\x74\x65\x77\x61\x79\x3C\x2F\x74\x64\x3E\x3C\x74\x64\x3E\x3C\x70\x20\x69\x64\x3D\x22\x63\x75\x72\x5F\x64\x72\x6F\x75\x74\x65\x22\x3E\x3C\x2F\x70\x3E\x3C\x2F\x74\x64\x3E\x3C\x2F\x74\x72\x3E\x0D\x0A\x09\x09\x3C\x74\x72\x3E\x3C\x74\x64\x3E\x53\x65\x72\x76\x69\x63\x65\x73\x3C\x2F\x74\x64\x3E\x3C\x74\x64\x3E\x3C\x70\x20\x69\x64\x3D\x22\x63\x75\x72\x5F\x73\x65\x72\x76\x69\x63\x65\x22\x3E\x3C\x2F\x70\x3E\x3C\x2F\x74\x64\x3E\x3C\x2F\x74\x72\x3E\x0D\x0A\x09\x3C\x2F\x74\x61\x62\x6C\x65\x3E\x0D\x0A\x09\x3C\x70\x20\x63\x6C\x61\x73\x73\x3D\x22\x65\x78\x70\x22\x3E\x0D\x0A\x49\x66\x20\x6C\x6F\x63\x61\x6C\x20\x73\x65\x74\x74\x69\x6E\x67\x20\x66\x69\x6C\x65\x20\x61\x76\x61\x69\x6C\x61\x62\x6C\x65\x2C\x20\x63\x75\x72\x72\x65\x6E\x74\x20\x69\x6E\x66\x6F\x72\x6D\x61\x74\x69\x6F\x6E\x20\x6D\x69\x67\x68\x74\x20\x62\x65\x20\x64\x69\x66\x66\x65\x72\x65\x6E\x74\x20\x77\x69\x74\x68\x20\x6F\x6E\x63\x68\x69\x70\x2D\x73\x65\x74\x74\x69\x6E\x67\x2E\x20\x54\x6F\x20\x66\x75\x6C\x6C\x79\x20\x65\x6E\x61\x62\x6C\x65\x20\x6F\x6E\x2D\x63\x68\x69\x70\x20\x73\x65\x74\x74\x69\x6E\x67\x2C\x20\x70\x6C\x65\x61\x73\x65\x20\x72\x65\x6D\x6F\x76\x65\x20\x74\x68\x65\x20\x73\x65\x74\x74\x69\x6E\x67\x20\x66\x69\x6C\x65\x20\x22\x2F\x6D\x69\x6D\x69\x63\x2E\x63\x66\x67\x22\x20\x69\x6E\x20\x6D\x62\x65\x64\x20\x20\x6C\x6F\x63\x61\x6C\x20\x66\x69\x6C\x65\x20\x73\x79\x73\x74\x65\x6D\x20\x6F\x72\x20\x53\x44\x63\x61\x72\x64\x20\x66\x69\x6C\x65\x20\x73\x79\x73\x74\x65\x6D\x2E\x0D\x0A\x09\x3C\x2F\x70\x3E\x0D\x0A\x09\x3C\x68\x32\x3E\x4F\x6E\x43\x68\x69\x70\x20\x63\x6F\x6E\x66\x69\x67\x75\x72\x61\x74\x69\x6F\x6E\x3C\x2F\x68\x32\x3E\x0D\x0A\x09\x0D\x0A\x09\x3C\x68\x33\x3E\x45\x74\x68\x65\x72\x6E\x65\x74\x3C\x2F\x68\x33\x3E\x0D\x0A\x09\x3C\x74\x61\x62\x6C\x65\x20\x63\x6C\x61\x73\x73\x3D\x22\x74\x61\x62\x6C\x65\x31\x22\x3E\x0D\x0A\x09\x09\x3C\x63\x6F\x6C\x67\x72\x6F\x75\x70\x3E\x3C\x63\x6F\x6C\x20\x73\x70\x61\x6E\x3D\x22\x31\x22\x20\x63\x6C\x61\x73\x73\x3D\x22\x63\x6F\x6C\x31\x22\x20\x2F\x3E\x3C\x2F\x63\x6F\x6C\x67\x72\x6F\x75\x70\x3E\x0D\x0A\x09\x09\x3C\x63\x6F\x6C\x67\x72\x6F\x75\x70\x3E\x3C\x63\x6F\x6C\x20\x73\x70\x61\x6E\x3D\x22\x32\x22\x20\x63\x6C\x61\x73\x73\x3D\x22\x63\x6F\x6C\x32\x22\x20\x2F\x3E\x3C\x2F\x63\x6F\x6C\x67\x72\x6F\x75\x70\x3E\x0D\x0A\x09\x09\x3C\x74\x72\x3E\x3C\x74\x64\x3E\x4D\x41\x43\x20\x41\x64\x64\x72\x65\x73\x73\x3C\x2F\x74\x64\x3E\x3C\x74\x64\x3E\x3C\x69\x6E\x70\x75\x74\x20\x69\x64\x3D\x22\x69\x6E\x5F\x65\x6D\x61\x63\x22\x20\x74\x79\x70\x65\x3D\x22\x74\x65\x78\x74\x22\x2F\x3E\x3C\x2F\x74\x64\x3E\x3C\x2F\x74\x72\x3E\x0D\x0A\x09\x09\x3C\x74\x72\x3E\x3C\x74\x64\x3E\x48\x6F\x73\x74\x20\x4E\x61\x6D\x65\x3C\x2F\x74\x64\x3E\x3C\x74\x64\x3E\x3C\x69\x6E\x70\x75\x74\x20\x69\x64\x3D\x22\x69\x6E\x5F\x68\x6F\x73\x74\x22\x20\x74\x79\x70\x65\x3D\x22\x74\x65\x78\x74\x22\x2F\x3E\x3C\x2F\x74\x64\x3E\x3C\x2F\x74\x72\x3E\x0D\x0A\x09\x09\x3C\x74\x72\x3E\x0D\x0A\x09\x09\x09\x3C\x74\x64\x3E\x49\x50\x20\x41\x64\x64\x72\x65\x73\x73\x3C\x2F\x74\x64\x3E\x0D\x0A\x09\x09\x09\x3C\x74\x64\x3E\x0D\x0A\x09\x09\x09\x09\x3C\x64\x69\x76\x3E\x3C\x73\x65\x6C\x65\x63\x74\x20\x69\x64\x3D\x22\x69\x6E\x5F\x69\x70\x5F\x6D\x6F\x64\x65\x22\x3E\x3C\x6F\x70\x74\x69\x6F\x6E\x3E\x4D\x61\x6E\x75\x61\x6C\x3C\x2F\x6F\x70\x74\x69\x6F\x6E\x3E\x3C\x6F\x70\x74\x69\x6F\x6E\x3E\x44\x48\x43\x50\x3C\x2F\x6F\x70\x74\x69\x6F\x6E\x3E\x3C\x6F\x70\x74\x69\x6F\x6E\x3E\x41\x75\x74\x6F\x49\x50\x3C\x2F\x6F\x70\x74\x69\x6F\x6E\x3E\x3C\x6F\x70\x74\x69\x6F\x6E\x3E\x41\x75\x74\x6F\x49\x50\x2B\x44\x48\x43\x50\x3C\x2F\x6F\x70\x74\x69\x6F\x6E\x3E\x3C\x2F\x73\x65\x6C\x65\x63\x74\x3E\x3C\x2F\x64\x69\x76\x3E\x0D\x0A\x09\x09\x09\x09\x3C\x64\x69\x76\x20\x69\x64\x3D\x22\x69\x6E\x5F\x69\x70\x5F\x64\x69\x76\x22\x3E\x0D\x0A\x09\x09\x09\x09\x09\x3C\x74\x61\x62\x6C\x65\x20\x63\x6C\x61\x73\x73\x3D\x22\x74\x61\x62\x6C\x65\x32\x22\x3E\x0D\x0A\x09\x09\x09\x09\x09\x09\x3C\x74\x72\x3E\x3C\x74\x64\x3E\x41\x64\x64\x72\x65\x73\x73\x3C\x2F\x74\x64\x3E\x3C\x74\x64\x3E\x3C\x69\x6E\x70\x75\x74\x20\x69\x64\x3D\x22\x69\x6E\x5F\x69\x70\x5F\x61\x64\x64\x72\x22\x20\x74\x79\x70\x65\x3D\x22\x74\x65\x78\x74\x22\x2F\x3E\x3C\x2F\x74\x64\x3E\x3C\x2F\x74\x72\x3E\x0D\x0A\x09\x09\x09\x09\x09\x09\x3C\x74\x72\x3E\x3C\x74\x64\x3E\x4D\x61\x73\x6B\x3C\x2F\x74\x64\x3E\x3C\x74\x64\x3E\x3C\x69\x6E\x70\x75\x74\x20\x69\x64\x3D\x22\x69\x6E\x5F\x69\x70\x5F\x6D\x61\x73\x6B\x22\x20\x74\x79\x70\x65\x3D\x22\x74\x65\x78\x74\x22\x2F\x3E\x3C\x2F\x74\x64\x3E\x3C\x2F\x74\x72\x3E\x0D\x0A\x09\x09\x09\x09\x09\x09\x3C\x74\x72\x3E\x3C\x74\x64\x3E\x47\x61\x74\x65\x77\x61\x79\x3C\x2F\x74\x64\x3E\x3C\x74\x64\x3E\x3C\x69\x6E\x70\x75\x74\x20\x69\x64\x3D\x22\x69\x6E\x5F\x69\x70\x5F\x64\x65\x66\x67\x77\x22\x20\x74\x79\x70\x65\x3D\x22\x74\x65\x78\x74\x22\x2F\x3E\x3C\x2F\x74\x64\x3E\x3C\x2F\x74\x72\x3E\x0D\x0A\x09\x09\x09\x09\x09\x3C\x2F\x74\x61\x62\x6C\x65\x3E\x0D\x0A\x09\x09\x09\x09\x3C\x2F\x64\x69\x76\x3E\x0D\x0A\x09\x09\x09\x3C\x2F\x74\x64\x3E\x0D\x0A\x09\x09\x3C\x2F\x74\x72\x3E\x0D\x0A\x09\x3C\x2F\x74\x61\x62\x6C\x65\x3E\x0D\x0A\x09\x3C\x68\x33\x3E\x53\x65\x72\x76\x69\x63\x65\x3C\x2F\x68\x33\x3E\x0D\x0A\x09\x3C\x74\x61\x62\x6C\x65\x20\x63\x6C\x61\x73\x73\x3D\x22\x74\x61\x62\x6C\x65\x31\x22\x3E\x0D\x0A\x09\x09\x3C\x63\x6F\x6C\x67\x72\x6F\x75\x70\x3E\x3C\x63\x6F\x6C\x20\x73\x70\x61\x6E\x3D\x22\x31\x22\x20\x63\x6C\x61\x73\x73\x3D\x22\x63\x6F\x6C\x31\x22\x20\x2F\x3E\x3C\x2F\x63\x6F\x6C\x67\x72\x6F\x75\x70\x3E\x0D\x0A\x09\x09\x3C\x63\x6F\x6C\x67\x72\x6F\x75\x70\x3E\x3C\x63\x6F\x6C\x20\x73\x70\x61\x6E\x3D\x22\x32\x22\x20\x63\x6C\x61\x73\x73\x3D\x22\x63\x6F\x6C\x32\x22\x20\x2F\x3E\x3C\x2F\x63\x6F\x6C\x67\x72\x6F\x75\x70\x3E\x0D\x0A\x09\x09\x3C\x74\x72\x3E\x3C\x74\x64\x3E\x48\x54\x54\x50\x20\x50\x6F\x72\x74\x3C\x2F\x74\x64\x3E\x3C\x74\x64\x3E\x3C\x69\x6E\x70\x75\x74\x20\x69\x64\x3D\x22\x73\x72\x76\x5F\x68\x74\x74\x70\x5F\x70\x6F\x72\x74\x22\x20\x74\x79\x70\x65\x3D\x22\x74\x65\x78\x74\x22\x2F\x3E\x3C\x2F\x74\x64\x3E\x3C\x2F\x74\x72\x3E\x0D\x0A\x09\x09\x3C\x74\x72\x3E\x3C\x74\x64\x3E\x6D\x44\x4E\x53\x3C\x2F\x74\x64\x3E\x3C\x74\x64\x3E\x3C\x73\x65\x6C\x65\x63\x74\x20\x69\x64\x3D\x22\x73\x72\x76\x5F\x6D\x64\x6E\x73\x5F\x73\x77\x22\x3E\x3C\x6F\x70\x74\x69\x6F\x6E\x3E\x44\x69\x73\x61\x62\x6C\x65\x3C\x2F\x6F\x70\x74\x69\x6F\x6E\x3E\x3C\x6F\x70\x74\x69\x6F\x6E\x3E\x45\x6E\x61\x62\x6C\x65\x3C\x2F\x6F\x70\x74\x69\x6F\x6E\x3E\x3C\x2F\x73\x65\x6C\x65\x63\x74\x3E\x3C\x2F\x74\x64\x3E\x3C\x2F\x74\x72\x3E\x0D\x0A\x09\x3C\x2F\x74\x61\x62\x6C\x65\x3E\x0D\x0A\x09\x3C\x62\x72\x2F\x3E\x0D\x0A\x09\x3C\x62\x72\x2F\x3E\x0D\x0A\x09\x3C\x62\x75\x74\x74\x6F\x6E\x20\x69\x64\x3D\x22\x63\x6D\x64\x5F\x75\x70\x64\x61\x74\x65\x22\x3E\x55\x70\x64\x61\x74\x65\x3C\x2F\x62\x75\x74\x74\x6F\x6E\x3E\x0D\x0A\x09\x3C\x62\x75\x74\x74\x6F\x6E\x20\x69\x64\x3D\x22\x63\x6D\x64\x5F\x63\x61\x6E\x63\x65\x6C\x22\x3E\x43\x61\x6E\x63\x65\x6C\x3C\x2F\x62\x75\x74\x74\x6F\x6E\x3E\x0D\x0A\x3C\x64\x69\x76\x20\x63\x6C\x61\x73\x73\x3D\x22\x66\x6F\x6F\x74\x65\x72\x22\x3E\x0D\x0A\x3C\x61\x20\x68\x72\x65\x66\x3D\x22\x68\x74\x74\x70\x3A\x2F\x2F\x6E\x79\x61\x74\x6C\x61\x2E\x6A\x70\x2F\x6D\x69\x6D\x69\x63\x2F\x77\x70\x22\x20\x61\x6C\x74\x3D\x22\x68\x74\x74\x70\x3A\x2F\x2F\x6E\x79\x61\x74\x6C\x61\x2E\x6A\x70\x2F\x6D\x69\x6D\x69\x63\x2F\x77\x70\x22\x3E\x0D\x0A\x3C\x69\x6D\x67\x20\x73\x72\x63\x3D\x22\x2E\x2F\x6D\x69\x6D\x69\x63\x6C\x6F\x67\x6F\x2E\x70\x6E\x67\x22\x2F\x3E\x3C\x2F\x61\x3E\x0D\x0A\x4D\x69\x4D\x69\x63\x3C\x62\x72\x2F\x3E\x0D\x0A\x43\x6F\x70\x79\x72\x69\x67\x68\x74\x20\x28\x43\x29\x20\x32\x30\x31\x31\x2D\x32\x30\x31\x33\x20\x6E\x79\x61\x74\x6C\x61\x2E\x6A\x70\x20\x41\x6C\x6C\x20\x52\x69\x67\x68\x74\x73\x20\x52\x65\x73\x65\x72\x76\x65\x64\x2E\x0D\x0A\x3C\x2F\x64\x69\x76\x3E\x0D\x0A\x3C\x2F\x62\x6F\x64\x79\x3E\x0D\x0A"\r
},\r
{\r
"mimiclogo.png",\r