more governance debugging

This commit is contained in:
Richard Holland
2023-09-05 20:19:26 +00:00
parent 571ad5c60d
commit 5e96402770
6 changed files with 618 additions and 477 deletions

View File

@@ -544,7 +544,7 @@ int64_t hook(uint32_t r)
{ {
// add / change member // add / change member
uint8_t previous_member[32]; uint8_t previous_member[32];
int previous_present = (state(previous_member + 12, 20, n, 1) == 20); int previous_present = (state(previous_member + 12, 20, &n, 1) == 20);
if (previous_present && !topic_data_zero) if (previous_present && !topic_data_zero)
{ {
@@ -554,9 +554,13 @@ int64_t hook(uint32_t r)
} }
else else
{ {
// adjust member count // adjust member count
if (previous_present) if (previous_present)
{
trace(SBUF("Previous present:"), previous_member, 32, 1);
member_count--; member_count--;
}
else else
member_count++; member_count++;
@@ -607,14 +611,24 @@ int64_t hook(uint32_t r)
} }
} }
if (!topic_data_zero) if (topic_data_zero)
{
// delete the old member
// reverse key
ASSERT(state_set(0,0, &n, 1) == 0);
// forward key
ASSERT(state_set(0, 0, topic_data + 12, 20) == 0);
}
else
{ {
// add the new member // add the new member
// reverse key // reverse key
ASSERT(state_set(topic_data, 20, n, 1) == 20); ASSERT(state_set(topic_data, 20, &n, 1) == 20);
// forward key // forward key
ASSERT(state_set(n, 1, topic_data, 32) == 20); ASSERT(state_set(n, 1, topic_data + 12, 20) == 20);
} }
DONE("Governance: Action member change."); DONE("Governance: Action member change.");

View File

