Merge pull request #4139 from carlaKC/lnrpc-listsweeps

lnrpc: add block height params to GetTransactions and add ListSweeps
This commit is contained in:
Olaoluwa Osuntokun 2020-05-07 16:44:05 -07:00 committed by GitHub
commit 3190437188
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
20 changed files with 1515 additions and 836 deletions

@ -2295,11 +2295,37 @@ func debugLevel(ctx *cli.Context) error {
} }
var listChainTxnsCommand = cli.Command{ var listChainTxnsCommand = cli.Command{
Name: "listchaintxns", Name: "listchaintxns",
Category: "On-chain", Category: "On-chain",
Usage: "List transactions from the wallet.", Usage: "List transactions from the wallet.",
Description: "List all transactions an address of the wallet was involved in.", Flags: []cli.Flag{
Action: actionDecorator(listChainTxns), cli.Int64Flag{
Name: "start_height",
Usage: "the block height from which to list " +
"transactions, inclusive",
},
cli.Int64Flag{
Name: "end_height",
Usage: "the block height until which to list " +
"transactions, inclusive, to get transactions " +
"until the chain tip, including unconfirmed, " +
"set this value to -1",
},
},
Description: `
List all transactions an address of the wallet was involved in.
This call will return a list of wallet related transactions that paid
to an address our wallet controls, or spent utxos that we held. The
start_height and end_height flags can be used to specify an inclusive
block range over which to query for transactions. If the end_height is
less than the start_height, transactions will be queried in reverse.
To get all transactions until the chain tip, including unconfirmed
transactions (identifiable with BlockHeight=0), set end_height to -1.
By default, this call will get all transactions our wallet was involved
in, including unconfirmed transactions.
`,
Action: actionDecorator(listChainTxns),
} }
func listChainTxns(ctx *cli.Context) error { func listChainTxns(ctx *cli.Context) error {
@ -2307,8 +2333,16 @@ func listChainTxns(ctx *cli.Context) error {
client, cleanUp := getClient(ctx) client, cleanUp := getClient(ctx)
defer cleanUp() defer cleanUp()
resp, err := client.GetTransactions(ctxb, &lnrpc.GetTransactionsRequest{}) req := &lnrpc.GetTransactionsRequest{}
if ctx.IsSet("start_height") {
req.StartHeight = int32(ctx.Int64("start_height"))
}
if ctx.IsSet("end_height") {
req.EndHeight = int32(ctx.Int64("end_height"))
}
resp, err := client.GetTransactions(ctxb, req)
if err != nil { if err != nil {
return err return err
} }

@ -27,6 +27,7 @@ func walletCommands() []cli.Command {
pendingSweepsCommand, pendingSweepsCommand,
bumpFeeCommand, bumpFeeCommand,
bumpCloseFeeCommand, bumpCloseFeeCommand,
listSweepsCommand,
}, },
}, },
} }
@ -300,3 +301,42 @@ func getWaitingCloseCommitments(client lnrpc.LightningClient,
return nil, errors.New("channel not found") return nil, errors.New("channel not found")
} }
var listSweepsCommand = cli.Command{
Name: "listsweeps",
Category: "On-chain",
Usage: "Lists all sweeps that have been published by our node.",
Flags: []cli.Flag{
cli.BoolFlag{
Name: "verbose",
Usage: "lookup full transaction",
},
},
Description: `
Get a list of the hex-encoded transaction ids of every sweep that our
node has published. Note that these sweeps may not be confirmed on chain
yet, as we store them on transaction broadcast, not confirmation.
If the verbose flag is set, the full set of transactions will be
returned, otherwise only the sweep transaction ids will be returned.
`,
Action: actionDecorator(listSweeps),
}
func listSweeps(ctx *cli.Context) error {
client, cleanUp := getWalletClient(ctx)
defer cleanUp()
resp, err := client.ListSweeps(
context.Background(), &walletrpc.ListSweepsRequest{
Verbose: ctx.IsSet("verbose"),
},
)
if err != nil {
return err
}
printJSON(resp)
return nil
}

@ -1292,6 +1292,17 @@ func (m *Transaction) GetRawTxHex() string {
} }
type GetTransactionsRequest struct { type GetTransactionsRequest struct {
//
//The height from which to list transactions, inclusive. If this value is
//greater than end_height, transactions will be read in reverse.
StartHeight int32 `protobuf:"varint,1,opt,name=start_height,json=startHeight,proto3" json:"start_height,omitempty"`
//
//The height until which to list transactions, inclusive. To include
//unconfirmed transactions, this value should be set to -1, which will
//return transactions from start_height until the current chain tip and
//unconfirmed transactions. If no end_height is provided, the call will
//default to this option.
EndHeight int32 `protobuf:"varint,2,opt,name=end_height,json=endHeight,proto3" json:"end_height,omitempty"`
XXX_NoUnkeyedLiteral struct{} `json:"-"` XXX_NoUnkeyedLiteral struct{} `json:"-"`
XXX_unrecognized []byte `json:"-"` XXX_unrecognized []byte `json:"-"`
XXX_sizecache int32 `json:"-"` XXX_sizecache int32 `json:"-"`
@ -1322,6 +1333,20 @@ func (m *GetTransactionsRequest) XXX_DiscardUnknown() {
var xxx_messageInfo_GetTransactionsRequest proto.InternalMessageInfo var xxx_messageInfo_GetTransactionsRequest proto.InternalMessageInfo
func (m *GetTransactionsRequest) GetStartHeight() int32 {
if m != nil {
return m.StartHeight
}
return 0
}
func (m *GetTransactionsRequest) GetEndHeight() int32 {
if m != nil {
return m.EndHeight
}
return 0
}
type TransactionDetails struct { type TransactionDetails struct {
/// The list of transactions relevant to the wallet. /// The list of transactions relevant to the wallet.
Transactions []*Transaction `protobuf:"bytes,1,rep,name=transactions,proto3" json:"transactions,omitempty"` Transactions []*Transaction `protobuf:"bytes,1,rep,name=transactions,proto3" json:"transactions,omitempty"`
@ -12007,7 +12032,7 @@ func init() {
func init() { proto.RegisterFile("rpc.proto", fileDescriptor_77a6da22d6a3feb1) } func init() { proto.RegisterFile("rpc.proto", fileDescriptor_77a6da22d6a3feb1) }
var fileDescriptor_77a6da22d6a3feb1 = []byte{ var fileDescriptor_77a6da22d6a3feb1 = []byte{
// 12049 bytes of a gzipped FileDescriptorProto // 12074 bytes of a gzipped FileDescriptorProto
0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xbc, 0xbd, 0x59, 0x6c, 0x24, 0x49, 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xbc, 0xbd, 0x59, 0x6c, 0x24, 0x49,
0x7a, 0x18, 0xdc, 0x75, 0x91, 0x55, 0x5f, 0x1d, 0x2c, 0x06, 0xaf, 0x6a, 0xf6, 0xf4, 0x74, 0x4f, 0x7a, 0x18, 0xdc, 0x75, 0x91, 0x55, 0x5f, 0x1d, 0x2c, 0x06, 0xaf, 0x6a, 0xf6, 0xf4, 0x74, 0x4f,
0xce, 0xec, 0x74, 0x4f, 0xcf, 0x2c, 0xbb, 0xa7, 0x77, 0x7b, 0x66, 0x77, 0xe6, 0xd7, 0x6a, 0x8b, 0xce, 0xec, 0x74, 0x4f, 0xcf, 0x2c, 0xbb, 0xa7, 0x77, 0x7b, 0x66, 0x77, 0xe6, 0xd7, 0x6a, 0x8b,
@ -12056,712 +12081,713 @@ var fileDescriptor_77a6da22d6a3feb1 = []byte{
0x8d, 0x79, 0x99, 0x2c, 0x20, 0x3b, 0x9c, 0x07, 0xec, 0x6b, 0x50, 0x1b, 0xf0, 0x20, 0xb4, 0xe4, 0x8d, 0x79, 0x99, 0x2c, 0x20, 0x3b, 0x9c, 0x07, 0xec, 0x6b, 0x50, 0x1b, 0xf0, 0x20, 0xb4, 0xe4,
0x64, 0xf0, 0xa0, 0x51, 0xc4, 0x95, 0x5f, 0x15, 0xd0, 0xa6, 0x02, 0xb2, 0xd7, 0x00, 0x7c, 0xfb, 0x64, 0xf0, 0xa0, 0x51, 0xc4, 0x95, 0x5f, 0x15, 0xd0, 0xa6, 0x02, 0xb2, 0xd7, 0x00, 0x7c, 0xfb,
0xc2, 0x12, 0x03, 0xc1, 0x2f, 0x1b, 0x25, 0x9a, 0x05, 0xdf, 0xbe, 0xe8, 0x5d, 0xee, 0xf2, 0x4b, 0xc2, 0x12, 0x03, 0xc1, 0x2f, 0x1b, 0x25, 0x9a, 0x05, 0xdf, 0xbe, 0xe8, 0x5d, 0xee, 0xf2, 0x4b,
0x41, 0x35, 0x4f, 0x79, 0xa8, 0x0d, 0x5a, 0x20, 0xa9, 0xd3, 0xd8, 0x03, 0xa6, 0x81, 0xb7, 0x79, 0xe3, 0xfb, 0xb0, 0xfa, 0x94, 0x87, 0xda, 0xa0, 0x05, 0x8a, 0x3a, 0x05, 0xbb, 0x0c, 0x6d, 0x3f,
0x68, 0x3b, 0xc3, 0x80, 0x7d, 0x00, 0x95, 0x50, 0x43, 0x46, 0x36, 0x58, 0x8e, 0x48, 0x48, 0xcb, 0x54, 0xed, 0xcf, 0x50, 0xfb, 0x11, 0x16, 0xb7, 0x9f, 0xbb, 0x03, 0x85, 0x40, 0x2b, 0xab, 0xc4,
0x60, 0x26, 0xf0, 0x8c, 0x33, 0x28, 0xee, 0x70, 0xbe, 0xe7, 0x8c, 0x9c, 0x90, 0xad, 0x42, 0xe1, 0xdd, 0x01, 0x25, 0x1b, 0x7b, 0xc0, 0xb4, 0x82, 0xb7, 0x79, 0x68, 0x3b, 0xc3, 0x80, 0x7d, 0x00,
0xc4, 0xb9, 0xe4, 0x44, 0xec, 0xb9, 0xdd, 0x1b, 0x26, 0x7d, 0xb2, 0x3b, 0x00, 0xf8, 0xc3, 0x1a, 0x95, 0x50, 0xab, 0x0e, 0x19, 0x69, 0x39, 0x22, 0x42, 0x2d, 0x83, 0x99, 0xc0, 0x33, 0xce, 0xa0,
0x45, 0xd4, 0xb4, 0x7b, 0xc3, 0x2c, 0x21, 0x6c, 0x3f, 0xb0, 0x43, 0xb6, 0x0e, 0xf3, 0x63, 0xee, 0xb8, 0xc3, 0xf9, 0x9e, 0x33, 0x72, 0x42, 0xb6, 0x0a, 0x85, 0x13, 0xe7, 0x92, 0xd3, 0x72, 0xc9,
0xf7, 0xb9, 0x9a, 0xb7, 0xdd, 0x1b, 0xa6, 0x02, 0x6c, 0xce, 0x43, 0x61, 0x28, 0x4a, 0x37, 0xfe, 0xed, 0xde, 0x30, 0xe9, 0x93, 0xdd, 0x01, 0xc0, 0x1f, 0xd6, 0x28, 0xa2, 0xc7, 0xdd, 0x1b, 0x66,
0xb8, 0x00, 0xe5, 0x2e, 0x77, 0xa3, 0x55, 0xc6, 0x20, 0x2f, 0x06, 0x44, 0xae, 0x2c, 0xfc, 0xcd, 0x09, 0x61, 0xfb, 0x81, 0x1d, 0xb2, 0x75, 0x98, 0x1f, 0x73, 0xbf, 0xcf, 0xd5, 0xcc, 0xef, 0xde,
0xde, 0x84, 0x32, 0x0e, 0x5d, 0x10, 0xfa, 0x8e, 0x7b, 0x4a, 0x54, 0xbd, 0x99, 0x6d, 0x64, 0x4c, 0x30, 0x15, 0x60, 0x73, 0x1e, 0x0a, 0x43, 0x51, 0xba, 0xf1, 0xc7, 0x05, 0x28, 0x77, 0xb9, 0x1b,
0x10, 0xe0, 0x2e, 0x42, 0x59, 0x1d, 0x72, 0xf6, 0x48, 0x51, 0xb5, 0xf8, 0xc9, 0x6e, 0x42, 0xd1, 0xad, 0x53, 0x06, 0x79, 0x31, 0xa4, 0x72, 0x6d, 0xe2, 0x6f, 0xf6, 0x26, 0x94, 0x71, 0xf0, 0x83,
0x1e, 0x85, 0xd4, 0xbc, 0x0a, 0x82, 0xe7, 0xed, 0x51, 0x88, 0x4d, 0x7b, 0x03, 0x2a, 0x63, 0xfb, 0xd0, 0x77, 0xdc, 0x53, 0x5a, 0x17, 0x9b, 0xd9, 0x46, 0xc6, 0x04, 0x01, 0xee, 0x22, 0x94, 0xd5,
0x6a, 0x24, 0xd6, 0x72, 0x44, 0x0e, 0x15, 0xb3, 0x2c, 0x61, 0x48, 0x10, 0x8f, 0x61, 0x49, 0x47, 0x21, 0x67, 0x8f, 0xd4, 0xba, 0x10, 0x3f, 0xd9, 0x4d, 0x28, 0xda, 0xa3, 0x90, 0x9a, 0x57, 0x41,
0x51, 0x95, 0x17, 0xa2, 0xca, 0x17, 0x35, 0x6c, 0xd9, 0x86, 0x7b, 0xb0, 0xa0, 0xf2, 0xf8, 0xd4, 0xf0, 0xbc, 0x3d, 0x0a, 0xb1, 0x69, 0x6f, 0x40, 0x65, 0x6c, 0x5f, 0x8d, 0x04, 0x37, 0x88, 0x08,
0x1f, 0x24, 0x93, 0x92, 0x59, 0x93, 0x60, 0xd5, 0xcb, 0xfb, 0x50, 0x3f, 0x71, 0x5c, 0x7b, 0x68, 0xaa, 0x62, 0x96, 0x25, 0x0c, 0x49, 0xea, 0x31, 0x2c, 0xe9, 0x28, 0xaa, 0xf2, 0x42, 0x54, 0xf9,
0xf5, 0x87, 0xe1, 0xb9, 0x35, 0xe0, 0xc3, 0xd0, 0x46, 0x8a, 0x29, 0x98, 0x35, 0x84, 0x6f, 0x0d, 0xa2, 0x86, 0x2d, 0xdb, 0x70, 0x0f, 0x16, 0x54, 0x1e, 0x9f, 0xfa, 0x83, 0x84, 0x56, 0x32, 0x6b,
0xc3, 0xf3, 0x6d, 0x01, 0x65, 0xef, 0x41, 0xe9, 0x84, 0x73, 0x0b, 0x07, 0xab, 0x51, 0x4c, 0x2c, 0x12, 0xac, 0x7a, 0x79, 0x1f, 0xea, 0x27, 0x8e, 0x6b, 0x0f, 0xad, 0xfe, 0x30, 0x3c, 0xb7, 0x06,
0x3c, 0x35, 0x43, 0x66, 0xf1, 0x44, 0xcd, 0xd5, 0x7b, 0x50, 0xf7, 0x26, 0xe1, 0xa9, 0xe7, 0xb8, 0x7c, 0x18, 0xda, 0x48, 0x73, 0x05, 0xb3, 0x86, 0xf0, 0xad, 0x61, 0x78, 0xbe, 0x2d, 0xa0, 0xec,
0xa7, 0x96, 0xe0, 0x77, 0x96, 0x33, 0x40, 0x1a, 0xca, 0x6f, 0x66, 0x1f, 0x65, 0xcc, 0x9a, 0x4a, 0x3d, 0x28, 0x9d, 0x70, 0x6e, 0xe1, 0x60, 0x35, 0x8a, 0x89, 0xa5, 0xab, 0x66, 0xc8, 0x2c, 0x9e,
0x13, 0x9c, 0xa7, 0x3d, 0x60, 0x6f, 0xc3, 0xc2, 0xd0, 0x0e, 0x42, 0xeb, 0xcc, 0x1b, 0x5b, 0xe3, 0xa8, 0xb9, 0x7a, 0x0f, 0xea, 0xde, 0x24, 0x3c, 0xf5, 0x1c, 0xf7, 0xd4, 0x12, 0x1c, 0xd3, 0x72,
0xc9, 0xf1, 0x73, 0x7e, 0xd5, 0xa8, 0xe2, 0x40, 0x54, 0x05, 0x78, 0xd7, 0x1b, 0x1f, 0x22, 0x50, 0x06, 0x48, 0x85, 0xf9, 0xcd, 0xec, 0xa3, 0x8c, 0x59, 0x53, 0x69, 0x82, 0x77, 0xb5, 0x07, 0xec,
0x50, 0x36, 0xb6, 0x93, 0x1a, 0x01, 0x77, 0x33, 0xf7, 0xab, 0x66, 0x49, 0x40, 0xa8, 0xd2, 0xcf, 0x6d, 0x58, 0x18, 0xda, 0x41, 0x68, 0x9d, 0x79, 0x63, 0x6b, 0x3c, 0x39, 0x7e, 0xce, 0xaf, 0x1a,
0x61, 0x09, 0xa7, 0xa7, 0x3f, 0x09, 0x42, 0x6f, 0x64, 0x09, 0x5e, 0xed, 0x0f, 0x82, 0x46, 0x19, 0x55, 0x1c, 0x88, 0xaa, 0x00, 0xef, 0x7a, 0xe3, 0x43, 0x04, 0x0a, 0xd2, 0xc3, 0x76, 0x52, 0x23,
0x69, 0xed, 0x1d, 0xd9, 0x58, 0x6d, 0x8e, 0x37, 0xb6, 0x79, 0x10, 0x6e, 0x21, 0xb2, 0x49, 0xb8, 0xe0, 0x6e, 0xe6, 0x7e, 0xd5, 0x2c, 0x09, 0x08, 0x55, 0xfa, 0x39, 0x2c, 0xe1, 0xf4, 0xf4, 0x27,
0x62, 0x43, 0xbf, 0x32, 0x17, 0x07, 0xd3, 0x70, 0xf6, 0x1e, 0x30, 0x7b, 0x38, 0xf4, 0x2e, 0xac, 0x41, 0xe8, 0x8d, 0x2c, 0xc1, 0xed, 0xfd, 0x41, 0xd0, 0x28, 0x23, 0xad, 0xbd, 0x23, 0x1b, 0xab,
0x80, 0x0f, 0x4f, 0x2c, 0x39, 0x88, 0x8d, 0xda, 0xdd, 0xcc, 0xfd, 0xa2, 0x59, 0xc7, 0x94, 0x2e, 0xcd, 0xf1, 0xc6, 0x36, 0x0f, 0xc2, 0x2d, 0x44, 0x36, 0x09, 0x57, 0x88, 0x04, 0x57, 0xe6, 0xe2,
0x1f, 0x9e, 0x1c, 0x12, 0x9c, 0x7d, 0x00, 0xb8, 0x98, 0xac, 0x13, 0x6e, 0x87, 0x13, 0x9f, 0x07, 0x60, 0x1a, 0xce, 0xde, 0x03, 0x66, 0x0f, 0x87, 0xde, 0x85, 0x15, 0xf0, 0xe1, 0x89, 0x25, 0x07,
0x8d, 0x85, 0xbb, 0xb9, 0xfb, 0xb5, 0xc7, 0x8b, 0xd1, 0x78, 0x21, 0x78, 0xd3, 0x09, 0xcd, 0x8a, 0xb1, 0x51, 0xbb, 0x9b, 0xb9, 0x5f, 0x34, 0xeb, 0x98, 0xd2, 0xe5, 0xc3, 0x93, 0x43, 0x82, 0xb3,
0xc0, 0x93, 0xdf, 0xc1, 0xfa, 0x36, 0xac, 0xa6, 0x37, 0x49, 0x10, 0x95, 0x18, 0x15, 0x41, 0x8c, 0x0f, 0x00, 0x97, 0xa3, 0x75, 0xc2, 0xed, 0x70, 0xe2, 0xf3, 0xa0, 0xb1, 0x70, 0x37, 0x77, 0xbf,
0x79, 0x53, 0xfc, 0x64, 0xcb, 0x50, 0x38, 0xb7, 0x87, 0x13, 0x2e, 0x79, 0x3a, 0x7d, 0x7c, 0x94, 0xf6, 0x78, 0x31, 0x1a, 0x2f, 0x04, 0x6f, 0x3a, 0xa1, 0x59, 0x11, 0x78, 0xf2, 0x3b, 0x58, 0xdf,
0xfd, 0x56, 0xc6, 0xf8, 0xa3, 0x0c, 0x54, 0xa8, 0x97, 0x52, 0x16, 0x79, 0x13, 0xaa, 0x8a, 0x1a, 0x86, 0xd5, 0xf4, 0x26, 0x09, 0xa2, 0x12, 0xa3, 0x22, 0x88, 0x31, 0x6f, 0x8a, 0x9f, 0x6c, 0x19,
0xb8, 0xef, 0x7b, 0xbe, 0xe4, 0x6a, 0x8a, 0xf2, 0x5a, 0x02, 0x26, 0x76, 0x15, 0x85, 0x34, 0xf6, 0x0a, 0xe7, 0xf6, 0x70, 0xc2, 0xe5, 0xae, 0x40, 0x1f, 0x1f, 0x65, 0xbf, 0x95, 0x31, 0xfe, 0x28,
0xb9, 0x33, 0xb2, 0x4f, 0x55, 0xd1, 0x8a, 0x94, 0x0e, 0x25, 0x98, 0xbd, 0x1f, 0x97, 0xe7, 0x7b, 0x03, 0x15, 0xea, 0xa5, 0x94, 0x66, 0xde, 0x84, 0xaa, 0xa2, 0x06, 0xee, 0xfb, 0x9e, 0x2f, 0xf9,
0x93, 0x90, 0xcb, 0x3d, 0xaf, 0x22, 0xbb, 0x67, 0x0a, 0x58, 0x54, 0x3a, 0x7e, 0xbd, 0x02, 0x9d, 0xa2, 0xa2, 0xbc, 0x96, 0x80, 0x89, 0x7d, 0x49, 0x21, 0x8d, 0x7d, 0xee, 0x8c, 0xec, 0x53, 0x55,
0x1b, 0xbf, 0x9d, 0x01, 0x26, 0x9a, 0xdd, 0xf3, 0xa8, 0x00, 0x49, 0xa1, 0xd3, 0x39, 0x33, 0xaf, 0xb4, 0x22, 0xa5, 0x43, 0x09, 0x66, 0xef, 0xc7, 0xe5, 0xf9, 0xde, 0x24, 0xe4, 0x72, 0xd7, 0xac,
0xbc, 0x42, 0xb2, 0x2f, 0x5a, 0x21, 0x06, 0x14, 0xa8, 0xed, 0xf9, 0x94, 0xb6, 0x53, 0xd2, 0xf7, 0xc8, 0xee, 0x99, 0x02, 0x16, 0x95, 0x8e, 0x5f, 0xaf, 0x40, 0xe7, 0xc6, 0x6f, 0x67, 0x80, 0x89,
0xf2, 0xc5, 0x5c, 0x3d, 0x6f, 0xfc, 0x97, 0x1c, 0x2c, 0x6f, 0xd1, 0x96, 0xdd, 0xec, 0xf7, 0xf9, 0x66, 0xf7, 0x3c, 0x2a, 0x20, 0xe6, 0x48, 0x89, 0x9c, 0x99, 0x57, 0x5e, 0x21, 0xd9, 0x17, 0xad,
0x38, 0x5a, 0x3b, 0x77, 0xa0, 0xec, 0x7a, 0x03, 0xae, 0x28, 0x96, 0x1a, 0x06, 0x02, 0xa4, 0x91, 0x10, 0x03, 0x0a, 0xd4, 0xf6, 0x7c, 0x4a, 0xdb, 0x29, 0xe9, 0x7b, 0xf9, 0x62, 0xae, 0x9e, 0x37,
0xeb, 0x99, 0xed, 0xb8, 0xd4, 0x70, 0x1a, 0xcc, 0x12, 0x42, 0xb0, 0xd9, 0x6f, 0xc3, 0xc2, 0x98, 0xfe, 0x4b, 0x0e, 0x96, 0xb7, 0x68, 0xd3, 0x6f, 0xf6, 0xfb, 0x7c, 0x1c, 0xad, 0x9d, 0x3b, 0x50,
0xbb, 0x03, 0x7d, 0x89, 0x90, 0x50, 0x55, 0x95, 0x60, 0xb9, 0x3a, 0xee, 0x40, 0xf9, 0x64, 0x42, 0x76, 0xbd, 0x01, 0x57, 0x14, 0x4b, 0x0d, 0x03, 0x01, 0xd2, 0xc8, 0xf5, 0xcc, 0x76, 0x5c, 0x6a,
0x78, 0x82, 0xb1, 0xe4, 0x91, 0x06, 0x40, 0x82, 0x9a, 0xc4, 0x5f, 0xc6, 0x93, 0xe0, 0x0c, 0x53, 0x38, 0x0d, 0x66, 0x09, 0x21, 0xd8, 0xec, 0xb7, 0x61, 0x61, 0xcc, 0xdd, 0x81, 0xbe, 0x44, 0x48,
0x0b, 0x98, 0x3a, 0x2f, 0xbe, 0x45, 0xd2, 0x6d, 0x80, 0xc1, 0x24, 0x08, 0xe5, 0x8a, 0x99, 0xc3, 0x2c, 0xab, 0x4a, 0xb0, 0x5c, 0x1d, 0x77, 0xa0, 0x7c, 0x32, 0x21, 0x3c, 0xc1, 0x58, 0xf2, 0x48,
0xc4, 0x92, 0x80, 0xd0, 0x8a, 0xf9, 0x3a, 0x2c, 0x8d, 0xec, 0x4b, 0x0b, 0x69, 0xc7, 0x72, 0x5c, 0x03, 0x20, 0x41, 0x4d, 0xe2, 0x2f, 0xe3, 0x49, 0x70, 0x86, 0xa9, 0x05, 0x4c, 0x9d, 0x17, 0xdf,
0xeb, 0x64, 0x88, 0x7b, 0xce, 0x3c, 0xe2, 0xd5, 0x47, 0xf6, 0xe5, 0xa7, 0x22, 0xa5, 0xed, 0xee, 0x22, 0xe9, 0x36, 0xc0, 0x60, 0x12, 0x84, 0x72, 0xc5, 0xcc, 0x61, 0x62, 0x49, 0x40, 0x68, 0xc5,
0x20, 0x5c, 0xb0, 0x15, 0x25, 0xee, 0xf8, 0x3c, 0xe0, 0xfe, 0x39, 0x47, 0x4e, 0x90, 0x8f, 0x64, 0x7c, 0x1d, 0x96, 0x46, 0xf6, 0xa5, 0x85, 0xb4, 0x63, 0x39, 0xae, 0x75, 0x32, 0x44, 0xa6, 0x3e,
0x1a, 0x93, 0xa0, 0xa2, 0x45, 0x23, 0xd1, 0xef, 0x70, 0xd8, 0xa7, 0x65, 0x6f, 0xce, 0x8f, 0x1c, 0x8f, 0x78, 0xf5, 0x91, 0x7d, 0xf9, 0xa9, 0x48, 0x69, 0xbb, 0x3b, 0x08, 0x17, 0x6c, 0x45, 0x09,
0x77, 0x37, 0x1c, 0xf6, 0xc5, 0xbe, 0x22, 0xf8, 0xc8, 0x98, 0xfb, 0xd6, 0xf3, 0x0b, 0x5c, 0xc3, 0x4c, 0x3e, 0x0f, 0xb8, 0x7f, 0xce, 0x91, 0x13, 0xe4, 0x23, 0xa9, 0xc8, 0x24, 0xa8, 0x68, 0xd1,
0x79, 0xe4, 0x1b, 0x87, 0xdc, 0x7f, 0x76, 0x21, 0xb6, 0xfe, 0x7e, 0x80, 0x8c, 0xc8, 0xbe, 0x6a, 0x48, 0xf4, 0x3b, 0x1c, 0xf6, 0x69, 0xd9, 0x9b, 0xf3, 0x23, 0xc7, 0xdd, 0x0d, 0x87, 0x7d, 0xb1,
0x94, 0x71, 0x81, 0x17, 0xfb, 0x81, 0x60, 0x41, 0xf6, 0x95, 0x58, 0x84, 0xa2, 0xb5, 0x36, 0xce, 0x33, 0x09, 0x3e, 0x32, 0xe6, 0xbe, 0xf5, 0xfc, 0x02, 0xd7, 0x70, 0x1e, 0xf9, 0xc6, 0x21, 0xf7,
0x02, 0x1f, 0x60, 0xf1, 0x01, 0x72, 0xd4, 0x2a, 0x36, 0xb6, 0x29, 0x13, 0x44, 0x3d, 0x81, 0xa0, 0x9f, 0x5d, 0x08, 0xe1, 0xa1, 0x1f, 0x20, 0x23, 0xb2, 0xaf, 0x1a, 0x65, 0x5c, 0xe0, 0xc5, 0x7e,
0x7a, 0xd5, 0xd8, 0x93, 0xa1, 0x7d, 0x1a, 0x20, 0x4b, 0xa9, 0x9a, 0x15, 0x09, 0xdc, 0x11, 0x30, 0x20, 0x58, 0x90, 0x7d, 0x25, 0x16, 0xa1, 0x68, 0xad, 0x8d, 0xb3, 0xc0, 0x07, 0x58, 0x7c, 0x80,
0xe3, 0x33, 0x12, 0xb2, 0xb4, 0xb9, 0x95, 0x6b, 0x46, 0x6c, 0xf5, 0x08, 0xc1, 0x79, 0x2d, 0x9a, 0x1c, 0xb5, 0x8a, 0x8d, 0x6d, 0xca, 0x04, 0x51, 0x4f, 0x20, 0xa8, 0x5e, 0x35, 0xf6, 0x64, 0x68,
0xf2, 0x2b, 0x6d, 0xd2, 0xb2, 0x29, 0x93, 0x66, 0xfc, 0x5e, 0x06, 0x2a, 0xb2, 0x64, 0x14, 0x4a, 0x9f, 0x06, 0xc8, 0x52, 0xaa, 0x66, 0x45, 0x02, 0x77, 0x04, 0xcc, 0xf8, 0x8c, 0xc4, 0x34, 0x6d,
0xd8, 0x06, 0x30, 0x35, 0x8b, 0xe1, 0xa5, 0x33, 0xb0, 0x8e, 0xaf, 0x42, 0x1e, 0x10, 0xd1, 0xec, 0x6e, 0xe5, 0x9a, 0x11, 0xc2, 0x02, 0x42, 0x70, 0x5e, 0x8b, 0xa6, 0xfc, 0x4a, 0x9b, 0xb4, 0x6c,
0xde, 0x30, 0xeb, 0x32, 0xad, 0x77, 0xe9, 0x0c, 0x36, 0x45, 0x0a, 0x7b, 0x00, 0xf5, 0x04, 0x7e, 0xca, 0xa4, 0x19, 0xbf, 0x97, 0x81, 0x8a, 0x2c, 0x19, 0xc5, 0x1a, 0xb6, 0x01, 0x4c, 0xcd, 0x62,
0x10, 0xfa, 0x44, 0xd1, 0xbb, 0x37, 0xcc, 0x9a, 0x86, 0xdd, 0x0d, 0x7d, 0xb1, 0x46, 0x84, 0xc8, 0x78, 0xe9, 0x0c, 0xac, 0xe3, 0xab, 0x90, 0x07, 0x44, 0x34, 0xbb, 0x37, 0xcc, 0xba, 0x4c, 0xeb,
0x33, 0x09, 0x2d, 0xc7, 0x1d, 0xf0, 0x4b, 0x24, 0xa3, 0xaa, 0x59, 0x26, 0x58, 0x5b, 0x80, 0x36, 0x5d, 0x3a, 0x83, 0x4d, 0x91, 0xc2, 0x1e, 0x40, 0x3d, 0x81, 0x1f, 0x84, 0x3e, 0x51, 0xf4, 0xee,
0x6b, 0x50, 0xd1, 0x8b, 0x33, 0x4e, 0xa1, 0xa8, 0xe4, 0x25, 0x14, 0x18, 0xa6, 0x9a, 0x64, 0x96, 0x0d, 0xb3, 0xa6, 0x61, 0x77, 0x43, 0x5f, 0xac, 0x11, 0x21, 0x34, 0x4d, 0x42, 0xcb, 0x71, 0x07,
0xc2, 0xa8, 0x25, 0x37, 0xa1, 0x98, 0x6c, 0x81, 0x39, 0x1f, 0xbe, 0x72, 0xc5, 0xc6, 0x77, 0xa0, 0xfc, 0x12, 0xc9, 0xa8, 0x6a, 0x96, 0x09, 0xd6, 0x16, 0xa0, 0xcd, 0x1a, 0x54, 0xf4, 0xe2, 0x8c,
0xbe, 0x27, 0x88, 0xc7, 0x15, 0xc4, 0x2a, 0xe5, 0xbf, 0x55, 0x98, 0xd3, 0x16, 0x4d, 0xc9, 0x94, 0x53, 0x28, 0x2a, 0x89, 0x0b, 0x45, 0x8e, 0xa9, 0x26, 0x99, 0xa5, 0x30, 0x6a, 0xc9, 0x4d, 0x28,
0x5f, 0x62, 0xcf, 0x3d, 0xf3, 0x82, 0x50, 0xd6, 0x82, 0xbf, 0x8d, 0x3f, 0xce, 0x00, 0x6b, 0x05, 0x26, 0x5b, 0x60, 0xce, 0x87, 0xaf, 0x5c, 0xb1, 0xf1, 0x1d, 0xa8, 0xef, 0x09, 0xe2, 0x71, 0x05,
0xa1, 0x33, 0xb2, 0x43, 0xbe, 0xc3, 0x23, 0xb6, 0x70, 0x00, 0x15, 0x51, 0x5a, 0xcf, 0x6b, 0x92, 0xb1, 0x4a, 0x09, 0x72, 0x15, 0xe6, 0xb4, 0x45, 0x53, 0x32, 0xe5, 0x97, 0xd8, 0x73, 0xcf, 0xbc,
0x40, 0x46, 0x02, 0xc5, 0xbb, 0x72, 0x19, 0xcf, 0x66, 0xd8, 0xd0, 0xb1, 0x89, 0xcd, 0x27, 0x0a, 0x20, 0x94, 0xb5, 0xe0, 0x6f, 0xe3, 0x8f, 0x33, 0xc0, 0x5a, 0x41, 0xe8, 0x8c, 0xec, 0x90, 0xef,
0x10, 0xab, 0x2c, 0xb4, 0xfd, 0x53, 0x1e, 0xa2, 0x18, 0x27, 0xe5, 0x7d, 0x20, 0x90, 0x10, 0xe0, 0xf0, 0x88, 0x2d, 0x1c, 0x40, 0x45, 0x94, 0xd6, 0xf3, 0x9a, 0x24, 0xd2, 0x91, 0x40, 0xf1, 0xae,
0xd6, 0x7f, 0x11, 0x16, 0x67, 0xca, 0xd0, 0xf9, 0x72, 0x29, 0x85, 0x2f, 0xe7, 0x74, 0xbe, 0x6c, 0x5c, 0xc6, 0xb3, 0x19, 0x36, 0x74, 0x6c, 0x62, 0xf3, 0x89, 0x02, 0xc4, 0x2a, 0x0b, 0x6d, 0xff,
0xc1, 0x52, 0xa2, 0x5d, 0x92, 0xd2, 0xd6, 0x60, 0x5e, 0x2c, 0x08, 0x21, 0x1c, 0x64, 0x48, 0xaa, 0x94, 0x87, 0x28, 0x08, 0x4a, 0xb9, 0x06, 0x08, 0x24, 0x44, 0xc0, 0xf5, 0x5f, 0x84, 0xc5, 0x99,
0x3c, 0xe1, 0x5c, 0x88, 0xc1, 0x0f, 0x61, 0xf9, 0x84, 0x73, 0xdf, 0x0e, 0x31, 0x11, 0x57, 0x8c, 0x32, 0x74, 0xbe, 0x5c, 0x4a, 0xe1, 0xcb, 0x39, 0x9d, 0x2f, 0x5b, 0xb0, 0x94, 0x68, 0x97, 0xa4,
0x98, 0x21, 0x59, 0xf0, 0xa2, 0x4c, 0xeb, 0xda, 0xe1, 0x21, 0xf7, 0xc5, 0x4c, 0x19, 0xff, 0x2d, 0xb4, 0x35, 0x98, 0x17, 0x0b, 0x42, 0x08, 0x07, 0x19, 0x92, 0x4b, 0x4f, 0x38, 0x17, 0x82, 0xf4,
0x03, 0x0b, 0x82, 0x83, 0xee, 0xdb, 0xee, 0x95, 0x1a, 0xa7, 0xbd, 0xd4, 0x71, 0xba, 0xaf, 0x6d, 0x43, 0x58, 0x3e, 0xe1, 0xdc, 0xb7, 0x43, 0x4c, 0xc4, 0x15, 0x23, 0x66, 0x48, 0x16, 0xbc, 0x28,
0x86, 0x1a, 0xf6, 0x57, 0x1d, 0xa4, 0xdc, 0xf4, 0x20, 0xb1, 0xbb, 0x50, 0x49, 0xb4, 0xb5, 0x80, 0xd3, 0xba, 0x76, 0x78, 0xc8, 0x7d, 0x31, 0x53, 0xc6, 0x7f, 0xcb, 0xc0, 0x82, 0xe0, 0xa0, 0xfb,
0x6d, 0x85, 0x20, 0x6a, 0xe4, 0x4f, 0x3f, 0x8c, 0x6f, 0x43, 0x3d, 0x6e, 0xb6, 0x1c, 0x43, 0x06, 0xb6, 0x7b, 0xa5, 0xc6, 0x69, 0x2f, 0x75, 0x9c, 0xee, 0x6b, 0x9b, 0xa1, 0x86, 0xfd, 0x55, 0x07,
0x79, 0x41, 0x92, 0xb2, 0x00, 0xfc, 0x6d, 0xfc, 0x6e, 0x86, 0x10, 0xb7, 0x3c, 0x27, 0x92, 0x4e, 0x29, 0x37, 0x3d, 0x48, 0xec, 0x2e, 0x54, 0x12, 0x6d, 0x2d, 0x60, 0x5b, 0x21, 0x88, 0x1a, 0xf9,
0x05, 0xa2, 0x90, 0x7b, 0x15, 0xa2, 0xf8, 0x7d, 0xad, 0x54, 0xff, 0xd3, 0x77, 0x56, 0x2c, 0x9d, 0xd3, 0x0f, 0xe3, 0xdb, 0x50, 0x8f, 0x9b, 0x2d, 0xc7, 0x90, 0x41, 0x5e, 0x90, 0xa4, 0x2c, 0x00,
0x80, 0xbb, 0x03, 0xcb, 0x1e, 0x0e, 0x91, 0xf9, 0x16, 0xcd, 0x79, 0xf1, 0xdd, 0x1c, 0x0e, 0x8d, 0x7f, 0x1b, 0xbf, 0x9b, 0x21, 0xc4, 0x2d, 0xcf, 0x89, 0xe5, 0x5b, 0x06, 0x79, 0x21, 0x39, 0x2b,
0x7b, 0xb0, 0xa8, 0xb5, 0xee, 0x05, 0xfd, 0xe8, 0x00, 0xdb, 0x73, 0x82, 0xf0, 0xc8, 0x0d, 0xc6, 0x44, 0xf1, 0xfb, 0x5a, 0xbd, 0xe0, 0xa7, 0xef, 0xac, 0x58, 0x3a, 0x81, 0x10, 0x96, 0xed, 0xe1,
0x9a, 0xe0, 0x76, 0x0b, 0x4a, 0x82, 0xc3, 0x8a, 0x96, 0xd1, 0x92, 0x2d, 0x98, 0x82, 0xe5, 0x8a, 0x10, 0x99, 0x6f, 0xd1, 0x9c, 0x17, 0xdf, 0xcd, 0xe1, 0xd0, 0xb8, 0x07, 0x8b, 0x5a, 0xeb, 0x5e,
0x76, 0x05, 0x98, 0x68, 0x5f, 0xca, 0xc4, 0xac, 0x4c, 0xb4, 0x2f, 0x31, 0xd1, 0xf8, 0x16, 0x2c, 0xd0, 0x8f, 0x0e, 0xb0, 0x3d, 0x27, 0x08, 0x8f, 0xdc, 0x60, 0xac, 0x09, 0x6e, 0xb7, 0xa0, 0x24,
0x25, 0xca, 0x93, 0x55, 0xbf, 0x01, 0x85, 0x49, 0x78, 0xe9, 0x29, 0xd1, 0xbc, 0x2c, 0x29, 0x44, 0x38, 0xac, 0x68, 0x59, 0x20, 0xa5, 0x74, 0xc1, 0x72, 0x45, 0xbb, 0x02, 0x4c, 0xb4, 0x2f, 0x65,
0x28, 0x80, 0x26, 0xa5, 0x18, 0x1f, 0xc3, 0x62, 0x87, 0x5f, 0xc8, 0x45, 0xac, 0x1a, 0xf2, 0x36, 0x62, 0x56, 0x26, 0xda, 0x97, 0x98, 0x68, 0x7c, 0x0b, 0x96, 0x12, 0xe5, 0xc9, 0xaa, 0xdf, 0x80,
0xe4, 0x5f, 0xa2, 0x14, 0x62, 0xba, 0xb1, 0x01, 0x4c, 0xcf, 0x2c, 0x6b, 0xd5, 0x74, 0xc4, 0x4c, 0xc2, 0x24, 0xbc, 0xf4, 0x94, 0x68, 0x5e, 0x96, 0x14, 0x22, 0x54, 0x48, 0x93, 0x52, 0x8c, 0x8f,
0x42, 0x47, 0x34, 0xde, 0x06, 0xd6, 0x75, 0x4e, 0xdd, 0x7d, 0x1e, 0x04, 0xf6, 0x69, 0xb4, 0xec, 0x61, 0xb1, 0xc3, 0x2f, 0xe4, 0x22, 0x56, 0x0d, 0x79, 0x1b, 0xf2, 0x2f, 0x51, 0x2b, 0x31, 0xdd,
0xeb, 0x90, 0x1b, 0x05, 0xa7, 0x92, 0x47, 0x89, 0x9f, 0xc6, 0x37, 0x60, 0x29, 0x81, 0x27, 0x0b, 0xd8, 0x00, 0xa6, 0x67, 0x96, 0xb5, 0x6a, 0x5a, 0x66, 0x26, 0xa1, 0x65, 0x1a, 0x6f, 0x03, 0xeb,
0x7e, 0x0d, 0x4a, 0x81, 0x73, 0xea, 0xa2, 0x60, 0x25, 0x8b, 0x8e, 0x01, 0xc6, 0x0e, 0x2c, 0x7f, 0x3a, 0xa7, 0xee, 0x3e, 0x0f, 0x02, 0xfb, 0x34, 0x5a, 0xf6, 0x75, 0xc8, 0x8d, 0x82, 0x53, 0xc9,
0xca, 0x7d, 0xe7, 0xe4, 0xea, 0x65, 0xc5, 0x27, 0xcb, 0xc9, 0x4e, 0x97, 0xd3, 0x82, 0x95, 0xa9, 0xa3, 0xc4, 0x4f, 0xe3, 0x1b, 0xb0, 0x94, 0xc0, 0x93, 0x05, 0xbf, 0x06, 0xa5, 0xc0, 0x39, 0x75,
0x72, 0x64, 0xf5, 0x44, 0xbe, 0x72, 0x26, 0x8b, 0x26, 0x7d, 0x68, 0x7c, 0x2f, 0xab, 0xf3, 0x3d, 0x51, 0xb0, 0x92, 0x45, 0xc7, 0x00, 0x63, 0x07, 0x96, 0x3f, 0xe5, 0xbe, 0x73, 0x72, 0xf5, 0xb2,
0xe3, 0x08, 0xd8, 0x96, 0xe7, 0xba, 0xbc, 0x1f, 0x1e, 0x72, 0xee, 0xc7, 0x56, 0xaa, 0x98, 0x56, 0xe2, 0x93, 0xe5, 0x64, 0xa7, 0xcb, 0x69, 0xc1, 0xca, 0x54, 0x39, 0xb2, 0x7a, 0x22, 0x5f, 0x39,
0xcb, 0x8f, 0xd7, 0xe4, 0xc8, 0x4e, 0x33, 0x53, 0x49, 0xc4, 0x0c, 0xf2, 0x63, 0xee, 0x8f, 0xb0, 0x93, 0x45, 0x93, 0x3e, 0x34, 0xbe, 0x97, 0xd5, 0xf9, 0x9e, 0x71, 0x04, 0x6c, 0xcb, 0x73, 0x5d,
0xe0, 0xa2, 0x89, 0xbf, 0x8d, 0x15, 0x58, 0x4a, 0x14, 0x2b, 0xf5, 0xfa, 0x47, 0xb0, 0xb2, 0xed, 0xde, 0x0f, 0x0f, 0x39, 0xf7, 0x63, 0x3b, 0x57, 0x4c, 0xab, 0xe5, 0xc7, 0x6b, 0x72, 0x64, 0xa7,
0x04, 0xfd, 0xd9, 0x0a, 0xd7, 0x60, 0x7e, 0x3c, 0x39, 0xb6, 0x92, 0x7c, 0xf9, 0x19, 0xbf, 0x12, 0x99, 0xa9, 0x24, 0x62, 0x06, 0xf9, 0x31, 0xf7, 0x47, 0x58, 0x70, 0xd1, 0xc4, 0xdf, 0xc6, 0x0a,
0xda, 0xde, 0x74, 0x0e, 0x59, 0xd6, 0x5f, 0xcd, 0x40, 0x7e, 0xb7, 0xb7, 0xb7, 0xc5, 0xd6, 0xa1, 0x2c, 0x25, 0x8a, 0x95, 0x96, 0x81, 0x47, 0xb0, 0xb2, 0xed, 0x04, 0xfd, 0xd9, 0x0a, 0xd7, 0x60,
0xe8, 0xb8, 0x7d, 0x6f, 0x24, 0x04, 0x2f, 0xea, 0x73, 0xf4, 0x7d, 0xed, 0x02, 0xbb, 0x05, 0x25, 0x7e, 0x3c, 0x39, 0xb6, 0x92, 0x7c, 0xf9, 0x19, 0xbf, 0x32, 0x1a, 0xb0, 0x3a, 0x9d, 0x43, 0x96,
0x94, 0xd7, 0x84, 0x6a, 0x2b, 0x45, 0x9f, 0xa2, 0x00, 0xec, 0x79, 0xfd, 0xe7, 0x42, 0xa7, 0xe6, 0xf5, 0x57, 0x33, 0x90, 0xdf, 0xed, 0xed, 0x6d, 0xb1, 0x75, 0x28, 0x3a, 0x6e, 0xdf, 0x1b, 0x09,
0x97, 0x63, 0xc7, 0x47, 0xad, 0x59, 0x29, 0xc3, 0x79, 0xda, 0xeb, 0xe3, 0x04, 0xd2, 0x88, 0x8d, 0xc1, 0x8b, 0xfa, 0x1c, 0x7d, 0x5f, 0xbb, 0xc0, 0x6e, 0x41, 0x09, 0xe5, 0x35, 0xa1, 0x1c, 0x4b,
0x7f, 0x5d, 0x84, 0x79, 0xb9, 0xdb, 0xd2, 0xce, 0x1d, 0x3a, 0xe7, 0x3c, 0xde, 0xb9, 0xc5, 0x97, 0xd1, 0xa7, 0x28, 0x00, 0x7b, 0x5e, 0xff, 0xb9, 0xd0, 0xca, 0xf9, 0xe5, 0xd8, 0xf1, 0x51, 0xef,
0x90, 0x07, 0x7c, 0x3e, 0xf2, 0xc2, 0x48, 0x60, 0xa3, 0x39, 0xa8, 0x10, 0x50, 0x8a, 0x6c, 0x9a, 0x56, 0xda, 0x66, 0x9e, 0xf6, 0xfa, 0x38, 0x41, 0x2a, 0x9d, 0xff, 0xba, 0x08, 0xf3, 0x72, 0xb7,
0xd0, 0x40, 0x26, 0x86, 0x1c, 0x21, 0xf5, 0xf5, 0xad, 0xfc, 0x16, 0xcc, 0xab, 0xbd, 0x3f, 0x1f, 0xa5, 0x9d, 0x3b, 0x74, 0xce, 0x79, 0xbc, 0x73, 0x8b, 0x2f, 0x21, 0x0f, 0xf8, 0x7c, 0xe4, 0x85,
0xe9, 0x34, 0x73, 0x7d, 0x92, 0xd6, 0xd6, 0xa1, 0xd8, 0xb7, 0xc7, 0x76, 0xdf, 0x09, 0xaf, 0x24, 0x91, 0xc0, 0x46, 0x73, 0x50, 0x21, 0xa0, 0x14, 0xd9, 0x34, 0xa1, 0x81, 0x8c, 0x14, 0x39, 0x42,
0x43, 0x88, 0xbe, 0x45, 0xe9, 0x43, 0xaf, 0x6f, 0x0f, 0xad, 0x63, 0x7b, 0x68, 0xbb, 0x7d, 0x2e, 0xea, 0xeb, 0x5b, 0xf9, 0x2d, 0x98, 0x57, 0x7b, 0x7f, 0x3e, 0xd2, 0x69, 0xe6, 0xfa, 0x24, 0xad,
0x75, 0xf7, 0x0a, 0x02, 0x37, 0x09, 0x26, 0xf4, 0x73, 0xd9, 0x4e, 0x85, 0x45, 0x2a, 0xbc, 0x6c, 0xad, 0x43, 0xb1, 0x6f, 0x8f, 0xed, 0xbe, 0x13, 0x5e, 0x49, 0x86, 0x10, 0x7d, 0x8b, 0xd2, 0x87,
0xbd, 0x42, 0x13, 0xc2, 0xa5, 0x37, 0x1a, 0x39, 0x42, 0xcb, 0x20, 0x31, 0x2c, 0x67, 0x96, 0x08, 0x5e, 0xdf, 0x1e, 0x5a, 0xc7, 0xf6, 0xd0, 0x76, 0xfb, 0x5c, 0x6a, 0xff, 0x15, 0x04, 0x6e, 0x12,
0xb2, 0xc3, 0xb1, 0xb7, 0x32, 0xf9, 0x82, 0x86, 0xae, 0x44, 0x55, 0x11, 0xf0, 0x33, 0x32, 0x24, 0x4c, 0x68, 0xf8, 0xb2, 0x9d, 0x0a, 0x8b, 0x8c, 0x00, 0xb2, 0xf5, 0x0a, 0x4d, 0x08, 0x97, 0xde,
0xcc, 0xca, 0x62, 0x39, 0x4d, 0x16, 0x7b, 0x17, 0x16, 0x27, 0x6e, 0xc0, 0xc3, 0x70, 0xc8, 0x07, 0x68, 0xe4, 0x08, 0x2d, 0x83, 0xc4, 0xb0, 0x9c, 0x59, 0x22, 0xc8, 0x0e, 0xc7, 0xde, 0xca, 0xe4,
0x51, 0x5b, 0xca, 0x88, 0x54, 0x8f, 0x12, 0x54, 0x73, 0x36, 0x60, 0x89, 0x8c, 0x0e, 0x81, 0x1d, 0x0b, 0x1a, 0xba, 0x12, 0x55, 0x45, 0xc0, 0xcf, 0x48, 0x95, 0x9f, 0x95, 0xc5, 0x72, 0x9a, 0x2c,
0x7a, 0xc1, 0x99, 0x13, 0x58, 0x81, 0xd0, 0x90, 0x48, 0xdd, 0x5d, 0xc4, 0xa4, 0xae, 0x4c, 0xe9, 0xf6, 0x2e, 0x2c, 0x4e, 0xdc, 0x80, 0x87, 0xe1, 0x90, 0x0f, 0xa2, 0xb6, 0x94, 0x11, 0xa9, 0x1e,
0x92, 0x8a, 0xb4, 0x36, 0x85, 0xef, 0xf3, 0x3e, 0x77, 0xce, 0xf9, 0x00, 0xe5, 0xb4, 0x9c, 0xb9, 0x25, 0xa8, 0xe6, 0x6c, 0xc0, 0x12, 0x99, 0x2d, 0x02, 0x3b, 0xf4, 0x82, 0x33, 0x27, 0xb0, 0x02,
0x92, 0xc8, 0x63, 0xca, 0x44, 0x14, 0xba, 0x27, 0x23, 0x6b, 0x32, 0x1e, 0xd8, 0x42, 0x58, 0xa9, 0xa1, 0x21, 0x91, 0xba, 0xbb, 0x88, 0x49, 0x5d, 0x99, 0xd2, 0x25, 0x15, 0x69, 0x6d, 0x0a, 0xdf,
0x91, 0x30, 0xec, 0x4e, 0x46, 0x47, 0x04, 0x61, 0x8f, 0x40, 0x49, 0x62, 0x52, 0x3e, 0x5c, 0x48, 0xe7, 0x7d, 0xee, 0x9c, 0xf3, 0x01, 0xca, 0x69, 0x39, 0x73, 0x25, 0x91, 0xc7, 0x94, 0x89, 0x28,
0xf0, 0x33, 0x41, 0xac, 0x66, 0x45, 0x62, 0x90, 0xa0, 0x98, 0x90, 0x39, 0xeb, 0x53, 0x32, 0x67, 0x74, 0x4f, 0x46, 0xd6, 0x64, 0x3c, 0xb0, 0x85, 0xb0, 0x52, 0x23, 0x61, 0xd8, 0x9d, 0x8c, 0x8e,
0x03, 0xe6, 0xc7, 0xbe, 0x73, 0x6e, 0x87, 0xbc, 0xb1, 0x48, 0x0c, 0x5c, 0x7e, 0x0a, 0xce, 0xe0, 0x08, 0xc2, 0x1e, 0x81, 0x92, 0xc4, 0xa4, 0x7c, 0xb8, 0x90, 0xe0, 0x67, 0x82, 0x58, 0xcd, 0x8a,
0xb8, 0x4e, 0xe8, 0xd8, 0xa1, 0xe7, 0x37, 0x18, 0xa6, 0xc5, 0x00, 0xf6, 0x00, 0x16, 0x91, 0x46, 0xc4, 0x20, 0x41, 0x31, 0x21, 0x73, 0xd6, 0xa7, 0x64, 0xce, 0x06, 0xcc, 0x8f, 0x7d, 0xe7, 0xdc,
0x82, 0xd0, 0x0e, 0x27, 0x81, 0x94, 0x40, 0x97, 0x90, 0x98, 0x50, 0x86, 0xee, 0x22, 0x1c, 0x85, 0x0e, 0x79, 0x63, 0x91, 0x18, 0xb8, 0xfc, 0x14, 0x9c, 0xc1, 0x71, 0x9d, 0xd0, 0xb1, 0x43, 0xcf,
0x50, 0xf6, 0x0d, 0x58, 0x25, 0xb2, 0xc0, 0x1c, 0x52, 0xb2, 0x46, 0x81, 0x60, 0x19, 0x87, 0x62, 0x6f, 0x30, 0x4c, 0x8b, 0x01, 0xec, 0x01, 0x2c, 0x22, 0x8d, 0x04, 0xa1, 0x1d, 0x4e, 0x02, 0x29,
0x09, 0x53, 0x05, 0x7d, 0x4b, 0xf9, 0x5a, 0x48, 0x07, 0x4f, 0x60, 0x4d, 0x92, 0xc9, 0x4c, 0xae, 0x81, 0x2e, 0x21, 0x31, 0xa1, 0x0c, 0xdd, 0x45, 0x38, 0x0a, 0xa1, 0xec, 0x1b, 0xb0, 0x4a, 0x64,
0x15, 0xcc, 0xb5, 0x4c, 0xc9, 0x53, 0xd9, 0x36, 0x60, 0x51, 0x34, 0xc9, 0xe9, 0x5b, 0x32, 0xb7, 0x81, 0x39, 0xa4, 0x64, 0x8d, 0x02, 0xc1, 0x32, 0x0e, 0xc5, 0x12, 0xa6, 0x0a, 0xfa, 0x96, 0xf2,
0x58, 0x09, 0xab, 0xa2, 0xf5, 0xa8, 0x29, 0x2d, 0x50, 0xa2, 0x89, 0x69, 0xcf, 0xf8, 0x15, 0xfb, 0xb5, 0x90, 0x0e, 0x9e, 0xc0, 0x9a, 0x24, 0x93, 0x99, 0x5c, 0x2b, 0x98, 0x6b, 0x99, 0x92, 0xa7,
0x0e, 0x2c, 0x10, 0xc9, 0xa0, 0x7a, 0x85, 0x9c, 0x7e, 0x1d, 0x39, 0xfd, 0x8a, 0xb2, 0x70, 0x46, 0xb2, 0x6d, 0xc0, 0xa2, 0x68, 0x92, 0xd3, 0xb7, 0x64, 0x6e, 0xb1, 0x12, 0x56, 0x45, 0xeb, 0x51,
0xa9, 0xc8, 0xec, 0x6b, 0xfd, 0xc4, 0xb7, 0x58, 0x0e, 0x43, 0xe7, 0x84, 0x87, 0xce, 0x88, 0x37, 0x53, 0x5a, 0xa0, 0x44, 0x13, 0xd3, 0x9e, 0xf1, 0x2b, 0xf6, 0x1d, 0x58, 0x20, 0x92, 0x41, 0xf5,
0xd6, 0x88, 0xc0, 0xd4, 0xb7, 0x58, 0xa9, 0x93, 0x31, 0xa6, 0x34, 0x88, 0x2f, 0xd0, 0x17, 0xd2, 0x0a, 0x39, 0xfd, 0x3a, 0x72, 0xfa, 0x15, 0x65, 0x23, 0x8d, 0x52, 0x91, 0xd9, 0xd7, 0xfa, 0x89,
0xee, 0xd0, 0x0b, 0xb8, 0x32, 0x51, 0x35, 0x6e, 0xca, 0x45, 0x28, 0x80, 0x4a, 0x86, 0x14, 0x82, 0x6f, 0xb1, 0x1c, 0x86, 0xce, 0x09, 0x0f, 0x9d, 0x11, 0x6f, 0xac, 0x11, 0x81, 0xa9, 0x6f, 0xb1,
0x38, 0x29, 0x3d, 0x91, 0x21, 0xf1, 0x16, 0x12, 0x43, 0x95, 0x74, 0x1f, 0x65, 0x4c, 0x14, 0xbb, 0x52, 0x27, 0x63, 0x4c, 0x69, 0x10, 0x5f, 0xa0, 0x2f, 0xa4, 0xdd, 0xa1, 0x17, 0x70, 0x65, 0xe4,
0xf8, 0x99, 0x7d, 0xa1, 0x38, 0xc8, 0x6b, 0x38, 0xbf, 0x20, 0x40, 0x92, 0x77, 0xfc, 0x38, 0x43, 0x6a, 0xdc, 0x94, 0x8b, 0x50, 0x00, 0x95, 0x0c, 0x29, 0x04, 0x71, 0x52, 0x7a, 0x22, 0x53, 0xe4,
0x1b, 0xa2, 0xe4, 0x1f, 0x81, 0xa6, 0xde, 0x11, 0xe7, 0xb0, 0x3c, 0x77, 0x78, 0x25, 0x99, 0x09, 0x2d, 0x24, 0x86, 0x2a, 0xe9, 0x3e, 0xca, 0x1c, 0x29, 0x76, 0xf1, 0x33, 0xfb, 0x42, 0x71, 0x90,
0x10, 0xe8, 0xc0, 0x1d, 0xe2, 0x6a, 0x76, 0x5c, 0x1d, 0x85, 0x78, 0x6f, 0x45, 0x01, 0x11, 0xe9, 0xd7, 0x70, 0x7e, 0x41, 0x80, 0x24, 0xef, 0xf8, 0x71, 0x86, 0x36, 0x44, 0xc9, 0x3f, 0x02, 0x4d,
0x0e, 0x94, 0xc7, 0x93, 0xe3, 0xa1, 0xd3, 0x27, 0x94, 0x1c, 0x95, 0x42, 0x20, 0x44, 0x10, 0xfa, 0xbd, 0x23, 0xce, 0x61, 0x79, 0xee, 0xf0, 0x4a, 0x32, 0x13, 0x20, 0xd0, 0x81, 0x3b, 0xc4, 0xd5,
0x2d, 0x51, 0x14, 0x61, 0xe4, 0x11, 0xa3, 0x2c, 0x61, 0x88, 0x82, 0xbc, 0x9d, 0xfb, 0xc8, 0x4e, 0xec, 0xb8, 0x3a, 0x0a, 0xf1, 0xde, 0x8a, 0x02, 0x22, 0xd2, 0x1d, 0x28, 0x8f, 0x27, 0xc7, 0x43,
0x2a, 0x26, 0xfe, 0x36, 0x36, 0x61, 0x39, 0xd9, 0x68, 0xb9, 0xf1, 0x3c, 0x80, 0xa2, 0xe4, 0x55, 0xa7, 0x4f, 0x28, 0x39, 0x2a, 0x85, 0x40, 0x88, 0x20, 0xf4, 0x5b, 0xa2, 0x28, 0xc2, 0xc8, 0x23,
0xca, 0xf0, 0x51, 0xd3, 0x4c, 0xd1, 0x42, 0x45, 0x8b, 0xd2, 0x8d, 0xdf, 0x2f, 0xc0, 0x92, 0x84, 0x46, 0x59, 0xc2, 0x10, 0x05, 0x79, 0x3b, 0xf7, 0x91, 0x9d, 0x54, 0x4c, 0xfc, 0x6d, 0x6c, 0xc2,
0x6e, 0x89, 0xa1, 0xed, 0x4e, 0x46, 0x23, 0xdb, 0x4f, 0x61, 0x82, 0x99, 0x17, 0x33, 0xc1, 0xec, 0x72, 0xb2, 0xd1, 0x72, 0xe3, 0x79, 0x00, 0x45, 0xc9, 0xab, 0x94, 0xe1, 0xa3, 0xa6, 0x19, 0xb3,
0x0c, 0x13, 0x4c, 0x6a, 0xbe, 0xc4, 0x43, 0x93, 0x9a, 0xaf, 0x98, 0x4b, 0x52, 0x46, 0x74, 0x3b, 0x85, 0x8a, 0x16, 0xa5, 0x1b, 0xbf, 0x5f, 0x80, 0x25, 0x09, 0xdd, 0x12, 0x43, 0xdb, 0x9d, 0x8c,
0x68, 0x55, 0x82, 0x7b, 0x64, 0x6f, 0x9d, 0x61, 0xd9, 0x85, 0x14, 0x96, 0xad, 0x33, 0xdc, 0xb9, 0x46, 0xb6, 0x9f, 0xc2, 0x04, 0x33, 0x2f, 0x66, 0x82, 0xd9, 0x19, 0x26, 0x98, 0xd4, 0x7c, 0x89,
0x29, 0x86, 0xfb, 0x06, 0x10, 0xd1, 0xa8, 0xd9, 0x9f, 0x27, 0xfd, 0x04, 0x61, 0xd2, 0x98, 0x7a, 0x87, 0x26, 0x35, 0x5f, 0x31, 0x97, 0xa4, 0x8c, 0xe8, 0x96, 0xd4, 0xaa, 0x04, 0xf7, 0xc8, 0x62,
0x0f, 0x16, 0xa6, 0x79, 0x1c, 0x31, 0xd3, 0x5a, 0x0a, 0x87, 0x73, 0x46, 0x1c, 0x77, 0x2b, 0x0d, 0x3b, 0xc3, 0xb2, 0x0b, 0x29, 0x2c, 0x5b, 0x67, 0xb8, 0x73, 0x53, 0x0c, 0xf7, 0x0d, 0x20, 0xa2,
0xb9, 0x24, 0x39, 0x9c, 0x33, 0xe2, 0x7b, 0x98, 0xa2, 0xf0, 0x5b, 0x00, 0x54, 0x37, 0x2e, 0x1a, 0x51, 0xb3, 0x3f, 0x4f, 0xfa, 0x09, 0xc2, 0xa4, 0x39, 0xf3, 0x1e, 0x2c, 0x4c, 0xf3, 0x38, 0x62,
0xc0, 0x45, 0xf3, 0x76, 0x72, 0x2e, 0xf4, 0x51, 0xdf, 0x10, 0x1f, 0x13, 0x9f, 0xe3, 0x2a, 0x2a, 0xa6, 0xb5, 0x14, 0x0e, 0xe7, 0x8c, 0x38, 0xee, 0x56, 0x1a, 0x72, 0x49, 0x72, 0x38, 0x67, 0xc4,
0x61, 0x4e, 0x5c, 0x40, 0x1f, 0x42, 0xcd, 0x1b, 0x73, 0xd7, 0x8a, 0x79, 0x4d, 0x19, 0x8b, 0xaa, 0xf7, 0x30, 0x45, 0xe1, 0xb7, 0x00, 0xa8, 0x6e, 0x5c, 0x34, 0x80, 0x8b, 0xe6, 0xed, 0xe4, 0x5c,
0xcb, 0xa2, 0xda, 0x0a, 0x6e, 0x56, 0x05, 0x5e, 0xf4, 0xc9, 0xbe, 0x4d, 0x83, 0xcc, 0xb5, 0x9c, 0xe8, 0xa3, 0xbe, 0x21, 0x3e, 0x26, 0x3e, 0xc7, 0x55, 0x54, 0xc2, 0x9c, 0xb8, 0x80, 0x3e, 0x84,
0x95, 0x6b, 0x72, 0xd6, 0x10, 0x31, 0xfa, 0x36, 0x7e, 0x33, 0x03, 0x65, 0xad, 0x39, 0x6c, 0x05, 0x9a, 0x37, 0xe6, 0xae, 0x15, 0xf3, 0x9a, 0x32, 0x16, 0x55, 0x97, 0x45, 0xb5, 0x15, 0xdc, 0xac,
0x16, 0xb7, 0x0e, 0x0e, 0x0e, 0x5b, 0x66, 0xb3, 0xd7, 0xfe, 0xb4, 0x65, 0x6d, 0xed, 0x1d, 0x74, 0x0a, 0xbc, 0xe8, 0x93, 0x7d, 0x9b, 0x06, 0x99, 0x6b, 0x39, 0x2b, 0xd7, 0xe4, 0xac, 0x21, 0x62,
0x5b, 0xf5, 0x1b, 0x02, 0xbc, 0x77, 0xb0, 0xd5, 0xdc, 0xb3, 0x76, 0x0e, 0xcc, 0x2d, 0x05, 0xce, 0xf4, 0x6d, 0xfc, 0x66, 0x06, 0xca, 0x5a, 0x73, 0xd8, 0x0a, 0x2c, 0x6e, 0x1d, 0x1c, 0x1c, 0xb6,
0xb0, 0x55, 0x60, 0x66, 0x6b, 0xff, 0xa0, 0xd7, 0x4a, 0xc0, 0xb3, 0xac, 0x0e, 0x95, 0x4d, 0xb3, 0xcc, 0x66, 0xaf, 0xfd, 0x69, 0xcb, 0xda, 0xda, 0x3b, 0xe8, 0xb6, 0xea, 0x37, 0x04, 0x78, 0xef,
0xd5, 0xdc, 0xda, 0x95, 0x90, 0x1c, 0x5b, 0x86, 0xfa, 0xce, 0x51, 0x67, 0xbb, 0xdd, 0x79, 0x6a, 0x60, 0xab, 0xb9, 0x67, 0xed, 0x1c, 0x98, 0x5b, 0x0a, 0x9c, 0x61, 0xab, 0xc0, 0xcc, 0xd6, 0xfe,
0x6d, 0x35, 0x3b, 0x5b, 0xad, 0xbd, 0xd6, 0x76, 0x3d, 0xcf, 0xaa, 0x50, 0x6a, 0x6e, 0x36, 0x3b, 0x41, 0xaf, 0x95, 0x80, 0x67, 0x59, 0x1d, 0x2a, 0x9b, 0x66, 0xab, 0xb9, 0xb5, 0x2b, 0x21, 0x39,
0xdb, 0x07, 0x9d, 0xd6, 0x76, 0xbd, 0x60, 0xfc, 0x79, 0x06, 0x56, 0x70, 0xa0, 0x06, 0xd3, 0x2b, 0xb6, 0x0c, 0xf5, 0x9d, 0xa3, 0xce, 0x76, 0xbb, 0xf3, 0xd4, 0xda, 0x6a, 0x76, 0xb6, 0x5a, 0x7b,
0xf4, 0x2e, 0x94, 0xfb, 0x9e, 0x37, 0x16, 0x6a, 0x50, 0xbc, 0xdd, 0xeb, 0x20, 0xb1, 0xfa, 0x88, 0xad, 0xed, 0x7a, 0x9e, 0x55, 0xa1, 0xd4, 0xdc, 0x6c, 0x76, 0xb6, 0x0f, 0x3a, 0xad, 0xed, 0x7a,
0xb3, 0x9e, 0x78, 0x7e, 0x9f, 0xcb, 0x05, 0x0a, 0x08, 0xda, 0x11, 0x10, 0x41, 0x20, 0x92, 0xc2, 0xc1, 0xf8, 0xf3, 0x0c, 0xac, 0xe0, 0x40, 0x0d, 0xa6, 0x57, 0xe8, 0x5d, 0x28, 0xf7, 0x3d, 0x6f,
0x08, 0x83, 0xd6, 0x67, 0x99, 0x60, 0x84, 0xb2, 0x0a, 0x73, 0xc7, 0x3e, 0xb7, 0xfb, 0x67, 0x72, 0x2c, 0xd4, 0xa0, 0x78, 0xbb, 0xd7, 0x41, 0x62, 0xf5, 0x11, 0x67, 0x3d, 0xf1, 0xfc, 0x3e, 0x97,
0x69, 0xca, 0x2f, 0xf6, 0x4e, 0xac, 0xa0, 0xf7, 0xc5, 0x84, 0x0f, 0xf9, 0x00, 0xe9, 0xb3, 0x68, 0x0b, 0x14, 0x10, 0xb4, 0x23, 0x20, 0x82, 0x40, 0x24, 0x85, 0x11, 0x06, 0xad, 0xcf, 0x32, 0xc1,
0x2e, 0x48, 0xf8, 0x96, 0x04, 0x8b, 0xad, 0xc2, 0x3e, 0xb6, 0xdd, 0x81, 0xe7, 0xf2, 0x81, 0xd4, 0x08, 0x65, 0x15, 0xe6, 0x8e, 0x7d, 0x6e, 0xf7, 0xcf, 0xe4, 0xd2, 0x94, 0x5f, 0xec, 0x9d, 0x58,
0x03, 0x62, 0x80, 0x71, 0x08, 0xab, 0xd3, 0xfd, 0x93, 0x8b, 0xf9, 0x03, 0x6d, 0x31, 0x93, 0x58, 0x41, 0xef, 0x8b, 0x09, 0x1f, 0xf2, 0x01, 0xd2, 0x67, 0xd1, 0x5c, 0x90, 0xf0, 0x2d, 0x09, 0x16,
0xbe, 0x7e, 0x3d, 0x01, 0x69, 0x0b, 0xfb, 0x6f, 0xe5, 0x21, 0x2f, 0xc4, 0xb4, 0x6b, 0x25, 0x3a, 0x5b, 0x85, 0x7d, 0x6c, 0xbb, 0x03, 0xcf, 0xe5, 0x03, 0xa9, 0x07, 0xc4, 0x00, 0xe3, 0x10, 0x56,
0x5d, 0xee, 0xce, 0xcd, 0xf8, 0x66, 0xd0, 0x0e, 0x40, 0xfb, 0x37, 0x19, 0x9b, 0x4a, 0x08, 0xc1, 0xa7, 0xfb, 0x27, 0x17, 0xf3, 0x07, 0xda, 0x62, 0x26, 0xb1, 0x7c, 0xfd, 0x7a, 0x02, 0xd2, 0x16,
0x7d, 0x3b, 0x4a, 0xf6, 0x79, 0xff, 0x5c, 0x5a, 0x9b, 0x28, 0xd9, 0xe4, 0xfd, 0x73, 0x54, 0x78, 0xf6, 0xdf, 0xca, 0x43, 0x5e, 0x88, 0x69, 0xd7, 0x4a, 0x74, 0xba, 0xdc, 0x9d, 0x9b, 0xf1, 0xee,
0xec, 0x90, 0xf2, 0xd2, 0x62, 0x9c, 0x0f, 0xec, 0x10, 0x73, 0xca, 0x24, 0xcc, 0x37, 0x1f, 0x25, 0xa0, 0x1d, 0x80, 0xf6, 0x6f, 0x32, 0x36, 0x95, 0x10, 0x82, 0xfb, 0x76, 0x94, 0xec, 0xf3, 0xfe,
0x61, 0xae, 0x06, 0xcc, 0x3b, 0xee, 0xb1, 0x37, 0x71, 0x07, 0xb8, 0xf6, 0x8a, 0xa6, 0xfa, 0x44, 0xb9, 0xb4, 0x36, 0x51, 0xb2, 0xc9, 0xfb, 0xe7, 0xa8, 0xf0, 0xd8, 0x21, 0xe5, 0xa5, 0xc5, 0x38,
0x57, 0x10, 0xb2, 0x09, 0xb1, 0x4b, 0xd0, 0x52, 0x2b, 0x0a, 0x40, 0x4f, 0xec, 0x13, 0xef, 0x43, 0x1f, 0xd8, 0x21, 0xe6, 0x94, 0x49, 0x98, 0x6f, 0x3e, 0x4a, 0xc2, 0x5c, 0x0d, 0x98, 0x77, 0xdc,
0x29, 0xb8, 0x72, 0xfb, 0xfa, 0x02, 0x5b, 0x96, 0xe3, 0x23, 0x7a, 0xbf, 0xd1, 0xbd, 0x72, 0xfb, 0x63, 0x6f, 0xe2, 0x0e, 0x70, 0xed, 0x15, 0x4d, 0xf5, 0x89, 0xce, 0x24, 0x64, 0x13, 0x62, 0x97,
0xb8, 0x9c, 0x8a, 0x81, 0xfc, 0xc5, 0x9e, 0x40, 0x31, 0x32, 0xca, 0x12, 0x7b, 0xbc, 0xa9, 0xe7, 0xa0, 0xa5, 0x56, 0x14, 0x80, 0x9e, 0xd8, 0x27, 0xde, 0x87, 0x52, 0x70, 0xe5, 0xf6, 0xf5, 0x05,
0x50, 0x96, 0x58, 0xd2, 0x7d, 0x23, 0x54, 0xf6, 0x10, 0xe6, 0xd0, 0x72, 0x1a, 0x34, 0x2a, 0x98, 0xb6, 0x2c, 0xc7, 0x47, 0xf4, 0x7e, 0xa3, 0x7b, 0xe5, 0xf6, 0x71, 0x39, 0x15, 0x03, 0xf9, 0x8b,
0x49, 0x09, 0xe3, 0xa2, 0x19, 0xe8, 0x85, 0xe1, 0x03, 0xb4, 0xa2, 0x9a, 0x12, 0x6d, 0xfd, 0x19, 0x3d, 0x81, 0x62, 0x64, 0x94, 0x25, 0xf6, 0x78, 0x53, 0xcf, 0xa1, 0x2c, 0xb1, 0xa4, 0xfb, 0x46,
0x54, 0x13, 0x65, 0xe9, 0x1a, 0x6e, 0x95, 0x34, 0xdc, 0xb7, 0x74, 0x0d, 0x37, 0x66, 0xd3, 0x32, 0xa8, 0xec, 0x21, 0xcc, 0xa1, 0xe5, 0x34, 0x68, 0x54, 0x30, 0x93, 0x12, 0xc6, 0x45, 0x33, 0xd0,
0x9b, 0xae, 0xf1, 0xfe, 0x22, 0x14, 0x55, 0x57, 0xc4, 0x22, 0x3a, 0xea, 0x3c, 0xeb, 0x1c, 0x7c, 0x8f, 0xc3, 0x07, 0x68, 0x45, 0x35, 0x25, 0xda, 0xfa, 0x33, 0xa8, 0x26, 0xca, 0xd2, 0x35, 0xdc,
0xd6, 0xb1, 0xba, 0x9f, 0x77, 0xb6, 0xea, 0x37, 0xd8, 0x02, 0x94, 0x9b, 0x5b, 0xb8, 0x2e, 0x11, 0x2a, 0x69, 0xb8, 0x6f, 0xe9, 0x1a, 0x6e, 0xcc, 0xa6, 0x65, 0x36, 0x5d, 0xe3, 0xfd, 0x45, 0x28,
0x90, 0x11, 0x28, 0x87, 0xcd, 0x6e, 0x37, 0x82, 0x64, 0x8d, 0x1d, 0xa8, 0x4f, 0xb7, 0x54, 0xd0, 0xaa, 0xae, 0x88, 0x45, 0x74, 0xd4, 0x79, 0xd6, 0x39, 0xf8, 0xac, 0x63, 0x75, 0x3f, 0xef, 0x6c,
0x64, 0xa8, 0x60, 0xd2, 0xae, 0x1c, 0x03, 0x84, 0xfe, 0x42, 0xa6, 0x62, 0x12, 0x92, 0xe9, 0xc3, 0xd5, 0x6f, 0xb0, 0x05, 0x28, 0x37, 0xb7, 0x70, 0x5d, 0x22, 0x20, 0x23, 0x50, 0x0e, 0x9b, 0xdd,
0x78, 0x02, 0x75, 0xb1, 0xe9, 0x88, 0xa1, 0x0a, 0x34, 0xfb, 0xec, 0x50, 0x08, 0x5e, 0xba, 0x6d, 0x6e, 0x04, 0xc9, 0x1a, 0x3b, 0x50, 0x9f, 0x6e, 0xa9, 0xa0, 0xc9, 0x50, 0xc1, 0xa4, 0x5d, 0x39,
0xb9, 0x68, 0x96, 0x09, 0x86, 0x55, 0x19, 0x1f, 0xc0, 0xa2, 0x96, 0x2d, 0xd6, 0x37, 0xc5, 0x46, 0x06, 0x08, 0xfd, 0x85, 0x4c, 0xc5, 0x24, 0x24, 0xd3, 0x87, 0xf1, 0x04, 0xea, 0x62, 0xd3, 0x11,
0x36, 0xad, 0x6f, 0xa2, 0x76, 0x41, 0x29, 0xc6, 0x1a, 0xac, 0x88, 0xcf, 0xd6, 0x39, 0x77, 0xc3, 0x43, 0xa5, 0x7b, 0x8c, 0x86, 0x42, 0xf0, 0xd2, 0x6d, 0xcb, 0x45, 0xb3, 0x4c, 0x30, 0xac, 0xca,
0xee, 0xe4, 0x98, 0x1c, 0x82, 0x8e, 0xe7, 0x0a, 0xad, 0xa3, 0x14, 0xa5, 0x5c, 0x4f, 0xe4, 0x1b, 0xf8, 0x00, 0x16, 0xb5, 0x6c, 0xb1, 0xbe, 0x29, 0x36, 0xb2, 0x69, 0x7d, 0x13, 0xb5, 0x0b, 0x4a,
0x52, 0x35, 0xcd, 0x22, 0x69, 0xac, 0x6b, 0x35, 0x60, 0xc6, 0x0d, 0xfc, 0x9b, 0x50, 0x51, 0x4b, 0x31, 0xd6, 0x60, 0x45, 0x7c, 0xb6, 0xce, 0xb9, 0x1b, 0x76, 0x27, 0xc7, 0xe4, 0x52, 0x74, 0x3c,
0x11, 0x48, 0x0c, 0xeb, 0x61, 0xab, 0x65, 0x5a, 0x07, 0x9d, 0xbd, 0x76, 0x47, 0x70, 0x3b, 0x31, 0x57, 0x68, 0x1d, 0xa5, 0x28, 0xe5, 0x7a, 0x22, 0xdf, 0x90, 0xaa, 0x69, 0x16, 0x49, 0x63, 0x5d,
0xac, 0x08, 0xd8, 0xd9, 0x41, 0x48, 0xc6, 0xa8, 0x43, 0xed, 0x29, 0x0f, 0xdb, 0xee, 0x89, 0xa7, 0xab, 0x01, 0x33, 0x6e, 0xe0, 0xdf, 0x84, 0x8a, 0x5a, 0x8a, 0x40, 0x62, 0x58, 0x0f, 0x5b, 0x2d,
0x9c, 0x5f, 0x7f, 0x63, 0x0e, 0x16, 0x22, 0x50, 0xac, 0xe2, 0x9e, 0x73, 0x3f, 0x70, 0x3c, 0x17, 0xd3, 0x3a, 0xe8, 0xec, 0xb5, 0x3b, 0x82, 0xdb, 0x89, 0x61, 0x45, 0xc0, 0xce, 0x0e, 0x42, 0x32,
0xa5, 0xd5, 0x92, 0xa9, 0x3e, 0x05, 0x77, 0x92, 0x32, 0x3a, 0x6e, 0x81, 0xcb, 0x98, 0x2a, 0xa5, 0x46, 0x1d, 0x6a, 0x4f, 0x79, 0xd8, 0x76, 0x4f, 0x3c, 0x39, 0x18, 0xc6, 0xdf, 0x98, 0x83, 0x85,
0x7a, 0xdc, 0xff, 0xee, 0xc1, 0x82, 0x33, 0xe0, 0x6e, 0xe8, 0x84, 0x57, 0x56, 0xc2, 0x60, 0x56, 0x08, 0x14, 0xab, 0xb8, 0xe7, 0xdc, 0x0f, 0x1c, 0xcf, 0x45, 0x69, 0xb5, 0x64, 0xaa, 0x4f, 0xc1,
0x53, 0x60, 0xb9, 0x07, 0x2e, 0x43, 0xc1, 0x1e, 0x3a, 0xb6, 0x72, 0xb4, 0xd2, 0x87, 0x80, 0xf6, 0x9d, 0xa4, 0x8c, 0x8e, 0x5b, 0xe0, 0x32, 0xa6, 0x4a, 0xa9, 0x1e, 0xf7, 0xbf, 0x7b, 0xb0, 0xe0,
0xbd, 0xa1, 0xe7, 0xa3, 0xe4, 0x5a, 0x32, 0xe9, 0x83, 0x3d, 0x82, 0x65, 0x21, 0x41, 0xeb, 0x56, 0x0c, 0xb8, 0x1b, 0x3a, 0xe1, 0x95, 0x95, 0x30, 0x98, 0xd5, 0x14, 0x58, 0xee, 0x81, 0xcb, 0x50,
0x4c, 0x64, 0x30, 0x64, 0xbb, 0x63, 0xee, 0x64, 0x74, 0x18, 0x5b, 0x32, 0x45, 0x8a, 0xd8, 0xf9, 0xb0, 0x87, 0x8e, 0xad, 0x5c, 0xb5, 0xf4, 0x21, 0xa0, 0x7d, 0x6f, 0xe8, 0xf9, 0x28, 0xb9, 0x96,
0x44, 0x0e, 0x29, 0xea, 0x44, 0x19, 0x48, 0x19, 0x5b, 0x74, 0x27, 0xa3, 0x26, 0xa6, 0x44, 0xf8, 0x4c, 0xfa, 0x60, 0x8f, 0x60, 0x59, 0x48, 0xd0, 0xba, 0x15, 0x13, 0x19, 0x0c, 0xd9, 0xee, 0x98,
0x8f, 0x61, 0x45, 0xe0, 0x47, 0xc2, 0x51, 0x94, 0x63, 0x01, 0x73, 0x88, 0xc2, 0xda, 0x32, 0x2d, 0x3b, 0x19, 0x1d, 0xc6, 0x96, 0x4c, 0x91, 0x22, 0x76, 0x3e, 0x91, 0x43, 0x8a, 0x3a, 0x51, 0x06,
0xca, 0x73, 0x0b, 0x4a, 0xd4, 0x2a, 0x41, 0x12, 0x05, 0x12, 0xc2, 0xb1, 0x29, 0xdc, 0x0f, 0x66, 0x52, 0xc6, 0x16, 0xdd, 0xc9, 0xa8, 0x89, 0x29, 0x11, 0xfe, 0x63, 0x58, 0x11, 0xf8, 0x91, 0x70,
0x7c, 0xa2, 0x73, 0xb4, 0x8d, 0x4f, 0xf9, 0x44, 0x35, 0xaf, 0x6a, 0x71, 0xda, 0xab, 0xfa, 0x18, 0x14, 0xe5, 0x58, 0xc0, 0x1c, 0xa2, 0xb0, 0xb6, 0x4c, 0x8b, 0xf2, 0xdc, 0x82, 0x12, 0xb5, 0x4a,
0x56, 0x8e, 0x05, 0x8d, 0x9e, 0x71, 0x7b, 0xc0, 0x7d, 0x2b, 0xa6, 0x7c, 0x52, 0x36, 0x96, 0x44, 0x90, 0x44, 0x81, 0x84, 0x70, 0x6c, 0x0a, 0xf7, 0x83, 0x19, 0xaf, 0xea, 0x1c, 0x6d, 0xe3, 0x53,
0xe2, 0x2e, 0xa6, 0x45, 0x0b, 0x45, 0x48, 0x29, 0x82, 0x6f, 0xf0, 0x81, 0x15, 0x7a, 0x16, 0x0a, 0x5e, 0x55, 0xcd, 0x2f, 0x5b, 0x9c, 0xf6, 0xcb, 0x3e, 0x86, 0x95, 0x63, 0x41, 0xa3, 0x67, 0xdc,
0x2f, 0xc8, 0x81, 0x8a, 0x66, 0x95, 0xc0, 0x3d, 0x6f, 0x4b, 0x00, 0x93, 0x78, 0xa7, 0xbe, 0x3d, 0x1e, 0x70, 0xdf, 0x8a, 0x29, 0x9f, 0x94, 0x8d, 0x25, 0x91, 0xb8, 0x8b, 0x69, 0xd1, 0x42, 0x11,
0x3e, 0x93, 0xea, 0x40, 0x84, 0xf7, 0x54, 0x00, 0xd9, 0x6b, 0x30, 0x2f, 0xd6, 0x84, 0xcb, 0xc9, 0x52, 0x8a, 0xe0, 0x1b, 0x7c, 0x60, 0x85, 0x9e, 0x85, 0xc2, 0x0b, 0x72, 0xa0, 0xa2, 0x59, 0x25,
0x75, 0x45, 0x02, 0xb7, 0x02, 0xb1, 0xb7, 0x60, 0x0e, 0xeb, 0x08, 0x1a, 0x75, 0x5c, 0x10, 0x95, 0x70, 0xcf, 0xdb, 0x12, 0xc0, 0x24, 0xde, 0xa9, 0x6f, 0x8f, 0xcf, 0xa4, 0x3a, 0x10, 0xe1, 0x3d,
0x98, 0xd3, 0x3b, 0xae, 0x29, 0xd3, 0x84, 0x28, 0x38, 0xf1, 0x1d, 0x62, 0x43, 0x25, 0x13, 0x7f, 0x15, 0x40, 0xf6, 0x1a, 0xcc, 0x8b, 0x35, 0xe1, 0x72, 0x72, 0x5d, 0x91, 0xc0, 0xad, 0x40, 0xec,
0xb3, 0xef, 0x6a, 0x3c, 0x6d, 0x09, 0xf3, 0xbe, 0x25, 0xf3, 0x4e, 0x91, 0xe2, 0x75, 0xec, 0xed, 0x2d, 0x98, 0xc3, 0x3a, 0x82, 0x46, 0x1d, 0x17, 0x44, 0x25, 0xe6, 0xf4, 0x8e, 0x6b, 0xca, 0x34,
0x67, 0xca, 0xad, 0xbe, 0x97, 0x2f, 0x96, 0xeb, 0x15, 0xe3, 0x43, 0x28, 0xd0, 0xe8, 0x08, 0x22, 0x21, 0x0a, 0x4e, 0x7c, 0x87, 0xd8, 0x50, 0xc9, 0xc4, 0xdf, 0xec, 0xbb, 0x1a, 0x4f, 0x5b, 0xc2,
0xc4, 0xb1, 0xcb, 0x48, 0x22, 0x44, 0x68, 0x03, 0xe6, 0x5d, 0x1e, 0x5e, 0x78, 0xfe, 0x73, 0x65, 0xbc, 0x6f, 0xc9, 0xbc, 0x53, 0xa4, 0x78, 0x1d, 0x7b, 0xfb, 0x99, 0x72, 0xab, 0xef, 0xe5, 0x8b,
0x52, 0x96, 0x9f, 0xc6, 0x0f, 0xd1, 0x16, 0x12, 0xf9, 0xcb, 0x49, 0xad, 0x13, 0xe4, 0x41, 0xd3, 0xe5, 0x7a, 0xc5, 0xf8, 0x10, 0x0a, 0x34, 0x3a, 0x82, 0x08, 0x71, 0xec, 0x32, 0x92, 0x08, 0x11,
0x1b, 0x9c, 0xd9, 0xd2, 0x3c, 0x53, 0x44, 0x40, 0xf7, 0xcc, 0x9e, 0x21, 0x8f, 0xec, 0xac, 0xcb, 0xda, 0x80, 0x79, 0x97, 0x87, 0x17, 0x9e, 0xff, 0x5c, 0x99, 0x94, 0xe5, 0xa7, 0xf1, 0x43, 0xb4,
0xfc, 0x2d, 0xa8, 0x29, 0x0f, 0x7d, 0x60, 0x0d, 0xf9, 0x49, 0x28, 0xc9, 0xbd, 0x22, 0xdd, 0xf3, 0x85, 0x44, 0x1e, 0x77, 0x52, 0xeb, 0x04, 0x79, 0xd0, 0xf4, 0x06, 0x67, 0xb6, 0x34, 0xcf, 0x14,
0xc1, 0x1e, 0x3f, 0x09, 0x8d, 0x7d, 0x58, 0x94, 0x04, 0x79, 0x30, 0xe6, 0xaa, 0xea, 0x6f, 0xa5, 0x11, 0xd0, 0x3d, 0xb3, 0x67, 0xc8, 0x23, 0x3b, 0xeb, 0x74, 0x7f, 0x0b, 0x6a, 0xca, 0xc7, 0x1f,
0x49, 0xc3, 0xe5, 0xc7, 0x4b, 0xc9, 0x9d, 0x98, 0x22, 0x0f, 0x12, 0x22, 0xb2, 0xf1, 0x09, 0x30, 0x58, 0x43, 0x7e, 0x12, 0x4a, 0x72, 0xaf, 0x48, 0x07, 0x7f, 0xb0, 0xc7, 0x4f, 0x42, 0x63, 0x1f,
0x7d, 0x9f, 0x96, 0xe5, 0x49, 0x99, 0x54, 0x59, 0xe2, 0x95, 0x43, 0x2b, 0x92, 0x7c, 0x9d, 0x81, 0x16, 0x25, 0x41, 0x1e, 0x8c, 0xb9, 0xaa, 0xfa, 0x5b, 0x69, 0xd2, 0x70, 0xf9, 0xf1, 0x52, 0x72,
0x18, 0x9d, 0x60, 0xd2, 0xef, 0xab, 0xc8, 0x89, 0xa2, 0xa9, 0x3e, 0x8d, 0x3f, 0xc9, 0xc0, 0x12, 0x27, 0xa6, 0xd8, 0x85, 0x84, 0x88, 0x6c, 0x7c, 0x02, 0x4c, 0xdf, 0xa7, 0x65, 0x79, 0x52, 0x26,
0x16, 0xa6, 0xa4, 0x79, 0xc9, 0x85, 0x7f, 0xe2, 0x46, 0x8a, 0xf9, 0xd1, 0x85, 0x23, 0xfa, 0xf8, 0x55, 0x96, 0x78, 0xe5, 0xd0, 0x8a, 0x24, 0x5f, 0x67, 0x20, 0x46, 0x27, 0x98, 0xf4, 0xfb, 0x2a,
0xea, 0xb6, 0xcf, 0xfc, 0x8c, 0xed, 0xf3, 0x1d, 0xa8, 0x0f, 0xf8, 0xd0, 0xc1, 0x20, 0x1a, 0x25, 0xf6, 0xa2, 0x68, 0xaa, 0x4f, 0xe3, 0x4f, 0x32, 0xb0, 0x84, 0x85, 0x29, 0x69, 0x5e, 0x72, 0xe1,
0x6b, 0x90, 0xfc, 0xbe, 0xa0, 0xe0, 0x52, 0x97, 0x33, 0xfe, 0x5e, 0x06, 0x16, 0x49, 0x94, 0x41, 0x9f, 0xb8, 0x91, 0x62, 0x7e, 0x74, 0xe1, 0x88, 0x3e, 0xbe, 0xba, 0xed, 0x33, 0x3f, 0x63, 0xfb,
0xad, 0x58, 0x0e, 0xd4, 0xc7, 0x4a, 0x0d, 0x94, 0xac, 0x4a, 0xf6, 0x29, 0xde, 0xe2, 0x11, 0x4a, 0x7c, 0x07, 0xea, 0x03, 0x3e, 0x74, 0x30, 0x0c, 0x47, 0xc9, 0x1a, 0x24, 0xbf, 0x2f, 0x28, 0xb8,
0xc8, 0xbb, 0x37, 0xa4, 0x7a, 0x28, 0xa1, 0xec, 0x23, 0xd4, 0x40, 0x5c, 0x0b, 0x81, 0x29, 0x41, 0xd4, 0xe5, 0x8c, 0xbf, 0x97, 0x81, 0x45, 0x12, 0x65, 0x50, 0x2b, 0x96, 0x03, 0xf5, 0xb1, 0x52,
0x39, 0xc9, 0x49, 0xd9, 0xbd, 0x81, 0xea, 0x89, 0x8b, 0xa0, 0xcd, 0xa2, 0xd0, 0x4b, 0x05, 0xd8, 0x03, 0x25, 0xab, 0x92, 0x7d, 0x8a, 0xb7, 0x78, 0x84, 0x12, 0xf2, 0xee, 0x0d, 0xa9, 0x1e, 0x4a,
0xd8, 0x81, 0x6a, 0xa2, 0x9a, 0x84, 0x81, 0xb6, 0x42, 0x06, 0xda, 0x19, 0x27, 0x48, 0x76, 0xd6, 0x28, 0xfb, 0x08, 0x35, 0x10, 0xd7, 0x42, 0x60, 0x4a, 0x58, 0x4f, 0x72, 0x52, 0x76, 0x6f, 0xa0,
0x09, 0x72, 0x05, 0x4b, 0x26, 0xb7, 0x07, 0x57, 0x3b, 0x9e, 0x7f, 0x18, 0x1c, 0x87, 0x3b, 0x24, 0x7a, 0xe2, 0x22, 0x68, 0xb3, 0x28, 0xf4, 0x52, 0x01, 0x36, 0x76, 0xa0, 0x9a, 0xa8, 0x26, 0x61,
0x1f, 0x0a, 0xfe, 0x1e, 0x79, 0xf6, 0x12, 0x56, 0x50, 0xe5, 0xe0, 0x51, 0xca, 0xee, 0xd7, 0xa0, 0xa0, 0xad, 0x90, 0x81, 0x76, 0xc6, 0x09, 0x92, 0x9d, 0x75, 0x82, 0x5c, 0xc1, 0x92, 0xc9, 0xed,
0x16, 0xbb, 0x00, 0x35, 0x4b, 0x5a, 0x35, 0xf2, 0x02, 0xa2, 0x41, 0x4d, 0x28, 0x8a, 0xc1, 0x71, 0xc1, 0xd5, 0x8e, 0xe7, 0x1f, 0x06, 0xc7, 0xe1, 0x0e, 0xc9, 0x87, 0x82, 0xbf, 0x47, 0x9e, 0xbd,
0x28, 0x6d, 0x69, 0xf8, 0xdb, 0xf8, 0x6b, 0x79, 0x60, 0x82, 0x9a, 0xa7, 0x08, 0x66, 0xca, 0x79, 0x84, 0x15, 0x54, 0x39, 0x78, 0x94, 0xb2, 0xfb, 0x35, 0xa8, 0xc5, 0x2e, 0x40, 0xcd, 0x92, 0x56,
0x99, 0x9d, 0x71, 0x5e, 0x3e, 0x02, 0xa6, 0x21, 0x28, 0x9f, 0x6a, 0x2e, 0xf2, 0xa9, 0xd6, 0x63, 0x8d, 0xbc, 0x80, 0x68, 0x50, 0x13, 0x8a, 0x62, 0x70, 0x1c, 0x4a, 0x5b, 0x1a, 0xfe, 0x36, 0xfe,
0x5c, 0xe9, 0x52, 0x7d, 0x04, 0xcb, 0x52, 0xd8, 0x4e, 0x36, 0x95, 0x48, 0x83, 0x91, 0xd4, 0x9d, 0x5a, 0x1e, 0x98, 0xa0, 0xe6, 0x29, 0x82, 0x99, 0x72, 0x5e, 0x66, 0x67, 0x9c, 0x97, 0x8f, 0x80,
0x68, 0xaf, 0x72, 0x5c, 0x0a, 0xe5, 0x9d, 0x6c, 0x65, 0xe8, 0xb8, 0x54, 0x6a, 0xbb, 0x46, 0x80, 0x69, 0x08, 0xca, 0xa7, 0x9a, 0x8b, 0x7c, 0xaa, 0xf5, 0x18, 0x57, 0xba, 0x54, 0x1f, 0xc1, 0xb2,
0x73, 0x2f, 0x25, 0xc0, 0xf9, 0x19, 0x02, 0xd4, 0x4c, 0x37, 0xc5, 0xa4, 0xe9, 0xc6, 0x80, 0xaa, 0x14, 0xb6, 0x93, 0x4d, 0x25, 0xd2, 0x60, 0x24, 0x75, 0x27, 0xda, 0xab, 0x1c, 0x97, 0x42, 0x79,
0x72, 0x4f, 0x52, 0x54, 0x06, 0x49, 0x96, 0x65, 0xe9, 0xa3, 0xc4, 0xc8, 0x8c, 0xfb, 0x50, 0x57, 0x27, 0x5b, 0x19, 0x3a, 0x2e, 0x95, 0xda, 0xae, 0x11, 0xe0, 0xdc, 0x4b, 0x09, 0x70, 0x7e, 0x86,
0xf6, 0x95, 0xc8, 0x38, 0x44, 0x11, 0x07, 0xd2, 0x3c, 0xb7, 0xa5, 0x4c, 0x44, 0x09, 0x53, 0x7c, 0x00, 0x35, 0xd3, 0x4d, 0x31, 0x69, 0xba, 0x31, 0xa0, 0xaa, 0xdc, 0x93, 0x14, 0x95, 0x41, 0x92,
0x79, 0xca, 0x14, 0xff, 0x2e, 0x2c, 0x06, 0x82, 0x7e, 0xad, 0x89, 0x2b, 0xc3, 0x83, 0xf8, 0x00, 0x65, 0x59, 0xfa, 0x28, 0x31, 0x32, 0xe3, 0x3e, 0xd4, 0x95, 0x7d, 0x25, 0x32, 0x0e, 0x51, 0xc4,
0xf5, 0xb0, 0xa2, 0x59, 0xc7, 0x84, 0xa3, 0x18, 0x3e, 0x6b, 0xf8, 0xa8, 0xa6, 0x18, 0x3e, 0x9e, 0x81, 0x34, 0xcf, 0x6d, 0x29, 0x13, 0x51, 0xc2, 0x14, 0x5f, 0x9e, 0x32, 0xc5, 0xbf, 0x0b, 0x8b,
0xc4, 0x9e, 0xbc, 0xe0, 0xcc, 0x19, 0xa1, 0x50, 0x11, 0x87, 0xd2, 0xc8, 0x01, 0xee, 0x9e, 0x39, 0x81, 0xa0, 0x5f, 0x6b, 0xe2, 0xca, 0x00, 0x23, 0x3e, 0x40, 0x3d, 0xac, 0x68, 0xd6, 0x31, 0xe1,
0x23, 0x53, 0xb9, 0x8d, 0xc5, 0x87, 0xf1, 0xbf, 0x33, 0x50, 0x17, 0x74, 0x90, 0x58, 0x62, 0xdf, 0x28, 0x86, 0xcf, 0x1a, 0x3e, 0xaa, 0x29, 0x86, 0x8f, 0x27, 0xb1, 0x27, 0x2f, 0x38, 0x73, 0x46,
0x06, 0x64, 0x06, 0xaf, 0xb8, 0xc2, 0xca, 0x02, 0x57, 0x2d, 0xb0, 0x0f, 0x01, 0x57, 0x8c, 0x25, 0x28, 0x54, 0xc4, 0xa1, 0x34, 0x72, 0x80, 0xbb, 0x67, 0xce, 0xc8, 0x54, 0x6e, 0x63, 0xf1, 0x61,
0x94, 0x4e, 0xb9, 0xbe, 0x1a, 0xc9, 0xf5, 0x15, 0xf3, 0xd0, 0xdd, 0x1b, 0xa4, 0x9c, 0x08, 0x08, 0xfc, 0xef, 0x0c, 0xd4, 0x05, 0x1d, 0x24, 0x96, 0xd8, 0xb7, 0x01, 0x99, 0xc1, 0x2b, 0xae, 0xb0,
0xfb, 0x36, 0x94, 0x04, 0x61, 0x22, 0x95, 0xc8, 0x08, 0x2e, 0x25, 0x9a, 0xa5, 0xac, 0x11, 0x91, 0xb2, 0xc0, 0x55, 0x0b, 0xec, 0x43, 0xc0, 0x15, 0x63, 0x09, 0xa5, 0x53, 0xae, 0xaf, 0x46, 0x72,
0x75, 0x2c, 0x3f, 0xd3, 0x9c, 0xaf, 0xf9, 0x14, 0xe7, 0xab, 0xb6, 0x80, 0x77, 0x01, 0x9e, 0xf1, 0x7d, 0xc5, 0x3c, 0x74, 0xf7, 0x06, 0x29, 0x27, 0x02, 0xc2, 0xbe, 0x0d, 0x25, 0x41, 0x98, 0x48,
0xab, 0x3d, 0xaf, 0x8f, 0x2a, 0xf1, 0x6d, 0x00, 0x41, 0xcb, 0x27, 0xf6, 0xc8, 0x91, 0x16, 0x9d, 0x25, 0x32, 0x06, 0x4c, 0x89, 0x66, 0x29, 0x6b, 0x44, 0x64, 0x1d, 0xcb, 0xcf, 0x34, 0xe7, 0x6b,
0x82, 0x59, 0x7a, 0xce, 0xaf, 0x76, 0x10, 0x20, 0x26, 0x52, 0x24, 0xc7, 0xab, 0xb8, 0x60, 0x16, 0x3e, 0xc5, 0xf9, 0xaa, 0x2d, 0xe0, 0x5d, 0x80, 0x67, 0xfc, 0x6a, 0xcf, 0xeb, 0xa3, 0x4a, 0x7c,
0x9f, 0xf3, 0x2b, 0x5a, 0xc2, 0x16, 0x54, 0x9f, 0xf1, 0xab, 0x6d, 0x4e, 0x52, 0xa8, 0xe7, 0x0b, 0x1b, 0x40, 0xd0, 0xf2, 0x89, 0x3d, 0x72, 0xa4, 0x45, 0xa7, 0x60, 0x96, 0x9e, 0xf3, 0xab, 0x1d,
0x22, 0xf2, 0xed, 0x0b, 0x21, 0x76, 0x26, 0x1c, 0xa7, 0x65, 0xdf, 0xbe, 0x78, 0xc6, 0xaf, 0x94, 0x04, 0x88, 0x89, 0x14, 0xc9, 0xf1, 0x2a, 0x2e, 0x98, 0xc5, 0xe7, 0xfc, 0x8a, 0x96, 0xb0, 0x05,
0x13, 0x77, 0x5e, 0xa4, 0x0f, 0xbd, 0xbe, 0xdc, 0x37, 0x55, 0x08, 0x48, 0xdc, 0x28, 0x73, 0xee, 0xd5, 0x67, 0xfc, 0x6a, 0x9b, 0x93, 0x14, 0xea, 0xf9, 0x82, 0x88, 0x7c, 0xfb, 0x42, 0x88, 0x9d,
0x39, 0xfe, 0x36, 0xfe, 0x32, 0x03, 0x55, 0xd1, 0x7e, 0x64, 0xcb, 0x62, 0xca, 0x54, 0x24, 0x51, 0x09, 0xc7, 0x69, 0xd9, 0xb7, 0x2f, 0x9e, 0xf1, 0x2b, 0xe5, 0xc4, 0x9d, 0x17, 0xe9, 0x43, 0xaf,
0x26, 0x8e, 0x24, 0x7a, 0x2c, 0xb9, 0x1a, 0xf1, 0xf8, 0xec, 0xf5, 0x3c, 0x1e, 0xe7, 0x86, 0x18, 0x2f, 0xf7, 0x4d, 0x15, 0x02, 0x12, 0x37, 0xca, 0x9c, 0x7b, 0x8e, 0xbf, 0x8d, 0xbf, 0xcc, 0x40,
0xfc, 0xfb, 0x50, 0xa2, 0x65, 0x29, 0xd6, 0x79, 0x2e, 0x31, 0xc1, 0x89, 0x0e, 0x99, 0x45, 0x44, 0x55, 0xb4, 0x1f, 0xd9, 0xb2, 0x98, 0x32, 0x15, 0x49, 0x94, 0x89, 0x23, 0x89, 0x1e, 0x4b, 0xae,
0x7b, 0x46, 0x81, 0x0b, 0x9a, 0x75, 0x90, 0x86, 0xb8, 0xe4, 0x47, 0x36, 0xc1, 0x94, 0x69, 0x28, 0x46, 0x3c, 0x3e, 0x7b, 0x3d, 0x8f, 0xc7, 0xb9, 0x21, 0x06, 0xff, 0x3e, 0x94, 0x68, 0x59, 0x8a,
0x5c, 0x13, 0xb8, 0xa0, 0x9b, 0xde, 0xe6, 0x66, 0x4c, 0x6f, 0x07, 0x50, 0x14, 0x53, 0x8d, 0x9d, 0x75, 0x9e, 0x4b, 0x4c, 0x70, 0xa2, 0x43, 0x66, 0x11, 0xd1, 0x9e, 0x51, 0xe0, 0x82, 0x66, 0x1d,
0x4d, 0x29, 0x34, 0x93, 0x56, 0xa8, 0x90, 0x04, 0x6c, 0xb1, 0x29, 0x08, 0x46, 0x97, 0x95, 0x92, 0xa4, 0x21, 0x2e, 0xf9, 0x91, 0x4d, 0x30, 0x65, 0x1a, 0x0a, 0xd7, 0x04, 0x2e, 0xe8, 0xa6, 0xb7,
0x80, 0x1d, 0xf0, 0x43, 0x64, 0x76, 0x19, 0x28, 0x6b, 0x2b, 0x00, 0xad, 0x97, 0xd1, 0x78, 0xd1, 0xb9, 0x19, 0xd3, 0xdb, 0x01, 0x14, 0xc5, 0x54, 0x63, 0x67, 0x53, 0x0a, 0xcd, 0xa4, 0x15, 0x2a,
0x72, 0x49, 0x92, 0x78, 0x62, 0xc0, 0x77, 0x6f, 0x98, 0xd5, 0x7e, 0x62, 0x06, 0x36, 0x24, 0xad, 0x24, 0x01, 0x5b, 0x6c, 0x0a, 0x82, 0xd1, 0x65, 0xa5, 0x24, 0x60, 0x07, 0xfc, 0x10, 0x99, 0x5d,
0x62, 0xce, 0x6c, 0x22, 0xe8, 0x49, 0x35, 0x5c, 0x11, 0xa8, 0xf8, 0xbd, 0x39, 0x07, 0x79, 0x81, 0x06, 0xca, 0xda, 0x0a, 0x40, 0xeb, 0x65, 0x34, 0x5e, 0xb4, 0x5c, 0x92, 0x24, 0x9e, 0x18, 0xf0,
0x6a, 0x7c, 0x0c, 0x8b, 0x5a, 0x33, 0xc8, 0x0e, 0xf0, 0xaa, 0x3d, 0x34, 0x7e, 0x25, 0xca, 0x2c, 0xdd, 0x1b, 0x66, 0xb5, 0x9f, 0x98, 0x81, 0x0d, 0x49, 0xab, 0x98, 0x33, 0x9b, 0x08, 0x7a, 0x52,
0xea, 0x20, 0xff, 0x92, 0x0a, 0x02, 0xe1, 0x03, 0xea, 0xb8, 0x0c, 0x36, 0x21, 0x90, 0x40, 0x7b, 0x0d, 0x57, 0x04, 0x2a, 0x7e, 0x6f, 0xce, 0x41, 0x5e, 0xa0, 0x1a, 0x1f, 0xc3, 0xa2, 0xd6, 0x0c,
0xe5, 0xc0, 0x84, 0x5f, 0x83, 0x25, 0xad, 0xf4, 0x1d, 0xc7, 0xb5, 0x87, 0xce, 0x0f, 0x71, 0xc3, 0xb2, 0x03, 0xbc, 0x6a, 0x0f, 0x8d, 0x5f, 0x89, 0x32, 0x8b, 0x3a, 0xc8, 0xbf, 0xa4, 0x82, 0x40,
0x0f, 0x9c, 0x53, 0x77, 0xaa, 0x7c, 0x02, 0x7d, 0xa5, 0xf2, 0xff, 0x7e, 0x16, 0x96, 0x65, 0x05, 0xf8, 0x80, 0x3a, 0x2e, 0x83, 0x4d, 0x08, 0x24, 0xd0, 0x5e, 0x39, 0x30, 0xe1, 0xd7, 0x60, 0x49,
0x18, 0xd6, 0xe7, 0x08, 0x29, 0x6e, 0x3f, 0x38, 0x65, 0xdf, 0x86, 0xaa, 0x18, 0x1b, 0xcb, 0xe7, 0x2b, 0x7d, 0xc7, 0x71, 0xed, 0xa1, 0xf3, 0x43, 0xdc, 0xf0, 0x03, 0xe7, 0xd4, 0x9d, 0x2a, 0x9f,
0xa7, 0x4e, 0x10, 0x72, 0xe5, 0xd7, 0x4a, 0x61, 0x5c, 0x62, 0x33, 0x17, 0xa8, 0xa6, 0xc4, 0x64, 0x40, 0x5f, 0xa9, 0xfc, 0xbf, 0x9f, 0x85, 0x65, 0x59, 0x01, 0x86, 0xf5, 0x39, 0x42, 0x8a, 0xdb,
0x1f, 0x43, 0x19, 0xb3, 0x92, 0x9d, 0x45, 0x4e, 0x44, 0x63, 0x36, 0x23, 0x0d, 0xf4, 0xee, 0x0d, 0x0f, 0x4e, 0xd9, 0xb7, 0xa1, 0x2a, 0xc6, 0xc6, 0xf2, 0xf9, 0xa9, 0x13, 0x84, 0x5c, 0xf9, 0xb5,
0x13, 0x82, 0x78, 0xd8, 0x3f, 0x86, 0x32, 0xce, 0xe1, 0x39, 0x0e, 0xe4, 0x14, 0xab, 0x9a, 0x19, 0x52, 0x18, 0x97, 0xd8, 0xcc, 0x05, 0xaa, 0x29, 0x31, 0xd9, 0xc7, 0x50, 0xc6, 0xac, 0x64, 0x67,
0x68, 0x91, 0x79, 0x1c, 0x0f, 0x7b, 0x13, 0xaa, 0xc4, 0xac, 0xe4, 0x38, 0xc9, 0x70, 0xa1, 0xf5, 0x91, 0x13, 0xd1, 0x98, 0xcd, 0x48, 0x03, 0xbd, 0x7b, 0xc3, 0x84, 0x20, 0x1e, 0xf6, 0x8f, 0xa1,
0xd9, 0xec, 0x6a, 0x24, 0x45, 0xe3, 0xc7, 0xda, 0xf7, 0x66, 0x09, 0xe6, 0x43, 0xdf, 0x39, 0x3d, 0x8c, 0x73, 0x78, 0x8e, 0x03, 0x39, 0xc5, 0xaa, 0x66, 0x06, 0x5a, 0x64, 0x1e, 0xc7, 0xc3, 0xde,
0xe5, 0xbe, 0xb1, 0x1a, 0x0d, 0x8d, 0xe0, 0xc2, 0xbc, 0x1b, 0xf2, 0xb1, 0x90, 0xcd, 0x8d, 0x7f, 0x84, 0x2a, 0x31, 0x2b, 0x39, 0x4e, 0x32, 0x5c, 0x68, 0x7d, 0x36, 0xbb, 0x1a, 0x49, 0xd1, 0xf8,
0x9b, 0x81, 0xb2, 0xe4, 0xab, 0x3f, 0xb1, 0x33, 0x6d, 0x5d, 0x8b, 0x8b, 0x25, 0x93, 0x4e, 0x1c, 0xb1, 0xf6, 0xbd, 0x59, 0x82, 0xf9, 0xd0, 0x77, 0x4e, 0x4f, 0xb9, 0x6f, 0xac, 0x46, 0x43, 0x23,
0x06, 0x7b, 0x0f, 0x16, 0x46, 0x42, 0x4e, 0x17, 0x7a, 0x64, 0xc2, 0x93, 0x56, 0x53, 0x60, 0x29, 0xb8, 0x30, 0xef, 0x86, 0x7c, 0x2c, 0x64, 0x73, 0xe3, 0xdf, 0x66, 0xa0, 0x2c, 0xf9, 0xea, 0x4f,
0x26, 0x6f, 0xc0, 0x12, 0x4a, 0xcd, 0x81, 0x15, 0x3a, 0x43, 0x4b, 0x25, 0xca, 0x18, 0xd4, 0x45, 0xec, 0x4c, 0x5b, 0xd7, 0x22, 0x6b, 0xc9, 0xa4, 0x13, 0x07, 0xd2, 0xde, 0x83, 0x85, 0x91, 0x90,
0x4a, 0xea, 0x39, 0xc3, 0x7d, 0x99, 0x20, 0x84, 0xc7, 0x20, 0xb4, 0x4f, 0xb9, 0x5c, 0xdb, 0xf4, 0xd3, 0x85, 0x1e, 0x99, 0xf0, 0xa4, 0xd5, 0x14, 0x58, 0x8a, 0xc9, 0x1b, 0xb0, 0x84, 0x52, 0x73,
0x61, 0x34, 0x60, 0x75, 0x4a, 0x85, 0x54, 0xfa, 0xf1, 0xff, 0x59, 0x84, 0xb5, 0x99, 0x24, 0xa9, 0x60, 0x85, 0xce, 0xd0, 0x52, 0x89, 0x32, 0x8a, 0x75, 0x91, 0x92, 0x7a, 0xce, 0x70, 0x5f, 0x26,
0x27, 0x47, 0x1e, 0xa4, 0xa1, 0x33, 0x3a, 0xf6, 0x22, 0xfb, 0x6a, 0x46, 0xf3, 0x20, 0xed, 0x89, 0x08, 0xe1, 0x31, 0x08, 0xed, 0x53, 0x2e, 0xd7, 0x36, 0x7d, 0x18, 0x0d, 0x58, 0x9d, 0x52, 0x21,
0x14, 0x65, 0x5f, 0xe5, 0xb0, 0xa2, 0x08, 0x12, 0x0d, 0xa4, 0x91, 0x96, 0x99, 0x45, 0x1d, 0xe8, 0x95, 0x7e, 0xfc, 0x7f, 0x16, 0x61, 0x6d, 0x26, 0x49, 0xea, 0xc9, 0x91, 0x07, 0x69, 0xe8, 0x8c,
0xfd, 0xe4, 0x26, 0x36, 0x5d, 0x9d, 0x82, 0xeb, 0xa2, 0xd1, 0xd2, 0x78, 0x06, 0x16, 0xb0, 0x5f, 0x8e, 0xbd, 0xc8, 0xbe, 0x9a, 0xd1, 0x3c, 0x48, 0x7b, 0x22, 0x45, 0xd9, 0x57, 0x39, 0xac, 0x28,
0x87, 0x46, 0x44, 0xf7, 0x52, 0x6c, 0xd7, 0x54, 0x66, 0x51, 0xd3, 0x7b, 0x2f, 0xa9, 0x29, 0x61, 0x82, 0x44, 0x03, 0x69, 0xa4, 0x65, 0x66, 0x51, 0x07, 0x7a, 0x3f, 0xb9, 0x89, 0x4d, 0x57, 0xa7,
0xdc, 0x43, 0xd9, 0x69, 0x55, 0x2d, 0x19, 0x2a, 0x30, 0xaa, 0xeb, 0x1c, 0x5e, 0x57, 0x75, 0xa1, 0xe0, 0xba, 0x68, 0xb4, 0x34, 0x9e, 0x81, 0x05, 0xec, 0xd7, 0xa1, 0x11, 0xd1, 0xbd, 0x14, 0xdb,
0x18, 0x3e, 0x5b, 0x63, 0xfe, 0x95, 0xfa, 0x86, 0x86, 0xcb, 0x44, 0xb5, 0xe6, 0x2d, 0x59, 0x70, 0x35, 0x95, 0x59, 0xd4, 0xf4, 0xde, 0x4b, 0x6a, 0x4a, 0x18, 0xf7, 0x50, 0x76, 0x5a, 0x55, 0x4b,
0x94, 0xa4, 0xd7, 0x7b, 0x06, 0xab, 0x17, 0xb6, 0x13, 0xaa, 0x3e, 0x6a, 0x1a, 0x7b, 0x01, 0xeb, 0x86, 0x0a, 0x8c, 0xea, 0x3a, 0x87, 0xd7, 0x55, 0x5d, 0x28, 0x86, 0xcf, 0xd6, 0x98, 0x7f, 0xa5,
0x7b, 0xfc, 0x92, 0xfa, 0x3e, 0xa3, 0xcc, 0x09, 0xc5, 0x64, 0xf9, 0x62, 0x16, 0x18, 0xac, 0xff, 0xbe, 0xa1, 0xe1, 0x32, 0x51, 0xad, 0x79, 0x4b, 0x16, 0x1c, 0x25, 0xe9, 0xf5, 0x9e, 0xc1, 0xea,
0xe3, 0x1c, 0xd4, 0x92, 0xa5, 0x08, 0xc6, 0x22, 0x37, 0x1b, 0x25, 0x6f, 0x4a, 0x21, 0x58, 0xda, 0x85, 0xed, 0x84, 0xaa, 0x8f, 0x9a, 0xc6, 0x5e, 0xc0, 0xfa, 0x1e, 0xbf, 0xa4, 0xbe, 0xcf, 0x28,
0xfe, 0x3b, 0x24, 0x67, 0xce, 0x7a, 0x25, 0xb2, 0x29, 0x5e, 0x09, 0xdd, 0x19, 0x90, 0x7b, 0x99, 0x73, 0x42, 0x31, 0x59, 0xbe, 0x98, 0x05, 0x06, 0xeb, 0xff, 0x38, 0x07, 0xb5, 0x64, 0x29, 0x82,
0xf7, 0x35, 0xff, 0x4a, 0xde, 0xd7, 0x42, 0x9a, 0xf7, 0xf5, 0x7a, 0x97, 0xdd, 0xdc, 0x4f, 0xe4, 0xb1, 0xc8, 0xcd, 0x46, 0xc9, 0x9b, 0x52, 0x08, 0x96, 0xb6, 0xff, 0x0e, 0xc9, 0x99, 0xb3, 0x5e,
0xb2, 0x9b, 0x7f, 0xa1, 0xcb, 0x4e, 0x73, 0x34, 0x16, 0xaf, 0x31, 0xe1, 0x6b, 0xae, 0xc7, 0x14, 0x89, 0x6c, 0x8a, 0x57, 0x42, 0x77, 0x06, 0xe4, 0x5e, 0xe6, 0x7d, 0xcd, 0xbf, 0x92, 0xf7, 0xb5,
0x97, 0x5d, 0xe9, 0x2b, 0xb8, 0xec, 0xd6, 0xff, 0x32, 0x03, 0x6c, 0x76, 0x75, 0xb0, 0xa7, 0xe4, 0x90, 0xe6, 0x7d, 0xbd, 0xde, 0x65, 0x37, 0xf7, 0x13, 0xb9, 0xec, 0xe6, 0x5f, 0xe8, 0xb2, 0xd3,
0xf0, 0x71, 0xf9, 0x50, 0x72, 0xee, 0xaf, 0xbf, 0xda, 0x0a, 0x53, 0x04, 0xa1, 0x72, 0xb3, 0x87, 0x1c, 0x8d, 0xc5, 0x6b, 0x4c, 0xf8, 0x9a, 0xeb, 0x31, 0xc5, 0x65, 0x57, 0xfa, 0x0a, 0x2e, 0xbb,
0xb0, 0xa4, 0x47, 0xca, 0xeb, 0x5a, 0x7b, 0xd5, 0x64, 0x7a, 0x52, 0x6c, 0xdb, 0xd1, 0x5c, 0xdd, 0xf5, 0xbf, 0xcc, 0x00, 0x9b, 0x5d, 0x1d, 0xec, 0x29, 0x39, 0x7c, 0x5c, 0x3e, 0x94, 0x9c, 0xfb,
0xf9, 0x97, 0xba, 0xba, 0x0b, 0x2f, 0x75, 0x75, 0xcf, 0x25, 0x5d, 0xdd, 0xeb, 0xff, 0x31, 0x03, 0xeb, 0xaf, 0xb6, 0xc2, 0x14, 0x41, 0xa8, 0xdc, 0xec, 0x21, 0x2c, 0xe9, 0xb1, 0xf6, 0xba, 0xd6,
0x4b, 0x29, 0x44, 0xfc, 0xb3, 0xeb, 0xb3, 0xa0, 0xbd, 0x04, 0x5b, 0xcb, 0x4a, 0xda, 0xd3, 0x39, 0x5e, 0x35, 0x99, 0x9e, 0x14, 0xdb, 0x76, 0x34, 0x57, 0x77, 0xfe, 0xa5, 0xae, 0xee, 0xc2, 0x4b,
0xda, 0x9e, 0xb2, 0x07, 0x8a, 0xa9, 0x50, 0x27, 0x49, 0x1e, 0xbc, 0x8c, 0xbb, 0xc4, 0x39, 0x4c, 0x5d, 0xdd, 0x73, 0x49, 0x57, 0xf7, 0xfa, 0x7f, 0xcc, 0xc0, 0x52, 0x0a, 0x11, 0xff, 0xec, 0xfa,
0x3d, 0xfb, 0xfa, 0xef, 0x67, 0xa1, 0xac, 0x25, 0x8a, 0x51, 0x24, 0x92, 0xd5, 0x22, 0x8c, 0x48, 0x2c, 0x68, 0x2f, 0xc1, 0xd6, 0xb2, 0x92, 0xf6, 0x74, 0x8e, 0xb6, 0xa7, 0xec, 0x81, 0x62, 0x2a,
0x32, 0x44, 0x9b, 0xc3, 0x1d, 0x90, 0x5e, 0x0f, 0x4a, 0xa7, 0xc5, 0x25, 0xc5, 0x40, 0x44, 0xd8, 0xd4, 0x59, 0x94, 0x07, 0x2f, 0xe3, 0x2e, 0x71, 0x0e, 0x53, 0xcf, 0xbe, 0xfe, 0xfb, 0x59, 0x28,
0x80, 0x25, 0xe5, 0x8c, 0xe3, 0x71, 0x20, 0xa1, 0xdc, 0x6b, 0x16, 0xa5, 0x4b, 0x8e, 0x47, 0x71, 0x6b, 0x89, 0x62, 0x14, 0x89, 0x64, 0xb5, 0x08, 0x23, 0x92, 0x0c, 0xd1, 0xe6, 0x70, 0x07, 0xa4,
0x89, 0xec, 0xa1, 0x52, 0x07, 0xe3, 0xb9, 0x43, 0x52, 0x27, 0x97, 0xc2, 0x22, 0x2d, 0x10, 0x35, 0xd7, 0x83, 0xd2, 0x69, 0x71, 0x49, 0x31, 0x10, 0x11, 0x36, 0x60, 0x49, 0x39, 0xe3, 0x78, 0x1c,
0x89, 0x82, 0xce, 0xdf, 0x87, 0x15, 0xb5, 0x3c, 0x92, 0x39, 0xc8, 0xcb, 0xc0, 0xe4, 0xe2, 0xd0, 0x48, 0x28, 0xf7, 0x9a, 0x45, 0xe9, 0x92, 0xe3, 0x51, 0x5c, 0x22, 0x7b, 0xa8, 0xd4, 0xc1, 0x78,
0xb3, 0x7c, 0x17, 0x6e, 0x4f, 0xb5, 0x69, 0x2a, 0x2b, 0x45, 0xbc, 0xde, 0x4c, 0xb4, 0x4e, 0x2f, 0xee, 0x90, 0xd4, 0xc9, 0xa5, 0xb0, 0x48, 0x0b, 0x44, 0x4d, 0xa2, 0xa0, 0xf3, 0xf7, 0x61, 0x45,
0x61, 0xfd, 0x47, 0x50, 0x4d, 0x30, 0xca, 0x9f, 0xdd, 0x94, 0x4f, 0xdb, 0x79, 0x68, 0x44, 0x75, 0x2d, 0x8f, 0x64, 0x0e, 0xf2, 0x32, 0x30, 0xb9, 0x38, 0xf4, 0x2c, 0xdf, 0x85, 0xdb, 0x53, 0x6d,
0x3b, 0xcf, 0xfa, 0xff, 0xca, 0x01, 0x9b, 0xe5, 0xd5, 0x3f, 0xcf, 0x26, 0xcc, 0x12, 0x66, 0x2e, 0x9a, 0xca, 0x4a, 0x11, 0xaf, 0x37, 0x13, 0xad, 0xd3, 0x4b, 0x58, 0xff, 0x11, 0x54, 0x13, 0x8c,
0x85, 0x30, 0xff, 0x9f, 0xc9, 0x0f, 0xef, 0xc2, 0xa2, 0x3c, 0x51, 0xa5, 0x79, 0x54, 0x69, 0x71, 0xf2, 0x67, 0x37, 0xe5, 0xd3, 0x76, 0x1e, 0x1a, 0x51, 0xdd, 0xce, 0xb3, 0xfe, 0xbf, 0x72, 0xc0,
0xd6, 0xa3, 0x04, 0xd5, 0x8a, 0x0f, 0xa7, 0x23, 0x3b, 0x8a, 0x89, 0x43, 0x24, 0x9a, 0x00, 0x35, 0x66, 0x79, 0xf5, 0xcf, 0xb3, 0x09, 0xb3, 0x84, 0x99, 0x4b, 0x21, 0xcc, 0xff, 0x67, 0xf2, 0xc3,
0x15, 0xe0, 0x71, 0x04, 0x73, 0xb6, 0xdb, 0x3f, 0xf3, 0x7c, 0xc9, 0x07, 0x7f, 0xe1, 0x2b, 0x6f, 0xbb, 0xb0, 0x28, 0xcf, 0x64, 0x69, 0x1e, 0x55, 0x5a, 0x9c, 0xf5, 0x28, 0x41, 0xb5, 0xe2, 0xc3,
0x9f, 0x1b, 0x4d, 0xcc, 0x8f, 0x52, 0x9b, 0x29, 0x0b, 0x33, 0xde, 0x87, 0xb2, 0x06, 0x66, 0x25, 0xe9, 0xc8, 0x8e, 0x62, 0xe2, 0x10, 0x89, 0x26, 0x40, 0x4d, 0x05, 0x78, 0x1c, 0xc1, 0x9c, 0xed,
0x28, 0xec, 0xb5, 0xf7, 0x37, 0x0f, 0xea, 0x37, 0x58, 0x15, 0x4a, 0x66, 0x6b, 0xeb, 0xe0, 0xd3, 0xf6, 0xcf, 0x3c, 0x5f, 0xf2, 0xc1, 0x5f, 0xf8, 0xca, 0xdb, 0xe7, 0x46, 0x13, 0xf3, 0xa3, 0xd4,
0x96, 0xd9, 0xda, 0xae, 0x67, 0x58, 0x11, 0xf2, 0x7b, 0x07, 0xdd, 0x5e, 0x3d, 0x6b, 0xac, 0x43, 0x66, 0xca, 0xc2, 0x8c, 0xf7, 0xa1, 0xac, 0x81, 0x59, 0x09, 0x0a, 0x7b, 0xed, 0xfd, 0xcd, 0x83,
0x43, 0x96, 0x38, 0xeb, 0xd4, 0xf8, 0xed, 0x7c, 0x64, 0x2e, 0xc4, 0x44, 0xa9, 0xa2, 0x7f, 0x03, 0xfa, 0x0d, 0x56, 0x85, 0x92, 0xd9, 0xda, 0x3a, 0xf8, 0xb4, 0x65, 0xb6, 0xb6, 0xeb, 0x19, 0x56,
0x2a, 0xba, 0x78, 0x23, 0x29, 0x62, 0xca, 0xa9, 0x2f, 0x94, 0x73, 0x4f, 0xe3, 0xd5, 0x5b, 0x40, 0x84, 0xfc, 0xde, 0x41, 0xb7, 0x57, 0xcf, 0x1a, 0xeb, 0xd0, 0x90, 0x25, 0xce, 0x3a, 0x35, 0x7e,
0x2e, 0xdd, 0x41, 0x94, 0x2d, 0x9b, 0x90, 0x5b, 0x53, 0xdc, 0x87, 0xa8, 0xfc, 0x24, 0xc8, 0xf0, 0x3b, 0x1f, 0x99, 0x0b, 0x31, 0x51, 0xaa, 0xe8, 0xdf, 0x80, 0x8a, 0x2e, 0xde, 0x48, 0x8a, 0x98,
0xff, 0x83, 0x5a, 0xd2, 0x80, 0x2f, 0x39, 0x52, 0x9a, 0xc2, 0x29, 0x72, 0x27, 0x2c, 0xfa, 0xec, 0x72, 0xea, 0x0b, 0xe5, 0xdc, 0xd3, 0x78, 0xf5, 0x16, 0x90, 0x4b, 0x77, 0x10, 0x65, 0xcb, 0x26,
0xbb, 0x50, 0x9f, 0x76, 0x00, 0x48, 0xe1, 0xf9, 0x9a, 0xfc, 0x0b, 0x4e, 0xd2, 0x27, 0xc0, 0x76, 0xe4, 0xd6, 0x14, 0xf7, 0x21, 0x2a, 0x3f, 0x09, 0x32, 0xfc, 0xff, 0xa0, 0x96, 0x34, 0xe0, 0x4b,
0x61, 0x39, 0x4d, 0xc0, 0x43, 0xfa, 0xb8, 0xde, 0x48, 0xc1, 0x66, 0x85, 0x38, 0xf6, 0x2d, 0xe9, 0x8e, 0x94, 0xa6, 0x70, 0x8a, 0xdc, 0x09, 0x8b, 0x3e, 0xfb, 0x2e, 0xd4, 0xa7, 0x1d, 0x00, 0x52,
0x08, 0x2a, 0xe0, 0xf4, 0xbf, 0x95, 0xac, 0x5f, 0x1b, 0xec, 0x0d, 0xfa, 0xa7, 0xb9, 0x84, 0xce, 0x78, 0xbe, 0x26, 0xff, 0x82, 0x93, 0xf4, 0x09, 0xb0, 0x5d, 0x58, 0x4e, 0x13, 0xf0, 0x90, 0x3e,
0x01, 0x62, 0x18, 0xab, 0x43, 0xe5, 0xe0, 0xb0, 0xd5, 0xb1, 0xb6, 0x76, 0x9b, 0x9d, 0x4e, 0x6b, 0xae, 0x37, 0x52, 0xb0, 0x59, 0x21, 0x8e, 0x7d, 0x4b, 0x3a, 0x82, 0x0a, 0x38, 0xfd, 0x6f, 0x25,
0xaf, 0x7e, 0x83, 0x31, 0xa8, 0xa1, 0x33, 0x7b, 0x3b, 0x82, 0x65, 0x04, 0x4c, 0x3a, 0xe4, 0x14, 0xeb, 0xd7, 0x06, 0x7b, 0x83, 0xfe, 0x69, 0x2e, 0xa1, 0x73, 0x80, 0x18, 0xc6, 0xea, 0x50, 0x39,
0x2c, 0xcb, 0x96, 0xa1, 0xde, 0xee, 0x4c, 0x41, 0x73, 0xac, 0x01, 0xcb, 0x87, 0x2d, 0xf2, 0x7f, 0x38, 0x6c, 0x75, 0xac, 0xad, 0xdd, 0x66, 0xa7, 0xd3, 0xda, 0xab, 0xdf, 0x60, 0x0c, 0x6a, 0xe8,
0x27, 0xca, 0xcd, 0x0b, 0xa5, 0x41, 0x76, 0x57, 0x28, 0x0d, 0x74, 0x32, 0x50, 0xae, 0x03, 0x25, 0xcc, 0xde, 0x8e, 0x60, 0x19, 0x01, 0x93, 0x0e, 0x39, 0x05, 0xcb, 0xb2, 0x65, 0xa8, 0xb7, 0x3b,
0x4b, 0xff, 0x4e, 0x06, 0x56, 0xa6, 0x12, 0xe2, 0xf3, 0x1e, 0x24, 0x49, 0x27, 0x65, 0xe8, 0x0a, 0x53, 0xd0, 0x1c, 0x6b, 0xc0, 0xf2, 0x61, 0x8b, 0xfc, 0xdf, 0x89, 0x72, 0xf3, 0x42, 0x69, 0x90,
0x02, 0xd5, 0x6a, 0x7a, 0x17, 0x16, 0x23, 0xc3, 0xd3, 0xd4, 0xae, 0x54, 0x8f, 0x12, 0x14, 0xf2, 0xdd, 0x15, 0x4a, 0x03, 0x9d, 0x2d, 0x94, 0xeb, 0x40, 0xc9, 0xd2, 0xbf, 0x93, 0x81, 0x95, 0xa9,
0x43, 0x58, 0xd2, 0xec, 0x57, 0x53, 0xbc, 0x82, 0x69, 0x49, 0x32, 0x83, 0xb1, 0x16, 0xc5, 0xd5, 0x84, 0xf8, 0xbc, 0x07, 0x49, 0xd2, 0x49, 0x19, 0xba, 0x82, 0x40, 0xb5, 0x9a, 0xde, 0x85, 0xc5,
0x4f, 0xb5, 0x7a, 0x40, 0xc7, 0x0d, 0xf5, 0x84, 0xd8, 0x4f, 0x96, 0x6c, 0xaf, 0xfa, 0x64, 0x8f, 0xc8, 0xf0, 0x34, 0xb5, 0x2b, 0xd5, 0xa3, 0x04, 0x85, 0xfc, 0x10, 0x96, 0x34, 0xfb, 0xd5, 0x14,
0xa6, 0x08, 0x21, 0xd9, 0x5a, 0x7d, 0xc2, 0x55, 0xf5, 0x7f, 0x30, 0x07, 0xec, 0x93, 0x09, 0xf7, 0xaf, 0x60, 0x5a, 0x92, 0xcc, 0x60, 0xac, 0x45, 0x71, 0xf5, 0x53, 0xad, 0x1e, 0xd0, 0x81, 0x45,
0xaf, 0xf0, 0x3c, 0x47, 0xf0, 0xb2, 0x00, 0x47, 0x65, 0x69, 0xc9, 0xbe, 0xd2, 0x99, 0xad, 0xb4, 0x3d, 0x21, 0xf6, 0x93, 0x25, 0xdb, 0xab, 0x3e, 0xd9, 0xa3, 0x29, 0x42, 0x48, 0xb6, 0x56, 0x9f,
0x33, 0x53, 0xf9, 0x97, 0x9f, 0x99, 0x2a, 0xbc, 0xec, 0xcc, 0xd4, 0x9b, 0x50, 0x75, 0x4e, 0x5d, 0x70, 0x55, 0xfd, 0x1f, 0xcc, 0x01, 0xfb, 0x64, 0xc2, 0xfd, 0x2b, 0x3c, 0xcf, 0x11, 0xbc, 0x2c,
0x4f, 0xb0, 0x42, 0x21, 0x09, 0x07, 0x8d, 0xb9, 0xbb, 0xb9, 0xfb, 0x15, 0xb3, 0x22, 0x81, 0x42, 0xc0, 0x51, 0x59, 0x5a, 0xb2, 0xaf, 0x74, 0x66, 0x2b, 0xed, 0xcc, 0x54, 0xfe, 0xe5, 0x67, 0xa6,
0x0e, 0x0e, 0xd8, 0xc7, 0x31, 0x12, 0x1f, 0x9c, 0xe2, 0xf9, 0x3e, 0x9d, 0x09, 0xb6, 0x06, 0xa7, 0x0a, 0x2f, 0x3b, 0x33, 0xf5, 0x26, 0x54, 0x9d, 0x53, 0xd7, 0x13, 0xac, 0x50, 0x48, 0xc2, 0x41,
0x5c, 0x1a, 0x96, 0x50, 0xd3, 0x50, 0x99, 0x05, 0x3c, 0x60, 0x6f, 0x41, 0x2d, 0xf0, 0x26, 0x42, 0x63, 0xee, 0x6e, 0xee, 0x7e, 0xc5, 0xac, 0x48, 0xa0, 0x90, 0x83, 0x03, 0xf6, 0x71, 0x8c, 0xc4,
0xb1, 0x50, 0xc3, 0x40, 0x8e, 0xb2, 0x0a, 0x41, 0x0f, 0x95, 0xdb, 0x74, 0x69, 0x12, 0x70, 0x6b, 0x07, 0xa7, 0x78, 0x42, 0x50, 0x67, 0x82, 0xad, 0xc1, 0x29, 0x97, 0x86, 0x25, 0xd4, 0x34, 0x54,
0xe4, 0x04, 0x81, 0x10, 0xcf, 0xfa, 0x9e, 0x1b, 0xfa, 0xde, 0x50, 0xfa, 0xbe, 0x16, 0x27, 0x01, 0x66, 0x01, 0x0f, 0xd8, 0x5b, 0x50, 0x0b, 0xbc, 0x89, 0x50, 0x2c, 0xd4, 0x30, 0x90, 0xa3, 0xac,
0xdf, 0xa7, 0x94, 0x2d, 0x4a, 0x60, 0xdf, 0x8c, 0x9b, 0x34, 0xb6, 0x1d, 0x3f, 0x68, 0x00, 0x36, 0x42, 0xd0, 0x43, 0xe5, 0x36, 0x5d, 0x9a, 0x04, 0xdc, 0x1a, 0x39, 0x41, 0x20, 0xc4, 0xb3, 0xbe,
0x49, 0xf5, 0x14, 0xe5, 0x77, 0xdb, 0xf1, 0xa3, 0xb6, 0x88, 0x8f, 0x60, 0xea, 0x2c, 0x57, 0x79, 0xe7, 0x86, 0xbe, 0x37, 0x94, 0xbe, 0xaf, 0xc5, 0x49, 0xc0, 0xf7, 0x29, 0x65, 0x8b, 0x12, 0xd8,
0xfa, 0x2c, 0xd7, 0x0f, 0xd2, 0xcf, 0x72, 0x55, 0xb1, 0xe8, 0x47, 0xb2, 0xe8, 0xd9, 0x29, 0xfe, 0x37, 0xe3, 0x26, 0x8d, 0x6d, 0xc7, 0x0f, 0x1a, 0x80, 0x4d, 0x52, 0x3d, 0x45, 0xf9, 0xdd, 0x76,
0x4a, 0x47, 0xba, 0x66, 0x8f, 0xa8, 0xd5, 0xbe, 0xca, 0x11, 0xb5, 0x85, 0xb4, 0x23, 0x6a, 0xef, 0xfc, 0xa8, 0x2d, 0xe2, 0x23, 0x98, 0x3a, 0xcb, 0x55, 0x9e, 0x3e, 0xcb, 0xf5, 0x83, 0xf4, 0xb3,
0x43, 0x19, 0x0f, 0x0f, 0x59, 0x67, 0x8e, 0x90, 0xe1, 0xc8, 0x97, 0x57, 0xd7, 0x4f, 0x17, 0xed, 0x5c, 0x55, 0x2c, 0xfa, 0x91, 0x2c, 0x7a, 0x76, 0x8a, 0xbf, 0xd2, 0x91, 0xae, 0xd9, 0x23, 0x6a,
0x3a, 0x6e, 0x68, 0x82, 0xaf, 0x7e, 0x06, 0xb3, 0xa7, 0xc5, 0x16, 0x7f, 0x8e, 0xa7, 0xc5, 0xe4, 0xb5, 0xaf, 0x72, 0x44, 0x6d, 0x21, 0xed, 0x88, 0xda, 0xfb, 0x50, 0xc6, 0xc3, 0x43, 0xd6, 0x99,
0x21, 0xa7, 0x0d, 0x28, 0xaa, 0x79, 0x62, 0x0c, 0xf2, 0x27, 0xbe, 0x37, 0x52, 0x3e, 0x0e, 0xf1, 0x23, 0x64, 0x38, 0xf2, 0xe5, 0xd5, 0xf5, 0xd3, 0x45, 0xbb, 0x8e, 0x1b, 0x9a, 0xe0, 0xab, 0x9f,
0x9b, 0xd5, 0x20, 0x1b, 0x7a, 0x32, 0x73, 0x36, 0xf4, 0x8c, 0x5f, 0x85, 0xb2, 0x46, 0x6a, 0xec, 0xc1, 0xec, 0x69, 0xb1, 0xc5, 0x9f, 0xe3, 0x69, 0x31, 0x79, 0xc8, 0x69, 0x03, 0x8a, 0x6a, 0x9e,
0x0d, 0xb2, 0x4b, 0x0a, 0xdd, 0x4c, 0xca, 0x96, 0x34, 0x8a, 0x25, 0x09, 0x6d, 0x0f, 0x04, 0xbf, 0x18, 0x83, 0xfc, 0x89, 0xef, 0x8d, 0x94, 0x8f, 0x43, 0xfc, 0x66, 0x35, 0xc8, 0x86, 0x9e, 0xcc,
0x19, 0x38, 0x3e, 0xc7, 0x73, 0x9d, 0x96, 0xcf, 0xcf, 0xb9, 0x1f, 0x28, 0x9f, 0x53, 0x3d, 0x4a, 0x9c, 0x0d, 0x3d, 0xe3, 0x57, 0xa1, 0xac, 0x91, 0x1a, 0x7b, 0x83, 0xec, 0x92, 0x42, 0x37, 0x93,
0x30, 0x09, 0x6e, 0xfc, 0x1a, 0x2c, 0x25, 0xe6, 0x56, 0xb2, 0x88, 0xb7, 0x60, 0x0e, 0xc7, 0x4d, 0xb2, 0x25, 0x8d, 0x62, 0x49, 0x42, 0xdb, 0x03, 0xc1, 0x6f, 0x06, 0x8e, 0xcf, 0xf1, 0x5c, 0xa7,
0x05, 0x0d, 0x24, 0x4f, 0x6d, 0xc9, 0x34, 0x3c, 0xb0, 0x4f, 0xee, 0x32, 0x6b, 0xec, 0x7b, 0xc7, 0xe5, 0xf3, 0x73, 0xee, 0x07, 0xca, 0xe7, 0x54, 0x8f, 0x12, 0x4c, 0x82, 0x1b, 0xbf, 0x06, 0x4b,
0x58, 0x49, 0xc6, 0x2c, 0x4b, 0xd8, 0xa1, 0xef, 0x1d, 0x1b, 0x7f, 0x96, 0x83, 0xdc, 0xae, 0x37, 0x89, 0xb9, 0x95, 0x2c, 0xe2, 0x2d, 0x98, 0xc3, 0x71, 0x53, 0x41, 0x03, 0xc9, 0x53, 0x5b, 0x32,
0xd6, 0x83, 0xd8, 0x32, 0x33, 0x41, 0x6c, 0x52, 0xe1, 0xb4, 0x22, 0x85, 0x52, 0xca, 0xec, 0xe8, 0x0d, 0xcf, 0xb0, 0x92, 0xbb, 0xcc, 0x1a, 0xfb, 0xde, 0x31, 0x56, 0x92, 0x31, 0xcb, 0x12, 0x76,
0x28, 0x52, 0x4a, 0xe5, 0x7d, 0xa8, 0x09, 0x3e, 0x11, 0x7a, 0x42, 0x63, 0xbf, 0xb0, 0x7d, 0x12, 0xe8, 0x7b, 0xc7, 0xc6, 0x9f, 0xe5, 0x20, 0xb7, 0xeb, 0x8d, 0xf5, 0x20, 0xb6, 0xcc, 0x4c, 0x10,
0x88, 0x73, 0xb4, 0xf8, 0xec, 0x51, 0xd8, 0xf3, 0x76, 0x08, 0xce, 0x96, 0x21, 0x17, 0xa9, 0x2f, 0x9b, 0x54, 0x38, 0xad, 0x48, 0xa1, 0x94, 0x32, 0x3b, 0x3a, 0x8a, 0x94, 0x52, 0x79, 0x1f, 0x6a,
0x98, 0x2c, 0x3e, 0xd9, 0x2a, 0xcc, 0x61, 0x34, 0xf3, 0x95, 0x74, 0x7a, 0xcb, 0x2f, 0xf6, 0x75, 0x82, 0x4f, 0x84, 0x9e, 0xd0, 0xd8, 0x2f, 0x6c, 0x9f, 0x04, 0xe2, 0x1c, 0x2d, 0x3e, 0x7b, 0x14,
0x58, 0x4a, 0x96, 0x4b, 0xac, 0x48, 0xca, 0x46, 0x7a, 0xc1, 0xc8, 0x93, 0x6e, 0x82, 0xe0, 0x23, 0xf6, 0xbc, 0x1d, 0x82, 0xb3, 0x65, 0xc8, 0x45, 0xea, 0x0b, 0x26, 0x8b, 0x4f, 0xb6, 0x0a, 0x73,
0x84, 0x23, 0x83, 0x6b, 0x4e, 0x38, 0xc7, 0x24, 0x8d, 0xe9, 0x15, 0x13, 0x4c, 0xef, 0x0e, 0x94, 0x18, 0xcd, 0x7c, 0x25, 0x9d, 0xde, 0xf2, 0x8b, 0x7d, 0x1d, 0x96, 0x92, 0xe5, 0x12, 0x2b, 0x92,
0xc3, 0xe1, 0xb9, 0x35, 0xb6, 0xaf, 0x86, 0x9e, 0x3d, 0x90, 0xeb, 0x1b, 0xc2, 0xe1, 0xf9, 0x21, 0xb2, 0x91, 0x5e, 0x30, 0xf2, 0xa4, 0x9b, 0x20, 0xf8, 0x08, 0xe1, 0xc8, 0xe0, 0x9a, 0x13, 0xce,
0x41, 0xd8, 0x43, 0x80, 0xd1, 0x78, 0x2c, 0xd7, 0x1e, 0x3a, 0x3f, 0x62, 0x52, 0xde, 0x3f, 0x3c, 0x31, 0x49, 0x63, 0x7a, 0xc5, 0x04, 0xd3, 0xbb, 0x03, 0xe5, 0x70, 0x78, 0x6e, 0x8d, 0xed, 0xab,
0x24, 0x92, 0x33, 0x4b, 0xa3, 0xf1, 0x98, 0x7e, 0xb2, 0x6d, 0xa8, 0xa5, 0x9e, 0xbd, 0xbc, 0xad, 0xa1, 0x67, 0x0f, 0xe4, 0xfa, 0x86, 0x70, 0x78, 0x7e, 0x48, 0x10, 0xf6, 0x10, 0x60, 0x34, 0x1e,
0x82, 0x6f, 0xbd, 0xf1, 0x46, 0xca, 0xe2, 0xac, 0xf6, 0x75, 0xd8, 0xfa, 0x77, 0x81, 0xfd, 0x94, 0xcb, 0xb5, 0x87, 0xce, 0x8f, 0x98, 0x94, 0xf7, 0x0f, 0x0f, 0x89, 0xe4, 0xcc, 0xd2, 0x68, 0x3c,
0x27, 0x20, 0x7b, 0x50, 0x8a, 0xda, 0xa7, 0x1f, 0x20, 0xc4, 0x70, 0xfa, 0x72, 0xe2, 0x00, 0x61, 0xa6, 0x9f, 0x6c, 0x1b, 0x6a, 0xa9, 0x67, 0x2f, 0x6f, 0xab, 0xe0, 0x5b, 0x6f, 0xbc, 0x91, 0xb2,
0x73, 0x30, 0xf0, 0x05, 0x5f, 0xa4, 0x0d, 0x33, 0x62, 0xf9, 0xa0, 0xed, 0x98, 0x4d, 0xe2, 0xfb, 0x38, 0xab, 0x7d, 0x1d, 0xb6, 0xfe, 0x5d, 0x60, 0x3f, 0xe5, 0x09, 0xc8, 0x1e, 0x94, 0xa2, 0xf6,
0xc6, 0x7f, 0xcd, 0x40, 0x81, 0x4e, 0x33, 0xbe, 0x0d, 0x0b, 0x84, 0x1f, 0x05, 0x04, 0x4a, 0x57, 0xe9, 0x07, 0x08, 0x31, 0x9c, 0xbe, 0x9c, 0x38, 0x40, 0xd8, 0x1c, 0x0c, 0x7c, 0xc1, 0x17, 0x69,
0x39, 0xed, 0xbb, 0x3d, 0x19, 0x0b, 0x28, 0x96, 0x85, 0x76, 0x12, 0x3b, 0x1b, 0xcd, 0xbc, 0x76, 0xc3, 0x8c, 0x58, 0x3e, 0x68, 0x3b, 0x66, 0x93, 0xf8, 0xbe, 0xf1, 0x5f, 0x33, 0x50, 0xa0, 0xd3,
0x1a, 0xfb, 0x0e, 0x94, 0xa2, 0xaa, 0x35, 0xd2, 0x29, 0xaa, 0x9a, 0xd9, 0xeb, 0x90, 0x3f, 0xf3, 0x8c, 0x6f, 0xc3, 0x02, 0xe1, 0x47, 0x01, 0x81, 0xd2, 0x55, 0x4e, 0xfb, 0x6e, 0x4f, 0xc6, 0x02,
0xc6, 0xca, 0xf2, 0x03, 0xf1, 0x48, 0x9a, 0x08, 0x8f, 0xdb, 0x22, 0xea, 0xa0, 0xc6, 0x4b, 0x8b, 0x8a, 0x65, 0xa1, 0x9d, 0xe5, 0xce, 0x46, 0x33, 0xaf, 0x9d, 0xe7, 0xbe, 0x03, 0xa5, 0xa8, 0x6a,
0x45, 0x54, 0x09, 0x92, 0xc1, 0x6c, 0x1f, 0xe7, 0x52, 0xfa, 0x78, 0x04, 0x0b, 0x82, 0x0f, 0x68, 0x8d, 0x74, 0x8a, 0xaa, 0x66, 0xf6, 0x3a, 0xe4, 0xcf, 0xbc, 0xb1, 0xb2, 0xfc, 0x40, 0x3c, 0x92,
0x31, 0x2d, 0xd7, 0x6f, 0x9a, 0xef, 0x08, 0x09, 0xaf, 0x3f, 0x9c, 0x0c, 0xb8, 0x6e, 0x7b, 0xc3, 0x26, 0xc2, 0xe3, 0xb6, 0x88, 0x3a, 0xa8, 0xf1, 0xd2, 0x62, 0x11, 0x55, 0x82, 0x64, 0x30, 0xdb,
0x00, 0x38, 0x09, 0x57, 0x92, 0xb5, 0xf1, 0x07, 0x19, 0xe2, 0x2f, 0xa2, 0x5c, 0x76, 0x1f, 0xf2, 0xc7, 0xb9, 0x94, 0x3e, 0x1e, 0xc1, 0x82, 0xe0, 0x03, 0x5a, 0x4c, 0xcb, 0xf5, 0x9b, 0xe6, 0x3b,
0x62, 0x7f, 0x9b, 0xb2, 0xc4, 0x47, 0xe7, 0x1a, 0x04, 0x9e, 0x89, 0x18, 0x78, 0x7d, 0xc1, 0x64, 0x42, 0xc2, 0xeb, 0x0f, 0x27, 0x03, 0xae, 0xdb, 0xde, 0x30, 0x00, 0x4e, 0xc2, 0x95, 0x64, 0x6d,
0x94, 0x2c, 0xbd, 0x6a, 0x96, 0xdd, 0xc9, 0x28, 0x32, 0x5d, 0x7d, 0x4d, 0x75, 0x6b, 0xca, 0xec, 0xfc, 0x41, 0x86, 0xf8, 0x8b, 0x28, 0x97, 0xdd, 0x87, 0xbc, 0xd8, 0xdf, 0xa6, 0x2c, 0xf1, 0xd1,
0x43, 0xbd, 0x8f, 0x96, 0xe9, 0x86, 0x16, 0x49, 0x97, 0x4f, 0xec, 0x98, 0x4a, 0x0a, 0x1c, 0x9c, 0xb9, 0x06, 0x81, 0x67, 0x22, 0x06, 0x5e, 0x80, 0x30, 0x19, 0x25, 0x4b, 0xaf, 0x9a, 0x65, 0x77,
0x72, 0x2d, 0x82, 0xee, 0x8f, 0xb2, 0x50, 0x4d, 0xb4, 0x08, 0x43, 0x09, 0xc5, 0x06, 0x40, 0x8e, 0x32, 0x8a, 0x4c, 0x57, 0x5f, 0x53, 0xdd, 0x9a, 0x32, 0xfb, 0x50, 0xef, 0xa3, 0x65, 0xba, 0xa1,
0x25, 0x39, 0xdf, 0x20, 0x40, 0x52, 0x50, 0xd7, 0xc6, 0x29, 0x9b, 0x18, 0xa7, 0x28, 0x38, 0x27, 0x45, 0xd2, 0xe5, 0x13, 0x3b, 0xa6, 0x92, 0x02, 0x07, 0xa7, 0x5c, 0x8b, 0xa0, 0xfb, 0xa3, 0x2c,
0xa7, 0x07, 0xe7, 0x3c, 0x82, 0x52, 0x7c, 0x02, 0x3f, 0xd9, 0x24, 0x51, 0x9f, 0x3a, 0xdd, 0x11, 0x54, 0x13, 0x2d, 0xc2, 0x50, 0x42, 0xb1, 0x01, 0x90, 0x63, 0x49, 0xce, 0x37, 0x08, 0x90, 0x14,
0x23, 0xc5, 0xe1, 0x3c, 0x05, 0x3d, 0x9c, 0xe7, 0x3b, 0x5a, 0xf4, 0xc7, 0x1c, 0x16, 0x63, 0xa4, 0xd4, 0xb5, 0x71, 0xca, 0x26, 0xc6, 0x29, 0x0a, 0xce, 0xc9, 0xe9, 0xc1, 0x39, 0x8f, 0xa0, 0x14,
0x8d, 0xe8, 0xcf, 0x25, 0xf6, 0xc3, 0xf8, 0x18, 0xca, 0x5a, 0xe3, 0xf5, 0x28, 0x8f, 0x4c, 0x22, 0x9f, 0xe1, 0x4f, 0x36, 0x49, 0xd4, 0xa7, 0x4e, 0x77, 0xc4, 0x48, 0x71, 0x38, 0x4f, 0x41, 0x0f,
0xca, 0x23, 0x3a, 0x87, 0x95, 0x8d, 0xcf, 0x61, 0x19, 0x7f, 0x3d, 0x0b, 0x55, 0xb1, 0xbe, 0x1c, 0xe7, 0xf9, 0x8e, 0x16, 0xfd, 0x31, 0x87, 0xc5, 0x18, 0x69, 0x23, 0xfa, 0x73, 0x89, 0xfd, 0x30,
0xf7, 0xf4, 0xd0, 0x1b, 0x3a, 0x7d, 0x74, 0x34, 0x45, 0x2b, 0x4c, 0x0a, 0x5a, 0x6a, 0x9d, 0xc9, 0x3e, 0x86, 0xb2, 0xd6, 0x78, 0x3d, 0xca, 0x23, 0x93, 0x88, 0xf2, 0x88, 0xce, 0x61, 0x65, 0xe3,
0x25, 0x46, 0x72, 0x96, 0x7e, 0xdc, 0x94, 0x98, 0x74, 0x74, 0xdc, 0xd4, 0x80, 0xaa, 0x60, 0x8c, 0x73, 0x58, 0xc6, 0x5f, 0xcf, 0x42, 0x55, 0xac, 0x2f, 0xc7, 0x3d, 0x3d, 0xf4, 0x86, 0x4e, 0x1f,
0xe8, 0x32, 0x8a, 0xef, 0x07, 0x30, 0xcb, 0x27, 0x9c, 0x6f, 0xda, 0x01, 0x71, 0xc8, 0xaf, 0xc3, 0x1d, 0x4d, 0xd1, 0x0a, 0x93, 0x82, 0x96, 0x5a, 0x67, 0x72, 0x89, 0x91, 0x9c, 0xa5, 0x1f, 0x37,
0x92, 0xc0, 0xc1, 0x93, 0x76, 0x23, 0x67, 0x38, 0x74, 0x08, 0x93, 0x0c, 0x4d, 0xf5, 0x13, 0xce, 0x25, 0x26, 0x1d, 0x1d, 0x37, 0x35, 0xa0, 0x2a, 0x18, 0x23, 0xba, 0x8c, 0xe2, 0xfb, 0x01, 0xcc,
0x4d, 0x3b, 0xe4, 0xfb, 0x22, 0x41, 0x5e, 0x27, 0x50, 0x1c, 0x38, 0x81, 0x7d, 0x1c, 0x07, 0x7c, 0xf2, 0x09, 0xe7, 0x9b, 0x76, 0x40, 0x1c, 0xf2, 0xeb, 0xb0, 0x24, 0x70, 0xf0, 0xa4, 0xdd, 0xc8,
0x46, 0xdf, 0xe8, 0x59, 0xb6, 0x2f, 0x35, 0xcf, 0x32, 0x19, 0x20, 0xca, 0x23, 0xfb, 0x32, 0xf2, 0x19, 0x0e, 0x1d, 0xc2, 0x24, 0x43, 0x53, 0xfd, 0x84, 0x73, 0xd3, 0x0e, 0xf9, 0xbe, 0x48, 0x90,
0x2c, 0x4f, 0x51, 0xd2, 0xfc, 0x34, 0x25, 0x19, 0xff, 0x26, 0x0b, 0x65, 0x8d, 0x2c, 0x5f, 0x65, 0xd7, 0x09, 0x14, 0x07, 0x4e, 0x60, 0x1f, 0xc7, 0x01, 0x9f, 0xd1, 0x37, 0x7a, 0x96, 0xed, 0x4b,
0x77, 0xbd, 0x3d, 0xe3, 0x18, 0x2c, 0xe9, 0x3e, 0xc0, 0x37, 0x93, 0x55, 0x62, 0xec, 0x0b, 0x5d, 0xcd, 0xb3, 0x4c, 0x06, 0x88, 0xf2, 0xc8, 0xbe, 0x8c, 0x3c, 0xcb, 0x53, 0x94, 0x34, 0x3f, 0x4d,
0x5c, 0xa0, 0x11, 0xf0, 0x2d, 0x28, 0x89, 0x55, 0xf7, 0x3e, 0x9a, 0x60, 0xe5, 0xb5, 0x1b, 0x08, 0x49, 0xc6, 0xbf, 0xc9, 0x42, 0x59, 0x23, 0xcb, 0x57, 0xd9, 0x5d, 0x6f, 0xcf, 0x38, 0x06, 0x4b,
0x38, 0x9c, 0x1c, 0xab, 0xc4, 0xc7, 0x98, 0x58, 0x88, 0x13, 0x1f, 0x8b, 0xc4, 0x17, 0x85, 0x60, 0xba, 0x0f, 0xf0, 0xcd, 0x64, 0x95, 0x18, 0xfb, 0x42, 0x17, 0x17, 0x68, 0x04, 0x7c, 0x0b, 0x4a,
0x7f, 0x08, 0x15, 0x59, 0x2a, 0xce, 0x29, 0x76, 0x37, 0x5e, 0xf5, 0x89, 0xf9, 0x36, 0xcb, 0x54, 0x62, 0xd5, 0xbd, 0x8f, 0x26, 0x58, 0x79, 0x71, 0x07, 0x02, 0x0e, 0x27, 0xc7, 0x2a, 0xf1, 0x31,
0x1d, 0x4d, 0xbe, 0xcc, 0xf8, 0x58, 0x65, 0x2c, 0xbe, 0x2c, 0xe3, 0x63, 0xfa, 0x30, 0x76, 0xa2, 0x26, 0x16, 0xe2, 0xc4, 0xc7, 0x22, 0xf1, 0x45, 0x21, 0xd8, 0x1f, 0x42, 0x45, 0x96, 0x8a, 0x73,
0xa8, 0x76, 0x8c, 0xbb, 0x52, 0x7c, 0xec, 0x21, 0x2c, 0x29, 0x76, 0x35, 0x71, 0x6d, 0xd7, 0xf5, 0x8a, 0xdd, 0x8d, 0x57, 0x7d, 0x62, 0xbe, 0xcd, 0x32, 0x55, 0x47, 0x93, 0x2f, 0x33, 0x3e, 0x56,
0x26, 0x6e, 0x9f, 0xab, 0x03, 0x5a, 0x4c, 0x26, 0x1d, 0xc5, 0x29, 0xc6, 0x20, 0x3a, 0xc1, 0x4b, 0x19, 0x8b, 0x2f, 0xcb, 0xf8, 0x98, 0x3e, 0x8c, 0x9d, 0x28, 0xaa, 0x1d, 0xe3, 0xae, 0x14, 0x1f,
0xf1, 0x5b, 0x0f, 0xa0, 0x40, 0x72, 0x39, 0x09, 0x1f, 0xe9, 0x8c, 0x8b, 0x50, 0xd8, 0x7d, 0x28, 0x7b, 0x08, 0x4b, 0x8a, 0x5d, 0x4d, 0x5c, 0xdb, 0x75, 0xbd, 0x89, 0xdb, 0xe7, 0xea, 0x80, 0x16,
0x90, 0x78, 0x9e, 0xbd, 0x96, 0xd9, 0x10, 0x82, 0xd1, 0x04, 0x26, 0x32, 0xee, 0xf3, 0xd0, 0x77, 0x93, 0x49, 0x47, 0x71, 0x8a, 0x31, 0x88, 0x4e, 0xf0, 0x52, 0xfc, 0xd6, 0x03, 0x28, 0x90, 0x5c,
0xfa, 0x41, 0x7c, 0xf6, 0xab, 0x20, 0xf4, 0x4f, 0xaa, 0x2b, 0xb6, 0xdc, 0xc6, 0x98, 0xa8, 0xa3, 0x4e, 0xc2, 0x47, 0x3a, 0xe3, 0x22, 0x14, 0x76, 0x1f, 0x0a, 0x24, 0x9e, 0x67, 0xaf, 0x65, 0x36,
0x12, 0x8e, 0xd8, 0x98, 0x96, 0x12, 0x65, 0x48, 0x71, 0x69, 0x08, 0xab, 0xc7, 0x3c, 0xbc, 0xe0, 0x84, 0x60, 0x34, 0x81, 0x89, 0x8c, 0xfb, 0x3c, 0xf4, 0x9d, 0x7e, 0x10, 0x9f, 0xfd, 0x2a, 0x08,
0xdc, 0x75, 0x85, 0x30, 0xd4, 0xe7, 0x6e, 0xe8, 0xdb, 0x43, 0x31, 0x49, 0xd4, 0x83, 0x27, 0x33, 0xfd, 0x93, 0xea, 0x8a, 0x2d, 0xb7, 0x31, 0x26, 0xea, 0xa8, 0x84, 0x23, 0x36, 0xa6, 0xa5, 0x44,
0xa5, 0xc6, 0x36, 0x90, 0xcd, 0x38, 0xe3, 0x56, 0x94, 0x8f, 0x78, 0xc7, 0xca, 0x71, 0x5a, 0xda, 0x19, 0x52, 0x5c, 0x1a, 0xc2, 0xea, 0x31, 0x0f, 0x2f, 0x38, 0x77, 0x5d, 0x21, 0x0c, 0xf5, 0xb9,
0xfa, 0xaf, 0xc0, 0xfa, 0xf5, 0x99, 0x52, 0x4e, 0x78, 0xde, 0x4f, 0x72, 0x95, 0xc8, 0x0f, 0x38, 0x1b, 0xfa, 0xf6, 0x50, 0x4c, 0x12, 0xf5, 0xe0, 0xc9, 0x4c, 0xa9, 0xb1, 0x0d, 0x64, 0x33, 0xce,
0xf4, 0xec, 0x90, 0x5a, 0xa3, 0x73, 0x96, 0x0e, 0x94, 0xb5, 0x94, 0x78, 0xef, 0xcf, 0xa0, 0x70, 0xb8, 0x15, 0xe5, 0x23, 0xde, 0xb1, 0x72, 0x9c, 0x96, 0xb6, 0xfe, 0x2b, 0xb0, 0x7e, 0x7d, 0xa6,
0x47, 0x1f, 0x62, 0x47, 0x72, 0x3d, 0x7f, 0x84, 0x7e, 0xb7, 0x81, 0x15, 0x97, 0x9e, 0x31, 0x17, 0x94, 0x13, 0x9e, 0xf7, 0x93, 0x5c, 0x25, 0xf2, 0x03, 0x0e, 0x3d, 0x3b, 0xa4, 0xd6, 0xe8, 0x9c,
0x62, 0x38, 0x1e, 0x69, 0x37, 0x36, 0x60, 0x01, 0x25, 0x7b, 0x6d, 0xa3, 0x7b, 0x91, 0x30, 0x68, 0xa5, 0x03, 0x65, 0x2d, 0x25, 0xde, 0xfb, 0x33, 0x28, 0xdc, 0xd1, 0x87, 0xd8, 0x91, 0x5c, 0xcf,
0x2c, 0x03, 0xeb, 0x10, 0xef, 0xd2, 0xe3, 0x3d, 0xff, 0x53, 0x0e, 0xca, 0x1a, 0x58, 0xec, 0x46, 0x1f, 0xa1, 0xdf, 0x6d, 0x60, 0xc5, 0xa5, 0x67, 0xcc, 0x85, 0x18, 0x8e, 0x47, 0xda, 0x8d, 0x0d,
0x18, 0x00, 0x68, 0x0d, 0x1c, 0x7b, 0xc4, 0x95, 0x93, 0xb3, 0x6a, 0x56, 0x11, 0xba, 0x2d, 0x81, 0x58, 0x40, 0xc9, 0x5e, 0xdb, 0xe8, 0x5e, 0x24, 0x0c, 0x1a, 0xcb, 0xc0, 0x3a, 0xc4, 0xbb, 0xf4,
0x62, 0x2f, 0xb6, 0xcf, 0x4f, 0x2d, 0x6f, 0x12, 0x5a, 0x03, 0x7e, 0xea, 0x73, 0xd5, 0xca, 0x8a, 0x78, 0xcf, 0xff, 0x94, 0x83, 0xb2, 0x06, 0x16, 0xbb, 0x11, 0x06, 0x00, 0x5a, 0x03, 0xc7, 0x1e,
0x7d, 0x7e, 0x7a, 0x30, 0x09, 0xb7, 0x11, 0x26, 0xb0, 0x04, 0x2f, 0xd1, 0xb0, 0x64, 0xcc, 0xda, 0x71, 0xe5, 0xe4, 0xac, 0x9a, 0x55, 0x84, 0x6e, 0x4b, 0xa0, 0xd8, 0x8b, 0xed, 0xf3, 0x53, 0xcb,
0xc8, 0xbe, 0x8c, 0xb1, 0x64, 0xe0, 0x24, 0x51, 0x66, 0x3e, 0x0a, 0x9c, 0x24, 0x6d, 0x71, 0x7a, 0x9b, 0x84, 0xd6, 0x80, 0x9f, 0xfa, 0x5c, 0xb5, 0xb2, 0x62, 0x9f, 0x9f, 0x1e, 0x4c, 0xc2, 0x6d,
0x03, 0x2d, 0xcc, 0x6e, 0xa0, 0xdf, 0x84, 0x55, 0xda, 0x40, 0x25, 0x6b, 0xb6, 0xa6, 0x56, 0xf2, 0x84, 0x09, 0x2c, 0xc1, 0x4b, 0x34, 0x2c, 0x19, 0xb3, 0x36, 0xb2, 0x2f, 0x63, 0x2c, 0x19, 0x38,
0x32, 0xa6, 0xca, 0x4e, 0x6a, 0x62, 0x6f, 0x5d, 0xf4, 0x40, 0xb1, 0xa5, 0xc0, 0xf9, 0x21, 0x31, 0x49, 0x94, 0x99, 0x8f, 0x02, 0x27, 0x49, 0x5b, 0x9c, 0xde, 0x40, 0x0b, 0xb3, 0x1b, 0xe8, 0x37,
0xb2, 0x8c, 0x29, 0x7a, 0x26, 0x0b, 0xef, 0x3a, 0x3f, 0xe4, 0x02, 0x13, 0xa3, 0x63, 0x74, 0x4c, 0x61, 0x95, 0x36, 0x50, 0xc9, 0x9a, 0xad, 0xa9, 0x95, 0xbc, 0x8c, 0xa9, 0xb2, 0x93, 0x9a, 0xd8,
0x79, 0xc0, 0x62, 0xe4, 0xb8, 0xd3, 0x98, 0xf6, 0x65, 0x12, 0xb3, 0x24, 0x31, 0xed, 0x4b, 0x1d, 0x5b, 0x17, 0x3d, 0x50, 0x6c, 0x29, 0x70, 0x7e, 0x48, 0x8c, 0x2c, 0x63, 0x8a, 0x9e, 0xc9, 0xc2,
0xf3, 0x09, 0xac, 0x8d, 0xf8, 0xc0, 0xb1, 0x93, 0xc5, 0x5a, 0xb1, 0xe0, 0xb6, 0x4c, 0xc9, 0x5a, 0xbb, 0xce, 0x0f, 0xb9, 0xc0, 0xc4, 0xe8, 0x18, 0x1d, 0x53, 0x1e, 0xb0, 0x18, 0x39, 0xee, 0x34,
0x9e, 0x2e, 0x29, 0xee, 0x62, 0x34, 0x7e, 0xe8, 0x8d, 0x8e, 0x1d, 0x92, 0x59, 0x28, 0x5e, 0x27, 0xa6, 0x7d, 0x99, 0xc4, 0x2c, 0x49, 0x4c, 0xfb, 0x52, 0xc7, 0x7c, 0x02, 0x6b, 0x23, 0x3e, 0x70,
0x6f, 0xd6, 0xdc, 0xc9, 0xe8, 0xfb, 0x08, 0x16, 0x59, 0x02, 0xa3, 0x0a, 0xe5, 0x6e, 0xe8, 0x8d, 0xec, 0x64, 0xb1, 0x56, 0x2c, 0xb8, 0x2d, 0x53, 0xb2, 0x96, 0xa7, 0x4b, 0x8a, 0xbb, 0x18, 0x8d,
0xd5, 0x34, 0xd7, 0xa0, 0x42, 0x9f, 0xf2, 0xd4, 0xe3, 0x2d, 0xb8, 0x89, 0x2c, 0xa1, 0xe7, 0x8d, 0x1f, 0x7a, 0xa3, 0x63, 0x87, 0x64, 0x16, 0x8a, 0xd7, 0xc9, 0x9b, 0x35, 0x77, 0x32, 0xfa, 0x3e,
0xbd, 0xa1, 0x77, 0x7a, 0x95, 0xb0, 0xe3, 0xfd, 0xbb, 0x0c, 0x2c, 0x25, 0x52, 0x25, 0x7b, 0xfd, 0x82, 0x45, 0x96, 0xc0, 0xa8, 0x42, 0xb9, 0x1b, 0x7a, 0x63, 0x35, 0xcd, 0x35, 0xa8, 0xd0, 0xa7,
0x26, 0xf1, 0xb3, 0xe8, 0xe8, 0x1a, 0xad, 0xc1, 0x45, 0x6d, 0x0d, 0x12, 0x22, 0x31, 0x33, 0x75, 0x3c, 0xf5, 0x78, 0x0b, 0x6e, 0x22, 0x4b, 0xe8, 0x79, 0x63, 0x6f, 0xe8, 0x9d, 0x5e, 0x25, 0xec,
0x9c, 0xad, 0x19, 0x5f, 0xb9, 0xa0, 0x32, 0x12, 0x4b, 0x69, 0xcc, 0xb2, 0x14, 0x99, 0x5f, 0x5d, 0x78, 0xff, 0x2e, 0x03, 0x4b, 0x89, 0x54, 0xc9, 0x5e, 0xbf, 0x49, 0xfc, 0x2c, 0x3a, 0xba, 0x46,
0xc6, 0xa0, 0x8a, 0xf8, 0x05, 0x79, 0x08, 0x66, 0x20, 0xbb, 0x9c, 0x4b, 0x9e, 0x24, 0xd0, 0x6d, 0x6b, 0x70, 0x51, 0x5b, 0x83, 0x84, 0x48, 0xcc, 0x4c, 0x1d, 0x67, 0x6b, 0xc6, 0x57, 0x2e, 0xa8,
0x7e, 0xaa, 0x05, 0xb1, 0x21, 0x30, 0x30, 0xfe, 0x49, 0x06, 0x20, 0x6e, 0x1d, 0x9e, 0x65, 0x88, 0x8c, 0xc4, 0x52, 0x1a, 0xb3, 0x2c, 0x45, 0xe6, 0x57, 0x97, 0x31, 0xa8, 0x22, 0x7e, 0x41, 0x1e,
0xe4, 0x16, 0xba, 0xcd, 0x4c, 0x93, 0x51, 0xde, 0x80, 0x4a, 0x14, 0xb1, 0x1c, 0x4b, 0x42, 0x65, 0x82, 0x19, 0xc8, 0x2e, 0xe7, 0x92, 0x27, 0x09, 0x74, 0x9b, 0x9f, 0x6a, 0x41, 0x6c, 0x08, 0x0c,
0x05, 0x13, 0xe2, 0xd0, 0x3d, 0x58, 0x38, 0x1d, 0x7a, 0xc7, 0x28, 0xb1, 0x4a, 0xb9, 0x85, 0xe2, 0x8c, 0x7f, 0x92, 0x01, 0x88, 0x5b, 0x87, 0x67, 0x19, 0x22, 0xb9, 0x85, 0xee, 0x43, 0xd3, 0x64,
0xd5, 0x6a, 0x04, 0x56, 0xd2, 0x48, 0x2c, 0x37, 0xe5, 0x53, 0x83, 0x9a, 0x75, 0x29, 0xc8, 0xf8, 0x94, 0x37, 0xa0, 0x12, 0x45, 0x2c, 0xc7, 0x92, 0x50, 0x59, 0xc1, 0x84, 0x38, 0x74, 0x0f, 0x16,
0xad, 0x6c, 0x14, 0xba, 0x19, 0x8f, 0xc4, 0x8b, 0xd5, 0xbb, 0x9f, 0x24, 0x96, 0xe6, 0x45, 0xee, 0x4e, 0x87, 0xde, 0x31, 0x4a, 0xac, 0x52, 0x6e, 0xa1, 0x78, 0xb5, 0x1a, 0x81, 0x95, 0x34, 0x12,
0xc5, 0x8f, 0xa1, 0xe6, 0xd3, 0xa6, 0xa4, 0x76, 0xac, 0xfc, 0x0b, 0x76, 0xac, 0xaa, 0x9f, 0x90, 0xcb, 0x4d, 0xf9, 0xd4, 0xa0, 0x66, 0x5d, 0x0a, 0x32, 0x7e, 0x2b, 0x1b, 0x85, 0x6e, 0xc6, 0x23,
0x74, 0xde, 0x81, 0xba, 0x3d, 0x38, 0xe7, 0x7e, 0xe8, 0xa0, 0xb5, 0x1e, 0xe5, 0x63, 0x19, 0x2c, 0xf1, 0x62, 0xf5, 0xee, 0x27, 0x89, 0xa5, 0x79, 0x91, 0x7b, 0xf1, 0x63, 0xa8, 0xf9, 0xb4, 0x29,
0xa9, 0xc1, 0x51, 0x10, 0xbd, 0x07, 0x0b, 0xf2, 0x24, 0x6e, 0x84, 0x29, 0xef, 0xf6, 0x89, 0xc1, 0xa9, 0x1d, 0x2b, 0xff, 0x82, 0x1d, 0xab, 0xea, 0x27, 0x24, 0x9d, 0x77, 0xa0, 0x6e, 0x0f, 0xce,
0x02, 0xd1, 0xf8, 0xe7, 0x2a, 0x56, 0x34, 0x39, 0xbb, 0x2f, 0x1e, 0x15, 0xbd, 0x87, 0xd9, 0x59, 0xb9, 0x1f, 0x3a, 0x68, 0xad, 0x47, 0xf9, 0x58, 0x06, 0x4b, 0x6a, 0x70, 0x14, 0x44, 0xef, 0xc1,
0x07, 0xaa, 0x24, 0x24, 0xe9, 0x04, 0x90, 0xfc, 0x88, 0x80, 0xd2, 0x05, 0x90, 0x1c, 0xd6, 0xfc, 0x82, 0x3c, 0x89, 0x1b, 0x61, 0xca, 0xbb, 0x7d, 0x62, 0xb0, 0x40, 0x34, 0xfe, 0xb9, 0x8a, 0x15,
0xab, 0x0c, 0xab, 0xf1, 0x1f, 0x32, 0x30, 0xbf, 0xeb, 0x8d, 0x77, 0x1d, 0x8a, 0xe6, 0xc7, 0x65, 0x4d, 0xce, 0xee, 0x8b, 0x47, 0x45, 0xef, 0x61, 0x76, 0xd6, 0x81, 0x2a, 0x09, 0x49, 0x3a, 0x01,
0x12, 0xf9, 0xa8, 0xe6, 0xc4, 0x27, 0x06, 0xfe, 0xbc, 0xe0, 0xc0, 0x59, 0xaa, 0x98, 0x57, 0x4d, 0x24, 0x3f, 0x22, 0xa0, 0x74, 0x01, 0x24, 0x87, 0x35, 0xff, 0x2a, 0xc3, 0x6a, 0xfc, 0x87, 0x0c,
0x8a, 0x79, 0xdf, 0x81, 0x5b, 0xe8, 0x02, 0xf4, 0xbd, 0xb1, 0xe7, 0x8b, 0xa5, 0x6a, 0x0f, 0x49, 0xcc, 0xef, 0x7a, 0xe3, 0x5d, 0x87, 0xa2, 0xf9, 0x71, 0x99, 0x44, 0x3e, 0xaa, 0x39, 0xf1, 0x89,
0xdc, 0xf3, 0xdc, 0xf0, 0x4c, 0xf1, 0xce, 0x9b, 0x27, 0x9c, 0x1f, 0x6a, 0x18, 0xfb, 0x11, 0x02, 0x81, 0x3f, 0x2f, 0x38, 0x70, 0x96, 0x2a, 0xe6, 0x55, 0x93, 0x62, 0xde, 0x77, 0xe0, 0x16, 0xba,
0x1e, 0xe9, 0x1c, 0x86, 0xe7, 0x16, 0x69, 0xe8, 0x52, 0x1e, 0x25, 0x8e, 0xba, 0x20, 0x12, 0x5a, 0x00, 0x7d, 0x6f, 0xec, 0xf9, 0x62, 0xa9, 0xda, 0x43, 0x12, 0xf7, 0x3c, 0x37, 0x3c, 0x53, 0xbc,
0x08, 0x47, 0x89, 0xd4, 0xf8, 0x16, 0x94, 0x22, 0x63, 0x0f, 0x7b, 0x17, 0x4a, 0x67, 0xde, 0x58, 0xf3, 0xe6, 0x09, 0xe7, 0x87, 0x1a, 0xc6, 0x7e, 0x84, 0x80, 0x47, 0x3a, 0x87, 0xe1, 0xb9, 0x45,
0x5a, 0x84, 0x32, 0x89, 0x43, 0x79, 0xb2, 0xd7, 0x66, 0xf1, 0x8c, 0x7e, 0x04, 0xc6, 0x9f, 0xcd, 0x1a, 0xba, 0x94, 0x47, 0x89, 0xa3, 0x2e, 0x88, 0x84, 0x16, 0xc2, 0x51, 0x22, 0x35, 0xbe, 0x05,
0xc3, 0x7c, 0xdb, 0x3d, 0xf7, 0x9c, 0x3e, 0x46, 0x9b, 0x8e, 0xf8, 0xc8, 0x53, 0xd7, 0x01, 0x88, 0xa5, 0xc8, 0xd8, 0xc3, 0xde, 0x85, 0xd2, 0x99, 0x37, 0x96, 0x16, 0xa1, 0x4c, 0xe2, 0x50, 0x9e,
0xdf, 0x18, 0x9b, 0x15, 0xdf, 0xd0, 0x93, 0x93, 0xb1, 0x59, 0xd1, 0xdd, 0x3c, 0x2b, 0x30, 0xe7, 0xec, 0xb5, 0x59, 0x3c, 0xa3, 0x1f, 0x81, 0xf1, 0x67, 0xf3, 0x30, 0xdf, 0x76, 0xcf, 0x3d, 0xa7,
0xeb, 0x57, 0xec, 0x14, 0x7c, 0x8c, 0x7f, 0x8f, 0xf6, 0xcb, 0x82, 0x76, 0x9d, 0x82, 0x28, 0x8b, 0x8f, 0xd1, 0xa6, 0x23, 0x3e, 0xf2, 0xd4, 0x75, 0x00, 0xe2, 0x37, 0xc6, 0x66, 0xc5, 0x37, 0xf4,
0xae, 0x7e, 0xc1, 0x21, 0xa3, 0xe3, 0x99, 0x25, 0x84, 0xe0, 0x80, 0xbd, 0x06, 0xf3, 0xf2, 0x0c, 0xe4, 0x64, 0x6c, 0x56, 0x74, 0x37, 0xcf, 0x0a, 0xcc, 0xf9, 0xfa, 0x15, 0x3b, 0x05, 0x1f, 0xe3,
0x1c, 0x1d, 0x5a, 0xa2, 0x80, 0x75, 0x09, 0x42, 0x6a, 0xf0, 0x39, 0xb9, 0x70, 0x23, 0x41, 0x36, 0xdf, 0xa3, 0xfd, 0xb2, 0xa0, 0x5d, 0xa7, 0x20, 0xca, 0xa2, 0xab, 0x5f, 0x70, 0xc8, 0xe8, 0x78,
0x67, 0x56, 0x14, 0x70, 0x5b, 0xd0, 0xda, 0x1d, 0x28, 0x13, 0x3e, 0xa1, 0x14, 0x65, 0x90, 0x26, 0x66, 0x09, 0x21, 0x38, 0x60, 0xaf, 0xc1, 0xbc, 0x3c, 0x03, 0x47, 0x87, 0x96, 0x28, 0x60, 0x5d,
0x82, 0x10, 0x21, 0xe5, 0xa6, 0xaa, 0x52, 0xea, 0x4d, 0x55, 0x18, 0x4e, 0x1c, 0x71, 0x59, 0xea, 0x82, 0x90, 0x1a, 0x7c, 0x4e, 0x2e, 0xdc, 0x48, 0x90, 0xcd, 0x99, 0x15, 0x05, 0xdc, 0x16, 0xb4,
0x22, 0xd0, 0xfd, 0x44, 0x1a, 0x5c, 0x5d, 0xd3, 0x26, 0x6d, 0x2a, 0x74, 0x5a, 0x59, 0xd9, 0x54, 0x76, 0x07, 0xca, 0x84, 0x4f, 0x28, 0x45, 0x19, 0xa4, 0x89, 0x20, 0x44, 0x48, 0xb9, 0xa9, 0xaa,
0xde, 0x84, 0xea, 0x89, 0x3d, 0x1c, 0x1e, 0xdb, 0xfd, 0xe7, 0x64, 0x0a, 0xa8, 0x90, 0xf5, 0x53, 0x94, 0x7a, 0x53, 0x15, 0x86, 0x13, 0x47, 0x5c, 0x96, 0xba, 0x08, 0x74, 0x3f, 0x91, 0x06, 0x57,
0x01, 0xd1, 0x16, 0x70, 0x07, 0xca, 0xda, 0x2c, 0x63, 0x04, 0x66, 0xde, 0x84, 0x78, 0x7e, 0xa7, 0x17, 0xbd, 0x49, 0x9b, 0x0a, 0x9d, 0x56, 0x56, 0x36, 0x95, 0x37, 0xa1, 0x7a, 0x62, 0x0f, 0x87,
0x2d, 0x7c, 0xb5, 0x57, 0xb0, 0xf0, 0x69, 0x91, 0xa8, 0x0b, 0xc9, 0x48, 0xd4, 0x5b, 0xc8, 0x4d, 0xc7, 0x76, 0xff, 0x39, 0x99, 0x02, 0x2a, 0x64, 0xfd, 0x54, 0x40, 0xb4, 0x05, 0xdc, 0x81, 0xb2,
0x65, 0xc8, 0x61, 0x9d, 0x2e, 0xc3, 0xb1, 0x07, 0x03, 0x0c, 0x39, 0xa4, 0x9b, 0x27, 0x71, 0xf0, 0x36, 0xcb, 0x18, 0x81, 0x99, 0x37, 0x21, 0x9e, 0xdf, 0x69, 0x0b, 0x5f, 0xed, 0x15, 0x2c, 0x7c,
0x28, 0x7d, 0x91, 0x74, 0x09, 0x82, 0x11, 0xca, 0x6d, 0x32, 0x53, 0x8f, 0x6d, 0x67, 0x80, 0x87, 0x5a, 0x24, 0xea, 0x42, 0x32, 0x12, 0xf5, 0x16, 0x72, 0x53, 0x19, 0x72, 0x58, 0xa7, 0xcb, 0x70,
0x0e, 0xc8, 0x7a, 0x30, 0x6f, 0x8f, 0xc2, 0x43, 0xdb, 0x19, 0xb0, 0xbb, 0x50, 0x51, 0xc9, 0xb8, 0xec, 0xc1, 0x00, 0x43, 0x0e, 0xe9, 0xee, 0x4a, 0x1c, 0x3c, 0x4a, 0x5f, 0x24, 0x5d, 0x82, 0x60,
0x3b, 0x2e, 0xd1, 0xf8, 0xcb, 0x64, 0xb1, 0x27, 0x1a, 0x50, 0x8d, 0x30, 0x46, 0xf1, 0x91, 0xe3, 0x84, 0x72, 0x9b, 0xcc, 0xd4, 0x63, 0xdb, 0x19, 0xe0, 0xa1, 0x03, 0xb2, 0x1e, 0xcc, 0xdb, 0xa3,
0xb2, 0x44, 0x41, 0x3a, 0x78, 0x1f, 0xa3, 0x7c, 0x42, 0x8e, 0x07, 0x8b, 0x6b, 0x8f, 0x6f, 0x45, 0xf0, 0xd0, 0x76, 0x06, 0xec, 0x2e, 0x54, 0x54, 0x32, 0xee, 0x8e, 0x4b, 0x34, 0xfe, 0x32, 0x59,
0xc1, 0x07, 0x48, 0xa5, 0xea, 0x3f, 0x39, 0xc7, 0x08, 0x53, 0x08, 0x77, 0xe4, 0xa3, 0x5b, 0x4d, 0xec, 0x89, 0x06, 0x54, 0x23, 0x8c, 0x51, 0x7c, 0xe4, 0xb8, 0x2c, 0x51, 0x90, 0x0e, 0xde, 0xc7,
0xc8, 0xbf, 0x12, 0x15, 0x7d, 0x74, 0x84, 0xc0, 0xbe, 0xa5, 0xe9, 0xaf, 0x0d, 0x44, 0x7e, 0x6d, 0x28, 0x9f, 0x90, 0xe3, 0xc1, 0xe2, 0xda, 0xe3, 0x5b, 0x51, 0xf0, 0x01, 0x52, 0xa9, 0xfa, 0x4f,
0xaa, 0xfc, 0xeb, 0x0e, 0x65, 0xdd, 0x06, 0x70, 0x02, 0xb1, 0xcb, 0x04, 0xdc, 0x1d, 0xe0, 0x19, 0xce, 0x31, 0xc2, 0x14, 0xc2, 0x1d, 0xf9, 0xe8, 0x56, 0x13, 0xf2, 0xaf, 0x44, 0x45, 0x1f, 0x1d,
0xe1, 0xa2, 0x59, 0x72, 0x82, 0x67, 0x04, 0xf8, 0xd9, 0x2a, 0xb6, 0x4d, 0xa8, 0xe8, 0xdd, 0x64, 0x21, 0xb0, 0x6f, 0x69, 0xfa, 0x6b, 0x03, 0x91, 0x5f, 0x9b, 0x2a, 0xff, 0xba, 0x43, 0x59, 0xb7,
0x45, 0xc8, 0x1f, 0x1c, 0xb6, 0x3a, 0xf5, 0x1b, 0xac, 0x0c, 0xf3, 0xdd, 0x56, 0xaf, 0xb7, 0x87, 0x01, 0x9c, 0x40, 0xec, 0x32, 0x01, 0x77, 0x07, 0x78, 0x46, 0xb8, 0x68, 0x96, 0x9c, 0xe0, 0x19,
0x9e, 0xbe, 0x0a, 0x14, 0xa3, 0x83, 0x8c, 0x59, 0xf1, 0xd5, 0xdc, 0xda, 0x6a, 0x1d, 0xf6, 0x5a, 0x01, 0x7e, 0xb6, 0x8a, 0x6d, 0x13, 0x2a, 0x7a, 0x37, 0x59, 0x11, 0xf2, 0x07, 0x87, 0xad, 0x4e,
0xdb, 0xf5, 0xdc, 0xf7, 0xf2, 0xc5, 0x6c, 0x3d, 0x67, 0xfc, 0x79, 0x0e, 0xca, 0xda, 0x28, 0xbc, 0xfd, 0x06, 0x2b, 0xc3, 0x7c, 0xb7, 0xd5, 0xeb, 0xed, 0xa1, 0xa7, 0xaf, 0x02, 0xc5, 0xe8, 0x20,
0x98, 0x19, 0xdf, 0x06, 0x40, 0x4d, 0x32, 0x8e, 0x48, 0xcd, 0x9b, 0x25, 0x01, 0xa1, 0xc9, 0xd7, 0x63, 0x56, 0x7c, 0x35, 0xb7, 0xb6, 0x5a, 0x87, 0xbd, 0xd6, 0x76, 0x3d, 0xf7, 0xbd, 0x7c, 0x31,
0x7d, 0x14, 0x39, 0xba, 0x65, 0x49, 0xf9, 0x28, 0xde, 0x84, 0x2a, 0x5d, 0x58, 0xa4, 0xfb, 0x6b, 0x5b, 0xcf, 0x19, 0x7f, 0x9e, 0x83, 0xb2, 0x36, 0x0a, 0x2f, 0x66, 0xc6, 0xb7, 0x01, 0x50, 0x93,
0x0b, 0x66, 0x85, 0x80, 0x92, 0x55, 0xe3, 0x09, 0x67, 0x44, 0xc2, 0xe3, 0x75, 0xf2, 0xfa, 0x12, 0x8c, 0x23, 0x52, 0xf3, 0x66, 0x49, 0x40, 0x68, 0xf2, 0x75, 0x1f, 0x45, 0x8e, 0x6e, 0x59, 0x52,
0x02, 0xe1, 0x01, 0x3b, 0x3c, 0x1d, 0x19, 0x78, 0xc3, 0x73, 0x4e, 0x18, 0x24, 0x11, 0x96, 0x25, 0x3e, 0x8a, 0x37, 0xa1, 0x4a, 0x17, 0x16, 0xe9, 0xfe, 0xda, 0x82, 0x59, 0x21, 0xa0, 0x64, 0xd5,
0xac, 0x27, 0xcf, 0x6a, 0x4b, 0x7e, 0xa8, 0x1d, 0xb1, 0x2d, 0x98, 0x15, 0x02, 0xca, 0x8a, 0xbe, 0x78, 0xc2, 0x19, 0x91, 0xf0, 0x78, 0x9d, 0xbc, 0xbe, 0x84, 0x40, 0x78, 0xc0, 0x0e, 0x4f, 0x47,
0xae, 0x08, 0x88, 0xa2, 0x57, 0xd6, 0x66, 0xa9, 0x21, 0x41, 0x3c, 0x7b, 0x33, 0x66, 0xc4, 0x12, 0x06, 0xde, 0xf0, 0x9c, 0x13, 0x06, 0x49, 0x84, 0x65, 0x09, 0xeb, 0xc9, 0xb3, 0xda, 0x92, 0x1f,
0x12, 0xc6, 0xd7, 0x66, 0xf3, 0xbd, 0xdc, 0x9c, 0xc8, 0xde, 0x05, 0x36, 0x1a, 0x8f, 0xad, 0x14, 0x6a, 0x47, 0x6c, 0x0b, 0x66, 0x85, 0x80, 0xb2, 0xa2, 0xaf, 0x2b, 0x02, 0xa2, 0xe8, 0x95, 0xb5,
0x03, 0x5f, 0xde, 0x5c, 0x18, 0x8d, 0xc7, 0x3d, 0xcd, 0xfe, 0xf5, 0x33, 0xb0, 0x3d, 0x7e, 0x01, 0x59, 0x6a, 0x48, 0x10, 0xcf, 0xde, 0x8c, 0x19, 0xb1, 0x84, 0x84, 0xf1, 0xb5, 0xd9, 0x7c, 0x2f,
0xac, 0x29, 0x16, 0x30, 0x36, 0x31, 0x52, 0xc5, 0x62, 0xb6, 0x9c, 0xd1, 0xd9, 0x72, 0x0a, 0xf7, 0x37, 0x27, 0xb2, 0x77, 0x81, 0x8d, 0xc6, 0x63, 0x2b, 0xc5, 0xc0, 0x97, 0x37, 0x17, 0x46, 0xe3,
0xcb, 0xa6, 0x72, 0xbf, 0x17, 0xf1, 0x09, 0x63, 0x07, 0xca, 0x87, 0xda, 0x75, 0x68, 0x77, 0xc5, 0x71, 0x4f, 0xb3, 0x7f, 0xfd, 0x0c, 0x6c, 0x8f, 0x5f, 0x00, 0x6b, 0x8a, 0x05, 0x8c, 0x4d, 0x8c,
0x0e, 0xa1, 0x2e, 0x42, 0xa3, 0xbd, 0x83, 0x6c, 0x8a, 0xbe, 0xbc, 0xff, 0x4c, 0x6b, 0x4d, 0x56, 0x54, 0xb1, 0x98, 0x2d, 0x67, 0x74, 0xb6, 0x9c, 0xc2, 0xfd, 0xb2, 0xa9, 0xdc, 0xef, 0x45, 0x7c,
0x6b, 0x8d, 0xf1, 0x8f, 0x32, 0x74, 0xd5, 0x4c, 0xd4, 0xf8, 0xf8, 0x06, 0x36, 0xe5, 0x7e, 0x8b, 0xc2, 0xd8, 0x81, 0xf2, 0xa1, 0x76, 0x1d, 0xda, 0x5d, 0xb1, 0x43, 0xa8, 0x8b, 0xd0, 0x68, 0xef,
0x4f, 0xc2, 0x97, 0x95, 0xdb, 0x4d, 0x1e, 0x62, 0xc7, 0xa6, 0x59, 0xde, 0xc9, 0x49, 0xc0, 0x55, 0x20, 0x9b, 0xa2, 0x2f, 0xef, 0x3f, 0xd3, 0x5a, 0x93, 0xd5, 0x5a, 0x63, 0xfc, 0xa3, 0x0c, 0x5d,
0x8c, 0x47, 0x19, 0x61, 0x07, 0x08, 0x52, 0xc2, 0xb7, 0x90, 0xf0, 0x1d, 0x2a, 0x3f, 0x90, 0x81, 0x35, 0x13, 0x35, 0x3e, 0xbe, 0x81, 0x4d, 0xb9, 0xdf, 0xe2, 0x93, 0xf0, 0x65, 0xe5, 0x76, 0x93,
0x1d, 0x42, 0xf8, 0xde, 0xb7, 0x2f, 0x65, 0xad, 0x81, 0x10, 0x41, 0xa4, 0x7f, 0x40, 0x1d, 0x96, 0x87, 0xd8, 0xb1, 0x69, 0x96, 0x77, 0x72, 0x12, 0x70, 0x15, 0xe3, 0x51, 0x46, 0xd8, 0x01, 0x82,
0x8d, 0xbe, 0x8d, 0x7f, 0x20, 0x0f, 0xeb, 0x4f, 0x8f, 0xef, 0x03, 0x28, 0x46, 0xa5, 0x26, 0x77, 0x94, 0xf0, 0x2d, 0x24, 0x7c, 0x87, 0xca, 0x0f, 0x64, 0x60, 0x87, 0x10, 0xbe, 0xf7, 0xed, 0x4b,
0x58, 0x85, 0x19, 0xa5, 0x8b, 0x7d, 0x1c, 0x8d, 0x21, 0x89, 0x16, 0xd3, 0xe2, 0x42, 0x1f, 0x4f, 0x59, 0x6b, 0x20, 0x44, 0x10, 0xe9, 0x1f, 0x50, 0x87, 0x65, 0xa3, 0x6f, 0xe3, 0x1f, 0xc8, 0xc3,
0x5b, 0x6b, 0xf5, 0x7b, 0xc0, 0x4e, 0x1c, 0x7f, 0x1a, 0x99, 0x16, 0x5b, 0x1d, 0x53, 0x34, 0x6c, 0xfa, 0xd3, 0xe3, 0xfb, 0x00, 0x8a, 0x51, 0xa9, 0xc9, 0x1d, 0x56, 0x61, 0x46, 0xe9, 0x62, 0x1f,
0xe3, 0x08, 0x96, 0x14, 0x97, 0xd0, 0x34, 0x82, 0xe4, 0xe4, 0x65, 0x5e, 0xc2, 0xe4, 0xb3, 0x33, 0x47, 0x63, 0x48, 0xa2, 0xc5, 0xb4, 0xb8, 0xd0, 0xc7, 0xd3, 0xd6, 0x5a, 0xfd, 0x1e, 0xb0, 0x13,
0x4c, 0xde, 0xf8, 0xcd, 0x02, 0xcc, 0xab, 0xab, 0x05, 0xd3, 0xae, 0xc3, 0x2b, 0x25, 0xaf, 0xc3, 0xc7, 0x9f, 0x46, 0xa6, 0xc5, 0x56, 0xc7, 0x14, 0x0d, 0xdb, 0x38, 0x82, 0x25, 0xc5, 0x25, 0x34,
0x6b, 0x24, 0xae, 0x4e, 0xc2, 0xa9, 0x97, 0xfb, 0xfd, 0xbd, 0xe9, 0x2d, 0x5b, 0xf3, 0x55, 0x24, 0x8d, 0x20, 0x39, 0x79, 0x99, 0x97, 0x30, 0xf9, 0xec, 0x0c, 0x93, 0x37, 0x7e, 0xb3, 0x00, 0xf3,
0xb6, 0x6d, 0xe9, 0xab, 0x28, 0x24, 0x7d, 0x15, 0x69, 0x57, 0x04, 0x92, 0xe8, 0x39, 0x73, 0x45, 0xea, 0x6a, 0xc1, 0xb4, 0xeb, 0xf0, 0x4a, 0xc9, 0xeb, 0xf0, 0x1a, 0x89, 0xab, 0x93, 0x70, 0xea,
0xe0, 0x2d, 0x20, 0x39, 0x42, 0x0b, 0x6e, 0x2b, 0x22, 0x40, 0xec, 0x39, 0x49, 0xb1, 0xa3, 0x38, 0xe5, 0x7e, 0x7f, 0x6f, 0x7a, 0xcb, 0xd6, 0x7c, 0x15, 0x89, 0x6d, 0x5b, 0xfa, 0x2a, 0x0a, 0x49,
0x2d, 0x76, 0xbc, 0xb2, 0x48, 0xf0, 0x4d, 0x98, 0xa3, 0xeb, 0x35, 0xe4, 0xe1, 0x5f, 0xb5, 0x71, 0x5f, 0x45, 0xda, 0x15, 0x81, 0x24, 0x7a, 0xce, 0x5c, 0x11, 0x78, 0x0b, 0x48, 0x8e, 0xd0, 0x82,
0xc8, 0xb1, 0x52, 0xff, 0xe9, 0xc4, 0x83, 0x29, 0x71, 0xf5, 0xfb, 0xb6, 0xca, 0x89, 0xfb, 0xb6, 0xdb, 0x8a, 0x08, 0x10, 0x7b, 0x4e, 0x52, 0xec, 0x28, 0x4e, 0x8b, 0x1d, 0xaf, 0x2c, 0x12, 0x7c,
0x74, 0x1f, 0x4a, 0x25, 0xe9, 0x43, 0xb9, 0x0f, 0xf5, 0x68, 0xe0, 0xd0, 0x22, 0xe9, 0x06, 0xf2, 0x13, 0xe6, 0xe8, 0x7a, 0x0d, 0x79, 0xf8, 0x57, 0x6d, 0x1c, 0x72, 0xac, 0xd4, 0x7f, 0x3a, 0xf1,
0xe4, 0x60, 0x4d, 0xc1, 0x05, 0x37, 0xec, 0x04, 0xf1, 0xc6, 0x57, 0x4b, 0x6c, 0x7c, 0x82, 0x57, 0x60, 0x4a, 0x5c, 0xfd, 0xbe, 0xad, 0x72, 0xe2, 0xbe, 0x2d, 0xdd, 0x87, 0x52, 0x49, 0xfa, 0x50,
0x35, 0xc3, 0x90, 0x8f, 0xc6, 0xa1, 0xda, 0xf8, 0xb4, 0x5b, 0x19, 0x69, 0xe6, 0x17, 0x70, 0xe6, 0xee, 0x43, 0x3d, 0x1a, 0x38, 0xb4, 0x48, 0xba, 0x81, 0x3c, 0x39, 0x58, 0x53, 0x70, 0xc1, 0x0d,
0xd5, 0xf4, 0x12, 0x75, 0x6c, 0x42, 0xed, 0xc4, 0x76, 0x86, 0x13, 0x9f, 0x5b, 0x3e, 0xb7, 0x03, 0x3b, 0x41, 0xbc, 0xf1, 0xd5, 0x12, 0x1b, 0x9f, 0xe0, 0x55, 0xcd, 0x30, 0xe4, 0xa3, 0x71, 0xa8,
0xcf, 0xc5, 0xc5, 0x1f, 0xef, 0xc1, 0xb2, 0x8b, 0x3b, 0x84, 0x63, 0x22, 0x8a, 0x59, 0x3d, 0xd1, 0x36, 0x3e, 0xed, 0x56, 0x46, 0x9a, 0xf9, 0x05, 0x9c, 0x79, 0x35, 0xbd, 0x44, 0x1d, 0x9b, 0x50,
0x3f, 0xf1, 0x10, 0x93, 0x3e, 0x12, 0x62, 0xcb, 0x92, 0x67, 0x88, 0x29, 0x56, 0xa5, 0xdd, 0xb1, 0x3b, 0xb1, 0x9d, 0xe1, 0xc4, 0xe7, 0x96, 0xcf, 0xed, 0xc0, 0x73, 0x71, 0xf1, 0xc7, 0x7b, 0xb0,
0x76, 0xf6, 0xda, 0x4f, 0x77, 0x7b, 0xf5, 0x8c, 0xf8, 0xec, 0x1e, 0x6d, 0x6d, 0xb5, 0x5a, 0xdb, 0xec, 0xe2, 0x0e, 0xe1, 0x98, 0x88, 0x62, 0x56, 0x4f, 0xf4, 0x4f, 0x3c, 0xc4, 0xa4, 0x8f, 0x84,
0xb8, 0x85, 0x01, 0xcc, 0xed, 0x34, 0xdb, 0x7b, 0x72, 0x03, 0xcb, 0xd7, 0x0b, 0xc6, 0xef, 0x64, 0xd8, 0xb2, 0xe4, 0x19, 0x62, 0x8a, 0x55, 0x69, 0x77, 0xac, 0x9d, 0xbd, 0xf6, 0xd3, 0xdd, 0x5e,
0xa1, 0xac, 0xf5, 0x86, 0x3d, 0x89, 0x26, 0x81, 0x6e, 0x80, 0xba, 0x3d, 0xdb, 0xe3, 0x0d, 0xc5, 0x3d, 0x23, 0x3e, 0xbb, 0x47, 0x5b, 0x5b, 0xad, 0xd6, 0x36, 0x6e, 0x61, 0x00, 0x73, 0x3b, 0xcd,
0xe1, 0xb5, 0x59, 0x88, 0xee, 0x5f, 0xcc, 0x5e, 0x7b, 0xff, 0x22, 0x7b, 0x1b, 0x16, 0x6c, 0x2a, 0xf6, 0x9e, 0xdc, 0xc0, 0xf2, 0xf5, 0x82, 0xf1, 0x3b, 0x59, 0x28, 0x6b, 0xbd, 0x61, 0x4f, 0xa2,
0x21, 0x1a, 0x74, 0x69, 0xdc, 0x97, 0x60, 0x39, 0xe6, 0x18, 0x41, 0x1a, 0x6f, 0x53, 0x02, 0x2f, 0x49, 0xa0, 0x1b, 0xa0, 0x6e, 0xcf, 0xf6, 0x78, 0x43, 0x71, 0x78, 0x6d, 0x16, 0xa2, 0xfb, 0x17,
0xaf, 0x82, 0x36, 0xa3, 0x9d, 0x0a, 0xe7, 0x66, 0x5e, 0x8e, 0x8c, 0x74, 0xc6, 0x47, 0x1b, 0xbe, 0xb3, 0xd7, 0xde, 0xbf, 0xc8, 0xde, 0x86, 0x05, 0x9b, 0x4a, 0x88, 0x06, 0x5d, 0x1a, 0xf7, 0x25,
0x1c, 0x2f, 0x95, 0x6c, 0x7c, 0x00, 0x10, 0xb7, 0x39, 0x39, 0x44, 0x37, 0x92, 0x43, 0x94, 0xd1, 0x58, 0x8e, 0x39, 0x46, 0x90, 0xc6, 0xdb, 0x94, 0xc0, 0xcb, 0xab, 0xa0, 0xcd, 0x68, 0xa7, 0xc2,
0x86, 0x28, 0x6b, 0xfc, 0x33, 0xc9, 0x9e, 0xe4, 0x78, 0x47, 0xe6, 0xbc, 0xaf, 0x83, 0x32, 0x30, 0xb9, 0x99, 0x97, 0x23, 0x23, 0x9d, 0xf1, 0xd1, 0x86, 0x2f, 0xc7, 0x4b, 0x25, 0x1b, 0x1f, 0x00,
0x5a, 0x18, 0xc8, 0x3d, 0x1e, 0xf2, 0x50, 0x5d, 0x58, 0xb0, 0x28, 0x53, 0xda, 0x51, 0xc2, 0x0c, 0xc4, 0x6d, 0x4e, 0x0e, 0xd1, 0x8d, 0xe4, 0x10, 0x65, 0xb4, 0x21, 0xca, 0x1a, 0xff, 0x4c, 0xb2,
0x3b, 0xcd, 0xce, 0xb2, 0xd3, 0x37, 0xa0, 0x22, 0x58, 0xa9, 0x24, 0x96, 0x40, 0xb2, 0xa4, 0xf2, 0x27, 0x39, 0xde, 0x91, 0x39, 0xef, 0xeb, 0xa0, 0x0c, 0x8c, 0x16, 0x06, 0x72, 0x8f, 0x87, 0x3c,
0xc8, 0xbe, 0x54, 0x75, 0x27, 0xf8, 0x68, 0x7e, 0x8a, 0x8f, 0xfe, 0x6e, 0x86, 0xee, 0x0f, 0x89, 0x54, 0x17, 0x16, 0x2c, 0xca, 0x94, 0x76, 0x94, 0x30, 0xc3, 0x4e, 0xb3, 0xb3, 0xec, 0xf4, 0x0d,
0x1b, 0x1a, 0x33, 0xd2, 0xa8, 0xcc, 0x24, 0x23, 0x95, 0xa8, 0x66, 0x94, 0x7e, 0x0d, 0x73, 0xcc, 0xa8, 0x08, 0x56, 0x2a, 0x89, 0x25, 0x90, 0x2c, 0xa9, 0x3c, 0xb2, 0x2f, 0x55, 0xdd, 0x09, 0x3e,
0xa6, 0x33, 0xc7, 0x74, 0xb6, 0x9b, 0x4b, 0x65, 0xbb, 0xc6, 0x3a, 0x34, 0xb6, 0xb9, 0x18, 0x8a, 0x9a, 0x9f, 0xe2, 0xa3, 0xbf, 0x9b, 0xa1, 0xfb, 0x43, 0xe2, 0x86, 0xc6, 0x8c, 0x34, 0x2a, 0x33,
0xe6, 0x70, 0x38, 0x35, 0x96, 0xc6, 0x2d, 0xb8, 0x99, 0x92, 0x26, 0x2d, 0x33, 0x9f, 0xc0, 0x4a, 0xc9, 0x48, 0x25, 0xaa, 0x19, 0xa5, 0x5f, 0xc3, 0x1c, 0xb3, 0xe9, 0xcc, 0x31, 0x9d, 0xed, 0xe6,
0x93, 0x2e, 0x56, 0xf8, 0x59, 0x1d, 0x90, 0x34, 0x1a, 0xb0, 0x3a, 0x5d, 0xa4, 0xac, 0x6c, 0x07, 0x52, 0xd9, 0xae, 0xb1, 0x0e, 0x8d, 0x6d, 0x2e, 0x86, 0xa2, 0x39, 0x1c, 0x4e, 0x8d, 0xa5, 0x71,
0x16, 0xb7, 0xf9, 0xf1, 0xe4, 0x74, 0x8f, 0x9f, 0xc7, 0x15, 0x31, 0xc8, 0x07, 0x67, 0xde, 0x85, 0x0b, 0x6e, 0xa6, 0xa4, 0x49, 0xcb, 0xcc, 0x27, 0xb0, 0xd2, 0xa4, 0x8b, 0x15, 0x7e, 0x56, 0x07,
0x9c, 0x5c, 0xfc, 0x8d, 0xa1, 0x97, 0x02, 0xc7, 0x0a, 0xc6, 0xbc, 0xaf, 0xac, 0xf3, 0x08, 0xe9, 0x24, 0x8d, 0x06, 0xac, 0x4e, 0x17, 0x29, 0x2b, 0xdb, 0x81, 0xc5, 0x6d, 0x7e, 0x3c, 0x39, 0xdd,
0x8e, 0x79, 0xdf, 0x78, 0x02, 0x4c, 0x2f, 0x47, 0xce, 0x84, 0x50, 0x9d, 0x26, 0xc7, 0x56, 0x70, 0xe3, 0xe7, 0x71, 0x45, 0x0c, 0xf2, 0xc1, 0x99, 0x77, 0x21, 0x27, 0x17, 0x7f, 0x63, 0xe8, 0xa5,
0x15, 0x84, 0x7c, 0xa4, 0x0e, 0x06, 0x42, 0x30, 0x39, 0xee, 0x12, 0xc4, 0xb8, 0x07, 0x95, 0x43, 0xc0, 0xb1, 0x82, 0x31, 0xef, 0x2b, 0xeb, 0x3c, 0x42, 0xba, 0x63, 0xde, 0x37, 0x9e, 0x00, 0xd3,
0xfb, 0xca, 0xe4, 0x5f, 0xc8, 0xf3, 0x77, 0x6b, 0x30, 0x3f, 0xb6, 0xaf, 0x04, 0xcf, 0x8c, 0x1c, 0xcb, 0x91, 0x33, 0x21, 0x54, 0xa7, 0xc9, 0xb1, 0x15, 0x5c, 0x05, 0x21, 0x1f, 0xa9, 0x83, 0x81,
0x75, 0x98, 0x6c, 0xfc, 0x61, 0x1e, 0xe6, 0x08, 0x93, 0xdd, 0xa5, 0x1b, 0x8c, 0x1d, 0x17, 0x79, 0x10, 0x4c, 0x8e, 0xbb, 0x04, 0x31, 0xee, 0x41, 0xe5, 0xd0, 0xbe, 0x32, 0xf9, 0x17, 0xf2, 0xfc,
0x96, 0xda, 0x3d, 0x34, 0xd0, 0xcc, 0x06, 0x93, 0x9d, 0xdd, 0x60, 0xa4, 0x55, 0x51, 0xdd, 0xdc, 0xdd, 0x1a, 0xcc, 0x8f, 0xed, 0x2b, 0xc1, 0x33, 0x23, 0x47, 0x1d, 0x26, 0x1b, 0x7f, 0x98, 0x87,
0xa4, 0x5c, 0x2a, 0xee, 0x64, 0xa4, 0xae, 0x6b, 0x4a, 0xde, 0x2e, 0x90, 0x8f, 0x6f, 0xa8, 0xa6, 0x39, 0xc2, 0x64, 0x77, 0xe9, 0x06, 0x63, 0xc7, 0x45, 0x9e, 0xa5, 0x76, 0x0f, 0x0d, 0x34, 0xb3,
0x93, 0xd5, 0x49, 0xa7, 0x77, 0xac, 0xa0, 0x51, 0xeb, 0xd4, 0xbe, 0x29, 0xf7, 0x16, 0x1d, 0x94, 0xc1, 0x64, 0x67, 0x37, 0x18, 0x69, 0x55, 0x54, 0x37, 0x37, 0x29, 0x97, 0x8a, 0x3b, 0x19, 0xa9,
0xaa, 0x05, 0xce, 0xab, 0x43, 0xa5, 0x49, 0x2d, 0x70, 0x46, 0xdb, 0x2b, 0xbe, 0x5c, 0xdb, 0x23, 0xeb, 0x9a, 0x92, 0xb7, 0x0b, 0xe4, 0xe3, 0x3b, 0xae, 0xe9, 0x64, 0x75, 0xd2, 0xe9, 0x1d, 0x2b,
0x73, 0xe3, 0x0b, 0xb4, 0x3d, 0x78, 0x05, 0x6d, 0xef, 0x15, 0x1c, 0xce, 0x37, 0xa1, 0x88, 0xc2, 0x68, 0xd4, 0x3a, 0xb5, 0x6f, 0xca, 0xbd, 0x45, 0x07, 0xa5, 0x6a, 0x81, 0xf3, 0xea, 0x50, 0x69,
0x90, 0xb6, 0xd5, 0x08, 0x21, 0x48, 0x6c, 0x35, 0x1f, 0x6a, 0xfa, 0x10, 0x45, 0xbb, 0x68, 0xbc, 0x52, 0x0b, 0x9c, 0xd1, 0xf6, 0x8a, 0x2f, 0xd7, 0xf6, 0xc8, 0xdc, 0xf8, 0x02, 0x6d, 0x0f, 0x5e,
0xde, 0xe4, 0x5f, 0xfc, 0x7c, 0x1c, 0x79, 0x9f, 0xc3, 0xbc, 0x84, 0x0a, 0x82, 0x76, 0xed, 0x91, 0x41, 0xdb, 0x7b, 0x05, 0x87, 0xf3, 0x4d, 0x28, 0xa2, 0x30, 0xa4, 0x6d, 0x35, 0x42, 0x08, 0x12,
0xba, 0xfc, 0x0e, 0x7f, 0x8b, 0x61, 0xc3, 0x1b, 0xbb, 0xbe, 0x98, 0x38, 0x3e, 0x1f, 0xa8, 0x5b, 0x5b, 0xcd, 0x87, 0x9a, 0x3e, 0x44, 0xd1, 0x2e, 0x1a, 0xaf, 0x37, 0xf9, 0x17, 0x3f, 0x1f, 0x47,
0x8d, 0x1c, 0x5c, 0xa3, 0x02, 0x22, 0x3a, 0x28, 0x74, 0x33, 0xd7, 0xbb, 0x70, 0x25, 0xef, 0x99, 0xde, 0xe7, 0x30, 0x2f, 0xa1, 0x82, 0xa0, 0x5d, 0x7b, 0xa4, 0x2e, 0xbf, 0xc3, 0xdf, 0x62, 0xd8,
0x77, 0x82, 0x67, 0xe2, 0xd3, 0x60, 0x50, 0xc7, 0xeb, 0x2f, 0xc7, 0x9e, 0xaf, 0x76, 0x72, 0xe3, 0xf0, 0xc6, 0xae, 0x2f, 0x26, 0x8e, 0xcf, 0x07, 0xea, 0x56, 0x23, 0x07, 0xd7, 0xa8, 0x80, 0x88,
0xc7, 0x19, 0xa8, 0xcb, 0xd5, 0x15, 0xa5, 0xe9, 0xaa, 0x51, 0xe1, 0xba, 0xe0, 0x8c, 0x17, 0xdf, 0x0e, 0x0a, 0xdd, 0xcc, 0xf5, 0x2e, 0x5c, 0xc9, 0x7b, 0xe6, 0x9d, 0xe0, 0x99, 0xf8, 0x34, 0x18,
0x51, 0x64, 0x40, 0x15, 0x2d, 0x42, 0xd1, 0xb6, 0x4e, 0x16, 0xad, 0xb2, 0x00, 0xee, 0xc8, 0xad, 0xd4, 0xf1, 0xfa, 0xcb, 0xb1, 0xe7, 0xab, 0x9d, 0xdc, 0xf8, 0x71, 0x06, 0xea, 0x72, 0x75, 0x45,
0xfd, 0x75, 0x28, 0xab, 0xc0, 0xf0, 0x91, 0x33, 0x54, 0x97, 0xd1, 0x53, 0x64, 0xf8, 0xbe, 0x33, 0x69, 0xba, 0x6a, 0x54, 0xb8, 0x2e, 0x38, 0xe3, 0xc5, 0x77, 0x14, 0x19, 0x50, 0x45, 0x8b, 0x50,
0x54, 0x52, 0x81, 0x6f, 0xcb, 0x43, 0xce, 0x19, 0x94, 0x0a, 0x4c, 0x3b, 0xe4, 0xc6, 0xbf, 0xca, 0xb4, 0xad, 0x93, 0x45, 0xab, 0x2c, 0x80, 0x3b, 0x72, 0x6b, 0x7f, 0x1d, 0xca, 0x2a, 0x30, 0x7c,
0xc0, 0xa2, 0xd6, 0x15, 0xb9, 0x6e, 0x3f, 0x82, 0x4a, 0x74, 0xef, 0x2c, 0x8f, 0xc4, 0xd1, 0xb5, 0xe4, 0x0c, 0xd5, 0x75, 0xf6, 0x14, 0x19, 0xbe, 0xef, 0x0c, 0x95, 0x54, 0xe0, 0xdb, 0xf2, 0x90,
0x24, 0xa3, 0x89, 0xb3, 0x95, 0xfb, 0x11, 0x24, 0x10, 0x8d, 0x19, 0xd8, 0x57, 0x14, 0xbd, 0x3c, 0x73, 0x06, 0xa5, 0x02, 0xd3, 0x0e, 0xb9, 0xf1, 0xaf, 0x32, 0xb0, 0xa8, 0x75, 0x45, 0xae, 0xdb,
0x19, 0x29, 0x8d, 0x6f, 0x60, 0x5f, 0xed, 0x70, 0xde, 0x9d, 0x8c, 0x84, 0x3e, 0x7f, 0xc1, 0xf9, 0x8f, 0xa0, 0x12, 0xdd, 0x3b, 0xcb, 0x23, 0x71, 0x74, 0x2d, 0xc9, 0x68, 0xe2, 0x6c, 0xe5, 0x7e,
0xf3, 0x08, 0x81, 0xd8, 0x27, 0x08, 0x98, 0xc4, 0x30, 0xa0, 0x3a, 0xf2, 0xdc, 0xf0, 0x2c, 0x42, 0x04, 0x09, 0x44, 0x63, 0x06, 0xf6, 0x15, 0x45, 0x2f, 0x4f, 0x46, 0x4a, 0xe3, 0x1b, 0xd8, 0x57,
0x91, 0xa2, 0x38, 0x02, 0x09, 0xc7, 0xf8, 0xd3, 0x2c, 0x2c, 0x91, 0xdd, 0x51, 0xda, 0x7b, 0x25, 0x3b, 0x9c, 0x77, 0x27, 0x23, 0xa1, 0xcf, 0x5f, 0x70, 0xfe, 0x3c, 0x42, 0x20, 0xf6, 0x09, 0x02,
0xeb, 0x6a, 0xc0, 0x1c, 0x99, 0x60, 0x89, 0x79, 0xed, 0xde, 0x30, 0xe5, 0x37, 0xfb, 0xe6, 0x2b, 0x26, 0x31, 0x0c, 0xa8, 0x8e, 0x3c, 0x37, 0x3c, 0x8b, 0x50, 0xa4, 0x28, 0x8e, 0x40, 0xc2, 0x31,
0xda, 0x4a, 0xd5, 0x39, 0xea, 0x6b, 0x86, 0x3f, 0x37, 0x3b, 0xfc, 0xd7, 0x0f, 0x6f, 0x9a, 0xf7, 0xfe, 0x34, 0x0b, 0x4b, 0x64, 0x77, 0x94, 0xf6, 0x5e, 0xc9, 0xba, 0x1a, 0x30, 0x47, 0x26, 0x58,
0xb7, 0x90, 0xe6, 0xfd, 0x7d, 0x15, 0x9f, 0xeb, 0xcc, 0x89, 0xdf, 0x79, 0x89, 0xa3, 0x9d, 0xf8, 0x62, 0x5e, 0xbb, 0x37, 0x4c, 0xf9, 0xcd, 0xbe, 0xf9, 0x8a, 0xb6, 0x52, 0x75, 0x8e, 0xfa, 0x9a,
0x7d, 0x02, 0x6b, 0x09, 0x1c, 0xe4, 0xd6, 0xce, 0x89, 0xc3, 0xd5, 0xad, 0x34, 0xcb, 0x1a, 0x76, 0xe1, 0xcf, 0xcd, 0x0e, 0xff, 0xf5, 0xc3, 0x9b, 0xe6, 0xfd, 0x2d, 0xa4, 0x79, 0x7f, 0x5f, 0xc5,
0x57, 0xa5, 0x6d, 0xce, 0x43, 0x21, 0xe8, 0x7b, 0x63, 0x6e, 0xac, 0xc2, 0x72, 0x72, 0x54, 0xe5, 0xe7, 0x3a, 0x73, 0xe2, 0x77, 0x5e, 0xe2, 0x68, 0x27, 0x7e, 0x9f, 0xc0, 0x5a, 0x02, 0x07, 0xb9,
0x36, 0xf1, 0x7b, 0x19, 0x68, 0xc8, 0x58, 0x1d, 0xc7, 0x3d, 0xdd, 0x75, 0x82, 0xd0, 0xf3, 0xa3, 0xb5, 0x73, 0xe2, 0x70, 0x75, 0x2b, 0xcd, 0xb2, 0x86, 0xdd, 0x55, 0x69, 0x9b, 0xf3, 0x50, 0x08,
0xfb, 0x59, 0x6f, 0x03, 0x04, 0xa1, 0xed, 0x4b, 0x15, 0x5c, 0xde, 0xc3, 0x82, 0x10, 0x54, 0xaf, 0xfa, 0xde, 0x98, 0x1b, 0xab, 0xb0, 0x9c, 0x1c, 0x55, 0xb9, 0x4d, 0xfc, 0x5e, 0x06, 0x1a, 0x32,
0x6f, 0x42, 0x91, 0xbb, 0x03, 0x4a, 0x24, 0x6a, 0x98, 0xe7, 0xee, 0x40, 0x29, 0xe7, 0x33, 0x5b, 0x56, 0xc7, 0x71, 0x4f, 0x77, 0x9d, 0x20, 0xf4, 0xfc, 0xe8, 0x7e, 0xd6, 0xdb, 0x00, 0x74, 0xe1,
0x69, 0x35, 0x29, 0x24, 0xc8, 0x5b, 0x0f, 0xc4, 0xe8, 0xf0, 0x73, 0xdc, 0xd2, 0xf3, 0xd1, 0xad, 0x3e, 0x2a, 0xd8, 0xf2, 0x1e, 0x16, 0x84, 0xa0, 0x7a, 0x7d, 0x13, 0x8a, 0xdc, 0x1d, 0x50, 0x22,
0x07, 0xfb, 0xf6, 0x25, 0x46, 0xbe, 0x06, 0xc6, 0xdf, 0xcd, 0xc2, 0x42, 0xdc, 0x3e, 0xba, 0x53, 0x51, 0xc3, 0x3c, 0x77, 0x07, 0x4a, 0x39, 0x9f, 0xd9, 0x4a, 0xab, 0x49, 0x21, 0x41, 0xde, 0x7a,
0xe5, 0xc5, 0xb7, 0xc3, 0xdc, 0x95, 0xe4, 0xe0, 0x08, 0xa5, 0x46, 0xb3, 0xc6, 0x16, 0x69, 0x71, 0x20, 0x46, 0x87, 0x9f, 0xe3, 0x96, 0x9e, 0x8f, 0x6e, 0x3d, 0xd8, 0xb7, 0x2f, 0x31, 0xf2, 0x35,
0xb6, 0x5d, 0x66, 0x40, 0x59, 0x61, 0x78, 0x93, 0x50, 0xbb, 0x26, 0xb1, 0x44, 0x28, 0x07, 0x93, 0x30, 0xfe, 0x6e, 0x16, 0x16, 0xe2, 0xf6, 0xd1, 0x9d, 0x2a, 0x2f, 0xbe, 0x1d, 0xe6, 0xae, 0x24,
0x50, 0x68, 0xa1, 0x42, 0x1d, 0x77, 0x5c, 0xa9, 0x07, 0x16, 0xec, 0x51, 0xd8, 0xc6, 0xd7, 0x17, 0x07, 0x47, 0x28, 0x35, 0x9a, 0x35, 0xb6, 0x48, 0x8b, 0xb3, 0xed, 0x32, 0x03, 0xca, 0x0a, 0xc3,
0x04, 0x58, 0x64, 0xa3, 0x89, 0x14, 0x58, 0x02, 0xbf, 0x4e, 0x4a, 0x09, 0xcd, 0x1c, 0x2a, 0x24, 0x9b, 0x84, 0xda, 0x35, 0x89, 0x25, 0x42, 0x39, 0x98, 0x84, 0x42, 0x0b, 0x15, 0xea, 0xb8, 0xe3,
0xba, 0xc4, 0x4e, 0x17, 0x51, 0x47, 0x12, 0xfb, 0xeb, 0x50, 0xa6, 0xc2, 0xe3, 0x03, 0xde, 0x79, 0x4a, 0x3d, 0xb0, 0x60, 0x8f, 0xc2, 0x36, 0xbe, 0xdf, 0x20, 0xc0, 0x22, 0x1b, 0x4d, 0xa4, 0xc0,
0xb3, 0x84, 0x35, 0x60, 0xba, 0xb4, 0x8c, 0x79, 0x93, 0x84, 0x3d, 0x00, 0xa8, 0x2a, 0x0c, 0x85, 0x12, 0xf8, 0x75, 0x52, 0x4a, 0x68, 0xe6, 0x50, 0x21, 0xd1, 0x25, 0x76, 0xba, 0x88, 0x3a, 0x92,
0xf9, 0x9b, 0x19, 0xb8, 0x99, 0x32, 0x6d, 0x72, 0x95, 0x6f, 0xc1, 0xe2, 0x49, 0x94, 0xa8, 0x46, 0xd8, 0x5f, 0x87, 0x32, 0x15, 0x1e, 0x1f, 0xf0, 0xce, 0x9b, 0x25, 0xac, 0x01, 0xd3, 0xa5, 0x65,
0x97, 0x96, 0xfa, 0xaa, 0x62, 0xab, 0xc9, 0x31, 0x35, 0xeb, 0x27, 0x49, 0x40, 0xac, 0x89, 0xd2, 0xcc, 0x9b, 0x24, 0xec, 0x01, 0x40, 0x55, 0x61, 0x28, 0xcc, 0xdf, 0xcc, 0xc0, 0xcd, 0x94, 0x69,
0x0c, 0x26, 0xae, 0x0f, 0x40, 0x91, 0x88, 0xa6, 0x91, 0x94, 0xc0, 0x43, 0x58, 0x6f, 0x5d, 0x0a, 0x93, 0xab, 0x7c, 0x0b, 0x16, 0x4f, 0xa2, 0x44, 0x35, 0xba, 0xb4, 0xd4, 0x57, 0x15, 0x5b, 0x4d,
0x8e, 0xb1, 0xa5, 0x3f, 0x1f, 0xa2, 0xc8, 0x28, 0x69, 0x75, 0xcf, 0xbc, 0x92, 0xd5, 0x7d, 0x40, 0x8e, 0xa9, 0x59, 0x3f, 0x49, 0x02, 0x62, 0x4d, 0x94, 0x66, 0x30, 0x71, 0x7d, 0x00, 0x8a, 0x44,
0xe7, 0x8d, 0xa3, 0xb2, 0x7e, 0x92, 0x42, 0x70, 0x03, 0x15, 0x79, 0xe8, 0xf9, 0x13, 0x75, 0x8f, 0x34, 0x8d, 0xa4, 0x04, 0x1e, 0xc2, 0x7a, 0xeb, 0x52, 0x70, 0x8c, 0x2d, 0xfd, 0x01, 0x12, 0x45,
0x40, 0x3f, 0x7a, 0xf6, 0xc4, 0x08, 0x60, 0x61, 0x7f, 0x32, 0x0c, 0x9d, 0xf8, 0x25, 0x14, 0xf6, 0x46, 0x49, 0xab, 0x7b, 0xe6, 0x95, 0xac, 0xee, 0x03, 0x3a, 0x6f, 0x1c, 0x95, 0xf5, 0x93, 0x14,
0x4d, 0x99, 0x07, 0xeb, 0x51, 0xa3, 0x96, 0x5a, 0x11, 0x44, 0x15, 0xe1, 0x60, 0x8d, 0x44, 0x41, 0x82, 0x1b, 0xa8, 0xc8, 0x43, 0x0f, 0xa8, 0xa8, 0x7b, 0x04, 0xfa, 0xd1, 0xc3, 0x29, 0x46, 0x00,
0xd6, 0x6c, 0x7d, 0x0b, 0xa3, 0x64, 0x0d, 0xc6, 0x4d, 0x58, 0x8b, 0xbf, 0x68, 0xd8, 0xd4, 0x56, 0x0b, 0xfb, 0x93, 0x61, 0xe8, 0xc4, 0x6f, 0xa9, 0xb0, 0x6f, 0xca, 0x3c, 0x58, 0x8f, 0x1a, 0xb5,
0xf3, 0x0f, 0x33, 0x14, 0x66, 0x9f, 0x7c, 0x95, 0x85, 0xb5, 0x60, 0x29, 0x70, 0xdc, 0xd3, 0x21, 0xd4, 0x8a, 0x20, 0xaa, 0x08, 0x07, 0x6b, 0x24, 0x0a, 0xb2, 0x66, 0xeb, 0x5b, 0x18, 0x25, 0x6b,
0xd7, 0x8b, 0x0f, 0xe4, 0x20, 0xac, 0x24, 0xdb, 0x26, 0x5f, 0x6e, 0x31, 0x17, 0x29, 0x47, 0x5c, 0x30, 0x6e, 0xc2, 0x5a, 0xfc, 0x45, 0xc3, 0xa6, 0xb6, 0x9a, 0x7f, 0x98, 0xa1, 0x30, 0xfb, 0xe4,
0x5a, 0xc0, 0x36, 0xaf, 0x6b, 0x64, 0x4c, 0x16, 0x53, 0xa3, 0x31, 0xdb, 0xf8, 0x36, 0xd4, 0x92, 0xbb, 0x2e, 0xac, 0x05, 0x4b, 0x81, 0xe3, 0x9e, 0x0e, 0xb9, 0x5e, 0x7c, 0x20, 0x07, 0x61, 0x25,
0x15, 0xb1, 0x0f, 0xe5, 0x31, 0xfd, 0xb8, 0x55, 0xb9, 0xa9, 0x33, 0xcc, 0x31, 0x41, 0x94, 0xe3, 0xd9, 0x36, 0xf9, 0xf6, 0x8b, 0xb9, 0x48, 0x39, 0xe2, 0xd2, 0x02, 0xb6, 0x79, 0x5d, 0x23, 0x63,
0xb1, 0x0f, 0x8c, 0xbf, 0x9d, 0x81, 0x86, 0xc9, 0x05, 0xe5, 0x6a, 0xad, 0x54, 0x34, 0xf3, 0xd1, 0xb2, 0x98, 0x1a, 0x8d, 0xd9, 0xc6, 0xb7, 0xa1, 0x96, 0xac, 0x88, 0x7d, 0x28, 0x8f, 0xe9, 0xc7,
0x4c, 0xa9, 0xd7, 0xf7, 0x55, 0x9d, 0xfe, 0x57, 0x2d, 0x7a, 0xef, 0xda, 0xc9, 0xd8, 0xbd, 0x31, 0xad, 0xca, 0x4d, 0x9d, 0x61, 0x8e, 0x09, 0xa2, 0x1c, 0x8f, 0x7d, 0x60, 0xfc, 0xed, 0x0c, 0x34,
0xd3, 0xa3, 0xcd, 0x22, 0xcc, 0x11, 0x8a, 0xb1, 0x06, 0x2b, 0xb2, 0x3d, 0xaa, 0x2d, 0xb1, 0x4b, 0x4c, 0x2e, 0x28, 0x57, 0x6b, 0xa5, 0xa2, 0x99, 0x8f, 0x66, 0x4a, 0xbd, 0xbe, 0xaf, 0xea, 0xf4,
0x35, 0x51, 0x63, 0xc2, 0xa5, 0xba, 0x0e, 0x0d, 0x3a, 0x8f, 0xab, 0x77, 0x42, 0x66, 0xdc, 0x06, 0xbf, 0x6a, 0xd1, 0x7b, 0xd7, 0x4e, 0xc6, 0xee, 0x8d, 0x99, 0x1e, 0x6d, 0x16, 0x61, 0x8e, 0x50,
0xb6, 0x6f, 0xf7, 0x6d, 0xdf, 0xf3, 0xdc, 0x43, 0xee, 0xcb, 0xa0, 0x65, 0x94, 0x30, 0xd1, 0xe3, 0x8c, 0x35, 0x58, 0x91, 0xed, 0x51, 0x6d, 0x89, 0x5d, 0xaa, 0x89, 0x1a, 0x13, 0x2e, 0xd5, 0x75,
0xa8, 0x44, 0x61, 0xfa, 0x52, 0x97, 0xc3, 0x7a, 0xae, 0x8a, 0xd1, 0xa2, 0x2f, 0xc3, 0x84, 0xa5, 0x68, 0xd0, 0x79, 0x5c, 0xbd, 0x13, 0x32, 0xe3, 0x36, 0xb0, 0x7d, 0xbb, 0x6f, 0xfb, 0x9e, 0xe7,
0x4d, 0xfb, 0x39, 0x57, 0x25, 0xa9, 0x21, 0xfa, 0x18, 0xca, 0xe3, 0xa8, 0x50, 0x35, 0xee, 0xea, 0x1e, 0x72, 0x5f, 0x06, 0x2d, 0xa3, 0x84, 0x89, 0x1e, 0x47, 0x25, 0x0a, 0xd3, 0x97, 0xba, 0x1c,
0x1a, 0x91, 0xd9, 0x6a, 0x4d, 0x1d, 0xdb, 0x78, 0x0c, 0xcb, 0xc9, 0x32, 0x25, 0xeb, 0x58, 0x87, 0xd6, 0x73, 0x55, 0x8c, 0x16, 0x7d, 0x19, 0x26, 0x2c, 0x6d, 0xda, 0xcf, 0xb9, 0x2a, 0x49, 0x0d,
0xe2, 0x48, 0xc2, 0x64, 0xeb, 0xa2, 0x6f, 0xe3, 0xb7, 0x8b, 0x30, 0x2f, 0xb5, 0x51, 0xb6, 0x01, 0xd1, 0xc7, 0x50, 0x1e, 0x47, 0x85, 0xaa, 0x71, 0x57, 0xd7, 0x88, 0xcc, 0x56, 0x6b, 0xea, 0xd8,
0xf9, 0xbe, 0x8a, 0x93, 0x8b, 0xaf, 0xaf, 0x92, 0xa9, 0xea, 0xff, 0x16, 0x46, 0xcb, 0x09, 0x3c, 0xc6, 0x63, 0x58, 0x4e, 0x96, 0x29, 0x59, 0xc7, 0x3a, 0x14, 0x47, 0x12, 0x26, 0x5b, 0x17, 0x7d,
0xf6, 0x31, 0xd4, 0x92, 0xae, 0xe2, 0xa9, 0xd3, 0xfe, 0x49, 0x1f, 0x6f, 0xb5, 0x3f, 0xe5, 0x14, 0x1b, 0xbf, 0x5d, 0x84, 0x79, 0xa9, 0x8d, 0xb2, 0x0d, 0xc8, 0xf7, 0x55, 0x9c, 0x5c, 0x7c, 0x7d,
0x2c, 0xc5, 0x9b, 0x23, 0xc9, 0x0c, 0xc5, 0x33, 0x6d, 0xf7, 0xf4, 0x5c, 0x21, 0x6f, 0x07, 0x67, 0x95, 0x4c, 0x55, 0xff, 0xb7, 0x30, 0x5a, 0x4e, 0xe0, 0xb1, 0x8f, 0xa1, 0x96, 0x74, 0x15, 0x4f,
0xb6, 0xf5, 0xf8, 0xc9, 0x07, 0xf2, 0xb8, 0x7f, 0x19, 0x81, 0xdd, 0x33, 0xfb, 0xf1, 0x93, 0x0f, 0x9d, 0xf6, 0x4f, 0xfa, 0x78, 0xab, 0xfd, 0x29, 0xa7, 0x60, 0x29, 0xde, 0x1c, 0x49, 0x66, 0x28,
0xa6, 0x25, 0x69, 0x79, 0xd8, 0x5f, 0x93, 0xa4, 0x97, 0xa1, 0x40, 0xb7, 0xa0, 0x52, 0xc0, 0x13, 0x9e, 0x69, 0xbb, 0xa7, 0xe7, 0x0a, 0x79, 0x3b, 0x38, 0xb3, 0xad, 0xc7, 0x4f, 0x3e, 0x90, 0xc7,
0x7d, 0xb0, 0x47, 0xb0, 0xac, 0x0c, 0x1c, 0x32, 0x34, 0x9d, 0xb8, 0x60, 0x91, 0x4e, 0x03, 0xca, 0xfd, 0xcb, 0x08, 0xec, 0x9e, 0xd9, 0x8f, 0x9f, 0x7c, 0x30, 0x2d, 0x49, 0xcb, 0xc3, 0xfe, 0x9a,
0xb4, 0x2e, 0x26, 0x91, 0x49, 0x64, 0x15, 0xe6, 0xce, 0xe2, 0x2b, 0x6d, 0xab, 0xa6, 0xfc, 0x32, 0x24, 0xbd, 0x0c, 0x05, 0xba, 0x05, 0x95, 0x02, 0x9e, 0xe8, 0x83, 0x3d, 0x82, 0x65, 0x65, 0xe0,
0xfe, 0xb4, 0x00, 0x65, 0x6d, 0x50, 0x58, 0x05, 0x8a, 0x66, 0xab, 0xdb, 0x32, 0x3f, 0x6d, 0x6d, 0x90, 0xa1, 0xe9, 0xc4, 0x05, 0x8b, 0x74, 0x1a, 0x50, 0xa6, 0x75, 0x31, 0x89, 0x4c, 0x22, 0xab,
0xd7, 0x6f, 0xb0, 0xfb, 0xf0, 0x56, 0xbb, 0xb3, 0x75, 0x60, 0x9a, 0xad, 0xad, 0x9e, 0x75, 0x60, 0x30, 0x77, 0x16, 0x5f, 0x69, 0x5b, 0x35, 0xe5, 0x97, 0xf1, 0xa7, 0x05, 0x28, 0x6b, 0x83, 0xc2,
0x5a, 0xea, 0x12, 0xb5, 0xc3, 0xe6, 0xe7, 0xfb, 0xad, 0x4e, 0xcf, 0xda, 0x6e, 0xf5, 0x9a, 0xed, 0x2a, 0x50, 0x34, 0x5b, 0xdd, 0x96, 0xf9, 0x69, 0x6b, 0xbb, 0x7e, 0x83, 0xdd, 0x87, 0xb7, 0xda,
0xbd, 0x6e, 0x3d, 0xc3, 0x5e, 0x83, 0x46, 0x8c, 0xa9, 0x92, 0x9b, 0xfb, 0x07, 0x47, 0x9d, 0x5e, 0x9d, 0xad, 0x03, 0xd3, 0x6c, 0x6d, 0xf5, 0xac, 0x03, 0xd3, 0x52, 0x97, 0xa8, 0x1d, 0x36, 0x3f,
0x3d, 0xcb, 0xee, 0xc0, 0xad, 0x9d, 0x76, 0xa7, 0xb9, 0x67, 0xc5, 0x38, 0x5b, 0x7b, 0xbd, 0x4f, 0xdf, 0x6f, 0x75, 0x7a, 0xd6, 0x76, 0xab, 0xd7, 0x6c, 0xef, 0x75, 0xeb, 0x19, 0xf6, 0x1a, 0x34,
0xad, 0xd6, 0x2f, 0x1d, 0xb6, 0xcd, 0xcf, 0xeb, 0xb9, 0x34, 0x84, 0xdd, 0xde, 0xde, 0x96, 0x2a, 0x62, 0x4c, 0x95, 0xdc, 0xdc, 0x3f, 0x38, 0xea, 0xf4, 0xea, 0x59, 0x76, 0x07, 0x6e, 0xed, 0xb4,
0x21, 0xcf, 0x6e, 0xc2, 0x0a, 0x21, 0x50, 0x16, 0xab, 0x77, 0x70, 0x60, 0x75, 0x0f, 0x0e, 0x3a, 0x3b, 0xcd, 0x3d, 0x2b, 0xc6, 0xd9, 0xda, 0xeb, 0x7d, 0x6a, 0xb5, 0x7e, 0xe9, 0xb0, 0x6d, 0x7e,
0xf5, 0x02, 0x5b, 0x84, 0x6a, 0xbb, 0xf3, 0x69, 0x73, 0xaf, 0xbd, 0x6d, 0x99, 0xad, 0xe6, 0xde, 0x5e, 0xcf, 0xa5, 0x21, 0xec, 0xf6, 0xf6, 0xb6, 0x54, 0x09, 0x79, 0x76, 0x13, 0x56, 0x08, 0x81,
0x7e, 0x7d, 0x8e, 0x2d, 0xc1, 0xc2, 0x34, 0xde, 0xbc, 0x28, 0x42, 0xe1, 0x1d, 0x74, 0xda, 0x07, 0xb2, 0x58, 0xbd, 0x83, 0x03, 0xab, 0x7b, 0x70, 0xd0, 0xa9, 0x17, 0xd8, 0x22, 0x54, 0xdb, 0x9d,
0x1d, 0xeb, 0xd3, 0x96, 0xd9, 0x6d, 0x1f, 0x74, 0xea, 0x45, 0xb6, 0x0a, 0x2c, 0x99, 0xb4, 0xbb, 0x4f, 0x9b, 0x7b, 0xed, 0x6d, 0xcb, 0x6c, 0x35, 0xf7, 0xf6, 0xeb, 0x73, 0x6c, 0x09, 0x16, 0xa6,
0xdf, 0xdc, 0xaa, 0x97, 0xd8, 0x0a, 0x2c, 0x26, 0xe1, 0xcf, 0x5a, 0x9f, 0xd7, 0x81, 0x35, 0x60, 0xf1, 0xe6, 0x45, 0x11, 0x0a, 0xef, 0xa0, 0xd3, 0x3e, 0xe8, 0x58, 0x9f, 0xb6, 0xcc, 0x6e, 0xfb,
0x99, 0x1a, 0x66, 0x6d, 0xb6, 0xf6, 0x0e, 0x3e, 0xb3, 0xf6, 0xdb, 0x9d, 0xf6, 0xfe, 0xd1, 0x7e, 0xa0, 0x53, 0x2f, 0xb2, 0x55, 0x60, 0xc9, 0xa4, 0xdd, 0xfd, 0xe6, 0x56, 0xbd, 0xc4, 0x56, 0x60,
0xbd, 0x8c, 0x77, 0x33, 0xb6, 0x5a, 0x56, 0xbb, 0xd3, 0x3d, 0xda, 0xd9, 0x69, 0x6f, 0xb5, 0x5b, 0x31, 0x09, 0x7f, 0xd6, 0xfa, 0xbc, 0x0e, 0xac, 0x01, 0xcb, 0xd4, 0x30, 0x6b, 0xb3, 0xb5, 0x77,
0x9d, 0x5e, 0xbd, 0x42, 0x35, 0xa7, 0x75, 0xbc, 0x2a, 0x32, 0xc8, 0xf3, 0x2b, 0xd6, 0x76, 0xbb, 0xf0, 0x99, 0xb5, 0xdf, 0xee, 0xb4, 0xf7, 0x8f, 0xf6, 0xeb, 0x65, 0xbc, 0x9b, 0xb1, 0xd5, 0xb2,
0xdb, 0xdc, 0xdc, 0x6b, 0x6d, 0xd7, 0x6b, 0xec, 0x36, 0xdc, 0xec, 0xb5, 0xf6, 0x0f, 0x0f, 0xcc, 0xda, 0x9d, 0xee, 0xd1, 0xce, 0x4e, 0x7b, 0xab, 0xdd, 0xea, 0xf4, 0xea, 0x15, 0xaa, 0x39, 0xad,
0xa6, 0xf9, 0xb9, 0x3a, 0xdf, 0x62, 0xed, 0x34, 0xdb, 0x7b, 0x47, 0x66, 0xab, 0xbe, 0xc0, 0xde, 0xe3, 0x55, 0x91, 0x41, 0x9e, 0x5f, 0xb1, 0xb6, 0xdb, 0xdd, 0xe6, 0xe6, 0x5e, 0x6b, 0xbb, 0x5e,
0x80, 0xdb, 0x66, 0xeb, 0x93, 0xa3, 0xb6, 0xd9, 0xda, 0xb6, 0x3a, 0x07, 0xdb, 0x2d, 0x6b, 0xa7, 0x63, 0xb7, 0xe1, 0x66, 0xaf, 0xb5, 0x7f, 0x78, 0x60, 0x36, 0xcd, 0xcf, 0xd5, 0xf9, 0x16, 0x6b,
0xd5, 0xec, 0x1d, 0x99, 0x2d, 0x6b, 0xbf, 0xdd, 0xed, 0xb6, 0x3b, 0x4f, 0xeb, 0x75, 0xf6, 0x16, 0xa7, 0xd9, 0xde, 0x3b, 0x32, 0x5b, 0xf5, 0x05, 0xf6, 0x06, 0xdc, 0x36, 0x5b, 0x9f, 0x1c, 0xb5,
0xdc, 0x8d, 0x50, 0xa2, 0x02, 0xa6, 0xb0, 0x16, 0x45, 0xff, 0xd4, 0x94, 0x76, 0x5a, 0xbf, 0xd4, 0xcd, 0xd6, 0xb6, 0xd5, 0x39, 0xd8, 0x6e, 0x59, 0x3b, 0xad, 0x66, 0xef, 0xc8, 0x6c, 0x59, 0xfb,
0xb3, 0x0e, 0x5b, 0x2d, 0xb3, 0xce, 0xd8, 0x3a, 0xac, 0xc6, 0xd5, 0x53, 0x05, 0xb2, 0xee, 0x25, 0xed, 0x6e, 0xb7, 0xdd, 0x79, 0x5a, 0xaf, 0xb3, 0xb7, 0xe0, 0x6e, 0x84, 0x12, 0x15, 0x30, 0x85,
0x91, 0x76, 0xd8, 0x32, 0xf7, 0x9b, 0x1d, 0x31, 0xc1, 0x89, 0xb4, 0x65, 0xd1, 0xec, 0x38, 0x6d, 0xb5, 0x28, 0xfa, 0xa7, 0xa6, 0xb4, 0xd3, 0xfa, 0xa5, 0x9e, 0x75, 0xd8, 0x6a, 0x99, 0x75, 0xc6,
0xba, 0xd9, 0x2b, 0x8c, 0x41, 0x4d, 0x9b, 0x95, 0x9d, 0xa6, 0x59, 0x5f, 0x65, 0x0b, 0x50, 0xde, 0xd6, 0x61, 0x35, 0xae, 0x9e, 0x2a, 0x90, 0x75, 0x2f, 0x89, 0xb4, 0xc3, 0x96, 0xb9, 0xdf, 0xec,
0x3f, 0x3c, 0xb4, 0x7a, 0xed, 0xfd, 0xd6, 0xc1, 0x51, 0xaf, 0xbe, 0xc6, 0x56, 0xa0, 0xde, 0xee, 0x88, 0x09, 0x4e, 0xa4, 0x2d, 0x8b, 0x66, 0xc7, 0x69, 0xd3, 0xcd, 0x5e, 0x61, 0x0c, 0x6a, 0xda,
0xf4, 0x5a, 0xa6, 0x98, 0x6b, 0x95, 0xf5, 0x7f, 0xcc, 0xb3, 0x65, 0x58, 0x50, 0x2d, 0x55, 0xd0, 0xac, 0xec, 0x34, 0xcd, 0xfa, 0x2a, 0x5b, 0x80, 0xf2, 0xfe, 0xe1, 0xa1, 0xd5, 0x6b, 0xef, 0xb7,
0xbf, 0x98, 0x67, 0x6b, 0xc0, 0x8e, 0x3a, 0x66, 0xab, 0xb9, 0x2d, 0x06, 0x2e, 0x4a, 0xf8, 0x9f, 0x0e, 0x8e, 0x7a, 0xf5, 0x35, 0xb6, 0x02, 0xf5, 0x76, 0xa7, 0xd7, 0x32, 0xc5, 0x5c, 0xab, 0xac,
0xf3, 0xd2, 0x6d, 0xf4, 0xe3, 0x5c, 0xb4, 0x59, 0xc7, 0x71, 0x18, 0xc9, 0x0b, 0xce, 0x2b, 0xda, 0xff, 0x63, 0x9e, 0x2d, 0xc3, 0x82, 0x6a, 0xa9, 0x82, 0xfe, 0xc5, 0x3c, 0x5b, 0x03, 0x76, 0xd4,
0xc5, 0xe4, 0x2f, 0x7b, 0x7a, 0x44, 0x53, 0xad, 0x72, 0x33, 0xaa, 0xd5, 0x8c, 0xee, 0x5e, 0xd5, 0x31, 0x5b, 0xcd, 0x6d, 0x31, 0x70, 0x51, 0xc2, 0xff, 0x9c, 0x97, 0x6e, 0xa3, 0x1f, 0xe7, 0xa2,
0x65, 0xbf, 0x37, 0xa1, 0x3a, 0xa2, 0xcb, 0xce, 0xe5, 0xa5, 0xc6, 0x20, 0x83, 0x92, 0x08, 0x48, 0xcd, 0x3a, 0x8e, 0xc3, 0x48, 0x5e, 0x70, 0x5e, 0xd1, 0x2e, 0x26, 0x7f, 0xd9, 0xd3, 0x23, 0x9a,
0x37, 0x1a, 0xcf, 0xbc, 0xbd, 0x51, 0x98, 0x7d, 0x7b, 0x23, 0x4d, 0xbe, 0x9f, 0x4b, 0x93, 0xef, 0x6a, 0x95, 0x9b, 0x51, 0xad, 0x66, 0x74, 0xf7, 0xaa, 0x2e, 0xfb, 0xbd, 0x09, 0xd5, 0x11, 0x5d,
0x1f, 0xc0, 0x22, 0xb1, 0x26, 0xc7, 0x75, 0x46, 0x4a, 0x6b, 0x26, 0x29, 0x70, 0x01, 0x59, 0x14, 0x76, 0x2e, 0x2f, 0x35, 0x06, 0x19, 0x94, 0x44, 0x40, 0xba, 0xd1, 0x78, 0xe6, 0xed, 0x8d, 0xc2,
0xc1, 0x95, 0x3a, 0xa1, 0x54, 0x0e, 0xc9, 0x42, 0xe6, 0xa5, 0xb6, 0x91, 0xd0, 0x34, 0x88, 0x73, 0xec, 0xdb, 0x1b, 0x69, 0xf2, 0xfd, 0x5c, 0x9a, 0x7c, 0xff, 0x00, 0x16, 0x89, 0x35, 0x39, 0xae,
0x44, 0x9a, 0x46, 0x54, 0x83, 0x7d, 0x19, 0xd7, 0x50, 0xd6, 0x6a, 0x20, 0x38, 0xd6, 0xf0, 0x00, 0x33, 0x52, 0x5a, 0x33, 0x49, 0x81, 0x0b, 0xc8, 0xa2, 0x08, 0xae, 0xd4, 0x09, 0xa5, 0x72, 0x48,
0x16, 0xf9, 0x65, 0xe8, 0xdb, 0x96, 0x37, 0xb6, 0xbf, 0x98, 0xa0, 0x5f, 0xdb, 0x46, 0x1d, 0xbe, 0x16, 0x32, 0x2f, 0xb5, 0x8d, 0x84, 0xa6, 0x41, 0x9c, 0x23, 0xd2, 0x34, 0xa2, 0x1a, 0xec, 0xcb,
0x62, 0x2e, 0x60, 0xc2, 0x01, 0xc2, 0xb7, 0xed, 0xd0, 0x7e, 0xf0, 0x25, 0x94, 0xb5, 0x8b, 0xf0, 0xb8, 0x86, 0xb2, 0x56, 0x03, 0xc1, 0xb1, 0x86, 0x07, 0xb0, 0xc8, 0x2f, 0x43, 0xdf, 0xb6, 0xbc,
0xd9, 0x1a, 0x2c, 0x7d, 0xd6, 0xee, 0x75, 0x5a, 0xdd, 0xae, 0x75, 0x78, 0xb4, 0xf9, 0xac, 0xf5, 0xb1, 0xfd, 0xc5, 0x04, 0xfd, 0xda, 0x36, 0xea, 0xf0, 0x15, 0x73, 0x01, 0x13, 0x0e, 0x10, 0xbe,
0xb9, 0xb5, 0xdb, 0xec, 0xee, 0xd6, 0x6f, 0x88, 0x45, 0xdb, 0x69, 0x75, 0x7b, 0xad, 0xed, 0x04, 0x6d, 0x87, 0xf6, 0x83, 0x2f, 0xa1, 0xac, 0x5d, 0x84, 0xcf, 0xd6, 0x60, 0xe9, 0xb3, 0x76, 0xaf,
0x3c, 0xc3, 0x5e, 0x87, 0xf5, 0xa3, 0xce, 0x51, 0xb7, 0xb5, 0x6d, 0xa5, 0xe5, 0xcb, 0x0a, 0x2a, 0xd3, 0xea, 0x76, 0xad, 0xc3, 0xa3, 0xcd, 0x67, 0xad, 0xcf, 0xad, 0xdd, 0x66, 0x77, 0xb7, 0x7e,
0x95, 0xe9, 0x29, 0xd9, 0x73, 0x0f, 0x7e, 0x0d, 0x6a, 0xc9, 0xa3, 0xde, 0x0c, 0x60, 0x6e, 0xaf, 0x43, 0x2c, 0xda, 0x4e, 0xab, 0xdb, 0x6b, 0x6d, 0x27, 0xe0, 0x19, 0xf6, 0x3a, 0xac, 0x1f, 0x75,
0xf5, 0xb4, 0xb9, 0xf5, 0x39, 0xdd, 0xde, 0xda, 0xed, 0x35, 0x7b, 0xed, 0x2d, 0x4b, 0xde, 0xd6, 0x8e, 0xba, 0xad, 0x6d, 0x2b, 0x2d, 0x5f, 0x56, 0x50, 0xa9, 0x4c, 0x4f, 0xc9, 0x9e, 0x7b, 0xf0,
0x2a, 0x38, 0x42, 0x86, 0x95, 0x61, 0xbe, 0xd9, 0xd9, 0xda, 0x3d, 0x30, 0xbb, 0xf5, 0x2c, 0x7b, 0x6b, 0x50, 0x4b, 0x1e, 0xf5, 0x66, 0x00, 0x73, 0x7b, 0xad, 0xa7, 0xcd, 0xad, 0xcf, 0xe9, 0xf6,
0x0d, 0xd6, 0x14, 0xad, 0x6e, 0x1d, 0xec, 0xef, 0xb7, 0x7b, 0xc8, 0x0c, 0x7b, 0x9f, 0x1f, 0x0a, 0xd6, 0x6e, 0xaf, 0xd9, 0x6b, 0x6f, 0x59, 0xf2, 0xb6, 0x56, 0xc1, 0x11, 0x32, 0xac, 0x0c, 0xf3,
0xd2, 0x7c, 0x60, 0x43, 0x29, 0xbe, 0x6e, 0x16, 0x19, 0x4c, 0xbb, 0xd7, 0x6e, 0xf6, 0x62, 0xee, 0xcd, 0xce, 0xd6, 0xee, 0x81, 0xd9, 0xad, 0x67, 0xd9, 0x6b, 0xb0, 0xa6, 0x68, 0x75, 0xeb, 0x60,
0x5a, 0xbf, 0x21, 0xf8, 0x57, 0x0c, 0xc6, 0xdb, 0x62, 0xeb, 0x19, 0x3a, 0x0d, 0xa7, 0x80, 0x54, 0x7f, 0xbf, 0xdd, 0x43, 0x66, 0xd8, 0xfb, 0xfc, 0x50, 0x90, 0xe6, 0x03, 0x1b, 0x4a, 0xf1, 0x75,
0x7b, 0x3d, 0x2b, 0x16, 0x55, 0x0c, 0xdd, 0x3c, 0xe8, 0x89, 0x2e, 0x7c, 0x1b, 0x6a, 0xc9, 0x98, 0xb3, 0xc8, 0x60, 0xda, 0xbd, 0x76, 0xb3, 0x17, 0x73, 0xd7, 0xfa, 0x0d, 0xc1, 0xbf, 0x62, 0x30,
0xc7, 0xa4, 0xf1, 0x7a, 0x1d, 0x56, 0x37, 0x5b, 0xbd, 0xcf, 0x5a, 0xad, 0x0e, 0x8e, 0xce, 0x56, 0xde, 0x16, 0x5b, 0xcf, 0xd0, 0x69, 0x38, 0x05, 0xa4, 0xda, 0xeb, 0x59, 0xb1, 0xa8, 0x62, 0xe8,
0xab, 0xd3, 0x33, 0x9b, 0x7b, 0xed, 0xde, 0xe7, 0xf5, 0xcc, 0x83, 0x8f, 0xa1, 0x3e, 0xed, 0x60, 0xe6, 0x41, 0x4f, 0x74, 0xe1, 0xdb, 0x50, 0x4b, 0xc6, 0x3c, 0x26, 0x8d, 0xd7, 0xeb, 0xb0, 0xba,
0x4c, 0x78, 0x64, 0x5f, 0xe4, 0xba, 0x7d, 0xf0, 0x9f, 0x33, 0xb0, 0x9c, 0x66, 0x5b, 0x17, 0x73, 0xd9, 0xea, 0x7d, 0xd6, 0x6a, 0x75, 0x70, 0x74, 0xb6, 0x5a, 0x9d, 0x9e, 0xd9, 0xdc, 0x6b, 0xf7,
0x28, 0x17, 0xa7, 0x60, 0xd1, 0xdd, 0x83, 0x8e, 0xd5, 0x39, 0xc0, 0xeb, 0x21, 0xd7, 0x61, 0x75, 0x3e, 0xaf, 0x67, 0x1e, 0x7c, 0x0c, 0xf5, 0x69, 0x07, 0x63, 0xc2, 0x23, 0xfb, 0x22, 0xd7, 0xed,
0x2a, 0x41, 0x71, 0x82, 0x0c, 0xbb, 0x05, 0x6b, 0x33, 0x99, 0x2c, 0xf3, 0xe0, 0x08, 0xbb, 0xdd, 0x83, 0xff, 0x9c, 0x81, 0xe5, 0x34, 0xdb, 0xba, 0x98, 0x43, 0xb9, 0x38, 0x05, 0x8b, 0xee, 0x1e,
0x80, 0xe5, 0xa9, 0xc4, 0x96, 0x69, 0x1e, 0x98, 0xf5, 0x1c, 0x7b, 0x0f, 0xee, 0x4f, 0xa5, 0xcc, 0x74, 0xac, 0xce, 0x01, 0x5e, 0x0f, 0xb9, 0x0e, 0xab, 0x53, 0x09, 0x8a, 0x13, 0x64, 0xd8, 0x2d,
0x6e, 0x4c, 0x6a, 0xdf, 0xca, 0xb3, 0x7b, 0xf0, 0xe6, 0x0c, 0x76, 0xcc, 0xbb, 0xad, 0xcd, 0xe6, 0x58, 0x9b, 0xc9, 0x64, 0x99, 0x07, 0x47, 0xd8, 0xed, 0x06, 0x2c, 0x4f, 0x25, 0xb6, 0x4c, 0xf3,
0x9e, 0xe8, 0x5e, 0xbd, 0xf0, 0xe0, 0x9f, 0xe6, 0x00, 0xe2, 0x43, 0x45, 0xa2, 0xfe, 0xed, 0x66, 0xc0, 0xac, 0xe7, 0xd8, 0x7b, 0x70, 0x7f, 0x2a, 0x65, 0x76, 0x63, 0x52, 0xfb, 0x56, 0x9e, 0xdd,
0xaf, 0xb9, 0x77, 0x20, 0xc8, 0xcb, 0x3c, 0xe8, 0x89, 0xd2, 0xcd, 0xd6, 0x27, 0xf5, 0x1b, 0xa9, 0x83, 0x37, 0x67, 0xb0, 0x63, 0xde, 0x6d, 0x6d, 0x36, 0xf7, 0x44, 0xf7, 0xea, 0x85, 0x07, 0xff,
0x29, 0x07, 0x87, 0xa2, 0x43, 0x6b, 0xb0, 0x44, 0x53, 0xb5, 0x27, 0xba, 0xd1, 0xee, 0x3c, 0xa5, 0x34, 0x07, 0x10, 0x1f, 0x2a, 0x12, 0xf5, 0x6f, 0x37, 0x7b, 0xcd, 0xbd, 0x03, 0x41, 0x5e, 0xe6,
0x9b, 0x46, 0x71, 0xf7, 0x3b, 0x3a, 0xdc, 0x31, 0x0f, 0x3a, 0x3d, 0xab, 0xbb, 0x7b, 0xd4, 0xdb, 0x41, 0x4f, 0x94, 0x6e, 0xb6, 0x3e, 0xa9, 0xdf, 0x48, 0x4d, 0x39, 0x38, 0x14, 0x1d, 0x5a, 0x83,
0xc6, 0x7b, 0x4a, 0xb7, 0xcc, 0xf6, 0x21, 0x95, 0x99, 0x7f, 0x11, 0x82, 0x28, 0xba, 0x20, 0xd6, 0x25, 0x9a, 0xaa, 0x3d, 0xd1, 0x8d, 0x76, 0xe7, 0x29, 0xdd, 0x34, 0x8a, 0xbb, 0xdf, 0xd1, 0xe1,
0xc2, 0xd3, 0x83, 0x6e, 0xb7, 0x7d, 0x68, 0x7d, 0x72, 0xd4, 0x32, 0xdb, 0xad, 0x2e, 0x66, 0x9c, 0x8e, 0x79, 0xd0, 0xe9, 0x59, 0xdd, 0xdd, 0xa3, 0xde, 0x36, 0xde, 0x53, 0xba, 0x65, 0xb6, 0x0f,
0x4b, 0x81, 0x0b, 0xfc, 0x79, 0xb1, 0x67, 0xf6, 0xf6, 0x3e, 0x95, 0x9b, 0x9a, 0x40, 0x2d, 0x26, 0xa9, 0xcc, 0xfc, 0x8b, 0x10, 0x44, 0xd1, 0x05, 0xb1, 0x16, 0x9e, 0x1e, 0x74, 0xbb, 0xed, 0x43,
0x41, 0x02, 0xab, 0x24, 0x66, 0x47, 0xec, 0x0a, 0x29, 0x25, 0xc3, 0x35, 0x69, 0x22, 0x5f, 0x59, 0xeb, 0x93, 0xa3, 0x96, 0xd9, 0x6e, 0x75, 0x31, 0xe3, 0x5c, 0x0a, 0x5c, 0xe0, 0xcf, 0x8b, 0x3d,
0xec, 0x77, 0x33, 0x8b, 0x04, 0xb3, 0x55, 0xd2, 0x93, 0x44, 0x2e, 0xdc, 0x0a, 0x23, 0xc1, 0x61, 0xb3, 0xb7, 0xf7, 0xa9, 0xdc, 0xd4, 0x04, 0x6a, 0x31, 0x09, 0x12, 0x58, 0x25, 0x31, 0x3b, 0x62,
0x7b, 0xdb, 0xc4, 0x0c, 0xb5, 0x19, 0xa8, 0xc0, 0x5d, 0x10, 0x44, 0x28, 0xb6, 0x0d, 0x81, 0x52, 0x57, 0x48, 0x29, 0x19, 0xae, 0x49, 0x13, 0xf9, 0xca, 0x62, 0xbf, 0x9b, 0x59, 0x24, 0x98, 0xad,
0x57, 0x1f, 0x22, 0x65, 0xf1, 0xf1, 0x6f, 0xe5, 0xa0, 0x46, 0x07, 0x3c, 0xe9, 0x7d, 0x48, 0xee, 0x92, 0x9e, 0x24, 0x72, 0xe1, 0x56, 0x18, 0x09, 0x0e, 0xdb, 0xdb, 0x26, 0x66, 0xa8, 0xcd, 0x40,
0xb3, 0x7d, 0x98, 0x97, 0x0f, 0x8d, 0xb2, 0x95, 0xe8, 0x8e, 0x47, 0xfd, 0x69, 0xd3, 0xf5, 0xd5, 0x05, 0xee, 0x82, 0x20, 0x42, 0xb1, 0x6d, 0x08, 0x94, 0xba, 0xfa, 0x10, 0x29, 0x8b, 0x8f, 0x7f,
0x69, 0xb0, 0x14, 0x93, 0x97, 0xfe, 0xca, 0x9f, 0xfc, 0xf7, 0xbf, 0x93, 0xad, 0xb2, 0xf2, 0xc3, 0x2b, 0x07, 0x35, 0x3a, 0xe0, 0x49, 0x2f, 0x4c, 0x72, 0x9f, 0xed, 0xc3, 0xbc, 0x7c, 0xaa, 0x94,
0xf3, 0xf7, 0x1f, 0x9e, 0x72, 0x37, 0x10, 0x65, 0xfc, 0x0a, 0x40, 0xfc, 0x7c, 0x26, 0x6b, 0x68, 0xad, 0x44, 0x77, 0x3c, 0xea, 0x8f, 0xa3, 0xae, 0xaf, 0x4e, 0x83, 0xa5, 0x98, 0xbc, 0xf4, 0x57,
0x97, 0x4a, 0x24, 0x1e, 0xce, 0x5c, 0xbf, 0x99, 0x92, 0x22, 0xcb, 0xbd, 0x89, 0xe5, 0x2e, 0x19, 0xfe, 0xe4, 0xbf, 0xff, 0x9d, 0x6c, 0x95, 0x95, 0x1f, 0x9e, 0xbf, 0xff, 0xf0, 0x94, 0xbb, 0x81,
0x35, 0x51, 0xae, 0xe3, 0x3a, 0x21, 0x3d, 0xa5, 0xf9, 0x51, 0xe6, 0x01, 0x1b, 0x40, 0x45, 0x7f, 0x28, 0xe3, 0x57, 0x00, 0xe2, 0x07, 0x38, 0x59, 0x43, 0xbb, 0x54, 0x22, 0xf1, 0xf4, 0xe6, 0xfa,
0xd8, 0x92, 0x29, 0x09, 0x36, 0xe5, 0x69, 0xce, 0xf5, 0x5b, 0xa9, 0x69, 0x4a, 0x37, 0xc0, 0x3a, 0xcd, 0x94, 0x14, 0x59, 0xee, 0x4d, 0x2c, 0x77, 0xc9, 0xa8, 0x89, 0x72, 0x1d, 0xd7, 0x09, 0xe9,
0x56, 0x8c, 0xba, 0xa8, 0x63, 0x82, 0x18, 0x71, 0x2d, 0x43, 0xd2, 0x96, 0xe2, 0xf7, 0x2b, 0xd9, 0x31, 0xce, 0x8f, 0x32, 0x0f, 0xd8, 0x00, 0x2a, 0xfa, 0xd3, 0x98, 0x4c, 0x49, 0xb0, 0x29, 0x8f,
0x6b, 0x9a, 0xbc, 0x3b, 0xf3, 0x7a, 0xe6, 0xfa, 0xed, 0x6b, 0x52, 0x65, 0x5d, 0xb7, 0xb1, 0xae, 0x7b, 0xae, 0xdf, 0x4a, 0x4d, 0x53, 0xba, 0x01, 0xd6, 0xb1, 0x62, 0xd4, 0x45, 0x1d, 0x13, 0xc4,
0x35, 0x83, 0x89, 0xba, 0xfa, 0x88, 0xa3, 0x5e, 0xcf, 0xfc, 0x28, 0xf3, 0xe0, 0xf1, 0xbf, 0x7f, 0x88, 0x6b, 0x19, 0x92, 0xb6, 0x14, 0xbf, 0x80, 0xc9, 0x5e, 0xd3, 0xe4, 0xdd, 0x99, 0xf7, 0x37,
0x07, 0x4a, 0x51, 0xc0, 0x37, 0xfb, 0x75, 0xa8, 0x26, 0x4e, 0xe0, 0x32, 0xd5, 0x8d, 0xb4, 0x03, 0xd7, 0x6f, 0x5f, 0x93, 0x2a, 0xeb, 0xba, 0x8d, 0x75, 0xad, 0x19, 0x4c, 0xd4, 0xd5, 0x47, 0x1c,
0xbb, 0xeb, 0xaf, 0xa5, 0x27, 0xca, 0x8a, 0x5f, 0xc7, 0x8a, 0x1b, 0x6c, 0x55, 0x54, 0x2c, 0x4f, 0xf5, 0xfe, 0xe6, 0x47, 0x99, 0x07, 0x8f, 0xff, 0xfd, 0x3b, 0x50, 0x8a, 0x02, 0xbe, 0xd9, 0xaf,
0xb8, 0x3e, 0xc4, 0x13, 0xf3, 0x74, 0x63, 0xe6, 0x73, 0x4d, 0x2b, 0xa4, 0xca, 0x5e, 0x9b, 0xd6, 0x43, 0x35, 0x71, 0x02, 0x97, 0xa9, 0x6e, 0xa4, 0x1d, 0xd8, 0x5d, 0x7f, 0x2d, 0x3d, 0x51, 0x56,
0xd4, 0x12, 0xb5, 0xdd, 0xbe, 0x26, 0x55, 0x56, 0xf7, 0x1a, 0x56, 0xb7, 0xca, 0x96, 0xf5, 0xea, 0xfc, 0x3a, 0x56, 0xdc, 0x60, 0xab, 0xa2, 0x62, 0x79, 0xc2, 0xf5, 0x21, 0x9e, 0x98, 0xa7, 0x1b,
0x54, 0x9c, 0x30, 0xe3, 0x78, 0x8d, 0xad, 0xfe, 0xbc, 0x23, 0xbb, 0x1d, 0xdf, 0x29, 0x9a, 0xf2, 0x33, 0x9f, 0x6b, 0x5a, 0x21, 0x55, 0xf6, 0xda, 0xb4, 0xa6, 0x96, 0xa8, 0xed, 0xf6, 0x35, 0xa9,
0xec, 0x63, 0x44, 0x22, 0xb3, 0x6f, 0x3f, 0x1a, 0x0d, 0xac, 0x8a, 0x31, 0x9c, 0x3e, 0xfd, 0x75, 0xb2, 0xba, 0xd7, 0xb0, 0xba, 0x55, 0xb6, 0xac, 0x57, 0xa7, 0xe2, 0x84, 0x19, 0xc7, 0x6b, 0x6c,
0x47, 0x76, 0x0c, 0x65, 0xed, 0x45, 0x24, 0x76, 0xf3, 0xda, 0xd7, 0x9b, 0xd6, 0xd7, 0xd3, 0x92, 0xf5, 0x07, 0x22, 0xd9, 0xed, 0xf8, 0x4e, 0xd1, 0x94, 0x87, 0x23, 0x23, 0x12, 0x99, 0x7d, 0xfb,
0xd2, 0xba, 0xa2, 0x97, 0xff, 0xf0, 0x84, 0x73, 0xf6, 0xcb, 0x50, 0x8a, 0xde, 0xd9, 0x61, 0x6b, 0xd1, 0x68, 0x60, 0x55, 0x8c, 0xe1, 0xf4, 0xe9, 0xaf, 0x3b, 0xb2, 0x63, 0x28, 0x6b, 0x2f, 0x22,
0xda, 0xbb, 0x47, 0xfa, 0xbb, 0x40, 0xeb, 0x8d, 0xd9, 0x84, 0x34, 0xe2, 0xd3, 0x4b, 0x17, 0xc4, 0xb1, 0x9b, 0xd7, 0xbe, 0xde, 0xb4, 0xbe, 0x9e, 0x96, 0x94, 0xd6, 0x15, 0xbd, 0xfc, 0x87, 0x27,
0xf7, 0x19, 0x94, 0xb5, 0xb7, 0x74, 0xa2, 0x0e, 0xcc, 0xbe, 0xd7, 0x13, 0x75, 0x20, 0xe5, 0xe9, 0x9c, 0xb3, 0x5f, 0x86, 0x52, 0xf4, 0xce, 0x0e, 0x5b, 0xd3, 0xde, 0x3d, 0xd2, 0xdf, 0x05, 0x5a,
0x1d, 0x63, 0x11, 0xab, 0x28, 0xb3, 0x12, 0xd2, 0x77, 0x78, 0xe9, 0x05, 0x6c, 0x0f, 0x56, 0xa4, 0x6f, 0xcc, 0x26, 0xa4, 0x11, 0x9f, 0x5e, 0xba, 0x20, 0xbe, 0xcf, 0xa0, 0xac, 0xbd, 0xa5, 0x13,
0x06, 0x7c, 0xcc, 0xbf, 0xca, 0x34, 0xa4, 0xbc, 0xa8, 0xf9, 0x28, 0xc3, 0x3e, 0x86, 0xa2, 0x7a, 0x75, 0x60, 0xf6, 0xbd, 0x9e, 0xa8, 0x03, 0x29, 0x4f, 0xef, 0x18, 0x8b, 0x58, 0x45, 0x99, 0x95,
0x32, 0x89, 0xad, 0xa6, 0x3f, 0xfd, 0xb4, 0xbe, 0x36, 0x03, 0x97, 0xea, 0xea, 0xe7, 0x00, 0xf1, 0x90, 0xbe, 0xc3, 0x4b, 0x2f, 0x60, 0x7b, 0xb0, 0x22, 0x35, 0xe0, 0x63, 0xfe, 0x55, 0xa6, 0x21,
0xc3, 0x3d, 0x11, 0x93, 0x98, 0x79, 0x08, 0x28, 0xa2, 0x80, 0xd9, 0x57, 0x7e, 0x8c, 0x55, 0xec, 0xe5, 0x45, 0xcd, 0x47, 0x19, 0xf6, 0x31, 0x14, 0xd5, 0x93, 0x49, 0x6c, 0x35, 0xfd, 0xe9, 0xa7,
0x60, 0x9d, 0x21, 0x93, 0x70, 0xf9, 0x85, 0xba, 0x6b, 0xfc, 0x07, 0x50, 0xd6, 0xde, 0xee, 0x89, 0xf5, 0xb5, 0x19, 0xb8, 0x54, 0x57, 0x3f, 0x07, 0x88, 0x1f, 0xee, 0x89, 0x98, 0xc4, 0xcc, 0x43,
0x86, 0x6f, 0xf6, 0xdd, 0x9f, 0x68, 0xf8, 0x52, 0x9e, 0xfa, 0x31, 0xd6, 0xb1, 0xf4, 0x65, 0x63, 0x40, 0x11, 0x05, 0xcc, 0xbe, 0xf2, 0x63, 0xac, 0x62, 0x07, 0xeb, 0x0c, 0x99, 0x84, 0xcb, 0x2f,
0x41, 0x94, 0x2e, 0x44, 0x60, 0x29, 0x8a, 0x8a, 0x09, 0x3a, 0x83, 0x6a, 0xe2, 0x81, 0x9e, 0x68, 0xd4, 0x5d, 0xe3, 0x3f, 0x80, 0xb2, 0xf6, 0x76, 0x4f, 0x34, 0x7c, 0xb3, 0xef, 0xfe, 0x44, 0xc3,
0x85, 0xa6, 0x3d, 0xff, 0x13, 0xad, 0xd0, 0xd4, 0x37, 0x7d, 0x14, 0x9d, 0x19, 0x8b, 0xa2, 0x1e, 0x97, 0xf2, 0xd4, 0x8f, 0xb1, 0x8e, 0xa5, 0x2f, 0x1b, 0x0b, 0xa2, 0x74, 0x21, 0x02, 0x4b, 0x51,
0xba, 0x4d, 0x4c, 0xab, 0xe9, 0xfb, 0x50, 0xd6, 0x1e, 0xdb, 0x89, 0xfa, 0x32, 0xfb, 0xae, 0x4f, 0x54, 0x4c, 0xd0, 0x19, 0x54, 0x13, 0x0f, 0xf4, 0x44, 0x2b, 0x34, 0xed, 0xf9, 0x9f, 0x68, 0x85,
0xd4, 0x97, 0xb4, 0xb7, 0x79, 0x96, 0xb1, 0x8e, 0x9a, 0x81, 0xa4, 0x80, 0x97, 0x21, 0x8b, 0xb2, 0xa6, 0xbe, 0xe9, 0xa3, 0xe8, 0xcc, 0x58, 0x14, 0xf5, 0xd0, 0x6d, 0x62, 0x5a, 0x4d, 0xdf, 0x87,
0x7f, 0x1d, 0x6a, 0xc9, 0xf7, 0x77, 0xa2, 0xb5, 0x9f, 0xfa, 0x90, 0x4f, 0xb4, 0xf6, 0xaf, 0x79, 0xb2, 0xf6, 0xd8, 0x4e, 0xd4, 0x97, 0xd9, 0x77, 0x7d, 0xa2, 0xbe, 0xa4, 0xbd, 0xcd, 0xb3, 0x8c,
0xb4, 0x47, 0x92, 0xf4, 0x83, 0xa5, 0xa8, 0x92, 0x87, 0x3f, 0x92, 0x47, 0xd7, 0xbe, 0x64, 0x9f, 0x75, 0xd4, 0x0c, 0x24, 0x05, 0xbc, 0x0c, 0x59, 0x94, 0xfd, 0xeb, 0x50, 0x4b, 0xbe, 0xbf, 0x13,
0x08, 0x06, 0x27, 0x2f, 0xeb, 0x66, 0x6b, 0x1a, 0xd5, 0xea, 0xb7, 0x7e, 0x47, 0xeb, 0x65, 0xe6, 0xad, 0xfd, 0xd4, 0x87, 0x7c, 0xa2, 0xb5, 0x7f, 0xcd, 0xa3, 0x3d, 0x92, 0xa4, 0x1f, 0x2c, 0x45,
0x5e, 0xef, 0x24, 0x31, 0x63, 0xe1, 0xec, 0x29, 0x2c, 0x45, 0xc4, 0x1c, 0xdd, 0xbe, 0x1d, 0x44, 0x95, 0x3c, 0xfc, 0x91, 0x3c, 0xba, 0xf6, 0x25, 0xfb, 0x44, 0x30, 0x38, 0x79, 0x59, 0x37, 0x5b,
0x7d, 0x48, 0xbd, 0xe3, 0x7b, 0xbd, 0x3e, 0x9d, 0xfa, 0x28, 0x43, 0xdb, 0x1f, 0x5e, 0x69, 0xac, 0xd3, 0xa8, 0x56, 0xbf, 0xf5, 0x3b, 0x5a, 0x2f, 0x33, 0xf7, 0x7a, 0x27, 0x89, 0x19, 0x0b, 0x67,
0x6d, 0x7f, 0xfa, 0x05, 0xdc, 0xda, 0xf6, 0x97, 0xb8, 0xf9, 0x78, 0x7a, 0xfb, 0x0b, 0x1d, 0x51, 0x4f, 0x61, 0x29, 0x22, 0xe6, 0xe8, 0xf6, 0xed, 0x20, 0xea, 0x43, 0xea, 0x1d, 0xdf, 0xeb, 0xf5,
0x86, 0x0b, 0x0b, 0xd3, 0x57, 0x5d, 0xdf, 0xbe, 0xee, 0x6a, 0x10, 0x2a, 0xfe, 0xf5, 0x17, 0xdf, 0xe9, 0xd4, 0x47, 0x19, 0xda, 0xfe, 0xf0, 0x4a, 0x63, 0x6d, 0xfb, 0xd3, 0x2f, 0xe0, 0xd6, 0xb6,
0x1c, 0x92, 0x64, 0x45, 0x8a, 0x9b, 0x3e, 0x94, 0x91, 0x52, 0xec, 0x57, 0xa1, 0xa2, 0xbf, 0xd9, 0xbf, 0xc4, 0xcd, 0xc7, 0xd3, 0xdb, 0x5f, 0xe8, 0x88, 0x32, 0x5c, 0x58, 0x98, 0xbe, 0xea, 0xfa,
0xc1, 0x74, 0x9e, 0x30, 0x5d, 0xd3, 0xad, 0xd4, 0xb4, 0x24, 0x95, 0xb0, 0x8a, 0x5e, 0x0d, 0xfb, 0xf6, 0x75, 0x57, 0x83, 0x50, 0xf1, 0xaf, 0xbf, 0xf8, 0xe6, 0x90, 0x24, 0x2b, 0x52, 0xdc, 0xf4,
0x14, 0x56, 0xa3, 0x61, 0xd6, 0xef, 0xb6, 0x08, 0xd8, 0x9d, 0x94, 0x1b, 0x2f, 0x12, 0x83, 0x7d, 0xa1, 0x8c, 0x94, 0x62, 0xbf, 0x0a, 0x15, 0xfd, 0xcd, 0x0e, 0xa6, 0xf3, 0x84, 0xe9, 0x9a, 0x6e,
0xf3, 0xda, 0x2b, 0x31, 0x1e, 0x65, 0x04, 0xf5, 0x25, 0xdf, 0x27, 0x88, 0x77, 0x9e, 0xb4, 0x67, 0xa5, 0xa6, 0x25, 0xa9, 0x84, 0x55, 0xf4, 0x6a, 0xd8, 0xa7, 0xb0, 0x1a, 0x0d, 0xb3, 0x7e, 0xb7,
0x19, 0xe2, 0x9d, 0x27, 0xf5, 0x51, 0x03, 0x45, 0x7d, 0x6c, 0x29, 0x31, 0x46, 0x14, 0x43, 0xce, 0x45, 0xc0, 0xee, 0xa4, 0xdc, 0x78, 0x91, 0x18, 0xec, 0x9b, 0xd7, 0x5e, 0x89, 0xf1, 0x28, 0x23,
0xbe, 0x0f, 0x0b, 0xda, 0xc5, 0x1d, 0xdd, 0x2b, 0xb7, 0x1f, 0xad, 0xa4, 0xd9, 0x4b, 0x6c, 0xd7, 0xa8, 0x2f, 0xf9, 0x3e, 0x41, 0xbc, 0xf3, 0xa4, 0x3d, 0xcb, 0x10, 0xef, 0x3c, 0xa9, 0x8f, 0x1a,
0xd3, 0x6c, 0xc6, 0xc6, 0x1a, 0x96, 0xbf, 0x68, 0x24, 0x06, 0x47, 0xac, 0xa2, 0x2d, 0x28, 0xeb, 0x28, 0xea, 0x63, 0x4b, 0x89, 0x31, 0xa2, 0x18, 0x72, 0xf6, 0x7d, 0x58, 0xd0, 0x2e, 0xee, 0xe8,
0x97, 0x82, 0xbc, 0xa0, 0xdc, 0x35, 0x2d, 0x49, 0xbf, 0x2f, 0xf5, 0x51, 0x86, 0xed, 0x41, 0x7d, 0x5e, 0xb9, 0xfd, 0x68, 0x25, 0xcd, 0x5e, 0x62, 0xbb, 0x9e, 0x66, 0x33, 0x36, 0xd6, 0xb0, 0xfc,
0xfa, 0x0a, 0xbf, 0x88, 0xa7, 0xa4, 0x5d, 0x7b, 0xb8, 0x3e, 0x95, 0x98, 0xb8, 0xf8, 0x8f, 0x1d, 0x45, 0x23, 0x31, 0x38, 0x62, 0x15, 0x6d, 0x41, 0x59, 0xbf, 0x14, 0xe4, 0x05, 0xe5, 0xae, 0x69,
0xd2, 0x29, 0xa4, 0xe8, 0xf9, 0x49, 0xcf, 0x9f, 0xde, 0xd5, 0x93, 0xcf, 0x52, 0x46, 0xa5, 0xa5, 0x49, 0xfa, 0x7d, 0xa9, 0x8f, 0x32, 0x6c, 0x0f, 0xea, 0xd3, 0x57, 0xf8, 0x45, 0x3c, 0x25, 0xed,
0x3d, 0x48, 0x7a, 0x3f, 0xf3, 0x28, 0xc3, 0x7e, 0x27, 0x03, 0x95, 0xc4, 0x15, 0x56, 0x89, 0x73, 0xda, 0xc3, 0xf5, 0xa9, 0xc4, 0xc4, 0xc5, 0x7f, 0xec, 0x90, 0x4e, 0x21, 0x45, 0xcf, 0x4f, 0x7a,
0x1e, 0x53, 0xfd, 0x6c, 0xe8, 0x69, 0x7a, 0x47, 0x0d, 0x13, 0x07, 0x71, 0xef, 0xc1, 0xf7, 0x12, 0xfe, 0xf4, 0xae, 0x9e, 0x7c, 0x96, 0x32, 0x2a, 0x2d, 0xed, 0x41, 0xd2, 0xfb, 0x99, 0x47, 0x19,
0x93, 0xf4, 0xa3, 0x84, 0xcb, 0x75, 0x63, 0xfa, 0x7d, 0xca, 0x2f, 0xa7, 0x11, 0xf4, 0x6b, 0x91, 0xf6, 0x3b, 0x19, 0xa8, 0x24, 0xae, 0xb0, 0x4a, 0x9c, 0xf3, 0x98, 0xea, 0x67, 0x43, 0x4f, 0xd3,
0xbf, 0x7c, 0x94, 0x61, 0xff, 0x22, 0x03, 0xb5, 0x64, 0x2c, 0x45, 0xd4, 0xdd, 0xd4, 0xa8, 0x8d, 0x3b, 0x6a, 0x98, 0x38, 0x88, 0x7b, 0x0f, 0xbe, 0x97, 0x98, 0xa4, 0x1f, 0x25, 0x5c, 0xae, 0x1b,
0x88, 0x94, 0xae, 0x09, 0xc0, 0xf8, 0x3e, 0xb6, 0xb2, 0xf7, 0xc0, 0x4c, 0xb4, 0x52, 0xbe, 0xac, 0xd3, 0xef, 0x53, 0x7e, 0x39, 0x8d, 0xa0, 0x5f, 0x8b, 0xfc, 0xe5, 0xa3, 0x0c, 0xfb, 0x17, 0x19,
0xf1, 0xd3, 0xb5, 0x96, 0xfd, 0x22, 0x3d, 0x07, 0xad, 0xe2, 0xee, 0xd8, 0xec, 0xf3, 0xc1, 0x11, 0xa8, 0x25, 0x63, 0x29, 0xa2, 0xee, 0xa6, 0x46, 0x6d, 0x44, 0xa4, 0x74, 0x4d, 0x00, 0xc6, 0xf7,
0xf9, 0xe9, 0x8f, 0xed, 0x1a, 0xb9, 0xdf, 0xc8, 0x66, 0x70, 0x26, 0x7e, 0x40, 0x8f, 0x31, 0xaa, 0xb1, 0x95, 0xbd, 0x07, 0x66, 0xa2, 0x95, 0xf2, 0x65, 0x8d, 0x9f, 0xae, 0xb5, 0xec, 0x17, 0xe9,
0xd0, 0x2b, 0x41, 0xca, 0xaf, 0x5c, 0xc8, 0x5b, 0xd8, 0xb1, 0xd7, 0x8d, 0x9b, 0x89, 0x8e, 0x4d, 0x39, 0x68, 0x15, 0x77, 0xc7, 0x66, 0x9f, 0x0f, 0x8e, 0xc8, 0x4f, 0x7f, 0x6c, 0xd7, 0xc8, 0xfd,
0x4b, 0x1f, 0x4d, 0x6a, 0xa2, 0x7c, 0x30, 0x37, 0xde, 0x3e, 0x67, 0x1e, 0xd1, 0x4d, 0xad, 0x04, 0x46, 0x36, 0x83, 0x33, 0xf1, 0x03, 0x7a, 0x8c, 0x51, 0x85, 0x5e, 0x09, 0x52, 0x7e, 0xe5, 0x42,
0x1b, 0x39, 0xa2, 0x46, 0x4a, 0xf4, 0xc4, 0x7a, 0x7b, 0xc5, 0x62, 0x8c, 0x07, 0xd8, 0xd6, 0xb7, 0xde, 0xc2, 0x8e, 0xbd, 0x6e, 0xdc, 0x4c, 0x74, 0x6c, 0x5a, 0xfa, 0x68, 0x52, 0x13, 0xe5, 0x83,
0x8c, 0x3b, 0xd7, 0xb6, 0xf5, 0x21, 0x06, 0x47, 0x88, 0x16, 0x1f, 0x02, 0xc4, 0xc1, 0xb1, 0x6c, 0xb9, 0xf1, 0xf6, 0x39, 0xf3, 0x88, 0x6e, 0x6a, 0x25, 0xd8, 0xc8, 0x11, 0x35, 0x52, 0xa2, 0x27,
0x2a, 0x44, 0x33, 0xe2, 0x42, 0xb3, 0xf1, 0xb3, 0xc9, 0x45, 0xad, 0x22, 0x39, 0x45, 0x89, 0xbf, 0xd6, 0xdb, 0x2b, 0x16, 0x63, 0x3c, 0xc0, 0xb6, 0xbe, 0x65, 0xdc, 0xb9, 0xb6, 0xad, 0x0f, 0x31,
0x4c, 0x3c, 0x35, 0x0a, 0x1e, 0xd5, 0x45, 0xb0, 0x64, 0x1c, 0x6b, 0x42, 0x04, 0x9b, 0x2e, 0x3f, 0x38, 0x42, 0xb4, 0xf8, 0x10, 0x20, 0x0e, 0x8e, 0x65, 0x53, 0x21, 0x9a, 0x11, 0x17, 0x9a, 0x8d,
0xc1, 0x51, 0xa3, 0x48, 0xd1, 0x23, 0xa8, 0xee, 0x79, 0xde, 0xf3, 0xc9, 0x38, 0x3a, 0x90, 0x91, 0x9f, 0x4d, 0x2e, 0x6a, 0x15, 0xc9, 0x29, 0x4a, 0xfc, 0x65, 0xe2, 0xa9, 0x51, 0xf0, 0xa8, 0x2e,
0x8c, 0x85, 0xda, 0xb5, 0x83, 0xb3, 0xf5, 0xa9, 0x5e, 0x18, 0x77, 0xb1, 0xa8, 0x75, 0xd6, 0xd0, 0x82, 0x25, 0xe3, 0x58, 0x13, 0x22, 0xd8, 0x74, 0xf9, 0x09, 0x8e, 0x1a, 0x45, 0x8a, 0x1e, 0x41,
0x8a, 0x7a, 0xf8, 0xa3, 0x38, 0x22, 0xf7, 0x4b, 0x66, 0xc3, 0x62, 0xc4, 0xa8, 0xe3, 0xa8, 0xd7, 0x75, 0xcf, 0xf3, 0x9e, 0x4f, 0xc6, 0xd1, 0x81, 0x8c, 0x64, 0x2c, 0xd4, 0xae, 0x1d, 0x9c, 0xad,
0x64, 0x31, 0x09, 0xf6, 0x3c, 0x5d, 0x45, 0x42, 0x57, 0x50, 0xad, 0x7d, 0x18, 0xa8, 0x32, 0x1f, 0x4f, 0xf5, 0xc2, 0xb8, 0x8b, 0x45, 0xad, 0xb3, 0x86, 0x56, 0xd4, 0xc3, 0x1f, 0xc5, 0x11, 0xb9,
0x65, 0xd8, 0x21, 0x54, 0xb6, 0x79, 0x1f, 0x6f, 0xf4, 0xc0, 0xb8, 0x9f, 0xa5, 0x44, 0x0c, 0x09, 0x5f, 0x32, 0x1b, 0x16, 0x23, 0x46, 0x1d, 0x47, 0xbd, 0x26, 0x8b, 0x49, 0xb0, 0xe7, 0xe9, 0x2a,
0x05, 0x0c, 0xad, 0x57, 0x13, 0xc0, 0xe4, 0xe6, 0x35, 0xb6, 0xaf, 0x7c, 0xfe, 0xc5, 0xc3, 0x1f, 0x12, 0xba, 0x82, 0x6a, 0xed, 0xc3, 0x40, 0x95, 0xf9, 0x28, 0xc3, 0x0e, 0xa1, 0xb2, 0xcd, 0xfb,
0xc9, 0x88, 0xa2, 0x2f, 0xd5, 0xe6, 0x15, 0x47, 0x97, 0xe9, 0x12, 0x40, 0x32, 0x44, 0x2b, 0xb1, 0x78, 0xa3, 0x07, 0xc6, 0xfd, 0x2c, 0x25, 0x62, 0x48, 0x28, 0x60, 0x68, 0xbd, 0x9a, 0x00, 0x26,
0x79, 0xcd, 0x84, 0x68, 0x25, 0x86, 0x3a, 0x8a, 0x25, 0x1b, 0xc2, 0xe2, 0x4c, 0x54, 0x57, 0xb4, 0x37, 0xaf, 0xb1, 0x7d, 0xe5, 0xf3, 0x2f, 0x1e, 0xfe, 0x48, 0x46, 0x14, 0x7d, 0xa9, 0x36, 0xaf,
0x6f, 0x5d, 0x17, 0x0b, 0xb6, 0x7e, 0xf7, 0x7a, 0x84, 0x64, 0x6d, 0x0f, 0x92, 0xb5, 0x75, 0xa1, 0x38, 0xba, 0x4c, 0x97, 0x00, 0x92, 0x21, 0x5a, 0x89, 0xcd, 0x6b, 0x26, 0x44, 0x2b, 0x31, 0xd4,
0x4a, 0x17, 0x1f, 0x1f, 0x73, 0x3a, 0xdb, 0x3b, 0x75, 0x31, 0x96, 0x7e, 0x70, 0x78, 0x7a, 0x97, 0x51, 0x2c, 0xd9, 0x10, 0x16, 0x67, 0xa2, 0xba, 0xa2, 0x7d, 0xeb, 0xba, 0x58, 0xb0, 0xf5, 0xbb,
0xc1, 0xb4, 0xa4, 0x98, 0x83, 0xa7, 0x3b, 0xd9, 0x09, 0x3e, 0x07, 0xa2, 0x1d, 0xa6, 0x8d, 0x88, 0xd7, 0x23, 0x24, 0x6b, 0x7b, 0x90, 0xac, 0xad, 0x0b, 0x55, 0xba, 0xf8, 0xf8, 0x98, 0xd3, 0xd9,
0x71, 0xf6, 0x80, 0x6f, 0x44, 0x8c, 0x29, 0x67, 0x6f, 0x95, 0x0e, 0xca, 0x56, 0xa2, 0xb2, 0x1f, 0xde, 0xa9, 0x8b, 0xb1, 0xf4, 0x83, 0xc3, 0xd3, 0xbb, 0x0c, 0xa6, 0x25, 0xc5, 0x1c, 0x3c, 0xdd,
0xba, 0xde, 0x80, 0x8f, 0x64, 0xa9, 0xbf, 0x0c, 0xe5, 0xa7, 0x3c, 0x54, 0xa7, 0x57, 0x23, 0x81, 0xc9, 0x4e, 0xf0, 0x39, 0x10, 0xed, 0x30, 0x6d, 0x44, 0x8c, 0xb3, 0x07, 0x7c, 0x23, 0x62, 0x4c,
0x7e, 0xea, 0x38, 0xeb, 0x7a, 0xca, 0x99, 0xe3, 0x24, 0x6d, 0x52, 0xc9, 0x7c, 0x70, 0xca, 0x89, 0x39, 0x7b, 0xab, 0x74, 0x50, 0xb6, 0x12, 0x95, 0xfd, 0xd0, 0xf5, 0x06, 0x7c, 0x24, 0x4b, 0xfd,
0x13, 0x5a, 0xce, 0xe0, 0x4b, 0xf6, 0x4b, 0x58, 0x78, 0x74, 0x57, 0xc3, 0xaa, 0xd6, 0x4c, 0xbd, 0x65, 0x28, 0x3f, 0xe5, 0xa1, 0x3a, 0xbd, 0x1a, 0x09, 0xf4, 0x53, 0xc7, 0x59, 0xd7, 0x53, 0xce,
0xf0, 0x85, 0x29, 0x78, 0x5a, 0xc9, 0xa2, 0xcd, 0x9a, 0x60, 0xe9, 0x42, 0x59, 0xbb, 0xd3, 0x25, 0x1c, 0x27, 0x69, 0x93, 0x4a, 0xe6, 0x83, 0x53, 0x4e, 0x9c, 0xd0, 0x72, 0x06, 0x5f, 0xb2, 0x5f,
0x1a, 0x9b, 0xd9, 0x3b, 0x7c, 0xa2, 0xb1, 0x49, 0xb9, 0x02, 0xc6, 0xb8, 0x8f, 0xf5, 0x18, 0xec, 0xc2, 0xc2, 0xa3, 0xbb, 0x1a, 0x56, 0xb5, 0x66, 0xea, 0x85, 0x2f, 0x4c, 0xc1, 0xd3, 0x4a, 0x16,
0x6e, 0x5c, 0x0f, 0x5d, 0xfb, 0x12, 0xd7, 0xf4, 0xf0, 0x47, 0xf6, 0x28, 0xfc, 0x92, 0x7d, 0x46, 0x6d, 0xd6, 0x04, 0x4b, 0x17, 0xca, 0xda, 0x9d, 0x2e, 0xd1, 0xd8, 0xcc, 0xde, 0xe1, 0x13, 0x8d,
0xd3, 0xa1, 0x9d, 0xce, 0x8d, 0x35, 0x94, 0xe9, 0x83, 0xbc, 0xd1, 0x60, 0x69, 0x49, 0x49, 0xad, 0x4d, 0xca, 0x15, 0x30, 0xc6, 0x7d, 0xac, 0xc7, 0x60, 0x77, 0xe3, 0x7a, 0xe8, 0xda, 0x97, 0xb8,
0x85, 0xaa, 0x42, 0xb1, 0xf1, 0x09, 0x40, 0x37, 0xf4, 0xc6, 0xdb, 0x36, 0x1f, 0x79, 0x6e, 0xcc, 0xa6, 0x87, 0x3f, 0xb2, 0x47, 0xe1, 0x97, 0xec, 0x33, 0x9a, 0x0e, 0xed, 0x74, 0x6e, 0xac, 0xa1,
0xd3, 0xe3, 0xf3, 0xa2, 0x31, 0x9f, 0xd4, 0x0e, 0x8d, 0xb2, 0xcf, 0x34, 0x95, 0x2e, 0x71, 0xae, 0x4c, 0x1f, 0xe4, 0x8d, 0x06, 0x4b, 0x4b, 0x4a, 0x6a, 0x2d, 0x54, 0x15, 0x8a, 0x8d, 0x4f, 0x00,
0x5c, 0x11, 0xf1, 0xb5, 0x47, 0x4a, 0xa3, 0x01, 0x49, 0x39, 0x56, 0xfa, 0x28, 0xc3, 0x9a, 0x00, 0xba, 0xa1, 0x37, 0xde, 0xb6, 0xf9, 0xc8, 0x73, 0x63, 0x9e, 0x1e, 0x9f, 0x17, 0x8d, 0xf9, 0xa4,
0x71, 0xf8, 0x60, 0xa4, 0xa0, 0xcd, 0x44, 0x26, 0x46, 0xec, 0x35, 0x25, 0xd6, 0xf0, 0x10, 0x4a, 0x76, 0x68, 0x94, 0x7d, 0xa6, 0xa9, 0x74, 0x89, 0x73, 0xe5, 0x8a, 0x88, 0xaf, 0x3d, 0x52, 0x1a,
0x71, 0xdc, 0xd5, 0x5a, 0x7c, 0x45, 0x55, 0x22, 0x4a, 0x2b, 0x12, 0x17, 0x66, 0x62, 0x9e, 0x8c, 0x0d, 0x48, 0xca, 0xb1, 0xd2, 0x47, 0x19, 0xd6, 0x04, 0x88, 0xc3, 0x07, 0x23, 0x05, 0x6d, 0x26,
0x3a, 0x0e, 0x15, 0xb0, 0xa2, 0x18, 0xaa, 0x13, 0xce, 0x03, 0xe6, 0xc0, 0x12, 0x35, 0x30, 0x92, 0x32, 0x31, 0x62, 0xaf, 0x29, 0xb1, 0x86, 0x87, 0x50, 0x8a, 0xe3, 0xae, 0xd6, 0xe2, 0x2b, 0xaa,
0xcd, 0xf0, 0x9c, 0x63, 0xf4, 0x08, 0xcf, 0x6c, 0xf8, 0x51, 0xc4, 0x35, 0x52, 0x83, 0x68, 0x12, 0x12, 0x51, 0x5a, 0x91, 0xb8, 0x30, 0x13, 0xf3, 0x64, 0xd4, 0x71, 0xa8, 0x80, 0x15, 0xc5, 0x50,
0x76, 0x26, 0x41, 0xad, 0x74, 0xc6, 0x52, 0x6c, 0x01, 0x23, 0x58, 0x9c, 0x89, 0xd3, 0x88, 0x58, 0x9d, 0x70, 0x1e, 0x30, 0x07, 0x96, 0xa8, 0x81, 0x91, 0x6c, 0x86, 0xe7, 0x1c, 0xa3, 0x47, 0x78,
0xc7, 0x75, 0x81, 0x37, 0x11, 0xeb, 0xb8, 0x36, 0xc4, 0xc3, 0x58, 0xc1, 0x2a, 0x17, 0x0c, 0x40, 0x66, 0xc3, 0x8f, 0x22, 0xae, 0x91, 0x1a, 0x44, 0x93, 0xb0, 0x33, 0x09, 0x6a, 0xa5, 0x33, 0x96,
0xbd, 0xf2, 0xc2, 0x09, 0xfb, 0x67, 0xa2, 0xba, 0xdf, 0xcf, 0xc0, 0x52, 0x4a, 0x24, 0x06, 0x7b, 0x62, 0x0b, 0x18, 0xc1, 0xe2, 0x4c, 0x9c, 0x46, 0xc4, 0x3a, 0xae, 0x0b, 0xbc, 0x89, 0x58, 0xc7,
0x43, 0x99, 0x28, 0xae, 0x8d, 0xd2, 0x58, 0x4f, 0xf5, 0xd8, 0x1b, 0x5d, 0xac, 0x67, 0x9f, 0x3d, 0xb5, 0x21, 0x1e, 0xc6, 0x0a, 0x56, 0xb9, 0x60, 0x00, 0xea, 0x95, 0x17, 0x4e, 0xd8, 0x3f, 0x13,
0x4b, 0x6c, 0xa0, 0xe4, 0x30, 0x97, 0x2b, 0xf3, 0x85, 0x12, 0x4c, 0xaa, 0xf8, 0xf2, 0x05, 0xac, 0xd5, 0xfd, 0x7e, 0x06, 0x96, 0x52, 0x22, 0x31, 0xd8, 0x1b, 0xca, 0x44, 0x71, 0x6d, 0x94, 0xc6,
0x51, 0x43, 0x9a, 0xc3, 0xe1, 0x54, 0x34, 0xc1, 0xeb, 0x5a, 0x2b, 0x52, 0x22, 0x24, 0x12, 0xca, 0x7a, 0xaa, 0xc7, 0xde, 0xe8, 0x62, 0x3d, 0xfb, 0xec, 0x59, 0x62, 0x03, 0x25, 0x87, 0xb9, 0x5c,
0x40, 0x32, 0x4a, 0xe2, 0x1a, 0xd9, 0x9d, 0x9a, 0xca, 0x26, 0x50, 0x9f, 0xf6, 0xd2, 0xb3, 0xeb, 0x99, 0x2f, 0x94, 0x60, 0x52, 0xc5, 0x97, 0x2f, 0x60, 0x8d, 0x1a, 0xd2, 0x1c, 0x0e, 0xa7, 0xa2,
0xcb, 0x5a, 0xbf, 0x93, 0x50, 0xb6, 0x53, 0x3c, 0xfb, 0x5f, 0xc3, 0xca, 0xee, 0x18, 0xeb, 0x69, 0x09, 0x5e, 0xd7, 0x5a, 0x91, 0x12, 0x21, 0x91, 0x50, 0x06, 0x92, 0x51, 0x12, 0xd7, 0xc8, 0xee,
0xe3, 0x42, 0xfa, 0xb7, 0x98, 0x8f, 0xff, 0x3f, 0x0a, 0x29, 0x98, 0xea, 0xe7, 0x9d, 0xe8, 0x55, 0xd4, 0x54, 0x36, 0x81, 0xfa, 0xb4, 0x97, 0x9e, 0x5d, 0x5f, 0xd6, 0xfa, 0x9d, 0x84, 0xb2, 0x9d,
0x81, 0xf4, 0x00, 0x88, 0x48, 0xdd, 0x4f, 0x8f, 0x48, 0x78, 0x1b, 0xab, 0xbf, 0x6b, 0xdc, 0x4a, 0xe2, 0xd9, 0xff, 0x1a, 0x56, 0x76, 0xc7, 0x58, 0x4f, 0x1b, 0x17, 0xd2, 0xbf, 0xc5, 0x7c, 0xfc,
0xab, 0xde, 0xa7, 0x2c, 0xa4, 0xf8, 0xaf, 0x4d, 0xaf, 0x6b, 0xd5, 0x82, 0xbb, 0x69, 0xf3, 0x7d, 0xff, 0x51, 0x48, 0xc1, 0x54, 0x3f, 0xef, 0x44, 0xaf, 0x0a, 0xa4, 0x07, 0x40, 0x44, 0xea, 0x7e,
0xad, 0xe2, 0x35, 0x35, 0xd6, 0x37, 0x50, 0x86, 0xac, 0xe8, 0x21, 0x04, 0xd1, 0xf2, 0x49, 0x89, 0x7a, 0x44, 0xc2, 0xdb, 0x58, 0xfd, 0x5d, 0xe3, 0x56, 0x5a, 0xf5, 0x3e, 0x65, 0x21, 0xc5, 0x7f,
0x55, 0x88, 0x96, 0x4f, 0x5a, 0xcc, 0x41, 0x52, 0x7e, 0x52, 0xd1, 0x06, 0x1f, 0x65, 0x1e, 0x6c, 0x6d, 0x7a, 0x5d, 0xab, 0x16, 0xdc, 0x4d, 0x9b, 0xef, 0x6b, 0x15, 0xaf, 0xa9, 0xb1, 0xbe, 0x81,
0xde, 0xfb, 0xfe, 0xd7, 0x4e, 0x9d, 0xf0, 0x6c, 0x72, 0xbc, 0xd1, 0xf7, 0x46, 0x0f, 0x87, 0xca, 0x32, 0x64, 0x45, 0x0f, 0x21, 0x88, 0x96, 0x4f, 0x4a, 0xac, 0x42, 0xb4, 0x7c, 0xd2, 0x62, 0x0e,
0xb4, 0x29, 0x2f, 0x03, 0x78, 0x38, 0x74, 0x07, 0x0f, 0xb1, 0xd8, 0xe3, 0xb9, 0xb1, 0xef, 0x85, 0x92, 0xf2, 0x93, 0x8a, 0x36, 0xf8, 0x28, 0xf3, 0x60, 0xf3, 0xde, 0xf7, 0xbf, 0x76, 0xea, 0x84,
0xde, 0x37, 0xfe, 0x6f, 0x00, 0x00, 0x00, 0xff, 0xff, 0x63, 0x6c, 0x5d, 0x30, 0x7e, 0x8b, 0x00, 0x67, 0x93, 0xe3, 0x8d, 0xbe, 0x37, 0x7a, 0x38, 0x54, 0xa6, 0x4d, 0x79, 0x19, 0xc0, 0xc3, 0xa1,
0x00, 0x3b, 0x78, 0x88, 0xc5, 0x1e, 0xcf, 0x8d, 0x7d, 0x2f, 0xf4, 0xbe, 0xf1, 0x7f, 0x03, 0x00, 0x00,
0xff, 0xff, 0x7c, 0xf0, 0x8f, 0x49, 0xc0, 0x8b, 0x00, 0x00,
} }
// Reference imports to suppress errors if they are not otherwise used. // Reference imports to suppress errors if they are not otherwise used.

@ -114,10 +114,18 @@ func request_Lightning_ChannelBalance_0(ctx context.Context, marshaler runtime.M
} }
var (
filter_Lightning_GetTransactions_0 = &utilities.DoubleArray{Encoding: map[string]int{}, Base: []int(nil), Check: []int(nil)}
)
func request_Lightning_GetTransactions_0(ctx context.Context, marshaler runtime.Marshaler, client LightningClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { func request_Lightning_GetTransactions_0(ctx context.Context, marshaler runtime.Marshaler, client LightningClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {
var protoReq GetTransactionsRequest var protoReq GetTransactionsRequest
var metadata runtime.ServerMetadata var metadata runtime.ServerMetadata
if err := runtime.PopulateQueryParameters(&protoReq, req.URL.Query(), filter_Lightning_GetTransactions_0); err != nil {
return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err)
}
msg, err := client.GetTransactions(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) msg, err := client.GetTransactions(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD))
return msg, metadata, err return msg, metadata, err

@ -897,7 +897,22 @@ message Transaction {
string raw_tx_hex = 9; string raw_tx_hex = 9;
} }
message GetTransactionsRequest { message GetTransactionsRequest {
/*
The height from which to list transactions, inclusive. If this value is
greater than end_height, transactions will be read in reverse.
*/
int32 start_height = 1;
/*
The height until which to list transactions, inclusive. To include
unconfirmed transactions, this value should be set to -1, which will
return transactions from start_height until the current chain tip and
unconfirmed transactions. If no end_height is provided, the call will
default to this option.
*/
int32 end_height = 2;
} }
message TransactionDetails { message TransactionDetails {
/// The list of transactions relevant to the wallet. /// The list of transactions relevant to the wallet.
repeated Transaction transactions = 1; repeated Transaction transactions = 1;

@ -1377,6 +1377,24 @@
} }
} }
}, },
"parameters": [
{
"name": "start_height",
"description": "The height from which to list transactions, inclusive. If this value is\ngreater than end_height, transactions will be read in reverse.",
"in": "query",
"required": false,
"type": "integer",
"format": "int32"
},
{
"name": "end_height",
"description": "The height until which to list transactions, inclusive. To include\nunconfirmed transactions, this value should be set to -1, which will\nreturn transactions from start_height until the current chain tip and\nunconfirmed transactions. If no end_height is provided, the call will\ndefault to this option.",
"in": "query",
"required": false,
"type": "integer",
"format": "int32"
}
],
"tags": [ "tags": [
"Lightning" "Lightning"
] ]

53
lnrpc/rpc_utils.go Normal file

@ -0,0 +1,53 @@
package lnrpc
import (
"encoding/hex"
"sort"
"github.com/lightningnetwork/lnd/lnwallet"
)
// RPCTransactionDetails returns a set of rpc transaction details.
func RPCTransactionDetails(txns []*lnwallet.TransactionDetail) *TransactionDetails {
txDetails := &TransactionDetails{
Transactions: make([]*Transaction, len(txns)),
}
for i, tx := range txns {
var destAddresses []string
for _, destAddress := range tx.DestAddresses {
destAddresses = append(destAddresses, destAddress.EncodeAddress())
}
// We also get unconfirmed transactions, so BlockHash can be
// nil.
blockHash := ""
if tx.BlockHash != nil {
blockHash = tx.BlockHash.String()
}
txDetails.Transactions[i] = &Transaction{
TxHash: tx.Hash.String(),
Amount: int64(tx.Value),
NumConfirmations: tx.NumConfirmations,
BlockHash: blockHash,
BlockHeight: tx.BlockHeight,
TimeStamp: tx.Timestamp,
TotalFees: tx.TotalFees,
DestAddresses: destAddresses,
RawTxHex: hex.EncodeToString(tx.RawTx),
}
}
// Sort transactions by number of confirmations rather than height so
// that unconfirmed transactions (height =0; confirmations =-1) will
// follow the most recently set of confirmed transactions. If we sort
// by height, unconfirmed transactions will follow our oldest
// transactions, because they have lower block heights.
sort.Slice(txDetails.Transactions, func(i, j int) bool {
return txDetails.Transactions[i].NumConfirmations <
txDetails.Transactions[j].NumConfirmations
})
return txDetails
}

@ -813,6 +813,171 @@ func (m *BumpFeeResponse) XXX_DiscardUnknown() {
var xxx_messageInfo_BumpFeeResponse proto.InternalMessageInfo var xxx_messageInfo_BumpFeeResponse proto.InternalMessageInfo
type ListSweepsRequest struct {
//
//Retrieve the full sweep transaction details. If false, only the sweep txids
//will be returned.
Verbose bool `protobuf:"varint,1,opt,name=verbose,proto3" json:"verbose,omitempty"`
XXX_NoUnkeyedLiteral struct{} `json:"-"`
XXX_unrecognized []byte `json:"-"`
XXX_sizecache int32 `json:"-"`
}
func (m *ListSweepsRequest) Reset() { *m = ListSweepsRequest{} }
func (m *ListSweepsRequest) String() string { return proto.CompactTextString(m) }
func (*ListSweepsRequest) ProtoMessage() {}
func (*ListSweepsRequest) Descriptor() ([]byte, []int) {
return fileDescriptor_6cc6942ac78249e5, []int{14}
}
func (m *ListSweepsRequest) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_ListSweepsRequest.Unmarshal(m, b)
}
func (m *ListSweepsRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
return xxx_messageInfo_ListSweepsRequest.Marshal(b, m, deterministic)
}
func (m *ListSweepsRequest) XXX_Merge(src proto.Message) {
xxx_messageInfo_ListSweepsRequest.Merge(m, src)
}
func (m *ListSweepsRequest) XXX_Size() int {
return xxx_messageInfo_ListSweepsRequest.Size(m)
}
func (m *ListSweepsRequest) XXX_DiscardUnknown() {
xxx_messageInfo_ListSweepsRequest.DiscardUnknown(m)
}
var xxx_messageInfo_ListSweepsRequest proto.InternalMessageInfo
func (m *ListSweepsRequest) GetVerbose() bool {
if m != nil {
return m.Verbose
}
return false
}
type ListSweepsResponse struct {
// Types that are valid to be assigned to Sweeps:
// *ListSweepsResponse_TransactionDetails
// *ListSweepsResponse_TransactionIds
Sweeps isListSweepsResponse_Sweeps `protobuf_oneof:"sweeps"`
XXX_NoUnkeyedLiteral struct{} `json:"-"`
XXX_unrecognized []byte `json:"-"`
XXX_sizecache int32 `json:"-"`
}
func (m *ListSweepsResponse) Reset() { *m = ListSweepsResponse{} }
func (m *ListSweepsResponse) String() string { return proto.CompactTextString(m) }
func (*ListSweepsResponse) ProtoMessage() {}
func (*ListSweepsResponse) Descriptor() ([]byte, []int) {
return fileDescriptor_6cc6942ac78249e5, []int{15}
}
func (m *ListSweepsResponse) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_ListSweepsResponse.Unmarshal(m, b)
}
func (m *ListSweepsResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
return xxx_messageInfo_ListSweepsResponse.Marshal(b, m, deterministic)
}
func (m *ListSweepsResponse) XXX_Merge(src proto.Message) {
xxx_messageInfo_ListSweepsResponse.Merge(m, src)
}
func (m *ListSweepsResponse) XXX_Size() int {
return xxx_messageInfo_ListSweepsResponse.Size(m)
}
func (m *ListSweepsResponse) XXX_DiscardUnknown() {
xxx_messageInfo_ListSweepsResponse.DiscardUnknown(m)
}
var xxx_messageInfo_ListSweepsResponse proto.InternalMessageInfo
type isListSweepsResponse_Sweeps interface {
isListSweepsResponse_Sweeps()
}
type ListSweepsResponse_TransactionDetails struct {
TransactionDetails *lnrpc.TransactionDetails `protobuf:"bytes,1,opt,name=transaction_details,json=transactionDetails,proto3,oneof"`
}
type ListSweepsResponse_TransactionIds struct {
TransactionIds *ListSweepsResponse_TransactionIDs `protobuf:"bytes,2,opt,name=transaction_ids,json=transactionIds,proto3,oneof"`
}
func (*ListSweepsResponse_TransactionDetails) isListSweepsResponse_Sweeps() {}
func (*ListSweepsResponse_TransactionIds) isListSweepsResponse_Sweeps() {}
func (m *ListSweepsResponse) GetSweeps() isListSweepsResponse_Sweeps {
if m != nil {
return m.Sweeps
}
return nil
}
func (m *ListSweepsResponse) GetTransactionDetails() *lnrpc.TransactionDetails {
if x, ok := m.GetSweeps().(*ListSweepsResponse_TransactionDetails); ok {
return x.TransactionDetails
}
return nil
}
func (m *ListSweepsResponse) GetTransactionIds() *ListSweepsResponse_TransactionIDs {
if x, ok := m.GetSweeps().(*ListSweepsResponse_TransactionIds); ok {
return x.TransactionIds
}
return nil
}
// XXX_OneofWrappers is for the internal use of the proto package.
func (*ListSweepsResponse) XXX_OneofWrappers() []interface{} {
return []interface{}{
(*ListSweepsResponse_TransactionDetails)(nil),
(*ListSweepsResponse_TransactionIds)(nil),
}
}
type ListSweepsResponse_TransactionIDs struct {
//
//Reversed, hex-encoded string representing the transaction ids of the
//sweeps that our node has broadcast. Note that these transactions may
//not have confirmed yet, we record sweeps on broadcast, not confirmation.
TransactionIds []string `protobuf:"bytes,1,rep,name=transaction_ids,json=transactionIds,proto3" json:"transaction_ids,omitempty"`
XXX_NoUnkeyedLiteral struct{} `json:"-"`
XXX_unrecognized []byte `json:"-"`
XXX_sizecache int32 `json:"-"`
}
func (m *ListSweepsResponse_TransactionIDs) Reset() { *m = ListSweepsResponse_TransactionIDs{} }
func (m *ListSweepsResponse_TransactionIDs) String() string { return proto.CompactTextString(m) }
func (*ListSweepsResponse_TransactionIDs) ProtoMessage() {}
func (*ListSweepsResponse_TransactionIDs) Descriptor() ([]byte, []int) {
return fileDescriptor_6cc6942ac78249e5, []int{15, 0}
}
func (m *ListSweepsResponse_TransactionIDs) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_ListSweepsResponse_TransactionIDs.Unmarshal(m, b)
}
func (m *ListSweepsResponse_TransactionIDs) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
return xxx_messageInfo_ListSweepsResponse_TransactionIDs.Marshal(b, m, deterministic)
}
func (m *ListSweepsResponse_TransactionIDs) XXX_Merge(src proto.Message) {
xxx_messageInfo_ListSweepsResponse_TransactionIDs.Merge(m, src)
}
func (m *ListSweepsResponse_TransactionIDs) XXX_Size() int {
return xxx_messageInfo_ListSweepsResponse_TransactionIDs.Size(m)
}
func (m *ListSweepsResponse_TransactionIDs) XXX_DiscardUnknown() {
xxx_messageInfo_ListSweepsResponse_TransactionIDs.DiscardUnknown(m)
}
var xxx_messageInfo_ListSweepsResponse_TransactionIDs proto.InternalMessageInfo
func (m *ListSweepsResponse_TransactionIDs) GetTransactionIds() []string {
if m != nil {
return m.TransactionIds
}
return nil
}
func init() { func init() {
proto.RegisterEnum("walletrpc.WitnessType", WitnessType_name, WitnessType_value) proto.RegisterEnum("walletrpc.WitnessType", WitnessType_name, WitnessType_value)
proto.RegisterType((*KeyReq)(nil), "walletrpc.KeyReq") proto.RegisterType((*KeyReq)(nil), "walletrpc.KeyReq")
@ -829,78 +994,89 @@ func init() {
proto.RegisterType((*PendingSweepsResponse)(nil), "walletrpc.PendingSweepsResponse") proto.RegisterType((*PendingSweepsResponse)(nil), "walletrpc.PendingSweepsResponse")
proto.RegisterType((*BumpFeeRequest)(nil), "walletrpc.BumpFeeRequest") proto.RegisterType((*BumpFeeRequest)(nil), "walletrpc.BumpFeeRequest")
proto.RegisterType((*BumpFeeResponse)(nil), "walletrpc.BumpFeeResponse") proto.RegisterType((*BumpFeeResponse)(nil), "walletrpc.BumpFeeResponse")
proto.RegisterType((*ListSweepsRequest)(nil), "walletrpc.ListSweepsRequest")
proto.RegisterType((*ListSweepsResponse)(nil), "walletrpc.ListSweepsResponse")
proto.RegisterType((*ListSweepsResponse_TransactionIDs)(nil), "walletrpc.ListSweepsResponse.TransactionIDs")
} }
func init() { proto.RegisterFile("walletrpc/walletkit.proto", fileDescriptor_6cc6942ac78249e5) } func init() { proto.RegisterFile("walletrpc/walletkit.proto", fileDescriptor_6cc6942ac78249e5) }
var fileDescriptor_6cc6942ac78249e5 = []byte{ var fileDescriptor_6cc6942ac78249e5 = []byte{
// 1055 bytes of a gzipped FileDescriptorProto // 1180 bytes of a gzipped FileDescriptorProto
0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x94, 0x56, 0x6b, 0x6f, 0xe2, 0x46, 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x94, 0x56, 0x6d, 0x6f, 0xe2, 0x46,
0x14, 0x2d, 0x21, 0x21, 0x70, 0x81, 0xc4, 0x19, 0xf2, 0xf0, 0xb2, 0xd9, 0x86, 0xba, 0x0f, 0xa1, 0x10, 0x3e, 0x42, 0x42, 0x60, 0x78, 0x09, 0x59, 0xf2, 0xe2, 0xe3, 0x72, 0x0d, 0x75, 0xdf, 0xa2,
0x3e, 0x40, 0x4d, 0xd4, 0xaa, 0x0f, 0xa9, 0x2a, 0x21, 0x8e, 0x88, 0x20, 0x98, 0xda, 0xce, 0x46, 0xf6, 0x8e, 0xa8, 0x39, 0xb5, 0xea, 0xb5, 0x52, 0xd5, 0x04, 0x1c, 0x11, 0x41, 0x70, 0x6a, 0xfb,
0x5b, 0x55, 0x1a, 0x39, 0x30, 0x21, 0x56, 0xc0, 0xf6, 0x8e, 0x87, 0x02, 0x7f, 0xa4, 0xd2, 0xfe, 0x2e, 0xba, 0xaa, 0xd2, 0xca, 0xe0, 0x0d, 0xb1, 0x02, 0xb6, 0x6f, 0xbd, 0x1c, 0xf0, 0xad, 0xdf,
0x95, 0xfe, 0xba, 0xca, 0xe3, 0x07, 0x63, 0x68, 0x2a, 0xf5, 0x53, 0xf0, 0x39, 0xe7, 0x1e, 0xdf, 0xfa, 0x0f, 0x2a, 0xdd, 0xbf, 0xad, 0xbc, 0x7e, 0x61, 0x0d, 0xcd, 0x49, 0xfd, 0x14, 0x76, 0x9e,
0xb9, 0x73, 0x7d, 0x6f, 0xe0, 0xd5, 0xdc, 0x9a, 0x4c, 0x08, 0xa3, 0xde, 0xb0, 0x19, 0xfe, 0x7a, 0x67, 0x9e, 0x9d, 0x9d, 0x19, 0xcf, 0x04, 0x9e, 0xce, 0xcc, 0xf1, 0x98, 0x30, 0xea, 0x0d, 0x4f,
0xb6, 0x59, 0xc3, 0xa3, 0x2e, 0x73, 0x51, 0x21, 0xa1, 0xaa, 0x05, 0xea, 0x0d, 0x43, 0xb4, 0x7a, 0xc3, 0x5f, 0x0f, 0x36, 0x6b, 0x7a, 0xd4, 0x65, 0x2e, 0x2a, 0x24, 0x50, 0xbd, 0x40, 0xbd, 0x61,
0xe8, 0xdb, 0x63, 0x27, 0x90, 0x07, 0x7f, 0x09, 0x0d, 0x51, 0xe5, 0x37, 0xc8, 0x75, 0xc9, 0x52, 0x68, 0xad, 0xef, 0xf9, 0xf6, 0xc8, 0x09, 0xe8, 0xc1, 0x5f, 0x42, 0x43, 0xab, 0xfc, 0x3b, 0xe4,
0x27, 0xef, 0x51, 0x1d, 0xa4, 0x67, 0xb2, 0xc4, 0x8f, 0xb6, 0x33, 0x26, 0x14, 0x7b, 0xd4, 0x76, 0xba, 0x64, 0xa1, 0x91, 0xf7, 0xe8, 0x04, 0xaa, 0x0f, 0x64, 0x81, 0xef, 0x6c, 0x67, 0x44, 0x28,
0x98, 0x9c, 0xa9, 0x65, 0xea, 0x3b, 0xfa, 0xde, 0x33, 0x59, 0x5e, 0x73, 0x78, 0x10, 0xa0, 0xe8, 0xf6, 0xa8, 0xed, 0x30, 0x29, 0xd3, 0xc8, 0x9c, 0x6c, 0x69, 0x95, 0x07, 0xb2, 0xb8, 0xe4, 0xe6,
0x0d, 0x00, 0x57, 0x5a, 0x53, 0x7b, 0xb2, 0x94, 0xb7, 0xb8, 0xa6, 0x10, 0x68, 0x38, 0xa0, 0x94, 0x9b, 0xc0, 0x8a, 0x9e, 0x03, 0x70, 0xa6, 0x39, 0xb1, 0xc7, 0x0b, 0x69, 0x83, 0x73, 0x0a, 0x01,
0xa1, 0xd8, 0x1a, 0x8d, 0xa8, 0x4e, 0xde, 0xcf, 0x88, 0xcf, 0x14, 0x05, 0x4a, 0xe1, 0xa3, 0xef, 0x87, 0x1b, 0xe4, 0x32, 0x14, 0xcf, 0x2d, 0x8b, 0x6a, 0xe4, 0xfd, 0x94, 0xf8, 0x4c, 0x96, 0xa1,
0xb9, 0x8e, 0x4f, 0x10, 0x82, 0x6d, 0x6b, 0x34, 0xa2, 0xdc, 0xbb, 0xa0, 0xf3, 0xdf, 0xca, 0x67, 0x14, 0x1e, 0x7d, 0xcf, 0x75, 0x7c, 0x82, 0x10, 0x6c, 0x9a, 0x96, 0x45, 0xb9, 0x76, 0x41, 0xe3,
0x50, 0x34, 0xa9, 0xe5, 0xf8, 0xd6, 0x90, 0xd9, 0xae, 0x83, 0x8e, 0x20, 0xc7, 0x16, 0xf8, 0x89, 0xbf, 0xe5, 0x2f, 0xa1, 0x68, 0x50, 0xd3, 0xf1, 0xcd, 0x21, 0xb3, 0x5d, 0x07, 0xed, 0x43, 0x8e,
0x2c, 0xb8, 0xa8, 0xa4, 0xef, 0xb0, 0x45, 0x87, 0x2c, 0x94, 0xef, 0x61, 0x7f, 0x30, 0x7b, 0x98, 0xcd, 0xf1, 0x3d, 0x99, 0x73, 0x52, 0x49, 0xdb, 0x62, 0xf3, 0x0e, 0x99, 0xcb, 0x3f, 0xc2, 0xce,
0xd8, 0xfe, 0x53, 0x62, 0xf6, 0x29, 0x94, 0xbd, 0x10, 0xc2, 0x84, 0x52, 0x37, 0x76, 0x2d, 0x45, 0xcd, 0x74, 0x30, 0xb6, 0xfd, 0xfb, 0x44, 0xec, 0x0b, 0x28, 0x7b, 0xa1, 0x09, 0x13, 0x4a, 0xdd,
0xa0, 0x1a, 0x60, 0xca, 0x1f, 0x80, 0x0c, 0xe2, 0x8c, 0xb4, 0x19, 0xf3, 0x66, 0xcc, 0x8f, 0xf2, 0x58, 0xb5, 0x14, 0x19, 0x95, 0xc0, 0x26, 0xff, 0x09, 0x48, 0x27, 0x8e, 0xa5, 0x4e, 0x99, 0x37,
0x42, 0xa7, 0x00, 0xbe, 0xc5, 0xb0, 0x47, 0x28, 0x7e, 0x9e, 0xf3, 0xb8, 0xac, 0x9e, 0xf7, 0x2d, 0x65, 0x7e, 0x14, 0x17, 0x3a, 0x02, 0xf0, 0x4d, 0x86, 0x3d, 0x42, 0xf1, 0xc3, 0x8c, 0xfb, 0x65,
0x36, 0x20, 0xb4, 0x3b, 0x47, 0x75, 0xd8, 0x75, 0x43, 0xbd, 0xbc, 0x55, 0xcb, 0xd6, 0x8b, 0xe7, 0xb5, 0xbc, 0x6f, 0xb2, 0x1b, 0x42, 0xbb, 0x33, 0x74, 0x02, 0xdb, 0x6e, 0xc8, 0x97, 0x36, 0x1a,
0x7b, 0x8d, 0xa8, 0x7e, 0x0d, 0x73, 0xa1, 0xcd, 0x98, 0x1e, 0xd3, 0xca, 0xd7, 0x50, 0x49, 0xb9, 0xd9, 0x93, 0xe2, 0x59, 0xa5, 0x19, 0xe5, 0xaf, 0x69, 0xcc, 0xd5, 0x29, 0xd3, 0x62, 0x58, 0x7e,
0x47, 0x99, 0x1d, 0x41, 0x8e, 0x5a, 0x73, 0xcc, 0x92, 0x33, 0x50, 0x6b, 0x6e, 0x2e, 0x94, 0xef, 0x01, 0xb5, 0x94, 0x7a, 0x14, 0xd9, 0x3e, 0xe4, 0xa8, 0x39, 0xc3, 0x2c, 0x79, 0x03, 0x35, 0x67,
0x00, 0xa9, 0x3e, 0xb3, 0xa7, 0x16, 0x23, 0xd7, 0x84, 0xc4, 0xb9, 0x9c, 0x41, 0x71, 0xe8, 0x3a, 0xc6, 0x5c, 0xfe, 0x01, 0x90, 0xe2, 0x33, 0x7b, 0x62, 0x32, 0x72, 0x49, 0x48, 0x1c, 0xcb, 0x31,
0x8f, 0x98, 0x59, 0x74, 0x4c, 0xe2, 0xb2, 0x43, 0x00, 0x99, 0x1c, 0x51, 0x2e, 0xa0, 0x92, 0x0a, 0x14, 0x87, 0xae, 0x73, 0x87, 0x99, 0x49, 0x47, 0x24, 0x4e, 0x3b, 0x04, 0x26, 0x83, 0x5b, 0xe4,
0x8b, 0x5e, 0xf2, 0x9f, 0x67, 0x50, 0x3e, 0x64, 0xa1, 0x34, 0x20, 0xce, 0xc8, 0x76, 0xc6, 0xc6, 0x57, 0x50, 0x4b, 0xb9, 0x45, 0x97, 0x7c, 0xf2, 0x0d, 0xf2, 0xc7, 0x2c, 0x94, 0x6e, 0x88, 0x63,
0x9c, 0x10, 0x0f, 0x7d, 0x05, 0xf9, 0x20, 0x6b, 0x37, 0xbe, 0xda, 0xe2, 0xf9, 0x7e, 0x63, 0xc2, 0xd9, 0xce, 0x48, 0x9f, 0x11, 0xe2, 0xa1, 0xef, 0x20, 0x1f, 0x44, 0xed, 0xc6, 0xa5, 0x2d, 0x9e,
0xcf, 0xa4, 0xcd, 0xd8, 0x20, 0x80, 0xf5, 0x44, 0x80, 0x7e, 0x84, 0xd2, 0xdc, 0x66, 0x0e, 0xf1, 0xed, 0x34, 0xc7, 0xfc, 0x4d, 0xea, 0x94, 0xdd, 0x04, 0x66, 0x2d, 0x21, 0xa0, 0xd7, 0x50, 0x9a,
0x7d, 0xcc, 0x96, 0x1e, 0xe1, 0xf7, 0xbc, 0x77, 0x7e, 0xdc, 0x48, 0x9a, 0xab, 0x71, 0x1f, 0xd2, 0xd9, 0xcc, 0x21, 0xbe, 0x8f, 0xd9, 0xc2, 0x23, 0xbc, 0xce, 0x95, 0xb3, 0x83, 0x66, 0xd2, 0x5c,
0xe6, 0xd2, 0x23, 0x7a, 0x71, 0xbe, 0x7a, 0x08, 0x1a, 0xc4, 0x9a, 0xba, 0x33, 0x87, 0x61, 0xdf, 0xcd, 0xdb, 0x10, 0x36, 0x16, 0x1e, 0xd1, 0x8a, 0xb3, 0xe5, 0x21, 0x68, 0x10, 0x73, 0xe2, 0x4e,
0x62, 0x72, 0xb6, 0x96, 0xa9, 0x97, 0xf5, 0x42, 0x88, 0x18, 0x16, 0x43, 0x35, 0x28, 0xc5, 0x59, 0x1d, 0x86, 0x7d, 0x93, 0x49, 0xd9, 0x46, 0xe6, 0xa4, 0xac, 0x15, 0x42, 0x8b, 0x6e, 0x32, 0xd4,
0x3f, 0x2c, 0x19, 0x91, 0xb7, 0xb9, 0x00, 0xc2, 0xbc, 0x2f, 0x97, 0x8c, 0xa0, 0x6f, 0x00, 0x3d, 0x80, 0x52, 0x1c, 0xf5, 0x60, 0xc1, 0x88, 0xb4, 0xc9, 0x09, 0x10, 0xc6, 0x7d, 0xb1, 0x60, 0x04,
0x50, 0xd7, 0x1a, 0x0d, 0x2d, 0x9f, 0x61, 0x8b, 0x31, 0x32, 0xf5, 0x98, 0x2f, 0xef, 0x70, 0xdd, 0xbd, 0x04, 0x34, 0xa0, 0xae, 0x69, 0x0d, 0x4d, 0x9f, 0x61, 0x93, 0x31, 0x32, 0xf1, 0x98, 0x2f,
0x41, 0xc2, 0xb4, 0x22, 0x02, 0x9d, 0xc3, 0x91, 0x43, 0x16, 0x0c, 0xaf, 0x62, 0x9e, 0x88, 0x3d, 0x6d, 0x71, 0xde, 0x6e, 0x82, 0x9c, 0x47, 0x00, 0x3a, 0x83, 0x7d, 0x87, 0xcc, 0x19, 0x5e, 0xfa,
0x7e, 0x62, 0x72, 0x8e, 0x47, 0x54, 0x02, 0xf2, 0x32, 0xe6, 0x3a, 0x9c, 0x0a, 0x62, 0x68, 0x58, 0xdc, 0x13, 0x7b, 0x74, 0xcf, 0xa4, 0x1c, 0xf7, 0xa8, 0x05, 0xe0, 0x45, 0x8c, 0x75, 0x38, 0x14,
0x7d, 0x32, 0xc2, 0x62, 0xf1, 0xf3, 0x61, 0x4c, 0x42, 0xb6, 0x93, 0x5b, 0x40, 0x17, 0x70, 0xbc, 0xf8, 0xd0, 0x30, 0xfb, 0xc4, 0xc2, 0x62, 0xf2, 0xf3, 0xa1, 0x4f, 0x02, 0xb6, 0x92, 0x2a, 0xa0,
0x8a, 0x49, 0x1d, 0xa1, 0xb0, 0x16, 0x64, 0xac, 0xce, 0x72, 0x08, 0x3b, 0x8f, 0x2e, 0x1d, 0x12, 0x57, 0x70, 0xb0, 0xf4, 0x49, 0x3d, 0xa1, 0xb0, 0xe2, 0xa4, 0x2f, 0xdf, 0xb2, 0x07, 0x5b, 0x77,
0x79, 0xb7, 0x96, 0xa9, 0xe7, 0xf5, 0xf0, 0x41, 0x39, 0x86, 0x43, 0xf1, 0x6a, 0xe2, 0xae, 0x54, 0x2e, 0x1d, 0x12, 0x69, 0xbb, 0x91, 0x39, 0xc9, 0x6b, 0xe1, 0x41, 0x3e, 0x80, 0x3d, 0xb1, 0x34,
0xee, 0xe1, 0x68, 0x0d, 0x8f, 0xae, 0xfa, 0x17, 0xd8, 0xf3, 0x42, 0x02, 0xfb, 0x9c, 0x91, 0x33, 0x71, 0x57, 0xca, 0xb7, 0xb0, 0xbf, 0x62, 0x8f, 0x4a, 0xfd, 0x2b, 0x54, 0xbc, 0x10, 0xc0, 0x3e,
0xbc, 0x2f, 0x4f, 0x84, 0x0b, 0x11, 0x23, 0xf5, 0xb2, 0x27, 0xfa, 0x28, 0x7f, 0x65, 0x60, 0xef, 0x47, 0xa4, 0x0c, 0xef, 0xcb, 0x43, 0xa1, 0x20, 0xa2, 0xa7, 0x56, 0xf6, 0x44, 0x1d, 0xf9, 0x9f,
0x72, 0x36, 0xf5, 0x84, 0xae, 0xfb, 0x5f, 0xed, 0x70, 0x06, 0xc5, 0xb0, 0x40, 0xbc, 0x58, 0xbc, 0x0c, 0x54, 0x2e, 0xa6, 0x13, 0x4f, 0xe8, 0xba, 0xff, 0xd5, 0x0e, 0xc7, 0x50, 0x0c, 0x13, 0xc4,
0x1b, 0xca, 0x3a, 0x84, 0x50, 0x50, 0xa2, 0x8d, 0x5b, 0xcd, 0x6e, 0xdc, 0x6a, 0x52, 0x89, 0x6d, 0x93, 0xc5, 0xbb, 0xa1, 0xac, 0x41, 0x68, 0x0a, 0x52, 0xb4, 0x56, 0xd5, 0xec, 0x5a, 0x55, 0x93,
0xb1, 0x12, 0x07, 0xb0, 0x9f, 0xe4, 0x15, 0x9e, 0xf5, 0xcb, 0x0f, 0x59, 0x28, 0x0a, 0xcd, 0x85, 0x4c, 0x6c, 0x8a, 0x99, 0xd8, 0x85, 0x9d, 0x24, 0xae, 0xf0, 0xad, 0xf2, 0x4b, 0xd8, 0xed, 0xd9,
0x2a, 0xb0, 0x7f, 0xd7, 0xef, 0xf6, 0xb5, 0xfb, 0x3e, 0xbe, 0xbf, 0x31, 0xfb, 0xaa, 0x61, 0x48, 0x3e, 0x4b, 0x65, 0x06, 0x49, 0xb0, 0xfd, 0x81, 0xd0, 0x81, 0xeb, 0x13, 0x1e, 0x6c, 0x5e, 0x8b,
0x1f, 0x21, 0x19, 0x0e, 0xdb, 0xda, 0xed, 0xed, 0x8d, 0x79, 0xab, 0xf6, 0x4d, 0x6c, 0xde, 0xdc, 0x8f, 0xf2, 0x5f, 0x1b, 0x80, 0x44, 0x7e, 0x94, 0xb1, 0x1e, 0xd4, 0xd8, 0x72, 0xa8, 0x60, 0x8b,
0xaa, 0xb8, 0xa7, 0xb5, 0xbb, 0x52, 0x06, 0x9d, 0x40, 0x45, 0x60, 0xfa, 0x1a, 0xbe, 0x52, 0x7b, 0x30, 0xd3, 0x1e, 0xfb, 0xd1, 0x4b, 0x9f, 0x46, 0x2f, 0x15, 0xc6, 0x4e, 0x3b, 0x24, 0x74, 0x9e,
0xad, 0x77, 0xd2, 0x16, 0x3a, 0x82, 0x03, 0x81, 0xd0, 0xd5, 0xb7, 0x5a, 0x57, 0x95, 0xb2, 0x81, 0x68, 0x88, 0xad, 0x59, 0xd1, 0x2d, 0xec, 0x88, 0x6a, 0xb6, 0xe5, 0xf3, 0x1c, 0x14, 0xcf, 0x5e,
0xbe, 0x63, 0xf6, 0xda, 0x58, 0xbb, 0xbe, 0x56, 0x75, 0xf5, 0x2a, 0x26, 0xb6, 0x83, 0x57, 0x70, 0x08, 0x05, 0x58, 0x8f, 0x42, 0xbc, 0xe0, 0xaa, 0x1d, 0x88, 0x57, 0x04, 0x99, 0x2b, 0xcb, 0xaf,
0xa2, 0xd5, 0x6e, 0xab, 0x03, 0x73, 0xc5, 0xec, 0xa0, 0xcf, 0xe1, 0x93, 0x54, 0x48, 0xf0, 0x7a, 0xbf, 0x86, 0x4a, 0x9a, 0x83, 0xbe, 0x59, 0xbf, 0x2a, 0xa8, 0x75, 0x61, 0xd5, 0xf5, 0x22, 0x0f,
0xed, 0xce, 0xc4, 0x86, 0xda, 0xd6, 0xfa, 0x57, 0xb8, 0xa7, 0xbe, 0x55, 0x7b, 0x52, 0x0e, 0x7d, 0xb9, 0xb0, 0x17, 0xbe, 0xfd, 0x98, 0x85, 0xa2, 0xf0, 0x39, 0xa2, 0x1a, 0xec, 0xbc, 0xe9, 0x77,
0x01, 0x4a, 0xda, 0xc0, 0xb8, 0x6b, 0xb7, 0x55, 0xc3, 0x48, 0xeb, 0x76, 0xd1, 0x19, 0xbc, 0x5e, 0xfb, 0xea, 0x6d, 0x1f, 0xdf, 0x5e, 0x19, 0x7d, 0x45, 0xd7, 0xab, 0x4f, 0x90, 0x04, 0x7b, 0x2d,
0xcb, 0xe0, 0x56, 0x33, 0xd5, 0xd8, 0x55, 0xca, 0xa3, 0x1a, 0x9c, 0xae, 0x67, 0xc2, 0x15, 0x91, 0xf5, 0xfa, 0xfa, 0xca, 0xb8, 0x56, 0xfa, 0x06, 0x36, 0xae, 0xae, 0x15, 0xdc, 0x53, 0x5b, 0xdd,
0x9f, 0x54, 0x40, 0xa7, 0x20, 0x73, 0x85, 0xe8, 0x1c, 0xe7, 0x0b, 0xe8, 0x10, 0xa4, 0xa8, 0x72, 0x6a, 0x06, 0x1d, 0x42, 0x4d, 0x40, 0xfa, 0x2a, 0x6e, 0x2b, 0xbd, 0xf3, 0x77, 0xd5, 0x0d, 0xb4,
0xb8, 0xab, 0xbe, 0xc3, 0x9d, 0x96, 0xd1, 0x91, 0x8a, 0xe8, 0x35, 0x9c, 0xf4, 0x55, 0x23, 0xb0, 0x0f, 0xbb, 0x02, 0xa0, 0x29, 0x6f, 0xd5, 0xae, 0x52, 0xcd, 0x06, 0xfc, 0x8e, 0xd1, 0x6b, 0x61,
0xdb, 0x20, 0x4b, 0x6b, 0xc5, 0x6a, 0xf5, 0xdb, 0x1d, 0x4d, 0x97, 0xca, 0xe7, 0x7f, 0x6f, 0x43, 0xf5, 0xf2, 0x52, 0xd1, 0x94, 0x76, 0x0c, 0x6c, 0x06, 0x57, 0x70, 0xe0, 0xbc, 0xd5, 0x52, 0x6e,
0xe1, 0x9e, 0x77, 0x5c, 0xd7, 0x66, 0xe8, 0x27, 0x28, 0x5f, 0x11, 0x6a, 0xff, 0x49, 0xfa, 0x64, 0x8c, 0x25, 0xb2, 0x85, 0xbe, 0x82, 0xcf, 0x53, 0x2e, 0xc1, 0xf5, 0xea, 0x1b, 0x03, 0xeb, 0x4a,
0xc1, 0xba, 0x64, 0x89, 0x0e, 0x84, 0x76, 0x0c, 0x17, 0x4b, 0xf5, 0x38, 0x99, 0x9c, 0x5d, 0xb2, 0x4b, 0xed, 0xb7, 0x71, 0x4f, 0x79, 0xab, 0xf4, 0xaa, 0x39, 0xf4, 0x35, 0xc8, 0x69, 0x01, 0xfd,
0xbc, 0x22, 0xfe, 0x90, 0xda, 0x1e, 0x73, 0x29, 0xfa, 0x01, 0x0a, 0x61, 0x6c, 0x10, 0x57, 0x11, 0x4d, 0xab, 0xa5, 0xe8, 0x7a, 0x9a, 0xb7, 0x8d, 0x8e, 0xe1, 0xd9, 0x4a, 0x04, 0xd7, 0xaa, 0xa1,
0x45, 0x3d, 0x77, 0x68, 0x31, 0x97, 0xbe, 0x18, 0xf9, 0x33, 0xe4, 0x83, 0xf7, 0x05, 0x6b, 0x05, 0xc4, 0xaa, 0xd5, 0x3c, 0x6a, 0xc0, 0xd1, 0x6a, 0x24, 0x9c, 0x11, 0xe9, 0x55, 0x0b, 0xe8, 0x08,
0x89, 0x03, 0x49, 0x58, 0x3b, 0xd5, 0x93, 0x0d, 0x3c, 0xfa, 0x90, 0x3a, 0x80, 0xa2, 0x2d, 0x22, 0x24, 0xce, 0x10, 0x95, 0xe3, 0x78, 0x01, 0xed, 0x41, 0x35, 0xca, 0x1c, 0xee, 0x2a, 0xef, 0x70,
0xae, 0x1c, 0xd1, 0x46, 0xc0, 0xab, 0x55, 0xf1, 0xf3, 0x5a, 0x5b, 0x3e, 0x3d, 0x28, 0x0a, 0x93, 0xe7, 0x5c, 0xef, 0x54, 0x8b, 0xe8, 0x19, 0x1c, 0xf6, 0x15, 0x3d, 0x90, 0x5b, 0x03, 0x4b, 0x2b,
0x1f, 0xbd, 0x11, 0xa4, 0x9b, 0xfb, 0xa6, 0xfa, 0xf1, 0x4b, 0xf4, 0xca, 0x4d, 0x18, 0xf1, 0x29, 0xc9, 0x3a, 0xef, 0xb7, 0x3a, 0xaa, 0x56, 0x2d, 0x9f, 0xfd, 0xbd, 0x05, 0x85, 0x5b, 0xde, 0x22,
0xb7, 0xcd, 0x8d, 0x91, 0x72, 0xfb, 0xb7, 0xcd, 0xa0, 0x43, 0x39, 0x35, 0x47, 0xd0, 0xd9, 0x0b, 0x5d, 0x9b, 0xa1, 0x9f, 0xa1, 0xdc, 0x26, 0xd4, 0xfe, 0x40, 0xfa, 0x64, 0xce, 0xba, 0x64, 0x81,
0x73, 0x22, 0xc9, 0xaf, 0xf6, 0xb2, 0x20, 0xf2, 0xfc, 0x15, 0x76, 0xa3, 0x2f, 0x15, 0xbd, 0x12, 0x76, 0x85, 0xfe, 0x09, 0x57, 0x71, 0xfd, 0x20, 0xd9, 0x35, 0x5d, 0xb2, 0x68, 0x13, 0x7f, 0x48,
0xc4, 0xe9, 0xa9, 0x92, 0xaa, 0xd8, 0xda, 0x87, 0x7d, 0xf9, 0xed, 0xef, 0xcd, 0xb1, 0xcd, 0x9e, 0x6d, 0x8f, 0xb9, 0x14, 0xfd, 0x04, 0x85, 0xd0, 0x37, 0xf0, 0xab, 0x89, 0xa4, 0x9e, 0x3b, 0x34,
0x66, 0x0f, 0x8d, 0xa1, 0x3b, 0x6d, 0x4e, 0x82, 0x41, 0xec, 0xd8, 0xce, 0xd8, 0x21, 0x6c, 0xee, 0x99, 0x4b, 0x1f, 0xf5, 0xfc, 0x05, 0xf2, 0xc1, 0x7d, 0xc1, 0x22, 0x46, 0xe2, 0x08, 0x17, 0x16,
0xd2, 0xe7, 0xe6, 0xc4, 0x19, 0x35, 0xf9, 0x00, 0x6a, 0x26, 0x16, 0x0f, 0x39, 0xfe, 0x7f, 0xca, 0x75, 0xfd, 0x70, 0xcd, 0x1e, 0x7d, 0x48, 0x1d, 0x40, 0xd1, 0xde, 0x15, 0x97, 0xb4, 0x28, 0x23,
0xc5, 0x3f, 0x01, 0x00, 0x00, 0xff, 0xff, 0xf1, 0x3f, 0xcd, 0xa5, 0xf0, 0x08, 0x00, 0x00, 0xd8, 0xeb, 0x75, 0x71, 0x20, 0xad, 0xac, 0xeb, 0x1e, 0x14, 0x85, 0x5d, 0x89, 0x9e, 0x0b, 0xd4,
0xf5, 0x0d, 0x5d, 0xff, 0xec, 0x31, 0x78, 0xa9, 0x26, 0x2c, 0xc5, 0x94, 0xda, 0xfa, 0x8e, 0x4d,
0xa9, 0xfd, 0xd7, 0x2e, 0xd5, 0xa0, 0x9c, 0x9a, 0xbc, 0xe8, 0xf8, 0x91, 0xc9, 0x9a, 0xc4, 0xd7,
0x78, 0x9c, 0x10, 0x69, 0xfe, 0x06, 0xdb, 0xd1, 0x6c, 0x43, 0x4f, 0x05, 0x72, 0x7a, 0x0e, 0xa7,
0x32, 0xb6, 0x32, 0x0a, 0x51, 0x17, 0x60, 0x39, 0x54, 0xd0, 0xd1, 0x23, 0xb3, 0x26, 0xd4, 0x79,
0xfe, 0xc9, 0x49, 0x24, 0x3f, 0xb9, 0xf8, 0xfe, 0x8f, 0xd3, 0x91, 0xcd, 0xee, 0xa7, 0x83, 0xe6,
0xd0, 0x9d, 0x9c, 0x8e, 0x83, 0x3d, 0xe8, 0xd8, 0xce, 0xc8, 0x21, 0x6c, 0xe6, 0xd2, 0x87, 0xd3,
0xb1, 0x63, 0x9d, 0xf2, 0xa9, 0x78, 0x9a, 0xe8, 0x0c, 0x72, 0xfc, 0xdf, 0xc4, 0x57, 0xff, 0x06,
0x00, 0x00, 0xff, 0xff, 0xe6, 0xc9, 0x1c, 0x56, 0x6f, 0x0a, 0x00, 0x00,
} }
// Reference imports to suppress errors if they are not otherwise used. // Reference imports to suppress errors if they are not otherwise used.
@ -980,6 +1156,11 @@ type WalletKitClient interface {
//fee preference being provided. For now, the responsibility of ensuring that //fee preference being provided. For now, the responsibility of ensuring that
//the new fee preference is sufficient is delegated to the user. //the new fee preference is sufficient is delegated to the user.
BumpFee(ctx context.Context, in *BumpFeeRequest, opts ...grpc.CallOption) (*BumpFeeResponse, error) BumpFee(ctx context.Context, in *BumpFeeRequest, opts ...grpc.CallOption) (*BumpFeeResponse, error)
//*
//ListSweeps returns a list of the sweep transactions our node has produced.
//Note that these sweeps may not be confirmed yet, as we record sweeps on
//broadcast, not confirmation.
ListSweeps(ctx context.Context, in *ListSweepsRequest, opts ...grpc.CallOption) (*ListSweepsResponse, error)
} }
type walletKitClient struct { type walletKitClient struct {
@ -1062,6 +1243,15 @@ func (c *walletKitClient) BumpFee(ctx context.Context, in *BumpFeeRequest, opts
return out, nil return out, nil
} }
func (c *walletKitClient) ListSweeps(ctx context.Context, in *ListSweepsRequest, opts ...grpc.CallOption) (*ListSweepsResponse, error) {
out := new(ListSweepsResponse)
err := c.cc.Invoke(ctx, "/walletrpc.WalletKit/ListSweeps", in, out, opts...)
if err != nil {
return nil, err
}
return out, nil
}
// WalletKitServer is the server API for WalletKit service. // WalletKitServer is the server API for WalletKit service.
type WalletKitServer interface { type WalletKitServer interface {
//* //*
@ -1129,6 +1319,11 @@ type WalletKitServer interface {
//fee preference being provided. For now, the responsibility of ensuring that //fee preference being provided. For now, the responsibility of ensuring that
//the new fee preference is sufficient is delegated to the user. //the new fee preference is sufficient is delegated to the user.
BumpFee(context.Context, *BumpFeeRequest) (*BumpFeeResponse, error) BumpFee(context.Context, *BumpFeeRequest) (*BumpFeeResponse, error)
//*
//ListSweeps returns a list of the sweep transactions our node has produced.
//Note that these sweeps may not be confirmed yet, as we record sweeps on
//broadcast, not confirmation.
ListSweeps(context.Context, *ListSweepsRequest) (*ListSweepsResponse, error)
} }
func RegisterWalletKitServer(s *grpc.Server, srv WalletKitServer) { func RegisterWalletKitServer(s *grpc.Server, srv WalletKitServer) {
@ -1279,6 +1474,24 @@ func _WalletKit_BumpFee_Handler(srv interface{}, ctx context.Context, dec func(i
return interceptor(ctx, in, info, handler) return interceptor(ctx, in, info, handler)
} }
func _WalletKit_ListSweeps_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
in := new(ListSweepsRequest)
if err := dec(in); err != nil {
return nil, err
}
if interceptor == nil {
return srv.(WalletKitServer).ListSweeps(ctx, in)
}
info := &grpc.UnaryServerInfo{
Server: srv,
FullMethod: "/walletrpc.WalletKit/ListSweeps",
}
handler := func(ctx context.Context, req interface{}) (interface{}, error) {
return srv.(WalletKitServer).ListSweeps(ctx, req.(*ListSweepsRequest))
}
return interceptor(ctx, in, info, handler)
}
var _WalletKit_serviceDesc = grpc.ServiceDesc{ var _WalletKit_serviceDesc = grpc.ServiceDesc{
ServiceName: "walletrpc.WalletKit", ServiceName: "walletrpc.WalletKit",
HandlerType: (*WalletKitServer)(nil), HandlerType: (*WalletKitServer)(nil),
@ -1315,6 +1528,10 @@ var _WalletKit_serviceDesc = grpc.ServiceDesc{
MethodName: "BumpFee", MethodName: "BumpFee",
Handler: _WalletKit_BumpFee_Handler, Handler: _WalletKit_BumpFee_Handler,
}, },
{
MethodName: "ListSweeps",
Handler: _WalletKit_ListSweeps_Handler,
},
}, },
Streams: []grpc.StreamDesc{}, Streams: []grpc.StreamDesc{},
Metadata: "walletrpc/walletkit.proto", Metadata: "walletrpc/walletkit.proto",

@ -244,6 +244,31 @@ message BumpFeeRequest {
message BumpFeeResponse { message BumpFeeResponse {
} }
message ListSweepsRequest {
/*
Retrieve the full sweep transaction details. If false, only the sweep txids
will be returned.
*/
bool verbose = 1;
}
message ListSweepsResponse {
message TransactionIDs {
/*
Reversed, hex-encoded string representing the transaction ids of the
sweeps that our node has broadcast. Note that these transactions may
not have confirmed yet, we record sweeps on broadcast, not confirmation.
*/
repeated string transaction_ids = 1;
}
oneof sweeps {
lnrpc.TransactionDetails transaction_details = 1;
TransactionIDs transaction_ids = 2;
}
}
service WalletKit { service WalletKit {
/** /**
DeriveNextKey attempts to derive the *next* key within the key family DeriveNextKey attempts to derive the *next* key within the key family
@ -325,4 +350,13 @@ service WalletKit {
the new fee preference is sufficient is delegated to the user. the new fee preference is sufficient is delegated to the user.
*/ */
rpc BumpFee (BumpFeeRequest) returns (BumpFeeResponse); rpc BumpFee (BumpFeeRequest) returns (BumpFeeResponse);
/**
ListSweeps returns a list of the sweep transactions our node has produced.
Note that these sweeps may not be confirmed yet, as we record sweeps on
broadcast, not confirmation.
*/
rpc ListSweeps (ListSweepsRequest) returns (ListSweepsResponse) {}
} }

@ -19,6 +19,7 @@ import (
"github.com/lightningnetwork/lnd/lnrpc" "github.com/lightningnetwork/lnd/lnrpc"
"github.com/lightningnetwork/lnd/lnrpc/signrpc" "github.com/lightningnetwork/lnd/lnrpc/signrpc"
"github.com/lightningnetwork/lnd/lnwallet" "github.com/lightningnetwork/lnd/lnwallet"
"github.com/lightningnetwork/lnd/lnwallet/btcwallet"
"github.com/lightningnetwork/lnd/lnwallet/chainfee" "github.com/lightningnetwork/lnd/lnwallet/chainfee"
"github.com/lightningnetwork/lnd/sweep" "github.com/lightningnetwork/lnd/sweep"
"google.golang.org/grpc" "google.golang.org/grpc"
@ -88,6 +89,10 @@ var (
Entity: "onchain", Entity: "onchain",
Action: "write", Action: "write",
}}, }},
"/walletrpc.WalletKit/ListSweeps": {{
Entity: "onchain",
Action: "read",
}},
} }
// DefaultWalletKitMacFilename is the default name of the wallet kit // DefaultWalletKitMacFilename is the default name of the wallet kit
@ -555,3 +560,67 @@ func (w *WalletKit) BumpFee(ctx context.Context,
return &BumpFeeResponse{}, nil return &BumpFeeResponse{}, nil
} }
// ListSweeps returns a list of the sweeps that our node has published.
func (w *WalletKit) ListSweeps(ctx context.Context,
in *ListSweepsRequest) (*ListSweepsResponse, error) {
sweeps, err := w.cfg.Sweeper.ListSweeps()
if err != nil {
return nil, err
}
sweepTxns := make(map[string]bool)
txids := make([]string, len(sweeps))
for i, sweep := range sweeps {
sweepTxns[sweep.String()] = true
txids[i] = sweep.String()
}
// If the caller does not want verbose output, just return the set of
// sweep txids.
if !in.Verbose {
txidResp := &ListSweepsResponse_TransactionIDs{
TransactionIds: txids,
}
return &ListSweepsResponse{
Sweeps: &ListSweepsResponse_TransactionIds{
TransactionIds: txidResp,
},
}, nil
}
// If the caller does want full transaction lookups, query our wallet
// for all transactions, including unconfirmed transactions.
transactions, err := w.cfg.Wallet.ListTransactionDetails(
0, btcwallet.UnconfirmedHeight,
)
if err != nil {
return nil, err
}
var sweepTxDetails []*lnwallet.TransactionDetail
for _, tx := range transactions {
_, ok := sweepTxns[tx.Hash.String()]
if !ok {
continue
}
sweepTxDetails = append(sweepTxDetails, tx)
}
// Fail if we have not retrieved all of our sweep transactions from the
// wallet.
if len(sweepTxDetails) != len(txids) {
return nil, fmt.Errorf("not all sweeps found by list "+
"transactions: %v, %v", len(sweepTxDetails), len(txids))
}
return &ListSweepsResponse{
Sweeps: &ListSweepsResponse_TransactionDetails{
TransactionDetails: lnrpc.RPCTransactionDetails(transactions),
},
}, nil
}

@ -38,6 +38,7 @@ import (
"github.com/lightningnetwork/lnd/lnrpc/invoicesrpc" "github.com/lightningnetwork/lnd/lnrpc/invoicesrpc"
"github.com/lightningnetwork/lnd/lnrpc/routerrpc" "github.com/lightningnetwork/lnd/lnrpc/routerrpc"
"github.com/lightningnetwork/lnd/lnrpc/signrpc" "github.com/lightningnetwork/lnd/lnrpc/signrpc"
"github.com/lightningnetwork/lnd/lnrpc/walletrpc"
"github.com/lightningnetwork/lnd/lnrpc/watchtowerrpc" "github.com/lightningnetwork/lnd/lnrpc/watchtowerrpc"
"github.com/lightningnetwork/lnd/lnrpc/wtclientrpc" "github.com/lightningnetwork/lnd/lnrpc/wtclientrpc"
"github.com/lightningnetwork/lnd/lntest" "github.com/lightningnetwork/lnd/lntest"
@ -3586,6 +3587,13 @@ func channelForceClosureTest(net *lntest.NetworkHarness, t *harnessTest,
} }
} }
// Check that we can find the commitment sweep in our set of known
// sweeps.
err = findSweep(ctxb, alice, sweepingTXID)
if err != nil {
t.Fatalf("csv sweep not found: %v", err)
}
// Restart Alice to ensure that she resumes watching the finalized // Restart Alice to ensure that she resumes watching the finalized
// commitment sweep txid. // commitment sweep txid.
if err := net.RestartNode(alice, nil); err != nil { if err := net.RestartNode(alice, nil); err != nil {
@ -3753,7 +3761,10 @@ func channelForceClosureTest(net *lntest.NetworkHarness, t *harnessTest,
// Retrieve each htlc timeout txn from the mempool, and ensure it is // Retrieve each htlc timeout txn from the mempool, and ensure it is
// well-formed. This entails verifying that each only spends from // well-formed. This entails verifying that each only spends from
// output, and that that output is from the commitment txn. // output, and that that output is from the commitment txn. We do not
// the sweeper check for these timeout transactions because they are
// not swept by the sweeper; the nursery broadcasts the pre-signed
// transaction.
for _, htlcTxID := range htlcTxIDs { for _, htlcTxID := range htlcTxIDs {
// Fetch the sweep transaction, all input it's spending should // Fetch the sweep transaction, all input it's spending should
// be from the commitment transaction which was broadcast // be from the commitment transaction which was broadcast
@ -3904,6 +3915,12 @@ func channelForceClosureTest(net *lntest.NetworkHarness, t *harnessTest,
} }
} }
// Check that we can find the htlc sweep in our set of sweeps.
err = findSweep(ctxb, alice, htlcSweepTx.Hash())
if err != nil {
t.Fatalf("htlc sweep not found: %v", err)
}
// The following restart checks to ensure that the nursery store is // The following restart checks to ensure that the nursery store is
// storing the txid of the previously broadcast htlc sweep txn, and that // storing the txid of the previously broadcast htlc sweep txn, and that
// it begins watching that txid after restarting. // it begins watching that txid after restarting.
@ -4010,6 +4027,35 @@ func channelForceClosureTest(net *lntest.NetworkHarness, t *harnessTest,
} }
} }
// findSweep looks up a sweep in a nodes list of broadcast sweeps.
func findSweep(ctx context.Context, node *lntest.HarnessNode,
sweep *chainhash.Hash) error {
// List all sweeps that alice's node had broadcast.
ctx, _ = context.WithTimeout(ctx, defaultTimeout)
sweepResp, err := node.WalletKitClient.ListSweeps(
ctx, &walletrpc.ListSweepsRequest{
Verbose: false,
})
if err != nil {
return fmt.Errorf("list sweeps error: %v", err)
}
sweepTxIDs, ok := sweepResp.Sweeps.(*walletrpc.ListSweepsResponse_TransactionIds)
if !ok {
return errors.New("expected sweep txids in response")
}
// Check that the sweep tx we have just produced is present.
for _, tx := range sweepTxIDs.TransactionIds.TransactionIds {
if tx == sweep.String() {
return nil
}
}
return fmt.Errorf("sweep: %v not found", sweep.String())
}
// assertAmountSent generates a closure which queries listchannels for sndr and // assertAmountSent generates a closure which queries listchannels for sndr and
// rcvr, and asserts that sndr sent amt satoshis, and that rcvr received amt // rcvr, and asserts that sndr sent amt satoshis, and that rcvr received amt
// satoshis. // satoshis.

@ -26,6 +26,10 @@ import (
const ( const (
defaultAccount = uint32(waddrmgr.DefaultAccountNum) defaultAccount = uint32(waddrmgr.DefaultAccountNum)
// UnconfirmedHeight is the special case end height that is used to
// obtain unconfirmed transactions from ListTransactionDetails.
UnconfirmedHeight int32 = -1
) )
var ( var (
@ -569,20 +573,22 @@ func unminedTransactionsToDetail(
} }
// ListTransactionDetails returns a list of all transactions which are // ListTransactionDetails returns a list of all transactions which are
// relevant to the wallet. // relevant to the wallet. It takes inclusive start and end height to allow
// paginated queries. Unconfirmed transactions can be included in the query
// by providing endHeight = UnconfirmedHeight (= -1).
// //
// This is a part of the WalletController interface. // This is a part of the WalletController interface.
func (b *BtcWallet) ListTransactionDetails() ([]*lnwallet.TransactionDetail, error) { func (b *BtcWallet) ListTransactionDetails(startHeight,
endHeight int32) ([]*lnwallet.TransactionDetail, error) {
// Grab the best block the wallet knows of, we'll use this to calculate // Grab the best block the wallet knows of, we'll use this to calculate
// # of confirmations shortly below. // # of confirmations shortly below.
bestBlock := b.wallet.Manager.SyncedTo() bestBlock := b.wallet.Manager.SyncedTo()
currentHeight := bestBlock.Height currentHeight := bestBlock.Height
// We'll attempt to find all unconfirmed transactions (height of -1), // We'll attempt to find all transactions from start to end height.
// as well as all transactions that are known to have confirmed at this start := base.NewBlockIdentifierFromHeight(startHeight)
// height. stop := base.NewBlockIdentifierFromHeight(endHeight)
start := base.NewBlockIdentifierFromHeight(0)
stop := base.NewBlockIdentifierFromHeight(-1)
txns, err := b.wallet.GetTransactions(start, stop, nil) txns, err := b.wallet.GetTransactions(start, stop, nil)
if err != nil { if err != nil {
return nil, err return nil, err

@ -199,8 +199,14 @@ type WalletController interface {
ListUnspentWitness(minconfirms, maxconfirms int32) ([]*Utxo, error) ListUnspentWitness(minconfirms, maxconfirms int32) ([]*Utxo, error)
// ListTransactionDetails returns a list of all transactions which are // ListTransactionDetails returns a list of all transactions which are
// relevant to the wallet. // relevant to the wallet over [startHeight;endHeight]. If start height
ListTransactionDetails() ([]*TransactionDetail, error) // is greater than end height, the transactions will be retrieved in
// reverse order. To include unconfirmed transactions, endHeight should
// be set to the special value -1. This will return transactions from
// the tip of the chain until the start height (inclusive) and
// unconfirmed transactions.
ListTransactionDetails(startHeight,
endHeight int32) ([]*TransactionDetail, error)
// LockOutpoint marks an outpoint as locked meaning it will no longer // LockOutpoint marks an outpoint as locked meaning it will no longer
// be deemed as eligible for coin selection. Locking outputs are // be deemed as eligible for coin selection. Locking outputs are

@ -206,7 +206,7 @@ func assertTxInWallet(t *testing.T, w *lnwallet.LightningWallet,
// We'll fetch all of our transaction and go through each one until // We'll fetch all of our transaction and go through each one until
// finding the expected transaction with its expected confirmation // finding the expected transaction with its expected confirmation
// status. // status.
txs, err := w.ListTransactionDetails() txs, err := w.ListTransactionDetails(0, btcwallet.UnconfirmedHeight)
if err != nil { if err != nil {
t.Fatalf("unable to retrieve transactions: %v", err) t.Fatalf("unable to retrieve transactions: %v", err)
} }
@ -1101,6 +1101,12 @@ func testListTransactionDetails(miner *rpctest.Harness,
txids[*txid] = struct{}{} txids[*txid] = struct{}{}
} }
// Get the miner's current best block height before we mine blocks.
_, startHeight, err := miner.Node.GetBestBlock()
if err != nil {
t.Fatalf("cannot get best block: %v", err)
}
// Generate 10 blocks to mine all the transactions created above. // Generate 10 blocks to mine all the transactions created above.
const numBlocksMined = 10 const numBlocksMined = 10
blocks, err := miner.Node.Generate(numBlocksMined) blocks, err := miner.Node.Generate(numBlocksMined)
@ -1108,12 +1114,22 @@ func testListTransactionDetails(miner *rpctest.Harness,
t.Fatalf("unable to mine blocks: %v", err) t.Fatalf("unable to mine blocks: %v", err)
} }
// Next, fetch all the current transaction details. // Our new best block height should be our start height + the number of
// blocks we just mined.
chainTip := startHeight + numBlocksMined
// Next, fetch all the current transaction details. We should find all
// of our transactions between our start height before we generated
// blocks, and our end height, which is the chain tip. This query does
// not include unconfirmed transactions, since all of our transactions
// should be confirmed.
err = waitForWalletSync(miner, alice) err = waitForWalletSync(miner, alice)
if err != nil { if err != nil {
t.Fatalf("Couldn't sync Alice's wallet: %v", err) t.Fatalf("Couldn't sync Alice's wallet: %v", err)
} }
txDetails, err := alice.ListTransactionDetails() txDetails, err := alice.ListTransactionDetails(
startHeight, chainTip,
)
if err != nil { if err != nil {
t.Fatalf("unable to fetch tx details: %v", err) t.Fatalf("unable to fetch tx details: %v", err)
} }
@ -1219,10 +1235,13 @@ func testListTransactionDetails(miner *rpctest.Harness,
t.Fatalf("Couldn't sync Alice's wallet: %v", err) t.Fatalf("Couldn't sync Alice's wallet: %v", err)
} }
// We should be able to find the transaction above in the set of // Query our wallet for transactions from the chain tip, including
// returned transactions, and it should have a confirmation of -1, // unconfirmed transactions. The transaction above should be included
// indicating that it's not yet mined. // with a confirmation height of 0, indicating that it has not been
txDetails, err = alice.ListTransactionDetails() // mined yet.
txDetails, err = alice.ListTransactionDetails(
chainTip, btcwallet.UnconfirmedHeight,
)
if err != nil { if err != nil {
t.Fatalf("unable to fetch tx details: %v", err) t.Fatalf("unable to fetch tx details: %v", err)
} }
@ -1259,18 +1278,27 @@ func testListTransactionDetails(miner *rpctest.Harness,
t.Fatalf("unable to find mempool tx in tx details!") t.Fatalf("unable to find mempool tx in tx details!")
} }
burnBlock, err := miner.Node.Generate(1) // Generate one block for our transaction to confirm in.
var numBlocks int32 = 1
burnBlock, err := miner.Node.Generate(uint32(numBlocks))
if err != nil { if err != nil {
t.Fatalf("unable to mine block: %v", err) t.Fatalf("unable to mine block: %v", err)
} }
// Progress our chain tip by the number of blocks we have just mined.
chainTip += numBlocks
// Fetch the transaction details again, the new transaction should be // Fetch the transaction details again, the new transaction should be
// shown as debiting from the wallet's balance. // shown as debiting from the wallet's balance. Start and end height
// are inclusive, so we use chainTip for both parameters to get only
// transactions from the last block.
err = waitForWalletSync(miner, alice) err = waitForWalletSync(miner, alice)
if err != nil { if err != nil {
t.Fatalf("Couldn't sync Alice's wallet: %v", err) t.Fatalf("Couldn't sync Alice's wallet: %v", err)
} }
txDetails, err = alice.ListTransactionDetails() txDetails, err = alice.ListTransactionDetails(
chainTip, chainTip,
)
if err != nil { if err != nil {
t.Fatalf("unable to fetch tx details: %v", err) t.Fatalf("unable to fetch tx details: %v", err)
} }
@ -1302,6 +1330,30 @@ func testListTransactionDetails(miner *rpctest.Harness,
if !burnTxFound { if !burnTxFound {
t.Fatal("tx burning btc not found") t.Fatal("tx burning btc not found")
} }
// Generate a block which has no wallet transactions in it.
chainTip += numBlocks
_, err = miner.Node.Generate(uint32(numBlocks))
if err != nil {
t.Fatalf("unable to mine block: %v", err)
}
err = waitForWalletSync(miner, alice)
if err != nil {
t.Fatalf("Couldn't sync Alice's wallet: %v", err)
}
// Query for transactions only in the latest block. We do not expect
// any transactions to be returned.
txDetails, err = alice.ListTransactionDetails(
chainTip, chainTip,
)
if err != nil {
t.Fatalf("unexpected error: %v", err)
}
if len(txDetails) != 0 {
t.Fatalf("expected 0 transactions, got: %v", len(txDetails))
}
} }
func testTransactionSubscriptions(miner *rpctest.Harness, func testTransactionSubscriptions(miner *rpctest.Harness,

@ -313,7 +313,7 @@ func (m *mockWalletController) ListUnspentWitness(minconfirms,
ret = append(ret, utxo) ret = append(ret, utxo)
return ret, nil return ret, nil
} }
func (*mockWalletController) ListTransactionDetails() ([]*lnwallet.TransactionDetail, error) { func (*mockWalletController) ListTransactionDetails(_, _ int32) ([]*lnwallet.TransactionDetail, error) {
return nil, nil return nil, nil
} }
func (*mockWalletController) LockOutpoint(o wire.OutPoint) {} func (*mockWalletController) LockOutpoint(o wire.OutPoint) {}

@ -50,6 +50,7 @@ import (
"github.com/lightningnetwork/lnd/lnrpc/routerrpc" "github.com/lightningnetwork/lnd/lnrpc/routerrpc"
"github.com/lightningnetwork/lnd/lntypes" "github.com/lightningnetwork/lnd/lntypes"
"github.com/lightningnetwork/lnd/lnwallet" "github.com/lightningnetwork/lnd/lnwallet"
"github.com/lightningnetwork/lnd/lnwallet/btcwallet"
"github.com/lightningnetwork/lnd/lnwallet/chainfee" "github.com/lightningnetwork/lnd/lnwallet/chainfee"
"github.com/lightningnetwork/lnd/lnwallet/chanfunding" "github.com/lightningnetwork/lnd/lnwallet/chanfunding"
"github.com/lightningnetwork/lnd/lnwire" "github.com/lightningnetwork/lnd/lnwire"
@ -4548,44 +4549,26 @@ func (r *rpcServer) SubscribeTransactions(req *lnrpc.GetTransactionsRequest,
// GetTransactions returns a list of describing all the known transactions // GetTransactions returns a list of describing all the known transactions
// relevant to the wallet. // relevant to the wallet.
func (r *rpcServer) GetTransactions(ctx context.Context, func (r *rpcServer) GetTransactions(ctx context.Context,
_ *lnrpc.GetTransactionsRequest) (*lnrpc.TransactionDetails, error) { req *lnrpc.GetTransactionsRequest) (*lnrpc.TransactionDetails, error) {
// TODO(roasbeef): add pagination support // To remain backwards compatible with the old api, default to the
transactions, err := r.server.cc.wallet.ListTransactionDetails() // special case end height which will return transactions from the start
// height until the chain tip, including unconfirmed transactions.
var endHeight int32 = btcwallet.UnconfirmedHeight
// If the user has provided an end height, we overwrite our default.
if req.EndHeight != 0 {
endHeight = req.EndHeight
}
transactions, err := r.server.cc.wallet.ListTransactionDetails(
req.StartHeight, endHeight,
)
if err != nil { if err != nil {
return nil, err return nil, err
} }
txDetails := &lnrpc.TransactionDetails{ return lnrpc.RPCTransactionDetails(transactions), nil
Transactions: make([]*lnrpc.Transaction, len(transactions)),
}
for i, tx := range transactions {
var destAddresses []string
for _, destAddress := range tx.DestAddresses {
destAddresses = append(destAddresses, destAddress.EncodeAddress())
}
// We also get unconfirmed transactions, so BlockHash can be
// nil.
blockHash := ""
if tx.BlockHash != nil {
blockHash = tx.BlockHash.String()
}
txDetails.Transactions[i] = &lnrpc.Transaction{
TxHash: tx.Hash.String(),
Amount: int64(tx.Value),
NumConfirmations: tx.NumConfirmations,
BlockHash: blockHash,
BlockHeight: tx.BlockHeight,
TimeStamp: tx.Timestamp,
TotalFees: tx.TotalFees,
DestAddresses: destAddresses,
RawTxHex: hex.EncodeToString(tx.RawTx),
}
}
return txDetails, nil
} }
// DescribeGraph returns a description of the latest graph state from the PoV // DescribeGraph returns a description of the latest graph state from the PoV

@ -39,6 +39,8 @@ var (
utxnFinalizedKndrTxnKey = []byte("finalized-kndr-txn") utxnFinalizedKndrTxnKey = []byte("finalized-kndr-txn")
byteOrder = binary.BigEndian byteOrder = binary.BigEndian
errNoTxHashesBucket = errors.New("tx hashes bucket does not exist")
) )
// SweeperStore stores published txes. // SweeperStore stores published txes.
@ -53,6 +55,9 @@ type SweeperStore interface {
// GetLastPublishedTx returns the last tx that we called NotifyPublishTx // GetLastPublishedTx returns the last tx that we called NotifyPublishTx
// for. // for.
GetLastPublishedTx() (*wire.MsgTx, error) GetLastPublishedTx() (*wire.MsgTx, error)
// ListSweeps lists all the sweeps we have successfully published.
ListSweeps() ([]chainhash.Hash, error)
} }
type sweeperStore struct { type sweeperStore struct {
@ -173,7 +178,7 @@ func (s *sweeperStore) NotifyPublishTx(sweepTx *wire.MsgTx) error {
txHashesBucket := tx.ReadWriteBucket(txHashesBucketKey) txHashesBucket := tx.ReadWriteBucket(txHashesBucketKey)
if txHashesBucket == nil { if txHashesBucket == nil {
return errors.New("tx hashes bucket does not exist") return errNoTxHashesBucket
} }
var b bytes.Buffer var b bytes.Buffer
@ -230,7 +235,7 @@ func (s *sweeperStore) IsOurTx(hash chainhash.Hash) (bool, error) {
err := kvdb.View(s.db, func(tx kvdb.ReadTx) error { err := kvdb.View(s.db, func(tx kvdb.ReadTx) error {
txHashesBucket := tx.ReadBucket(txHashesBucketKey) txHashesBucket := tx.ReadBucket(txHashesBucketKey)
if txHashesBucket == nil { if txHashesBucket == nil {
return errors.New("tx hashes bucket does not exist") return errNoTxHashesBucket
} }
ours = txHashesBucket.Get(hash[:]) != nil ours = txHashesBucket.Get(hash[:]) != nil
@ -244,5 +249,32 @@ func (s *sweeperStore) IsOurTx(hash chainhash.Hash) (bool, error) {
return ours, nil return ours, nil
} }
// ListSweeps lists all the sweep transactions we have in the sweeper store.
func (s *sweeperStore) ListSweeps() ([]chainhash.Hash, error) {
var sweepTxns []chainhash.Hash
if err := kvdb.View(s.db, func(tx kvdb.ReadTx) error {
txHashesBucket := tx.ReadBucket(txHashesBucketKey)
if txHashesBucket == nil {
return errNoTxHashesBucket
}
return txHashesBucket.ForEach(func(resKey, _ []byte) error {
txid, err := chainhash.NewHash(resKey)
if err != nil {
return err
}
sweepTxns = append(sweepTxns, *txid)
return nil
})
}); err != nil {
return nil, err
}
return sweepTxns, nil
}
// Compile-time constraint to ensure sweeperStore implements SweeperStore. // Compile-time constraint to ensure sweeperStore implements SweeperStore.
var _ SweeperStore = (*sweeperStore)(nil) var _ SweeperStore = (*sweeperStore)(nil)

@ -41,5 +41,15 @@ func (s *MockSweeperStore) GetLastPublishedTx() (*wire.MsgTx, error) {
return s.lastTx, nil return s.lastTx, nil
} }
// ListSweeps lists all the sweeps we have successfully published.
func (s *MockSweeperStore) ListSweeps() ([]chainhash.Hash, error) {
var txns []chainhash.Hash
for tx := range s.ourTxes {
txns = append(txns, tx)
}
return txns, nil
}
// Compile-time constraint to ensure MockSweeperStore implements SweeperStore. // Compile-time constraint to ensure MockSweeperStore implements SweeperStore.
var _ SweeperStore = (*MockSweeperStore)(nil) var _ SweeperStore = (*MockSweeperStore)(nil)

@ -150,4 +150,28 @@ func testStore(t *testing.T, createStore func() (SweeperStore, error)) {
if ours { if ours {
t.Fatal("expected tx to be not ours") t.Fatal("expected tx to be not ours")
} }
txns, err := store.ListSweeps()
if err != nil {
t.Fatalf("unexpected error: %v", err)
}
// Create a map containing the sweeps we expect to be returned by list
// sweeps.
expected := map[chainhash.Hash]bool{
tx1.TxHash(): true,
tx2.TxHash(): true,
}
if len(txns) != len(expected) {
t.Fatalf("expected: %v sweeps, got: %v", len(expected),
len(txns))
}
for _, tx := range txns {
_, ok := expected[tx]
if !ok {
t.Fatalf("unexpected tx: %v", tx)
}
}
} }

@ -9,6 +9,7 @@ import (
"sync/atomic" "sync/atomic"
"time" "time"
"github.com/btcsuite/btcd/chaincfg/chainhash"
"github.com/btcsuite/btcd/wire" "github.com/btcsuite/btcd/wire"
"github.com/btcsuite/btcutil" "github.com/btcsuite/btcutil"
"github.com/davecgh/go-spew/spew" "github.com/davecgh/go-spew/spew"
@ -1262,6 +1263,11 @@ func DefaultNextAttemptDeltaFunc(attempts int) int32 {
return 1 + rand.Int31n(1<<uint(attempts-1)) return 1 + rand.Int31n(1<<uint(attempts-1))
} }
// ListSweeps returns a list of the the sweeps recorded by the sweep store.
func (s *UtxoSweeper) ListSweeps() ([]chainhash.Hash, error) {
return s.cfg.Store.ListSweeps()
}
// init initializes the random generator for random input rescheduling. // init initializes the random generator for random input rescheduling.
func init() { func init() {
rand.Seed(time.Now().Unix()) rand.Seed(time.Now().Unix())