summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorlijia <[email protected]>2021-06-03 18:33:10 +0800
committerlijia <[email protected]>2021-06-03 18:33:10 +0800
commitead1db681251a35909d62f7b072a7c5670f0731e (patch)
tree1aa9af0533e7efc4aa245e6c01f4081d13e72e7e
parent6c51a6738bf003ed5cf43e0c46584834661b1b5f (diff)
TSG-6589, 修复L2TP解析层在udp流close时解析IP原始包崩溃的BUG.v4.2.37
-rw-r--r--bin/etc/sapp.toml27
-rw-r--r--cmake/Package.cmake2
-rw-r--r--include/private/sapp_declaration.h2
-rw-r--r--include/private/stream_internal.h1
-rw-r--r--src/common/sapp_log.c38
-rw-r--r--src/config/cmd_args.c22
-rw-r--r--src/config/config_parse.cpp1516
-rw-r--r--src/dealpkt/deal_udp.c6
-rw-r--r--src/inner_plug/l2tp_protocol_plug.c3
9 files changed, 927 insertions, 690 deletions
diff --git a/bin/etc/sapp.toml b/bin/etc/sapp.toml
index 3178385..9785c82 100644
--- a/bin/etc/sapp.toml
+++ b/bin/etc/sapp.toml
@@ -1,24 +1,24 @@
###################################################################################################
-# NOTE:
-# The format of this file is toml (https://github.com/cktan/tomlc99)
-# to make vim editor display colorful and human readable,
-# you can create a symbolic links named sapp.ini to sapp.toml, ln -sf sapp.toml sapp.ini
+# NOTE: #
+# The format of this file is toml (https://github.com/cktan/tomlc99) #
+# to make vim editor display colorful and human readable, #
+# you can create a symbolic links named sapp.ini to sapp.toml, ln -sf sapp.toml sapp.ini #
###################################################################################################
[SYSTEM]
-instance_name = "sapp_v4.2"
+ instance_name = "sapp_v4.2"
[CPU]
-worker_threads=1
-send_only_threads_max=0
+ worker_threads=1
+ send_only_threads_max=0
### note, bind_mask, if you do not want to bind thread to special CPU core, keep it empty as []
### there are two different grammars:
### toml array format: bind_mask=[1,2,3,4,5,11,12,13,14,15]
### MESA_load_profile range format: bind_mask="1-5,11-15"
-bind_mask=[]
+ bind_mask=[]
[MEM]
-dictator_enable=1
+ dictator_enable=1
[PACKET_IO]
[overlay_tunnel_definition]
@@ -58,7 +58,7 @@ dictator_enable=1
inject_mode_single_gateway_src_mac="00:11:22:77:88:99"
inject_mode_single_gateway_dst_mac="00:11:22:33:44:55"
- dumpfile_sleep_time_before_exit=3
+ dumpfile_sleep_time_before_exit=0
### note, depolyment.mode options: [mirror, inline, transparent]
[packet_io.depolyment]
@@ -86,7 +86,6 @@ dictator_enable=1
tcp_drop_pure_ack_pkt=0
tcp_syn_option_parse_enabled=1
skip_not_ip_layer_over_eth=0
- reverse_ethernet_addr=1
[DUPLICATE_PKT]
[dup_pkt.traffic.original]
@@ -146,7 +145,7 @@ dictator_enable=1
symbol_conflict_enabled=0
[profiling.log]
- level=30
+ level=20
interval=5
[profiling.log.local]
@@ -187,7 +186,8 @@ dictator_enable=1
[tools.pkt_dump.udp]
command_port=12345
-
+ pkt_dump_ratio=30
+
[tools.pkt_dump.storage]
### note, file path must be double quotation mark extension, for example, path="/dev/shm/pkt_dump"
path="/dev/shm/pkt_dump"
@@ -205,7 +205,6 @@ dictator_enable=1
### note:
### These configurations format is complex and difficult to describe with toml grammar,
### so, create a independent secondary config file to description specific information.
-### relative path, will add prefix with cmd args --config-root-dir, use default ./etc/ without --config-root-dir args.
[SECONDARY_CONFIG_LINK]
cfg_file_sapp_log="etc/sapp_log.conf"
diff --git a/cmake/Package.cmake b/cmake/Package.cmake
index 32647a8..eaa269f 100644
--- a/cmake/Package.cmake
+++ b/cmake/Package.cmake
@@ -70,7 +70,7 @@ set(CPACK_RPM_EXECUTABLE_USER_FILELIST "%config(noreplace) ${CMAKE_INSTALL_PREFI
"%config(noreplace) ${CMAKE_INSTALL_PREFIX}/etc/vlan_flipping_map.conf"
"%config(noreplace) ${CMAKE_INSTALL_PREFIX}/etc/stream_compare_layer.conf"
"%config(noreplace) ${CMAKE_INSTALL_PREFIX}/etc/necessary_plug_list.conf"
- )
+ "%config(noreplace) ${CMAKE_INSTALL_PREFIX}/etc/sapp_log.conf")
# Must uninstall the debug package before install release package
set(CPACK_RPM_PACKAGE_CONFLICTS ${MY_RPM_NAME_PREFIX})
diff --git a/include/private/sapp_declaration.h b/include/private/sapp_declaration.h
index ba1e87c..905f143 100644
--- a/include/private/sapp_declaration.h
+++ b/include/private/sapp_declaration.h
@@ -83,7 +83,7 @@ int sapp_parse_cmd_args(int argc, char *argv[]);
int sapp_parse_config(void);
void sapp_init_breakpad_mini(void);
void sapp_segv_generate(void);
-void sapp_generate_example_config(const char *filename);
+void sapp_generate_example_config(const char *filename, const char *version);
void sapp_cla_override_cfg_file(void);
void sapp_global_val_sanity_check(void);
void *sapp_time_event_thread(void *arg);
diff --git a/include/private/stream_internal.h b/include/private/stream_internal.h
index 0620b16..3fc8b93 100644
--- a/include/private/stream_internal.h
+++ b/include/private/stream_internal.h
@@ -402,6 +402,7 @@ void sapp_update_config_root_dir(const char *cfg_root_dir);
void sapp_update_data_root_dir(const char *data_root_dir);
int sapp_is_absolute_path(const char *filename);
+void sapp_printf_colorful(int level, const char *format, ...);
#ifdef __cplusplus
}
diff --git a/src/common/sapp_log.c b/src/common/sapp_log.c
index 493a34e..215361d 100644
--- a/src/common/sapp_log.c
+++ b/src/common/sapp_log.c
@@ -7,6 +7,44 @@ extern "C" {
#include "support/tomlc99_wrap.h"
+void sapp_printf_colorful(int level, const char *format, ...)
+{
+ va_list ap;
+ char local_log_content_buff[XATTR_SIZE_MAX];
+ const char *log_color_start = "";
+ const char *log_color_end = "";
+
+ va_start(ap, format);
+ vsnprintf(local_log_content_buff, sizeof(local_log_content_buff), format, ap);
+ va_end(ap);
+
+ switch(level)
+ {
+ case RLOG_LV_DEBUG:
+ log_color_start = "\033[33m";
+ log_color_end = "\033[0m";
+ break;
+
+ case RLOG_LV_INFO:
+ log_color_start = "\033[1;33m";
+ log_color_end = "\033[0m";
+ break;
+
+ case RLOG_LV_FATAL:
+ log_color_start = "\033[1;31;40m";
+ log_color_end = "\033[0m";
+ break;
+
+ default:
+ break;
+ }
+
+ fprintf(stdout, "%s%s%s", log_color_start, local_log_content_buff, log_color_end);
+
+ return;
+}
+
+
/*
print_sw, file_sw:
0:�����;
diff --git a/src/config/cmd_args.c b/src/config/cmd_args.c
index 1890bc7..6fcaec9 100644
--- a/src/config/cmd_args.c
+++ b/src/config/cmd_args.c
@@ -120,13 +120,13 @@ static const sapp_cmd_args_usage_t cmd_args_usage[] =
{"-h", "help", "no",NULL, "show help message"},
{"-p", "dumpfile-speed", "required",dumpfile_speed_check, "\n \t\ttop-speed\tprocess packets as fast as possible, this is default behavior\n\t\ttimestamp\tprocess packets as pcap embedded timestamp interval"},
{"-r", "dumpfile-file", "required",NULL, "read packets from which pcap file"},
- {"-t", "test-config", "optional",NULL, "check validity of the configuration file, support level t1,t2,t3"},
+ {"-t", "test-config", "no",NULL, "check validity of the configuration file"},
{"-v", "version", "no",NULL, "show platform version"},
{NULL, NULL, NULL,NULL,NULL}
};
/* ��ֻ̬��ȫ�ֱ������Է����κδ����, ������sapp_global_val�� */
-static const char *sapp_cla_short_options = "dhgvc:C:D:e:r:p:f:t::";
+static const char *sapp_cla_short_options = "dhgvc:C:D:e:r:p:f:t";
/* ��ֻ̬��ȫ�ֱ������Է����κδ����, ������sapp_global_val�� */
static const struct option sapp_cla_long_options[] =
@@ -142,7 +142,7 @@ static const struct option sapp_cla_long_options[] =
{"dumpfile-speed", required_argument, NULL, 'p'},
{"example-config", required_argument, NULL, 'e'},
{"coredump", no_argument, NULL, 'g'},
- {"test-config", optional_argument, NULL, 't'},
+ {"test-config", no_argument, NULL, 't'},
{NULL, 0, NULL, 0}
};
@@ -451,7 +451,6 @@ int sapp_parse_cmd_args(int argc, char *argv[])
int option_array_index;
int test_config_flag = 0;
- char *test_config_option_value = NULL;
while(1){
c = getopt_long(argc, argv, sapp_cla_short_options, sapp_cla_long_options, &opt_index);
@@ -493,7 +492,7 @@ int sapp_parse_cmd_args(int argc, char *argv[])
break;
case 'e':
- sapp_generate_example_config(optarg);
+ sapp_generate_example_config(optarg, sapp_git_ver);
exit(1);
break;
@@ -528,17 +527,6 @@ int sapp_parse_cmd_args(int argc, char *argv[])
case 't':
test_config_flag = 1;
- if(optarg != NULL){
- if((strcmp(optarg, "1") != 0)
- && (strcmp(optarg, "2") != 0)
- && (strcmp(optarg, "3") != 0)){
- printf("option -t --test-config only support level [t1,t2,t3]\n");
- exit(1);
- }
- test_config_option_value = sapp_strdup(optarg);
- }else{
- test_config_option_value = sapp_strdup("1"); //default is t1
- }
continue;
case '?': /* invalid or unknown option */
@@ -590,7 +578,7 @@ int sapp_parse_cmd_args(int argc, char *argv[])
}
if(test_config_flag != 0){
- ret = sapp_config_check(atoi(test_config_option_value));
+ ret = sapp_config_check();
exit(ret);
}
diff --git a/src/config/config_parse.cpp b/src/config/config_parse.cpp
index 82a23fa..1b3ae6d 100644
--- a/src/config/config_parse.cpp
+++ b/src/config/config_parse.cpp
@@ -11,12 +11,14 @@ extern "C" {
extern int g_overlay_layer_set[__ADDR_TYPE_MAX][SAPP_SUPPORT_LAYER_NUM_MAX];
-
+#define SAPP_CFG_OBSOLETE_FLAG 99999999
typedef struct __sapp_config_check{
int global_id;
- int depend_id; /* 1:����IJ���, ����ȱʧ; 0:��ѡ��, ����û��, ��Ӱ��sapp���幦��; >= 1000:����δ����, ȡ�����������ò����Ƿ���, ����transparentģʽ��������packet_io.external.interface */
+ int depend_id; /* 1:����IJ���, ��������������, Ҳ����ȱʧ; 0:��ѡ��, ����û��, ��Ӱ��sapp���幦��; >=1000:����δ����, ȡ�����������ò����Ƿ���, ����transparentģʽ��������packet_io.external.interface */
+ int err_log_level; /* 10,20,30, ������־�ȼ� */
const char *section;
const char *cfg_key;
+ const char *depend_cfg_value; /* ����depend_id>1000ʱ��Ч, ��ʾ����������ֵ����Ԥ�ȶ���ʱ, �ż�鵱ǰ�����Ƿ�Ϸ�, ����mirroģʽ�¸�������Ҫ��� packet_io.external.interface */
int (*cfg_value_check_fun)(const struct __sapp_config_check *sapp_cfg_check_attr, int this_cfg_id, int depend_cfg_id, const char *cfg_value, const void *range_array, int array_num);
char *cfg_value; /* NULL is not found */
const void *expect_range_array; /* ���ڼ�����ֵ�Ŀ�ѡ��Χ����, �������͵IJ�ͬ������int *, ������char **���� */
@@ -32,14 +34,23 @@ typedef struct{
static const char *sapp_cfg_get_value_from_attr_by_id(const sapp_config_check_t *sapp_cfg_check_attr,int cfg_global_id);
static const char *sapp_cfg_get_value_from_attr_by_section_key(const sapp_config_check_t *sapp_cfg_check_attr, const char *section, const char *key);
+static int cfg_value_check_inject_mode(const sapp_config_check_t *sapp_cfg_check_attr,int this_cfg_id,int depend_cfg_id, const char *raw_cfg_value, const void *expect_range_array, int array_num);
static int g_interger_range_array[65536]; /* һ��int�͵�����, ��ֵ�±����ֵһ��, �� g_interger_range_array[0]=0, g_interger_range_array[1]=1, �����ж���ֵ������Χ�Ϸ��� */
+
static int cfg_value_check_integer_range(const sapp_config_check_t *sapp_cfg_check_attr,int this_cfg_id,int depend_cfg_id, const char *raw_cfg_value, const void *expect_range_array, int array_num)
{
int i;
- int raw_int_value = atoi(raw_cfg_value);
- const int *integer_array = (int *)expect_range_array;
+ int raw_int_value;
+ const int *integer_array;
+
+ if(NULL == raw_cfg_value){
+ return -1;
+ }
+
+ raw_int_value = atoi(raw_cfg_value);
+ integer_array = (int *)expect_range_array;
for(i = 0; i < array_num; i++){
if(integer_array[i] == raw_int_value){
@@ -53,7 +64,13 @@ static int cfg_value_check_integer_range(const sapp_config_check_t *sapp_cfg_che
static int cfg_value_check_string_range(const sapp_config_check_t *sapp_cfg_check_attr,int this_cfg_id,int depend_cfg_id, const char *raw_cfg_value, const void *expect_range_array, int array_num)
{
int i;
- char **string_array = (char **)expect_range_array;
+ char **string_array;
+
+ if(NULL == raw_cfg_value){
+ return -1;
+ }
+
+ string_array = (char **)expect_range_array;
for(i = 0; i < array_num; i++){
if((strncmp(string_array[i], raw_cfg_value, strlen(raw_cfg_value)) == 0)
@@ -65,13 +82,27 @@ static int cfg_value_check_string_range(const sapp_config_check_t *sapp_cfg_chec
return -1;
}
+static int cfg_value_check_string_non_null(const sapp_config_check_t *sapp_cfg_check_attr,int this_cfg_id,int depend_cfg_id, const char *raw_cfg_value, const void *expect_range_array, int array_num)
+{
+ if(NULL == raw_cfg_value){
+ return -1;
+ }
+
+ return 0;
+}
+
static int cfg_value_check_worker_threads(const sapp_config_check_t *sapp_cfg_check_attr,int this_cfg_id,int depend_cfg_id, const char *raw_cfg_value, const void *expect_range_array, int array_num)
{
- int cfg_value = atoi(raw_cfg_value);
+ int cfg_value_int;
+
+ if(NULL == raw_cfg_value){
+ return -1;
+ }
+ cfg_value_int = atoi(raw_cfg_value);
int cur_sys_cpu_num = get_nprocs();
- if(cfg_value <= 0 || cur_sys_cpu_num < cfg_value){
+ if(cfg_value_int <= 0 || cur_sys_cpu_num < cfg_value_int){
//printf("\033[33m[Warning]sapp.toml->CPU.worker_threads=%d more than current available processors:%d\033[0m\n", sapp_global_val->config.cpu.worker_threads, cur_sys_cpu_num);
//sapp_runtime_log(RLOG_LV_INFO, "[Warning]sapp.toml->CPU.worker_threads=%d more than current available processors:%d", sapp_global_val->config.cpu.worker_threads, cur_sys_cpu_num);
return -1;
@@ -102,7 +133,7 @@ static int cfg_value_check_bind_mask(const sapp_config_check_t *sapp_cfg_check_a
}
if(0 == bind_mask_array_num){
- return 0; /* ����������, ������CPU */
+ return 0; /* ����������, ������CPU,������� */
}
const char *raw_cfg_worker_threads_value = sapp_cfg_get_value_from_attr_by_id(sapp_cfg_check_attr, depend_cfg_id);
@@ -132,7 +163,7 @@ static int cfg_value_check_stream_id_base_time(const sapp_config_check_t *sapp_c
struct tm local_tm;
if(NULL == raw_cfg_value || strlen(raw_cfg_value) <= 0){
- return 0; /* ����ΪNULL */
+ return 0; /* ����ΪNULL,������� */
}
if(strptime(raw_cfg_value, "%Y-%m-%d %H:%M:%S", &local_tm) == NULL){
@@ -149,6 +180,8 @@ static int cfg_value_check_stream_id_base_time(const sapp_config_check_t *sapp_c
}
+
+
static const char *cfg_chk_value_overlay_mode[2] = {"none", "vxlan"};
static const char *cfg_chk_value_pcap_capture_direction[3] = {"in", "out", "inout"};
static const char *cfg_chk_value_inject_pkt_mode[4] = {"sys_route", "vxlan_by_inline_device", "raw_ethernet_single_gateway", "raw_ethernet_multi_gateway"};
@@ -159,144 +192,255 @@ static const char *cfg_chk_value_pkt_dump_mode[2] = {"storage", "udp_socket"};
static const sapp_config_check_t g_sapp_cfg_check_attr[] =
{
- {1000,0,"SYSTEM", "instance_name", NULL, NULL, NULL, 0},
+ {1000,0,RLOG_LV_INFO,"SYSTEM", "instance_name", NULL,NULL, NULL, NULL, 0},
- {2001,1,"CPU", "worker_threads", cfg_value_check_worker_threads, NULL, NULL, 0},
- {2002,0,"CPU", "send_only_threads_max", NULL, NULL, NULL, 0},
- {2003,2001,"CPU", "bind_mask", cfg_value_check_bind_mask, NULL, NULL, 0},
+ {2001,1,RLOG_LV_FATAL,"CPU", "worker_threads", NULL,cfg_value_check_worker_threads, NULL, NULL, 0},
+ {2002,0,RLOG_LV_DEBUG, "CPU", "send_only_threads_max", NULL,NULL, NULL, NULL, 0},
+ {2003,2001,RLOG_LV_FATAL,"CPU", "bind_mask", "",cfg_value_check_bind_mask, NULL, NULL, 0},
- {3001,0,"MEM", "dictator_enable", cfg_value_check_integer_range, NULL, g_interger_range_array, 2}, /* ֻ����0��1, ���Ծ���ǰ2��Ԫ�� */
+ {3001,0, RLOG_LV_INFO,"MEM", "dictator_enable", NULL,cfg_value_check_integer_range, NULL, g_interger_range_array, 2}, /* ֻ����0��1, ���Ծ���ǰ2��Ԫ�� */
- {4000,0,"PACKET_IO", NULL, NULL, NULL, NULL, 0},
+ {4000,0,RLOG_LV_DEBUG,"PACKET_IO", NULL, NULL, NULL,NULL, NULL, 0},
- {4101,1,"overlay_tunnel_definition", "l2_l3_tunnel_support", cfg_value_check_integer_range, NULL, g_interger_range_array, 2},
- {4102,4101,"overlay_tunnel_definition", "overlay_mode", cfg_value_check_string_range, NULL, cfg_chk_value_overlay_mode, 2},
+ {4101,1,RLOG_LV_INFO,"overlay_tunnel_definition", "l2_l3_tunnel_support", NULL,cfg_value_check_integer_range, NULL, g_interger_range_array, 2},
+ {4102,4101,RLOG_LV_INFO,"overlay_tunnel_definition", "overlay_mode", "1",cfg_value_check_string_range, NULL, cfg_chk_value_overlay_mode, 2},
- {4201,0,"packet_io.feature", "inbound_route_dir", cfg_value_check_integer_range, NULL, g_interger_range_array, 2},
- {4202,0,"packet_io.feature", "BSD_packet_filter", NULL, NULL, NULL, 0},
- {4203,0,"packet_io.feature", "pcap_capture_direction", cfg_value_check_string_range, NULL, cfg_chk_value_pcap_capture_direction, 3},
- {4204,0,"packet_io.feature", "inject_pkt_mode", cfg_value_check_string_range, NULL, cfg_chk_value_inject_pkt_mode, 4},
- {4205,4204,"packet_io.feature", "inject_mode_inline_device_sport", cfg_value_check_integer_range, NULL, g_interger_range_array, 65535},
- {4206,4204,"packet_io.feature", "inject_mode_single_gateway_device", NULL, NULL, NULL, 0},
- {4207,4204,"packet_io.feature", "inject_mode_single_gateway_src_mac", NULL, NULL, NULL, 0},
- {4208,4204,"packet_io.feature", "inject_mode_single_gateway_dst_mac", NULL, NULL, NULL, 0},
- {4209,0,"packet_io.feature", "dumpfile_sleep_time_before_exit", cfg_value_check_integer_range, NULL, g_interger_range_array, 65535},
-
- {4301,1,"packet_io.depolyment", "mode", cfg_value_check_string_range, NULL, cfg_chk_value_depolyment_mode, 3},
- {4302,1,"packet_io.internal.interface", "type", cfg_value_check_string_range, NULL, cfg_chk_value_interface_type, 2},
- {4303,1,"packet_io.internal.interface", "name", NULL, NULL, NULL, 0},
- {4304,4301,"packet_io.external.interface", "type", cfg_value_check_string_range, NULL, cfg_chk_value_interface_type, 2},
- {4305,4301,"packet_io.external.interface", "name", NULL, NULL, NULL, 0},
- {4306,0,"packet_io.polling", "enabled", cfg_value_check_integer_range, NULL, g_interger_range_array, 2},
- {4307,0,"packet_io.polling", "polling_priority", cfg_value_check_integer_range, NULL, g_interger_range_array, 100},
-
- {4401,0,"PROTOCOL_FEATURE", "ipv6_decapsulation_enabled", NULL, NULL, NULL, 0},
- {4402,0,"PROTOCOL_FEATURE", "ipv6_send_packet_enabled", NULL, NULL, NULL, 0},
- {4403,0,"PROTOCOL_FEATURE", "tcp_drop_pure_ack_pkt", NULL, NULL, NULL, 0},
- {4404,0,"PROTOCOL_FEATURE", "tcp_syn_option_parse_enabled", NULL, NULL, NULL, 0},
- {4405,0,"PROTOCOL_FEATURE", "skip_not_ip_layer_over_eth", NULL, NULL, NULL, 0},
- {4406,0,"PROTOCOL_FEATURE", "ipv6_decapsulation_enabled", NULL, NULL, NULL, 0},
- {4407,0,"PROTOCOL_FEATURE", "ipv6_decapsulation_enabled", NULL, NULL, NULL, 0},
- {4408,0,"PROTOCOL_FEATURE", "reverse_ethernet_addr", NULL, NULL, NULL, 0},
-
- {4501,0,"dup_pkt.traffic.original", "original_ipv4_tcp_enabled", NULL, NULL, NULL, 0},
- {4502,0,"dup_pkt.traffic.original", "original_ipv4_udp_enabled", NULL, NULL, NULL, 0},
- {4503,0,"dup_pkt.traffic.inject", "inject_all_enabled", NULL, NULL, NULL, 0},
- {4504,0,"dup_pkt.parameters", "bloom_capacity", NULL, NULL, NULL, 0},
- {4505,0,"dup_pkt.parameters", "bloom_error_rate", NULL, NULL, NULL, 0},
- {4506,0,"dup_pkt.parameters", "bloom_timeout", NULL, NULL, NULL, 0},
-
- {5001,0,"STREAM", "stream_id_base_time", cfg_value_check_stream_id_base_time, NULL, NULL, 0},
+ {4201,0,RLOG_LV_INFO,"packet_io.feature", "inbound_route_dir", NULL,cfg_value_check_integer_range, NULL, g_interger_range_array, 2},
+ {4202,0,RLOG_LV_DEBUG,"packet_io.feature", "BSD_packet_filter", NULL,NULL, NULL, NULL, 0},
+ {4203,0,RLOG_LV_DEBUG,"packet_io.feature", "pcap_capture_direction", NULL,cfg_value_check_string_range, NULL, cfg_chk_value_pcap_capture_direction, 3},
+ {4204,4301,RLOG_LV_INFO,"packet_io.feature", "inject_pkt_mode", "mirror",cfg_value_check_string_range, NULL, cfg_chk_value_inject_pkt_mode, 4},
+ {4205,4204,RLOG_LV_INFO,"packet_io.feature", "inject_mode_inline_device_sport", "vxlan_by_inline_device",cfg_value_check_inject_mode, NULL, g_interger_range_array, 65535},
+ {4206,4204,RLOG_LV_INFO,"packet_io.feature", "inject_mode_single_gateway_device", "raw_ethernet_single_gateway",cfg_value_check_inject_mode, NULL, NULL, 0},
+ {4207,4204,RLOG_LV_INFO,"packet_io.feature", "inject_mode_single_gateway_src_mac", "raw_ethernet_single_gateway",cfg_value_check_inject_mode, NULL, NULL, 0},
+ {4208,4204,RLOG_LV_INFO,"packet_io.feature", "inject_mode_single_gateway_dst_mac", "raw_ethernet_single_gateway",cfg_value_check_inject_mode, NULL, NULL, 0},
+ {4209,0,RLOG_LV_DEBUG,"packet_io.feature", "dumpfile_sleep_time_before_exit", NULL, cfg_value_check_integer_range, NULL, g_interger_range_array, 65535},
+
+ {4301,1,RLOG_LV_FATAL,"packet_io.depolyment", "mode", NULL,cfg_value_check_string_range, NULL, cfg_chk_value_depolyment_mode, 3},
+ {4302,1,RLOG_LV_FATAL,"packet_io.internal.interface", "type", NULL,cfg_value_check_string_range, NULL, cfg_chk_value_interface_type, 2},
+ {4303,1,RLOG_LV_FATAL,"packet_io.internal.interface", "name", NULL,cfg_value_check_string_non_null, NULL, NULL, 0},
+ {4304,4301,RLOG_LV_FATAL,"packet_io.external.interface", "type", "transparent",cfg_value_check_string_range, NULL, cfg_chk_value_interface_type, 2},
+ {4305,4301,RLOG_LV_FATAL,"packet_io.external.interface", "name", "transparent",cfg_value_check_string_non_null, NULL, NULL, 0},
+ {4306,0,RLOG_LV_DEBUG,"packet_io.polling", "enabled", NULL,cfg_value_check_integer_range, NULL, g_interger_range_array, 2},
+ {4307,0,RLOG_LV_DEBUG,"packet_io.polling", "polling_priority", NULL,cfg_value_check_integer_range, NULL, g_interger_range_array, 100},
+
+ {4401,0,RLOG_LV_DEBUG,"PROTOCOL_FEATURE", "ipv6_decapsulation_enabled", NULL,NULL, NULL, NULL, 0},
+ {4402,0,RLOG_LV_DEBUG,"PROTOCOL_FEATURE", "ipv6_send_packet_enabled", NULL,NULL, NULL, NULL, 0},
+ {4403,0,RLOG_LV_DEBUG,"PROTOCOL_FEATURE", "tcp_drop_pure_ack_pkt", NULL,NULL, NULL, NULL, 0},
+ {4404,0,RLOG_LV_DEBUG,"PROTOCOL_FEATURE", "tcp_syn_option_parse_enabled", NULL,NULL, NULL, NULL, 0},
+ {4405,0,RLOG_LV_DEBUG,"PROTOCOL_FEATURE", "skip_not_ip_layer_over_eth", NULL,NULL, NULL, NULL, 0},
+ {4406,0,RLOG_LV_DEBUG,"PROTOCOL_FEATURE", "ipv6_decapsulation_enabled", NULL,NULL, NULL, NULL, 0},
+ {4407,0,RLOG_LV_DEBUG,"PROTOCOL_FEATURE", "ipv6_decapsulation_enabled", NULL,NULL, NULL, NULL, 0},
+
+ {4501,0,RLOG_LV_INFO,"dup_pkt.traffic.original", "original_ipv4_tcp_enabled", NULL,NULL, NULL, NULL, 0},
+ {4502,0,RLOG_LV_INFO,"dup_pkt.traffic.original", "original_ipv4_udp_enabled", NULL,NULL, NULL, NULL, 0},
+ {4503,0,RLOG_LV_INFO,"dup_pkt.traffic.inject", "inject_all_enabled", NULL,NULL, NULL, NULL, 0},
+ {4504,0,RLOG_LV_INFO,"dup_pkt.parameters", "bloom_capacity", NULL,NULL, NULL, NULL, 0},
+ {4505,0,RLOG_LV_INFO,"dup_pkt.parameters", "bloom_error_rate", NULL,NULL, NULL, NULL, 0},
+ {4506,0,RLOG_LV_INFO,"dup_pkt.parameters", "bloom_timeout", NULL,NULL, NULL, NULL, 0},
+
+ {5001,0,RLOG_LV_INFO,"STREAM", "stream_id_base_time", NULL,cfg_value_check_stream_id_base_time, NULL, NULL, 0},
- {5101,1,"stream.tcp", "max", NULL, NULL, NULL, 0},
- {5102,1,"stream.tcp", "timeout", cfg_value_check_integer_range, NULL, g_interger_range_array, 65535},
- {5103,1,"stream.tcp", "syn_mandatory", cfg_value_check_integer_range, NULL, g_interger_range_array, 2},
- {5104,0,"stream.tcp", "reorder_pkt_max", cfg_value_check_integer_range, NULL, g_interger_range_array, 65535},
- {5105,0,"stream.tcp", "analyse_option_enabled", NULL, NULL, NULL, 0},
- {5106,0,"stream.tcp", "tuple4_reuse_time_interval", NULL, NULL, NULL, 0},
- {5107,0,"stream.tcp", "meaningful_statistics_minimum_pkt", NULL, NULL, NULL, 0},
- {5108,0,"stream.tcp", "meaningful_statistics_minimum_byte", NULL, NULL, NULL, 0},
-
- {5201,0,"stream.tcp.inject", "link_mss", NULL, NULL, NULL, 0},
- {5202,0,"stream.tcp.inject.rst", "auto_remedy", NULL, NULL, NULL, 0},
- {5203,5202,"stream.tcp.inject.rst", "number", cfg_value_check_integer_range, NULL, g_interger_range_array, 10},
- {5204,0,"stream.tcp.inject.rst", "signature_enabled", NULL, NULL, NULL, 0},
- {5205,5204,"stream.tcp.inject.rst", "signature_seed1", NULL, NULL, NULL, 0},
- {5206,5204,"stream.tcp.inject.rst", "signature_seed2", NULL, NULL, NULL, 0},
- {5207,5202,"stream.tcp.inject.rst", "remedy_kill_tcp_by_inline_device", NULL, NULL, NULL, 0},
-
- {5301,1,"stream.udp", "max", NULL, NULL, NULL, 0},
- {5302,1,"stream.udp", "timeout", cfg_value_check_integer_range, NULL, g_interger_range_array, 65535},
- {5303,0,"stream.udp", "meaningful_statistics_minimum_pkt", NULL, NULL, NULL, 0},
- {5304,0,"stream.udp", "meaningful_statistics_minimum_byte", NULL, NULL, NULL, 0},
-
- {6000,0,"PROFILING", NULL, NULL, NULL, NULL, 0},
- {6101,0,"profiling.pkt_latency", "enabled", NULL, NULL, NULL, 0},
- {6102,6101,"profiling.pkt_latency", "threshold", NULL, NULL, NULL, 0},
-
- {6201,0,"profiling.sanity_check", "raw_pkt_broken_enabled", NULL, NULL, NULL, 0},
- {6202,0,"profiling.sanity_check", "symbol_conflict_enabled", NULL, NULL, NULL, 0},
-
- {6301,1,"profiling.log", "level", NULL, NULL, NULL, 0},
- {6302,0,"profiling.log", "interval", NULL, NULL, NULL, 0},
+ {5101,1,RLOG_LV_FATAL,"stream.tcp", "max", NULL,NULL, NULL, NULL, 0},
+ {5102,1,RLOG_LV_FATAL,"stream.tcp", "timeout", NULL,cfg_value_check_integer_range, NULL, g_interger_range_array, 65535},
+ {5103,1,RLOG_LV_FATAL,"stream.tcp", "syn_mandatory", NULL,cfg_value_check_integer_range, NULL, g_interger_range_array, 2},
+ {5104,1,RLOG_LV_FATAL,"stream.tcp", "reorder_pkt_max", NULL,cfg_value_check_integer_range, NULL, g_interger_range_array, 65535},
+ {5105,0,RLOG_LV_INFO,"stream.tcp", "analyse_option_enabled", NULL,NULL, NULL, NULL, 0},
+ {5106,0,RLOG_LV_INFO,"stream.tcp", "tuple4_reuse_time_interval", NULL,NULL, NULL, NULL, 0},
+ {5107,0,RLOG_LV_INFO,"stream.tcp", "meaningful_statistics_minimum_pkt", NULL,NULL, NULL, NULL, 0},
+ {5108,0,RLOG_LV_INFO,"stream.tcp", "meaningful_statistics_minimum_byte", NULL,NULL, NULL, NULL, 0},
+
+ {5201,0,RLOG_LV_INFO,"stream.tcp.inject", "link_mss", NULL,NULL, NULL, NULL, 0},
+ {5202,0,RLOG_LV_INFO,"stream.tcp.inject.rst", "auto_remedy", NULL,NULL, NULL, NULL, 0},
+ {5203,0,RLOG_LV_INFO,"stream.tcp.inject.rst", "number", NULL,cfg_value_check_integer_range, NULL, g_interger_range_array, 10},
+ {5204,0,RLOG_LV_INFO,"stream.tcp.inject.rst", "signature_enabled", NULL,NULL, NULL, NULL, 0},
+ {5205,5204,RLOG_LV_INFO,"stream.tcp.inject.rst", "signature_seed1", "1",NULL, NULL, NULL, 0},
+ {5206,5204,RLOG_LV_INFO,"stream.tcp.inject.rst", "signature_seed2", "1",NULL, NULL, NULL, 0},
+ {5207,5202,RLOG_LV_INFO,"stream.tcp.inject.rst", "remedy_kill_tcp_by_inline_device", "1",NULL, NULL, NULL, 0},
+
+ {5301,1,RLOG_LV_FATAL,"stream.udp", "max", NULL, NULL, NULL, NULL, 0},
+ {5302,1,RLOG_LV_FATAL,"stream.udp", "timeout", NULL,cfg_value_check_integer_range, NULL, g_interger_range_array, 65535},
+ {5303,0,RLOG_LV_INFO,"stream.udp", "meaningful_statistics_minimum_pkt", NULL,NULL, NULL, NULL, 0},
+ {5304,0,RLOG_LV_INFO,"stream.udp", "meaningful_statistics_minimum_byte", NULL,NULL, NULL, NULL, 0},
+
+ {6000,0,RLOG_LV_DEBUG,"PROFILING", NULL,NULL, NULL, NULL, NULL, 0},
+ {6101,0,RLOG_LV_DEBUG,"profiling.pkt_latency", "enabled", NULL,NULL, NULL, NULL, 0},
+ {6102,6101,RLOG_LV_DEBUG,"profiling.pkt_latency", "threshold", "1",NULL, NULL, NULL, 0},
+
+ {6201,0,RLOG_LV_DEBUG,"profiling.sanity_check", "raw_pkt_broken_enabled", NULL,NULL, NULL, NULL, 0},
+ {6202,0,RLOG_LV_DEBUG,"profiling.sanity_check", "symbol_conflict_enabled", NULL,NULL, NULL, NULL, 0},
+
+ {6301,1,RLOG_LV_FATAL,"profiling.log", "level", NULL,NULL, NULL, NULL, 0},
+ {6302,0,RLOG_LV_INFO,"profiling.log", "interval", NULL,NULL, NULL, NULL, 0},
- {6401,0,"profiling.log.local", "enabled", NULL, NULL, NULL, 0},
- {6402,0,"profiling.log.local", "file_truncate_enabled", NULL, NULL, NULL, 0},
+ {6401,0,RLOG_LV_INFO,"profiling.log.local", "enabled", NULL, NULL, NULL, 0},
+ {6402,0,RLOG_LV_INFO,"profiling.log.local", "file_truncate_enabled", NULL, NULL, NULL, 0},
- {6501,0,"profiling.log.remote", "enabled", NULL, NULL, NULL, 0},
- {6502,6501,"profiling.log.remote", "server_ip", NULL, NULL, NULL, 0},
- {6503,6501,"profiling.log.remote", "server_port", cfg_value_check_integer_range, NULL, g_interger_range_array, 65535},
+ {6501,0,RLOG_LV_INFO,"profiling.log.remote", "enabled", NULL,NULL, NULL, NULL, 0},
+ {6502,6501,RLOG_LV_INFO,"profiling.log.remote", "server_ip", "1",NULL, NULL, NULL, 0},
+ {6503,6501,RLOG_LV_INFO,"profiling.log.remote", "server_port", "1",cfg_value_check_integer_range, NULL, g_interger_range_array, 65535},
- {6601,0,"profiling.log.remote.field_stat2", "metric_type", NULL, NULL, NULL, 0},
- {6602,0,"profiling.log.remote.field_stat2", "app_name", NULL, NULL, NULL, 0},
+ {6601,0,RLOG_LV_INFO,"profiling.log.remote.field_stat2", "metric_type", NULL,NULL, NULL, NULL, 0},
+ {6602,0,RLOG_LV_INFO,"profiling.log.remote.field_stat2", "app_name", NULL, NULL, NULL, NULL, 0},
- {6701,0,"profiling.log.prometheus", "prometheus_enabled", NULL, NULL, NULL, 0},
- {6702,6701,"profiling.log.prometheus", "prometheus_port", cfg_value_check_integer_range, NULL, g_interger_range_array, 65535},
- {6703,6701,"profiling.log.prometheus", "prometheus_url_path", NULL, NULL, NULL, 0},
+ {6701,0,RLOG_LV_INFO,"profiling.log.prometheus", "prometheus_enabled", NULL, NULL, NULL, NULL, 0},
+ {6702,6701,RLOG_LV_INFO,"profiling.log.prometheus", "prometheus_port", "1",cfg_value_check_integer_range, NULL, g_interger_range_array, 65535},
+ {6703,6701,RLOG_LV_INFO,"profiling.log.prometheus", "prometheus_url_path", "1",NULL, NULL, NULL, 0},
- {7000,0,"TOOLS", NULL, NULL, NULL, NULL, 0},
+ {7000,0,RLOG_LV_DEBUG,"TOOLS", NULL, NULL, NULL, NULL, NULL, 0},
- {7101,0,"tools.pkt_dump", "enabled", NULL, NULL, NULL, 0},
- {7102,7101,"tools.pkt_dump", "mode", cfg_value_check_string_range, NULL, cfg_chk_value_pkt_dump_mode, 2},
- {7103,0,"tools.pkt_dump", "BSD_packet_filter", NULL, NULL, NULL, 0},
+ {7101,0,RLOG_LV_FATAL,"tools.pkt_dump", "enabled", NULL, NULL, NULL, NULL, 0},
+ {7102,7101,RLOG_LV_FATAL,"tools.pkt_dump", "mode", "1", cfg_value_check_string_range, NULL, cfg_chk_value_pkt_dump_mode, 2},
+ {7103,0,RLOG_LV_DEBUG,"tools.pkt_dump", "BSD_packet_filter", NULL, NULL, NULL, NULL, 0},
- {7201,0,"tools.pkt_dump.threads", "all_threads_enabled", NULL, NULL, NULL, 0},
- {7202,0,"tools.pkt_dump.threads", "dump_thread_id", NULL, NULL, NULL, 0},
+ {7201,0,RLOG_LV_DEBUG,"tools.pkt_dump.threads", "all_threads_enabled", NULL, NULL, NULL, NULL, 0},
+ {7202,0,RLOG_LV_DEBUG,"tools.pkt_dump.threads", "dump_thread_id", NULL, NULL, NULL, NULL, 0},
- {7301,0,"tools.pkt_dump.udp", "command_port", cfg_value_check_integer_range, NULL, g_interger_range_array, 65535},
- {7302,0,"tools.pkt_dump.udp", "pkt_dump_ratio", NULL, NULL, NULL, 0},
+ {7301,7102,RLOG_LV_FATAL,"tools.pkt_dump.udp", "command_port", "udp_socket", cfg_value_check_integer_range, NULL, g_interger_range_array, 65535},
+ {7302,7102,RLOG_LV_DEBUG,"tools.pkt_dump.udp", "pkt_dump_ratio", "udp_socket",NULL, NULL, NULL, 0},
- {7401,0,"tools.pkt_dump.storage", "path", NULL, NULL, NULL, 0},
- {7402,0,"tools.pkt_dump.storage", "file_size_max_per_thread", NULL, NULL, NULL, 0},
-
- {8001,0,"breakpad", "disable_coredump", NULL, NULL, NULL, 0},
- {8002,0,"breakpad", "enable_breakpad", NULL, NULL, NULL, 0},
- {8003,8002,"breakpad", "breakpad_minidump_dir", NULL, NULL, NULL, 0},
- {8004,0,"breakpad", "enable_breakpad_upload", NULL, NULL, NULL, 0},
- {8005,8004,"breakpad", "breakpad_upload_url", NULL, NULL, NULL, 0},
-
- {9001,1,"SECONDARY_CONFIG_LINK", "cfg_file_sapp_log", NULL, NULL, NULL, 0},
- {9002,1,"SECONDARY_CONFIG_LINK", "cfg_file_plug_list", NULL, NULL, NULL, 0},
- {9003,0,"SECONDARY_CONFIG_LINK", "cfg_file_project_list", NULL, NULL, NULL, 0},
- {9004,1,"SECONDARY_CONFIG_LINK", "cfg_file_entrylist", NULL, NULL, NULL, 0},
- {9005,0,"SECONDARY_CONFIG_LINK", "cfg_file_send_raw_pkt", NULL, NULL, NULL, 0},
- {9006,4301,"SECONDARY_CONFIG_LINK", "cfg_file_vxlan_sport_map", NULL, NULL, NULL, 0},
- {9007,4301,"SECONDARY_CONFIG_LINK", "cfg_file_inline_device", NULL, NULL, NULL, 0},
- {9008,0,"SECONDARY_CONFIG_LINK", "cfg_file_necessary_plug_list", NULL, NULL, NULL, 0},
- {9009,0,"SECONDARY_CONFIG_LINK", "cfg_file_stream_compare_layer", NULL, NULL, NULL, 0},
- {9010,4301,"SECONDARY_CONFIG_LINK", "cfg_file_vlan_flipping", NULL, NULL, NULL, 0},
- {9011,0,"SECONDARY_CONFIG_LINK", "cfg_file_asymmetric_addr_layer", NULL, NULL, NULL, 0},
+ {7401,7102,RLOG_LV_FATAL,"tools.pkt_dump.storage", "path", "storage",NULL, NULL, NULL, 0},
+ {7402,7102,RLOG_LV_INFO,"tools.pkt_dump.storage", "file_size_max_per_thread", "storage",NULL, NULL, NULL, 0},
+
+ {8001,0,RLOG_LV_DEBUG,"breakpad", "disable_coredump", NULL,NULL, NULL, NULL, 0},
+ {8002,0,RLOG_LV_DEBUG,"breakpad", "enable_breakpad", NULL,NULL, NULL, NULL, 0},
+ {8003,8002,RLOG_LV_DEBUG,"breakpad", "breakpad_minidump_dir", "1",NULL, NULL, NULL, 0},
+ {8004,0,RLOG_LV_DEBUG,"breakpad", "enable_breakpad_upload", NULL,NULL, NULL, NULL, 0},
+ {8005,8004,RLOG_LV_DEBUG,"breakpad", "breakpad_upload_url", "1",NULL, NULL, NULL, 0},
+
+ {9001,1,RLOG_LV_FATAL,"SECONDARY_CONFIG_LINK", "cfg_file_sapp_log", NULL,NULL, NULL, NULL, 0},
+ {9002,1,RLOG_LV_FATAL,"SECONDARY_CONFIG_LINK", "cfg_file_plug_list", NULL,NULL, NULL, NULL, 0},
+ {9003,0,RLOG_LV_DEBUG, "SECONDARY_CONFIG_LINK", "cfg_file_project_list", NULL,NULL, NULL, NULL, 0},
+ {9004,1,RLOG_LV_FATAL,"SECONDARY_CONFIG_LINK", "cfg_file_entrylist", NULL,NULL, NULL, NULL, 0},
+ {9005,0,RLOG_LV_DEBUG, "SECONDARY_CONFIG_LINK", "cfg_file_send_raw_pkt", NULL,NULL, NULL, NULL, 0},
+ {9006,4301,RLOG_LV_FATAL,"SECONDARY_CONFIG_LINK", "cfg_file_vxlan_sport_map", "inline",NULL, NULL, NULL, 0},
+ {9007,4301,RLOG_LV_FATAL,"SECONDARY_CONFIG_LINK", "cfg_file_inline_device", "inline",NULL, NULL, NULL, 0},
+ {9008,0,RLOG_LV_DEBUG, "SECONDARY_CONFIG_LINK", "cfg_file_necessary_plug_list", NULL,NULL, NULL, NULL, 0},
+ {9009,0,RLOG_LV_DEBUG, "SECONDARY_CONFIG_LINK", "cfg_file_stream_compare_layer", NULL,NULL, NULL, NULL, 0},
+ {9010,4301,RLOG_LV_FATAL,"SECONDARY_CONFIG_LINK", "cfg_file_vlan_flipping", "inline",NULL, NULL, NULL, 0},
+ {9011,0,RLOG_LV_DEBUG, "SECONDARY_CONFIG_LINK", "cfg_file_asymmetric_addr_layer", NULL,NULL, NULL, NULL, 0},
- {9101,1,"SECONDARY_DATA_LINK", "data_file_sysinfo_log", NULL, NULL, NULL, 0},
- {9102,6501,"SECONDARY_DATA_LINK", "data_file_field_stat_log", NULL, NULL, NULL, 0},
- {9103,4301,"SECONDARY_DATA_LINK", "data_file_inline_keepalive_log", NULL, NULL, NULL, 0},
+ {9101,1,RLOG_LV_INFO,"SECONDARY_DATA_LINK", "data_file_sysinfo_log", NULL,NULL, NULL, NULL, 0},
+ {9102,6501,RLOG_LV_DEBUG, "SECONDARY_DATA_LINK", "data_file_field_stat_log", "1",NULL, NULL, NULL, 0},
+ {9103,4301,RLOG_LV_DEBUG, "SECONDARY_DATA_LINK", "data_file_inline_keepalive_log", "inline",NULL, NULL, NULL, 0},
+
+
+ /* ��������ʷ���������ֹ�������, Ҳ�������,Ҳ���㲻֧��,����澯��Ϣ��ʾ���������� */
+ {SAPP_CFG_OBSOLETE_FLAG,0,RLOG_LV_INFO,"overlay_tunnel_definition","stream_compare_layer_cfg_file",NULL, NULL, NULL,NULL, 0},
+ {SAPP_CFG_OBSOLETE_FLAG,0,RLOG_LV_INFO,"overlay_tunnel_definition","vlan_flipping_cfg_file",NULL, NULL, NULL,NULL, 0},
+ {SAPP_CFG_OBSOLETE_FLAG,0,RLOG_LV_INFO,"overlay_tunnel_definition","asymmetric_presence_layer_cfg_file",NULL, NULL, NULL,NULL, 0},
+ {SAPP_CFG_OBSOLETE_FLAG,0,RLOG_LV_INFO,"overlay_tunnel_definition","asymmetric_addr_layer_cfg_file",NULL, NULL, NULL,NULL, 0},
+ {SAPP_CFG_OBSOLETE_FLAG,0,RLOG_LV_INFO,"overlay_tunnel_definition","prune_inject_layer_cfg_file",NULL, NULL, NULL,NULL, 0},
+ {SAPP_CFG_OBSOLETE_FLAG,0,RLOG_LV_INFO,"PROTOCOL_FEATURE","treat_vlan_as_mac_in_mac",NULL, NULL, NULL,NULL, 0},
+ {SAPP_CFG_OBSOLETE_FLAG,0,RLOG_LV_INFO,"PROTOCOL_FEATURE","reverse_ethernet_addr",NULL, NULL, NULL,NULL, 0},
+
+ {SAPP_CFG_OBSOLETE_FLAG,0,RLOG_LV_INFO,"DUPLICATE_PKT","duplicate_pkt_distinguish",NULL, NULL, NULL,NULL, 0},
+ {SAPP_CFG_OBSOLETE_FLAG,0,RLOG_LV_INFO,"DUPLICATE_PKT","bloom_capacity",NULL, NULL, NULL,NULL, 0},
+ {SAPP_CFG_OBSOLETE_FLAG,0,RLOG_LV_INFO,"DUPLICATE_PKT","bloom_error_rate",NULL, NULL, NULL,NULL, 0},
+ {SAPP_CFG_OBSOLETE_FLAG,0,RLOG_LV_INFO,"DUPLICATE_PKT","bloom_timeout",NULL, NULL, NULL,NULL, 0},
+
+ {SAPP_CFG_OBSOLETE_FLAG,0,RLOG_LV_INFO,"profiling.log.local","log_file_name",NULL, NULL, NULL,NULL, 0},
+ {SAPP_CFG_OBSOLETE_FLAG,0,RLOG_LV_INFO,"profiling.log.local","log_conf_name",NULL, NULL, NULL,NULL, 0},
+
+ {SAPP_CFG_OBSOLETE_FLAG,0,RLOG_LV_INFO,"SPECIAL_CONFIG_LINK","project_list_path",NULL, NULL, NULL,NULL, 0},
+ {SAPP_CFG_OBSOLETE_FLAG,0,RLOG_LV_INFO,"SPECIAL_CONFIG_LINK","plugin_path",NULL, NULL, NULL,NULL, 0},
+ {SAPP_CFG_OBSOLETE_FLAG,0,RLOG_LV_INFO,"SPECIAL_CONFIG_LINK","entrylist_path",NULL, NULL, NULL,NULL, 0},
+ {SAPP_CFG_OBSOLETE_FLAG,0,RLOG_LV_INFO,"SPECIAL_CONFIG_LINK","send_raw_pkt_path",NULL, NULL, NULL,NULL, 0},
+ {SAPP_CFG_OBSOLETE_FLAG,0,RLOG_LV_INFO,"SPECIAL_CONFIG_LINK","vxlan_sport_service_map_path",NULL, NULL, NULL,NULL, 0},
+
- {-1,-1,NULL,NULL,NULL, NULL, NULL, 0}
+ {-1,-1,RLOG_LV_DEBUG,NULL,NULL,NULL, NULL, NULL,NULL, 0}
};
static const int g_sapp_cfg_check_attr_num = sizeof(g_sapp_cfg_check_attr)/sizeof(sapp_config_check_t) - 1; /* ����и�������, ȫ��NULL */
+
+static int cfg_get_index_by_cfg_id(int expect_cfg_id)
+{
+ int i;
+
+ for(i = 0; g_sapp_cfg_check_attr[i].global_id != -1; i++){
+ if(g_sapp_cfg_check_attr[i].global_id == expect_cfg_id){
+ return i;
+ }
+ }
+
+ return -1;
+}
+
+
+static int cfg_get_index_by_depend_id(int expect_depend_id)
+{
+ int i;
+
+ for(i = 0; g_sapp_cfg_check_attr[i].global_id != -1; i++){
+ if(g_sapp_cfg_check_attr[i].global_id == expect_depend_id){
+ return i;
+ }
+ }
+
+ return -1;
+}
+
+static int cfg_get_index_by_key_name(const char *keyname)
+{
+ int i;
+
+ for(i = 0; g_sapp_cfg_check_attr[i].global_id != -1; i++){
+ if((g_sapp_cfg_check_attr[i].cfg_key != NULL)
+ &&(strncasecmp(g_sapp_cfg_check_attr[i].cfg_key, keyname, strlen(g_sapp_cfg_check_attr[i].cfg_key)) == 0)
+ &&(strncasecmp(g_sapp_cfg_check_attr[i].cfg_key, keyname, strlen(keyname)) == 0)){
+ return i;
+ }
+ }
+
+ return -1;
+}
+
+
+static int cfg_value_check_inject_mode(const sapp_config_check_t *sapp_cfg_check_attr,int this_cfg_id,int depend_cfg_id, const char *raw_cfg_value, const void *expect_range_array, int array_num)
+{
+ int depend_cfg_index;
+ const char *depend_cfg_value;
+ int this_cfg_index, expect_cfg_index;
+
+ this_cfg_index = cfg_get_index_by_cfg_id(this_cfg_id);
+ depend_cfg_index = cfg_get_index_by_depend_id(depend_cfg_id);
+ depend_cfg_value = sapp_cfg_check_attr[depend_cfg_index].cfg_value;
+
+ /* raw_cfg_value������NULL, ��ʱӦ�����ж�depend_cfg_value, �������������, ��̫�����ǿ� */
+
+ if(strncasecmp(depend_cfg_value, "vxlan_by_inline_device", strlen("vxlan_by_inline_device")) == 0){
+ expect_cfg_index = cfg_get_index_by_key_name("inject_mode_inline_device_sport");
+ if((NULL == sapp_cfg_check_attr[expect_cfg_index].cfg_value ) && (this_cfg_index == expect_cfg_index)){
+ printf("\033[1;31;40m[Error]sapp.toml->inject_pkt_mode value is 'vxlan_by_inline_device', but not found '%s'!\033[0m\n", "inject_mode_inline_device_sport");
+ return -1;
+ }
+ }
+
+ if(strncasecmp(depend_cfg_value, "raw_ethernet_single_gateway", strlen("raw_ethernet_single_gateway")) == 0){
+ expect_cfg_index = cfg_get_index_by_key_name("inject_mode_single_gateway_device");
+ if((NULL == sapp_cfg_check_attr[expect_cfg_index].cfg_value ) && (this_cfg_index == expect_cfg_index)){
+ printf("\033[1;31;40m[Error]sapp.toml->inject_pkt_mode value is 'raw_ethernet_single_gateway', but not found '%s'!\033[0m\n", "inject_mode_single_gateway_device");
+ return -1;
+ }
+
+ expect_cfg_index = cfg_get_index_by_key_name("inject_mode_single_gateway_src_mac");
+ if((NULL == sapp_cfg_check_attr[expect_cfg_index].cfg_value ) && (this_cfg_index == expect_cfg_index)){
+ printf("\033[1;31;40m[Error]sapp.toml->inject_pkt_mode value is 'raw_ethernet_single_gateway', but not found '%s'!\033[0m\n", "inject_mode_single_gateway_src_mac");
+ return -1;
+ }
+
+ expect_cfg_index = cfg_get_index_by_key_name("inject_mode_single_gateway_dst_mac");
+ if((NULL == sapp_cfg_check_attr[expect_cfg_index].cfg_value ) && (this_cfg_index == expect_cfg_index)){
+ printf("\033[1;31;40m[Error]sapp.toml->inject_pkt_mode value is 'raw_ethernet_single_gateway', but not found '%s'!\033[0m\n", "inject_mode_single_gateway_dst_mac");
+ return -1;
+ }
+ }
+
+ return 0;
+}
+
static const char *sapp_cfg_get_value_from_attr_by_id(const sapp_config_check_t *sapp_cfg_check_attr,int cfg_global_id)
{
int i;
@@ -337,488 +481,493 @@ static const unsigned char sample_sapp_toml[] =
0x23,0x23,0x23,0x23,0x23,0x23,0x23,0x23,0x23,0x23,0x23,0x23,0x23,0x23,0x23,0x23,
0x23,0x23,0x23,0x23,0x23,0x23,0x23,0x23,0x23,0x23,0x23,0x23,0x23,0x23,0x23,0x23,
0x23,0x23,0x23,0x23,0x23,0x23,0x23,0x23,0x23,0x23,0x23,0x23,0x23,0x23,0x23,0x23,
-0x23,0x23,0x23,0x0A,0x23,0x20,0x4E,0x4F,0x54,0x45,0x3A,0x0A,0x23,0x20,0x20,0x20,
-0x20,0x54,0x68,0x65,0x20,0x66,0x6F,0x72,0x6D,0x61,0x74,0x20,0x6F,0x66,0x20,0x74,
-0x68,0x69,0x73,0x20,0x66,0x69,0x6C,0x65,0x20,0x69,0x73,0x20,0x74,0x6F,0x6D,0x6C,
-0x20,0x28,0x68,0x74,0x74,0x70,0x73,0x3A,0x2F,0x2F,0x67,0x69,0x74,0x68,0x75,0x62,
-0x2E,0x63,0x6F,0x6D,0x2F,0x63,0x6B,0x74,0x61,0x6E,0x2F,0x74,0x6F,0x6D,0x6C,0x63,
-0x39,0x39,0x29,0x0A,0x23,0x20,0x20,0x20,0x20,0x74,0x6F,0x20,0x6D,0x61,0x6B,0x65,
-0x20,0x76,0x69,0x6D,0x20,0x65,0x64,0x69,0x74,0x6F,0x72,0x20,0x64,0x69,0x73,0x70,
-0x6C,0x61,0x79,0x20,0x63,0x6F,0x6C,0x6F,0x72,0x66,0x75,0x6C,0x20,0x61,0x6E,0x64,
-0x20,0x68,0x75,0x6D,0x61,0x6E,0x20,0x72,0x65,0x61,0x64,0x61,0x62,0x6C,0x65,0x2C,
-0x20,0x0A,0x23,0x20,0x20,0x20,0x20,0x79,0x6F,0x75,0x20,0x63,0x61,0x6E,0x20,0x63,
-0x72,0x65,0x61,0x74,0x65,0x20,0x61,0x20,0x73,0x79,0x6D,0x62,0x6F,0x6C,0x69,0x63,
-0x20,0x6C,0x69,0x6E,0x6B,0x73,0x20,0x6E,0x61,0x6D,0x65,0x64,0x20,0x73,0x61,0x70,
-0x70,0x2E,0x69,0x6E,0x69,0x20,0x74,0x6F,0x20,0x73,0x61,0x70,0x70,0x2E,0x74,0x6F,
-0x6D,0x6C,0x2C,0x20,0x6C,0x6E,0x20,0x2D,0x73,0x66,0x20,0x73,0x61,0x70,0x70,0x2E,
-0x74,0x6F,0x6D,0x6C,0x20,0x73,0x61,0x70,0x70,0x2E,0x69,0x6E,0x69,0x0A,0x23,0x23,
+0x23,0x23,0x23,0x0A,0x23,0x20,0x4E,0x4F,0x54,0x45,0x3A,0x20,0x20,0x20,0x20,0x20,
+0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,
+0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,
+0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,
+0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,
+0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,
+0x20,0x20,0x20,0x20,0x20,0x20,0x23,0x0A,0x23,0x20,0x20,0x20,0x20,0x54,0x68,0x65,
+0x20,0x66,0x6F,0x72,0x6D,0x61,0x74,0x20,0x6F,0x66,0x20,0x74,0x68,0x69,0x73,0x20,
+0x66,0x69,0x6C,0x65,0x20,0x69,0x73,0x20,0x74,0x6F,0x6D,0x6C,0x20,0x28,0x68,0x74,
+0x74,0x70,0x73,0x3A,0x2F,0x2F,0x67,0x69,0x74,0x68,0x75,0x62,0x2E,0x63,0x6F,0x6D,
+0x2F,0x63,0x6B,0x74,0x61,0x6E,0x2F,0x74,0x6F,0x6D,0x6C,0x63,0x39,0x39,0x29,0x20,
+0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,
+0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x23,0x0A,0x23,0x20,0x20,0x20,
+0x20,0x74,0x6F,0x20,0x6D,0x61,0x6B,0x65,0x20,0x76,0x69,0x6D,0x20,0x65,0x64,0x69,
+0x74,0x6F,0x72,0x20,0x64,0x69,0x73,0x70,0x6C,0x61,0x79,0x20,0x63,0x6F,0x6C,0x6F,
+0x72,0x66,0x75,0x6C,0x20,0x61,0x6E,0x64,0x20,0x68,0x75,0x6D,0x61,0x6E,0x20,0x72,
+0x65,0x61,0x64,0x61,0x62,0x6C,0x65,0x2C,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,
+0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,
+0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x23,0x0A,
+0x23,0x20,0x20,0x20,0x20,0x79,0x6F,0x75,0x20,0x63,0x61,0x6E,0x20,0x63,0x72,0x65,
+0x61,0x74,0x65,0x20,0x61,0x20,0x73,0x79,0x6D,0x62,0x6F,0x6C,0x69,0x63,0x20,0x6C,
+0x69,0x6E,0x6B,0x73,0x20,0x6E,0x61,0x6D,0x65,0x64,0x20,0x73,0x61,0x70,0x70,0x2E,
+0x69,0x6E,0x69,0x20,0x74,0x6F,0x20,0x73,0x61,0x70,0x70,0x2E,0x74,0x6F,0x6D,0x6C,
+0x2C,0x20,0x6C,0x6E,0x20,0x2D,0x73,0x66,0x20,0x73,0x61,0x70,0x70,0x2E,0x74,0x6F,
+0x6D,0x6C,0x20,0x73,0x61,0x70,0x70,0x2E,0x69,0x6E,0x69,0x20,0x20,0x20,0x20,0x20,
+0x20,0x20,0x23,0x0A,0x23,0x23,0x23,0x23,0x23,0x23,0x23,0x23,0x23,0x23,0x23,0x23,
0x23,0x23,0x23,0x23,0x23,0x23,0x23,0x23,0x23,0x23,0x23,0x23,0x23,0x23,0x23,0x23,
0x23,0x23,0x23,0x23,0x23,0x23,0x23,0x23,0x23,0x23,0x23,0x23,0x23,0x23,0x23,0x23,
0x23,0x23,0x23,0x23,0x23,0x23,0x23,0x23,0x23,0x23,0x23,0x23,0x23,0x23,0x23,0x23,
0x23,0x23,0x23,0x23,0x23,0x23,0x23,0x23,0x23,0x23,0x23,0x23,0x23,0x23,0x23,0x23,
0x23,0x23,0x23,0x23,0x23,0x23,0x23,0x23,0x23,0x23,0x23,0x23,0x23,0x23,0x23,0x23,
-0x23,0x23,0x23,0x23,0x23,0x23,0x23,0x23,0x23,0x23,0x23,0x23,0x23,0x23,0x23,0x23,
-0x23,0x0A,0x0A,0x5B,0x53,0x59,0x53,0x54,0x45,0x4D,0x5D,0x0A,0x69,0x6E,0x73,0x74,
-0x61,0x6E,0x63,0x65,0x5F,0x6E,0x61,0x6D,0x65,0x20,0x3D,0x20,0x22,0x73,0x61,0x70,
-0x70,0x5F,0x76,0x34,0x2E,0x32,0x22,0x0A,0x0A,0x5B,0x43,0x50,0x55,0x5D,0x0A,0x77,
-0x6F,0x72,0x6B,0x65,0x72,0x5F,0x74,0x68,0x72,0x65,0x61,0x64,0x73,0x3D,0x31,0x0A,
-0x73,0x65,0x6E,0x64,0x5F,0x6F,0x6E,0x6C,0x79,0x5F,0x74,0x68,0x72,0x65,0x61,0x64,
-0x73,0x5F,0x6D,0x61,0x78,0x3D,0x30,0x0A,0x23,0x23,0x23,0x20,0x6E,0x6F,0x74,0x65,
-0x2C,0x20,0x62,0x69,0x6E,0x64,0x5F,0x6D,0x61,0x73,0x6B,0x2C,0x20,0x69,0x66,0x20,
-0x79,0x6F,0x75,0x20,0x64,0x6F,0x20,0x6E,0x6F,0x74,0x20,0x77,0x61,0x6E,0x74,0x20,
-0x74,0x6F,0x20,0x62,0x69,0x6E,0x64,0x20,0x74,0x68,0x72,0x65,0x61,0x64,0x20,0x74,
-0x6F,0x20,0x73,0x70,0x65,0x63,0x69,0x61,0x6C,0x20,0x43,0x50,0x55,0x20,0x63,0x6F,
-0x72,0x65,0x2C,0x20,0x6B,0x65,0x65,0x70,0x20,0x69,0x74,0x20,0x65,0x6D,0x70,0x74,
-0x79,0x20,0x61,0x73,0x20,0x5B,0x5D,0x0A,0x23,0x23,0x23,0x20,0x74,0x68,0x65,0x72,
-0x65,0x20,0x61,0x72,0x65,0x20,0x74,0x77,0x6F,0x20,0x64,0x69,0x66,0x66,0x65,0x72,
-0x65,0x6E,0x74,0x20,0x67,0x72,0x61,0x6D,0x6D,0x61,0x72,0x73,0x3A,0x0A,0x23,0x23,
-0x23,0x20,0x74,0x6F,0x6D,0x6C,0x20,0x61,0x72,0x72,0x61,0x79,0x20,0x66,0x6F,0x72,
-0x6D,0x61,0x74,0x3A,0x20,0x62,0x69,0x6E,0x64,0x5F,0x6D,0x61,0x73,0x6B,0x3D,0x5B,
-0x31,0x2C,0x32,0x2C,0x33,0x2C,0x34,0x2C,0x35,0x2C,0x31,0x31,0x2C,0x31,0x32,0x2C,
-0x31,0x33,0x2C,0x31,0x34,0x2C,0x31,0x35,0x5D,0x0A,0x23,0x23,0x23,0x20,0x4D,0x45,
-0x53,0x41,0x5F,0x6C,0x6F,0x61,0x64,0x5F,0x70,0x72,0x6F,0x66,0x69,0x6C,0x65,0x20,
-0x72,0x61,0x6E,0x67,0x65,0x20,0x66,0x6F,0x72,0x6D,0x61,0x74,0x3A,0x20,0x62,0x69,
-0x6E,0x64,0x5F,0x6D,0x61,0x73,0x6B,0x3D,0x22,0x31,0x2D,0x35,0x2C,0x31,0x31,0x2D,
-0x31,0x35,0x22,0x0A,0x62,0x69,0x6E,0x64,0x5F,0x6D,0x61,0x73,0x6B,0x3D,0x5B,0x5D,
-0x0A,0x0A,0x5B,0x4D,0x45,0x4D,0x5D,0x0A,0x64,0x69,0x63,0x74,0x61,0x74,0x6F,0x72,
-0x5F,0x65,0x6E,0x61,0x62,0x6C,0x65,0x3D,0x31,0x0A,0x0A,0x5B,0x50,0x41,0x43,0x4B,
-0x45,0x54,0x5F,0x49,0x4F,0x5D,0x0A,0x20,0x20,0x20,0x20,0x5B,0x6F,0x76,0x65,0x72,
-0x6C,0x61,0x79,0x5F,0x74,0x75,0x6E,0x6E,0x65,0x6C,0x5F,0x64,0x65,0x66,0x69,0x6E,
-0x69,0x74,0x69,0x6F,0x6E,0x5D,0x0A,0x23,0x23,0x23,0x20,0x6E,0x6F,0x74,0x65,0x2C,
-0x20,0x73,0x69,0x6E,0x63,0x65,0x20,0x32,0x30,0x32,0x30,0x2D,0x31,0x30,0x2D,0x30,
-0x31,0x2C,0x20,0x4C,0x32,0x2D,0x4C,0x33,0x20,0x74,0x75,0x6E,0x6E,0x65,0x6C,0x28,
-0x56,0x4C,0x41,0x4E,0x2C,0x4D,0x50,0x4C,0x53,0x2C,0x50,0x50,0x50,0x4F,0x45,0x2C,
-0x65,0x74,0x63,0x2E,0x29,0x20,0x69,0x73,0x20,0x70,0x72,0x6F,0x63,0x65,0x73,0x73,
-0x20,0x61,0x6E,0x64,0x20,0x6F,0x66,0x66,0x6C,0x6F,0x61,0x64,0x20,0x62,0x79,0x20,
-0x6D,0x72,0x74,0x75,0x6E,0x6E,0x61,0x74,0x2C,0x20,0x09,0x0A,0x23,0x23,0x23,0x20,
-0x61,0x66,0x74,0x65,0x72,0x20,0x32,0x30,0x32,0x30,0x2D,0x31,0x30,0x2D,0x30,0x31,
-0x2C,0x20,0x73,0x61,0x70,0x70,0x20,0x73,0x75,0x70,0x70,0x6F,0x72,0x74,0x20,0x4C,
-0x32,0x2D,0x4C,0x33,0x20,0x74,0x75,0x6E,0x6E,0x65,0x6C,0x28,0x56,0x4C,0x41,0x4E,
-0x2C,0x4D,0x50,0x4C,0x53,0x2C,0x50,0x50,0x50,0x4F,0x45,0x2C,0x65,0x74,0x63,0x2E,
-0x29,0x20,0x77,0x69,0x74,0x68,0x6F,0x75,0x74,0x20,0x6D,0x72,0x74,0x75,0x6E,0x6E,
-0x61,0x74,0x2E,0x0A,0x20,0x20,0x20,0x20,0x6C,0x32,0x5F,0x6C,0x33,0x5F,0x74,0x75,
-0x6E,0x6E,0x65,0x6C,0x5F,0x73,0x75,0x70,0x70,0x6F,0x72,0x74,0x3D,0x30,0x0A,0x0A,
-0x23,0x23,0x23,0x20,0x6E,0x6F,0x74,0x65,0x2C,0x20,0x6F,0x70,0x74,0x69,0x6F,0x6E,
-0x61,0x6C,0x20,0x76,0x61,0x6C,0x75,0x65,0x20,0x69,0x73,0x20,0x5B,0x6E,0x6F,0x6E,
-0x65,0x2C,0x20,0x76,0x78,0x6C,0x61,0x6E,0x5D,0x0A,0x20,0x20,0x20,0x20,0x6F,0x76,
-0x65,0x72,0x6C,0x61,0x79,0x5F,0x6D,0x6F,0x64,0x65,0x3D,0x6E,0x6F,0x6E,0x65,0x0A,
-0x09,0x0A,0x20,0x20,0x20,0x20,0x5B,0x70,0x61,0x63,0x6B,0x65,0x74,0x5F,0x69,0x6F,
-0x2E,0x66,0x65,0x61,0x74,0x75,0x72,0x65,0x5D,0x0A,0x23,0x23,0x23,0x20,0x6E,0x6F,
-0x74,0x65,0x2C,0x20,0x75,0x73,0x65,0x64,0x20,0x74,0x6F,0x20,0x72,0x65,0x70,0x72,
-0x65,0x73,0x65,0x6E,0x74,0x20,0x69,0x6E,0x62,0x6F,0x75,0x6E,0x64,0x20,0x6F,0x72,
-0x20,0x6F,0x75,0x74,0x62,0x6F,0x75,0x6E,0x64,0x20,0x64,0x69,0x72,0x65,0x63,0x74,
-0x69,0x6F,0x6E,0x20,0x76,0x61,0x6C,0x75,0x65,0x2C,0x0A,0x23,0x23,0x23,0x20,0x62,
-0x65,0x63,0x61,0x75,0x73,0x65,0x20,0x69,0x74,0x20,0x63,0x6F,0x6D,0x65,0x73,0x20,
-0x66,0x72,0x6F,0x6D,0x20,0x54,0x68,0x69,0x72,0x64,0x20,0x70,0x61,0x72,0x74,0x79,
-0x20,0x64,0x65,0x76,0x69,0x63,0x65,0x2C,0x20,0x73,0x6F,0x20,0x69,0x74,0x20,0x6E,
-0x65,0x65,0x64,0x73,0x20,0x74,0x6F,0x20,0x62,0x65,0x20,0x73,0x70,0x65,0x63,0x69,
-0x66,0x69,0x65,0x64,0x20,0x6D,0x61,0x6E,0x75,0x61,0x6C,0x6C,0x79,0x2C,0x0A,0x23,
-0x23,0x23,0x20,0x69,0x66,0x20,0x69,0x6E,0x62,0x6F,0x75,0x6E,0x64,0x5F,0x72,0x6F,
-0x75,0x74,0x65,0x5F,0x64,0x69,0x72,0x3D,0x31,0x2C,0x20,0x74,0x68,0x65,0x6E,0x20,
-0x6F,0x75,0x74,0x62,0x6F,0x75,0x6E,0x64,0x5F,0x72,0x6F,0x75,0x74,0x65,0x5F,0x64,
-0x69,0x72,0x3D,0x30,0x2C,0x20,0x76,0x69,0x63,0x65,0x20,0x76,0x65,0x72,0x73,0x61,
-0x2C,0x0A,0x23,0x23,0x23,0x20,0x69,0x6E,0x20,0x6F,0x74,0x68,0x65,0x72,0x20,0x77,
-0x6F,0x72,0x64,0x73,0x2C,0x20,0x6F,0x75,0x74,0x62,0x6F,0x75,0x6E,0x64,0x5F,0x72,
-0x6F,0x75,0x74,0x65,0x5F,0x64,0x69,0x72,0x20,0x3D,0x20,0x31,0x20,0x5E,0x20,0x69,
-0x6E,0x62,0x6F,0x75,0x6E,0x64,0x5F,0x72,0x6F,0x75,0x74,0x65,0x5F,0x64,0x69,0x72,
-0x3B,0x0A,0x20,0x20,0x20,0x20,0x69,0x6E,0x62,0x6F,0x75,0x6E,0x64,0x5F,0x72,0x6F,
-0x75,0x74,0x65,0x5F,0x64,0x69,0x72,0x3D,0x31,0x0A,0x0A,0x23,0x23,0x23,0x20,0x6E,
-0x6F,0x74,0x65,0x2C,0x20,0x42,0x53,0x44,0x5F,0x70,0x61,0x63,0x6B,0x65,0x74,0x5F,
-0x66,0x69,0x6C,0x74,0x65,0x72,0x2C,0x20,0x69,0x66,0x20,0x79,0x6F,0x75,0x20,0x64,
-0x6F,0x20,0x6E,0x6F,0x74,0x20,0x77,0x61,0x6E,0x74,0x20,0x74,0x6F,0x20,0x73,0x65,
-0x74,0x20,0x61,0x6E,0x79,0x20,0x66,0x69,0x6C,0x74,0x65,0x72,0x20,0x72,0x75,0x6C,
-0x65,0x2C,0x20,0x6B,0x65,0x65,0x70,0x20,0x69,0x74,0x20,0x65,0x6D,0x70,0x74,0x79,
-0x20,0x61,0x73,0x20,0x22,0x22,0x0A,0x20,0x20,0x20,0x20,0x42,0x53,0x44,0x5F,0x70,
-0x61,0x63,0x6B,0x65,0x74,0x5F,0x66,0x69,0x6C,0x74,0x65,0x72,0x3D,0x22,0x22,0x0A,
-0x0A,0x23,0x23,0x23,0x20,0x6E,0x6F,0x74,0x65,0x2C,0x20,0x73,0x61,0x6D,0x65,0x20,
-0x61,0x73,0x20,0x74,0x63,0x70,0x64,0x75,0x6D,0x70,0x20,0x2D,0x51,0x2F,0x2D,0x50,
-0x20,0x61,0x72,0x67,0x2C,0x20,0x70,0x6F,0x73,0x73,0x69,0x62,0x6C,0x65,0x20,0x76,
-0x61,0x6C,0x75,0x65,0x73,0x20,0x61,0x72,0x65,0x20,0x60,0x69,0x6E,0x27,0x2C,0x20,
-0x60,0x6F,0x75,0x74,0x27,0x20,0x61,0x6E,0x64,0x20,0x60,0x69,0x6E,0x6F,0x75,0x74,
-0x27,0x2C,0x20,0x64,0x65,0x66,0x61,0x75,0x6C,0x74,0x20,0x69,0x73,0x20,0x22,0x69,
-0x6E,0x22,0x0A,0x20,0x20,0x20,0x20,0x70,0x63,0x61,0x70,0x5F,0x63,0x61,0x70,0x74,
-0x75,0x72,0x65,0x5F,0x64,0x69,0x72,0x65,0x63,0x74,0x69,0x6F,0x6E,0x3D,0x22,0x69,
-0x6E,0x22,0x0A,0x0A,0x23,0x23,0x23,0x20,0x6E,0x6F,0x74,0x65,0x2C,0x20,0x64,0x65,
-0x70,0x6F,0x6C,0x79,0x6D,0x65,0x6E,0x74,0x2E,0x6D,0x6F,0x64,0x65,0x20,0x6F,0x70,
-0x74,0x69,0x6F,0x6E,0x73,0x3A,0x20,0x5B,0x73,0x79,0x73,0x5F,0x72,0x6F,0x75,0x74,
-0x65,0x2C,0x20,0x76,0x78,0x6C,0x61,0x6E,0x5F,0x62,0x79,0x5F,0x69,0x6E,0x6C,0x69,
-0x6E,0x65,0x5F,0x64,0x65,0x76,0x69,0x63,0x65,0x2C,0x20,0x72,0x61,0x77,0x5F,0x65,
-0x74,0x68,0x65,0x72,0x6E,0x65,0x74,0x5F,0x73,0x69,0x6E,0x67,0x6C,0x65,0x5F,0x67,
-0x61,0x74,0x65,0x77,0x61,0x79,0x2C,0x20,0x72,0x61,0x77,0x5F,0x65,0x74,0x68,0x65,
-0x72,0x6E,0x65,0x74,0x5F,0x6D,0x75,0x6C,0x74,0x69,0x5F,0x67,0x61,0x74,0x65,0x77,
-0x61,0x79,0x5D,0x0A,0x23,0x23,0x23,0x20,0x73,0x79,0x73,0x5F,0x72,0x6F,0x75,0x74,
-0x65,0x3A,0x20,0x73,0x65,0x6E,0x64,0x20,0x69,0x70,0x28,0x69,0x70,0x76,0x36,0x29,
-0x20,0x70,0x61,0x63,0x6B,0x65,0x74,0x20,0x62,0x79,0x20,0x73,0x79,0x73,0x74,0x65,
-0x6D,0x20,0x72,0x6F,0x75,0x74,0x65,0x20,0x74,0x61,0x62,0x6C,0x65,0x2C,0x20,0x74,
-0x68,0x69,0x73,0x20,0x69,0x73,0x20,0x64,0x65,0x66,0x61,0x75,0x6C,0x74,0x20,0x6D,
-0x6F,0x64,0x65,0x20,0x69,0x6E,0x20,0x6D,0x69,0x72,0x72,0x6F,0x72,0x20,0x6D,0x6F,
-0x64,0x65,0x3B,0x0A,0x23,0x23,0x23,0x20,0x76,0x78,0x6C,0x61,0x6E,0x5F,0x62,0x79,
-0x5F,0x69,0x6E,0x6C,0x69,0x6E,0x65,0x5F,0x64,0x65,0x76,0x69,0x63,0x65,0x3A,0x20,
-0x65,0x6E,0x63,0x61,0x70,0x73,0x75,0x6C,0x61,0x74,0x69,0x6F,0x6E,0x20,0x69,0x6E,
-0x6A,0x65,0x63,0x74,0x20,0x70,0x61,0x63,0x6B,0x65,0x74,0x20,0x77,0x69,0x74,0x68,
-0x20,0x76,0x78,0x6C,0x61,0x6E,0x2C,0x20,0x61,0x6E,0x64,0x20,0x74,0x68,0x65,0x6E,
-0x20,0x73,0x65,0x6E,0x64,0x20,0x74,0x6F,0x20,0x69,0x6E,0x6C,0x69,0x6E,0x65,0x20,
-0x64,0x65,0x76,0x69,0x63,0x65,0x20,0x62,0x79,0x20,0x75,0x64,0x70,0x20,0x73,0x6F,
-0x63,0x6B,0x65,0x74,0x2E,0x0A,0x23,0x23,0x23,0x20,0x72,0x61,0x77,0x5F,0x65,0x74,
-0x68,0x65,0x72,0x6E,0x65,0x74,0x5F,0x73,0x69,0x6E,0x67,0x6C,0x65,0x5F,0x67,0x61,
-0x74,0x65,0x77,0x61,0x79,0x3A,0x20,0x73,0x65,0x6E,0x64,0x20,0x6C,0x61,0x79,0x65,
-0x72,0x32,0x20,0x65,0x74,0x68,0x65,0x72,0x6E,0x65,0x74,0x20,0x70,0x61,0x63,0x6B,
-0x65,0x74,0x20,0x74,0x6F,0x20,0x73,0x70,0x65,0x63,0x69,0x66,0x69,0x63,0x20,0x67,
-0x61,0x74,0x65,0x77,0x61,0x79,0x20,0x69,0x6E,0x20,0x73,0x61,0x6D,0x65,0x20,0x62,
-0x72,0x6F,0x61,0x64,0x63,0x61,0x73,0x74,0x20,0x64,0x6F,0x6D,0x61,0x69,0x6E,0x2E,
-0x20,0x0A,0x23,0x23,0x23,0x20,0x72,0x61,0x77,0x5F,0x65,0x74,0x68,0x65,0x72,0x6E,
-0x65,0x74,0x5F,0x6D,0x75,0x6C,0x74,0x69,0x5F,0x67,0x61,0x74,0x65,0x77,0x61,0x79,
+0x23,0x23,0x23,0x23,0x23,0x23,0x23,0x0A,0x0A,0x5B,0x53,0x59,0x53,0x54,0x45,0x4D,
+0x5D,0x0A,0x09,0x69,0x6E,0x73,0x74,0x61,0x6E,0x63,0x65,0x5F,0x6E,0x61,0x6D,0x65,
+0x20,0x3D,0x20,0x22,0x73,0x61,0x70,0x70,0x5F,0x76,0x34,0x2E,0x32,0x22,0x0A,0x0A,
+0x5B,0x43,0x50,0x55,0x5D,0x0A,0x09,0x77,0x6F,0x72,0x6B,0x65,0x72,0x5F,0x74,0x68,
+0x72,0x65,0x61,0x64,0x73,0x3D,0x31,0x0A,0x09,0x73,0x65,0x6E,0x64,0x5F,0x6F,0x6E,
+0x6C,0x79,0x5F,0x74,0x68,0x72,0x65,0x61,0x64,0x73,0x5F,0x6D,0x61,0x78,0x3D,0x30,
+0x0A,0x23,0x23,0x23,0x20,0x6E,0x6F,0x74,0x65,0x2C,0x20,0x62,0x69,0x6E,0x64,0x5F,
+0x6D,0x61,0x73,0x6B,0x2C,0x20,0x69,0x66,0x20,0x79,0x6F,0x75,0x20,0x64,0x6F,0x20,
+0x6E,0x6F,0x74,0x20,0x77,0x61,0x6E,0x74,0x20,0x74,0x6F,0x20,0x62,0x69,0x6E,0x64,
+0x20,0x74,0x68,0x72,0x65,0x61,0x64,0x20,0x74,0x6F,0x20,0x73,0x70,0x65,0x63,0x69,
+0x61,0x6C,0x20,0x43,0x50,0x55,0x20,0x63,0x6F,0x72,0x65,0x2C,0x20,0x6B,0x65,0x65,
+0x70,0x20,0x69,0x74,0x20,0x65,0x6D,0x70,0x74,0x79,0x20,0x61,0x73,0x20,0x5B,0x5D,
+0x0A,0x23,0x23,0x23,0x20,0x74,0x68,0x65,0x72,0x65,0x20,0x61,0x72,0x65,0x20,0x74,
+0x77,0x6F,0x20,0x64,0x69,0x66,0x66,0x65,0x72,0x65,0x6E,0x74,0x20,0x67,0x72,0x61,
+0x6D,0x6D,0x61,0x72,0x73,0x3A,0x0A,0x23,0x23,0x23,0x20,0x74,0x6F,0x6D,0x6C,0x20,
+0x61,0x72,0x72,0x61,0x79,0x20,0x66,0x6F,0x72,0x6D,0x61,0x74,0x3A,0x20,0x62,0x69,
+0x6E,0x64,0x5F,0x6D,0x61,0x73,0x6B,0x3D,0x5B,0x31,0x2C,0x32,0x2C,0x33,0x2C,0x34,
+0x2C,0x35,0x2C,0x31,0x31,0x2C,0x31,0x32,0x2C,0x31,0x33,0x2C,0x31,0x34,0x2C,0x31,
+0x35,0x5D,0x0A,0x23,0x23,0x23,0x20,0x4D,0x45,0x53,0x41,0x5F,0x6C,0x6F,0x61,0x64,
+0x5F,0x70,0x72,0x6F,0x66,0x69,0x6C,0x65,0x20,0x72,0x61,0x6E,0x67,0x65,0x20,0x66,
+0x6F,0x72,0x6D,0x61,0x74,0x3A,0x20,0x62,0x69,0x6E,0x64,0x5F,0x6D,0x61,0x73,0x6B,
+0x3D,0x22,0x31,0x2D,0x35,0x2C,0x31,0x31,0x2D,0x31,0x35,0x22,0x0A,0x09,0x62,0x69,
+0x6E,0x64,0x5F,0x6D,0x61,0x73,0x6B,0x3D,0x5B,0x5D,0x0A,0x0A,0x5B,0x4D,0x45,0x4D,
+0x5D,0x0A,0x09,0x64,0x69,0x63,0x74,0x61,0x74,0x6F,0x72,0x5F,0x65,0x6E,0x61,0x62,
+0x6C,0x65,0x3D,0x31,0x0A,0x0A,0x5B,0x50,0x41,0x43,0x4B,0x45,0x54,0x5F,0x49,0x4F,
+0x5D,0x0A,0x20,0x20,0x20,0x20,0x5B,0x6F,0x76,0x65,0x72,0x6C,0x61,0x79,0x5F,0x74,
+0x75,0x6E,0x6E,0x65,0x6C,0x5F,0x64,0x65,0x66,0x69,0x6E,0x69,0x74,0x69,0x6F,0x6E,
+0x5D,0x0A,0x23,0x23,0x23,0x20,0x6E,0x6F,0x74,0x65,0x2C,0x20,0x73,0x69,0x6E,0x63,
+0x65,0x20,0x32,0x30,0x32,0x30,0x2D,0x31,0x30,0x2D,0x30,0x31,0x2C,0x20,0x4C,0x32,
+0x2D,0x4C,0x33,0x20,0x74,0x75,0x6E,0x6E,0x65,0x6C,0x28,0x56,0x4C,0x41,0x4E,0x2C,
+0x4D,0x50,0x4C,0x53,0x2C,0x50,0x50,0x50,0x4F,0x45,0x2C,0x65,0x74,0x63,0x2E,0x29,
+0x20,0x69,0x73,0x20,0x70,0x72,0x6F,0x63,0x65,0x73,0x73,0x20,0x61,0x6E,0x64,0x20,
+0x6F,0x66,0x66,0x6C,0x6F,0x61,0x64,0x20,0x62,0x79,0x20,0x6D,0x72,0x74,0x75,0x6E,
+0x6E,0x61,0x74,0x2C,0x20,0x09,0x0A,0x23,0x23,0x23,0x20,0x61,0x66,0x74,0x65,0x72,
+0x20,0x32,0x30,0x32,0x30,0x2D,0x31,0x30,0x2D,0x30,0x31,0x2C,0x20,0x73,0x61,0x70,
+0x70,0x20,0x73,0x75,0x70,0x70,0x6F,0x72,0x74,0x20,0x4C,0x32,0x2D,0x4C,0x33,0x20,
+0x74,0x75,0x6E,0x6E,0x65,0x6C,0x28,0x56,0x4C,0x41,0x4E,0x2C,0x4D,0x50,0x4C,0x53,
+0x2C,0x50,0x50,0x50,0x4F,0x45,0x2C,0x65,0x74,0x63,0x2E,0x29,0x20,0x77,0x69,0x74,
+0x68,0x6F,0x75,0x74,0x20,0x6D,0x72,0x74,0x75,0x6E,0x6E,0x61,0x74,0x2E,0x0A,0x20,
+0x20,0x20,0x20,0x6C,0x32,0x5F,0x6C,0x33,0x5F,0x74,0x75,0x6E,0x6E,0x65,0x6C,0x5F,
+0x73,0x75,0x70,0x70,0x6F,0x72,0x74,0x3D,0x30,0x0A,0x0A,0x23,0x23,0x23,0x20,0x6E,
+0x6F,0x74,0x65,0x2C,0x20,0x6F,0x70,0x74,0x69,0x6F,0x6E,0x61,0x6C,0x20,0x76,0x61,
+0x6C,0x75,0x65,0x20,0x69,0x73,0x20,0x5B,0x6E,0x6F,0x6E,0x65,0x2C,0x20,0x76,0x78,
+0x6C,0x61,0x6E,0x5D,0x0A,0x20,0x20,0x20,0x20,0x6F,0x76,0x65,0x72,0x6C,0x61,0x79,
+0x5F,0x6D,0x6F,0x64,0x65,0x3D,0x6E,0x6F,0x6E,0x65,0x0A,0x09,0x0A,0x20,0x20,0x20,
+0x20,0x5B,0x70,0x61,0x63,0x6B,0x65,0x74,0x5F,0x69,0x6F,0x2E,0x66,0x65,0x61,0x74,
+0x75,0x72,0x65,0x5D,0x0A,0x23,0x23,0x23,0x20,0x6E,0x6F,0x74,0x65,0x2C,0x20,0x75,
+0x73,0x65,0x64,0x20,0x74,0x6F,0x20,0x72,0x65,0x70,0x72,0x65,0x73,0x65,0x6E,0x74,
+0x20,0x69,0x6E,0x62,0x6F,0x75,0x6E,0x64,0x20,0x6F,0x72,0x20,0x6F,0x75,0x74,0x62,
+0x6F,0x75,0x6E,0x64,0x20,0x64,0x69,0x72,0x65,0x63,0x74,0x69,0x6F,0x6E,0x20,0x76,
+0x61,0x6C,0x75,0x65,0x2C,0x0A,0x23,0x23,0x23,0x20,0x62,0x65,0x63,0x61,0x75,0x73,
+0x65,0x20,0x69,0x74,0x20,0x63,0x6F,0x6D,0x65,0x73,0x20,0x66,0x72,0x6F,0x6D,0x20,
+0x54,0x68,0x69,0x72,0x64,0x20,0x70,0x61,0x72,0x74,0x79,0x20,0x64,0x65,0x76,0x69,
+0x63,0x65,0x2C,0x20,0x73,0x6F,0x20,0x69,0x74,0x20,0x6E,0x65,0x65,0x64,0x73,0x20,
+0x74,0x6F,0x20,0x62,0x65,0x20,0x73,0x70,0x65,0x63,0x69,0x66,0x69,0x65,0x64,0x20,
+0x6D,0x61,0x6E,0x75,0x61,0x6C,0x6C,0x79,0x2C,0x0A,0x23,0x23,0x23,0x20,0x69,0x66,
+0x20,0x69,0x6E,0x62,0x6F,0x75,0x6E,0x64,0x5F,0x72,0x6F,0x75,0x74,0x65,0x5F,0x64,
+0x69,0x72,0x3D,0x31,0x2C,0x20,0x74,0x68,0x65,0x6E,0x20,0x6F,0x75,0x74,0x62,0x6F,
+0x75,0x6E,0x64,0x5F,0x72,0x6F,0x75,0x74,0x65,0x5F,0x64,0x69,0x72,0x3D,0x30,0x2C,
+0x20,0x76,0x69,0x63,0x65,0x20,0x76,0x65,0x72,0x73,0x61,0x2C,0x0A,0x23,0x23,0x23,
+0x20,0x69,0x6E,0x20,0x6F,0x74,0x68,0x65,0x72,0x20,0x77,0x6F,0x72,0x64,0x73,0x2C,
+0x20,0x6F,0x75,0x74,0x62,0x6F,0x75,0x6E,0x64,0x5F,0x72,0x6F,0x75,0x74,0x65,0x5F,
+0x64,0x69,0x72,0x20,0x3D,0x20,0x31,0x20,0x5E,0x20,0x69,0x6E,0x62,0x6F,0x75,0x6E,
+0x64,0x5F,0x72,0x6F,0x75,0x74,0x65,0x5F,0x64,0x69,0x72,0x3B,0x0A,0x20,0x20,0x20,
+0x20,0x69,0x6E,0x62,0x6F,0x75,0x6E,0x64,0x5F,0x72,0x6F,0x75,0x74,0x65,0x5F,0x64,
+0x69,0x72,0x3D,0x31,0x0A,0x0A,0x23,0x23,0x23,0x20,0x6E,0x6F,0x74,0x65,0x2C,0x20,
+0x42,0x53,0x44,0x5F,0x70,0x61,0x63,0x6B,0x65,0x74,0x5F,0x66,0x69,0x6C,0x74,0x65,
+0x72,0x2C,0x20,0x69,0x66,0x20,0x79,0x6F,0x75,0x20,0x64,0x6F,0x20,0x6E,0x6F,0x74,
+0x20,0x77,0x61,0x6E,0x74,0x20,0x74,0x6F,0x20,0x73,0x65,0x74,0x20,0x61,0x6E,0x79,
+0x20,0x66,0x69,0x6C,0x74,0x65,0x72,0x20,0x72,0x75,0x6C,0x65,0x2C,0x20,0x6B,0x65,
+0x65,0x70,0x20,0x69,0x74,0x20,0x65,0x6D,0x70,0x74,0x79,0x20,0x61,0x73,0x20,0x22,
+0x22,0x0A,0x20,0x20,0x20,0x20,0x42,0x53,0x44,0x5F,0x70,0x61,0x63,0x6B,0x65,0x74,
+0x5F,0x66,0x69,0x6C,0x74,0x65,0x72,0x3D,0x22,0x22,0x0A,0x0A,0x23,0x23,0x23,0x20,
+0x6E,0x6F,0x74,0x65,0x2C,0x20,0x73,0x61,0x6D,0x65,0x20,0x61,0x73,0x20,0x74,0x63,
+0x70,0x64,0x75,0x6D,0x70,0x20,0x2D,0x51,0x2F,0x2D,0x50,0x20,0x61,0x72,0x67,0x2C,
+0x20,0x70,0x6F,0x73,0x73,0x69,0x62,0x6C,0x65,0x20,0x76,0x61,0x6C,0x75,0x65,0x73,
+0x20,0x61,0x72,0x65,0x20,0x60,0x69,0x6E,0x27,0x2C,0x20,0x60,0x6F,0x75,0x74,0x27,
+0x20,0x61,0x6E,0x64,0x20,0x60,0x69,0x6E,0x6F,0x75,0x74,0x27,0x2C,0x20,0x64,0x65,
+0x66,0x61,0x75,0x6C,0x74,0x20,0x69,0x73,0x20,0x22,0x69,0x6E,0x22,0x0A,0x20,0x20,
+0x20,0x20,0x70,0x63,0x61,0x70,0x5F,0x63,0x61,0x70,0x74,0x75,0x72,0x65,0x5F,0x64,
+0x69,0x72,0x65,0x63,0x74,0x69,0x6F,0x6E,0x3D,0x22,0x69,0x6E,0x22,0x0A,0x0A,0x23,
+0x23,0x23,0x20,0x6E,0x6F,0x74,0x65,0x2C,0x20,0x64,0x65,0x70,0x6F,0x6C,0x79,0x6D,
+0x65,0x6E,0x74,0x2E,0x6D,0x6F,0x64,0x65,0x20,0x6F,0x70,0x74,0x69,0x6F,0x6E,0x73,
+0x3A,0x20,0x5B,0x73,0x79,0x73,0x5F,0x72,0x6F,0x75,0x74,0x65,0x2C,0x20,0x76,0x78,
+0x6C,0x61,0x6E,0x5F,0x62,0x79,0x5F,0x69,0x6E,0x6C,0x69,0x6E,0x65,0x5F,0x64,0x65,
+0x76,0x69,0x63,0x65,0x2C,0x20,0x72,0x61,0x77,0x5F,0x65,0x74,0x68,0x65,0x72,0x6E,
+0x65,0x74,0x5F,0x73,0x69,0x6E,0x67,0x6C,0x65,0x5F,0x67,0x61,0x74,0x65,0x77,0x61,
+0x79,0x2C,0x20,0x72,0x61,0x77,0x5F,0x65,0x74,0x68,0x65,0x72,0x6E,0x65,0x74,0x5F,
+0x6D,0x75,0x6C,0x74,0x69,0x5F,0x67,0x61,0x74,0x65,0x77,0x61,0x79,0x5D,0x0A,0x23,
+0x23,0x23,0x20,0x73,0x79,0x73,0x5F,0x72,0x6F,0x75,0x74,0x65,0x3A,0x20,0x73,0x65,
+0x6E,0x64,0x20,0x69,0x70,0x28,0x69,0x70,0x76,0x36,0x29,0x20,0x70,0x61,0x63,0x6B,
+0x65,0x74,0x20,0x62,0x79,0x20,0x73,0x79,0x73,0x74,0x65,0x6D,0x20,0x72,0x6F,0x75,
+0x74,0x65,0x20,0x74,0x61,0x62,0x6C,0x65,0x2C,0x20,0x74,0x68,0x69,0x73,0x20,0x69,
+0x73,0x20,0x64,0x65,0x66,0x61,0x75,0x6C,0x74,0x20,0x6D,0x6F,0x64,0x65,0x20,0x69,
+0x6E,0x20,0x6D,0x69,0x72,0x72,0x6F,0x72,0x20,0x6D,0x6F,0x64,0x65,0x3B,0x0A,0x23,
+0x23,0x23,0x20,0x76,0x78,0x6C,0x61,0x6E,0x5F,0x62,0x79,0x5F,0x69,0x6E,0x6C,0x69,
+0x6E,0x65,0x5F,0x64,0x65,0x76,0x69,0x63,0x65,0x3A,0x20,0x65,0x6E,0x63,0x61,0x70,
+0x73,0x75,0x6C,0x61,0x74,0x69,0x6F,0x6E,0x20,0x69,0x6E,0x6A,0x65,0x63,0x74,0x20,
+0x70,0x61,0x63,0x6B,0x65,0x74,0x20,0x77,0x69,0x74,0x68,0x20,0x76,0x78,0x6C,0x61,
+0x6E,0x2C,0x20,0x61,0x6E,0x64,0x20,0x74,0x68,0x65,0x6E,0x20,0x73,0x65,0x6E,0x64,
+0x20,0x74,0x6F,0x20,0x69,0x6E,0x6C,0x69,0x6E,0x65,0x20,0x64,0x65,0x76,0x69,0x63,
+0x65,0x20,0x62,0x79,0x20,0x75,0x64,0x70,0x20,0x73,0x6F,0x63,0x6B,0x65,0x74,0x2E,
+0x0A,0x23,0x23,0x23,0x20,0x72,0x61,0x77,0x5F,0x65,0x74,0x68,0x65,0x72,0x6E,0x65,
+0x74,0x5F,0x73,0x69,0x6E,0x67,0x6C,0x65,0x5F,0x67,0x61,0x74,0x65,0x77,0x61,0x79,
0x3A,0x20,0x73,0x65,0x6E,0x64,0x20,0x6C,0x61,0x79,0x65,0x72,0x32,0x20,0x65,0x74,
0x68,0x65,0x72,0x6E,0x65,0x74,0x20,0x70,0x61,0x63,0x6B,0x65,0x74,0x20,0x74,0x6F,
-0x20,0x6D,0x75,0x6C,0x74,0x69,0x70,0x6C,0x65,0x20,0x67,0x61,0x74,0x65,0x77,0x61,
+0x20,0x73,0x70,0x65,0x63,0x69,0x66,0x69,0x63,0x20,0x67,0x61,0x74,0x65,0x77,0x61,
0x79,0x20,0x69,0x6E,0x20,0x73,0x61,0x6D,0x65,0x20,0x62,0x72,0x6F,0x61,0x64,0x63,
-0x61,0x73,0x74,0x20,0x64,0x6F,0x6D,0x61,0x69,0x6E,0x2E,0x20,0x0A,0x20,0x20,0x20,
-0x20,0x69,0x6E,0x6A,0x65,0x63,0x74,0x5F,0x70,0x6B,0x74,0x5F,0x6D,0x6F,0x64,0x65,
-0x3D,0x73,0x79,0x73,0x5F,0x72,0x6F,0x75,0x74,0x65,0x0A,0x0A,0x23,0x23,0x23,0x20,
-0x6E,0x6F,0x74,0x65,0x2C,0x20,0x74,0x68,0x69,0x73,0x20,0x63,0x6F,0x6E,0x66,0x69,
-0x67,0x20,0x69,0x73,0x20,0x76,0x61,0x6C,0x69,0x64,0x20,0x69,0x66,0x20,0x69,0x6E,
-0x6A,0x65,0x63,0x74,0x5F,0x70,0x6B,0x74,0x5F,0x6D,0x6F,0x64,0x65,0x3D,0x3D,0x76,
-0x78,0x6C,0x61,0x6E,0x5F,0x62,0x79,0x5F,0x69,0x6E,0x6C,0x69,0x6E,0x65,0x5F,0x64,
-0x65,0x76,0x69,0x63,0x65,0x2C,0x20,0x6D,0x65,0x61,0x6E,0x73,0x20,0x75,0x64,0x70,
-0x20,0x73,0x6F,0x63,0x6B,0x65,0x74,0x20,0x73,0x72,0x63,0x20,0x70,0x6F,0x72,0x74,
-0x2E,0x0A,0x20,0x20,0x20,0x20,0x69,0x6E,0x6A,0x65,0x63,0x74,0x5F,0x6D,0x6F,0x64,
-0x65,0x5F,0x69,0x6E,0x6C,0x69,0x6E,0x65,0x5F,0x64,0x65,0x76,0x69,0x63,0x65,0x5F,
-0x73,0x70,0x6F,0x72,0x74,0x3D,0x35,0x34,0x37,0x38,0x39,0x0A,0x0A,0x23,0x23,0x23,
-0x20,0x6E,0x6F,0x74,0x65,0x2C,0x20,0x74,0x68,0x69,0x73,0x20,0x63,0x6F,0x6E,0x66,
-0x69,0x67,0x20,0x69,0x73,0x20,0x76,0x61,0x6C,0x69,0x64,0x20,0x69,0x66,0x20,0x69,
-0x6E,0x6A,0x65,0x63,0x74,0x5F,0x70,0x6B,0x74,0x5F,0x6D,0x6F,0x64,0x65,0x3D,0x3D,
-0x72,0x61,0x77,0x5F,0x65,0x74,0x68,0x65,0x72,0x6E,0x65,0x74,0x5F,0x73,0x69,0x6E,
-0x67,0x6C,0x65,0x5F,0x67,0x61,0x74,0x65,0x77,0x61,0x79,0x2E,0x0A,0x20,0x20,0x20,
-0x20,0x69,0x6E,0x6A,0x65,0x63,0x74,0x5F,0x6D,0x6F,0x64,0x65,0x5F,0x73,0x69,0x6E,
-0x67,0x6C,0x65,0x5F,0x67,0x61,0x74,0x65,0x77,0x61,0x79,0x5F,0x64,0x65,0x76,0x69,
-0x63,0x65,0x3D,0x22,0x65,0x74,0x68,0x31,0x22,0x0A,0x23,0x23,0x23,0x20,0x69,0x6E,
-0x6A,0x65,0x63,0x74,0x5F,0x6D,0x6F,0x64,0x65,0x5F,0x73,0x69,0x6E,0x67,0x6C,0x65,
-0x5F,0x67,0x61,0x74,0x65,0x77,0x61,0x79,0x5F,0x73,0x72,0x63,0x5F,0x6D,0x61,0x63,
-0x20,0x68,0x61,0x73,0x20,0x6C,0x6F,0x77,0x65,0x72,0x20,0x70,0x72,0x69,0x6F,0x72,
-0x69,0x74,0x79,0x20,0x74,0x68,0x61,0x6E,0x20,0x67,0x65,0x74,0x20,0x73,0x6D,0x61,
-0x63,0x20,0x66,0x72,0x6F,0x6D,0x20,0x69,0x6E,0x6A,0x65,0x63,0x74,0x5F,0x6D,0x6F,
-0x64,0x65,0x5F,0x73,0x69,0x6E,0x67,0x6C,0x65,0x5F,0x67,0x61,0x74,0x65,0x77,0x61,
-0x79,0x5F,0x64,0x65,0x76,0x69,0x63,0x65,0x0A,0x20,0x20,0x20,0x20,0x69,0x6E,0x6A,
-0x65,0x63,0x74,0x5F,0x6D,0x6F,0x64,0x65,0x5F,0x73,0x69,0x6E,0x67,0x6C,0x65,0x5F,
-0x67,0x61,0x74,0x65,0x77,0x61,0x79,0x5F,0x73,0x72,0x63,0x5F,0x6D,0x61,0x63,0x3D,
-0x22,0x30,0x30,0x3A,0x31,0x31,0x3A,0x32,0x32,0x3A,0x37,0x37,0x3A,0x38,0x38,0x3A,
-0x39,0x39,0x22,0x0A,0x20,0x20,0x20,0x20,0x69,0x6E,0x6A,0x65,0x63,0x74,0x5F,0x6D,
+0x61,0x73,0x74,0x20,0x64,0x6F,0x6D,0x61,0x69,0x6E,0x2E,0x20,0x0A,0x23,0x23,0x23,
+0x20,0x72,0x61,0x77,0x5F,0x65,0x74,0x68,0x65,0x72,0x6E,0x65,0x74,0x5F,0x6D,0x75,
+0x6C,0x74,0x69,0x5F,0x67,0x61,0x74,0x65,0x77,0x61,0x79,0x3A,0x20,0x73,0x65,0x6E,
+0x64,0x20,0x6C,0x61,0x79,0x65,0x72,0x32,0x20,0x65,0x74,0x68,0x65,0x72,0x6E,0x65,
+0x74,0x20,0x70,0x61,0x63,0x6B,0x65,0x74,0x20,0x74,0x6F,0x20,0x6D,0x75,0x6C,0x74,
+0x69,0x70,0x6C,0x65,0x20,0x67,0x61,0x74,0x65,0x77,0x61,0x79,0x20,0x69,0x6E,0x20,
+0x73,0x61,0x6D,0x65,0x20,0x62,0x72,0x6F,0x61,0x64,0x63,0x61,0x73,0x74,0x20,0x64,
+0x6F,0x6D,0x61,0x69,0x6E,0x2E,0x20,0x0A,0x20,0x20,0x20,0x20,0x69,0x6E,0x6A,0x65,
+0x63,0x74,0x5F,0x70,0x6B,0x74,0x5F,0x6D,0x6F,0x64,0x65,0x3D,0x73,0x79,0x73,0x5F,
+0x72,0x6F,0x75,0x74,0x65,0x0A,0x0A,0x23,0x23,0x23,0x20,0x6E,0x6F,0x74,0x65,0x2C,
+0x20,0x74,0x68,0x69,0x73,0x20,0x63,0x6F,0x6E,0x66,0x69,0x67,0x20,0x69,0x73,0x20,
+0x76,0x61,0x6C,0x69,0x64,0x20,0x69,0x66,0x20,0x69,0x6E,0x6A,0x65,0x63,0x74,0x5F,
+0x70,0x6B,0x74,0x5F,0x6D,0x6F,0x64,0x65,0x3D,0x3D,0x76,0x78,0x6C,0x61,0x6E,0x5F,
+0x62,0x79,0x5F,0x69,0x6E,0x6C,0x69,0x6E,0x65,0x5F,0x64,0x65,0x76,0x69,0x63,0x65,
+0x2C,0x20,0x6D,0x65,0x61,0x6E,0x73,0x20,0x75,0x64,0x70,0x20,0x73,0x6F,0x63,0x6B,
+0x65,0x74,0x20,0x73,0x72,0x63,0x20,0x70,0x6F,0x72,0x74,0x2E,0x0A,0x20,0x20,0x20,
+0x20,0x69,0x6E,0x6A,0x65,0x63,0x74,0x5F,0x6D,0x6F,0x64,0x65,0x5F,0x69,0x6E,0x6C,
+0x69,0x6E,0x65,0x5F,0x64,0x65,0x76,0x69,0x63,0x65,0x5F,0x73,0x70,0x6F,0x72,0x74,
+0x3D,0x35,0x34,0x37,0x38,0x39,0x0A,0x0A,0x23,0x23,0x23,0x20,0x6E,0x6F,0x74,0x65,
+0x2C,0x20,0x74,0x68,0x69,0x73,0x20,0x63,0x6F,0x6E,0x66,0x69,0x67,0x20,0x69,0x73,
+0x20,0x76,0x61,0x6C,0x69,0x64,0x20,0x69,0x66,0x20,0x69,0x6E,0x6A,0x65,0x63,0x74,
+0x5F,0x70,0x6B,0x74,0x5F,0x6D,0x6F,0x64,0x65,0x3D,0x3D,0x72,0x61,0x77,0x5F,0x65,
+0x74,0x68,0x65,0x72,0x6E,0x65,0x74,0x5F,0x73,0x69,0x6E,0x67,0x6C,0x65,0x5F,0x67,
+0x61,0x74,0x65,0x77,0x61,0x79,0x2E,0x0A,0x20,0x20,0x20,0x20,0x69,0x6E,0x6A,0x65,
+0x63,0x74,0x5F,0x6D,0x6F,0x64,0x65,0x5F,0x73,0x69,0x6E,0x67,0x6C,0x65,0x5F,0x67,
+0x61,0x74,0x65,0x77,0x61,0x79,0x5F,0x64,0x65,0x76,0x69,0x63,0x65,0x3D,0x22,0x65,
+0x74,0x68,0x31,0x22,0x0A,0x23,0x23,0x23,0x20,0x69,0x6E,0x6A,0x65,0x63,0x74,0x5F,
+0x6D,0x6F,0x64,0x65,0x5F,0x73,0x69,0x6E,0x67,0x6C,0x65,0x5F,0x67,0x61,0x74,0x65,
+0x77,0x61,0x79,0x5F,0x73,0x72,0x63,0x5F,0x6D,0x61,0x63,0x20,0x68,0x61,0x73,0x20,
+0x6C,0x6F,0x77,0x65,0x72,0x20,0x70,0x72,0x69,0x6F,0x72,0x69,0x74,0x79,0x20,0x74,
+0x68,0x61,0x6E,0x20,0x67,0x65,0x74,0x20,0x73,0x6D,0x61,0x63,0x20,0x66,0x72,0x6F,
+0x6D,0x20,0x69,0x6E,0x6A,0x65,0x63,0x74,0x5F,0x6D,0x6F,0x64,0x65,0x5F,0x73,0x69,
+0x6E,0x67,0x6C,0x65,0x5F,0x67,0x61,0x74,0x65,0x77,0x61,0x79,0x5F,0x64,0x65,0x76,
+0x69,0x63,0x65,0x0A,0x20,0x20,0x20,0x20,0x69,0x6E,0x6A,0x65,0x63,0x74,0x5F,0x6D,
0x6F,0x64,0x65,0x5F,0x73,0x69,0x6E,0x67,0x6C,0x65,0x5F,0x67,0x61,0x74,0x65,0x77,
-0x61,0x79,0x5F,0x64,0x73,0x74,0x5F,0x6D,0x61,0x63,0x3D,0x22,0x30,0x30,0x3A,0x31,
-0x31,0x3A,0x32,0x32,0x3A,0x33,0x33,0x3A,0x34,0x34,0x3A,0x35,0x35,0x22,0x0A,0x0A,
-0x20,0x20,0x20,0x20,0x64,0x75,0x6D,0x70,0x66,0x69,0x6C,0x65,0x5F,0x73,0x6C,0x65,
-0x65,0x70,0x5F,0x74,0x69,0x6D,0x65,0x5F,0x62,0x65,0x66,0x6F,0x72,0x65,0x5F,0x65,
-0x78,0x69,0x74,0x3D,0x33,0x0A,0x20,0x20,0x20,0x0A,0x23,0x23,0x23,0x20,0x6E,0x6F,
-0x74,0x65,0x2C,0x20,0x64,0x65,0x70,0x6F,0x6C,0x79,0x6D,0x65,0x6E,0x74,0x2E,0x6D,
-0x6F,0x64,0x65,0x20,0x6F,0x70,0x74,0x69,0x6F,0x6E,0x73,0x3A,0x20,0x5B,0x6D,0x69,
-0x72,0x72,0x6F,0x72,0x2C,0x20,0x69,0x6E,0x6C,0x69,0x6E,0x65,0x2C,0x20,0x74,0x72,
-0x61,0x6E,0x73,0x70,0x61,0x72,0x65,0x6E,0x74,0x5D,0x0A,0x20,0x20,0x20,0x20,0x5B,
-0x70,0x61,0x63,0x6B,0x65,0x74,0x5F,0x69,0x6F,0x2E,0x64,0x65,0x70,0x6F,0x6C,0x79,
-0x6D,0x65,0x6E,0x74,0x5D,0x0A,0x20,0x20,0x20,0x20,0x6D,0x6F,0x64,0x65,0x3D,0x6D,
-0x69,0x72,0x72,0x6F,0x72,0x0A,0x0A,0x23,0x23,0x23,0x20,0x6E,0x6F,0x74,0x65,0x2C,
-0x20,0x69,0x6E,0x74,0x65,0x72,0x66,0x61,0x63,0x65,0x2E,0x74,0x79,0x70,0x65,0x20,
-0x6F,0x70,0x74,0x69,0x6F,0x6E,0x73,0x3A,0x20,0x5B,0x70,0x61,0x67,0x2C,0x20,0x70,
-0x63,0x61,0x70,0x2C,0x20,0x6D,0x61,0x72,0x73,0x69,0x6F,0x2C,0x20,0x74,0x75,0x6E,
-0x5D,0x0A,0x23,0x23,0x23,0x20,0x72,0x65,0x63,0x65,0x69,0x76,0x65,0x20,0x66,0x72,
-0x6F,0x6D,0x20,0x69,0x6E,0x74,0x65,0x72,0x6E,0x61,0x6C,0x20,0x69,0x6E,0x74,0x65,
+0x61,0x79,0x5F,0x73,0x72,0x63,0x5F,0x6D,0x61,0x63,0x3D,0x22,0x30,0x30,0x3A,0x31,
+0x31,0x3A,0x32,0x32,0x3A,0x37,0x37,0x3A,0x38,0x38,0x3A,0x39,0x39,0x22,0x0A,0x20,
+0x20,0x20,0x20,0x69,0x6E,0x6A,0x65,0x63,0x74,0x5F,0x6D,0x6F,0x64,0x65,0x5F,0x73,
+0x69,0x6E,0x67,0x6C,0x65,0x5F,0x67,0x61,0x74,0x65,0x77,0x61,0x79,0x5F,0x64,0x73,
+0x74,0x5F,0x6D,0x61,0x63,0x3D,0x22,0x30,0x30,0x3A,0x31,0x31,0x3A,0x32,0x32,0x3A,
+0x33,0x33,0x3A,0x34,0x34,0x3A,0x35,0x35,0x22,0x0A,0x0A,0x20,0x20,0x20,0x20,0x64,
+0x75,0x6D,0x70,0x66,0x69,0x6C,0x65,0x5F,0x73,0x6C,0x65,0x65,0x70,0x5F,0x74,0x69,
+0x6D,0x65,0x5F,0x62,0x65,0x66,0x6F,0x72,0x65,0x5F,0x65,0x78,0x69,0x74,0x3D,0x30,
+0x0A,0x20,0x20,0x20,0x0A,0x23,0x23,0x23,0x20,0x6E,0x6F,0x74,0x65,0x2C,0x20,0x64,
+0x65,0x70,0x6F,0x6C,0x79,0x6D,0x65,0x6E,0x74,0x2E,0x6D,0x6F,0x64,0x65,0x20,0x6F,
+0x70,0x74,0x69,0x6F,0x6E,0x73,0x3A,0x20,0x5B,0x6D,0x69,0x72,0x72,0x6F,0x72,0x2C,
+0x20,0x69,0x6E,0x6C,0x69,0x6E,0x65,0x2C,0x20,0x74,0x72,0x61,0x6E,0x73,0x70,0x61,
+0x72,0x65,0x6E,0x74,0x5D,0x0A,0x20,0x20,0x20,0x20,0x5B,0x70,0x61,0x63,0x6B,0x65,
+0x74,0x5F,0x69,0x6F,0x2E,0x64,0x65,0x70,0x6F,0x6C,0x79,0x6D,0x65,0x6E,0x74,0x5D,
+0x0A,0x20,0x20,0x20,0x20,0x6D,0x6F,0x64,0x65,0x3D,0x6D,0x69,0x72,0x72,0x6F,0x72,
+0x0A,0x0A,0x23,0x23,0x23,0x20,0x6E,0x6F,0x74,0x65,0x2C,0x20,0x69,0x6E,0x74,0x65,
+0x72,0x66,0x61,0x63,0x65,0x2E,0x74,0x79,0x70,0x65,0x20,0x6F,0x70,0x74,0x69,0x6F,
+0x6E,0x73,0x3A,0x20,0x5B,0x70,0x61,0x67,0x2C,0x20,0x70,0x63,0x61,0x70,0x2C,0x20,
+0x6D,0x61,0x72,0x73,0x69,0x6F,0x2C,0x20,0x74,0x75,0x6E,0x5D,0x0A,0x23,0x23,0x23,
+0x20,0x72,0x65,0x63,0x65,0x69,0x76,0x65,0x20,0x66,0x72,0x6F,0x6D,0x20,0x69,0x6E,
+0x74,0x65,0x72,0x6E,0x61,0x6C,0x20,0x69,0x6E,0x74,0x65,0x72,0x66,0x61,0x63,0x65,
+0x2C,0x20,0x72,0x6F,0x75,0x74,0x65,0x20,0x64,0x69,0x72,0x20,0x69,0x73,0x20,0x30,
+0x2C,0x0A,0x23,0x23,0x23,0x20,0x72,0x65,0x63,0x65,0x69,0x76,0x65,0x20,0x66,0x72,
+0x6F,0x6D,0x20,0x65,0x78,0x74,0x65,0x72,0x6E,0x61,0x6C,0x20,0x69,0x6E,0x74,0x65,
0x72,0x66,0x61,0x63,0x65,0x2C,0x20,0x72,0x6F,0x75,0x74,0x65,0x20,0x64,0x69,0x72,
-0x20,0x69,0x73,0x20,0x30,0x2C,0x0A,0x23,0x23,0x23,0x20,0x72,0x65,0x63,0x65,0x69,
-0x76,0x65,0x20,0x66,0x72,0x6F,0x6D,0x20,0x65,0x78,0x74,0x65,0x72,0x6E,0x61,0x6C,
-0x20,0x69,0x6E,0x74,0x65,0x72,0x66,0x61,0x63,0x65,0x2C,0x20,0x72,0x6F,0x75,0x74,
-0x65,0x20,0x64,0x69,0x72,0x20,0x69,0x73,0x20,0x31,0x2E,0x0A,0x20,0x20,0x20,0x20,
-0x5B,0x70,0x61,0x63,0x6B,0x65,0x74,0x5F,0x69,0x6F,0x2E,0x69,0x6E,0x74,0x65,0x72,
-0x6E,0x61,0x6C,0x2E,0x69,0x6E,0x74,0x65,0x72,0x66,0x61,0x63,0x65,0x5D,0x0A,0x20,
-0x20,0x20,0x20,0x74,0x79,0x70,0x65,0x3D,0x70,0x63,0x61,0x70,0x0A,0x20,0x20,0x20,
-0x20,0x6E,0x61,0x6D,0x65,0x3D,0x22,0x6C,0x6F,0x22,0x0A,0x0A,0x20,0x20,0x20,0x20,
-0x5B,0x70,0x61,0x63,0x6B,0x65,0x74,0x5F,0x69,0x6F,0x2E,0x65,0x78,0x74,0x65,0x72,
-0x6E,0x61,0x6C,0x2E,0x69,0x6E,0x74,0x65,0x72,0x66,0x61,0x63,0x65,0x5D,0x0A,0x20,
-0x20,0x20,0x20,0x74,0x79,0x70,0x65,0x3D,0x70,0x63,0x61,0x70,0x0A,0x20,0x20,0x20,
-0x20,0x6E,0x61,0x6D,0x65,0x3D,0x6C,0x6F,0x0A,0x20,0x20,0x20,0x20,0x0A,0x20,0x20,
-0x20,0x20,0x5B,0x70,0x61,0x63,0x6B,0x65,0x74,0x5F,0x69,0x6F,0x2E,0x70,0x6F,0x6C,
-0x6C,0x69,0x6E,0x67,0x5D,0x0A,0x20,0x20,0x20,0x20,0x65,0x6E,0x61,0x62,0x6C,0x65,
-0x64,0x3D,0x31,0x20,0x20,0x20,0x20,0x09,0x0A,0x23,0x23,0x23,0x20,0x6E,0x6F,0x74,
-0x65,0x2C,0x20,0x70,0x6F,0x6C,0x6C,0x69,0x6E,0x67,0x5F,0x70,0x72,0x69,0x6F,0x72,
-0x69,0x74,0x79,0x20,0x3D,0x20,0x63,0x61,0x6C,0x6C,0x20,0x73,0x61,0x70,0x70,0x5F,
-0x72,0x65,0x63,0x76,0x5F,0x70,0x6B,0x74,0x20,0x65,0x76,0x65,0x72,0x79,0x20,0x63,
-0x61,0x6C,0x6C,0x20,0x70,0x6F,0x6C,0x6C,0x69,0x6E,0x67,0x5F,0x65,0x6E,0x74,0x72,
-0x79,0x20,0x74,0x69,0x6D,0x65,0x73,0x2C,0x20,0x20,0x20,0x20,0x20,0x0A,0x20,0x20,
-0x20,0x20,0x70,0x6F,0x6C,0x6C,0x69,0x6E,0x67,0x5F,0x70,0x72,0x69,0x6F,0x72,0x69,
-0x74,0x79,0x3D,0x31,0x0A,0x0A,0x5B,0x50,0x52,0x4F,0x54,0x4F,0x43,0x4F,0x4C,0x5F,
-0x46,0x45,0x41,0x54,0x55,0x52,0x45,0x5D,0x0A,0x20,0x20,0x20,0x20,0x69,0x70,0x76,
-0x36,0x5F,0x64,0x65,0x63,0x61,0x70,0x73,0x75,0x6C,0x61,0x74,0x69,0x6F,0x6E,0x5F,
-0x65,0x6E,0x61,0x62,0x6C,0x65,0x64,0x3D,0x31,0x0A,0x20,0x20,0x20,0x20,0x69,0x70,
-0x76,0x36,0x5F,0x73,0x65,0x6E,0x64,0x5F,0x70,0x61,0x63,0x6B,0x65,0x74,0x5F,0x65,
-0x6E,0x61,0x62,0x6C,0x65,0x64,0x3D,0x31,0x0A,0x20,0x20,0x20,0x20,0x74,0x63,0x70,
-0x5F,0x64,0x72,0x6F,0x70,0x5F,0x70,0x75,0x72,0x65,0x5F,0x61,0x63,0x6B,0x5F,0x70,
-0x6B,0x74,0x3D,0x30,0x0A,0x20,0x20,0x20,0x20,0x74,0x63,0x70,0x5F,0x73,0x79,0x6E,
-0x5F,0x6F,0x70,0x74,0x69,0x6F,0x6E,0x5F,0x70,0x61,0x72,0x73,0x65,0x5F,0x65,0x6E,
-0x61,0x62,0x6C,0x65,0x64,0x3D,0x31,0x20,0x0A,0x20,0x20,0x20,0x20,0x73,0x6B,0x69,
-0x70,0x5F,0x6E,0x6F,0x74,0x5F,0x69,0x70,0x5F,0x6C,0x61,0x79,0x65,0x72,0x5F,0x6F,
-0x76,0x65,0x72,0x5F,0x65,0x74,0x68,0x3D,0x30,0x0A,0x20,0x20,0x20,0x20,0x72,0x65,
-0x76,0x65,0x72,0x73,0x65,0x5F,0x65,0x74,0x68,0x65,0x72,0x6E,0x65,0x74,0x5F,0x61,
-0x64,0x64,0x72,0x3D,0x31,0x0A,0x0A,0x5B,0x44,0x55,0x50,0x4C,0x49,0x43,0x41,0x54,
-0x45,0x5F,0x50,0x4B,0x54,0x5D,0x0A,0x5B,0x64,0x75,0x70,0x5F,0x70,0x6B,0x74,0x2E,
-0x74,0x72,0x61,0x66,0x66,0x69,0x63,0x2E,0x6F,0x72,0x69,0x67,0x69,0x6E,0x61,0x6C,
-0x5D,0x0A,0x20,0x20,0x20,0x20,0x6F,0x72,0x69,0x67,0x69,0x6E,0x61,0x6C,0x5F,0x69,
-0x70,0x76,0x34,0x5F,0x74,0x63,0x70,0x5F,0x65,0x6E,0x61,0x62,0x6C,0x65,0x64,0x3D,
-0x31,0x0A,0x20,0x20,0x20,0x20,0x6F,0x72,0x69,0x67,0x69,0x6E,0x61,0x6C,0x5F,0x69,
-0x70,0x76,0x34,0x5F,0x75,0x64,0x70,0x5F,0x65,0x6E,0x61,0x62,0x6C,0x65,0x64,0x3D,
-0x30,0x0A,0x23,0x23,0x23,0x20,0x6E,0x6F,0x74,0x65,0x2C,0x20,0x63,0x61,0x6E,0x27,
-0x74,0x20,0x64,0x69,0x73,0x74,0x69,0x6E,0x67,0x75,0x69,0x73,0x68,0x20,0x62,0x65,
-0x74,0x77,0x65,0x65,0x6E,0x20,0x64,0x75,0x70,0x6C,0x69,0x63,0x61,0x74,0x65,0x20,
-0x74,0x72,0x61,0x66,0x66,0x69,0x63,0x20,0x61,0x6E,0x64,0x20,0x61,0x70,0x70,0x6C,
-0x69,0x63,0x61,0x74,0x69,0x6F,0x6E,0x20,0x72,0x65,0x74,0x72,0x61,0x6E,0x73,0x6D,
-0x69,0x74,0x20,0x74,0x72,0x61,0x66,0x66,0x69,0x63,0x20,0x66,0x6F,0x72,0x20,0x49,
-0x50,0x76,0x36,0x20,0x70,0x61,0x63,0x6B,0x65,0x74,0x73,0x2C,0x0A,0x23,0x23,0x23,
-0x20,0x73,0x6F,0x20,0x6E,0x6F,0x74,0x20,0x73,0x75,0x70,0x70,0x6F,0x72,0x74,0x20,
-0x49,0x50,0x76,0x36,0x20,0x6F,0x72,0x69,0x67,0x69,0x6E,0x61,0x6C,0x20,0x64,0x75,
-0x70,0x6C,0x69,0x63,0x61,0x74,0x65,0x20,0x74,0x72,0x61,0x66,0x66,0x69,0x63,0x20,
-0x63,0x68,0x65,0x63,0x6B,0x2E,0x0A,0x0A,0x5B,0x64,0x75,0x70,0x5F,0x70,0x6B,0x74,
-0x2E,0x74,0x72,0x61,0x66,0x66,0x69,0x63,0x2E,0x69,0x6E,0x6A,0x65,0x63,0x74,0x5D,
-0x0A,0x20,0x20,0x20,0x20,0x69,0x6E,0x6A,0x65,0x63,0x74,0x5F,0x61,0x6C,0x6C,0x5F,
-0x65,0x6E,0x61,0x62,0x6C,0x65,0x64,0x3D,0x31,0x0A,0x09,0x0A,0x5B,0x64,0x75,0x70,
-0x5F,0x70,0x6B,0x74,0x2E,0x70,0x61,0x72,0x61,0x6D,0x65,0x74,0x65,0x72,0x73,0x5D,
-0x0A,0x20,0x20,0x20,0x20,0x62,0x6C,0x6F,0x6F,0x6D,0x5F,0x63,0x61,0x70,0x61,0x63,
-0x69,0x74,0x79,0x3D,0x31,0x30,0x30,0x30,0x30,0x30,0x30,0x0A,0x20,0x20,0x20,0x20,
-0x62,0x6C,0x6F,0x6F,0x6D,0x5F,0x65,0x72,0x72,0x6F,0x72,0x5F,0x72,0x61,0x74,0x65,
-0x3D,0x30,0x2E,0x30,0x30,0x30,0x30,0x31,0x0A,0x20,0x20,0x20,0x20,0x62,0x6C,0x6F,
-0x6F,0x6D,0x5F,0x74,0x69,0x6D,0x65,0x6F,0x75,0x74,0x3D,0x31,0x30,0x0A,0x0A,0x09,
-0x0A,0x5B,0x53,0x54,0x52,0x45,0x41,0x4D,0x5D,0x0A,0x23,0x23,0x23,0x20,0x6E,0x6F,
-0x74,0x65,0x2C,0x20,0x73,0x74,0x72,0x65,0x61,0x6D,0x5F,0x69,0x64,0x5F,0x62,0x61,
-0x73,0x65,0x5F,0x74,0x69,0x6D,0x65,0x20,0x66,0x6F,0x72,0x6D,0x61,0x74,0x20,0x69,
-0x73,0x20,0x22,0x25,0x59,0x2D,0x25,0x6D,0x2D,0x25,0x64,0x20,0x25,0x48,0x3A,0x25,
-0x4D,0x3A,0x25,0x53,0x22,0x20,0x0A,0x20,0x20,0x20,0x20,0x73,0x74,0x72,0x65,0x61,
-0x6D,0x5F,0x69,0x64,0x5F,0x62,0x61,0x73,0x65,0x5F,0x74,0x69,0x6D,0x65,0x3D,0x22,
-0x32,0x30,0x32,0x31,0x2D,0x30,0x31,0x2D,0x30,0x31,0x20,0x30,0x30,0x3A,0x30,0x30,
-0x3A,0x30,0x30,0x22,0x0A,0x20,0x20,0x20,0x20,0x5B,0x73,0x74,0x72,0x65,0x61,0x6D,
-0x2E,0x74,0x63,0x70,0x5D,0x0A,0x20,0x20,0x20,0x20,0x6D,0x61,0x78,0x3D,0x31,0x30,
-0x30,0x30,0x30,0x0A,0x20,0x20,0x20,0x20,0x74,0x69,0x6D,0x65,0x6F,0x75,0x74,0x3D,
-0x36,0x30,0x0A,0x20,0x20,0x20,0x20,0x73,0x79,0x6E,0x5F,0x6D,0x61,0x6E,0x64,0x61,
-0x74,0x6F,0x72,0x79,0x3D,0x31,0x0A,0x20,0x20,0x20,0x20,0x72,0x65,0x6F,0x72,0x64,
-0x65,0x72,0x5F,0x70,0x6B,0x74,0x5F,0x6D,0x61,0x78,0x3D,0x33,0x32,0x0A,0x20,0x20,
-0x20,0x20,0x61,0x6E,0x61,0x6C,0x79,0x73,0x65,0x5F,0x6F,0x70,0x74,0x69,0x6F,0x6E,
-0x5F,0x65,0x6E,0x61,0x62,0x6C,0x65,0x64,0x3D,0x31,0x0A,0x20,0x20,0x20,0x20,0x74,
-0x75,0x70,0x6C,0x65,0x34,0x5F,0x72,0x65,0x75,0x73,0x65,0x5F,0x74,0x69,0x6D,0x65,
-0x5F,0x69,0x6E,0x74,0x65,0x72,0x76,0x61,0x6C,0x3D,0x33,0x30,0x0A,0x0A,0x20,0x20,
-0x20,0x20,0x6D,0x65,0x61,0x6E,0x69,0x6E,0x67,0x66,0x75,0x6C,0x5F,0x73,0x74,0x61,
-0x74,0x69,0x73,0x74,0x69,0x63,0x73,0x5F,0x6D,0x69,0x6E,0x69,0x6D,0x75,0x6D,0x5F,
-0x70,0x6B,0x74,0x3D,0x33,0x0A,0x20,0x20,0x20,0x20,0x6D,0x65,0x61,0x6E,0x69,0x6E,
-0x67,0x66,0x75,0x6C,0x5F,0x73,0x74,0x61,0x74,0x69,0x73,0x74,0x69,0x63,0x73,0x5F,
-0x6D,0x69,0x6E,0x69,0x6D,0x75,0x6D,0x5F,0x62,0x79,0x74,0x65,0x3D,0x35,0x0A,0x20,
-0x20,0x20,0x20,0x0A,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x5B,0x73,0x74,0x72,
-0x65,0x61,0x6D,0x2E,0x74,0x63,0x70,0x2E,0x69,0x6E,0x6A,0x65,0x63,0x74,0x5D,0x0A,
-0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x6C,0x69,0x6E,0x6B,0x5F,0x6D,0x73,0x73,
-0x3D,0x31,0x34,0x36,0x30,0x0A,0x09,0x20,0x20,0x0A,0x20,0x20,0x20,0x20,0x20,0x20,
-0x20,0x20,0x5B,0x73,0x74,0x72,0x65,0x61,0x6D,0x2E,0x74,0x63,0x70,0x2E,0x69,0x6E,
-0x6A,0x65,0x63,0x74,0x2E,0x72,0x73,0x74,0x5D,0x0A,0x20,0x20,0x20,0x20,0x20,0x20,
-0x20,0x20,0x61,0x75,0x74,0x6F,0x5F,0x72,0x65,0x6D,0x65,0x64,0x79,0x3D,0x31,0x0A,
-0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x6E,0x75,0x6D,0x62,0x65,0x72,0x3D,0x31,
-0x0A,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x73,0x69,0x67,0x6E,0x61,0x74,0x75,
-0x72,0x65,0x5F,0x65,0x6E,0x61,0x62,0x6C,0x65,0x64,0x3D,0x31,0x0A,0x20,0x20,0x20,
-0x20,0x20,0x20,0x20,0x20,0x73,0x69,0x67,0x6E,0x61,0x74,0x75,0x72,0x65,0x5F,0x73,
-0x65,0x65,0x64,0x31,0x3D,0x36,0x35,0x35,0x33,0x35,0x0A,0x20,0x20,0x20,0x20,0x20,
-0x20,0x20,0x20,0x73,0x69,0x67,0x6E,0x61,0x74,0x75,0x72,0x65,0x5F,0x73,0x65,0x65,
-0x64,0x32,0x3D,0x31,0x33,0x0A,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x72,0x65,
-0x6D,0x65,0x64,0x79,0x5F,0x6B,0x69,0x6C,0x6C,0x5F,0x74,0x63,0x70,0x5F,0x62,0x79,
-0x5F,0x69,0x6E,0x6C,0x69,0x6E,0x65,0x5F,0x64,0x65,0x76,0x69,0x63,0x65,0x3D,0x30,
-0x0A,0x09,0x0A,0x20,0x20,0x20,0x20,0x5B,0x73,0x74,0x72,0x65,0x61,0x6D,0x2E,0x75,
-0x64,0x70,0x5D,0x0A,0x20,0x20,0x20,0x20,0x6D,0x61,0x78,0x3D,0x31,0x30,0x30,0x30,
-0x30,0x0A,0x20,0x20,0x20,0x20,0x74,0x69,0x6D,0x65,0x6F,0x75,0x74,0x3D,0x36,0x30,
-0x0A,0x20,0x20,0x20,0x20,0x6D,0x65,0x61,0x6E,0x69,0x6E,0x67,0x66,0x75,0x6C,0x5F,
-0x73,0x74,0x61,0x74,0x69,0x73,0x74,0x69,0x63,0x73,0x5F,0x6D,0x69,0x6E,0x69,0x6D,
-0x75,0x6D,0x5F,0x70,0x6B,0x74,0x3D,0x33,0x0A,0x20,0x20,0x20,0x20,0x6D,0x65,0x61,
-0x6E,0x69,0x6E,0x67,0x66,0x75,0x6C,0x5F,0x73,0x74,0x61,0x74,0x69,0x73,0x74,0x69,
-0x63,0x73,0x5F,0x6D,0x69,0x6E,0x69,0x6D,0x75,0x6D,0x5F,0x62,0x79,0x74,0x65,0x3D,
-0x35,0x0A,0x0A,0x5B,0x50,0x52,0x4F,0x46,0x49,0x4C,0x49,0x4E,0x47,0x5D,0x0A,0x5B,
-0x70,0x72,0x6F,0x66,0x69,0x6C,0x69,0x6E,0x67,0x2E,0x70,0x6B,0x74,0x5F,0x6C,0x61,
-0x74,0x65,0x6E,0x63,0x79,0x5D,0x0A,0x20,0x20,0x20,0x20,0x65,0x6E,0x61,0x62,0x6C,
-0x65,0x64,0x3D,0x30,0x0A,0x23,0x23,0x23,0x20,0x6E,0x6F,0x74,0x65,0x2C,0x20,0x74,
-0x68,0x72,0x65,0x73,0x68,0x6F,0x6C,0x64,0x20,0x75,0x6E,0x69,0x74,0x20,0x69,0x73,
-0x20,0x6D,0x69,0x63,0x72,0x6F,0x73,0x65,0x63,0x6F,0x6E,0x64,0x73,0x20,0x28,0x75,
-0x73,0x29,0x0A,0x20,0x20,0x20,0x20,0x74,0x68,0x72,0x65,0x73,0x68,0x6F,0x6C,0x64,
-0x3D,0x31,0x30,0x30,0x30,0x30,0x30,0x30,0x0A,0x09,0x0A,0x20,0x20,0x20,0x20,0x5B,
-0x70,0x72,0x6F,0x66,0x69,0x6C,0x69,0x6E,0x67,0x2E,0x73,0x61,0x6E,0x69,0x74,0x79,
-0x5F,0x63,0x68,0x65,0x63,0x6B,0x5D,0x0A,0x20,0x20,0x20,0x20,0x72,0x61,0x77,0x5F,
-0x70,0x6B,0x74,0x5F,0x62,0x72,0x6F,0x6B,0x65,0x6E,0x5F,0x65,0x6E,0x61,0x62,0x6C,
-0x65,0x64,0x3D,0x30,0x0A,0x20,0x20,0x20,0x20,0x73,0x79,0x6D,0x62,0x6F,0x6C,0x5F,
-0x63,0x6F,0x6E,0x66,0x6C,0x69,0x63,0x74,0x5F,0x65,0x6E,0x61,0x62,0x6C,0x65,0x64,
-0x3D,0x30,0x0A,0x20,0x20,0x0A,0x20,0x20,0x20,0x20,0x5B,0x70,0x72,0x6F,0x66,0x69,
-0x6C,0x69,0x6E,0x67,0x2E,0x6C,0x6F,0x67,0x5D,0x0A,0x20,0x20,0x20,0x20,0x6C,0x65,
-0x76,0x65,0x6C,0x3D,0x33,0x30,0x0A,0x20,0x20,0x20,0x20,0x69,0x6E,0x74,0x65,0x72,
-0x76,0x61,0x6C,0x3D,0x35,0x0A,0x20,0x20,0x20,0x20,0x0A,0x20,0x20,0x20,0x20,0x20,
-0x20,0x20,0x20,0x5B,0x70,0x72,0x6F,0x66,0x69,0x6C,0x69,0x6E,0x67,0x2E,0x6C,0x6F,
-0x67,0x2E,0x6C,0x6F,0x63,0x61,0x6C,0x5D,0x0A,0x20,0x20,0x20,0x20,0x20,0x20,0x20,
-0x20,0x65,0x6E,0x61,0x62,0x6C,0x65,0x64,0x3D,0x31,0x0A,0x23,0x23,0x23,0x20,0x6E,
-0x6F,0x74,0x65,0x2C,0x20,0x69,0x66,0x20,0x22,0x66,0x69,0x6C,0x65,0x5F,0x74,0x72,
-0x75,0x6E,0x63,0x61,0x74,0x65,0x5F,0x6F,0x70,0x65,0x6E,0x5F,0x65,0x6E,0x61,0x62,
-0x6C,0x65,0x64,0x3D,0x31,0x22,0x2C,0x20,0x66,0x69,0x6C,0x65,0x20,0x77,0x69,0x6C,
-0x6C,0x20,0x62,0x65,0x20,0x74,0x72,0x75,0x6E,0x63,0x61,0x74,0x65,0x64,0x2C,0x20,
-0x6F,0x74,0x68,0x65,0x72,0x77,0x69,0x73,0x65,0x20,0x6F,0x70,0x65,0x6E,0x20,0x74,
-0x68,0x65,0x20,0x66,0x69,0x6C,0x65,0x20,0x66,0x6F,0x72,0x20,0x61,0x70,0x70,0x65,
-0x6E,0x64,0x69,0x6E,0x67,0x2E,0x09,0x20,0x0A,0x20,0x20,0x20,0x20,0x20,0x20,0x20,
-0x20,0x66,0x69,0x6C,0x65,0x5F,0x74,0x72,0x75,0x6E,0x63,0x61,0x74,0x65,0x5F,0x65,
-0x6E,0x61,0x62,0x6C,0x65,0x64,0x20,0x3D,0x20,0x31,0x0A,0x20,0x20,0x20,0x20,0x20,
-0x0A,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x5B,0x70,0x72,0x6F,0x66,0x69,0x6C,
-0x69,0x6E,0x67,0x2E,0x6C,0x6F,0x67,0x2E,0x72,0x65,0x6D,0x6F,0x74,0x65,0x5D,0x0A,
-0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x65,0x6E,0x61,0x62,0x6C,0x65,0x64,0x3D,
-0x31,0x0A,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x73,0x65,0x72,0x76,0x65,0x72,
-0x5F,0x69,0x70,0x3D,0x22,0x31,0x39,0x32,0x2E,0x31,0x36,0x38,0x2E,0x31,0x31,0x2E,
-0x39,0x30,0x22,0x0A,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x73,0x65,0x72,0x76,
-0x65,0x72,0x5F,0x70,0x6F,0x72,0x74,0x3D,0x38,0x31,0x32,0x36,0x0A,0x0A,0x20,0x20,
-0x20,0x20,0x20,0x20,0x20,0x20,0x5B,0x70,0x72,0x6F,0x66,0x69,0x6C,0x69,0x6E,0x67,
-0x2E,0x6C,0x6F,0x67,0x2E,0x72,0x65,0x6D,0x6F,0x74,0x65,0x2E,0x66,0x69,0x65,0x6C,
-0x64,0x5F,0x73,0x74,0x61,0x74,0x32,0x5D,0x0A,0x23,0x23,0x23,0x20,0x6E,0x6F,0x74,
-0x65,0x2C,0x20,0x69,0x73,0x20,0x76,0x61,0x6C,0x69,0x64,0x20,0x77,0x68,0x65,0x6E,
-0x20,0x22,0x72,0x65,0x6D,0x6F,0x74,0x65,0x5F,0x73,0x65,0x6E,0x64,0x5F,0x6F,0x75,
-0x74,0x5F,0x74,0x79,0x70,0x65,0x3D,0x66,0x69,0x65,0x6C,0x64,0x5F,0x73,0x74,0x61,
-0x74,0x32,0x22,0x09,0x20,0x0A,0x23,0x23,0x23,0x20,0x6E,0x6F,0x74,0x65,0x2C,0x20,
-0x6D,0x65,0x74,0x72,0x69,0x63,0x5F,0x74,0x79,0x70,0x65,0x20,0x6F,0x70,0x74,0x69,
-0x6F,0x6E,0x20,0x76,0x61,0x6C,0x75,0x65,0x3A,0x20,0x5B,0x64,0x65,0x66,0x61,0x75,
-0x6C,0x74,0x2C,0x20,0x6A,0x73,0x6F,0x6E,0x5D,0x0A,0x20,0x20,0x20,0x20,0x20,0x20,
-0x20,0x20,0x6D,0x65,0x74,0x72,0x69,0x63,0x5F,0x74,0x79,0x70,0x65,0x20,0x3D,0x20,
-0x64,0x65,0x66,0x61,0x75,0x6C,0x74,0x0A,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,
-0x61,0x70,0x70,0x5F,0x6E,0x61,0x6D,0x65,0x3D,0x73,0x61,0x70,0x70,0x0A,0x0A,0x09,
-0x09,0x5B,0x70,0x72,0x6F,0x66,0x69,0x6C,0x69,0x6E,0x67,0x2E,0x6C,0x6F,0x67,0x2E,
-0x70,0x72,0x6F,0x6D,0x65,0x74,0x68,0x65,0x75,0x73,0x5D,0x0A,0x09,0x09,0x70,0x72,
-0x6F,0x6D,0x65,0x74,0x68,0x65,0x75,0x73,0x5F,0x65,0x6E,0x61,0x62,0x6C,0x65,0x64,
-0x3D,0x31,0x0A,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x70,0x72,0x6F,0x6D,0x65,
-0x74,0x68,0x65,0x75,0x73,0x5F,0x70,0x6F,0x72,0x74,0x3D,0x39,0x32,0x37,0x33,0x0A,
-0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x70,0x72,0x6F,0x6D,0x65,0x74,0x68,0x65,
-0x75,0x73,0x5F,0x75,0x72,0x6C,0x5F,0x70,0x61,0x74,0x68,0x3D,0x22,0x2F,0x6D,0x65,
-0x74,0x72,0x69,0x63,0x73,0x22,0x0A,0x20,0x20,0x20,0x20,0x20,0x0A,0x5B,0x54,0x4F,
-0x4F,0x4C,0x53,0x5D,0x0A,0x20,0x20,0x20,0x20,0x5B,0x74,0x6F,0x6F,0x6C,0x73,0x2E,
-0x70,0x6B,0x74,0x5F,0x64,0x75,0x6D,0x70,0x5D,0x0A,0x20,0x20,0x20,0x20,0x65,0x6E,
-0x61,0x62,0x6C,0x65,0x64,0x3D,0x31,0x0A,0x23,0x23,0x23,0x20,0x6E,0x6F,0x74,0x65,
-0x2C,0x20,0x6D,0x6F,0x64,0x65,0x20,0x6F,0x70,0x74,0x69,0x6F,0x6E,0x73,0x20,0x76,
-0x61,0x6C,0x75,0x65,0x3A,0x5B,0x73,0x74,0x6F,0x72,0x61,0x67,0x65,0x2C,0x20,0x75,
-0x64,0x70,0x5F,0x73,0x6F,0x63,0x6B,0x65,0x74,0x5D,0x0A,0x20,0x20,0x20,0x20,0x6D,
-0x6F,0x64,0x65,0x3D,0x75,0x64,0x70,0x5F,0x73,0x6F,0x63,0x6B,0x65,0x74,0x0A,0x20,
-0x20,0x20,0x20,0x42,0x53,0x44,0x5F,0x70,0x61,0x63,0x6B,0x65,0x74,0x5F,0x66,0x69,
-0x6C,0x74,0x65,0x72,0x3D,0x22,0x22,0x0A,0x20,0x20,0x20,0x0A,0x20,0x20,0x20,0x20,
+0x20,0x69,0x73,0x20,0x31,0x2E,0x0A,0x20,0x20,0x20,0x20,0x5B,0x70,0x61,0x63,0x6B,
+0x65,0x74,0x5F,0x69,0x6F,0x2E,0x69,0x6E,0x74,0x65,0x72,0x6E,0x61,0x6C,0x2E,0x69,
+0x6E,0x74,0x65,0x72,0x66,0x61,0x63,0x65,0x5D,0x0A,0x20,0x20,0x20,0x20,0x74,0x79,
+0x70,0x65,0x3D,0x70,0x63,0x61,0x70,0x0A,0x20,0x20,0x20,0x20,0x6E,0x61,0x6D,0x65,
+0x3D,0x22,0x6C,0x6F,0x22,0x0A,0x0A,0x20,0x20,0x20,0x20,0x5B,0x70,0x61,0x63,0x6B,
+0x65,0x74,0x5F,0x69,0x6F,0x2E,0x65,0x78,0x74,0x65,0x72,0x6E,0x61,0x6C,0x2E,0x69,
+0x6E,0x74,0x65,0x72,0x66,0x61,0x63,0x65,0x5D,0x0A,0x20,0x20,0x20,0x20,0x74,0x79,
+0x70,0x65,0x3D,0x70,0x63,0x61,0x70,0x0A,0x20,0x20,0x20,0x20,0x6E,0x61,0x6D,0x65,
+0x3D,0x6C,0x6F,0x0A,0x20,0x20,0x20,0x20,0x0A,0x20,0x20,0x20,0x20,0x5B,0x70,0x61,
+0x63,0x6B,0x65,0x74,0x5F,0x69,0x6F,0x2E,0x70,0x6F,0x6C,0x6C,0x69,0x6E,0x67,0x5D,
+0x0A,0x20,0x20,0x20,0x20,0x65,0x6E,0x61,0x62,0x6C,0x65,0x64,0x3D,0x31,0x20,0x20,
+0x20,0x20,0x09,0x0A,0x23,0x23,0x23,0x20,0x6E,0x6F,0x74,0x65,0x2C,0x20,0x70,0x6F,
+0x6C,0x6C,0x69,0x6E,0x67,0x5F,0x70,0x72,0x69,0x6F,0x72,0x69,0x74,0x79,0x20,0x3D,
+0x20,0x63,0x61,0x6C,0x6C,0x20,0x73,0x61,0x70,0x70,0x5F,0x72,0x65,0x63,0x76,0x5F,
+0x70,0x6B,0x74,0x20,0x65,0x76,0x65,0x72,0x79,0x20,0x63,0x61,0x6C,0x6C,0x20,0x70,
+0x6F,0x6C,0x6C,0x69,0x6E,0x67,0x5F,0x65,0x6E,0x74,0x72,0x79,0x20,0x74,0x69,0x6D,
+0x65,0x73,0x2C,0x20,0x20,0x20,0x20,0x20,0x0A,0x20,0x20,0x20,0x20,0x70,0x6F,0x6C,
+0x6C,0x69,0x6E,0x67,0x5F,0x70,0x72,0x69,0x6F,0x72,0x69,0x74,0x79,0x3D,0x31,0x0A,
+0x0A,0x5B,0x50,0x52,0x4F,0x54,0x4F,0x43,0x4F,0x4C,0x5F,0x46,0x45,0x41,0x54,0x55,
+0x52,0x45,0x5D,0x0A,0x20,0x20,0x20,0x20,0x69,0x70,0x76,0x36,0x5F,0x64,0x65,0x63,
+0x61,0x70,0x73,0x75,0x6C,0x61,0x74,0x69,0x6F,0x6E,0x5F,0x65,0x6E,0x61,0x62,0x6C,
+0x65,0x64,0x3D,0x31,0x0A,0x20,0x20,0x20,0x20,0x69,0x70,0x76,0x36,0x5F,0x73,0x65,
+0x6E,0x64,0x5F,0x70,0x61,0x63,0x6B,0x65,0x74,0x5F,0x65,0x6E,0x61,0x62,0x6C,0x65,
+0x64,0x3D,0x31,0x0A,0x20,0x20,0x20,0x20,0x74,0x63,0x70,0x5F,0x64,0x72,0x6F,0x70,
+0x5F,0x70,0x75,0x72,0x65,0x5F,0x61,0x63,0x6B,0x5F,0x70,0x6B,0x74,0x3D,0x30,0x0A,
+0x20,0x20,0x20,0x20,0x74,0x63,0x70,0x5F,0x73,0x79,0x6E,0x5F,0x6F,0x70,0x74,0x69,
+0x6F,0x6E,0x5F,0x70,0x61,0x72,0x73,0x65,0x5F,0x65,0x6E,0x61,0x62,0x6C,0x65,0x64,
+0x3D,0x31,0x20,0x0A,0x20,0x20,0x20,0x20,0x73,0x6B,0x69,0x70,0x5F,0x6E,0x6F,0x74,
+0x5F,0x69,0x70,0x5F,0x6C,0x61,0x79,0x65,0x72,0x5F,0x6F,0x76,0x65,0x72,0x5F,0x65,
+0x74,0x68,0x3D,0x30,0x0A,0x0A,0x5B,0x44,0x55,0x50,0x4C,0x49,0x43,0x41,0x54,0x45,
+0x5F,0x50,0x4B,0x54,0x5D,0x0A,0x5B,0x64,0x75,0x70,0x5F,0x70,0x6B,0x74,0x2E,0x74,
+0x72,0x61,0x66,0x66,0x69,0x63,0x2E,0x6F,0x72,0x69,0x67,0x69,0x6E,0x61,0x6C,0x5D,
+0x0A,0x20,0x20,0x20,0x20,0x6F,0x72,0x69,0x67,0x69,0x6E,0x61,0x6C,0x5F,0x69,0x70,
+0x76,0x34,0x5F,0x74,0x63,0x70,0x5F,0x65,0x6E,0x61,0x62,0x6C,0x65,0x64,0x3D,0x31,
+0x0A,0x20,0x20,0x20,0x20,0x6F,0x72,0x69,0x67,0x69,0x6E,0x61,0x6C,0x5F,0x69,0x70,
+0x76,0x34,0x5F,0x75,0x64,0x70,0x5F,0x65,0x6E,0x61,0x62,0x6C,0x65,0x64,0x3D,0x30,
+0x0A,0x23,0x23,0x23,0x20,0x6E,0x6F,0x74,0x65,0x2C,0x20,0x63,0x61,0x6E,0x27,0x74,
+0x20,0x64,0x69,0x73,0x74,0x69,0x6E,0x67,0x75,0x69,0x73,0x68,0x20,0x62,0x65,0x74,
+0x77,0x65,0x65,0x6E,0x20,0x64,0x75,0x70,0x6C,0x69,0x63,0x61,0x74,0x65,0x20,0x74,
+0x72,0x61,0x66,0x66,0x69,0x63,0x20,0x61,0x6E,0x64,0x20,0x61,0x70,0x70,0x6C,0x69,
+0x63,0x61,0x74,0x69,0x6F,0x6E,0x20,0x72,0x65,0x74,0x72,0x61,0x6E,0x73,0x6D,0x69,
+0x74,0x20,0x74,0x72,0x61,0x66,0x66,0x69,0x63,0x20,0x66,0x6F,0x72,0x20,0x49,0x50,
+0x76,0x36,0x20,0x70,0x61,0x63,0x6B,0x65,0x74,0x73,0x2C,0x0A,0x23,0x23,0x23,0x20,
+0x73,0x6F,0x20,0x6E,0x6F,0x74,0x20,0x73,0x75,0x70,0x70,0x6F,0x72,0x74,0x20,0x49,
+0x50,0x76,0x36,0x20,0x6F,0x72,0x69,0x67,0x69,0x6E,0x61,0x6C,0x20,0x64,0x75,0x70,
+0x6C,0x69,0x63,0x61,0x74,0x65,0x20,0x74,0x72,0x61,0x66,0x66,0x69,0x63,0x20,0x63,
+0x68,0x65,0x63,0x6B,0x2E,0x0A,0x0A,0x5B,0x64,0x75,0x70,0x5F,0x70,0x6B,0x74,0x2E,
+0x74,0x72,0x61,0x66,0x66,0x69,0x63,0x2E,0x69,0x6E,0x6A,0x65,0x63,0x74,0x5D,0x0A,
+0x20,0x20,0x20,0x20,0x69,0x6E,0x6A,0x65,0x63,0x74,0x5F,0x61,0x6C,0x6C,0x5F,0x65,
+0x6E,0x61,0x62,0x6C,0x65,0x64,0x3D,0x31,0x0A,0x09,0x0A,0x5B,0x64,0x75,0x70,0x5F,
+0x70,0x6B,0x74,0x2E,0x70,0x61,0x72,0x61,0x6D,0x65,0x74,0x65,0x72,0x73,0x5D,0x0A,
+0x20,0x20,0x20,0x20,0x62,0x6C,0x6F,0x6F,0x6D,0x5F,0x63,0x61,0x70,0x61,0x63,0x69,
+0x74,0x79,0x3D,0x31,0x30,0x30,0x30,0x30,0x30,0x30,0x0A,0x20,0x20,0x20,0x20,0x62,
+0x6C,0x6F,0x6F,0x6D,0x5F,0x65,0x72,0x72,0x6F,0x72,0x5F,0x72,0x61,0x74,0x65,0x3D,
+0x30,0x2E,0x30,0x30,0x30,0x30,0x31,0x0A,0x20,0x20,0x20,0x20,0x62,0x6C,0x6F,0x6F,
+0x6D,0x5F,0x74,0x69,0x6D,0x65,0x6F,0x75,0x74,0x3D,0x31,0x30,0x0A,0x0A,0x09,0x0A,
+0x5B,0x53,0x54,0x52,0x45,0x41,0x4D,0x5D,0x0A,0x23,0x23,0x23,0x20,0x6E,0x6F,0x74,
+0x65,0x2C,0x20,0x73,0x74,0x72,0x65,0x61,0x6D,0x5F,0x69,0x64,0x5F,0x62,0x61,0x73,
+0x65,0x5F,0x74,0x69,0x6D,0x65,0x20,0x66,0x6F,0x72,0x6D,0x61,0x74,0x20,0x69,0x73,
+0x20,0x22,0x25,0x59,0x2D,0x25,0x6D,0x2D,0x25,0x64,0x20,0x25,0x48,0x3A,0x25,0x4D,
+0x3A,0x25,0x53,0x22,0x20,0x0A,0x20,0x20,0x20,0x20,0x73,0x74,0x72,0x65,0x61,0x6D,
+0x5F,0x69,0x64,0x5F,0x62,0x61,0x73,0x65,0x5F,0x74,0x69,0x6D,0x65,0x3D,0x22,0x32,
+0x30,0x32,0x31,0x2D,0x30,0x31,0x2D,0x30,0x31,0x20,0x30,0x30,0x3A,0x30,0x30,0x3A,
+0x30,0x30,0x22,0x0A,0x20,0x20,0x20,0x20,0x5B,0x73,0x74,0x72,0x65,0x61,0x6D,0x2E,
+0x74,0x63,0x70,0x5D,0x0A,0x20,0x20,0x20,0x20,0x6D,0x61,0x78,0x3D,0x31,0x30,0x30,
+0x30,0x30,0x0A,0x20,0x20,0x20,0x20,0x74,0x69,0x6D,0x65,0x6F,0x75,0x74,0x3D,0x36,
+0x30,0x0A,0x20,0x20,0x20,0x20,0x73,0x79,0x6E,0x5F,0x6D,0x61,0x6E,0x64,0x61,0x74,
+0x6F,0x72,0x79,0x3D,0x31,0x0A,0x20,0x20,0x20,0x20,0x72,0x65,0x6F,0x72,0x64,0x65,
+0x72,0x5F,0x70,0x6B,0x74,0x5F,0x6D,0x61,0x78,0x3D,0x33,0x32,0x0A,0x20,0x20,0x20,
+0x20,0x61,0x6E,0x61,0x6C,0x79,0x73,0x65,0x5F,0x6F,0x70,0x74,0x69,0x6F,0x6E,0x5F,
+0x65,0x6E,0x61,0x62,0x6C,0x65,0x64,0x3D,0x31,0x0A,0x20,0x20,0x20,0x20,0x74,0x75,
+0x70,0x6C,0x65,0x34,0x5F,0x72,0x65,0x75,0x73,0x65,0x5F,0x74,0x69,0x6D,0x65,0x5F,
+0x69,0x6E,0x74,0x65,0x72,0x76,0x61,0x6C,0x3D,0x33,0x30,0x0A,0x0A,0x20,0x20,0x20,
+0x20,0x6D,0x65,0x61,0x6E,0x69,0x6E,0x67,0x66,0x75,0x6C,0x5F,0x73,0x74,0x61,0x74,
+0x69,0x73,0x74,0x69,0x63,0x73,0x5F,0x6D,0x69,0x6E,0x69,0x6D,0x75,0x6D,0x5F,0x70,
+0x6B,0x74,0x3D,0x33,0x0A,0x20,0x20,0x20,0x20,0x6D,0x65,0x61,0x6E,0x69,0x6E,0x67,
+0x66,0x75,0x6C,0x5F,0x73,0x74,0x61,0x74,0x69,0x73,0x74,0x69,0x63,0x73,0x5F,0x6D,
+0x69,0x6E,0x69,0x6D,0x75,0x6D,0x5F,0x62,0x79,0x74,0x65,0x3D,0x35,0x0A,0x20,0x20,
+0x20,0x20,0x0A,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x5B,0x73,0x74,0x72,0x65,
+0x61,0x6D,0x2E,0x74,0x63,0x70,0x2E,0x69,0x6E,0x6A,0x65,0x63,0x74,0x5D,0x0A,0x20,
+0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x6C,0x69,0x6E,0x6B,0x5F,0x6D,0x73,0x73,0x3D,
+0x31,0x34,0x36,0x30,0x0A,0x09,0x20,0x20,0x0A,0x20,0x20,0x20,0x20,0x20,0x20,0x20,
+0x20,0x5B,0x73,0x74,0x72,0x65,0x61,0x6D,0x2E,0x74,0x63,0x70,0x2E,0x69,0x6E,0x6A,
+0x65,0x63,0x74,0x2E,0x72,0x73,0x74,0x5D,0x0A,0x20,0x20,0x20,0x20,0x20,0x20,0x20,
+0x20,0x61,0x75,0x74,0x6F,0x5F,0x72,0x65,0x6D,0x65,0x64,0x79,0x3D,0x31,0x0A,0x20,
+0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x6E,0x75,0x6D,0x62,0x65,0x72,0x3D,0x31,0x0A,
+0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x73,0x69,0x67,0x6E,0x61,0x74,0x75,0x72,
+0x65,0x5F,0x65,0x6E,0x61,0x62,0x6C,0x65,0x64,0x3D,0x31,0x0A,0x20,0x20,0x20,0x20,
+0x20,0x20,0x20,0x20,0x73,0x69,0x67,0x6E,0x61,0x74,0x75,0x72,0x65,0x5F,0x73,0x65,
+0x65,0x64,0x31,0x3D,0x36,0x35,0x35,0x33,0x35,0x0A,0x20,0x20,0x20,0x20,0x20,0x20,
+0x20,0x20,0x73,0x69,0x67,0x6E,0x61,0x74,0x75,0x72,0x65,0x5F,0x73,0x65,0x65,0x64,
+0x32,0x3D,0x31,0x33,0x0A,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x72,0x65,0x6D,
+0x65,0x64,0x79,0x5F,0x6B,0x69,0x6C,0x6C,0x5F,0x74,0x63,0x70,0x5F,0x62,0x79,0x5F,
+0x69,0x6E,0x6C,0x69,0x6E,0x65,0x5F,0x64,0x65,0x76,0x69,0x63,0x65,0x3D,0x30,0x0A,
+0x09,0x0A,0x20,0x20,0x20,0x20,0x5B,0x73,0x74,0x72,0x65,0x61,0x6D,0x2E,0x75,0x64,
+0x70,0x5D,0x0A,0x20,0x20,0x20,0x20,0x6D,0x61,0x78,0x3D,0x31,0x30,0x30,0x30,0x30,
+0x0A,0x20,0x20,0x20,0x20,0x74,0x69,0x6D,0x65,0x6F,0x75,0x74,0x3D,0x36,0x30,0x0A,
+0x20,0x20,0x20,0x20,0x6D,0x65,0x61,0x6E,0x69,0x6E,0x67,0x66,0x75,0x6C,0x5F,0x73,
+0x74,0x61,0x74,0x69,0x73,0x74,0x69,0x63,0x73,0x5F,0x6D,0x69,0x6E,0x69,0x6D,0x75,
+0x6D,0x5F,0x70,0x6B,0x74,0x3D,0x33,0x0A,0x20,0x20,0x20,0x20,0x6D,0x65,0x61,0x6E,
+0x69,0x6E,0x67,0x66,0x75,0x6C,0x5F,0x73,0x74,0x61,0x74,0x69,0x73,0x74,0x69,0x63,
+0x73,0x5F,0x6D,0x69,0x6E,0x69,0x6D,0x75,0x6D,0x5F,0x62,0x79,0x74,0x65,0x3D,0x35,
+0x0A,0x0A,0x5B,0x50,0x52,0x4F,0x46,0x49,0x4C,0x49,0x4E,0x47,0x5D,0x0A,0x5B,0x70,
+0x72,0x6F,0x66,0x69,0x6C,0x69,0x6E,0x67,0x2E,0x70,0x6B,0x74,0x5F,0x6C,0x61,0x74,
+0x65,0x6E,0x63,0x79,0x5D,0x0A,0x20,0x20,0x20,0x20,0x65,0x6E,0x61,0x62,0x6C,0x65,
+0x64,0x3D,0x30,0x0A,0x23,0x23,0x23,0x20,0x6E,0x6F,0x74,0x65,0x2C,0x20,0x74,0x68,
+0x72,0x65,0x73,0x68,0x6F,0x6C,0x64,0x20,0x75,0x6E,0x69,0x74,0x20,0x69,0x73,0x20,
+0x6D,0x69,0x63,0x72,0x6F,0x73,0x65,0x63,0x6F,0x6E,0x64,0x73,0x20,0x28,0x75,0x73,
+0x29,0x0A,0x20,0x20,0x20,0x20,0x74,0x68,0x72,0x65,0x73,0x68,0x6F,0x6C,0x64,0x3D,
+0x31,0x30,0x30,0x30,0x30,0x30,0x30,0x0A,0x09,0x0A,0x20,0x20,0x20,0x20,0x5B,0x70,
+0x72,0x6F,0x66,0x69,0x6C,0x69,0x6E,0x67,0x2E,0x73,0x61,0x6E,0x69,0x74,0x79,0x5F,
+0x63,0x68,0x65,0x63,0x6B,0x5D,0x0A,0x20,0x20,0x20,0x20,0x72,0x61,0x77,0x5F,0x70,
+0x6B,0x74,0x5F,0x62,0x72,0x6F,0x6B,0x65,0x6E,0x5F,0x65,0x6E,0x61,0x62,0x6C,0x65,
+0x64,0x3D,0x30,0x0A,0x20,0x20,0x20,0x20,0x73,0x79,0x6D,0x62,0x6F,0x6C,0x5F,0x63,
+0x6F,0x6E,0x66,0x6C,0x69,0x63,0x74,0x5F,0x65,0x6E,0x61,0x62,0x6C,0x65,0x64,0x3D,
+0x30,0x0A,0x20,0x20,0x0A,0x20,0x20,0x20,0x20,0x5B,0x70,0x72,0x6F,0x66,0x69,0x6C,
+0x69,0x6E,0x67,0x2E,0x6C,0x6F,0x67,0x5D,0x0A,0x20,0x20,0x20,0x20,0x6C,0x65,0x76,
+0x65,0x6C,0x3D,0x32,0x30,0x0A,0x20,0x20,0x20,0x20,0x69,0x6E,0x74,0x65,0x72,0x76,
+0x61,0x6C,0x3D,0x35,0x0A,0x20,0x20,0x20,0x20,0x0A,0x20,0x20,0x20,0x20,0x20,0x20,
+0x20,0x20,0x5B,0x70,0x72,0x6F,0x66,0x69,0x6C,0x69,0x6E,0x67,0x2E,0x6C,0x6F,0x67,
+0x2E,0x6C,0x6F,0x63,0x61,0x6C,0x5D,0x0A,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,
+0x65,0x6E,0x61,0x62,0x6C,0x65,0x64,0x3D,0x31,0x0A,0x23,0x23,0x23,0x20,0x6E,0x6F,
+0x74,0x65,0x2C,0x20,0x69,0x66,0x20,0x22,0x66,0x69,0x6C,0x65,0x5F,0x74,0x72,0x75,
+0x6E,0x63,0x61,0x74,0x65,0x5F,0x6F,0x70,0x65,0x6E,0x5F,0x65,0x6E,0x61,0x62,0x6C,
+0x65,0x64,0x3D,0x31,0x22,0x2C,0x20,0x66,0x69,0x6C,0x65,0x20,0x77,0x69,0x6C,0x6C,
+0x20,0x62,0x65,0x20,0x74,0x72,0x75,0x6E,0x63,0x61,0x74,0x65,0x64,0x2C,0x20,0x6F,
+0x74,0x68,0x65,0x72,0x77,0x69,0x73,0x65,0x20,0x6F,0x70,0x65,0x6E,0x20,0x74,0x68,
+0x65,0x20,0x66,0x69,0x6C,0x65,0x20,0x66,0x6F,0x72,0x20,0x61,0x70,0x70,0x65,0x6E,
+0x64,0x69,0x6E,0x67,0x2E,0x09,0x20,0x0A,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,
+0x66,0x69,0x6C,0x65,0x5F,0x74,0x72,0x75,0x6E,0x63,0x61,0x74,0x65,0x5F,0x65,0x6E,
+0x61,0x62,0x6C,0x65,0x64,0x20,0x3D,0x20,0x31,0x0A,0x20,0x20,0x20,0x20,0x20,0x0A,
+0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x5B,0x70,0x72,0x6F,0x66,0x69,0x6C,0x69,
+0x6E,0x67,0x2E,0x6C,0x6F,0x67,0x2E,0x72,0x65,0x6D,0x6F,0x74,0x65,0x5D,0x0A,0x20,
+0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x65,0x6E,0x61,0x62,0x6C,0x65,0x64,0x3D,0x31,
+0x0A,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x73,0x65,0x72,0x76,0x65,0x72,0x5F,
+0x69,0x70,0x3D,0x22,0x31,0x39,0x32,0x2E,0x31,0x36,0x38,0x2E,0x31,0x31,0x2E,0x39,
+0x30,0x22,0x0A,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x73,0x65,0x72,0x76,0x65,
+0x72,0x5F,0x70,0x6F,0x72,0x74,0x3D,0x38,0x31,0x32,0x36,0x0A,0x0A,0x20,0x20,0x20,
+0x20,0x20,0x20,0x20,0x20,0x5B,0x70,0x72,0x6F,0x66,0x69,0x6C,0x69,0x6E,0x67,0x2E,
+0x6C,0x6F,0x67,0x2E,0x72,0x65,0x6D,0x6F,0x74,0x65,0x2E,0x66,0x69,0x65,0x6C,0x64,
+0x5F,0x73,0x74,0x61,0x74,0x32,0x5D,0x0A,0x23,0x23,0x23,0x20,0x6E,0x6F,0x74,0x65,
+0x2C,0x20,0x69,0x73,0x20,0x76,0x61,0x6C,0x69,0x64,0x20,0x77,0x68,0x65,0x6E,0x20,
+0x22,0x72,0x65,0x6D,0x6F,0x74,0x65,0x5F,0x73,0x65,0x6E,0x64,0x5F,0x6F,0x75,0x74,
+0x5F,0x74,0x79,0x70,0x65,0x3D,0x66,0x69,0x65,0x6C,0x64,0x5F,0x73,0x74,0x61,0x74,
+0x32,0x22,0x09,0x20,0x0A,0x23,0x23,0x23,0x20,0x6E,0x6F,0x74,0x65,0x2C,0x20,0x6D,
+0x65,0x74,0x72,0x69,0x63,0x5F,0x74,0x79,0x70,0x65,0x20,0x6F,0x70,0x74,0x69,0x6F,
+0x6E,0x20,0x76,0x61,0x6C,0x75,0x65,0x3A,0x20,0x5B,0x64,0x65,0x66,0x61,0x75,0x6C,
+0x74,0x2C,0x20,0x6A,0x73,0x6F,0x6E,0x5D,0x0A,0x20,0x20,0x20,0x20,0x20,0x20,0x20,
+0x20,0x6D,0x65,0x74,0x72,0x69,0x63,0x5F,0x74,0x79,0x70,0x65,0x20,0x3D,0x20,0x64,
+0x65,0x66,0x61,0x75,0x6C,0x74,0x0A,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x61,
+0x70,0x70,0x5F,0x6E,0x61,0x6D,0x65,0x3D,0x73,0x61,0x70,0x70,0x0A,0x0A,0x09,0x09,
+0x5B,0x70,0x72,0x6F,0x66,0x69,0x6C,0x69,0x6E,0x67,0x2E,0x6C,0x6F,0x67,0x2E,0x70,
+0x72,0x6F,0x6D,0x65,0x74,0x68,0x65,0x75,0x73,0x5D,0x0A,0x09,0x09,0x70,0x72,0x6F,
+0x6D,0x65,0x74,0x68,0x65,0x75,0x73,0x5F,0x65,0x6E,0x61,0x62,0x6C,0x65,0x64,0x3D,
+0x31,0x0A,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x70,0x72,0x6F,0x6D,0x65,0x74,
+0x68,0x65,0x75,0x73,0x5F,0x70,0x6F,0x72,0x74,0x3D,0x39,0x32,0x37,0x33,0x0A,0x20,
+0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x70,0x72,0x6F,0x6D,0x65,0x74,0x68,0x65,0x75,
+0x73,0x5F,0x75,0x72,0x6C,0x5F,0x70,0x61,0x74,0x68,0x3D,0x22,0x2F,0x6D,0x65,0x74,
+0x72,0x69,0x63,0x73,0x22,0x0A,0x20,0x20,0x20,0x20,0x20,0x0A,0x5B,0x54,0x4F,0x4F,
+0x4C,0x53,0x5D,0x0A,0x20,0x20,0x20,0x20,0x5B,0x74,0x6F,0x6F,0x6C,0x73,0x2E,0x70,
+0x6B,0x74,0x5F,0x64,0x75,0x6D,0x70,0x5D,0x0A,0x20,0x20,0x20,0x20,0x65,0x6E,0x61,
+0x62,0x6C,0x65,0x64,0x3D,0x31,0x0A,0x23,0x23,0x23,0x20,0x6E,0x6F,0x74,0x65,0x2C,
+0x20,0x6D,0x6F,0x64,0x65,0x20,0x6F,0x70,0x74,0x69,0x6F,0x6E,0x73,0x20,0x76,0x61,
+0x6C,0x75,0x65,0x3A,0x5B,0x73,0x74,0x6F,0x72,0x61,0x67,0x65,0x2C,0x20,0x75,0x64,
+0x70,0x5F,0x73,0x6F,0x63,0x6B,0x65,0x74,0x5D,0x0A,0x20,0x20,0x20,0x20,0x6D,0x6F,
+0x64,0x65,0x3D,0x75,0x64,0x70,0x5F,0x73,0x6F,0x63,0x6B,0x65,0x74,0x0A,0x20,0x20,
+0x20,0x20,0x42,0x53,0x44,0x5F,0x70,0x61,0x63,0x6B,0x65,0x74,0x5F,0x66,0x69,0x6C,
+0x74,0x65,0x72,0x3D,0x22,0x22,0x0A,0x20,0x20,0x20,0x0A,0x20,0x20,0x20,0x20,0x20,
+0x20,0x20,0x20,0x5B,0x74,0x6F,0x6F,0x6C,0x73,0x2E,0x70,0x6B,0x74,0x5F,0x64,0x75,
+0x6D,0x70,0x2E,0x74,0x68,0x72,0x65,0x61,0x64,0x73,0x5D,0x0A,0x23,0x23,0x23,0x20,
+0x6E,0x6F,0x74,0x65,0x2C,0x20,0x69,0x66,0x20,0x79,0x6F,0x75,0x20,0x77,0x61,0x6E,
+0x74,0x20,0x65,0x6E,0x61,0x62,0x6C,0x65,0x20,0x70,0x6B,0x74,0x20,0x64,0x75,0x6D,
+0x70,0x20,0x69,0x6E,0x20,0x61,0x6C,0x6C,0x20,0x74,0x68,0x72,0x65,0x61,0x64,0x2C,
+0x20,0x73,0x65,0x74,0x20,0x64,0x75,0x6D,0x70,0x5F,0x74,0x68,0x72,0x65,0x61,0x64,
+0x5F,0x61,0x6C,0x6C,0x5F,0x65,0x6E,0x61,0x62,0x6C,0x65,0x64,0x3D,0x31,0x2C,0x20,
+0x74,0x68,0x65,0x6E,0x20,0x27,0x64,0x75,0x6D,0x70,0x5F,0x74,0x68,0x72,0x65,0x61,
+0x64,0x5F,0x69,0x64,0x27,0x20,0x69,0x73,0x20,0x6F,0x62,0x73,0x6F,0x6C,0x65,0x74,
+0x65,0x64,0x2E,0x0A,0x23,0x23,0x23,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x69,0x66,
+0x20,0x64,0x75,0x6D,0x70,0x5F,0x74,0x68,0x72,0x65,0x61,0x64,0x5F,0x61,0x6C,0x6C,
+0x5F,0x65,0x6E,0x61,0x62,0x6C,0x65,0x64,0x3D,0x30,0x2C,0x20,0x74,0x68,0x65,0x6E,
+0x20,0x75,0x73,0x65,0x20,0x64,0x75,0x6D,0x70,0x5F,0x74,0x68,0x72,0x65,0x61,0x64,
+0x5F,0x69,0x64,0x20,0x74,0x6F,0x20,0x73,0x70,0x65,0x63,0x69,0x66,0x79,0x20,0x73,
+0x65,0x70,0x61,0x72,0x61,0x74,0x65,0x20,0x73,0x70,0x65,0x63,0x69,0x66,0x69,0x65,
+0x64,0x20,0x74,0x68,0x72,0x65,0x61,0x64,0x20,0x69,0x6E,0x64,0x65,0x78,0x2E,0x0A,
+0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x61,0x6C,0x6C,0x5F,0x74,0x68,0x72,0x65,
+0x61,0x64,0x73,0x5F,0x65,0x6E,0x61,0x62,0x6C,0x65,0x64,0x3D,0x31,0x0A,0x20,0x20,
+0x20,0x0A,0x23,0x23,0x23,0x20,0x6E,0x6F,0x74,0x65,0x2C,0x20,0x64,0x75,0x6D,0x70,
+0x5F,0x74,0x68,0x72,0x65,0x61,0x64,0x5F,0x69,0x64,0x20,0x73,0x74,0x61,0x72,0x74,
+0x20,0x66,0x72,0x6F,0x6D,0x20,0x30,0x2C,0x20,0x6D,0x61,0x78,0x20,0x69,0x73,0x20,
+0x43,0x50,0x55,0x2E,0x77,0x6F,0x72,0x6B,0x65,0x72,0x5F,0x74,0x68,0x72,0x65,0x61,
+0x64,0x73,0x2D,0x31,0x0A,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x64,0x75,0x6D,
+0x70,0x5F,0x74,0x68,0x72,0x65,0x61,0x64,0x5F,0x69,0x64,0x3D,0x5B,0x30,0x2C,0x31,
+0x2C,0x32,0x2C,0x33,0x2C,0x34,0x5D,0x0A,0x20,0x20,0x20,0x0A,0x20,0x20,0x20,0x20,
0x20,0x20,0x20,0x20,0x5B,0x74,0x6F,0x6F,0x6C,0x73,0x2E,0x70,0x6B,0x74,0x5F,0x64,
-0x75,0x6D,0x70,0x2E,0x74,0x68,0x72,0x65,0x61,0x64,0x73,0x5D,0x0A,0x23,0x23,0x23,
-0x20,0x6E,0x6F,0x74,0x65,0x2C,0x20,0x69,0x66,0x20,0x79,0x6F,0x75,0x20,0x77,0x61,
-0x6E,0x74,0x20,0x65,0x6E,0x61,0x62,0x6C,0x65,0x20,0x70,0x6B,0x74,0x20,0x64,0x75,
-0x6D,0x70,0x20,0x69,0x6E,0x20,0x61,0x6C,0x6C,0x20,0x74,0x68,0x72,0x65,0x61,0x64,
-0x2C,0x20,0x73,0x65,0x74,0x20,0x64,0x75,0x6D,0x70,0x5F,0x74,0x68,0x72,0x65,0x61,
-0x64,0x5F,0x61,0x6C,0x6C,0x5F,0x65,0x6E,0x61,0x62,0x6C,0x65,0x64,0x3D,0x31,0x2C,
-0x20,0x74,0x68,0x65,0x6E,0x20,0x27,0x64,0x75,0x6D,0x70,0x5F,0x74,0x68,0x72,0x65,
-0x61,0x64,0x5F,0x69,0x64,0x27,0x20,0x69,0x73,0x20,0x6F,0x62,0x73,0x6F,0x6C,0x65,
-0x74,0x65,0x64,0x2E,0x0A,0x23,0x23,0x23,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x69,
-0x66,0x20,0x64,0x75,0x6D,0x70,0x5F,0x74,0x68,0x72,0x65,0x61,0x64,0x5F,0x61,0x6C,
-0x6C,0x5F,0x65,0x6E,0x61,0x62,0x6C,0x65,0x64,0x3D,0x30,0x2C,0x20,0x74,0x68,0x65,
-0x6E,0x20,0x75,0x73,0x65,0x20,0x64,0x75,0x6D,0x70,0x5F,0x74,0x68,0x72,0x65,0x61,
-0x64,0x5F,0x69,0x64,0x20,0x74,0x6F,0x20,0x73,0x70,0x65,0x63,0x69,0x66,0x79,0x20,
-0x73,0x65,0x70,0x61,0x72,0x61,0x74,0x65,0x20,0x73,0x70,0x65,0x63,0x69,0x66,0x69,
-0x65,0x64,0x20,0x74,0x68,0x72,0x65,0x61,0x64,0x20,0x69,0x6E,0x64,0x65,0x78,0x2E,
-0x0A,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x61,0x6C,0x6C,0x5F,0x74,0x68,0x72,
-0x65,0x61,0x64,0x73,0x5F,0x65,0x6E,0x61,0x62,0x6C,0x65,0x64,0x3D,0x31,0x0A,0x20,
-0x20,0x20,0x0A,0x23,0x23,0x23,0x20,0x6E,0x6F,0x74,0x65,0x2C,0x20,0x64,0x75,0x6D,
-0x70,0x5F,0x74,0x68,0x72,0x65,0x61,0x64,0x5F,0x69,0x64,0x20,0x73,0x74,0x61,0x72,
-0x74,0x20,0x66,0x72,0x6F,0x6D,0x20,0x30,0x2C,0x20,0x6D,0x61,0x78,0x20,0x69,0x73,
-0x20,0x43,0x50,0x55,0x2E,0x77,0x6F,0x72,0x6B,0x65,0x72,0x5F,0x74,0x68,0x72,0x65,
-0x61,0x64,0x73,0x2D,0x31,0x0A,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x64,0x75,
-0x6D,0x70,0x5F,0x74,0x68,0x72,0x65,0x61,0x64,0x5F,0x69,0x64,0x3D,0x5B,0x30,0x2C,
-0x31,0x2C,0x32,0x2C,0x33,0x2C,0x34,0x5D,0x0A,0x20,0x20,0x20,0x0A,0x20,0x20,0x20,
-0x20,0x20,0x20,0x20,0x20,0x5B,0x74,0x6F,0x6F,0x6C,0x73,0x2E,0x70,0x6B,0x74,0x5F,
-0x64,0x75,0x6D,0x70,0x2E,0x75,0x64,0x70,0x5D,0x0A,0x20,0x20,0x20,0x20,0x20,0x20,
-0x20,0x20,0x63,0x6F,0x6D,0x6D,0x61,0x6E,0x64,0x5F,0x70,0x6F,0x72,0x74,0x3D,0x31,
-0x32,0x33,0x34,0x35,0x0A,0x0A,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x5B,0x74,
-0x6F,0x6F,0x6C,0x73,0x2E,0x70,0x6B,0x74,0x5F,0x64,0x75,0x6D,0x70,0x2E,0x73,0x74,
-0x6F,0x72,0x61,0x67,0x65,0x5D,0x0A,0x23,0x23,0x23,0x20,0x6E,0x6F,0x74,0x65,0x2C,
-0x20,0x66,0x69,0x6C,0x65,0x20,0x70,0x61,0x74,0x68,0x20,0x6D,0x75,0x73,0x74,0x20,
-0x62,0x65,0x20,0x64,0x6F,0x75,0x62,0x6C,0x65,0x20,0x71,0x75,0x6F,0x74,0x61,0x74,
-0x69,0x6F,0x6E,0x20,0x6D,0x61,0x72,0x6B,0x20,0x65,0x78,0x74,0x65,0x6E,0x73,0x69,
-0x6F,0x6E,0x2C,0x20,0x66,0x6F,0x72,0x20,0x65,0x78,0x61,0x6D,0x70,0x6C,0x65,0x2C,
-0x20,0x20,0x70,0x61,0x74,0x68,0x3D,0x22,0x2F,0x64,0x65,0x76,0x2F,0x73,0x68,0x6D,
-0x2F,0x70,0x6B,0x74,0x5F,0x64,0x75,0x6D,0x70,0x22,0x0A,0x20,0x20,0x20,0x20,0x20,
-0x20,0x20,0x20,0x70,0x61,0x74,0x68,0x3D,0x22,0x2F,0x64,0x65,0x76,0x2F,0x73,0x68,
-0x6D,0x2F,0x70,0x6B,0x74,0x5F,0x64,0x75,0x6D,0x70,0x22,0x0A,0x23,0x23,0x23,0x20,
-0x6E,0x6F,0x74,0x65,0x2C,0x20,0x66,0x69,0x6C,0x65,0x20,0x73,0x69,0x7A,0x65,0x20,
-0x75,0x6E,0x69,0x74,0x3A,0x20,0x4D,0x42,0x0A,0x20,0x20,0x20,0x20,0x20,0x20,0x20,
-0x20,0x66,0x69,0x6C,0x65,0x5F,0x73,0x69,0x7A,0x65,0x5F,0x6D,0x61,0x78,0x5F,0x70,
-0x65,0x72,0x5F,0x74,0x68,0x72,0x65,0x61,0x64,0x3D,0x31,0x30,0x30,0x30,0x30,0x20,
-0x0A,0x0A,0x5B,0x62,0x72,0x65,0x61,0x6B,0x70,0x61,0x64,0x5D,0x0A,0x20,0x20,0x20,
-0x20,0x64,0x69,0x73,0x61,0x62,0x6C,0x65,0x5F,0x63,0x6F,0x72,0x65,0x64,0x75,0x6D,
-0x70,0x3D,0x30,0x0A,0x20,0x20,0x20,0x20,0x65,0x6E,0x61,0x62,0x6C,0x65,0x5F,0x62,
-0x72,0x65,0x61,0x6B,0x70,0x61,0x64,0x3D,0x30,0x0A,0x20,0x20,0x20,0x20,0x62,0x72,
-0x65,0x61,0x6B,0x70,0x61,0x64,0x5F,0x6D,0x69,0x6E,0x69,0x64,0x75,0x6D,0x70,0x5F,
-0x64,0x69,0x72,0x3D,0x22,0x2F,0x74,0x6D,0x70,0x2F,0x63,0x72,0x61,0x73,0x68,0x72,
-0x65,0x70,0x6F,0x72,0x74,0x22,0x0A,0x20,0x20,0x20,0x20,0x65,0x6E,0x61,0x62,0x6C,
-0x65,0x5F,0x62,0x72,0x65,0x61,0x6B,0x70,0x61,0x64,0x5F,0x75,0x70,0x6C,0x6F,0x61,
-0x64,0x3D,0x30,0x0A,0x20,0x20,0x20,0x20,0x62,0x72,0x65,0x61,0x6B,0x70,0x61,0x64,
-0x5F,0x75,0x70,0x6C,0x6F,0x61,0x64,0x5F,0x75,0x72,0x6C,0x3D,0x22,0x68,0x74,0x74,
-0x70,0x3A,0x2F,0x2F,0x31,0x32,0x37,0x2E,0x30,0x2E,0x30,0x2E,0x31,0x2F,0x22,0x0A,
-0x0A,0x0A,0x23,0x23,0x23,0x20,0x6E,0x6F,0x74,0x65,0x3A,0x0A,0x23,0x23,0x23,0x20,
-0x54,0x68,0x65,0x73,0x65,0x20,0x63,0x6F,0x6E,0x66,0x69,0x67,0x75,0x72,0x61,0x74,
-0x69,0x6F,0x6E,0x73,0x20,0x66,0x6F,0x72,0x6D,0x61,0x74,0x20,0x69,0x73,0x20,0x63,
-0x6F,0x6D,0x70,0x6C,0x65,0x78,0x20,0x61,0x6E,0x64,0x20,0x64,0x69,0x66,0x66,0x69,
-0x63,0x75,0x6C,0x74,0x20,0x74,0x6F,0x20,0x64,0x65,0x73,0x63,0x72,0x69,0x62,0x65,
-0x20,0x77,0x69,0x74,0x68,0x20,0x74,0x6F,0x6D,0x6C,0x20,0x67,0x72,0x61,0x6D,0x6D,
-0x61,0x72,0x2C,0x0A,0x23,0x23,0x23,0x20,0x73,0x6F,0x2C,0x20,0x63,0x72,0x65,0x61,
-0x74,0x65,0x20,0x61,0x20,0x69,0x6E,0x64,0x65,0x70,0x65,0x6E,0x64,0x65,0x6E,0x74,
-0x20,0x73,0x65,0x63,0x6F,0x6E,0x64,0x61,0x72,0x79,0x20,0x63,0x6F,0x6E,0x66,0x69,
-0x67,0x20,0x66,0x69,0x6C,0x65,0x20,0x74,0x6F,0x20,0x64,0x65,0x73,0x63,0x72,0x69,
-0x70,0x74,0x69,0x6F,0x6E,0x20,0x73,0x70,0x65,0x63,0x69,0x66,0x69,0x63,0x20,0x69,
-0x6E,0x66,0x6F,0x72,0x6D,0x61,0x74,0x69,0x6F,0x6E,0x2E,0x0A,0x23,0x23,0x23,0x20,
-0x72,0x65,0x6C,0x61,0x74,0x69,0x76,0x65,0x20,0x70,0x61,0x74,0x68,0x2C,0x20,0x77,
-0x69,0x6C,0x6C,0x20,0x61,0x64,0x64,0x20,0x70,0x72,0x65,0x66,0x69,0x78,0x20,0x77,
-0x69,0x74,0x68,0x20,0x63,0x6D,0x64,0x20,0x61,0x72,0x67,0x73,0x20,0x2D,0x2D,0x63,
-0x6F,0x6E,0x66,0x69,0x67,0x2D,0x72,0x6F,0x6F,0x74,0x2D,0x64,0x69,0x72,0x2C,0x20,
-0x75,0x73,0x65,0x20,0x64,0x65,0x66,0x61,0x75,0x6C,0x74,0x20,0x2E,0x2F,0x65,0x74,
-0x63,0x2F,0x20,0x77,0x69,0x74,0x68,0x6F,0x75,0x74,0x20,0x2D,0x2D,0x63,0x6F,0x6E,
-0x66,0x69,0x67,0x2D,0x72,0x6F,0x6F,0x74,0x2D,0x64,0x69,0x72,0x20,0x61,0x72,0x67,
-0x73,0x2E,0x0A,0x0A,0x5B,0x53,0x45,0x43,0x4F,0x4E,0x44,0x41,0x52,0x59,0x5F,0x43,
-0x4F,0x4E,0x46,0x49,0x47,0x5F,0x4C,0x49,0x4E,0x4B,0x5D,0x09,0x20,0x0A,0x09,0x63,
-0x66,0x67,0x5F,0x66,0x69,0x6C,0x65,0x5F,0x73,0x61,0x70,0x70,0x5F,0x6C,0x6F,0x67,
-0x3D,0x22,0x65,0x74,0x63,0x2F,0x73,0x61,0x70,0x70,0x5F,0x6C,0x6F,0x67,0x2E,0x63,
-0x6F,0x6E,0x66,0x22,0x0A,0x09,0x63,0x66,0x67,0x5F,0x66,0x69,0x6C,0x65,0x5F,0x70,
-0x6C,0x75,0x67,0x5F,0x6C,0x69,0x73,0x74,0x3D,0x22,0x70,0x6C,0x75,0x67,0x2F,0x63,
-0x6F,0x6E,0x66,0x6C,0x69,0x73,0x74,0x2E,0x69,0x6E,0x66,0x22,0x0A,0x09,0x63,0x66,
-0x67,0x5F,0x66,0x69,0x6C,0x65,0x5F,0x70,0x72,0x6F,0x6A,0x65,0x63,0x74,0x5F,0x6C,
-0x69,0x73,0x74,0x3D,0x22,0x65,0x74,0x63,0x2F,0x70,0x72,0x6F,0x6A,0x65,0x63,0x74,
-0x5F,0x6C,0x69,0x73,0x74,0x2E,0x63,0x6F,0x6E,0x66,0x22,0x0A,0x09,0x63,0x66,0x67,
-0x5F,0x66,0x69,0x6C,0x65,0x5F,0x65,0x6E,0x74,0x72,0x79,0x6C,0x69,0x73,0x74,0x3D,
-0x22,0x65,0x74,0x63,0x2F,0x65,0x6E,0x74,0x72,0x79,0x6C,0x69,0x73,0x74,0x2E,0x63,
-0x6F,0x6E,0x66,0x22,0x0A,0x09,0x63,0x66,0x67,0x5F,0x66,0x69,0x6C,0x65,0x5F,0x73,
-0x65,0x6E,0x64,0x5F,0x72,0x61,0x77,0x5F,0x70,0x6B,0x74,0x3D,0x22,0x65,0x74,0x63,
-0x2F,0x73,0x65,0x6E,0x64,0x5F,0x72,0x61,0x77,0x5F,0x70,0x6B,0x74,0x2E,0x63,0x6F,
-0x6E,0x66,0x22,0x0A,0x09,0x63,0x66,0x67,0x5F,0x66,0x69,0x6C,0x65,0x5F,0x76,0x78,
-0x6C,0x61,0x6E,0x5F,0x73,0x70,0x6F,0x72,0x74,0x5F,0x6D,0x61,0x70,0x3D,0x22,0x65,
-0x74,0x63,0x2F,0x76,0x78,0x6C,0x61,0x6E,0x5F,0x73,0x70,0x6F,0x72,0x74,0x5F,0x73,
-0x65,0x72,0x76,0x69,0x63,0x65,0x5F,0x6D,0x61,0x70,0x2E,0x63,0x6F,0x6E,0x66,0x22,
-0x0A,0x09,0x63,0x66,0x67,0x5F,0x66,0x69,0x6C,0x65,0x5F,0x69,0x6E,0x6C,0x69,0x6E,
-0x65,0x5F,0x64,0x65,0x76,0x69,0x63,0x65,0x3D,0x22,0x65,0x74,0x63,0x2F,0x67,0x64,
-0x65,0x76,0x2E,0x63,0x6F,0x6E,0x66,0x22,0x0A,0x09,0x63,0x66,0x67,0x5F,0x66,0x69,
-0x6C,0x65,0x5F,0x6E,0x65,0x63,0x65,0x73,0x73,0x61,0x72,0x79,0x5F,0x70,0x6C,0x75,
-0x67,0x5F,0x6C,0x69,0x73,0x74,0x3D,0x22,0x65,0x74,0x63,0x2F,0x6E,0x65,0x63,0x65,
-0x73,0x73,0x61,0x72,0x79,0x5F,0x70,0x6C,0x75,0x67,0x5F,0x6C,0x69,0x73,0x74,0x2E,
-0x63,0x6F,0x6E,0x66,0x22,0x0A,0x09,0x63,0x66,0x67,0x5F,0x66,0x69,0x6C,0x65,0x5F,
-0x73,0x74,0x72,0x65,0x61,0x6D,0x5F,0x63,0x6F,0x6D,0x70,0x61,0x72,0x65,0x5F,0x6C,
-0x61,0x79,0x65,0x72,0x3D,0x22,0x65,0x74,0x63,0x2F,0x73,0x74,0x72,0x65,0x61,0x6D,
-0x5F,0x63,0x6F,0x6D,0x70,0x61,0x72,0x65,0x5F,0x6C,0x61,0x79,0x65,0x72,0x2E,0x63,
-0x6F,0x6E,0x66,0x22,0x0A,0x09,0x63,0x66,0x67,0x5F,0x66,0x69,0x6C,0x65,0x5F,0x76,
-0x6C,0x61,0x6E,0x5F,0x66,0x6C,0x69,0x70,0x70,0x69,0x6E,0x67,0x3D,0x22,0x65,0x74,
-0x63,0x2F,0x76,0x6C,0x61,0x6E,0x5F,0x66,0x6C,0x69,0x70,0x70,0x69,0x6E,0x67,0x5F,
-0x6D,0x61,0x70,0x2E,0x63,0x6F,0x6E,0x66,0x22,0x0A,0x09,0x63,0x66,0x67,0x5F,0x66,
-0x69,0x6C,0x65,0x5F,0x61,0x73,0x79,0x6D,0x6D,0x65,0x74,0x72,0x69,0x63,0x5F,0x61,
-0x64,0x64,0x72,0x5F,0x6C,0x61,0x79,0x65,0x72,0x3D,0x22,0x65,0x74,0x63,0x2F,0x61,
-0x73,0x79,0x6D,0x6D,0x65,0x74,0x72,0x69,0x63,0x5F,0x61,0x64,0x64,0x72,0x5F,0x6C,
-0x61,0x79,0x65,0x72,0x2E,0x63,0x6F,0x6E,0x66,0x22,0x0A,0x0A,0x5B,0x53,0x45,0x43,
-0x4F,0x4E,0x44,0x41,0x52,0x59,0x5F,0x44,0x41,0x54,0x41,0x5F,0x4C,0x49,0x4E,0x4B,
-0x5D,0x09,0x20,0x0A,0x20,0x20,0x20,0x20,0x64,0x61,0x74,0x61,0x5F,0x66,0x69,0x6C,
-0x65,0x5F,0x73,0x79,0x73,0x69,0x6E,0x66,0x6F,0x5F,0x6C,0x6F,0x67,0x3D,0x22,0x73,
-0x79,0x73,0x69,0x6E,0x66,0x6F,0x2E,0x6C,0x6F,0x67,0x22,0x0A,0x20,0x20,0x20,0x20,
-0x64,0x61,0x74,0x61,0x5F,0x66,0x69,0x6C,0x65,0x5F,0x66,0x69,0x65,0x6C,0x64,0x5F,
-0x73,0x74,0x61,0x74,0x5F,0x6C,0x6F,0x67,0x3D,0x22,0x66,0x73,0x32,0x5F,0x73,0x79,
-0x73,0x69,0x6E,0x66,0x6F,0x2E,0x6C,0x6F,0x67,0x22,0x0A,0x20,0x20,0x20,0x20,0x64,
-0x61,0x74,0x61,0x5F,0x66,0x69,0x6C,0x65,0x5F,0x69,0x6E,0x6C,0x69,0x6E,0x65,0x5F,
-0x6B,0x65,0x65,0x70,0x61,0x6C,0x69,0x76,0x65,0x5F,0x6C,0x6F,0x67,0x3D,0x22,0x67,
-0x64,0x65,0x76,0x5F,0x6B,0x65,0x65,0x70,0x6C,0x69,0x76,0x65,0x5F,0x73,0x74,0x61,
-0x74,0x75,0x73,0x2E,0x6C,0x6F,0x67,0x22,0x0A,0x0A
+0x75,0x6D,0x70,0x2E,0x75,0x64,0x70,0x5D,0x0A,0x20,0x20,0x20,0x20,0x20,0x20,0x20,
+0x20,0x63,0x6F,0x6D,0x6D,0x61,0x6E,0x64,0x5F,0x70,0x6F,0x72,0x74,0x3D,0x31,0x32,
+0x33,0x34,0x35,0x0A,0x09,0x09,0x70,0x6B,0x74,0x5F,0x64,0x75,0x6D,0x70,0x5F,0x72,
+0x61,0x74,0x69,0x6F,0x3D,0x33,0x30,0x0A,0x09,0x09,0x0A,0x20,0x20,0x20,0x20,0x20,
+0x20,0x20,0x20,0x5B,0x74,0x6F,0x6F,0x6C,0x73,0x2E,0x70,0x6B,0x74,0x5F,0x64,0x75,
+0x6D,0x70,0x2E,0x73,0x74,0x6F,0x72,0x61,0x67,0x65,0x5D,0x0A,0x23,0x23,0x23,0x20,
+0x6E,0x6F,0x74,0x65,0x2C,0x20,0x66,0x69,0x6C,0x65,0x20,0x70,0x61,0x74,0x68,0x20,
+0x6D,0x75,0x73,0x74,0x20,0x62,0x65,0x20,0x64,0x6F,0x75,0x62,0x6C,0x65,0x20,0x71,
+0x75,0x6F,0x74,0x61,0x74,0x69,0x6F,0x6E,0x20,0x6D,0x61,0x72,0x6B,0x20,0x65,0x78,
+0x74,0x65,0x6E,0x73,0x69,0x6F,0x6E,0x2C,0x20,0x66,0x6F,0x72,0x20,0x65,0x78,0x61,
+0x6D,0x70,0x6C,0x65,0x2C,0x20,0x20,0x70,0x61,0x74,0x68,0x3D,0x22,0x2F,0x64,0x65,
+0x76,0x2F,0x73,0x68,0x6D,0x2F,0x70,0x6B,0x74,0x5F,0x64,0x75,0x6D,0x70,0x22,0x0A,
+0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x70,0x61,0x74,0x68,0x3D,0x22,0x2F,0x64,
+0x65,0x76,0x2F,0x73,0x68,0x6D,0x2F,0x70,0x6B,0x74,0x5F,0x64,0x75,0x6D,0x70,0x22,
+0x0A,0x23,0x23,0x23,0x20,0x6E,0x6F,0x74,0x65,0x2C,0x20,0x66,0x69,0x6C,0x65,0x20,
+0x73,0x69,0x7A,0x65,0x20,0x75,0x6E,0x69,0x74,0x3A,0x20,0x4D,0x42,0x0A,0x20,0x20,
+0x20,0x20,0x20,0x20,0x20,0x20,0x66,0x69,0x6C,0x65,0x5F,0x73,0x69,0x7A,0x65,0x5F,
+0x6D,0x61,0x78,0x5F,0x70,0x65,0x72,0x5F,0x74,0x68,0x72,0x65,0x61,0x64,0x3D,0x31,
+0x30,0x30,0x30,0x30,0x20,0x0A,0x0A,0x5B,0x62,0x72,0x65,0x61,0x6B,0x70,0x61,0x64,
+0x5D,0x0A,0x20,0x20,0x20,0x20,0x64,0x69,0x73,0x61,0x62,0x6C,0x65,0x5F,0x63,0x6F,
+0x72,0x65,0x64,0x75,0x6D,0x70,0x3D,0x30,0x0A,0x20,0x20,0x20,0x20,0x65,0x6E,0x61,
+0x62,0x6C,0x65,0x5F,0x62,0x72,0x65,0x61,0x6B,0x70,0x61,0x64,0x3D,0x30,0x0A,0x20,
+0x20,0x20,0x20,0x62,0x72,0x65,0x61,0x6B,0x70,0x61,0x64,0x5F,0x6D,0x69,0x6E,0x69,
+0x64,0x75,0x6D,0x70,0x5F,0x64,0x69,0x72,0x3D,0x22,0x2F,0x74,0x6D,0x70,0x2F,0x63,
+0x72,0x61,0x73,0x68,0x72,0x65,0x70,0x6F,0x72,0x74,0x22,0x0A,0x20,0x20,0x20,0x20,
+0x65,0x6E,0x61,0x62,0x6C,0x65,0x5F,0x62,0x72,0x65,0x61,0x6B,0x70,0x61,0x64,0x5F,
+0x75,0x70,0x6C,0x6F,0x61,0x64,0x3D,0x30,0x0A,0x20,0x20,0x20,0x20,0x62,0x72,0x65,
+0x61,0x6B,0x70,0x61,0x64,0x5F,0x75,0x70,0x6C,0x6F,0x61,0x64,0x5F,0x75,0x72,0x6C,
+0x3D,0x22,0x68,0x74,0x74,0x70,0x3A,0x2F,0x2F,0x31,0x32,0x37,0x2E,0x30,0x2E,0x30,
+0x2E,0x31,0x2F,0x22,0x0A,0x0A,0x0A,0x23,0x23,0x23,0x20,0x6E,0x6F,0x74,0x65,0x3A,
+0x0A,0x23,0x23,0x23,0x20,0x54,0x68,0x65,0x73,0x65,0x20,0x63,0x6F,0x6E,0x66,0x69,
+0x67,0x75,0x72,0x61,0x74,0x69,0x6F,0x6E,0x73,0x20,0x66,0x6F,0x72,0x6D,0x61,0x74,
+0x20,0x69,0x73,0x20,0x63,0x6F,0x6D,0x70,0x6C,0x65,0x78,0x20,0x61,0x6E,0x64,0x20,
+0x64,0x69,0x66,0x66,0x69,0x63,0x75,0x6C,0x74,0x20,0x74,0x6F,0x20,0x64,0x65,0x73,
+0x63,0x72,0x69,0x62,0x65,0x20,0x77,0x69,0x74,0x68,0x20,0x74,0x6F,0x6D,0x6C,0x20,
+0x67,0x72,0x61,0x6D,0x6D,0x61,0x72,0x2C,0x0A,0x23,0x23,0x23,0x20,0x73,0x6F,0x2C,
+0x20,0x63,0x72,0x65,0x61,0x74,0x65,0x20,0x61,0x20,0x69,0x6E,0x64,0x65,0x70,0x65,
+0x6E,0x64,0x65,0x6E,0x74,0x20,0x73,0x65,0x63,0x6F,0x6E,0x64,0x61,0x72,0x79,0x20,
+0x63,0x6F,0x6E,0x66,0x69,0x67,0x20,0x66,0x69,0x6C,0x65,0x20,0x74,0x6F,0x20,0x64,
+0x65,0x73,0x63,0x72,0x69,0x70,0x74,0x69,0x6F,0x6E,0x20,0x73,0x70,0x65,0x63,0x69,
+0x66,0x69,0x63,0x20,0x69,0x6E,0x66,0x6F,0x72,0x6D,0x61,0x74,0x69,0x6F,0x6E,0x2E,
+0x0A,0x0A,0x5B,0x53,0x45,0x43,0x4F,0x4E,0x44,0x41,0x52,0x59,0x5F,0x43,0x4F,0x4E,
+0x46,0x49,0x47,0x5F,0x4C,0x49,0x4E,0x4B,0x5D,0x09,0x20,0x0A,0x09,0x63,0x66,0x67,
+0x5F,0x66,0x69,0x6C,0x65,0x5F,0x73,0x61,0x70,0x70,0x5F,0x6C,0x6F,0x67,0x3D,0x22,
+0x65,0x74,0x63,0x2F,0x73,0x61,0x70,0x70,0x5F,0x6C,0x6F,0x67,0x2E,0x63,0x6F,0x6E,
+0x66,0x22,0x0A,0x09,0x63,0x66,0x67,0x5F,0x66,0x69,0x6C,0x65,0x5F,0x70,0x6C,0x75,
+0x67,0x5F,0x6C,0x69,0x73,0x74,0x3D,0x22,0x70,0x6C,0x75,0x67,0x2F,0x63,0x6F,0x6E,
+0x66,0x6C,0x69,0x73,0x74,0x2E,0x69,0x6E,0x66,0x22,0x0A,0x09,0x63,0x66,0x67,0x5F,
+0x66,0x69,0x6C,0x65,0x5F,0x70,0x72,0x6F,0x6A,0x65,0x63,0x74,0x5F,0x6C,0x69,0x73,
+0x74,0x3D,0x22,0x65,0x74,0x63,0x2F,0x70,0x72,0x6F,0x6A,0x65,0x63,0x74,0x5F,0x6C,
+0x69,0x73,0x74,0x2E,0x63,0x6F,0x6E,0x66,0x22,0x0A,0x09,0x63,0x66,0x67,0x5F,0x66,
+0x69,0x6C,0x65,0x5F,0x65,0x6E,0x74,0x72,0x79,0x6C,0x69,0x73,0x74,0x3D,0x22,0x65,
+0x74,0x63,0x2F,0x65,0x6E,0x74,0x72,0x79,0x6C,0x69,0x73,0x74,0x2E,0x63,0x6F,0x6E,
+0x66,0x22,0x0A,0x09,0x63,0x66,0x67,0x5F,0x66,0x69,0x6C,0x65,0x5F,0x73,0x65,0x6E,
+0x64,0x5F,0x72,0x61,0x77,0x5F,0x70,0x6B,0x74,0x3D,0x22,0x65,0x74,0x63,0x2F,0x73,
+0x65,0x6E,0x64,0x5F,0x72,0x61,0x77,0x5F,0x70,0x6B,0x74,0x2E,0x63,0x6F,0x6E,0x66,
+0x22,0x0A,0x09,0x63,0x66,0x67,0x5F,0x66,0x69,0x6C,0x65,0x5F,0x76,0x78,0x6C,0x61,
+0x6E,0x5F,0x73,0x70,0x6F,0x72,0x74,0x5F,0x6D,0x61,0x70,0x3D,0x22,0x65,0x74,0x63,
+0x2F,0x76,0x78,0x6C,0x61,0x6E,0x5F,0x73,0x70,0x6F,0x72,0x74,0x5F,0x73,0x65,0x72,
+0x76,0x69,0x63,0x65,0x5F,0x6D,0x61,0x70,0x2E,0x63,0x6F,0x6E,0x66,0x22,0x0A,0x09,
+0x63,0x66,0x67,0x5F,0x66,0x69,0x6C,0x65,0x5F,0x69,0x6E,0x6C,0x69,0x6E,0x65,0x5F,
+0x64,0x65,0x76,0x69,0x63,0x65,0x3D,0x22,0x65,0x74,0x63,0x2F,0x67,0x64,0x65,0x76,
+0x2E,0x63,0x6F,0x6E,0x66,0x22,0x0A,0x09,0x63,0x66,0x67,0x5F,0x66,0x69,0x6C,0x65,
+0x5F,0x6E,0x65,0x63,0x65,0x73,0x73,0x61,0x72,0x79,0x5F,0x70,0x6C,0x75,0x67,0x5F,
+0x6C,0x69,0x73,0x74,0x3D,0x22,0x65,0x74,0x63,0x2F,0x6E,0x65,0x63,0x65,0x73,0x73,
+0x61,0x72,0x79,0x5F,0x70,0x6C,0x75,0x67,0x5F,0x6C,0x69,0x73,0x74,0x2E,0x63,0x6F,
+0x6E,0x66,0x22,0x0A,0x09,0x63,0x66,0x67,0x5F,0x66,0x69,0x6C,0x65,0x5F,0x73,0x74,
+0x72,0x65,0x61,0x6D,0x5F,0x63,0x6F,0x6D,0x70,0x61,0x72,0x65,0x5F,0x6C,0x61,0x79,
+0x65,0x72,0x3D,0x22,0x65,0x74,0x63,0x2F,0x73,0x74,0x72,0x65,0x61,0x6D,0x5F,0x63,
+0x6F,0x6D,0x70,0x61,0x72,0x65,0x5F,0x6C,0x61,0x79,0x65,0x72,0x2E,0x63,0x6F,0x6E,
+0x66,0x22,0x0A,0x09,0x63,0x66,0x67,0x5F,0x66,0x69,0x6C,0x65,0x5F,0x76,0x6C,0x61,
+0x6E,0x5F,0x66,0x6C,0x69,0x70,0x70,0x69,0x6E,0x67,0x3D,0x22,0x65,0x74,0x63,0x2F,
+0x76,0x6C,0x61,0x6E,0x5F,0x66,0x6C,0x69,0x70,0x70,0x69,0x6E,0x67,0x5F,0x6D,0x61,
+0x70,0x2E,0x63,0x6F,0x6E,0x66,0x22,0x0A,0x09,0x63,0x66,0x67,0x5F,0x66,0x69,0x6C,
+0x65,0x5F,0x61,0x73,0x79,0x6D,0x6D,0x65,0x74,0x72,0x69,0x63,0x5F,0x61,0x64,0x64,
+0x72,0x5F,0x6C,0x61,0x79,0x65,0x72,0x3D,0x22,0x65,0x74,0x63,0x2F,0x61,0x73,0x79,
+0x6D,0x6D,0x65,0x74,0x72,0x69,0x63,0x5F,0x61,0x64,0x64,0x72,0x5F,0x6C,0x61,0x79,
+0x65,0x72,0x2E,0x63,0x6F,0x6E,0x66,0x22,0x0A,0x0A,0x5B,0x53,0x45,0x43,0x4F,0x4E,
+0x44,0x41,0x52,0x59,0x5F,0x44,0x41,0x54,0x41,0x5F,0x4C,0x49,0x4E,0x4B,0x5D,0x09,
+0x20,0x0A,0x20,0x20,0x20,0x20,0x64,0x61,0x74,0x61,0x5F,0x66,0x69,0x6C,0x65,0x5F,
+0x73,0x79,0x73,0x69,0x6E,0x66,0x6F,0x5F,0x6C,0x6F,0x67,0x3D,0x22,0x73,0x79,0x73,
+0x69,0x6E,0x66,0x6F,0x2E,0x6C,0x6F,0x67,0x22,0x0A,0x20,0x20,0x20,0x20,0x64,0x61,
+0x74,0x61,0x5F,0x66,0x69,0x6C,0x65,0x5F,0x66,0x69,0x65,0x6C,0x64,0x5F,0x73,0x74,
+0x61,0x74,0x5F,0x6C,0x6F,0x67,0x3D,0x22,0x66,0x73,0x32,0x5F,0x73,0x79,0x73,0x69,
+0x6E,0x66,0x6F,0x2E,0x6C,0x6F,0x67,0x22,0x0A,0x20,0x20,0x20,0x20,0x64,0x61,0x74,
+0x61,0x5F,0x66,0x69,0x6C,0x65,0x5F,0x69,0x6E,0x6C,0x69,0x6E,0x65,0x5F,0x6B,0x65,
+0x65,0x70,0x61,0x6C,0x69,0x76,0x65,0x5F,0x6C,0x6F,0x67,0x3D,0x22,0x67,0x64,0x65,
+0x76,0x5F,0x6B,0x65,0x65,0x70,0x6C,0x69,0x76,0x65,0x5F,0x73,0x74,0x61,0x74,0x75,
+0x73,0x2E,0x6C,0x6F,0x67,0x22,0x0A,0x0A
};
+
+
static void special_usage(void)
{
printf("\033[1;31;40m[Error]open %s error!\033[0m\n", ABBR_CFG_FILE_MAIN_ENTRY);
@@ -870,7 +1019,7 @@ void sapp_cla_override_cfg_file(void)
return;
}
-void sapp_generate_example_config(const char *cfg_file_name)
+void sapp_generate_example_config(const char *cfg_file_name, const char *sapp_version)
{
FILE *fp;
struct stat file_stat;
@@ -888,6 +1037,7 @@ void sapp_generate_example_config(const char *cfg_file_name)
return;
}
+ fprintf(fp, "# This sample configure file is generate by sapp.%s\n", sapp_version);
fwrite(sample_sapp_toml, sizeof(sample_sapp_toml), 1, fp);
fclose(fp);
@@ -1618,12 +1768,16 @@ static int config_sanity_check(void)
if(strncasecmp(tmp_str, "transparent", strlen("transparent")) == 0){
if((pconfig->packet_io.internal.interface.name[0] == '\0')
- ||(pconfig->packet_io.internal.interface.type_str[0] == '\0')){
+ || (strlen(pconfig->packet_io.internal.interface.name) <= 0)
+ ||(pconfig->packet_io.internal.interface.type_str[0] == '\0')
+ || (strlen(pconfig->packet_io.internal.interface.type_str) <= 0)){
sapp_log(30, ~0, ~0, "depolyment_mode is transparent, must set internal interface parameters!");
return -1;
}
if((pconfig->packet_io.external.interface.name[0] == '\0')
- ||(pconfig->packet_io.external.interface.type_str[0] == '\0')){
+ || (strlen(pconfig->packet_io.external.interface.name) <= 0)
+ ||(pconfig->packet_io.external.interface.type_str[0] == '\0')
+ || (strlen(pconfig->packet_io.external.interface.type_str) <= 0)){
sapp_log(30, ~0, ~0, "depolyment_mode is transparent, must set external interface parameters!");
return -1;
}
@@ -1894,8 +2048,8 @@ int sapp_parse_config(void)
tomlc99_wrap_load_string_def(ABBR_CFG_FILE_MAIN_ENTRY, (char *)"packet_io.depolyment", (char *)"mode", pconfig->packet_io.depolyment_mode_str, NAME_MAX, "mirror");
tomlc99_wrap_load_string_def(ABBR_CFG_FILE_MAIN_ENTRY, (char *)"packet_io.internal.interface", (char *)"type", pconfig->packet_io.internal.interface.type_str, NAME_MAX, "pcap");
tomlc99_wrap_load_string_def(ABBR_CFG_FILE_MAIN_ENTRY, (char *)"packet_io.internal.interface", (char *)"name", pconfig->packet_io.internal.interface.name, NAME_MAX, "lo");
- tomlc99_wrap_load_string_def(ABBR_CFG_FILE_MAIN_ENTRY, (char *)"packet_io.external.interface", (char *)"type", pconfig->packet_io.external.interface.type_str, NAME_MAX, "pcap");
- tomlc99_wrap_load_string_def(ABBR_CFG_FILE_MAIN_ENTRY, (char *)"packet_io.external.interface", (char *)"name", pconfig->packet_io.external.interface.name, NAME_MAX, "lo");
+ tomlc99_wrap_load_string_def(ABBR_CFG_FILE_MAIN_ENTRY, (char *)"packet_io.external.interface", (char *)"type", pconfig->packet_io.external.interface.type_str, NAME_MAX, "");
+ tomlc99_wrap_load_string_def(ABBR_CFG_FILE_MAIN_ENTRY, (char *)"packet_io.external.interface", (char *)"name", pconfig->packet_io.external.interface.name, NAME_MAX, "");
tomlc99_wrap_load_int_def(ABBR_CFG_FILE_MAIN_ENTRY, (char *)"packet_io.polling", (char *)"enabled", &pconfig->packet_io.polling_enabled, 1);
tomlc99_wrap_load_int_def(ABBR_CFG_FILE_MAIN_ENTRY, (char *)"packet_io.polling", (char *)"polling_priority", &pconfig->packet_io.polling_priority, 100);
@@ -2046,8 +2200,9 @@ int sapp_parse_config(void)
}
/*
- 1: ʶ�𲢴洢�����ļ��е�key-value;
0: ����ʶ�����ļ��е�key-value;
+ 1: ʶ�𲢴洢�����ļ��е�key-value;
+ 2: ����ijЩ�Ѿ��������IJ���.
*/
static int sapp_config_check_update_option(sapp_config_check_t *local_cfg_check_attr, const char *section, const char *key, const char *value)
{
@@ -2063,12 +2218,17 @@ static int sapp_config_check_update_option(sapp_config_check_t *local_cfg_check_
key_max_len = SAPP_MAX(strlen(local_cfg_check_attr[i].cfg_key), strlen(key));
if((strncmp(section, local_cfg_check_attr[i].section, section_max_len) == 0)
&& (strncmp(key, local_cfg_check_attr[i].cfg_key, key_max_len) == 0)){
- if(NULL == value){
- local_cfg_check_attr[i].cfg_value = sapp_strdup(""); /* û�����������ֵ, ����key�Ǵ��ڵ�, Ҳ�������ҵ��� */
+ if(SAPP_CFG_OBSOLETE_FLAG == local_cfg_check_attr[i].global_id){
+ sapp_printf_colorful(RLOG_LV_INFO, "config: [%s] -> %s is obsolete!\n", section, key);
+ return 2;
}else{
- local_cfg_check_attr[i].cfg_value = sapp_strdup(value);
+ if(NULL == value){
+ local_cfg_check_attr[i].cfg_value = sapp_strdup(""); /* û�����������ֵ, ����bpf��������Ϊ��, ����key�Ǵ��ڵ�, Ҳ�������ҵ��� */
+ }else{
+ local_cfg_check_attr[i].cfg_value = sapp_strdup(value);
+ }
+ found_cfg = 1;
}
- found_cfg = 1;
break;
}
}
@@ -2080,6 +2240,33 @@ extern void del_last_rn(char *data, int max_len);
extern int sapp_del_last_char(char *data, int max_len, char del_char);
extern char *sapp_memmove_for_blank_table(char *data, int max_len);
+
+/*
+ �Ƿ���Ҫ��鵱ǰ���õĺϷ���.
+*/
+static int cfg_value_need_be_check(const sapp_config_check_t *local_cfg_check_array, const sapp_config_check_t *this_cfg_check_attr)
+{
+ int depend_cfg_index;
+
+ if(1 == this_cfg_check_attr->depend_id){
+ return 1;
+ }
+ if(0 == this_cfg_check_attr->depend_id){ /* ��ѡ������Ҳ��� */
+ return 1;
+ }
+
+ if(this_cfg_check_attr->depend_id >= 1000){
+ depend_cfg_index = cfg_get_index_by_depend_id(this_cfg_check_attr->depend_id);
+
+ if((local_cfg_check_array[depend_cfg_index].cfg_value != NULL)
+ && (strncasecmp(local_cfg_check_array[depend_cfg_index].cfg_value, this_cfg_check_attr->depend_cfg_value, strlen(this_cfg_check_attr->depend_cfg_value)) == 0)){
+ return 1;
+ }
+ }
+
+ return 0;
+}
+
/*
��ȫ����һ�鵱ǰ��sapp.toml, ����Ƿ��в���ʶ������, �����˵��:
1)sapp��sapp.toml�İ汾��;
@@ -2102,8 +2289,8 @@ static int sapp_config_check_unsupport(sapp_config_check_t *local_cfg_check_attr
fp = fopen(ABBR_CFG_FILE_MAIN_ENTRY, "r");
if(NULL == fp){
- printf("can't open file:%s\n", ABBR_CFG_FILE_MAIN_ENTRY);
- return -1;
+ sapp_printf_colorful(RLOG_LV_FATAL, "can't open file:%s\n", ABBR_CFG_FILE_MAIN_ENTRY);
+ return RLOG_LV_FATAL;
}
while(fgets(raw_config_line, sizeof(raw_config_line), fp) != NULL){
@@ -2118,7 +2305,7 @@ static int sapp_config_check_unsupport(sapp_config_check_t *local_cfg_check_attr
}
memcpy(config_line, raw_config_line, sizeof(raw_config_line));
- if('[' == raw_config_line[0]){
+ if('[' == raw_config_line[0]){ /* ��[��ͷ��ʾ��section���俪ʼ */
char *pure_sesion_str = strtok_r(config_line, section_delim, &section_save_ptr);
strcpy(section_string, pure_sesion_str);
while(strtok_r(NULL, section_delim, &section_save_ptr));
@@ -2127,7 +2314,7 @@ static int sapp_config_check_unsupport(sapp_config_check_t *local_cfg_check_attr
cfg_key = strtok_r(config_line, key_delim, &key_save_ptr);
if(NULL == cfg_key){
- printf("invalid config line:%s\n", config_line);
+ sapp_printf_colorful(RLOG_LV_FATAL, "invalid config line:%s\n", config_line);
continue;
}
sapp_del_last_char(cfg_key, strlen(cfg_key), ' ');
@@ -2135,7 +2322,7 @@ static int sapp_config_check_unsupport(sapp_config_check_t *local_cfg_check_attr
cfg_value = strtok_r(NULL, key_delim, &key_save_ptr);
if(NULL == cfg_value){
- printf("invalid config line:%s\n", config_line);
+ sapp_printf_colorful(RLOG_LV_FATAL, "invalid config line:%s\n", config_line);
continue;
}
@@ -2146,8 +2333,10 @@ static int sapp_config_check_unsupport(sapp_config_check_t *local_cfg_check_attr
char *pure_cfg_value = strtok_r(cfg_value, key_value_delim, &pure_cfg_value_save_ptr);
ret = sapp_config_check_update_option(local_cfg_check_attr, section_string, cfg_key, pure_cfg_value);
if(ret <= 0){
- printf("\033[1;31;40mnot support config: [%s] -> %s\033[0m\n", section_string, raw_config_line);
- fun_ret = -1;
+ sapp_printf_colorful(RLOG_LV_FATAL, "unsupport config: [%s] -> %s\n", section_string, raw_config_line);
+ fun_ret = SAPP_MAX(fun_ret, RLOG_LV_FATAL);
+ }else if(2 == ret){
+ fun_ret = SAPP_MAX(fun_ret, RLOG_LV_INFO);
}
while(strtok_r(NULL, key_delim, &key_save_ptr));
@@ -2162,23 +2351,42 @@ static int sapp_config_check_unsupport(sapp_config_check_t *local_cfg_check_attr
*/
static int sapp_config_check_missing(sapp_config_check_t *local_cfg_check_attr)
{
- int ret, i;
+ int ret1, ret2, ret3, i;
char cfg_value[1024];
int array_num, cfg_array[1024];
int fun_ret = 0;
for(i = 0; local_cfg_check_attr[i].global_id != -1; i++){
- if(NULL == local_cfg_check_attr[i].cfg_key){ /* [PACKET_IO], []DUPLICATE_PKT] ������ֻ�и�section, ����û��key */
+ if(NULL == local_cfg_check_attr[i].cfg_key){ /* [PACKET_IO], []DUPLICATE_PKT] ������ֻ�и�section, ����Ϊ�����ʶ, ����û��key */
continue;
}
- ret = MESA_load_profile_string_nodef(ABBR_CFG_FILE_MAIN_ENTRY, g_sapp_cfg_check_attr[i].section, g_sapp_cfg_check_attr[i].cfg_key, cfg_value, sizeof(cfg_value));
- if(ret < 0){
+ if(SAPP_CFG_OBSOLETE_FLAG == local_cfg_check_attr[i].global_id){ /* �Ѿ�����������, �����ڼ��missing */
+ continue;
+ }
+ if(cfg_value_need_be_check(local_cfg_check_attr, &local_cfg_check_attr[i]) == 0){
+ continue;
+ }
+ ret1 = MESA_load_profile_string_nodef(ABBR_CFG_FILE_MAIN_ENTRY, local_cfg_check_attr[i].section, local_cfg_check_attr[i].cfg_key, cfg_value, sizeof(cfg_value));
+ if(ret1 < 0){
/* ��profile�ӿڶ�ȡ�����п�����toml��ʽ������, ����toml���鳢�Խ���һ�� */
array_num = 1024;
- ret = tomlc99_wrap_load_int_array(ABBR_CFG_FILE_MAIN_ENTRY, g_sapp_cfg_check_attr[i].section, (char *)g_sapp_cfg_check_attr[i].cfg_key, cfg_array, &array_num);
- if(ret < 0){
- printf("\033[1;31;40mmissing sapp.toml config: [%s] -> %s\033[0m\n", g_sapp_cfg_check_attr[i].section, g_sapp_cfg_check_attr[i].cfg_key);
- fun_ret = -1;
+ ret2 = tomlc99_wrap_load_int_array(ABBR_CFG_FILE_MAIN_ENTRY, local_cfg_check_attr[i].section, (char *)local_cfg_check_attr[i].cfg_key, cfg_array, &array_num);
+ if(ret2 < 0){
+ /* ʹ��toml����Ҳû�ж�ȡ������, ����Ƿ��������������� */
+ if((local_cfg_check_attr[i].depend_id != 0) && (local_cfg_check_attr[i].cfg_value_check_fun != NULL)){
+ ret3 = local_cfg_check_attr[i].cfg_value_check_fun(local_cfg_check_attr, local_cfg_check_attr[i].global_id, local_cfg_check_attr[i].depend_id,
+ local_cfg_check_attr[i].cfg_value, local_cfg_check_attr[i].expect_range_array, local_cfg_check_attr[i].expect_array_num);
+ if(ret3 != 0){
+ fun_ret = SAPP_MAX(local_cfg_check_attr[i].err_log_level, fun_ret);
+ sapp_printf_colorful(fun_ret, "missing sapp.toml config: [%s] -> %s\n", local_cfg_check_attr[i].section, local_cfg_check_attr[i].cfg_key);
+ /* ע��: �˴���Ҫbreak, ������е������ļ����� */
+ }
+ }else{
+ fun_ret = SAPP_MAX(local_cfg_check_attr[i].err_log_level, fun_ret);
+ sapp_printf_colorful(fun_ret, "missing sapp.toml config: [%s] -> %s\n", local_cfg_check_attr[i].section, local_cfg_check_attr[i].cfg_key);
+
+ /* ע��: �˴���Ҫbreak, ������е������ļ����� */
+ }
}
}
}
@@ -2191,19 +2399,20 @@ static int sapp_config_check_missing_and_unsupport(sapp_config_check_t *local_cf
{
int ret;
+ /* ע��: check_unsupport����ǰ��, ��Ϊ���и���������, ���ǰ��������õ�ֵ��ȡ��ȫ�ֱ���: g_sapp_cfg_check_attr ��*/
ret = sapp_config_check_unsupport(local_cfg_check_attr);
- if(ret < 0){
- printf("\033[1;31;40mmaybe a typo, maybe some config is obsolete, or sapp is older than sapp.toml version!\033[0m\n");
- return -1;
+ if(ret != 0){
+ sapp_printf_colorful(ret, "maybe a typo, maybe some config is obsolete, or sapp is older than sapp.toml version!\n");
+ return ret;
}
ret = sapp_config_check_missing(local_cfg_check_attr);
- if(ret < 0){
- printf("\033[1;31;40mmaybe a typo, or sapp is newer than sapp.toml version!\033[0m\n");
- return -1;
+ if(ret != 0){
+ sapp_printf_colorful(ret, "maybe a typo, or sapp is newer than sapp.toml version!\n");
+ return ret;
}
- return 0;
+ return ret;
}
/*
@@ -2211,22 +2420,27 @@ static int sapp_config_check_missing_and_unsupport(sapp_config_check_t *local_cf
*/
static int sapp_config_check_single_validity(sapp_config_check_t *local_cfg_check_attr)
{
- int i, ret;
+ int i, ret, fun_ret = 0;
for(i = 0; local_cfg_check_attr[i].global_id != -1; i++){
+ if(cfg_value_need_be_check(local_cfg_check_attr, &local_cfg_check_attr[i]) == 0){
+ continue;
+ }
+
if(local_cfg_check_attr[i].cfg_value_check_fun != NULL){
ret = local_cfg_check_attr[i].cfg_value_check_fun(local_cfg_check_attr, local_cfg_check_attr[i].global_id,
local_cfg_check_attr[i].depend_id, local_cfg_check_attr[i].cfg_value,
local_cfg_check_attr[i].expect_range_array, local_cfg_check_attr[i].expect_array_num);
- if(ret < 0){
- printf("\033[1;31;40mcheck config: [%s]->%s error, invalid value:'%s'\033[0m\n",
+ if(ret != 0){
+ fun_ret = SAPP_MAX(fun_ret, local_cfg_check_attr[i].err_log_level);
+ sapp_printf_colorful(fun_ret, "check config: [%s]->%s error, invalid value:'%s'\n",
local_cfg_check_attr[i].section, local_cfg_check_attr[i].cfg_key, local_cfg_check_attr[i].cfg_value);
- return -1;
+ return fun_ret;
}
}
}
- return 0;
+ return fun_ret;
}
/*
@@ -2250,10 +2464,11 @@ static int sapp_config_check_sanity(sapp_config_check_t *local_cfg_check_attr)
t2: ���ÿ��������ֵ�Ƿ�Ϸ�, ����packet_io.mode ����mirror, inline, tansparent��;
t3: ������鵥������, �����ܵļ�����в������������������, ����transparentģʽû������external����;
*/
-int sapp_config_check(int check_level)
+int sapp_config_check(void)
{
- int i, ret = -1;
+ int i, ret1, ret2, ret3, final_ret = 0;
+ /* ȫ�ֱ������й̶����������, Ҳ�ж�̬�������ļ���ȡ������, ���Դ˴�copyһ����ʱ���� */
sapp_config_check_t *local_cfg_check_attr = (sapp_config_check_t *)malloc(sizeof(g_sapp_cfg_check_attr));
memcpy(local_cfg_check_attr, g_sapp_cfg_check_attr, sizeof(g_sapp_cfg_check_attr));
@@ -2261,37 +2476,32 @@ int sapp_config_check(int check_level)
g_interger_range_array[i] = i;
}
- if(1 == check_level){
- ret = sapp_config_check_missing_and_unsupport(local_cfg_check_attr);
- }else if(2 == check_level){
- ret = sapp_config_check_missing_and_unsupport(local_cfg_check_attr);
- if(ret < 0){
- goto done;
- }
- ret = sapp_config_check_single_validity(local_cfg_check_attr);
- }else if(3 == check_level){
- ret = sapp_config_check_missing_and_unsupport(local_cfg_check_attr);
- if(ret < 0){
- goto done;
- }
- ret = sapp_config_check_single_validity(local_cfg_check_attr);
- if(ret < 0){
- goto done;
- }
- ret = sapp_config_check_sanity(local_cfg_check_attr);
+ ret1 = sapp_config_check_missing_and_unsupport(local_cfg_check_attr);
+ if(ret1 != 0){
+ final_ret = SAPP_MAX(ret1, final_ret);
+ goto done;
}
+ ret2 = sapp_config_check_single_validity(local_cfg_check_attr);
+ if(ret2 != 0){
+ final_ret = SAPP_MAX(ret2, final_ret);
+ goto done;
+ }
+
+ ret3 = sapp_config_check_sanity(local_cfg_check_attr);
+ final_ret = SAPP_MAX(ret2, final_ret);
done:
- if(ret < 0){
- printf("\033[1;31;40msapp config check fail!\033[0m\n");
+ if(final_ret != 0){
+ //printf("\033[1;31;40msapp config check fail!\033[0m\n");
+ sapp_printf_colorful(final_ret, "You should use './sapp -e filename' to generate the latest sample configuration file.\n");
}else{
printf("\033[32msapp config check success!\033[0m\n");
}
free(local_cfg_check_attr);
- return ret;
+ return final_ret;
}
/* init breakpad_mini */
diff --git a/src/dealpkt/deal_udp.c b/src/dealpkt/deal_udp.c
index fd024a9..2b45215 100644
--- a/src/dealpkt/deal_udp.c
+++ b/src/dealpkt/deal_udp.c
@@ -557,16 +557,16 @@ int dealipv4udppkt(struct streamindex *pindex, const struct mesa_ip4_hdr * this_
if(0 == is_overlay_udp_layer){ /* ��overlay����ۼ���ز���� */
local_sys_stat->count[SAPP_STAT_RCV_UDP]++;
- local_sys_stat->length[SAPP_STAT_RCV_UDP]+=ulen;
+ local_sys_stat->length[SAPP_STAT_RCV_UDP]+=datalen;
if (routedir == sapp_global_val->config.packet_io.inbound_route_dir)
{
local_sys_stat->count[SAPP_STAT_UDP_INBOUND]++;
- local_sys_stat->length[SAPP_STAT_UDP_INBOUND] += ulen;
+ local_sys_stat->length[SAPP_STAT_UDP_INBOUND] += datalen;
}
else
{
local_sys_stat->count[SAPP_STAT_UDP_OUTBOUND]++;
- local_sys_stat->length[SAPP_STAT_UDP_OUTBOUND] += ulen;
+ local_sys_stat->length[SAPP_STAT_UDP_OUTBOUND] += datalen;
}
}
diff --git a/src/inner_plug/l2tp_protocol_plug.c b/src/inner_plug/l2tp_protocol_plug.c
index f6d8a38..0fa3124 100644
--- a/src/inner_plug/l2tp_protocol_plug.c
+++ b/src/inner_plug/l2tp_protocol_plug.c
@@ -242,7 +242,6 @@ char l2tp_protocol_entry(const struct streaminfo *a_udp, void **pme, int thread
int pro_plug_ret = APP_STATE_GIVEME;
const struct mesa_udp_hdr *udph;
const struct mesa_ip4_hdr *ip4hdr = (const struct mesa_ip4_hdr *)ip_hdr;
- udph = (const struct mesa_udp_hdr *)((char *)ip_hdr + ip4hdr->ip_hl * 4);
switch(a_udp->opstate){
case OP_STATE_PENDING:
@@ -256,6 +255,7 @@ char l2tp_protocol_entry(const struct streaminfo *a_udp, void **pme, int thread
l2tp_pri = (struct l2tp_info_pri *)dictator_malloc(thread_seq, sizeof(struct l2tp_info_pri));
l2tp_context_init(l2tp_pri, thread_seq, a_udp);
*pme = l2tp_pri;
+ udph = (const struct mesa_udp_hdr *)((char *)ip_hdr + ip4hdr->ip_hl * 4);
pro_plug_ret = l2tp_process(a_udp, l2tp_pri, ip_hdr, udph);
}
break;
@@ -263,6 +263,7 @@ char l2tp_protocol_entry(const struct streaminfo *a_udp, void **pme, int thread
case OP_STATE_DATA:
l2tp_pri = (struct l2tp_info_pri *)(*pme);
l2tp_pri->ssinfo.session_state = SESSION_STATE_DATA;
+ udph = (const struct mesa_udp_hdr *)((char *)ip_hdr + ip4hdr->ip_hl * 4);
pro_plug_ret = l2tp_process(a_udp, l2tp_pri, ip_hdr, udph);
break;