/* vim:set ts=2 sw=2 sts=2 et: */
/**
* \author Marcus Holland-Moritz (github@mhxnet.de)
* \copyright Copyright (c) Marcus Holland-Moritz
*
* This file is part of ricepp.
*
* ricepp is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* ricepp is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with ricepp. If not, see .
*/
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
TEST(ricepp, bitstream_basic_test) {
std::vector data;
{
ricepp::bitstream_writer writer(std::back_inserter(data));
writer.write_bits(0x1234567U, 28);
writer.write_bits(UINT64_C(0x123456789abcdef), 60);
writer.write_bit(false, 13);
writer.write_bit(true);
writer.write_bit(true, 200);
writer.write_bit(false, 200);
writer.write_bit(true);
writer.write_bit(false, 136);
writer.write_bit(true);
writer.flush();
}
static_assert(std::contiguous_iterator);
{
ricepp::bitstream_reader reader(data.begin(), data.end());
EXPECT_EQ(0x1234567U, reader.read_bits(28));
EXPECT_EQ(UINT64_C(0x123456789abcdef), reader.read_bits(60));
EXPECT_EQ(13, reader.find_first_set());
EXPECT_EQ(UINT64_C(0x000000FFFFFFFFFF), reader.read_bits(40));
EXPECT_EQ(UINT64_C(0x000000FFFFFFFFFF), reader.read_bits(40));
EXPECT_EQ(UINT64_C(0x000000FFFFFFFFFF), reader.read_bits(40));
EXPECT_EQ(UINT64_C(0x000000FFFFFFFFFF), reader.read_bits(40));
EXPECT_EQ(UINT64_C(0x000000FFFFFFFFFF), reader.read_bits(40));
EXPECT_EQ(200, reader.find_first_set());
EXPECT_EQ(136, reader.find_first_set());
EXPECT_THAT([&] { auto v = reader.read_bits(10); },
testing::Throws());
}
std::list data2{data.begin(), data.end()};
static_assert(!std::contiguous_iterator);
{
ricepp::bitstream_reader reader(data2.begin(), data2.end());
EXPECT_EQ(0x1234567U, reader.read_bits(28));
EXPECT_EQ(UINT64_C(0x123456789abcdef), reader.read_bits(60));
EXPECT_EQ(13, reader.find_first_set());
EXPECT_EQ(UINT64_C(0x000000FFFFFFFFFF), reader.read_bits(40));
EXPECT_EQ(UINT64_C(0x000000FFFFFFFFFF), reader.read_bits(40));
EXPECT_EQ(UINT64_C(0x000000FFFFFFFFFF), reader.read_bits(40));
EXPECT_EQ(UINT64_C(0x000000FFFFFFFFFF), reader.read_bits(40));
EXPECT_EQ(UINT64_C(0x000000FFFFFFFFFF), reader.read_bits(40));
EXPECT_EQ(200, reader.find_first_set());
EXPECT_EQ(136, reader.find_first_set());
EXPECT_THAT([&] { auto v = reader.read_bits(10); },
testing::Throws());
}
}
namespace {
enum class oper {
single,
sequence,
multi,
};
struct opdata {
oper op;
size_t bits;
uint64_t value;
};
constexpr std::array const testdata{{
{oper::sequence, 35, 0},
{oper::multi, 49, UINT64_C(0x191cdb21376eb)},
{oper::multi, 60, UINT64_C(0x4acb8211fbbfae7)},
{oper::multi, 12, UINT64_C(0x52c)},
{oper::multi, 24, UINT64_C(0xddc087)},
{oper::multi, 63, UINT64_C(0x980f711499f16e1)},
{oper::multi, 24, UINT64_C(0x2f96fc)},
{oper::single, 0, 1},
{oper::multi, 46, UINT64_C(0x1e4f1b150d6f)},
{oper::multi, 33, UINT64_C(0x3b1411e4)},
{oper::multi, 14, UINT64_C(0x396)},
{oper::multi, 10, UINT64_C(0x394)},
{oper::single, 0, 0},
{oper::multi, 29, UINT64_C(0x4154151)},
{oper::multi, 60, UINT64_C(0xb5fd3ebbb52080a)},
{oper::multi, 39, UINT64_C(0x6a7c6189ab)},
{oper::multi, 60, UINT64_C(0x6e0fdb65f6556c2)},
{oper::multi, 15, UINT64_C(0x10c1)},
{oper::sequence, 48, 0},
{oper::multi, 30, UINT64_C(0x110cee74)},
{oper::multi, 1, UINT64_C(0x0)},
{oper::single, 0, 1},
{oper::multi, 32, UINT64_C(0x6324e42)},
{oper::multi, 10, UINT64_C(0x332)},
{oper::sequence, 9, 0},
{oper::single, 0, 1},
{oper::single, 0, 1},
{oper::single, 0, 1},
{oper::multi, 60, UINT64_C(0xa3282b479c6d269)},
{oper::multi, 9, UINT64_C(0x11a)},
{oper::sequence, 32, 0},
{oper::multi, 59, UINT64_C(0x66d43ce33679888)},
{oper::multi, 58, UINT64_C(0xb97a2044eae797)},
{oper::sequence, 94, 0},
{oper::multi, 32, UINT64_C(0xbf216187)},
{oper::sequence, 25, 0},
{oper::multi, 56, UINT64_C(0x841cc9b00f4b29)},
{oper::multi, 21, UINT64_C(0x59ae0)},
{oper::multi, 35, UINT64_C(0x5a74161c9)},
{oper::sequence, 62, 0},
{oper::multi, 23, UINT64_C(0x22e195)},
{oper::multi, 12, UINT64_C(0xd6b)},
{oper::multi, 49, UINT64_C(0x1398c67b8b58b)},
{oper::sequence, 25, 0},
{oper::multi, 48, UINT64_C(0xbb9592f60dd3)},
{oper::single, 0, 1},
{oper::multi, 56, UINT64_C(0x2c3f5cefc6725e)},
{oper::single, 0, 1},
{oper::multi, 56, UINT64_C(0x349b52d18e5c62)},
{oper::sequence, 39, 0},
{oper::single, 0, 1},
{oper::sequence, 82, 0},
{oper::sequence, 8, 0},
{oper::multi, 47, UINT64_C(0x8d44c830c7f)},
{oper::multi, 60, UINT64_C(0xad10bc379138423)},
{oper::multi, 1, UINT64_C(0x1)},
{oper::multi, 11, UINT64_C(0x1d0)},
{oper::multi, 21, UINT64_C(0x15ea8b)},
{oper::single, 0, 1},
{oper::single, 0, 1},
{oper::multi, 41, UINT64_C(0x996e592876)},
{oper::multi, 54, UINT64_C(0x23b192ee83a037)},
{oper::sequence, 70, 0},
{oper::single, 0, 1},
{oper::multi, 44, UINT64_C(0x17c63f449ab)},
{oper::multi, 47, UINT64_C(0x41ee16d67e02)},
{oper::multi, 54, UINT64_C(0x33b7be69fa8efd)},
{oper::multi, 7, UINT64_C(0x3a)},
{oper::multi, 57, UINT64_C(0x4eef858776e69a)},
{oper::multi, 49, UINT64_C(0x1dcc8ca3a1147)},
{oper::single, 0, 1},
{oper::multi, 53, UINT64_C(0x13934c81051bb0)},
{oper::multi, 51, UINT64_C(0x46b533890619a)},
{oper::multi, 32, UINT64_C(0x43679cc9)},
{oper::single, 0, 0},
{oper::single, 0, 1},
{oper::sequence, 49, 0},
{oper::multi, 4, UINT64_C(0xa)},
{oper::single, 0, 0},
{oper::multi, 7, UINT64_C(0x40)},
{oper::sequence, 44, 0},
{oper::sequence, 39, 0},
{oper::multi, 64, UINT64_C(0x7cd8900ab162f946)},
{oper::single, 0, 0},
{oper::single, 0, 0},
{oper::multi, 37, UINT64_C(0xabe190150)},
{oper::single, 0, 0},
{oper::sequence, 48, 0},
{oper::single, 0, 1},
{oper::multi, 2, UINT64_C(0x3)},
{oper::multi, 62, UINT64_C(0x12045a0af31e2423)},
{oper::multi, 47, UINT64_C(0x93ace80ef1d)},
{oper::multi, 29, UINT64_C(0xca9f68d)},
{oper::multi, 10, UINT64_C(0x212)},
{oper::multi, 9, UINT64_C(0x7e)},
{oper::multi, 7, UINT64_C(0x59)},
{oper::single, 0, 0},
{oper::multi, 12, UINT64_C(0x650)},
{oper::multi, 9, UINT64_C(0x114)},
{oper::sequence, 98, 0},
{oper::multi, 24, UINT64_C(0x53dde8)},
{oper::multi, 45, UINT64_C(0x1764527e0df)},
{oper::multi, 31, UINT64_C(0xba3843a)},
{oper::sequence, 9, 0},
{oper::single, 0, 0},
{oper::multi, 11, UINT64_C(0x23e)},
{oper::single, 0, 0},
{oper::multi, 55, UINT64_C(0x6d673a69861803)},
{oper::multi, 15, UINT64_C(0x6fd9)},
{oper::multi, 32, UINT64_C(0xa825d0c9)},
{oper::sequence, 8, 0},
{oper::multi, 26, UINT64_C(0x2b01f64)},
{oper::multi, 33, UINT64_C(0x1ff1bedb3)},
{oper::multi, 45, UINT64_C(0x11ca982755a6)},
{oper::multi, 38, UINT64_C(0x308f813291)},
{oper::multi, 64, UINT64_C(0x30dca1960533e446)},
{oper::multi, 26, UINT64_C(0x32832a8)},
{oper::single, 0, 0},
{oper::multi, 43, UINT64_C(0xdf6deb312d)},
{oper::multi, 27, UINT64_C(0x1070d01)},
{oper::multi, 3, UINT64_C(0x3)},
{oper::multi, 7, UINT64_C(0x7e)},
{oper::sequence, 23, 0},
{oper::sequence, 9, 0},
{oper::single, 0, 1},
{oper::multi, 43, UINT64_C(0xaaaf45eb64)},
{oper::single, 0, 0},
{oper::sequence, 99, 0},
{oper::multi, 58, UINT64_C(0x3393b88b289956e)},
{oper::sequence, 97, 0},
{oper::sequence, 2, 0},
{oper::single, 0, 1},
{oper::multi, 31, UINT64_C(0x24007fe)},
{oper::multi, 17, UINT64_C(0x1528f)},
{oper::multi, 20, UINT64_C(0x84e8f)},
{oper::sequence, 69, 0},
{oper::multi, 22, UINT64_C(0x299d)},
{oper::multi, 28, UINT64_C(0xb4f3fe7)},
{oper::multi, 40, UINT64_C(0x778bf93fc9)},
{oper::multi, 10, UINT64_C(0x13b)},
{oper::sequence, 77, 0},
{oper::multi, 1, UINT64_C(0x1)},
{oper::single, 0, 1},
{oper::multi, 48, UINT64_C(0x178e69a42609)},
{oper::multi, 43, UINT64_C(0xd73011c4fb)},
{oper::multi, 44, UINT64_C(0xf2c7f15eefe)},
{oper::multi, 29, UINT64_C(0xb0e98af)},
{oper::sequence, 69, 0},
{oper::multi, 53, UINT64_C(0x1c6cd200bf6093)},
{oper::sequence, 12, 0},
{oper::sequence, 34, 0},
{oper::sequence, 23, 0},
{oper::single, 0, 0},
{oper::multi, 37, UINT64_C(0x1f28a9da93)},
{oper::sequence, 35, 0},
{oper::sequence, 41, 0},
{oper::single, 0, 0},
{oper::multi, 29, UINT64_C(0x9c59310)},
{oper::multi, 4, UINT64_C(0x0)},
{oper::multi, 54, UINT64_C(0x2c6cf00f05e10a)},
{oper::single, 0, 1},
{oper::sequence, 93, 0},
{oper::multi, 58, UINT64_C(0x3a3dc81d5aa59)},
{oper::sequence, 63, 0},
{oper::multi, 16, UINT64_C(0x40e6)},
{oper::sequence, 77, 0},
{oper::multi, 5, UINT64_C(0x1e)},
{oper::multi, 44, UINT64_C(0xfad71ed12bf)},
{oper::multi, 23, UINT64_C(0x52b083)},
{oper::multi, 10, UINT64_C(0x64)},
{oper::multi, 9, UINT64_C(0x1a0)},
{oper::single, 0, 1},
{oper::multi, 21, UINT64_C(0xd3af1)},
{oper::multi, 1, UINT64_C(0x0)},
{oper::multi, 48, UINT64_C(0x4d7a2559ec5d)},
{oper::multi, 56, UINT64_C(0xc1bc767aa8df5)},
{oper::multi, 6, UINT64_C(0x25)},
{oper::multi, 45, UINT64_C(0xd3d038b31ea)},
{oper::sequence, 66, 0},
{oper::multi, 24, UINT64_C(0xfeb51a)},
{oper::multi, 32, UINT64_C(0x79cfb338)},
{oper::multi, 23, UINT64_C(0x493337)},
{oper::sequence, 84, 0},
{oper::multi, 20, UINT64_C(0xcd153)},
{oper::multi, 20, UINT64_C(0xb46e0)},
{oper::multi, 18, UINT64_C(0x16d1c)},
{oper::sequence, 76, 0},
{oper::multi, 50, UINT64_C(0x97806628d511)},
{oper::multi, 33, UINT64_C(0x1488926cd)},
{oper::multi, 23, UINT64_C(0x93411)},
{oper::multi, 33, UINT64_C(0xb9789b8b)},
{oper::multi, 51, UINT64_C(0x690f639e62fb8)},
{oper::sequence, 48, 0},
{oper::multi, 5, UINT64_C(0x16)},
{oper::single, 0, 1},
{oper::sequence, 87, 0},
{oper::multi, 38, UINT64_C(0x1c50c8baf8)},
{oper::multi, 50, UINT64_C(0x282239aef706b)},
{oper::sequence, 17, 0},
{oper::sequence, 37, 0},
{oper::single, 0, 1},
{oper::single, 0, 1},
{oper::multi, 15, UINT64_C(0x16aa)},
{oper::multi, 21, UINT64_C(0x118dd2)},
{oper::sequence, 86, 0},
{oper::sequence, 79, 0},
{oper::multi, 58, UINT64_C(0x2d8cdec0a68b1c6)},
{oper::sequence, 73, 0},
{oper::multi, 28, UINT64_C(0xe008ae)},
{oper::single, 0, 0},
{oper::multi, 48, UINT64_C(0x4dd47248aa1a)},
{oper::single, 0, 1},
{oper::multi, 50, UINT64_C(0x467d1098d766)},
{oper::multi, 50, UINT64_C(0x18f5504e92d4f)},
{oper::multi, 51, UINT64_C(0xf557e804c667)},
{oper::sequence, 44, 0},
{oper::sequence, 37, 0},
{oper::multi, 21, UINT64_C(0x1ff9fa)},
{oper::multi, 19, UINT64_C(0x2fa97)},
{oper::sequence, 43, 0},
{oper::multi, 57, UINT64_C(0x742cfe19db0e66)},
{oper::sequence, 14, 0},
{oper::sequence, 1, 0},
{oper::multi, 56, UINT64_C(0x20160c73bf2827)},
{oper::multi, 59, UINT64_C(0x34c86d5ccf39f56)},
{oper::multi, 10, UINT64_C(0x3d7)},
{oper::multi, 32, UINT64_C(0x6541165e)},
{oper::multi, 25, UINT64_C(0x5200e6)},
{oper::sequence, 71, 0},
{oper::multi, 2, UINT64_C(0x2)},
{oper::multi, 30, UINT64_C(0x6a48066)},
{oper::multi, 34, UINT64_C(0x668a1253)},
{oper::multi, 15, UINT64_C(0x1575)},
{oper::sequence, 1, 0},
{oper::sequence, 72, 0},
{oper::multi, 55, UINT64_C(0x189c6c91bcff2d)},
{oper::multi, 18, UINT64_C(0x3f36f)},
{oper::multi, 9, UINT64_C(0x1af)},
{oper::sequence, 33, 0},
{oper::multi, 30, UINT64_C(0x3f3ed3f9)},
{oper::single, 0, 1},
{oper::sequence, 76, 0},
{oper::multi, 5, UINT64_C(0xa)},
{oper::sequence, 3, 0},
{oper::sequence, 53, 0},
{oper::sequence, 15, 0},
{oper::sequence, 65, 0},
{oper::multi, 7, UINT64_C(0x71)},
{oper::multi, 44, UINT64_C(0xfe4a9bb262a)},
{oper::multi, 23, UINT64_C(0x472d49)},
{oper::multi, 31, UINT64_C(0x737735ae)},
{oper::sequence, 47, 0},
{oper::multi, 21, UINT64_C(0x173eb1)},
{oper::sequence, 12, 0},
{oper::multi, 15, UINT64_C(0x135b)},
{oper::multi, 59, UINT64_C(0x2daa03bcce314ba)},
{oper::multi, 17, UINT64_C(0x1b36a)},
{oper::multi, 23, UINT64_C(0x71f1b9)},
{oper::multi, 38, UINT64_C(0x14a1ac91bc)},
{oper::sequence, 96, 0},
{oper::multi, 46, UINT64_C(0xa63cd4b8e3b)},
{oper::multi, 61, UINT64_C(0x1b94dead1925b347)},
{oper::multi, 56, UINT64_C(0x245fc8cb7535ae)},
{oper::multi, 12, UINT64_C(0xb9c)},
{oper::multi, 43, UINT64_C(0x4347fe58e0c)},
{oper::multi, 35, UINT64_C(0xb4776a3)},
{oper::multi, 53, UINT64_C(0xdb831abf4f8e7)},
{oper::multi, 19, UINT64_C(0x7441f)},
{oper::sequence, 79, 0},
{oper::sequence, 75, 0},
{oper::multi, 31, UINT64_C(0x691fded8)},
{oper::multi, 33, UINT64_C(0x1e1b5782c)},
{oper::single, 0, 1},
{oper::multi, 17, UINT64_C(0x10951)},
{oper::sequence, 4, 0},
{oper::multi, 32, UINT64_C(0xf827d9b9)},
{oper::multi, 35, UINT64_C(0x3647ee9e0)},
{oper::multi, 26, UINT64_C(0x2266eb0)},
{oper::sequence, 10, 0},
{oper::multi, 32, UINT64_C(0x4cc44078)},
{oper::multi, 47, UINT64_C(0x5a43b0caf139)},
{oper::multi, 16, UINT64_C(0xf89e)},
{oper::multi, 7, UINT64_C(0x56)},
{oper::multi, 24, UINT64_C(0x7eb6a)},
{oper::multi, 61, UINT64_C(0xc2b7102a0ea42c0)},
{oper::multi, 33, UINT64_C(0x1fdcbd259)},
{oper::sequence, 2, 0},
{oper::multi, 24, UINT64_C(0xbca9f5)},
{oper::multi, 61, UINT64_C(0xa29e09c1e8fbf0c)},
{oper::multi, 53, UINT64_C(0xe777153067389)},
{oper::sequence, 42, 0},
{oper::sequence, 81, 0},
{oper::multi, 44, UINT64_C(0xc8bbae0f1c8)},
{oper::single, 0, 1},
{oper::single, 0, 1},
{oper::sequence, 52, 0},
{oper::multi, 30, UINT64_C(0x183bf843)},
{oper::multi, 7, UINT64_C(0x34)},
{oper::multi, 32, UINT64_C(0x5976f4ca)},
{oper::multi, 32, UINT64_C(0x77ea9e53)},
{oper::multi, 57, UINT64_C(0x14488ec95374469)},
{oper::multi, 36, UINT64_C(0xae5fdd9c2)},
{oper::multi, 38, UINT64_C(0x2a493c790)},
{oper::multi, 11, UINT64_C(0x224)},
{oper::sequence, 91, 0},
{oper::sequence, 45, 0},
{oper::multi, 55, UINT64_C(0x2fa1b5c5278900)},
{oper::single, 0, 1},
{oper::multi, 24, UINT64_C(0x8cdf7b)},
{oper::sequence, 23, 0},
{oper::sequence, 45, 0},
{oper::multi, 8, UINT64_C(0xf1)},
{oper::sequence, 91, 0},
{oper::multi, 36, UINT64_C(0xa73a42b13)},
{oper::multi, 34, UINT64_C(0x2fe56eec7)},
{oper::multi, 50, UINT64_C(0x10c1093beb659)},
{oper::multi, 5, UINT64_C(0x3)},
{oper::multi, 33, UINT64_C(0xf263af98)},
{oper::multi, 46, UINT64_C(0x12f23a50087e)},
{oper::sequence, 1, 0},
{oper::sequence, 32, 0},
{oper::multi, 27, UINT64_C(0x340b00)},
{oper::multi, 45, UINT64_C(0x16cab4e40293)},
{oper::multi, 52, UINT64_C(0xf0380a85eb9c5)},
{oper::multi, 20, UINT64_C(0xff1e2)},
{oper::single, 0, 1},
{oper::multi, 40, UINT64_C(0x2e885c9029)},
{oper::multi, 9, UINT64_C(0x196)},
{oper::multi, 37, UINT64_C(0x11318c0267)},
{oper::sequence, 58, 0},
{oper::multi, 12, UINT64_C(0xf7c)},
{oper::multi, 29, UINT64_C(0xbbb78dc)},
{oper::sequence, 19, 0},
{oper::single, 0, 1},
{oper::sequence, 0, 0},
{oper::multi, 39, UINT64_C(0x70f0117d66)},
{oper::sequence, 54, 0},
{oper::sequence, 2, 0},
{oper::single, 0, 0},
{oper::sequence, 60, 0},
{oper::multi, 64, UINT64_C(0x81bac8063acee28c)},
{oper::sequence, 0, 0},
{oper::multi, 59, UINT64_C(0xa3361315821594)},
{oper::multi, 20, UINT64_C(0x79c3d)},
{oper::multi, 50, UINT64_C(0x5831a2c37b04)},
{oper::single, 0, 1},
{oper::multi, 49, UINT64_C(0xc088e7cd9a53)},
{oper::multi, 53, UINT64_C(0xefa40ac98f9db)},
{oper::multi, 38, UINT64_C(0x2ab113745c)},
{oper::multi, 40, UINT64_C(0x644bbf4417)},
{oper::multi, 34, UINT64_C(0x24269dd4)},
{oper::multi, 48, UINT64_C(0xccf84199d6a2)},
{oper::multi, 62, UINT64_C(0x19a372e9d6b92559)},
{oper::multi, 62, UINT64_C(0xa9a048c0f617dfb)},
{oper::multi, 15, UINT64_C(0x2230)},
{oper::multi, 45, UINT64_C(0x13c9dcd0c98e)},
{oper::multi, 57, UINT64_C(0x7a15d2f7a735d2)},
{oper::single, 0, 1},
{oper::sequence, 53, 0},
{oper::multi, 38, UINT64_C(0x1e633e5cd2)},
{oper::sequence, 41, 0},
{oper::multi, 50, UINT64_C(0x1736e606b09e6)},
{oper::multi, 33, UINT64_C(0xc8b84e31)},
{oper::multi, 37, UINT64_C(0x1522abcf06)},
{oper::multi, 10, UINT64_C(0x1f9)},
{oper::multi, 1, UINT64_C(0x0)},
{oper::multi, 4, UINT64_C(0x8)},
{oper::multi, 5, UINT64_C(0x18)},
{oper::multi, 58, UINT64_C(0x289907fc1942c82)},
{oper::multi, 47, UINT64_C(0x62746758a2c5)},
{oper::multi, 43, UINT64_C(0x66cc4431c92)},
{oper::sequence, 53, 0},
{oper::multi, 24, UINT64_C(0xff3e28)},
{oper::multi, 1, UINT64_C(0x1)},
{oper::sequence, 9, 0},
{oper::sequence, 99, 0},
{oper::multi, 15, UINT64_C(0x16bf)},
{oper::multi, 51, UINT64_C(0x714559f69449a)},
{oper::multi, 36, UINT64_C(0xce4fe17e6)},
{oper::multi, 21, UINT64_C(0x169a7b)},
{oper::multi, 30, UINT64_C(0x24b33ae9)},
{oper::sequence, 57, 0},
{oper::sequence, 73, 0},
{oper::sequence, 29, 0},
{oper::single, 0, 1},
{oper::single, 0, 1},
{oper::sequence, 3, 0},
{oper::multi, 41, UINT64_C(0x1666fda01c2)},
{oper::single, 0, 0},
{oper::multi, 19, UINT64_C(0x1e67c)},
{oper::multi, 58, UINT64_C(0x2c4c39e9ac75127)},
{oper::sequence, 100, 0},
{oper::sequence, 74, 0},
{oper::sequence, 47, 0},
{oper::sequence, 5, 0},
{oper::multi, 43, UINT64_C(0x72e46324f49)},
{oper::single, 0, 0},
{oper::sequence, 51, 0},
{oper::multi, 20, UINT64_C(0x4f8f0)},
{oper::multi, 30, UINT64_C(0x4a33d7f)},
{oper::sequence, 53, 0},
{oper::multi, 58, UINT64_C(0x2298cb585458976)},
{oper::multi, 27, UINT64_C(0x5fa9a7c)},
{oper::single, 0, 0},
{oper::multi, 13, UINT64_C(0x9b4)},
{oper::single, 0, 0},
{oper::multi, 21, UINT64_C(0xd0da7)},
{oper::multi, 4, UINT64_C(0xf)},
{oper::multi, 32, UINT64_C(0x686f861d)},
{oper::multi, 20, UINT64_C(0x614d6)},
{oper::multi, 7, UINT64_C(0x5b)},
{oper::sequence, 45, 0},
{oper::multi, 22, UINT64_C(0x296d4d)},
{oper::multi, 55, UINT64_C(0x39d11a6231bb54)},
{oper::multi, 59, UINT64_C(0x381d4a9c32512d5)},
{oper::multi, 61, UINT64_C(0x6392bb6c7dc70c3)},
{oper::sequence, 25, 0},
{oper::multi, 21, UINT64_C(0x18180e)},
{oper::multi, 19, UINT64_C(0x3b5ed)},
{oper::multi, 46, UINT64_C(0x25ad0f5388a7)},
{oper::multi, 16, UINT64_C(0xec00)},
{oper::multi, 3, UINT64_C(0x5)},
{oper::multi, 47, UINT64_C(0x249b2f7064c8)},
{oper::multi, 55, UINT64_C(0x1209271636d9c)},
{oper::sequence, 64, 0},
{oper::sequence, 25, 0},
{oper::multi, 51, UINT64_C(0x14a021360804)},
{oper::multi, 59, UINT64_C(0x67e35acf565f63)},
{oper::sequence, 96, 0},
{oper::multi, 15, UINT64_C(0x47fa)},
{oper::multi, 34, UINT64_C(0x17ac1b4fc)},
{oper::multi, 2, UINT64_C(0x3)},
{oper::multi, 2, UINT64_C(0x0)},
{oper::multi, 8, UINT64_C(0x54)},
{oper::multi, 42, UINT64_C(0x8742e95127)},
{oper::single, 0, 0},
{oper::multi, 32, UINT64_C(0xa4797f57)},
{oper::multi, 29, UINT64_C(0x6c8929c)},
{oper::multi, 7, UINT64_C(0x29)},
{oper::single, 0, 0},
{oper::single, 0, 0},
{oper::multi, 8, UINT64_C(0x76)},
{oper::multi, 47, UINT64_C(0x55f75b9cbb4e)},
{oper::multi, 6, UINT64_C(0x3b)},
{oper::multi, 46, UINT64_C(0x26e33220e448)},
{oper::multi, 58, UINT64_C(0x22bafaa4400976e)},
{oper::multi, 41, UINT64_C(0x170559371ad)},
{oper::multi, 14, UINT64_C(0x1361)},
{oper::multi, 26, UINT64_C(0xef6457)},
{oper::sequence, 91, 0},
{oper::multi, 58, UINT64_C(0xc36ed6254fa2af)},
{oper::multi, 55, UINT64_C(0x73295fe4c31f6d)},
{oper::multi, 57, UINT64_C(0xb7b1c1636efa6e)},
{oper::sequence, 47, 0},
{oper::multi, 5, UINT64_C(0xc)},
{oper::multi, 19, UINT64_C(0x124c6)},
{oper::multi, 5, UINT64_C(0x14)},
{oper::sequence, 47, 0},
{oper::sequence, 5, 0},
{oper::sequence, 64, 0},
{oper::multi, 44, UINT64_C(0x612540607d7)},
{oper::multi, 53, UINT64_C(0x9ceafb03b1a4)},
{oper::sequence, 54, 0},
{oper::multi, 24, UINT64_C(0xd8705c)},
{oper::single, 0, 0},
{oper::single, 0, 1},
{oper::multi, 39, UINT64_C(0x5b8fbf270f)},
{oper::multi, 5, UINT64_C(0x1f)},
{oper::sequence, 78, 0},
{oper::single, 0, 0},
{oper::multi, 40, UINT64_C(0x32dda23e1b)},
{oper::sequence, 27, 0},
{oper::sequence, 28, 0},
{oper::multi, 13, UINT64_C(0x10b4)},
{oper::multi, 62, UINT64_C(0x253317219c04df0d)},
{oper::multi, 40, UINT64_C(0x131af9df0a)},
{oper::multi, 11, UINT64_C(0x72c)},
{oper::sequence, 5, 0},
{oper::multi, 42, UINT64_C(0x1fdae853ec2)},
{oper::sequence, 5, 0},
{oper::multi, 23, UINT64_C(0x4eba51)},
{oper::multi, 32, UINT64_C(0x94029a41)},
{oper::multi, 22, UINT64_C(0x7c1f0)},
{oper::multi, 29, UINT64_C(0x15c36b14)},
{oper::multi, 10, UINT64_C(0x9d)},
{oper::multi, 53, UINT64_C(0x1eb606e5789fa1)},
{oper::multi, 54, UINT64_C(0x1e834fc7409d37)},
{oper::multi, 5, UINT64_C(0x1f)},
{oper::single, 0, 0},
{oper::single, 0, 1},
{oper::multi, 33, UINT64_C(0x1092fbf43)},
{oper::multi, 26, UINT64_C(0x530381)},
{oper::multi, 16, UINT64_C(0x6082)},
{oper::multi, 1, UINT64_C(0x0)},
{oper::sequence, 78, 0},
{oper::multi, 7, UINT64_C(0x6b)},
{oper::multi, 19, UINT64_C(0x16e89)},
{oper::multi, 53, UINT64_C(0x43bd4d41b74d7)},
{oper::sequence, 51, 0},
{oper::multi, 62, UINT64_C(0x43b873a0416d5cd)},
{oper::multi, 9, UINT64_C(0x120)},
{oper::multi, 39, UINT64_C(0xd730c0164)},
{oper::multi, 15, UINT64_C(0x27a8)},
{oper::multi, 58, UINT64_C(0x35f0441068d65d6)},
{oper::single, 0, 1},
{oper::single, 0, 0},
{oper::sequence, 58, 0},
{oper::multi, 45, UINT64_C(0x1770a5936446)},
{oper::sequence, 56, 0},
{oper::multi, 20, UINT64_C(0xf58a5)},
{oper::sequence, 84, 0},
{oper::single, 0, 0},
{oper::sequence, 75, 0},
{oper::multi, 60, UINT64_C(0x1f83d44c9a79384)},
{oper::sequence, 71, 0},
{oper::multi, 1, UINT64_C(0x1)},
{oper::multi, 30, UINT64_C(0x22fde129)},
{oper::multi, 13, UINT64_C(0x30c)},
{oper::sequence, 25, 0},
{oper::sequence, 81, 0},
{oper::sequence, 31, 0},
{oper::multi, 50, UINT64_C(0xf6efedaace42)},
{oper::multi, 44, UINT64_C(0xa9269b056c2)},
{oper::multi, 39, UINT64_C(0xd31291893)},
{oper::multi, 41, UINT64_C(0x2dd867ae76)},
{oper::multi, 23, UINT64_C(0x21f95d)},
{oper::multi, 23, UINT64_C(0x245d58)},
{oper::multi, 42, UINT64_C(0x201bc1138ea)},
{oper::sequence, 14, 0},
{oper::sequence, 78, 0},
{oper::single, 0, 0},
{oper::multi, 33, UINT64_C(0x1e7b18528)},
{oper::multi, 44, UINT64_C(0x17ea22a34b2)},
{oper::multi, 30, UINT64_C(0x8387d7)},
{oper::multi, 63, UINT64_C(0x608a51408786aedc)},
{oper::sequence, 41, 0},
{oper::sequence, 6, 0},
{oper::sequence, 70, 0},
{oper::sequence, 100, 0},
{oper::sequence, 78, 0},
{oper::multi, 19, UINT64_C(0x5c5a3)},
{oper::multi, 19, UINT64_C(0x353c8)},
{oper::multi, 11, UINT64_C(0x319)},
{oper::sequence, 35, 0},
{oper::multi, 25, UINT64_C(0x1462a59)},
{oper::sequence, 66, 0},
{oper::multi, 9, UINT64_C(0x16b)},
{oper::multi, 26, UINT64_C(0x2146e04)},
{oper::multi, 16, UINT64_C(0x66ef)},
{oper::sequence, 94, 0},
{oper::multi, 30, UINT64_C(0x325e5828)},
{oper::multi, 51, UINT64_C(0x2e606413379d)},
{oper::multi, 26, UINT64_C(0xa5ecc8)},
{oper::multi, 30, UINT64_C(0xbd1e1db)},
{oper::multi, 58, UINT64_C(0x305154c56bb7e67)},
{oper::single, 0, 0},
{oper::multi, 38, UINT64_C(0x2e33fbeb55)},
{oper::multi, 34, UINT64_C(0x3bdf8ad2b)},
{oper::multi, 59, UINT64_C(0x3994c070a0f3c59)},
{oper::multi, 15, UINT64_C(0x4d07)},
{oper::sequence, 28, 0},
{oper::multi, 44, UINT64_C(0x9ad1a135d6c)},
{oper::multi, 19, UINT64_C(0x34080)},
{oper::multi, 46, UINT64_C(0x2d1264f31fdc)},
{oper::multi, 22, UINT64_C(0x34e85a)},
{oper::single, 0, 0},
{oper::sequence, 97, 0},
{oper::sequence, 27, 0},
{oper::multi, 63, UINT64_C(0xb70c06d6f43d4a5)},
{oper::single, 0, 1},
{oper::multi, 8, UINT64_C(0xf0)},
{oper::single, 0, 0},
{oper::single, 0, 1},
{oper::multi, 17, UINT64_C(0xc1bc)},
{oper::multi, 23, UINT64_C(0x402d47)},
{oper::multi, 56, UINT64_C(0xb26a5bf1722502)},
{oper::multi, 26, UINT64_C(0x3a16935)},
{oper::single, 0, 1},
{oper::sequence, 1, 0},
{oper::multi, 32, UINT64_C(0x35b2f2fc)},
{oper::multi, 13, UINT64_C(0xaf8)},
{oper::sequence, 98, 0},
{oper::multi, 8, UINT64_C(0x2)},
{oper::single, 0, 0},
{oper::single, 0, 0},
{oper::single, 0, 1},
{oper::multi, 53, UINT64_C(0xbc4f9faa1d3bc)},
{oper::multi, 44, UINT64_C(0x400a6b64e7d)},
{oper::multi, 33, UINT64_C(0xcdff4f78)},
{oper::multi, 50, UINT64_C(0x27065c6cb2cd)},
{oper::multi, 3, UINT64_C(0x6)},
{oper::multi, 23, UINT64_C(0x149bf0)},
{oper::multi, 38, UINT64_C(0x250031e56f)},
{oper::single, 0, 1},
{oper::multi, 2, UINT64_C(0x2)},
{oper::sequence, 11, 0},
{oper::multi, 37, UINT64_C(0x1bb0c44a15)},
{oper::multi, 37, UINT64_C(0x169268ea35)},
{oper::sequence, 62, 0},
{oper::sequence, 16, 0},
{oper::multi, 26, UINT64_C(0xa2226e)},
{oper::sequence, 46, 0},
{oper::multi, 15, UINT64_C(0x4fd3)},
{oper::multi, 21, UINT64_C(0x1741e0)},
{oper::single, 0, 1},
{oper::single, 0, 1},
{oper::multi, 53, UINT64_C(0x122cd0ef2741df)},
{oper::multi, 35, UINT64_C(0x7e74e00d0)},
{oper::multi, 64, UINT64_C(0xf88f062eb31ad106)},
{oper::multi, 21, UINT64_C(0x1983cd)},
{oper::single, 0, 1},
{oper::sequence, 97, 0},
{oper::multi, 31, UINT64_C(0x16eeab09)},
{oper::sequence, 32, 0},
{oper::multi, 20, UINT64_C(0xc3860)},
{oper::sequence, 17, 0},
{oper::multi, 25, UINT64_C(0xa32b91)},
{oper::multi, 36, UINT64_C(0xd7efe67e0)},
{oper::multi, 7, UINT64_C(0x5f)},
{oper::multi, 60, UINT64_C(0xdee8a7cec010813)},
{oper::sequence, 88, 0},
{oper::multi, 6, UINT64_C(0x24)},
{oper::multi, 62, UINT64_C(0x10014bcee0f961c1)},
{oper::sequence, 72, 0},
{oper::sequence, 87, 0},
{oper::multi, 56, UINT64_C(0x467ce768045112)},
{oper::sequence, 87, 0},
{oper::multi, 61, UINT64_C(0x10203c202d75dd6f)},
{oper::multi, 25, UINT64_C(0x1839472)},
{oper::multi, 31, UINT64_C(0x50749e58)},
{oper::single, 0, 1},
{oper::multi, 62, UINT64_C(0x23c2f2e98975f0bb)},
{oper::multi, 49, UINT64_C(0x2138878f302f)},
{oper::sequence, 90, 0},
{oper::multi, 58, UINT64_C(0x34c445b95f6d4e0)},
{oper::multi, 28, UINT64_C(0xb8ea069)},
{oper::multi, 4, UINT64_C(0x8)},
{oper::multi, 46, UINT64_C(0x8893ce9cdd5)},
{oper::single, 0, 1},
{oper::multi, 61, UINT64_C(0xb2d768d0fd9232d)},
{oper::multi, 47, UINT64_C(0x5ff077473869)},
{oper::single, 0, 1},
{oper::multi, 56, UINT64_C(0xccd42149dd851)},
{oper::multi, 11, UINT64_C(0xc7)},
{oper::sequence, 76, 0},
{oper::multi, 41, UINT64_C(0xdfccacf7a3)},
{oper::multi, 2, UINT64_C(0x1)},
{oper::multi, 4, UINT64_C(0x5)},
{oper::sequence, 63, 0},
{oper::sequence, 69, 0},
{oper::multi, 8, UINT64_C(0x87)},
{oper::multi, 49, UINT64_C(0xb26e8a269e0f)},
{oper::sequence, 9, 0},
{oper::multi, 21, UINT64_C(0xf472b)},
{oper::multi, 39, UINT64_C(0x19e53e8f41)},
{oper::multi, 49, UINT64_C(0x35dca7969fc1)},
{oper::multi, 34, UINT64_C(0x318c868fe)},
{oper::single, 0, 1},
{oper::multi, 30, UINT64_C(0x1f864d30)},
{oper::multi, 16, UINT64_C(0x52bc)},
{oper::sequence, 78, 0},
{oper::multi, 16, UINT64_C(0xac08)},
{oper::multi, 49, UINT64_C(0x112339394f1ed)},
{oper::multi, 35, UINT64_C(0x30db872d)},
{oper::multi, 3, UINT64_C(0x6)},
{oper::multi, 40, UINT64_C(0xb69266052f)},
{oper::sequence, 25, 0},
{oper::sequence, 33, 0},
{oper::single, 0, 0},
{oper::multi, 29, UINT64_C(0x1069ce7)},
{oper::multi, 24, UINT64_C(0x8f97e3)},
{oper::sequence, 40, 0},
{oper::sequence, 40, 0},
{oper::single, 0, 0},
{oper::multi, 53, UINT64_C(0x43dcc77b5d515)},
{oper::multi, 16, UINT64_C(0xebc4)},
{oper::sequence, 19, 0},
{oper::multi, 13, UINT64_C(0x1d0)},
{oper::multi, 60, UINT64_C(0x8b64f391c940a7d)},
{oper::sequence, 41, 0},
{oper::multi, 6, UINT64_C(0x3a)},
{oper::multi, 16, UINT64_C(0x7a61)},
{oper::multi, 53, UINT64_C(0x6f7c515913ab5)},
{oper::multi, 9, UINT64_C(0x184)},
{oper::multi, 52, UINT64_C(0x433e21b71351e)},
{oper::multi, 63, UINT64_C(0x5b80143f8d7c3f17)},
{oper::sequence, 43, 0},
{oper::multi, 39, UINT64_C(0x3b6c625389)},
{oper::multi, 7, UINT64_C(0x53)},
{oper::sequence, 60, 0},
{oper::sequence, 11, 0},
{oper::sequence, 40, 0},
{oper::multi, 51, UINT64_C(0x7006837f0e7bb)},
{oper::multi, 4, UINT64_C(0x5)},
{oper::multi, 44, UINT64_C(0x1532e7e8973)},
{oper::single, 0, 1},
{oper::multi, 56, UINT64_C(0x18c64e3b8e01fa)},
{oper::sequence, 59, 0},
{oper::sequence, 81, 0},
{oper::single, 0, 0},
{oper::multi, 6, UINT64_C(0xb)},
{oper::sequence, 62, 0},
{oper::single, 0, 0},
{oper::multi, 46, UINT64_C(0xb0004e00a4)},
{oper::multi, 3, UINT64_C(0x7)},
{oper::multi, 46, UINT64_C(0x16016baf7694)},
{oper::multi, 7, UINT64_C(0x3a)},
{oper::multi, 29, UINT64_C(0xe9e2ee1)},
{oper::single, 0, 0},
{oper::multi, 25, UINT64_C(0x61c40d)},
{oper::sequence, 81, 0},
{oper::multi, 40, UINT64_C(0x2e52a5edf8)},
{oper::sequence, 39, 0},
{oper::multi, 31, UINT64_C(0xaedd8ff)},
{oper::sequence, 81, 0},
{oper::sequence, 67, 0},
{oper::multi, 26, UINT64_C(0x1a34a73)},
{oper::multi, 13, UINT64_C(0x1cb0)},
{oper::multi, 20, UINT64_C(0xa0531)},
{oper::sequence, 13, 0},
{oper::sequence, 56, 0},
{oper::multi, 25, UINT64_C(0x1e268be)},
{oper::sequence, 7, 0},
{oper::multi, 17, UINT64_C(0xa2f8)},
{oper::multi, 51, UINT64_C(0x427c53882c260)},
{oper::multi, 51, UINT64_C(0x14bc36aaf0226)},
{oper::sequence, 11, 0},
{oper::sequence, 96, 0},
{oper::multi, 15, UINT64_C(0x7e07)},
{oper::multi, 24, UINT64_C(0x4dff7d)},
{oper::sequence, 36, 0},
{oper::sequence, 79, 0},
{oper::multi, 10, UINT64_C(0x2a2)},
{oper::multi, 13, UINT64_C(0x799)},
{oper::multi, 43, UINT64_C(0x1d57c21bcd0)},
{oper::multi, 54, UINT64_C(0x2c3e69ded4dae0)},
{oper::multi, 39, UINT64_C(0x750cc111f3)},
{oper::sequence, 31, 0},
{oper::multi, 31, UINT64_C(0x197d5ce2)},
{oper::sequence, 58, 0},
{oper::multi, 9, UINT64_C(0x61)},
{oper::multi, 61, UINT64_C(0x144fa70cac90cf93)},
{oper::sequence, 2, 0},
{oper::multi, 20, UINT64_C(0xa3471)},
{oper::multi, 11, UINT64_C(0x5a6)},
{oper::sequence, 38, 0},
{oper::sequence, 70, 0},
{oper::multi, 48, UINT64_C(0x9166e5c53e89)},
{oper::multi, 54, UINT64_C(0x196059c0bd069c)},
{oper::sequence, 83, 0},
{oper::sequence, 49, 0},
{oper::sequence, 58, 0},
{oper::sequence, 34, 0},
{oper::sequence, 21, 0},
{oper::sequence, 61, 0},
{oper::multi, 53, UINT64_C(0x4afb81e236064)},
{oper::sequence, 90, 0},
{oper::sequence, 82, 0},
{oper::multi, 51, UINT64_C(0x1b58258d2cbbf)},
{oper::sequence, 44, 0},
{oper::multi, 35, UINT64_C(0x256835a03)},
{oper::multi, 49, UINT64_C(0x121be5be49f31)},
{oper::multi, 51, UINT64_C(0x368a62cc826d9)},
{oper::multi, 9, UINT64_C(0xf8)},
{oper::multi, 64, UINT64_C(0x69a2f807beb682c0)},
{oper::sequence, 97, 0},
{oper::multi, 23, UINT64_C(0x6916d5)},
{oper::multi, 9, UINT64_C(0x62)},
{oper::multi, 22, UINT64_C(0x3e699e)},
{oper::multi, 64, UINT64_C(0x4eee41f1ec375c7d)},
{oper::sequence, 19, 0},
{oper::sequence, 56, 0},
{oper::sequence, 87, 0},
{oper::sequence, 52, 0},
{oper::multi, 1, UINT64_C(0x0)},
{oper::multi, 40, UINT64_C(0x94849e3975)},
{oper::multi, 41, UINT64_C(0x167f1563eb8)},
{oper::sequence, 29, 0},
{oper::multi, 27, UINT64_C(0x2325c52)},
{oper::multi, 35, UINT64_C(0x3f5807c9f)},
{oper::multi, 8, UINT64_C(0x2f)},
{oper::single, 0, 1},
{oper::multi, 38, UINT64_C(0x11f689a9ec)},
{oper::sequence, 52, 0},
{oper::sequence, 91, 0},
{oper::multi, 64, UINT64_C(0xe8bf6e8ad6c72d55)},
{oper::multi, 61, UINT64_C(0x1996b0c58a80665b)},
{oper::sequence, 42, 0},
{oper::sequence, 41, 0},
{oper::multi, 27, UINT64_C(0x26db9c6)},
{oper::sequence, 99, 0},
{oper::multi, 59, UINT64_C(0x2b2c0647b60bf0a)},
{oper::sequence, 1, 0},
{oper::multi, 2, UINT64_C(0x3)},
{oper::single, 0, 1},
{oper::multi, 15, UINT64_C(0x7968)},
{oper::sequence, 67, 0},
{oper::multi, 19, UINT64_C(0x3f770)},
{oper::multi, 52, UINT64_C(0x3df381d86e766)},
{oper::multi, 64, UINT64_C(0x3e01f22b3efe0a27)},
{oper::sequence, 78, 0},
{oper::multi, 7, UINT64_C(0x71)},
{oper::single, 0, 0},
{oper::multi, 35, UINT64_C(0x4972e5f4e)},
{oper::multi, 3, UINT64_C(0x2)},
{oper::multi, 4, UINT64_C(0xc)},
{oper::sequence, 86, 0},
{oper::sequence, 86, 0},
{oper::sequence, 18, 0},
{oper::single, 0, 1},
{oper::multi, 7, UINT64_C(0x5d)},
{oper::multi, 54, UINT64_C(0x3ecfae07ec364b)},
{oper::sequence, 71, 0},
{oper::multi, 18, UINT64_C(0x25c8e)},
{oper::multi, 54, UINT64_C(0x1624ba0683b28d)},
{oper::multi, 8, UINT64_C(0x71)},
{oper::multi, 9, UINT64_C(0x141)},
{oper::sequence, 68, 0},
{oper::sequence, 59, 0},
{oper::multi, 42, UINT64_C(0x1b28eeff58a)},
{oper::multi, 49, UINT64_C(0x3674eb015526)},
{oper::multi, 49, UINT64_C(0x1339fa64d93a8)},
{oper::multi, 42, UINT64_C(0x39641ec1c1)},
{oper::multi, 41, UINT64_C(0x13c411058e4)},
{oper::multi, 33, UINT64_C(0x18e10aac6)},
{oper::single, 0, 1},
{oper::sequence, 13, 0},
{oper::multi, 37, UINT64_C(0x17fc99ed1)},
{oper::multi, 50, UINT64_C(0x36f26af709301)},
{oper::sequence, 67, 0},
{oper::sequence, 13, 0},
{oper::single, 0, 1},
{oper::single, 0, 0},
{oper::multi, 45, UINT64_C(0x70b10f8083c)},
{oper::multi, 49, UINT64_C(0x16719fc3acbec)},
{oper::sequence, 17, 0},
{oper::multi, 18, UINT64_C(0x1e2e8)},
{oper::multi, 21, UINT64_C(0x15ddcd)},
{oper::multi, 10, UINT64_C(0x3b)},
{oper::sequence, 24, 0},
{oper::multi, 5, UINT64_C(0x8)},
{oper::multi, 48, UINT64_C(0x3a88c112e383)},
{oper::sequence, 52, 0},
{oper::multi, 54, UINT64_C(0x4ed94b5e92596)},
{oper::sequence, 45, 0},
{oper::multi, 17, UINT64_C(0x1ff10)},
{oper::sequence, 59, 0},
{oper::multi, 40, UINT64_C(0xc24b5e943)},
{oper::sequence, 41, 0},
{oper::sequence, 75, 0},
{oper::multi, 16, UINT64_C(0x85b)},
{oper::single, 0, 1},
{oper::sequence, 73, 0},
{oper::sequence, 88, 0},
{oper::multi, 41, UINT64_C(0x1b8e83e24f2)},
{oper::sequence, 86, 0},
{oper::multi, 8, UINT64_C(0x18)},
{oper::sequence, 58, 0},
{oper::single, 0, 1},
{oper::sequence, 39, 0},
{oper::multi, 15, UINT64_C(0x4783)},
{oper::multi, 40, UINT64_C(0x646373a2b0)},
{oper::multi, 20, UINT64_C(0xfd518)},
{oper::single, 0, 1},
{oper::multi, 49, UINT64_C(0x11c37a3b2d06a)},
{oper::sequence, 0, 0},
{oper::multi, 34, UINT64_C(0x1a8c5efef)},
{oper::multi, 31, UINT64_C(0x141920e3)},
{oper::sequence, 11, 0},
{oper::multi, 16, UINT64_C(0x7db9)},
{oper::sequence, 75, 0},
{oper::sequence, 20, 0},
{oper::multi, 4, UINT64_C(0x0)},
{oper::single, 0, 1},
{oper::single, 0, 0},
{oper::multi, 17, UINT64_C(0x7f03)},
{oper::sequence, 72, 0},
{oper::sequence, 18, 0},
{oper::sequence, 30, 0},
{oper::multi, 8, UINT64_C(0x3b)},
{oper::single, 0, 0},
{oper::multi, 31, UINT64_C(0x364022f3)},
{oper::sequence, 43, 0},
{oper::sequence, 74, 0},
{oper::multi, 26, UINT64_C(0x2803d1c)},
{oper::sequence, 50, 0},
{oper::multi, 3, UINT64_C(0x4)},
{oper::multi, 54, UINT64_C(0x1211fd8bcbc6cb)},
{oper::multi, 33, UINT64_C(0x2fff822)},
{oper::sequence, 9, 0},
{oper::multi, 45, UINT64_C(0x3fe5d84f6d2)},
{oper::multi, 5, UINT64_C(0xd)},
{oper::sequence, 41, 0},
{oper::multi, 14, UINT64_C(0x17ab)},
{oper::multi, 5, UINT64_C(0xb)},
{oper::sequence, 55, 0},
{oper::sequence, 6, 0},
{oper::multi, 45, UINT64_C(0x12041bc1fa4b)},
{oper::multi, 53, UINT64_C(0x33ed00fbfb754)},
{oper::sequence, 62, 0},
{oper::single, 0, 1},
{oper::sequence, 39, 0},
{oper::sequence, 48, 0},
{oper::multi, 37, UINT64_C(0x14393caecb)},
{oper::sequence, 2, 0},
{oper::multi, 12, UINT64_C(0xd)},
{oper::multi, 13, UINT64_C(0x1ef6)},
{oper::multi, 49, UINT64_C(0x240e412bb03)},
{oper::multi, 54, UINT64_C(0x3064c5f90fc0e8)},
{oper::multi, 31, UINT64_C(0x4db288ee)},
{oper::sequence, 100, 0},
{oper::multi, 24, UINT64_C(0x4c7ec5)},
{oper::single, 0, 0},
{oper::multi, 56, UINT64_C(0x367e1c4087033b)},
{oper::sequence, 60, 0},
{oper::sequence, 29, 0},
{oper::multi, 16, UINT64_C(0x844)},
{oper::single, 0, 1},
{oper::multi, 46, UINT64_C(0x30b319b7d1d1)},
{oper::single, 0, 1},
{oper::sequence, 57, 0},
{oper::multi, 37, UINT64_C(0x1f7432ee01)},
{oper::multi, 7, UINT64_C(0x3f)},
{oper::sequence, 20, 0},
{oper::multi, 45, UINT64_C(0x15f2959951e6)},
{oper::multi, 27, UINT64_C(0x16170fc)},
{oper::multi, 14, UINT64_C(0x2d72)},
{oper::multi, 37, UINT64_C(0x124b2f5695)},
{oper::multi, 19, UINT64_C(0x325fa)},
{oper::multi, 7, UINT64_C(0xd)},
{oper::single, 0, 0},
{oper::multi, 6, UINT64_C(0xd)},
{oper::sequence, 38, 0},
{oper::sequence, 74, 0},
{oper::multi, 29, UINT64_C(0x7b3c0a5)},
{oper::multi, 38, UINT64_C(0x3e6cfcb0c5)},
{oper::multi, 48, UINT64_C(0x39c9eca918cc)},
{oper::multi, 60, UINT64_C(0xe41734e82096a4d)},
{oper::sequence, 60, 0},
{oper::single, 0, 1},
{oper::sequence, 29, 0},
{oper::multi, 43, UINT64_C(0x63d53597661)},
{oper::multi, 13, UINT64_C(0xf9f)},
{oper::multi, 35, UINT64_C(0x359b06c21)},
{oper::multi, 6, UINT64_C(0xb)},
{oper::multi, 1, UINT64_C(0x0)},
{oper::sequence, 61, 0},
{oper::sequence, 81, 0},
{oper::multi, 40, UINT64_C(0xdc4d1d7882)},
{oper::multi, 27, UINT64_C(0x47a3a0c)},
{oper::multi, 16, UINT64_C(0x7142)},
{oper::sequence, 96, 0},
{oper::multi, 13, UINT64_C(0x1306)},
{oper::multi, 46, UINT64_C(0x37ecfb45b451)},
{oper::multi, 25, UINT64_C(0x90e162)},
{oper::multi, 37, UINT64_C(0x14f9288b38)},
{oper::multi, 15, UINT64_C(0x1f82)},
{oper::multi, 55, UINT64_C(0x1b0aec288c97a5)},
{oper::sequence, 80, 0},
{oper::multi, 20, UINT64_C(0x37c04)},
{oper::multi, 17, UINT64_C(0x10b1f)},
{oper::multi, 38, UINT64_C(0x275f12b37)},
{oper::multi, 60, UINT64_C(0x27cec155b3a8b24)},
{oper::multi, 39, UINT64_C(0x52aa8ebf1)},
{oper::sequence, 58, 0},
{oper::single, 0, 0},
{oper::multi, 64, UINT64_C(0x2d47b3656f530b3f)},
{oper::sequence, 98, 0},
{oper::single, 0, 0},
{oper::multi, 3, UINT64_C(0x2)},
{oper::sequence, 1, 0},
{oper::sequence, 18, 0},
{oper::sequence, 19, 0},
{oper::multi, 20, UINT64_C(0xb5485)},
{oper::multi, 51, UINT64_C(0xe341218da9f5)},
{oper::multi, 1, UINT64_C(0x0)},
{oper::multi, 11, UINT64_C(0x12)},
{oper::multi, 58, UINT64_C(0x2582da46d0daf58)},
{oper::multi, 35, UINT64_C(0x1120929eb)},
{oper::multi, 50, UINT64_C(0x1f6a03a695af7)},
{oper::multi, 28, UINT64_C(0xc33c823)},
{oper::multi, 56, UINT64_C(0x6a8d0d40bb7ad1)},
{oper::sequence, 72, 0},
{oper::multi, 56, UINT64_C(0xa00b808bf4bf38)},
{oper::multi, 28, UINT64_C(0x9c15b5d)},
{oper::sequence, 45, 0},
{oper::multi, 2, UINT64_C(0x1)},
{oper::multi, 28, UINT64_C(0xd22be85)},
{oper::multi, 63, UINT64_C(0x30ba7237f707c3b1)},
{oper::multi, 6, UINT64_C(0x8)},
{oper::multi, 16, UINT64_C(0xb241)},
{oper::multi, 37, UINT64_C(0x1c1a2df9f0)},
{oper::sequence, 99, 0},
{oper::multi, 31, UINT64_C(0x54713449)},
{oper::sequence, 22, 0},
{oper::multi, 24, UINT64_C(0xef4afd)},
{oper::single, 0, 0},
{oper::multi, 48, UINT64_C(0x439e8bf93a88)},
{oper::single, 0, 0},
{oper::multi, 43, UINT64_C(0x2dbdfdd4433)},
}};
constexpr std::array const expected_bitstream{{
0x00, 0x00, 0x00, 0x00, 0xb8, 0x6e, 0x37, 0x21, 0xdb, 0x1c, 0xf9, 0x5c,
0x7f, 0xf7, 0x23, 0x04, 0x97, 0x95, 0x58, 0xea, 0x10, 0xb8, 0x3b, 0xdc,
0xe2, 0x33, 0x29, 0xe2, 0x1e, 0x30, 0xc1, 0x6f, 0xf9, 0xf2, 0xad, 0xa1,
0x62, 0xe3, 0xc9, 0x23, 0x8f, 0xa0, 0xd8, 0x61, 0x39, 0x50, 0x2e, 0x2a,
0xa8, 0x82, 0x28, 0x20, 0x48, 0xed, 0xae, 0x4f, 0x7f, 0xed, 0x6a, 0x62,
0x18, 0x9f, 0x5a, 0xd8, 0xaa, 0xec, 0xcb, 0xb6, 0x1f, 0xdc, 0x82, 0x21,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe9, 0xdc, 0x19, 0x22, 0x85, 0x9c,
0x64, 0x0c, 0x64, 0x06, 0xf0, 0x69, 0xd2, 0xc6, 0x79, 0xb4, 0x82, 0x32,
0xaa, 0x11, 0x00, 0x00, 0x00, 0x20, 0x22, 0xe6, 0xd9, 0x8c, 0xf3, 0x50,
0x9b, 0x2f, 0xcf, 0xd5, 0x89, 0x40, 0xf4, 0x72, 0x01, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1e, 0x86, 0x85, 0xfc,
0x02, 0x00, 0x00, 0x98, 0xb2, 0xf4, 0x00, 0x9b, 0xcc, 0x41, 0x08, 0xae,
0x59, 0x92, 0xc3, 0x82, 0x4e, 0x0b, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0xac, 0x0c, 0x17, 0xad, 0xf5, 0x62, 0x2d, 0xee, 0x19, 0x63, 0x4e,
0x00, 0x00, 0x00, 0xa7, 0x1b, 0xec, 0x25, 0x2b, 0x77, 0x7b, 0xc9, 0x19,
0xbf, 0x73, 0xfd, 0xb0, 0x14, 0xe3, 0x72, 0x8c, 0x96, 0xda, 0xa4, 0x01,
0x00, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x40, 0x80, 0x7f, 0x0c, 0x83, 0x4c, 0xd4, 0x88, 0x11, 0xc2,
0x89, 0xbc, 0xe1, 0x85, 0x68, 0x0d, 0x9d, 0x45, 0xf5, 0xba, 0x1d, 0x4a,
0x96, 0x5b, 0xa6, 0x1b, 0xd0, 0x41, 0x77, 0xc9, 0xd8, 0x11, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x78, 0x35, 0x89, 0x7e, 0x8c, 0x2f,
0x04, 0xfc, 0xac, 0x2d, 0xdc, 0x83, 0xfd, 0x8e, 0xfa, 0x69, 0xbe, 0xb7,
0xb3, 0x4e, 0xd3, 0xdc, 0xee, 0xb0, 0xf0, 0xdd, 0xc9, 0x51, 0x84, 0x8e,
0x32, 0x32, 0xf7, 0xb0, 0x1b, 0x05, 0x81, 0x4c, 0x93, 0x53, 0x33, 0x0c,
0x12, 0x67, 0x6a, 0x8d, 0xc9, 0x9c, 0x67, 0x43, 0x02, 0x00, 0x00, 0x00,
0x00, 0x00, 0xa8, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00,
0x00, 0x00, 0xd0, 0x28, 0x5f, 0x2c, 0x56, 0x01, 0x12, 0x9b, 0x0f, 0xa8,
0x80, 0x0c, 0x5f, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe0, 0x47, 0x48,
0x3c, 0xe6, 0x15, 0xb4, 0x08, 0xa4, 0x8e, 0x77, 0x40, 0x67, 0x9d, 0x44,
0xa3, 0x7d, 0x2a, 0x93, 0xd0, 0x4f, 0x16, 0x94, 0x51, 0x04, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x7a, 0xf7,
0xd4, 0x37, 0xf8, 0x49, 0x91, 0x5d, 0xd0, 0x21, 0x1c, 0x5d, 0x00, 0xc8,
0x47, 0x06, 0x30, 0x0c, 0xd3, 0x74, 0xce, 0xda, 0xd9, 0xef, 0x64, 0xe8,
0x12, 0x54, 0x80, 0x64, 0x1f, 0xb0, 0xce, 0xb6, 0x6f, 0xfc, 0x37, 0xad,
0x3a, 0xc1, 0x54, 0x8e, 0x91, 0x32, 0x81, 0x8f, 0xb0, 0x11, 0xf9, 0x4c,
0x81, 0x65, 0x28, 0x37, 0x0c, 0xaa, 0x0c, 0xca, 0x5a, 0x62, 0xd6, 0xdb,
0xbe, 0x11, 0xd0, 0x70, 0x90, 0xf9, 0x01, 0x00, 0x00, 0x01, 0x4c, 0xb6,
0x5e, 0xf4, 0xaa, 0x0a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0xe8, 0x56, 0x99, 0x28, 0x8b, 0xb8, 0x93, 0x33,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80,
0xec, 0x7f, 0x00, 0x24, 0x78, 0x94, 0xfa, 0xe8, 0x84, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x60, 0x67, 0x0a, 0x70, 0xfe, 0xf3, 0xb4,
0xc9, 0x3f, 0xf9, 0x8b, 0x77, 0x3b, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x80, 0x27, 0x98, 0x90, 0xa6, 0x39, 0x5e, 0xec, 0x13,
0x47, 0xc0, 0x5c, 0xc3, 0xdf, 0xbd, 0xe2, 0x8f, 0xe5, 0x5f, 0x31, 0x1d,
0x16, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x09, 0xf6,
0x0b, 0x20, 0xcd, 0xc6, 0x01, 0x20, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00,
0x00, 0x4d, 0x6a, 0xa7, 0xa2, 0x7c, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00,
0x00, 0x00, 0x00, 0x10, 0xc4, 0x64, 0x71, 0x02, 0x85, 0xf0, 0x82, 0x07,
0x78, 0x36, 0x36, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x98, 0xa5, 0x5a, 0x1d, 0xc8, 0x3d, 0x3a, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0xa0, 0x39, 0x10, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0xe8, 0x7f, 0x25, 0xda, 0xe3, 0x5a, 0x7f,
0x10, 0x56, 0x4a, 0x06, 0xe8, 0xf1, 0x3a, 0x4d, 0x17, 0x7b, 0x56, 0x89,
0x5e, 0x53, 0x7d, 0xa3, 0xea, 0xd9, 0xf1, 0x06, 0x43, 0xa9, 0x1e, 0xb3,
0x38, 0xd0, 0xd3, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xa8,
0x51, 0xeb, 0x8f, 0x33, 0xfb, 0x9c, 0x77, 0x33, 0x93, 0x04, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x53, 0xd1, 0x0c, 0x6e,
0xb4, 0x1c, 0x6d, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0xc0, 0x88, 0x6a, 0x14, 0x33, 0xc0, 0x4b, 0x9a, 0x4d, 0x12, 0x91, 0x46,
0xd0, 0x24, 0x16, 0x37, 0xf1, 0x72, 0xe1, 0xbe, 0x98, 0xe7, 0xd8, 0x43,
0x1a, 0x00, 0x00, 0x00, 0x00, 0x00, 0xa0, 0x0d, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x88, 0xaf, 0x8b, 0x0c, 0xc5, 0xad,
0xc1, 0xbd, 0x6b, 0x8e, 0x08, 0x0a, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00,
0xb8, 0xaa, 0x45, 0xba, 0x31, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x8d, 0x63, 0xd1, 0x14, 0xd8, 0x9b, 0xb1, 0x05, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xd0, 0x15, 0x01, 0x1c, 0x68, 0xa8,
0x22, 0xc9, 0x51, 0x37, 0x35, 0xbb, 0xc6, 0x84, 0xe8, 0x33, 0xe2, 0xa9,
0x25, 0x9d, 0xa0, 0xea, 0xb1, 0x33, 0x63, 0x02, 0xf4, 0xab, 0x7a, 0x00,
0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x00, 0x50, 0x3f, 0xff,
0x5f, 0xea, 0x0b, 0x00, 0x00, 0x00, 0x00, 0x00, 0xcd, 0x1c, 0xb6, 0x33,
0xfc, 0x59, 0xe8, 0x00, 0x00, 0x3d, 0x41, 0xf9, 0x9d, 0x63, 0xb0, 0x00,
0xb1, 0xfa, 0x9c, 0x67, 0xae, 0x36, 0x64, 0xda, 0xf5, 0x5e, 0x16, 0x41,
0x65, 0xe6, 0x00, 0x52, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x35, 0x03, 0x24, 0x35, 0xa6, 0x24, 0x14, 0xcd, 0xa8, 0xab, 0x08,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xb0, 0xe5, 0x9f, 0x37,
0x92, 0x8d, 0x13, 0xf3, 0x36, 0xff, 0x6b, 0x00, 0x00, 0x00, 0x00, 0xf3,
0xa7, 0x7d, 0xfe, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x50, 0x21, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x08, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x60, 0x5c, 0xc5, 0x64, 0x37, 0x95,
0xfc, 0x93, 0x5a, 0x8e, 0xae, 0x35, 0x77, 0x73, 0x00, 0x00, 0x00, 0x00,
0x00, 0xc0, 0x58, 0x9f, 0x0b, 0x00, 0xb7, 0x26, 0xba, 0x14, 0xe3, 0xcc,
0x3b, 0xa0, 0xda, 0x52, 0x9b, 0x9d, 0x1b, 0x1f, 0xe7, 0x8d, 0x64, 0x0d,
0xa5, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0xee, 0x38, 0x2e, 0x35, 0x8f, 0x29, 0x47, 0xb3, 0x25, 0x19, 0xad,
0xde, 0x94, 0xdb, 0xb5, 0xa6, 0x6e, 0x19, 0xf9, 0x8b, 0x84, 0x73, 0x19,
0x1c, 0xcb, 0xff, 0x68, 0x38, 0x6a, 0x77, 0xb4, 0x80, 0x73, 0x7c, 0xfa,
0xd5, 0x18, 0xdc, 0xf6, 0x41, 0x74, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0xc4, 0xf6, 0xfe, 0x48, 0xb3, 0xe0, 0xd5, 0x86, 0x1f, 0x95, 0x10,
0xe6, 0x66, 0x9f, 0xe0, 0x83, 0xa7, 0xfb, 0x91, 0x0d, 0xd6, 0xcd, 0x44,
0x00, 0xe2, 0x01, 0x11, 0x33, 0xe5, 0xc4, 0x2b, 0xc3, 0x0e, 0x69, 0x3d,
0xf1, 0xad, 0x6a, 0xeb, 0x07, 0xc0, 0x42, 0xea, 0xa0, 0x02, 0x71, 0x2b,
0x2c, 0x4b, 0x7a, 0xb9, 0x3f, 0xeb, 0x53, 0x79, 0x19, 0x7e, 0x1f, 0x3d,
0x38, 0xc1, 0x53, 0x54, 0xe2, 0x9c, 0xc1, 0x54, 0xdc, 0x9d, 0x03, 0x00,
0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x80, 0xc8, 0xf1, 0xe0, 0xba, 0x8b, 0x3c, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x1c, 0xc2, 0xdf, 0xc1, 0x68, 0xca, 0xf4, 0x76, 0x59, 0x53,
0x9e, 0xea, 0x77, 0x69, 0x44, 0x37, 0x95, 0xec, 0x88, 0x44, 0x85, 0xb3,
0xfb, 0xcb, 0x15, 0xf2, 0x78, 0x92, 0x54, 0x20, 0x11, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00,
0x00, 0x80, 0x00, 0x89, 0x27, 0xc5, 0xb5, 0xa1, 0xaf, 0x7b, 0xdf, 0x8c,
0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x60, 0x3c, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x4e, 0xac, 0x90,
0xce, 0xe9, 0xb1, 0xbb, 0x95, 0xbf, 0x59, 0xb6, 0xbe, 0x93, 0x10, 0x0c,
0x0d, 0xcc, 0xd7, 0x31, 0x79, 0x7e, 0x08, 0x50, 0x3a, 0xf2, 0x92, 0x00,
0x00, 0x00, 0x00, 0x01, 0x16, 0x68, 0x30, 0x29, 0x40, 0x4e, 0xab, 0x6c,
0x8b, 0x73, 0xbd, 0x50, 0x01, 0x07, 0x5e, 0x3c, 0xfe, 0xa7, 0x40, 0x72,
0x21, 0xba, 0x58, 0x3e, 0x13, 0x60, 0x8c, 0x89, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0xe4, 0x7b, 0x6e, 0xbc, 0xdd, 0x05, 0x00, 0x80, 0x9b,
0xf5, 0x45, 0xc0, 0xc3, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x04,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x19, 0xc5, 0x9d, 0x75, 0x0c,
0x90, 0x75, 0x03, 0x53, 0x56, 0x08, 0x56, 0x4c, 0xd8, 0x8c, 0xa2, 0x87,
0xf3, 0x08, 0xf6, 0x86, 0x45, 0x63, 0xb0, 0x38, 0xa5, 0xd9, 0x7c, 0x8e,
0x08, 0x6c, 0x3b, 0x1f, 0x93, 0x15, 0x48, 0xdf, 0x71, 0xd1, 0x4d, 0xc4,
0xaa, 0x17, 0x44, 0xbf, 0x4b, 0x64, 0xd4, 0x9d, 0x26, 0x24, 0x88, 0x5a,
0x67, 0x06, 0xe1, 0x33, 0x67, 0x95, 0xe4, 0x5a, 0xa7, 0xcb, 0x8d, 0x66,
0xfb, 0x7d, 0x61, 0x0f, 0x8c, 0x04, 0x9a, 0x0a, 0x8c, 0xc8, 0x31, 0x19,
0x9a, 0x3b, 0x79, 0x4a, 0xd7, 0x9c, 0xde, 0x4b, 0x57, 0xe8, 0x09, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x4a, 0x73, 0xf9, 0x8c, 0x79, 0x00, 0x00,
0x00, 0x00, 0x00, 0x9a, 0x27, 0xac, 0x81, 0xb9, 0xcd, 0x15, 0xe3, 0x84,
0x8b, 0xcc, 0xe0, 0x79, 0x55, 0xa4, 0xe6, 0x07, 0xb1, 0x20, 0x0b, 0x65,
0xf0, 0x1f, 0x64, 0xa2, 0xc5, 0xa2, 0x58, 0x67, 0x74, 0x62, 0x49, 0x8e,
0x21, 0x62, 0x36, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x28, 0x3e,
0xff, 0x01, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0xc0, 0x5f, 0x8b, 0x26, 0x51, 0xda, 0x67, 0x15, 0xc5, 0xcd,
0x2f, 0xfc, 0xc9, 0x79, 0x4f, 0xd3, 0xa6, 0xeb, 0xcc, 0x92, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x8e, 0xc2, 0x01, 0xda, 0x6f, 0x66,
0xf1, 0x99, 0xe7, 0x24, 0xea, 0x58, 0xd3, 0x73, 0x98, 0x58, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x00,
0x00, 0x40, 0x30, 0xe9, 0x49, 0xc6, 0xc8, 0xe5, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x10, 0x1e, 0x9f, 0xfe, 0x7a, 0x46, 0x09, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0xd0, 0x2e, 0xb1, 0xa8, 0xb0, 0x96, 0x31, 0x45, 0x3e,
0x4d, 0xfd, 0xa2, 0x4d, 0x4e, 0x1b, 0xda, 0x77, 0x18, 0xbe, 0xa1, 0x59,
0x53, 0xd8, 0x16, 0x00, 0x00, 0x00, 0x00, 0x00, 0x6c, 0x6a, 0x4b, 0xa9,
0x76, 0x63, 0xc4, 0x34, 0xa2, 0x73, 0xd5, 0x12, 0x25, 0xc3, 0xa9, 0xd4,
0x81, 0x1b, 0x86, 0xe3, 0x3e, 0xb6, 0x5d, 0xc9, 0x31, 0x00, 0x00, 0x00,
0x3a, 0x60, 0xe0, 0xf6, 0xda, 0x9d, 0x22, 0x4e, 0x3d, 0xb4, 0x96, 0x00,
0xec, 0x45, 0x26, 0x83, 0x7b, 0xd9, 0x24, 0x71, 0xb6, 0x8d, 0xc5, 0x49,
0x82, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00,
0x00, 0x48, 0x80, 0x60, 0x13, 0x02, 0x4a, 0x81, 0xb1, 0x2f, 0xab, 0x67,
0xad, 0xf1, 0x33, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0xd4, 0x3f, 0xf2, 0xd3, 0x06, 0xeb, 0x35, 0x54, 0x27,
0x51, 0xe9, 0x42, 0x87, 0xb8, 0xfa, 0xcb, 0x23, 0xe5, 0x94, 0x44, 0x36,
0x29, 0xec, 0x9c, 0x76, 0x39, 0xb7, 0xee, 0xab, 0x3b, 0x12, 0x39, 0x88,
0xcc, 0xb8, 0xe9, 0x76, 0x09, 0x40, 0xa4, 0xfa, 0xba, 0x62, 0x6b, 0xdc,
0x64, 0x15, 0xdc, 0xb0, 0xe9, 0x8a, 0xec, 0x1d, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7c, 0x15, 0x7d, 0x2a, 0xb1,
0x76, 0x1b, 0xa6, 0xed, 0x63, 0x98, 0xfc, 0x2b, 0x65, 0xee, 0xa6, 0xef,
0x36, 0x16, 0x1c, 0x7b, 0x0b, 0x00, 0x00, 0x00, 0x00, 0x00, 0x90, 0x19,
0x93, 0x84, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x82, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0xaf, 0x0f, 0x0c, 0xa8, 0x24, 0x8c, 0x34,
0x76, 0x60, 0x5f, 0x9d, 0x13, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0xb9, 0xe0, 0xb0, 0x7d, 0x38, 0xf9, 0x7d, 0xdc, 0x7e, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xa0, 0x0d, 0x1f, 0xd1, 0x6e, 0x19,
0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x80, 0xb4, 0xb0, 0xe1, 0x9b, 0x80,
0x33, 0xe4, 0x62, 0xa6, 0x54, 0xf8, 0xce, 0xd7, 0x98, 0x60, 0x39, 0x28,
0xec, 0x53, 0xe8, 0xda, 0x1f, 0x18, 0xa5, 0xeb, 0x0c, 0xd2, 0x14, 0xa0,
0x84, 0x0f, 0x3e, 0x28, 0xd6, 0x86, 0x6b, 0x27, 0xa1, 0x9f, 0x78, 0xe5,
0x06, 0xb6, 0xfe, 0xa6, 0x13, 0xe8, 0xf8, 0x69, 0xd0, 0xfb, 0x0e, 0xfd,
0xbe, 0x24, 0x0c, 0x1c, 0x98, 0x42, 0x10, 0x0c, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x70, 0x9d, 0xe8, 0x96, 0x6b, 0xba, 0x0d,
0x6a, 0xea, 0x1d, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xcd, 0xd5,
0x16, 0x04, 0x3a, 0x87, 0x3b, 0x04, 0x48, 0xb2, 0x00, 0x86, 0xb9, 0x06,
0xea, 0xc9, 0xba, 0xac, 0xd1, 0x20, 0x88, 0xe0, 0xeb, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x68, 0x44, 0x36, 0x59, 0x0a, 0x77, 0x01, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x96, 0x62, 0x3d, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x80, 0x84, 0x93, 0xa7, 0xc9, 0x44, 0x3d, 0xf8, 0x01,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x25, 0xbc, 0x5f,
0x64, 0x18, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x28, 0xe4, 0xac, 0xda, 0xfe,
0x6e, 0x8f, 0xb0, 0x15, 0x6c, 0x9a, 0xa4, 0x4e, 0x62, 0xa4, 0xc4, 0x34,
0xec, 0x5c, 0xcf, 0xb0, 0x5b, 0x74, 0xe5, 0x87, 0xb0, 0xba, 0x48, 0xea,
0x38, 0x11, 0xbc, 0x01, 0x02, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x80, 0x50, 0x0a, 0x63, 0xcf, 0xcb, 0xd2, 0xa8, 0x88,
0xfa, 0xc5, 0xf5, 0xe1, 0x20, 0xc0, 0xed, 0x6a, 0x78, 0x08, 0x14, 0xa5,
0x08, 0x06, 0x00, 0x00, 0x00, 0x00, 0x10, 0x08, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0xc0, 0xd1, 0xe2, 0x22, 0x4f, 0x2d, 0x63, 0x00, 0x00, 0x00,
0x00, 0x98, 0xa5, 0x62, 0x14, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x80, 0x6b, 0x09, 0xdc, 0x28, 0x7c, 0x37, 0x03, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xa2, 0x60, 0x79, 0xc9, 0x9d,
0x37, 0x13, 0x64, 0x60, 0x2e, 0x40, 0x66, 0x2f, 0x65, 0x3b, 0x3c, 0x7a,
0x39, 0xf3, 0xdb, 0xb5, 0x62, 0xaa, 0x28, 0x58, 0xd5, 0xfa, 0xfe, 0x8c,
0xbb, 0xd2, 0x8a, 0xdf, 0x7b, 0x16, 0xcf, 0x83, 0xc2, 0x01, 0x53, 0xe6,
0x0e, 0x9a, 0x00, 0x00, 0x00, 0x90, 0xad, 0x6b, 0x42, 0xa3, 0x35, 0x01,
0x81, 0xc6, 0xfd, 0x31, 0x4f, 0x26, 0xd1, 0x6a, 0xa1, 0xd3, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00,
0x00, 0xc0, 0x52, 0xea, 0xa1, 0xb7, 0x36, 0x60, 0xb8, 0x45, 0x78, 0x79,
0x83, 0x1d, 0xb5, 0x00, 0x05, 0x4a, 0xe4, 0xe2, 0xb7, 0xd4, 0x64, 0x6b,
0xd2, 0x42, 0x2f, 0xbf, 0xbc, 0x6c, 0x0d, 0xbe, 0x02, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xa0, 0x00, 0x79, 0xa7,
0x43, 0xf5, 0xf3, 0x89, 0x57, 0x9f, 0x93, 0xad, 0x29, 0x00, 0xe1, 0x3d,
0xfd, 0x37, 0x6b, 0x96, 0x65, 0xe3, 0x32, 0x38, 0xc1, 0xf0, 0x9b, 0x94,
0xb7, 0xf2, 0x18, 0x80, 0xb2, 0x00, 0x58, 0xa1, 0x44, 0x0c, 0xbb, 0x6b,
0xd4, 0xd1, 0x24, 0x2d, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10,
0x00, 0xa0, 0x9b, 0x88, 0x28, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0xe9,
0x27, 0x78, 0xd0, 0xfd, 0x3b, 0xe8, 0xe4, 0x1d, 0x9a, 0x45, 0x42, 0x03,
0x38, 0x9d, 0xdf, 0x20, 0x5a, 0x63, 0xd6, 0xc5, 0xe0, 0x11, 0xbf, 0x79,
0x30, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x30, 0x61, 0xd5, 0xdd, 0x02, 0x00, 0x00, 0x00, 0x10, 0x0c, 0x87,
0x01, 0x00, 0x8c, 0x5c, 0x19, 0x05, 0x7e, 0xe6, 0xef, 0xd7, 0xdf, 0x09,
0x84, 0x00, 0x76, 0x3e, 0x45, 0xf7, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x48, 0x06, 0x87, 0xe5, 0x83, 0x3b, 0x2f,
0x05, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x25, 0xa2,
0x08, 0xd0, 0xce, 0xf9, 0x8c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0xdf, 0xba, 0xeb, 0x5a, 0x40, 0x78, 0x40, 0xa0,
0x1c, 0xe5, 0x60, 0x2c, 0x4f, 0x3a, 0xe8, 0x5d, 0xf8, 0xba, 0xc4, 0x74,
0x79, 0xe1, 0xf1, 0x05, 0xe6, 0xf1, 0x10, 0x27, 0x04, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc1, 0xa9, 0xed, 0x2b,
0xb7, 0x88, 0x98, 0x4e, 0x03, 0x75, 0x5c, 0xac, 0x6e, 0x4e, 0xe7, 0x49,
0x44, 0xb6, 0x8c, 0x64, 0x3f, 0x34, 0xda, 0xb5, 0xac, 0x34, 0x9c, 0xa3,
0x3b, 0xf8, 0xef, 0x28, 0xec, 0x4e, 0x0a, 0xa1, 0x66, 0x86, 0x63, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0xd1, 0x7b, 0x56,
0xe6, 0x6f, 0x15, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x78, 0xf8, 0xe0, 0x69, 0xa2,
0xe8, 0x26, 0x0b, 0xc0, 0x95, 0xa3, 0x17, 0xf4, 0xe8, 0x53, 0x9e, 0x09,
0xfe, 0xb4, 0x3c, 0xe5, 0xae, 0xe1, 0x8f, 0x86, 0x8c, 0x71, 0x98, 0x26,
0xc3, 0x8f, 0x57, 0x0a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x88, 0xc0, 0xda, 0x1e, 0x4f, 0x39, 0x39, 0x23, 0xb1, 0xe5, 0x70,
0x1b, 0x06, 0x7e, 0x29, 0x30, 0x93, 0xb4, 0x05, 0x00, 0x00, 0x10, 0x00,
0x00, 0x00, 0x40, 0xe7, 0x9c, 0x06, 0x61, 0xfc, 0xf2, 0x11, 0x00, 0x00,
0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x40, 0x15, 0xd5, 0xb5, 0x77,
0xcc, 0x3d, 0x84, 0x78, 0x1d, 0x00, 0x00, 0xa1, 0x43, 0x9f, 0x02, 0x25,
0x47, 0xce, 0x93, 0x2d, 0x02, 0x00, 0x00, 0x00, 0x00, 0xa8, 0x87, 0xe9,
0xd5, 0xea, 0x44, 0x56, 0x14, 0xdf, 0x1b, 0xc2, 0x1e, 0x35, 0x71, 0x1b,
0xe2, 0x33, 0x74, 0xf1, 0xc3, 0xd7, 0xf8, 0x43, 0x01, 0xb8, 0x05, 0x00,
0x00, 0x00, 0x00, 0xc0, 0xc4, 0x29, 0x31, 0xb6, 0xdd, 0x14, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x20, 0x00, 0x00, 0x00, 0x00, 0xc0,
0xdd, 0x73, 0xf8, 0x1b, 0x34, 0x80, 0xd7, 0x5c, 0xa2, 0x9f, 0xcb, 0x54,
0xd4, 0x0f, 0x70, 0xdc, 0x71, 0x32, 0xc6, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x2d, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0xa4, 0x00,
0x4e, 0x00, 0xb0, 0xc0, 0x29, 0xed, 0x5e, 0xd7, 0x02, 0x2c, 0x5d, 0xb8,
0x8b, 0xa7, 0xd3, 0x40, 0x1c, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x40, 0xfc, 0xf6, 0x52, 0x29, 0x17, 0x00, 0x00, 0x00,
0x00, 0xc0, 0x7f, 0xec, 0x76, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x38, 0xa7, 0x34, 0x1a, 0x2c, 0x8f, 0x29, 0x50, 0x00, 0x10, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0xa0, 0x2f, 0x9a, 0x78, 0x40, 0x7c, 0x51, 0x60,
0xc2, 0x82, 0x38, 0xc5, 0x27, 0x34, 0x11, 0x78, 0x55, 0x1b, 0x5e, 0x0a,
0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x3c, 0xf0, 0xf7, 0xfd, 0x37, 0x01, 0x00, 0x00, 0x00, 0x40, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x51, 0x33, 0x0f,
0x34, 0x6f, 0x08, 0x5f, 0x75, 0xc0, 0xb5, 0xa9, 0xbd, 0xd3, 0x7c, 0xd8,
0xf9, 0x88, 0x60, 0x86, 0x3a, 0x00, 0x00, 0x00, 0xa0, 0x38, 0x57, 0x5f,
0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x61, 0x26, 0x9f, 0x21,
0x59, 0x19, 0x4e, 0x9f, 0x28, 0xe3, 0x68, 0xd4, 0xb4, 0x00, 0x00, 0x00,
0x00, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x60, 0xa2,
0x4f, 0x71, 0xb9, 0x59, 0x24, 0xa7, 0x41, 0x2f, 0x70, 0x16, 0x58, 0x06,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10,
0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x48, 0x06, 0x36, 0xe2, 0x81, 0xfb, 0x4a, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0xdf, 0x65, 0x69, 0x2c, 0xc1,
0xda, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0x01, 0xad, 0x41, 0x2b, 0xc5,
0x7c, 0x92, 0x6f, 0xf9, 0x86, 0xcc, 0x36, 0x41, 0x66, 0x31, 0x45, 0x1b,
0x3e, 0x60, 0x41, 0x5b, 0xdf, 0x03, 0x7c, 0xd1, 0x34, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xab, 0x2d, 0xd2,
0x62, 0x3c, 0xd3, 0xfc, 0x3e, 0xae, 0x1b, 0xf6, 0xf8, 0x20, 0x77, 0x27,
0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0xd5, 0xe5, 0x78, 0x12, 0x52, 0xe2, 0xfa, 0x58, 0xc5,
0x9f, 0x05, 0x00, 0x00, 0x00, 0xa5, 0xb8, 0x64, 0xf4, 0xc9, 0x07, 0x58,
0xbf, 0x97, 0xec, 0xa9, 0x89, 0xf6, 0x11, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0xc0, 0xaa, 0x96, 0x63, 0x6b, 0x45, 0xb7, 0x5f, 0xf4, 0x2d, 0x33, 0x40,
0xc5, 0x62, 0x58, 0xcb, 0x0c, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00,
0x00, 0x00, 0x00, 0x8d, 0x73, 0xdb, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x0a, 0xbf, 0x60, 0x7b, 0x64,
0xc0, 0xb2, 0xf2, 0x68, 0x79, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x84, 0xbb, 0x9f, 0xd9, 0xb9, 0x61, 0x07, 0xce, 0xf7, 0x9c, 0x28,
0xf8, 0xfb, 0xac, 0xc8, 0x07, 0xf8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0xe3, 0x9c, 0xbe, 0x5c, 0x2e, 0x29, 0x06, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0xb8, 0xbb,
0x64, 0xc3, 0x7e, 0xe0, 0xfa, 0xec, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x3a, 0x72, 0xd9, 0x28, 0x3b, 0x68, 0xa0, 0x4b, 0x62,
0xc5, 0x05, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xa8, 0x58, 0xff, 0xee, 0x28, 0x9b,
0x49, 0x55, 0xc0, 0x3a, 0x9d, 0x0d, 0xd4, 0xc9, 0x26, 0xd3, 0xcf, 0x99,
0xc1, 0xc1, 0x1e, 0x64, 0x39, 0x90, 0x63, 0x41, 0x04, 0xf1, 0x34, 0x56,
0x85, 0x70, 0x1c, 0x00, 0x8c, 0xf6, 0x4c, 0xfe, 0x0b, 0x01, 0x93, 0x70,
0xaf, 0x26, 0x6f, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20,
0x00, 0x18, 0x0f, 0x02, 0x3e, 0xc4, 0xc2, 0x61, 0x5f, 0xd6, 0xe1, 0xcf,
0x38, 0x0b, 0x00, 0x20, 0xba, 0x78, 0xcd, 0xdd, 0x75, 0x07, 0x00, 0x00,
0x80, 0x68, 0x70, 0x5c, 0x22, 0x18, 0x51, 0x07, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x5a, 0x96, 0xa4, 0xd7, 0x52, 0xb6, 0x13, 0x00, 0x00, 0x00,
0x00, 0x00, 0x20, 0xc4, 0x7f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x1c, 0x4a, 0xaf, 0x25, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xb7, 0x10, 0x02, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x50, 0x9e, 0xc4, 0x07, 0x1d, 0x37,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x03,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x01, 0x00, 0x00, 0x00, 0x00,
0x07, 0x8f, 0xb0, 0xa2, 0x73, 0x63, 0x64, 0x18, 0xd5, 0x5f, 0x0d, 0x5a,
0x76, 0xf4, 0x86, 0xe3, 0xf7, 0xf7, 0x62, 0xd4, 0xc6, 0x41, 0x32, 0x28,
0x00, 0x98, 0xdb, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x80, 0x00, 0x00, 0x10, 0x1a, 0xf8, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x10, 0x00, 0x80, 0x00, 0x00, 0x00, 0xc0, 0x1d, 0xf3,
0x22, 0x40, 0x36, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x47, 0x0f, 0xa0, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0xe4, 0xb2, 0xf1, 0xf2, 0x62, 0x7f, 0x84, 0x24, 0x82,
0xff, 0x2f, 0x00, 0x40, 0x69, 0x7b, 0xc2, 0x2e, 0xff, 0xd1, 0x00, 0x00,
0x00, 0x00, 0x00, 0x5c, 0xbd, 0x16, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x20, 0x70, 0x49, 0x3f, 0x78, 0x83, 0x40, 0x52, 0xdd, 0xfe, 0x3e, 0x40,
0xfb, 0x0c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x60, 0x00, 0x00,
0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xcb, 0xae, 0x3c,
0x39, 0x94, 0x0d, 0x60, 0xef, 0x07, 0x76, 0x25, 0xc8, 0x81, 0x04, 0xa0,
0x03, 0x3f, 0xe4, 0x17, 0x93, 0xc1, 0xee, 0x88, 0xb2, 0x4d, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x58, 0xec,
0xc7, 0x64, 0x67, 0xe0, 0x10, 0x88, 0xc3, 0xcf, 0x06, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x80, 0x44, 0x08, 0xa3, 0xa3,
0x6f, 0x33, 0x66, 0xe1, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06,
0xb8, 0xcb, 0xd0, 0xfd, 0x1f, 0x00, 0x00, 0x34, 0x8f, 0xca, 0xac, 0x94,
0xaf, 0xfc, 0x70, 0x61, 0x91, 0x6b, 0x2b, 0xad, 0x5e, 0x96, 0xa4, 0x7e,
0xc9, 0x1a, 0x1a, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x4b, 0x81, 0x67, 0x4f, 0x31, 0x2c, 0x3f,
0x9b, 0xcf, 0x8c, 0x91, 0xca, 0x9e, 0x9c, 0xd3, 0xa4, 0x96, 0x20, 0xe8,
0x34, 0x17, 0xe4, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x00,
0x00, 0x00, 0x18, 0x66, 0x97, 0x35, 0xd5, 0xe3, 0xcf, 0x17, 0xc2, 0x06,
0x9b, 0xb5, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xa0, 0x20, 0x5e, 0x47,
0x13, 0x37, 0x83, 0x8e, 0x1e, 0x85, 0xe2, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1a, 0xcc, 0x28, 0xda, 0xa2,
0x7d, 0xf6, 0x5b, 0x2c, 0x1c, 0x12, 0xce, 0x22, 0x4a, 0x3e, 0x15, 0xfc,
0x94, 0x5e, 0x32, 0xa2, 0xb0, 0x2b, 0x6c, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x12, 0xf0, 0xcd, 0xc7, 0xc2, 0x9b, 0x95,
0xf8, 0x3a, 0x81, 0x64, 0x51, 0x67, 0xab, 0x82, 0x9d, 0x4f, 0xe2, 0xd7,
0x51, 0x55, 0x0a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf4, 0xb3,
0x30, 0xf5, 0x56, 0x36, 0x7b, 0xd4, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x12, 0x00, 0x80, 0x00, 0x00,
0x58, 0x48, 0xb5, 0xf5, 0xa9, 0x8d, 0x21, 0x41, 0xe3, 0x20, 0x01, 0xac,
0xd7, 0x86, 0x36, 0xd2, 0x16, 0x2c, 0xd7, 0x53, 0x12, 0x24, 0x72, 0xaf,
0x95, 0xa6, 0x03, 0x6a, 0xdf, 0x08, 0xf2, 0x0c, 0x47, 0xeb, 0xed, 0x02,
0x35, 0x34, 0xaa, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0xc4, 0xf9, 0xa5, 0x5f, 0x04, 0x5c, 0x00, 0xed, 0xda, 0x0a, 0x4e, 0x00,
0x00, 0x00, 0x00, 0x00, 0xb0, 0x42, 0x5f, 0x91, 0x8e, 0x1d, 0x3e, 0xb8,
0xbf, 0x91, 0xd3, 0x85, 0x21, 0x41, 0xb2, 0xf0, 0xf9, 0x2d, 0x1a, 0x1c,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x93, 0x68, 0xe2, 0xa8, 0x00, 0x00, 0xc0, 0x7e, 0xa5, 0x77, 0x88, 0x3a,
0xf9, 0x8b, 0x9e, 0x43, 0x66, 0x88, 0xba, 0xbf, 0xb7, 0x05,
}};
} // namespace
TEST(ricepp, bitstream_random_test) {
std::vector data;
{
ricepp::bitstream_writer writer(std::back_inserter(data));
for (const auto& td : testdata) {
switch (td.op) {
case oper::single:
writer.write_bit(td.value);
break;
case oper::multi:
writer.write_bits(td.value, td.bits);
break;
case oper::sequence:
writer.write_bit(false, td.bits);
writer.write_bit(true);
break;
}
}
writer.flush();
}
ASSERT_EQ(expected_bitstream.size(), data.size());
for (size_t i = 0; i < expected_bitstream.size(); ++i) {
EXPECT_EQ(expected_bitstream[i], data[i]) << "at index " << i;
}
static_assert(std::contiguous_iterator);
{
ricepp::bitstream_reader reader(data.begin(), data.end());
for (const auto& td : testdata) {
switch (td.op) {
case oper::single:
EXPECT_EQ(td.value, reader.read_bit());
break;
case oper::multi:
EXPECT_EQ(td.value, reader.read_bits(td.bits));
break;
case oper::sequence:
EXPECT_EQ(td.bits, reader.find_first_set());
break;
}
}
}
std::deque data2{data.begin(), data.end()};
static_assert(!std::contiguous_iterator);
{
ricepp::bitstream_reader reader(data2.begin(), data2.end());
for (const auto& td : testdata) {
switch (td.op) {
case oper::single:
EXPECT_EQ(td.value, reader.read_bit());
break;
case oper::multi:
EXPECT_EQ(td.value, reader.read_bits(td.bits));
break;
case oper::sequence:
EXPECT_EQ(td.bits, reader.find_first_set());
break;
}
}
}
}