@@ -47,19 +47,19 @@ static const std::vector<uint8_t> GovernanceHook =
0x62U,0x61U,0x72U,0x72U,0x61U,0x79U,0x00U,0x04U,0x03U,0x65U, 0x62U,0x61U,0x72U,0x72U,0x61U,0x79U,0x00U,0x04U,0x03U,0x65U,
0x6EU,0x76U,0x04U,0x73U,0x6CU,0x6FU,0x74U,0x00U,0x04U,0x03U, 0x6EU,0x76U,0x04U,0x73U,0x6CU,0x6FU,0x74U,0x00U,0x04U,0x03U,
0x02U,0x01U,0x01U,0x05U,0x03U,0x01U,0x00U,0x02U,0x06U,0x08U, 0x02U,0x01U,0x01U,0x05U,0x03U,0x01U,0x00U,0x02U,0x06U,0x08U,
0x01U,0x7FU,0x01U,0x41U,0xD0U,0x98U,0x04U,0x0BU,0x07U,0x08U, 0x01U,0x7FU,0x01U,0x41U,0xE0U,0x98U,0x04U,0x0BU,0x07U,0x08U,
0x01U,0x04U,0x68U,0x6FU,0x6FU,0x6BU,0x00U,0x16U,0x0AU,0xFFU, 0x01U,0x04U,0x68U,0x6FU,0x6FU,0x6BU,0x00U,0x16U,0x0AU,0x8BU,
0xA8U,0x00U,0x01U,0xFBU,0xA8U,0x00U,0x03U,0x08U,0x7FU,0x04U, 0xAAU,0x00U,0x01U,0x87U,0xAAU,0x00U,0x03U,0x07U,0x7FU,0x04U,
0x7EU,0x02U,0x7CU,0x23U,0x00U,0x41U,0xB0U,0x0AU,0x6BU,0x22U, 0x7EU,0x02U,0x7CU,0x23U,0x00U,0x41U,0xB0U,0x0AU,0x6BU,0x22U,
0x00U,0x24U,0x00U,0x41U,0x01U,0x41U,0x01U,0x10U,0x00U,0x1AU, 0x00U,0x24U,0x00U,0x41U,0x01U,0x41U,0x01U,0x10U,0x00U,0x1AU,
0x41U,0x01U,0x10U,0x01U,0x1AU,0x10U,0x02U,0x42U,0xE3U,0x00U, 0x41U,0x01U,0x10U,0x01U,0x1AU,0x10U,0x02U,0x42U,0xE3U,0x00U,
0x52U,0x04U,0x40U,0x41U,0x94U,0x08U,0x41U,0xCCU,0x00U,0x42U, 0x52U,0x04U,0x40U,0x41U,0x94U,0x08U,0x41U,0xCCU,0x00U,0x42U,
0xF7U,0x00U,0x10U,0x03U,0x1AU,0x0BU,0x20U,0x00U,0x41U,0x90U, 0xF7U,0x00U,0x10U,0x03U,0x1AU,0x0BU,0x20U,0x00U,0x41U,0x90U,
0x0AU,0x6AU,0x41U,0x0CU,0x72U,0x22U,0x04U,0x41U,0x14U,0x41U, 0x0AU,0x6AU,0x41U,0x0CU,0x72U,0x22U,0x03U,0x41U,0x14U,0x41U,
0x81U,0x80U,0x20U,0x10U,0x04U,0x1AU,0x20U,0x00U,0x41U,0xF0U, 0x81U,0x80U,0x20U,0x10U,0x04U,0x1AU,0x20U,0x00U,0x41U,0xF0U,
0x09U,0x6AU,0x41U,0x0CU,0x72U,0x22U,0x08U,0x41U,0x14U,0x10U, 0x09U,0x6AU,0x41U,0x0CU,0x72U,0x22U,0x07U,0x41U,0x14U,0x10U,
0x05U,0x1AU,0x02U,0x40U,0x20U,0x00U,0x29U,0x03U,0xFCU,0x09U, 0x05U,0x1AU,0x02U,0x40U,0x20U,0x00U,0x29U,0x03U,0xFCU,0x09U,
0x22U,0x0AU,0x20U,0x00U,0x29U,0x03U,0x9CU,0x0AU,0x51U,0x04U, 0x22U,0x09U,0x20U,0x00U,0x29U,0x03U,0x9CU,0x0AU,0x51U,0x04U,
0x40U,0x20U,0x00U,0x28U,0x02U,0x8CU,0x0AU,0x20U,0x00U,0x28U, 0x40U,0x20U,0x00U,0x28U,0x02U,0x8CU,0x0AU,0x20U,0x00U,0x28U,
0x02U,0xACU,0x0AU,0x47U,0x20U,0x00U,0x29U,0x03U,0x84U,0x0AU, 0x02U,0xACU,0x0AU,0x47U,0x20U,0x00U,0x29U,0x03U,0x84U,0x0AU,
0x20U,0x00U,0x29U,0x03U,0xA4U,0x0AU,0x52U,0x72U,0x0DU,0x01U, 0x20U,0x00U,0x29U,0x03U,0xA4U,0x0AU,0x52U,0x72U,0x0DU,0x01U,
@@ -71,117 +71,119 @@ static const std::vector<uint8_t> GovernanceHook =
0x40U,0x20U,0x00U,0x28U,0x02U,0x8CU,0x0AU,0x20U,0x00U,0x28U, 0x40U,0x20U,0x00U,0x28U,0x02U,0x8CU,0x0AU,0x20U,0x00U,0x28U,
0x02U,0x90U,0x01U,0x46U,0x0DU,0x02U,0x0BU,0x0BU,0x41U,0xE0U, 0x02U,0x90U,0x01U,0x46U,0x0DU,0x02U,0x0BU,0x0BU,0x41U,0xE0U,
0x08U,0x41U,0x21U,0x42U,0x85U,0x01U,0x10U,0x03U,0x1AU,0x0BU, 0x08U,0x41U,0x21U,0x42U,0x85U,0x01U,0x10U,0x03U,0x1AU,0x0BU,
0x0BU,0x20U,0x00U,0x29U,0x03U,0xFCU,0x09U,0x21U,0x0AU,0x0BU, 0x0BU,0x20U,0x00U,0x29U,0x03U,0xFCU,0x09U,0x21U,0x09U,0x0BU,
0x0BU,0x41U,0x80U,0x08U,0x29U,0x03U,0x00U,0x20U,0x0AU,0x51U, 0x0BU,0x41U,0x80U,0x08U,0x29U,0x03U,0x00U,0x20U,0x09U,0x51U,
0x04U,0x7FU,0x20U,0x00U,0x29U,0x03U,0x84U,0x0AU,0x41U,0x88U, 0x04U,0x7FU,0x20U,0x00U,0x29U,0x03U,0x84U,0x0AU,0x41U,0x88U,
0x08U,0x29U,0x03U,0x00U,0x51U,0x04U,0x7FU,0x02U,0x7FU,0x41U, 0x08U,0x29U,0x03U,0x00U,0x51U,0x04U,0x7FU,0x20U,0x00U,0x28U,
0x00U,0x20U,0x00U,0x28U,0x02U,0x8CU,0x0AU,0x41U,0x90U,0x08U, 0x02U,0x8CU,0x0AU,0x41U,0x90U,0x08U,0x28U,0x02U,0x00U,0x46U,
0x28U,0x02U,0x00U,0x47U,0x0DU,0x00U,0x1AU,0x41U,0x81U,0x09U, 0x04U,0x7FU,0x41U,0x81U,0x09U,0x41U,0x33U,0x41U,0x00U,0x41U,
0x41U,0x33U,0x41U,0x00U,0x41U,0x00U,0x41U,0x00U,0x10U,0x06U, 0x00U,0x41U,0x00U,0x10U,0x06U,0x1AU,0x41U,0x01U,0x05U,0x41U,
0x1AU,0x41U,0x01U,0x0BU,0x05U,0x41U,0x00U,0x0BU,0x05U,0x41U, 0x00U,0x0BU,0x05U,0x41U,0x00U,0x0BU,0x05U,0x41U,0x00U,0x0BU,
0x00U,0x0BU,0x21U,0x02U,0x41U,0x00U,0x41U,0x00U,0x41U,0xB4U, 0x21U,0x02U,0x41U,0x00U,0x41U,0x00U,0x41U,0xB4U,0x09U,0x41U,
0x09U,0x41U,0x02U,0x10U,0x07U,0x22U,0x0AU,0x42U,0x7BU,0x51U, 0x02U,0x10U,0x07U,0x22U,0x09U,0x42U,0x7BU,0x51U,0x04U,0x40U,
0x04U,0x40U,0x20U,0x00U,0x41U,0x90U,0x09U,0x6AU,0x41U,0x01U, 0x20U,0x00U,0x41U,0x90U,0x09U,0x6AU,0x41U,0x01U,0x41U,0xB7U,
0x41U,0xB7U,0x09U,0x41U,0x03U,0x10U,0x08U,0x42U,0x7FU,0x57U, 0x09U,0x41U,0x03U,0x10U,0x08U,0x42U,0x7FU,0x57U,0x04U,0x40U,
0x04U,0x40U,0x41U,0xBBU,0x09U,0x41U,0x3AU,0x42U,0x97U,0x01U, 0x41U,0xBBU,0x09U,0x41U,0x3AU,0x42U,0x97U,0x01U,0x10U,0x09U,
0x10U,0x09U,0x1AU,0x0BU,0x41U,0xF5U,0x09U,0x41U,0x03U,0x20U, 0x1AU,0x0BU,0x41U,0xF5U,0x09U,0x41U,0x03U,0x20U,0x00U,0x31U,
0x00U,0x31U,0x00U,0x90U,0x09U,0x10U,0x0AU,0x1AU,0x20U,0x00U, 0x00U,0x90U,0x09U,0x10U,0x0AU,0x1AU,0x20U,0x00U,0x41U,0x90U,
0x41U,0x90U,0x09U,0x6AU,0x41U,0x01U,0x41U,0xB4U,0x09U,0x41U, 0x09U,0x6AU,0x41U,0x01U,0x41U,0xB4U,0x09U,0x41U,0x02U,0x10U,
0x02U,0x10U,0x0BU,0x42U,0x00U,0x57U,0x04U,0x40U,0x41U,0xF9U,
0x09U,0x41U,0x1AU,0x42U,0x9BU,0x01U,0x10U,0x09U,0x1AU,0x0BU,
0x41U,0x93U,0x0AU,0x41U,0x0CU,0x20U,0x00U,0x2DU,0x00U,0x90U,
0x09U,0x22U,0x03U,0xADU,0x42U,0xFFU,0x01U,0x83U,0x22U,0x0AU,
0x10U,0x0AU,0x1AU,0x20U,0x00U,0x2DU,0x00U,0x90U,0x09U,0x22U,
0x01U,0x45U,0x04U,0x40U,0x41U,0xA0U,0x0AU,0x41U,0x2EU,0x42U,
0xA2U,0x01U,0x10U,0x09U,0x1AU,0x20U,0x00U,0x2DU,0x00U,0x90U,
0x09U,0x21U,0x01U,0x0BU,0x20U,0x01U,0x41U,0xFFU,0x01U,0x71U,
0x41U,0x15U,0x4FU,0x04U,0x40U,0x41U,0xCEU,0x0AU,0x41U,0x3DU,
0x42U,0xA5U,0x01U,0x10U,0x09U,0x1AU,0x0BU,0x20U,0x02U,0x04U,
0x40U,0x02U,0x40U,0x20U,0x00U,0x41U,0xB0U,0x09U,0x6AU,0x41U,
0x08U,0x41U,0x8BU,0x0BU,0x41U,0x03U,0x10U,0x08U,0x42U,0x7FU,
0x57U,0x04U,0x40U,0x41U,0x8FU,0x0BU,0x41U,0x39U,0x42U,0xAAU,
0x01U,0x10U,0x09U,0x1AU,0x0BU,0x20U,0x00U,0x41U,0x20U,0x6AU,
0x41U,0x08U,0x41U,0xC8U,0x0BU,0x41U,0x03U,0x10U,0x08U,0x42U,
0x7FU,0x57U,0x04U,0x40U,0x41U,0xCCU,0x0BU,0x41U,0x37U,0x42U,
0xADU,0x01U,0x10U,0x09U,0x1AU,0x0BU,0x20U,0x00U,0x29U,0x03U,
0x20U,0x50U,0x04U,0x40U,0x41U,0x83U,0x0CU,0x41U,0x2EU,0x42U,
0xB0U,0x01U,0x10U,0x09U,0x1AU,0x0BU,0x20U,0x00U,0x41U,0xB0U,
0x09U,0x6AU,0x41U,0x08U,0x41U,0xB1U,0x0CU,0x41U,0x02U,0x10U,
0x0BU,0x42U,0x00U,0x57U,0x04U,0x40U,0x41U,0xF9U,0x09U,0x41U, 0x0BU,0x42U,0x00U,0x57U,0x04U,0x40U,0x41U,0xF9U,0x09U,0x41U,
0x1AU,0x42U,0xB3U,0x01U,0x10U,0x09U,0x1AU,0x0BU,0x20U,0x00U, 0x1AU,0x42U,0x9BU,0x01U,0x10U,0x09U,0x1AU,0x0BU,0x41U,0x93U,
0x41U,0x20U,0x6AU,0x41U,0x08U,0x41U,0xB4U,0x0CU,0x41U,0x02U, 0x0AU,0x41U,0x0CU,0x20U,0x00U,0x2DU,0x00U,0x90U,0x09U,0x22U,
0x10U,0x0BU,0x42U,0x00U,0x55U,0x0DU,0x00U,0x41U,0xF9U,0x09U, 0x04U,0xADU,0x42U,0xFFU,0x01U,0x83U,0x22U,0x09U,0x10U,0x0AU,
0x41U,0x1AU,0x42U,0xB6U,0x01U,0x10U,0x09U,0x1AU,0x0BU,0x0BU, 0x1AU,0x20U,0x00U,0x2DU,0x00U,0x90U,0x09U,0x22U,0x01U,0x45U,
0x41U,0x00U,0x21U,0x01U,0x03U,0x40U,0x41U,0xB9U,0x81U,0x80U, 0x04U,0x40U,0x41U,0xA0U,0x0AU,0x41U,0x2EU,0x42U,0xA2U,0x01U,
0x80U,0x78U,0x41U,0x15U,0x10U,0x00U,0x1AU,0x02U,0x40U,0x20U, 0x10U,0x09U,0x1AU,0x20U,0x00U,0x2DU,0x00U,0x90U,0x09U,0x21U,
0x00U,0x20U,0x01U,0x3AU,0x00U,0x00U,0x20U,0x00U,0x2DU,0x00U, 0x01U,0x0BU,0x20U,0x01U,0x41U,0xFFU,0x01U,0x71U,0x41U,0x15U,
0x00U,0x22U,0x01U,0x20U,0x03U,0x4FU,0x0DU,0x00U,0x20U,0x00U, 0x4FU,0x04U,0x40U,0x41U,0xCEU,0x0AU,0x41U,0x3DU,0x42U,0xA5U,
0x20U,0x01U,0x3AU,0x00U,0x52U,0x20U,0x00U,0x41U,0xC9U,0xA6U, 0x01U,0x10U,0x09U,0x1AU,0x0BU,0x20U,0x02U,0x04U,0x40U,0x02U,
0x01U,0x3BU,0x00U,0x50U,0x20U,0x00U,0x41U,0x80U,0x01U,0x6AU, 0x40U,0x20U,0x00U,0x41U,0xB0U,0x09U,0x6AU,0x41U,0x08U,0x41U,
0x41U,0x14U,0x20U,0x00U,0x41U,0xD0U,0x00U,0x6AU,0x41U,0x03U, 0x8BU,0x0BU,0x41U,0x03U,0x10U,0x08U,0x42U,0x7FU,0x57U,0x04U,
0x10U,0x08U,0x42U,0x14U,0x52U,0x04U,0x40U,0x41U,0xB7U,0x0CU, 0x40U,0x41U,0x8FU,0x0BU,0x41U,0x39U,0x42U,0xAAU,0x01U,0x10U,
0x41U,0x3FU,0x42U,0xBEU,0x01U,0x10U,0x09U,0x1AU,0x0BU,0x41U, 0x09U,0x1AU,0x0BU,0x20U,0x00U,0x41U,0x20U,0x6AU,0x41U,0x08U,
0xF6U,0x0CU,0x41U,0x08U,0x20U,0x00U,0x41U,0x80U,0x01U,0x6AU, 0x41U,0xC8U,0x0BU,0x41U,0x03U,0x10U,0x08U,0x42U,0x7FU,0x57U,
0x22U,0x01U,0x41U,0x14U,0x41U,0x01U,0x10U,0x06U,0x1AU,0x20U, 0x04U,0x40U,0x41U,0xCCU,0x0BU,0x41U,0x37U,0x42U,0xADU,0x01U,
0x01U,0x41U,0x14U,0x20U,0x00U,0x41U,0x01U,0x10U,0x0BU,0x42U, 0x10U,0x09U,0x1AU,0x0BU,0x20U,0x00U,0x29U,0x03U,0x20U,0x50U,
0x14U,0x52U,0x04U,0x40U,0x41U,0xF9U,0x09U,0x41U,0x1AU,0x42U, 0x04U,0x40U,0x41U,0x83U,0x0CU,0x41U,0x2EU,0x42U,0xB0U,0x01U,
0xC4U,0x01U,0x10U,0x09U,0x1AU,0x0BU,0x20U,0x00U,0x41U,0x01U, 0x10U,0x09U,0x1AU,0x0BU,0x20U,0x00U,0x41U,0xB0U,0x09U,0x6AU,
0x20U,0x00U,0x41U,0x80U,0x01U,0x6AU,0x41U,0x14U,0x10U,0x0BU, 0x41U,0x08U,0x41U,0xB1U,0x0CU,0x41U,0x02U,0x10U,0x0BU,0x42U,
0x42U,0x01U,0x52U,0x04U,0x40U,0x41U,0xF9U,0x09U,0x41U,0x1AU, 0x00U,0x57U,0x04U,0x40U,0x41U,0xF9U,0x09U,0x41U,0x1AU,0x42U,
0x42U,0xC8U,0x01U,0x10U,0x09U,0x1AU,0x0BU,0x20U,0x00U,0x2DU, 0xB3U,0x01U,0x10U,0x09U,0x1AU,0x0BU,0x20U,0x00U,0x41U,0x20U,
0x00U,0x00U,0x41U,0x01U,0x6AU,0x21U,0x01U,0x0CU,0x01U,0x0BU, 0x6AU,0x41U,0x08U,0x41U,0xB4U,0x0CU,0x41U,0x02U,0x10U,0x0BU,
0x0BU,0x41U,0xFEU,0x0CU,0x41U,0x2AU,0x42U,0xCBU,0x01U,0x10U, 0x42U,0x00U,0x55U,0x0DU,0x00U,0x41U,0xF9U,0x09U,0x41U,0x1AU,
0x03U,0x1AU,0x0BU,0x41U,0x93U,0x0AU,0x41U,0x0CU,0x20U,0x0AU, 0x42U,0xB6U,0x01U,0x10U,0x09U,0x1AU,0x0BU,0x0BU,0x41U,0x00U,
0x10U,0x0AU,0x1AU,0x41U,0x00U,0x41U,0x00U,0x20U,0x04U,0x41U, 0x21U,0x01U,0x03U,0x40U,0x41U,0xB9U,0x81U,0x80U,0x80U,0x78U,
0x14U,0x10U,0x07U,0x42U,0x7FU,0x57U,0x04U,0x40U,0x41U,0xA8U, 0x41U,0x15U,0x10U,0x00U,0x1AU,0x02U,0x40U,0x20U,0x00U,0x20U,
0x0DU,0x41U,0xC5U,0x00U,0x42U,0xD7U,0x01U,0x10U,0x09U,0x1AU, 0x01U,0x3AU,0x00U,0x00U,0x20U,0x00U,0x2DU,0x00U,0x00U,0x22U,
0x0BU,0x20U,0x00U,0x41U,0xEEU,0x09U,0x6AU,0x41U,0x02U,0x41U, 0x01U,0x20U,0x04U,0x4FU,0x0DU,0x00U,0x20U,0x00U,0x20U,0x01U,
0xEDU,0x0DU,0x41U,0x01U,0x10U,0x0CU,0x21U,0x09U,0x20U,0x00U, 0x3AU,0x00U,0x52U,0x20U,0x00U,0x41U,0xC9U,0xA6U,0x01U,0x3BU,
0x2DU,0x00U,0xEFU,0x09U,0x21U,0x04U,0x20U,0x00U,0x2DU,0x00U, 0x00U,0x50U,0x20U,0x00U,0x41U,0x80U,0x01U,0x6AU,0x41U,0x14U,
0xEEU,0x09U,0x21U,0x03U,0x02U,0x40U,0x20U,0x09U,0x42U,0x02U, 0x20U,0x00U,0x41U,0xD0U,0x00U,0x6AU,0x41U,0x03U,0x10U,0x08U,
0x51U,0x04U,0x40U,0x02U,0x40U,0x20U,0x03U,0x41U,0xC8U,0x00U, 0x42U,0x14U,0x52U,0x04U,0x40U,0x41U,0xB7U,0x0CU,0x41U,0x3FU,
0x6BU,0x22U,0x01U,0x41U,0x0BU,0x4BU,0x0DU,0x00U,0x41U,0x01U, 0x42U,0xBEU,0x01U,0x10U,0x09U,0x1AU,0x0BU,0x41U,0xF6U,0x0CU,
0x20U,0x01U,0x74U,0x41U,0x81U,0x18U,0x71U,0x0DU,0x02U,0x0BU, 0x41U,0x08U,0x20U,0x00U,0x41U,0x80U,0x01U,0x6AU,0x22U,0x01U,
0x0BU,0x41U,0xEFU,0x0DU,0x41U,0x3DU,0x42U,0xE6U,0x01U,0x10U, 0x41U,0x14U,0x41U,0x01U,0x10U,0x06U,0x1AU,0x20U,0x01U,0x41U,
0x09U,0x1AU,0x0BU,0x02U,0x40U,0x20U,0x03U,0x41U,0xD3U,0x00U, 0x14U,0x20U,0x00U,0x41U,0x01U,0x10U,0x0BU,0x42U,0x14U,0x52U,
0x46U,0x04U,0x40U,0x20U,0x04U,0x41U,0x14U,0x4FU,0x04U,0x40U, 0x04U,0x40U,0x41U,0xF9U,0x09U,0x41U,0x1AU,0x42U,0xC4U,0x01U,
0x41U,0xACU,0x0EU,0x41U,0x30U,0x42U,0xEAU,0x01U,0x10U,0x09U, 0x10U,0x09U,0x1AU,0x0BU,0x20U,0x00U,0x41U,0x01U,0x20U,0x00U,
0x1AU,0x41U,0x01U,0x21U,0x05U,0x0CU,0x02U,0x0BU,0x0BU,0x20U, 0x41U,0x80U,0x01U,0x6AU,0x41U,0x14U,0x10U,0x0BU,0x42U,0x01U,
0x03U,0x41U,0xC8U,0x00U,0x46U,0x04U,0x40U,0x20U,0x04U,0x41U, 0x52U,0x04U,0x40U,0x41U,0xF9U,0x09U,0x41U,0x1AU,0x42U,0xC8U,
0x0BU,0x4FU,0x04U,0x40U,0x41U,0xDCU,0x0EU,0x41U,0x2FU,0x42U, 0x01U,0x10U,0x09U,0x1AU,0x0BU,0x20U,0x00U,0x2DU,0x00U,0x00U,
0xEDU,0x01U,0x10U,0x09U,0x1AU,0x41U,0x01U,0x21U,0x05U,0x41U, 0x41U,0x01U,0x6AU,0x21U,0x01U,0x0CU,0x01U,0x0BU,0x0BU,0x41U,
0x01U,0x21U,0x06U,0x0CU,0x02U,0x0BU,0x0BU,0x20U,0x03U,0x41U, 0xFEU,0x0CU,0x41U,0x2AU,0x42U,0xCBU,0x01U,0x10U,0x03U,0x1AU,
0xC8U,0x00U,0x46U,0x21U,0x06U,0x41U,0x01U,0x21U,0x05U,0x20U, 0x0BU,0x41U,0x93U,0x0AU,0x41U,0x0CU,0x20U,0x09U,0x10U,0x0AU,
0x03U,0x41U,0xD2U,0x00U,0x47U,0x0DU,0x00U,0x41U,0x00U,0x21U, 0x1AU,0x41U,0x00U,0x41U,0x00U,0x20U,0x03U,0x41U,0x14U,0x10U,
0x05U,0x20U,0x04U,0x41U,0xC4U,0x00U,0x46U,0x20U,0x04U,0x41U, 0x07U,0x42U,0x7FU,0x57U,0x04U,0x40U,0x41U,0xA8U,0x0DU,0x41U,
0xD2U,0x00U,0x46U,0x72U,0x0DU,0x00U,0x41U,0x8BU,0x0FU,0x41U, 0xC5U,0x00U,0x42U,0xD7U,0x01U,0x10U,0x09U,0x1AU,0x0BU,0x20U,
0x3CU,0x42U,0xF0U,0x01U,0x10U,0x09U,0x1AU,0x0BU,0x20U,0x00U, 0x00U,0x41U,0xEEU,0x09U,0x6AU,0x41U,0x02U,0x41U,0xEDU,0x0DU,
0x41U,0x01U,0x3AU,0x00U,0xEDU,0x09U,0x20U,0x02U,0x45U,0x04U, 0x41U,0x01U,0x10U,0x0CU,0x21U,0x08U,0x20U,0x00U,0x2DU,0x00U,
0x40U,0x02U,0x40U,0x20U,0x00U,0x41U,0xEDU,0x09U,0x6AU,0x41U, 0xEEU,0x09U,0x21U,0x03U,0x20U,0x00U,0x20U,0x00U,0x2DU,0x00U,
0x01U,0x41U,0xC7U,0x0FU,0x41U,0x01U,0x10U,0x0CU,0x42U,0x01U, 0xEFU,0x09U,0x22U,0x01U,0x3AU,0x00U,0xEDU,0x09U,0x02U,0x40U,
0x52U,0x04U,0x40U,0x41U,0xC9U,0x0FU,0x41U,0xC1U,0x00U,0x42U, 0x20U,0x08U,0x42U,0x02U,0x51U,0x04U,0x40U,0x02U,0x40U,0x20U,
0xF8U,0x01U,0x10U,0x09U,0x1AU,0x0BU,0x20U,0x00U,0x2DU,0x00U, 0x03U,0x41U,0xC8U,0x00U,0x6BU,0x22U,0x04U,0x41U,0x0BU,0x4BU,
0xEDU,0x09U,0x22U,0x01U,0x41U,0x31U,0x6BU,0x41U,0xFFU,0x01U, 0x0DU,0x00U,0x41U,0x01U,0x20U,0x04U,0x74U,0x41U,0x81U,0x18U,
0x71U,0x41U,0x02U,0x4FU,0x04U,0x40U,0x41U,0x8AU,0x10U,0x41U, 0x71U,0x0DU,0x02U,0x0BU,0x0BU,0x41U,0xEFU,0x0DU,0x41U,0x3DU,
0x30U,0x42U,0xFBU,0x01U,0x10U,0x09U,0x1AU,0x20U,0x00U,0x2DU, 0x42U,0xE6U,0x01U,0x10U,0x09U,0x1AU,0x20U,0x00U,0x2DU,0x00U,
0x00U,0xEDU,0x09U,0x21U,0x01U,0x0BU,0x20U,0x00U,0x20U,0x01U, 0xEDU,0x09U,0x21U,0x01U,0x0BU,0x02U,0x40U,0x20U,0x03U,0x41U,
0x41U,0x30U,0x6BU,0x22U,0x01U,0x3AU,0x00U,0xEDU,0x09U,0x20U, 0xD3U,0x00U,0x46U,0x04U,0x40U,0x20U,0x01U,0x41U,0x14U,0x4FU,
0x01U,0x41U,0xFFU,0x01U,0x71U,0x41U,0x02U,0x47U,0x20U,0x05U, 0x04U,0x40U,0x41U,0xACU,0x0EU,0x41U,0x30U,0x42U,0xEAU,0x01U,
0x72U,0x0DU,0x00U,0x41U,0xBAU,0x10U,0x41U,0xC5U,0x00U,0x42U, 0x10U,0x09U,0x1AU,0x41U,0x00U,0x21U,0x04U,0x41U,0x01U,0x21U,
0x81U,0x02U,0x10U,0x09U,0x1AU,0x0BU,0x0BU,0x41U,0x20U,0x41U, 0x05U,0x0CU,0x02U,0x0BU,0x0BU,0x20U,0x03U,0x41U,0xC8U,0x00U,
0x20U,0x41U,0x14U,0x41U,0x08U,0x20U,0x03U,0x41U,0xD3U,0x00U, 0x46U,0x04U,0x40U,0x20U,0x01U,0x41U,0x0BU,0x4FU,0x04U,0x40U,
0x46U,0x1BU,0x20U,0x06U,0x1BU,0x22U,0x06U,0x6BU,0x41U,0xFCU, 0x41U,0xDCU,0x0EU,0x41U,0x2FU,0x42U,0xEDU,0x01U,0x10U,0x09U,
0x01U,0x71U,0x22U,0x01U,0x20U,0x00U,0x41U,0xB0U,0x09U,0x6AU, 0x1AU,0x41U,0x01U,0x21U,0x05U,0x41U,0x01U,0x21U,0x04U,0x0CU,
0x6AU,0x22U,0x07U,0x20U,0x06U,0x41U,0xFFU,0x10U,0x41U,0x01U, 0x02U,0x0BU,0x0BU,0x20U,0x03U,0x41U,0xC8U,0x00U,0x46U,0x21U,
0x10U,0x0CU,0x20U,0x06U,0xADU,0x22U,0x09U,0x52U,0x04U,0x40U, 0x04U,0x41U,0x01U,0x21U,0x05U,0x20U,0x03U,0x41U,0xD2U,0x00U,
0x41U,0x81U,0x11U,0x41U,0xC3U,0x00U,0x42U,0x8FU,0x02U,0x10U, 0x47U,0x0DU,0x00U,0x41U,0x00U,0x21U,0x05U,0x20U,0x01U,0x41U,
0x09U,0x1AU,0x0BU,0x20U,0x00U,0x20U,0x04U,0x3AU,0x00U,0x92U, 0xC4U,0x00U,0x46U,0x20U,0x01U,0x41U,0xD2U,0x00U,0x46U,0x72U,
0x0AU,0x20U,0x00U,0x20U,0x03U,0x3AU,0x00U,0x91U,0x0AU,0x20U, 0x0DU,0x00U,0x41U,0x8BU,0x0FU,0x41U,0x3CU,0x42U,0xF0U,0x01U,
0x00U,0x41U,0xD6U,0x00U,0x3AU,0x00U,0x90U,0x0AU,0x20U,0x00U, 0x10U,0x09U,0x1AU,0x0BU,0x20U,0x00U,0x41U,0x01U,0x3AU,0x00U,
0x20U,0x00U,0x2DU,0x00U,0xEDU,0x09U,0x3AU,0x00U,0x93U,0x0AU, 0xECU,0x09U,0x20U,0x02U,0x45U,0x04U,0x40U,0x02U,0x40U,0x20U,
0x00U,0x41U,0xECU,0x09U,0x6AU,0x41U,0x01U,0x41U,0xC7U,0x0FU,
0x41U,0x01U,0x10U,0x0CU,0x42U,0x01U,0x52U,0x04U,0x40U,0x41U,
0xC9U,0x0FU,0x41U,0xC1U,0x00U,0x42U,0xF8U,0x01U,0x10U,0x09U,
0x1AU,0x0BU,0x20U,0x00U,0x2DU,0x00U,0xECU,0x09U,0x22U,0x01U,
0x41U,0x31U,0x6BU,0x41U,0xFFU,0x01U,0x71U,0x41U,0x02U,0x4FU,
0x04U,0x40U,0x41U,0x8AU,0x10U,0x41U,0x30U,0x42U,0xFBU,0x01U,
0x10U,0x09U,0x1AU,0x20U,0x00U,0x2DU,0x00U,0xECU,0x09U,0x21U,
0x01U,0x0BU,0x20U,0x00U,0x20U,0x01U,0x41U,0x30U,0x6BU,0x22U,
0x01U,0x3AU,0x00U,0xECU,0x09U,0x20U,0x01U,0x41U,0xFFU,0x01U,
0x71U,0x41U,0x02U,0x47U,0x20U,0x05U,0x72U,0x0DU,0x00U,0x41U,
0xBAU,0x10U,0x41U,0xC5U,0x00U,0x42U,0x81U,0x02U,0x10U,0x09U,
0x1AU,0x0BU,0x0BU,0x41U,0x20U,0x41U,0x20U,0x41U,0x14U,0x41U,
0x08U,0x20U,0x03U,0x41U,0xD3U,0x00U,0x46U,0x1BU,0x20U,0x04U,
0x1BU,0x22U,0x05U,0x6BU,0x41U,0xFCU,0x01U,0x71U,0x22U,0x01U,
0x20U,0x00U,0x41U,0xB0U,0x09U,0x6AU,0x6AU,0x22U,0x06U,0x20U,
0x05U,0x41U,0xFFU,0x10U,0x41U,0x01U,0x10U,0x0CU,0x20U,0x05U,
0xADU,0x22U,0x08U,0x52U,0x04U,0x40U,0x41U,0x81U,0x11U,0x41U,
0xC3U,0x00U,0x42U,0x8FU,0x02U,0x10U,0x09U,0x1AU,0x0BU,0x20U,
0x00U,0x20U,0x03U,0x3AU,0x00U,0x91U,0x0AU,0x20U,0x00U,0x41U,
0xD6U,0x00U,0x3AU,0x00U,0x90U,0x0AU,0x20U,0x00U,0x20U,0x00U,
0x2DU,0x00U,0xEDU,0x09U,0x3AU,0x00U,0x92U,0x0AU,0x20U,0x00U,
0x20U,0x00U,0x2DU,0x00U,0xECU,0x09U,0x3AU,0x00U,0x93U,0x0AU,
0x20U,0x01U,0x20U,0x00U,0x41U,0x90U,0x09U,0x6AU,0x6AU,0x20U, 0x20U,0x01U,0x20U,0x00U,0x41U,0x90U,0x09U,0x6AU,0x6AU,0x20U,
0x06U,0x20U,0x00U,0x41U,0x90U,0x0AU,0x6AU,0x41U,0x20U,0x10U, 0x05U,0x20U,0x00U,0x41U,0x90U,0x0AU,0x6AU,0x41U,0x20U,0x10U,
0x07U,0x22U,0x0BU,0x20U,0x09U,0x51U,0x04U,0x40U,0x02U,0x40U, 0x07U,0x22U,0x0AU,0x20U,0x08U,0x51U,0x04U,0x40U,0x02U,0x40U,
0x20U,0x00U,0x29U,0x03U,0x90U,0x09U,0x20U,0x00U,0x29U,0x03U, 0x20U,0x00U,0x29U,0x03U,0x90U,0x09U,0x20U,0x00U,0x29U,0x03U,
0xB0U,0x09U,0x52U,0x20U,0x00U,0x29U,0x03U,0x98U,0x09U,0x20U, 0xB0U,0x09U,0x52U,0x20U,0x00U,0x29U,0x03U,0x98U,0x09U,0x20U,
0x00U,0x29U,0x03U,0xB8U,0x09U,0x52U,0x72U,0x20U,0x00U,0x29U, 0x00U,0x29U,0x03U,0xB8U,0x09U,0x52U,0x72U,0x20U,0x00U,0x29U,
@@ -189,153 +191,155 @@ static const std::vector<uint8_t> GovernanceHook =
0x20U,0x00U,0x29U,0x03U,0xA8U,0x09U,0x20U,0x00U,0x29U,0x03U, 0x20U,0x00U,0x29U,0x03U,0xA8U,0x09U,0x20U,0x00U,0x29U,0x03U,
0xC8U,0x09U,0x52U,0x72U,0x72U,0x0DU,0x00U,0x41U,0xC4U,0x11U, 0xC8U,0x09U,0x52U,0x72U,0x72U,0x0DU,0x00U,0x41U,0xC4U,0x11U,
0x41U,0x3FU,0x42U,0xA0U,0x02U,0x10U,0x03U,0x1AU,0x0BU,0x0BU, 0x41U,0x3FU,0x42U,0xA0U,0x02U,0x10U,0x03U,0x1AU,0x0BU,0x0BU,
0x20U,0x07U,0x20U,0x06U,0x20U,0x00U,0x41U,0x90U,0x0AU,0x6AU, 0x20U,0x06U,0x20U,0x05U,0x20U,0x00U,0x41U,0x90U,0x0AU,0x6AU,
0x41U,0x20U,0x10U,0x0BU,0x20U,0x09U,0x52U,0x04U,0x40U,0x41U, 0x41U,0x20U,0x10U,0x0BU,0x20U,0x08U,0x52U,0x04U,0x40U,0x41U,
0xF9U,0x09U,0x41U,0x1AU,0x42U,0xA7U,0x02U,0x10U,0x09U,0x1AU, 0xF9U,0x09U,0x41U,0x1AU,0x42U,0xA7U,0x02U,0x10U,0x09U,0x1AU,
0x0BU,0x41U,0x00U,0x21U,0x01U,0x02U,0x40U,0x20U,0x0BU,0x42U, 0x0BU,0x41U,0x00U,0x21U,0x01U,0x02U,0x40U,0x20U,0x0AU,0x42U,
0x01U,0x59U,0x04U,0x40U,0x20U,0x00U,0x20U,0x04U,0x3AU,0x00U, 0x01U,0x59U,0x04U,0x40U,0x20U,0x00U,0x20U,0x03U,0x3AU,0x00U,
0x92U,0x09U,0x20U,0x00U,0x20U,0x03U,0x3AU,0x00U,0x91U,0x09U, 0x91U,0x09U,0x20U,0x00U,0x41U,0xC3U,0x00U,0x3AU,0x00U,0x90U,
0x20U,0x00U,0x41U,0xC3U,0x00U,0x3AU,0x00U,0x90U,0x09U,0x20U, 0x09U,0x20U,0x00U,0x41U,0x00U,0x3AU,0x00U,0x80U,0x01U,0x20U,
0x00U,0x41U,0x00U,0x3AU,0x00U,0x80U,0x01U,0x20U,0x00U,0x20U, 0x00U,0x20U,0x00U,0x2DU,0x00U,0xEDU,0x09U,0x3AU,0x00U,0x92U,
0x00U,0x2DU,0x00U,0xEDU,0x09U,0x3AU,0x00U,0x93U,0x09U,0x20U, 0x09U,0x20U,0x00U,0x20U,0x00U,0x2DU,0x00U,0xECU,0x09U,0x3AU,
0x00U,0x41U,0x80U,0x01U,0x6AU,0x41U,0x01U,0x20U,0x00U,0x41U, 0x00U,0x93U,0x09U,0x20U,0x00U,0x41U,0x80U,0x01U,0x6AU,0x41U,
0x90U,0x09U,0x6AU,0x41U,0x20U,0x10U,0x07U,0x50U,0x0DU,0x01U, 0x01U,0x20U,0x00U,0x41U,0x90U,0x09U,0x6AU,0x41U,0x20U,0x10U,
0x20U,0x00U,0x2DU,0x00U,0x80U,0x01U,0x22U,0x02U,0x45U,0x0DU, 0x07U,0x50U,0x0DU,0x01U,0x20U,0x00U,0x2DU,0x00U,0x80U,0x01U,
0x01U,0x20U,0x00U,0x20U,0x02U,0x41U,0x01U,0x6BU,0x22U,0x01U, 0x22U,0x02U,0x45U,0x0DU,0x01U,0x20U,0x00U,0x20U,0x02U,0x41U,
0x3AU,0x00U,0x80U,0x01U,0x20U,0x00U,0x41U,0x80U,0x01U,0x6AU, 0x01U,0x6BU,0x22U,0x01U,0x3AU,0x00U,0x80U,0x01U,0x20U,0x00U,
0x41U,0x00U,0x20U,0x01U,0x41U,0xFFU,0x01U,0x71U,0x22U,0x01U, 0x41U,0x80U,0x01U,0x6AU,0x41U,0x00U,0x20U,0x01U,0x41U,0xFFU,
0x1BU,0x20U,0x01U,0x41U,0x00U,0x47U,0x20U,0x00U,0x41U,0x90U, 0x01U,0x71U,0x22U,0x01U,0x1BU,0x20U,0x01U,0x41U,0x00U,0x47U,
0x09U,0x6AU,0x41U,0x20U,0x10U,0x0BU,0x50U,0x04U,0x40U,0x41U, 0x20U,0x00U,0x41U,0x90U,0x09U,0x6AU,0x41U,0x20U,0x10U,0x0BU,
0xF9U,0x09U,0x41U,0x1AU,0x42U,0xB9U,0x02U,0x10U,0x09U,0x1AU, 0x50U,0x04U,0x40U,0x41U,0xF9U,0x09U,0x41U,0x1AU,0x42U,0xB9U,
0x0BU,0x20U,0x02U,0x21U,0x01U,0x0BU,0x0BU,0x20U,0x00U,0x41U, 0x02U,0x10U,0x09U,0x1AU,0x0BU,0x20U,0x02U,0x21U,0x01U,0x0BU,
0x00U,0x3AU,0x00U,0x8FU,0x09U,0x20U,0x00U,0x29U,0x03U,0xB0U, 0x0BU,0x20U,0x00U,0x41U,0x00U,0x3AU,0x00U,0x8FU,0x09U,0x20U,
0x09U,0x21U,0x09U,0x20U,0x00U,0x41U,0xC3U,0x00U,0x3AU,0x00U, 0x00U,0x29U,0x03U,0xB0U,0x09U,0x21U,0x08U,0x20U,0x00U,0x41U,
0xB0U,0x09U,0x20U,0x00U,0x20U,0x00U,0x2DU,0x00U,0xEDU,0x09U, 0xC3U,0x00U,0x3AU,0x00U,0xB0U,0x09U,0x20U,0x00U,0x20U,0x00U,
0x3AU,0x00U,0xB3U,0x09U,0x20U,0x00U,0x20U,0x04U,0x3AU,0x00U, 0x2DU,0x00U,0xECU,0x09U,0x3AU,0x00U,0xB3U,0x09U,0x20U,0x00U,
0xB2U,0x09U,0x20U,0x00U,0x20U,0x03U,0x3AU,0x00U,0xB1U,0x09U, 0x20U,0x00U,0x2DU,0x00U,0xEDU,0x09U,0x3AU,0x00U,0xB2U,0x09U,
0x20U,0x00U,0x41U,0x8FU,0x09U,0x6AU,0x22U,0x02U,0x41U,0x01U, 0x20U,0x00U,0x20U,0x03U,0x3AU,0x00U,0xB1U,0x09U,0x20U,0x00U,
0x20U,0x00U,0x41U,0xB0U,0x09U,0x6AU,0x22U,0x05U,0x41U,0x20U, 0x41U,0x8FU,0x09U,0x6AU,0x22U,0x02U,0x41U,0x01U,0x20U,0x00U,
0x10U,0x07U,0x1AU,0x20U,0x00U,0x20U,0x00U,0x2DU,0x00U,0x8FU, 0x41U,0xB0U,0x09U,0x6AU,0x22U,0x04U,0x41U,0x20U,0x10U,0x07U,
0x09U,0x41U,0x01U,0x6AU,0x3AU,0x00U,0x8FU,0x09U,0x20U,0x02U, 0x1AU,0x20U,0x00U,0x20U,0x00U,0x2DU,0x00U,0x8FU,0x09U,0x41U,
0x41U,0x01U,0x20U,0x05U,0x41U,0x20U,0x10U,0x0BU,0x42U,0x00U, 0x01U,0x6AU,0x3AU,0x00U,0x8FU,0x09U,0x20U,0x02U,0x41U,0x01U,
0x57U,0x04U,0x40U,0x41U,0xF9U,0x09U,0x41U,0x1AU,0x42U,0xCAU, 0x20U,0x04U,0x41U,0x20U,0x10U,0x0BU,0x42U,0x00U,0x57U,0x04U,
0x02U,0x10U,0x09U,0x1AU,0x0BU,0x20U,0x00U,0x20U,0x09U,0x37U, 0x40U,0x41U,0xF9U,0x09U,0x41U,0x1AU,0x42U,0xCAU,0x02U,0x10U,
0x03U,0xB0U,0x09U,0x41U,0x00U,0x21U,0x05U,0x02U,0x40U,0x20U, 0x09U,0x1AU,0x0BU,0x20U,0x00U,0x20U,0x08U,0x37U,0x03U,0xB0U,
0x09U,0x50U,0x04U,0x40U,0x20U,0x00U,0x41U,0xF0U,0x09U,0x6AU, 0x09U,0x41U,0x00U,0x21U,0x04U,0x02U,0x40U,0x20U,0x08U,0x50U,
0x29U,0x03U,0x00U,0x42U,0x00U,0x52U,0x20U,0x00U,0x41U,0xB0U, 0x04U,0x40U,0x20U,0x00U,0x41U,0xF0U,0x09U,0x6AU,0x29U,0x03U,
0x0AU,0x6AU,0x29U,0x03U,0x00U,0x42U,0x00U,0x52U,0x72U,0x0DU, 0x00U,0x42U,0x00U,0x52U,0x20U,0x00U,0x41U,0xB0U,0x0AU,0x6AU,
0x01U,0x20U,0x00U,0x41U,0xF0U,0x0AU,0x6AU,0x29U,0x03U,0x00U, 0x29U,0x03U,0x00U,0x42U,0x00U,0x52U,0x72U,0x0DU,0x01U,0x20U,
0x50U,0x21U,0x05U,0x0BU,0x0BU,0x41U,0x83U,0x12U,0x41U,0x0FU, 0x00U,0x41U,0xF0U,0x0AU,0x6AU,0x29U,0x03U,0x00U,0x50U,0x21U,
0x20U,0x05U,0xADU,0x10U,0x0AU,0x1AU,0x41U,0x93U,0x12U,0x41U, 0x04U,0x0BU,0x0BU,0x41U,0x83U,0x12U,0x41U,0x0FU,0x20U,0x04U,
0x05U,0x20U,0x00U,0x31U,0x00U,0x8FU,0x09U,0x10U,0x0AU,0x1AU, 0xADU,0x10U,0x0AU,0x1AU,0x41U,0x93U,0x12U,0x41U,0x05U,0x20U,
0x41U,0x93U,0x0AU,0x41U,0x0CU,0x20U,0x0AU,0x10U,0x0AU,0x1AU, 0x00U,0x31U,0x00U,0x8FU,0x09U,0x10U,0x0AU,0x1AU,0x41U,0x93U,
0x41U,0x99U,0x12U,0x41U,0x06U,0x20U,0x00U,0x41U,0xEEU,0x09U, 0x0AU,0x41U,0x0CU,0x20U,0x09U,0x10U,0x0AU,0x1AU,0x41U,0x99U,
0x6AU,0x41U,0x02U,0x41U,0x01U,0x10U,0x06U,0x1AU,0x20U,0x0AU, 0x12U,0x41U,0x06U,0x20U,0x00U,0x41U,0xEEU,0x09U,0x6AU,0x41U,
0xB9U,0x22U,0x0DU,0x44U,0x52U,0xB8U,0x1EU,0x85U,0xEBU,0x51U, 0x02U,0x41U,0x01U,0x10U,0x06U,0x1AU,0x20U,0x09U,0xB9U,0x22U,
0xE0U,0x3FU,0xA2U,0x22U,0x0EU,0x99U,0x44U,0x00U,0x00U,0x00U, 0x0CU,0x44U,0x52U,0xB8U,0x1EU,0x85U,0xEBU,0x51U,0xE0U,0x3FU,
0x00U,0x00U,0x00U,0xE0U,0x43U,0x63U,0x04U,0x7EU,0x20U,0x0EU, 0xA2U,0x22U,0x0DU,0x99U,0x44U,0x00U,0x00U,0x00U,0x00U,0x00U,
0xB0U,0x05U,0x42U,0x80U,0x80U,0x80U,0x80U,0x80U,0x80U,0x80U, 0x00U,0xE0U,0x43U,0x63U,0x04U,0x7EU,0x20U,0x0DU,0xB0U,0x05U,
0x80U,0x80U,0x7FU,0x0BU,0x21U,0x09U,0x20U,0x00U,0x2DU,0x00U, 0x42U,0x80U,0x80U,0x80U,0x80U,0x80U,0x80U,0x80U,0x80U,0x80U,
0xEDU,0x09U,0x41U,0x01U,0x47U,0x21U,0x02U,0x20U,0x0DU,0x44U, 0x7FU,0x0BU,0x21U,0x08U,0x20U,0x00U,0x2DU,0x00U,0xECU,0x09U,
0x9AU,0x99U,0x99U,0x99U,0x99U,0x99U,0xE9U,0x3FU,0xA2U,0x22U, 0x41U,0x01U,0x47U,0x21U,0x02U,0x20U,0x0CU,0x44U,0x9AU,0x99U,
0x0DU,0x99U,0x44U,0x00U,0x00U,0x00U,0x00U,0x00U,0x00U,0xE0U, 0x99U,0x99U,0x99U,0x99U,0xE9U,0x3FU,0xA2U,0x22U,0x0CU,0x99U,
0x43U,0x63U,0x04U,0x7EU,0x20U,0x0DU,0xB0U,0x05U,0x42U,0x80U, 0x44U,0x00U,0x00U,0x00U,0x00U,0x00U,0x00U,0xE0U,0x43U,0x63U,
0x80U,0x80U,0x80U,0x80U,0x80U,0x80U,0x80U,0x80U,0x7FU,0x0BU, 0x04U,0x7EU,0x20U,0x0CU,0xB0U,0x05U,0x42U,0x80U,0x80U,0x80U,
0x21U,0x0BU,0x02U,0x40U,0x20U,0x02U,0x04U,0x40U,0x20U,0x00U, 0x80U,0x80U,0x80U,0x80U,0x80U,0x80U,0x7FU,0x0BU,0x21U,0x0AU,
0x31U,0x00U,0x8FU,0x09U,0x21U,0x0BU,0x20U,0x09U,0x42U,0x02U, 0x02U,0x40U,0x20U,0x02U,0x04U,0x40U,0x20U,0x00U,0x31U,0x00U,
0x20U,0x09U,0x42U,0x02U,0x55U,0x1BU,0x22U,0x0CU,0x20U,0x01U, 0x8FU,0x09U,0x21U,0x0AU,0x20U,0x08U,0x42U,0x02U,0x20U,0x08U,
0xADU,0x57U,0x04U,0x40U,0x02U,0x40U,0x20U,0x0BU,0x20U,0x0CU, 0x42U,0x02U,0x55U,0x1BU,0x22U,0x0BU,0x20U,0x01U,0xADU,0x57U,
0x59U,0x0DU,0x00U,0x41U,0xDBU,0x12U,0x41U,0x3EU,0x41U,0x00U, 0x04U,0x40U,0x02U,0x40U,0x20U,0x0AU,0x20U,0x0BU,0x59U,0x0DU,
0x41U,0x00U,0x41U,0x00U,0x10U,0x06U,0x1AU,0x42U,0x01U,0x21U, 0x00U,0x41U,0xDBU,0x12U,0x41U,0x3EU,0x41U,0x00U,0x41U,0x00U,
0x09U,0x0CU,0x03U,0x0BU,0x0BU,0x42U,0x00U,0x21U,0x09U,0x20U, 0x41U,0x00U,0x10U,0x06U,0x1AU,0x42U,0x01U,0x21U,0x08U,0x0CU,
0x0BU,0x20U,0x0CU,0x59U,0x0DU,0x01U,0x41U,0x99U,0x13U,0x41U, 0x03U,0x0BU,0x0BU,0x42U,0x00U,0x21U,0x08U,0x20U,0x0AU,0x20U,
0xC7U,0x00U,0x42U,0xFCU,0x02U,0x10U,0x03U,0x1AU,0x05U,0x42U, 0x0BU,0x59U,0x0DU,0x01U,0x41U,0x99U,0x13U,0x41U,0xC7U,0x00U,
0x00U,0x21U,0x09U,0x20U,0x00U,0x31U,0x00U,0x8FU,0x09U,0x20U, 0x42U,0xFCU,0x02U,0x10U,0x03U,0x1AU,0x05U,0x42U,0x00U,0x21U,
0x0BU,0x42U,0x02U,0x20U,0x0BU,0x42U,0x02U,0x55U,0x1BU,0x20U, 0x08U,0x20U,0x00U,0x31U,0x00U,0x8FU,0x09U,0x20U,0x0AU,0x42U,
0x0AU,0x20U,0x03U,0x41U,0xD3U,0x00U,0x46U,0x1BU,0x59U,0x0DU, 0x02U,0x20U,0x0AU,0x42U,0x02U,0x55U,0x1BU,0x20U,0x09U,0x20U,
0x01U,0x41U,0x9FU,0x12U,0x41U,0x3CU,0x42U,0xF4U,0x02U,0x10U, 0x03U,0x41U,0xD3U,0x00U,0x46U,0x1BU,0x59U,0x0DU,0x01U,0x41U,
0x03U,0x1AU,0x0BU,0x0BU,0x41U,0xE0U,0x13U,0x41U,0x11U,0x41U, 0x9FU,0x12U,0x41U,0x3CU,0x42U,0xF4U,0x02U,0x10U,0x03U,0x1AU,
0xF2U,0x13U,0x41U,0x10U,0x41U,0x00U,0x10U,0x06U,0x1AU,0x20U, 0x0BU,0x0BU,0x41U,0xE0U,0x13U,0x41U,0x11U,0x41U,0xF2U,0x13U,
0x00U,0x2DU,0x00U,0xEDU,0x09U,0x41U,0x02U,0x46U,0x04U,0x40U, 0x41U,0x10U,0x41U,0x00U,0x10U,0x06U,0x1AU,0x20U,0x00U,0x2DU,
0x10U,0x0DU,0x21U,0x0BU,0x20U,0x00U,0x41U,0x9EU,0x01U,0x6AU, 0x00U,0xECU,0x09U,0x41U,0x02U,0x46U,0x04U,0x40U,0x10U,0x0DU,
0x42U,0x80U,0x80U,0x80U,0x80U,0xB0U,0x8EU,0xC0U,0xC0U,0x14U, 0x21U,0x0AU,0x20U,0x00U,0x41U,0x9EU,0x01U,0x6AU,0x42U,0x80U,
0x37U,0x00U,0x00U,0x20U,0x00U,0x41U,0xE8U,0x80U,0x01U,0x3BU, 0x80U,0x80U,0x80U,0xB0U,0x8EU,0xC0U,0xC0U,0x14U,0x37U,0x00U,
0x00U,0x99U,0x01U,0x20U,0x00U,0x41U,0xA0U,0x36U,0x3BU,0x00U, 0x00U,0x20U,0x00U,0x41U,0xE8U,0x80U,0x01U,0x3BU,0x00U,0x99U,
0x93U,0x01U,0x20U,0x00U,0x41U,0xA0U,0x34U,0x3BU,0x00U,0x8DU, 0x01U,0x20U,0x00U,0x41U,0xA0U,0x36U,0x3BU,0x00U,0x93U,0x01U,
0x01U,0x20U,0x00U,0x41U,0x00U,0x36U,0x00U,0x89U,0x01U,0x20U, 0x20U,0x00U,0x41U,0xA0U,0x34U,0x3BU,0x00U,0x8DU,0x01U,0x20U,
0x00U,0x41U,0x24U,0x3AU,0x00U,0x88U,0x01U,0x20U,0x00U,0x42U, 0x00U,0x41U,0x00U,0x36U,0x00U,0x89U,0x01U,0x20U,0x00U,0x41U,
0x92U,0x80U,0x8CU,0x93U,0x82U,0x10U,0x37U,0x03U,0x80U,0x01U, 0x24U,0x3AU,0x00U,0x88U,0x01U,0x20U,0x00U,0x42U,0x92U,0x80U,
0x20U,0x00U,0x41U,0x00U,0x36U,0x00U,0x9BU,0x01U,0x20U,0x00U, 0x8CU,0x93U,0x82U,0x10U,0x37U,0x03U,0x80U,0x01U,0x20U,0x00U,
0x20U,0x0BU,0xA7U,0x22U,0x02U,0x41U,0x05U,0x6AU,0x22U,0x01U, 0x41U,0x00U,0x36U,0x00U,0x9BU,0x01U,0x20U,0x00U,0x20U,0x0AU,
0x3AU,0x00U,0x98U,0x01U,0x20U,0x00U,0x20U,0x01U,0x41U,0x08U, 0xA7U,0x22U,0x02U,0x41U,0x05U,0x6AU,0x22U,0x01U,0x3AU,0x00U,
0x76U,0x3AU,0x00U,0x97U,0x01U,0x20U,0x00U,0x20U,0x01U,0x41U, 0x98U,0x01U,0x20U,0x00U,0x20U,0x01U,0x41U,0x08U,0x76U,0x3AU,
0x10U,0x76U,0x3AU,0x00U,0x96U,0x01U,0x20U,0x00U,0x20U,0x01U, 0x00U,0x97U,0x01U,0x20U,0x00U,0x20U,0x01U,0x41U,0x10U,0x76U,
0x41U,0x18U,0x76U,0x3AU,0x00U,0x95U,0x01U,0x20U,0x00U,0x20U, 0x3AU,0x00U,0x96U,0x01U,0x20U,0x00U,0x20U,0x01U,0x41U,0x18U,
0x02U,0x41U,0x01U,0x6AU,0x22U,0x01U,0x3AU,0x00U,0x92U,0x01U, 0x76U,0x3AU,0x00U,0x95U,0x01U,0x20U,0x00U,0x20U,0x02U,0x41U,
0x20U,0x00U,0x20U,0x01U,0x41U,0x08U,0x76U,0x3AU,0x00U,0x91U, 0x01U,0x6AU,0x22U,0x01U,0x3AU,0x00U,0x92U,0x01U,0x20U,0x00U,
0x01U,0x20U,0x00U,0x20U,0x01U,0x41U,0x10U,0x76U,0x3AU,0x00U, 0x20U,0x01U,0x41U,0x08U,0x76U,0x3AU,0x00U,0x91U,0x01U,0x20U,
0x90U,0x01U,0x20U,0x00U,0x20U,0x01U,0x41U,0x18U,0x76U,0x3AU, 0x00U,0x20U,0x01U,0x41U,0x10U,0x76U,0x3AU,0x00U,0x90U,0x01U,
0x00U,0x8FU,0x01U,0x20U,0x00U,0x20U,0x00U,0x29U,0x03U,0xFCU, 0x20U,0x00U,0x20U,0x01U,0x41U,0x18U,0x76U,0x3AU,0x00U,0x8FU,
0x09U,0x37U,0x03U,0xA6U,0x01U,0x20U,0x00U,0x41U,0x83U,0x29U, 0x01U,0x20U,0x00U,0x20U,0x00U,0x29U,0x03U,0xFCU,0x09U,0x37U,
0x3BU,0x01U,0xBAU,0x01U,0x20U,0x00U,0x20U,0x00U,0x29U,0x03U, 0x03U,0xA6U,0x01U,0x20U,0x00U,0x41U,0x83U,0x29U,0x3BU,0x01U,
0x84U,0x0AU,0x37U,0x03U,0xAEU,0x01U,0x20U,0x00U,0x20U,0x00U, 0xBAU,0x01U,0x20U,0x00U,0x20U,0x00U,0x29U,0x03U,0x84U,0x0AU,
0x28U,0x02U,0x8CU,0x0AU,0x36U,0x02U,0xB6U,0x01U,0x20U,0x00U, 0x37U,0x03U,0xAEU,0x01U,0x20U,0x00U,0x20U,0x00U,0x28U,0x02U,
0x41U,0x80U,0x08U,0x29U,0x03U,0x00U,0x37U,0x03U,0xBCU,0x01U, 0x8CU,0x0AU,0x36U,0x02U,0xB6U,0x01U,0x20U,0x00U,0x41U,0x80U,
0x20U,0x00U,0x41U,0x88U,0x08U,0x29U,0x03U,0x00U,0x37U,0x03U, 0x08U,0x29U,0x03U,0x00U,0x37U,0x03U,0xBCU,0x01U,0x20U,0x00U,
0xC4U,0x01U,0x20U,0x00U,0x41U,0x90U,0x08U,0x28U,0x02U,0x00U, 0x41U,0x88U,0x08U,0x29U,0x03U,0x00U,0x37U,0x03U,0xC4U,0x01U,
0x36U,0x02U,0xCCU,0x01U,0x20U,0x00U,0x41U,0xD0U,0x01U,0x6AU, 0x20U,0x00U,0x41U,0x90U,0x08U,0x28U,0x02U,0x00U,0x36U,0x02U,
0x22U,0x01U,0x41U,0x80U,0x04U,0x10U,0x0EU,0xA7U,0x20U,0x01U, 0xCCU,0x01U,0x20U,0x00U,0x41U,0xD0U,0x01U,0x6AU,0x22U,0x01U,
0x6AU,0x22U,0x01U,0x41U,0xF0U,0xB2U,0x08U,0x36U,0x02U,0x08U, 0x41U,0x80U,0x04U,0x10U,0x0EU,0xA7U,0x20U,0x01U,0x6AU,0x22U,
0x20U,0x01U,0x42U,0xF0U,0xA7U,0x80U,0xBFU,0x81U,0x8EU,0xC6U, 0x01U,0x41U,0xF0U,0xB2U,0x08U,0x36U,0x02U,0x08U,0x20U,0x01U,
0x80U,0xD4U,0x00U,0x37U,0x03U,0x00U,0x20U,0x01U,0x41U,0x0BU, 0x42U,0xF0U,0xA7U,0x80U,0xBFU,0x81U,0x8EU,0xC6U,0x80U,0xD4U,
0x6AU,0x20U,0x04U,0x20U,0x03U,0x41U,0x04U,0x74U,0x6AU,0x3AU, 0x00U,0x37U,0x03U,0x00U,0x20U,0x01U,0x41U,0x0BU,0x6AU,0x20U,
0x00U,0x00U,0x20U,0x01U,0x41U,0x15U,0x6AU,0x20U,0x06U,0x3AU, 0x00U,0x2DU,0x00U,0xEDU,0x09U,0x20U,0x03U,0x41U,0x04U,0x74U,
0x00U,0x00U,0x20U,0x01U,0x41U,0x14U,0x6AU,0x41U,0x19U,0x3AU, 0x6AU,0x3AU,0x00U,0x00U,0x20U,0x01U,0x41U,0x15U,0x6AU,0x20U,
0x00U,0x00U,0x20U,0x01U,0x41U,0x0CU,0x6AU,0x42U,0xE1U,0xC1U, 0x05U,0x3AU,0x00U,0x00U,0x20U,0x01U,0x41U,0x14U,0x6AU,0x41U,
0xDFU,0x80U,0x87U,0xA3U,0x80U,0xABU,0xF0U,0x00U,0x37U,0x03U, 0x19U,0x3AU,0x00U,0x00U,0x20U,0x01U,0x41U,0x0CU,0x6AU,0x42U,
0x00U,0x20U,0x01U,0x41U,0x16U,0x6AU,0x21U,0x01U,0x20U,0x09U, 0xE1U,0xC1U,0xDFU,0x80U,0x87U,0xA3U,0x80U,0xABU,0xF0U,0x00U,
0x50U,0x04U,0x40U,0x20U,0x01U,0x20U,0x07U,0x29U,0x03U,0x00U, 0x37U,0x03U,0x00U,0x20U,0x01U,0x41U,0x16U,0x6AU,0x21U,0x01U,
0x37U,0x03U,0x00U,0x20U,0x01U,0x20U,0x07U,0x29U,0x03U,0x08U, 0x20U,0x08U,0x50U,0x04U,0x40U,0x20U,0x01U,0x20U,0x06U,0x29U,
0x37U,0x03U,0x08U,0x20U,0x01U,0x41U,0x10U,0x6AU,0x20U,0x07U, 0x03U,0x00U,0x37U,0x03U,0x00U,0x20U,0x01U,0x20U,0x06U,0x29U,
0x29U,0x03U,0x10U,0x37U,0x03U,0x00U,0x20U,0x01U,0x41U,0x18U, 0x03U,0x08U,0x37U,0x03U,0x08U,0x20U,0x01U,0x41U,0x10U,0x6AU,
0x6AU,0x20U,0x07U,0x29U,0x03U,0x18U,0x37U,0x03U,0x00U,0x0BU, 0x20U,0x06U,0x29U,0x03U,0x10U,0x37U,0x03U,0x00U,0x20U,0x01U,
0x20U,0x01U,0x20U,0x06U,0x6AU,0x22U,0x01U,0x41U,0xE1U,0xE3U, 0x41U,0x18U,0x6AU,0x20U,0x06U,0x29U,0x03U,0x18U,0x37U,0x03U,
0x03U,0x3BU,0x01U,0x00U,0x20U,0x01U,0x20U,0x00U,0x41U,0x80U, 0x00U,0x0BU,0x20U,0x01U,0x20U,0x05U,0x6AU,0x22U,0x01U,0x41U,
0x01U,0x6AU,0x22U,0x01U,0x6BU,0x21U,0x02U,0x20U,0x00U,0x20U, 0xE1U,0xE3U,0x03U,0x3BU,0x01U,0x00U,0x20U,0x01U,0x20U,0x00U,
0x01U,0x20U,0x02U,0x10U,0x0FU,0x22U,0x09U,0x3CU,0x00U,0xA1U, 0x41U,0x80U,0x01U,0x6AU,0x22U,0x01U,0x6BU,0x21U,0x02U,0x20U,
0x01U,0x20U,0x00U,0x41U,0xE8U,0x00U,0x3AU,0x00U,0x99U,0x01U, 0x00U,0x20U,0x01U,0x20U,0x02U,0x10U,0x0FU,0x22U,0x08U,0x3CU,
0x20U,0x00U,0x20U,0x09U,0x42U,0x08U,0x88U,0x3CU,0x00U,0xA0U, 0x00U,0xA1U,0x01U,0x20U,0x00U,0x41U,0xE8U,0x00U,0x3AU,0x00U,
0x01U,0x20U,0x00U,0x20U,0x09U,0x42U,0x10U,0x88U,0x3CU,0x00U, 0x99U,0x01U,0x20U,0x00U,0x20U,0x08U,0x42U,0x08U,0x88U,0x3CU,
0x9FU,0x01U,0x20U,0x00U,0x20U,0x09U,0x42U,0x18U,0x88U,0x3CU, 0x00U,0xA0U,0x01U,0x20U,0x00U,0x20U,0x08U,0x42U,0x10U,0x88U,
0x00U,0x9EU,0x01U,0x20U,0x00U,0x20U,0x09U,0x42U,0x20U,0x88U, 0x3CU,0x00U,0x9FU,0x01U,0x20U,0x00U,0x20U,0x08U,0x42U,0x18U,
0x3CU,0x00U,0x9DU,0x01U,0x20U,0x00U,0x20U,0x09U,0x42U,0x28U, 0x88U,0x3CU,0x00U,0x9EU,0x01U,0x20U,0x00U,0x20U,0x08U,0x42U,
0x88U,0x3CU,0x00U,0x9CU,0x01U,0x20U,0x00U,0x20U,0x09U,0x42U, 0x20U,0x88U,0x3CU,0x00U,0x9DU,0x01U,0x20U,0x00U,0x20U,0x08U,
0x30U,0x88U,0x3CU,0x00U,0x9BU,0x01U,0x20U,0x00U,0x20U,0x09U, 0x42U,0x28U,0x88U,0x3CU,0x00U,0x9CU,0x01U,0x20U,0x00U,0x20U,
0x42U,0x38U,0x88U,0xA7U,0x41U,0x3FU,0x71U,0x41U,0xC0U,0x00U, 0x08U,0x42U,0x30U,0x88U,0x3CU,0x00U,0x9BU,0x01U,0x20U,0x00U,
0x72U,0x3AU,0x00U,0x9AU,0x01U,0x41U,0x82U,0x14U,0x41U,0x22U, 0x20U,0x08U,0x42U,0x38U,0x88U,0xA7U,0x41U,0x3FU,0x71U,0x41U,
0x20U,0x01U,0x20U,0x02U,0x41U,0x01U,0x10U,0x06U,0x1AU,0x41U, 0xC0U,0x00U,0x72U,0x3AU,0x00U,0x9AU,0x01U,0x41U,0x82U,0x14U,
0xA4U,0x14U,0x41U,0x18U,0x20U,0x00U,0x41U,0x20U,0x6AU,0x41U, 0x41U,0x22U,0x20U,0x01U,0x20U,0x02U,0x41U,0x01U,0x10U,0x06U,
0x20U,0x20U,0x01U,0x20U,0x02U,0x10U,0x10U,0x22U,0x09U,0x10U, 0x1AU,0x41U,0xA4U,0x14U,0x41U,0x18U,0x20U,0x00U,0x41U,0x20U,
0x0AU,0x1AU,0x20U,0x09U,0x42U,0x20U,0x51U,0x04U,0x40U,0x41U, 0x6AU,0x41U,0x20U,0x20U,0x01U,0x20U,0x02U,0x10U,0x10U,0x22U,
0xBCU,0x14U,0x41U,0x2AU,0x42U,0xD0U,0x03U,0x10U,0x03U,0x1AU, 0x08U,0x10U,0x0AU,0x1AU,0x20U,0x08U,0x42U,0x20U,0x51U,0x04U,
0x0BU,0x41U,0xE6U,0x14U,0x41U,0x25U,0x42U,0xD2U,0x03U,0x10U, 0x40U,0x41U,0xBCU,0x14U,0x41U,0x2AU,0x42U,0xD0U,0x03U,0x10U,
0x09U,0x1AU,0x0BU,0x02U,0x40U,0x02U,0x40U,0x20U,0x03U,0x41U, 0x03U,0x1AU,0x0BU,0x41U,0xE6U,0x14U,0x41U,0x25U,0x42U,0xD2U,
0xD2U,0x00U,0x6BU,0x22U,0x01U,0x41U,0x01U,0x4DU,0x04U,0x40U, 0x03U,0x10U,0x09U,0x1AU,0x0BU,0x02U,0x40U,0x02U,0x40U,0x20U,
0x20U,0x01U,0x41U,0x01U,0x46U,0x0DU,0x01U,0x41U,0x8BU,0x15U, 0x03U,0x41U,0xD2U,0x00U,0x6BU,0x22U,0x01U,0x41U,0x01U,0x4DU,
0x41U,0x06U,0x20U,0x07U,0x20U,0x06U,0x20U,0x00U,0x41U,0xEEU, 0x04U,0x40U,0x20U,0x01U,0x41U,0x01U,0x46U,0x0DU,0x01U,0x41U,
0x09U,0x6AU,0x41U,0x02U,0x10U,0x0BU,0x22U,0x09U,0x10U,0x0AU, 0x8BU,0x15U,0x41U,0x06U,0x20U,0x06U,0x20U,0x05U,0x20U,0x00U,
0x1AU,0x20U,0x09U,0x42U,0x00U,0x57U,0x04U,0x40U,0x41U,0xF9U, 0x41U,0xEEU,0x09U,0x6AU,0x41U,0x02U,0x10U,0x0BU,0x22U,0x08U,
0x09U,0x41U,0x1AU,0x42U,0xDCU,0x03U,0x10U,0x09U,0x1AU,0x0BU, 0x10U,0x0AU,0x1AU,0x20U,0x08U,0x42U,0x00U,0x57U,0x04U,0x40U,
0x20U,0x04U,0x41U,0xD2U,0x00U,0x46U,0x04U,0x40U,0x41U,0x92U, 0x41U,0xF9U,0x09U,0x41U,0x1AU,0x42U,0xDCU,0x03U,0x10U,0x09U,
0x15U,0x41U,0x29U,0x42U,0xDEU,0x03U,0x10U,0x03U,0x1AU,0x0BU, 0x1AU,0x0BU,0x20U,0x00U,0x2DU,0x00U,0xEDU,0x09U,0x41U,0xD2U,
0x41U,0xBBU,0x15U,0x41U,0x2AU,0x42U,0xE0U,0x03U,0x10U,0x03U, 0x00U,0x46U,0x04U,0x40U,0x41U,0x92U,0x15U,0x41U,0x29U,0x42U,
0x1AU,0x05U,0x20U,0x03U,0x41U,0xC8U,0x00U,0x47U,0x0DU,0x02U, 0xDEU,0x03U,0x10U,0x03U,0x1AU,0x0BU,0x41U,0xBBU,0x15U,0x41U,
0x0BU,0x20U,0x00U,0x41U,0xD0U,0x00U,0x6AU,0x22U,0x01U,0x41U, 0x2AU,0x42U,0xE0U,0x03U,0x10U,0x03U,0x1AU,0x05U,0x20U,0x03U,
0x22U,0x41U,0x01U,0x20U,0x08U,0x41U,0x14U,0x41U,0x00U,0x41U, 0x41U,0xC8U,0x00U,0x47U,0x0DU,0x02U,0x0BU,0x20U,0x00U,0x41U,
0x00U,0x41U,0x00U,0x41U,0x00U,0x10U,0x11U,0x1AU,0x20U,0x01U, 0xD0U,0x00U,0x6AU,0x22U,0x01U,0x41U,0x22U,0x41U,0x01U,0x20U,
0x41U,0x22U,0x41U,0x05U,0x10U,0x12U,0x1AU,0x41U,0x05U,0x41U, 0x07U,0x41U,0x14U,0x41U,0x00U,0x41U,0x00U,0x41U,0x00U,0x41U,
0x8BU,0x80U,0x3CU,0x41U,0x06U,0x10U,0x13U,0x1AU,0x41U,0x06U, 0x00U,0x10U,0x11U,0x1AU,0x20U,0x01U,0x41U,0x22U,0x41U,0x05U,
0x20U,0x04U,0x41U,0x07U,0x10U,0x14U,0x42U,0x07U,0x51U,0x04U, 0x10U,0x12U,0x1AU,0x41U,0x05U,0x41U,0x8BU,0x80U,0x3CU,0x41U,
0x06U,0x10U,0x13U,0x1AU,0x41U,0x06U,0x20U,0x00U,0x2DU,0x00U,
0xEDU,0x09U,0x41U,0x07U,0x10U,0x14U,0x42U,0x07U,0x51U,0x04U,
0x40U,0x02U,0x40U,0x41U,0x07U,0x41U,0x9FU,0x80U,0x14U,0x41U, 0x40U,0x02U,0x40U,0x41U,0x07U,0x41U,0x9FU,0x80U,0x14U,0x41U,
0x08U,0x10U,0x13U,0x1AU,0x20U,0x00U,0x41U,0x80U,0x01U,0x6AU, 0x08U,0x10U,0x13U,0x1AU,0x20U,0x00U,0x41U,0x80U,0x01U,0x6AU,
0x41U,0x20U,0x41U,0x08U,0x10U,0x15U,0x42U,0x20U,0x52U,0x04U, 0x41U,0x20U,0x41U,0x08U,0x10U,0x15U,0x42U,0x20U,0x52U,0x04U,
@@ -353,72 +357,48 @@ static const std::vector<uint8_t> GovernanceHook =
0x00U,0x10U,0x11U,0x1AU,0x20U,0x01U,0x41U,0x22U,0x41U,0x09U, 0x00U,0x10U,0x11U,0x1AU,0x20U,0x01U,0x41U,0x22U,0x41U,0x09U,
0x10U,0x12U,0x42U,0x09U,0x52U,0x04U,0x40U,0x41U,0xA2U,0x16U, 0x10U,0x12U,0x42U,0x09U,0x52U,0x04U,0x40U,0x41U,0xA2U,0x16U,
0x41U,0xC3U,0x00U,0x42U,0x82U,0x04U,0x10U,0x09U,0x1AU,0x0BU, 0x41U,0xC3U,0x00U,0x42U,0x82U,0x04U,0x10U,0x09U,0x1AU,0x0BU,
0x20U,0x00U,0x41U,0x20U,0x6AU,0x20U,0x04U,0x41U,0x02U,0x74U, 0x20U,0x00U,0x41U,0x20U,0x6AU,0x20U,0x00U,0x2DU,0x00U,0xEDU,
0x6AU,0x41U,0x7FU,0x20U,0x00U,0x41U,0xB0U,0x09U,0x6AU,0x20U, 0x09U,0x41U,0x02U,0x74U,0x6AU,0x41U,0x7FU,0x20U,0x00U,0x41U,
0x05U,0x1BU,0x36U,0x02U,0x00U,0x10U,0x0DU,0x21U,0x09U,0x20U, 0xB0U,0x09U,0x6AU,0x20U,0x04U,0x1BU,0x36U,0x02U,0x00U,0x10U,
0x00U,0x41U,0x14U,0x10U,0x05U,0x1AU,0x20U,0x00U,0x41U,0x9EU, 0x0DU,0x21U,0x08U,0x20U,0x00U,0x41U,0x14U,0x10U,0x05U,0x1AU,
0x01U,0x6AU,0x42U,0x80U,0x80U,0x80U,0x80U,0xB0U,0x8EU,0xC0U, 0x20U,0x00U,0x41U,0x9EU,0x01U,0x6AU,0x42U,0x80U,0x80U,0x80U,
0xC0U,0x14U,0x37U,0x00U,0x00U,0x20U,0x00U,0x41U,0xE8U,0x80U, 0x80U,0xB0U,0x8EU,0xC0U,0xC0U,0x14U,0x37U,0x00U,0x00U,0x20U,
0x01U,0x3BU,0x00U,0x99U,0x01U,0x20U,0x00U,0x41U,0xA0U,0x36U, 0x00U,0x41U,0xE8U,0x80U,0x01U,0x3BU,0x00U,0x99U,0x01U,0x20U,
0x3BU,0x00U,0x93U,0x01U,0x20U,0x00U,0x41U,0xA0U,0x34U,0x3BU, 0x00U,0x41U,0xA0U,0x36U,0x3BU,0x00U,0x93U,0x01U,0x20U,0x00U,
0x00U,0x8DU,0x01U,0x20U,0x00U,0x41U,0x00U,0x36U,0x00U,0x89U, 0x41U,0xA0U,0x34U,0x3BU,0x00U,0x8DU,0x01U,0x20U,0x00U,0x41U,
0x01U,0x20U,0x00U,0x41U,0x24U,0x3AU,0x00U,0x88U,0x01U,0x20U, 0x00U,0x36U,0x00U,0x89U,0x01U,0x20U,0x00U,0x41U,0x24U,0x3AU,
0x00U,0x42U,0x92U,0x80U,0xD8U,0x90U,0x82U,0x10U,0x37U,0x03U, 0x00U,0x88U,0x01U,0x20U,0x00U,0x42U,0x92U,0x80U,0xD8U,0x90U,
0x80U,0x01U,0x20U,0x00U,0x41U,0x00U,0x36U,0x00U,0x9BU,0x01U, 0x82U,0x10U,0x37U,0x03U,0x80U,0x01U,0x20U,0x00U,0x41U,0x00U,
0x20U,0x00U,0x20U,0x09U,0xA7U,0x22U,0x02U,0x41U,0x05U,0x6AU, 0x36U,0x00U,0x9BU,0x01U,0x20U,0x00U,0x20U,0x08U,0xA7U,0x22U,
0x22U,0x01U,0x3AU,0x00U,0x98U,0x01U,0x20U,0x00U,0x20U,0x01U, 0x02U,0x41U,0x05U,0x6AU,0x22U,0x01U,0x3AU,0x00U,0x98U,0x01U,
0x41U,0x08U,0x76U,0x3AU,0x00U,0x97U,0x01U,0x20U,0x00U,0x20U, 0x20U,0x00U,0x20U,0x01U,0x41U,0x08U,0x76U,0x3AU,0x00U,0x97U,
0x01U,0x41U,0x10U,0x76U,0x3AU,0x00U,0x96U,0x01U,0x20U,0x00U, 0x01U,0x20U,0x00U,0x20U,0x01U,0x41U,0x10U,0x76U,0x3AU,0x00U,
0x20U,0x01U,0x41U,0x18U,0x76U,0x3AU,0x00U,0x95U,0x01U,0x20U, 0x96U,0x01U,0x20U,0x00U,0x20U,0x01U,0x41U,0x18U,0x76U,0x3AU,
0x00U,0x20U,0x02U,0x41U,0x01U,0x6AU,0x22U,0x01U,0x3AU,0x00U, 0x00U,0x95U,0x01U,0x20U,0x00U,0x20U,0x02U,0x41U,0x01U,0x6AU,
0x92U,0x01U,0x20U,0x00U,0x20U,0x01U,0x41U,0x08U,0x76U,0x3AU, 0x22U,0x01U,0x3AU,0x00U,0x92U,0x01U,0x20U,0x00U,0x20U,0x01U,
0x00U,0x91U,0x01U,0x20U,0x00U,0x20U,0x01U,0x41U,0x10U,0x76U, 0x41U,0x08U,0x76U,0x3AU,0x00U,0x91U,0x01U,0x20U,0x00U,0x20U,
0x3AU,0x00U,0x90U,0x01U,0x20U,0x00U,0x20U,0x01U,0x41U,0x18U, 0x01U,0x41U,0x10U,0x76U,0x3AU,0x00U,0x90U,0x01U,0x20U,0x00U,
0x76U,0x3AU,0x00U,0x8FU,0x01U,0x20U,0x00U,0x20U,0x00U,0x29U, 0x20U,0x01U,0x41U,0x18U,0x76U,0x3AU,0x00U,0x8FU,0x01U,0x20U,
0x03U,0x00U,0x37U,0x03U,0xA6U,0x01U,0x20U,0x00U,0x20U,0x00U, 0x00U,0x20U,0x00U,0x29U,0x03U,0x00U,0x37U,0x03U,0xA6U,0x01U,
0x29U,0x03U,0x08U,0x37U,0x03U,0xAEU,0x01U,0x20U,0x00U,0x20U, 0x20U,0x00U,0x20U,0x00U,0x29U,0x03U,0x08U,0x37U,0x03U,0xAEU,
0x00U,0x28U,0x02U,0x10U,0x36U,0x02U,0xB6U,0x01U,0x20U,0x00U, 0x01U,0x20U,0x00U,0x20U,0x00U,0x28U,0x02U,0x10U,0x36U,0x02U,
0x41U,0xBAU,0x01U,0x6AU,0x22U,0x01U,0x41U,0xC6U,0x07U,0x10U, 0xB6U,0x01U,0x20U,0x00U,0x41U,0xBAU,0x01U,0x6AU,0x22U,0x01U,
0x0EU,0xA7U,0x20U,0x01U,0x6AU,0x22U,0x01U,0x41U,0xFBU,0xDDU, 0x41U,0xC6U,0x07U,0x10U,0x0EU,0xA7U,0x20U,0x01U,0x6AU,0x22U,
0x03U,0x3BU,0x00U,0x00U,0x20U,0x01U,0x41U,0x02U,0x6AU,0x21U, 0x01U,0x41U,0xFBU,0xDDU,0x03U,0x3BU,0x00U,0x00U,0x20U,0x01U,
0x01U,0x20U,0x00U,0x28U,0x02U,0x20U,0x22U,0x02U,0x04U,0x40U, 0x41U,0x02U,0x6AU,0x21U,0x01U,0x20U,0x00U,0x28U,0x02U,0x20U,
0x20U,0x01U,0x41U,0x22U,0x36U,0x00U,0x00U,0x20U,0x01U,0x41U, 0x22U,0x02U,0x04U,0x40U,0x20U,0x01U,0x41U,0x22U,0x36U,0x00U,
0x04U,0x6AU,0x41U,0x01U,0x3AU,0x00U,0x00U,0x20U,0x01U,0x41U, 0x00U,0x20U,0x01U,0x41U,0x04U,0x6AU,0x41U,0x01U,0x3AU,0x00U,
0x06U,0x6AU,0x21U,0x03U,0x20U,0x01U,0x41U,0x05U,0x6AU,0x21U, 0x00U,0x20U,0x01U,0x41U,0x06U,0x6AU,0x21U,0x03U,0x20U,0x01U,
0x01U,0x20U,0x02U,0x41U,0x7FU,0x47U,0x04U,0x7FU,0x20U,0x01U, 0x41U,0x05U,0x6AU,0x21U,0x01U,0x20U,0x02U,0x41U,0x7FU,0x47U,
0x41U,0x1FU,0x3AU,0x00U,0x00U,0x20U,0x01U,0x20U,0x02U,0x29U, 0x04U,0x7FU,0x20U,0x01U,0x41U,0x1FU,0x3AU,0x00U,0x00U,0x20U,
0x03U,0x00U,0x37U,0x03U,0x01U,0x20U,0x01U,0x20U,0x02U,0x29U, 0x01U,0x20U,0x02U,0x29U,0x03U,0x00U,0x37U,0x03U,0x01U,0x20U,
0x03U,0x08U,0x37U,0x03U,0x09U,0x20U,0x01U,0x20U,0x02U,0x29U, 0x01U,0x20U,0x02U,0x29U,0x03U,0x08U,0x37U,0x03U,0x09U,0x20U,
0x03U,0x10U,0x37U,0x03U,0x11U,0x20U,0x01U,0x20U,0x02U,0x29U, 0x01U,0x20U,0x02U,0x29U,0x03U,0x10U,0x37U,0x03U,0x11U,0x20U,
0x03U,0x18U,0x37U,0x03U,0x19U,0x20U,0x03U,0x41U,0x20U,0x6AU, 0x01U,0x20U,0x02U,0x29U,0x03U,0x18U,0x37U,0x03U,0x19U,0x20U,
0x05U,0x20U,0x01U,0x41U,0xFBU,0x00U,0x3BU,0x00U,0x00U,0x20U, 0x03U,0x41U,0x20U,0x6AU,0x05U,0x20U,0x01U,0x41U,0xFBU,0x00U,
0x03U,0x41U,0x01U,0x6AU,0x0BU,0x21U,0x01U,0x0BU,0x20U,0x01U, 0x3BU,0x00U,0x00U,0x20U,0x03U,0x41U,0x01U,0x6AU,0x0BU,0x21U,
0x41U,0xE1U,0x01U,0x3AU,0x00U,0x00U,0x20U,0x00U,0x28U,0x02U, 0x01U,0x0BU,0x20U,0x01U,0x41U,0xE1U,0x01U,0x3AU,0x00U,0x00U,
0x24U,0x21U,0x02U,0x20U,0x01U,0x41U,0xEEU,0x01U,0x3AU,0x00U, 0x20U,0x00U,0x28U,0x02U,0x24U,0x21U,0x02U,0x20U,0x01U,0x41U,
0x01U,0x20U,0x02U,0x04U,0x7FU,0x20U,0x01U,0x41U,0x01U,0x3AU,
0x00U,0x06U,0x20U,0x01U,0x41U,0x22U,0x36U,0x00U,0x02U,0x20U,
0x02U,0x41U,0x7FU,0x47U,0x04U,0x7FU,0x20U,0x01U,0x41U,0x1FU,
0x3AU,0x00U,0x07U,0x20U,0x01U,0x20U,0x02U,0x29U,0x03U,0x00U,
0x37U,0x03U,0x08U,0x20U,0x01U,0x20U,0x02U,0x29U,0x03U,0x08U,
0x37U,0x03U,0x10U,0x20U,0x01U,0x20U,0x02U,0x29U,0x03U,0x10U,
0x37U,0x03U,0x18U,0x20U,0x01U,0x20U,0x02U,0x29U,0x03U,0x18U,
0x37U,0x03U,0x20U,0x20U,0x01U,0x41U,0x28U,0x6AU,0x05U,0x20U,
0x01U,0x41U,0xFBU,0x00U,0x3BU,0x00U,0x07U,0x20U,0x01U,0x41U,
0x09U,0x6AU,0x0BU,0x05U,0x20U,0x01U,0x41U,0x02U,0x6AU,0x0BU,
0x22U,0x01U,0x41U,0xE1U,0x01U,0x3AU,0x00U,0x00U,0x20U,0x00U,
0x28U,0x02U,0x28U,0x21U,0x02U,0x20U,0x01U,0x41U,0xEEU,0x01U,
0x3AU,0x00U,0x01U,0x20U,0x02U,0x04U,0x7FU,0x20U,0x01U,0x41U,
0x01U,0x3AU,0x00U,0x06U,0x20U,0x01U,0x41U,0x22U,0x36U,0x00U,
0x02U,0x20U,0x02U,0x41U,0x7FU,0x47U,0x04U,0x7FU,0x20U,0x01U,
0x41U,0x1FU,0x3AU,0x00U,0x07U,0x20U,0x01U,0x20U,0x02U,0x29U,
0x03U,0x00U,0x37U,0x03U,0x08U,0x20U,0x01U,0x20U,0x02U,0x29U,
0x03U,0x08U,0x37U,0x03U,0x10U,0x20U,0x01U,0x20U,0x02U,0x29U,
0x03U,0x10U,0x37U,0x03U,0x18U,0x20U,0x01U,0x20U,0x02U,0x29U,
0x03U,0x18U,0x37U,0x03U,0x20U,0x20U,0x01U,0x41U,0x28U,0x6AU,
0x05U,0x20U,0x01U,0x41U,0xFBU,0x00U,0x3BU,0x00U,0x07U,0x20U,
0x01U,0x41U,0x09U,0x6AU,0x0BU,0x05U,0x20U,0x01U,0x41U,0x02U,
0x6AU,0x0BU,0x22U,0x01U,0x41U,0xE1U,0x01U,0x3AU,0x00U,0x00U,
0x20U,0x00U,0x28U,0x02U,0x2CU,0x21U,0x02U,0x20U,0x01U,0x41U,
0xEEU,0x01U,0x3AU,0x00U,0x01U,0x20U,0x02U,0x04U,0x7FU,0x20U, 0xEEU,0x01U,0x3AU,0x00U,0x01U,0x20U,0x02U,0x04U,0x7FU,0x20U,
0x01U,0x41U,0x01U,0x3AU,0x00U,0x06U,0x20U,0x01U,0x41U,0x22U, 0x01U,0x41U,0x01U,0x3AU,0x00U,0x06U,0x20U,0x01U,0x41U,0x22U,
0x36U,0x00U,0x02U,0x20U,0x02U,0x41U,0x7FU,0x47U,0x04U,0x7FU, 0x36U,0x00U,0x02U,0x20U,0x02U,0x41U,0x7FU,0x47U,0x04U,0x7FU,
@@ -430,7 +410,7 @@ static const std::vector<uint8_t> GovernanceHook =
0x28U,0x6AU,0x05U,0x20U,0x01U,0x41U,0xFBU,0x00U,0x3BU,0x00U, 0x28U,0x6AU,0x05U,0x20U,0x01U,0x41U,0xFBU,0x00U,0x3BU,0x00U,
0x07U,0x20U,0x01U,0x41U,0x09U,0x6AU,0x0BU,0x05U,0x20U,0x01U, 0x07U,0x20U,0x01U,0x41U,0x09U,0x6AU,0x0BU,0x05U,0x20U,0x01U,
0x41U,0x02U,0x6AU,0x0BU,0x22U,0x01U,0x41U,0xE1U,0x01U,0x3AU, 0x41U,0x02U,0x6AU,0x0BU,0x22U,0x01U,0x41U,0xE1U,0x01U,0x3AU,
0x00U,0x00U,0x20U,0x00U,0x28U,0x02U,0x30U,0x21U,0x02U,0x20U, 0x00U,0x00U,0x20U,0x00U,0x28U,0x02U,0x28U,0x21U,0x02U,0x20U,
0x01U,0x41U,0xEEU,0x01U,0x3AU,0x00U,0x01U,0x20U,0x02U,0x04U, 0x01U,0x41U,0xEEU,0x01U,0x3AU,0x00U,0x01U,0x20U,0x02U,0x04U,
0x7FU,0x20U,0x01U,0x41U,0x01U,0x3AU,0x00U,0x06U,0x20U,0x01U, 0x7FU,0x20U,0x01U,0x41U,0x01U,0x3AU,0x00U,0x06U,0x20U,0x01U,
0x41U,0x22U,0x36U,0x00U,0x02U,0x20U,0x02U,0x41U,0x7FU,0x47U, 0x41U,0x22U,0x36U,0x00U,0x02U,0x20U,0x02U,0x41U,0x7FU,0x47U,
@@ -442,7 +422,7 @@ static const std::vector<uint8_t> GovernanceHook =
0x01U,0x41U,0x28U,0x6AU,0x05U,0x20U,0x01U,0x41U,0xFBU,0x00U, 0x01U,0x41U,0x28U,0x6AU,0x05U,0x20U,0x01U,0x41U,0xFBU,0x00U,
0x3BU,0x00U,0x07U,0x20U,0x01U,0x41U,0x09U,0x6AU,0x0BU,0x05U, 0x3BU,0x00U,0x07U,0x20U,0x01U,0x41U,0x09U,0x6AU,0x0BU,0x05U,
0x20U,0x01U,0x41U,0x02U,0x6AU,0x0BU,0x22U,0x01U,0x41U,0xE1U, 0x20U,0x01U,0x41U,0x02U,0x6AU,0x0BU,0x22U,0x01U,0x41U,0xE1U,
0x01U,0x3AU,0x00U,0x00U,0x20U,0x00U,0x28U,0x02U,0x34U,0x21U, 0x01U,0x3AU,0x00U,0x00U,0x20U,0x00U,0x28U,0x02U,0x2CU,0x21U,
0x02U,0x20U,0x01U,0x41U,0xEEU,0x01U,0x3AU,0x00U,0x01U,0x20U, 0x02U,0x20U,0x01U,0x41U,0xEEU,0x01U,0x3AU,0x00U,0x01U,0x20U,
0x02U,0x04U,0x7FU,0x20U,0x01U,0x41U,0x01U,0x3AU,0x00U,0x06U, 0x02U,0x04U,0x7FU,0x20U,0x01U,0x41U,0x01U,0x3AU,0x00U,0x06U,
0x20U,0x01U,0x41U,0x22U,0x36U,0x00U,0x02U,0x20U,0x02U,0x41U, 0x20U,0x01U,0x41U,0x22U,0x36U,0x00U,0x02U,0x20U,0x02U,0x41U,
@@ -455,7 +435,7 @@ static const std::vector<uint8_t> GovernanceHook =
0xFBU,0x00U,0x3BU,0x00U,0x07U,0x20U,0x01U,0x41U,0x09U,0x6AU, 0xFBU,0x00U,0x3BU,0x00U,0x07U,0x20U,0x01U,0x41U,0x09U,0x6AU,
0x0BU,0x05U,0x20U,0x01U,0x41U,0x02U,0x6AU,0x0BU,0x22U,0x01U, 0x0BU,0x05U,0x20U,0x01U,0x41U,0x02U,0x6AU,0x0BU,0x22U,0x01U,
0x41U,0xE1U,0x01U,0x3AU,0x00U,0x00U,0x20U,0x00U,0x28U,0x02U, 0x41U,0xE1U,0x01U,0x3AU,0x00U,0x00U,0x20U,0x00U,0x28U,0x02U,
0x38U,0x21U,0x02U,0x20U,0x01U,0x41U,0xEEU,0x01U,0x3AU,0x00U, 0x30U,0x21U,0x02U,0x20U,0x01U,0x41U,0xEEU,0x01U,0x3AU,0x00U,
0x01U,0x20U,0x02U,0x04U,0x7FU,0x20U,0x01U,0x41U,0x01U,0x3AU, 0x01U,0x20U,0x02U,0x04U,0x7FU,0x20U,0x01U,0x41U,0x01U,0x3AU,
0x00U,0x06U,0x20U,0x01U,0x41U,0x22U,0x36U,0x00U,0x02U,0x20U, 0x00U,0x06U,0x20U,0x01U,0x41U,0x22U,0x36U,0x00U,0x02U,0x20U,
0x02U,0x41U,0x7FU,0x47U,0x04U,0x7FU,0x20U,0x01U,0x41U,0x1FU, 0x02U,0x41U,0x7FU,0x47U,0x04U,0x7FU,0x20U,0x01U,0x41U,0x1FU,
@@ -467,7 +447,7 @@ static const std::vector<uint8_t> GovernanceHook =
0x01U,0x41U,0xFBU,0x00U,0x3BU,0x00U,0x07U,0x20U,0x01U,0x41U, 0x01U,0x41U,0xFBU,0x00U,0x3BU,0x00U,0x07U,0x20U,0x01U,0x41U,
0x09U,0x6AU,0x0BU,0x05U,0x20U,0x01U,0x41U,0x02U,0x6AU,0x0BU, 0x09U,0x6AU,0x0BU,0x05U,0x20U,0x01U,0x41U,0x02U,0x6AU,0x0BU,
0x22U,0x01U,0x41U,0xE1U,0x01U,0x3AU,0x00U,0x00U,0x20U,0x00U, 0x22U,0x01U,0x41U,0xE1U,0x01U,0x3AU,0x00U,0x00U,0x20U,0x00U,
0x28U,0x02U,0x3CU,0x21U,0x02U,0x20U,0x01U,0x41U,0xEEU,0x01U, 0x28U,0x02U,0x34U,0x21U,0x02U,0x20U,0x01U,0x41U,0xEEU,0x01U,
0x3AU,0x00U,0x01U,0x20U,0x02U,0x04U,0x7FU,0x20U,0x01U,0x41U, 0x3AU,0x00U,0x01U,0x20U,0x02U,0x04U,0x7FU,0x20U,0x01U,0x41U,
0x01U,0x3AU,0x00U,0x06U,0x20U,0x01U,0x41U,0x22U,0x36U,0x00U, 0x01U,0x3AU,0x00U,0x06U,0x20U,0x01U,0x41U,0x22U,0x36U,0x00U,
0x02U,0x20U,0x02U,0x41U,0x7FU,0x47U,0x04U,0x7FU,0x20U,0x01U, 0x02U,0x20U,0x02U,0x41U,0x7FU,0x47U,0x04U,0x7FU,0x20U,0x01U,
@@ -479,7 +459,7 @@ static const std::vector<uint8_t> GovernanceHook =
0x05U,0x20U,0x01U,0x41U,0xFBU,0x00U,0x3BU,0x00U,0x07U,0x20U, 0x05U,0x20U,0x01U,0x41U,0xFBU,0x00U,0x3BU,0x00U,0x07U,0x20U,
0x01U,0x41U,0x09U,0x6AU,0x0BU,0x05U,0x20U,0x01U,0x41U,0x02U, 0x01U,0x41U,0x09U,0x6AU,0x0BU,0x05U,0x20U,0x01U,0x41U,0x02U,
0x6AU,0x0BU,0x22U,0x01U,0x41U,0xE1U,0x01U,0x3AU,0x00U,0x00U, 0x6AU,0x0BU,0x22U,0x01U,0x41U,0xE1U,0x01U,0x3AU,0x00U,0x00U,
0x20U,0x00U,0x28U,0x02U,0x40U,0x21U,0x02U,0x20U,0x01U,0x41U, 0x20U,0x00U,0x28U,0x02U,0x38U,0x21U,0x02U,0x20U,0x01U,0x41U,
0xEEU,0x01U,0x3AU,0x00U,0x01U,0x20U,0x02U,0x04U,0x7FU,0x20U, 0xEEU,0x01U,0x3AU,0x00U,0x01U,0x20U,0x02U,0x04U,0x7FU,0x20U,
0x01U,0x41U,0x01U,0x3AU,0x00U,0x06U,0x20U,0x01U,0x41U,0x22U, 0x01U,0x41U,0x01U,0x3AU,0x00U,0x06U,0x20U,0x01U,0x41U,0x22U,
0x36U,0x00U,0x02U,0x20U,0x02U,0x41U,0x7FU,0x47U,0x04U,0x7FU, 0x36U,0x00U,0x02U,0x20U,0x02U,0x41U,0x7FU,0x47U,0x04U,0x7FU,
@@ -491,7 +471,7 @@ static const std::vector<uint8_t> GovernanceHook =
0x28U,0x6AU,0x05U,0x20U,0x01U,0x41U,0xFBU,0x00U,0x3BU,0x00U, 0x28U,0x6AU,0x05U,0x20U,0x01U,0x41U,0xFBU,0x00U,0x3BU,0x00U,
0x07U,0x20U,0x01U,0x41U,0x09U,0x6AU,0x0BU,0x05U,0x20U,0x01U, 0x07U,0x20U,0x01U,0x41U,0x09U,0x6AU,0x0BU,0x05U,0x20U,0x01U,
0x41U,0x02U,0x6AU,0x0BU,0x22U,0x01U,0x41U,0xE1U,0x01U,0x3AU, 0x41U,0x02U,0x6AU,0x0BU,0x22U,0x01U,0x41U,0xE1U,0x01U,0x3AU,
0x00U,0x00U,0x20U,0x00U,0x28U,0x02U,0x44U,0x21U,0x02U,0x20U, 0x00U,0x00U,0x20U,0x00U,0x28U,0x02U,0x3CU,0x21U,0x02U,0x20U,
0x01U,0x41U,0xEEU,0x01U,0x3AU,0x00U,0x01U,0x20U,0x02U,0x04U, 0x01U,0x41U,0xEEU,0x01U,0x3AU,0x00U,0x01U,0x20U,0x02U,0x04U,
0x7FU,0x20U,0x01U,0x41U,0x01U,0x3AU,0x00U,0x06U,0x20U,0x01U, 0x7FU,0x20U,0x01U,0x41U,0x01U,0x3AU,0x00U,0x06U,0x20U,0x01U,
0x41U,0x22U,0x36U,0x00U,0x02U,0x20U,0x02U,0x41U,0x7FU,0x47U, 0x41U,0x22U,0x36U,0x00U,0x02U,0x20U,0x02U,0x41U,0x7FU,0x47U,
@@ -503,81 +483,115 @@ static const std::vector<uint8_t> GovernanceHook =
0x01U,0x41U,0x28U,0x6AU,0x05U,0x20U,0x01U,0x41U,0xFBU,0x00U, 0x01U,0x41U,0x28U,0x6AU,0x05U,0x20U,0x01U,0x41U,0xFBU,0x00U,
0x3BU,0x00U,0x07U,0x20U,0x01U,0x41U,0x09U,0x6AU,0x0BU,0x05U, 0x3BU,0x00U,0x07U,0x20U,0x01U,0x41U,0x09U,0x6AU,0x0BU,0x05U,
0x20U,0x01U,0x41U,0x02U,0x6AU,0x0BU,0x22U,0x01U,0x41U,0xE1U, 0x20U,0x01U,0x41U,0x02U,0x6AU,0x0BU,0x22U,0x01U,0x41U,0xE1U,
0xE3U,0x03U,0x3BU,0x00U,0x00U,0x20U,0x01U,0x20U,0x00U,0x41U, 0x01U,0x3AU,0x00U,0x00U,0x20U,0x00U,0x28U,0x02U,0x40U,0x21U,
0x80U,0x01U,0x6AU,0x22U,0x02U,0x6BU,0x41U,0x02U,0x6AU,0x21U, 0x02U,0x20U,0x01U,0x41U,0xEEU,0x01U,0x3AU,0x00U,0x01U,0x20U,
0x01U,0x20U,0x00U,0x20U,0x02U,0x20U,0x01U,0x10U,0x0FU,0x22U, 0x02U,0x04U,0x7FU,0x20U,0x01U,0x41U,0x01U,0x3AU,0x00U,0x06U,
0x09U,0x3CU,0x00U,0xA1U,0x01U,0x20U,0x00U,0x41U,0xE8U,0x00U, 0x20U,0x01U,0x41U,0x22U,0x36U,0x00U,0x02U,0x20U,0x02U,0x41U,
0x3AU,0x00U,0x99U,0x01U,0x20U,0x00U,0x20U,0x09U,0x42U,0x08U, 0x7FU,0x47U,0x04U,0x7FU,0x20U,0x01U,0x41U,0x1FU,0x3AU,0x00U,
0x88U,0x3CU,0x00U,0xA0U,0x01U,0x20U,0x00U,0x20U,0x09U,0x42U, 0x07U,0x20U,0x01U,0x20U,0x02U,0x29U,0x03U,0x00U,0x37U,0x03U,
0x10U,0x88U,0x3CU,0x00U,0x9FU,0x01U,0x20U,0x00U,0x20U,0x09U, 0x08U,0x20U,0x01U,0x20U,0x02U,0x29U,0x03U,0x08U,0x37U,0x03U,
0x42U,0x18U,0x88U,0x3CU,0x00U,0x9EU,0x01U,0x20U,0x00U,0x20U, 0x10U,0x20U,0x01U,0x20U,0x02U,0x29U,0x03U,0x10U,0x37U,0x03U,
0x09U,0x42U,0x20U,0x88U,0x3CU,0x00U,0x9DU,0x01U,0x20U,0x00U, 0x18U,0x20U,0x01U,0x20U,0x02U,0x29U,0x03U,0x18U,0x37U,0x03U,
0x20U,0x09U,0x42U,0x28U,0x88U,0x3CU,0x00U,0x9CU,0x01U,0x20U, 0x20U,0x20U,0x01U,0x41U,0x28U,0x6AU,0x05U,0x20U,0x01U,0x41U,
0x00U,0x20U,0x09U,0x42U,0x30U,0x88U,0x3CU,0x00U,0x9BU,0x01U, 0xFBU,0x00U,0x3BU,0x00U,0x07U,0x20U,0x01U,0x41U,0x09U,0x6AU,
0x20U,0x00U,0x20U,0x09U,0x42U,0x38U,0x88U,0xA7U,0x41U,0x3FU, 0x0BU,0x05U,0x20U,0x01U,0x41U,0x02U,0x6AU,0x0BU,0x22U,0x01U,
0x71U,0x41U,0xC0U,0x00U,0x72U,0x3AU,0x00U,0x9AU,0x01U,0x41U, 0x41U,0xE1U,0x01U,0x3AU,0x00U,0x00U,0x20U,0x00U,0x28U,0x02U,
0xE5U,0x16U,0x41U,0x0BU,0x20U,0x00U,0x41U,0x20U,0x20U,0x02U, 0x44U,0x21U,0x02U,0x20U,0x01U,0x41U,0xEEU,0x01U,0x3AU,0x00U,
0x20U,0x01U,0x10U,0x10U,0x22U,0x09U,0x10U,0x0AU,0x1AU,0x20U, 0x01U,0x20U,0x02U,0x04U,0x7FU,0x20U,0x01U,0x41U,0x01U,0x3AU,
0x09U,0x20U,0x01U,0xADU,0x52U,0x04U,0x40U,0x41U,0xF1U,0x16U, 0x00U,0x06U,0x20U,0x01U,0x41U,0x22U,0x36U,0x00U,0x02U,0x20U,
0x41U,0x2FU,0x42U,0x9AU,0x04U,0x10U,0x09U,0x1AU,0x0BU,0x41U, 0x02U,0x41U,0x7FU,0x47U,0x04U,0x7FU,0x20U,0x01U,0x41U,0x1FU,
0xA0U,0x17U,0x41U,0x1BU,0x42U,0x9CU,0x04U,0x10U,0x03U,0x1AU, 0x3AU,0x00U,0x07U,0x20U,0x01U,0x20U,0x02U,0x29U,0x03U,0x00U,
0x0BU,0x20U,0x00U,0x41U,0x80U,0x01U,0x6AU,0x41U,0x0CU,0x72U, 0x37U,0x03U,0x08U,0x20U,0x01U,0x20U,0x02U,0x29U,0x03U,0x08U,
0x41U,0x14U,0x20U,0x04U,0x41U,0x01U,0x10U,0x07U,0x22U,0x09U, 0x37U,0x03U,0x10U,0x20U,0x01U,0x20U,0x02U,0x29U,0x03U,0x10U,
0x42U,0x14U,0x52U,0x20U,0x05U,0x72U,0x04U,0x40U,0x02U,0x40U, 0x37U,0x03U,0x18U,0x20U,0x01U,0x20U,0x02U,0x29U,0x03U,0x18U,
0x41U,0x93U,0x0AU,0x41U,0x0CU,0x42U,0x7FU,0x42U,0x01U,0x20U, 0x37U,0x03U,0x20U,0x20U,0x01U,0x41U,0x28U,0x6AU,0x05U,0x20U,
0x09U,0x42U,0x14U,0x51U,0x1BU,0x20U,0x0AU,0x7CU,0x22U,0x0AU, 0x01U,0x41U,0xFBU,0x00U,0x3BU,0x00U,0x07U,0x20U,0x01U,0x41U,
0x10U,0x0AU,0x1AU,0x20U,0x0AU,0x42U,0x01U,0x57U,0x04U,0x40U, 0x09U,0x6AU,0x0BU,0x05U,0x20U,0x01U,0x41U,0x02U,0x6AU,0x0BU,
0x41U,0xF9U,0x09U,0x41U,0x1AU,0x42U,0xB5U,0x04U,0x10U,0x09U, 0x22U,0x01U,0x41U,0xE1U,0xE3U,0x03U,0x3BU,0x00U,0x00U,0x20U,
0x1AU,0x0BU,0x20U,0x00U,0x20U,0x0AU,0x3CU,0x00U,0x20U,0x20U, 0x01U,0x20U,0x00U,0x41U,0x80U,0x01U,0x6AU,0x22U,0x02U,0x6BU,
0x00U,0x41U,0x20U,0x6AU,0x41U,0x01U,0x41U,0xB4U,0x09U,0x41U, 0x41U,0x02U,0x6AU,0x21U,0x01U,0x20U,0x00U,0x20U,0x02U,0x20U,
0x02U,0x10U,0x0BU,0x42U,0x01U,0x51U,0x0DU,0x00U,0x41U,0xF9U, 0x01U,0x10U,0x0FU,0x22U,0x08U,0x3CU,0x00U,0xA1U,0x01U,0x20U,
0x09U,0x41U,0x1AU,0x42U,0xB8U,0x04U,0x10U,0x09U,0x1AU,0x0BU, 0x00U,0x41U,0xE8U,0x00U,0x3AU,0x00U,0x99U,0x01U,0x20U,0x00U,
0x05U,0x41U,0xBBU,0x17U,0x41U,0x25U,0x41U,0x00U,0x41U,0x00U, 0x20U,0x08U,0x42U,0x08U,0x88U,0x3CU,0x00U,0xA0U,0x01U,0x20U,
0x41U,0x00U,0x10U,0x06U,0x1AU,0x0BU,0x20U,0x09U,0x42U,0x14U, 0x00U,0x20U,0x08U,0x42U,0x10U,0x88U,0x3CU,0x00U,0x9FU,0x01U,
0x51U,0x04U,0x40U,0x02U,0x40U,0x20U,0x00U,0x41U,0xD6U,0x00U, 0x20U,0x00U,0x20U,0x08U,0x42U,0x18U,0x88U,0x3CU,0x00U,0x9EU,
0x3AU,0x00U,0x80U,0x01U,0x41U,0x01U,0x21U,0x01U,0x03U,0x40U, 0x01U,0x20U,0x00U,0x20U,0x08U,0x42U,0x20U,0x88U,0x3CU,0x00U,
0x41U,0xC0U,0x84U,0x80U,0x80U,0x78U,0x41U,0x21U,0x10U,0x00U, 0x9DU,0x01U,0x20U,0x00U,0x20U,0x08U,0x42U,0x28U,0x88U,0x3CU,
0x1AU,0x20U,0x01U,0x41U,0x20U,0x46U,0x0DU,0x01U,0x20U,0x00U, 0x00U,0x9CU,0x01U,0x20U,0x00U,0x20U,0x08U,0x42U,0x30U,0x88U,
0x41U,0xD2U,0x00U,0x41U,0xC8U,0x00U,0x41U,0xD3U,0x00U,0x20U, 0x3CU,0x00U,0x9BU,0x01U,0x20U,0x00U,0x20U,0x08U,0x42U,0x38U,
0x01U,0x41U,0x0CU,0x49U,0x22U,0x02U,0x1BU,0x20U,0x01U,0x41U, 0x88U,0xA7U,0x41U,0x3FU,0x71U,0x41U,0xC0U,0x00U,0x72U,0x3AU,
0x02U,0x49U,0x22U,0x03U,0x1BU,0x3AU,0x00U,0x81U,0x01U,0x20U, 0x00U,0x9AU,0x01U,0x41U,0xE5U,0x16U,0x41U,0x0BU,0x20U,0x00U,
0x00U,0x41U,0x00U,0x41U,0xFEU,0x01U,0x41U,0xF4U,0x01U,0x20U, 0x41U,0x20U,0x20U,0x02U,0x20U,0x01U,0x10U,0x10U,0x22U,0x08U,
0x02U,0x1BU,0x20U,0x03U,0x1BU,0x20U,0x01U,0x6AU,0x3AU,0x00U, 0x10U,0x0AU,0x1AU,0x20U,0x08U,0x20U,0x01U,0xADU,0x52U,0x04U,
0x82U,0x01U,0x20U,0x00U,0x41U,0x20U,0x6AU,0x41U,0x20U,0x20U, 0x40U,0x41U,0xF1U,0x16U,0x41U,0x2FU,0x42U,0x9AU,0x04U,0x10U,
0x00U,0x41U,0x80U,0x01U,0x6AU,0x41U,0x20U,0x10U,0x07U,0x42U, 0x09U,0x1AU,0x0BU,0x41U,0xA0U,0x17U,0x41U,0x1BU,0x42U,0x9CU,
0x20U,0x51U,0x04U,0x40U,0x02U,0x40U,0x20U,0x00U,0x41U,0xC3U, 0x04U,0x10U,0x03U,0x1AU,0x0BU,0x20U,0x00U,0x41U,0x80U,0x01U,
0x00U,0x3AU,0x00U,0x20U,0x20U,0x00U,0x41U,0x00U,0x3AU,0x00U, 0x6AU,0x41U,0x0CU,0x72U,0x41U,0x14U,0x20U,0x00U,0x41U,0xEDU,
0x50U,0x20U,0x00U,0x20U,0x00U,0x2FU,0x00U,0x81U,0x01U,0x3BU, 0x09U,0x6AU,0x41U,0x01U,0x10U,0x07U,0x22U,0x0AU,0x42U,0x14U,
0x00U,0x21U,0x20U,0x00U,0x41U,0xD0U,0x00U,0x6AU,0x41U,0x01U, 0x52U,0x22U,0x01U,0x20U,0x04U,0x72U,0x04U,0x40U,0x02U,0x40U,
0x20U,0x00U,0x41U,0x20U,0x6AU,0x41U,0x20U,0x10U,0x07U,0x42U, 0x41U,0x93U,0x0AU,0x41U,0x0CU,0x20U,0x01U,0x04U,0x7EU,0x42U,
0x01U,0x51U,0x04U,0x40U,0x02U,0x40U,0x20U,0x00U,0x2DU,0x00U, 0x01U,0x05U,0x41U,0xE0U,0x17U,0x41U,0x12U,0x20U,0x00U,0x41U,
0x50U,0x22U,0x02U,0x41U,0x01U,0x4BU,0x04U,0x40U,0x20U,0x00U, 0x80U,0x01U,0x6AU,0x41U,0x20U,0x41U,0x01U,0x10U,0x06U,0x1AU,
0x20U,0x02U,0x41U,0x01U,0x6BU,0x3AU,0x00U,0x50U,0x20U,0x00U, 0x42U,0x7FU,0x0BU,0x20U,0x09U,0x7CU,0x22U,0x09U,0x10U,0x0AU,
0x41U,0xD0U,0x00U,0x6AU,0x41U,0x01U,0x20U,0x00U,0x41U,0x20U, 0x1AU,0x20U,0x09U,0x42U,0x01U,0x57U,0x04U,0x40U,0x41U,0xF9U,
0x6AU,0x41U,0x20U,0x10U,0x0BU,0x42U,0x01U,0x51U,0x0DU,0x01U, 0x09U,0x41U,0x1AU,0x42U,0xB9U,0x04U,0x10U,0x09U,0x1AU,0x0BU,
0x41U,0xF9U,0x09U,0x41U,0x1AU,0x42U,0xD8U,0x04U,0x10U,0x09U, 0x20U,0x00U,0x20U,0x09U,0x3CU,0x00U,0x20U,0x20U,0x00U,0x41U,
0x1AU,0x05U,0x41U,0x00U,0x41U,0x00U,0x20U,0x00U,0x41U,0x20U, 0x20U,0x6AU,0x41U,0x01U,0x41U,0xB4U,0x09U,0x41U,0x02U,0x10U,
0x6AU,0x41U,0x20U,0x10U,0x0BU,0x50U,0x0DU,0x01U,0x41U,0xF9U, 0x0BU,0x42U,0x01U,0x51U,0x0DU,0x00U,0x41U,0xF9U,0x09U,0x41U,
0x09U,0x41U,0x1AU,0x42U,0xD3U,0x04U,0x10U,0x09U,0x1AU,0x0BU, 0x1AU,0x42U,0xBCU,0x04U,0x10U,0x09U,0x1AU,0x0BU,0x05U,0x41U,
0x0BU,0x0BU,0x41U,0x00U,0x41U,0x00U,0x20U,0x00U,0x41U,0x80U, 0xBBU,0x17U,0x41U,0x25U,0x41U,0x00U,0x41U,0x00U,0x41U,0x00U,
0x01U,0x6AU,0x41U,0x20U,0x10U,0x0BU,0x50U,0x0DU,0x00U,0x41U, 0x10U,0x06U,0x1AU,0x0BU,0x20U,0x0AU,0x42U,0x14U,0x51U,0x04U,
0xF9U,0x09U,0x41U,0x1AU,0x42U,0xDDU,0x04U,0x10U,0x09U,0x1AU, 0x40U,0x02U,0x40U,0x20U,0x00U,0x41U,0xD6U,0x00U,0x3AU,0x00U,
0x0BU,0x0BU,0x20U,0x01U,0x41U,0x01U,0x6AU,0x21U,0x01U,0x0CU, 0x80U,0x01U,0x41U,0x01U,0x21U,0x01U,0x03U,0x40U,0x41U,0xC4U,
0x00U,0x0BU,0x00U,0x0BU,0x0BU,0x20U,0x05U,0x45U,0x04U,0x40U, 0x84U,0x80U,0x80U,0x78U,0x41U,0x21U,0x10U,0x00U,0x1AU,0x20U,
0x02U,0x40U,0x20U,0x00U,0x41U,0xB0U,0x09U,0x6AU,0x41U,0x14U, 0x01U,0x41U,0x20U,0x46U,0x0DU,0x01U,0x20U,0x00U,0x41U,0xD2U,
0x20U,0x04U,0x41U,0x01U,0x10U,0x0BU,0x42U,0x14U,0x52U,0x04U, 0x00U,0x41U,0xC8U,0x00U,0x41U,0xD3U,0x00U,0x20U,0x01U,0x41U,
0x40U,0x41U,0xF9U,0x09U,0x41U,0x1AU,0x42U,0xE6U,0x04U,0x10U, 0x0CU,0x49U,0x22U,0x02U,0x1BU,0x20U,0x01U,0x41U,0x02U,0x49U,
0x09U,0x1AU,0x0BU,0x20U,0x04U,0x41U,0x01U,0x20U,0x00U,0x41U, 0x22U,0x03U,0x1BU,0x3AU,0x00U,0x81U,0x01U,0x20U,0x00U,0x41U,
0xB0U,0x09U,0x6AU,0x41U,0x20U,0x10U,0x0BU,0x42U,0x14U,0x51U, 0x00U,0x41U,0xFEU,0x01U,0x41U,0xF4U,0x01U,0x20U,0x02U,0x1BU,
0x0DU,0x00U,0x41U,0xF9U,0x09U,0x41U,0x1AU,0x42U,0xE9U,0x04U, 0x20U,0x03U,0x1BU,0x20U,0x01U,0x6AU,0x3AU,0x00U,0x82U,0x01U,
0x10U,0x09U,0x1AU,0x0BU,0x0BU,0x41U,0xE0U,0x17U,0x41U,0x22U, 0x20U,0x00U,0x41U,0x20U,0x6AU,0x41U,0x20U,0x20U,0x00U,0x41U,
0x42U,0xECU,0x04U,0x10U,0x03U,0x1AU,0x0BU,0x41U,0x82U,0x18U, 0x80U,0x01U,0x6AU,0x41U,0x20U,0x10U,0x07U,0x42U,0x20U,0x51U,
0x41U,0x22U,0x42U,0xF0U,0x04U,0x10U,0x09U,0x1AU,0x20U,0x00U, 0x04U,0x40U,0x02U,0x40U,0x20U,0x00U,0x41U,0xC3U,0x00U,0x3AU,
0x41U,0xB0U,0x0AU,0x6AU,0x24U,0x00U,0x20U,0x0AU,0x0BU,0x0BU, 0x00U,0x20U,0x20U,0x00U,0x41U,0x00U,0x3AU,0x00U,0x50U,0x20U,
0xB1U,0x10U,0x02U,0x00U,0x41U,0x80U,0x08U,0x0BU,0x14U,0xB5U, 0x00U,0x20U,0x00U,0x2FU,0x00U,0x81U,0x01U,0x3BU,0x00U,0x21U,
0x20U,0x00U,0x41U,0xD0U,0x00U,0x6AU,0x41U,0x01U,0x20U,0x00U,
0x41U,0x20U,0x6AU,0x41U,0x20U,0x10U,0x07U,0x42U,0x01U,0x51U,
0x04U,0x40U,0x02U,0x40U,0x20U,0x00U,0x2DU,0x00U,0x50U,0x22U,
0x02U,0x41U,0x01U,0x4BU,0x04U,0x40U,0x20U,0x00U,0x20U,0x02U,
0x41U,0x01U,0x6BU,0x3AU,0x00U,0x50U,0x20U,0x00U,0x41U,0xD0U,
0x00U,0x6AU,0x41U,0x01U,0x20U,0x00U,0x41U,0x20U,0x6AU,0x41U,
0x20U,0x10U,0x0BU,0x42U,0x01U,0x51U,0x0DU,0x01U,0x41U,0xF9U,
0x09U,0x41U,0x1AU,0x42U,0xDCU,0x04U,0x10U,0x09U,0x1AU,0x05U,
0x41U,0x00U,0x41U,0x00U,0x20U,0x00U,0x41U,0x20U,0x6AU,0x41U,
0x20U,0x10U,0x0BU,0x50U,0x0DU,0x01U,0x41U,0xF9U,0x09U,0x41U,
0x1AU,0x42U,0xD7U,0x04U,0x10U,0x09U,0x1AU,0x0BU,0x0BU,0x0BU,
0x41U,0x00U,0x41U,0x00U,0x20U,0x00U,0x41U,0x80U,0x01U,0x6AU,
0x41U,0x20U,0x10U,0x0BU,0x50U,0x0DU,0x00U,0x41U,0xF9U,0x09U,
0x41U,0x1AU,0x42U,0xE1U,0x04U,0x10U,0x09U,0x1AU,0x0BU,0x0BU,
0x20U,0x01U,0x41U,0x01U,0x6AU,0x21U,0x01U,0x0CU,0x00U,0x0BU,
0x00U,0x0BU,0x0BU,0x02U,0x40U,0x20U,0x04U,0x04U,0x40U,0x41U,
0x00U,0x41U,0x00U,0x20U,0x00U,0x41U,0xEDU,0x09U,0x6AU,0x41U,
0x01U,0x10U,0x0BU,0x50U,0x45U,0x04U,0x40U,0x41U,0xF9U,0x09U,
0x41U,0x1AU,0x42U,0xEAU,0x04U,0x10U,0x09U,0x1AU,0x0BU,0x41U,
0x00U,0x41U,0x00U,0x20U,0x00U,0x41U,0xB0U,0x09U,0x6AU,0x41U,
0x0CU,0x72U,0x41U,0x14U,0x10U,0x0BU,0x50U,0x0DU,0x01U,0x41U,
0xF9U,0x09U,0x41U,0x1AU,0x42U,0xEDU,0x04U,0x10U,0x09U,0x1AU,
0x05U,0x20U,0x00U,0x41U,0xB0U,0x09U,0x6AU,0x41U,0x14U,0x20U,
0x00U,0x41U,0xEDU,0x09U,0x6AU,0x41U,0x01U,0x10U,0x0BU,0x42U,
0x14U,0x52U,0x04U,0x40U,0x41U,0xF9U,0x09U,0x41U,0x1AU,0x42U,
0xF4U,0x04U,0x10U,0x09U,0x1AU,0x0BU,0x20U,0x00U,0x2DU,0x00U,
0xEDU,0x09U,0x41U,0x01U,0x20U,0x00U,0x41U,0xB0U,0x09U,0x6AU,
0x41U,0x0CU,0x72U,0x41U,0x14U,0x10U,0x0BU,0x42U,0x14U,0x51U,
0x0DU,0x01U,0x41U,0xF9U,0x09U,0x41U,0x1AU,0x42U,0xF7U,0x04U,
0x10U,0x09U,0x1AU,0x0BU,0x0BU,0x41U,0xF2U,0x17U,0x41U,0x22U,
0x42U,0xFAU,0x04U,0x10U,0x03U,0x1AU,0x0BU,0x41U,0x94U,0x18U,
0x41U,0x22U,0x42U,0xFEU,0x04U,0x10U,0x09U,0x1AU,0x20U,0x00U,
0x41U,0xB0U,0x0AU,0x6AU,0x24U,0x00U,0x20U,0x09U,0x0BU,0x0BU,
0xC3U,0x10U,0x02U,0x00U,0x41U,0x80U,0x08U,0x0BU,0x14U,0xB5U,
0xF7U,0x62U,0x79U,0x8AU,0x53U,0xD5U,0x43U,0xA0U,0x14U,0xCAU, 0xF7U,0x62U,0x79U,0x8AU,0x53U,0xD5U,0x43U,0xA0U,0x14U,0xCAU,
0xF8U,0xB2U,0x97U,0xCFU,0xF8U,0xF2U,0xF9U,0x37U,0xE8U,0x00U, 0xF8U,0xB2U,0x97U,0xCFU,0xF8U,0xF2U,0xF9U,0x37U,0xE8U,0x00U,
0x41U,0x94U,0x08U,0x0BU,0x8FU,0x10U,0x47U,0x6FU,0x76U,0x65U, 0x41U,0x94U,0x08U,0x0BU,0xA1U,0x10U,0x47U,0x6FU,0x76U,0x65U,
0x72U,0x6EU,0x61U,0x6EU,0x63U,0x65U,0x3AU,0x20U,0x50U,0x61U, 0x72U,0x6EU,0x61U,0x6EU,0x63U,0x65U,0x3AU,0x20U,0x50U,0x61U,
0x73U,0x73U,0x69U,0x6EU,0x67U,0x20U,0x6EU,0x6FU,0x6EU,0x2DU, 0x73U,0x73U,0x69U,0x6EU,0x67U,0x20U,0x6EU,0x6FU,0x6EU,0x2DU,
0x49U,0x6EU,0x76U,0x6FU,0x6BU,0x65U,0x20U,0x74U,0x78U,0x6EU, 0x49U,0x6EU,0x76U,0x6FU,0x6BU,0x65U,0x20U,0x74U,0x78U,0x6EU,
@@ -777,13 +791,15 @@ static const std::vector<uint8_t> GovernanceHook =
0x6FU,0x75U,0x73U,0x5FU,0x70U,0x72U,0x65U,0x73U,0x65U,0x6EU, 0x6FU,0x75U,0x73U,0x5FU,0x70U,0x72U,0x65U,0x73U,0x65U,0x6EU,
0x74U,0x20U,0x26U,0x26U,0x20U,0x21U,0x74U,0x6FU,0x70U,0x69U, 0x74U,0x20U,0x26U,0x26U,0x20U,0x21U,0x74U,0x6FU,0x70U,0x69U,
0x63U,0x5FU,0x64U,0x61U,0x74U,0x61U,0x5FU,0x7AU,0x65U,0x72U, 0x63U,0x5FU,0x64U,0x61U,0x74U,0x61U,0x5FU,0x7AU,0x65U,0x72U,
0x6FU,0x00U,0x47U,0x6FU,0x76U,0x65U,0x72U,0x6EU,0x61U,0x6EU, 0x6FU,0x00U,0x50U,0x72U,0x65U,0x76U,0x69U,0x6FU,0x75U,0x73U,
0x63U,0x65U,0x3AU,0x20U,0x41U,0x63U,0x74U,0x69U,0x6FU,0x6EU, 0x20U,0x70U,0x72U,0x65U,0x73U,0x65U,0x6EU,0x74U,0x3AU,0x00U,
0x20U,0x6DU,0x65U,0x6DU,0x62U,0x65U,0x72U,0x20U,0x63U,0x68U, 0x47U,0x6FU,0x76U,0x65U,0x72U,0x6EU,0x61U,0x6EU,0x63U,0x65U,
0x61U,0x6EU,0x67U,0x65U,0x2EU,0x00U,0x47U,0x6FU,0x76U,0x65U, 0x3AU,0x20U,0x41U,0x63U,0x74U,0x69U,0x6FU,0x6EU,0x20U,0x6DU,
0x72U,0x6EU,0x61U,0x6EU,0x63U,0x65U,0x3AU,0x20U,0x49U,0x6EU, 0x65U,0x6DU,0x62U,0x65U,0x72U,0x20U,0x63U,0x68U,0x61U,0x6EU,
0x74U,0x65U,0x72U,0x6EU,0x61U,0x6CU,0x20U,0x6CU,0x6FU,0x67U, 0x67U,0x65U,0x2EU,0x00U,0x47U,0x6FU,0x76U,0x65U,0x72U,0x6EU,
0x69U,0x63U,0x20U,0x65U,0x72U,0x72U,0x6FU,0x72U,0x2EU 0x61U,0x6EU,0x63U,0x65U,0x3AU,0x20U,0x49U,0x6EU,0x74U,0x65U,
0x72U,0x6EU,0x61U,0x6CU,0x20U,0x6CU,0x6FU,0x67U,0x69U,0x63U,
0x20U,0x65U,0x72U,0x72U,0x6FU,0x72U,0x2EU
}; };
static const std::vector<uint8_t> RewardHook = static const std::vector<uint8_t> RewardHook =

