From 9f95dda44da9f7f5a3fc2c7a11500409189a0eba Mon Sep 17 00:00:00 2001 From: jianwen612 <55008549+jianwen612@users.noreply.github.com> Date: Fri, 14 Aug 2020 13:01:31 -0500 Subject: [PATCH] [fuzz]added an input check in writefilter fuzzer and added test cases (#12628) Added a handle for nullptr in HeaderPercentageProvider::percentage to avoid crash in mongo_proxy. Added many unit test cases into corpus so that the coverage can be improved. All those filters' coverage was increased by 20%-40%. Signed-off-by: jianwen --- .../filters/common/fault/fault_config.cc | 4 + .../dubbo_proxy_ondata_msg_split | 24 ++++ .../dubbo_proxy_ondata_twoway | 19 +++ .../dubbo_proxy_protocol_routing | 25 ++++ .../dubbo_proxy_protocol_routing_failure | 25 ++++ .../kafka_process_msg | 21 +++ .../network_readfilter_corpus/kafka_request1 | 17 +++ .../kafka_unknown_request | 21 +++ .../redis_proxy_1_auth_no_pwd_set | 24 ++++ .../redis_proxy_1_auth_pwd_set | 24 ++++ .../redis_proxy_1_bulk_string | 24 ++++ .../redis_proxy_1_negative_large_integer | 24 ++++ .../redis_proxy_1_nested_array | 24 ++++ .../redis_proxy_1_null | 24 ++++ .../rocketmq_proxy_end_stream | 22 +++ .../rocketmq_proxy_invalid_header | 15 +++ .../rocketmq_proxy_on_ack_msg | 15 +++ .../rocketmq_proxy_on_get_topic_route | 15 +++ .../rocketmq_proxy_on_heartbeat | 15 +++ .../rocketmq_proxy_on_pop_msg | 15 +++ .../rocketmq_proxy_sendmsg | 15 +++ .../rocketmq_proxy_sendmsg2 | 15 +++ .../rocketmq_proxy_unregistered_client | 16 +++ .../network_readfilter_corpus/thrift_proxy_1 | 13 ++ .../thrift_proxy_app_exception | 25 ++++ .../thrift_proxy_garbage_request | 25 ++++ .../thrift_proxy_invalid_msg_type | 25 ++++ .../thrift_proxy_on_data_handles_oneway | 20 +++ .../thrift_proxy_on_data_handles_thriftcall | 20 +++ .../thrift_proxy_pipelined_request1 | 20 +++ .../thrift_proxy_protocol_error | 25 ++++ .../thrift_proxy_router_test | 26 ++++ .../thrift_proxy_stop_and_resume | 25 ++++ .../zookeeper_proxy_auth | 17 +++ .../zookeeper_proxy_connect | 17 +++ .../zookeeper_proxy_multirequest | 17 +++ .../zookeeper_proxy_request_container | 17 +++ .../zookeeper_proxy_request_ephemeral | 17 +++ .../zookeeper_proxy_request_persistent | 17 +++ ...xy_request_persistent_ephemeral_sequential | 17 +++ ...keeper_proxy_request_persistent_sequential | 17 +++ .../zookeeper_proxy_request_ttl | 17 +++ .../zookeeper_proxy_request_ttl_sequential | 17 +++ .../zookeeper_proxy_watch_request | 17 +++ .../kafka_broker_process_response | 18 +++ .../kafka_broker_response1 | 18 +++ .../kafka_broker_unknown_response | 18 +++ .../mongodb_proxy_response | 55 ++++++++ .../mysql_proxy_msg_split | 125 ++++++++++++++++++ .../zookeeper_proxy_auth | 17 +++ .../zookeeper_proxy_connect | 17 +++ .../zookeeper_proxy_ping | 17 +++ .../zookeeper_proxy_watch_control | 17 +++ .../zookeeper_proxy_watch_event | 17 +++ 54 files changed, 1173 insertions(+) create mode 100644 test/extensions/filters/network/common/fuzz/network_readfilter_corpus/dubbo_proxy_ondata_msg_split create mode 100644 test/extensions/filters/network/common/fuzz/network_readfilter_corpus/dubbo_proxy_ondata_twoway create mode 100644 test/extensions/filters/network/common/fuzz/network_readfilter_corpus/dubbo_proxy_protocol_routing create mode 100644 test/extensions/filters/network/common/fuzz/network_readfilter_corpus/dubbo_proxy_protocol_routing_failure create mode 100644 test/extensions/filters/network/common/fuzz/network_readfilter_corpus/kafka_process_msg create mode 100644 test/extensions/filters/network/common/fuzz/network_readfilter_corpus/kafka_request1 create mode 100644 test/extensions/filters/network/common/fuzz/network_readfilter_corpus/kafka_unknown_request create mode 100644 test/extensions/filters/network/common/fuzz/network_readfilter_corpus/redis_proxy_1_auth_no_pwd_set create mode 100644 test/extensions/filters/network/common/fuzz/network_readfilter_corpus/redis_proxy_1_auth_pwd_set create mode 100644 test/extensions/filters/network/common/fuzz/network_readfilter_corpus/redis_proxy_1_bulk_string create mode 100644 test/extensions/filters/network/common/fuzz/network_readfilter_corpus/redis_proxy_1_negative_large_integer create mode 100644 test/extensions/filters/network/common/fuzz/network_readfilter_corpus/redis_proxy_1_nested_array create mode 100644 test/extensions/filters/network/common/fuzz/network_readfilter_corpus/redis_proxy_1_null create mode 100644 test/extensions/filters/network/common/fuzz/network_readfilter_corpus/rocketmq_proxy_end_stream create mode 100644 test/extensions/filters/network/common/fuzz/network_readfilter_corpus/rocketmq_proxy_invalid_header create mode 100644 test/extensions/filters/network/common/fuzz/network_readfilter_corpus/rocketmq_proxy_on_ack_msg create mode 100644 test/extensions/filters/network/common/fuzz/network_readfilter_corpus/rocketmq_proxy_on_get_topic_route create mode 100644 test/extensions/filters/network/common/fuzz/network_readfilter_corpus/rocketmq_proxy_on_heartbeat create mode 100644 test/extensions/filters/network/common/fuzz/network_readfilter_corpus/rocketmq_proxy_on_pop_msg create mode 100644 test/extensions/filters/network/common/fuzz/network_readfilter_corpus/rocketmq_proxy_sendmsg create mode 100644 test/extensions/filters/network/common/fuzz/network_readfilter_corpus/rocketmq_proxy_sendmsg2 create mode 100644 test/extensions/filters/network/common/fuzz/network_readfilter_corpus/rocketmq_proxy_unregistered_client create mode 100644 test/extensions/filters/network/common/fuzz/network_readfilter_corpus/thrift_proxy_app_exception create mode 100644 test/extensions/filters/network/common/fuzz/network_readfilter_corpus/thrift_proxy_garbage_request create mode 100644 test/extensions/filters/network/common/fuzz/network_readfilter_corpus/thrift_proxy_invalid_msg_type create mode 100644 test/extensions/filters/network/common/fuzz/network_readfilter_corpus/thrift_proxy_on_data_handles_oneway create mode 100644 test/extensions/filters/network/common/fuzz/network_readfilter_corpus/thrift_proxy_on_data_handles_thriftcall create mode 100644 test/extensions/filters/network/common/fuzz/network_readfilter_corpus/thrift_proxy_pipelined_request1 create mode 100644 test/extensions/filters/network/common/fuzz/network_readfilter_corpus/thrift_proxy_protocol_error create mode 100644 test/extensions/filters/network/common/fuzz/network_readfilter_corpus/thrift_proxy_router_test create mode 100644 test/extensions/filters/network/common/fuzz/network_readfilter_corpus/thrift_proxy_stop_and_resume create mode 100644 test/extensions/filters/network/common/fuzz/network_readfilter_corpus/zookeeper_proxy_auth create mode 100644 test/extensions/filters/network/common/fuzz/network_readfilter_corpus/zookeeper_proxy_connect create mode 100644 test/extensions/filters/network/common/fuzz/network_readfilter_corpus/zookeeper_proxy_multirequest create mode 100644 test/extensions/filters/network/common/fuzz/network_readfilter_corpus/zookeeper_proxy_request_container create mode 100644 test/extensions/filters/network/common/fuzz/network_readfilter_corpus/zookeeper_proxy_request_ephemeral create mode 100644 test/extensions/filters/network/common/fuzz/network_readfilter_corpus/zookeeper_proxy_request_persistent create mode 100644 test/extensions/filters/network/common/fuzz/network_readfilter_corpus/zookeeper_proxy_request_persistent_ephemeral_sequential create mode 100644 test/extensions/filters/network/common/fuzz/network_readfilter_corpus/zookeeper_proxy_request_persistent_sequential create mode 100644 test/extensions/filters/network/common/fuzz/network_readfilter_corpus/zookeeper_proxy_request_ttl create mode 100644 test/extensions/filters/network/common/fuzz/network_readfilter_corpus/zookeeper_proxy_request_ttl_sequential create mode 100644 test/extensions/filters/network/common/fuzz/network_readfilter_corpus/zookeeper_proxy_watch_request create mode 100644 test/extensions/filters/network/common/fuzz/network_writefilter_corpus/kafka_broker_process_response create mode 100644 test/extensions/filters/network/common/fuzz/network_writefilter_corpus/kafka_broker_response1 create mode 100644 test/extensions/filters/network/common/fuzz/network_writefilter_corpus/kafka_broker_unknown_response create mode 100644 test/extensions/filters/network/common/fuzz/network_writefilter_corpus/mongodb_proxy_response create mode 100644 test/extensions/filters/network/common/fuzz/network_writefilter_corpus/mysql_proxy_msg_split create mode 100644 test/extensions/filters/network/common/fuzz/network_writefilter_corpus/zookeeper_proxy_auth create mode 100644 test/extensions/filters/network/common/fuzz/network_writefilter_corpus/zookeeper_proxy_connect create mode 100644 test/extensions/filters/network/common/fuzz/network_writefilter_corpus/zookeeper_proxy_ping create mode 100644 test/extensions/filters/network/common/fuzz/network_writefilter_corpus/zookeeper_proxy_watch_control create mode 100644 test/extensions/filters/network/common/fuzz/network_writefilter_corpus/zookeeper_proxy_watch_event diff --git a/source/extensions/filters/common/fault/fault_config.cc b/source/extensions/filters/common/fault/fault_config.cc index ebbb86e2fd95..4053cc0b9006 100644 --- a/source/extensions/filters/common/fault/fault_config.cc +++ b/source/extensions/filters/common/fault/fault_config.cc @@ -13,6 +13,10 @@ namespace Fault { envoy::type::v3::FractionalPercent HeaderPercentageProvider::percentage(const Http::RequestHeaderMap* request_headers) const { + if (request_headers == nullptr) { + // If request_headers is nullptr, return the default percentage. + return percentage_; + } const auto header = request_headers->get(header_name_); if (header == nullptr) { return percentage_; diff --git a/test/extensions/filters/network/common/fuzz/network_readfilter_corpus/dubbo_proxy_ondata_msg_split b/test/extensions/filters/network/common/fuzz/network_readfilter_corpus/dubbo_proxy_ondata_msg_split new file mode 100644 index 000000000000..8560efc08450 --- /dev/null +++ b/test/extensions/filters/network/common/fuzz/network_readfilter_corpus/dubbo_proxy_ondata_msg_split @@ -0,0 +1,24 @@ +config { + name: "envoy.filters.network.dubbo_proxy" + typed_config { + type_url: "type.googleapis.com/envoy.extensions.filters.network.dubbo_proxy.v3.DubboProxy" + value: "\xa\x4\x74\x65\x73\x74" + } +} +actions { + on_new_connection { + } +} + +actions { + on_data { + data: "\xda\xbb\xc2\x0\x0\x0\x0\x0\x0\x0\x0\xf\x0\x0\x0\x16\x5\x32\x2e\x30\x2e\x32" + } +} + +actions { + on_data { + data: "\x4\x74\x65\x73\x74\x5\x30\x2e\x30\x2e\x30\x4\x74\x65\x73\x74" + } +} + diff --git a/test/extensions/filters/network/common/fuzz/network_readfilter_corpus/dubbo_proxy_ondata_twoway b/test/extensions/filters/network/common/fuzz/network_readfilter_corpus/dubbo_proxy_ondata_twoway new file mode 100644 index 000000000000..c61d2e7b6b03 --- /dev/null +++ b/test/extensions/filters/network/common/fuzz/network_readfilter_corpus/dubbo_proxy_ondata_twoway @@ -0,0 +1,19 @@ +config { + name: "envoy.filters.network.dubbo_proxy" + typed_config { + type_url: "type.googleapis.com/envoy.extensions.filters.network.dubbo_proxy.v3.DubboProxy" + value: "\xa\x4\x74\x65\x73\x74" + } +} +actions { + on_new_connection { + } +} + +actions { + on_data { + data: "\xda\xbb\xc2\x0\x0\x0\x0\x0\x0\x0\x0\xf\x0\x0\x0\x16\x5\x32\x2e\x30\x2e\x32\x4\x74\x65\x73\x74\x5\x30\x2e\x30\x2e\x30\x4\x74\x65\x73\x74" + } +} + + diff --git a/test/extensions/filters/network/common/fuzz/network_readfilter_corpus/dubbo_proxy_protocol_routing b/test/extensions/filters/network/common/fuzz/network_readfilter_corpus/dubbo_proxy_protocol_routing new file mode 100644 index 000000000000..bdffc0bf17cb --- /dev/null +++ b/test/extensions/filters/network/common/fuzz/network_readfilter_corpus/dubbo_proxy_protocol_routing @@ -0,0 +1,25 @@ +config { + name: "envoy.filters.network.dubbo_proxy" + typed_config { + type_url: "type.googleapis.com/envoy.extensions.filters.network.dubbo_proxy.v3.DubboProxy" + value: "\xa\x4\x74\x65\x73\x74\x22\x5a\xa\x5\x74\x65\x73\x74\x31\x12\x21\x6f\x72\x67\x2e\x61\x70\x61\x63\x68\x65\x2e\x64\x75\x62\x62\x6f\x2e\x64\x65\x6d\x6f\x2e\x44\x65\x6d\x6f\x53\x65\x72\x76\x69\x63\x65\x2a\x2e\xa\xf\xa\xd\xa\xb\x2a\x9\xa\x0\x12\x5\x28\x2e\x2a\x3f\x29\x12\x1b\xa\x19\x75\x73\x65\x72\x5f\x73\x65\x72\x76\x69\x63\x65\x5f\x64\x75\x62\x62\x6f\x5f\x73\x65\x72\x76\x65\x72" + } +} +actions { + on_new_connection { + } +} + +actions { + on_data { + data: "\xda\xbb\xc2\x0\x0\x0\x0\x0\x0\x0\x0\x64\x0\x0\x0\x16\x5\x32\x2e\x30\x2e\x32\x4\x74\x65\x73\x74\x5\x30\x2e\x30\x2e\x30\x4\x74\x65\x73\x74" + } +} + +actions { + on_data { + data: "" + end_stream: true + } +} + diff --git a/test/extensions/filters/network/common/fuzz/network_readfilter_corpus/dubbo_proxy_protocol_routing_failure b/test/extensions/filters/network/common/fuzz/network_readfilter_corpus/dubbo_proxy_protocol_routing_failure new file mode 100644 index 000000000000..8aedaa5377e3 --- /dev/null +++ b/test/extensions/filters/network/common/fuzz/network_readfilter_corpus/dubbo_proxy_protocol_routing_failure @@ -0,0 +1,25 @@ +config { + name: "envoy.filters.network.dubbo_proxy" + typed_config { + type_url: "type.googleapis.com/envoy.extensions.filters.network.dubbo_proxy.v3.DubboProxy" + value: "\xa\x4\x74\x65\x73\x74" + } +} +actions { + on_new_connection { + } +} + +actions { + on_data { + data: "\xda\xbb\xc2\x0\x0\x0\x0\x0\x0\x0\x0\xf\x0\x0\x0\x16\x5\x32\x2e\x30\x2e\x32" + } +} + +actions { + on_data { + data: "" + end_stream: true + } +} + diff --git a/test/extensions/filters/network/common/fuzz/network_readfilter_corpus/kafka_process_msg b/test/extensions/filters/network/common/fuzz/network_readfilter_corpus/kafka_process_msg new file mode 100644 index 000000000000..9c73c6e8c623 --- /dev/null +++ b/test/extensions/filters/network/common/fuzz/network_readfilter_corpus/kafka_process_msg @@ -0,0 +1,21 @@ +config { + name: "envoy.filters.network.kafka_broker" + typed_config { + type_url: "type.googleapis.com/envoy.extensions.filters.network.kafka_broker.v3.KafkaBroker" + value: "\n\"envoy.filters.network.kafka_broker" + } +} +actions { + on_new_connection { + } +} +actions { + on_data { + data:"\x0\x0\x0\x2e\x0\x0\x0\x0\x0\x0\x0\x0\x0\x2\x69\x64\x0\x10\x0\x0\x0\x20\x0\x0\x0\x1\x0\x6\x73\x74\x72\x69\x6e\x67\x0\x0\x0\x1\x0\x0\x0\x20\x0\x0\x0\x4\x0\x1\x2\x3\x0\x0\x0\x2e\x0\x0\x0\x1\x0\x0\x0\x1\x0\x2\x69\x64\x0\x10\x0\x0\x0\x20\x0\x0\x0\x1\x0\x6\x73\x74\x72\x69\x6e\x67\x0\x0\x0\x1\x0\x0\x0\x20\x0\x0\x0\x4\x0\x1\x2\x3\x0\x0\x0\x2e\x0\x0\x0\x2\x0\x0\x0\x2\x0\x2\x69\x64\x0\x10\x0\x0\x0\x20\x0\x0\x0\x1\x0\x6\x73\x74\x72\x69\x6e\x67\x0\x0\x0\x1\x0\x0\x0\x20\x0\x0\x0\x4\x0\x1\x2\x3\x0\x0\x0\x36\x0\x0\x0\x3\x0\x0\x0\x3\x0\x2\x69\x64\x0\x6\x73\x74\x72\x69\x6e\x67\x0\x10\x0\x0\x0\x20\x0\x0\x0\x1\x0\x6\x73\x74\x72\x69\x6e\x67\x0\x0\x0\x1\x0\x0\x0\x20\x0\x0\x0\x4\x0\x1\x2\x3\x0\x0\x0\x36\x0\x0\x0\x4\x0\x0\x0\x4\x0\x2\x69\x64\x0\x6\x73\x74\x72\x69\x6e\x67\x0\x10\x0\x0\x0\x20\x0\x0\x0\x1\x0\x6\x73\x74\x72\x69\x6e\x67\x0\x0\x0\x1\x0\x0\x0\x20\x0\x0\x0\x4\x0\x1\x2\x3\x0\x0\x0\x36\x0\x0\x0\x5\x0\x0\x0\x5\x0\x2\x69\x64\x0\x6\x73\x74\x72\x69\x6e\x67\x0\x10\x0\x0\x0\x20\x0\x0\x0\x1\x0\x6\x73\x74\x72\x69\x6e\x67\x0\x0\x0\x1\x0\x0\x0\x20\x0\x0\x0\x4\x0\x1\x2\x3\x0\x0\x0\x36\x0\x0\x0\x6\x0\x0\x0\x6\x0\x2\x69\x64\x0\x6\x73\x74\x72\x69\x6e\x67\x0\x10\x0\x0\x0\x20\x0\x0\x0\x1\x0\x6\x73\x74\x72\x69\x6e\x67\x0\x0\x0\x1\x0\x0\x0\x20\x0\x0\x0\x4\x0\x1\x2\x3\x0\x0\x0\x36\x0\x0\x0\x7\x0\x0\x0\x7\x0\x2\x69\x64\x0\x6\x73\x74\x72\x69\x6e\x67\x0\x10\x0\x0\x0\x20\x0\x0\x0\x1\x0\x6\x73\x74\x72\x69\x6e\x67\x0\x0\x0\x1\x0\x0\x0\x20\x0\x0\x0\x4\x0\x1\x2\x3\x0\x0\x0\x36\x0\x0\x0\x8\x0\x0\x0\x8\x0\x2\x69\x64\x0\x6\x73\x74\x72\x69\x6e\x67\x0\x10\x0\x0\x0\x20\x0\x0\x0\x1\x0\x6\x73\x74\x72\x69\x6e\x67\x0\x0\x0\x1\x0\x0\x0\x20\x0\x0\x0\x4\x0\x1\x2\x3\x0\x0\x0\x38\x0\x1\x0\x0\x0\x0\x0\x9\x0\x2\x69\x64\x0\x0\x0\x20\x0\x0\x0\x20\x0\x0\x0\x20\x0\x0\x0\x1\x0\x6\x73\x74\x72\x69\x6e\x67\x0\x0\x0\x1\x0\x0\x0\x20\x0\x0\x0\x0\x0\x0\x0\x40\x0\x0\x0\x20\x0\x0\x0\x38\x0\x1\x0\x1\x0\x0\x0\xa\x0\x2\x69\x64\x0\x0\x0\x20\x0\x0\x0\x20\x0\x0\x0\x20\x0\x0\x0\x1\x0\x6\x73\x74\x72\x69\x6e\x67\x0\x0\x0\x1\x0\x0\x0\x20\x0\x0\x0\x0\x0\x0\x0\x40\x0\x0\x0\x20\x0\x0\x0\x38\x0\x1\x0\x2\x0\x0\x0\xb\x0\x2\x69\x64\x0\x0\x0\x20\x0\x0\x0\x20\x0\x0\x0\x20\x0\x0\x0\x1\x0\x6\x73\x74\x72\x69\x6e\x67\x0\x0\x0\x1\x0\x0\x0\x20\x0\x0\x0\x0\x0\x0\x0\x40\x0\x0\x0\x20\x0\x0\x0\x3c\x0\x1\x0\x3\x0\x0\x0\xc\x0\x2\x69\x64\x0\x0\x0\x20\x0\x0\x0\x20\x0\x0\x0\x20\x0\x0\x0\x20\x0\x0\x0\x1\x0\x6\x73\x74\x72\x69\x6e\x67\x0\x0\x0\x1\x0\x0\x0\x20\x0\x0\x0\x0\x0\x0\x0\x40\x0\x0\x0\x20\x0\x0\x0\x3d\x0\x1\x0\x4\x0\x0\x0\xd\x0\x2\x69\x64\x0\x0\x0\x20\x0\x0\x0\x20\x0\x0\x0\x20\x0\x0\x0\x20\x8\x0\x0\x0\x1\x0\x6\x73\x74\x72\x69\x6e\x67\x0\x0\x0\x1\x0\x0\x0\x20\x0\x0\x0\x0\x0\x0\x0\x40\x0\x0\x0\x20\x0\x0\x0\x45\x0\x1\x0\x5\x0\x0\x0\xe\x0\x2\x69\x64\x0\x0\x0\x20\x0\x0\x0\x20\x0\x0\x0\x20\x0\x0\x0\x20\x8\x0\x0\x0\x1\x0\x6\x73\x74\x72\x69\x6e\x67\x0\x0\x0\x1\x0\x0\x0\x20\x0\x0\x0\x0\x0\x0\x0\x40\x0\x0\x0\x0\x0\x0\x0\x40\x0\x0\x0\x20\x0\x0\x0\x45\x0\x1\x0\x6\x0\x0\x0\xf\x0\x2\x69\x64\x0\x0\x0\x20\x0\x0\x0\x20\x0\x0\x0\x20\x0\x0\x0\x20\x8\x0\x0\x0\x1\x0\x6\x73\x74\x72\x69\x6e\x67\x0\x0\x0\x1\x0\x0\x0\x20\x0\x0\x0\x0\x0\x0\x0\x40\x0\x0\x0\x0\x0\x0\x0\x40\x0\x0\x0\x20\x0\x0\x0\x61\x0\x1\x0\x7\x0\x0\x0\x10\x0\x2\x69\x64\x0\x0\x0\x20\x0\x0\x0\x20\x0\x0\x0\x20\x0\x0\x0\x20\x8\x0\x0\x0\x20\x0\x0\x0\x20\x0\x0\x0\x1\x0\x6\x73\x74\x72\x69\x6e\x67\x0\x0\x0\x1\x0\x0\x0\x20\x0\x0\x0\x0\x0\x0\x0\x40\x0\x0\x0\x0\x0\x0\x0\x40\x0\x0\x0\x20\x0\x0\x0\x1\x0\x6\x73\x74\x72\x69\x6e\x67\x0\x0\x0\x1\x0\x0\x0\x20\x0\x0\x0\x61\x0\x1\x0\x8\x0\x0\x0\x11\x0\x2\x69\x64\x0\x0\x0\x20\x0\x0\x0\x20\x0\x0\x0\x20\x0\x0\x0\x20\x8\x0\x0\x0\x20\x0\x0\x0\x20\x0\x0\x0\x1\x0\x6\x73\x74\x72\x69\x6e\x67\x0\x0\x0\x1\x0\x0\x0\x20\x0\x0\x0\x0\x0\x0\x0\x40\x0\x0\x0\x0\x0\x0\x0\x40\x0\x0\x0\x20\x0\x0\x0\x1\x0\x6\x73\x74\x72\x69\x6e\x67\x0\x0\x0\x1\x0\x0\x0\x20\x0\x0\x0\x65\x0\x1\x0\x9\x0\x0\x0\x12\x0\x2\x69\x64\x0\x0\x0\x20\x0\x0\x0\x20\x0\x0\x0\x20\x0\x0\x0\x20\x8\x0\x0\x0\x20\x0\x0\x0\x20\x0\x0\x0\x1\x0\x6\x73\x74\x72\x69\x6e\x67\x0\x0\x0\x1\x0\x0\x0\x20\x0\x0\x0\x20\x0\x0\x0\x0\x0\x0\x0\x40\x0\x0\x0\x0\x0\x0\x0\x40\x0\x0\x0\x20\x0\x0\x0\x1\x0\x6\x73\x74\x72\x69\x6e\x67\x0\x0\x0\x1\x0\x0\x0\x20\x0\x0\x0\x65\x0\x1\x0\xa\x0\x0\x0\x13\x0\x2\x69\x64\x0\x0\x0\x20\x0\x0\x0\x20\x0\x0\x0\x20\x0\x0\x0\x20\x8\x0\x0\x0\x20\x0\x0\x0\x20\x0\x0\x0\x1\x0\x6\x73\x74\x72\x69\x6e\x67\x0\x0\x0\x1\x0\x0\x0\x20\x0\x0\x0\x20\x0\x0\x0\x0\x0\x0\x0\x40\x0\x0\x0\x0\x0\x0\x0\x40\x0\x0\x0\x20\x0\x0\x0\x1\x0\x6\x73\x74\x72\x69\x6e\x67\x0\x0\x0\x1\x0\x0\x0\x20\x0\x0\x0\x6d\x0\x1\x0\xb\x0\x0\x0\x14\x0\x2\x69\x64\x0\x0\x0\x20\x0\x0\x0\x20\x0\x0\x0\x20\x0\x0\x0\x20\x8\x0\x0\x0\x20\x0\x0\x0\x20\x0\x0\x0\x1\x0\x6\x73\x74\x72\x69\x6e\x67\x0\x0\x0\x1\x0\x0\x0\x20\x0\x0\x0\x20\x0\x0\x0\x0\x0\x0\x0\x40\x0\x0\x0\x0\x0\x0\x0\x40\x0\x0\x0\x20\x0\x0\x0\x1\x0\x6\x73\x74\x72\x69\x6e\x67\x0\x0\x0\x1\x0\x0\x0\x20\x0\x6\x73\x74\x72\x69\x6e\x67\x0\x0\x0\x30\x0\x2\x0\x0\x0\x0\x0\x15\x0\x2\x69\x64\x0\x0\x0\x20\x0\x0\x0\x1\x0\x6\x73\x74\x72\x69\x6e\x67\x0\x0\x0\x1\x0\x0\x0\x20\x0\x0\x0\x0\x0\x0\x0\x40\x0\x0\x0\x20\x0\x0\x0\x2c\x0\x2\x0\x1\x0\x0\x0\x16\x0\x2\x69\x64\x0\x0\x0\x20\x0\x0\x0\x1\x0\x6\x73\x74\x72\x69\x6e\x67\x0\x0\x0\x1\x0\x0\x0\x20\x0\x0\x0\x0\x0\x0\x0\x40\x0\x0\x0\x2d\x0\x2\x0\x2\x0\x0\x0\x17\x0\x2\x69\x64\x0\x0\x0\x20\x8\x0\x0\x0\x1\x0\x6\x73\x74\x72\x69\x6e\x67\x0\x0\x0\x1\x0\x0\x0\x20\x0\x0\x0\x0\x0\x0\x0\x40\x0\x0\x0\x2d\x0\x2\x0\x3\x0\x0\x0\x18\x0\x2\x69\x64\x0\x0\x0\x20\x8\x0\x0\x0\x1\x0\x6\x73\x74\x72\x69\x6e\x67\x0\x0\x0\x1\x0\x0\x0\x20\x0\x0\x0\x0\x0\x0\x0\x40\x0\x0\x0\x31\x0\x2\x0\x4\x0\x0\x0\x19\x0\x2\x69\x64\x0\x0\x0\x20\x8\x0\x0\x0\x1\x0\x6\x73\x74\x72\x69\x6e\x67\x0\x0\x0\x1\x0\x0\x0\x20\x0\x0\x0\x20\x0\x0\x0\x0\x0\x0\x0\x40\x0\x0\x0\x31\x0\x2\x0\x5\x0\x0\x0\x1a\x0\x2\x69\x64\x0\x0\x0\x20\x8\x0\x0\x0\x1\x0\x6\x73\x74\x72\x69\x6e\x67\x0\x0\x0\x1\x0\x0\x0\x20\x0\x0\x0\x20\x0\x0\x0\x0\x0\x0\x0\x40\x0\x0\x0\x18\x0\x3\x0\x0\x0\x0\x0\x1b\x0\x2\x69\x64\x0\x0\x0\x1\x0\x6\x73\x74\x72\x69\x6e\x67\x0\x0\x0\x18\x0\x3\x0\x1\x0\x0\x0\x1c\x0\x2\x69\x64\x0\x0\x0\x1\x0\x6\x73\x74\x72\x69\x6e\x67\x0\x0\x0\x18\x0\x3\x0\x2\x0\x0\x0\x1d\x0\x2\x69\x64\x0\x0\x0\x1\x0\x6\x73\x74\x72\x69\x6e\x67\x0\x0\x0\x18\x0\x3\x0\x3\x0\x0\x0\x1e\x0\x2\x69\x64\x0\x0\x0\x1\x0\x6\x73\x74\x72\x69\x6e\x67\x0\x0\x0\x19\x0\x3\x0\x4\x0\x0\x0\x1f\x0\x2\x69\x64\x0\x0\x0\x1\x0\x6\x73\x74\x72\x69\x6e\x67\x0\x0\x0\x0\x19\x0\x3\x0\x5\x0\x0\x0\x20\x0\x2\x69\x64\x0\x0\x0\x1\x0\x6\x73\x74\x72\x69\x6e\x67\x0\x0\x0\x0\x19\x0\x3\x0\x6\x0\x0\x0\x21\x0\x2\x69\x64\x0\x0\x0\x1\x0\x6\x73\x74\x72\x69\x6e\x67\x0\x0\x0\x0\x19\x0\x3\x0\x7\x0\x0\x0\x22\x0\x2\x69\x64\x0\x0\x0\x1\x0\x6\x73\x74\x72\x69\x6e\x67\x0\x0\x0\x0\x1b\x0\x3\x0\x8\x0\x0\x0\x23\x0\x2\x69\x64\x0\x0\x0\x1\x0\x6\x73\x74\x72\x69\x6e\x67\x0\x0\x0\x0\x0\x0\x2e\x0\x3\x0\x9\x0\x0\x0\x24\x0\x2\x69\x64\x0\x2\x7\x73\x74\x72\x69\x6e\x67\x2\xa\x3\x1\x2\x3\x14\x3\x4\x5\x6\x0\x0\x0\x2\xa\x3\x1\x2\x3\x14\x3\x4\x5\x6\x0\x0\x0\x58\x0\x4\x0\x0\x0\x0\x0\x25\x0\x2\x69\x64\x0\x0\x0\x20\x0\x0\x0\x20\x0\x0\x0\x1\x0\x6\x73\x74\x72\x69\x6e\x67\x0\x0\x0\x20\x0\x0\x0\x20\x0\x0\x0\x20\x0\x0\x0\x20\x0\x0\x0\x1\x0\x0\x0\x20\x0\x0\x0\x20\x0\x0\x0\x1\x0\x0\x0\x20\x0\x0\x0\x1\x0\x0\x0\x20\x0\x6\x73\x74\x72\x69\x6e\x67\x0\x0\x0\x20\x0\x0\x0\x59\x0\x4\x0\x1\x0\x0\x0\x26\x0\x2\x69\x64\x0\x0\x0\x20\x0\x0\x0\x20\x0\x0\x0\x1\x0\x6\x73\x74\x72\x69\x6e\x67\x0\x0\x0\x20\x0\x0\x0\x20\x0\x0\x0\x20\x0\x0\x0\x20\x0\x0\x0\x1\x0\x0\x0\x20\x0\x0\x0\x20\x0\x0\x0\x1\x0\x0\x0\x20\x0\x0\x0\x0\x1\x0\x0\x0\x20\x0\x6\x73\x74\x72\x69\x6e\x67\x0\x0\x0\x20\x0\x0\x0\x65\x0\x4\x0\x2\x0\x0\x0\x27\x0\x2\x69\x64\x0\x0\x0\x20\x0\x0\x0\x20\x0\x0\x0\x0\x0\x0\x0\x40\x0\x0\x0\x1\x0\x6\x73\x74\x72\x69\x6e\x67\x0\x0\x0\x1\x0\x0\x0\x20\x0\x0\x0\x20\x0\x0\x0\x20\x0\x0\x0\x20\x0\x0\x0\x1\x0\x0\x0\x20\x0\x0\x0\x20\x0\x0\x0\x1\x0\x0\x0\x20\x0\x0\x0\x0\x1\x0\x0\x0\x20\x0\x6\x73\x74\x72\x69\x6e\x67\x0\x0\x0\x20\x0\x0\x0\x75\x0\x4\x0\x3\x0\x0\x0\x28\x0\x2\x69\x64\x0\x0\x0\x20\x0\x0\x0\x20\x0\x0\x0\x0\x0\x0\x0\x40\x0\x0\x0\x1\x0\x6\x73\x74\x72\x69\x6e\x67\x0\x0\x0\x1\x0\x0\x0\x20\x0\x0\x0\x20\x0\x0\x0\x20\x0\x0\x0\x20\x0\x0\x0\x1\x0\x0\x0\x20\x0\x0\x0\x20\x0\x0\x0\x1\x0\x0\x0\x20\x0\x0\x0\x1\x0\x0\x0\x20\x0\x0\x0\x1\x0\x0\x0\x20\x0\x0\x0\x0\x1\x0\x0\x0\x20\x0\x6\x73\x74\x72\x69\x6e\x67\x0\x0\x0\x20\x0\x0\x0\x8b\x0\x4\x0\x4\x0\x0\x0\x29\x0\x2\x69\x64\x0\x0\x0\x0\x20\x0\x0\x0\x20\x0\x0\x0\x0\x0\x0\x0\x40\x2\x7\x73\x74\x72\x69\x6e\x67\x2\x0\x0\x0\x20\x0\x0\x0\x20\x0\x0\x0\x20\x0\x0\x0\x20\x2\x0\x0\x0\x20\x0\x0\x0\x20\x2\x0\x0\x0\x20\x2\x0\x0\x0\x20\x2\x0\x0\x0\x20\x0\x2\xa\x3\x1\x2\x3\x14\x3\x4\x5\x6\x2\xa\x3\x1\x2\x3\x14\x3\x4\x5\x6\x2\x0\x0\x0\x20\x7\x73\x74\x72\x69\x6e\x67\x0\x0\x0\x20\x2\xa\x3\x1\x2\x3\x14\x3\x4\x5\x6\x2\xa\x3\x1\x2\x3\x14\x3\x4\x5\x6\x0\x0\x0\x25\x0\x5\x0\x0\x0\x0\x0\x2a\x0\x2\x69\x64\x0\x0\x0\x20\x0\x0\x0\x20\x0\x0\x0\x0\x1\x0\x6\x73\x74\x72\x69\x6e\x67\x0\x0\x0\x20\x0\x0\x0\x31\x0\x5\x0\x1\x0\x0\x0\x2b\x0\x2\x69\x64\x0\x0\x0\x20\x0\x0\x0\x20\x0\x0\x0\x0\x0\x0\x0\x40\x0\x0\x0\x0\x1\x0\x6\x73\x74\x72\x69\x6e\x67\x0\x0\x0\x1\x0\x0\x0\x20\x0\x0\x0\x41\x0\x5\x0\x2\x0\x0\x0\x2c\x0\x2\x69\x64\x0\x0\x0\x0\x20\x0\x0\x0\x20\x0\x0\x0\x0\x0\x0\x0\x40\x0\x2\x7\x73\x74\x72\x69\x6e\x67\x2\x0\x0\x0\x20\x2\xa\x3\x1\x2\x3\x14\x3\x4\x5\x6\x2\xa\x3\x1\x2\x3\x14\x3\x4\x5\x6\x0\x0\x0\x58\x0\x6\x0\x0\x0\x0\x0\x2d\x0\x2\x69\x64\x0\x0\x0\x20\x0\x0\x0\x20\x0\x0\x0\x1\x0\x6\x73\x74\x72\x69\x6e\x67\x0\x0\x0\x20\x0\x0\x0\x20\x0\x0\x0\x20\x0\x0\x0\x20\x0\x0\x0\x1\x0\x0\x0\x20\x0\x0\x0\x20\x0\x0\x0\x1\x0\x0\x0\x20\x0\x0\x0\x1\x0\x0\x0\x20\x0\x6\x73\x74\x72\x69\x6e\x67\x0\x0\x0\x20\x0\x0\x0\x5e\x0\x6\x0\x1\x0\x0\x0\x2e\x0\x2\x69\x64\x0\x0\x0\x20\x0\x0\x0\x20\x0\x0\x0\x1\x0\x6\x73\x74\x72\x69\x6e\x67\x0\x0\x0\x20\x0\x0\x0\x20\x0\x0\x0\x20\x0\x0\x0\x20\x0\x0\x0\x1\x0\x0\x0\x20\x0\x0\x0\x20\x0\x0\x0\x1\x0\x0\x0\x20\x0\x0\x0\x1\x0\x0\x0\x20\x0\x0\x0\x1\x0\x0\x0\x20\x0\x6\x73\x74\x72\x69\x6e\x67\x0\x10\x0\x0\x0\x66\x0\x6\x0\x2\x0\x0\x0\x2f\x0\x2\x69\x64\x0\x0\x0\x20\x0\x0\x0\x20\x0\x0\x0\x1\x0\x6\x73\x74\x72\x69\x6e\x67\x0\x0\x0\x20\x0\x0\x0\x20\x0\x0\x0\x20\x0\x0\x0\x20\x0\x0\x0\x1\x0\x0\x0\x20\x0\x0\x0\x20\x0\x0\x0\x1\x0\x0\x0\x20\x0\x0\x0\x1\x0\x0\x0\x20\x0\x0\x0\x1\x0\x0\x0\x20\x0\x6\x73\x74\x72\x69\x6e\x67\x0\x10\x0\x6\x73\x74\x72\x69\x6e\x67\x0\x0\x0\x6e\x0\x6\x0\x3\x0\x0\x0\x30\x0\x2\x69\x64\x0\x0\x0\x20\x0\x0\x0\x20\x0\x0\x0\x1\x0\x6\x73\x74\x72\x69\x6e\x67\x0\x0\x0\x20\x0\x0\x0\x20\x0\x0\x0\x20\x0\x0\x0\x20\x0\x0\x0\x1\x0\x0\x0\x20\x0\x0\x0\x20\x0\x0\x0\x1\x0\x0\x0\x20\x0\x0\x0\x1\x0\x0\x0\x20\x0\x0\x0\x1\x0\x0\x0\x20\x0\x6\x73\x74\x72\x69\x6e\x67\x0\x6\x73\x74\x72\x69\x6e\x67\x0\x10\x0\x6\x73\x74\x72\x69\x6e\x67\x0\x0\x0\x76\x0\x6\x0\x4\x0\x0\x0\x31\x0\x2\x69\x64\x0\x0\x0\x20\x0\x0\x0\x20\x0\x0\x0\x1\x0\x6\x73\x74\x72\x69\x6e\x67\x0\x0\x0\x20\x0\x0\x0\x20\x0\x0\x0\x20\x0\x0\x0\x20\x0\x0\x0\x1\x0\x0\x0\x20\x0\x0\x0\x20\x0\x0\x0\x1\x0\x0\x0\x20\x0\x0\x0\x1\x0\x0\x0\x20\x0\x0\x0\x1\x0\x0\x0\x20\x0\x0\x0\x1\x0\x0\x0\x20\x0\x6\x73\x74\x72\x69\x6e\x67\x0\x6\x73\x74\x72\x69\x6e\x67\x0\x10\x0\x6\x73\x74\x72\x69\x6e\x67\x0\x0\x0\x82\x0\x6\x0\x5\x0\x0\x0\x32\x0\x2\x69\x64\x0\x0\x0\x20\x0\x0\x0\x20\x0\x0\x0\x0\x0\x0\x0\x40\x0\x0\x0\x1\x0\x6\x73\x74\x72\x69\x6e\x67\x0\x0\x0\x1\x0\x0\x0\x20\x0\x0\x0\x20\x0\x0\x0\x20\x0\x0\x0\x20\x0\x0\x0\x1\x0\x0\x0\x20\x0\x0\x0\x20\x0\x0\x0\x1\x0\x0\x0\x20\x0\x0\x0\x1\x0\x0\x0\x20\x0\x0\x0\x1\x0\x0\x0\x20\x0\x0\x0\x1\x0\x0\x0\x20\x0\x6\x73\x74\x72\x69\x6e\x67\x0\x6\x73\x74\x72\x69\x6e\x67\x0\x10\x0\x6\x73\x74\x72\x69\x6e\x67\x0\x0\x0\xa1\x0\x6\x0\x6\x0\x0\x0\x33\x0\x2\x69\x64\x0\x0\x0\x0\x20\x0\x0\x0\x20\x0\x0\x0\x0\x0\x0\x0\x40\x2\x7\x73\x74\x72\x69\x6e\x67\x2\x0\x0\x0\x20\x0\x0\x0\x20\x0\x0\x0\x20\x0\x0\x0\x20\x2\x0\x0\x0\x20\x0\x0\x0\x20\x2\x0\x0\x0\x20\x2\x0\x0\x0\x20\x2\xa\x3\x1\x2\x3\x14\x3\x4\x5\x6\x2\xa\x3\x1\x2\x3\x14\x3\x4\x5\x6\x2\x0\x0\x0\x20\x2\x0\x0\x0\x20\x7\x73\x74\x72\x69\x6e\x67\x7\x73\x74\x72\x69\x6e\x67\x0\x10\x2\xa\x3\x1\x2\x3\x14\x3\x4\x5\x6\x7\x73\x74\x72\x69\x6e\x67\x2\xa\x3\x1\x2\x3\x14\x3\x4\x5\x6\x2\xa\x3\x1\x2\x3\x14\x3\x4\x5\x6\x0\x0\x0\x10\x0\x7\x0\x0\x0\x0\x0\x34\x0\x2\x69\x64\x0\x0\x0\x20\x0\x0\x0\x10\x0\x7\x0\x1\x0\x0\x0\x35\x0\x2\x69\x64\x0\x0\x0\x20\x0\x0\x0\x18\x0\x7\x0\x2\x0\x0\x0\x36\x0\x2\x69\x64\x0\x0\x0\x20\x0\x0\x0\x0\x0\x0\x0\x40\x0\x0\x0\x24\x0\x7\x0\x3\x0\x0\x0\x37\x0\x2\x69\x64\x0\x0\x0\x0\x20\x0\x0\x0\x0\x0\x0\x0\x40\x2\xa\x3\x1\x2\x3\x14\x3\x4\x5\x6\x0\x0\x0\x38\x0\x8\x0\x0\x0\x0\x0\x38\x0\x2\x69\x64\x0\x6\x73\x74\x72\x69\x6e\x67\x0\x0\x0\x1\x0\x6\x73\x74\x72\x69\x6e\x67\x0\x0\x0\x1\x0\x0\x0\x20\x0\x0\x0\x0\x0\x0\x0\x40\x0\x6\x73\x74\x72\x69\x6e\x67\x0\x0\x0\x4c\x0\x8\x0\x1\x0\x0\x0\x39\x0\x2\x69\x64\x0\x6\x73\x74\x72\x69\x6e\x67\x0\x0\x0\x20\x0\x6\x73\x74\x72\x69\x6e\x67\x0\x0\x0\x1\x0\x6\x73\x74\x72\x69\x6e\x67\x0\x0\x0\x1\x0\x0\x0\x20\x0\x0\x0\x0\x0\x0\x0\x40\x0\x0\x0\x0\x0\x0\x0\x40\x0\x6\x73\x74\x72\x69\x6e\x67\x0\x0\x0\x4c\x0\x8\x0\x2\x0\x0\x0\x3a\x0\x2\x69\x64\x0\x6\x73\x74\x72\x69\x6e\x67\x0\x0\x0\x20\x0\x6\x73\x74\x72\x69\x6e\x67\x0\x0\x0\x0\x0\x0\x0\x40\x0\x0\x0\x1\x0\x6\x73\x74\x72\x69\x6e\x67\x0\x0\x0\x1\x0\x0\x0\x20\x0\x0\x0\x0\x0\x0\x0\x40\x0\x6\x73\x74\x72\x69\x6e\x67\x0\x0\x0\x4c\x0\x8\x0\x3\x0\x0\x0\x3b\x0\x2\x69\x64\x0\x6\x73\x74\x72\x69\x6e\x67\x0\x0\x0\x20\x0\x6\x73\x74\x72\x69\x6e\x67\x0\x0\x0\x0\x0\x0\x0\x40\x0\x0\x0\x1\x0\x6\x73\x74\x72\x69\x6e\x67\x0\x0\x0\x1\x0\x0\x0\x20\x0\x0\x0\x0\x0\x0\x0\x40\x0\x6\x73\x74\x72\x69\x6e\x67\x0\x0\x0\x4c\x0\x8\x0\x4\x0\x0\x0\x3c\x0\x2\x69\x64\x0\x6\x73\x74\x72\x69\x6e\x67\x0\x0\x0\x20\x0\x6\x73\x74\x72\x69\x6e\x67\x0\x0\x0\x0\x0\x0\x0\x40\x0\x0\x0\x1\x0\x6\x73\x74\x72\x69\x6e\x67\x0\x0\x0\x1\x0\x0\x0\x20\x0\x0\x0\x0\x0\x0\x0\x40\x0\x6\x73\x74\x72\x69\x6e\x67\x0\x0\x0\x44\x0\x8\x0\x5\x0\x0\x0\x3d\x0\x2\x69\x64\x0\x6\x73\x74\x72\x69\x6e\x67\x0\x0\x0\x20\x0\x6\x73\x74\x72\x69\x6e\x67\x0\x0\x0\x1\x0\x6\x73\x74\x72\x69\x6e\x67\x0\x0\x0\x1\x0\x0\x0\x20\x0\x0\x0\x0\x0\x0\x0\x40\x0\x6\x73\x74\x72\x69\x6e\x67\x0\x0\x0\x48\x0\x8\x0\x6\x0\x0\x0\x3e\x0\x2\x69\x64\x0\x6\x73\x74\x72\x69\x6e\x67\x0\x0\x0\x20\x0\x6\x73\x74\x72\x69\x6e\x67\x0\x0\x0\x1\x0\x6\x73\x74\x72\x69\x6e\x67\x0\x0\x0\x1\x0\x0\x0\x20\x0\x0\x0\x0\x0\x0\x0\x40\x0\x0\x0\x20\x0\x6\x73\x74\x72\x69\x6e\x67\x0\x0\x0\x50\x0\x8\x0\x7\x0\x0\x0\x3f\x0\x2\x69\x64\x0\x6\x73\x74\x72\x69\x6e\x67\x0\x0\x0\x20\x0\x6\x73\x74\x72\x69\x6e\x67\x0\x6\x73\x74\x72\x69\x6e\x67\x0\x0\x0\x1\x0\x6\x73\x74\x72\x69\x6e\x67\x0\x0\x0\x1\x0\x0\x0\x20\x0\x0\x0\x0\x0\x0\x0\x40\x0\x0\x0\x20\x0\x6\x73\x74\x72\x69\x6e\x67\x0\x0\x0\x67\x0\x8\x0\x8\x0\x0\x0\x40\x0\x2\x69\x64\x0\x7\x73\x74\x72\x69\x6e\x67\x0\x0\x0\x20\x7\x73\x74\x72\x69\x6e\x67\x7\x73\x74\x72\x69\x6e\x67\x2\x7\x73\x74\x72\x69\x6e\x67\x2\x0\x0\x0\x20\x0\x0\x0\x0\x0\x0\x0\x40\x0\x0\x0\x20\x7\x73\x74\x72\x69\x6e\x67\x2\xa\x3\x1\x2\x3\x14\x3\x4\x5\x6\x2\xa\x3\x1\x2\x3\x14\x3\x4\x5\x6\x2\xa\x3\x1\x2\x3\x14\x3\x4\x5\x6\x0\x0\x0\x28\x0\x9\x0\x0\x0\x0\x0\x41\x0\x2\x69\x64\x0\x6\x73\x74\x72\x69\x6e\x67\x0\x0\x0\x1\x0\x6\x73\x74\x72\x69\x6e\x67\x0\x0\x0\x1\x0\x0\x0\x20\x0\x0\x0\x28\x0\x9\x0\x1\x0\x0\x0\x42\x0\x2\x69\x64\x0\x6\x73\x74\x72\x69\x6e\x67\x0\x0\x0\x1\x0\x6\x73\x74\x72\x69\x6e\x67\x0\x0\x0\x1\x0\x0\x0\x20\x0\x0\x0\x28\x0\x9\x0\x2\x0\x0\x0\x43\x0\x2\x69\x64\x0\x6\x73\x74\x72\x69\x6e\x67\x0\x0\x0\x1\x0\x6\x73\x74\x72\x69\x6e\x67\x0\x0\x0\x1\x0\x0\x0\x20\x0\x0\x0\x28\x0\x9\x0\x3\x0\x0\x0\x44\x0\x2\x69\x64\x0\x6\x73\x74\x72\x69\x6e\x67\x0\x0\x0\x1\x0\x6\x73\x74\x72\x69\x6e\x67\x0\x0\x0\x1\x0\x0\x0\x20\x0\x0\x0\x28\x0\x9\x0\x4\x0\x0\x0\x45\x0\x2\x69\x64\x0\x6\x73\x74\x72\x69\x6e\x67\x0\x0\x0\x1\x0\x6\x73\x74\x72\x69\x6e\x67\x0\x0\x0\x1\x0\x0\x0\x20\x0\x0\x0\x28\x0\x9\x0\x5\x0\x0\x0\x46\x0\x2\x69\x64\x0\x6\x73\x74\x72\x69\x6e\x67\x0\x0\x0\x1\x0\x6\x73\x74\x72\x69\x6e\x67\x0\x0\x0\x1\x0\x0\x0\x20\x0\x0\x0\x37\x0\x9\x0\x6\x0\x0\x0\x47\x0\x2\x69\x64\x0\x7\x73\x74\x72\x69\x6e\x67\x2\x7\x73\x74\x72\x69\x6e\x67\x2\x0\x0\x0\x20\x2\xa\x3\x1\x2\x3\x14\x3\x4\x5\x6\x2\xa\x3\x1\x2\x3\x14\x3\x4\x5\x6\x0\x0\x0\x14\x0\xa\x0\x0\x0\x0\x0\x48\x0\x2\x69\x64\x0\x6\x73\x74\x72\x69\x6e\x67\x0\x0\x0\x15\x0\xa\x0\x1\x0\x0\x0\x49\x0\x2\x69\x64\x0\x6\x73\x74\x72\x69\x6e\x67\x8\x0\x0\x0\x15\x0\xa\x0\x2\x0\x0\x0\x4a\x0\x2\x69\x64\x0\x6\x73\x74\x72\x69\x6e\x67\x8\x0\x0\x0\x20\x0\xa\x0\x3\x0\x0\x0\x4b\x0\x2\x69\x64\x0\x7\x73\x74\x72\x69\x6e\x67\x8\x2\xa\x3\x1\x2\x3\x14\x3\x4\x5\x6\x0\x0\x0\x3c\x0\xb\x0\x0\x0\x0\x0\x4c\x0\x2\x69\x64\x0\x6\x73\x74\x72\x69\x6e\x67\x0\x0\x0\x20\x0\x6\x73\x74\x72\x69\x6e\x67\x0\x6\x73\x74\x72\x69\x6e\x67\x0\x0\x0\x1\x0\x6\x73\x74\x72\x69\x6e\x67\x0\x0\x0\x4\x0\x1\x2\x3\x0\x0\x0\x40\x0\xb\x0\x1\x0\x0\x0\x4d\x0\x2\x69\x64\x0\x6\x73\x74\x72\x69\x6e\x67\x0\x0\x0\x20\x0\x0\x0\x20\x0\x6\x73\x74\x72\x69\x6e\x67\x0\x6\x73\x74\x72\x69\x6e\x67\x0\x0\x0\x1\x0\x6\x73\x74\x72\x69\x6e\x67\x0\x0\x0\x4\x0\x1\x2\x3\x0\x0\x0\x40\x0\xb\x0\x2\x0\x0\x0\x4e\x0\x2\x69\x64\x0\x6\x73\x74\x72\x69\x6e\x67\x0\x0\x0\x20\x0\x0\x0\x20\x0\x6\x73\x74\x72\x69\x6e\x67\x0\x6\x73\x74\x72\x69\x6e\x67\x0\x0\x0\x1\x0\x6\x73\x74\x72\x69\x6e\x67\x0\x0\x0\x4\x0\x1\x2\x3\x0\x0\x0\x40\x0\xb\x0\x3\x0\x0\x0\x4f\x0\x2\x69\x64\x0\x6\x73\x74\x72\x69\x6e\x67\x0\x0\x0\x20\x0\x0\x0\x20\x0\x6\x73\x74\x72\x69\x6e\x67\x0\x6\x73\x74\x72\x69\x6e\x67\x0\x0\x0\x1\x0\x6\x73\x74\x72\x69\x6e\x67\x0\x0\x0\x4\x0\x1\x2\x3\x0\x0\x0\x40\x0\xb\x0\x4\x0\x0\x0\x50\x0\x2\x69\x64\x0\x6\x73\x74\x72\x69\x6e\x67\x0\x0\x0\x20\x0\x0\x0\x20\x0\x6\x73\x74\x72\x69\x6e\x67\x0\x6\x73\x74\x72\x69\x6e\x67\x0\x0\x0\x1\x0\x6\x73\x74\x72\x69\x6e\x67\x0\x0\x0\x4\x0\x1\x2\x3\x0\x0\x0\x48\x0\xb\x0\x5\x0\x0\x0\x51\x0\x2\x69\x64\x0\x6\x73\x74\x72\x69\x6e\x67\x0\x0\x0\x20\x0\x0\x0\x20\x0\x6\x73\x74\x72\x69\x6e\x67\x0\x6\x73\x74\x72\x69\x6e\x67\x0\x6\x73\x74\x72\x69\x6e\x67\x0\x0\x0\x1\x0\x6\x73\x74\x72\x69\x6e\x67\x0\x0\x0\x4\x0\x1\x2\x3\x0\x0\x0\x54\x0\xb\x0\x6\x0\x0\x0\x52\x0\x2\x69\x64\x0\x7\x73\x74\x72\x69\x6e\x67\x0\x0\x0\x20\x0\x0\x0\x20\x7\x73\x74\x72\x69\x6e\x67\x7\x73\x74\x72\x69\x6e\x67\x7\x73\x74\x72\x69\x6e\x67\x2\x7\x73\x74\x72\x69\x6e\x67\x5\x0\x1\x2\x3\x2\xa\x3\x1\x2\x3\x14\x3\x4\x5\x6\x2\xa\x3\x1\x2\x3\x14\x3\x4\x5\x6\x0\x0\x0\x20\x0\xc\x0\x0\x0\x0\x0\x53\x0\x2\x69\x64\x0\x6\x73\x74\x72\x69\x6e\x67\x0\x0\x0\x20\x0\x6\x73\x74\x72\x69\x6e\x67\x0\x0\x0\x20\x0\xc\x0\x1\x0\x0\x0\x54\x0\x2\x69\x64\x0\x6\x73\x74\x72\x69\x6e\x67\x0\x0\x0\x20\x0\x6\x73\x74\x72\x69\x6e\x67\x0\x0\x0\x20\x0\xc\x0\x2\x0\x0\x0\x55\x0\x2\x69\x64\x0\x6\x73\x74\x72\x69\x6e\x67\x0\x0\x0\x20\x0\x6\x73\x74\x72\x69\x6e\x67\x0\x0\x0\x28\x0\xc\x0\x3\x0\x0\x0\x56\x0\x2\x69\x64\x0\x6\x73\x74\x72\x69\x6e\x67\x0\x0\x0\x20\x0\x6\x73\x74\x72\x69\x6e\x67\x0\x6\x73\x74\x72\x69\x6e\x67\x0\x0\x0\x31\x0\xc\x0\x4\x0\x0\x0\x57\x0\x2\x69\x64\x0\x7\x73\x74\x72\x69\x6e\x67\x0\x0\x0\x20\x7\x73\x74\x72\x69\x6e\x67\x7\x73\x74\x72\x69\x6e\x67\x2\xa\x3\x1\x2\x3\x14\x3\x4\x5\x6\x0\x0\x0\x1c\x0\xd\x0\x0\x0\x0\x0\x58\x0\x2\x69\x64\x0\x6\x73\x74\x72\x69\x6e\x67\x0\x6\x73\x74\x72\x69\x6e\x67\x0\x0\x0\x1c\x0\xd\x0\x1\x0\x0\x0\x59\x0\x2\x69\x64\x0\x6\x73\x74\x72\x69\x6e\x67\x0\x6\x73\x74\x72\x69\x6e\x67\x0\x0\x0\x1c\x0\xd\x0\x2\x0\x0\x0\x5a\x0\x2\x69\x64\x0\x6\x73\x74\x72\x69\x6e\x67\x0\x6\x73\x74\x72\x69\x6e\x67\x0\x0\x0\x28\x0\xd\x0\x3\x0\x0\x0\x5b\x0\x2\x69\x64\x0\x6\x73\x74\x72\x69\x6e\x67\x0\x0\x0\x1\x0\x6\x73\x74\x72\x69\x6e\x67\x0\x6\x73\x74\x72\x69\x6e\x67\x0\x0\x0\x39\x0\xd\x0\x4\x0\x0\x0\x5c\x0\x2\x69\x64\x0\x7\x73\x74\x72\x69\x6e\x67\x2\x7\x73\x74\x72\x69\x6e\x67\x7\x73\x74\x72\x69\x6e\x67\x2\xa\x3\x1\x2\x3\x14\x3\x4\x5\x6\x2\xa\x3\x1\x2\x3\x14\x3\x4\x5\x6\x0\x0\x0\x34\x0\xe\x0\x0\x0\x0\x0\x5d\x0\x2\x69\x64\x0\x6\x73\x74\x72\x69\x6e\x67\x0\x0\x0\x20\x0\x6\x73\x74\x72\x69\x6e\x67\x0\x0\x0\x1\x0\x6\x73\x74\x72\x69\x6e\x67\x0\x0\x0\x4\x0\x1\x2\x3\x0\x0\x0\x34\x0\xe\x0\x1\x0\x0\x0\x5e\x0\x2\x69\x64\x0\x6\x73\x74\x72\x69\x6e\x67\x0\x0\x0\x20\x0\x6\x73\x74\x72\x69\x6e\x67\x0\x0\x0\x1\x0\x6\x73\x74\x72\x69\x6e\x67\x0\x0\x0\x4\x0\x1\x2\x3\x0\x0\x0\x34\x0\xe\x0\x2\x0\x0\x0\x5f\x0\x2\x69\x64\x0\x6\x73\x74\x72\x69\x6e\x67\x0\x0\x0\x20\x0\x6\x73\x74\x72\x69\x6e\x67\x0\x0\x0\x1\x0\x6\x73\x74\x72\x69\x6e\x67\x0\x0\x0\x4\x0\x1\x2\x3\x0\x0\x0\x3c\x0\xe\x0\x3\x0\x0\x0\x60\x0\x2\x69\x64\x0\x6\x73\x74\x72\x69\x6e\x67\x0\x0\x0\x20\x0\x6\x73\x74\x72\x69\x6e\x67\x0\x6\x73\x74\x72\x69\x6e\x67\x0\x0\x0\x1\x0\x6\x73\x74\x72\x69\x6e\x67\x0\x0\x0\x4\x0\x1\x2\x3\x0\x0\x0\x49\x0\xe\x0\x4\x0\x0\x0\x61\x0\x2\x69\x64\x0\x7\x73\x74\x72\x69\x6e\x67\x0\x0\x0\x20\x7\x73\x74\x72\x69\x6e\x67\x7\x73\x74\x72\x69\x6e\x67\x2\x7\x73\x74\x72\x69\x6e\x67\x5\x0\x1\x2\x3\x2\xa\x3\x1\x2\x3\x14\x3\x4\x5\x6\x2\xa\x3\x1\x2\x3\x14\x3\x4\x5\x6\x0\x0\x0\x18\x0\xf\x0\x0\x0\x0\x0\x62\x0\x2\x69\x64\x0\x0\x0\x1\x0\x6\x73\x74\x72\x69\x6e\x67\x0\x0\x0\x18\x0\xf\x0\x1\x0\x0\x0\x63\x0\x2\x69\x64\x0\x0\x0\x1\x0\x6\x73\x74\x72\x69\x6e\x67\x0\x0\x0\x18\x0\xf\x0\x2\x0\x0\x0\x64\x0\x2\x69\x64\x0\x0\x0\x1\x0\x6\x73\x74\x72\x69\x6e\x67\x0\x0\x0\x19\x0\xf\x0\x3\x0\x0\x0\x65\x0\x2\x69\x64\x0\x0\x0\x1\x0\x6\x73\x74\x72\x69\x6e\x67\x0\x0\x0\x0\x19\x0\xf\x0\x4\x0\x0\x0\x66\x0\x2\x69\x64\x0\x0\x0\x1\x0\x6\x73\x74\x72\x69\x6e\x67\x0\x0\x0\x0\x21\x0\xf\x0\x5\x0\x0\x0\x67\x0\x2\x69\x64\x0\x2\x7\x73\x74\x72\x69\x6e\x67\x0\x2\xa\x3\x1\x2\x3\x14\x3\x4\x5\x6\x0\x0\x0\xc\x0\x10\x0\x0\x0\x0\x0\x68\x0\x2\x69\x64\x0\x0\x0\xc\x0\x10\x0\x1\x0\x0\x0\x69\x0\x2\x69\x64\x0\x0\x0\xc\x0\x10\x0\x2\x0\x0\x0\x6a\x0\x2\x69\x64\x0\x0\x0\x18\x0\x10\x0\x3\x0\x0\x0\x6b\x0\x2\x69\x64\x0\x2\xa\x3\x1\x2\x3\x14\x3\x4\x5\x6\x0\x0\x0\x14\x0\x11\x0\x0\x0\x0\x0\x6c\x0\x2\x69\x64\x0\x6\x73\x74\x72\x69\x6e\x67\x0\x0\x0\x14\x0\x11\x0\x1\x0\x0\x0\x6d\x0\x2\x69\x64\x0\x6\x73\x74\x72\x69\x6e\x67\x0\x0\x0\xc\x0\x12\x0\x0\x0\x0\x0\x6e\x0\x2\x69\x64\x0\x0\x0\xc\x0\x12\x0\x1\x0\x0\x0\x6f\x0\x2\x69\x64\x0\x0\x0\xc\x0\x12\x0\x2\x0\x0\x0\x70\x0\x2\x69\x64\x0\x0\x0\x26\x0\x12\x0\x3\x0\x0\x0\x71\x0\x2\x69\x64\x0\x7\x73\x74\x72\x69\x6e\x67\x7\x73\x74\x72\x69\x6e\x67\x2\xa\x3\x1\x2\x3\x14\x3\x4\x5\x6\x0\x0\x0\x46\x0\x13\x0\x0\x0\x0\x0\x72\x0\x2\x69\x64\x0\x0\x0\x1\x0\x6\x73\x74\x72\x69\x6e\x67\x0\x0\x0\x20\x0\x10\x0\x0\x0\x1\x0\x0\x0\x20\x0\x0\x0\x1\x0\x0\x0\x20\x0\x0\x0\x1\x0\x6\x73\x74\x72\x69\x6e\x67\x0\x6\x73\x74\x72\x69\x6e\x67\x0\x0\x0\x20\x0\x0\x0\x47\x0\x13\x0\x1\x0\x0\x0\x73\x0\x2\x69\x64\x0\x0\x0\x1\x0\x6\x73\x74\x72\x69\x6e\x67\x0\x0\x0\x20\x0\x10\x0\x0\x0\x1\x0\x0\x0\x20\x0\x0\x0\x1\x0\x0\x0\x20\x0\x0\x0\x1\x0\x6\x73\x74\x72\x69\x6e\x67\x0\x6\x73\x74\x72\x69\x6e\x67\x0\x0\x0\x20\x0\x0\x0\x0\x47\x0\x13\x0\x2\x0\x0\x0\x74\x0\x2\x69\x64\x0\x0\x0\x1\x0\x6\x73\x74\x72\x69\x6e\x67\x0\x0\x0\x20\x0\x10\x0\x0\x0\x1\x0\x0\x0\x20\x0\x0\x0\x1\x0\x0\x0\x20\x0\x0\x0\x1\x0\x6\x73\x74\x72\x69\x6e\x67\x0\x6\x73\x74\x72\x69\x6e\x67\x0\x0\x0\x20\x0\x0\x0\x0\x47\x0\x13\x0\x3\x0\x0\x0\x75\x0\x2\x69\x64\x0\x0\x0\x1\x0\x6\x73\x74\x72\x69\x6e\x67\x0\x0\x0\x20\x0\x10\x0\x0\x0\x1\x0\x0\x0\x20\x0\x0\x0\x1\x0\x0\x0\x20\x0\x0\x0\x1\x0\x6\x73\x74\x72\x69\x6e\x67\x0\x6\x73\x74\x72\x69\x6e\x67\x0\x0\x0\x20\x0\x0\x0\x0\x47\x0\x13\x0\x4\x0\x0\x0\x76\x0\x2\x69\x64\x0\x0\x0\x1\x0\x6\x73\x74\x72\x69\x6e\x67\x0\x0\x0\x20\x0\x10\x0\x0\x0\x1\x0\x0\x0\x20\x0\x0\x0\x1\x0\x0\x0\x20\x0\x0\x0\x1\x0\x6\x73\x74\x72\x69\x6e\x67\x0\x6\x73\x74\x72\x69\x6e\x67\x0\x0\x0\x20\x0\x0\x0\x0\x65\x0\x13\x0\x5\x0\x0\x0\x77\x0\x2\x69\x64\x0\x2\x7\x73\x74\x72\x69\x6e\x67\x0\x0\x0\x20\x0\x10\x2\x0\x0\x0\x20\x2\x0\x0\x0\x20\x2\xa\x3\x1\x2\x3\x14\x3\x4\x5\x6\x2\x7\x73\x74\x72\x69\x6e\x67\x7\x73\x74\x72\x69\x6e\x67\x2\xa\x3\x1\x2\x3\x14\x3\x4\x5\x6\x2\xa\x3\x1\x2\x3\x14\x3\x4\x5\x6\x0\x0\x0\x20\x0\x2\xa\x3\x1\x2\x3\x14\x3\x4\x5\x6\x0\x0\x0\x1c\x0\x14\x0\x0\x0\x0\x0\x78\x0\x2\x69\x64\x0\x0\x0\x1\x0\x6\x73\x74\x72\x69\x6e\x67\x0\x0\x0\x20\x0\x0\x0\x1c\x0\x14\x0\x1\x0\x0\x0\x79\x0\x2\x69\x64\x0\x0\x0\x1\x0\x6\x73\x74\x72\x69\x6e\x67\x0\x0\x0\x20\x0\x0\x0\x1c\x0\x14\x0\x2\x0\x0\x0\x7a\x0\x2\x69\x64\x0\x0\x0\x1\x0\x6\x73\x74\x72\x69\x6e\x67\x0\x0\x0\x20\x0\x0\x0\x1c\x0\x14\x0\x3\x0\x0\x0\x7b\x0\x2\x69\x64\x0\x0\x0\x1\x0\x6\x73\x74\x72\x69\x6e\x67\x0\x0\x0\x20\x0\x0\x0\x24\x0\x14\x0\x4\x0\x0\x0\x7c\x0\x2\x69\x64\x0\x2\x7\x73\x74\x72\x69\x6e\x67\x0\x0\x0\x20\x2\xa\x3\x1\x2\x3\x14\x3\x4\x5\x6\x0\x0\x0\x2c\x0\x15\x0\x0\x0\x0\x0\x7d\x0\x2\x69\x64\x0\x0\x0\x1\x0\x6\x73\x74\x72\x69\x6e\x67\x0\x0\x0\x1\x0\x0\x0\x20\x0\x0\x0\x0\x0\x0\x0\x40\x0\x0\x0\x20\x0\x0\x0\x2c\x0\x15\x0\x1\x0\x0\x0\x7e\x0\x2\x69\x64\x0\x0\x0\x1\x0\x6\x73\x74\x72\x69\x6e\x67\x0\x0\x0\x1\x0\x0\x0\x20\x0\x0\x0\x0\x0\x0\x0\x40\x0\x0\x0\x20\x0\x0\x0\x18\x0\x16\x0\x0\x0\x0\x0\x7f\x0\x2\x69\x64\x0\x6\x73\x74\x72\x69\x6e\x67\x0\x0\x0\x20\x0\x0\x0\x18\x0\x16\x0\x1\x0\x0\x0\x80\x0\x2\x69\x64\x0\x6\x73\x74\x72\x69\x6e\x67\x0\x0\x0\x20\x0\x0\x0\x23\x0\x16\x0\x2\x0\x0\x0\x81\x0\x2\x69\x64\x0\x7\x73\x74\x72\x69\x6e\x67\x0\x0\x0\x20\x2\xa\x3\x1\x2\x3\x14\x3\x4\x5\x6\x0\x0\x0\x24\x0\x17\x0\x0\x0\x0\x0\x82\x0\x2\x69\x64\x0\x0\x0\x1\x0\x6\x73\x74\x72\x69\x6e\x67\x0\x0\x0\x1\x0\x0\x0\x20\x0\x0\x0\x20\x0\x0\x0\x24\x0\x17\x0\x1\x0\x0\x0\x83\x0\x2\x69\x64\x0\x0\x0\x1\x0\x6\x73\x74\x72\x69\x6e\x67\x0\x0\x0\x1\x0\x0\x0\x20\x0\x0\x0\x20\x0\x0\x0\x28\x0\x17\x0\x2\x0\x0\x0\x84\x0\x2\x69\x64\x0\x0\x0\x1\x0\x6\x73\x74\x72\x69\x6e\x67\x0\x0\x0\x1\x0\x0\x0\x20\x0\x0\x0\x20\x0\x0\x0\x20\x0\x0\x0\x2c\x0\x17\x0\x3\x0\x0\x0\x85\x0\x2\x69\x64\x0\x0\x0\x20\x0\x0\x0\x1\x0\x6\x73\x74\x72\x69\x6e\x67\x0\x0\x0\x1\x0\x0\x0\x20\x0\x0\x0\x20\x0\x0\x0\x20\x0\x0\x0\x32\x0\x18\x0\x0\x0\x0\x0\x86\x0\x2\x69\x64\x0\x6\x73\x74\x72\x69\x6e\x67\x0\x0\x0\x0\x0\x0\x0\x40\x0\x10\x0\x0\x0\x1\x0\x6\x73\x74\x72\x69\x6e\x67\x0\x0\x0\x1\x0\x0\x0\x20\x0\x0\x0\x32\x0\x18\x0\x1\x0\x0\x0\x87\x0\x2\x69\x64\x0\x6\x73\x74\x72\x69\x6e\x67\x0\x0\x0\x0\x0\x0\x0\x40\x0\x10\x0\x0\x0\x1\x0\x6\x73\x74\x72\x69\x6e\x67\x0\x0\x0\x1\x0\x0\x0\x20\x0\x0\x0\x26\x0\x19\x0\x0\x0\x0\x0\x88\x0\x2\x69\x64\x0\x6\x73\x74\x72\x69\x6e\x67\x0\x0\x0\x0\x0\x0\x0\x40\x0\x10\x0\x6\x73\x74\x72\x69\x6e\x67\x0\x0\x0\x26\x0\x19\x0\x1\x0\x0\x0\x89\x0\x2\x69\x64\x0\x6\x73\x74\x72\x69\x6e\x67\x0\x0\x0\x0\x0\x0\x0\x40\x0\x10\x0\x6\x73\x74\x72\x69\x6e\x67\x0\x0\x0\x1f\x0\x1a\x0\x0\x0\x0\x0\x8a\x0\x2\x69\x64\x0\x6\x73\x74\x72\x69\x6e\x67\x0\x0\x0\x0\x0\x0\x0\x40\x0\x10\x0\x0\x0\x0\x1f\x0\x1a\x0\x1\x0\x0\x0\x8b\x0\x2\x69\x64\x0\x6\x73\x74\x72\x69\x6e\x67\x0\x0\x0\x0\x0\x0\x0\x40\x0\x10\x0\x0\x0\x0\x33\x0\x1b\x0\x0\x0\x0\x0\x8c\x0\x2\x69\x64\x0\x0\x0\x1\x0\x0\x0\x0\x0\x0\x0\x40\x0\x10\x0\x0\x0\x0\x1\x0\x6\x73\x74\x72\x69\x6e\x67\x0\x0\x0\x1\x0\x0\x0\x20\x0\x0\x0\x20\x0\x0\x0\x4a\x0\x1c\x0\x0\x0\x0\x0\x8d\x0\x2\x69\x64\x0\x6\x73\x74\x72\x69\x6e\x67\x0\x6\x73\x74\x72\x69\x6e\x67\x0\x0\x0\x0\x0\x0\x0\x40\x0\x10\x0\x0\x0\x1\x0\x6\x73\x74\x72\x69\x6e\x67\x0\x0\x0\x1\x0\x0\x0\x20\x0\x0\x0\x0\x0\x0\x0\x40\x0\x6\x73\x74\x72\x69\x6e\x67\x0\x0\x0\x4a\x0\x1c\x0\x1\x0\x0\x0\x8e\x0\x2\x69\x64\x0\x6\x73\x74\x72\x69\x6e\x67\x0\x6\x73\x74\x72\x69\x6e\x67\x0\x0\x0\x0\x0\x0\x0\x40\x0\x10\x0\x0\x0\x1\x0\x6\x73\x74\x72\x69\x6e\x67\x0\x0\x0\x1\x0\x0\x0\x20\x0\x0\x0\x0\x0\x0\x0\x40\x0\x6\x73\x74\x72\x69\x6e\x67\x0\x0\x0\x4e\x0\x1c\x0\x2\x0\x0\x0\x8f\x0\x2\x69\x64\x0\x6\x73\x74\x72\x69\x6e\x67\x0\x6\x73\x74\x72\x69\x6e\x67\x0\x0\x0\x0\x0\x0\x0\x40\x0\x10\x0\x0\x0\x1\x0\x6\x73\x74\x72\x69\x6e\x67\x0\x0\x0\x1\x0\x0\x0\x20\x0\x0\x0\x0\x0\x0\x0\x40\x0\x0\x0\x20\x0\x6\x73\x74\x72\x69\x6e\x67\x0\x0\x0\x27\x0\x1d\x0\x0\x0\x0\x0\x90\x0\x2\x69\x64\x8\x0\x6\x73\x74\x72\x69\x6e\x67\x0\x6\x73\x74\x72\x69\x6e\x67\x0\x6\x73\x74\x72\x69\x6e\x67\x8\x8\x0\x0\x0\x28\x0\x1d\x0\x1\x0\x0\x0\x91\x0\x2\x69\x64\x8\x0\x6\x73\x74\x72\x69\x6e\x67\x8\x0\x6\x73\x74\x72\x69\x6e\x67\x0\x6\x73\x74\x72\x69\x6e\x67\x8\x8\x0\x0\x0\x2b\x0\x1e\x0\x0\x0\x0\x0\x92\x0\x2\x69\x64\x0\x0\x0\x1\x8\x0\x6\x73\x74\x72\x69\x6e\x67\x0\x6\x73\x74\x72\x69\x6e\x67\x0\x6\x73\x74\x72\x69\x6e\x67\x8\x8\x0\x0\x0\x2c\x0\x1e\x0\x1\x0\x0\x0\x93\x0\x2\x69\x64\x0\x0\x0\x1\x8\x0\x6\x73\x74\x72\x69\x6e\x67\x8\x0\x6\x73\x74\x72\x69\x6e\x67\x0\x6\x73\x74\x72\x69\x6e\x67\x8\x8\x0\x0\x0\x2b\x0\x1f\x0\x0\x0\x0\x0\x94\x0\x2\x69\x64\x0\x0\x0\x1\x8\x0\x6\x73\x74\x72\x69\x6e\x67\x0\x6\x73\x74\x72\x69\x6e\x67\x0\x6\x73\x74\x72\x69\x6e\x67\x8\x8\x0\x0\x0\x2c\x0\x1f\x0\x1\x0\x0\x0\x95\x0\x2\x69\x64\x0\x0\x0\x1\x8\x0\x6\x73\x74\x72\x69\x6e\x67\x8\x0\x6\x73\x74\x72\x69\x6e\x67\x0\x6\x73\x74\x72\x69\x6e\x67\x8\x8\x0\x0\x0\x25\x0\x20\x0\x0\x0\x0\x0\x96\x0\x2\x69\x64\x0\x0\x0\x1\x8\x0\x6\x73\x74\x72\x69\x6e\x67\x0\x0\x0\x1\x0\x6\x73\x74\x72\x69\x6e\x67\x0\x0\x0\x26\x0\x20\x0\x1\x0\x0\x0\x97\x0\x2\x69\x64\x0\x0\x0\x1\x8\x0\x6\x73\x74\x72\x69\x6e\x67\x0\x0\x0\x1\x0\x6\x73\x74\x72\x69\x6e\x67\x0\x0\x0\x0\x26\x0\x20\x0\x2\x0\x0\x0\x98\x0\x2\x69\x64\x0\x0\x0\x1\x8\x0\x6\x73\x74\x72\x69\x6e\x67\x0\x0\x0\x1\x0\x6\x73\x74\x72\x69\x6e\x67\x0\x0\x0\x0\x2e\x0\x21\x0\x0\x0\x0\x0\x99\x0\x2\x69\x64\x0\x0\x0\x1\x8\x0\x6\x73\x74\x72\x69\x6e\x67\x0\x0\x0\x1\x0\x6\x73\x74\x72\x69\x6e\x67\x0\x6\x73\x74\x72\x69\x6e\x67\x0\x0\x0\x0\x2e\x0\x21\x0\x1\x0\x0\x0\x9a\x0\x2\x69\x64\x0\x0\x0\x1\x8\x0\x6\x73\x74\x72\x69\x6e\x67\x0\x0\x0\x1\x0\x6\x73\x74\x72\x69\x6e\x67\x0\x6\x73\x74\x72\x69\x6e\x67\x0\x0\x0\x0\x2c\x0\x22\x0\x0\x0\x0\x0\x9b\x0\x2\x69\x64\x0\x0\x0\x1\x0\x6\x73\x74\x72\x69\x6e\x67\x0\x0\x0\x1\x0\x6\x73\x74\x72\x69\x6e\x67\x0\x0\x0\x1\x0\x0\x0\x20\x0\x0\x0\x2c\x0\x22\x0\x1\x0\x0\x0\x9c\x0\x2\x69\x64\x0\x0\x0\x1\x0\x6\x73\x74\x72\x69\x6e\x67\x0\x0\x0\x1\x0\x6\x73\x74\x72\x69\x6e\x67\x0\x0\x0\x1\x0\x0\x0\x20\x0\x0\x0\x20\x0\x23\x0\x0\x0\x0\x0\x9d\x0\x2\x69\x64\x0\x0\x0\x1\x0\x6\x73\x74\x72\x69\x6e\x67\x0\x0\x0\x1\x0\x0\x0\x20\x0\x0\x0\x20\x0\x23\x0\x1\x0\x0\x0\x9e\x0\x2\x69\x64\x0\x0\x0\x1\x0\x6\x73\x74\x72\x69\x6e\x67\x0\x0\x0\x1\x0\x0\x0\x20\x0\x0\x0\x14\x0\x24\x0\x0\x0\x0\x0\x9f\x0\x2\x69\x64\x0\x0\x0\x4\x0\x1\x2\x3\x0\x0\x0\x14\x0\x24\x0\x1\x0\x0\x0\xa0\x0\x2\x69\x64\x0\x0\x0\x4\x0\x1\x2\x3\x0\x0\x0\x2d\x0\x25\x0\x0\x0\x0\x0\xa1\x0\x2\x69\x64\x0\x0\x0\x1\x0\x6\x73\x74\x72\x69\x6e\x67\x0\x0\x0\x20\x0\x0\x0\x1\x0\x0\x0\x1\x0\x0\x0\x20\x0\x0\x0\x20\x0\x0\x0\x0\x2d\x0\x25\x0\x1\x0\x0\x0\xa2\x0\x2\x69\x64\x0\x0\x0\x1\x0\x6\x73\x74\x72\x69\x6e\x67\x0\x0\x0\x20\x0\x0\x0\x1\x0\x0\x0\x1\x0\x0\x0\x20\x0\x0\x0\x20\x0\x0\x0\x0\x28\x0\x26\x0\x0\x0\x0\x0\xa3\x0\x2\x69\x64\x0\x0\x0\x1\x0\x6\x73\x74\x72\x69\x6e\x67\x0\x6\x73\x74\x72\x69\x6e\x67\x0\x0\x0\x0\x0\x0\x0\x40\x0\x0\x0\x28\x0\x26\x0\x1\x0\x0\x0\xa4\x0\x2\x69\x64\x0\x0\x0\x1\x0\x6\x73\x74\x72\x69\x6e\x67\x0\x6\x73\x74\x72\x69\x6e\x67\x0\x0\x0\x0\x0\x0\x0\x40\x0\x0\x0\x3a\x0\x26\x0\x2\x0\x0\x0\xa5\x0\x2\x69\x64\x0\x2\x7\x73\x74\x72\x69\x6e\x67\x7\x73\x74\x72\x69\x6e\x67\x2\xa\x3\x1\x2\x3\x14\x3\x4\x5\x6\x0\x0\x0\x0\x0\x0\x0\x40\x2\xa\x3\x1\x2\x3\x14\x3\x4\x5\x6\x0\x0\x0\x1c\x0\x27\x0\x0\x0\x0\x0\xa6\x0\x2\x69\x64\x0\x0\x0\x4\x0\x1\x2\x3\x0\x0\x0\x0\x0\x0\x0\x40\x0\x0\x0\x1c\x0\x27\x0\x1\x0\x0\x0\xa7\x0\x2\x69\x64\x0\x0\x0\x4\x0\x1\x2\x3\x0\x0\x0\x0\x0\x0\x0\x40\x0\x0\x0\x1c\x0\x28\x0\x0\x0\x0\x0\xa8\x0\x2\x69\x64\x0\x0\x0\x4\x0\x1\x2\x3\x0\x0\x0\x0\x0\x0\x0\x40\x0\x0\x0\x1c\x0\x28\x0\x1\x0\x0\x0\xa9\x0\x2\x69\x64\x0\x0\x0\x4\x0\x1\x2\x3\x0\x0\x0\x0\x0\x0\x0\x40\x0\x0\x0\x20\x0\x29\x0\x0\x0\x0\x0\xaa\x0\x2\x69\x64\x0\x0\x0\x1\x0\x6\x73\x74\x72\x69\x6e\x67\x0\x6\x73\x74\x72\x69\x6e\x67\x0\x0\x0\x20\x0\x29\x0\x1\x0\x0\x0\xab\x0\x2\x69\x64\x0\x0\x0\x1\x0\x6\x73\x74\x72\x69\x6e\x67\x0\x6\x73\x74\x72\x69\x6e\x67\x0\x0\x0\x18\x0\x2a\x0\x0\x0\x0\x0\xac\x0\x2\x69\x64\x0\x0\x0\x1\x0\x6\x73\x74\x72\x69\x6e\x67\x0\x0\x0\x18\x0\x2a\x0\x1\x0\x0\x0\xad\x0\x2\x69\x64\x0\x0\x0\x1\x0\x6\x73\x74\x72\x69\x6e\x67\x0\x0\x0\x20\x0\x2a\x0\x2\x0\x0\x0\xae\x0\x2\x69\x64\x0\x2\x7\x73\x74\x72\x69\x6e\x67\x2\xa\x3\x1\x2\x3\x14\x3\x4\x5\x6\x0\x0\x0\x24\x0\x2b\x0\x0\x0\x0\x0\xaf\x0\x2\x69\x64\x0\x0\x0\x1\x0\x6\x73\x74\x72\x69\x6e\x67\x0\x0\x0\x1\x0\x0\x0\x20\x0\x0\x0\x20\x0\x0\x0\x25\x0\x2b\x0\x1\x0\x0\x0\xb0\x0\x2\x69\x64\x8\x0\x0\x0\x1\x0\x6\x73\x74\x72\x69\x6e\x67\x0\x0\x0\x1\x0\x0\x0\x20\x0\x0\x0\x20\x0\x0\x0\x35\x0\x2b\x0\x2\x0\x0\x0\xb1\x0\x2\x69\x64\x0\x8\x2\x7\x73\x74\x72\x69\x6e\x67\x2\x0\x0\x0\x20\x2\xa\x3\x1\x2\x3\x14\x3\x4\x5\x6\x0\x0\x0\x20\x2\xa\x3\x1\x2\x3\x14\x3\x4\x5\x6\x0\x0\x0\x2f\x0\x2c\x0\x0\x0\x0\x0\xb2\x0\x2\x69\x64\x0\x0\x0\x1\x8\x0\x6\x73\x74\x72\x69\x6e\x67\x0\x0\x0\x1\x0\x6\x73\x74\x72\x69\x6e\x67\x8\x0\x6\x73\x74\x72\x69\x6e\x67\x0\x0\x0\x0\x48\x0\x2c\x0\x1\x0\x0\x0\xb3\x0\x2\x69\x64\x0\x2\x8\x7\x73\x74\x72\x69\x6e\x67\x2\x7\x73\x74\x72\x69\x6e\x67\x8\x7\x73\x74\x72\x69\x6e\x67\x2\xa\x3\x1\x2\x3\x14\x3\x4\x5\x6\x2\xa\x3\x1\x2\x3\x14\x3\x4\x5\x6\x0\x2\xa\x3\x1\x2\x3\x14\x3\x4\x5\x6\x0\x0\x0\x44\x0\x2d\x0\x0\x0\x0\x0\xb4\x0\x2\x69\x64\x0\x0\x0\x0\x20\x2\x7\x73\x74\x72\x69\x6e\x67\x2\x0\x0\x0\x20\x2\x0\x0\x0\x20\x2\xa\x3\x1\x2\x3\x14\x3\x4\x5\x6\x2\xa\x3\x1\x2\x3\x14\x3\x4\x5\x6\x2\xa\x3\x1\x2\x3\x14\x3\x4\x5\x6\x0\x0\x0\x34\x0\x2e\x0\x0\x0\x0\x0\xb5\x0\x2\x69\x64\x0\x0\x0\x0\x20\x2\x7\x73\x74\x72\x69\x6e\x67\x2\x0\x0\x0\x20\x2\xa\x3\x1\x2\x3\x14\x3\x4\x5\x6\x2\xa\x3\x1\x2\x3\x14\x3\x4\x5\x6\x0\x0\x0\x28\x0\x2f\x0\x0\x0\x0\x0\xb6\x0\x2\x69\x64\x0\x6\x73\x74\x72\x69\x6e\x67\x0\x0\x0\x1\x0\x6\x73\x74\x72\x69\x6e\x67\x0\x0\x0\x1\x0\x0\x0\x20" + } +} +actions { + advance_time { + milliseconds: 10000 + } +} diff --git a/test/extensions/filters/network/common/fuzz/network_readfilter_corpus/kafka_request1 b/test/extensions/filters/network/common/fuzz/network_readfilter_corpus/kafka_request1 new file mode 100644 index 000000000000..67bac6bc4f7f --- /dev/null +++ b/test/extensions/filters/network/common/fuzz/network_readfilter_corpus/kafka_request1 @@ -0,0 +1,17 @@ +config { + name: "envoy.filters.network.kafka_broker" + typed_config { + type_url: "type.googleapis.com/envoy.extensions.filters.network.kafka_broker.v3.KafkaBroker" + value: "\n\"envoy.filters.network.kafka_broker" + } +} +actions { + on_new_connection { + } +} +actions { + on_data { + data:"\x7f\xff\xff\xff\x0\x0\x0\x0\x0\x0\x0\x0\x80\x0" + } +} + diff --git a/test/extensions/filters/network/common/fuzz/network_readfilter_corpus/kafka_unknown_request b/test/extensions/filters/network/common/fuzz/network_readfilter_corpus/kafka_unknown_request new file mode 100644 index 000000000000..f253ba9bfe58 --- /dev/null +++ b/test/extensions/filters/network/common/fuzz/network_readfilter_corpus/kafka_unknown_request @@ -0,0 +1,21 @@ +config { + name: "envoy.filters.network.kafka_broker" + typed_config { + type_url: "type.googleapis.com/envoy.extensions.filters.network.kafka_broker.v3.KafkaBroker" + value: "\n\"envoy.filters.network.kafka_broker" + } +} +actions { + on_new_connection { + } +} +actions { + on_data { + data:"\x0\x0\x0\x1d\x7f\xff\x0\x0\x0\x0\x0\x0\x0\x9\x63\x6c\x69\x65\x6e\x74\x2d\x69\x64\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0" + } +} +actions { + advance_time { + milliseconds: 10000 + } +} diff --git a/test/extensions/filters/network/common/fuzz/network_readfilter_corpus/redis_proxy_1_auth_no_pwd_set b/test/extensions/filters/network/common/fuzz/network_readfilter_corpus/redis_proxy_1_auth_no_pwd_set new file mode 100644 index 000000000000..1caceeb6b610 --- /dev/null +++ b/test/extensions/filters/network/common/fuzz/network_readfilter_corpus/redis_proxy_1_auth_no_pwd_set @@ -0,0 +1,24 @@ +config { + name: "envoy.filters.network.redis_proxy" + typed_config { + type_url: "type.googleapis.com/envoy.extensions.filters.network.redis_proxy.v3.RedisProxy" + value: "\n\001N\032\032\n\005\020\200\200\200\030\030\001 \377\377\377\337\017*\005\020\200\200\200\0302\000@\001*\010\n\006\032\004\001\000\000\010" + } +} +actions { + on_new_connection { + + } +} + +actions { + on_data { + data: "\x2a\x32\xd\xa\x24\x34\xd\xa\x61\x75\x74\x68\xd\xa\x24\x31\x32\xd\xa\x73\x6f\x6d\x65\x70\x61\x73\x73\x77\x6f\x72\x64\xd\xa" + } +} +actions { + on_data { + data: "0" + end_stream: true + } +} diff --git a/test/extensions/filters/network/common/fuzz/network_readfilter_corpus/redis_proxy_1_auth_pwd_set b/test/extensions/filters/network/common/fuzz/network_readfilter_corpus/redis_proxy_1_auth_pwd_set new file mode 100644 index 000000000000..ab9e717de323 --- /dev/null +++ b/test/extensions/filters/network/common/fuzz/network_readfilter_corpus/redis_proxy_1_auth_pwd_set @@ -0,0 +1,24 @@ +config { + name: "envoy.filters.network.redis_proxy" + typed_config { + type_url: "type.googleapis.com/envoy.extensions.filters.network.redis_proxy.v3.RedisProxy" + value: "\xa\x61\x64\x6d\x69\x6e\x3a\xa\x20\x20\x61\x63\x63\x65\x73\x73\x5f\x6c\x6f\x67\x5f\x70\x61\x74\x68\x3a\x20\x2f\x64\x65\x76\x2f\x6e\x75\x6c\x6c\xa\x20\x20\x61\x64\x64\x72\x65\x73\x73\x3a\xa\x20\x20\x20\x20\x73\x6f\x63\x6b\x65\x74\x5f\x61\x64\x64\x72\x65\x73\x73\x3a\xa\x20\x20\x20\x20\x20\x20\x61\x64\x64\x72\x65\x73\x73\x3a\x20\x31\x32\x37\x2e\x30\x2e\x30\x2e\x31\xa\x20\x20\x20\x20\x20\x20\x70\x6f\x72\x74\x5f\x76\x61\x6c\x75\x65\x3a\x20\x30\xa\x73\x74\x61\x74\x69\x63\x5f\x72\x65\x73\x6f\x75\x72\x63\x65\x73\x3a\xa\x20\x20\x63\x6c\x75\x73\x74\x65\x72\x73\x3a\xa\x20\x20\x20\x20\x2d\x20\x6e\x61\x6d\x65\x3a\x20\x63\x6c\x75\x73\x74\x65\x72\x5f\x30\xa\x20\x20\x20\x20\x20\x20\x74\x79\x70\x65\x3a\x20\x53\x54\x41\x54\x49\x43\xa\x20\x20\x20\x20\x20\x20\x6c\x62\x5f\x70\x6f\x6c\x69\x63\x79\x3a\x20\x52\x41\x4e\x44\x4f\x4d\xa\x20\x20\x20\x20\x20\x20\x6c\x6f\x61\x64\x5f\x61\x73\x73\x69\x67\x6e\x6d\x65\x6e\x74\x3a\xa\x20\x20\x20\x20\x20\x20\x20\x20\x63\x6c\x75\x73\x74\x65\x72\x5f\x6e\x61\x6d\x65\x3a\x20\x63\x6c\x75\x73\x74\x65\x72\x5f\x30\xa\x20\x20\x20\x20\x20\x20\x20\x20\x65\x6e\x64\x70\x6f\x69\x6e\x74\x73\x3a\xa\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x2d\x20\x6c\x62\x5f\x65\x6e\x64\x70\x6f\x69\x6e\x74\x73\x3a\xa\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x2d\x20\x65\x6e\x64\x70\x6f\x69\x6e\x74\x3a\xa\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x61\x64\x64\x72\x65\x73\x73\x3a\xa\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x73\x6f\x63\x6b\x65\x74\x5f\x61\x64\x64\x72\x65\x73\x73\x3a\xa\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x61\x64\x64\x72\x65\x73\x73\x3a\x20\x31\x32\x37\x2e\x30\x2e\x30\x2e\x31\xa\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x70\x6f\x72\x74\x5f\x76\x61\x6c\x75\x65\x3a\x20\x30\xa\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x2d\x20\x65\x6e\x64\x70\x6f\x69\x6e\x74\x3a\xa\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x61\x64\x64\x72\x65\x73\x73\x3a\xa\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x73\x6f\x63\x6b\x65\x74\x5f\x61\x64\x64\x72\x65\x73\x73\x3a\xa\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x61\x64\x64\x72\x65\x73\x73\x3a\x20\x31\x32\x37\x2e\x30\x2e\x30\x2e\x31\xa\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x70\x6f\x72\x74\x5f\x76\x61\x6c\x75\x65\x3a\x20\x30\xa\x20\x20\x6c\x69\x73\x74\x65\x6e\x65\x72\x73\x3a\xa\x20\x20\x20\x20\x6e\x61\x6d\x65\x3a\x20\x6c\x69\x73\x74\x65\x6e\x65\x72\x5f\x30\xa\x20\x20\x20\x20\x61\x64\x64\x72\x65\x73\x73\x3a\xa\x20\x20\x20\x20\x20\x20\x73\x6f\x63\x6b\x65\x74\x5f\x61\x64\x64\x72\x65\x73\x73\x3a\xa\x20\x20\x20\x20\x20\x20\x20\x20\x61\x64\x64\x72\x65\x73\x73\x3a\x20\x31\x32\x37\x2e\x30\x2e\x30\x2e\x31\xa\x20\x20\x20\x20\x20\x20\x20\x20\x70\x6f\x72\x74\x5f\x76\x61\x6c\x75\x65\x3a\x20\x30\xa\x20\x20\x20\x20\x66\x69\x6c\x74\x65\x72\x5f\x63\x68\x61\x69\x6e\x73\x3a\xa\x20\x20\x20\x20\x20\x20\x66\x69\x6c\x74\x65\x72\x73\x3a\xa\x20\x20\x20\x20\x20\x20\x20\x20\x6e\x61\x6d\x65\x3a\x20\x72\x65\x64\x69\x73\xa\x20\x20\x20\x20\x20\x20\x20\x20\x74\x79\x70\x65\x64\x5f\x63\x6f\x6e\x66\x69\x67\x3a\xa\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x22\x40\x74\x79\x70\x65\x22\x3a\x20\x74\x79\x70\x65\x2e\x67\x6f\x6f\x67\x6c\x65\x61\x70\x69\x73\x2e\x63\x6f\x6d\x2f\x65\x6e\x76\x6f\x79\x2e\x63\x6f\x6e\x66\x69\x67\x2e\x66\x69\x6c\x74\x65\x72\x2e\x6e\x65\x74\x77\x6f\x72\x6b\x2e\x72\x65\x64\x69\x73\x5f\x70\x72\x6f\x78\x79\x2e\x76\x32\x2e\x52\x65\x64\x69\x73\x50\x72\x6f\x78\x79\xa\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x73\x74\x61\x74\x5f\x70\x72\x65\x66\x69\x78\x3a\x20\x72\x65\x64\x69\x73\x5f\x73\x74\x61\x74\x73\xa\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x70\x72\x65\x66\x69\x78\x5f\x72\x6f\x75\x74\x65\x73\x3a\xa\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x63\x61\x74\x63\x68\x5f\x61\x6c\x6c\x5f\x72\x6f\x75\x74\x65\x3a\xa\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x63\x6c\x75\x73\x74\x65\x72\x3a\x20\x63\x6c\x75\x73\x74\x65\x72\x5f\x30\xa\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x73\x65\x74\x74\x69\x6e\x67\x73\x3a\xa\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x6f\x70\x5f\x74\x69\x6d\x65\x6f\x75\x74\x3a\x20\x35\x73\xa\xa\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x64\x6f\x77\x6e\x73\x74\x72\x65\x61\x6d\x5f\x61\x75\x74\x68\x5f\x70\x61\x73\x73\x77\x6f\x72\x64\x3a\x20\x7b\x20\x69\x6e\x6c\x69\x6e\x65\x5f\x73\x74\x72\x69\x6e\x67\x3a\x20\x73\x6f\x6d\x65\x70\x61\x73\x73\x77\x6f\x72\x64\x20\x7d\xa" + } +} +actions { + on_new_connection { + + } +} + +actions { + on_data { + data: "\x2a\x32\xd\xa\x24\x34\xd\xa\x61\x75\x74\x68\xd\xa\x24\x31\x32\xd\xa\x73\x6f\x6d\x65\x70\x61\x73\x73\x77\x6f\x72\x64\xd\xa" + } +} +actions { + on_data { + data: "0" + end_stream: true + } +} diff --git a/test/extensions/filters/network/common/fuzz/network_readfilter_corpus/redis_proxy_1_bulk_string b/test/extensions/filters/network/common/fuzz/network_readfilter_corpus/redis_proxy_1_bulk_string new file mode 100644 index 000000000000..2e52f9a217c2 --- /dev/null +++ b/test/extensions/filters/network/common/fuzz/network_readfilter_corpus/redis_proxy_1_bulk_string @@ -0,0 +1,24 @@ +config { + name: "envoy.filters.network.redis_proxy" + typed_config { + type_url: "type.googleapis.com/envoy.extensions.filters.network.redis_proxy.v3.RedisProxy" + value: "\n\001N\032\032\n\005\020\200\200\200\030\030\001 \377\377\377\337\017*\005\020\200\200\200\0302\000@\001*\010\n\006\032\004\001\000\000\010" + } +} +actions { + on_new_connection { + + } +} + +actions { + on_data { + data: "\x24\x31\x31\xd\xa\x62\x75\x6c\x6b\x20\x73\x74\x72\x69\x6e\x67\xd\xa" + } +} +actions { + on_data { + data: "0" + end_stream: true + } +} diff --git a/test/extensions/filters/network/common/fuzz/network_readfilter_corpus/redis_proxy_1_negative_large_integer b/test/extensions/filters/network/common/fuzz/network_readfilter_corpus/redis_proxy_1_negative_large_integer new file mode 100644 index 000000000000..00a8b3bab8d6 --- /dev/null +++ b/test/extensions/filters/network/common/fuzz/network_readfilter_corpus/redis_proxy_1_negative_large_integer @@ -0,0 +1,24 @@ +config { + name: "envoy.filters.network.redis_proxy" + typed_config { + type_url: "type.googleapis.com/envoy.extensions.filters.network.redis_proxy.v3.RedisProxy" + value: "\n\001N\032\032\n\005\020\200\200\200\030\030\001 \377\377\377\337\017*\005\020\200\200\200\0302\000@\001*\010\n\006\032\004\001\000\000\010" + } +} +actions { + on_new_connection { + + } +} + +actions { + on_data { + data: "\x2a\x32\xd\xa\x2a\x33\xd\xa\x24\x35\xd\xa\x68\x65\x6c\x6c\x6f\xd\xa\x3a\x30\xd\xa\x24\x2d\x31\xd\xa\x24\x35\xd\xa\x77\x6f\x72\x6c\x64\xd\xa" + } +} +actions { + on_data { + data: "0" + end_stream: true + } +} diff --git a/test/extensions/filters/network/common/fuzz/network_readfilter_corpus/redis_proxy_1_nested_array b/test/extensions/filters/network/common/fuzz/network_readfilter_corpus/redis_proxy_1_nested_array new file mode 100644 index 000000000000..00a8b3bab8d6 --- /dev/null +++ b/test/extensions/filters/network/common/fuzz/network_readfilter_corpus/redis_proxy_1_nested_array @@ -0,0 +1,24 @@ +config { + name: "envoy.filters.network.redis_proxy" + typed_config { + type_url: "type.googleapis.com/envoy.extensions.filters.network.redis_proxy.v3.RedisProxy" + value: "\n\001N\032\032\n\005\020\200\200\200\030\030\001 \377\377\377\337\017*\005\020\200\200\200\0302\000@\001*\010\n\006\032\004\001\000\000\010" + } +} +actions { + on_new_connection { + + } +} + +actions { + on_data { + data: "\x2a\x32\xd\xa\x2a\x33\xd\xa\x24\x35\xd\xa\x68\x65\x6c\x6c\x6f\xd\xa\x3a\x30\xd\xa\x24\x2d\x31\xd\xa\x24\x35\xd\xa\x77\x6f\x72\x6c\x64\xd\xa" + } +} +actions { + on_data { + data: "0" + end_stream: true + } +} diff --git a/test/extensions/filters/network/common/fuzz/network_readfilter_corpus/redis_proxy_1_null b/test/extensions/filters/network/common/fuzz/network_readfilter_corpus/redis_proxy_1_null new file mode 100644 index 000000000000..9e1e03be28fa --- /dev/null +++ b/test/extensions/filters/network/common/fuzz/network_readfilter_corpus/redis_proxy_1_null @@ -0,0 +1,24 @@ +config { + name: "envoy.filters.network.redis_proxy" + typed_config { + type_url: "type.googleapis.com/envoy.extensions.filters.network.redis_proxy.v3.RedisProxy" + value: "\n\001N\032\032\n\005\020\200\200\200\030\030\001 \377\377\377\337\017*\005\020\200\200\200\0302\000@\001*\010\n\006\032\004\001\000\000\010" + } +} +actions { + on_new_connection { + + } +} + +actions { + on_data { + data: "\x24\x2d\x31\xd\xa" + } +} +actions { + on_data { + data: "0" + end_stream: true + } +} diff --git a/test/extensions/filters/network/common/fuzz/network_readfilter_corpus/rocketmq_proxy_end_stream b/test/extensions/filters/network/common/fuzz/network_readfilter_corpus/rocketmq_proxy_end_stream new file mode 100644 index 000000000000..0b7acac3be1c --- /dev/null +++ b/test/extensions/filters/network/common/fuzz/network_readfilter_corpus/rocketmq_proxy_end_stream @@ -0,0 +1,22 @@ +config { + name: "envoy.filters.network.rocketmq_proxy" + typed_config { + type_url: "type.googleapis.com/envoy.extensions.filters.network.rocketmq_proxy.v3.RocketmqProxy" + value: "\xa\x4\x74\x65\x73\x74\x12\x31\xa\xd\x64\x65\x66\x61\x75\x6c\x74\x5f\x72\x6f\x75\x74\x65\x12\x20\xa\xe\xa\xc\xa\xa\x74\x65\x73\x74\x5f\x74\x6f\x70\x69\x63\x12\xe\xa\xc\x66\x61\x6b\x65\x5f\x63\x6c\x75\x73\x74\x65\x72" + } +} + +actions { + on_data { + data: "\x0\x0\x0\xa5\x0\x0\x0\xa1\x7b\x22\x66\x6c\x61\x67\x22\x3a\x30\x2c\x22\x63\x6f\x64\x65\x22\x3a\x33\x35\x2c\x22\x65\x78\x74\x46\x69\x65\x6c\x64\x73\x22\x3a\x7b\x22\x63\x6f\x6e\x73\x75\x6d\x65\x72\x47\x72\x6f\x75\x70\x22\x3a\x22\x74\x65\x73\x74\x5f\x63\x67\x22\x2c\x22\x63\x6c\x69\x65\x6e\x74\x49\x44\x22\x3a\x22\x74\x65\x73\x74\x5f\x63\x6c\x69\x65\x6e\x74\x5f\x69\x64\x22\x7d\x2c\x22\x6f\x70\x61\x71\x75\x65\x22\x3a\x37\x2c\x22\x73\x65\x72\x69\x61\x6c\x69\x7a\x65\x54\x79\x70\x65\x43\x75\x72\x72\x65\x6e\x74\x52\x50\x43\x22\x3a\x22\x4a\x53\x4f\x4e\x22\x2c\x22\x76\x65\x72\x73\x69\x6f\x6e\x22\x3a\x30\x2c\x22\x6c\x61\x6e\x67\x75\x61\x67\x65\x22\x3a\x22\x43\x50\x50\x22\x7d" + end_stream: yes + } +} + +actions { + on_data { + data: "" + end_stream: yes + } +} + diff --git a/test/extensions/filters/network/common/fuzz/network_readfilter_corpus/rocketmq_proxy_invalid_header b/test/extensions/filters/network/common/fuzz/network_readfilter_corpus/rocketmq_proxy_invalid_header new file mode 100644 index 000000000000..4053e4278c2b --- /dev/null +++ b/test/extensions/filters/network/common/fuzz/network_readfilter_corpus/rocketmq_proxy_invalid_header @@ -0,0 +1,15 @@ +config { + name: "envoy.filters.network.rocketmq_proxy" + typed_config { + type_url: "type.googleapis.com/envoy.extensions.filters.network.rocketmq_proxy.v3.RocketmqProxy" + value: "\xa\x4\x74\x65\x73\x74\x12\x31\xa\xd\x64\x65\x66\x61\x75\x6c\x74\x5f\x72\x6f\x75\x74\x65\x12\x20\xa\xe\xa\xc\xa\xa\x74\x65\x73\x74\x5f\x74\x6f\x70\x69\x63\x12\xe\xa\xc\x66\x61\x6b\x65\x5f\x63\x6c\x75\x73\x74\x65\x72" + } +} + +actions { + on_data { + data: "\x0\x0\x0\x1c\x1\x0\x0\x14\x72\x61\x6e\x64\x6f\x6d\x20\x74\x65\x78\x74\x20\x73\x75\x66\x66\x69\x63\x65\x73" + end_stream: false + } +} + diff --git a/test/extensions/filters/network/common/fuzz/network_readfilter_corpus/rocketmq_proxy_on_ack_msg b/test/extensions/filters/network/common/fuzz/network_readfilter_corpus/rocketmq_proxy_on_ack_msg new file mode 100644 index 000000000000..8958ca2fe195 --- /dev/null +++ b/test/extensions/filters/network/common/fuzz/network_readfilter_corpus/rocketmq_proxy_on_ack_msg @@ -0,0 +1,15 @@ +config { + name: "envoy.filters.network.rocketmq_proxy" + typed_config { + type_url: "type.googleapis.com/envoy.extensions.filters.network.rocketmq_proxy.v3.RocketmqProxy" + value: "\xa\x4\x74\x65\x73\x74\x12\x31\xa\xd\x64\x65\x66\x61\x75\x6c\x74\x5f\x72\x6f\x75\x74\x65\x12\x20\xa\xe\xa\xc\xa\xa\x74\x65\x73\x74\x5f\x74\x6f\x70\x69\x63\x12\xe\xa\xc\x66\x61\x6b\x65\x5f\x63\x6c\x75\x73\x74\x65\x72" + } +} + +actions { + on_data { + data: "\x0\x0\x0\xcf\x0\x0\x0\xcb\x7b\x22\x6c\x61\x6e\x67\x75\x61\x67\x65\x22\x3a\x22\x43\x50\x50\x22\x2c\x22\x66\x6c\x61\x67\x22\x3a\x30\x2c\x22\x63\x6f\x64\x65\x22\x3a\x35\x31\x2c\x22\x65\x78\x74\x46\x69\x65\x6c\x64\x73\x22\x3a\x7b\x22\x71\x75\x65\x75\x65\x49\x64\x22\x3a\x31\x2c\x22\x74\x6f\x70\x69\x63\x22\x3a\x22\x74\x65\x73\x74\x5f\x74\x6f\x70\x69\x63\x22\x2c\x22\x6f\x66\x66\x73\x65\x74\x22\x3a\x31\x2c\x22\x63\x6f\x6e\x73\x75\x6d\x65\x72\x47\x72\x6f\x75\x70\x22\x3a\x22\x74\x65\x73\x74\x5f\x63\x67\x22\x2c\x22\x65\x78\x74\x72\x61\x49\x6e\x66\x6f\x22\x3a\x22\x74\x65\x73\x74\x5f\x65\x78\x74\x72\x61\x22\x7d\x2c\x22\x6f\x70\x61\x71\x75\x65\x22\x3a\x31\x38\x2c\x22\x73\x65\x72\x69\x61\x6c\x69\x7a\x65\x54\x79\x70\x65\x43\x75\x72\x72\x65\x6e\x74\x52\x50\x43\x22\x3a\x22\x4a\x53\x4f\x4e\x22\x2c\x22\x76\x65\x72\x73\x69\x6f\x6e\x22\x3a\x30\x7d" + end_stream: false + } +} + diff --git a/test/extensions/filters/network/common/fuzz/network_readfilter_corpus/rocketmq_proxy_on_get_topic_route b/test/extensions/filters/network/common/fuzz/network_readfilter_corpus/rocketmq_proxy_on_get_topic_route new file mode 100644 index 000000000000..06b7e3544f95 --- /dev/null +++ b/test/extensions/filters/network/common/fuzz/network_readfilter_corpus/rocketmq_proxy_on_get_topic_route @@ -0,0 +1,15 @@ +config { + name: "envoy.filters.network.rocketmq_proxy" + typed_config { + type_url: "type.googleapis.com/envoy.extensions.filters.network.rocketmq_proxy.v3.RocketmqProxy" + value: "\xa\x4\x74\x65\x73\x74\x12\x31\xa\xd\x64\x65\x66\x61\x75\x6c\x74\x5f\x72\x6f\x75\x74\x65\x12\x20\xa\xe\xa\xc\xa\xa\x74\x65\x73\x74\x5f\x74\x6f\x70\x69\x63\x12\xe\xa\xc\x66\x61\x6b\x65\x5f\x63\x6c\x75\x73\x74\x65\x72" + } +} + +actions { + on_data { + data: "\x0\x0\x0\x86\x0\x0\x0\x82\x7b\x22\x65\x78\x74\x46\x69\x65\x6c\x64\x73\x22\x3a\x7b\x22\x74\x6f\x70\x69\x63\x22\x3a\x22\x74\x65\x73\x74\x5f\x74\x6f\x70\x69\x63\x22\x7d\x2c\x22\x6f\x70\x61\x71\x75\x65\x22\x3a\x31\x33\x2c\x22\x73\x65\x72\x69\x61\x6c\x69\x7a\x65\x54\x79\x70\x65\x43\x75\x72\x72\x65\x6e\x74\x52\x50\x43\x22\x3a\x22\x4a\x53\x4f\x4e\x22\x2c\x22\x76\x65\x72\x73\x69\x6f\x6e\x22\x3a\x30\x2c\x22\x6c\x61\x6e\x67\x75\x61\x67\x65\x22\x3a\x22\x43\x50\x50\x22\x2c\x22\x66\x6c\x61\x67\x22\x3a\x30\x2c\x22\x63\x6f\x64\x65\x22\x3a\x31\x30\x35\x7d" + end_stream: false + } +} + diff --git a/test/extensions/filters/network/common/fuzz/network_readfilter_corpus/rocketmq_proxy_on_heartbeat b/test/extensions/filters/network/common/fuzz/network_readfilter_corpus/rocketmq_proxy_on_heartbeat new file mode 100644 index 000000000000..615e69219a98 --- /dev/null +++ b/test/extensions/filters/network/common/fuzz/network_readfilter_corpus/rocketmq_proxy_on_heartbeat @@ -0,0 +1,15 @@ +config { + name: "envoy.filters.network.rocketmq_proxy" + typed_config { + type_url: "type.googleapis.com/envoy.extensions.filters.network.rocketmq_proxy.v3.RocketmqProxy" + value: "\xa\x4\x74\x65\x73\x74\x12\x31\xa\xd\x64\x65\x66\x61\x75\x6c\x74\x5f\x72\x6f\x75\x74\x65\x12\x20\xa\xe\xa\xc\xa\xa\x74\x65\x73\x74\x5f\x74\x6f\x70\x69\x63\x12\xe\xa\xc\x66\x61\x6b\x65\x5f\x63\x6c\x75\x73\x74\x65\x72" + } +} + +actions { + on_data { + data: "\x0\x0\x4\x7a\x0\x0\x0\x5d\x7b\x22\x6f\x70\x61\x71\x75\x65\x22\x3a\x31\x2c\x22\x73\x65\x72\x69\x61\x6c\x69\x7a\x65\x54\x79\x70\x65\x43\x75\x72\x72\x65\x6e\x74\x52\x50\x43\x22\x3a\x22\x4a\x53\x4f\x4e\x22\x2c\x22\x76\x65\x72\x73\x69\x6f\x6e\x22\x3a\x30\x2c\x22\x6c\x61\x6e\x67\x75\x61\x67\x65\x22\x3a\x22\x43\x50\x50\x22\x2c\x22\x66\x6c\x61\x67\x22\x3a\x30\x2c\x22\x63\x6f\x64\x65\x22\x3a\x33\x34\x7d\xa\x20\x20\x20\x20\x7b\xa\x20\x20\x20\x20\x20\x20\x22\x63\x6c\x69\x65\x6e\x74\x49\x44\x22\x3a\x20\x22\x31\x32\x37\x2e\x30\x2e\x30\x2e\x31\x40\x39\x30\x33\x33\x30\x22\x2c\xa\x20\x20\x20\x20\x20\x20\x22\x63\x6f\x6e\x73\x75\x6d\x65\x72\x44\x61\x74\x61\x53\x65\x74\x22\x3a\x20\x5b\xa\x20\x20\x20\x20\x20\x20\x20\x20\x7b\xa\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x22\x63\x6f\x6e\x73\x75\x6d\x65\x46\x72\x6f\x6d\x57\x68\x65\x72\x65\x22\x3a\x20\x22\x43\x4f\x4e\x53\x55\x4d\x45\x5f\x46\x52\x4f\x4d\x5f\x46\x49\x52\x53\x54\x5f\x4f\x46\x46\x53\x45\x54\x22\x2c\xa\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x22\x63\x6f\x6e\x73\x75\x6d\x65\x54\x79\x70\x65\x22\x3a\x20\x22\x43\x4f\x4e\x53\x55\x4d\x45\x5f\x50\x41\x53\x53\x49\x56\x45\x4c\x59\x22\x2c\xa\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x22\x67\x72\x6f\x75\x70\x4e\x61\x6d\x65\x22\x3a\x20\x22\x74\x65\x73\x74\x5f\x63\x67\x22\x2c\xa\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x22\x6d\x65\x73\x73\x61\x67\x65\x4d\x6f\x64\x65\x6c\x22\x3a\x20\x22\x43\x4c\x55\x53\x54\x45\x52\x49\x4e\x47\x22\x2c\xa\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x22\x73\x75\x62\x73\x63\x72\x69\x70\x74\x69\x6f\x6e\x44\x61\x74\x61\x53\x65\x74\x22\x3a\x20\x5b\xa\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x7b\xa\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x22\x63\x6c\x61\x73\x73\x46\x69\x6c\x74\x65\x72\x4d\x6f\x64\x65\x22\x3a\x20\x66\x61\x6c\x73\x65\x2c\xa\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x22\x63\x6f\x64\x65\x53\x65\x74\x22\x3a\x20\x5b\x5d\x2c\xa\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x22\x65\x78\x70\x72\x65\x73\x73\x69\x6f\x6e\x54\x79\x70\x65\x22\x3a\x20\x22\x54\x41\x47\x22\x2c\xa\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x22\x73\x75\x62\x53\x74\x72\x69\x6e\x67\x22\x3a\x20\x22\x2a\x22\x2c\xa\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x22\x73\x75\x62\x56\x65\x72\x73\x69\x6f\x6e\x22\x3a\x20\x31\x35\x37\x35\x36\x33\x30\x35\x38\x37\x39\x32\x35\x2c\xa\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x22\x74\x61\x67\x73\x53\x65\x74\x22\x3a\x20\x5b\x5d\x2c\xa\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x22\x74\x6f\x70\x69\x63\x22\x3a\x20\x22\x74\x65\x73\x74\x5f\x74\x6f\x70\x69\x63\x22\xa\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x7d\x2c\xa\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x7b\xa\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x22\x63\x6c\x61\x73\x73\x46\x69\x6c\x74\x65\x72\x4d\x6f\x64\x65\x22\x3a\x20\x66\x61\x6c\x73\x65\x2c\xa\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x22\x63\x6f\x64\x65\x53\x65\x74\x22\x3a\x20\x5b\x5d\x2c\xa\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x22\x65\x78\x70\x72\x65\x73\x73\x69\x6f\x6e\x54\x79\x70\x65\x22\x3a\x20\x22\x54\x41\x47\x22\x2c\xa\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x22\x73\x75\x62\x53\x74\x72\x69\x6e\x67\x22\x3a\x20\x22\x2a\x22\x2c\xa\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x22\x73\x75\x62\x56\x65\x72\x73\x69\x6f\x6e\x22\x3a\x20\x31\x35\x37\x35\x36\x33\x30\x35\x38\x37\x39\x34\x35\x2c\xa\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x22\x74\x61\x67\x73\x53\x65\x74\x22\x3a\x20\x5b\x5d\x2c\xa\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x22\x74\x6f\x70\x69\x63\x22\x3a\x20\x22\x25\x52\x45\x54\x52\x59\x25\x70\x6c\x65\x61\x73\x65\x5f\x72\x65\x6e\x61\x6d\x65\x5f\x75\x6e\x69\x71\x75\x65\x5f\x67\x72\x6f\x75\x70\x5f\x6e\x61\x6d\x65\x5f\x34\x22\xa\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x7d\xa\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x5d\x2c\xa\x20\x20\x20\x20\x20\x20\x20\x20\x20\x22\x75\x6e\x69\x74\x4d\x6f\x64\x65\x22\x3a\x20\x66\x61\x6c\x73\x65\xa\x20\x20\x20\x20\x20\x20\x20\x20\x7d\xa\x20\x20\x20\x20\x20\x20\x5d\x2c\xa\x20\x20\x20\x20\x20\x20\x22\x70\x72\x6f\x64\x75\x63\x65\x72\x44\x61\x74\x61\x53\x65\x74\x22\x3a\x20\x5b\xa\x20\x20\x20\x20\x20\x20\x20\x20\x7b\xa\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x22\x67\x72\x6f\x75\x70\x4e\x61\x6d\x65\x22\x3a\x20\x22\x43\x4c\x49\x45\x4e\x54\x5f\x49\x4e\x4e\x45\x52\x5f\x50\x52\x4f\x44\x55\x43\x45\x52\x22\xa\x20\x20\x20\x20\x20\x20\x20\x20\x7d\xa\x20\x20\x20\x20\x20\x20\x5d\xa\x20\x20\x20\x20\x7d\xa\x20\x20\x20\x20" + end_stream: false + } +} + diff --git a/test/extensions/filters/network/common/fuzz/network_readfilter_corpus/rocketmq_proxy_on_pop_msg b/test/extensions/filters/network/common/fuzz/network_readfilter_corpus/rocketmq_proxy_on_pop_msg new file mode 100644 index 000000000000..34aa1101b423 --- /dev/null +++ b/test/extensions/filters/network/common/fuzz/network_readfilter_corpus/rocketmq_proxy_on_pop_msg @@ -0,0 +1,15 @@ +config { + name: "envoy.filters.network.rocketmq_proxy" + typed_config { + type_url: "type.googleapis.com/envoy.extensions.filters.network.rocketmq_proxy.v3.RocketmqProxy" + value: "\xa\x4\x74\x65\x73\x74\x12\x31\xa\xd\x64\x65\x66\x61\x75\x6c\x74\x5f\x72\x6f\x75\x74\x65\x12\x20\xa\xe\xa\xc\xa\xa\x74\x65\x73\x74\x5f\x74\x6f\x70\x69\x63\x12\xe\xa\xc\x66\x61\x6b\x65\x5f\x63\x6c\x75\x73\x74\x65\x72" + } +} + +actions { + on_data { + data: "\x0\x0\x0\xfd\x0\x0\x0\xf9\x7b\x22\x6f\x70\x61\x71\x75\x65\x22\x3a\x31\x37\x2c\x22\x73\x65\x72\x69\x61\x6c\x69\x7a\x65\x54\x79\x70\x65\x43\x75\x72\x72\x65\x6e\x74\x52\x50\x43\x22\x3a\x22\x4a\x53\x4f\x4e\x22\x2c\x22\x76\x65\x72\x73\x69\x6f\x6e\x22\x3a\x30\x2c\x22\x6c\x61\x6e\x67\x75\x61\x67\x65\x22\x3a\x22\x43\x50\x50\x22\x2c\x22\x66\x6c\x61\x67\x22\x3a\x30\x2c\x22\x63\x6f\x64\x65\x22\x3a\x35\x30\x2c\x22\x65\x78\x74\x46\x69\x65\x6c\x64\x73\x22\x3a\x7b\x22\x62\x6f\x72\x6e\x54\x69\x6d\x65\x22\x3a\x31\x30\x30\x30\x2c\x22\x71\x75\x65\x75\x65\x49\x64\x22\x3a\x31\x2c\x22\x74\x6f\x70\x69\x63\x22\x3a\x22\x74\x65\x73\x74\x5f\x74\x6f\x70\x69\x63\x22\x2c\x22\x69\x6e\x76\x69\x73\x69\x62\x6c\x65\x54\x69\x6d\x65\x22\x3a\x36\x30\x30\x30\x2c\x22\x63\x6f\x6e\x73\x75\x6d\x65\x72\x47\x72\x6f\x75\x70\x22\x3a\x22\x74\x65\x73\x74\x5f\x63\x67\x22\x2c\x22\x70\x6f\x6c\x6c\x54\x69\x6d\x65\x22\x3a\x33\x30\x30\x30\x2c\x22\x6d\x61\x78\x4d\x73\x67\x4e\x75\x6d\x73\x22\x3a\x33\x32\x2c\x22\x69\x6e\x69\x74\x4d\x6f\x64\x65\x22\x3a\x34\x7d\x7d" + end_stream: false + } +} + diff --git a/test/extensions/filters/network/common/fuzz/network_readfilter_corpus/rocketmq_proxy_sendmsg b/test/extensions/filters/network/common/fuzz/network_readfilter_corpus/rocketmq_proxy_sendmsg new file mode 100644 index 000000000000..1d38ed816210 --- /dev/null +++ b/test/extensions/filters/network/common/fuzz/network_readfilter_corpus/rocketmq_proxy_sendmsg @@ -0,0 +1,15 @@ +config { + name: "envoy.filters.network.rocketmq_proxy" + typed_config { + type_url: "type.googleapis.com/envoy.extensions.filters.network.rocketmq_proxy.v3.RocketmqProxy" + value: "\xa\x4\x74\x65\x73\x74\x12\x31\xa\xd\x64\x65\x66\x61\x75\x6c\x74\x5f\x72\x6f\x75\x74\x65\x12\x20\xa\xe\xa\xc\xa\xa\x74\x65\x73\x74\x5f\x74\x6f\x70\x69\x63\x12\xe\xa\xc\x66\x61\x6b\x65\x5f\x63\x6c\x75\x73\x74\x65\x72" + } +} + +actions { + on_data { + data: "\x0\x0\x1\x9\x0\x0\x0\xf4\x7b\x22\x63\x6f\x64\x65\x22\x3a\x31\x30\x2c\x22\x65\x78\x74\x46\x69\x65\x6c\x64\x73\x22\x3a\x7b\x22\x73\x79\x73\x46\x6c\x61\x67\x22\x3a\x30\x2c\x22\x62\x6f\x72\x6e\x54\x69\x6d\x65\x73\x74\x61\x6d\x70\x22\x3a\x30\x2c\x22\x66\x6c\x61\x67\x22\x3a\x30\x2c\x22\x71\x75\x65\x75\x65\x49\x64\x22\x3a\x2d\x31\x2c\x22\x74\x6f\x70\x69\x63\x22\x3a\x22\x74\x65\x73\x74\x5f\x74\x6f\x70\x69\x63\x22\x2c\x22\x64\x65\x66\x61\x75\x6c\x74\x54\x6f\x70\x69\x63\x22\x3a\x22\x22\x2c\x22\x70\x72\x6f\x64\x75\x63\x65\x72\x47\x72\x6f\x75\x70\x22\x3a\x22\x22\x2c\x22\x64\x65\x66\x61\x75\x6c\x74\x54\x6f\x70\x69\x63\x51\x75\x65\x75\x65\x4e\x75\x6d\x73\x22\x3a\x30\x7d\x2c\x22\x6f\x70\x61\x71\x75\x65\x22\x3a\x32\x30\x2c\x22\x73\x65\x72\x69\x61\x6c\x69\x7a\x65\x54\x79\x70\x65\x43\x75\x72\x72\x65\x6e\x74\x52\x50\x43\x22\x3a\x22\x4a\x53\x4f\x4e\x22\x2c\x22\x76\x65\x72\x73\x69\x6f\x6e\x22\x3a\x30\x2c\x22\x6c\x61\x6e\x67\x75\x61\x67\x65\x22\x3a\x22\x43\x50\x50\x22\x2c\x22\x66\x6c\x61\x67\x22\x3a\x30\x7d\x5f\x41\x70\x61\x63\x68\x65\x5f\x52\x6f\x63\x6b\x65\x74\x4d\x51\x5f" + end_stream: false + } +} + diff --git a/test/extensions/filters/network/common/fuzz/network_readfilter_corpus/rocketmq_proxy_sendmsg2 b/test/extensions/filters/network/common/fuzz/network_readfilter_corpus/rocketmq_proxy_sendmsg2 new file mode 100644 index 000000000000..ae0810ea792e --- /dev/null +++ b/test/extensions/filters/network/common/fuzz/network_readfilter_corpus/rocketmq_proxy_sendmsg2 @@ -0,0 +1,15 @@ +config { + name: "envoy.filters.network.rocketmq_proxy" + typed_config { + type_url: "type.googleapis.com/envoy.extensions.filters.network.rocketmq_proxy.v3.RocketmqProxy" + value: "\xa\x4\x74\x65\x73\x74\x12\x31\xa\xd\x64\x65\x66\x61\x75\x6c\x74\x5f\x72\x6f\x75\x74\x65\x12\x20\xa\xe\xa\xc\xa\xa\x74\x65\x73\x74\x5f\x74\x6f\x70\x69\x63\x12\xe\xa\xc\x66\x61\x6b\x65\x5f\x63\x6c\x75\x73\x74\x65\x72" + } +} + +actions { + on_data { + data: "\x0\x0\x0\xc7\x0\x0\x0\xb2\x7b\x22\x65\x78\x74\x46\x69\x65\x6c\x64\x73\x22\x3a\x7b\x22\x61\x22\x3a\x22\x74\x65\x73\x74\x5f\x70\x67\x22\x2c\x22\x62\x22\x3a\x22\x74\x65\x73\x74\x5f\x74\x6f\x70\x69\x63\x22\x2c\x22\x63\x22\x3a\x22\x22\x2c\x22\x64\x22\x3a\x30\x2c\x22\x65\x22\x3a\x2d\x31\x2c\x22\x66\x22\x3a\x30\x2c\x22\x67\x22\x3a\x30\x2c\x22\x68\x22\x3a\x30\x7d\x2c\x22\x6f\x70\x61\x71\x75\x65\x22\x3a\x32\x31\x2c\x22\x73\x65\x72\x69\x61\x6c\x69\x7a\x65\x54\x79\x70\x65\x43\x75\x72\x72\x65\x6e\x74\x52\x50\x43\x22\x3a\x22\x4a\x53\x4f\x4e\x22\x2c\x22\x76\x65\x72\x73\x69\x6f\x6e\x22\x3a\x30\x2c\x22\x6c\x61\x6e\x67\x75\x61\x67\x65\x22\x3a\x22\x43\x50\x50\x22\x2c\x22\x66\x6c\x61\x67\x22\x3a\x30\x2c\x22\x63\x6f\x64\x65\x22\x3a\x33\x31\x30\x7d\x5f\x41\x70\x61\x63\x68\x65\x5f\x52\x6f\x63\x6b\x65\x74\x4d\x51\x5f" + end_stream: false + } +} + diff --git a/test/extensions/filters/network/common/fuzz/network_readfilter_corpus/rocketmq_proxy_unregistered_client b/test/extensions/filters/network/common/fuzz/network_readfilter_corpus/rocketmq_proxy_unregistered_client new file mode 100644 index 000000000000..617d3c290b72 --- /dev/null +++ b/test/extensions/filters/network/common/fuzz/network_readfilter_corpus/rocketmq_proxy_unregistered_client @@ -0,0 +1,16 @@ +config { + name: "envoy.filters.network.rocketmq_proxy" + typed_config { + type_url: "type.googleapis.com/envoy.extensions.filters.network.rocketmq_proxy.v3.RocketmqProxy" + value: "\xa\x4\x74\x65\x73\x74\x12\x31\xa\xd\x64\x65\x66\x61\x75\x6c\x74\x5f\x72\x6f\x75\x74\x65\x12\x20\xa\xe\xa\xc\xa\xa\x74\x65\x73\x74\x5f\x74\x6f\x70\x69\x63\x12\xe\xa\xc\x66\x61\x6b\x65\x5f\x63\x6c\x75\x73\x74\x65\x72" + } +} + +actions { + on_data { + data: "\x0\x0\x0\xa5\x0\x0\x0\xa1\x7b\x22\x65\x78\x74\x46\x69\x65\x6c\x64\x73\x22\x3a\x7b\x22\x63\x6c\x69\x65\x6e\x74\x49\x44\x22\x3a\x22\x74\x65\x73\x74\x5f\x63\x6c\x69\x65\x6e\x74\x5f\x69\x64\x22\x2c\x22\x63\x6f\x6e\x73\x75\x6d\x65\x72\x47\x72\x6f\x75\x70\x22\x3a\x22\x74\x65\x73\x74\x5f\x63\x67\x22\x7d\x2c\x22\x6f\x70\x61\x71\x75\x65\x22\x3a\x37\x2c\x22\x73\x65\x72\x69\x61\x6c\x69\x7a\x65\x54\x79\x70\x65\x43\x75\x72\x72\x65\x6e\x74\x52\x50\x43\x22\x3a\x22\x4a\x53\x4f\x4e\x22\x2c\x22\x76\x65\x72\x73\x69\x6f\x6e\x22\x3a\x30\x2c\x22\x6c\x61\x6e\x67\x75\x61\x67\x65\x22\x3a\x22\x43\x50\x50\x22\x2c\x22\x66\x6c\x61\x67\x22\x3a\x30\x2c\x22\x63\x6f\x64\x65\x22\x3a\x33\x35\x7d" + end_stream: false + } +} + + diff --git a/test/extensions/filters/network/common/fuzz/network_readfilter_corpus/thrift_proxy_1 b/test/extensions/filters/network/common/fuzz/network_readfilter_corpus/thrift_proxy_1 index a194b7f99031..f7fec0a7c7ba 100644 --- a/test/extensions/filters/network/common/fuzz/network_readfilter_corpus/thrift_proxy_1 +++ b/test/extensions/filters/network/common/fuzz/network_readfilter_corpus/thrift_proxy_1 @@ -5,3 +5,16 @@ config { value: "\nYtype.googleapis.com/envoy.extensions.filters.network.thrift_proxy.vLLLLLLLLL3.ThriftProxy\020\003\030\003\"\231\002\022\226\002\n\003\n\001A\022\216\002\032\201\002\n\361\001\n\010@\000\000\000\000\000\000\000\022\344\001\nc\n_*]\032[\nPtype.googleapis.com/envoy.extensions.filters.network.thrift_proxy.v3.ThriftProxy\022\007\020\002\"\003\n\001A\022\000\n}\nyenvoy.filters.network.thrift_prox\177\177\177\177\177\177\177\177\177\177\177\177\177\177\177\177\177\177\177\177\177\177\177\177\177\177\177\177\177\177\177\177\177\177\177\177\177\177\177\177\177\177\177\177\177\177\177\177\177\177\177\177\177\177\177\177\177\177\177\177\177\177\177\177\177\177\177\177\177\177\177\177\177\177\177\177\177\177\177\177\177\177\177\177\177\177\177y\022\000\n\013\n\000\022\007\n\005\n\001#\022\0002\010A\177\177\177\177\177\177\177" } } + +actions { + on_new_connection { + } +} + + +actions { + on_data { + data: "\0\0\0\144\17\377\0\0\0\0\0\1\0\1\0\2\1\2\0\0" + } +} + diff --git a/test/extensions/filters/network/common/fuzz/network_readfilter_corpus/thrift_proxy_app_exception b/test/extensions/filters/network/common/fuzz/network_readfilter_corpus/thrift_proxy_app_exception new file mode 100644 index 000000000000..b9f4e7a02456 --- /dev/null +++ b/test/extensions/filters/network/common/fuzz/network_readfilter_corpus/thrift_proxy_app_exception @@ -0,0 +1,25 @@ +config { + name: "envoy.filters.network.thrift_proxy" + typed_config { + type_url: "type.googleapis.com/envoy.extensions.filters.network.thrift_proxy.v3.ThriftProxy" + value: "\xa\x4\x74\x65\x73\x74" + } +} + +actions { + on_new_connection { + } +} + + +actions { + on_data { + data: "\x0\x0\x0\x64\xf\xff\x0\x0\x0\x0\x0\x1\x0\x1\x0\x2\x1\x2\x0\x0" + } +} + +actions { + on_data { + data: "" + } +} diff --git a/test/extensions/filters/network/common/fuzz/network_readfilter_corpus/thrift_proxy_garbage_request b/test/extensions/filters/network/common/fuzz/network_readfilter_corpus/thrift_proxy_garbage_request new file mode 100644 index 000000000000..4109fe67ba90 --- /dev/null +++ b/test/extensions/filters/network/common/fuzz/network_readfilter_corpus/thrift_proxy_garbage_request @@ -0,0 +1,25 @@ +config { + name: "envoy.filters.network.thrift_proxy" + typed_config { + type_url: "type.googleapis.com/envoy.extensions.filters.network.thrift_proxy.v3.ThriftProxy" + value: "\xa\x4\x74\x65\x73\x74" + } +} + +actions { + on_new_connection { + } +} + + +actions { + on_data { + data: "\x0\x0\x0\x0\x0\x0\x0\x0" + } +} + +actions { + on_data { + data: "" + } +} diff --git a/test/extensions/filters/network/common/fuzz/network_readfilter_corpus/thrift_proxy_invalid_msg_type b/test/extensions/filters/network/common/fuzz/network_readfilter_corpus/thrift_proxy_invalid_msg_type new file mode 100644 index 000000000000..802d56801cbf --- /dev/null +++ b/test/extensions/filters/network/common/fuzz/network_readfilter_corpus/thrift_proxy_invalid_msg_type @@ -0,0 +1,25 @@ +config { + name: "envoy.filters.network.thrift_proxy" + typed_config { + type_url: "type.googleapis.com/envoy.extensions.filters.network.thrift_proxy.v3.ThriftProxy" + value: "\xa\x4\x74\x65\x73\x74" + } +} + +actions { + on_new_connection { + } +} + + +actions { + on_data { + data: "\x0\x0\x0\x1f\x80\x1\x0\x1\x0\x0\x0\x4\x6e\x61\x6d\x65\x0\x0\x0\x1\x8\xff\xff" + } +} + +actions { + on_data { + data: "" + } +} diff --git a/test/extensions/filters/network/common/fuzz/network_readfilter_corpus/thrift_proxy_on_data_handles_oneway b/test/extensions/filters/network/common/fuzz/network_readfilter_corpus/thrift_proxy_on_data_handles_oneway new file mode 100644 index 000000000000..967027b75367 --- /dev/null +++ b/test/extensions/filters/network/common/fuzz/network_readfilter_corpus/thrift_proxy_on_data_handles_oneway @@ -0,0 +1,20 @@ +config { + name: "envoy.filters.network.thrift_proxy" + typed_config { + type_url: "type.googleapis.com/envoy.extensions.filters.network.thrift_proxy.v3.ThriftProxy" + value: "\xa\x4\x74\x65\x73\x74" + } +} + +actions { + on_new_connection { + } +} + + +actions { + on_data { + data: "\x0\x0\x0\x1d\x80\x1\x0\x4\x0\x0\x0\x4\x6e\x61\x6d\x65\x0\x0\x0\xf\xb\x0\x0\x0\x0\x0\x5\x66\x69\x65\x6c\x64\x0" + } +} + diff --git a/test/extensions/filters/network/common/fuzz/network_readfilter_corpus/thrift_proxy_on_data_handles_thriftcall b/test/extensions/filters/network/common/fuzz/network_readfilter_corpus/thrift_proxy_on_data_handles_thriftcall new file mode 100644 index 000000000000..69e2926e9014 --- /dev/null +++ b/test/extensions/filters/network/common/fuzz/network_readfilter_corpus/thrift_proxy_on_data_handles_thriftcall @@ -0,0 +1,20 @@ +config { + name: "envoy.filters.network.thrift_proxy" + typed_config { + type_url: "type.googleapis.com/envoy.extensions.filters.network.thrift_proxy.v3.ThriftProxy" + value: "\xa\x4\x74\x65\x73\x74" + } +} + +actions { + on_new_connection { + } +} + + +actions { + on_data { + data: "\x0\x0\x0\x1d\x80\x1\x0\x1\x0\x0\x0\x4\x6e\x61\x6d\x65\x0\x0\x0\xf\xb\x0\x0\x0\x0\x0\x5\x66\x69\x65\x6c\x64\x0" + } +} + diff --git a/test/extensions/filters/network/common/fuzz/network_readfilter_corpus/thrift_proxy_pipelined_request1 b/test/extensions/filters/network/common/fuzz/network_readfilter_corpus/thrift_proxy_pipelined_request1 new file mode 100644 index 000000000000..81062c6c8f1b --- /dev/null +++ b/test/extensions/filters/network/common/fuzz/network_readfilter_corpus/thrift_proxy_pipelined_request1 @@ -0,0 +1,20 @@ +config { + name: "envoy.filters.network.thrift_proxy" + typed_config { + type_url: "type.googleapis.com/envoy.extensions.filters.network.thrift_proxy.v3.ThriftProxy" + value: "\xa\x4\x74\x65\x73\x74" + } +} + +actions { + on_new_connection { + } +} + + +actions { + on_data { + data: "\x0\x0\x0\x1d\x80\x1\x0\x1\x0\x0\x0\x4\x6e\x61\x6d\x65\x0\x0\x0\x1\xb\x0\x0\x0\x0\x0\x5\x66\x69\x65\x6c\x64\x0\x0\x0\x0\x1d\x80\x1\x0\x1\x0\x0\x0\x4\x6e\x61\x6d\x65\x0\x0\x0\x2\xb\x0\x0\x0\x0\x0\x5\x66\x69\x65\x6c\x64\x0" + } +} + diff --git a/test/extensions/filters/network/common/fuzz/network_readfilter_corpus/thrift_proxy_protocol_error b/test/extensions/filters/network/common/fuzz/network_readfilter_corpus/thrift_proxy_protocol_error new file mode 100644 index 000000000000..82900253616b --- /dev/null +++ b/test/extensions/filters/network/common/fuzz/network_readfilter_corpus/thrift_proxy_protocol_error @@ -0,0 +1,25 @@ +config { + name: "envoy.filters.network.thrift_proxy" + typed_config { + type_url: "type.googleapis.com/envoy.extensions.filters.network.thrift_proxy.v3.ThriftProxy" + value: "\xa\x4\x74\x65\x73\x74" + } +} + +actions { + on_new_connection { + } +} + + +actions { + on_data { + data: "\x0\x0\x0\x1d\x80\x1\x0\xff\x0\x0\x0\x4\x6e\x61\x6d\x65\x0\x0\x0\x1\x0" + } +} + +actions { + on_data { + data: "" + } +} diff --git a/test/extensions/filters/network/common/fuzz/network_readfilter_corpus/thrift_proxy_router_test b/test/extensions/filters/network/common/fuzz/network_readfilter_corpus/thrift_proxy_router_test new file mode 100644 index 000000000000..dd30ffe54e37 --- /dev/null +++ b/test/extensions/filters/network/common/fuzz/network_readfilter_corpus/thrift_proxy_router_test @@ -0,0 +1,26 @@ +config { + name: "envoy.filters.network.thrift_proxy" + typed_config { + type_url: "type.googleapis.com/envoy.extensions.filters.network.thrift_proxy.v3.ThriftProxy" + value: "\xa\x4\x74\x65\x73\x74\x10\x1\x18\x1\x22\x1d\xa\x6\x72\x6f\x75\x74\x65\x73\x12\x13\xa\x6\xa\x4\x6e\x61\x6d\x65\x12\x9\xa\x7\x63\x6c\x75\x73\x74\x65\x72" + } +} + +actions { + on_new_connection { + } +} + + +actions { + on_data { + data: "\x0\x0\x0\x1d\x80\x1\x0\x4\x0\x0\x0\x4\x6e\x61\x6d\x65\x0\x0\x0\xf\xb\x0\x0\x0\x0\x0\x5\x66\x69\x65\x6c\x64\x0" + } +} + +actions { + on_data { + data: "" + end_stream: true + } +} diff --git a/test/extensions/filters/network/common/fuzz/network_readfilter_corpus/thrift_proxy_stop_and_resume b/test/extensions/filters/network/common/fuzz/network_readfilter_corpus/thrift_proxy_stop_and_resume new file mode 100644 index 000000000000..aecd8c383fd8 --- /dev/null +++ b/test/extensions/filters/network/common/fuzz/network_readfilter_corpus/thrift_proxy_stop_and_resume @@ -0,0 +1,25 @@ +config { + name: "envoy.filters.network.thrift_proxy" + typed_config { + type_url: "type.googleapis.com/envoy.extensions.filters.network.thrift_proxy.v3.ThriftProxy" + value: "\xa\x4\x74\x65\x73\x74" + } +} + +actions { + on_new_connection { + } +} + + +actions { + on_data { + data: "\x0\x0\x0\x1d\x80\x1\x0\x4\x0\x0\x0\x4\x6e\x61\x6d\x65\x0\x0\x0\xf\xb\x0\x0\x0\x0\x0\x5\x66\x69\x65\x6c\x64\x0" + } +} + +actions { + on_data { + data: "" + } +} diff --git a/test/extensions/filters/network/common/fuzz/network_readfilter_corpus/zookeeper_proxy_auth b/test/extensions/filters/network/common/fuzz/network_readfilter_corpus/zookeeper_proxy_auth new file mode 100644 index 000000000000..a266ee5c9f87 --- /dev/null +++ b/test/extensions/filters/network/common/fuzz/network_readfilter_corpus/zookeeper_proxy_auth @@ -0,0 +1,17 @@ +config { + name: "envoy.filters.network.zookeeper_proxy" + typed_config { + type_url: "type.googleapis.com/envoy.extensions.filters.network.zookeeper_proxy.v3.ZooKeeperProxy" + value: "\xa\xb\x74\x65\x73\x74\x5f\x70\x72\x65\x66\x69\x78" + } +} +actions { + on_data { + data: "\x0\x0\x0\x28\xff\xff\xff\xfc\x0\x0\x0\x64\x0\x0\x0\x0\x0\x0\x0\x6\x64\x69\x67\x65\x73\x74\x0\x0\x0\x6\x70\x40\x73\x73\x77\x64" + } +} +actions { + on_data { + } +} + diff --git a/test/extensions/filters/network/common/fuzz/network_readfilter_corpus/zookeeper_proxy_connect b/test/extensions/filters/network/common/fuzz/network_readfilter_corpus/zookeeper_proxy_connect new file mode 100644 index 000000000000..de17bd097db3 --- /dev/null +++ b/test/extensions/filters/network/common/fuzz/network_readfilter_corpus/zookeeper_proxy_connect @@ -0,0 +1,17 @@ +config { + name: "envoy.filters.network.zookeeper_proxy" + typed_config { + type_url: "type.googleapis.com/envoy.extensions.filters.network.zookeeper_proxy.v3.ZooKeeperProxy" + value: "\xa\xb\x74\x65\x73\x74\x5f\x70\x72\x65\x66\x69\x78" + } +} +actions { + on_data { + data: "\x0\x0\x0\x1c\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x64\x0\x0\x0\xa\x0\x0\x0\x0\x0\x0\x0\xc8\x0\x0\x0\x0" + } +} +actions { + on_data { + } +} + diff --git a/test/extensions/filters/network/common/fuzz/network_readfilter_corpus/zookeeper_proxy_multirequest b/test/extensions/filters/network/common/fuzz/network_readfilter_corpus/zookeeper_proxy_multirequest new file mode 100644 index 000000000000..2fe0833924df --- /dev/null +++ b/test/extensions/filters/network/common/fuzz/network_readfilter_corpus/zookeeper_proxy_multirequest @@ -0,0 +1,17 @@ +config { + name: "envoy.filters.network.zookeeper_proxy" + typed_config { + type_url: "type.googleapis.com/envoy.extensions.filters.network.zookeeper_proxy.v3.ZooKeeperProxy" + value: "\xa\xb\x74\x65\x73\x74\x5f\x70\x72\x65\x66\x69\x78" + } +} +actions { + on_data { + data: "\x0\x0\x0\x7c\x0\x0\x3\xe8\x0\x0\x0\xe\x0\x0\x0\x1\x0\xff\xff\xff\xff\x0\x0\x0\x4\x2f\x66\x6f\x6f\x0\x0\x0\x1\x31\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x1\x0\xff\xff\xff\xff\x0\x0\x0\x4\x2f\x62\x61\x72\x0\x0\x0\x1\x31\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\xd\x0\xff\xff\xff\xff\x0\x0\x0\x4\x2f\x66\x6f\x6f\x0\x0\x0\x64\x0\x0\x0\x5\x0\xff\xff\xff\xff\x0\x0\x0\x4\x2f\x62\x61\x72\x0\x0\x0\x1\x32\xff\xff\xff\xff\xff\xff\xff\xff\x1\xff\xff\xff\xff" + } +} +actions { + on_data { + } +} + diff --git a/test/extensions/filters/network/common/fuzz/network_readfilter_corpus/zookeeper_proxy_request_container b/test/extensions/filters/network/common/fuzz/network_readfilter_corpus/zookeeper_proxy_request_container new file mode 100644 index 000000000000..65fb75866297 --- /dev/null +++ b/test/extensions/filters/network/common/fuzz/network_readfilter_corpus/zookeeper_proxy_request_container @@ -0,0 +1,17 @@ +config { + name: "envoy.filters.network.zookeeper_proxy" + typed_config { + type_url: "type.googleapis.com/envoy.extensions.filters.network.zookeeper_proxy.v3.ZooKeeperProxy" + value: "\xa\xb\x74\x65\x73\x74\x5f\x70\x72\x65\x66\x69\x78" + } +} +actions { + on_data { + data: "\x0\x0\x0\x1f\x0\x0\x3\xe8\x0\x0\x0\x13\x0\x0\x0\x4\x2f\x66\x6f\x6f\x0\x0\x0\x3\x62\x61\x72\x0\x0\x0\x0\x0\x0\x0\x4" + } +} +actions { + on_data { + } +} + diff --git a/test/extensions/filters/network/common/fuzz/network_readfilter_corpus/zookeeper_proxy_request_ephemeral b/test/extensions/filters/network/common/fuzz/network_readfilter_corpus/zookeeper_proxy_request_ephemeral new file mode 100644 index 000000000000..c9b32803a8ed --- /dev/null +++ b/test/extensions/filters/network/common/fuzz/network_readfilter_corpus/zookeeper_proxy_request_ephemeral @@ -0,0 +1,17 @@ +config { + name: "envoy.filters.network.zookeeper_proxy" + typed_config { + type_url: "type.googleapis.com/envoy.extensions.filters.network.zookeeper_proxy.v3.ZooKeeperProxy" + value: "\xa\xb\x74\x65\x73\x74\x5f\x70\x72\x65\x66\x69\x78" + } +} +actions { + on_data { + data: "\x0\x0\x0\x1f\x0\x0\x3\xe8\x0\x0\x0\x1\x0\x0\x0\x4\x2f\x66\x6f\x6f\x0\x0\x0\x3\x62\x61\x72\x0\x0\x0\x0\x0\x0\x0\x1" + } +} +actions { + on_data { + } +} + diff --git a/test/extensions/filters/network/common/fuzz/network_readfilter_corpus/zookeeper_proxy_request_persistent b/test/extensions/filters/network/common/fuzz/network_readfilter_corpus/zookeeper_proxy_request_persistent new file mode 100644 index 000000000000..1f01b8502432 --- /dev/null +++ b/test/extensions/filters/network/common/fuzz/network_readfilter_corpus/zookeeper_proxy_request_persistent @@ -0,0 +1,17 @@ +config { + name: "envoy.filters.network.zookeeper_proxy" + typed_config { + type_url: "type.googleapis.com/envoy.extensions.filters.network.zookeeper_proxy.v3.ZooKeeperProxy" + value: "\xa\xb\x74\x65\x73\x74\x5f\x70\x72\x65\x66\x69\x78" + } +} +actions { + on_data { + data: "\x0\x0\x0\x1f\x0\x0\x3\xe8\x0\x0\x0\x1\x0\x0\x0\x4\x2f\x66\x6f\x6f\x0\x0\x0\x3\x62\x61\x72\x0\x0\x0\x0\x0\x0\x0\x0" + } +} +actions { + on_data { + } +} + diff --git a/test/extensions/filters/network/common/fuzz/network_readfilter_corpus/zookeeper_proxy_request_persistent_ephemeral_sequential b/test/extensions/filters/network/common/fuzz/network_readfilter_corpus/zookeeper_proxy_request_persistent_ephemeral_sequential new file mode 100644 index 000000000000..91fd261faf9a --- /dev/null +++ b/test/extensions/filters/network/common/fuzz/network_readfilter_corpus/zookeeper_proxy_request_persistent_ephemeral_sequential @@ -0,0 +1,17 @@ +config { + name: "envoy.filters.network.zookeeper_proxy" + typed_config { + type_url: "type.googleapis.com/envoy.extensions.filters.network.zookeeper_proxy.v3.ZooKeeperProxy" + value: "\xa\xb\x74\x65\x73\x74\x5f\x70\x72\x65\x66\x69\x78" + } +} +actions { + on_data { + data: "\x0\x0\x0\x1f\x0\x0\x3\xe8\x0\x0\x0\x1\x0\x0\x0\x4\x2f\x66\x6f\x6f\x0\x0\x0\x3\x62\x61\x72\x0\x0\x0\x0\x0\x0\x0\x3" + } +} +actions { + on_data { + } +} + diff --git a/test/extensions/filters/network/common/fuzz/network_readfilter_corpus/zookeeper_proxy_request_persistent_sequential b/test/extensions/filters/network/common/fuzz/network_readfilter_corpus/zookeeper_proxy_request_persistent_sequential new file mode 100644 index 000000000000..c9b32803a8ed --- /dev/null +++ b/test/extensions/filters/network/common/fuzz/network_readfilter_corpus/zookeeper_proxy_request_persistent_sequential @@ -0,0 +1,17 @@ +config { + name: "envoy.filters.network.zookeeper_proxy" + typed_config { + type_url: "type.googleapis.com/envoy.extensions.filters.network.zookeeper_proxy.v3.ZooKeeperProxy" + value: "\xa\xb\x74\x65\x73\x74\x5f\x70\x72\x65\x66\x69\x78" + } +} +actions { + on_data { + data: "\x0\x0\x0\x1f\x0\x0\x3\xe8\x0\x0\x0\x1\x0\x0\x0\x4\x2f\x66\x6f\x6f\x0\x0\x0\x3\x62\x61\x72\x0\x0\x0\x0\x0\x0\x0\x1" + } +} +actions { + on_data { + } +} + diff --git a/test/extensions/filters/network/common/fuzz/network_readfilter_corpus/zookeeper_proxy_request_ttl b/test/extensions/filters/network/common/fuzz/network_readfilter_corpus/zookeeper_proxy_request_ttl new file mode 100644 index 000000000000..dabe94508782 --- /dev/null +++ b/test/extensions/filters/network/common/fuzz/network_readfilter_corpus/zookeeper_proxy_request_ttl @@ -0,0 +1,17 @@ +config { + name: "envoy.filters.network.zookeeper_proxy" + typed_config { + type_url: "type.googleapis.com/envoy.extensions.filters.network.zookeeper_proxy.v3.ZooKeeperProxy" + value: "\xa\xb\x74\x65\x73\x74\x5f\x70\x72\x65\x66\x69\x78" + } +} +actions { + on_data { + data: "\x0\x0\x0\x1f\x0\x0\x3\xe8\x0\x0\x0\x15\x0\x0\x0\x4\x2f\x66\x6f\x6f\x0\x0\x0\x3\x62\x61\x72\x0\x0\x0\x0\x0\x0\x0\x5" + } +} +actions { + on_data { + } +} + diff --git a/test/extensions/filters/network/common/fuzz/network_readfilter_corpus/zookeeper_proxy_request_ttl_sequential b/test/extensions/filters/network/common/fuzz/network_readfilter_corpus/zookeeper_proxy_request_ttl_sequential new file mode 100644 index 000000000000..24d933cf2f98 --- /dev/null +++ b/test/extensions/filters/network/common/fuzz/network_readfilter_corpus/zookeeper_proxy_request_ttl_sequential @@ -0,0 +1,17 @@ +config { + name: "envoy.filters.network.zookeeper_proxy" + typed_config { + type_url: "type.googleapis.com/envoy.extensions.filters.network.zookeeper_proxy.v3.ZooKeeperProxy" + value: "\xa\xb\x74\x65\x73\x74\x5f\x70\x72\x65\x66\x69\x78" + } +} +actions { + on_data { + data: "\x0\x0\x0\x1f\x0\x0\x3\xe8\x0\x0\x0\x15\x0\x0\x0\x4\x2f\x66\x6f\x6f\x0\x0\x0\x3\x62\x61\x72\x0\x0\x0\x0\x0\x0\x0\x6" + } +} +actions { + on_data { + } +} + diff --git a/test/extensions/filters/network/common/fuzz/network_readfilter_corpus/zookeeper_proxy_watch_request b/test/extensions/filters/network/common/fuzz/network_readfilter_corpus/zookeeper_proxy_watch_request new file mode 100644 index 000000000000..3c46ff026522 --- /dev/null +++ b/test/extensions/filters/network/common/fuzz/network_readfilter_corpus/zookeeper_proxy_watch_request @@ -0,0 +1,17 @@ +config { + name: "envoy.filters.network.zookeeper_proxy" + typed_config { + type_url: "type.googleapis.com/envoy.extensions.filters.network.zookeeper_proxy.v3.ZooKeeperProxy" + value: "\xa\xb\x74\x65\x73\x74\x5f\x70\x72\x65\x66\x69\x78" + } +} +actions { + on_data { + data: "\x0\x0\x0\x48\xff\xff\xff\xf8\x0\x0\x0\x65\x0\x0\x0\x2\x0\x0\x0\x4\x2f\x66\x6f\x6f\x0\x0\x0\x4\x2f\x62\x61\x72\x0\x0\x0\x2\x0\x0\x0\x5\x2f\x66\x6f\x6f\x31\x0\x0\x0\x5\x2f\x62\x61\x72\x31\x0\x0\x0\x2\x0\x0\x0\x5\x2f\x66\x6f\x6f\x32\x0\x0\x0\x5\x2f\x62\x61\x72\x32" + } +} +actions { + on_data { + } +} + diff --git a/test/extensions/filters/network/common/fuzz/network_writefilter_corpus/kafka_broker_process_response b/test/extensions/filters/network/common/fuzz/network_writefilter_corpus/kafka_broker_process_response new file mode 100644 index 000000000000..5f5f815bcf1e --- /dev/null +++ b/test/extensions/filters/network/common/fuzz/network_writefilter_corpus/kafka_broker_process_response @@ -0,0 +1,18 @@ +config { + name: "envoy.filters.network.kafka_broker" + typed_config { + type_url: "type.googleapis.com/envoy.extensions.filters.network.kafka_broker.v3.KafkaBroker" + value: "\n}\177\177\177\177\177\177\177\177\177\177\177\177\177\177\177\177\177\177\177\177\177\177\177\177\177\177\177\177\177\177\177\177\177\177\177\177\177\177\177\177\177\177\177\177\177\177\177\177\177\177\177\177\177\177\177\177\177\177\177\177\177\177\177\177\177\177\177\177\177\177\177\177\177\177\177\177\177\177\177\177\177\177\177\177\177\177\177\177\177\177\177\177\177\177\177\177\177\177\177\177\177\177\177\177\177\177\177\177\177\177\177\177\177\177\177\177\177\177\177\177\177\177\177\177\177" + } +} +actions { + on_write { + data: "\x0\x0\x0\x22\x0\x0\x0\x0\x0\x0\x0\x1\x0\x6\x73\x74\x72\x69\x6e\x67\x0\x0\x0\x1\x0\x0\x0\x20\x0\x10\x0\x0\x0\x0\x0\x0\x0\x40\x0\x0\x0\x26\x0\x0\x0\x1\x0\x0\x0\x1\x0\x6\x73\x74\x72\x69\x6e\x67\x0\x0\x0\x1\x0\x0\x0\x20\x0\x10\x0\x0\x0\x0\x0\x0\x0\x40\x0\x0\x0\x20\x0\x0\x0\x2e\x0\x0\x0\x2\x0\x0\x0\x1\x0\x6\x73\x74\x72\x69\x6e\x67\x0\x0\x0\x1\x0\x0\x0\x20\x0\x10\x0\x0\x0\x0\x0\x0\x0\x40\x0\x0\x0\x0\x0\x0\x0\x40\x0\x0\x0\x20\x0\x0\x0\x2e\x0\x0\x0\x3\x0\x0\x0\x1\x0\x6\x73\x74\x72\x69\x6e\x67\x0\x0\x0\x1\x0\x0\x0\x20\x0\x10\x0\x0\x0\x0\x0\x0\x0\x40\x0\x0\x0\x0\x0\x0\x0\x40\x0\x0\x0\x20\x0\x0\x0\x2e\x0\x0\x0\x4\x0\x0\x0\x1\x0\x6\x73\x74\x72\x69\x6e\x67\x0\x0\x0\x1\x0\x0\x0\x20\x0\x10\x0\x0\x0\x0\x0\x0\x0\x40\x0\x0\x0\x0\x0\x0\x0\x40\x0\x0\x0\x20\x0\x0\x0\x36\x0\x0\x0\x5\x0\x0\x0\x1\x0\x6\x73\x74\x72\x69\x6e\x67\x0\x0\x0\x1\x0\x0\x0\x20\x0\x10\x0\x0\x0\x0\x0\x0\x0\x40\x0\x0\x0\x0\x0\x0\x0\x40\x0\x0\x0\x0\x0\x0\x0\x40\x0\x0\x0\x20\x0\x0\x0\x36\x0\x0\x0\x6\x0\x0\x0\x1\x0\x6\x73\x74\x72\x69\x6e\x67\x0\x0\x0\x1\x0\x0\x0\x20\x0\x10\x0\x0\x0\x0\x0\x0\x0\x40\x0\x0\x0\x0\x0\x0\x0\x40\x0\x0\x0\x0\x0\x0\x0\x40\x0\x0\x0\x20\x0\x0\x0\x36\x0\x0\x0\x7\x0\x0\x0\x1\x0\x6\x73\x74\x72\x69\x6e\x67\x0\x0\x0\x1\x0\x0\x0\x20\x0\x10\x0\x0\x0\x0\x0\x0\x0\x40\x0\x0\x0\x0\x0\x0\x0\x40\x0\x0\x0\x0\x0\x0\x0\x40\x0\x0\x0\x20\x0\x0\x0\x4e\x0\x0\x0\x8\x0\x0\x0\x1\x0\x6\x73\x74\x72\x69\x6e\x67\x0\x0\x0\x1\x0\x0\x0\x20\x0\x10\x0\x0\x0\x0\x0\x0\x0\x40\x0\x0\x0\x0\x0\x0\x0\x40\x0\x0\x0\x0\x0\x0\x0\x40\x0\x0\x0\x1\x0\x0\x0\x20\x0\x6\x73\x74\x72\x69\x6e\x67\x0\x6\x73\x74\x72\x69\x6e\x67\x0\x0\x0\x20\x0\x0\x0\x2a\x0\x0\x0\x9\x0\x0\x0\x1\x0\x6\x73\x74\x72\x69\x6e\x67\x0\x0\x0\x1\x0\x0\x0\x20\x0\x10\x0\x0\x0\x0\x0\x0\x0\x40\x0\x0\x0\x4\x0\x1\x2\x3\x0\x0\x0\x2e\x0\x0\x0\xa\x0\x0\x0\x20\x0\x0\x0\x1\x0\x6\x73\x74\x72\x69\x6e\x67\x0\x0\x0\x1\x0\x0\x0\x20\x0\x10\x0\x0\x0\x0\x0\x0\x0\x40\x0\x0\x0\x4\x0\x1\x2\x3\x0\x0\x0\x2e\x0\x0\x0\xb\x0\x0\x0\x20\x0\x0\x0\x1\x0\x6\x73\x74\x72\x69\x6e\x67\x0\x0\x0\x1\x0\x0\x0\x20\x0\x10\x0\x0\x0\x0\x0\x0\x0\x40\x0\x0\x0\x4\x0\x1\x2\x3\x0\x0\x0\x2e\x0\x0\x0\xc\x0\x0\x0\x20\x0\x0\x0\x1\x0\x6\x73\x74\x72\x69\x6e\x67\x0\x0\x0\x1\x0\x0\x0\x20\x0\x10\x0\x0\x0\x0\x0\x0\x0\x40\x0\x0\x0\x4\x0\x1\x2\x3\x0\x0\x0\x4a\x0\x0\x0\xd\x0\x0\x0\x20\x0\x0\x0\x1\x0\x6\x73\x74\x72\x69\x6e\x67\x0\x0\x0\x1\x0\x0\x0\x20\x0\x10\x0\x0\x0\x0\x0\x0\x0\x40\x0\x0\x0\x0\x0\x0\x0\x40\x0\x0\x0\x1\x0\x0\x0\x0\x0\x0\x0\x40\x0\x0\x0\x0\x0\x0\x0\x40\x0\x0\x0\x4\x0\x1\x2\x3\x0\x0\x0\x52\x0\x0\x0\xe\x0\x0\x0\x20\x0\x0\x0\x1\x0\x6\x73\x74\x72\x69\x6e\x67\x0\x0\x0\x1\x0\x0\x0\x20\x0\x10\x0\x0\x0\x0\x0\x0\x0\x40\x0\x0\x0\x0\x0\x0\x0\x40\x0\x0\x0\x0\x0\x0\x0\x40\x0\x0\x0\x1\x0\x0\x0\x0\x0\x0\x0\x40\x0\x0\x0\x0\x0\x0\x0\x40\x0\x0\x0\x4\x0\x1\x2\x3\x0\x0\x0\x52\x0\x0\x0\xf\x0\x0\x0\x20\x0\x0\x0\x1\x0\x6\x73\x74\x72\x69\x6e\x67\x0\x0\x0\x1\x0\x0\x0\x20\x0\x10\x0\x0\x0\x0\x0\x0\x0\x40\x0\x0\x0\x0\x0\x0\x0\x40\x0\x0\x0\x0\x0\x0\x0\x40\x0\x0\x0\x1\x0\x0\x0\x0\x0\x0\x0\x40\x0\x0\x0\x0\x0\x0\x0\x40\x0\x0\x0\x4\x0\x1\x2\x3\x0\x0\x0\x58\x0\x0\x0\x10\x0\x0\x0\x20\x0\x10\x0\x0\x0\x20\x0\x0\x0\x1\x0\x6\x73\x74\x72\x69\x6e\x67\x0\x0\x0\x1\x0\x0\x0\x20\x0\x10\x0\x0\x0\x0\x0\x0\x0\x40\x0\x0\x0\x0\x0\x0\x0\x40\x0\x0\x0\x0\x0\x0\x0\x40\x0\x0\x0\x1\x0\x0\x0\x0\x0\x0\x0\x40\x0\x0\x0\x0\x0\x0\x0\x40\x0\x0\x0\x4\x0\x1\x2\x3\x0\x0\x0\x58\x0\x0\x0\x11\x0\x0\x0\x20\x0\x10\x0\x0\x0\x20\x0\x0\x0\x1\x0\x6\x73\x74\x72\x69\x6e\x67\x0\x0\x0\x1\x0\x0\x0\x20\x0\x10\x0\x0\x0\x0\x0\x0\x0\x40\x0\x0\x0\x0\x0\x0\x0\x40\x0\x0\x0\x0\x0\x0\x0\x40\x0\x0\x0\x1\x0\x0\x0\x0\x0\x0\x0\x40\x0\x0\x0\x0\x0\x0\x0\x40\x0\x0\x0\x4\x0\x1\x2\x3\x0\x0\x0\x58\x0\x0\x0\x12\x0\x0\x0\x20\x0\x10\x0\x0\x0\x20\x0\x0\x0\x1\x0\x6\x73\x74\x72\x69\x6e\x67\x0\x0\x0\x1\x0\x0\x0\x20\x0\x10\x0\x0\x0\x0\x0\x0\x0\x40\x0\x0\x0\x0\x0\x0\x0\x40\x0\x0\x0\x0\x0\x0\x0\x40\x0\x0\x0\x1\x0\x0\x0\x0\x0\x0\x0\x40\x0\x0\x0\x0\x0\x0\x0\x40\x0\x0\x0\x4\x0\x1\x2\x3\x0\x0\x0\x58\x0\x0\x0\x13\x0\x0\x0\x20\x0\x10\x0\x0\x0\x20\x0\x0\x0\x1\x0\x6\x73\x74\x72\x69\x6e\x67\x0\x0\x0\x1\x0\x0\x0\x20\x0\x10\x0\x0\x0\x0\x0\x0\x0\x40\x0\x0\x0\x0\x0\x0\x0\x40\x0\x0\x0\x0\x0\x0\x0\x40\x0\x0\x0\x1\x0\x0\x0\x0\x0\x0\x0\x40\x0\x0\x0\x0\x0\x0\x0\x40\x0\x0\x0\x4\x0\x1\x2\x3\x0\x0\x0\x5c\x0\x0\x0\x14\x0\x0\x0\x20\x0\x10\x0\x0\x0\x20\x0\x0\x0\x1\x0\x6\x73\x74\x72\x69\x6e\x67\x0\x0\x0\x1\x0\x0\x0\x20\x0\x10\x0\x0\x0\x0\x0\x0\x0\x40\x0\x0\x0\x0\x0\x0\x0\x40\x0\x0\x0\x0\x0\x0\x0\x40\x0\x0\x0\x1\x0\x0\x0\x0\x0\x0\x0\x40\x0\x0\x0\x0\x0\x0\x0\x40\x0\x0\x0\x20\x0\x0\x0\x4\x0\x1\x2\x3\x0\x0\x0\x26\x0\x0\x0\x15\x0\x0\x0\x1\x0\x6\x73\x74\x72\x69\x6e\x67\x0\x0\x0\x1\x0\x0\x0\x20\x0\x10\x0\x0\x0\x1\x0\x0\x0\x0\x0\x0\x0\x40\x0\x0\x0\x2a\x0\x0\x0\x16\x0\x0\x0\x1\x0\x6\x73\x74\x72\x69\x6e\x67\x0\x0\x0\x1\x0\x0\x0\x20\x0\x10\x0\x0\x0\x0\x0\x0\x0\x40\x0\x0\x0\x0\x0\x0\x0\x40\x0\x0\x0\x2e\x0\x0\x0\x17\x0\x0\x0\x20\x0\x0\x0\x1\x0\x6\x73\x74\x72\x69\x6e\x67\x0\x0\x0\x1\x0\x0\x0\x20\x0\x10\x0\x0\x0\x0\x0\x0\x0\x40\x0\x0\x0\x0\x0\x0\x0\x40\x0\x0\x0\x2e\x0\x0\x0\x18\x0\x0\x0\x20\x0\x0\x0\x1\x0\x6\x73\x74\x72\x69\x6e\x67\x0\x0\x0\x1\x0\x0\x0\x20\x0\x10\x0\x0\x0\x0\x0\x0\x0\x40\x0\x0\x0\x0\x0\x0\x0\x40\x0\x0\x0\x32\x0\x0\x0\x19\x0\x0\x0\x20\x0\x0\x0\x1\x0\x6\x73\x74\x72\x69\x6e\x67\x0\x0\x0\x1\x0\x0\x0\x20\x0\x10\x0\x0\x0\x0\x0\x0\x0\x40\x0\x0\x0\x0\x0\x0\x0\x40\x0\x0\x0\x20\x0\x0\x0\x32\x0\x0\x0\x1a\x0\x0\x0\x20\x0\x0\x0\x1\x0\x6\x73\x74\x72\x69\x6e\x67\x0\x0\x0\x1\x0\x0\x0\x20\x0\x10\x0\x0\x0\x0\x0\x0\x0\x40\x0\x0\x0\x0\x0\x0\x0\x40\x0\x0\x0\x20\x0\x0\x0\x44\x0\x0\x0\x1b\x0\x0\x0\x1\x0\x0\x0\x20\x0\x6\x73\x74\x72\x69\x6e\x67\x0\x0\x0\x20\x0\x0\x0\x1\x0\x10\x0\x6\x73\x74\x72\x69\x6e\x67\x0\x0\x0\x1\x0\x10\x0\x0\x0\x20\x0\x0\x0\x20\x0\x0\x0\x1\x0\x0\x0\x20\x0\x0\x0\x1\x0\x0\x0\x20\x0\x0\x0\x51\x0\x0\x0\x1c\x0\x0\x0\x1\x0\x0\x0\x20\x0\x6\x73\x74\x72\x69\x6e\x67\x0\x0\x0\x20\x0\x6\x73\x74\x72\x69\x6e\x67\x0\x0\x0\x20\x0\x0\x0\x1\x0\x10\x0\x6\x73\x74\x72\x69\x6e\x67\x0\x0\x0\x0\x1\x0\x10\x0\x0\x0\x20\x0\x0\x0\x20\x0\x0\x0\x1\x0\x0\x0\x20\x0\x0\x0\x1\x0\x0\x0\x20\x0\x0\x0\x59\x0\x0\x0\x1d\x0\x0\x0\x1\x0\x0\x0\x20\x0\x6\x73\x74\x72\x69\x6e\x67\x0\x0\x0\x20\x0\x6\x73\x74\x72\x69\x6e\x67\x0\x6\x73\x74\x72\x69\x6e\x67\x0\x0\x0\x20\x0\x0\x0\x1\x0\x10\x0\x6\x73\x74\x72\x69\x6e\x67\x0\x0\x0\x0\x1\x0\x10\x0\x0\x0\x20\x0\x0\x0\x20\x0\x0\x0\x1\x0\x0\x0\x20\x0\x0\x0\x1\x0\x0\x0\x20\x0\x0\x0\x5d\x0\x0\x0\x1e\x0\x0\x0\x20\x0\x0\x0\x1\x0\x0\x0\x20\x0\x6\x73\x74\x72\x69\x6e\x67\x0\x0\x0\x20\x0\x6\x73\x74\x72\x69\x6e\x67\x0\x6\x73\x74\x72\x69\x6e\x67\x0\x0\x0\x20\x0\x0\x0\x1\x0\x10\x0\x6\x73\x74\x72\x69\x6e\x67\x0\x0\x0\x0\x1\x0\x10\x0\x0\x0\x20\x0\x0\x0\x20\x0\x0\x0\x1\x0\x0\x0\x20\x0\x0\x0\x1\x0\x0\x0\x20\x0\x0\x0\x5d\x0\x0\x0\x1f\x0\x0\x0\x20\x0\x0\x0\x1\x0\x0\x0\x20\x0\x6\x73\x74\x72\x69\x6e\x67\x0\x0\x0\x20\x0\x6\x73\x74\x72\x69\x6e\x67\x0\x6\x73\x74\x72\x69\x6e\x67\x0\x0\x0\x20\x0\x0\x0\x1\x0\x10\x0\x6\x73\x74\x72\x69\x6e\x67\x0\x0\x0\x0\x1\x0\x10\x0\x0\x0\x20\x0\x0\x0\x20\x0\x0\x0\x1\x0\x0\x0\x20\x0\x0\x0\x1\x0\x0\x0\x20\x0\x0\x0\x65\x0\x0\x0\x20\x0\x0\x0\x20\x0\x0\x0\x1\x0\x0\x0\x20\x0\x6\x73\x74\x72\x69\x6e\x67\x0\x0\x0\x20\x0\x6\x73\x74\x72\x69\x6e\x67\x0\x6\x73\x74\x72\x69\x6e\x67\x0\x0\x0\x20\x0\x0\x0\x1\x0\x10\x0\x6\x73\x74\x72\x69\x6e\x67\x0\x0\x0\x0\x1\x0\x10\x0\x0\x0\x20\x0\x0\x0\x20\x0\x0\x0\x1\x0\x0\x0\x20\x0\x0\x0\x1\x0\x0\x0\x20\x0\x0\x0\x1\x0\x0\x0\x20\x0\x0\x0\x65\x0\x0\x0\x21\x0\x0\x0\x20\x0\x0\x0\x1\x0\x0\x0\x20\x0\x6\x73\x74\x72\x69\x6e\x67\x0\x0\x0\x20\x0\x6\x73\x74\x72\x69\x6e\x67\x0\x6\x73\x74\x72\x69\x6e\x67\x0\x0\x0\x20\x0\x0\x0\x1\x0\x10\x0\x6\x73\x74\x72\x69\x6e\x67\x0\x0\x0\x0\x1\x0\x10\x0\x0\x0\x20\x0\x0\x0\x20\x0\x0\x0\x1\x0\x0\x0\x20\x0\x0\x0\x1\x0\x0\x0\x20\x0\x0\x0\x1\x0\x0\x0\x20\x0\x0\x0\x69\x0\x0\x0\x22\x0\x0\x0\x20\x0\x0\x0\x1\x0\x0\x0\x20\x0\x6\x73\x74\x72\x69\x6e\x67\x0\x0\x0\x20\x0\x6\x73\x74\x72\x69\x6e\x67\x0\x6\x73\x74\x72\x69\x6e\x67\x0\x0\x0\x20\x0\x0\x0\x1\x0\x10\x0\x6\x73\x74\x72\x69\x6e\x67\x0\x0\x0\x0\x1\x0\x10\x0\x0\x0\x20\x0\x0\x0\x20\x0\x0\x0\x20\x0\x0\x0\x1\x0\x0\x0\x20\x0\x0\x0\x1\x0\x0\x0\x20\x0\x0\x0\x1\x0\x0\x0\x20\x0\x0\x0\x71\x0\x0\x0\x23\x0\x0\x0\x20\x0\x0\x0\x1\x0\x0\x0\x20\x0\x6\x73\x74\x72\x69\x6e\x67\x0\x0\x0\x20\x0\x6\x73\x74\x72\x69\x6e\x67\x0\x6\x73\x74\x72\x69\x6e\x67\x0\x0\x0\x20\x0\x0\x0\x1\x0\x10\x0\x6\x73\x74\x72\x69\x6e\x67\x0\x0\x0\x0\x1\x0\x10\x0\x0\x0\x20\x0\x0\x0\x20\x0\x0\x0\x20\x0\x0\x0\x1\x0\x0\x0\x20\x0\x0\x0\x1\x0\x0\x0\x20\x0\x0\x0\x1\x0\x0\x0\x20\x0\x0\x0\x20\x0\x0\x0\x20\x0\x0\x0\x88\x0\x0\x0\x24\x0\x0\x0\x0\x20\x2\x0\x0\x0\x20\x7\x73\x74\x72\x69\x6e\x67\x0\x0\x0\x20\x7\x73\x74\x72\x69\x6e\x67\x2\xa\x3\x1\x2\x3\x14\x3\x4\x5\x6\x7\x73\x74\x72\x69\x6e\x67\x0\x0\x0\x20\x2\x0\x10\x7\x73\x74\x72\x69\x6e\x67\x0\x2\x0\x10\x0\x0\x0\x20\x0\x0\x0\x20\x0\x0\x0\x20\x2\x0\x0\x0\x20\x2\x0\x0\x0\x20\x2\x0\x0\x0\x20\x2\xa\x3\x1\x2\x3\x14\x3\x4\x5\x6\x0\x0\x0\x20\x2\xa\x3\x1\x2\x3\x14\x3\x4\x5\x6\x0\x0\x0\x20\x2\xa\x3\x1\x2\x3\x14\x3\x4\x5\x6\x0\x0\x0\x18\x0\x0\x0\x25\x0\x10\x0\x0\x0\x1\x0\x6\x73\x74\x72\x69\x6e\x67\x0\x0\x0\x20\x0\x10\x0\x0\x0\x18\x0\x0\x0\x26\x0\x10\x0\x0\x0\x1\x0\x6\x73\x74\x72\x69\x6e\x67\x0\x0\x0\x20\x0\x10\x0\x0\x0\x18\x0\x0\x0\x27\x0\x10\x0\x0\x0\x1\x0\x6\x73\x74\x72\x69\x6e\x67\x0\x0\x0\x20\x0\x10\x0\x0\x0\x18\x0\x0\x0\x28\x0\x10\x0\x0\x0\x1\x0\x6\x73\x74\x72\x69\x6e\x67\x0\x0\x0\x20\x0\x10\x0\x0\x0\x2b\x0\x0\x0\x29\x0\x0\x10\x2\x7\x73\x74\x72\x69\x6e\x67\x0\x0\x0\x20\x0\x10\x2\xa\x3\x1\x2\x3\x14\x3\x4\x5\x6\x2\xa\x3\x1\x2\x3\x14\x3\x4\x5\x6\x0\x0\x0\x18\x0\x0\x0\x2a\x0\x10\x0\x0\x0\x1\x0\x6\x73\x74\x72\x69\x6e\x67\x0\x0\x0\x20\x0\x10\x0\x0\x0\x18\x0\x0\x0\x2b\x0\x10\x0\x0\x0\x1\x0\x6\x73\x74\x72\x69\x6e\x67\x0\x0\x0\x20\x0\x10\x0\x0\x0\x2b\x0\x0\x0\x2c\x0\x0\x10\x2\x7\x73\x74\x72\x69\x6e\x67\x0\x0\x0\x20\x0\x10\x2\xa\x3\x1\x2\x3\x14\x3\x4\x5\x6\x2\xa\x3\x1\x2\x3\x14\x3\x4\x5\x6\x0\x0\x0\x6\x0\x0\x0\x2d\x0\x10\x0\x0\x0\x6\x0\x0\x0\x2e\x0\x10\x0\x0\x0\x6\x0\x0\x0\x2f\x0\x10\x0\x0\x0\x6\x0\x0\x0\x30\x0\x10\x0\x0\x0\x6\x0\x0\x0\x31\x0\x10\x0\x0\x0\x6\x0\x0\x0\x32\x0\x10\x0\x0\x0\x12\x0\x0\x0\x33\x0\x0\x10\x2\xa\x3\x1\x2\x3\x14\x3\x4\x5\x6\x0\x0\x0\x16\x0\x0\x0\x34\x0\x10\x0\x0\x0\x1\x0\x6\x73\x74\x72\x69\x6e\x67\x0\x0\x0\x20\x0\x0\x0\x16\x0\x0\x0\x35\x0\x10\x0\x0\x0\x1\x0\x6\x73\x74\x72\x69\x6e\x67\x0\x0\x0\x20\x0\x0\x0\x16\x0\x0\x0\x36\x0\x10\x0\x0\x0\x1\x0\x6\x73\x74\x72\x69\x6e\x67\x0\x0\x0\x20\x0\x0\x0\x29\x0\x0\x0\x37\x0\x0\x10\x2\x7\x73\x74\x72\x69\x6e\x67\x0\x0\x0\x20\x2\xa\x3\x1\x2\x3\x14\x3\x4\x5\x6\x2\xa\x3\x1\x2\x3\x14\x3\x4\x5\x6\x0\x0\x0\x1a\x0\x0\x0\x38\x0\x0\x0\x1\x0\x6\x73\x74\x72\x69\x6e\x67\x0\x0\x0\x1\x0\x0\x0\x20\x0\x10\x0\x0\x0\x1a\x0\x0\x0\x39\x0\x0\x0\x1\x0\x6\x73\x74\x72\x69\x6e\x67\x0\x0\x0\x1\x0\x0\x0\x20\x0\x10\x0\x0\x0\x1a\x0\x0\x0\x3a\x0\x0\x0\x1\x0\x6\x73\x74\x72\x69\x6e\x67\x0\x0\x0\x1\x0\x0\x0\x20\x0\x10\x0\x0\x0\x1e\x0\x0\x0\x3b\x0\x0\x0\x20\x0\x0\x0\x1\x0\x6\x73\x74\x72\x69\x6e\x67\x0\x0\x0\x1\x0\x0\x0\x20\x0\x10\x0\x0\x0\x1e\x0\x0\x0\x3c\x0\x0\x0\x20\x0\x0\x0\x1\x0\x6\x73\x74\x72\x69\x6e\x67\x0\x0\x0\x1\x0\x0\x0\x20\x0\x10\x0\x0\x0\x1e\x0\x0\x0\x3d\x0\x0\x0\x20\x0\x0\x0\x1\x0\x6\x73\x74\x72\x69\x6e\x67\x0\x0\x0\x1\x0\x0\x0\x20\x0\x10\x0\x0\x0\x1e\x0\x0\x0\x3e\x0\x0\x0\x20\x0\x0\x0\x1\x0\x6\x73\x74\x72\x69\x6e\x67\x0\x0\x0\x1\x0\x0\x0\x20\x0\x10\x0\x0\x0\x1e\x0\x0\x0\x3f\x0\x0\x0\x20\x0\x0\x0\x1\x0\x6\x73\x74\x72\x69\x6e\x67\x0\x0\x0\x1\x0\x0\x0\x20\x0\x10\x0\x0\x0\x39\x0\x0\x0\x40\x0\x0\x0\x0\x20\x2\x7\x73\x74\x72\x69\x6e\x67\x2\x0\x0\x0\x20\x0\x10\x2\xa\x3\x1\x2\x3\x14\x3\x4\x5\x6\x2\xa\x3\x1\x2\x3\x14\x3\x4\x5\x6\x2\xa\x3\x1\x2\x3\x14\x3\x4\x5\x6\x0\x0\x0\x2a\x0\x0\x0\x41\x0\x0\x0\x1\x0\x6\x73\x74\x72\x69\x6e\x67\x0\x0\x0\x1\x0\x0\x0\x20\x0\x0\x0\x0\x0\x0\x0\x40\x0\x6\x73\x74\x72\x69\x6e\x67\x0\x10\x0\x0\x0\x2a\x0\x0\x0\x42\x0\x0\x0\x1\x0\x6\x73\x74\x72\x69\x6e\x67\x0\x0\x0\x1\x0\x0\x0\x20\x0\x0\x0\x0\x0\x0\x0\x40\x0\x6\x73\x74\x72\x69\x6e\x67\x0\x10\x0\x0\x0\x2c\x0\x0\x0\x43\x0\x0\x0\x1\x0\x6\x73\x74\x72\x69\x6e\x67\x0\x0\x0\x1\x0\x0\x0\x20\x0\x0\x0\x0\x0\x0\x0\x40\x0\x6\x73\x74\x72\x69\x6e\x67\x0\x10\x0\x10\x0\x0\x0\x30\x0\x0\x0\x44\x0\x0\x0\x20\x0\x0\x0\x1\x0\x6\x73\x74\x72\x69\x6e\x67\x0\x0\x0\x1\x0\x0\x0\x20\x0\x0\x0\x0\x0\x0\x0\x40\x0\x6\x73\x74\x72\x69\x6e\x67\x0\x10\x0\x10\x0\x0\x0\x30\x0\x0\x0\x45\x0\x0\x0\x20\x0\x0\x0\x1\x0\x6\x73\x74\x72\x69\x6e\x67\x0\x0\x0\x1\x0\x0\x0\x20\x0\x0\x0\x0\x0\x0\x0\x40\x0\x6\x73\x74\x72\x69\x6e\x67\x0\x10\x0\x10\x0\x0\x0\x34\x0\x0\x0\x46\x0\x0\x0\x20\x0\x0\x0\x1\x0\x6\x73\x74\x72\x69\x6e\x67\x0\x0\x0\x1\x0\x0\x0\x20\x0\x0\x0\x0\x0\x0\x0\x40\x0\x0\x0\x20\x0\x6\x73\x74\x72\x69\x6e\x67\x0\x10\x0\x10\x0\x0\x0\x4e\x0\x0\x0\x47\x0\x0\x0\x0\x20\x2\x7\x73\x74\x72\x69\x6e\x67\x2\x0\x0\x0\x20\x0\x0\x0\x0\x0\x0\x0\x40\x0\x0\x0\x20\x7\x73\x74\x72\x69\x6e\x67\x0\x10\x2\xa\x3\x1\x2\x3\x14\x3\x4\x5\x6\x2\xa\x3\x1\x2\x3\x14\x3\x4\x5\x6\x0\x10\x2\xa\x3\x1\x2\x3\x14\x3\x4\x5\x6\x0\x0\x0\x16\x0\x0\x0\x48\x0\x10\x0\x0\x0\x20\x0\x6\x73\x74\x72\x69\x6e\x67\x0\x0\x0\x20\x0\x0\x0\x22\x0\x0\x0\x49\x0\x0\x0\x20\x0\x10\x0\x6\x73\x74\x72\x69\x6e\x67\x0\x0\x0\x20\x0\x6\x73\x74\x72\x69\x6e\x67\x0\x0\x0\x20\x0\x0\x0\x22\x0\x0\x0\x4a\x0\x0\x0\x20\x0\x10\x0\x6\x73\x74\x72\x69\x6e\x67\x0\x0\x0\x20\x0\x6\x73\x74\x72\x69\x6e\x67\x0\x0\x0\x20\x0\x0\x0\x2c\x0\x0\x0\x4b\x0\x0\x0\x0\x20\x0\x10\x7\x73\x74\x72\x69\x6e\x67\x0\x0\x0\x20\x7\x73\x74\x72\x69\x6e\x67\x0\x0\x0\x20\x2\xa\x3\x1\x2\x3\x14\x3\x4\x5\x6\x0\x0\x0\x36\x0\x0\x0\x4c\x0\x10\x0\x0\x0\x20\x0\x6\x73\x74\x72\x69\x6e\x67\x0\x6\x73\x74\x72\x69\x6e\x67\x0\x6\x73\x74\x72\x69\x6e\x67\x0\x0\x0\x1\x0\x6\x73\x74\x72\x69\x6e\x67\x0\x0\x0\x4\x0\x1\x2\x3\x0\x0\x0\x36\x0\x0\x0\x4d\x0\x10\x0\x0\x0\x20\x0\x6\x73\x74\x72\x69\x6e\x67\x0\x6\x73\x74\x72\x69\x6e\x67\x0\x6\x73\x74\x72\x69\x6e\x67\x0\x0\x0\x1\x0\x6\x73\x74\x72\x69\x6e\x67\x0\x0\x0\x4\x0\x1\x2\x3\x0\x0\x0\x3a\x0\x0\x0\x4e\x0\x0\x0\x20\x0\x10\x0\x0\x0\x20\x0\x6\x73\x74\x72\x69\x6e\x67\x0\x6\x73\x74\x72\x69\x6e\x67\x0\x6\x73\x74\x72\x69\x6e\x67\x0\x0\x0\x1\x0\x6\x73\x74\x72\x69\x6e\x67\x0\x0\x0\x4\x0\x1\x2\x3\x0\x0\x0\x3a\x0\x0\x0\x4f\x0\x0\x0\x20\x0\x10\x0\x0\x0\x20\x0\x6\x73\x74\x72\x69\x6e\x67\x0\x6\x73\x74\x72\x69\x6e\x67\x0\x6\x73\x74\x72\x69\x6e\x67\x0\x0\x0\x1\x0\x6\x73\x74\x72\x69\x6e\x67\x0\x0\x0\x4\x0\x1\x2\x3\x0\x0\x0\x3a\x0\x0\x0\x50\x0\x0\x0\x20\x0\x10\x0\x0\x0\x20\x0\x6\x73\x74\x72\x69\x6e\x67\x0\x6\x73\x74\x72\x69\x6e\x67\x0\x6\x73\x74\x72\x69\x6e\x67\x0\x0\x0\x1\x0\x6\x73\x74\x72\x69\x6e\x67\x0\x0\x0\x4\x0\x1\x2\x3\x0\x0\x0\x42\x0\x0\x0\x51\x0\x0\x0\x20\x0\x10\x0\x0\x0\x20\x0\x6\x73\x74\x72\x69\x6e\x67\x0\x6\x73\x74\x72\x69\x6e\x67\x0\x6\x73\x74\x72\x69\x6e\x67\x0\x0\x0\x1\x0\x6\x73\x74\x72\x69\x6e\x67\x0\x6\x73\x74\x72\x69\x6e\x67\x0\x0\x0\x4\x0\x1\x2\x3\x0\x0\x0\x4e\x0\x0\x0\x52\x0\x0\x0\x0\x20\x0\x10\x0\x0\x0\x20\x7\x73\x74\x72\x69\x6e\x67\x7\x73\x74\x72\x69\x6e\x67\x7\x73\x74\x72\x69\x6e\x67\x2\x7\x73\x74\x72\x69\x6e\x67\x7\x73\x74\x72\x69\x6e\x67\x5\x0\x1\x2\x3\x2\xa\x3\x1\x2\x3\x14\x3\x4\x5\x6\x2\xa\x3\x1\x2\x3\x14\x3\x4\x5\x6\x0\x0\x0\x6\x0\x0\x0\x53\x0\x10\x0\x0\x0\xa\x0\x0\x0\x54\x0\x0\x0\x20\x0\x10\x0\x0\x0\xa\x0\x0\x0\x55\x0\x0\x0\x20\x0\x10\x0\x0\x0\xa\x0\x0\x0\x56\x0\x0\x0\x20\x0\x10\x0\x0\x0\x16\x0\x0\x0\x57\x0\x0\x0\x0\x20\x0\x10\x2\xa\x3\x1\x2\x3\x14\x3\x4\x5\x6\x0\x0\x0\x6\x0\x0\x0\x58\x0\x10\x0\x0\x0\xa\x0\x0\x0\x59\x0\x0\x0\x20\x0\x10\x0\x0\x0\xa\x0\x0\x0\x5a\x0\x0\x0\x20\x0\x10\x0\x0\x0\x20\x0\x0\x0\x5b\x0\x0\x0\x20\x0\x10\x0\x0\x0\x1\x0\x6\x73\x74\x72\x69\x6e\x67\x0\x6\x73\x74\x72\x69\x6e\x67\x0\x10\x0\x0\x0\x32\x0\x0\x0\x5c\x0\x0\x0\x0\x20\x0\x10\x2\x7\x73\x74\x72\x69\x6e\x67\x7\x73\x74\x72\x69\x6e\x67\x0\x10\x2\xa\x3\x1\x2\x3\x14\x3\x4\x5\x6\x2\xa\x3\x1\x2\x3\x14\x3\x4\x5\x6\x0\x0\x0\xe\x0\x0\x0\x5d\x0\x10\x0\x0\x0\x4\x0\x1\x2\x3\x0\x0\x0\x12\x0\x0\x0\x5e\x0\x0\x0\x20\x0\x10\x0\x0\x0\x4\x0\x1\x2\x3\x0\x0\x0\x12\x0\x0\x0\x5f\x0\x0\x0\x20\x0\x10\x0\x0\x0\x4\x0\x1\x2\x3\x0\x0\x0\x12\x0\x0\x0\x60\x0\x0\x0\x20\x0\x10\x0\x0\x0\x4\x0\x1\x2\x3\x0\x0\x0\x1b\x0\x0\x0\x61\x0\x0\x0\x0\x20\x0\x10\x5\x0\x1\x2\x3\x2\xa\x3\x1\x2\x3\x14\x3\x4\x5\x6\x0\x0\x0\x56\x0\x0\x0\x62\x0\x0\x0\x1\x0\x10\x0\x6\x73\x74\x72\x69\x6e\x67\x0\x6\x73\x74\x72\x69\x6e\x67\x0\x6\x73\x74\x72\x69\x6e\x67\x0\x6\x73\x74\x72\x69\x6e\x67\x0\x0\x0\x1\x0\x6\x73\x74\x72\x69\x6e\x67\x0\x6\x73\x74\x72\x69\x6e\x67\x0\x6\x73\x74\x72\x69\x6e\x67\x0\x0\x0\x4\x0\x1\x2\x3\x0\x0\x0\x4\x0\x1\x2\x3\x0\x0\x0\x5a\x0\x0\x0\x63\x0\x0\x0\x20\x0\x0\x0\x1\x0\x10\x0\x6\x73\x74\x72\x69\x6e\x67\x0\x6\x73\x74\x72\x69\x6e\x67\x0\x6\x73\x74\x72\x69\x6e\x67\x0\x6\x73\x74\x72\x69\x6e\x67\x0\x0\x0\x1\x0\x6\x73\x74\x72\x69\x6e\x67\x0\x6\x73\x74\x72\x69\x6e\x67\x0\x6\x73\x74\x72\x69\x6e\x67\x0\x0\x0\x4\x0\x1\x2\x3\x0\x0\x0\x4\x0\x1\x2\x3\x0\x0\x0\x5a\x0\x0\x0\x64\x0\x0\x0\x20\x0\x0\x0\x1\x0\x10\x0\x6\x73\x74\x72\x69\x6e\x67\x0\x6\x73\x74\x72\x69\x6e\x67\x0\x6\x73\x74\x72\x69\x6e\x67\x0\x6\x73\x74\x72\x69\x6e\x67\x0\x0\x0\x1\x0\x6\x73\x74\x72\x69\x6e\x67\x0\x6\x73\x74\x72\x69\x6e\x67\x0\x6\x73\x74\x72\x69\x6e\x67\x0\x0\x0\x4\x0\x1\x2\x3\x0\x0\x0\x4\x0\x1\x2\x3\x0\x0\x0\x5e\x0\x0\x0\x65\x0\x0\x0\x20\x0\x0\x0\x1\x0\x10\x0\x6\x73\x74\x72\x69\x6e\x67\x0\x6\x73\x74\x72\x69\x6e\x67\x0\x6\x73\x74\x72\x69\x6e\x67\x0\x6\x73\x74\x72\x69\x6e\x67\x0\x0\x0\x1\x0\x6\x73\x74\x72\x69\x6e\x67\x0\x6\x73\x74\x72\x69\x6e\x67\x0\x6\x73\x74\x72\x69\x6e\x67\x0\x0\x0\x4\x0\x1\x2\x3\x0\x0\x0\x4\x0\x1\x2\x3\x0\x0\x0\x20\x0\x0\x0\x66\x0\x0\x0\x66\x0\x0\x0\x20\x0\x0\x0\x1\x0\x10\x0\x6\x73\x74\x72\x69\x6e\x67\x0\x6\x73\x74\x72\x69\x6e\x67\x0\x6\x73\x74\x72\x69\x6e\x67\x0\x6\x73\x74\x72\x69\x6e\x67\x0\x0\x0\x1\x0\x6\x73\x74\x72\x69\x6e\x67\x0\x6\x73\x74\x72\x69\x6e\x67\x0\x6\x73\x74\x72\x69\x6e\x67\x0\x6\x73\x74\x72\x69\x6e\x67\x0\x0\x0\x4\x0\x1\x2\x3\x0\x0\x0\x4\x0\x1\x2\x3\x0\x0\x0\x20\x0\x0\x0\x74\x0\x0\x0\x67\x0\x0\x0\x0\x20\x2\x0\x10\x7\x73\x74\x72\x69\x6e\x67\x7\x73\x74\x72\x69\x6e\x67\x7\x73\x74\x72\x69\x6e\x67\x7\x73\x74\x72\x69\x6e\x67\x2\x7\x73\x74\x72\x69\x6e\x67\x7\x73\x74\x72\x69\x6e\x67\x7\x73\x74\x72\x69\x6e\x67\x7\x73\x74\x72\x69\x6e\x67\x5\x0\x1\x2\x3\x5\x0\x1\x2\x3\x2\xa\x3\x1\x2\x3\x14\x3\x4\x5\x6\x0\x0\x0\x20\x2\xa\x3\x1\x2\x3\x14\x3\x4\x5\x6\x2\xa\x3\x1\x2\x3\x14\x3\x4\x5\x6\x0\x0\x0\x1a\x0\x0\x0\x68\x0\x10\x0\x0\x0\x1\x0\x6\x73\x74\x72\x69\x6e\x67\x0\x6\x73\x74\x72\x69\x6e\x67\x0\x0\x0\x1e\x0\x0\x0\x69\x0\x0\x0\x20\x0\x10\x0\x0\x0\x1\x0\x6\x73\x74\x72\x69\x6e\x67\x0\x6\x73\x74\x72\x69\x6e\x67\x0\x0\x0\x1e\x0\x0\x0\x6a\x0\x0\x0\x20\x0\x10\x0\x0\x0\x1\x0\x6\x73\x74\x72\x69\x6e\x67\x0\x6\x73\x74\x72\x69\x6e\x67\x0\x0\x0\x30\x0\x0\x0\x6b\x0\x0\x0\x0\x20\x0\x10\x2\x7\x73\x74\x72\x69\x6e\x67\x7\x73\x74\x72\x69\x6e\x67\x2\xa\x3\x1\x2\x3\x14\x3\x4\x5\x6\x2\xa\x3\x1\x2\x3\x14\x3\x4\x5\x6\x0\x0\x0\x12\x0\x0\x0\x6c\x0\x10\x0\x0\x0\x1\x0\x6\x73\x74\x72\x69\x6e\x67\x0\x0\x0\x12\x0\x0\x0\x6d\x0\x10\x0\x0\x0\x1\x0\x6\x73\x74\x72\x69\x6e\x67\x0\x0\x0\x10\x0\x0\x0\x6e\x0\x10\x0\x0\x0\x1\x0\x10\x0\x10\x0\x10\x0\x0\x0\x14\x0\x0\x0\x6f\x0\x10\x0\x0\x0\x1\x0\x10\x0\x10\x0\x10\x0\x0\x0\x20\x0\x0\x0\x14\x0\x0\x0\x70\x0\x10\x0\x0\x0\x1\x0\x10\x0\x10\x0\x10\x0\x0\x0\x20\x0\x0\x0\x27\x0\x0\x0\x71\x0\x10\x2\x0\x10\x0\x10\x0\x10\x2\xa\x3\x1\x2\x3\x14\x3\x4\x5\x6\x0\x0\x0\x20\x2\xa\x3\x1\x2\x3\x14\x3\x4\x5\x6\x0\x0\x0\x12\x0\x0\x0\x72\x0\x0\x0\x1\x0\x6\x73\x74\x72\x69\x6e\x67\x0\x10\x0\x0\x0\x1a\x0\x0\x0\x73\x0\x0\x0\x1\x0\x6\x73\x74\x72\x69\x6e\x67\x0\x10\x0\x6\x73\x74\x72\x69\x6e\x67\x0\x0\x0\x1e\x0\x0\x0\x74\x0\x0\x0\x20\x0\x0\x0\x1\x0\x6\x73\x74\x72\x69\x6e\x67\x0\x10\x0\x6\x73\x74\x72\x69\x6e\x67\x0\x0\x0\x1e\x0\x0\x0\x75\x0\x0\x0\x20\x0\x0\x0\x1\x0\x6\x73\x74\x72\x69\x6e\x67\x0\x10\x0\x6\x73\x74\x72\x69\x6e\x67\x0\x0\x0\x1e\x0\x0\x0\x76\x0\x0\x0\x20\x0\x0\x0\x1\x0\x6\x73\x74\x72\x69\x6e\x67\x0\x10\x0\x6\x73\x74\x72\x69\x6e\x67\x0\x0\x0\x53\x0\x0\x0\x77\x0\x0\x0\x0\x20\x2\x7\x73\x74\x72\x69\x6e\x67\x0\x10\x7\x73\x74\x72\x69\x6e\x67\x0\x0\x0\x20\x0\x10\x2\x7\x73\x74\x72\x69\x6e\x67\x7\x73\x74\x72\x69\x6e\x67\x0\x8\x0\x2\xa\x3\x1\x2\x3\x14\x3\x4\x5\x6\x2\xa\x3\x1\x2\x3\x14\x3\x4\x5\x6\x2\xa\x3\x1\x2\x3\x14\x3\x4\x5\x6\x0\x0\x0\x12\x0\x0\x0\x78\x0\x0\x0\x1\x0\x6\x73\x74\x72\x69\x6e\x67\x0\x10\x0\x0\x0\x16\x0\x0\x0\x79\x0\x0\x0\x20\x0\x0\x0\x1\x0\x6\x73\x74\x72\x69\x6e\x67\x0\x10\x0\x0\x0\x16\x0\x0\x0\x7a\x0\x0\x0\x20\x0\x0\x0\x1\x0\x6\x73\x74\x72\x69\x6e\x67\x0\x10\x0\x0\x0\x16\x0\x0\x0\x7b\x0\x0\x0\x20\x0\x0\x0\x1\x0\x6\x73\x74\x72\x69\x6e\x67\x0\x10\x0\x0\x0\x29\x0\x0\x0\x7c\x0\x0\x0\x0\x20\x2\x7\x73\x74\x72\x69\x6e\x67\x0\x10\x2\xa\x3\x1\x2\x3\x14\x3\x4\x5\x6\x2\xa\x3\x1\x2\x3\x14\x3\x4\x5\x6\x0\x0\x0\x26\x0\x0\x0\x7d\x0\x0\x0\x20\x0\x0\x0\x1\x0\x6\x73\x74\x72\x69\x6e\x67\x0\x0\x0\x1\x0\x0\x0\x20\x0\x0\x0\x0\x0\x0\x0\x40\x0\x10\x0\x0\x0\x26\x0\x0\x0\x7e\x0\x0\x0\x20\x0\x0\x0\x1\x0\x6\x73\x74\x72\x69\x6e\x67\x0\x0\x0\x1\x0\x0\x0\x20\x0\x0\x0\x0\x0\x0\x0\x40\x0\x10\x0\x0\x0\x14\x0\x0\x0\x7f\x0\x0\x0\x20\x0\x10\x0\x0\x0\x0\x0\x0\x0\x40\x0\x10\x0\x0\x0\x14\x0\x0\x0\x80\x0\x0\x0\x20\x0\x10\x0\x0\x0\x0\x0\x0\x0\x40\x0\x10\x0\x0\x0\x20\x0\x0\x0\x81\x0\x0\x0\x0\x20\x0\x10\x0\x0\x0\x0\x0\x0\x0\x40\x0\x10\x2\xa\x3\x1\x2\x3\x14\x3\x4\x5\x6\x0\x0\x0\x22\x0\x0\x0\x82\x0\x0\x0\x1\x0\x6\x73\x74\x72\x69\x6e\x67\x0\x0\x0\x1\x0\x10\x0\x0\x0\x20\x0\x0\x0\x0\x0\x0\x0\x40\x0\x0\x0\x26\x0\x0\x0\x83\x0\x0\x0\x1\x0\x6\x73\x74\x72\x69\x6e\x67\x0\x0\x0\x1\x0\x10\x0\x0\x0\x20\x0\x0\x0\x20\x0\x0\x0\x0\x0\x0\x0\x40\x0\x0\x0\x2a\x0\x0\x0\x84\x0\x0\x0\x20\x0\x0\x0\x1\x0\x6\x73\x74\x72\x69\x6e\x67\x0\x0\x0\x1\x0\x10\x0\x0\x0\x20\x0\x0\x0\x20\x0\x0\x0\x0\x0\x0\x0\x40\x0\x0\x0\x2a\x0\x0\x0\x85\x0\x0\x0\x20\x0\x0\x0\x1\x0\x6\x73\x74\x72\x69\x6e\x67\x0\x0\x0\x1\x0\x10\x0\x0\x0\x20\x0\x0\x0\x20\x0\x0\x0\x0\x0\x0\x0\x40\x0\x0\x0\x1e\x0\x0\x0\x86\x0\x0\x0\x20\x0\x0\x0\x1\x0\x6\x73\x74\x72\x69\x6e\x67\x0\x0\x0\x1\x0\x0\x0\x20\x0\x10\x0\x0\x0\x1e\x0\x0\x0\x87\x0\x0\x0\x20\x0\x0\x0\x1\x0\x6\x73\x74\x72\x69\x6e\x67\x0\x0\x0\x1\x0\x0\x0\x20\x0\x10\x0\x0\x0\xa\x0\x0\x0\x88\x0\x0\x0\x20\x0\x10\x0\x0\x0\xa\x0\x0\x0\x89\x0\x0\x0\x20\x0\x10\x0\x0\x0\xa\x0\x0\x0\x8a\x0\x0\x0\x20\x0\x10\x0\x0\x0\xa\x0\x0\x0\x8b\x0\x0\x0\x20\x0\x10\x0\x0\x0\x26\x0\x0\x0\x8c\x0\x0\x0\x1\x0\x0\x0\x0\x0\x0\x0\x40\x0\x0\x0\x1\x0\x6\x73\x74\x72\x69\x6e\x67\x0\x0\x0\x1\x0\x0\x0\x20\x0\x10\x0\x0\x0\x1e\x0\x0\x0\x8d\x0\x0\x0\x20\x0\x0\x0\x1\x0\x6\x73\x74\x72\x69\x6e\x67\x0\x0\x0\x1\x0\x0\x0\x20\x0\x10\x0\x0\x0\x1e\x0\x0\x0\x8e\x0\x0\x0\x20\x0\x0\x0\x1\x0\x6\x73\x74\x72\x69\x6e\x67\x0\x0\x0\x1\x0\x0\x0\x20\x0\x10\x0\x0\x0\x1e\x0\x0\x0\x8f\x0\x0\x0\x20\x0\x0\x0\x1\x0\x6\x73\x74\x72\x69\x6e\x67\x0\x0\x0\x1\x0\x0\x0\x20\x0\x10\x0\x0\x0\x35\x0\x0\x0\x90\x0\x0\x0\x20\x0\x10\x0\x6\x73\x74\x72\x69\x6e\x67\x0\x0\x0\x1\x8\x0\x6\x73\x74\x72\x69\x6e\x67\x0\x0\x0\x1\x0\x6\x73\x74\x72\x69\x6e\x67\x0\x6\x73\x74\x72\x69\x6e\x67\x8\x8\x0\x0\x0\x36\x0\x0\x0\x91\x0\x0\x0\x20\x0\x10\x0\x6\x73\x74\x72\x69\x6e\x67\x0\x0\x0\x1\x8\x0\x6\x73\x74\x72\x69\x6e\x67\x8\x0\x0\x0\x1\x0\x6\x73\x74\x72\x69\x6e\x67\x0\x6\x73\x74\x72\x69\x6e\x67\x8\x8\x0\x0\x0\x16\x0\x0\x0\x92\x0\x0\x0\x20\x0\x0\x0\x1\x0\x10\x0\x6\x73\x74\x72\x69\x6e\x67\x0\x0\x0\x16\x0\x0\x0\x93\x0\x0\x0\x20\x0\x0\x0\x1\x0\x10\x0\x6\x73\x74\x72\x69\x6e\x67\x0\x0\x0\x3f\x0\x0\x0\x94\x0\x0\x0\x20\x0\x0\x0\x1\x0\x10\x0\x6\x73\x74\x72\x69\x6e\x67\x0\x0\x0\x1\x0\x10\x0\x6\x73\x74\x72\x69\x6e\x67\x8\x0\x6\x73\x74\x72\x69\x6e\x67\x0\x6\x73\x74\x72\x69\x6e\x67\x0\x6\x73\x74\x72\x69\x6e\x67\x8\x8\x0\x0\x0\x40\x0\x0\x0\x95\x0\x0\x0\x20\x0\x0\x0\x1\x0\x10\x0\x6\x73\x74\x72\x69\x6e\x67\x0\x0\x0\x1\x0\x10\x0\x6\x73\x74\x72\x69\x6e\x67\x8\x0\x6\x73\x74\x72\x69\x6e\x67\x8\x0\x6\x73\x74\x72\x69\x6e\x67\x0\x6\x73\x74\x72\x69\x6e\x67\x8\x8\x0\x0\x0\x36\x0\x0\x0\x96\x0\x0\x0\x20\x0\x0\x0\x1\x0\x10\x0\x6\x73\x74\x72\x69\x6e\x67\x8\x0\x6\x73\x74\x72\x69\x6e\x67\x0\x0\x0\x1\x0\x6\x73\x74\x72\x69\x6e\x67\x0\x6\x73\x74\x72\x69\x6e\x67\x0\x0\x0\x0\x0\x0\x4b\x0\x0\x0\x97\x0\x0\x0\x20\x0\x0\x0\x1\x0\x10\x0\x6\x73\x74\x72\x69\x6e\x67\x8\x0\x6\x73\x74\x72\x69\x6e\x67\x0\x0\x0\x1\x0\x6\x73\x74\x72\x69\x6e\x67\x0\x6\x73\x74\x72\x69\x6e\x67\x0\x8\x0\x0\x0\x0\x1\x0\x6\x73\x74\x72\x69\x6e\x67\x0\x6\x73\x74\x72\x69\x6e\x67\x8\x0\x0\x0\x4b\x0\x0\x0\x98\x0\x0\x0\x20\x0\x0\x0\x1\x0\x10\x0\x6\x73\x74\x72\x69\x6e\x67\x8\x0\x6\x73\x74\x72\x69\x6e\x67\x0\x0\x0\x1\x0\x6\x73\x74\x72\x69\x6e\x67\x0\x6\x73\x74\x72\x69\x6e\x67\x0\x8\x0\x0\x0\x0\x1\x0\x6\x73\x74\x72\x69\x6e\x67\x0\x6\x73\x74\x72\x69\x6e\x67\x8\x0\x0\x0\x1f\x0\x0\x0\x99\x0\x0\x0\x20\x0\x0\x0\x1\x0\x10\x0\x6\x73\x74\x72\x69\x6e\x67\x8\x0\x6\x73\x74\x72\x69\x6e\x67\x0\x0\x0\x1f\x0\x0\x0\x9a\x0\x0\x0\x20\x0\x0\x0\x1\x0\x10\x0\x6\x73\x74\x72\x69\x6e\x67\x8\x0\x6\x73\x74\x72\x69\x6e\x67\x0\x0\x0\x1e\x0\x0\x0\x9b\x0\x0\x0\x20\x0\x0\x0\x1\x0\x6\x73\x74\x72\x69\x6e\x67\x0\x0\x0\x1\x0\x0\x0\x20\x0\x10\x0\x0\x0\x1e\x0\x0\x0\x9c\x0\x0\x0\x20\x0\x0\x0\x1\x0\x6\x73\x74\x72\x69\x6e\x67\x0\x0\x0\x1\x0\x0\x0\x20\x0\x10\x0\x0\x0\x3b\x0\x0\x0\x9d\x0\x0\x0\x20\x0\x0\x0\x1\x0\x10\x0\x6\x73\x74\x72\x69\x6e\x67\x0\x0\x0\x1\x0\x6\x73\x74\x72\x69\x6e\x67\x0\x0\x0\x1\x0\x0\x0\x20\x0\x0\x0\x0\x0\x0\x0\x40\x0\x0\x0\x0\x0\x0\x0\x40\x0\x0\x0\x0\x3b\x0\x0\x0\x9e\x0\x0\x0\x20\x0\x0\x0\x1\x0\x10\x0\x6\x73\x74\x72\x69\x6e\x67\x0\x0\x0\x1\x0\x6\x73\x74\x72\x69\x6e\x67\x0\x0\x0\x1\x0\x0\x0\x20\x0\x0\x0\x0\x0\x0\x0\x40\x0\x0\x0\x0\x0\x0\x0\x40\x0\x0\x0\x0\x16\x0\x0\x0\x9f\x0\x10\x0\x6\x73\x74\x72\x69\x6e\x67\x0\x0\x0\x4\x0\x1\x2\x3\x0\x0\x0\x1e\x0\x0\x0\xa0\x0\x10\x0\x6\x73\x74\x72\x69\x6e\x67\x0\x0\x0\x4\x0\x1\x2\x3\x0\x0\x0\x0\x0\x0\x0\x40\x0\x0\x0\x1e\x0\x0\x0\xa1\x0\x0\x0\x20\x0\x0\x0\x1\x0\x6\x73\x74\x72\x69\x6e\x67\x0\x10\x0\x6\x73\x74\x72\x69\x6e\x67\x0\x0\x0\x1e\x0\x0\x0\xa2\x0\x0\x0\x20\x0\x0\x0\x1\x0\x6\x73\x74\x72\x69\x6e\x67\x0\x10\x0\x6\x73\x74\x72\x69\x6e\x67\x0\x0\x0\x42\x0\x0\x0\xa3\x0\x10\x0\x6\x73\x74\x72\x69\x6e\x67\x0\x6\x73\x74\x72\x69\x6e\x67\x0\x0\x0\x0\x0\x0\x0\x40\x0\x0\x0\x0\x0\x0\x0\x40\x0\x0\x0\x0\x0\x0\x0\x40\x0\x6\x73\x74\x72\x69\x6e\x67\x0\x0\x0\x4\x0\x1\x2\x3\x0\x0\x0\x20\x0\x0\x0\x42\x0\x0\x0\xa4\x0\x10\x0\x6\x73\x74\x72\x69\x6e\x67\x0\x6\x73\x74\x72\x69\x6e\x67\x0\x0\x0\x0\x0\x0\x0\x40\x0\x0\x0\x0\x0\x0\x0\x40\x0\x0\x0\x0\x0\x0\x0\x40\x0\x6\x73\x74\x72\x69\x6e\x67\x0\x0\x0\x4\x0\x1\x2\x3\x0\x0\x0\x20\x0\x0\x0\x48\x0\x0\x0\xa5\x0\x0\x10\x7\x73\x74\x72\x69\x6e\x67\x7\x73\x74\x72\x69\x6e\x67\x0\x0\x0\x0\x0\x0\x0\x40\x0\x0\x0\x0\x0\x0\x0\x40\x0\x0\x0\x0\x0\x0\x0\x40\x7\x73\x74\x72\x69\x6e\x67\x5\x0\x1\x2\x3\x0\x0\x0\x20\x2\xa\x3\x1\x2\x3\x14\x3\x4\x5\x6\x0\x0\x0\x12\x0\x0\x0\xa6\x0\x10\x0\x0\x0\x0\x0\x0\x0\x40\x0\x0\x0\x20\x0\x0\x0\x12\x0\x0\x0\xa7\x0\x10\x0\x0\x0\x0\x0\x0\x0\x40\x0\x0\x0\x20\x0\x0\x0\x12\x0\x0\x0\xa8\x0\x10\x0\x0\x0\x0\x0\x0\x0\x40\x0\x0\x0\x20\x0\x0\x0\x12\x0\x0\x0\xa9\x0\x10\x0\x0\x0\x0\x0\x0\x0\x40\x0\x0\x0\x20\x0\x0\x0\x5a\x0\x0\x0\xaa\x0\x10\x0\x0\x0\x1\x0\x6\x73\x74\x72\x69\x6e\x67\x0\x6\x73\x74\x72\x69\x6e\x67\x0\x0\x0\x0\x0\x0\x0\x40\x0\x0\x0\x0\x0\x0\x0\x40\x0\x0\x0\x0\x0\x0\x0\x40\x0\x6\x73\x74\x72\x69\x6e\x67\x0\x0\x0\x4\x0\x1\x2\x3\x0\x0\x0\x1\x0\x6\x73\x74\x72\x69\x6e\x67\x0\x6\x73\x74\x72\x69\x6e\x67\x0\x0\x0\x20\x0\x0\x0\x5a\x0\x0\x0\xab\x0\x10\x0\x0\x0\x1\x0\x6\x73\x74\x72\x69\x6e\x67\x0\x6\x73\x74\x72\x69\x6e\x67\x0\x0\x0\x0\x0\x0\x0\x40\x0\x0\x0\x0\x0\x0\x0\x40\x0\x0\x0\x0\x0\x0\x0\x40\x0\x6\x73\x74\x72\x69\x6e\x67\x0\x0\x0\x4\x0\x1\x2\x3\x0\x0\x0\x1\x0\x6\x73\x74\x72\x69\x6e\x67\x0\x6\x73\x74\x72\x69\x6e\x67\x0\x0\x0\x20\x0\x0\x0\x16\x0\x0\x0\xac\x0\x0\x0\x20\x0\x0\x0\x1\x0\x6\x73\x74\x72\x69\x6e\x67\x0\x10\x0\x0\x0\x16\x0\x0\x0\xad\x0\x0\x0\x20\x0\x0\x0\x1\x0\x6\x73\x74\x72\x69\x6e\x67\x0\x10\x0\x0\x0\x29\x0\x0\x0\xae\x0\x0\x0\x0\x20\x2\x7\x73\x74\x72\x69\x6e\x67\x0\x10\x2\xa\x3\x1\x2\x3\x14\x3\x4\x5\x6\x2\xa\x3\x1\x2\x3\x14\x3\x4\x5\x6\x0\x0\x0\x26\x0\x0\x0\xaf\x0\x0\x0\x20\x0\x0\x0\x1\x0\x6\x73\x74\x72\x69\x6e\x67\x0\x0\x0\x1\x0\x0\x0\x20\x0\x10\x0\x6\x73\x74\x72\x69\x6e\x67\x0\x0\x0\x28\x0\x0\x0\xb0\x0\x0\x0\x20\x0\x10\x0\x0\x0\x1\x0\x6\x73\x74\x72\x69\x6e\x67\x0\x0\x0\x1\x0\x0\x0\x20\x0\x10\x0\x6\x73\x74\x72\x69\x6e\x67\x0\x0\x0\x42\x0\x0\x0\xb1\x0\x0\x0\x0\x20\x0\x10\x2\x7\x73\x74\x72\x69\x6e\x67\x2\x0\x0\x0\x20\x0\x10\x7\x73\x74\x72\x69\x6e\x67\x2\xa\x3\x1\x2\x3\x14\x3\x4\x5\x6\x2\xa\x3\x1\x2\x3\x14\x3\x4\x5\x6\x2\xa\x3\x1\x2\x3\x14\x3\x4\x5\x6\x0\x0\x0\x1f\x0\x0\x0\xb2\x0\x0\x0\x20\x0\x0\x0\x1\x0\x10\x0\x6\x73\x74\x72\x69\x6e\x67\x8\x0\x6\x73\x74\x72\x69\x6e\x67\x0\x0\x0\x31\x0\x0\x0\xb3\x0\x0\x0\x0\x20\x2\x0\x10\x7\x73\x74\x72\x69\x6e\x67\x8\x7\x73\x74\x72\x69\x6e\x67\x2\xa\x3\x1\x2\x3\x14\x3\x4\x5\x6\x2\xa\x3\x1\x2\x3\x14\x3\x4\x5\x6\x0\x0\x0\x49\x0\x0\x0\xb4\x0\x0\x0\x0\x20\x0\x10\x7\x73\x74\x72\x69\x6e\x67\x2\x7\x73\x74\x72\x69\x6e\x67\x2\x0\x0\x0\x20\x0\x10\x7\x73\x74\x72\x69\x6e\x67\x2\xa\x3\x1\x2\x3\x14\x3\x4\x5\x6\x2\xa\x3\x1\x2\x3\x14\x3\x4\x5\x6\x2\xa\x3\x1\x2\x3\x14\x3\x4\x5\x6\x0\x0\x0\x4f\x0\x0\x0\xb5\x0\x0\x0\x0\x20\x0\x10\x7\x73\x74\x72\x69\x6e\x67\x2\x7\x73\x74\x72\x69\x6e\x67\x2\x0\x0\x0\x20\x2\x0\x0\x0\x20\x2\x0\x0\x0\x20\x2\x0\x0\x0\x20\x2\xa\x3\x1\x2\x3\x14\x3\x4\x5\x6\x2\xa\x3\x1\x2\x3\x14\x3\x4\x5\x6\x2\xa\x3\x1\x2\x3\x14\x3\x4\x5\x6\x0\x0\x0\x20\x0\x0\x0\xb6\x0\x10\x0\x0\x0\x20\x0\x0\x0\x1\x0\x6\x73\x74\x72\x69\x6e\x67\x0\x0\x0\x1\x0\x0\x0\x20\x0\x10" + } +} +actions { + on_write { + data: "" + end_stream: true + } +} \ No newline at end of file diff --git a/test/extensions/filters/network/common/fuzz/network_writefilter_corpus/kafka_broker_response1 b/test/extensions/filters/network/common/fuzz/network_writefilter_corpus/kafka_broker_response1 new file mode 100644 index 000000000000..bf2ad07c74c8 --- /dev/null +++ b/test/extensions/filters/network/common/fuzz/network_writefilter_corpus/kafka_broker_response1 @@ -0,0 +1,18 @@ +config { + name: "envoy.filters.network.kafka_broker" + typed_config { + type_url: "type.googleapis.com/envoy.extensions.filters.network.kafka_broker.v3.KafkaBroker" + value: "\n}\177\177\177\177\177\177\177\177\177\177\177\177\177\177\177\177\177\177\177\177\177\177\177\177\177\177\177\177\177\177\177\177\177\177\177\177\177\177\177\177\177\177\177\177\177\177\177\177\177\177\177\177\177\177\177\177\177\177\177\177\177\177\177\177\177\177\177\177\177\177\177\177\177\177\177\177\177\177\177\177\177\177\177\177\177\177\177\177\177\177\177\177\177\177\177\177\177\177\177\177\177\177\177\177\177\177\177\177\177\177\177\177\177\177\177\177\177\177\177\177\177\177\177\177\177" + } +} +actions { + on_write { + data: "\x7f\xff\xff\xff\x0\x0\x0\x2a\x80\x0\x0\x0" + } +} +actions { + on_write { + data: "" + end_stream: true + } +} \ No newline at end of file diff --git a/test/extensions/filters/network/common/fuzz/network_writefilter_corpus/kafka_broker_unknown_response b/test/extensions/filters/network/common/fuzz/network_writefilter_corpus/kafka_broker_unknown_response new file mode 100644 index 000000000000..9cdb94e228d7 --- /dev/null +++ b/test/extensions/filters/network/common/fuzz/network_writefilter_corpus/kafka_broker_unknown_response @@ -0,0 +1,18 @@ +config { + name: "envoy.filters.network.kafka_broker" + typed_config { + type_url: "type.googleapis.com/envoy.extensions.filters.network.kafka_broker.v3.KafkaBroker" + value: "\n}\177\177\177\177\177\177\177\177\177\177\177\177\177\177\177\177\177\177\177\177\177\177\177\177\177\177\177\177\177\177\177\177\177\177\177\177\177\177\177\177\177\177\177\177\177\177\177\177\177\177\177\177\177\177\177\177\177\177\177\177\177\177\177\177\177\177\177\177\177\177\177\177\177\177\177\177\177\177\177\177\177\177\177\177\177\177\177\177\177\177\177\177\177\177\177\177\177\177\177\177\177\177\177\177\177\177\177\177\177\177\177\177\177\177\177\177\177\177\177\177\177\177\177\177\177" + } +} +actions { + on_write { + data: "\x0\x0\x0\x8\x0\x0\x0\x0\x0\x0\x0\x0" + } +} +actions { + on_write { + data: "" + end_stream: true + } +} \ No newline at end of file diff --git a/test/extensions/filters/network/common/fuzz/network_writefilter_corpus/mongodb_proxy_response b/test/extensions/filters/network/common/fuzz/network_writefilter_corpus/mongodb_proxy_response new file mode 100644 index 000000000000..be400868606f --- /dev/null +++ b/test/extensions/filters/network/common/fuzz/network_writefilter_corpus/mongodb_proxy_response @@ -0,0 +1,55 @@ +config { + name: "envoy.filters.network.mongo_proxy" + typed_config { + type_url: "type.googleapis.com/envoy.extensions.filters.network.mongo_proxy.v3.MongoProxy" + value: "\xa\x4\x74\x65\x73\x74\x1a\x4\x1a\x2\x8\x1" + } +} + +actions { + on_write { + data: "\120\0\0\0\1\0\0\0\1\0\0\0\324\7\0\0\4\0\0\0\164\145\163\164\56\164\145\163\164\0\24\0\0\0\377\377\377\377\52\0\0\0\2\163\164\162\151\156\147\137\156\145\145\144\137\145\163\143\0\20\0\0\0\173\42\146\157\157\42\72\40\42\142\141\162\12\42\175\0\0" + } +} + +actions { + on_write { + data: "\56\0\0\0\2\0\0\0\2\0\0\0\1\0\0\0\10\0\0\0\40\116\0\0\0\0\0\0\24\0\0\0\2\0\0\0\5\0\0\0\0\5\0\0\0\0" + } +} + + +actions { + on_write { + data: "\45\0\0\0\3\0\0\0\3\0\0\0\325\7\0\0\0\0\0\0\164\145\163\164\0\24\0\0\0\40\116\0\0\0\0\0\0" + } +} + +actions { + on_write { + data: "\43\0\0\0\4\0\0\0\4\0\0\0\322\7\0\0\10\0\0\0\164\145\163\164\0\5\0\0\0\0\5\0\0\0\0" + } +} + + + + +actions { + on_write { + data: "\50\0\0\0\5\0\0\0\5\0\0\0\327\7\0\0\0\0\0\0\2\0\0\0\40\116\0\0\0\0\0\0\100\234\0\0\0\0\0\0" + } +} + + + +actions { + on_write { + data: "\120\0\0\0\17\0\0\0\31\0\0\0\332\7\0\0\124\145\163\164\40\144\141\164\141\142\141\163\145\0\124\145\163\164\40\143\157\155\155\141\156\144\40\156\141\155\145\0\5\0\0\0\0\5\0\0\0\0\26\0\0\0\2\167\157\162\154\144\0\6\0\0\0\150\145\154\154\157\0\0" + } +} + +actions { + on_write { + data: "\60\0\0\0\20\0\0\0\32\0\0\0\333\7\0\0\5\0\0\0\0\5\0\0\0\0\26\0\0\0\2\167\157\162\154\144\0\6\0\0\0\150\145\154\154\157\0\0" + } +} diff --git a/test/extensions/filters/network/common/fuzz/network_writefilter_corpus/mysql_proxy_msg_split b/test/extensions/filters/network/common/fuzz/network_writefilter_corpus/mysql_proxy_msg_split new file mode 100644 index 000000000000..f95b3684b202 --- /dev/null +++ b/test/extensions/filters/network/common/fuzz/network_writefilter_corpus/mysql_proxy_msg_split @@ -0,0 +1,125 @@ +config { + name: "envoy.filters.network.mysql_proxy" + typed_config { + type_url: "type.googleapis.com/envoy.extensions.filters.network.mysql_proxy.v3.MySQLProxy" + value: "\n\006#\336\215\302\246\001" + } +} + { + on_write { + data: "\34\0\0\0\12\65\56\60\56\65\64\0\136\0\0\0\41\100\163\141\154\164\43\44\0\1\1\41\0\2\0\2" + } +} + +actions { + on_write { + data: "\57\0\0\1\0\0\0\3\1\0\0\0\41\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\165\163\145\162\61\0\160\64\44\44\167\60\162\66\0" + } +} + +actions { + on_write { + data: "\7\0\0\2\376\1\0\0\0\1\0" + } +} + +actions { + on_write { + data: "\14\0\0\3\155\171\163\161\154\137\157\160\141\161\165\145" + } +} + +actions { + on_write { + data: "\7\0\0\4\377\1\0\0\0\1\0" + } +} + +actions { + on_write { + data: "\30\0\0\0\3\103\122\105\101\124\105\40\104\101\124\101\102\101\123\105\40\155\171\163\161\154\144\142" + } +} + +actions { + on_write { + data: "\34\0\0\0\12\65\56\60\56\65\64\0\136\0\0\0\41\100\163\141\154\164\43\44\0\1\1\41\0\2\0\2" + } +} +actions { + advance_time { + milliseconds: 14848 + } +} +actions { + on_write { + data: "\7\0\0\2\377\1\0\0\0\1\0" + end_stream: true + } +} +actions { + on_new_connection { + } +} +actions { + on_write { + data: "\57\0\0\1\0\2\0\3\1\0\0\0\41\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\165\163\145\162\61\0\160\64\44\44\167\60\162\66\0" + } +} +actions { + on_write { + data: "\7\0\0\2\0\1\0\0\0\1\0" + } +} +actions { + on_write { + data: "\7\0\0\2\376\1\0\0\0\1\0" + end_stream: true + } +} +actions { + on_write { + data: "\7\0\0\4\377\1\0\0\0\1\0" + } +} +actions { + on_write { + data: "\57\0\0\1\0\0\0\3\1\0\0\0\41\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\165\163\145\162\61\0\160\64\44\44\167\60\162\66\0" + end_stream: true + } +} +actions { + on_write { + data: "\30\0\0\0\3\103\122\105\101\124\105\40\104\101\124\101\102\101\123\105\40\155\171\163\161\154\144\142" + } +} +actions { + on_write { + data: "\30\0\0\5\3\103\122\105\101\124\105\40\104\101\124\101\102\101\123\105\40\155\171\163\161\154\144\142" + } +} +actions { + on_write { + data: "\1\0\0\0\4" + } +} +actions { + on_write { + data: "\7\0\0\4\1\1\0\0\0\1\0" + } +} +actions { + on_write { + data: "\7\0\0\4\1\1\0\0\0\1\0" + } +} +actions { + on_write { + end_stream: true + } +} +actions { + on_write { + data: "3" + } +} \ No newline at end of file diff --git a/test/extensions/filters/network/common/fuzz/network_writefilter_corpus/zookeeper_proxy_auth b/test/extensions/filters/network/common/fuzz/network_writefilter_corpus/zookeeper_proxy_auth new file mode 100644 index 000000000000..b63f559beb0f --- /dev/null +++ b/test/extensions/filters/network/common/fuzz/network_writefilter_corpus/zookeeper_proxy_auth @@ -0,0 +1,17 @@ +config { + name: "envoy.filters.network.zookeeper_proxy" + typed_config { + type_url: "type.googleapis.com/envoy.extensions.filters.network.zookeeper_proxy.v3.ZooKeeperProxy" + value: "\xa\xb\x74\x65\x73\x74\x5f\x70\x72\x65\x66\x69\x78" + } +} +actions { + on_write { + data: "\x0\x0\x0\x14\x0\x0\x0\x0\x0\x0\x0\xa\x0\x0\x0\x0\x0\x0\x0\xc8\x0\x0\x0\x0" + } +} +actions { + on_write { + } +} + diff --git a/test/extensions/filters/network/common/fuzz/network_writefilter_corpus/zookeeper_proxy_connect b/test/extensions/filters/network/common/fuzz/network_writefilter_corpus/zookeeper_proxy_connect new file mode 100644 index 000000000000..b63f559beb0f --- /dev/null +++ b/test/extensions/filters/network/common/fuzz/network_writefilter_corpus/zookeeper_proxy_connect @@ -0,0 +1,17 @@ +config { + name: "envoy.filters.network.zookeeper_proxy" + typed_config { + type_url: "type.googleapis.com/envoy.extensions.filters.network.zookeeper_proxy.v3.ZooKeeperProxy" + value: "\xa\xb\x74\x65\x73\x74\x5f\x70\x72\x65\x66\x69\x78" + } +} +actions { + on_write { + data: "\x0\x0\x0\x14\x0\x0\x0\x0\x0\x0\x0\xa\x0\x0\x0\x0\x0\x0\x0\xc8\x0\x0\x0\x0" + } +} +actions { + on_write { + } +} + diff --git a/test/extensions/filters/network/common/fuzz/network_writefilter_corpus/zookeeper_proxy_ping b/test/extensions/filters/network/common/fuzz/network_writefilter_corpus/zookeeper_proxy_ping new file mode 100644 index 000000000000..b63f559beb0f --- /dev/null +++ b/test/extensions/filters/network/common/fuzz/network_writefilter_corpus/zookeeper_proxy_ping @@ -0,0 +1,17 @@ +config { + name: "envoy.filters.network.zookeeper_proxy" + typed_config { + type_url: "type.googleapis.com/envoy.extensions.filters.network.zookeeper_proxy.v3.ZooKeeperProxy" + value: "\xa\xb\x74\x65\x73\x74\x5f\x70\x72\x65\x66\x69\x78" + } +} +actions { + on_write { + data: "\x0\x0\x0\x14\x0\x0\x0\x0\x0\x0\x0\xa\x0\x0\x0\x0\x0\x0\x0\xc8\x0\x0\x0\x0" + } +} +actions { + on_write { + } +} + diff --git a/test/extensions/filters/network/common/fuzz/network_writefilter_corpus/zookeeper_proxy_watch_control b/test/extensions/filters/network/common/fuzz/network_writefilter_corpus/zookeeper_proxy_watch_control new file mode 100644 index 000000000000..9dd0c0046d3d --- /dev/null +++ b/test/extensions/filters/network/common/fuzz/network_writefilter_corpus/zookeeper_proxy_watch_control @@ -0,0 +1,17 @@ +config { + name: "envoy.filters.network.zookeeper_proxy" + typed_config { + type_url: "type.googleapis.com/envoy.extensions.filters.network.zookeeper_proxy.v3.ZooKeeperProxy" + value: "\xa\xb\x74\x65\x73\x74\x5f\x70\x72\x65\x66\x69\x78" + } +} +actions { + on_write { + data: "\x0\x0\x0\x10\xff\xff\xff\xf8\x0\x0\x0\x0\x0\x0\x7\xd0\x0\x0\x0\x0" + } +} +actions { + on_write { + } +} + diff --git a/test/extensions/filters/network/common/fuzz/network_writefilter_corpus/zookeeper_proxy_watch_event b/test/extensions/filters/network/common/fuzz/network_writefilter_corpus/zookeeper_proxy_watch_event new file mode 100644 index 000000000000..9ff600715bba --- /dev/null +++ b/test/extensions/filters/network/common/fuzz/network_writefilter_corpus/zookeeper_proxy_watch_event @@ -0,0 +1,17 @@ +config { + name: "envoy.filters.network.zookeeper_proxy" + typed_config { + type_url: "type.googleapis.com/envoy.extensions.filters.network.zookeeper_proxy.v3.ZooKeeperProxy" + value: "\xa\xb\x74\x65\x73\x74\x5f\x70\x72\x65\x66\x69\x78" + } +} +actions { + on_write { + data: "\x0\x0\x0\x20\xff\xff\xff\xff\x0\x0\x0\x0\x0\x0\x3\xe8\x0\x0\x0\x0\x0\x0\x0\x1\x0\x0\x0\x0\x0\x0\x0\x4\x2f\x66\x6f\x6f" + } +} +actions { + on_write { + } +} +