From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from EUR01-DB5-obe.outbound.protection.outlook.com (mail-eopbgr60068.outbound.protection.outlook.com [40.107.6.68]) by dpdk.org (Postfix) with ESMTP id 7A39E1B019 for ; Sun, 17 Dec 2017 13:22:18 +0100 (CET) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=Mellanox.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version; bh=RsDfLT9jmtfSuRkBzBc8DIA8sA6r/qGL2JMz95M7SB0=; b=AfrQ0DcRkiPTtN0QxMo4ns9Yp/ilDNzehSs3UZarjgCBRzDBCanTMdCqCoevylCA4x7i+org8bzL8b0nQvETiDGeMECkqZQm7HrQaf26+hiIQEe6GPAiNDNpE9Qj+rL4YuPkA2J0QHc2/KqckLnUYOpijM9VleEP8yTJfSgPcHM= Authentication-Results: spf=none (sender IP is ) smtp.mailfrom=ophirmu@mellanox.com; Received: from mellanox.com (37.142.13.130) by AM3PR05MB1249.eurprd05.prod.outlook.com (2a01:111:e400:586e::14) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384_P256) id 15.20.302.9; Sun, 17 Dec 2017 12:22:13 +0000 From: Ophir Munk To: Pascal Mazon Cc: Ophir Munk , dev@dpdk.org, Thomas Monjalon , Olga Shern Date: Sun, 17 Dec 2017 12:21:54 +0000 Message-Id: <1513513315-21618-3-git-send-email-ophirmu@mellanox.com> X-Mailer: git-send-email 1.8.3.1 In-Reply-To: <1513513315-21618-1-git-send-email-ophirmu@mellanox.com> References: <1513513315-21618-1-git-send-email-ophirmu@mellanox.com> MIME-Version: 1.0 Content-Type: text/plain X-Originating-IP: [37.142.13.130] X-ClientProxiedBy: VI1PR0701CA0049.eurprd07.prod.outlook.com (2603:10a6:800:5f::11) To AM3PR05MB1249.eurprd05.prod.outlook.com (2a01:111:e400:586e::14) X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: db46c445-4f36-4bfa-6de7-08d54548ce4e X-MS-Office365-Filtering-HT: Tenant X-Microsoft-Antispam: UriScan:; BCL:0; PCL:0; RULEID:(5600026)(4604075)(4534020)(4602075)(4627115)(201703031133081)(201702281549075)(48565401081)(2017052603307); SRVR:AM3PR05MB1249; X-Microsoft-Exchange-Diagnostics: 1; AM3PR05MB1249; 3:sDB+4yNaZfPqYM7PbgVuDn+A3BYIBcvN9bZuqo+qpMlrGj9jSv8St4dLs9rituEFD3fGscy7kN4LpPgKh+8mRCy64OdW6BEXLcXrw/LVvnxJDqtuvDAsh2eweyadlk5UXdK4UoP0QQ4lcj8bqfYvoyJTyi4IT3LJJPQFVtPap1lphDcRiFU4BlUVLmr8oFNRj5bhP0VgL885nshSl7TsPDoFt/SHvhv13EVndEy2AUkCkrtQx6QBmhj9lq9PscxH; 25:d/Uh/bemxeNw5I/ki1dnVC3Akv6EWDRYFRjwI8k5FjAxVevhDPEHCb6Qn2E6Lj7EGsAZ5OiAdNUEpNzjIqYzldKD7mS4a/bNX6KCIrQVYziGxEqXcC0qNAwi04wFAKNV9xzrEMwA390BzdJ11WTULLDDi3ijGN6hvNteCnbiYTCFQS5L0dLu4PNfD3A3MrT5lVM/0moArzNna8Mv07PDOflYaCREjpDtWn86hOoXo6+eCnvJp/VbO9n/nOeiySiLHvhjNA//Xa2tYgJbGaNJLdJxenIlrMj0pTnMBnZFIt6MoEu83whlRPmeYlkkeVVkxWsQPdypwBbTHDer+GCO6icSXAoHCtf12T96o8iPsHM=; 31:mFfVxP0UkVFzqTBlW3KdKjC6DLnWPbq73/ni26I3W0+48PBJHEkpfmllncaB8INB0kGhSsus9n3Dlrr+1NwQ0f7YwbzaTyxtmEDiRqPwXB/AhPLdn+an17OHvHagKUnYgD0My0VYOgAPnUhlXrB15jVQoMELXKfN71BEQX6/Q5CMj3F69ASmTFqb+TWcB2KRl05TOzNmR5JcMCGxh5N4TQ4W9ezDSnvQt0NLczBfwA8= X-MS-TrafficTypeDiagnostic: AM3PR05MB1249: X-LD-Processed: a652971c-7d2e-4d9b-a6a4-d149256f461b,ExtAddr X-Microsoft-Exchange-Diagnostics: 1; AM3PR05MB1249; 20:PjJkoUg3mRboKoOmajZfJg/CCbae2KGpFskK8Dgw/xQbBeDbYZrERIwBc3TThvjiZMyaNE9RVjiacm7RXzDYN/GzyhTKorWt0v9tQtRSWUIU4qTnk0C3Re1QtfmGVrfWRWBhyOV6MaK2g4CQN7lceoDyvJU9suvptvsOtO7F+TFrqBojfkqTZbnrd/6xUVOdRd28aZd5kr7cXHvMtHVHzfJ6UZxKnKIg1bz9LjEp72h2F5Ix55J+7WcVpfhcb/Ndm8UBLwq3/H4sguBjOri3Twlc/EfUw1aed79FTORIf6oQid7V+ypTeHhzSV3xey8odUItG0zL9HmDQeyS9CJCNRmIlHcNlFsdk/d9YJgp1PdFWGIQa6fGg//pgDZPh7fXO1o7VUXL9So6lv2PW2PlFOnPYybKRs97KM3ZQ4mhia7U3SVrVMK0OoN3FEWxou4TX6Cs0bOMgSKovV8EiMRcIwkfp6xMo+hAVjALo8saFpfEPCDCP7rXbeFp1/AV6sQF; 4:hmz2ZmjPomdQGq7W5XVRltYgXjsmLvW05uNiTikoFyAZ53/7jp49ulLDZjw8AS3lL3kkt2qrColt5kRA8wsPDh7wxVdzZtsFEnkKQLKQPzzAR2dcN0sj99rpJAeSGRRqXu2YYohYaL7a0mFp+ygSzKpDjmyOjtjMIz+La9TzgPs/nRXhCxUtB0KMmwfD7zCGmOUr0q56zpC28v9/cSzrhI50+kvQrmKM1Trbul9JZihw22QYvFRGzB/4BTVOSaSwcLZ06iu5e3DQVf7Ld3LteA== X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-Test: UriScan:; X-Exchange-Antispam-Report-CFA-Test: BCL:0; PCL:0; RULEID:(6040450)(2401047)(8121501046)(5005006)(3002001)(3231023)(93006095)(93001095)(10201501046)(6055026)(6041248)(20161123558100)(20161123560025)(201703131423075)(201702281528075)(201703061421075)(201703061406153)(20161123562025)(20161123564025)(20161123555025)(6072148)(201708071742011); SRVR:AM3PR05MB1249; BCL:0; PCL:0; RULEID:(100000803101)(100110400095); SRVR:AM3PR05MB1249; X-Forefront-PRVS: 05245CA661 X-Forefront-Antispam-Report: SFV:NSPM; SFS:(10009020)(396003)(39860400002)(346002)(366004)(376002)(199004)(189003)(54906003)(478600001)(69596002)(50466002)(575784001)(16526018)(7736002)(86362001)(21086003)(97736004)(81166006)(68736007)(81156014)(52116002)(305945005)(8676002)(8936002)(25786009)(55016002)(7696005)(50226002)(2906002)(6916009)(47776003)(48376002)(53946003)(2950100002)(386003)(5660300001)(16586007)(4720700003)(6666003)(106356001)(51416003)(53936002)(16200700003)(316002)(107886003)(33026002)(59450400001)(36756003)(66066001)(6116002)(3846002)(4326008)(105586002)(76176011)(579004)(559001)(569006); DIR:OUT; SFP:1101; SCL:1; SRVR:AM3PR05MB1249; H:mellanox.com; FPR:; SPF:None; PTR:InfoNoRecords; A:1; MX:1; LANG:en; Received-SPF: None (protection.outlook.com: mellanox.com does not designate permitted sender hosts) X-Microsoft-Exchange-Diagnostics: =?us-ascii?Q?1; AM3PR05MB1249; 23:nYY7Fd+daCfO+a0ZP62bIPeo6U6tHdfta1jVQMTRd?= =?us-ascii?Q?ZKxbeHHbhsFW+kQXnaoEcjxRDZXwqvwAe3T45gHzW+S0y6/77zVHXLOv1ecb?= =?us-ascii?Q?zBvS+Sd8m8bVqAhiYK2FRLVci+l2IbunS2iHaqUEi2ff0M8lEXwizhHjKN2p?= =?us-ascii?Q?N2jzbWyj3U9hg2H8Ync2Pp0W30ISah4HcURru2rCluv2Psihcudhe15rmT7E?= =?us-ascii?Q?O5k1QfkoEvLfQmpvRvbgusZSjMDg+QNyrUwpD5Rp0noDQP2h7i9hk6Bz5gma?= =?us-ascii?Q?LsQn8XRZJta5Y6Id/qNi9weNBU4broQ4Xs2ugS2EYlwBmaWjeWvkfbG8Mp7c?= =?us-ascii?Q?5zz2/YZpy2+SuwCJxbVvQvWFTqeddeVl9E0QG80+kksPL3N1YFfft2cjGoeu?= =?us-ascii?Q?J7x8KckvNRuXmIqBvFeg2V4bBD04bJvNxDpPQK4l/UfbPy9S2EEnXkkIdBsC?= =?us-ascii?Q?AOy4ybUoD9hlLcu/6Cy+sXQuewRaBOqN0gRm2lv5octQjMxDsnQFB8rjoWnc?= =?us-ascii?Q?v67sdXUWs5eAG2D/aNxGrVNqcAgh3WCGRjKiOwhsjbh66fKc9Hs7b1bPPKve?= =?us-ascii?Q?YCIn4ndYxYXZp9d+Jzr3WuhCwLgd2iKFvD5pT86ZcVNAUBPZFKb1iTFJHpLC?= =?us-ascii?Q?kgZawtgCZ0AjPldYwEQOGhbAeQTS3YYdS6PVl+krpOU7z/k/xOtIFxu2m4kC?= =?us-ascii?Q?uPrBlUGYF12432C6Twa4MlLBh03k7bbk57Djnq3VK1Hu7tj2a+hm3oY2BTMN?= =?us-ascii?Q?fUiFGMXkT2uxYgPSKTmJlBlbpTK4EqAWeGROEMEN3EAEG3ju5B8Arf92w8RN?= =?us-ascii?Q?TjT9txqygnK9fMYiK3cu2iCAV5AfA8I8GdR06kFb5dyTBPUv/FAk3sXanK9G?= =?us-ascii?Q?HwnYclLH9P81t3BwuQdsMEh9/m+jbBQEB/8voTeNJ9O5+27bc6lkeDJH0Ll4?= =?us-ascii?Q?ntU+/o5FRL4SSEmn/3PHuqB1ITTUBlZ5NXuczBuxP2nRuKo6FfmwJCksp0F6?= =?us-ascii?Q?qvTUKhEFkoVUbNkRoatQd5DpeWuJmljsB8d5T0N4eGqM2x98x16MKzzUQXcj?= =?us-ascii?Q?oEEFxseVosD119jcimrEkfSz+HTpN6gwzs+wn6UyVKEpg1xVX5jxbCA2SMjH?= =?us-ascii?Q?p6vasLfnhCXBliFw1hvXo7fOCyCGzJgVksLLp4QGuZa4beu0FLU6CBkuFRaW?= =?us-ascii?Q?dirulvrHG5cxgfNzD29S8VILgaWpF6SGDTqbOTYn4c99P0OLEw0F85LPylS2?= =?us-ascii?Q?M1BmQbD30FGCN9I3dPqLIUs9ZWDjMZd6OeoM6wYkvuwNaM3bzqNiArKruDf2?= =?us-ascii?Q?PgRMfeJPfGkfgdmYZBvWD0=3D?= X-Microsoft-Exchange-Diagnostics: 1; AM3PR05MB1249; 6:4TbdeVMNz78QjKFLXHBw2KNvE/WcHgdm8qhNNp3b7b1ZQ2bRA7ck/tNqVzrZQdXwoLi5qa2F3sIEYn9SJLY3zH8NtZK6aKXH6cUVj7T1bwlT63apm2ysgQ2tzuDYE77HrxQdGpW0kw/zsRjDF/EqrZIexW892rc7irET0/PIh2zY7tzFSnhs9Dkp0EOG5e/cs3AETYdWq/sYS1Dtok6bxKJXjunMNY/a+lr/GYtJbbtGOYhHcKiZo4l0Z754Smudskuc4ZekxLDM2j+WxHCo/PXTPyGw/z1kEf/kJuU1LV/JmI5k9yfw9o+6uiQNGvaPk9jIkcdEJTWgO6QBKF31C1/m2fxdejBmKoHO/SEC3pg=; 5:51x7al89lzYtY3jAXPOvD2NQ/JEENoI69nJbqarkfmPjrozl/T1sisgKTkL6VyyNaZ5O3sMhrfgU1p+6DZsjp+Q1BWzsq9bKSfPB/dCfZzQfwY9Js7dDPo4hW/Co97wOgeIz2ahP7xook8+k9F8b9G03QzvD8eC0eC29lM77Zms=; 24:Ppli/AAy8xsOYav8gNrLflAzOc1oQ0ilZNe+1XvXwl0yTWcBkoFqkDLK8knQxHTIBiSmzWnMpGvAJD1MUFgnGvYedLtXC0zzs91WlSkd5Uc=; 7:5/bhEE2S//wjY4jxrDTBhjj2FgXQngtQuZMuMo6slOHx2xWjjkzoI2DFMyWvszLF+tThgCfMsz5E7bpiOaPI3NiQVewuDE+8+uWFN6gZR0QPMmjpqmkq5RBaKgm/O4b0N2NkHhWEPFq6neOQbPgHHiGEgScwEwvoZ56iJPBrlb3u4f4HD2ta8xm9wfj5xf43m5/05JzfgdfyVZXwKCL1c6L49cGZazVRrAIDIeaXDF93BPo5zPPKWIxlN4rvkhgN SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-OriginatorOrg: Mellanox.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 17 Dec 2017 12:22:13.4626 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: db46c445-4f36-4bfa-6de7-08d54548ce4e X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: a652971c-7d2e-4d9b-a6a4-d149256f461b X-MS-Exchange-Transport-CrossTenantHeadersStamped: AM3PR05MB1249 Subject: [dpdk-dev] [PATCH v1 2/3] net/tap: add eBPF instructions X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: DPDK patches and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sun, 17 Dec 2017 12:22:18 -0000 The C source file (tap_bpf_insns.c) includes eBPF "assembly instructions" in the format of an array of struct bpf_insns. This array is passed to the kernel for execution in BPF system call. The C language source file (tap_bpf_program.c) from which the "assembly instructions" were generated is included in TAP source tree, however it does not take part in dpdk compilation. TAP documentation details the process of eBPF "assembly instructions" generation. Signed-off-by: Ophir Munk --- drivers/net/tap/Makefile | 1 + drivers/net/tap/tap_bpf_insns.c | 5427 +++++++++++++++++++++++++++++++++++++ drivers/net/tap/tap_bpf_program.c | 321 +++ drivers/net/tap/tap_bpf_shared.h | 40 + drivers/net/tap/tap_flow.c | 11 +- 5 files changed, 5799 insertions(+), 1 deletion(-) create mode 100644 drivers/net/tap/tap_bpf_insns.c create mode 100644 drivers/net/tap/tap_bpf_program.c create mode 100644 drivers/net/tap/tap_bpf_shared.h diff --git a/drivers/net/tap/Makefile b/drivers/net/tap/Makefile index 9afae5e..c334d90 100644 --- a/drivers/net/tap/Makefile +++ b/drivers/net/tap/Makefile @@ -59,6 +59,7 @@ SRCS-$(CONFIG_RTE_LIBRTE_PMD_TAP) += rte_eth_tap.c SRCS-$(CONFIG_RTE_LIBRTE_PMD_TAP) += tap_flow.c SRCS-$(CONFIG_RTE_LIBRTE_PMD_TAP) += tap_netlink.c SRCS-$(CONFIG_RTE_LIBRTE_PMD_TAP) += tap_tcmsgs.c +SRCS-$(CONFIG_RTE_LIBRTE_PMD_TAP) += tap_bpf_insns.c include $(RTE_SDK)/mk/rte.lib.mk diff --git a/drivers/net/tap/tap_bpf_insns.c b/drivers/net/tap/tap_bpf_insns.c new file mode 100644 index 0000000..951d037 --- /dev/null +++ b/drivers/net/tap/tap_bpf_insns.c @@ -0,0 +1,5427 @@ +/*- + * BSD LICENSE + * + * Copyright 2017 6WIND S.A. + * Copyright 2017 Mellanox. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in + * the documentation and/or other materials provided with the + * distribution. + * * Neither the name of 6WIND S.A. nor the names of its + * contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include "tap_bpf_shared.h" + +#define ERROR 0 + +/* + * The queue number is offset by 1, to distinguish packets that have + * gone through this rule (skb->cb[1] != 0) from others. + */ +#define QUEUE_OFFSET 1 + +#define INV_KEY_IDX 0xdeadbeef + +/* + * + * __section("maps") + * struct bpf_elf_map map_keys = { + * .type = BPF_MAP_TYPE_HASH, + * .id = BPF_MAP_ID_KEY, + * .size_key = sizeof(__u32), + * .size_value = sizeof(struct rss_key), + * .max_elem = 256, + * .pinning = PIN_GLOBAL_NS, + * }; + */ + +/* + * struct bpf_insn { + * __u8 code; opcode + * __u8 dst_reg:4; dest register + * __u8 src_reg:4; source register + * __s16 off; signed offset + * __s32 imm; signed immediate constant + * }; + */ + +/* + * The next bpf_insn array matches cls_q section + * see tap_bpf_program.c file + * + * __section("cls_q") int + * match_q (struct __sk_buff *skb) + * { + * __u32 queue = skb->cb[1]; + * volatile __u32 q = INV_KEY_IDX; + * __u32 match_queue = QUEUE_OFFSET + q; + * + * if (queue != match_queue) + * return TC_ACT_OK; + * return TC_ACT_UNSPEC; + * + * } + */ + +static struct bpf_insn cls_q_insns[] = { + {0x61, 1, 1, 52, 0x00000000}, + {0x18, 2, 0, 0, 0xdeadbeef}, + {0x00, 0, 0, 0, 0x00000000}, + {0x63, 10, 2, -4, 0x00000000}, + {0x61, 2, 10, -4, 0x00000000}, + {0x07, 2, 0, 0, 0x00000001}, + {0x67, 2, 0, 0, 0x00000020}, + {0x77, 2, 0, 0, 0x00000020}, + {0xb7, 0, 0, 0, 0xffffffff}, + {0x1d, 1, 2, 1, 0x00000000}, + {0xb7, 0, 0, 0, 0x00000000}, + {0x95, 0, 0, 0, 0x00000000}, +}; + +#define CLS_Q_INSNS_CNT \ + (sizeof(cls_q_insns) / sizeof(cls_q_insns[0])) + +/** + * Load BPF program (section cls_q) into the kernel and return a bpf fd + * + * @param queue_idx + * Queue index matching packet cb + * + * @return + * -1 if the BPF program couldn't be loaded. An fd (int) otherwise. + */ +int bpf_load_cls_q_insns(__u32 queue_idx) +{ + cls_q_insns[1].imm = queue_idx; + + return bpf_load(BPF_PROG_TYPE_SCHED_ACT, + (struct bpf_insn *)cls_q_insns, + CLS_Q_INSNS_CNT, + "GPL", 0); +} + +/* + * The next bpf_insn array matches tailing section + * see tap_bpf_program.c file + * + * __section("tailing") int + * tail(struct __sk_buff *skb) + * { + * skb_change_tail(skb, skb->len + sizeof(__u32), 0); + * + * return TC_ACT_UNSPEC; + * } + */ + +static struct bpf_insn tailing_insns[] = { + {0x61, 2, 1, 0, 0x00000000}, + {0x07, 2, 0, 0, 0x00000004}, + {0xb7, 3, 0, 0, 0x00000000}, + {0x85, 0, 0, 0, 0x00000026}, + {0x18, 0, 0, 0, 0xffffffff}, + {0x00, 0, 0, 0, 0x00000000}, + {0x95, 0, 0, 0, 0x00000000}, +}; + +#define TAILING_INSNS_CNT \ + (sizeof(tailing_insns) / sizeof(tailing_insns[0])) + +/** + * Load BPF program (section tailing) into the kernel and return a bpf fd. + * + * @return + * -1 if the BPF program couldn't be loaded. An fd (int) otherwise. + */ +int bpf_load_tailing_insns(void) +{ + return bpf_load(BPF_PROG_TYPE_SCHED_ACT, + (struct bpf_insn *)tailing_insns, + TAILING_INSNS_CNT, + "GPL", 0); +} + +/* + * The next bpf_insn array matches hash_pending section + * see tap_bpf_program.c file + * + * __section("hash_appending") int + * append_hash(struct __sk_buff *skb) + * { + * __u32 hash = skb->cb[0]; + * + * skb_store_bytes(skb, skb->len - sizeof(hash), &hash, sizeof(hash), 0); + * + * return TC_ACT_PIPE; + * } + */ + +static struct bpf_insn hash_appending_insns[] = { + {0x61, 2, 1, 48, 0x00000000}, + {0x63, 10, 2, -4, 0x00000000}, + {0x61, 2, 1, 0, 0x00000000}, + {0x07, 2, 0, 0, 0xfffffffc}, + {0xbf, 3, 10, 0, 0x00000000}, + {0x07, 3, 0, 0, 0xfffffffc}, + {0xb7, 4, 0, 0, 0x00000004}, + {0xb7, 5, 0, 0, 0x00000000}, + {0x85, 0, 0, 0, 0x00000009}, + {0xb7, 0, 0, 0, 0x00000003}, + {0x95, 0, 0, 0, 0x00000000}, +}; + +#define HASH_APPENDING_INSNS_CNT \ + (sizeof(hash_appending_insns) / sizeof(hash_appending_insns[0])) + +/** + * Load BPF program into the kernel and return a bpf fd. + * + * @return + * -1 if the BPF program couldn't be loaded. An fd (int) otherwise. + */ +int bpf_load_hash_appending_insns(void) +{ + return bpf_load(BPF_PROG_TYPE_SCHED_ACT, + (struct bpf_insn *)hash_appending_insns, + HASH_APPENDING_INSNS_CNT, + "GPL", 0); +} + +/* + * The next bpf_insn array matches queue_setting section + * see tap_bpf_program.c file + * + * static void __attribute__((always_inline)) + * __section("queue_setting") int + * set_queue(struct __sk_buff *skb) + * { + * __u32 key_idx = INV_KEY_IDX; + * __u64 hash = skb->cb[0]; + * struct rss_key *rsskey; + * __u32 queue = 0; + * + * rsskey = map_lookup_elem(&map_keys, &key_idx); + * if (rsskey && rsskey->nb_queues <= TAP_MAX_QUEUES) + * queue = rsskey->queues[(hash % rsskey->nb_queues) & + * (TAP_MAX_QUEUES - 1)]; + * + * skb->cb[1] = QUEUE_OFFSET + queue; + * + * return TC_ACT_RECLASSIFY; + * } + */ + +static struct bpf_insn queue_setting_insns[] = { + {0xbf, 6, 1, 0, 0x00000000}, + {0x18, 1, 0, 0, 0xdeadbeef}, + {0x00, 0, 0, 0, 0x00000000}, + {0x63, 10, 1, -4, 0x00000000}, + {0x61, 7, 6, 48, 0x00000000}, + {0xbf, 2, 10, 0, 0x00000000}, + {0x07, 2, 0, 0, 0xfffffffc}, + {0x18, 1, 1, 0, 0xffffffff}, + {0x00, 0, 0, 0, 0x00000000}, + {0x85, 0, 0, 0, 0x00000001}, + {0xb7, 1, 0, 0, 0x00000001}, + {0x15, 0, 0, 13, 0x00000000}, + {0x61, 2, 0, 200, 0x00000000}, + {0x25, 2, 0, 11, 0x00000010}, + {0x67, 7, 0, 0, 0x00000020}, + {0x77, 7, 0, 0, 0x00000020}, + {0xbf, 1, 7, 0, 0x00000000}, + {0x3f, 1, 2, 0, 0x00000000}, + {0x2f, 1, 2, 0, 0x00000000}, + {0x1f, 7, 1, 0, 0x00000000}, + {0x57, 7, 0, 0, 0x0000000f}, + {0x67, 7, 0, 0, 0x00000002}, + {0x0f, 0, 7, 0, 0x00000000}, + {0x61, 1, 0, 136, 0x00000000}, + {0x07, 1, 0, 0, 0x00000001}, + {0x63, 6, 1, 52, 0x00000000}, + {0xb7, 0, 0, 0, 0x00000001}, + {0x95, 0, 0, 0, 0x00000000}, +}; + +#define QUEUE_SETTING_INSNS_CNT \ + (sizeof(queue_setting_insns) / sizeof(queue_setting_insns[0])) + +/** + * Load BPF program (section queue_setting) into the kernel and return a bpf fd + * + * @param queue_idx + * Queue index matching packet cb + * + * @return + * -1 if the BPF program couldn't be loaded. An fd (int) otherwise. + */ +int bpf_load_queue_setting_insns(__u32 queue_idx) +{ + queue_setting_insns[1].imm = queue_idx; + + return bpf_load(BPF_PROG_TYPE_SCHED_ACT, + (struct bpf_insn *)queue_setting_insns, + QUEUE_SETTING_INSNS_CNT, + "GPL", 0); +} + +/* + * The next bpf_insn array matches l2_src_hash section + * see tap_bpf_program.c file + * + * #define HASH(L) \ + * __section(#L) int \ + * L ## _hash(struct __sk_buff *skb) \ + * { \ + * return hash(skb, HASH_FIELD_ ## L); \ + * } + * + * HASH(L2_SRC) + */ + + +static struct bpf_insn l2_src_hash_insns[] = { + {0xbf, 7, 1, 0, 0x00000000}, + {0x61, 6, 7, 16, 0x00000000}, + {0x61, 9, 7, 76, 0x00000000}, + {0x61, 8, 7, 80, 0x00000000}, + {0x18, 1, 0, 0, 0xdeadbeef}, + {0x00, 0, 0, 0, 0x00000000}, + {0x63, 10, 1, -4, 0x00000000}, + {0x61, 1, 7, 48, 0x00000000}, + {0x7b, 10, 1, -56, 0x00000000}, + {0xbf, 2, 10, 0, 0x00000000}, + {0x07, 2, 0, 0, 0xfffffffc}, + {0x18, 1, 1, 0, 0xffffffff}, + {0x00, 0, 0, 0, 0x00000000}, + {0x85, 0, 0, 0, 0x00000001}, + {0x55, 0, 0, 21, 0x00000000}, + {0xb7, 1, 0, 0, 0x00000a64}, + {0x6b, 10, 1, -16, 0x00000000}, + {0x18, 1, 0, 0, 0x69666e6f}, + {0x00, 0, 0, 0, 0x65727567}, + {0x7b, 10, 1, -24, 0x00000000}, + {0x18, 1, 0, 0, 0x6e207369}, + {0x00, 0, 0, 0, 0x6320746f}, + {0x7b, 10, 1, -32, 0x00000000}, + {0x18, 1, 0, 0, 0x20737372}, + {0x00, 0, 0, 0, 0x2079656b}, + {0x7b, 10, 1, -40, 0x00000000}, + {0x18, 1, 0, 0, 0x68736168}, + {0x00, 0, 0, 0, 0x203a2928}, + {0x7b, 10, 1, -48, 0x00000000}, + {0xb7, 7, 0, 0, 0x00000000}, + {0x73, 10, 7, -14, 0x00000000}, + {0xbf, 1, 10, 0, 0x00000000}, + {0x07, 1, 0, 0, 0xffffffd0}, + {0xb7, 2, 0, 0, 0x00000023}, + {0x85, 0, 0, 0, 0x00000006}, + {0x05, 0, 0, 543, 0x00000000}, + {0xb7, 1, 0, 0, 0x0000000e}, + {0x61, 2, 7, 20, 0x00000000}, + {0x15, 2, 0, 10, 0x00000000}, + {0x61, 2, 7, 28, 0x00000000}, + {0x55, 2, 0, 8, 0x0000a888}, + {0xbf, 2, 7, 0, 0x00000000}, + {0xb7, 7, 0, 0, 0x00000000}, + {0xbf, 1, 9, 0, 0x00000000}, + {0x07, 1, 0, 0, 0x00000012}, + {0x2d, 1, 8, 533, 0x00000000}, + {0xb7, 1, 0, 0, 0x00000012}, + {0x69, 6, 9, 16, 0x00000000}, + {0xbf, 7, 2, 0, 0x00000000}, + {0x61, 2, 0, 128, 0x00000000}, + {0xbf, 3, 2, 0, 0x00000000}, + {0x57, 3, 0, 0, 0x00000001}, + {0xb7, 4, 0, 0, 0x00000000}, + {0x1d, 3, 4, 1, 0x00000000}, + {0x07, 0, 0, 0, 0x00000006}, + {0x57, 2, 0, 0, 0x00000002}, + {0x15, 2, 0, 508, 0x00000000}, + {0x7b, 10, 7, -64, 0x00000000}, + {0xb7, 7, 0, 0, 0x00000000}, + {0xbf, 1, 9, 0, 0x00000000}, + {0x07, 1, 0, 0, 0x0000000c}, + {0x2d, 1, 8, 517, 0x00000000}, + {0x71, 1, 0, 0, 0x00000000}, + {0x67, 1, 0, 0, 0x00000018}, + {0x71, 6, 0, 1, 0x00000000}, + {0x67, 6, 0, 0, 0x00000010}, + {0x4f, 6, 1, 0, 0x00000000}, + {0x71, 1, 0, 2, 0x00000000}, + {0x67, 1, 0, 0, 0x00000008}, + {0x4f, 6, 1, 0, 0x00000000}, + {0x71, 1, 0, 3, 0x00000000}, + {0x4f, 6, 1, 0, 0x00000000}, + {0x71, 5, 9, 6, 0x00000000}, + {0x67, 5, 0, 0, 0x00000038}, + {0xc7, 5, 0, 0, 0x00000038}, + {0xb7, 2, 0, 0, 0x00000000}, + {0xb7, 3, 0, 0, 0xffffffff}, + {0xb7, 4, 0, 0, 0x00000000}, + {0x6d, 5, 3, 1, 0x00000000}, + {0xbf, 4, 6, 0, 0x00000000}, + {0x79, 1, 10, -56, 0x00000000}, + {0xaf, 4, 1, 0, 0x00000000}, + {0x67, 6, 0, 0, 0x00000001}, + {0x71, 7, 0, 4, 0x00000000}, + {0xbf, 1, 7, 0, 0x00000000}, + {0x77, 1, 0, 0, 0x00000007}, + {0x4f, 1, 6, 0, 0x00000000}, + {0xbf, 6, 5, 0, 0x00000000}, + {0x67, 6, 0, 0, 0x00000039}, + {0xc7, 6, 0, 0, 0x0000003f}, + {0x5f, 6, 1, 0, 0x00000000}, + {0xaf, 4, 6, 0, 0x00000000}, + {0x67, 1, 0, 0, 0x00000001}, + {0xbf, 6, 7, 0, 0x00000000}, + {0x77, 6, 0, 0, 0x00000006}, + {0x57, 6, 0, 0, 0x00000001}, + {0x4f, 1, 6, 0, 0x00000000}, + {0xbf, 6, 5, 0, 0x00000000}, + {0x67, 6, 0, 0, 0x0000003a}, + {0xc7, 6, 0, 0, 0x0000003f}, + {0x5f, 6, 1, 0, 0x00000000}, + {0xaf, 4, 6, 0, 0x00000000}, + {0xbf, 6, 7, 0, 0x00000000}, + {0x77, 6, 0, 0, 0x00000005}, + {0x57, 6, 0, 0, 0x00000001}, + {0x67, 1, 0, 0, 0x00000001}, + {0x4f, 1, 6, 0, 0x00000000}, + {0xbf, 6, 5, 0, 0x00000000}, + {0x67, 6, 0, 0, 0x0000003b}, + {0xc7, 6, 0, 0, 0x0000003f}, + {0x5f, 6, 1, 0, 0x00000000}, + {0xaf, 4, 6, 0, 0x00000000}, + {0xbf, 6, 7, 0, 0x00000000}, + {0x77, 6, 0, 0, 0x00000004}, + {0x57, 6, 0, 0, 0x00000001}, + {0x67, 1, 0, 0, 0x00000001}, + {0x4f, 1, 6, 0, 0x00000000}, + {0xbf, 6, 5, 0, 0x00000000}, + {0x67, 6, 0, 0, 0x0000003c}, + {0xc7, 6, 0, 0, 0x0000003f}, + {0x5f, 6, 1, 0, 0x00000000}, + {0xaf, 4, 6, 0, 0x00000000}, + {0xbf, 6, 7, 0, 0x00000000}, + {0x77, 6, 0, 0, 0x00000003}, + {0x57, 6, 0, 0, 0x00000001}, + {0x67, 1, 0, 0, 0x00000001}, + {0x4f, 1, 6, 0, 0x00000000}, + {0xbf, 6, 5, 0, 0x00000000}, + {0x67, 6, 0, 0, 0x0000003d}, + {0xc7, 6, 0, 0, 0x0000003f}, + {0x5f, 6, 1, 0, 0x00000000}, + {0xaf, 4, 6, 0, 0x00000000}, + {0xbf, 6, 7, 0, 0x00000000}, + {0x77, 6, 0, 0, 0x00000002}, + {0x57, 6, 0, 0, 0x00000001}, + {0x67, 1, 0, 0, 0x00000001}, + {0x4f, 1, 6, 0, 0x00000000}, + {0xbf, 6, 5, 0, 0x00000000}, + {0x67, 6, 0, 0, 0x0000003e}, + {0xc7, 6, 0, 0, 0x0000003f}, + {0x5f, 6, 1, 0, 0x00000000}, + {0xaf, 4, 6, 0, 0x00000000}, + {0xbf, 6, 7, 0, 0x00000000}, + {0x77, 6, 0, 0, 0x00000001}, + {0x57, 6, 0, 0, 0x00000001}, + {0x67, 1, 0, 0, 0x00000001}, + {0x4f, 1, 6, 0, 0x00000000}, + {0x67, 5, 0, 0, 0x0000003f}, + {0xc7, 5, 0, 0, 0x0000003f}, + {0x5f, 5, 1, 0, 0x00000000}, + {0xaf, 4, 5, 0, 0x00000000}, + {0x57, 7, 0, 0, 0x00000001}, + {0x67, 1, 0, 0, 0x00000001}, + {0x4f, 1, 7, 0, 0x00000000}, + {0x71, 5, 9, 7, 0x00000000}, + {0x67, 5, 0, 0, 0x00000038}, + {0xc7, 5, 0, 0, 0x00000038}, + {0xb7, 6, 0, 0, 0x00000000}, + {0x6d, 5, 3, 1, 0x00000000}, + {0xbf, 6, 1, 0, 0x00000000}, + {0xaf, 4, 6, 0, 0x00000000}, + {0x67, 1, 0, 0, 0x00000001}, + {0x71, 7, 0, 5, 0x00000000}, + {0xbf, 6, 7, 0, 0x00000000}, + {0x77, 6, 0, 0, 0x00000007}, + {0x4f, 1, 6, 0, 0x00000000}, + {0xbf, 6, 5, 0, 0x00000000}, + {0x67, 6, 0, 0, 0x00000039}, + {0xc7, 6, 0, 0, 0x0000003f}, + {0x5f, 6, 1, 0, 0x00000000}, + {0xaf, 4, 6, 0, 0x00000000}, + {0xbf, 6, 7, 0, 0x00000000}, + {0x77, 6, 0, 0, 0x00000006}, + {0x57, 6, 0, 0, 0x00000001}, + {0x67, 1, 0, 0, 0x00000001}, + {0x4f, 1, 6, 0, 0x00000000}, + {0xbf, 6, 5, 0, 0x00000000}, + {0x67, 6, 0, 0, 0x0000003a}, + {0xc7, 6, 0, 0, 0x0000003f}, + {0x5f, 6, 1, 0, 0x00000000}, + {0xaf, 4, 6, 0, 0x00000000}, + {0xbf, 6, 7, 0, 0x00000000}, + {0x77, 6, 0, 0, 0x00000005}, + {0x57, 6, 0, 0, 0x00000001}, + {0x67, 1, 0, 0, 0x00000001}, + {0x4f, 1, 6, 0, 0x00000000}, + {0xbf, 6, 5, 0, 0x00000000}, + {0x67, 6, 0, 0, 0x0000003b}, + {0xc7, 6, 0, 0, 0x0000003f}, + {0x5f, 6, 1, 0, 0x00000000}, + {0xaf, 4, 6, 0, 0x00000000}, + {0xbf, 6, 7, 0, 0x00000000}, + {0x77, 6, 0, 0, 0x00000004}, + {0x57, 6, 0, 0, 0x00000001}, + {0x67, 1, 0, 0, 0x00000001}, + {0x4f, 1, 6, 0, 0x00000000}, + {0xbf, 6, 5, 0, 0x00000000}, + {0x67, 6, 0, 0, 0x0000003c}, + {0xc7, 6, 0, 0, 0x0000003f}, + {0x5f, 6, 1, 0, 0x00000000}, + {0xaf, 4, 6, 0, 0x00000000}, + {0xbf, 6, 7, 0, 0x00000000}, + {0x77, 6, 0, 0, 0x00000003}, + {0x57, 6, 0, 0, 0x00000001}, + {0x67, 1, 0, 0, 0x00000001}, + {0x4f, 1, 6, 0, 0x00000000}, + {0xbf, 6, 5, 0, 0x00000000}, + {0x67, 6, 0, 0, 0x0000003d}, + {0xc7, 6, 0, 0, 0x0000003f}, + {0x5f, 6, 1, 0, 0x00000000}, + {0xaf, 4, 6, 0, 0x00000000}, + {0xbf, 6, 7, 0, 0x00000000}, + {0x77, 6, 0, 0, 0x00000002}, + {0x57, 6, 0, 0, 0x00000001}, + {0x67, 1, 0, 0, 0x00000001}, + {0x4f, 1, 6, 0, 0x00000000}, + {0xbf, 6, 5, 0, 0x00000000}, + {0x67, 6, 0, 0, 0x0000003e}, + {0xc7, 6, 0, 0, 0x0000003f}, + {0x5f, 6, 1, 0, 0x00000000}, + {0xaf, 4, 6, 0, 0x00000000}, + {0xbf, 6, 7, 0, 0x00000000}, + {0x77, 6, 0, 0, 0x00000001}, + {0x57, 6, 0, 0, 0x00000001}, + {0x67, 1, 0, 0, 0x00000001}, + {0x4f, 1, 6, 0, 0x00000000}, + {0x67, 5, 0, 0, 0x0000003f}, + {0xc7, 5, 0, 0, 0x0000003f}, + {0x5f, 5, 1, 0, 0x00000000}, + {0xaf, 4, 5, 0, 0x00000000}, + {0x57, 7, 0, 0, 0x00000001}, + {0x67, 1, 0, 0, 0x00000001}, + {0x4f, 1, 7, 0, 0x00000000}, + {0x71, 5, 9, 8, 0x00000000}, + {0x67, 5, 0, 0, 0x00000038}, + {0xc7, 5, 0, 0, 0x00000038}, + {0xb7, 6, 0, 0, 0x00000000}, + {0x6d, 5, 3, 1, 0x00000000}, + {0xbf, 6, 1, 0, 0x00000000}, + {0xaf, 4, 6, 0, 0x00000000}, + {0x67, 1, 0, 0, 0x00000001}, + {0x71, 7, 0, 6, 0x00000000}, + {0xbf, 6, 7, 0, 0x00000000}, + {0x77, 6, 0, 0, 0x00000007}, + {0x4f, 1, 6, 0, 0x00000000}, + {0xbf, 6, 5, 0, 0x00000000}, + {0x67, 6, 0, 0, 0x00000039}, + {0xc7, 6, 0, 0, 0x0000003f}, + {0x5f, 6, 1, 0, 0x00000000}, + {0xaf, 4, 6, 0, 0x00000000}, + {0xbf, 6, 7, 0, 0x00000000}, + {0x77, 6, 0, 0, 0x00000006}, + {0x57, 6, 0, 0, 0x00000001}, + {0x67, 1, 0, 0, 0x00000001}, + {0x4f, 1, 6, 0, 0x00000000}, + {0xbf, 6, 5, 0, 0x00000000}, + {0x67, 6, 0, 0, 0x0000003a}, + {0xc7, 6, 0, 0, 0x0000003f}, + {0x5f, 6, 1, 0, 0x00000000}, + {0xaf, 4, 6, 0, 0x00000000}, + {0xbf, 6, 7, 0, 0x00000000}, + {0x77, 6, 0, 0, 0x00000005}, + {0x57, 6, 0, 0, 0x00000001}, + {0x67, 1, 0, 0, 0x00000001}, + {0x4f, 1, 6, 0, 0x00000000}, + {0xbf, 6, 5, 0, 0x00000000}, + {0x67, 6, 0, 0, 0x0000003b}, + {0xc7, 6, 0, 0, 0x0000003f}, + {0x5f, 6, 1, 0, 0x00000000}, + {0xaf, 4, 6, 0, 0x00000000}, + {0xbf, 6, 7, 0, 0x00000000}, + {0x77, 6, 0, 0, 0x00000004}, + {0x57, 6, 0, 0, 0x00000001}, + {0x67, 1, 0, 0, 0x00000001}, + {0x4f, 1, 6, 0, 0x00000000}, + {0xbf, 6, 5, 0, 0x00000000}, + {0x67, 6, 0, 0, 0x0000003c}, + {0xc7, 6, 0, 0, 0x0000003f}, + {0x5f, 6, 1, 0, 0x00000000}, + {0xaf, 4, 6, 0, 0x00000000}, + {0xbf, 6, 7, 0, 0x00000000}, + {0x77, 6, 0, 0, 0x00000003}, + {0x57, 6, 0, 0, 0x00000001}, + {0x67, 1, 0, 0, 0x00000001}, + {0x4f, 1, 6, 0, 0x00000000}, + {0xbf, 6, 5, 0, 0x00000000}, + {0x67, 6, 0, 0, 0x0000003d}, + {0xc7, 6, 0, 0, 0x0000003f}, + {0x5f, 6, 1, 0, 0x00000000}, + {0xaf, 4, 6, 0, 0x00000000}, + {0xbf, 6, 7, 0, 0x00000000}, + {0x77, 6, 0, 0, 0x00000002}, + {0x57, 6, 0, 0, 0x00000001}, + {0x67, 1, 0, 0, 0x00000001}, + {0x4f, 1, 6, 0, 0x00000000}, + {0xbf, 6, 5, 0, 0x00000000}, + {0x67, 6, 0, 0, 0x0000003e}, + {0xc7, 6, 0, 0, 0x0000003f}, + {0x5f, 6, 1, 0, 0x00000000}, + {0xaf, 4, 6, 0, 0x00000000}, + {0xbf, 6, 7, 0, 0x00000000}, + {0x77, 6, 0, 0, 0x00000001}, + {0x57, 6, 0, 0, 0x00000001}, + {0x67, 1, 0, 0, 0x00000001}, + {0x4f, 1, 6, 0, 0x00000000}, + {0x67, 5, 0, 0, 0x0000003f}, + {0xc7, 5, 0, 0, 0x0000003f}, + {0x5f, 5, 1, 0, 0x00000000}, + {0xaf, 4, 5, 0, 0x00000000}, + {0x57, 7, 0, 0, 0x00000001}, + {0x67, 1, 0, 0, 0x00000001}, + {0x4f, 1, 7, 0, 0x00000000}, + {0x71, 5, 9, 9, 0x00000000}, + {0x67, 5, 0, 0, 0x00000038}, + {0xc7, 5, 0, 0, 0x00000038}, + {0xb7, 6, 0, 0, 0x00000000}, + {0x6d, 5, 3, 1, 0x00000000}, + {0xbf, 6, 1, 0, 0x00000000}, + {0xaf, 4, 6, 0, 0x00000000}, + {0x67, 1, 0, 0, 0x00000001}, + {0x71, 7, 0, 7, 0x00000000}, + {0xbf, 6, 7, 0, 0x00000000}, + {0x77, 6, 0, 0, 0x00000007}, + {0x4f, 1, 6, 0, 0x00000000}, + {0xbf, 6, 5, 0, 0x00000000}, + {0x67, 6, 0, 0, 0x00000039}, + {0xc7, 6, 0, 0, 0x0000003f}, + {0x5f, 6, 1, 0, 0x00000000}, + {0xaf, 4, 6, 0, 0x00000000}, + {0xbf, 6, 7, 0, 0x00000000}, + {0x77, 6, 0, 0, 0x00000006}, + {0x57, 6, 0, 0, 0x00000001}, + {0x67, 1, 0, 0, 0x00000001}, + {0x4f, 1, 6, 0, 0x00000000}, + {0xbf, 6, 5, 0, 0x00000000}, + {0x67, 6, 0, 0, 0x0000003a}, + {0xc7, 6, 0, 0, 0x0000003f}, + {0x5f, 6, 1, 0, 0x00000000}, + {0xaf, 4, 6, 0, 0x00000000}, + {0xbf, 6, 7, 0, 0x00000000}, + {0x77, 6, 0, 0, 0x00000005}, + {0x57, 6, 0, 0, 0x00000001}, + {0x67, 1, 0, 0, 0x00000001}, + {0x4f, 1, 6, 0, 0x00000000}, + {0xbf, 6, 5, 0, 0x00000000}, + {0x67, 6, 0, 0, 0x0000003b}, + {0xc7, 6, 0, 0, 0x0000003f}, + {0x5f, 6, 1, 0, 0x00000000}, + {0xaf, 4, 6, 0, 0x00000000}, + {0xbf, 6, 7, 0, 0x00000000}, + {0x77, 6, 0, 0, 0x00000004}, + {0x57, 6, 0, 0, 0x00000001}, + {0x67, 1, 0, 0, 0x00000001}, + {0x4f, 1, 6, 0, 0x00000000}, + {0xbf, 6, 5, 0, 0x00000000}, + {0x67, 6, 0, 0, 0x0000003c}, + {0xc7, 6, 0, 0, 0x0000003f}, + {0x5f, 6, 1, 0, 0x00000000}, + {0xaf, 4, 6, 0, 0x00000000}, + {0xbf, 6, 7, 0, 0x00000000}, + {0x77, 6, 0, 0, 0x00000003}, + {0x57, 6, 0, 0, 0x00000001}, + {0x67, 1, 0, 0, 0x00000001}, + {0x4f, 1, 6, 0, 0x00000000}, + {0xbf, 6, 5, 0, 0x00000000}, + {0x67, 6, 0, 0, 0x0000003d}, + {0xc7, 6, 0, 0, 0x0000003f}, + {0x5f, 6, 1, 0, 0x00000000}, + {0xaf, 4, 6, 0, 0x00000000}, + {0xbf, 6, 7, 0, 0x00000000}, + {0x77, 6, 0, 0, 0x00000002}, + {0x57, 6, 0, 0, 0x00000001}, + {0x67, 1, 0, 0, 0x00000001}, + {0x4f, 1, 6, 0, 0x00000000}, + {0xbf, 6, 5, 0, 0x00000000}, + {0x67, 6, 0, 0, 0x0000003e}, + {0xc7, 6, 0, 0, 0x0000003f}, + {0x5f, 6, 1, 0, 0x00000000}, + {0xaf, 4, 6, 0, 0x00000000}, + {0xbf, 6, 7, 0, 0x00000000}, + {0x77, 6, 0, 0, 0x00000001}, + {0x57, 6, 0, 0, 0x00000001}, + {0x67, 1, 0, 0, 0x00000001}, + {0x4f, 1, 6, 0, 0x00000000}, + {0x67, 5, 0, 0, 0x0000003f}, + {0xc7, 5, 0, 0, 0x0000003f}, + {0x5f, 5, 1, 0, 0x00000000}, + {0xaf, 4, 5, 0, 0x00000000}, + {0x57, 7, 0, 0, 0x00000001}, + {0x67, 1, 0, 0, 0x00000001}, + {0x4f, 1, 7, 0, 0x00000000}, + {0x71, 5, 9, 10, 0x00000000}, + {0x67, 5, 0, 0, 0x00000038}, + {0xc7, 5, 0, 0, 0x00000038}, + {0xb7, 6, 0, 0, 0x00000000}, + {0x6d, 5, 3, 1, 0x00000000}, + {0xbf, 6, 1, 0, 0x00000000}, + {0xaf, 4, 6, 0, 0x00000000}, + {0x67, 1, 0, 0, 0x00000001}, + {0x71, 7, 0, 8, 0x00000000}, + {0xbf, 6, 7, 0, 0x00000000}, + {0x77, 6, 0, 0, 0x00000007}, + {0x4f, 1, 6, 0, 0x00000000}, + {0xbf, 6, 5, 0, 0x00000000}, + {0x67, 6, 0, 0, 0x00000039}, + {0xc7, 6, 0, 0, 0x0000003f}, + {0x5f, 6, 1, 0, 0x00000000}, + {0xaf, 4, 6, 0, 0x00000000}, + {0xbf, 6, 7, 0, 0x00000000}, + {0x77, 6, 0, 0, 0x00000006}, + {0x57, 6, 0, 0, 0x00000001}, + {0x67, 1, 0, 0, 0x00000001}, + {0x4f, 1, 6, 0, 0x00000000}, + {0xbf, 6, 5, 0, 0x00000000}, + {0x67, 6, 0, 0, 0x0000003a}, + {0xc7, 6, 0, 0, 0x0000003f}, + {0x5f, 6, 1, 0, 0x00000000}, + {0xaf, 4, 6, 0, 0x00000000}, + {0xbf, 6, 7, 0, 0x00000000}, + {0x77, 6, 0, 0, 0x00000005}, + {0x57, 6, 0, 0, 0x00000001}, + {0x67, 1, 0, 0, 0x00000001}, + {0x4f, 1, 6, 0, 0x00000000}, + {0xbf, 6, 5, 0, 0x00000000}, + {0x67, 6, 0, 0, 0x0000003b}, + {0xc7, 6, 0, 0, 0x0000003f}, + {0x5f, 6, 1, 0, 0x00000000}, + {0xaf, 4, 6, 0, 0x00000000}, + {0xbf, 6, 7, 0, 0x00000000}, + {0x77, 6, 0, 0, 0x00000004}, + {0x57, 6, 0, 0, 0x00000001}, + {0x67, 1, 0, 0, 0x00000001}, + {0x4f, 1, 6, 0, 0x00000000}, + {0xbf, 6, 5, 0, 0x00000000}, + {0x67, 6, 0, 0, 0x0000003c}, + {0xc7, 6, 0, 0, 0x0000003f}, + {0x5f, 6, 1, 0, 0x00000000}, + {0xaf, 4, 6, 0, 0x00000000}, + {0xbf, 6, 7, 0, 0x00000000}, + {0x77, 6, 0, 0, 0x00000003}, + {0x57, 6, 0, 0, 0x00000001}, + {0x67, 1, 0, 0, 0x00000001}, + {0x4f, 1, 6, 0, 0x00000000}, + {0xbf, 6, 5, 0, 0x00000000}, + {0x67, 6, 0, 0, 0x0000003d}, + {0xc7, 6, 0, 0, 0x0000003f}, + {0x5f, 6, 1, 0, 0x00000000}, + {0xaf, 4, 6, 0, 0x00000000}, + {0xbf, 6, 7, 0, 0x00000000}, + {0x77, 6, 0, 0, 0x00000002}, + {0x57, 6, 0, 0, 0x00000001}, + {0x67, 1, 0, 0, 0x00000001}, + {0x4f, 1, 6, 0, 0x00000000}, + {0xbf, 6, 5, 0, 0x00000000}, + {0x67, 6, 0, 0, 0x0000003e}, + {0xc7, 6, 0, 0, 0x0000003f}, + {0x5f, 6, 1, 0, 0x00000000}, + {0xaf, 4, 6, 0, 0x00000000}, + {0xbf, 6, 7, 0, 0x00000000}, + {0x77, 6, 0, 0, 0x00000001}, + {0x57, 6, 0, 0, 0x00000001}, + {0x67, 1, 0, 0, 0x00000001}, + {0x4f, 1, 6, 0, 0x00000000}, + {0x67, 5, 0, 0, 0x0000003f}, + {0xc7, 5, 0, 0, 0x0000003f}, + {0x5f, 5, 1, 0, 0x00000000}, + {0xaf, 4, 5, 0, 0x00000000}, + {0x57, 7, 0, 0, 0x00000001}, + {0x67, 1, 0, 0, 0x00000001}, + {0x4f, 1, 7, 0, 0x00000000}, + {0x71, 5, 9, 11, 0x00000000}, + {0x67, 5, 0, 0, 0x00000038}, + {0xc7, 5, 0, 0, 0x00000038}, + {0x6d, 5, 3, 1, 0x00000000}, + {0xbf, 2, 1, 0, 0x00000000}, + {0xaf, 4, 2, 0, 0x00000000}, + {0x71, 2, 0, 9, 0x00000000}, + {0x67, 1, 0, 0, 0x00000001}, + {0xbf, 3, 2, 0, 0x00000000}, + {0x77, 3, 0, 0, 0x00000007}, + {0x4f, 1, 3, 0, 0x00000000}, + {0xbf, 3, 5, 0, 0x00000000}, + {0x67, 3, 0, 0, 0x00000039}, + {0xc7, 3, 0, 0, 0x0000003f}, + {0x5f, 3, 1, 0, 0x00000000}, + {0xaf, 4, 3, 0, 0x00000000}, + {0xbf, 3, 2, 0, 0x00000000}, + {0x77, 3, 0, 0, 0x00000006}, + {0x57, 3, 0, 0, 0x00000001}, + {0x67, 1, 0, 0, 0x00000001}, + {0x4f, 1, 3, 0, 0x00000000}, + {0xbf, 3, 5, 0, 0x00000000}, + {0x67, 3, 0, 0, 0x0000003a}, + {0xc7, 3, 0, 0, 0x0000003f}, + {0x5f, 3, 1, 0, 0x00000000}, + {0xaf, 4, 3, 0, 0x00000000}, + {0xbf, 3, 2, 0, 0x00000000}, + {0x77, 3, 0, 0, 0x00000005}, + {0x57, 3, 0, 0, 0x00000001}, + {0x67, 1, 0, 0, 0x00000001}, + {0x4f, 1, 3, 0, 0x00000000}, + {0xbf, 3, 5, 0, 0x00000000}, + {0x67, 3, 0, 0, 0x0000003b}, + {0xc7, 3, 0, 0, 0x0000003f}, + {0x5f, 3, 1, 0, 0x00000000}, + {0xaf, 4, 3, 0, 0x00000000}, + {0xbf, 3, 2, 0, 0x00000000}, + {0x77, 3, 0, 0, 0x00000004}, + {0x57, 3, 0, 0, 0x00000001}, + {0x67, 1, 0, 0, 0x00000001}, + {0x4f, 1, 3, 0, 0x00000000}, + {0xbf, 3, 5, 0, 0x00000000}, + {0x67, 3, 0, 0, 0x0000003c}, + {0xc7, 3, 0, 0, 0x0000003f}, + {0x5f, 3, 1, 0, 0x00000000}, + {0xaf, 4, 3, 0, 0x00000000}, + {0xbf, 3, 2, 0, 0x00000000}, + {0x77, 3, 0, 0, 0x00000003}, + {0x57, 3, 0, 0, 0x00000001}, + {0x67, 1, 0, 0, 0x00000001}, + {0x4f, 1, 3, 0, 0x00000000}, + {0xbf, 3, 5, 0, 0x00000000}, + {0x67, 3, 0, 0, 0x0000003d}, + {0xc7, 3, 0, 0, 0x0000003f}, + {0x5f, 3, 1, 0, 0x00000000}, + {0xaf, 4, 3, 0, 0x00000000}, + {0xbf, 3, 2, 0, 0x00000000}, + {0x77, 3, 0, 0, 0x00000002}, + {0x57, 3, 0, 0, 0x00000001}, + {0x67, 1, 0, 0, 0x00000001}, + {0x4f, 1, 3, 0, 0x00000000}, + {0xbf, 3, 5, 0, 0x00000000}, + {0x67, 3, 0, 0, 0x0000003e}, + {0xc7, 3, 0, 0, 0x0000003f}, + {0x5f, 3, 1, 0, 0x00000000}, + {0xaf, 4, 3, 0, 0x00000000}, + {0x77, 2, 0, 0, 0x00000001}, + {0x57, 2, 0, 0, 0x00000001}, + {0x67, 1, 0, 0, 0x00000001}, + {0x4f, 1, 2, 0, 0x00000000}, + {0x67, 5, 0, 0, 0x0000003f}, + {0xc7, 5, 0, 0, 0x0000003f}, + {0x5f, 5, 1, 0, 0x00000000}, + {0xaf, 4, 5, 0, 0x00000000}, + {0x79, 1, 10, -64, 0x00000000}, + {0x63, 1, 4, 48, 0x00000000}, + {0x18, 1, 0, 0, 0x25203d20}, + {0x00, 0, 0, 0, 0x000a2964}, + {0x7b, 10, 1, -24, 0x00000000}, + {0x18, 1, 0, 0, 0x20782520}, + {0x00, 0, 0, 0, 0x66666f28}, + {0x7b, 10, 1, -32, 0x00000000}, + {0x18, 1, 0, 0, 0x6168203a}, + {0x00, 0, 0, 0, 0x3d206873}, + {0x7b, 10, 1, -40, 0x00000000}, + {0x18, 1, 0, 0, 0x68736168}, + {0x00, 0, 0, 0, 0x29642528}, + {0x7b, 10, 1, -48, 0x00000000}, + {0xbf, 1, 10, 0, 0x00000000}, + {0x07, 1, 0, 0, 0xffffffd0}, + {0xb7, 2, 0, 0, 0x00000020}, + {0xb7, 3, 0, 0, 0x00000001}, + {0xb7, 5, 0, 0, 0x00000006}, + {0x85, 0, 0, 0, 0x00000006}, + {0x05, 0, 0, 13, 0x00000000}, + {0x57, 6, 0, 0, 0x0000ffff}, + {0x15, 6, 0, 7, 0x0000dd86}, + {0xb7, 7, 0, 0, 0x00000003}, + {0x55, 6, 0, 10, 0x00000008}, + {0x0f, 9, 1, 0, 0x00000000}, + {0x07, 9, 0, 0, 0x00000014}, + {0xb7, 7, 0, 0, 0x00000000}, + {0x2d, 9, 8, 6, 0x00000000}, + {0x05, 0, 0, 4, 0x00000000}, + {0x0f, 9, 1, 0, 0x00000000}, + {0x07, 9, 0, 0, 0x00000028}, + {0xb7, 7, 0, 0, 0x00000000}, + {0x2d, 9, 8, 1, 0x00000000}, + {0xb7, 7, 0, 0, 0x00000003}, + {0xbf, 0, 7, 0, 0x00000000}, + {0x95, 0, 0, 0, 0x00000000}, +}; + +#define L2_SRC_HASH_INSNS_CNT \ + (sizeof(l2_src_hash_insns) / sizeof(l2_src_hash_insns[0])) + +/** + * Load BPF program (section l2_src_hash) into the kernel and return a bpf fd. + * + * @param key_idx + * RSS MAP key index + * + * @return + * -1 if the BPF program couldn't be loaded. An fd (int) otherwise. + */ +int bpf_load_l2_src_hash_insns(__u32 key_idx) +{ + l2_src_hash_insns[4].imm = key_idx; + + return bpf_load(BPF_PROG_TYPE_SCHED_ACT, + (struct bpf_insn *)l2_src_hash_insns, + L2_SRC_HASH_INSNS_CNT, + "GPL", 0); +} + +/* + * The next bpf_insn array matches l2_dst_hash section + * see tap_bpf_program.c file + * + * HASH(L2_DST) + */ + +static struct bpf_insn l2_dst_hash_insns[] = { + {0xbf, 7, 1, 0, 0x00000000}, + {0x61, 6, 7, 16, 0x00000000}, + {0x61, 9, 7, 76, 0x00000000}, + {0x61, 8, 7, 80, 0x00000000}, + {0x18, 1, 0, 0, 0xdeadbeef}, + {0x00, 0, 0, 0, 0x00000000}, + {0x63, 10, 1, -4, 0x00000000}, + {0x61, 1, 7, 48, 0x00000000}, + {0x7b, 10, 1, -56, 0x00000000}, + {0xbf, 2, 10, 0, 0x00000000}, + {0x07, 2, 0, 0, 0xfffffffc}, + {0x18, 1, 1, 0, 0xffffffff}, + {0x00, 0, 0, 0, 0x00000000}, + {0x85, 0, 0, 0, 0x00000001}, + {0x55, 0, 0, 21, 0x00000000}, + {0xb7, 1, 0, 0, 0x00000a64}, + {0x6b, 10, 1, -16, 0x00000000}, + {0x18, 1, 0, 0, 0x69666e6f}, + {0x00, 0, 0, 0, 0x65727567}, + {0x7b, 10, 1, -24, 0x00000000}, + {0x18, 1, 0, 0, 0x6e207369}, + {0x00, 0, 0, 0, 0x6320746f}, + {0x7b, 10, 1, -32, 0x00000000}, + {0x18, 1, 0, 0, 0x20737372}, + {0x00, 0, 0, 0, 0x2079656b}, + {0x7b, 10, 1, -40, 0x00000000}, + {0x18, 1, 0, 0, 0x68736168}, + {0x00, 0, 0, 0, 0x203a2928}, + {0x7b, 10, 1, -48, 0x00000000}, + {0xb7, 7, 0, 0, 0x00000000}, + {0x73, 10, 7, -14, 0x00000000}, + {0xbf, 1, 10, 0, 0x00000000}, + {0x07, 1, 0, 0, 0xffffffd0}, + {0xb7, 2, 0, 0, 0x00000023}, + {0x85, 0, 0, 0, 0x00000006}, + {0x05, 0, 0, 538, 0x00000000}, + {0xb7, 1, 0, 0, 0x0000000e}, + {0x61, 2, 7, 20, 0x00000000}, + {0x15, 2, 0, 10, 0x00000000}, + {0x61, 2, 7, 28, 0x00000000}, + {0x55, 2, 0, 8, 0x0000a888}, + {0xbf, 2, 7, 0, 0x00000000}, + {0xb7, 7, 0, 0, 0x00000000}, + {0xbf, 1, 9, 0, 0x00000000}, + {0x07, 1, 0, 0, 0x00000012}, + {0x2d, 1, 8, 528, 0x00000000}, + {0xb7, 1, 0, 0, 0x00000012}, + {0x69, 6, 9, 16, 0x00000000}, + {0xbf, 7, 2, 0, 0x00000000}, + {0x71, 2, 0, 128, 0x00000000}, + {0x57, 2, 0, 0, 0x00000001}, + {0x15, 2, 0, 508, 0x00000000}, + {0xbf, 5, 7, 0, 0x00000000}, + {0xb7, 7, 0, 0, 0x00000000}, + {0xbf, 1, 9, 0, 0x00000000}, + {0x07, 1, 0, 0, 0x00000006}, + {0x2d, 1, 8, 517, 0x00000000}, + {0x71, 1, 0, 1, 0x00000000}, + {0x67, 1, 0, 0, 0x00000010}, + {0x71, 6, 0, 0, 0x00000000}, + {0x67, 6, 0, 0, 0x00000018}, + {0x4f, 6, 1, 0, 0x00000000}, + {0x71, 1, 0, 2, 0x00000000}, + {0x67, 1, 0, 0, 0x00000008}, + {0x4f, 6, 1, 0, 0x00000000}, + {0x71, 1, 0, 3, 0x00000000}, + {0x4f, 6, 1, 0, 0x00000000}, + {0x71, 3, 9, 0, 0x00000000}, + {0x67, 3, 0, 0, 0x00000038}, + {0xc7, 3, 0, 0, 0x00000038}, + {0xb7, 2, 0, 0, 0xffffffff}, + {0xb7, 4, 0, 0, 0x00000000}, + {0xbf, 7, 5, 0, 0x00000000}, + {0x6d, 3, 2, 1, 0x00000000}, + {0xbf, 4, 6, 0, 0x00000000}, + {0x79, 1, 10, -56, 0x00000000}, + {0xaf, 4, 1, 0, 0x00000000}, + {0x67, 6, 0, 0, 0x00000001}, + {0x71, 5, 0, 4, 0x00000000}, + {0xbf, 1, 5, 0, 0x00000000}, + {0x77, 1, 0, 0, 0x00000007}, + {0x4f, 1, 6, 0, 0x00000000}, + {0xbf, 6, 3, 0, 0x00000000}, + {0x67, 6, 0, 0, 0x00000039}, + {0xc7, 6, 0, 0, 0x0000003f}, + {0x5f, 6, 1, 0, 0x00000000}, + {0xaf, 4, 6, 0, 0x00000000}, + {0x67, 1, 0, 0, 0x00000001}, + {0xbf, 6, 5, 0, 0x00000000}, + {0x77, 6, 0, 0, 0x00000006}, + {0x57, 6, 0, 0, 0x00000001}, + {0x4f, 1, 6, 0, 0x00000000}, + {0xbf, 6, 3, 0, 0x00000000}, + {0x67, 6, 0, 0, 0x0000003a}, + {0xc7, 6, 0, 0, 0x0000003f}, + {0x5f, 6, 1, 0, 0x00000000}, + {0xaf, 4, 6, 0, 0x00000000}, + {0xbf, 6, 5, 0, 0x00000000}, + {0x77, 6, 0, 0, 0x00000005}, + {0x57, 6, 0, 0, 0x00000001}, + {0x67, 1, 0, 0, 0x00000001}, + {0x4f, 1, 6, 0, 0x00000000}, + {0xbf, 6, 3, 0, 0x00000000}, + {0x67, 6, 0, 0, 0x0000003b}, + {0xc7, 6, 0, 0, 0x0000003f}, + {0x5f, 6, 1, 0, 0x00000000}, + {0xaf, 4, 6, 0, 0x00000000}, + {0xbf, 6, 5, 0, 0x00000000}, + {0x77, 6, 0, 0, 0x00000004}, + {0x57, 6, 0, 0, 0x00000001}, + {0x67, 1, 0, 0, 0x00000001}, + {0x4f, 1, 6, 0, 0x00000000}, + {0xbf, 6, 3, 0, 0x00000000}, + {0x67, 6, 0, 0, 0x0000003c}, + {0xc7, 6, 0, 0, 0x0000003f}, + {0x5f, 6, 1, 0, 0x00000000}, + {0xaf, 4, 6, 0, 0x00000000}, + {0xbf, 6, 5, 0, 0x00000000}, + {0x77, 6, 0, 0, 0x00000003}, + {0x57, 6, 0, 0, 0x00000001}, + {0x67, 1, 0, 0, 0x00000001}, + {0x4f, 1, 6, 0, 0x00000000}, + {0xbf, 6, 3, 0, 0x00000000}, + {0x67, 6, 0, 0, 0x0000003d}, + {0xc7, 6, 0, 0, 0x0000003f}, + {0x5f, 6, 1, 0, 0x00000000}, + {0xaf, 4, 6, 0, 0x00000000}, + {0xbf, 6, 5, 0, 0x00000000}, + {0x77, 6, 0, 0, 0x00000002}, + {0x57, 6, 0, 0, 0x00000001}, + {0x67, 1, 0, 0, 0x00000001}, + {0x4f, 1, 6, 0, 0x00000000}, + {0xbf, 6, 3, 0, 0x00000000}, + {0x67, 6, 0, 0, 0x0000003e}, + {0xc7, 6, 0, 0, 0x0000003f}, + {0x5f, 6, 1, 0, 0x00000000}, + {0xaf, 4, 6, 0, 0x00000000}, + {0xbf, 6, 5, 0, 0x00000000}, + {0x77, 6, 0, 0, 0x00000001}, + {0x57, 6, 0, 0, 0x00000001}, + {0x67, 1, 0, 0, 0x00000001}, + {0x4f, 1, 6, 0, 0x00000000}, + {0x67, 3, 0, 0, 0x0000003f}, + {0xc7, 3, 0, 0, 0x0000003f}, + {0x5f, 3, 1, 0, 0x00000000}, + {0xaf, 4, 3, 0, 0x00000000}, + {0x57, 5, 0, 0, 0x00000001}, + {0x67, 1, 0, 0, 0x00000001}, + {0x4f, 1, 5, 0, 0x00000000}, + {0x71, 3, 9, 1, 0x00000000}, + {0x67, 3, 0, 0, 0x00000038}, + {0xc7, 3, 0, 0, 0x00000038}, + {0xb7, 5, 0, 0, 0x00000000}, + {0x6d, 3, 2, 1, 0x00000000}, + {0xbf, 5, 1, 0, 0x00000000}, + {0xaf, 4, 5, 0, 0x00000000}, + {0x67, 1, 0, 0, 0x00000001}, + {0x71, 5, 0, 5, 0x00000000}, + {0xbf, 6, 5, 0, 0x00000000}, + {0x77, 6, 0, 0, 0x00000007}, + {0x4f, 1, 6, 0, 0x00000000}, + {0xbf, 6, 3, 0, 0x00000000}, + {0x67, 6, 0, 0, 0x00000039}, + {0xc7, 6, 0, 0, 0x0000003f}, + {0x5f, 6, 1, 0, 0x00000000}, + {0xaf, 4, 6, 0, 0x00000000}, + {0xbf, 6, 5, 0, 0x00000000}, + {0x77, 6, 0, 0, 0x00000006}, + {0x57, 6, 0, 0, 0x00000001}, + {0x67, 1, 0, 0, 0x00000001}, + {0x4f, 1, 6, 0, 0x00000000}, + {0xbf, 6, 3, 0, 0x00000000}, + {0x67, 6, 0, 0, 0x0000003a}, + {0xc7, 6, 0, 0, 0x0000003f}, + {0x5f, 6, 1, 0, 0x00000000}, + {0xaf, 4, 6, 0, 0x00000000}, + {0xbf, 6, 5, 0, 0x00000000}, + {0x77, 6, 0, 0, 0x00000005}, + {0x57, 6, 0, 0, 0x00000001}, + {0x67, 1, 0, 0, 0x00000001}, + {0x4f, 1, 6, 0, 0x00000000}, + {0xbf, 6, 3, 0, 0x00000000}, + {0x67, 6, 0, 0, 0x0000003b}, + {0xc7, 6, 0, 0, 0x0000003f}, + {0x5f, 6, 1, 0, 0x00000000}, + {0xaf, 4, 6, 0, 0x00000000}, + {0xbf, 6, 5, 0, 0x00000000}, + {0x77, 6, 0, 0, 0x00000004}, + {0x57, 6, 0, 0, 0x00000001}, + {0x67, 1, 0, 0, 0x00000001}, + {0x4f, 1, 6, 0, 0x00000000}, + {0xbf, 6, 3, 0, 0x00000000}, + {0x67, 6, 0, 0, 0x0000003c}, + {0xc7, 6, 0, 0, 0x0000003f}, + {0x5f, 6, 1, 0, 0x00000000}, + {0xaf, 4, 6, 0, 0x00000000}, + {0xbf, 6, 5, 0, 0x00000000}, + {0x77, 6, 0, 0, 0x00000003}, + {0x57, 6, 0, 0, 0x00000001}, + {0x67, 1, 0, 0, 0x00000001}, + {0x4f, 1, 6, 0, 0x00000000}, + {0xbf, 6, 3, 0, 0x00000000}, + {0x67, 6, 0, 0, 0x0000003d}, + {0xc7, 6, 0, 0, 0x0000003f}, + {0x5f, 6, 1, 0, 0x00000000}, + {0xaf, 4, 6, 0, 0x00000000}, + {0xbf, 6, 5, 0, 0x00000000}, + {0x77, 6, 0, 0, 0x00000002}, + {0x57, 6, 0, 0, 0x00000001}, + {0x67, 1, 0, 0, 0x00000001}, + {0x4f, 1, 6, 0, 0x00000000}, + {0xbf, 6, 3, 0, 0x00000000}, + {0x67, 6, 0, 0, 0x0000003e}, + {0xc7, 6, 0, 0, 0x0000003f}, + {0x5f, 6, 1, 0, 0x00000000}, + {0xaf, 4, 6, 0, 0x00000000}, + {0xbf, 6, 5, 0, 0x00000000}, + {0x77, 6, 0, 0, 0x00000001}, + {0x57, 6, 0, 0, 0x00000001}, + {0x67, 1, 0, 0, 0x00000001}, + {0x4f, 1, 6, 0, 0x00000000}, + {0x67, 3, 0, 0, 0x0000003f}, + {0xc7, 3, 0, 0, 0x0000003f}, + {0x5f, 3, 1, 0, 0x00000000}, + {0xaf, 4, 3, 0, 0x00000000}, + {0x57, 5, 0, 0, 0x00000001}, + {0x67, 1, 0, 0, 0x00000001}, + {0x4f, 1, 5, 0, 0x00000000}, + {0x71, 3, 9, 2, 0x00000000}, + {0x67, 3, 0, 0, 0x00000038}, + {0xc7, 3, 0, 0, 0x00000038}, + {0xb7, 5, 0, 0, 0x00000000}, + {0x6d, 3, 2, 1, 0x00000000}, + {0xbf, 5, 1, 0, 0x00000000}, + {0xaf, 4, 5, 0, 0x00000000}, + {0x67, 1, 0, 0, 0x00000001}, + {0x71, 5, 0, 6, 0x00000000}, + {0xbf, 6, 5, 0, 0x00000000}, + {0x77, 6, 0, 0, 0x00000007}, + {0x4f, 1, 6, 0, 0x00000000}, + {0xbf, 6, 3, 0, 0x00000000}, + {0x67, 6, 0, 0, 0x00000039}, + {0xc7, 6, 0, 0, 0x0000003f}, + {0x5f, 6, 1, 0, 0x00000000}, + {0xaf, 4, 6, 0, 0x00000000}, + {0xbf, 6, 5, 0, 0x00000000}, + {0x77, 6, 0, 0, 0x00000006}, + {0x57, 6, 0, 0, 0x00000001}, + {0x67, 1, 0, 0, 0x00000001}, + {0x4f, 1, 6, 0, 0x00000000}, + {0xbf, 6, 3, 0, 0x00000000}, + {0x67, 6, 0, 0, 0x0000003a}, + {0xc7, 6, 0, 0, 0x0000003f}, + {0x5f, 6, 1, 0, 0x00000000}, + {0xaf, 4, 6, 0, 0x00000000}, + {0xbf, 6, 5, 0, 0x00000000}, + {0x77, 6, 0, 0, 0x00000005}, + {0x57, 6, 0, 0, 0x00000001}, + {0x67, 1, 0, 0, 0x00000001}, + {0x4f, 1, 6, 0, 0x00000000}, + {0xbf, 6, 3, 0, 0x00000000}, + {0x67, 6, 0, 0, 0x0000003b}, + {0xc7, 6, 0, 0, 0x0000003f}, + {0x5f, 6, 1, 0, 0x00000000}, + {0xaf, 4, 6, 0, 0x00000000}, + {0xbf, 6, 5, 0, 0x00000000}, + {0x77, 6, 0, 0, 0x00000004}, + {0x57, 6, 0, 0, 0x00000001}, + {0x67, 1, 0, 0, 0x00000001}, + {0x4f, 1, 6, 0, 0x00000000}, + {0xbf, 6, 3, 0, 0x00000000}, + {0x67, 6, 0, 0, 0x0000003c}, + {0xc7, 6, 0, 0, 0x0000003f}, + {0x5f, 6, 1, 0, 0x00000000}, + {0xaf, 4, 6, 0, 0x00000000}, + {0xbf, 6, 5, 0, 0x00000000}, + {0x77, 6, 0, 0, 0x00000003}, + {0x57, 6, 0, 0, 0x00000001}, + {0x67, 1, 0, 0, 0x00000001}, + {0x4f, 1, 6, 0, 0x00000000}, + {0xbf, 6, 3, 0, 0x00000000}, + {0x67, 6, 0, 0, 0x0000003d}, + {0xc7, 6, 0, 0, 0x0000003f}, + {0x5f, 6, 1, 0, 0x00000000}, + {0xaf, 4, 6, 0, 0x00000000}, + {0xbf, 6, 5, 0, 0x00000000}, + {0x77, 6, 0, 0, 0x00000002}, + {0x57, 6, 0, 0, 0x00000001}, + {0x67, 1, 0, 0, 0x00000001}, + {0x4f, 1, 6, 0, 0x00000000}, + {0xbf, 6, 3, 0, 0x00000000}, + {0x67, 6, 0, 0, 0x0000003e}, + {0xc7, 6, 0, 0, 0x0000003f}, + {0x5f, 6, 1, 0, 0x00000000}, + {0xaf, 4, 6, 0, 0x00000000}, + {0xbf, 6, 5, 0, 0x00000000}, + {0x77, 6, 0, 0, 0x00000001}, + {0x57, 6, 0, 0, 0x00000001}, + {0x67, 1, 0, 0, 0x00000001}, + {0x4f, 1, 6, 0, 0x00000000}, + {0x67, 3, 0, 0, 0x0000003f}, + {0xc7, 3, 0, 0, 0x0000003f}, + {0x5f, 3, 1, 0, 0x00000000}, + {0xaf, 4, 3, 0, 0x00000000}, + {0x57, 5, 0, 0, 0x00000001}, + {0x67, 1, 0, 0, 0x00000001}, + {0x4f, 1, 5, 0, 0x00000000}, + {0x71, 3, 9, 3, 0x00000000}, + {0x67, 3, 0, 0, 0x00000038}, + {0xc7, 3, 0, 0, 0x00000038}, + {0xb7, 5, 0, 0, 0x00000000}, + {0x6d, 3, 2, 1, 0x00000000}, + {0xbf, 5, 1, 0, 0x00000000}, + {0xaf, 4, 5, 0, 0x00000000}, + {0x67, 1, 0, 0, 0x00000001}, + {0x71, 5, 0, 7, 0x00000000}, + {0xbf, 6, 5, 0, 0x00000000}, + {0x77, 6, 0, 0, 0x00000007}, + {0x4f, 1, 6, 0, 0x00000000}, + {0xbf, 6, 3, 0, 0x00000000}, + {0x67, 6, 0, 0, 0x00000039}, + {0xc7, 6, 0, 0, 0x0000003f}, + {0x5f, 6, 1, 0, 0x00000000}, + {0xaf, 4, 6, 0, 0x00000000}, + {0xbf, 6, 5, 0, 0x00000000}, + {0x77, 6, 0, 0, 0x00000006}, + {0x57, 6, 0, 0, 0x00000001}, + {0x67, 1, 0, 0, 0x00000001}, + {0x4f, 1, 6, 0, 0x00000000}, + {0xbf, 6, 3, 0, 0x00000000}, + {0x67, 6, 0, 0, 0x0000003a}, + {0xc7, 6, 0, 0, 0x0000003f}, + {0x5f, 6, 1, 0, 0x00000000}, + {0xaf, 4, 6, 0, 0x00000000}, + {0xbf, 6, 5, 0, 0x00000000}, + {0x77, 6, 0, 0, 0x00000005}, + {0x57, 6, 0, 0, 0x00000001}, + {0x67, 1, 0, 0, 0x00000001}, + {0x4f, 1, 6, 0, 0x00000000}, + {0xbf, 6, 3, 0, 0x00000000}, + {0x67, 6, 0, 0, 0x0000003b}, + {0xc7, 6, 0, 0, 0x0000003f}, + {0x5f, 6, 1, 0, 0x00000000}, + {0xaf, 4, 6, 0, 0x00000000}, + {0xbf, 6, 5, 0, 0x00000000}, + {0x77, 6, 0, 0, 0x00000004}, + {0x57, 6, 0, 0, 0x00000001}, + {0x67, 1, 0, 0, 0x00000001}, + {0x4f, 1, 6, 0, 0x00000000}, + {0xbf, 6, 3, 0, 0x00000000}, + {0x67, 6, 0, 0, 0x0000003c}, + {0xc7, 6, 0, 0, 0x0000003f}, + {0x5f, 6, 1, 0, 0x00000000}, + {0xaf, 4, 6, 0, 0x00000000}, + {0xbf, 6, 5, 0, 0x00000000}, + {0x77, 6, 0, 0, 0x00000003}, + {0x57, 6, 0, 0, 0x00000001}, + {0x67, 1, 0, 0, 0x00000001}, + {0x4f, 1, 6, 0, 0x00000000}, + {0xbf, 6, 3, 0, 0x00000000}, + {0x67, 6, 0, 0, 0x0000003d}, + {0xc7, 6, 0, 0, 0x0000003f}, + {0x5f, 6, 1, 0, 0x00000000}, + {0xaf, 4, 6, 0, 0x00000000}, + {0xbf, 6, 5, 0, 0x00000000}, + {0x77, 6, 0, 0, 0x00000002}, + {0x57, 6, 0, 0, 0x00000001}, + {0x67, 1, 0, 0, 0x00000001}, + {0x4f, 1, 6, 0, 0x00000000}, + {0xbf, 6, 3, 0, 0x00000000}, + {0x67, 6, 0, 0, 0x0000003e}, + {0xc7, 6, 0, 0, 0x0000003f}, + {0x5f, 6, 1, 0, 0x00000000}, + {0xaf, 4, 6, 0, 0x00000000}, + {0xbf, 6, 5, 0, 0x00000000}, + {0x77, 6, 0, 0, 0x00000001}, + {0x57, 6, 0, 0, 0x00000001}, + {0x67, 1, 0, 0, 0x00000001}, + {0x4f, 1, 6, 0, 0x00000000}, + {0x67, 3, 0, 0, 0x0000003f}, + {0xc7, 3, 0, 0, 0x0000003f}, + {0x5f, 3, 1, 0, 0x00000000}, + {0xaf, 4, 3, 0, 0x00000000}, + {0x57, 5, 0, 0, 0x00000001}, + {0x67, 1, 0, 0, 0x00000001}, + {0x4f, 1, 5, 0, 0x00000000}, + {0x71, 3, 9, 4, 0x00000000}, + {0x67, 3, 0, 0, 0x00000038}, + {0xc7, 3, 0, 0, 0x00000038}, + {0xb7, 5, 0, 0, 0x00000000}, + {0x6d, 3, 2, 1, 0x00000000}, + {0xbf, 5, 1, 0, 0x00000000}, + {0xaf, 4, 5, 0, 0x00000000}, + {0x67, 1, 0, 0, 0x00000001}, + {0x71, 5, 0, 8, 0x00000000}, + {0xbf, 6, 5, 0, 0x00000000}, + {0x77, 6, 0, 0, 0x00000007}, + {0x4f, 1, 6, 0, 0x00000000}, + {0xbf, 6, 3, 0, 0x00000000}, + {0x67, 6, 0, 0, 0x00000039}, + {0xc7, 6, 0, 0, 0x0000003f}, + {0x5f, 6, 1, 0, 0x00000000}, + {0xaf, 4, 6, 0, 0x00000000}, + {0xbf, 6, 5, 0, 0x00000000}, + {0x77, 6, 0, 0, 0x00000006}, + {0x57, 6, 0, 0, 0x00000001}, + {0x67, 1, 0, 0, 0x00000001}, + {0x4f, 1, 6, 0, 0x00000000}, + {0xbf, 6, 3, 0, 0x00000000}, + {0x67, 6, 0, 0, 0x0000003a}, + {0xc7, 6, 0, 0, 0x0000003f}, + {0x5f, 6, 1, 0, 0x00000000}, + {0xaf, 4, 6, 0, 0x00000000}, + {0xbf, 6, 5, 0, 0x00000000}, + {0x77, 6, 0, 0, 0x00000005}, + {0x57, 6, 0, 0, 0x00000001}, + {0x67, 1, 0, 0, 0x00000001}, + {0x4f, 1, 6, 0, 0x00000000}, + {0xbf, 6, 3, 0, 0x00000000}, + {0x67, 6, 0, 0, 0x0000003b}, + {0xc7, 6, 0, 0, 0x0000003f}, + {0x5f, 6, 1, 0, 0x00000000}, + {0xaf, 4, 6, 0, 0x00000000}, + {0xbf, 6, 5, 0, 0x00000000}, + {0x77, 6, 0, 0, 0x00000004}, + {0x57, 6, 0, 0, 0x00000001}, + {0x67, 1, 0, 0, 0x00000001}, + {0x4f, 1, 6, 0, 0x00000000}, + {0xbf, 6, 3, 0, 0x00000000}, + {0x67, 6, 0, 0, 0x0000003c}, + {0xc7, 6, 0, 0, 0x0000003f}, + {0x5f, 6, 1, 0, 0x00000000}, + {0xaf, 4, 6, 0, 0x00000000}, + {0xbf, 6, 5, 0, 0x00000000}, + {0x77, 6, 0, 0, 0x00000003}, + {0x57, 6, 0, 0, 0x00000001}, + {0x67, 1, 0, 0, 0x00000001}, + {0x4f, 1, 6, 0, 0x00000000}, + {0xbf, 6, 3, 0, 0x00000000}, + {0x67, 6, 0, 0, 0x0000003d}, + {0xc7, 6, 0, 0, 0x0000003f}, + {0x5f, 6, 1, 0, 0x00000000}, + {0xaf, 4, 6, 0, 0x00000000}, + {0xbf, 6, 5, 0, 0x00000000}, + {0x77, 6, 0, 0, 0x00000002}, + {0x57, 6, 0, 0, 0x00000001}, + {0x67, 1, 0, 0, 0x00000001}, + {0x4f, 1, 6, 0, 0x00000000}, + {0xbf, 6, 3, 0, 0x00000000}, + {0x67, 6, 0, 0, 0x0000003e}, + {0xc7, 6, 0, 0, 0x0000003f}, + {0x5f, 6, 1, 0, 0x00000000}, + {0xaf, 4, 6, 0, 0x00000000}, + {0xbf, 6, 5, 0, 0x00000000}, + {0x77, 6, 0, 0, 0x00000001}, + {0x57, 6, 0, 0, 0x00000001}, + {0x67, 1, 0, 0, 0x00000001}, + {0x4f, 1, 6, 0, 0x00000000}, + {0x67, 3, 0, 0, 0x0000003f}, + {0xc7, 3, 0, 0, 0x0000003f}, + {0x5f, 3, 1, 0, 0x00000000}, + {0xaf, 4, 3, 0, 0x00000000}, + {0x57, 5, 0, 0, 0x00000001}, + {0x67, 1, 0, 0, 0x00000001}, + {0x4f, 1, 5, 0, 0x00000000}, + {0x71, 3, 9, 5, 0x00000000}, + {0x67, 3, 0, 0, 0x00000038}, + {0xc7, 3, 0, 0, 0x00000038}, + {0xb7, 5, 0, 0, 0x00000000}, + {0x6d, 3, 2, 1, 0x00000000}, + {0xbf, 5, 1, 0, 0x00000000}, + {0xaf, 4, 5, 0, 0x00000000}, + {0x71, 2, 0, 9, 0x00000000}, + {0x67, 1, 0, 0, 0x00000001}, + {0xbf, 5, 2, 0, 0x00000000}, + {0x77, 5, 0, 0, 0x00000007}, + {0x4f, 1, 5, 0, 0x00000000}, + {0xbf, 5, 3, 0, 0x00000000}, + {0x67, 5, 0, 0, 0x00000039}, + {0xc7, 5, 0, 0, 0x0000003f}, + {0x5f, 5, 1, 0, 0x00000000}, + {0xaf, 4, 5, 0, 0x00000000}, + {0xbf, 5, 2, 0, 0x00000000}, + {0x77, 5, 0, 0, 0x00000006}, + {0x57, 5, 0, 0, 0x00000001}, + {0x67, 1, 0, 0, 0x00000001}, + {0x4f, 1, 5, 0, 0x00000000}, + {0xbf, 5, 3, 0, 0x00000000}, + {0x67, 5, 0, 0, 0x0000003a}, + {0xc7, 5, 0, 0, 0x0000003f}, + {0x5f, 5, 1, 0, 0x00000000}, + {0xaf, 4, 5, 0, 0x00000000}, + {0xbf, 5, 2, 0, 0x00000000}, + {0x77, 5, 0, 0, 0x00000005}, + {0x57, 5, 0, 0, 0x00000001}, + {0x67, 1, 0, 0, 0x00000001}, + {0x4f, 1, 5, 0, 0x00000000}, + {0xbf, 5, 3, 0, 0x00000000}, + {0x67, 5, 0, 0, 0x0000003b}, + {0xc7, 5, 0, 0, 0x0000003f}, + {0x5f, 5, 1, 0, 0x00000000}, + {0xaf, 4, 5, 0, 0x00000000}, + {0xbf, 5, 2, 0, 0x00000000}, + {0x77, 5, 0, 0, 0x00000004}, + {0x57, 5, 0, 0, 0x00000001}, + {0x67, 1, 0, 0, 0x00000001}, + {0x4f, 1, 5, 0, 0x00000000}, + {0xbf, 5, 3, 0, 0x00000000}, + {0x67, 5, 0, 0, 0x0000003c}, + {0xc7, 5, 0, 0, 0x0000003f}, + {0x5f, 5, 1, 0, 0x00000000}, + {0xaf, 4, 5, 0, 0x00000000}, + {0xbf, 5, 2, 0, 0x00000000}, + {0x77, 5, 0, 0, 0x00000003}, + {0x57, 5, 0, 0, 0x00000001}, + {0x67, 1, 0, 0, 0x00000001}, + {0x4f, 1, 5, 0, 0x00000000}, + {0xbf, 5, 3, 0, 0x00000000}, + {0x67, 5, 0, 0, 0x0000003d}, + {0xc7, 5, 0, 0, 0x0000003f}, + {0x5f, 5, 1, 0, 0x00000000}, + {0xaf, 4, 5, 0, 0x00000000}, + {0xbf, 5, 2, 0, 0x00000000}, + {0x77, 5, 0, 0, 0x00000002}, + {0x57, 5, 0, 0, 0x00000001}, + {0x67, 1, 0, 0, 0x00000001}, + {0x4f, 1, 5, 0, 0x00000000}, + {0xbf, 5, 3, 0, 0x00000000}, + {0x67, 5, 0, 0, 0x0000003e}, + {0xc7, 5, 0, 0, 0x0000003f}, + {0x5f, 5, 1, 0, 0x00000000}, + {0xaf, 4, 5, 0, 0x00000000}, + {0x77, 2, 0, 0, 0x00000001}, + {0x57, 2, 0, 0, 0x00000001}, + {0x67, 1, 0, 0, 0x00000001}, + {0x4f, 1, 2, 0, 0x00000000}, + {0x67, 3, 0, 0, 0x0000003f}, + {0xc7, 3, 0, 0, 0x0000003f}, + {0x5f, 3, 1, 0, 0x00000000}, + {0xaf, 4, 3, 0, 0x00000000}, + {0x63, 7, 4, 48, 0x00000000}, + {0x18, 1, 0, 0, 0x25203d20}, + {0x00, 0, 0, 0, 0x000a2964}, + {0x7b, 10, 1, -24, 0x00000000}, + {0x18, 1, 0, 0, 0x20782520}, + {0x00, 0, 0, 0, 0x66666f28}, + {0x7b, 10, 1, -32, 0x00000000}, + {0x18, 1, 0, 0, 0x6168203a}, + {0x00, 0, 0, 0, 0x3d206873}, + {0x7b, 10, 1, -40, 0x00000000}, + {0x18, 1, 0, 0, 0x68736168}, + {0x00, 0, 0, 0, 0x29642528}, + {0x7b, 10, 1, -48, 0x00000000}, + {0xbf, 1, 10, 0, 0x00000000}, + {0x07, 1, 0, 0, 0xffffffd0}, + {0xb7, 2, 0, 0, 0x00000020}, + {0xb7, 3, 0, 0, 0x00000000}, + {0xb7, 5, 0, 0, 0x00000000}, + {0x85, 0, 0, 0, 0x00000006}, + {0x05, 0, 0, 13, 0x00000000}, + {0x57, 6, 0, 0, 0x0000ffff}, + {0x15, 6, 0, 7, 0x0000dd86}, + {0xb7, 7, 0, 0, 0x00000003}, + {0x55, 6, 0, 10, 0x00000008}, + {0x0f, 9, 1, 0, 0x00000000}, + {0x07, 9, 0, 0, 0x00000014}, + {0xb7, 7, 0, 0, 0x00000000}, + {0x2d, 9, 8, 6, 0x00000000}, + {0x05, 0, 0, 4, 0x00000000}, + {0x0f, 9, 1, 0, 0x00000000}, + {0x07, 9, 0, 0, 0x00000028}, + {0xb7, 7, 0, 0, 0x00000000}, + {0x2d, 9, 8, 1, 0x00000000}, + {0xb7, 7, 0, 0, 0x00000003}, + {0xbf, 0, 7, 0, 0x00000000}, + {0x95, 0, 0, 0, 0x00000000}, +}; +#define L2_DST_HASH_INSNS_CNT \ + (sizeof(l2_dst_hash_insns) / sizeof(l2_dst_hash_insns[0])) + +/** + * Load BPF program (section l2_dst_hash) into the kernel and return a bpf fd. + * + * @param key_idx + * RSS MAP key index + * + * @return + * -1 if the BPF program couldn't be loaded. An fd (int) otherwise. + */ +int bpf_load_l2_dst_hash_insns(__u32 key_idx) +{ + l2_dst_hash_insns[4].imm = key_idx; + + return bpf_load(BPF_PROG_TYPE_SCHED_ACT, + (struct bpf_insn *)l2_dst_hash_insns, + L2_DST_HASH_INSNS_CNT, + "GPL", 0); +} + +/* + * The next bpf_insn array matches l3_dst_hash section + * see tap_bpf_program.c file + * + * HASH(L3_DST) + */ + + +static struct bpf_insn l3_dst_hash_insns[] = { + {0xbf, 7, 1, 0, 0x00000000}, + {0x61, 6, 7, 16, 0x00000000}, + {0x61, 9, 7, 76, 0x00000000}, + {0x61, 8, 7, 80, 0x00000000}, + {0x18, 1, 0, 0, 0xdeadbeef}, + {0x00, 0, 0, 0, 0x00000000}, + {0x63, 10, 1, -4, 0x00000000}, + {0x61, 1, 7, 48, 0x00000000}, + {0x7b, 10, 1, -56, 0x00000000}, + {0xbf, 2, 10, 0, 0x00000000}, + {0x07, 2, 0, 0, 0xfffffffc}, + {0x18, 1, 1, 0, 0xffffffff}, + {0x00, 0, 0, 0, 0x00000000}, + {0x85, 0, 0, 0, 0x00000001}, + {0x55, 0, 0, 21, 0x00000000}, + {0xb7, 1, 0, 0, 0x00000a64}, + {0x6b, 10, 1, -16, 0x00000000}, + {0x18, 1, 0, 0, 0x69666e6f}, + {0x00, 0, 0, 0, 0x65727567}, + {0x7b, 10, 1, -24, 0x00000000}, + {0x18, 1, 0, 0, 0x6e207369}, + {0x00, 0, 0, 0, 0x6320746f}, + {0x7b, 10, 1, -32, 0x00000000}, + {0x18, 1, 0, 0, 0x20737372}, + {0x00, 0, 0, 0, 0x2079656b}, + {0x7b, 10, 1, -40, 0x00000000}, + {0x18, 1, 0, 0, 0x68736168}, + {0x00, 0, 0, 0, 0x203a2928}, + {0x7b, 10, 1, -48, 0x00000000}, + {0xb7, 7, 0, 0, 0x00000000}, + {0x73, 10, 7, -14, 0x00000000}, + {0xbf, 1, 10, 0, 0x00000000}, + {0x07, 1, 0, 0, 0xffffffd0}, + {0xb7, 2, 0, 0, 0x00000023}, + {0x85, 0, 0, 0, 0x00000006}, + {0x05, 0, 0, 1689, 0x00000000}, + {0xb7, 5, 0, 0, 0x0000000e}, + {0x61, 1, 7, 20, 0x00000000}, + {0x15, 1, 0, 10, 0x00000000}, + {0x61, 1, 7, 28, 0x00000000}, + {0x55, 1, 0, 8, 0x0000a888}, + {0xbf, 2, 7, 0, 0x00000000}, + {0xb7, 7, 0, 0, 0x00000000}, + {0xbf, 1, 9, 0, 0x00000000}, + {0x07, 1, 0, 0, 0x00000012}, + {0x2d, 1, 8, 1679, 0x00000000}, + {0xb7, 5, 0, 0, 0x00000012}, + {0x69, 6, 9, 16, 0x00000000}, + {0xbf, 7, 2, 0, 0x00000000}, + {0x61, 1, 0, 128, 0x00000000}, + {0xbf, 3, 1, 0, 0x00000000}, + {0x57, 3, 0, 0, 0x00000001}, + {0xb7, 2, 0, 0, 0x00000000}, + {0x1d, 3, 2, 1, 0x00000000}, + {0x07, 0, 0, 0, 0x00000006}, + {0x7b, 10, 7, -64, 0x00000000}, + {0xbf, 3, 1, 0, 0x00000000}, + {0x57, 3, 0, 0, 0x00000002}, + {0x1d, 3, 2, 1, 0x00000000}, + {0x07, 0, 0, 0, 0x00000006}, + {0xb7, 7, 0, 0, 0x00000003}, + {0x57, 6, 0, 0, 0x0000ffff}, + {0x15, 6, 0, 355, 0x0000dd86}, + {0x55, 6, 0, 1661, 0x00000008}, + {0x0f, 9, 5, 0, 0x00000000}, + {0xb7, 7, 0, 0, 0x00000000}, + {0xbf, 2, 9, 0, 0x00000000}, + {0x07, 2, 0, 0, 0x00000014}, + {0x2d, 2, 8, 1656, 0x00000000}, + {0xbf, 2, 1, 0, 0x00000000}, + {0x57, 2, 0, 0, 0x00000004}, + {0xb7, 3, 0, 0, 0x00000000}, + {0x1d, 2, 3, 1, 0x00000000}, + {0x07, 0, 0, 0, 0x00000004}, + {0x57, 1, 0, 0, 0x00000008}, + {0xb7, 7, 0, 0, 0x00000003}, + {0x15, 1, 0, 1648, 0x00000000}, + {0x71, 1, 0, 0, 0x00000000}, + {0x67, 1, 0, 0, 0x00000018}, + {0x71, 6, 0, 1, 0x00000000}, + {0x67, 6, 0, 0, 0x00000010}, + {0x4f, 6, 1, 0, 0x00000000}, + {0x71, 1, 0, 2, 0x00000000}, + {0x67, 1, 0, 0, 0x00000008}, + {0x4f, 6, 1, 0, 0x00000000}, + {0x71, 1, 0, 3, 0x00000000}, + {0x4f, 6, 1, 0, 0x00000000}, + {0xbf, 8, 9, 0, 0x00000000}, + {0x71, 7, 8, 16, 0x00000000}, + {0x67, 7, 0, 0, 0x00000038}, + {0xc7, 7, 0, 0, 0x00000038}, + {0xb7, 2, 0, 0, 0x00000000}, + {0xb7, 3, 0, 0, 0xffffffff}, + {0xb7, 4, 0, 0, 0x00000000}, + {0x6d, 7, 3, 1, 0x00000000}, + {0xbf, 4, 6, 0, 0x00000000}, + {0x79, 1, 10, -56, 0x00000000}, + {0xaf, 4, 1, 0, 0x00000000}, + {0x67, 6, 0, 0, 0x00000001}, + {0x71, 9, 0, 4, 0x00000000}, + {0xbf, 1, 9, 0, 0x00000000}, + {0x77, 1, 0, 0, 0x00000007}, + {0x4f, 1, 6, 0, 0x00000000}, + {0xbf, 6, 7, 0, 0x00000000}, + {0x67, 6, 0, 0, 0x00000039}, + {0xc7, 6, 0, 0, 0x0000003f}, + {0x5f, 6, 1, 0, 0x00000000}, + {0xaf, 4, 6, 0, 0x00000000}, + {0x67, 1, 0, 0, 0x00000001}, + {0xbf, 6, 9, 0, 0x00000000}, + {0x77, 6, 0, 0, 0x00000006}, + {0x57, 6, 0, 0, 0x00000001}, + {0x4f, 1, 6, 0, 0x00000000}, + {0xbf, 6, 7, 0, 0x00000000}, + {0x67, 6, 0, 0, 0x0000003a}, + {0xc7, 6, 0, 0, 0x0000003f}, + {0x5f, 6, 1, 0, 0x00000000}, + {0xaf, 4, 6, 0, 0x00000000}, + {0xbf, 6, 9, 0, 0x00000000}, + {0x77, 6, 0, 0, 0x00000005}, + {0x57, 6, 0, 0, 0x00000001}, + {0x67, 1, 0, 0, 0x00000001}, + {0x4f, 1, 6, 0, 0x00000000}, + {0xbf, 6, 7, 0, 0x00000000}, + {0x67, 6, 0, 0, 0x0000003b}, + {0xc7, 6, 0, 0, 0x0000003f}, + {0x5f, 6, 1, 0, 0x00000000}, + {0xaf, 4, 6, 0, 0x00000000}, + {0xbf, 6, 9, 0, 0x00000000}, + {0x77, 6, 0, 0, 0x00000004}, + {0x57, 6, 0, 0, 0x00000001}, + {0x67, 1, 0, 0, 0x00000001}, + {0x4f, 1, 6, 0, 0x00000000}, + {0xbf, 6, 7, 0, 0x00000000}, + {0x67, 6, 0, 0, 0x0000003c}, + {0xc7, 6, 0, 0, 0x0000003f}, + {0x5f, 6, 1, 0, 0x00000000}, + {0xaf, 4, 6, 0, 0x00000000}, + {0xbf, 6, 9, 0, 0x00000000}, + {0x77, 6, 0, 0, 0x00000003}, + {0x57, 6, 0, 0, 0x00000001}, + {0x67, 1, 0, 0, 0x00000001}, + {0x4f, 1, 6, 0, 0x00000000}, + {0xbf, 6, 7, 0, 0x00000000}, + {0x67, 6, 0, 0, 0x0000003d}, + {0xc7, 6, 0, 0, 0x0000003f}, + {0x5f, 6, 1, 0, 0x00000000}, + {0xaf, 4, 6, 0, 0x00000000}, + {0xbf, 6, 9, 0, 0x00000000}, + {0x77, 6, 0, 0, 0x00000002}, + {0x57, 6, 0, 0, 0x00000001}, + {0x67, 1, 0, 0, 0x00000001}, + {0x4f, 1, 6, 0, 0x00000000}, + {0xbf, 6, 7, 0, 0x00000000}, + {0x67, 6, 0, 0, 0x0000003e}, + {0xc7, 6, 0, 0, 0x0000003f}, + {0x5f, 6, 1, 0, 0x00000000}, + {0xaf, 4, 6, 0, 0x00000000}, + {0xbf, 6, 9, 0, 0x00000000}, + {0x77, 6, 0, 0, 0x00000001}, + {0x57, 6, 0, 0, 0x00000001}, + {0x67, 1, 0, 0, 0x00000001}, + {0x4f, 1, 6, 0, 0x00000000}, + {0x67, 7, 0, 0, 0x0000003f}, + {0xc7, 7, 0, 0, 0x0000003f}, + {0x5f, 7, 1, 0, 0x00000000}, + {0xaf, 4, 7, 0, 0x00000000}, + {0x57, 9, 0, 0, 0x00000001}, + {0x67, 1, 0, 0, 0x00000001}, + {0x4f, 1, 9, 0, 0x00000000}, + {0x71, 7, 8, 17, 0x00000000}, + {0x67, 7, 0, 0, 0x00000038}, + {0xc7, 7, 0, 0, 0x00000038}, + {0xb7, 6, 0, 0, 0x00000000}, + {0x6d, 7, 3, 1, 0x00000000}, + {0xbf, 6, 1, 0, 0x00000000}, + {0xaf, 4, 6, 0, 0x00000000}, + {0x67, 1, 0, 0, 0x00000001}, + {0x71, 9, 0, 5, 0x00000000}, + {0xbf, 6, 9, 0, 0x00000000}, + {0x77, 6, 0, 0, 0x00000007}, + {0x4f, 1, 6, 0, 0x00000000}, + {0xbf, 6, 7, 0, 0x00000000}, + {0x67, 6, 0, 0, 0x00000039}, + {0xc7, 6, 0, 0, 0x0000003f}, + {0x5f, 6, 1, 0, 0x00000000}, + {0xaf, 4, 6, 0, 0x00000000}, + {0xbf, 6, 9, 0, 0x00000000}, + {0x77, 6, 0, 0, 0x00000006}, + {0x57, 6, 0, 0, 0x00000001}, + {0x67, 1, 0, 0, 0x00000001}, + {0x4f, 1, 6, 0, 0x00000000}, + {0xbf, 6, 7, 0, 0x00000000}, + {0x67, 6, 0, 0, 0x0000003a}, + {0xc7, 6, 0, 0, 0x0000003f}, + {0x5f, 6, 1, 0, 0x00000000}, + {0xaf, 4, 6, 0, 0x00000000}, + {0xbf, 6, 9, 0, 0x00000000}, + {0x77, 6, 0, 0, 0x00000005}, + {0x57, 6, 0, 0, 0x00000001}, + {0x67, 1, 0, 0, 0x00000001}, + {0x4f, 1, 6, 0, 0x00000000}, + {0xbf, 6, 7, 0, 0x00000000}, + {0x67, 6, 0, 0, 0x0000003b}, + {0xc7, 6, 0, 0, 0x0000003f}, + {0x5f, 6, 1, 0, 0x00000000}, + {0xaf, 4, 6, 0, 0x00000000}, + {0xbf, 6, 9, 0, 0x00000000}, + {0x77, 6, 0, 0, 0x00000004}, + {0x57, 6, 0, 0, 0x00000001}, + {0x67, 1, 0, 0, 0x00000001}, + {0x4f, 1, 6, 0, 0x00000000}, + {0xbf, 6, 7, 0, 0x00000000}, + {0x67, 6, 0, 0, 0x0000003c}, + {0xc7, 6, 0, 0, 0x0000003f}, + {0x5f, 6, 1, 0, 0x00000000}, + {0xaf, 4, 6, 0, 0x00000000}, + {0xbf, 6, 9, 0, 0x00000000}, + {0x77, 6, 0, 0, 0x00000003}, + {0x57, 6, 0, 0, 0x00000001}, + {0x67, 1, 0, 0, 0x00000001}, + {0x4f, 1, 6, 0, 0x00000000}, + {0xbf, 6, 7, 0, 0x00000000}, + {0x67, 6, 0, 0, 0x0000003d}, + {0xc7, 6, 0, 0, 0x0000003f}, + {0x5f, 6, 1, 0, 0x00000000}, + {0xaf, 4, 6, 0, 0x00000000}, + {0xbf, 6, 9, 0, 0x00000000}, + {0x77, 6, 0, 0, 0x00000002}, + {0x57, 6, 0, 0, 0x00000001}, + {0x67, 1, 0, 0, 0x00000001}, + {0x4f, 1, 6, 0, 0x00000000}, + {0xbf, 6, 7, 0, 0x00000000}, + {0x67, 6, 0, 0, 0x0000003e}, + {0xc7, 6, 0, 0, 0x0000003f}, + {0x5f, 6, 1, 0, 0x00000000}, + {0xaf, 4, 6, 0, 0x00000000}, + {0xbf, 6, 9, 0, 0x00000000}, + {0x77, 6, 0, 0, 0x00000001}, + {0x57, 6, 0, 0, 0x00000001}, + {0x67, 1, 0, 0, 0x00000001}, + {0x4f, 1, 6, 0, 0x00000000}, + {0x67, 7, 0, 0, 0x0000003f}, + {0xc7, 7, 0, 0, 0x0000003f}, + {0x5f, 7, 1, 0, 0x00000000}, + {0xaf, 4, 7, 0, 0x00000000}, + {0x57, 9, 0, 0, 0x00000001}, + {0x67, 1, 0, 0, 0x00000001}, + {0x4f, 1, 9, 0, 0x00000000}, + {0x71, 7, 8, 18, 0x00000000}, + {0x67, 7, 0, 0, 0x00000038}, + {0xc7, 7, 0, 0, 0x00000038}, + {0xb7, 6, 0, 0, 0x00000000}, + {0x6d, 7, 3, 1, 0x00000000}, + {0xbf, 6, 1, 0, 0x00000000}, + {0xaf, 4, 6, 0, 0x00000000}, + {0x67, 1, 0, 0, 0x00000001}, + {0x71, 9, 0, 6, 0x00000000}, + {0xbf, 6, 9, 0, 0x00000000}, + {0x77, 6, 0, 0, 0x00000007}, + {0x4f, 1, 6, 0, 0x00000000}, + {0xbf, 6, 7, 0, 0x00000000}, + {0x67, 6, 0, 0, 0x00000039}, + {0xc7, 6, 0, 0, 0x0000003f}, + {0x5f, 6, 1, 0, 0x00000000}, + {0xaf, 4, 6, 0, 0x00000000}, + {0xbf, 6, 9, 0, 0x00000000}, + {0x77, 6, 0, 0, 0x00000006}, + {0x57, 6, 0, 0, 0x00000001}, + {0x67, 1, 0, 0, 0x00000001}, + {0x4f, 1, 6, 0, 0x00000000}, + {0xbf, 6, 7, 0, 0x00000000}, + {0x67, 6, 0, 0, 0x0000003a}, + {0xc7, 6, 0, 0, 0x0000003f}, + {0x5f, 6, 1, 0, 0x00000000}, + {0xaf, 4, 6, 0, 0x00000000}, + {0xbf, 6, 9, 0, 0x00000000}, + {0x77, 6, 0, 0, 0x00000005}, + {0x57, 6, 0, 0, 0x00000001}, + {0x67, 1, 0, 0, 0x00000001}, + {0x4f, 1, 6, 0, 0x00000000}, + {0xbf, 6, 7, 0, 0x00000000}, + {0x67, 6, 0, 0, 0x0000003b}, + {0xc7, 6, 0, 0, 0x0000003f}, + {0x5f, 6, 1, 0, 0x00000000}, + {0xaf, 4, 6, 0, 0x00000000}, + {0xbf, 6, 9, 0, 0x00000000}, + {0x77, 6, 0, 0, 0x00000004}, + {0x57, 6, 0, 0, 0x00000001}, + {0x67, 1, 0, 0, 0x00000001}, + {0x4f, 1, 6, 0, 0x00000000}, + {0xbf, 6, 7, 0, 0x00000000}, + {0x67, 6, 0, 0, 0x0000003c}, + {0xc7, 6, 0, 0, 0x0000003f}, + {0x5f, 6, 1, 0, 0x00000000}, + {0xaf, 4, 6, 0, 0x00000000}, + {0xbf, 6, 9, 0, 0x00000000}, + {0x77, 6, 0, 0, 0x00000003}, + {0x57, 6, 0, 0, 0x00000001}, + {0x67, 1, 0, 0, 0x00000001}, + {0x4f, 1, 6, 0, 0x00000000}, + {0xbf, 6, 7, 0, 0x00000000}, + {0x67, 6, 0, 0, 0x0000003d}, + {0xc7, 6, 0, 0, 0x0000003f}, + {0x5f, 6, 1, 0, 0x00000000}, + {0xaf, 4, 6, 0, 0x00000000}, + {0xbf, 6, 9, 0, 0x00000000}, + {0x77, 6, 0, 0, 0x00000002}, + {0x57, 6, 0, 0, 0x00000001}, + {0x67, 1, 0, 0, 0x00000001}, + {0x4f, 1, 6, 0, 0x00000000}, + {0xbf, 6, 7, 0, 0x00000000}, + {0x67, 6, 0, 0, 0x0000003e}, + {0xc7, 6, 0, 0, 0x0000003f}, + {0x5f, 6, 1, 0, 0x00000000}, + {0xaf, 4, 6, 0, 0x00000000}, + {0xbf, 6, 9, 0, 0x00000000}, + {0x77, 6, 0, 0, 0x00000001}, + {0x57, 6, 0, 0, 0x00000001}, + {0x67, 1, 0, 0, 0x00000001}, + {0x4f, 1, 6, 0, 0x00000000}, + {0x67, 7, 0, 0, 0x0000003f}, + {0xc7, 7, 0, 0, 0x0000003f}, + {0x5f, 7, 1, 0, 0x00000000}, + {0xaf, 4, 7, 0, 0x00000000}, + {0x57, 9, 0, 0, 0x00000001}, + {0x67, 1, 0, 0, 0x00000001}, + {0x4f, 1, 9, 0, 0x00000000}, + {0x71, 7, 8, 19, 0x00000000}, + {0x67, 7, 0, 0, 0x00000038}, + {0xc7, 7, 0, 0, 0x00000038}, + {0x6d, 7, 3, 1, 0x00000000}, + {0xbf, 2, 1, 0, 0x00000000}, + {0xaf, 4, 2, 0, 0x00000000}, + {0x71, 2, 0, 7, 0x00000000}, + {0x67, 1, 0, 0, 0x00000001}, + {0xbf, 3, 2, 0, 0x00000000}, + {0x77, 3, 0, 0, 0x00000007}, + {0x4f, 1, 3, 0, 0x00000000}, + {0xbf, 3, 7, 0, 0x00000000}, + {0x67, 3, 0, 0, 0x00000039}, + {0xc7, 3, 0, 0, 0x0000003f}, + {0x5f, 3, 1, 0, 0x00000000}, + {0xaf, 4, 3, 0, 0x00000000}, + {0xbf, 3, 2, 0, 0x00000000}, + {0x77, 3, 0, 0, 0x00000006}, + {0x57, 3, 0, 0, 0x00000001}, + {0x67, 1, 0, 0, 0x00000001}, + {0x4f, 1, 3, 0, 0x00000000}, + {0xbf, 3, 7, 0, 0x00000000}, + {0x67, 3, 0, 0, 0x0000003a}, + {0xc7, 3, 0, 0, 0x0000003f}, + {0x5f, 3, 1, 0, 0x00000000}, + {0xaf, 4, 3, 0, 0x00000000}, + {0xbf, 3, 2, 0, 0x00000000}, + {0x77, 3, 0, 0, 0x00000005}, + {0x57, 3, 0, 0, 0x00000001}, + {0x67, 1, 0, 0, 0x00000001}, + {0x4f, 1, 3, 0, 0x00000000}, + {0xbf, 3, 7, 0, 0x00000000}, + {0x67, 3, 0, 0, 0x0000003b}, + {0xc7, 3, 0, 0, 0x0000003f}, + {0x5f, 3, 1, 0, 0x00000000}, + {0xaf, 4, 3, 0, 0x00000000}, + {0xbf, 3, 2, 0, 0x00000000}, + {0x77, 3, 0, 0, 0x00000004}, + {0x57, 3, 0, 0, 0x00000001}, + {0x67, 1, 0, 0, 0x00000001}, + {0x4f, 1, 3, 0, 0x00000000}, + {0xbf, 3, 7, 0, 0x00000000}, + {0x67, 3, 0, 0, 0x0000003c}, + {0xc7, 3, 0, 0, 0x0000003f}, + {0x5f, 3, 1, 0, 0x00000000}, + {0xaf, 4, 3, 0, 0x00000000}, + {0xbf, 3, 2, 0, 0x00000000}, + {0x77, 3, 0, 0, 0x00000003}, + {0x57, 3, 0, 0, 0x00000001}, + {0x67, 1, 0, 0, 0x00000001}, + {0x4f, 1, 3, 0, 0x00000000}, + {0xbf, 3, 7, 0, 0x00000000}, + {0x67, 3, 0, 0, 0x0000003d}, + {0xc7, 3, 0, 0, 0x0000003f}, + {0x5f, 3, 1, 0, 0x00000000}, + {0xaf, 4, 3, 0, 0x00000000}, + {0xbf, 3, 2, 0, 0x00000000}, + {0x77, 3, 0, 0, 0x00000002}, + {0x57, 3, 0, 0, 0x00000001}, + {0x67, 1, 0, 0, 0x00000001}, + {0x4f, 1, 3, 0, 0x00000000}, + {0xbf, 3, 7, 0, 0x00000000}, + {0x67, 3, 0, 0, 0x0000003e}, + {0xc7, 3, 0, 0, 0x0000003f}, + {0x5f, 3, 1, 0, 0x00000000}, + {0xaf, 4, 3, 0, 0x00000000}, + {0x77, 2, 0, 0, 0x00000001}, + {0x57, 2, 0, 0, 0x00000001}, + {0x67, 1, 0, 0, 0x00000001}, + {0x4f, 1, 2, 0, 0x00000000}, + {0x67, 7, 0, 0, 0x0000003f}, + {0xc7, 7, 0, 0, 0x0000003f}, + {0x5f, 7, 1, 0, 0x00000000}, + {0xaf, 4, 7, 0, 0x00000000}, + {0x79, 1, 10, -64, 0x00000000}, + {0x63, 1, 4, 48, 0x00000000}, + {0x18, 1, 0, 0, 0x25203d20}, + {0x00, 0, 0, 0, 0x000a2964}, + {0x7b, 10, 1, -24, 0x00000000}, + {0x18, 1, 0, 0, 0x20782520}, + {0x00, 0, 0, 0, 0x66666f28}, + {0x7b, 10, 1, -32, 0x00000000}, + {0x18, 1, 0, 0, 0x6168203a}, + {0x00, 0, 0, 0, 0x3d206873}, + {0x7b, 10, 1, -40, 0x00000000}, + {0x18, 1, 0, 0, 0x68736168}, + {0x00, 0, 0, 0, 0x29642528}, + {0x7b, 10, 1, -48, 0x00000000}, + {0x07, 5, 0, 0, 0x00000010}, + {0x05, 0, 0, 1301, 0x00000000}, + {0x0f, 9, 5, 0, 0x00000000}, + {0xb7, 7, 0, 0, 0x00000000}, + {0xbf, 2, 9, 0, 0x00000000}, + {0x07, 2, 0, 0, 0x00000028}, + {0x2d, 2, 8, 1302, 0x00000000}, + {0xbf, 2, 1, 0, 0x00000000}, + {0x57, 2, 0, 0, 0x00000004}, + {0xb7, 3, 0, 0, 0x00000000}, + {0x1d, 2, 3, 1, 0x00000000}, + {0x07, 0, 0, 0, 0x00000010}, + {0x57, 1, 0, 0, 0x00000008}, + {0xb7, 7, 0, 0, 0x00000003}, + {0x15, 1, 0, 1294, 0x00000000}, + {0x71, 1, 0, 0, 0x00000000}, + {0x67, 1, 0, 0, 0x00000018}, + {0x71, 6, 0, 1, 0x00000000}, + {0x67, 6, 0, 0, 0x00000010}, + {0x4f, 6, 1, 0, 0x00000000}, + {0x71, 1, 0, 2, 0x00000000}, + {0x67, 1, 0, 0, 0x00000008}, + {0x4f, 6, 1, 0, 0x00000000}, + {0x71, 1, 0, 3, 0x00000000}, + {0x4f, 6, 1, 0, 0x00000000}, + {0xbf, 8, 9, 0, 0x00000000}, + {0x71, 7, 8, 24, 0x00000000}, + {0x67, 7, 0, 0, 0x00000038}, + {0xc7, 7, 0, 0, 0x00000038}, + {0xb7, 2, 0, 0, 0x00000000}, + {0xb7, 3, 0, 0, 0xffffffff}, + {0xb7, 4, 0, 0, 0x00000000}, + {0x6d, 7, 3, 1, 0x00000000}, + {0xbf, 4, 6, 0, 0x00000000}, + {0x79, 1, 10, -56, 0x00000000}, + {0xaf, 4, 1, 0, 0x00000000}, + {0x67, 6, 0, 0, 0x00000001}, + {0x71, 9, 0, 4, 0x00000000}, + {0xbf, 1, 9, 0, 0x00000000}, + {0x77, 1, 0, 0, 0x00000007}, + {0x4f, 1, 6, 0, 0x00000000}, + {0xbf, 6, 7, 0, 0x00000000}, + {0x67, 6, 0, 0, 0x00000039}, + {0xc7, 6, 0, 0, 0x0000003f}, + {0x5f, 6, 1, 0, 0x00000000}, + {0xaf, 4, 6, 0, 0x00000000}, + {0x67, 1, 0, 0, 0x00000001}, + {0xbf, 6, 9, 0, 0x00000000}, + {0x77, 6, 0, 0, 0x00000006}, + {0x57, 6, 0, 0, 0x00000001}, + {0x4f, 1, 6, 0, 0x00000000}, + {0xbf, 6, 7, 0, 0x00000000}, + {0x67, 6, 0, 0, 0x0000003a}, + {0xc7, 6, 0, 0, 0x0000003f}, + {0x5f, 6, 1, 0, 0x00000000}, + {0xaf, 4, 6, 0, 0x00000000}, + {0xbf, 6, 9, 0, 0x00000000}, + {0x77, 6, 0, 0, 0x00000005}, + {0x57, 6, 0, 0, 0x00000001}, + {0x67, 1, 0, 0, 0x00000001}, + {0x4f, 1, 6, 0, 0x00000000}, + {0xbf, 6, 7, 0, 0x00000000}, + {0x67, 6, 0, 0, 0x0000003b}, + {0xc7, 6, 0, 0, 0x0000003f}, + {0x5f, 6, 1, 0, 0x00000000}, + {0xaf, 4, 6, 0, 0x00000000}, + {0xbf, 6, 9, 0, 0x00000000}, + {0x77, 6, 0, 0, 0x00000004}, + {0x57, 6, 0, 0, 0x00000001}, + {0x67, 1, 0, 0, 0x00000001}, + {0x4f, 1, 6, 0, 0x00000000}, + {0xbf, 6, 7, 0, 0x00000000}, + {0x67, 6, 0, 0, 0x0000003c}, + {0xc7, 6, 0, 0, 0x0000003f}, + {0x5f, 6, 1, 0, 0x00000000}, + {0xaf, 4, 6, 0, 0x00000000}, + {0xbf, 6, 9, 0, 0x00000000}, + {0x77, 6, 0, 0, 0x00000003}, + {0x57, 6, 0, 0, 0x00000001}, + {0x67, 1, 0, 0, 0x00000001}, + {0x4f, 1, 6, 0, 0x00000000}, + {0xbf, 6, 7, 0, 0x00000000}, + {0x67, 6, 0, 0, 0x0000003d}, + {0xc7, 6, 0, 0, 0x0000003f}, + {0x5f, 6, 1, 0, 0x00000000}, + {0xaf, 4, 6, 0, 0x00000000}, + {0xbf, 6, 9, 0, 0x00000000}, + {0x77, 6, 0, 0, 0x00000002}, + {0x57, 6, 0, 0, 0x00000001}, + {0x67, 1, 0, 0, 0x00000001}, + {0x4f, 1, 6, 0, 0x00000000}, + {0xbf, 6, 7, 0, 0x00000000}, + {0x67, 6, 0, 0, 0x0000003e}, + {0xc7, 6, 0, 0, 0x0000003f}, + {0x5f, 6, 1, 0, 0x00000000}, + {0xaf, 4, 6, 0, 0x00000000}, + {0xbf, 6, 9, 0, 0x00000000}, + {0x77, 6, 0, 0, 0x00000001}, + {0x57, 6, 0, 0, 0x00000001}, + {0x67, 1, 0, 0, 0x00000001}, + {0x4f, 1, 6, 0, 0x00000000}, + {0x67, 7, 0, 0, 0x0000003f}, + {0xc7, 7, 0, 0, 0x0000003f}, + {0x5f, 7, 1, 0, 0x00000000}, + {0xaf, 4, 7, 0, 0x00000000}, + {0x57, 9, 0, 0, 0x00000001}, + {0x67, 1, 0, 0, 0x00000001}, + {0x4f, 1, 9, 0, 0x00000000}, + {0x71, 7, 8, 25, 0x00000000}, + {0x67, 7, 0, 0, 0x00000038}, + {0xc7, 7, 0, 0, 0x00000038}, + {0xb7, 6, 0, 0, 0x00000000}, + {0x6d, 7, 3, 1, 0x00000000}, + {0xbf, 6, 1, 0, 0x00000000}, + {0xaf, 4, 6, 0, 0x00000000}, + {0x67, 1, 0, 0, 0x00000001}, + {0x71, 9, 0, 5, 0x00000000}, + {0xbf, 6, 9, 0, 0x00000000}, + {0x77, 6, 0, 0, 0x00000007}, + {0x4f, 1, 6, 0, 0x00000000}, + {0xbf, 6, 7, 0, 0x00000000}, + {0x67, 6, 0, 0, 0x00000039}, + {0xc7, 6, 0, 0, 0x0000003f}, + {0x5f, 6, 1, 0, 0x00000000}, + {0xaf, 4, 6, 0, 0x00000000}, + {0xbf, 6, 9, 0, 0x00000000}, + {0x77, 6, 0, 0, 0x00000006}, + {0x57, 6, 0, 0, 0x00000001}, + {0x67, 1, 0, 0, 0x00000001}, + {0x4f, 1, 6, 0, 0x00000000}, + {0xbf, 6, 7, 0, 0x00000000}, + {0x67, 6, 0, 0, 0x0000003a}, + {0xc7, 6, 0, 0, 0x0000003f}, + {0x5f, 6, 1, 0, 0x00000000}, + {0xaf, 4, 6, 0, 0x00000000}, + {0xbf, 6, 9, 0, 0x00000000}, + {0x77, 6, 0, 0, 0x00000005}, + {0x57, 6, 0, 0, 0x00000001}, + {0x67, 1, 0, 0, 0x00000001}, + {0x4f, 1, 6, 0, 0x00000000}, + {0xbf, 6, 7, 0, 0x00000000}, + {0x67, 6, 0, 0, 0x0000003b}, + {0xc7, 6, 0, 0, 0x0000003f}, + {0x5f, 6, 1, 0, 0x00000000}, + {0xaf, 4, 6, 0, 0x00000000}, + {0xbf, 6, 9, 0, 0x00000000}, + {0x77, 6, 0, 0, 0x00000004}, + {0x57, 6, 0, 0, 0x00000001}, + {0x67, 1, 0, 0, 0x00000001}, + {0x4f, 1, 6, 0, 0x00000000}, + {0xbf, 6, 7, 0, 0x00000000}, + {0x67, 6, 0, 0, 0x0000003c}, + {0xc7, 6, 0, 0, 0x0000003f}, + {0x5f, 6, 1, 0, 0x00000000}, + {0xaf, 4, 6, 0, 0x00000000}, + {0xbf, 6, 9, 0, 0x00000000}, + {0x77, 6, 0, 0, 0x00000003}, + {0x57, 6, 0, 0, 0x00000001}, + {0x67, 1, 0, 0, 0x00000001}, + {0x4f, 1, 6, 0, 0x00000000}, + {0xbf, 6, 7, 0, 0x00000000}, + {0x67, 6, 0, 0, 0x0000003d}, + {0xc7, 6, 0, 0, 0x0000003f}, + {0x5f, 6, 1, 0, 0x00000000}, + {0xaf, 4, 6, 0, 0x00000000}, + {0xbf, 6, 9, 0, 0x00000000}, + {0x77, 6, 0, 0, 0x00000002}, + {0x57, 6, 0, 0, 0x00000001}, + {0x67, 1, 0, 0, 0x00000001}, + {0x4f, 1, 6, 0, 0x00000000}, + {0xbf, 6, 7, 0, 0x00000000}, + {0x67, 6, 0, 0, 0x0000003e}, + {0xc7, 6, 0, 0, 0x0000003f}, + {0x5f, 6, 1, 0, 0x00000000}, + {0xaf, 4, 6, 0, 0x00000000}, + {0xbf, 6, 9, 0, 0x00000000}, + {0x77, 6, 0, 0, 0x00000001}, + {0x57, 6, 0, 0, 0x00000001}, + {0x67, 1, 0, 0, 0x00000001}, + {0x4f, 1, 6, 0, 0x00000000}, + {0x67, 7, 0, 0, 0x0000003f}, + {0xc7, 7, 0, 0, 0x0000003f}, + {0x5f, 7, 1, 0, 0x00000000}, + {0xaf, 4, 7, 0, 0x00000000}, + {0x57, 9, 0, 0, 0x00000001}, + {0x67, 1, 0, 0, 0x00000001}, + {0x4f, 1, 9, 0, 0x00000000}, + {0x71, 7, 8, 26, 0x00000000}, + {0x67, 7, 0, 0, 0x00000038}, + {0xc7, 7, 0, 0, 0x00000038}, + {0xb7, 6, 0, 0, 0x00000000}, + {0x6d, 7, 3, 1, 0x00000000}, + {0xbf, 6, 1, 0, 0x00000000}, + {0xaf, 4, 6, 0, 0x00000000}, + {0x67, 1, 0, 0, 0x00000001}, + {0x71, 9, 0, 6, 0x00000000}, + {0xbf, 6, 9, 0, 0x00000000}, + {0x77, 6, 0, 0, 0x00000007}, + {0x4f, 1, 6, 0, 0x00000000}, + {0xbf, 6, 7, 0, 0x00000000}, + {0x67, 6, 0, 0, 0x00000039}, + {0xc7, 6, 0, 0, 0x0000003f}, + {0x5f, 6, 1, 0, 0x00000000}, + {0xaf, 4, 6, 0, 0x00000000}, + {0xbf, 6, 9, 0, 0x00000000}, + {0x77, 6, 0, 0, 0x00000006}, + {0x57, 6, 0, 0, 0x00000001}, + {0x67, 1, 0, 0, 0x00000001}, + {0x4f, 1, 6, 0, 0x00000000}, + {0xbf, 6, 7, 0, 0x00000000}, + {0x67, 6, 0, 0, 0x0000003a}, + {0xc7, 6, 0, 0, 0x0000003f}, + {0x5f, 6, 1, 0, 0x00000000}, + {0xaf, 4, 6, 0, 0x00000000}, + {0xbf, 6, 9, 0, 0x00000000}, + {0x77, 6, 0, 0, 0x00000005}, + {0x57, 6, 0, 0, 0x00000001}, + {0x67, 1, 0, 0, 0x00000001}, + {0x4f, 1, 6, 0, 0x00000000}, + {0xbf, 6, 7, 0, 0x00000000}, + {0x67, 6, 0, 0, 0x0000003b}, + {0xc7, 6, 0, 0, 0x0000003f}, + {0x5f, 6, 1, 0, 0x00000000}, + {0xaf, 4, 6, 0, 0x00000000}, + {0xbf, 6, 9, 0, 0x00000000}, + {0x77, 6, 0, 0, 0x00000004}, + {0x57, 6, 0, 0, 0x00000001}, + {0x67, 1, 0, 0, 0x00000001}, + {0x4f, 1, 6, 0, 0x00000000}, + {0xbf, 6, 7, 0, 0x00000000}, + {0x67, 6, 0, 0, 0x0000003c}, + {0xc7, 6, 0, 0, 0x0000003f}, + {0x5f, 6, 1, 0, 0x00000000}, + {0xaf, 4, 6, 0, 0x00000000}, + {0xbf, 6, 9, 0, 0x00000000}, + {0x77, 6, 0, 0, 0x00000003}, + {0x57, 6, 0, 0, 0x00000001}, + {0x67, 1, 0, 0, 0x00000001}, + {0x4f, 1, 6, 0, 0x00000000}, + {0xbf, 6, 7, 0, 0x00000000}, + {0x67, 6, 0, 0, 0x0000003d}, + {0xc7, 6, 0, 0, 0x0000003f}, + {0x5f, 6, 1, 0, 0x00000000}, + {0xaf, 4, 6, 0, 0x00000000}, + {0xbf, 6, 9, 0, 0x00000000}, + {0x77, 6, 0, 0, 0x00000002}, + {0x57, 6, 0, 0, 0x00000001}, + {0x67, 1, 0, 0, 0x00000001}, + {0x4f, 1, 6, 0, 0x00000000}, + {0xbf, 6, 7, 0, 0x00000000}, + {0x67, 6, 0, 0, 0x0000003e}, + {0xc7, 6, 0, 0, 0x0000003f}, + {0x5f, 6, 1, 0, 0x00000000}, + {0xaf, 4, 6, 0, 0x00000000}, + {0xbf, 6, 9, 0, 0x00000000}, + {0x77, 6, 0, 0, 0x00000001}, + {0x57, 6, 0, 0, 0x00000001}, + {0x67, 1, 0, 0, 0x00000001}, + {0x4f, 1, 6, 0, 0x00000000}, + {0x67, 7, 0, 0, 0x0000003f}, + {0xc7, 7, 0, 0, 0x0000003f}, + {0x5f, 7, 1, 0, 0x00000000}, + {0xaf, 4, 7, 0, 0x00000000}, + {0x57, 9, 0, 0, 0x00000001}, + {0x67, 1, 0, 0, 0x00000001}, + {0x4f, 1, 9, 0, 0x00000000}, + {0x71, 7, 8, 27, 0x00000000}, + {0x67, 7, 0, 0, 0x00000038}, + {0xc7, 7, 0, 0, 0x00000038}, + {0xb7, 6, 0, 0, 0x00000000}, + {0x6d, 7, 3, 1, 0x00000000}, + {0xbf, 6, 1, 0, 0x00000000}, + {0xaf, 4, 6, 0, 0x00000000}, + {0x67, 1, 0, 0, 0x00000001}, + {0x71, 9, 0, 7, 0x00000000}, + {0xbf, 6, 9, 0, 0x00000000}, + {0x77, 6, 0, 0, 0x00000007}, + {0x4f, 1, 6, 0, 0x00000000}, + {0xbf, 6, 7, 0, 0x00000000}, + {0x67, 6, 0, 0, 0x00000039}, + {0xc7, 6, 0, 0, 0x0000003f}, + {0x5f, 6, 1, 0, 0x00000000}, + {0xaf, 4, 6, 0, 0x00000000}, + {0xbf, 6, 9, 0, 0x00000000}, + {0x77, 6, 0, 0, 0x00000006}, + {0x57, 6, 0, 0, 0x00000001}, + {0x67, 1, 0, 0, 0x00000001}, + {0x4f, 1, 6, 0, 0x00000000}, + {0xbf, 6, 7, 0, 0x00000000}, + {0x67, 6, 0, 0, 0x0000003a}, + {0xc7, 6, 0, 0, 0x0000003f}, + {0x5f, 6, 1, 0, 0x00000000}, + {0xaf, 4, 6, 0, 0x00000000}, + {0xbf, 6, 9, 0, 0x00000000}, + {0x77, 6, 0, 0, 0x00000005}, + {0x57, 6, 0, 0, 0x00000001}, + {0x67, 1, 0, 0, 0x00000001}, + {0x4f, 1, 6, 0, 0x00000000}, + {0xbf, 6, 7, 0, 0x00000000}, + {0x67, 6, 0, 0, 0x0000003b}, + {0xc7, 6, 0, 0, 0x0000003f}, + {0x5f, 6, 1, 0, 0x00000000}, + {0xaf, 4, 6, 0, 0x00000000}, + {0xbf, 6, 9, 0, 0x00000000}, + {0x77, 6, 0, 0, 0x00000004}, + {0x57, 6, 0, 0, 0x00000001}, + {0x67, 1, 0, 0, 0x00000001}, + {0x4f, 1, 6, 0, 0x00000000}, + {0xbf, 6, 7, 0, 0x00000000}, + {0x67, 6, 0, 0, 0x0000003c}, + {0xc7, 6, 0, 0, 0x0000003f}, + {0x5f, 6, 1, 0, 0x00000000}, + {0xaf, 4, 6, 0, 0x00000000}, + {0xbf, 6, 9, 0, 0x00000000}, + {0x77, 6, 0, 0, 0x00000003}, + {0x57, 6, 0, 0, 0x00000001}, + {0x67, 1, 0, 0, 0x00000001}, + {0x4f, 1, 6, 0, 0x00000000}, + {0xbf, 6, 7, 0, 0x00000000}, + {0x67, 6, 0, 0, 0x0000003d}, + {0xc7, 6, 0, 0, 0x0000003f}, + {0x5f, 6, 1, 0, 0x00000000}, + {0xaf, 4, 6, 0, 0x00000000}, + {0xbf, 6, 9, 0, 0x00000000}, + {0x77, 6, 0, 0, 0x00000002}, + {0x57, 6, 0, 0, 0x00000001}, + {0x67, 1, 0, 0, 0x00000001}, + {0x4f, 1, 6, 0, 0x00000000}, + {0xbf, 6, 7, 0, 0x00000000}, + {0x67, 6, 0, 0, 0x0000003e}, + {0xc7, 6, 0, 0, 0x0000003f}, + {0x5f, 6, 1, 0, 0x00000000}, + {0xaf, 4, 6, 0, 0x00000000}, + {0xbf, 6, 9, 0, 0x00000000}, + {0x77, 6, 0, 0, 0x00000001}, + {0x57, 6, 0, 0, 0x00000001}, + {0x67, 1, 0, 0, 0x00000001}, + {0x4f, 1, 6, 0, 0x00000000}, + {0x67, 7, 0, 0, 0x0000003f}, + {0xc7, 7, 0, 0, 0x0000003f}, + {0x5f, 7, 1, 0, 0x00000000}, + {0xaf, 4, 7, 0, 0x00000000}, + {0x57, 9, 0, 0, 0x00000001}, + {0x67, 1, 0, 0, 0x00000001}, + {0x4f, 1, 9, 0, 0x00000000}, + {0x71, 7, 8, 28, 0x00000000}, + {0x67, 7, 0, 0, 0x00000038}, + {0xc7, 7, 0, 0, 0x00000038}, + {0xb7, 6, 0, 0, 0x00000000}, + {0x6d, 7, 3, 1, 0x00000000}, + {0xbf, 6, 1, 0, 0x00000000}, + {0xaf, 4, 6, 0, 0x00000000}, + {0x67, 1, 0, 0, 0x00000001}, + {0x71, 9, 0, 8, 0x00000000}, + {0xbf, 6, 9, 0, 0x00000000}, + {0x77, 6, 0, 0, 0x00000007}, + {0x4f, 1, 6, 0, 0x00000000}, + {0xbf, 6, 7, 0, 0x00000000}, + {0x67, 6, 0, 0, 0x00000039}, + {0xc7, 6, 0, 0, 0x0000003f}, + {0x5f, 6, 1, 0, 0x00000000}, + {0xaf, 4, 6, 0, 0x00000000}, + {0xbf, 6, 9, 0, 0x00000000}, + {0x77, 6, 0, 0, 0x00000006}, + {0x57, 6, 0, 0, 0x00000001}, + {0x67, 1, 0, 0, 0x00000001}, + {0x4f, 1, 6, 0, 0x00000000}, + {0xbf, 6, 7, 0, 0x00000000}, + {0x67, 6, 0, 0, 0x0000003a}, + {0xc7, 6, 0, 0, 0x0000003f}, + {0x5f, 6, 1, 0, 0x00000000}, + {0xaf, 4, 6, 0, 0x00000000}, + {0xbf, 6, 9, 0, 0x00000000}, + {0x77, 6, 0, 0, 0x00000005}, + {0x57, 6, 0, 0, 0x00000001}, + {0x67, 1, 0, 0, 0x00000001}, + {0x4f, 1, 6, 0, 0x00000000}, + {0xbf, 6, 7, 0, 0x00000000}, + {0x67, 6, 0, 0, 0x0000003b}, + {0xc7, 6, 0, 0, 0x0000003f}, + {0x5f, 6, 1, 0, 0x00000000}, + {0xaf, 4, 6, 0, 0x00000000}, + {0xbf, 6, 9, 0, 0x00000000}, + {0x77, 6, 0, 0, 0x00000004}, + {0x57, 6, 0, 0, 0x00000001}, + {0x67, 1, 0, 0, 0x00000001}, + {0x4f, 1, 6, 0, 0x00000000}, + {0xbf, 6, 7, 0, 0x00000000}, + {0x67, 6, 0, 0, 0x0000003c}, + {0xc7, 6, 0, 0, 0x0000003f}, + {0x5f, 6, 1, 0, 0x00000000}, + {0xaf, 4, 6, 0, 0x00000000}, + {0xbf, 6, 9, 0, 0x00000000}, + {0x77, 6, 0, 0, 0x00000003}, + {0x57, 6, 0, 0, 0x00000001}, + {0x67, 1, 0, 0, 0x00000001}, + {0x4f, 1, 6, 0, 0x00000000}, + {0xbf, 6, 7, 0, 0x00000000}, + {0x67, 6, 0, 0, 0x0000003d}, + {0xc7, 6, 0, 0, 0x0000003f}, + {0x5f, 6, 1, 0, 0x00000000}, + {0xaf, 4, 6, 0, 0x00000000}, + {0xbf, 6, 9, 0, 0x00000000}, + {0x77, 6, 0, 0, 0x00000002}, + {0x57, 6, 0, 0, 0x00000001}, + {0x67, 1, 0, 0, 0x00000001}, + {0x4f, 1, 6, 0, 0x00000000}, + {0xbf, 6, 7, 0, 0x00000000}, + {0x67, 6, 0, 0, 0x0000003e}, + {0xc7, 6, 0, 0, 0x0000003f}, + {0x5f, 6, 1, 0, 0x00000000}, + {0xaf, 4, 6, 0, 0x00000000}, + {0xbf, 6, 9, 0, 0x00000000}, + {0x77, 6, 0, 0, 0x00000001}, + {0x57, 6, 0, 0, 0x00000001}, + {0x67, 1, 0, 0, 0x00000001}, + {0x4f, 1, 6, 0, 0x00000000}, + {0x67, 7, 0, 0, 0x0000003f}, + {0xc7, 7, 0, 0, 0x0000003f}, + {0x5f, 7, 1, 0, 0x00000000}, + {0xaf, 4, 7, 0, 0x00000000}, + {0x57, 9, 0, 0, 0x00000001}, + {0x67, 1, 0, 0, 0x00000001}, + {0x4f, 1, 9, 0, 0x00000000}, + {0x71, 7, 8, 29, 0x00000000}, + {0x67, 7, 0, 0, 0x00000038}, + {0xc7, 7, 0, 0, 0x00000038}, + {0xb7, 6, 0, 0, 0x00000000}, + {0x6d, 7, 3, 1, 0x00000000}, + {0xbf, 6, 1, 0, 0x00000000}, + {0xaf, 4, 6, 0, 0x00000000}, + {0x67, 1, 0, 0, 0x00000001}, + {0x71, 9, 0, 9, 0x00000000}, + {0xbf, 6, 9, 0, 0x00000000}, + {0x77, 6, 0, 0, 0x00000007}, + {0x4f, 1, 6, 0, 0x00000000}, + {0xbf, 6, 7, 0, 0x00000000}, + {0x67, 6, 0, 0, 0x00000039}, + {0xc7, 6, 0, 0, 0x0000003f}, + {0x5f, 6, 1, 0, 0x00000000}, + {0xaf, 4, 6, 0, 0x00000000}, + {0xbf, 6, 9, 0, 0x00000000}, + {0x77, 6, 0, 0, 0x00000006}, + {0x57, 6, 0, 0, 0x00000001}, + {0x67, 1, 0, 0, 0x00000001}, + {0x4f, 1, 6, 0, 0x00000000}, + {0xbf, 6, 7, 0, 0x00000000}, + {0x67, 6, 0, 0, 0x0000003a}, + {0xc7, 6, 0, 0, 0x0000003f}, + {0x5f, 6, 1, 0, 0x00000000}, + {0xaf, 4, 6, 0, 0x00000000}, + {0xbf, 6, 9, 0, 0x00000000}, + {0x77, 6, 0, 0, 0x00000005}, + {0x57, 6, 0, 0, 0x00000001}, + {0x67, 1, 0, 0, 0x00000001}, + {0x4f, 1, 6, 0, 0x00000000}, + {0xbf, 6, 7, 0, 0x00000000}, + {0x67, 6, 0, 0, 0x0000003b}, + {0xc7, 6, 0, 0, 0x0000003f}, + {0x5f, 6, 1, 0, 0x00000000}, + {0xaf, 4, 6, 0, 0x00000000}, + {0xbf, 6, 9, 0, 0x00000000}, + {0x77, 6, 0, 0, 0x00000004}, + {0x57, 6, 0, 0, 0x00000001}, + {0x67, 1, 0, 0, 0x00000001}, + {0x4f, 1, 6, 0, 0x00000000}, + {0xbf, 6, 7, 0, 0x00000000}, + {0x67, 6, 0, 0, 0x0000003c}, + {0xc7, 6, 0, 0, 0x0000003f}, + {0x5f, 6, 1, 0, 0x00000000}, + {0xaf, 4, 6, 0, 0x00000000}, + {0xbf, 6, 9, 0, 0x00000000}, + {0x77, 6, 0, 0, 0x00000003}, + {0x57, 6, 0, 0, 0x00000001}, + {0x67, 1, 0, 0, 0x00000001}, + {0x4f, 1, 6, 0, 0x00000000}, + {0xbf, 6, 7, 0, 0x00000000}, + {0x67, 6, 0, 0, 0x0000003d}, + {0xc7, 6, 0, 0, 0x0000003f}, + {0x5f, 6, 1, 0, 0x00000000}, + {0xaf, 4, 6, 0, 0x00000000}, + {0xbf, 6, 9, 0, 0x00000000}, + {0x77, 6, 0, 0, 0x00000002}, + {0x57, 6, 0, 0, 0x00000001}, + {0x67, 1, 0, 0, 0x00000001}, + {0x4f, 1, 6, 0, 0x00000000}, + {0xbf, 6, 7, 0, 0x00000000}, + {0x67, 6, 0, 0, 0x0000003e}, + {0xc7, 6, 0, 0, 0x0000003f}, + {0x5f, 6, 1, 0, 0x00000000}, + {0xaf, 4, 6, 0, 0x00000000}, + {0xbf, 6, 9, 0, 0x00000000}, + {0x77, 6, 0, 0, 0x00000001}, + {0x57, 6, 0, 0, 0x00000001}, + {0x67, 1, 0, 0, 0x00000001}, + {0x4f, 1, 6, 0, 0x00000000}, + {0x67, 7, 0, 0, 0x0000003f}, + {0xc7, 7, 0, 0, 0x0000003f}, + {0x5f, 7, 1, 0, 0x00000000}, + {0xaf, 4, 7, 0, 0x00000000}, + {0x57, 9, 0, 0, 0x00000001}, + {0x67, 1, 0, 0, 0x00000001}, + {0x4f, 1, 9, 0, 0x00000000}, + {0x71, 7, 8, 30, 0x00000000}, + {0x67, 7, 0, 0, 0x00000038}, + {0xc7, 7, 0, 0, 0x00000038}, + {0xb7, 6, 0, 0, 0x00000000}, + {0x6d, 7, 3, 1, 0x00000000}, + {0xbf, 6, 1, 0, 0x00000000}, + {0xaf, 4, 6, 0, 0x00000000}, + {0x67, 1, 0, 0, 0x00000001}, + {0x71, 9, 0, 10, 0x00000000}, + {0xbf, 6, 9, 0, 0x00000000}, + {0x77, 6, 0, 0, 0x00000007}, + {0x4f, 1, 6, 0, 0x00000000}, + {0xbf, 6, 7, 0, 0x00000000}, + {0x67, 6, 0, 0, 0x00000039}, + {0xc7, 6, 0, 0, 0x0000003f}, + {0x5f, 6, 1, 0, 0x00000000}, + {0xaf, 4, 6, 0, 0x00000000}, + {0xbf, 6, 9, 0, 0x00000000}, + {0x77, 6, 0, 0, 0x00000006}, + {0x57, 6, 0, 0, 0x00000001}, + {0x67, 1, 0, 0, 0x00000001}, + {0x4f, 1, 6, 0, 0x00000000}, + {0xbf, 6, 7, 0, 0x00000000}, + {0x67, 6, 0, 0, 0x0000003a}, + {0xc7, 6, 0, 0, 0x0000003f}, + {0x5f, 6, 1, 0, 0x00000000}, + {0xaf, 4, 6, 0, 0x00000000}, + {0xbf, 6, 9, 0, 0x00000000}, + {0x77, 6, 0, 0, 0x00000005}, + {0x57, 6, 0, 0, 0x00000001}, + {0x67, 1, 0, 0, 0x00000001}, + {0x4f, 1, 6, 0, 0x00000000}, + {0xbf, 6, 7, 0, 0x00000000}, + {0x67, 6, 0, 0, 0x0000003b}, + {0xc7, 6, 0, 0, 0x0000003f}, + {0x5f, 6, 1, 0, 0x00000000}, + {0xaf, 4, 6, 0, 0x00000000}, + {0xbf, 6, 9, 0, 0x00000000}, + {0x77, 6, 0, 0, 0x00000004}, + {0x57, 6, 0, 0, 0x00000001}, + {0x67, 1, 0, 0, 0x00000001}, + {0x4f, 1, 6, 0, 0x00000000}, + {0xbf, 6, 7, 0, 0x00000000}, + {0x67, 6, 0, 0, 0x0000003c}, + {0xc7, 6, 0, 0, 0x0000003f}, + {0x5f, 6, 1, 0, 0x00000000}, + {0xaf, 4, 6, 0, 0x00000000}, + {0xbf, 6, 9, 0, 0x00000000}, + {0x77, 6, 0, 0, 0x00000003}, + {0x57, 6, 0, 0, 0x00000001}, + {0x67, 1, 0, 0, 0x00000001}, + {0x4f, 1, 6, 0, 0x00000000}, + {0xbf, 6, 7, 0, 0x00000000}, + {0x67, 6, 0, 0, 0x0000003d}, + {0xc7, 6, 0, 0, 0x0000003f}, + {0x5f, 6, 1, 0, 0x00000000}, + {0xaf, 4, 6, 0, 0x00000000}, + {0xbf, 6, 9, 0, 0x00000000}, + {0x77, 6, 0, 0, 0x00000002}, + {0x57, 6, 0, 0, 0x00000001}, + {0x67, 1, 0, 0, 0x00000001}, + {0x4f, 1, 6, 0, 0x00000000}, + {0xbf, 6, 7, 0, 0x00000000}, + {0x67, 6, 0, 0, 0x0000003e}, + {0xc7, 6, 0, 0, 0x0000003f}, + {0x5f, 6, 1, 0, 0x00000000}, + {0xaf, 4, 6, 0, 0x00000000}, + {0xbf, 6, 9, 0, 0x00000000}, + {0x77, 6, 0, 0, 0x00000001}, + {0x57, 6, 0, 0, 0x00000001}, + {0x67, 1, 0, 0, 0x00000001}, + {0x4f, 1, 6, 0, 0x00000000}, + {0x67, 7, 0, 0, 0x0000003f}, + {0xc7, 7, 0, 0, 0x0000003f}, + {0x5f, 7, 1, 0, 0x00000000}, + {0xaf, 4, 7, 0, 0x00000000}, + {0x57, 9, 0, 0, 0x00000001}, + {0x67, 1, 0, 0, 0x00000001}, + {0x4f, 1, 9, 0, 0x00000000}, + {0x71, 7, 8, 31, 0x00000000}, + {0x67, 7, 0, 0, 0x00000038}, + {0xc7, 7, 0, 0, 0x00000038}, + {0xb7, 6, 0, 0, 0x00000000}, + {0x6d, 7, 3, 1, 0x00000000}, + {0xbf, 6, 1, 0, 0x00000000}, + {0xaf, 4, 6, 0, 0x00000000}, + {0x67, 1, 0, 0, 0x00000001}, + {0x71, 9, 0, 11, 0x00000000}, + {0xbf, 6, 9, 0, 0x00000000}, + {0x77, 6, 0, 0, 0x00000007}, + {0x4f, 1, 6, 0, 0x00000000}, + {0xbf, 6, 7, 0, 0x00000000}, + {0x67, 6, 0, 0, 0x00000039}, + {0xc7, 6, 0, 0, 0x0000003f}, + {0x5f, 6, 1, 0, 0x00000000}, + {0xaf, 4, 6, 0, 0x00000000}, + {0xbf, 6, 9, 0, 0x00000000}, + {0x77, 6, 0, 0, 0x00000006}, + {0x57, 6, 0, 0, 0x00000001}, + {0x67, 1, 0, 0, 0x00000001}, + {0x4f, 1, 6, 0, 0x00000000}, + {0xbf, 6, 7, 0, 0x00000000}, + {0x67, 6, 0, 0, 0x0000003a}, + {0xc7, 6, 0, 0, 0x0000003f}, + {0x5f, 6, 1, 0, 0x00000000}, + {0xaf, 4, 6, 0, 0x00000000}, + {0xbf, 6, 9, 0, 0x00000000}, + {0x77, 6, 0, 0, 0x00000005}, + {0x57, 6, 0, 0, 0x00000001}, + {0x67, 1, 0, 0, 0x00000001}, + {0x4f, 1, 6, 0, 0x00000000}, + {0xbf, 6, 7, 0, 0x00000000}, + {0x67, 6, 0, 0, 0x0000003b}, + {0xc7, 6, 0, 0, 0x0000003f}, + {0x5f, 6, 1, 0, 0x00000000}, + {0xaf, 4, 6, 0, 0x00000000}, + {0xbf, 6, 9, 0, 0x00000000}, + {0x77, 6, 0, 0, 0x00000004}, + {0x57, 6, 0, 0, 0x00000001}, + {0x67, 1, 0, 0, 0x00000001}, + {0x4f, 1, 6, 0, 0x00000000}, + {0xbf, 6, 7, 0, 0x00000000}, + {0x67, 6, 0, 0, 0x0000003c}, + {0xc7, 6, 0, 0, 0x0000003f}, + {0x5f, 6, 1, 0, 0x00000000}, + {0xaf, 4, 6, 0, 0x00000000}, + {0xbf, 6, 9, 0, 0x00000000}, + {0x77, 6, 0, 0, 0x00000003}, + {0x57, 6, 0, 0, 0x00000001}, + {0x67, 1, 0, 0, 0x00000001}, + {0x4f, 1, 6, 0, 0x00000000}, + {0xbf, 6, 7, 0, 0x00000000}, + {0x67, 6, 0, 0, 0x0000003d}, + {0xc7, 6, 0, 0, 0x0000003f}, + {0x5f, 6, 1, 0, 0x00000000}, + {0xaf, 4, 6, 0, 0x00000000}, + {0xbf, 6, 9, 0, 0x00000000}, + {0x77, 6, 0, 0, 0x00000002}, + {0x57, 6, 0, 0, 0x00000001}, + {0x67, 1, 0, 0, 0x00000001}, + {0x4f, 1, 6, 0, 0x00000000}, + {0xbf, 6, 7, 0, 0x00000000}, + {0x67, 6, 0, 0, 0x0000003e}, + {0xc7, 6, 0, 0, 0x0000003f}, + {0x5f, 6, 1, 0, 0x00000000}, + {0xaf, 4, 6, 0, 0x00000000}, + {0xbf, 6, 9, 0, 0x00000000}, + {0x77, 6, 0, 0, 0x00000001}, + {0x57, 6, 0, 0, 0x00000001}, + {0x67, 1, 0, 0, 0x00000001}, + {0x4f, 1, 6, 0, 0x00000000}, + {0x67, 7, 0, 0, 0x0000003f}, + {0xc7, 7, 0, 0, 0x0000003f}, + {0x5f, 7, 1, 0, 0x00000000}, + {0xaf, 4, 7, 0, 0x00000000}, + {0x57, 9, 0, 0, 0x00000001}, + {0x67, 1, 0, 0, 0x00000001}, + {0x4f, 1, 9, 0, 0x00000000}, + {0x71, 7, 8, 32, 0x00000000}, + {0x67, 7, 0, 0, 0x00000038}, + {0xc7, 7, 0, 0, 0x00000038}, + {0xb7, 6, 0, 0, 0x00000000}, + {0x6d, 7, 3, 1, 0x00000000}, + {0xbf, 6, 1, 0, 0x00000000}, + {0xaf, 4, 6, 0, 0x00000000}, + {0x67, 1, 0, 0, 0x00000001}, + {0x71, 9, 0, 12, 0x00000000}, + {0xbf, 6, 9, 0, 0x00000000}, + {0x77, 6, 0, 0, 0x00000007}, + {0x4f, 1, 6, 0, 0x00000000}, + {0xbf, 6, 7, 0, 0x00000000}, + {0x67, 6, 0, 0, 0x00000039}, + {0xc7, 6, 0, 0, 0x0000003f}, + {0x5f, 6, 1, 0, 0x00000000}, + {0xaf, 4, 6, 0, 0x00000000}, + {0xbf, 6, 9, 0, 0x00000000}, + {0x77, 6, 0, 0, 0x00000006}, + {0x57, 6, 0, 0, 0x00000001}, + {0x67, 1, 0, 0, 0x00000001}, + {0x4f, 1, 6, 0, 0x00000000}, + {0xbf, 6, 7, 0, 0x00000000}, + {0x67, 6, 0, 0, 0x0000003a}, + {0xc7, 6, 0, 0, 0x0000003f}, + {0x5f, 6, 1, 0, 0x00000000}, + {0xaf, 4, 6, 0, 0x00000000}, + {0xbf, 6, 9, 0, 0x00000000}, + {0x77, 6, 0, 0, 0x00000005}, + {0x57, 6, 0, 0, 0x00000001}, + {0x67, 1, 0, 0, 0x00000001}, + {0x4f, 1, 6, 0, 0x00000000}, + {0xbf, 6, 7, 0, 0x00000000}, + {0x67, 6, 0, 0, 0x0000003b}, + {0xc7, 6, 0, 0, 0x0000003f}, + {0x5f, 6, 1, 0, 0x00000000}, + {0xaf, 4, 6, 0, 0x00000000}, + {0xbf, 6, 9, 0, 0x00000000}, + {0x77, 6, 0, 0, 0x00000004}, + {0x57, 6, 0, 0, 0x00000001}, + {0x67, 1, 0, 0, 0x00000001}, + {0x4f, 1, 6, 0, 0x00000000}, + {0xbf, 6, 7, 0, 0x00000000}, + {0x67, 6, 0, 0, 0x0000003c}, + {0xc7, 6, 0, 0, 0x0000003f}, + {0x5f, 6, 1, 0, 0x00000000}, + {0xaf, 4, 6, 0, 0x00000000}, + {0xbf, 6, 9, 0, 0x00000000}, + {0x77, 6, 0, 0, 0x00000003}, + {0x57, 6, 0, 0, 0x00000001}, + {0x67, 1, 0, 0, 0x00000001}, + {0x4f, 1, 6, 0, 0x00000000}, + {0xbf, 6, 7, 0, 0x00000000}, + {0x67, 6, 0, 0, 0x0000003d}, + {0xc7, 6, 0, 0, 0x0000003f}, + {0x5f, 6, 1, 0, 0x00000000}, + {0xaf, 4, 6, 0, 0x00000000}, + {0xbf, 6, 9, 0, 0x00000000}, + {0x77, 6, 0, 0, 0x00000002}, + {0x57, 6, 0, 0, 0x00000001}, + {0x67, 1, 0, 0, 0x00000001}, + {0x4f, 1, 6, 0, 0x00000000}, + {0xbf, 6, 7, 0, 0x00000000}, + {0x67, 6, 0, 0, 0x0000003e}, + {0xc7, 6, 0, 0, 0x0000003f}, + {0x5f, 6, 1, 0, 0x00000000}, + {0xaf, 4, 6, 0, 0x00000000}, + {0xbf, 6, 9, 0, 0x00000000}, + {0x77, 6, 0, 0, 0x00000001}, + {0x57, 6, 0, 0, 0x00000001}, + {0x67, 1, 0, 0, 0x00000001}, + {0x4f, 1, 6, 0, 0x00000000}, + {0x67, 7, 0, 0, 0x0000003f}, + {0xc7, 7, 0, 0, 0x0000003f}, + {0x5f, 7, 1, 0, 0x00000000}, + {0xaf, 4, 7, 0, 0x00000000}, + {0x57, 9, 0, 0, 0x00000001}, + {0x67, 1, 0, 0, 0x00000001}, + {0x4f, 1, 9, 0, 0x00000000}, + {0x71, 7, 8, 33, 0x00000000}, + {0x67, 7, 0, 0, 0x00000038}, + {0xc7, 7, 0, 0, 0x00000038}, + {0xb7, 6, 0, 0, 0x00000000}, + {0x6d, 7, 3, 1, 0x00000000}, + {0xbf, 6, 1, 0, 0x00000000}, + {0xaf, 4, 6, 0, 0x00000000}, + {0x67, 1, 0, 0, 0x00000001}, + {0x71, 9, 0, 13, 0x00000000}, + {0xbf, 6, 9, 0, 0x00000000}, + {0x77, 6, 0, 0, 0x00000007}, + {0x4f, 1, 6, 0, 0x00000000}, + {0xbf, 6, 7, 0, 0x00000000}, + {0x67, 6, 0, 0, 0x00000039}, + {0xc7, 6, 0, 0, 0x0000003f}, + {0x5f, 6, 1, 0, 0x00000000}, + {0xaf, 4, 6, 0, 0x00000000}, + {0xbf, 6, 9, 0, 0x00000000}, + {0x77, 6, 0, 0, 0x00000006}, + {0x57, 6, 0, 0, 0x00000001}, + {0x67, 1, 0, 0, 0x00000001}, + {0x4f, 1, 6, 0, 0x00000000}, + {0xbf, 6, 7, 0, 0x00000000}, + {0x67, 6, 0, 0, 0x0000003a}, + {0xc7, 6, 0, 0, 0x0000003f}, + {0x5f, 6, 1, 0, 0x00000000}, + {0xaf, 4, 6, 0, 0x00000000}, + {0xbf, 6, 9, 0, 0x00000000}, + {0x77, 6, 0, 0, 0x00000005}, + {0x57, 6, 0, 0, 0x00000001}, + {0x67, 1, 0, 0, 0x00000001}, + {0x4f, 1, 6, 0, 0x00000000}, + {0xbf, 6, 7, 0, 0x00000000}, + {0x67, 6, 0, 0, 0x0000003b}, + {0xc7, 6, 0, 0, 0x0000003f}, + {0x5f, 6, 1, 0, 0x00000000}, + {0xaf, 4, 6, 0, 0x00000000}, + {0xbf, 6, 9, 0, 0x00000000}, + {0x77, 6, 0, 0, 0x00000004}, + {0x57, 6, 0, 0, 0x00000001}, + {0x67, 1, 0, 0, 0x00000001}, + {0x4f, 1, 6, 0, 0x00000000}, + {0xbf, 6, 7, 0, 0x00000000}, + {0x67, 6, 0, 0, 0x0000003c}, + {0xc7, 6, 0, 0, 0x0000003f}, + {0x5f, 6, 1, 0, 0x00000000}, + {0xaf, 4, 6, 0, 0x00000000}, + {0xbf, 6, 9, 0, 0x00000000}, + {0x77, 6, 0, 0, 0x00000003}, + {0x57, 6, 0, 0, 0x00000001}, + {0x67, 1, 0, 0, 0x00000001}, + {0x4f, 1, 6, 0, 0x00000000}, + {0xbf, 6, 7, 0, 0x00000000}, + {0x67, 6, 0, 0, 0x0000003d}, + {0xc7, 6, 0, 0, 0x0000003f}, + {0x5f, 6, 1, 0, 0x00000000}, + {0xaf, 4, 6, 0, 0x00000000}, + {0xbf, 6, 9, 0, 0x00000000}, + {0x77, 6, 0, 0, 0x00000002}, + {0x57, 6, 0, 0, 0x00000001}, + {0x67, 1, 0, 0, 0x00000001}, + {0x4f, 1, 6, 0, 0x00000000}, + {0xbf, 6, 7, 0, 0x00000000}, + {0x67, 6, 0, 0, 0x0000003e}, + {0xc7, 6, 0, 0, 0x0000003f}, + {0x5f, 6, 1, 0, 0x00000000}, + {0xaf, 4, 6, 0, 0x00000000}, + {0xbf, 6, 9, 0, 0x00000000}, + {0x77, 6, 0, 0, 0x00000001}, + {0x57, 6, 0, 0, 0x00000001}, + {0x67, 1, 0, 0, 0x00000001}, + {0x4f, 1, 6, 0, 0x00000000}, + {0x67, 7, 0, 0, 0x0000003f}, + {0xc7, 7, 0, 0, 0x0000003f}, + {0x5f, 7, 1, 0, 0x00000000}, + {0xaf, 4, 7, 0, 0x00000000}, + {0x57, 9, 0, 0, 0x00000001}, + {0x67, 1, 0, 0, 0x00000001}, + {0x4f, 1, 9, 0, 0x00000000}, + {0x71, 7, 8, 34, 0x00000000}, + {0x67, 7, 0, 0, 0x00000038}, + {0xc7, 7, 0, 0, 0x00000038}, + {0xb7, 6, 0, 0, 0x00000000}, + {0x6d, 7, 3, 1, 0x00000000}, + {0xbf, 6, 1, 0, 0x00000000}, + {0xaf, 4, 6, 0, 0x00000000}, + {0x67, 1, 0, 0, 0x00000001}, + {0x71, 9, 0, 14, 0x00000000}, + {0xbf, 6, 9, 0, 0x00000000}, + {0x77, 6, 0, 0, 0x00000007}, + {0x4f, 1, 6, 0, 0x00000000}, + {0xbf, 6, 7, 0, 0x00000000}, + {0x67, 6, 0, 0, 0x00000039}, + {0xc7, 6, 0, 0, 0x0000003f}, + {0x5f, 6, 1, 0, 0x00000000}, + {0xaf, 4, 6, 0, 0x00000000}, + {0xbf, 6, 9, 0, 0x00000000}, + {0x77, 6, 0, 0, 0x00000006}, + {0x57, 6, 0, 0, 0x00000001}, + {0x67, 1, 0, 0, 0x00000001}, + {0x4f, 1, 6, 0, 0x00000000}, + {0xbf, 6, 7, 0, 0x00000000}, + {0x67, 6, 0, 0, 0x0000003a}, + {0xc7, 6, 0, 0, 0x0000003f}, + {0x5f, 6, 1, 0, 0x00000000}, + {0xaf, 4, 6, 0, 0x00000000}, + {0xbf, 6, 9, 0, 0x00000000}, + {0x77, 6, 0, 0, 0x00000005}, + {0x57, 6, 0, 0, 0x00000001}, + {0x67, 1, 0, 0, 0x00000001}, + {0x4f, 1, 6, 0, 0x00000000}, + {0xbf, 6, 7, 0, 0x00000000}, + {0x67, 6, 0, 0, 0x0000003b}, + {0xc7, 6, 0, 0, 0x0000003f}, + {0x5f, 6, 1, 0, 0x00000000}, + {0xaf, 4, 6, 0, 0x00000000}, + {0xbf, 6, 9, 0, 0x00000000}, + {0x77, 6, 0, 0, 0x00000004}, + {0x57, 6, 0, 0, 0x00000001}, + {0x67, 1, 0, 0, 0x00000001}, + {0x4f, 1, 6, 0, 0x00000000}, + {0xbf, 6, 7, 0, 0x00000000}, + {0x67, 6, 0, 0, 0x0000003c}, + {0xc7, 6, 0, 0, 0x0000003f}, + {0x5f, 6, 1, 0, 0x00000000}, + {0xaf, 4, 6, 0, 0x00000000}, + {0xbf, 6, 9, 0, 0x00000000}, + {0x77, 6, 0, 0, 0x00000003}, + {0x57, 6, 0, 0, 0x00000001}, + {0x67, 1, 0, 0, 0x00000001}, + {0x4f, 1, 6, 0, 0x00000000}, + {0xbf, 6, 7, 0, 0x00000000}, + {0x67, 6, 0, 0, 0x0000003d}, + {0xc7, 6, 0, 0, 0x0000003f}, + {0x5f, 6, 1, 0, 0x00000000}, + {0xaf, 4, 6, 0, 0x00000000}, + {0xbf, 6, 9, 0, 0x00000000}, + {0x77, 6, 0, 0, 0x00000002}, + {0x57, 6, 0, 0, 0x00000001}, + {0x67, 1, 0, 0, 0x00000001}, + {0x4f, 1, 6, 0, 0x00000000}, + {0xbf, 6, 7, 0, 0x00000000}, + {0x67, 6, 0, 0, 0x0000003e}, + {0xc7, 6, 0, 0, 0x0000003f}, + {0x5f, 6, 1, 0, 0x00000000}, + {0xaf, 4, 6, 0, 0x00000000}, + {0xbf, 6, 9, 0, 0x00000000}, + {0x77, 6, 0, 0, 0x00000001}, + {0x57, 6, 0, 0, 0x00000001}, + {0x67, 1, 0, 0, 0x00000001}, + {0x4f, 1, 6, 0, 0x00000000}, + {0x67, 7, 0, 0, 0x0000003f}, + {0xc7, 7, 0, 0, 0x0000003f}, + {0x5f, 7, 1, 0, 0x00000000}, + {0xaf, 4, 7, 0, 0x00000000}, + {0x57, 9, 0, 0, 0x00000001}, + {0x67, 1, 0, 0, 0x00000001}, + {0x4f, 1, 9, 0, 0x00000000}, + {0x71, 7, 8, 35, 0x00000000}, + {0x67, 7, 0, 0, 0x00000038}, + {0xc7, 7, 0, 0, 0x00000038}, + {0xb7, 6, 0, 0, 0x00000000}, + {0x6d, 7, 3, 1, 0x00000000}, + {0xbf, 6, 1, 0, 0x00000000}, + {0xaf, 4, 6, 0, 0x00000000}, + {0x67, 1, 0, 0, 0x00000001}, + {0x71, 9, 0, 15, 0x00000000}, + {0xbf, 6, 9, 0, 0x00000000}, + {0x77, 6, 0, 0, 0x00000007}, + {0x4f, 1, 6, 0, 0x00000000}, + {0xbf, 6, 7, 0, 0x00000000}, + {0x67, 6, 0, 0, 0x00000039}, + {0xc7, 6, 0, 0, 0x0000003f}, + {0x5f, 6, 1, 0, 0x00000000}, + {0xaf, 4, 6, 0, 0x00000000}, + {0xbf, 6, 9, 0, 0x00000000}, + {0x77, 6, 0, 0, 0x00000006}, + {0x57, 6, 0, 0, 0x00000001}, + {0x67, 1, 0, 0, 0x00000001}, + {0x4f, 1, 6, 0, 0x00000000}, + {0xbf, 6, 7, 0, 0x00000000}, + {0x67, 6, 0, 0, 0x0000003a}, + {0xc7, 6, 0, 0, 0x0000003f}, + {0x5f, 6, 1, 0, 0x00000000}, + {0xaf, 4, 6, 0, 0x00000000}, + {0xbf, 6, 9, 0, 0x00000000}, + {0x77, 6, 0, 0, 0x00000005}, + {0x57, 6, 0, 0, 0x00000001}, + {0x67, 1, 0, 0, 0x00000001}, + {0x4f, 1, 6, 0, 0x00000000}, + {0xbf, 6, 7, 0, 0x00000000}, + {0x67, 6, 0, 0, 0x0000003b}, + {0xc7, 6, 0, 0, 0x0000003f}, + {0x5f, 6, 1, 0, 0x00000000}, + {0xaf, 4, 6, 0, 0x00000000}, + {0xbf, 6, 9, 0, 0x00000000}, + {0x77, 6, 0, 0, 0x00000004}, + {0x57, 6, 0, 0, 0x00000001}, + {0x67, 1, 0, 0, 0x00000001}, + {0x4f, 1, 6, 0, 0x00000000}, + {0xbf, 6, 7, 0, 0x00000000}, + {0x67, 6, 0, 0, 0x0000003c}, + {0xc7, 6, 0, 0, 0x0000003f}, + {0x5f, 6, 1, 0, 0x00000000}, + {0xaf, 4, 6, 0, 0x00000000}, + {0xbf, 6, 9, 0, 0x00000000}, + {0x77, 6, 0, 0, 0x00000003}, + {0x57, 6, 0, 0, 0x00000001}, + {0x67, 1, 0, 0, 0x00000001}, + {0x4f, 1, 6, 0, 0x00000000}, + {0xbf, 6, 7, 0, 0x00000000}, + {0x67, 6, 0, 0, 0x0000003d}, + {0xc7, 6, 0, 0, 0x0000003f}, + {0x5f, 6, 1, 0, 0x00000000}, + {0xaf, 4, 6, 0, 0x00000000}, + {0xbf, 6, 9, 0, 0x00000000}, + {0x77, 6, 0, 0, 0x00000002}, + {0x57, 6, 0, 0, 0x00000001}, + {0x67, 1, 0, 0, 0x00000001}, + {0x4f, 1, 6, 0, 0x00000000}, + {0xbf, 6, 7, 0, 0x00000000}, + {0x67, 6, 0, 0, 0x0000003e}, + {0xc7, 6, 0, 0, 0x0000003f}, + {0x5f, 6, 1, 0, 0x00000000}, + {0xaf, 4, 6, 0, 0x00000000}, + {0xbf, 6, 9, 0, 0x00000000}, + {0x77, 6, 0, 0, 0x00000001}, + {0x57, 6, 0, 0, 0x00000001}, + {0x67, 1, 0, 0, 0x00000001}, + {0x4f, 1, 6, 0, 0x00000000}, + {0x67, 7, 0, 0, 0x0000003f}, + {0xc7, 7, 0, 0, 0x0000003f}, + {0x5f, 7, 1, 0, 0x00000000}, + {0xaf, 4, 7, 0, 0x00000000}, + {0x57, 9, 0, 0, 0x00000001}, + {0x67, 1, 0, 0, 0x00000001}, + {0x4f, 1, 9, 0, 0x00000000}, + {0x71, 7, 8, 36, 0x00000000}, + {0x67, 7, 0, 0, 0x00000038}, + {0xc7, 7, 0, 0, 0x00000038}, + {0xb7, 6, 0, 0, 0x00000000}, + {0x6d, 7, 3, 1, 0x00000000}, + {0xbf, 6, 1, 0, 0x00000000}, + {0xaf, 4, 6, 0, 0x00000000}, + {0x67, 1, 0, 0, 0x00000001}, + {0x71, 9, 0, 16, 0x00000000}, + {0xbf, 6, 9, 0, 0x00000000}, + {0x77, 6, 0, 0, 0x00000007}, + {0x4f, 1, 6, 0, 0x00000000}, + {0xbf, 6, 7, 0, 0x00000000}, + {0x67, 6, 0, 0, 0x00000039}, + {0xc7, 6, 0, 0, 0x0000003f}, + {0x5f, 6, 1, 0, 0x00000000}, + {0xaf, 4, 6, 0, 0x00000000}, + {0xbf, 6, 9, 0, 0x00000000}, + {0x77, 6, 0, 0, 0x00000006}, + {0x57, 6, 0, 0, 0x00000001}, + {0x67, 1, 0, 0, 0x00000001}, + {0x4f, 1, 6, 0, 0x00000000}, + {0xbf, 6, 7, 0, 0x00000000}, + {0x67, 6, 0, 0, 0x0000003a}, + {0xc7, 6, 0, 0, 0x0000003f}, + {0x5f, 6, 1, 0, 0x00000000}, + {0xaf, 4, 6, 0, 0x00000000}, + {0xbf, 6, 9, 0, 0x00000000}, + {0x77, 6, 0, 0, 0x00000005}, + {0x57, 6, 0, 0, 0x00000001}, + {0x67, 1, 0, 0, 0x00000001}, + {0x4f, 1, 6, 0, 0x00000000}, + {0xbf, 6, 7, 0, 0x00000000}, + {0x67, 6, 0, 0, 0x0000003b}, + {0xc7, 6, 0, 0, 0x0000003f}, + {0x5f, 6, 1, 0, 0x00000000}, + {0xaf, 4, 6, 0, 0x00000000}, + {0xbf, 6, 9, 0, 0x00000000}, + {0x77, 6, 0, 0, 0x00000004}, + {0x57, 6, 0, 0, 0x00000001}, + {0x67, 1, 0, 0, 0x00000001}, + {0x4f, 1, 6, 0, 0x00000000}, + {0xbf, 6, 7, 0, 0x00000000}, + {0x67, 6, 0, 0, 0x0000003c}, + {0xc7, 6, 0, 0, 0x0000003f}, + {0x5f, 6, 1, 0, 0x00000000}, + {0xaf, 4, 6, 0, 0x00000000}, + {0xbf, 6, 9, 0, 0x00000000}, + {0x77, 6, 0, 0, 0x00000003}, + {0x57, 6, 0, 0, 0x00000001}, + {0x67, 1, 0, 0, 0x00000001}, + {0x4f, 1, 6, 0, 0x00000000}, + {0xbf, 6, 7, 0, 0x00000000}, + {0x67, 6, 0, 0, 0x0000003d}, + {0xc7, 6, 0, 0, 0x0000003f}, + {0x5f, 6, 1, 0, 0x00000000}, + {0xaf, 4, 6, 0, 0x00000000}, + {0xbf, 6, 9, 0, 0x00000000}, + {0x77, 6, 0, 0, 0x00000002}, + {0x57, 6, 0, 0, 0x00000001}, + {0x67, 1, 0, 0, 0x00000001}, + {0x4f, 1, 6, 0, 0x00000000}, + {0xbf, 6, 7, 0, 0x00000000}, + {0x67, 6, 0, 0, 0x0000003e}, + {0xc7, 6, 0, 0, 0x0000003f}, + {0x5f, 6, 1, 0, 0x00000000}, + {0xaf, 4, 6, 0, 0x00000000}, + {0xbf, 6, 9, 0, 0x00000000}, + {0x77, 6, 0, 0, 0x00000001}, + {0x57, 6, 0, 0, 0x00000001}, + {0x67, 1, 0, 0, 0x00000001}, + {0x4f, 1, 6, 0, 0x00000000}, + {0x67, 7, 0, 0, 0x0000003f}, + {0xc7, 7, 0, 0, 0x0000003f}, + {0x5f, 7, 1, 0, 0x00000000}, + {0xaf, 4, 7, 0, 0x00000000}, + {0x57, 9, 0, 0, 0x00000001}, + {0x67, 1, 0, 0, 0x00000001}, + {0x4f, 1, 9, 0, 0x00000000}, + {0x71, 7, 8, 37, 0x00000000}, + {0x67, 7, 0, 0, 0x00000038}, + {0xc7, 7, 0, 0, 0x00000038}, + {0xb7, 6, 0, 0, 0x00000000}, + {0x6d, 7, 3, 1, 0x00000000}, + {0xbf, 6, 1, 0, 0x00000000}, + {0xaf, 4, 6, 0, 0x00000000}, + {0x67, 1, 0, 0, 0x00000001}, + {0x71, 9, 0, 17, 0x00000000}, + {0xbf, 6, 9, 0, 0x00000000}, + {0x77, 6, 0, 0, 0x00000007}, + {0x4f, 1, 6, 0, 0x00000000}, + {0xbf, 6, 7, 0, 0x00000000}, + {0x67, 6, 0, 0, 0x00000039}, + {0xc7, 6, 0, 0, 0x0000003f}, + {0x5f, 6, 1, 0, 0x00000000}, + {0xaf, 4, 6, 0, 0x00000000}, + {0xbf, 6, 9, 0, 0x00000000}, + {0x77, 6, 0, 0, 0x00000006}, + {0x57, 6, 0, 0, 0x00000001}, + {0x67, 1, 0, 0, 0x00000001}, + {0x4f, 1, 6, 0, 0x00000000}, + {0xbf, 6, 7, 0, 0x00000000}, + {0x67, 6, 0, 0, 0x0000003a}, + {0xc7, 6, 0, 0, 0x0000003f}, + {0x5f, 6, 1, 0, 0x00000000}, + {0xaf, 4, 6, 0, 0x00000000}, + {0xbf, 6, 9, 0, 0x00000000}, + {0x77, 6, 0, 0, 0x00000005}, + {0x57, 6, 0, 0, 0x00000001}, + {0x67, 1, 0, 0, 0x00000001}, + {0x4f, 1, 6, 0, 0x00000000}, + {0xbf, 6, 7, 0, 0x00000000}, + {0x67, 6, 0, 0, 0x0000003b}, + {0xc7, 6, 0, 0, 0x0000003f}, + {0x5f, 6, 1, 0, 0x00000000}, + {0xaf, 4, 6, 0, 0x00000000}, + {0xbf, 6, 9, 0, 0x00000000}, + {0x77, 6, 0, 0, 0x00000004}, + {0x57, 6, 0, 0, 0x00000001}, + {0x67, 1, 0, 0, 0x00000001}, + {0x4f, 1, 6, 0, 0x00000000}, + {0xbf, 6, 7, 0, 0x00000000}, + {0x67, 6, 0, 0, 0x0000003c}, + {0xc7, 6, 0, 0, 0x0000003f}, + {0x5f, 6, 1, 0, 0x00000000}, + {0xaf, 4, 6, 0, 0x00000000}, + {0xbf, 6, 9, 0, 0x00000000}, + {0x77, 6, 0, 0, 0x00000003}, + {0x57, 6, 0, 0, 0x00000001}, + {0x67, 1, 0, 0, 0x00000001}, + {0x4f, 1, 6, 0, 0x00000000}, + {0xbf, 6, 7, 0, 0x00000000}, + {0x67, 6, 0, 0, 0x0000003d}, + {0xc7, 6, 0, 0, 0x0000003f}, + {0x5f, 6, 1, 0, 0x00000000}, + {0xaf, 4, 6, 0, 0x00000000}, + {0xbf, 6, 9, 0, 0x00000000}, + {0x77, 6, 0, 0, 0x00000002}, + {0x57, 6, 0, 0, 0x00000001}, + {0x67, 1, 0, 0, 0x00000001}, + {0x4f, 1, 6, 0, 0x00000000}, + {0xbf, 6, 7, 0, 0x00000000}, + {0x67, 6, 0, 0, 0x0000003e}, + {0xc7, 6, 0, 0, 0x0000003f}, + {0x5f, 6, 1, 0, 0x00000000}, + {0xaf, 4, 6, 0, 0x00000000}, + {0xbf, 6, 9, 0, 0x00000000}, + {0x77, 6, 0, 0, 0x00000001}, + {0x57, 6, 0, 0, 0x00000001}, + {0x67, 1, 0, 0, 0x00000001}, + {0x4f, 1, 6, 0, 0x00000000}, + {0x67, 7, 0, 0, 0x0000003f}, + {0xc7, 7, 0, 0, 0x0000003f}, + {0x5f, 7, 1, 0, 0x00000000}, + {0xaf, 4, 7, 0, 0x00000000}, + {0x57, 9, 0, 0, 0x00000001}, + {0x67, 1, 0, 0, 0x00000001}, + {0x4f, 1, 9, 0, 0x00000000}, + {0x71, 7, 8, 38, 0x00000000}, + {0x67, 7, 0, 0, 0x00000038}, + {0xc7, 7, 0, 0, 0x00000038}, + {0xb7, 6, 0, 0, 0x00000000}, + {0x6d, 7, 3, 1, 0x00000000}, + {0xbf, 6, 1, 0, 0x00000000}, + {0xaf, 4, 6, 0, 0x00000000}, + {0x67, 1, 0, 0, 0x00000001}, + {0x71, 9, 0, 18, 0x00000000}, + {0xbf, 6, 9, 0, 0x00000000}, + {0x77, 6, 0, 0, 0x00000007}, + {0x4f, 1, 6, 0, 0x00000000}, + {0xbf, 6, 7, 0, 0x00000000}, + {0x67, 6, 0, 0, 0x00000039}, + {0xc7, 6, 0, 0, 0x0000003f}, + {0x5f, 6, 1, 0, 0x00000000}, + {0xaf, 4, 6, 0, 0x00000000}, + {0xbf, 6, 9, 0, 0x00000000}, + {0x77, 6, 0, 0, 0x00000006}, + {0x57, 6, 0, 0, 0x00000001}, + {0x67, 1, 0, 0, 0x00000001}, + {0x4f, 1, 6, 0, 0x00000000}, + {0xbf, 6, 7, 0, 0x00000000}, + {0x67, 6, 0, 0, 0x0000003a}, + {0xc7, 6, 0, 0, 0x0000003f}, + {0x5f, 6, 1, 0, 0x00000000}, + {0xaf, 4, 6, 0, 0x00000000}, + {0xbf, 6, 9, 0, 0x00000000}, + {0x77, 6, 0, 0, 0x00000005}, + {0x57, 6, 0, 0, 0x00000001}, + {0x67, 1, 0, 0, 0x00000001}, + {0x4f, 1, 6, 0, 0x00000000}, + {0xbf, 6, 7, 0, 0x00000000}, + {0x67, 6, 0, 0, 0x0000003b}, + {0xc7, 6, 0, 0, 0x0000003f}, + {0x5f, 6, 1, 0, 0x00000000}, + {0xaf, 4, 6, 0, 0x00000000}, + {0xbf, 6, 9, 0, 0x00000000}, + {0x77, 6, 0, 0, 0x00000004}, + {0x57, 6, 0, 0, 0x00000001}, + {0x67, 1, 0, 0, 0x00000001}, + {0x4f, 1, 6, 0, 0x00000000}, + {0xbf, 6, 7, 0, 0x00000000}, + {0x67, 6, 0, 0, 0x0000003c}, + {0xc7, 6, 0, 0, 0x0000003f}, + {0x5f, 6, 1, 0, 0x00000000}, + {0xaf, 4, 6, 0, 0x00000000}, + {0xbf, 6, 9, 0, 0x00000000}, + {0x77, 6, 0, 0, 0x00000003}, + {0x57, 6, 0, 0, 0x00000001}, + {0x67, 1, 0, 0, 0x00000001}, + {0x4f, 1, 6, 0, 0x00000000}, + {0xbf, 6, 7, 0, 0x00000000}, + {0x67, 6, 0, 0, 0x0000003d}, + {0xc7, 6, 0, 0, 0x0000003f}, + {0x5f, 6, 1, 0, 0x00000000}, + {0xaf, 4, 6, 0, 0x00000000}, + {0xbf, 6, 9, 0, 0x00000000}, + {0x77, 6, 0, 0, 0x00000002}, + {0x57, 6, 0, 0, 0x00000001}, + {0x67, 1, 0, 0, 0x00000001}, + {0x4f, 1, 6, 0, 0x00000000}, + {0xbf, 6, 7, 0, 0x00000000}, + {0x67, 6, 0, 0, 0x0000003e}, + {0xc7, 6, 0, 0, 0x0000003f}, + {0x5f, 6, 1, 0, 0x00000000}, + {0xaf, 4, 6, 0, 0x00000000}, + {0xbf, 6, 9, 0, 0x00000000}, + {0x77, 6, 0, 0, 0x00000001}, + {0x57, 6, 0, 0, 0x00000001}, + {0x67, 1, 0, 0, 0x00000001}, + {0x4f, 1, 6, 0, 0x00000000}, + {0x67, 7, 0, 0, 0x0000003f}, + {0xc7, 7, 0, 0, 0x0000003f}, + {0x5f, 7, 1, 0, 0x00000000}, + {0xaf, 4, 7, 0, 0x00000000}, + {0x57, 9, 0, 0, 0x00000001}, + {0x67, 1, 0, 0, 0x00000001}, + {0x4f, 1, 9, 0, 0x00000000}, + {0x71, 7, 8, 39, 0x00000000}, + {0x67, 7, 0, 0, 0x00000038}, + {0xc7, 7, 0, 0, 0x00000038}, + {0x6d, 7, 3, 1, 0x00000000}, + {0xbf, 2, 1, 0, 0x00000000}, + {0xaf, 4, 2, 0, 0x00000000}, + {0x71, 2, 0, 19, 0x00000000}, + {0x67, 1, 0, 0, 0x00000001}, + {0xbf, 3, 2, 0, 0x00000000}, + {0x77, 3, 0, 0, 0x00000007}, + {0x4f, 1, 3, 0, 0x00000000}, + {0xbf, 3, 7, 0, 0x00000000}, + {0x67, 3, 0, 0, 0x00000039}, + {0xc7, 3, 0, 0, 0x0000003f}, + {0x5f, 3, 1, 0, 0x00000000}, + {0xaf, 4, 3, 0, 0x00000000}, + {0xbf, 3, 2, 0, 0x00000000}, + {0x77, 3, 0, 0, 0x00000006}, + {0x57, 3, 0, 0, 0x00000001}, + {0x67, 1, 0, 0, 0x00000001}, + {0x4f, 1, 3, 0, 0x00000000}, + {0xbf, 3, 7, 0, 0x00000000}, + {0x67, 3, 0, 0, 0x0000003a}, + {0xc7, 3, 0, 0, 0x0000003f}, + {0x5f, 3, 1, 0, 0x00000000}, + {0xaf, 4, 3, 0, 0x00000000}, + {0xbf, 3, 2, 0, 0x00000000}, + {0x77, 3, 0, 0, 0x00000005}, + {0x57, 3, 0, 0, 0x00000001}, + {0x67, 1, 0, 0, 0x00000001}, + {0x4f, 1, 3, 0, 0x00000000}, + {0xbf, 3, 7, 0, 0x00000000}, + {0x67, 3, 0, 0, 0x0000003b}, + {0xc7, 3, 0, 0, 0x0000003f}, + {0x5f, 3, 1, 0, 0x00000000}, + {0xaf, 4, 3, 0, 0x00000000}, + {0xbf, 3, 2, 0, 0x00000000}, + {0x77, 3, 0, 0, 0x00000004}, + {0x57, 3, 0, 0, 0x00000001}, + {0x67, 1, 0, 0, 0x00000001}, + {0x4f, 1, 3, 0, 0x00000000}, + {0xbf, 3, 7, 0, 0x00000000}, + {0x67, 3, 0, 0, 0x0000003c}, + {0xc7, 3, 0, 0, 0x0000003f}, + {0x5f, 3, 1, 0, 0x00000000}, + {0xaf, 4, 3, 0, 0x00000000}, + {0xbf, 3, 2, 0, 0x00000000}, + {0x77, 3, 0, 0, 0x00000003}, + {0x57, 3, 0, 0, 0x00000001}, + {0x67, 1, 0, 0, 0x00000001}, + {0x4f, 1, 3, 0, 0x00000000}, + {0xbf, 3, 7, 0, 0x00000000}, + {0x67, 3, 0, 0, 0x0000003d}, + {0xc7, 3, 0, 0, 0x0000003f}, + {0x5f, 3, 1, 0, 0x00000000}, + {0xaf, 4, 3, 0, 0x00000000}, + {0xbf, 3, 2, 0, 0x00000000}, + {0x77, 3, 0, 0, 0x00000002}, + {0x57, 3, 0, 0, 0x00000001}, + {0x67, 1, 0, 0, 0x00000001}, + {0x4f, 1, 3, 0, 0x00000000}, + {0xbf, 3, 7, 0, 0x00000000}, + {0x67, 3, 0, 0, 0x0000003e}, + {0xc7, 3, 0, 0, 0x0000003f}, + {0x5f, 3, 1, 0, 0x00000000}, + {0xaf, 4, 3, 0, 0x00000000}, + {0x77, 2, 0, 0, 0x00000001}, + {0x57, 2, 0, 0, 0x00000001}, + {0x67, 1, 0, 0, 0x00000001}, + {0x4f, 1, 2, 0, 0x00000000}, + {0x67, 7, 0, 0, 0x0000003f}, + {0xc7, 7, 0, 0, 0x0000003f}, + {0x5f, 7, 1, 0, 0x00000000}, + {0xaf, 4, 7, 0, 0x00000000}, + {0x79, 1, 10, -64, 0x00000000}, + {0x63, 1, 4, 48, 0x00000000}, + {0x18, 1, 0, 0, 0x25203d20}, + {0x00, 0, 0, 0, 0x000a2964}, + {0x7b, 10, 1, -24, 0x00000000}, + {0x18, 1, 0, 0, 0x20782520}, + {0x00, 0, 0, 0, 0x66666f28}, + {0x7b, 10, 1, -32, 0x00000000}, + {0x18, 1, 0, 0, 0x6168203a}, + {0x00, 0, 0, 0, 0x3d206873}, + {0x7b, 10, 1, -40, 0x00000000}, + {0x18, 1, 0, 0, 0x68736168}, + {0x00, 0, 0, 0, 0x29642528}, + {0x7b, 10, 1, -48, 0x00000000}, + {0x07, 5, 0, 0, 0x00000018}, + {0xbf, 1, 10, 0, 0x00000000}, + {0x07, 1, 0, 0, 0xffffffd0}, + {0xb7, 7, 0, 0, 0x00000003}, + {0xb7, 2, 0, 0, 0x00000020}, + {0xb7, 3, 0, 0, 0x00000003}, + {0x85, 0, 0, 0, 0x00000006}, + {0xbf, 0, 7, 0, 0x00000000}, + {0x95, 0, 0, 0, 0x00000000}, +}; + +#define L3_DST_HASH_INSNS_CNT \ + (sizeof(l3_dst_hash_insns) / sizeof(l3_dst_hash_insns[0])) + +/** + * Load BPF program (section l3_dst_hash) into the kernel and return a bpf fd. + * + * @param queue_idx + * RSS MAP key index + * + * @return + * -1 if the BPF program couldn't be loaded. An fd (int) otherwise. + */ +int bpf_load_l3_dst_hash_insns(__u32 key_idx) +{ + l3_dst_hash_insns[4].imm = key_idx; + + return bpf_load(BPF_PROG_TYPE_SCHED_ACT, + (struct bpf_insn *)l3_dst_hash_insns, + L3_DST_HASH_INSNS_CNT, + "GPL", 0); +} + +/* + * The next bpf_insn array matches l3_src_hash section + * see tap_bpf_program.c file + * + * HASH(L3_SRC) + */ + +static struct bpf_insn l3_src_hash_insns[] = { + {0xbf, 7, 1, 0, 0x00000000}, + {0x61, 6, 7, 16, 0x00000000}, + {0x61, 9, 7, 76, 0x00000000}, + {0x61, 8, 7, 80, 0x00000000}, + {0x18, 1, 0, 0, 0xdeadbeef}, + {0x00, 0, 0, 0, 0x00000000}, + {0x63, 10, 1, -4, 0x00000000}, + {0x61, 1, 7, 48, 0x00000000}, + {0x7b, 10, 1, -56, 0x00000000}, + {0xbf, 2, 10, 0, 0x00000000}, + {0x07, 2, 0, 0, 0xfffffffc}, + {0x18, 1, 1, 0, 0xffffffff}, + {0x00, 0, 0, 0, 0x00000000}, + {0x85, 0, 0, 0, 0x00000001}, + {0x55, 0, 0, 21, 0x00000000}, + {0xb7, 1, 0, 0, 0x00000a64}, + {0x6b, 10, 1, -16, 0x00000000}, + {0x18, 1, 0, 0, 0x69666e6f}, + {0x00, 0, 0, 0, 0x65727567}, + {0x7b, 10, 1, -24, 0x00000000}, + {0x18, 1, 0, 0, 0x6e207369}, + {0x00, 0, 0, 0, 0x6320746f}, + {0x7b, 10, 1, -32, 0x00000000}, + {0x18, 1, 0, 0, 0x20737372}, + {0x00, 0, 0, 0, 0x2079656b}, + {0x7b, 10, 1, -40, 0x00000000}, + {0x18, 1, 0, 0, 0x68736168}, + {0x00, 0, 0, 0, 0x203a2928}, + {0x7b, 10, 1, -48, 0x00000000}, + {0xb7, 7, 0, 0, 0x00000000}, + {0x73, 10, 7, -14, 0x00000000}, + {0xbf, 1, 10, 0, 0x00000000}, + {0x07, 1, 0, 0, 0xffffffd0}, + {0xb7, 2, 0, 0, 0x00000023}, + {0x85, 0, 0, 0, 0x00000006}, + {0x05, 0, 0, 1679, 0x00000000}, + {0xb7, 5, 0, 0, 0x0000000e}, + {0x61, 1, 7, 20, 0x00000000}, + {0x15, 1, 0, 10, 0x00000000}, + {0x61, 1, 7, 28, 0x00000000}, + {0x55, 1, 0, 8, 0x0000a888}, + {0xbf, 2, 7, 0, 0x00000000}, + {0xb7, 7, 0, 0, 0x00000000}, + {0xbf, 1, 9, 0, 0x00000000}, + {0x07, 1, 0, 0, 0x00000012}, + {0x2d, 1, 8, 1669, 0x00000000}, + {0xb7, 5, 0, 0, 0x00000012}, + {0x69, 6, 9, 16, 0x00000000}, + {0xbf, 7, 2, 0, 0x00000000}, + {0x61, 1, 0, 128, 0x00000000}, + {0xbf, 3, 1, 0, 0x00000000}, + {0x57, 3, 0, 0, 0x00000001}, + {0xb7, 2, 0, 0, 0x00000000}, + {0x1d, 3, 2, 1, 0x00000000}, + {0x07, 0, 0, 0, 0x00000006}, + {0xbf, 3, 1, 0, 0x00000000}, + {0x57, 3, 0, 0, 0x00000002}, + {0x1d, 3, 2, 1, 0x00000000}, + {0x07, 0, 0, 0, 0x00000006}, + {0x7b, 10, 7, -64, 0x00000000}, + {0x57, 6, 0, 0, 0x0000ffff}, + {0x15, 6, 0, 351, 0x0000dd86}, + {0xb7, 7, 0, 0, 0x00000003}, + {0x55, 6, 0, 1651, 0x00000008}, + {0x0f, 9, 5, 0, 0x00000000}, + {0xb7, 7, 0, 0, 0x00000000}, + {0xbf, 2, 9, 0, 0x00000000}, + {0x07, 2, 0, 0, 0x00000014}, + {0x2d, 2, 8, 1646, 0x00000000}, + {0x57, 1, 0, 0, 0x00000004}, + {0xb7, 7, 0, 0, 0x00000003}, + {0x15, 1, 0, 1643, 0x00000000}, + {0x71, 1, 0, 0, 0x00000000}, + {0x67, 1, 0, 0, 0x00000018}, + {0x71, 6, 0, 1, 0x00000000}, + {0x67, 6, 0, 0, 0x00000010}, + {0x4f, 6, 1, 0, 0x00000000}, + {0x71, 1, 0, 2, 0x00000000}, + {0x67, 1, 0, 0, 0x00000008}, + {0x4f, 6, 1, 0, 0x00000000}, + {0x71, 1, 0, 3, 0x00000000}, + {0x4f, 6, 1, 0, 0x00000000}, + {0xbf, 8, 9, 0, 0x00000000}, + {0x71, 7, 8, 12, 0x00000000}, + {0x67, 7, 0, 0, 0x00000038}, + {0xc7, 7, 0, 0, 0x00000038}, + {0xb7, 2, 0, 0, 0x00000000}, + {0xb7, 3, 0, 0, 0xffffffff}, + {0xb7, 4, 0, 0, 0x00000000}, + {0x6d, 7, 3, 1, 0x00000000}, + {0xbf, 4, 6, 0, 0x00000000}, + {0x79, 1, 10, -56, 0x00000000}, + {0xaf, 4, 1, 0, 0x00000000}, + {0x67, 6, 0, 0, 0x00000001}, + {0x71, 9, 0, 4, 0x00000000}, + {0xbf, 1, 9, 0, 0x00000000}, + {0x77, 1, 0, 0, 0x00000007}, + {0x4f, 1, 6, 0, 0x00000000}, + {0xbf, 6, 7, 0, 0x00000000}, + {0x67, 6, 0, 0, 0x00000039}, + {0xc7, 6, 0, 0, 0x0000003f}, + {0x5f, 6, 1, 0, 0x00000000}, + {0xaf, 4, 6, 0, 0x00000000}, + {0x67, 1, 0, 0, 0x00000001}, + {0xbf, 6, 9, 0, 0x00000000}, + {0x77, 6, 0, 0, 0x00000006}, + {0x57, 6, 0, 0, 0x00000001}, + {0x4f, 1, 6, 0, 0x00000000}, + {0xbf, 6, 7, 0, 0x00000000}, + {0x67, 6, 0, 0, 0x0000003a}, + {0xc7, 6, 0, 0, 0x0000003f}, + {0x5f, 6, 1, 0, 0x00000000}, + {0xaf, 4, 6, 0, 0x00000000}, + {0xbf, 6, 9, 0, 0x00000000}, + {0x77, 6, 0, 0, 0x00000005}, + {0x57, 6, 0, 0, 0x00000001}, + {0x67, 1, 0, 0, 0x00000001}, + {0x4f, 1, 6, 0, 0x00000000}, + {0xbf, 6, 7, 0, 0x00000000}, + {0x67, 6, 0, 0, 0x0000003b}, + {0xc7, 6, 0, 0, 0x0000003f}, + {0x5f, 6, 1, 0, 0x00000000}, + {0xaf, 4, 6, 0, 0x00000000}, + {0xbf, 6, 9, 0, 0x00000000}, + {0x77, 6, 0, 0, 0x00000004}, + {0x57, 6, 0, 0, 0x00000001}, + {0x67, 1, 0, 0, 0x00000001}, + {0x4f, 1, 6, 0, 0x00000000}, + {0xbf, 6, 7, 0, 0x00000000}, + {0x67, 6, 0, 0, 0x0000003c}, + {0xc7, 6, 0, 0, 0x0000003f}, + {0x5f, 6, 1, 0, 0x00000000}, + {0xaf, 4, 6, 0, 0x00000000}, + {0xbf, 6, 9, 0, 0x00000000}, + {0x77, 6, 0, 0, 0x00000003}, + {0x57, 6, 0, 0, 0x00000001}, + {0x67, 1, 0, 0, 0x00000001}, + {0x4f, 1, 6, 0, 0x00000000}, + {0xbf, 6, 7, 0, 0x00000000}, + {0x67, 6, 0, 0, 0x0000003d}, + {0xc7, 6, 0, 0, 0x0000003f}, + {0x5f, 6, 1, 0, 0x00000000}, + {0xaf, 4, 6, 0, 0x00000000}, + {0xbf, 6, 9, 0, 0x00000000}, + {0x77, 6, 0, 0, 0x00000002}, + {0x57, 6, 0, 0, 0x00000001}, + {0x67, 1, 0, 0, 0x00000001}, + {0x4f, 1, 6, 0, 0x00000000}, + {0xbf, 6, 7, 0, 0x00000000}, + {0x67, 6, 0, 0, 0x0000003e}, + {0xc7, 6, 0, 0, 0x0000003f}, + {0x5f, 6, 1, 0, 0x00000000}, + {0xaf, 4, 6, 0, 0x00000000}, + {0xbf, 6, 9, 0, 0x00000000}, + {0x77, 6, 0, 0, 0x00000001}, + {0x57, 6, 0, 0, 0x00000001}, + {0x67, 1, 0, 0, 0x00000001}, + {0x4f, 1, 6, 0, 0x00000000}, + {0x67, 7, 0, 0, 0x0000003f}, + {0xc7, 7, 0, 0, 0x0000003f}, + {0x5f, 7, 1, 0, 0x00000000}, + {0xaf, 4, 7, 0, 0x00000000}, + {0x57, 9, 0, 0, 0x00000001}, + {0x67, 1, 0, 0, 0x00000001}, + {0x4f, 1, 9, 0, 0x00000000}, + {0x71, 7, 8, 13, 0x00000000}, + {0x67, 7, 0, 0, 0x00000038}, + {0xc7, 7, 0, 0, 0x00000038}, + {0xb7, 6, 0, 0, 0x00000000}, + {0x6d, 7, 3, 1, 0x00000000}, + {0xbf, 6, 1, 0, 0x00000000}, + {0xaf, 4, 6, 0, 0x00000000}, + {0x67, 1, 0, 0, 0x00000001}, + {0x71, 9, 0, 5, 0x00000000}, + {0xbf, 6, 9, 0, 0x00000000}, + {0x77, 6, 0, 0, 0x00000007}, + {0x4f, 1, 6, 0, 0x00000000}, + {0xbf, 6, 7, 0, 0x00000000}, + {0x67, 6, 0, 0, 0x00000039}, + {0xc7, 6, 0, 0, 0x0000003f}, + {0x5f, 6, 1, 0, 0x00000000}, + {0xaf, 4, 6, 0, 0x00000000}, + {0xbf, 6, 9, 0, 0x00000000}, + {0x77, 6, 0, 0, 0x00000006}, + {0x57, 6, 0, 0, 0x00000001}, + {0x67, 1, 0, 0, 0x00000001}, + {0x4f, 1, 6, 0, 0x00000000}, + {0xbf, 6, 7, 0, 0x00000000}, + {0x67, 6, 0, 0, 0x0000003a}, + {0xc7, 6, 0, 0, 0x0000003f}, + {0x5f, 6, 1, 0, 0x00000000}, + {0xaf, 4, 6, 0, 0x00000000}, + {0xbf, 6, 9, 0, 0x00000000}, + {0x77, 6, 0, 0, 0x00000005}, + {0x57, 6, 0, 0, 0x00000001}, + {0x67, 1, 0, 0, 0x00000001}, + {0x4f, 1, 6, 0, 0x00000000}, + {0xbf, 6, 7, 0, 0x00000000}, + {0x67, 6, 0, 0, 0x0000003b}, + {0xc7, 6, 0, 0, 0x0000003f}, + {0x5f, 6, 1, 0, 0x00000000}, + {0xaf, 4, 6, 0, 0x00000000}, + {0xbf, 6, 9, 0, 0x00000000}, + {0x77, 6, 0, 0, 0x00000004}, + {0x57, 6, 0, 0, 0x00000001}, + {0x67, 1, 0, 0, 0x00000001}, + {0x4f, 1, 6, 0, 0x00000000}, + {0xbf, 6, 7, 0, 0x00000000}, + {0x67, 6, 0, 0, 0x0000003c}, + {0xc7, 6, 0, 0, 0x0000003f}, + {0x5f, 6, 1, 0, 0x00000000}, + {0xaf, 4, 6, 0, 0x00000000}, + {0xbf, 6, 9, 0, 0x00000000}, + {0x77, 6, 0, 0, 0x00000003}, + {0x57, 6, 0, 0, 0x00000001}, + {0x67, 1, 0, 0, 0x00000001}, + {0x4f, 1, 6, 0, 0x00000000}, + {0xbf, 6, 7, 0, 0x00000000}, + {0x67, 6, 0, 0, 0x0000003d}, + {0xc7, 6, 0, 0, 0x0000003f}, + {0x5f, 6, 1, 0, 0x00000000}, + {0xaf, 4, 6, 0, 0x00000000}, + {0xbf, 6, 9, 0, 0x00000000}, + {0x77, 6, 0, 0, 0x00000002}, + {0x57, 6, 0, 0, 0x00000001}, + {0x67, 1, 0, 0, 0x00000001}, + {0x4f, 1, 6, 0, 0x00000000}, + {0xbf, 6, 7, 0, 0x00000000}, + {0x67, 6, 0, 0, 0x0000003e}, + {0xc7, 6, 0, 0, 0x0000003f}, + {0x5f, 6, 1, 0, 0x00000000}, + {0xaf, 4, 6, 0, 0x00000000}, + {0xbf, 6, 9, 0, 0x00000000}, + {0x77, 6, 0, 0, 0x00000001}, + {0x57, 6, 0, 0, 0x00000001}, + {0x67, 1, 0, 0, 0x00000001}, + {0x4f, 1, 6, 0, 0x00000000}, + {0x67, 7, 0, 0, 0x0000003f}, + {0xc7, 7, 0, 0, 0x0000003f}, + {0x5f, 7, 1, 0, 0x00000000}, + {0xaf, 4, 7, 0, 0x00000000}, + {0x57, 9, 0, 0, 0x00000001}, + {0x67, 1, 0, 0, 0x00000001}, + {0x4f, 1, 9, 0, 0x00000000}, + {0x71, 7, 8, 14, 0x00000000}, + {0x67, 7, 0, 0, 0x00000038}, + {0xc7, 7, 0, 0, 0x00000038}, + {0xb7, 6, 0, 0, 0x00000000}, + {0x6d, 7, 3, 1, 0x00000000}, + {0xbf, 6, 1, 0, 0x00000000}, + {0xaf, 4, 6, 0, 0x00000000}, + {0x67, 1, 0, 0, 0x00000001}, + {0x71, 9, 0, 6, 0x00000000}, + {0xbf, 6, 9, 0, 0x00000000}, + {0x77, 6, 0, 0, 0x00000007}, + {0x4f, 1, 6, 0, 0x00000000}, + {0xbf, 6, 7, 0, 0x00000000}, + {0x67, 6, 0, 0, 0x00000039}, + {0xc7, 6, 0, 0, 0x0000003f}, + {0x5f, 6, 1, 0, 0x00000000}, + {0xaf, 4, 6, 0, 0x00000000}, + {0xbf, 6, 9, 0, 0x00000000}, + {0x77, 6, 0, 0, 0x00000006}, + {0x57, 6, 0, 0, 0x00000001}, + {0x67, 1, 0, 0, 0x00000001}, + {0x4f, 1, 6, 0, 0x00000000}, + {0xbf, 6, 7, 0, 0x00000000}, + {0x67, 6, 0, 0, 0x0000003a}, + {0xc7, 6, 0, 0, 0x0000003f}, + {0x5f, 6, 1, 0, 0x00000000}, + {0xaf, 4, 6, 0, 0x00000000}, + {0xbf, 6, 9, 0, 0x00000000}, + {0x77, 6, 0, 0, 0x00000005}, + {0x57, 6, 0, 0, 0x00000001}, + {0x67, 1, 0, 0, 0x00000001}, + {0x4f, 1, 6, 0, 0x00000000}, + {0xbf, 6, 7, 0, 0x00000000}, + {0x67, 6, 0, 0, 0x0000003b}, + {0xc7, 6, 0, 0, 0x0000003f}, + {0x5f, 6, 1, 0, 0x00000000}, + {0xaf, 4, 6, 0, 0x00000000}, + {0xbf, 6, 9, 0, 0x00000000}, + {0x77, 6, 0, 0, 0x00000004}, + {0x57, 6, 0, 0, 0x00000001}, + {0x67, 1, 0, 0, 0x00000001}, + {0x4f, 1, 6, 0, 0x00000000}, + {0xbf, 6, 7, 0, 0x00000000}, + {0x67, 6, 0, 0, 0x0000003c}, + {0xc7, 6, 0, 0, 0x0000003f}, + {0x5f, 6, 1, 0, 0x00000000}, + {0xaf, 4, 6, 0, 0x00000000}, + {0xbf, 6, 9, 0, 0x00000000}, + {0x77, 6, 0, 0, 0x00000003}, + {0x57, 6, 0, 0, 0x00000001}, + {0x67, 1, 0, 0, 0x00000001}, + {0x4f, 1, 6, 0, 0x00000000}, + {0xbf, 6, 7, 0, 0x00000000}, + {0x67, 6, 0, 0, 0x0000003d}, + {0xc7, 6, 0, 0, 0x0000003f}, + {0x5f, 6, 1, 0, 0x00000000}, + {0xaf, 4, 6, 0, 0x00000000}, + {0xbf, 6, 9, 0, 0x00000000}, + {0x77, 6, 0, 0, 0x00000002}, + {0x57, 6, 0, 0, 0x00000001}, + {0x67, 1, 0, 0, 0x00000001}, + {0x4f, 1, 6, 0, 0x00000000}, + {0xbf, 6, 7, 0, 0x00000000}, + {0x67, 6, 0, 0, 0x0000003e}, + {0xc7, 6, 0, 0, 0x0000003f}, + {0x5f, 6, 1, 0, 0x00000000}, + {0xaf, 4, 6, 0, 0x00000000}, + {0xbf, 6, 9, 0, 0x00000000}, + {0x77, 6, 0, 0, 0x00000001}, + {0x57, 6, 0, 0, 0x00000001}, + {0x67, 1, 0, 0, 0x00000001}, + {0x4f, 1, 6, 0, 0x00000000}, + {0x67, 7, 0, 0, 0x0000003f}, + {0xc7, 7, 0, 0, 0x0000003f}, + {0x5f, 7, 1, 0, 0x00000000}, + {0xaf, 4, 7, 0, 0x00000000}, + {0x57, 9, 0, 0, 0x00000001}, + {0x67, 1, 0, 0, 0x00000001}, + {0x4f, 1, 9, 0, 0x00000000}, + {0x71, 7, 8, 15, 0x00000000}, + {0x67, 7, 0, 0, 0x00000038}, + {0xc7, 7, 0, 0, 0x00000038}, + {0x6d, 7, 3, 1, 0x00000000}, + {0xbf, 2, 1, 0, 0x00000000}, + {0xaf, 4, 2, 0, 0x00000000}, + {0x71, 2, 0, 7, 0x00000000}, + {0x67, 1, 0, 0, 0x00000001}, + {0xbf, 3, 2, 0, 0x00000000}, + {0x77, 3, 0, 0, 0x00000007}, + {0x4f, 1, 3, 0, 0x00000000}, + {0xbf, 3, 7, 0, 0x00000000}, + {0x67, 3, 0, 0, 0x00000039}, + {0xc7, 3, 0, 0, 0x0000003f}, + {0x5f, 3, 1, 0, 0x00000000}, + {0xaf, 4, 3, 0, 0x00000000}, + {0xbf, 3, 2, 0, 0x00000000}, + {0x77, 3, 0, 0, 0x00000006}, + {0x57, 3, 0, 0, 0x00000001}, + {0x67, 1, 0, 0, 0x00000001}, + {0x4f, 1, 3, 0, 0x00000000}, + {0xbf, 3, 7, 0, 0x00000000}, + {0x67, 3, 0, 0, 0x0000003a}, + {0xc7, 3, 0, 0, 0x0000003f}, + {0x5f, 3, 1, 0, 0x00000000}, + {0xaf, 4, 3, 0, 0x00000000}, + {0xbf, 3, 2, 0, 0x00000000}, + {0x77, 3, 0, 0, 0x00000005}, + {0x57, 3, 0, 0, 0x00000001}, + {0x67, 1, 0, 0, 0x00000001}, + {0x4f, 1, 3, 0, 0x00000000}, + {0xbf, 3, 7, 0, 0x00000000}, + {0x67, 3, 0, 0, 0x0000003b}, + {0xc7, 3, 0, 0, 0x0000003f}, + {0x5f, 3, 1, 0, 0x00000000}, + {0xaf, 4, 3, 0, 0x00000000}, + {0xbf, 3, 2, 0, 0x00000000}, + {0x77, 3, 0, 0, 0x00000004}, + {0x57, 3, 0, 0, 0x00000001}, + {0x67, 1, 0, 0, 0x00000001}, + {0x4f, 1, 3, 0, 0x00000000}, + {0xbf, 3, 7, 0, 0x00000000}, + {0x67, 3, 0, 0, 0x0000003c}, + {0xc7, 3, 0, 0, 0x0000003f}, + {0x5f, 3, 1, 0, 0x00000000}, + {0xaf, 4, 3, 0, 0x00000000}, + {0xbf, 3, 2, 0, 0x00000000}, + {0x77, 3, 0, 0, 0x00000003}, + {0x57, 3, 0, 0, 0x00000001}, + {0x67, 1, 0, 0, 0x00000001}, + {0x4f, 1, 3, 0, 0x00000000}, + {0xbf, 3, 7, 0, 0x00000000}, + {0x67, 3, 0, 0, 0x0000003d}, + {0xc7, 3, 0, 0, 0x0000003f}, + {0x5f, 3, 1, 0, 0x00000000}, + {0xaf, 4, 3, 0, 0x00000000}, + {0xbf, 3, 2, 0, 0x00000000}, + {0x77, 3, 0, 0, 0x00000002}, + {0x57, 3, 0, 0, 0x00000001}, + {0x67, 1, 0, 0, 0x00000001}, + {0x4f, 1, 3, 0, 0x00000000}, + {0xbf, 3, 7, 0, 0x00000000}, + {0x67, 3, 0, 0, 0x0000003e}, + {0xc7, 3, 0, 0, 0x0000003f}, + {0x5f, 3, 1, 0, 0x00000000}, + {0xaf, 4, 3, 0, 0x00000000}, + {0x77, 2, 0, 0, 0x00000001}, + {0x57, 2, 0, 0, 0x00000001}, + {0x67, 1, 0, 0, 0x00000001}, + {0x4f, 1, 2, 0, 0x00000000}, + {0x67, 7, 0, 0, 0x0000003f}, + {0xc7, 7, 0, 0, 0x0000003f}, + {0x5f, 7, 1, 0, 0x00000000}, + {0xaf, 4, 7, 0, 0x00000000}, + {0x79, 1, 10, -64, 0x00000000}, + {0x63, 1, 4, 48, 0x00000000}, + {0x18, 1, 0, 0, 0x25203d20}, + {0x00, 0, 0, 0, 0x000a2964}, + {0x7b, 10, 1, -24, 0x00000000}, + {0x18, 1, 0, 0, 0x20782520}, + {0x00, 0, 0, 0, 0x66666f28}, + {0x7b, 10, 1, -32, 0x00000000}, + {0x18, 1, 0, 0, 0x6168203a}, + {0x00, 0, 0, 0, 0x3d206873}, + {0x7b, 10, 1, -40, 0x00000000}, + {0x18, 1, 0, 0, 0x68736168}, + {0x00, 0, 0, 0, 0x29642528}, + {0x7b, 10, 1, -48, 0x00000000}, + {0x07, 5, 0, 0, 0x0000000c}, + {0x05, 0, 0, 1296, 0x00000000}, + {0x0f, 9, 5, 0, 0x00000000}, + {0xb7, 7, 0, 0, 0x00000000}, + {0xbf, 2, 9, 0, 0x00000000}, + {0x07, 2, 0, 0, 0x00000028}, + {0x2d, 2, 8, 1297, 0x00000000}, + {0x57, 1, 0, 0, 0x00000004}, + {0xb7, 7, 0, 0, 0x00000003}, + {0x15, 1, 0, 1294, 0x00000000}, + {0x71, 1, 0, 0, 0x00000000}, + {0x67, 1, 0, 0, 0x00000018}, + {0x71, 6, 0, 1, 0x00000000}, + {0x67, 6, 0, 0, 0x00000010}, + {0x4f, 6, 1, 0, 0x00000000}, + {0x71, 1, 0, 2, 0x00000000}, + {0x67, 1, 0, 0, 0x00000008}, + {0x4f, 6, 1, 0, 0x00000000}, + {0x71, 1, 0, 3, 0x00000000}, + {0x4f, 6, 1, 0, 0x00000000}, + {0xbf, 8, 9, 0, 0x00000000}, + {0x71, 7, 8, 8, 0x00000000}, + {0x67, 7, 0, 0, 0x00000038}, + {0xc7, 7, 0, 0, 0x00000038}, + {0xb7, 2, 0, 0, 0x00000000}, + {0xb7, 3, 0, 0, 0xffffffff}, + {0xb7, 4, 0, 0, 0x00000000}, + {0x6d, 7, 3, 1, 0x00000000}, + {0xbf, 4, 6, 0, 0x00000000}, + {0x79, 1, 10, -56, 0x00000000}, + {0xaf, 4, 1, 0, 0x00000000}, + {0x67, 6, 0, 0, 0x00000001}, + {0x71, 9, 0, 4, 0x00000000}, + {0xbf, 1, 9, 0, 0x00000000}, + {0x77, 1, 0, 0, 0x00000007}, + {0x4f, 1, 6, 0, 0x00000000}, + {0xbf, 6, 7, 0, 0x00000000}, + {0x67, 6, 0, 0, 0x00000039}, + {0xc7, 6, 0, 0, 0x0000003f}, + {0x5f, 6, 1, 0, 0x00000000}, + {0xaf, 4, 6, 0, 0x00000000}, + {0x67, 1, 0, 0, 0x00000001}, + {0xbf, 6, 9, 0, 0x00000000}, + {0x77, 6, 0, 0, 0x00000006}, + {0x57, 6, 0, 0, 0x00000001}, + {0x4f, 1, 6, 0, 0x00000000}, + {0xbf, 6, 7, 0, 0x00000000}, + {0x67, 6, 0, 0, 0x0000003a}, + {0xc7, 6, 0, 0, 0x0000003f}, + {0x5f, 6, 1, 0, 0x00000000}, + {0xaf, 4, 6, 0, 0x00000000}, + {0xbf, 6, 9, 0, 0x00000000}, + {0x77, 6, 0, 0, 0x00000005}, + {0x57, 6, 0, 0, 0x00000001}, + {0x67, 1, 0, 0, 0x00000001}, + {0x4f, 1, 6, 0, 0x00000000}, + {0xbf, 6, 7, 0, 0x00000000}, + {0x67, 6, 0, 0, 0x0000003b}, + {0xc7, 6, 0, 0, 0x0000003f}, + {0x5f, 6, 1, 0, 0x00000000}, + {0xaf, 4, 6, 0, 0x00000000}, + {0xbf, 6, 9, 0, 0x00000000}, + {0x77, 6, 0, 0, 0x00000004}, + {0x57, 6, 0, 0, 0x00000001}, + {0x67, 1, 0, 0, 0x00000001}, + {0x4f, 1, 6, 0, 0x00000000}, + {0xbf, 6, 7, 0, 0x00000000}, + {0x67, 6, 0, 0, 0x0000003c}, + {0xc7, 6, 0, 0, 0x0000003f}, + {0x5f, 6, 1, 0, 0x00000000}, + {0xaf, 4, 6, 0, 0x00000000}, + {0xbf, 6, 9, 0, 0x00000000}, + {0x77, 6, 0, 0, 0x00000003}, + {0x57, 6, 0, 0, 0x00000001}, + {0x67, 1, 0, 0, 0x00000001}, + {0x4f, 1, 6, 0, 0x00000000}, + {0xbf, 6, 7, 0, 0x00000000}, + {0x67, 6, 0, 0, 0x0000003d}, + {0xc7, 6, 0, 0, 0x0000003f}, + {0x5f, 6, 1, 0, 0x00000000}, + {0xaf, 4, 6, 0, 0x00000000}, + {0xbf, 6, 9, 0, 0x00000000}, + {0x77, 6, 0, 0, 0x00000002}, + {0x57, 6, 0, 0, 0x00000001}, + {0x67, 1, 0, 0, 0x00000001}, + {0x4f, 1, 6, 0, 0x00000000}, + {0xbf, 6, 7, 0, 0x00000000}, + {0x67, 6, 0, 0, 0x0000003e}, + {0xc7, 6, 0, 0, 0x0000003f}, + {0x5f, 6, 1, 0, 0x00000000}, + {0xaf, 4, 6, 0, 0x00000000}, + {0xbf, 6, 9, 0, 0x00000000}, + {0x77, 6, 0, 0, 0x00000001}, + {0x57, 6, 0, 0, 0x00000001}, + {0x67, 1, 0, 0, 0x00000001}, + {0x4f, 1, 6, 0, 0x00000000}, + {0x67, 7, 0, 0, 0x0000003f}, + {0xc7, 7, 0, 0, 0x0000003f}, + {0x5f, 7, 1, 0, 0x00000000}, + {0xaf, 4, 7, 0, 0x00000000}, + {0x57, 9, 0, 0, 0x00000001}, + {0x67, 1, 0, 0, 0x00000001}, + {0x4f, 1, 9, 0, 0x00000000}, + {0x71, 7, 8, 9, 0x00000000}, + {0x67, 7, 0, 0, 0x00000038}, + {0xc7, 7, 0, 0, 0x00000038}, + {0xb7, 6, 0, 0, 0x00000000}, + {0x6d, 7, 3, 1, 0x00000000}, + {0xbf, 6, 1, 0, 0x00000000}, + {0xaf, 4, 6, 0, 0x00000000}, + {0x67, 1, 0, 0, 0x00000001}, + {0x71, 9, 0, 5, 0x00000000}, + {0xbf, 6, 9, 0, 0x00000000}, + {0x77, 6, 0, 0, 0x00000007}, + {0x4f, 1, 6, 0, 0x00000000}, + {0xbf, 6, 7, 0, 0x00000000}, + {0x67, 6, 0, 0, 0x00000039}, + {0xc7, 6, 0, 0, 0x0000003f}, + {0x5f, 6, 1, 0, 0x00000000}, + {0xaf, 4, 6, 0, 0x00000000}, + {0xbf, 6, 9, 0, 0x00000000}, + {0x77, 6, 0, 0, 0x00000006}, + {0x57, 6, 0, 0, 0x00000001}, + {0x67, 1, 0, 0, 0x00000001}, + {0x4f, 1, 6, 0, 0x00000000}, + {0xbf, 6, 7, 0, 0x00000000}, + {0x67, 6, 0, 0, 0x0000003a}, + {0xc7, 6, 0, 0, 0x0000003f}, + {0x5f, 6, 1, 0, 0x00000000}, + {0xaf, 4, 6, 0, 0x00000000}, + {0xbf, 6, 9, 0, 0x00000000}, + {0x77, 6, 0, 0, 0x00000005}, + {0x57, 6, 0, 0, 0x00000001}, + {0x67, 1, 0, 0, 0x00000001}, + {0x4f, 1, 6, 0, 0x00000000}, + {0xbf, 6, 7, 0, 0x00000000}, + {0x67, 6, 0, 0, 0x0000003b}, + {0xc7, 6, 0, 0, 0x0000003f}, + {0x5f, 6, 1, 0, 0x00000000}, + {0xaf, 4, 6, 0, 0x00000000}, + {0xbf, 6, 9, 0, 0x00000000}, + {0x77, 6, 0, 0, 0x00000004}, + {0x57, 6, 0, 0, 0x00000001}, + {0x67, 1, 0, 0, 0x00000001}, + {0x4f, 1, 6, 0, 0x00000000}, + {0xbf, 6, 7, 0, 0x00000000}, + {0x67, 6, 0, 0, 0x0000003c}, + {0xc7, 6, 0, 0, 0x0000003f}, + {0x5f, 6, 1, 0, 0x00000000}, + {0xaf, 4, 6, 0, 0x00000000}, + {0xbf, 6, 9, 0, 0x00000000}, + {0x77, 6, 0, 0, 0x00000003}, + {0x57, 6, 0, 0, 0x00000001}, + {0x67, 1, 0, 0, 0x00000001}, + {0x4f, 1, 6, 0, 0x00000000}, + {0xbf, 6, 7, 0, 0x00000000}, + {0x67, 6, 0, 0, 0x0000003d}, + {0xc7, 6, 0, 0, 0x0000003f}, + {0x5f, 6, 1, 0, 0x00000000}, + {0xaf, 4, 6, 0, 0x00000000}, + {0xbf, 6, 9, 0, 0x00000000}, + {0x77, 6, 0, 0, 0x00000002}, + {0x57, 6, 0, 0, 0x00000001}, + {0x67, 1, 0, 0, 0x00000001}, + {0x4f, 1, 6, 0, 0x00000000}, + {0xbf, 6, 7, 0, 0x00000000}, + {0x67, 6, 0, 0, 0x0000003e}, + {0xc7, 6, 0, 0, 0x0000003f}, + {0x5f, 6, 1, 0, 0x00000000}, + {0xaf, 4, 6, 0, 0x00000000}, + {0xbf, 6, 9, 0, 0x00000000}, + {0x77, 6, 0, 0, 0x00000001}, + {0x57, 6, 0, 0, 0x00000001}, + {0x67, 1, 0, 0, 0x00000001}, + {0x4f, 1, 6, 0, 0x00000000}, + {0x67, 7, 0, 0, 0x0000003f}, + {0xc7, 7, 0, 0, 0x0000003f}, + {0x5f, 7, 1, 0, 0x00000000}, + {0xaf, 4, 7, 0, 0x00000000}, + {0x57, 9, 0, 0, 0x00000001}, + {0x67, 1, 0, 0, 0x00000001}, + {0x4f, 1, 9, 0, 0x00000000}, + {0x71, 7, 8, 10, 0x00000000}, + {0x67, 7, 0, 0, 0x00000038}, + {0xc7, 7, 0, 0, 0x00000038}, + {0xb7, 6, 0, 0, 0x00000000}, + {0x6d, 7, 3, 1, 0x00000000}, + {0xbf, 6, 1, 0, 0x00000000}, + {0xaf, 4, 6, 0, 0x00000000}, + {0x67, 1, 0, 0, 0x00000001}, + {0x71, 9, 0, 6, 0x00000000}, + {0xbf, 6, 9, 0, 0x00000000}, + {0x77, 6, 0, 0, 0x00000007}, + {0x4f, 1, 6, 0, 0x00000000}, + {0xbf, 6, 7, 0, 0x00000000}, + {0x67, 6, 0, 0, 0x00000039}, + {0xc7, 6, 0, 0, 0x0000003f}, + {0x5f, 6, 1, 0, 0x00000000}, + {0xaf, 4, 6, 0, 0x00000000}, + {0xbf, 6, 9, 0, 0x00000000}, + {0x77, 6, 0, 0, 0x00000006}, + {0x57, 6, 0, 0, 0x00000001}, + {0x67, 1, 0, 0, 0x00000001}, + {0x4f, 1, 6, 0, 0x00000000}, + {0xbf, 6, 7, 0, 0x00000000}, + {0x67, 6, 0, 0, 0x0000003a}, + {0xc7, 6, 0, 0, 0x0000003f}, + {0x5f, 6, 1, 0, 0x00000000}, + {0xaf, 4, 6, 0, 0x00000000}, + {0xbf, 6, 9, 0, 0x00000000}, + {0x77, 6, 0, 0, 0x00000005}, + {0x57, 6, 0, 0, 0x00000001}, + {0x67, 1, 0, 0, 0x00000001}, + {0x4f, 1, 6, 0, 0x00000000}, + {0xbf, 6, 7, 0, 0x00000000}, + {0x67, 6, 0, 0, 0x0000003b}, + {0xc7, 6, 0, 0, 0x0000003f}, + {0x5f, 6, 1, 0, 0x00000000}, + {0xaf, 4, 6, 0, 0x00000000}, + {0xbf, 6, 9, 0, 0x00000000}, + {0x77, 6, 0, 0, 0x00000004}, + {0x57, 6, 0, 0, 0x00000001}, + {0x67, 1, 0, 0, 0x00000001}, + {0x4f, 1, 6, 0, 0x00000000}, + {0xbf, 6, 7, 0, 0x00000000}, + {0x67, 6, 0, 0, 0x0000003c}, + {0xc7, 6, 0, 0, 0x0000003f}, + {0x5f, 6, 1, 0, 0x00000000}, + {0xaf, 4, 6, 0, 0x00000000}, + {0xbf, 6, 9, 0, 0x00000000}, + {0x77, 6, 0, 0, 0x00000003}, + {0x57, 6, 0, 0, 0x00000001}, + {0x67, 1, 0, 0, 0x00000001}, + {0x4f, 1, 6, 0, 0x00000000}, + {0xbf, 6, 7, 0, 0x00000000}, + {0x67, 6, 0, 0, 0x0000003d}, + {0xc7, 6, 0, 0, 0x0000003f}, + {0x5f, 6, 1, 0, 0x00000000}, + {0xaf, 4, 6, 0, 0x00000000}, + {0xbf, 6, 9, 0, 0x00000000}, + {0x77, 6, 0, 0, 0x00000002}, + {0x57, 6, 0, 0, 0x00000001}, + {0x67, 1, 0, 0, 0x00000001}, + {0x4f, 1, 6, 0, 0x00000000}, + {0xbf, 6, 7, 0, 0x00000000}, + {0x67, 6, 0, 0, 0x0000003e}, + {0xc7, 6, 0, 0, 0x0000003f}, + {0x5f, 6, 1, 0, 0x00000000}, + {0xaf, 4, 6, 0, 0x00000000}, + {0xbf, 6, 9, 0, 0x00000000}, + {0x77, 6, 0, 0, 0x00000001}, + {0x57, 6, 0, 0, 0x00000001}, + {0x67, 1, 0, 0, 0x00000001}, + {0x4f, 1, 6, 0, 0x00000000}, + {0x67, 7, 0, 0, 0x0000003f}, + {0xc7, 7, 0, 0, 0x0000003f}, + {0x5f, 7, 1, 0, 0x00000000}, + {0xaf, 4, 7, 0, 0x00000000}, + {0x57, 9, 0, 0, 0x00000001}, + {0x67, 1, 0, 0, 0x00000001}, + {0x4f, 1, 9, 0, 0x00000000}, + {0x71, 7, 8, 11, 0x00000000}, + {0x67, 7, 0, 0, 0x00000038}, + {0xc7, 7, 0, 0, 0x00000038}, + {0xb7, 6, 0, 0, 0x00000000}, + {0x6d, 7, 3, 1, 0x00000000}, + {0xbf, 6, 1, 0, 0x00000000}, + {0xaf, 4, 6, 0, 0x00000000}, + {0x67, 1, 0, 0, 0x00000001}, + {0x71, 9, 0, 7, 0x00000000}, + {0xbf, 6, 9, 0, 0x00000000}, + {0x77, 6, 0, 0, 0x00000007}, + {0x4f, 1, 6, 0, 0x00000000}, + {0xbf, 6, 7, 0, 0x00000000}, + {0x67, 6, 0, 0, 0x00000039}, + {0xc7, 6, 0, 0, 0x0000003f}, + {0x5f, 6, 1, 0, 0x00000000}, + {0xaf, 4, 6, 0, 0x00000000}, + {0xbf, 6, 9, 0, 0x00000000}, + {0x77, 6, 0, 0, 0x00000006}, + {0x57, 6, 0, 0, 0x00000001}, + {0x67, 1, 0, 0, 0x00000001}, + {0x4f, 1, 6, 0, 0x00000000}, + {0xbf, 6, 7, 0, 0x00000000}, + {0x67, 6, 0, 0, 0x0000003a}, + {0xc7, 6, 0, 0, 0x0000003f}, + {0x5f, 6, 1, 0, 0x00000000}, + {0xaf, 4, 6, 0, 0x00000000}, + {0xbf, 6, 9, 0, 0x00000000}, + {0x77, 6, 0, 0, 0x00000005}, + {0x57, 6, 0, 0, 0x00000001}, + {0x67, 1, 0, 0, 0x00000001}, + {0x4f, 1, 6, 0, 0x00000000}, + {0xbf, 6, 7, 0, 0x00000000}, + {0x67, 6, 0, 0, 0x0000003b}, + {0xc7, 6, 0, 0, 0x0000003f}, + {0x5f, 6, 1, 0, 0x00000000}, + {0xaf, 4, 6, 0, 0x00000000}, + {0xbf, 6, 9, 0, 0x00000000}, + {0x77, 6, 0, 0, 0x00000004}, + {0x57, 6, 0, 0, 0x00000001}, + {0x67, 1, 0, 0, 0x00000001}, + {0x4f, 1, 6, 0, 0x00000000}, + {0xbf, 6, 7, 0, 0x00000000}, + {0x67, 6, 0, 0, 0x0000003c}, + {0xc7, 6, 0, 0, 0x0000003f}, + {0x5f, 6, 1, 0, 0x00000000}, + {0xaf, 4, 6, 0, 0x00000000}, + {0xbf, 6, 9, 0, 0x00000000}, + {0x77, 6, 0, 0, 0x00000003}, + {0x57, 6, 0, 0, 0x00000001}, + {0x67, 1, 0, 0, 0x00000001}, + {0x4f, 1, 6, 0, 0x00000000}, + {0xbf, 6, 7, 0, 0x00000000}, + {0x67, 6, 0, 0, 0x0000003d}, + {0xc7, 6, 0, 0, 0x0000003f}, + {0x5f, 6, 1, 0, 0x00000000}, + {0xaf, 4, 6, 0, 0x00000000}, + {0xbf, 6, 9, 0, 0x00000000}, + {0x77, 6, 0, 0, 0x00000002}, + {0x57, 6, 0, 0, 0x00000001}, + {0x67, 1, 0, 0, 0x00000001}, + {0x4f, 1, 6, 0, 0x00000000}, + {0xbf, 6, 7, 0, 0x00000000}, + {0x67, 6, 0, 0, 0x0000003e}, + {0xc7, 6, 0, 0, 0x0000003f}, + {0x5f, 6, 1, 0, 0x00000000}, + {0xaf, 4, 6, 0, 0x00000000}, + {0xbf, 6, 9, 0, 0x00000000}, + {0x77, 6, 0, 0, 0x00000001}, + {0x57, 6, 0, 0, 0x00000001}, + {0x67, 1, 0, 0, 0x00000001}, + {0x4f, 1, 6, 0, 0x00000000}, + {0x67, 7, 0, 0, 0x0000003f}, + {0xc7, 7, 0, 0, 0x0000003f}, + {0x5f, 7, 1, 0, 0x00000000}, + {0xaf, 4, 7, 0, 0x00000000}, + {0x57, 9, 0, 0, 0x00000001}, + {0x67, 1, 0, 0, 0x00000001}, + {0x4f, 1, 9, 0, 0x00000000}, + {0x71, 7, 8, 12, 0x00000000}, + {0x67, 7, 0, 0, 0x00000038}, + {0xc7, 7, 0, 0, 0x00000038}, + {0xb7, 6, 0, 0, 0x00000000}, + {0x6d, 7, 3, 1, 0x00000000}, + {0xbf, 6, 1, 0, 0x00000000}, + {0xaf, 4, 6, 0, 0x00000000}, + {0x67, 1, 0, 0, 0x00000001}, + {0x71, 9, 0, 8, 0x00000000}, + {0xbf, 6, 9, 0, 0x00000000}, + {0x77, 6, 0, 0, 0x00000007}, + {0x4f, 1, 6, 0, 0x00000000}, + {0xbf, 6, 7, 0, 0x00000000}, + {0x67, 6, 0, 0, 0x00000039}, + {0xc7, 6, 0, 0, 0x0000003f}, + {0x5f, 6, 1, 0, 0x00000000}, + {0xaf, 4, 6, 0, 0x00000000}, + {0xbf, 6, 9, 0, 0x00000000}, + {0x77, 6, 0, 0, 0x00000006}, + {0x57, 6, 0, 0, 0x00000001}, + {0x67, 1, 0, 0, 0x00000001}, + {0x4f, 1, 6, 0, 0x00000000}, + {0xbf, 6, 7, 0, 0x00000000}, + {0x67, 6, 0, 0, 0x0000003a}, + {0xc7, 6, 0, 0, 0x0000003f}, + {0x5f, 6, 1, 0, 0x00000000}, + {0xaf, 4, 6, 0, 0x00000000}, + {0xbf, 6, 9, 0, 0x00000000}, + {0x77, 6, 0, 0, 0x00000005}, + {0x57, 6, 0, 0, 0x00000001}, + {0x67, 1, 0, 0, 0x00000001}, + {0x4f, 1, 6, 0, 0x00000000}, + {0xbf, 6, 7, 0, 0x00000000}, + {0x67, 6, 0, 0, 0x0000003b}, + {0xc7, 6, 0, 0, 0x0000003f}, + {0x5f, 6, 1, 0, 0x00000000}, + {0xaf, 4, 6, 0, 0x00000000}, + {0xbf, 6, 9, 0, 0x00000000}, + {0x77, 6, 0, 0, 0x00000004}, + {0x57, 6, 0, 0, 0x00000001}, + {0x67, 1, 0, 0, 0x00000001}, + {0x4f, 1, 6, 0, 0x00000000}, + {0xbf, 6, 7, 0, 0x00000000}, + {0x67, 6, 0, 0, 0x0000003c}, + {0xc7, 6, 0, 0, 0x0000003f}, + {0x5f, 6, 1, 0, 0x00000000}, + {0xaf, 4, 6, 0, 0x00000000}, + {0xbf, 6, 9, 0, 0x00000000}, + {0x77, 6, 0, 0, 0x00000003}, + {0x57, 6, 0, 0, 0x00000001}, + {0x67, 1, 0, 0, 0x00000001}, + {0x4f, 1, 6, 0, 0x00000000}, + {0xbf, 6, 7, 0, 0x00000000}, + {0x67, 6, 0, 0, 0x0000003d}, + {0xc7, 6, 0, 0, 0x0000003f}, + {0x5f, 6, 1, 0, 0x00000000}, + {0xaf, 4, 6, 0, 0x00000000}, + {0xbf, 6, 9, 0, 0x00000000}, + {0x77, 6, 0, 0, 0x00000002}, + {0x57, 6, 0, 0, 0x00000001}, + {0x67, 1, 0, 0, 0x00000001}, + {0x4f, 1, 6, 0, 0x00000000}, + {0xbf, 6, 7, 0, 0x00000000}, + {0x67, 6, 0, 0, 0x0000003e}, + {0xc7, 6, 0, 0, 0x0000003f}, + {0x5f, 6, 1, 0, 0x00000000}, + {0xaf, 4, 6, 0, 0x00000000}, + {0xbf, 6, 9, 0, 0x00000000}, + {0x77, 6, 0, 0, 0x00000001}, + {0x57, 6, 0, 0, 0x00000001}, + {0x67, 1, 0, 0, 0x00000001}, + {0x4f, 1, 6, 0, 0x00000000}, + {0x67, 7, 0, 0, 0x0000003f}, + {0xc7, 7, 0, 0, 0x0000003f}, + {0x5f, 7, 1, 0, 0x00000000}, + {0xaf, 4, 7, 0, 0x00000000}, + {0x57, 9, 0, 0, 0x00000001}, + {0x67, 1, 0, 0, 0x00000001}, + {0x4f, 1, 9, 0, 0x00000000}, + {0x71, 7, 8, 13, 0x00000000}, + {0x67, 7, 0, 0, 0x00000038}, + {0xc7, 7, 0, 0, 0x00000038}, + {0xb7, 6, 0, 0, 0x00000000}, + {0x6d, 7, 3, 1, 0x00000000}, + {0xbf, 6, 1, 0, 0x00000000}, + {0xaf, 4, 6, 0, 0x00000000}, + {0x67, 1, 0, 0, 0x00000001}, + {0x71, 9, 0, 9, 0x00000000}, + {0xbf, 6, 9, 0, 0x00000000}, + {0x77, 6, 0, 0, 0x00000007}, + {0x4f, 1, 6, 0, 0x00000000}, + {0xbf, 6, 7, 0, 0x00000000}, + {0x67, 6, 0, 0, 0x00000039}, + {0xc7, 6, 0, 0, 0x0000003f}, + {0x5f, 6, 1, 0, 0x00000000}, + {0xaf, 4, 6, 0, 0x00000000}, + {0xbf, 6, 9, 0, 0x00000000}, + {0x77, 6, 0, 0, 0x00000006}, + {0x57, 6, 0, 0, 0x00000001}, + {0x67, 1, 0, 0, 0x00000001}, + {0x4f, 1, 6, 0, 0x00000000}, + {0xbf, 6, 7, 0, 0x00000000}, + {0x67, 6, 0, 0, 0x0000003a}, + {0xc7, 6, 0, 0, 0x0000003f}, + {0x5f, 6, 1, 0, 0x00000000}, + {0xaf, 4, 6, 0, 0x00000000}, + {0xbf, 6, 9, 0, 0x00000000}, + {0x77, 6, 0, 0, 0x00000005}, + {0x57, 6, 0, 0, 0x00000001}, + {0x67, 1, 0, 0, 0x00000001}, + {0x4f, 1, 6, 0, 0x00000000}, + {0xbf, 6, 7, 0, 0x00000000}, + {0x67, 6, 0, 0, 0x0000003b}, + {0xc7, 6, 0, 0, 0x0000003f}, + {0x5f, 6, 1, 0, 0x00000000}, + {0xaf, 4, 6, 0, 0x00000000}, + {0xbf, 6, 9, 0, 0x00000000}, + {0x77, 6, 0, 0, 0x00000004}, + {0x57, 6, 0, 0, 0x00000001}, + {0x67, 1, 0, 0, 0x00000001}, + {0x4f, 1, 6, 0, 0x00000000}, + {0xbf, 6, 7, 0, 0x00000000}, + {0x67, 6, 0, 0, 0x0000003c}, + {0xc7, 6, 0, 0, 0x0000003f}, + {0x5f, 6, 1, 0, 0x00000000}, + {0xaf, 4, 6, 0, 0x00000000}, + {0xbf, 6, 9, 0, 0x00000000}, + {0x77, 6, 0, 0, 0x00000003}, + {0x57, 6, 0, 0, 0x00000001}, + {0x67, 1, 0, 0, 0x00000001}, + {0x4f, 1, 6, 0, 0x00000000}, + {0xbf, 6, 7, 0, 0x00000000}, + {0x67, 6, 0, 0, 0x0000003d}, + {0xc7, 6, 0, 0, 0x0000003f}, + {0x5f, 6, 1, 0, 0x00000000}, + {0xaf, 4, 6, 0, 0x00000000}, + {0xbf, 6, 9, 0, 0x00000000}, + {0x77, 6, 0, 0, 0x00000002}, + {0x57, 6, 0, 0, 0x00000001}, + {0x67, 1, 0, 0, 0x00000001}, + {0x4f, 1, 6, 0, 0x00000000}, + {0xbf, 6, 7, 0, 0x00000000}, + {0x67, 6, 0, 0, 0x0000003e}, + {0xc7, 6, 0, 0, 0x0000003f}, + {0x5f, 6, 1, 0, 0x00000000}, + {0xaf, 4, 6, 0, 0x00000000}, + {0xbf, 6, 9, 0, 0x00000000}, + {0x77, 6, 0, 0, 0x00000001}, + {0x57, 6, 0, 0, 0x00000001}, + {0x67, 1, 0, 0, 0x00000001}, + {0x4f, 1, 6, 0, 0x00000000}, + {0x67, 7, 0, 0, 0x0000003f}, + {0xc7, 7, 0, 0, 0x0000003f}, + {0x5f, 7, 1, 0, 0x00000000}, + {0xaf, 4, 7, 0, 0x00000000}, + {0x57, 9, 0, 0, 0x00000001}, + {0x67, 1, 0, 0, 0x00000001}, + {0x4f, 1, 9, 0, 0x00000000}, + {0x71, 7, 8, 14, 0x00000000}, + {0x67, 7, 0, 0, 0x00000038}, + {0xc7, 7, 0, 0, 0x00000038}, + {0xb7, 6, 0, 0, 0x00000000}, + {0x6d, 7, 3, 1, 0x00000000}, + {0xbf, 6, 1, 0, 0x00000000}, + {0xaf, 4, 6, 0, 0x00000000}, + {0x67, 1, 0, 0, 0x00000001}, + {0x71, 9, 0, 10, 0x00000000}, + {0xbf, 6, 9, 0, 0x00000000}, + {0x77, 6, 0, 0, 0x00000007}, + {0x4f, 1, 6, 0, 0x00000000}, + {0xbf, 6, 7, 0, 0x00000000}, + {0x67, 6, 0, 0, 0x00000039}, + {0xc7, 6, 0, 0, 0x0000003f}, + {0x5f, 6, 1, 0, 0x00000000}, + {0xaf, 4, 6, 0, 0x00000000}, + {0xbf, 6, 9, 0, 0x00000000}, + {0x77, 6, 0, 0, 0x00000006}, + {0x57, 6, 0, 0, 0x00000001}, + {0x67, 1, 0, 0, 0x00000001}, + {0x4f, 1, 6, 0, 0x00000000}, + {0xbf, 6, 7, 0, 0x00000000}, + {0x67, 6, 0, 0, 0x0000003a}, + {0xc7, 6, 0, 0, 0x0000003f}, + {0x5f, 6, 1, 0, 0x00000000}, + {0xaf, 4, 6, 0, 0x00000000}, + {0xbf, 6, 9, 0, 0x00000000}, + {0x77, 6, 0, 0, 0x00000005}, + {0x57, 6, 0, 0, 0x00000001}, + {0x67, 1, 0, 0, 0x00000001}, + {0x4f, 1, 6, 0, 0x00000000}, + {0xbf, 6, 7, 0, 0x00000000}, + {0x67, 6, 0, 0, 0x0000003b}, + {0xc7, 6, 0, 0, 0x0000003f}, + {0x5f, 6, 1, 0, 0x00000000}, + {0xaf, 4, 6, 0, 0x00000000}, + {0xbf, 6, 9, 0, 0x00000000}, + {0x77, 6, 0, 0, 0x00000004}, + {0x57, 6, 0, 0, 0x00000001}, + {0x67, 1, 0, 0, 0x00000001}, + {0x4f, 1, 6, 0, 0x00000000}, + {0xbf, 6, 7, 0, 0x00000000}, + {0x67, 6, 0, 0, 0x0000003c}, + {0xc7, 6, 0, 0, 0x0000003f}, + {0x5f, 6, 1, 0, 0x00000000}, + {0xaf, 4, 6, 0, 0x00000000}, + {0xbf, 6, 9, 0, 0x00000000}, + {0x77, 6, 0, 0, 0x00000003}, + {0x57, 6, 0, 0, 0x00000001}, + {0x67, 1, 0, 0, 0x00000001}, + {0x4f, 1, 6, 0, 0x00000000}, + {0xbf, 6, 7, 0, 0x00000000}, + {0x67, 6, 0, 0, 0x0000003d}, + {0xc7, 6, 0, 0, 0x0000003f}, + {0x5f, 6, 1, 0, 0x00000000}, + {0xaf, 4, 6, 0, 0x00000000}, + {0xbf, 6, 9, 0, 0x00000000}, + {0x77, 6, 0, 0, 0x00000002}, + {0x57, 6, 0, 0, 0x00000001}, + {0x67, 1, 0, 0, 0x00000001}, + {0x4f, 1, 6, 0, 0x00000000}, + {0xbf, 6, 7, 0, 0x00000000}, + {0x67, 6, 0, 0, 0x0000003e}, + {0xc7, 6, 0, 0, 0x0000003f}, + {0x5f, 6, 1, 0, 0x00000000}, + {0xaf, 4, 6, 0, 0x00000000}, + {0xbf, 6, 9, 0, 0x00000000}, + {0x77, 6, 0, 0, 0x00000001}, + {0x57, 6, 0, 0, 0x00000001}, + {0x67, 1, 0, 0, 0x00000001}, + {0x4f, 1, 6, 0, 0x00000000}, + {0x67, 7, 0, 0, 0x0000003f}, + {0xc7, 7, 0, 0, 0x0000003f}, + {0x5f, 7, 1, 0, 0x00000000}, + {0xaf, 4, 7, 0, 0x00000000}, + {0x57, 9, 0, 0, 0x00000001}, + {0x67, 1, 0, 0, 0x00000001}, + {0x4f, 1, 9, 0, 0x00000000}, + {0x71, 7, 8, 15, 0x00000000}, + {0x67, 7, 0, 0, 0x00000038}, + {0xc7, 7, 0, 0, 0x00000038}, + {0xb7, 6, 0, 0, 0x00000000}, + {0x6d, 7, 3, 1, 0x00000000}, + {0xbf, 6, 1, 0, 0x00000000}, + {0xaf, 4, 6, 0, 0x00000000}, + {0x67, 1, 0, 0, 0x00000001}, + {0x71, 9, 0, 11, 0x00000000}, + {0xbf, 6, 9, 0, 0x00000000}, + {0x77, 6, 0, 0, 0x00000007}, + {0x4f, 1, 6, 0, 0x00000000}, + {0xbf, 6, 7, 0, 0x00000000}, + {0x67, 6, 0, 0, 0x00000039}, + {0xc7, 6, 0, 0, 0x0000003f}, + {0x5f, 6, 1, 0, 0x00000000}, + {0xaf, 4, 6, 0, 0x00000000}, + {0xbf, 6, 9, 0, 0x00000000}, + {0x77, 6, 0, 0, 0x00000006}, + {0x57, 6, 0, 0, 0x00000001}, + {0x67, 1, 0, 0, 0x00000001}, + {0x4f, 1, 6, 0, 0x00000000}, + {0xbf, 6, 7, 0, 0x00000000}, + {0x67, 6, 0, 0, 0x0000003a}, + {0xc7, 6, 0, 0, 0x0000003f}, + {0x5f, 6, 1, 0, 0x00000000}, + {0xaf, 4, 6, 0, 0x00000000}, + {0xbf, 6, 9, 0, 0x00000000}, + {0x77, 6, 0, 0, 0x00000005}, + {0x57, 6, 0, 0, 0x00000001}, + {0x67, 1, 0, 0, 0x00000001}, + {0x4f, 1, 6, 0, 0x00000000}, + {0xbf, 6, 7, 0, 0x00000000}, + {0x67, 6, 0, 0, 0x0000003b}, + {0xc7, 6, 0, 0, 0x0000003f}, + {0x5f, 6, 1, 0, 0x00000000}, + {0xaf, 4, 6, 0, 0x00000000}, + {0xbf, 6, 9, 0, 0x00000000}, + {0x77, 6, 0, 0, 0x00000004}, + {0x57, 6, 0, 0, 0x00000001}, + {0x67, 1, 0, 0, 0x00000001}, + {0x4f, 1, 6, 0, 0x00000000}, + {0xbf, 6, 7, 0, 0x00000000}, + {0x67, 6, 0, 0, 0x0000003c}, + {0xc7, 6, 0, 0, 0x0000003f}, + {0x5f, 6, 1, 0, 0x00000000}, + {0xaf, 4, 6, 0, 0x00000000}, + {0xbf, 6, 9, 0, 0x00000000}, + {0x77, 6, 0, 0, 0x00000003}, + {0x57, 6, 0, 0, 0x00000001}, + {0x67, 1, 0, 0, 0x00000001}, + {0x4f, 1, 6, 0, 0x00000000}, + {0xbf, 6, 7, 0, 0x00000000}, + {0x67, 6, 0, 0, 0x0000003d}, + {0xc7, 6, 0, 0, 0x0000003f}, + {0x5f, 6, 1, 0, 0x00000000}, + {0xaf, 4, 6, 0, 0x00000000}, + {0xbf, 6, 9, 0, 0x00000000}, + {0x77, 6, 0, 0, 0x00000002}, + {0x57, 6, 0, 0, 0x00000001}, + {0x67, 1, 0, 0, 0x00000001}, + {0x4f, 1, 6, 0, 0x00000000}, + {0xbf, 6, 7, 0, 0x00000000}, + {0x67, 6, 0, 0, 0x0000003e}, + {0xc7, 6, 0, 0, 0x0000003f}, + {0x5f, 6, 1, 0, 0x00000000}, + {0xaf, 4, 6, 0, 0x00000000}, + {0xbf, 6, 9, 0, 0x00000000}, + {0x77, 6, 0, 0, 0x00000001}, + {0x57, 6, 0, 0, 0x00000001}, + {0x67, 1, 0, 0, 0x00000001}, + {0x4f, 1, 6, 0, 0x00000000}, + {0x67, 7, 0, 0, 0x0000003f}, + {0xc7, 7, 0, 0, 0x0000003f}, + {0x5f, 7, 1, 0, 0x00000000}, + {0xaf, 4, 7, 0, 0x00000000}, + {0x57, 9, 0, 0, 0x00000001}, + {0x67, 1, 0, 0, 0x00000001}, + {0x4f, 1, 9, 0, 0x00000000}, + {0x71, 7, 8, 16, 0x00000000}, + {0x67, 7, 0, 0, 0x00000038}, + {0xc7, 7, 0, 0, 0x00000038}, + {0xb7, 6, 0, 0, 0x00000000}, + {0x6d, 7, 3, 1, 0x00000000}, + {0xbf, 6, 1, 0, 0x00000000}, + {0xaf, 4, 6, 0, 0x00000000}, + {0x67, 1, 0, 0, 0x00000001}, + {0x71, 9, 0, 12, 0x00000000}, + {0xbf, 6, 9, 0, 0x00000000}, + {0x77, 6, 0, 0, 0x00000007}, + {0x4f, 1, 6, 0, 0x00000000}, + {0xbf, 6, 7, 0, 0x00000000}, + {0x67, 6, 0, 0, 0x00000039}, + {0xc7, 6, 0, 0, 0x0000003f}, + {0x5f, 6, 1, 0, 0x00000000}, + {0xaf, 4, 6, 0, 0x00000000}, + {0xbf, 6, 9, 0, 0x00000000}, + {0x77, 6, 0, 0, 0x00000006}, + {0x57, 6, 0, 0, 0x00000001}, + {0x67, 1, 0, 0, 0x00000001}, + {0x4f, 1, 6, 0, 0x00000000}, + {0xbf, 6, 7, 0, 0x00000000}, + {0x67, 6, 0, 0, 0x0000003a}, + {0xc7, 6, 0, 0, 0x0000003f}, + {0x5f, 6, 1, 0, 0x00000000}, + {0xaf, 4, 6, 0, 0x00000000}, + {0xbf, 6, 9, 0, 0x00000000}, + {0x77, 6, 0, 0, 0x00000005}, + {0x57, 6, 0, 0, 0x00000001}, + {0x67, 1, 0, 0, 0x00000001}, + {0x4f, 1, 6, 0, 0x00000000}, + {0xbf, 6, 7, 0, 0x00000000}, + {0x67, 6, 0, 0, 0x0000003b}, + {0xc7, 6, 0, 0, 0x0000003f}, + {0x5f, 6, 1, 0, 0x00000000}, + {0xaf, 4, 6, 0, 0x00000000}, + {0xbf, 6, 9, 0, 0x00000000}, + {0x77, 6, 0, 0, 0x00000004}, + {0x57, 6, 0, 0, 0x00000001}, + {0x67, 1, 0, 0, 0x00000001}, + {0x4f, 1, 6, 0, 0x00000000}, + {0xbf, 6, 7, 0, 0x00000000}, + {0x67, 6, 0, 0, 0x0000003c}, + {0xc7, 6, 0, 0, 0x0000003f}, + {0x5f, 6, 1, 0, 0x00000000}, + {0xaf, 4, 6, 0, 0x00000000}, + {0xbf, 6, 9, 0, 0x00000000}, + {0x77, 6, 0, 0, 0x00000003}, + {0x57, 6, 0, 0, 0x00000001}, + {0x67, 1, 0, 0, 0x00000001}, + {0x4f, 1, 6, 0, 0x00000000}, + {0xbf, 6, 7, 0, 0x00000000}, + {0x67, 6, 0, 0, 0x0000003d}, + {0xc7, 6, 0, 0, 0x0000003f}, + {0x5f, 6, 1, 0, 0x00000000}, + {0xaf, 4, 6, 0, 0x00000000}, + {0xbf, 6, 9, 0, 0x00000000}, + {0x77, 6, 0, 0, 0x00000002}, + {0x57, 6, 0, 0, 0x00000001}, + {0x67, 1, 0, 0, 0x00000001}, + {0x4f, 1, 6, 0, 0x00000000}, + {0xbf, 6, 7, 0, 0x00000000}, + {0x67, 6, 0, 0, 0x0000003e}, + {0xc7, 6, 0, 0, 0x0000003f}, + {0x5f, 6, 1, 0, 0x00000000}, + {0xaf, 4, 6, 0, 0x00000000}, + {0xbf, 6, 9, 0, 0x00000000}, + {0x77, 6, 0, 0, 0x00000001}, + {0x57, 6, 0, 0, 0x00000001}, + {0x67, 1, 0, 0, 0x00000001}, + {0x4f, 1, 6, 0, 0x00000000}, + {0x67, 7, 0, 0, 0x0000003f}, + {0xc7, 7, 0, 0, 0x0000003f}, + {0x5f, 7, 1, 0, 0x00000000}, + {0xaf, 4, 7, 0, 0x00000000}, + {0x57, 9, 0, 0, 0x00000001}, + {0x67, 1, 0, 0, 0x00000001}, + {0x4f, 1, 9, 0, 0x00000000}, + {0x71, 7, 8, 17, 0x00000000}, + {0x67, 7, 0, 0, 0x00000038}, + {0xc7, 7, 0, 0, 0x00000038}, + {0xb7, 6, 0, 0, 0x00000000}, + {0x6d, 7, 3, 1, 0x00000000}, + {0xbf, 6, 1, 0, 0x00000000}, + {0xaf, 4, 6, 0, 0x00000000}, + {0x67, 1, 0, 0, 0x00000001}, + {0x71, 9, 0, 13, 0x00000000}, + {0xbf, 6, 9, 0, 0x00000000}, + {0x77, 6, 0, 0, 0x00000007}, + {0x4f, 1, 6, 0, 0x00000000}, + {0xbf, 6, 7, 0, 0x00000000}, + {0x67, 6, 0, 0, 0x00000039}, + {0xc7, 6, 0, 0, 0x0000003f}, + {0x5f, 6, 1, 0, 0x00000000}, + {0xaf, 4, 6, 0, 0x00000000}, + {0xbf, 6, 9, 0, 0x00000000}, + {0x77, 6, 0, 0, 0x00000006}, + {0x57, 6, 0, 0, 0x00000001}, + {0x67, 1, 0, 0, 0x00000001}, + {0x4f, 1, 6, 0, 0x00000000}, + {0xbf, 6, 7, 0, 0x00000000}, + {0x67, 6, 0, 0, 0x0000003a}, + {0xc7, 6, 0, 0, 0x0000003f}, + {0x5f, 6, 1, 0, 0x00000000}, + {0xaf, 4, 6, 0, 0x00000000}, + {0xbf, 6, 9, 0, 0x00000000}, + {0x77, 6, 0, 0, 0x00000005}, + {0x57, 6, 0, 0, 0x00000001}, + {0x67, 1, 0, 0, 0x00000001}, + {0x4f, 1, 6, 0, 0x00000000}, + {0xbf, 6, 7, 0, 0x00000000}, + {0x67, 6, 0, 0, 0x0000003b}, + {0xc7, 6, 0, 0, 0x0000003f}, + {0x5f, 6, 1, 0, 0x00000000}, + {0xaf, 4, 6, 0, 0x00000000}, + {0xbf, 6, 9, 0, 0x00000000}, + {0x77, 6, 0, 0, 0x00000004}, + {0x57, 6, 0, 0, 0x00000001}, + {0x67, 1, 0, 0, 0x00000001}, + {0x4f, 1, 6, 0, 0x00000000}, + {0xbf, 6, 7, 0, 0x00000000}, + {0x67, 6, 0, 0, 0x0000003c}, + {0xc7, 6, 0, 0, 0x0000003f}, + {0x5f, 6, 1, 0, 0x00000000}, + {0xaf, 4, 6, 0, 0x00000000}, + {0xbf, 6, 9, 0, 0x00000000}, + {0x77, 6, 0, 0, 0x00000003}, + {0x57, 6, 0, 0, 0x00000001}, + {0x67, 1, 0, 0, 0x00000001}, + {0x4f, 1, 6, 0, 0x00000000}, + {0xbf, 6, 7, 0, 0x00000000}, + {0x67, 6, 0, 0, 0x0000003d}, + {0xc7, 6, 0, 0, 0x0000003f}, + {0x5f, 6, 1, 0, 0x00000000}, + {0xaf, 4, 6, 0, 0x00000000}, + {0xbf, 6, 9, 0, 0x00000000}, + {0x77, 6, 0, 0, 0x00000002}, + {0x57, 6, 0, 0, 0x00000001}, + {0x67, 1, 0, 0, 0x00000001}, + {0x4f, 1, 6, 0, 0x00000000}, + {0xbf, 6, 7, 0, 0x00000000}, + {0x67, 6, 0, 0, 0x0000003e}, + {0xc7, 6, 0, 0, 0x0000003f}, + {0x5f, 6, 1, 0, 0x00000000}, + {0xaf, 4, 6, 0, 0x00000000}, + {0xbf, 6, 9, 0, 0x00000000}, + {0x77, 6, 0, 0, 0x00000001}, + {0x57, 6, 0, 0, 0x00000001}, + {0x67, 1, 0, 0, 0x00000001}, + {0x4f, 1, 6, 0, 0x00000000}, + {0x67, 7, 0, 0, 0x0000003f}, + {0xc7, 7, 0, 0, 0x0000003f}, + {0x5f, 7, 1, 0, 0x00000000}, + {0xaf, 4, 7, 0, 0x00000000}, + {0x57, 9, 0, 0, 0x00000001}, + {0x67, 1, 0, 0, 0x00000001}, + {0x4f, 1, 9, 0, 0x00000000}, + {0x71, 7, 8, 18, 0x00000000}, + {0x67, 7, 0, 0, 0x00000038}, + {0xc7, 7, 0, 0, 0x00000038}, + {0xb7, 6, 0, 0, 0x00000000}, + {0x6d, 7, 3, 1, 0x00000000}, + {0xbf, 6, 1, 0, 0x00000000}, + {0xaf, 4, 6, 0, 0x00000000}, + {0x67, 1, 0, 0, 0x00000001}, + {0x71, 9, 0, 14, 0x00000000}, + {0xbf, 6, 9, 0, 0x00000000}, + {0x77, 6, 0, 0, 0x00000007}, + {0x4f, 1, 6, 0, 0x00000000}, + {0xbf, 6, 7, 0, 0x00000000}, + {0x67, 6, 0, 0, 0x00000039}, + {0xc7, 6, 0, 0, 0x0000003f}, + {0x5f, 6, 1, 0, 0x00000000}, + {0xaf, 4, 6, 0, 0x00000000}, + {0xbf, 6, 9, 0, 0x00000000}, + {0x77, 6, 0, 0, 0x00000006}, + {0x57, 6, 0, 0, 0x00000001}, + {0x67, 1, 0, 0, 0x00000001}, + {0x4f, 1, 6, 0, 0x00000000}, + {0xbf, 6, 7, 0, 0x00000000}, + {0x67, 6, 0, 0, 0x0000003a}, + {0xc7, 6, 0, 0, 0x0000003f}, + {0x5f, 6, 1, 0, 0x00000000}, + {0xaf, 4, 6, 0, 0x00000000}, + {0xbf, 6, 9, 0, 0x00000000}, + {0x77, 6, 0, 0, 0x00000005}, + {0x57, 6, 0, 0, 0x00000001}, + {0x67, 1, 0, 0, 0x00000001}, + {0x4f, 1, 6, 0, 0x00000000}, + {0xbf, 6, 7, 0, 0x00000000}, + {0x67, 6, 0, 0, 0x0000003b}, + {0xc7, 6, 0, 0, 0x0000003f}, + {0x5f, 6, 1, 0, 0x00000000}, + {0xaf, 4, 6, 0, 0x00000000}, + {0xbf, 6, 9, 0, 0x00000000}, + {0x77, 6, 0, 0, 0x00000004}, + {0x57, 6, 0, 0, 0x00000001}, + {0x67, 1, 0, 0, 0x00000001}, + {0x4f, 1, 6, 0, 0x00000000}, + {0xbf, 6, 7, 0, 0x00000000}, + {0x67, 6, 0, 0, 0x0000003c}, + {0xc7, 6, 0, 0, 0x0000003f}, + {0x5f, 6, 1, 0, 0x00000000}, + {0xaf, 4, 6, 0, 0x00000000}, + {0xbf, 6, 9, 0, 0x00000000}, + {0x77, 6, 0, 0, 0x00000003}, + {0x57, 6, 0, 0, 0x00000001}, + {0x67, 1, 0, 0, 0x00000001}, + {0x4f, 1, 6, 0, 0x00000000}, + {0xbf, 6, 7, 0, 0x00000000}, + {0x67, 6, 0, 0, 0x0000003d}, + {0xc7, 6, 0, 0, 0x0000003f}, + {0x5f, 6, 1, 0, 0x00000000}, + {0xaf, 4, 6, 0, 0x00000000}, + {0xbf, 6, 9, 0, 0x00000000}, + {0x77, 6, 0, 0, 0x00000002}, + {0x57, 6, 0, 0, 0x00000001}, + {0x67, 1, 0, 0, 0x00000001}, + {0x4f, 1, 6, 0, 0x00000000}, + {0xbf, 6, 7, 0, 0x00000000}, + {0x67, 6, 0, 0, 0x0000003e}, + {0xc7, 6, 0, 0, 0x0000003f}, + {0x5f, 6, 1, 0, 0x00000000}, + {0xaf, 4, 6, 0, 0x00000000}, + {0xbf, 6, 9, 0, 0x00000000}, + {0x77, 6, 0, 0, 0x00000001}, + {0x57, 6, 0, 0, 0x00000001}, + {0x67, 1, 0, 0, 0x00000001}, + {0x4f, 1, 6, 0, 0x00000000}, + {0x67, 7, 0, 0, 0x0000003f}, + {0xc7, 7, 0, 0, 0x0000003f}, + {0x5f, 7, 1, 0, 0x00000000}, + {0xaf, 4, 7, 0, 0x00000000}, + {0x57, 9, 0, 0, 0x00000001}, + {0x67, 1, 0, 0, 0x00000001}, + {0x4f, 1, 9, 0, 0x00000000}, + {0x71, 7, 8, 19, 0x00000000}, + {0x67, 7, 0, 0, 0x00000038}, + {0xc7, 7, 0, 0, 0x00000038}, + {0xb7, 6, 0, 0, 0x00000000}, + {0x6d, 7, 3, 1, 0x00000000}, + {0xbf, 6, 1, 0, 0x00000000}, + {0xaf, 4, 6, 0, 0x00000000}, + {0x67, 1, 0, 0, 0x00000001}, + {0x71, 9, 0, 15, 0x00000000}, + {0xbf, 6, 9, 0, 0x00000000}, + {0x77, 6, 0, 0, 0x00000007}, + {0x4f, 1, 6, 0, 0x00000000}, + {0xbf, 6, 7, 0, 0x00000000}, + {0x67, 6, 0, 0, 0x00000039}, + {0xc7, 6, 0, 0, 0x0000003f}, + {0x5f, 6, 1, 0, 0x00000000}, + {0xaf, 4, 6, 0, 0x00000000}, + {0xbf, 6, 9, 0, 0x00000000}, + {0x77, 6, 0, 0, 0x00000006}, + {0x57, 6, 0, 0, 0x00000001}, + {0x67, 1, 0, 0, 0x00000001}, + {0x4f, 1, 6, 0, 0x00000000}, + {0xbf, 6, 7, 0, 0x00000000}, + {0x67, 6, 0, 0, 0x0000003a}, + {0xc7, 6, 0, 0, 0x0000003f}, + {0x5f, 6, 1, 0, 0x00000000}, + {0xaf, 4, 6, 0, 0x00000000}, + {0xbf, 6, 9, 0, 0x00000000}, + {0x77, 6, 0, 0, 0x00000005}, + {0x57, 6, 0, 0, 0x00000001}, + {0x67, 1, 0, 0, 0x00000001}, + {0x4f, 1, 6, 0, 0x00000000}, + {0xbf, 6, 7, 0, 0x00000000}, + {0x67, 6, 0, 0, 0x0000003b}, + {0xc7, 6, 0, 0, 0x0000003f}, + {0x5f, 6, 1, 0, 0x00000000}, + {0xaf, 4, 6, 0, 0x00000000}, + {0xbf, 6, 9, 0, 0x00000000}, + {0x77, 6, 0, 0, 0x00000004}, + {0x57, 6, 0, 0, 0x00000001}, + {0x67, 1, 0, 0, 0x00000001}, + {0x4f, 1, 6, 0, 0x00000000}, + {0xbf, 6, 7, 0, 0x00000000}, + {0x67, 6, 0, 0, 0x0000003c}, + {0xc7, 6, 0, 0, 0x0000003f}, + {0x5f, 6, 1, 0, 0x00000000}, + {0xaf, 4, 6, 0, 0x00000000}, + {0xbf, 6, 9, 0, 0x00000000}, + {0x77, 6, 0, 0, 0x00000003}, + {0x57, 6, 0, 0, 0x00000001}, + {0x67, 1, 0, 0, 0x00000001}, + {0x4f, 1, 6, 0, 0x00000000}, + {0xbf, 6, 7, 0, 0x00000000}, + {0x67, 6, 0, 0, 0x0000003d}, + {0xc7, 6, 0, 0, 0x0000003f}, + {0x5f, 6, 1, 0, 0x00000000}, + {0xaf, 4, 6, 0, 0x00000000}, + {0xbf, 6, 9, 0, 0x00000000}, + {0x77, 6, 0, 0, 0x00000002}, + {0x57, 6, 0, 0, 0x00000001}, + {0x67, 1, 0, 0, 0x00000001}, + {0x4f, 1, 6, 0, 0x00000000}, + {0xbf, 6, 7, 0, 0x00000000}, + {0x67, 6, 0, 0, 0x0000003e}, + {0xc7, 6, 0, 0, 0x0000003f}, + {0x5f, 6, 1, 0, 0x00000000}, + {0xaf, 4, 6, 0, 0x00000000}, + {0xbf, 6, 9, 0, 0x00000000}, + {0x77, 6, 0, 0, 0x00000001}, + {0x57, 6, 0, 0, 0x00000001}, + {0x67, 1, 0, 0, 0x00000001}, + {0x4f, 1, 6, 0, 0x00000000}, + {0x67, 7, 0, 0, 0x0000003f}, + {0xc7, 7, 0, 0, 0x0000003f}, + {0x5f, 7, 1, 0, 0x00000000}, + {0xaf, 4, 7, 0, 0x00000000}, + {0x57, 9, 0, 0, 0x00000001}, + {0x67, 1, 0, 0, 0x00000001}, + {0x4f, 1, 9, 0, 0x00000000}, + {0x71, 7, 8, 20, 0x00000000}, + {0x67, 7, 0, 0, 0x00000038}, + {0xc7, 7, 0, 0, 0x00000038}, + {0xb7, 6, 0, 0, 0x00000000}, + {0x6d, 7, 3, 1, 0x00000000}, + {0xbf, 6, 1, 0, 0x00000000}, + {0xaf, 4, 6, 0, 0x00000000}, + {0x67, 1, 0, 0, 0x00000001}, + {0x71, 9, 0, 16, 0x00000000}, + {0xbf, 6, 9, 0, 0x00000000}, + {0x77, 6, 0, 0, 0x00000007}, + {0x4f, 1, 6, 0, 0x00000000}, + {0xbf, 6, 7, 0, 0x00000000}, + {0x67, 6, 0, 0, 0x00000039}, + {0xc7, 6, 0, 0, 0x0000003f}, + {0x5f, 6, 1, 0, 0x00000000}, + {0xaf, 4, 6, 0, 0x00000000}, + {0xbf, 6, 9, 0, 0x00000000}, + {0x77, 6, 0, 0, 0x00000006}, + {0x57, 6, 0, 0, 0x00000001}, + {0x67, 1, 0, 0, 0x00000001}, + {0x4f, 1, 6, 0, 0x00000000}, + {0xbf, 6, 7, 0, 0x00000000}, + {0x67, 6, 0, 0, 0x0000003a}, + {0xc7, 6, 0, 0, 0x0000003f}, + {0x5f, 6, 1, 0, 0x00000000}, + {0xaf, 4, 6, 0, 0x00000000}, + {0xbf, 6, 9, 0, 0x00000000}, + {0x77, 6, 0, 0, 0x00000005}, + {0x57, 6, 0, 0, 0x00000001}, + {0x67, 1, 0, 0, 0x00000001}, + {0x4f, 1, 6, 0, 0x00000000}, + {0xbf, 6, 7, 0, 0x00000000}, + {0x67, 6, 0, 0, 0x0000003b}, + {0xc7, 6, 0, 0, 0x0000003f}, + {0x5f, 6, 1, 0, 0x00000000}, + {0xaf, 4, 6, 0, 0x00000000}, + {0xbf, 6, 9, 0, 0x00000000}, + {0x77, 6, 0, 0, 0x00000004}, + {0x57, 6, 0, 0, 0x00000001}, + {0x67, 1, 0, 0, 0x00000001}, + {0x4f, 1, 6, 0, 0x00000000}, + {0xbf, 6, 7, 0, 0x00000000}, + {0x67, 6, 0, 0, 0x0000003c}, + {0xc7, 6, 0, 0, 0x0000003f}, + {0x5f, 6, 1, 0, 0x00000000}, + {0xaf, 4, 6, 0, 0x00000000}, + {0xbf, 6, 9, 0, 0x00000000}, + {0x77, 6, 0, 0, 0x00000003}, + {0x57, 6, 0, 0, 0x00000001}, + {0x67, 1, 0, 0, 0x00000001}, + {0x4f, 1, 6, 0, 0x00000000}, + {0xbf, 6, 7, 0, 0x00000000}, + {0x67, 6, 0, 0, 0x0000003d}, + {0xc7, 6, 0, 0, 0x0000003f}, + {0x5f, 6, 1, 0, 0x00000000}, + {0xaf, 4, 6, 0, 0x00000000}, + {0xbf, 6, 9, 0, 0x00000000}, + {0x77, 6, 0, 0, 0x00000002}, + {0x57, 6, 0, 0, 0x00000001}, + {0x67, 1, 0, 0, 0x00000001}, + {0x4f, 1, 6, 0, 0x00000000}, + {0xbf, 6, 7, 0, 0x00000000}, + {0x67, 6, 0, 0, 0x0000003e}, + {0xc7, 6, 0, 0, 0x0000003f}, + {0x5f, 6, 1, 0, 0x00000000}, + {0xaf, 4, 6, 0, 0x00000000}, + {0xbf, 6, 9, 0, 0x00000000}, + {0x77, 6, 0, 0, 0x00000001}, + {0x57, 6, 0, 0, 0x00000001}, + {0x67, 1, 0, 0, 0x00000001}, + {0x4f, 1, 6, 0, 0x00000000}, + {0x67, 7, 0, 0, 0x0000003f}, + {0xc7, 7, 0, 0, 0x0000003f}, + {0x5f, 7, 1, 0, 0x00000000}, + {0xaf, 4, 7, 0, 0x00000000}, + {0x57, 9, 0, 0, 0x00000001}, + {0x67, 1, 0, 0, 0x00000001}, + {0x4f, 1, 9, 0, 0x00000000}, + {0x71, 7, 8, 21, 0x00000000}, + {0x67, 7, 0, 0, 0x00000038}, + {0xc7, 7, 0, 0, 0x00000038}, + {0xb7, 6, 0, 0, 0x00000000}, + {0x6d, 7, 3, 1, 0x00000000}, + {0xbf, 6, 1, 0, 0x00000000}, + {0xaf, 4, 6, 0, 0x00000000}, + {0x67, 1, 0, 0, 0x00000001}, + {0x71, 9, 0, 17, 0x00000000}, + {0xbf, 6, 9, 0, 0x00000000}, + {0x77, 6, 0, 0, 0x00000007}, + {0x4f, 1, 6, 0, 0x00000000}, + {0xbf, 6, 7, 0, 0x00000000}, + {0x67, 6, 0, 0, 0x00000039}, + {0xc7, 6, 0, 0, 0x0000003f}, + {0x5f, 6, 1, 0, 0x00000000}, + {0xaf, 4, 6, 0, 0x00000000}, + {0xbf, 6, 9, 0, 0x00000000}, + {0x77, 6, 0, 0, 0x00000006}, + {0x57, 6, 0, 0, 0x00000001}, + {0x67, 1, 0, 0, 0x00000001}, + {0x4f, 1, 6, 0, 0x00000000}, + {0xbf, 6, 7, 0, 0x00000000}, + {0x67, 6, 0, 0, 0x0000003a}, + {0xc7, 6, 0, 0, 0x0000003f}, + {0x5f, 6, 1, 0, 0x00000000}, + {0xaf, 4, 6, 0, 0x00000000}, + {0xbf, 6, 9, 0, 0x00000000}, + {0x77, 6, 0, 0, 0x00000005}, + {0x57, 6, 0, 0, 0x00000001}, + {0x67, 1, 0, 0, 0x00000001}, + {0x4f, 1, 6, 0, 0x00000000}, + {0xbf, 6, 7, 0, 0x00000000}, + {0x67, 6, 0, 0, 0x0000003b}, + {0xc7, 6, 0, 0, 0x0000003f}, + {0x5f, 6, 1, 0, 0x00000000}, + {0xaf, 4, 6, 0, 0x00000000}, + {0xbf, 6, 9, 0, 0x00000000}, + {0x77, 6, 0, 0, 0x00000004}, + {0x57, 6, 0, 0, 0x00000001}, + {0x67, 1, 0, 0, 0x00000001}, + {0x4f, 1, 6, 0, 0x00000000}, + {0xbf, 6, 7, 0, 0x00000000}, + {0x67, 6, 0, 0, 0x0000003c}, + {0xc7, 6, 0, 0, 0x0000003f}, + {0x5f, 6, 1, 0, 0x00000000}, + {0xaf, 4, 6, 0, 0x00000000}, + {0xbf, 6, 9, 0, 0x00000000}, + {0x77, 6, 0, 0, 0x00000003}, + {0x57, 6, 0, 0, 0x00000001}, + {0x67, 1, 0, 0, 0x00000001}, + {0x4f, 1, 6, 0, 0x00000000}, + {0xbf, 6, 7, 0, 0x00000000}, + {0x67, 6, 0, 0, 0x0000003d}, + {0xc7, 6, 0, 0, 0x0000003f}, + {0x5f, 6, 1, 0, 0x00000000}, + {0xaf, 4, 6, 0, 0x00000000}, + {0xbf, 6, 9, 0, 0x00000000}, + {0x77, 6, 0, 0, 0x00000002}, + {0x57, 6, 0, 0, 0x00000001}, + {0x67, 1, 0, 0, 0x00000001}, + {0x4f, 1, 6, 0, 0x00000000}, + {0xbf, 6, 7, 0, 0x00000000}, + {0x67, 6, 0, 0, 0x0000003e}, + {0xc7, 6, 0, 0, 0x0000003f}, + {0x5f, 6, 1, 0, 0x00000000}, + {0xaf, 4, 6, 0, 0x00000000}, + {0xbf, 6, 9, 0, 0x00000000}, + {0x77, 6, 0, 0, 0x00000001}, + {0x57, 6, 0, 0, 0x00000001}, + {0x67, 1, 0, 0, 0x00000001}, + {0x4f, 1, 6, 0, 0x00000000}, + {0x67, 7, 0, 0, 0x0000003f}, + {0xc7, 7, 0, 0, 0x0000003f}, + {0x5f, 7, 1, 0, 0x00000000}, + {0xaf, 4, 7, 0, 0x00000000}, + {0x57, 9, 0, 0, 0x00000001}, + {0x67, 1, 0, 0, 0x00000001}, + {0x4f, 1, 9, 0, 0x00000000}, + {0x71, 7, 8, 22, 0x00000000}, + {0x67, 7, 0, 0, 0x00000038}, + {0xc7, 7, 0, 0, 0x00000038}, + {0xb7, 6, 0, 0, 0x00000000}, + {0x6d, 7, 3, 1, 0x00000000}, + {0xbf, 6, 1, 0, 0x00000000}, + {0xaf, 4, 6, 0, 0x00000000}, + {0x67, 1, 0, 0, 0x00000001}, + {0x71, 9, 0, 18, 0x00000000}, + {0xbf, 6, 9, 0, 0x00000000}, + {0x77, 6, 0, 0, 0x00000007}, + {0x4f, 1, 6, 0, 0x00000000}, + {0xbf, 6, 7, 0, 0x00000000}, + {0x67, 6, 0, 0, 0x00000039}, + {0xc7, 6, 0, 0, 0x0000003f}, + {0x5f, 6, 1, 0, 0x00000000}, + {0xaf, 4, 6, 0, 0x00000000}, + {0xbf, 6, 9, 0, 0x00000000}, + {0x77, 6, 0, 0, 0x00000006}, + {0x57, 6, 0, 0, 0x00000001}, + {0x67, 1, 0, 0, 0x00000001}, + {0x4f, 1, 6, 0, 0x00000000}, + {0xbf, 6, 7, 0, 0x00000000}, + {0x67, 6, 0, 0, 0x0000003a}, + {0xc7, 6, 0, 0, 0x0000003f}, + {0x5f, 6, 1, 0, 0x00000000}, + {0xaf, 4, 6, 0, 0x00000000}, + {0xbf, 6, 9, 0, 0x00000000}, + {0x77, 6, 0, 0, 0x00000005}, + {0x57, 6, 0, 0, 0x00000001}, + {0x67, 1, 0, 0, 0x00000001}, + {0x4f, 1, 6, 0, 0x00000000}, + {0xbf, 6, 7, 0, 0x00000000}, + {0x67, 6, 0, 0, 0x0000003b}, + {0xc7, 6, 0, 0, 0x0000003f}, + {0x5f, 6, 1, 0, 0x00000000}, + {0xaf, 4, 6, 0, 0x00000000}, + {0xbf, 6, 9, 0, 0x00000000}, + {0x77, 6, 0, 0, 0x00000004}, + {0x57, 6, 0, 0, 0x00000001}, + {0x67, 1, 0, 0, 0x00000001}, + {0x4f, 1, 6, 0, 0x00000000}, + {0xbf, 6, 7, 0, 0x00000000}, + {0x67, 6, 0, 0, 0x0000003c}, + {0xc7, 6, 0, 0, 0x0000003f}, + {0x5f, 6, 1, 0, 0x00000000}, + {0xaf, 4, 6, 0, 0x00000000}, + {0xbf, 6, 9, 0, 0x00000000}, + {0x77, 6, 0, 0, 0x00000003}, + {0x57, 6, 0, 0, 0x00000001}, + {0x67, 1, 0, 0, 0x00000001}, + {0x4f, 1, 6, 0, 0x00000000}, + {0xbf, 6, 7, 0, 0x00000000}, + {0x67, 6, 0, 0, 0x0000003d}, + {0xc7, 6, 0, 0, 0x0000003f}, + {0x5f, 6, 1, 0, 0x00000000}, + {0xaf, 4, 6, 0, 0x00000000}, + {0xbf, 6, 9, 0, 0x00000000}, + {0x77, 6, 0, 0, 0x00000002}, + {0x57, 6, 0, 0, 0x00000001}, + {0x67, 1, 0, 0, 0x00000001}, + {0x4f, 1, 6, 0, 0x00000000}, + {0xbf, 6, 7, 0, 0x00000000}, + {0x67, 6, 0, 0, 0x0000003e}, + {0xc7, 6, 0, 0, 0x0000003f}, + {0x5f, 6, 1, 0, 0x00000000}, + {0xaf, 4, 6, 0, 0x00000000}, + {0xbf, 6, 9, 0, 0x00000000}, + {0x77, 6, 0, 0, 0x00000001}, + {0x57, 6, 0, 0, 0x00000001}, + {0x67, 1, 0, 0, 0x00000001}, + {0x4f, 1, 6, 0, 0x00000000}, + {0x67, 7, 0, 0, 0x0000003f}, + {0xc7, 7, 0, 0, 0x0000003f}, + {0x5f, 7, 1, 0, 0x00000000}, + {0xaf, 4, 7, 0, 0x00000000}, + {0x57, 9, 0, 0, 0x00000001}, + {0x67, 1, 0, 0, 0x00000001}, + {0x4f, 1, 9, 0, 0x00000000}, + {0x71, 7, 8, 23, 0x00000000}, + {0x67, 7, 0, 0, 0x00000038}, + {0xc7, 7, 0, 0, 0x00000038}, + {0x6d, 7, 3, 1, 0x00000000}, + {0xbf, 2, 1, 0, 0x00000000}, + {0xaf, 4, 2, 0, 0x00000000}, + {0x71, 2, 0, 19, 0x00000000}, + {0x67, 1, 0, 0, 0x00000001}, + {0xbf, 3, 2, 0, 0x00000000}, + {0x77, 3, 0, 0, 0x00000007}, + {0x4f, 1, 3, 0, 0x00000000}, + {0xbf, 3, 7, 0, 0x00000000}, + {0x67, 3, 0, 0, 0x00000039}, + {0xc7, 3, 0, 0, 0x0000003f}, + {0x5f, 3, 1, 0, 0x00000000}, + {0xaf, 4, 3, 0, 0x00000000}, + {0xbf, 3, 2, 0, 0x00000000}, + {0x77, 3, 0, 0, 0x00000006}, + {0x57, 3, 0, 0, 0x00000001}, + {0x67, 1, 0, 0, 0x00000001}, + {0x4f, 1, 3, 0, 0x00000000}, + {0xbf, 3, 7, 0, 0x00000000}, + {0x67, 3, 0, 0, 0x0000003a}, + {0xc7, 3, 0, 0, 0x0000003f}, + {0x5f, 3, 1, 0, 0x00000000}, + {0xaf, 4, 3, 0, 0x00000000}, + {0xbf, 3, 2, 0, 0x00000000}, + {0x77, 3, 0, 0, 0x00000005}, + {0x57, 3, 0, 0, 0x00000001}, + {0x67, 1, 0, 0, 0x00000001}, + {0x4f, 1, 3, 0, 0x00000000}, + {0xbf, 3, 7, 0, 0x00000000}, + {0x67, 3, 0, 0, 0x0000003b}, + {0xc7, 3, 0, 0, 0x0000003f}, + {0x5f, 3, 1, 0, 0x00000000}, + {0xaf, 4, 3, 0, 0x00000000}, + {0xbf, 3, 2, 0, 0x00000000}, + {0x77, 3, 0, 0, 0x00000004}, + {0x57, 3, 0, 0, 0x00000001}, + {0x67, 1, 0, 0, 0x00000001}, + {0x4f, 1, 3, 0, 0x00000000}, + {0xbf, 3, 7, 0, 0x00000000}, + {0x67, 3, 0, 0, 0x0000003c}, + {0xc7, 3, 0, 0, 0x0000003f}, + {0x5f, 3, 1, 0, 0x00000000}, + {0xaf, 4, 3, 0, 0x00000000}, + {0xbf, 3, 2, 0, 0x00000000}, + {0x77, 3, 0, 0, 0x00000003}, + {0x57, 3, 0, 0, 0x00000001}, + {0x67, 1, 0, 0, 0x00000001}, + {0x4f, 1, 3, 0, 0x00000000}, + {0xbf, 3, 7, 0, 0x00000000}, + {0x67, 3, 0, 0, 0x0000003d}, + {0xc7, 3, 0, 0, 0x0000003f}, + {0x5f, 3, 1, 0, 0x00000000}, + {0xaf, 4, 3, 0, 0x00000000}, + {0xbf, 3, 2, 0, 0x00000000}, + {0x77, 3, 0, 0, 0x00000002}, + {0x57, 3, 0, 0, 0x00000001}, + {0x67, 1, 0, 0, 0x00000001}, + {0x4f, 1, 3, 0, 0x00000000}, + {0xbf, 3, 7, 0, 0x00000000}, + {0x67, 3, 0, 0, 0x0000003e}, + {0xc7, 3, 0, 0, 0x0000003f}, + {0x5f, 3, 1, 0, 0x00000000}, + {0xaf, 4, 3, 0, 0x00000000}, + {0x77, 2, 0, 0, 0x00000001}, + {0x57, 2, 0, 0, 0x00000001}, + {0x67, 1, 0, 0, 0x00000001}, + {0x4f, 1, 2, 0, 0x00000000}, + {0x67, 7, 0, 0, 0x0000003f}, + {0xc7, 7, 0, 0, 0x0000003f}, + {0x5f, 7, 1, 0, 0x00000000}, + {0xaf, 4, 7, 0, 0x00000000}, + {0x79, 1, 10, -64, 0x00000000}, + {0x63, 1, 4, 48, 0x00000000}, + {0x18, 1, 0, 0, 0x25203d20}, + {0x00, 0, 0, 0, 0x000a2964}, + {0x7b, 10, 1, -24, 0x00000000}, + {0x18, 1, 0, 0, 0x20782520}, + {0x00, 0, 0, 0, 0x66666f28}, + {0x7b, 10, 1, -32, 0x00000000}, + {0x18, 1, 0, 0, 0x6168203a}, + {0x00, 0, 0, 0, 0x3d206873}, + {0x7b, 10, 1, -40, 0x00000000}, + {0x18, 1, 0, 0, 0x68736168}, + {0x00, 0, 0, 0, 0x29642528}, + {0x7b, 10, 1, -48, 0x00000000}, + {0x07, 5, 0, 0, 0x00000008}, + {0xbf, 1, 10, 0, 0x00000000}, + {0x07, 1, 0, 0, 0xffffffd0}, + {0xb7, 2, 0, 0, 0x00000020}, + {0xb7, 3, 0, 0, 0x00000002}, + {0x85, 0, 0, 0, 0x00000006}, + {0xb7, 7, 0, 0, 0x00000003}, + {0xbf, 0, 7, 0, 0x00000000}, + {0x95, 0, 0, 0, 0x00000000}, +}; + +#define L3_SRC_HASH_INSNS_CNT \ + (sizeof(l3_src_hash_insns) / sizeof(l3_src_hash_insns[0])) + +/** + * Load BPF program (section l3_src_hash) into the kernel and return a bpf fd. + * + * @param queue_idx + * RSS MAP key index + * + * @return + * -1 if the BPF program couldn't be loaded. An fd (int) otherwise. + */ +int bpf_load_l3_src_hash_insns(__u32 key_idx) +{ + l3_src_hash_insns[4].imm = key_idx; + + return bpf_load(BPF_PROG_TYPE_SCHED_ACT, + (struct bpf_insn *)l3_src_hash_insns, + L3_SRC_HASH_INSNS_CNT, + "GPL", 0); +} + +/* + * The next bpf_insn array matches l4_src_hash section + * see tap_bpf_program.c file + * + * HASH(L4_SRC) + */ + +static struct bpf_insn l4_src_hash_insns[] = { + {0xbf, 6, 1, 0, 0x00000000}, + {0x61, 8, 6, 16, 0x00000000}, + {0x61, 9, 6, 76, 0x00000000}, + {0x61, 1, 6, 80, 0x00000000}, + {0x7b, 10, 1, -56, 0x00000000}, + {0x18, 1, 0, 0, 0xdeadbeef}, + {0x00, 0, 0, 0, 0x00000000}, + {0x63, 10, 1, -4, 0x00000000}, + {0x61, 7, 6, 48, 0x00000000}, + {0xbf, 2, 10, 0, 0x00000000}, + {0x07, 2, 0, 0, 0xfffffffc}, + {0x18, 1, 1, 0, 0xffffffff}, + {0x00, 0, 0, 0, 0x00000000}, + {0x85, 0, 0, 0, 0x00000001}, + {0x55, 0, 0, 21, 0x00000000}, + {0xb7, 1, 0, 0, 0x00000a64}, + {0x6b, 10, 1, -16, 0x00000000}, + {0x18, 1, 0, 0, 0x69666e6f}, + {0x00, 0, 0, 0, 0x65727567}, + {0x7b, 10, 1, -24, 0x00000000}, + {0x18, 1, 0, 0, 0x6e207369}, + {0x00, 0, 0, 0, 0x6320746f}, + {0x7b, 10, 1, -32, 0x00000000}, + {0x18, 1, 0, 0, 0x20737372}, + {0x00, 0, 0, 0, 0x2079656b}, + {0x7b, 10, 1, -40, 0x00000000}, + {0x18, 1, 0, 0, 0x68736168}, + {0x00, 0, 0, 0, 0x203a2928}, + {0x7b, 10, 1, -48, 0x00000000}, + {0xb7, 7, 0, 0, 0x00000000}, + {0x73, 10, 7, -14, 0x00000000}, + {0xbf, 1, 10, 0, 0x00000000}, + {0x07, 1, 0, 0, 0xffffffd0}, + {0xb7, 2, 0, 0, 0x00000023}, + {0x85, 0, 0, 0, 0x00000006}, + {0x05, 0, 0, 272, 0x00000000}, + {0xb7, 4, 0, 0, 0x0000000e}, + {0x61, 1, 6, 20, 0x00000000}, + {0x15, 1, 0, 11, 0x00000000}, + {0x61, 1, 6, 28, 0x00000000}, + {0x55, 1, 0, 9, 0x0000a888}, + {0xbf, 2, 7, 0, 0x00000000}, + {0xb7, 7, 0, 0, 0x00000000}, + {0xbf, 1, 9, 0, 0x00000000}, + {0x07, 1, 0, 0, 0x00000012}, + {0x79, 3, 10, -56, 0x00000000}, + {0x2d, 1, 3, 261, 0x00000000}, + {0xb7, 4, 0, 0, 0x00000012}, + {0x69, 8, 9, 16, 0x00000000}, + {0xbf, 7, 2, 0, 0x00000000}, + {0x61, 1, 0, 128, 0x00000000}, + {0xbf, 3, 1, 0, 0x00000000}, + {0x57, 3, 0, 0, 0x00000001}, + {0xb7, 2, 0, 0, 0x00000000}, + {0x1d, 3, 2, 1, 0x00000000}, + {0x07, 0, 0, 0, 0x00000006}, + {0xbf, 3, 1, 0, 0x00000000}, + {0x57, 3, 0, 0, 0x00000002}, + {0x1d, 3, 2, 1, 0x00000000}, + {0x07, 0, 0, 0, 0x00000006}, + {0x57, 8, 0, 0, 0x0000ffff}, + {0x15, 8, 0, 24, 0x0000dd86}, + {0xbf, 5, 7, 0, 0x00000000}, + {0xb7, 7, 0, 0, 0x00000003}, + {0x55, 8, 0, 243, 0x00000008}, + {0xbf, 2, 9, 0, 0x00000000}, + {0x0f, 2, 4, 0, 0x00000000}, + {0xb7, 7, 0, 0, 0x00000000}, + {0xbf, 3, 2, 0, 0x00000000}, + {0x07, 3, 0, 0, 0x00000014}, + {0x79, 8, 10, -56, 0x00000000}, + {0x2d, 3, 8, 236, 0x00000000}, + {0xbf, 7, 4, 0, 0x00000000}, + {0xbf, 4, 1, 0, 0x00000000}, + {0x57, 4, 0, 0, 0x00000004}, + {0xb7, 3, 0, 0, 0x00000000}, + {0x1d, 4, 3, 1, 0x00000000}, + {0x07, 0, 0, 0, 0x00000004}, + {0xbf, 4, 1, 0, 0x00000000}, + {0x57, 4, 0, 0, 0x00000008}, + {0x1d, 4, 3, 1, 0x00000000}, + {0x07, 0, 0, 0, 0x00000004}, + {0xbf, 4, 7, 0, 0x00000000}, + {0x07, 4, 0, 0, 0x00000014}, + {0x07, 2, 0, 0, 0x00000009}, + {0x05, 0, 0, 21, 0x00000000}, + {0xbf, 5, 7, 0, 0x00000000}, + {0xbf, 2, 9, 0, 0x00000000}, + {0x0f, 2, 4, 0, 0x00000000}, + {0xb7, 7, 0, 0, 0x00000000}, + {0xbf, 3, 2, 0, 0x00000000}, + {0x07, 3, 0, 0, 0x00000028}, + {0x79, 8, 10, -56, 0x00000000}, + {0x2d, 3, 8, 214, 0x00000000}, + {0xbf, 7, 4, 0, 0x00000000}, + {0xbf, 4, 1, 0, 0x00000000}, + {0x57, 4, 0, 0, 0x00000004}, + {0xb7, 3, 0, 0, 0x00000000}, + {0x1d, 4, 3, 1, 0x00000000}, + {0x07, 0, 0, 0, 0x00000010}, + {0xbf, 4, 1, 0, 0x00000000}, + {0x57, 4, 0, 0, 0x00000008}, + {0x1d, 4, 3, 1, 0x00000000}, + {0x07, 0, 0, 0, 0x00000010}, + {0xbf, 4, 7, 0, 0x00000000}, + {0x07, 4, 0, 0, 0x00000028}, + {0x07, 2, 0, 0, 0x00000006}, + {0x71, 2, 2, 0, 0x00000000}, + {0x15, 2, 0, 2, 0x00000011}, + {0xb7, 7, 0, 0, 0x00000003}, + {0x55, 2, 0, 197, 0x00000006}, + {0x57, 1, 0, 0, 0x00000010}, + {0xb7, 7, 0, 0, 0x00000003}, + {0x15, 1, 0, 194, 0x00000000}, + {0xbf, 3, 9, 0, 0x00000000}, + {0x0f, 3, 4, 0, 0x00000000}, + {0xb7, 7, 0, 0, 0x00000000}, + {0xbf, 1, 3, 0, 0x00000000}, + {0x07, 1, 0, 0, 0x00000002}, + {0x79, 2, 10, -56, 0x00000000}, + {0x2d, 1, 2, 187, 0x00000000}, + {0x7b, 10, 4, -56, 0x00000000}, + {0x71, 1, 0, 1, 0x00000000}, + {0x67, 1, 0, 0, 0x00000010}, + {0x71, 8, 0, 0, 0x00000000}, + {0x67, 8, 0, 0, 0x00000018}, + {0x4f, 8, 1, 0, 0x00000000}, + {0x71, 1, 0, 2, 0x00000000}, + {0x67, 1, 0, 0, 0x00000008}, + {0x4f, 8, 1, 0, 0x00000000}, + {0x71, 1, 0, 3, 0x00000000}, + {0x4f, 8, 1, 0, 0x00000000}, + {0x71, 7, 3, 0, 0x00000000}, + {0x67, 7, 0, 0, 0x00000038}, + {0xc7, 7, 0, 0, 0x00000038}, + {0xb7, 2, 0, 0, 0x00000000}, + {0xb7, 1, 0, 0, 0xffffffff}, + {0xb7, 4, 0, 0, 0x00000000}, + {0x6d, 7, 1, 1, 0x00000000}, + {0xbf, 4, 8, 0, 0x00000000}, + {0xaf, 4, 5, 0, 0x00000000}, + {0x67, 8, 0, 0, 0x00000001}, + {0x71, 9, 0, 4, 0x00000000}, + {0xbf, 1, 9, 0, 0x00000000}, + {0x77, 1, 0, 0, 0x00000007}, + {0x4f, 1, 8, 0, 0x00000000}, + {0xbf, 8, 7, 0, 0x00000000}, + {0x67, 8, 0, 0, 0x00000039}, + {0xc7, 8, 0, 0, 0x0000003f}, + {0x5f, 8, 1, 0, 0x00000000}, + {0xaf, 4, 8, 0, 0x00000000}, + {0x67, 1, 0, 0, 0x00000001}, + {0xbf, 8, 9, 0, 0x00000000}, + {0x77, 8, 0, 0, 0x00000006}, + {0x57, 8, 0, 0, 0x00000001}, + {0x4f, 1, 8, 0, 0x00000000}, + {0xbf, 8, 7, 0, 0x00000000}, + {0x67, 8, 0, 0, 0x0000003a}, + {0xc7, 8, 0, 0, 0x0000003f}, + {0x5f, 8, 1, 0, 0x00000000}, + {0xaf, 4, 8, 0, 0x00000000}, + {0xbf, 8, 9, 0, 0x00000000}, + {0x77, 8, 0, 0, 0x00000005}, + {0x57, 8, 0, 0, 0x00000001}, + {0x67, 1, 0, 0, 0x00000001}, + {0x4f, 1, 8, 0, 0x00000000}, + {0xbf, 8, 7, 0, 0x00000000}, + {0x67, 8, 0, 0, 0x0000003b}, + {0xc7, 8, 0, 0, 0x0000003f}, + {0x5f, 8, 1, 0, 0x00000000}, + {0xaf, 4, 8, 0, 0x00000000}, + {0xbf, 8, 9, 0, 0x00000000}, + {0x77, 8, 0, 0, 0x00000004}, + {0x57, 8, 0, 0, 0x00000001}, + {0x67, 1, 0, 0, 0x00000001}, + {0x4f, 1, 8, 0, 0x00000000}, + {0xbf, 8, 7, 0, 0x00000000}, + {0x67, 8, 0, 0, 0x0000003c}, + {0xc7, 8, 0, 0, 0x0000003f}, + {0x5f, 8, 1, 0, 0x00000000}, + {0xaf, 4, 8, 0, 0x00000000}, + {0xbf, 8, 9, 0, 0x00000000}, + {0x77, 8, 0, 0, 0x00000003}, + {0x57, 8, 0, 0, 0x00000001}, + {0x67, 1, 0, 0, 0x00000001}, + {0x4f, 1, 8, 0, 0x00000000}, + {0xbf, 8, 7, 0, 0x00000000}, + {0x67, 8, 0, 0, 0x0000003d}, + {0xc7, 8, 0, 0, 0x0000003f}, + {0x5f, 8, 1, 0, 0x00000000}, + {0xaf, 4, 8, 0, 0x00000000}, + {0xbf, 8, 9, 0, 0x00000000}, + {0x77, 8, 0, 0, 0x00000002}, + {0x57, 8, 0, 0, 0x00000001}, + {0x67, 1, 0, 0, 0x00000001}, + {0x4f, 1, 8, 0, 0x00000000}, + {0xbf, 8, 7, 0, 0x00000000}, + {0x67, 8, 0, 0, 0x0000003e}, + {0xc7, 8, 0, 0, 0x0000003f}, + {0x5f, 8, 1, 0, 0x00000000}, + {0xaf, 4, 8, 0, 0x00000000}, + {0xbf, 8, 9, 0, 0x00000000}, + {0x77, 8, 0, 0, 0x00000001}, + {0x57, 8, 0, 0, 0x00000001}, + {0x67, 1, 0, 0, 0x00000001}, + {0x4f, 1, 8, 0, 0x00000000}, + {0x67, 7, 0, 0, 0x0000003f}, + {0xc7, 7, 0, 0, 0x0000003f}, + {0x5f, 7, 1, 0, 0x00000000}, + {0xaf, 4, 7, 0, 0x00000000}, + {0x57, 9, 0, 0, 0x00000001}, + {0x67, 1, 0, 0, 0x00000001}, + {0x4f, 1, 9, 0, 0x00000000}, + {0x71, 7, 3, 1, 0x00000000}, + {0x67, 7, 0, 0, 0x00000038}, + {0xc7, 7, 0, 0, 0x00000038}, + {0xb7, 3, 0, 0, 0xffffffff}, + {0x6d, 7, 3, 1, 0x00000000}, + {0xbf, 2, 1, 0, 0x00000000}, + {0xaf, 4, 2, 0, 0x00000000}, + {0x71, 2, 0, 5, 0x00000000}, + {0x67, 1, 0, 0, 0x00000001}, + {0xbf, 3, 2, 0, 0x00000000}, + {0x77, 3, 0, 0, 0x00000007}, + {0x4f, 1, 3, 0, 0x00000000}, + {0xbf, 3, 7, 0, 0x00000000}, + {0x67, 3, 0, 0, 0x00000039}, + {0xc7, 3, 0, 0, 0x0000003f}, + {0x5f, 3, 1, 0, 0x00000000}, + {0xaf, 4, 3, 0, 0x00000000}, + {0xbf, 3, 2, 0, 0x00000000}, + {0x77, 3, 0, 0, 0x00000006}, + {0x57, 3, 0, 0, 0x00000001}, + {0x67, 1, 0, 0, 0x00000001}, + {0x4f, 1, 3, 0, 0x00000000}, + {0xbf, 3, 7, 0, 0x00000000}, + {0x67, 3, 0, 0, 0x0000003a}, + {0xc7, 3, 0, 0, 0x0000003f}, + {0x5f, 3, 1, 0, 0x00000000}, + {0xaf, 4, 3, 0, 0x00000000}, + {0xbf, 3, 2, 0, 0x00000000}, + {0x77, 3, 0, 0, 0x00000005}, + {0x57, 3, 0, 0, 0x00000001}, + {0x67, 1, 0, 0, 0x00000001}, + {0x4f, 1, 3, 0, 0x00000000}, + {0xbf, 3, 7, 0, 0x00000000}, + {0x67, 3, 0, 0, 0x0000003b}, + {0xc7, 3, 0, 0, 0x0000003f}, + {0x5f, 3, 1, 0, 0x00000000}, + {0xaf, 4, 3, 0, 0x00000000}, + {0xbf, 3, 2, 0, 0x00000000}, + {0x77, 3, 0, 0, 0x00000004}, + {0x57, 3, 0, 0, 0x00000001}, + {0x67, 1, 0, 0, 0x00000001}, + {0x4f, 1, 3, 0, 0x00000000}, + {0xbf, 3, 7, 0, 0x00000000}, + {0x67, 3, 0, 0, 0x0000003c}, + {0xc7, 3, 0, 0, 0x0000003f}, + {0x5f, 3, 1, 0, 0x00000000}, + {0xaf, 4, 3, 0, 0x00000000}, + {0xbf, 3, 2, 0, 0x00000000}, + {0x77, 3, 0, 0, 0x00000003}, + {0x57, 3, 0, 0, 0x00000001}, + {0x67, 1, 0, 0, 0x00000001}, + {0x4f, 1, 3, 0, 0x00000000}, + {0xbf, 3, 7, 0, 0x00000000}, + {0x67, 3, 0, 0, 0x0000003d}, + {0xc7, 3, 0, 0, 0x0000003f}, + {0x5f, 3, 1, 0, 0x00000000}, + {0xaf, 4, 3, 0, 0x00000000}, + {0xbf, 3, 2, 0, 0x00000000}, + {0x77, 3, 0, 0, 0x00000002}, + {0x57, 3, 0, 0, 0x00000001}, + {0x67, 1, 0, 0, 0x00000001}, + {0x4f, 1, 3, 0, 0x00000000}, + {0xbf, 3, 7, 0, 0x00000000}, + {0x67, 3, 0, 0, 0x0000003e}, + {0xc7, 3, 0, 0, 0x0000003f}, + {0x5f, 3, 1, 0, 0x00000000}, + {0xaf, 4, 3, 0, 0x00000000}, + {0x77, 2, 0, 0, 0x00000001}, + {0x57, 2, 0, 0, 0x00000001}, + {0x67, 1, 0, 0, 0x00000001}, + {0x4f, 1, 2, 0, 0x00000000}, + {0x67, 7, 0, 0, 0x0000003f}, + {0xc7, 7, 0, 0, 0x0000003f}, + {0x5f, 7, 1, 0, 0x00000000}, + {0xaf, 4, 7, 0, 0x00000000}, + {0x63, 6, 4, 48, 0x00000000}, + {0x18, 1, 0, 0, 0x25203d20}, + {0x00, 0, 0, 0, 0x000a2964}, + {0x7b, 10, 1, -24, 0x00000000}, + {0x18, 1, 0, 0, 0x20782520}, + {0x00, 0, 0, 0, 0x66666f28}, + {0x7b, 10, 1, -32, 0x00000000}, + {0x18, 1, 0, 0, 0x6168203a}, + {0x00, 0, 0, 0, 0x3d206873}, + {0x7b, 10, 1, -40, 0x00000000}, + {0x18, 1, 0, 0, 0x68736168}, + {0x00, 0, 0, 0, 0x29642528}, + {0x7b, 10, 1, -48, 0x00000000}, + {0xbf, 1, 10, 0, 0x00000000}, + {0x07, 1, 0, 0, 0xffffffd0}, + {0xb7, 2, 0, 0, 0x00000020}, + {0xb7, 3, 0, 0, 0x00000004}, + {0x79, 5, 10, -56, 0x00000000}, + {0x85, 0, 0, 0, 0x00000006}, + {0xb7, 7, 0, 0, 0x00000003}, + {0xbf, 0, 7, 0, 0x00000000}, + {0x95, 0, 0, 0, 0x00000000}, +}; + +#define L4_SRC_HASH_INSNS_CNT \ + (sizeof(l4_src_hash_insns) / sizeof(l4_src_hash_insns[0])) + +/** + * Load BPF program (section l4_src_hash) into the kernel and return a bpf fd. + * + * @param queue_idx + * RSS MAP key index + * + * @return + * -1 if the BPF program couldn't be loaded. An fd (int) otherwise. + */ +int bpf_load_l4_src_hash_insns(__u32 key_idx) +{ + l4_src_hash_insns[4].imm = key_idx; + + return bpf_load(BPF_PROG_TYPE_SCHED_ACT, + (struct bpf_insn *)l4_src_hash_insns, + L4_SRC_HASH_INSNS_CNT, + "GPL", 0); +} + +#ifndef __NR_bpf +# if defined(__i386__) +# define __NR_bpf 357 +# elif defined(__x86_64__) +# define __NR_bpf 321 +# elif defined(__aarch64__) +# define __NR_bpf 280 +# elif defined(__sparc__) +# define __NR_bpf 349 +# elif defined(__s390__) +# define __NR_bpf 351 +# else +# error __NR_bpf not defined. libbpf does not support your arch. +# endif +#endif + +static inline __u64 ptr_to_u64(const void *ptr) +{ + return (__u64)(unsigned long)ptr; +} + +static inline int sys_bpf(enum bpf_cmd cmd, union bpf_attr *attr, + unsigned int size) +{ + return syscall(__NR_bpf, cmd, attr, size); +} + +int bpf_load(enum bpf_prog_type type, + const struct bpf_insn *insns, + size_t insns_cnt, + const char *license, + __u32 kern_version) +{ + union bpf_attr attr; + + bzero(&attr, sizeof(attr)); + attr.prog_type = type; + attr.insn_cnt = (__u32)insns_cnt; + attr.insns = ptr_to_u64(insns); + attr.license = ptr_to_u64(license); + attr.log_buf = ptr_to_u64(NULL); + attr.log_level = 0; + attr.kern_version = kern_version; + + return sys_bpf(BPF_PROG_LOAD, &attr, sizeof(attr)); +} diff --git a/drivers/net/tap/tap_bpf_program.c b/drivers/net/tap/tap_bpf_program.c new file mode 100644 index 0000000..e1ae0c5 --- /dev/null +++ b/drivers/net/tap/tap_bpf_program.c @@ -0,0 +1,321 @@ +/*- + * BSD LICENSE + * + * Copyright 2017 6WIND S.A. + * Copyright 2017 Mellanox. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in + * the documentation and/or other materials provided with the + * distribution. + * * Neither the name of 6WIND S.A. nor the names of its + * contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +/* BPF helper functions for our example. */ +#include "tap_bpf_api.h" +#include "tap_bpf_shared.h" + +#define ERROR 0 + +/* + * The queue number is offset by 1, to distinguish packets that have + * gone through this rule (skb->cb[1] != 0) from others. + */ +#define QUEUE_OFFSET 1 + +#define INV_KEY_IDX 0xdeadbeef + +struct vlan_hdr { + __be16 proto; + __be16 tci; +}; + +__section("maps") +struct bpf_elf_map map_keys = { + .type = BPF_MAP_TYPE_HASH, + .id = BPF_MAP_ID_KEY, + .size_key = sizeof(__u32), + .size_value = sizeof(struct rss_key), + .max_elem = 256, + .pinning = PIN_GLOBAL_NS, +}; + +__section("cls_q") int +match_q(struct __sk_buff *skb) +{ + __u32 queue = skb->cb[1]; + volatile __u32 q = INV_KEY_IDX; + __u32 match_queue = QUEUE_OFFSET + q; + + /* printt("match_q$i() queue = %d\n", queue); */ + + if (queue != match_queue) + return TC_ACT_OK; + return TC_ACT_UNSPEC; +} + +__section("tailing") int +tail(struct __sk_buff *skb) +{ + skb_change_tail(skb, skb->len + sizeof(__u32), 0); + + return TC_ACT_UNSPEC; +} + +static void __attribute__((always_inline)) +toeplitz_hash(__u32 *hash, __u8 *key, __u32 *v, __u8 *data, __u8 data_len) +{ + u_int i, b; + +#pragma unroll + for (i = 0; i < data_len; i++) { +#pragma unroll + for (b = 0; b < 8; b++) { + if (data[i] & (1 << (7 - b))) + *hash ^= *v; + *v <<= 1; + if (key[i + 4] & (1 << (7 - b))) + *v |= 1; + } + } +} + +static int __attribute__((always_inline)) +hash(struct __sk_buff *skb, enum hash_field f) +{ + void *data_end = (void *)(long)skb->data_end; + void *data = (void *)(long)skb->data; + __u16 proto = (__u16)skb->protocol; + __u32 key_idx = INV_KEY_IDX; + __u32 hash = skb->cb[0]; + struct rss_key *rsskey; + __u64 off = ETH_HLEN; + __u8 ip_proto = 0; + __u8 *key = 0; + __u32 v, len; + + rsskey = map_lookup_elem(&map_keys, &key_idx); + if (!rsskey) { + printt("hash(): rss key is not configured\n"); + return TC_ACT_OK; + } + key = (__u8 *)rsskey->key; + + /* Get correct proto for 802.1ad */ + if (skb->vlan_present && skb->vlan_proto == htons(ETH_P_8021AD)) { + if (data + ETH_ALEN * 2 + sizeof(struct vlan_hdr) + + sizeof(proto) > data_end) + return TC_ACT_OK; + proto = *(__u16 *)(data + ETH_ALEN * 2 + + sizeof(struct vlan_hdr)); + off += sizeof(struct vlan_hdr); + } + + if (rsskey->hash_fields & (1 << HASH_FIELD_L2_DST)) { + if (f == HASH_FIELD_L2_DST) { + v = (key[0] << 24) + (key[1] << 16) + (key[2] << 8) + key[3]; + if (data + ETH_ALEN > data_end) + return TC_ACT_OK; + toeplitz_hash(&hash, key, &v, data, ETH_ALEN); + skb->cb[0] = hash; + printt("hash(%d): hash = %x (off = %d)\n", + f, skb->cb[0], 0); + return TC_ACT_PIPE; + } + key += ETH_ALEN; + } + if (rsskey->hash_fields & (1 << HASH_FIELD_L2_SRC)) { + if (f == HASH_FIELD_L2_SRC) { + v = (key[0] << 24) + (key[1] << 16) + (key[2] << 8) + key[3]; + if (data + ETH_ALEN * 2 > data_end) + return TC_ACT_OK; + toeplitz_hash(&hash, key, &v, data + ETH_ALEN, ETH_ALEN); + skb->cb[0] = hash; + printt("hash(%d): hash = %x (off = %d)\n", + f, skb->cb[0], ETH_ALEN); + return TC_ACT_PIPE; + } + key += ETH_ALEN; + } + + if (proto == htons(ETH_P_IP)) { + struct iphdr *ip; + + if (data + off + sizeof(struct iphdr) > data_end) + return TC_ACT_OK; + ip = data + off; + ip_proto = ip->protocol; + + if (rsskey->hash_fields & (1 << HASH_FIELD_L3_SRC)) { + if (f == HASH_FIELD_L3_SRC) { + v = (key[0] << 24) + (key[1] << 16) + + (key[2] << 8) + key[3]; + toeplitz_hash(&hash, key, &v, data + off + + offsetof(struct iphdr, saddr), + sizeof(__u32)); + skb->cb[0] = hash; + printt("hash(%d): hash = %x (off = %d)\n", + f, skb->cb[0], + off + offsetof(struct iphdr, saddr)); + return TC_ACT_PIPE; + } + key += sizeof(__u32); + } + if (rsskey->hash_fields & (1 << HASH_FIELD_L3_DST)) { + if (f == HASH_FIELD_L3_DST) { + v = (key[0] << 24) + (key[1] << 16) + + (key[2] << 8) + key[3]; + toeplitz_hash(&hash, key, &v, data + off + + offsetof(struct iphdr, daddr), + sizeof(__u32)); + skb->cb[0] = hash; + printt("hash(%d): hash = %x (off = %d)\n", + f, skb->cb[0], + off + offsetof(struct iphdr, daddr)); + return TC_ACT_PIPE; + } + key += sizeof(__u32); + } + off += sizeof(struct iphdr); + } else if (proto == htons(ETH_P_IPV6)) { + struct ipv6hdr *ip; + + if (data + off + sizeof(struct ipv6hdr) > data_end) + return TC_ACT_OK; + ip = data + off; + ip_proto = ip->nexthdr; + + if (rsskey->hash_fields & (1 << HASH_FIELD_L3_SRC)) { + if (f == HASH_FIELD_L3_SRC) { + v = (key[0] << 24) + (key[1] << 16) + + (key[2] << 8) + key[3]; + toeplitz_hash(&hash, key, &v, data + off + + offsetof(struct ipv6hdr, saddr), + sizeof(struct in6_addr)); + skb->cb[0] = hash; + printt("hash(%d): hash = %x (off = %d)\n", + f, skb->cb[0], + off + offsetof(struct ipv6hdr, saddr)); + return TC_ACT_PIPE; + } + key += sizeof(struct in6_addr); + } + if (rsskey->hash_fields & (1 << HASH_FIELD_L3_DST)) { + if (f == HASH_FIELD_L3_DST) { + v = (key[0] << 24) + (key[1] << 16) + + (key[2] << 8) + key[3]; + toeplitz_hash(&hash, key, &v, data + off + + offsetof(struct ipv6hdr, daddr), + sizeof(struct in6_addr)); + skb->cb[0] = hash; + printt("hash(%d): hash = %x (off = %d)\n", + f, skb->cb[0], + off + offsetof(struct ipv6hdr, daddr)); + return TC_ACT_PIPE; + } + key += sizeof(struct in6_addr); + } + off += sizeof(struct ipv6hdr); + } else { + /* Unknown protocol: stop hashing there */ + return TC_ACT_PIPE; + } + + /* Unknown ip_proto: stop hashing there */ + if ((ip_proto == IPPROTO_TCP || ip_proto == IPPROTO_UDP) && + (rsskey->hash_fields & (1 << HASH_FIELD_L4_SRC)) && + (f == HASH_FIELD_L4_SRC)) { + v = (key[0] << 24) + (key[1] << 16) + (key[2] << 8) + key[3]; + if (data + off + sizeof(__u16) > data_end) + return TC_ACT_OK; + toeplitz_hash(&hash, key, &v, data + off, + sizeof(__u16)); + skb->cb[0] = hash; + printt("hash(%d): hash = %x (off = %d)\n", + f, skb->cb[0], off); + return TC_ACT_PIPE; + } + + return TC_ACT_PIPE; +} + +#define HASH(L) \ + __section(#L) int \ + L ## _hash(struct __sk_buff *skb) \ + { \ + return hash(skb, HASH_FIELD_ ## L); \ + } + +HASH(L2_DST) + +HASH(L2_SRC) + +HASH(L3_SRC) + +HASH(L3_DST) + +HASH(L4_SRC) + +__section("hash_appending") int +append_hash(struct __sk_buff *skb) +{ + __u32 hash = skb->cb[0]; + + skb_store_bytes(skb, skb->len - sizeof(hash), &hash, sizeof(hash), 0); + + return TC_ACT_PIPE; +} + +__section("queue_setting") int +set_queue(struct __sk_buff *skb) +{ + __u32 key_idx = INV_KEY_IDX; + __u64 hash = skb->cb[0]; + struct rss_key *rsskey; + __u32 queue = 0; + + rsskey = map_lookup_elem(&map_keys, &key_idx); + if (rsskey && rsskey->nb_queues <= TAP_MAX_QUEUES) + queue = rsskey->queues[(hash % rsskey->nb_queues) & + (TAP_MAX_QUEUES - 1)]; + + skb->cb[1] = QUEUE_OFFSET + queue; + + return TC_ACT_RECLASSIFY; +} + +BPF_LICENSE("GPL"); diff --git a/drivers/net/tap/tap_bpf_shared.h b/drivers/net/tap/tap_bpf_shared.h new file mode 100644 index 0000000..6895cf4 --- /dev/null +++ b/drivers/net/tap/tap_bpf_shared.h @@ -0,0 +1,40 @@ +#ifndef __BPF_SHARED__ +#define __BPF_SHARED__ + +#define TAP_MAX_QUEUES 16 + +enum hash_field { + HASH_FIELD_L2_DST, + HASH_FIELD_L2_SRC, + HASH_FIELD_L3_SRC, + HASH_FIELD_L3_DST, + HASH_FIELD_L4_SRC, +}; + +enum { + BPF_MAP_ID_KEY, + BPF_MAP_ID_SIMPLE, +}; + +struct rss_key { + __u32 key[32]; + __u32 hash_fields; + __u32 key_size; + __u32 queues[TAP_MAX_QUEUES]; + __u32 nb_queues; +}; + +int bpf_load_cls_q_insns(__u32 queue_idx); +int bpf_load_tailing_insns(void); +int bpf_load_hash_appending_insns(void); +int bpf_load_queue_setting_insns(__u32 queue_idx); +int bpf_load_l2_src_hash_insns(__u32 key_idx); +int bpf_load_l2_dst_hash_insns(__u32 key_idx); +int bpf_load_l3_dst_hash_insns(__u32 key_idx); +int bpf_load_l3_src_hash_insns(__u32 key_idx); +int bpf_load_l4_src_hash_insns(__u32 key_idx); + +int bpf_load(enum bpf_prog_type type, const struct bpf_insn *insns, + size_t insns_cnt, const char *license, __u32 kern_version); + +#endif /* __BPF_SHARED__ */ diff --git a/drivers/net/tap/tap_flow.c b/drivers/net/tap/tap_flow.c index 43bab7d..355f493 100644 --- a/drivers/net/tap/tap_flow.c +++ b/drivers/net/tap/tap_flow.c @@ -46,6 +46,8 @@ #include #include +#include + #ifndef HAVE_TC_FLOWER /* * For kernels < 4.2, this enum is not defined. Runtime checks will be made to @@ -1673,7 +1675,9 @@ static int rss_enable(struct pmd_internals *pmd) }, }; - bpf_fd = 0; + bpf_fd = bpf_load_cls_q_insns(i); + if (bpf_fd == -1) + return -1; rss_flow = rte_malloc(__func__, sizeof(struct rte_flow), 0); if (!rss_flow) { @@ -1708,6 +1712,11 @@ static int rss_enable(struct pmd_internals *pmd) LIST_INSERT_HEAD(&pmd->rss_flows, rss_flow, next); } + /* Add a rule that adds 4 bytes at packet's end to hold the hash */ + bpf_fd = bpf_load_tailing_insns(); + if (bpf_fd == -1) + return -1; + snprintf(annotation, sizeof(annotation), "%s:[%s]", BPF_PROGRAM, section); rss_flow = rte_malloc(__func__, sizeof(struct rte_flow), 0); -- 2.7.4