View File

@@ -283,14 +283,14 @@ Change::preCompute()
inline inline
std::pair< std::pair<
std::map<std::string, XRPAmount>, std::vector<std::pair<std::string, XRPAmount>>,
std::map<std::vector<uint8_t>, std::vector<uint8_t>>> std::vector<std::pair<std::vector<uint8_t>, std::vector<uint8_t>>>>
normalizeXahauGenesis( normalizeXahauGenesis(
std::map<std::string, XRPAmount> const& entries, std::vector<std::pair<std::string, XRPAmount>> const& entries,
std::map<std::vector<uint8_t>, std::vector<uint8_t>> params, std::vector<std::pair<std::vector<uint8_t>, std::vector<uint8_t>>> params,
beast::Journal const& j) beast::Journal const& j)
{ {
std::map<std::string, XRPAmount> amounts; std::vector<std::pair<std::string, XRPAmount>> amounts;
uint8_t mc = 0; uint8_t mc = 0;
for (auto const& [rn, x]: entries) for (auto const& [rn, x]: entries)
{ {
@@ -321,14 +321,14 @@ normalizeXahauGenesis(
std::string& idStr = parsed->first; std::string& idStr = parsed->first;
AccountID& id = parsed->second; AccountID& id = parsed->second;
amounts.emplace(idStr, x); amounts.emplace_back(idStr, x);
JLOG(j.warn()) JLOG(j.warn())
<< "featureXahauGenesis: " << "featureXahauGenesis: "
<< "initial validator: " << rn << "initial validator: " << rn
<< " =>accid: " << idStr; << " =>accid: " << idStr;
// initial member enumeration // initial member enumeration
params.emplace( params.emplace_back(
std::vector<uint8_t>{'I', 'S', mc++}, std::vector<uint8_t>{'I', 'S', mc++},
std::vector<uint8_t>(id.data(), id.data() + 20)); std::vector<uint8_t>(id.data(), id.data() + 20));
continue; continue;
@@ -339,7 +339,7 @@ normalizeXahauGenesis(
} }
// initial member count // initial member count
params.emplace( params.emplace_back(
std::vector<uint8_t>{'I', 'M', 'C'}, std::vector<uint8_t>{'I', 'M', 'C'},
std::vector<uint8_t>{mc}); std::vector<uint8_t>{mc});
@@ -365,9 +365,10 @@ Change::activateXahauGenesis()
std::tuple< std::tuple<
uint256, // hook on uint256, // hook on
std::vector<uint8_t>, // hook code std::vector<uint8_t>, // hook code
std::map< std::vector<
std::vector<uint8_t>, // param name std::pair<
std::vector<uint8_t>>>> // param value std::vector<uint8_t>, // param name
std::vector<uint8_t>>>>> // param value
genesis_hooks = genesis_hooks =
{ {
{ {

View File

@@ -272,7 +272,14 @@ Transactor::calculateBaseFee(ReadView const& view, STTx const& tx)
// The computation has two parts: // The computation has two parts:
// * The base fee, which is the same for most transactions. // * The base fee, which is the same for most transactions.
// * The additional cost of each multisignature on the transaction. // * The additional cost of each multisignature on the transaction.
XRPAmount const baseFee = view.fees().base; XRPAmount baseFee = view.fees().base;
if (tx.getFieldU16(sfTransactionType) == ttIMPORT)
{
XRPAmount const importFee = baseFee * 10;
if (importFee > baseFee)
baseFee = importFee;
}
// Each signer adds one more baseFee to the minimum required fee // Each signer adds one more baseFee to the minimum required fee
// for the transaction. // for the transaction.

View File

@@ -10,7 +10,7 @@ namespace XahauGenesis
constexpr XRPAmount ExchangeAmount { 2'000'000 * DROPS_PER_XRP }; constexpr XRPAmount ExchangeAmount { 2'000'000 * DROPS_PER_XRP };
inline inline
std::map<std::string, XRPAmount> const std::vector<std::pair<std::string, XRPAmount>> const
Distribution Distribution
{ {
{"rMYm3TY5D3rXYVAz6Zr2PDqEcjsTYbNiAT", InfraAmount}, {"rMYm3TY5D3rXYVAz6Zr2PDqEcjsTYbNiAT", InfraAmount},
@@ -30,8 +30,7 @@ namespace XahauGenesis
// if the ttEnableAmendment has an optional flag (that cannot be added in production) // if the ttEnableAmendment has an optional flag (that cannot be added in production)
// then whatever is in this array is used // then whatever is in this array is used
inline inline
std::map<std::string, XRPAmount> std::vector<std::pair<std::string, XRPAmount>> TestDistribution;
TestDistribution;
// For the Governance Hook: HookOn is set to ttINVOKE only // For the Governance Hook: HookOn is set to ttINVOKE only
@@ -40,7 +39,7 @@ namespace XahauGenesis
GovernanceHookOn("FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7FFFFFFFFFFFFFFFFFFBFFFFF"); GovernanceHookOn("FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7FFFFFFFFFFFFFFFFFFBFFFFF");
inline inline
std::map<std::vector<uint8_t>, std::vector<uint8_t>> const std::vector<std::pair<std::vector<uint8_t>, std::vector<uint8_t>>> const
GovernanceParameters GovernanceParameters
{ {
// 1.003274 -xfl-> 6089869970204910592 -le-> 0x00E461EE78908354 // 1.003274 -xfl-> 6089869970204910592 -le-> 0x00E461EE78908354

View File

@@ -160,7 +160,8 @@ struct XahauGenesis_test : public beast::unit_test::suite
// check distribution amounts and hook parameters // check distribution amounts and hook parameters
{ {
uint8_t member_count = 0; uint8_t member_count = 0;
std::map<std::vector<uint8_t>, std::vector<uint8_t>> params = XahauGenesis::GovernanceParameters; std::vector<std::pair<std::vector<uint8_t>, std::vector<uint8_t>>> params =
XahauGenesis::GovernanceParameters;
for (auto const& [rn, x]: XahauGenesis::Distribution) for (auto const& [rn, x]: XahauGenesis::Distribution)
{ {
const char first = rn.c_str()[0]; const char first = rn.c_str()[0];
@@ -178,7 +179,7 @@ struct XahauGenesis_test : public beast::unit_test::suite
auto bal = acc->getFieldAmount(sfBalance); auto bal = acc->getFieldAmount(sfBalance);
BEAST_EXPECT(bal == STAmount(x)); BEAST_EXPECT(bal == STAmount(x));
params.emplace( params.emplace_back(
std::vector<uint8_t>{'I', 'S', member_count++}, std::vector<uint8_t>{'I', 'S', member_count++},
std::vector<uint8_t>(id.data(), id.data() + 20)); std::vector<uint8_t>(id.data(), id.data() + 20));
continue; continue;
@@ -195,13 +196,13 @@ struct XahauGenesis_test : public beast::unit_test::suite
BEAST_EXPECT(bal == STAmount(x)); BEAST_EXPECT(bal == STAmount(x));
// initial member enumeration // initial member enumeration
params.emplace( params.emplace_back(
std::vector<uint8_t>{'I', 'S', member_count++}, std::vector<uint8_t>{'I', 'S', member_count++},
std::vector<uint8_t>(id.data(), id.data() + 20)); std::vector<uint8_t>(id.data(), id.data() + 20));
} }
// initial member count // initial member count
params.emplace( params.emplace_back(
std::vector<uint8_t>{'I', 'M', 'C'}, std::vector<uint8_t>{'I', 'M', 'C'},
std::vector<uint8_t>{member_count}); std::vector<uint8_t>{member_count});
@@ -212,6 +213,7 @@ struct XahauGenesis_test : public beast::unit_test::suite
// these should be recorded in the same order // these should be recorded in the same order
std::set<std::vector<uint8_t>> keys_used; std::set<std::vector<uint8_t>> keys_used;
int counter = 0;
for (auto& param : leParams) for (auto& param : leParams)
{ {
auto key = param.getFieldVL(sfHookParameterName); auto key = param.getFieldVL(sfHookParameterName);
@@ -220,14 +222,14 @@ struct XahauGenesis_test : public beast::unit_test::suite
// no duplicates allowed // no duplicates allowed
BEAST_EXPECT(keys_used.find(key) == keys_used.end()); BEAST_EXPECT(keys_used.find(key) == keys_used.end());
// should be in our precomputed params BEAST_EXPECT(counter < leParams.size());
BEAST_EXPECT(params.find(key) != params.end());
// value should match BEAST_EXPECT(params[counter].first == key);
BEAST_EXPECT(params[key] == val); BEAST_EXPECT(params[counter].second == val);
// add key to used set // add key to used set
keys_used.emplace(key); keys_used.emplace(key);
counter++;
} }
} }
@@ -314,7 +316,7 @@ struct XahauGenesis_test : public beast::unit_test::suite
for (auto& m: members) for (auto& m: members)
{ {
std::string acc = toBase58(m); std::string acc = toBase58(m);
XahauGenesis::TestDistribution[acc] = XRPAmount(10000000000); XahauGenesis::TestDistribution.emplace_back(acc, XRPAmount(10000000000));
} }
activate(env, true, true, true); activate(env, true, true, true);
@@ -357,11 +359,31 @@ struct XahauGenesis_test : public beast::unit_test::suite
auto const david = Account("david"); auto const david = Account("david");
auto const edward = Account("edward"); auto const edward = Account("edward");
env.fund(XRP(10000), alice, bob, carol, david, edward); auto const m6 = Account("m6");
auto const m7 = Account("m7");
auto const m8 = Account("m8");
auto const m9 = Account("m9");
auto const m10 = Account("m10");
auto const m11 = Account("m11");
auto const m12 = Account("m12");
auto const m13 = Account("m13");
auto const m14 = Account("m14");
auto const m15 = Account("m15");
auto const m16 = Account("m16");
auto const m17 = Account("m17");
auto const m18 = Account("m18");
auto const m19 = Account("m19");
auto const m20 = Account("m20");
env.fund(XRP(10000), alice, bob, carol, david, edward,
m6, m7, m8, m9, m10, m11, m12, m13, m14, m15, m16, m17, m18, m19, m20);
env.close(); env.close();
setupGov(env, {alice.id(), bob.id(), carol.id(), david.id(), edward.id()}); std::vector<Account> initial_members {alice, bob, carol, david, edward};
std::vector<AccountID> initial_members_ids { alice.id(), bob.id(), carol.id(), david.id(), edward.id() };
setupGov(env, initial_members_ids);
auto vote = [&]( auto vote = [&](
Account const& acc, Account const& acc,
@@ -436,11 +458,42 @@ struct XahauGenesis_test : public beast::unit_test::suite
if (shouldFail) if (shouldFail)
actioned = false; actioned = false;
uint8_t const key[32] = {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, topic1, topic2}; bool isZero = true;
for (auto& x: vote_data)
if (x != 0)
{
isZero = false;
break;
}
bool isOldDataZero = true;
for (auto& x : old_data)
if (x != 0)
{
isOldDataZero = false;
break;
}
uint8_t const key[32] = {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
topic1 == 'S' ? 0 : topic1, topic2};
// check actioning prior to vote // check actioning prior to vote
{ {
auto entry = env.le(keylet::hookState(env.master.id(), uint256::fromVoid(key), beast::zero)); auto entry = env.le(keylet::hookState(env.master.id(), uint256::fromVoid(key), beast::zero));
BEAST_EXPECT((old_data.empty() && !entry) || std::cout
<< "topic vote precheck: \n"
<< "\tacc: " << acc.human() << " shouldAction: " << (actioned ? "true": "false")
<< "\tshouldFail: " << (shouldFail ? "true": "false") << "\n"
<< "\ttopic: " << topic1 << "," << (topic2 < 48 ? topic2 + '1' : topic2) << "\n"
<< "\tisOldDataZero: " << (isOldDataZero ? "true" : "false") << "\n"
<< "\tisVoteDataZero: " << (isZero ? "true" : "false") << "\n"
<< "\told_data: " << strHex(old_data) << "\n"
<< "\tlgr_data: " << (!entry ? "doesn't exist" : strHex(entry->getFieldVL(sfHookStateData))) << "\n"
<< "\tnew_data: " << strHex(vote_data) << "\n"
<< "\t(isOldDataZero && !entry): " << (isOldDataZero && !entry ? "true" : "false") << "\n"
<< "\t(entry && entry->getFieldVL(sfHookStateData) == old_data): " <<
(entry && entry->getFieldVL(sfHookStateData) == old_data ? "true" : "false") << "\n";
BEAST_EXPECT((isOldDataZero && !entry) ||
(entry && entry->getFieldVL(sfHookStateData) == old_data)); (entry && entry->getFieldVL(sfHookStateData) == old_data));
} }
@@ -462,23 +515,15 @@ struct XahauGenesis_test : public beast::unit_test::suite
} }
// check actioning // check actioning
if (!shouldFail)
{ {
// if the vote count isn't high enough it will be hte old value if it's high enough it will be the // if the vote count isn't high enough it will be hte old value if it's high enough it will be the
// new value // new value
auto entry = env.le(keylet::hookState(env.master.id(), uint256::fromVoid(key), beast::zero)); auto entry = env.le(keylet::hookState(env.master.id(), uint256::fromVoid(key), beast::zero));
bool isZero = true; if (!actioned && isOldDataZero)
for (auto& x: vote_data)
if (x != 0)
{ {
isZero = false; BEAST_EXPECT(!entry || entry->getFieldVL(sfHookStateData) == old_data);
break;
}
if (!actioned && old_data.empty())
{
BEAST_EXPECT(!entry);
return; return;
} }
@@ -487,16 +532,32 @@ struct XahauGenesis_test : public beast::unit_test::suite
if (isZero) if (isZero)
BEAST_EXPECT(!entry); BEAST_EXPECT(!entry);
else else
{
std::cout << "new data: " << strHex(vote_data) << "\n";
std::cout << "lgr data: " <<
(!entry ? "<doesn't exist>" : strHex(entry->getFieldVL(sfHookStateData))) << "\n";
BEAST_EXPECT(!!entry && entry->getFieldVL(sfHookStateData) == vote_data); BEAST_EXPECT(!!entry && entry->getFieldVL(sfHookStateData) == vote_data);
}
} }
else else
{ {
std::cout << "old data: " << strHex(entry->getFieldVL(sfHookStateData)) << "\n"; if (!!entry)
BEAST_EXPECT(entry->getFieldVL(sfHookStateData) == old_data); {
std::cout << "old data: " << strHex(entry->getFieldVL(sfHookStateData)) << "\n";
}
BEAST_EXPECT(!!entry && entry->getFieldVL(sfHookStateData) == old_data);
} }
} }
}; };
auto vecFromAcc = [](Account const& acc) -> std::vector<uint8_t>
{
uint8_t const* data = acc.id().data();
std::vector<uint8_t> ret(data, data+20);
std::cout << "ret: `" << strHex(ret) << "`, size: " << ret.size() << "\n";
return ret;
};
// 100% vote for a different reward rate // 100% vote for a different reward rate
{ {
@@ -524,19 +585,19 @@ struct XahauGenesis_test : public beast::unit_test::suite
uint8_t const member_count_key[32] = {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,'M','C'}; uint8_t const member_count_key[32] = {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,'M','C'};
std::vector<uint8_t> const null_acc_id {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}; std::vector<uint8_t> const null_acc_id {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0};
// four of the 5 vote to remove alice // four of the 5 vote to remove alice
{ {
std::vector<uint8_t> const null_acc_id {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}; std::vector<uint8_t> const null_acc_id {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0};
std::vector<uint8_t> id; std::vector<uint8_t> id = vecFromAcc(alice);
id.reserve(20);
memcpy(id.data(), alice.id().data(), 20);
doL1Vote(bob, 'S', 0, null_acc_id, id, false); doL1Vote(bob, 'S', 0, null_acc_id, id, false);
doL1Vote(carol, 'S', 0, null_acc_id, id, false); doL1Vote(carol, 'S', 0, null_acc_id, id, false);
doL1Vote(david, 'S', 0, null_acc_id, id, false); doL1Vote(david, 'S', 0, null_acc_id, id, false);
doL1Vote(edward, 'S', 0, null_acc_id, id, true); doL1Vote(edward, 'S', 0, null_acc_id, id, true);
} }
// check the membercount is now 4 // check the membercount is now 4
{ {
auto entry = env.le(keylet::hookState(env.master.id(), auto entry = env.le(keylet::hookState(env.master.id(),
@@ -548,14 +609,17 @@ struct XahauGenesis_test : public beast::unit_test::suite
// continue to remove members (david) // continue to remove members (david)
{ {
std::vector<uint8_t> id; std::vector<uint8_t> id = vecFromAcc(david);
id.reserve(20);
memcpy(id.data(), david.id().data(), 20);
doL1Vote(bob, 'S', 3, null_acc_id, id, false); doL1Vote(bob, 'S', 3, null_acc_id, id, false);
doL1Vote(carol, 'S', 3, null_acc_id, id, false); doL1Vote(carol, 'S', 3, null_acc_id, id, false);
doL1Vote(edward, 'S', 3, null_acc_id, id, true); doL1Vote(edward, 'S', 3, null_acc_id, id, true);
} }
{
// RH TODO: check all david's previous votes were correctly removed
// check expected hookstate count
}
// check the membercount is now 3 // check the membercount is now 3
{ {
auto entry = env.le(keylet::hookState(env.master.id(), auto entry = env.le(keylet::hookState(env.master.id(),
@@ -567,9 +631,7 @@ struct XahauGenesis_test : public beast::unit_test::suite
// continue to remove members (carol) // continue to remove members (carol)
{ {
std::vector<uint8_t> id; std::vector<uint8_t> id = vecFromAcc(carol);
id.reserve(20);
memcpy(id.data(), carol.id().data(), 20);
doL1Vote(bob, 'S', 2, null_acc_id, id, false); doL1Vote(bob, 'S', 2, null_acc_id, id, false);
doL1Vote(edward, 'S', 2, null_acc_id, id, true); doL1Vote(edward, 'S', 2, null_acc_id, id, true);
} }
@@ -586,10 +648,8 @@ struct XahauGenesis_test : public beast::unit_test::suite
// member count can't fall below 2 // member count can't fall below 2
// try to vote out edward using 2/2 votes // try to vote out edward using 2/2 votes
{ {
std::vector<uint8_t> id; std::vector<uint8_t> id = vecFromAcc(edward);
id.reserve(20); doL1Vote(bob, 'S', 4, null_acc_id, id, false);
memcpy(id.data(), edward.id().data(), 20);
doL1Vote(bob, 'S', 4, null_acc_id, id, true);
doL1Vote(edward, 'S', 4, null_acc_id, id, false, true); doL1Vote(edward, 'S', 4, null_acc_id, id, false, true);
} }
@@ -604,9 +664,7 @@ struct XahauGenesis_test : public beast::unit_test::suite
// try to remove bob using 1/2 votes // try to remove bob using 1/2 votes
{ {
std::vector<uint8_t> id; std::vector<uint8_t> id = vecFromAcc(bob);
id.reserve(20);
memcpy(id.data(), bob.id().data(), 20);
doL1Vote(bob, 'S', 1, null_acc_id, id, false, false); doL1Vote(bob, 'S', 1, null_acc_id, id, false, false);
} }
@@ -620,6 +678,52 @@ struct XahauGenesis_test : public beast::unit_test::suite
BEAST_EXPECT(entry->getFieldVL(sfHookStateData) == expected_data); BEAST_EXPECT(entry->getFieldVL(sfHookStateData) == expected_data);
} }
// replace edward with alice
{
std::vector<uint8_t> id = vecFromAcc(alice);
doL1Vote(bob, 'S', 4, null_acc_id, id, false);
doL1Vote(edward, 'S', 4, null_acc_id, id, true);
// subsequent edward vote should fail because he's not a member anymore
doL1Vote(edward, 'S', 4, null_acc_id, id, false, true);
}
// check the membercount is now 2
{
auto entry = env.le(keylet::hookState(env.master.id(),
uint256::fromVoid(member_count_key), beast::zero));
std::vector<uint8_t> const expected_data {0x02U};
BEAST_REQUIRE(!!entry);
BEAST_EXPECT(entry->getFieldVL(sfHookStateData) == expected_data);
}
auto doSeatVote = [&](uint8_t seat_no, uint8_t final_count,
AccountID const& candidate, AccountID const& previous,
std::vector<Account const*> const& voters)
{
std::vector<uint8_t> previd { 0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0} ;
memcpy(previd.data(), previous.data(), 20);
std::vector<uint8_t> id { 0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0} ;
memcpy(id.data(), candidate.data(), 20);
int count = voters.size();
for (Account const* voter : voters)
doL1Vote(*voter, 'S', seat_no, id, previd, --count <= 0);
{
auto entry = env.le(keylet::hookState(env.master.id(),
uint256::fromVoid(member_count_key), beast::zero));
std::vector<uint8_t> const expected_data {final_count};
BEAST_REQUIRE(!!entry);
BEAST_EXPECT(entry->getFieldVL(sfHookStateData) == expected_data);
}
};
std::cout << "Put edward back into seat 0\n";
// put edward into seat 0 previously occupied by alice
doSeatVote(0, 3, edward.id(), noAccount(), {&alice, &bob});
} }