multi: move auctioneer proto to auctioneerrpc package

As a preparation to extract the auctioneer proto package into its own
sub-module, we move it out of the poolrpc package.
This commit is contained in:
Oliver Gugger 2021-01-22 10:28:02 +01:00
parent ae21a944c6
commit 83b458b504
No known key found for this signature in database
GPG key ID: 8E4256593F177720
27 changed files with 793 additions and 738 deletions

View file

@ -145,10 +145,12 @@ list:
rpc:
@$(call print, "Compiling protos.")
cd ./poolrpc; ./gen_protos.sh
cd ./auctioneerrpc; ./gen_protos.sh
rpc-format:
@$(call print, "Formatting protos.")
cd ./poolrpc; find . -name "*.proto" | xargs clang-format --style=file -i
cd ./auctioneerrpc; find . -name "*.proto" | xargs clang-format --style=file -i
clean:
@$(call print, "Cleaning source.$(NC)")

View file

@ -7,8 +7,8 @@ import (
"github.com/lightninglabs/lndclient"
"github.com/lightninglabs/pool/account"
"github.com/lightninglabs/pool/auctioneerrpc"
"github.com/lightninglabs/pool/order"
"github.com/lightninglabs/pool/poolrpc"
"github.com/lightningnetwork/lnd/keychain"
)
@ -18,9 +18,9 @@ import (
type acctSubscription struct {
acctKey *keychain.KeyDescriptor
commitHash [32]byte
sendMsg func(*poolrpc.ClientAuctionMessage) error
sendMsg func(*auctioneerrpc.ClientAuctionMessage) error
signer lndclient.SignerClient
msgChan chan *poolrpc.ServerAuctionMessage
msgChan chan *auctioneerrpc.ServerAuctionMessage
errChan chan error
quit chan struct{}
}
@ -46,9 +46,9 @@ func (s *acctSubscription) authenticate(ctx context.Context) error {
// a challenge back. We need to track the subscription from now on so
// the goroutine reading the incoming messages knows which subscription
// to add the received challenge to.
err = s.sendMsg(&poolrpc.ClientAuctionMessage{
Msg: &poolrpc.ClientAuctionMessage_Commit{
Commit: &poolrpc.AccountCommitment{
err = s.sendMsg(&auctioneerrpc.ClientAuctionMessage{
Msg: &auctioneerrpc.ClientAuctionMessage_Commit{
Commit: &auctioneerrpc.AccountCommitment{
CommitHash: s.commitHash[:],
BatchVersion: uint32(order.CurrentBatchVersion),
},
@ -67,7 +67,7 @@ func (s *acctSubscription) authenticate(ctx context.Context) error {
"was received")
}
msg, ok := srvMsg.Msg.(*poolrpc.ServerAuctionMessage_Challenge)
msg, ok := srvMsg.Msg.(*auctioneerrpc.ServerAuctionMessage_Challenge)
if !ok {
return fmt.Errorf("unexpected server message in auth "+
"process: %v", msg)
@ -85,9 +85,9 @@ func (s *acctSubscription) authenticate(ctx context.Context) error {
if err != nil {
return err
}
return s.sendMsg(&poolrpc.ClientAuctionMessage{
Msg: &poolrpc.ClientAuctionMessage_Subscribe{
Subscribe: &poolrpc.AccountSubscription{
return s.sendMsg(&auctioneerrpc.ClientAuctionMessage{
Msg: &auctioneerrpc.ClientAuctionMessage_Subscribe{
Subscribe: &auctioneerrpc.AccountSubscription{
TraderKey: acctPubKey[:],
CommitNonce: nonce[:],
AuthSig: sig,

View file

@ -10,8 +10,8 @@ import (
"time"
"github.com/btcsuite/btcd/btcec"
"github.com/lightninglabs/pool/auctioneerrpc"
"github.com/lightninglabs/pool/internal/test"
"github.com/lightninglabs/pool/poolrpc"
"github.com/lightningnetwork/lnd/keychain"
)
@ -32,10 +32,10 @@ var (
// handshake is performed correctly when subscribing for account updates.
func TestAccountSubscriptionAuthenticate(t *testing.T) {
var (
msgChan = make(chan *poolrpc.ClientAuctionMessage)
srvMsgChan = make(chan *poolrpc.ServerAuctionMessage)
msgChan = make(chan *auctioneerrpc.ClientAuctionMessage)
srvMsgChan = make(chan *auctioneerrpc.ServerAuctionMessage)
errChan = make(chan error)
sendMsg = func(msg *poolrpc.ClientAuctionMessage) error {
sendMsg = func(msg *auctioneerrpc.ClientAuctionMessage) error {
msgChan <- msg
return nil
}
@ -56,7 +56,7 @@ func TestAccountSubscriptionAuthenticate(t *testing.T) {
// Step 1: We expect a commitment message.
select {
case msg := <-msgChan:
if _, ok := msg.Msg.(*poolrpc.ClientAuctionMessage_Commit); !ok {
if _, ok := msg.Msg.(*auctioneerrpc.ClientAuctionMessage_Commit); !ok {
t.Fatalf("unexpected message type: %v", msg)
}
@ -65,9 +65,9 @@ func TestAccountSubscriptionAuthenticate(t *testing.T) {
}
// Step 2: Simulate the server sending back the challenge.
srvMsgChan <- &poolrpc.ServerAuctionMessage{
Msg: &poolrpc.ServerAuctionMessage_Challenge{
Challenge: &poolrpc.ServerChallenge{
srvMsgChan <- &auctioneerrpc.ServerAuctionMessage{
Msg: &auctioneerrpc.ServerAuctionMessage_Challenge{
Challenge: &auctioneerrpc.ServerChallenge{
Challenge: []byte{11, 99, 11},
},
},
@ -76,7 +76,7 @@ func TestAccountSubscriptionAuthenticate(t *testing.T) {
// Step 3: We expect the final message, the subscription.
select {
case msg := <-msgChan:
subMsg, ok := msg.Msg.(*poolrpc.ClientAuctionMessage_Subscribe)
subMsg, ok := msg.Msg.(*auctioneerrpc.ClientAuctionMessage_Subscribe)
if !ok {
t.Fatalf("unexpected message type: %v", msg)
}
@ -94,10 +94,10 @@ func TestAccountSubscriptionAuthenticate(t *testing.T) {
// handshake is canceled if the channel is closed prematurely.
func TestAccountSubscriptionAuthenticateAbort(t *testing.T) {
var (
msgChan = make(chan *poolrpc.ClientAuctionMessage)
srvMsgChan = make(chan *poolrpc.ServerAuctionMessage)
msgChan = make(chan *auctioneerrpc.ClientAuctionMessage)
srvMsgChan = make(chan *auctioneerrpc.ServerAuctionMessage)
errChan = make(chan error)
sendMsg = func(msg *poolrpc.ClientAuctionMessage) error {
sendMsg = func(msg *auctioneerrpc.ClientAuctionMessage) error {
msgChan <- msg
return nil
}
@ -118,7 +118,7 @@ func TestAccountSubscriptionAuthenticateAbort(t *testing.T) {
// Step 1: We expect a commitment message.
select {
case msg := <-msgChan:
if _, ok := msg.Msg.(*poolrpc.ClientAuctionMessage_Commit); !ok {
if _, ok := msg.Msg.(*auctioneerrpc.ClientAuctionMessage_Commit); !ok {
t.Fatalf("unexpected message type: %v", msg)
}
@ -146,10 +146,10 @@ func TestAccountSubscriptionAuthenticateAbort(t *testing.T) {
// authentication handshake is canceled if the context is canceled prematurely.
func TestAccountSubscriptionAuthenticateContextClose(t *testing.T) {
var (
msgChan = make(chan *poolrpc.ClientAuctionMessage)
srvMsgChan = make(chan *poolrpc.ServerAuctionMessage)
msgChan = make(chan *auctioneerrpc.ClientAuctionMessage)
srvMsgChan = make(chan *auctioneerrpc.ServerAuctionMessage)
errChan = make(chan error)
sendMsg = func(msg *poolrpc.ClientAuctionMessage) error {
sendMsg = func(msg *auctioneerrpc.ClientAuctionMessage) error {
msgChan <- msg
return nil
}
@ -171,7 +171,7 @@ func TestAccountSubscriptionAuthenticateContextClose(t *testing.T) {
// Step 1: We expect a commitment message.
select {
case msg := <-msgChan:
if _, ok := msg.Msg.(*poolrpc.ClientAuctionMessage_Commit); !ok {
if _, ok := msg.Msg.(*auctioneerrpc.ClientAuctionMessage_Commit); !ok {
t.Fatalf("unexpected message type: %v", msg)
}
@ -200,10 +200,10 @@ func TestAccountSubscriptionAuthenticateContextClose(t *testing.T) {
// in the last step.
func TestAccountSubscriptionAuthenticateError(t *testing.T) {
var (
msgChan = make(chan *poolrpc.ClientAuctionMessage)
srvMsgChan = make(chan *poolrpc.ServerAuctionMessage)
msgChan = make(chan *auctioneerrpc.ClientAuctionMessage)
srvMsgChan = make(chan *auctioneerrpc.ServerAuctionMessage)
errChan = make(chan error)
sendMsg = func(msg *poolrpc.ClientAuctionMessage) error {
sendMsg = func(msg *auctioneerrpc.ClientAuctionMessage) error {
msgChan <- msg
return nil
}
@ -225,7 +225,7 @@ func TestAccountSubscriptionAuthenticateError(t *testing.T) {
// Step 1: We expect a commitment message.
select {
case msg := <-msgChan:
if _, ok := msg.Msg.(*poolrpc.ClientAuctionMessage_Commit); !ok {
if _, ok := msg.Msg.(*auctioneerrpc.ClientAuctionMessage_Commit); !ok {
t.Fatalf("unexpected message type: %v", msg)
}

View file

@ -9,9 +9,9 @@ import (
"github.com/btcsuite/btcd/wire"
"github.com/lightninglabs/pool/account"
"github.com/lightninglabs/pool/auctioneerrpc"
"github.com/lightninglabs/pool/clientdb"
"github.com/lightninglabs/pool/order"
"github.com/lightninglabs/pool/poolrpc"
)
var (
@ -89,7 +89,7 @@ func (c *Client) checkPendingBatch() error {
func (c *Client) finalizedBatchTx(
snapshot *clientdb.LocalBatchSnapshot) (*wire.MsgTx, error) {
req := &poolrpc.BatchSnapshotRequest{BatchId: snapshot.BatchID[:]}
req := &auctioneerrpc.BatchSnapshotRequest{BatchId: snapshot.BatchID[:]}
batch, err := c.client.BatchSnapshot(context.Background(), req)
if err != nil {
return nil, fmt.Errorf("querying relevant batch snapshot "+

View file

@ -17,6 +17,7 @@ import (
"github.com/btcsuite/btcutil"
"github.com/lightninglabs/lndclient"
"github.com/lightninglabs/pool/account"
"github.com/lightninglabs/pool/auctioneerrpc"
"github.com/lightninglabs/pool/order"
"github.com/lightninglabs/pool/poolrpc"
"github.com/lightninglabs/pool/terms"
@ -104,14 +105,14 @@ type Client struct {
StreamErrChan chan error
errChanSwitch *ErrChanSwitch
FromServerChan chan *poolrpc.ServerAuctionMessage
FromServerChan chan *auctioneerrpc.ServerAuctionMessage
serverConn *grpc.ClientConn
client poolrpc.ChannelAuctioneerClient
client auctioneerrpc.ChannelAuctioneerClient
quit chan struct{}
wg sync.WaitGroup
serverStream poolrpc.ChannelAuctioneer_SubscribeBatchAuctionClient
serverStream auctioneerrpc.ChannelAuctioneer_SubscribeBatchAuctionClient
streamMutex sync.Mutex
streamCancel func()
subscribedAccts map[[33]byte]*acctSubscription
@ -131,7 +132,7 @@ func NewClient(cfg *Config) (*Client, error) {
errChanSwitch := NewErrChanSwitch(mainErrChan)
return &Client{
cfg: cfg,
FromServerChan: make(chan *poolrpc.ServerAuctionMessage),
FromServerChan: make(chan *auctioneerrpc.ServerAuctionMessage),
StreamErrChan: mainErrChan,
errChanSwitch: errChanSwitch,
quit: make(chan struct{}),
@ -152,7 +153,7 @@ func (c *Client) Start() error {
}
c.serverConn = serverConn
c.client = poolrpc.NewChannelAuctioneerClient(serverConn)
c.client = auctioneerrpc.NewChannelAuctioneerClient(serverConn)
c.errChanSwitch.Start()
@ -238,11 +239,13 @@ func (c *Client) ReserveAccount(ctx context.Context, value btcutil.Amount,
expiry uint32, traderKey *btcec.PublicKey) (*account.Reservation,
error) {
resp, err := c.client.ReserveAccount(ctx, &poolrpc.ReserveAccountRequest{
AccountValue: uint64(value),
TraderKey: traderKey.SerializeCompressed(),
AccountExpiry: expiry,
})
resp, err := c.client.ReserveAccount(
ctx, &auctioneerrpc.ReserveAccountRequest{
AccountValue: uint64(value),
TraderKey: traderKey.SerializeCompressed(),
AccountExpiry: expiry,
},
)
if err != nil {
return nil, err
}
@ -274,16 +277,18 @@ func (c *Client) InitAccount(ctx context.Context, account *account.Account) erro
return fmt.Errorf("unable to construct account output: %v", err)
}
_, err = c.client.InitAccount(ctx, &poolrpc.ServerInitAccountRequest{
AccountPoint: &poolrpc.OutPoint{
Txid: account.OutPoint.Hash[:],
OutputIndex: account.OutPoint.Index,
_, err = c.client.InitAccount(
ctx, &auctioneerrpc.ServerInitAccountRequest{
AccountPoint: &auctioneerrpc.OutPoint{
Txid: account.OutPoint.Hash[:],
OutputIndex: account.OutPoint.Index,
},
AccountScript: accountOutput.PkScript,
AccountValue: uint64(account.Value),
AccountExpiry: account.Expiry,
TraderKey: account.TraderKey.PubKey.SerializeCompressed(),
},
AccountScript: accountOutput.PkScript,
AccountValue: uint64(account.Value),
AccountExpiry: account.Expiry,
TraderKey: account.TraderKey.PubKey.SerializeCompressed(),
})
)
return err
}
@ -299,11 +304,11 @@ func (c *Client) ModifyAccount(ctx context.Context, account *account.Account,
inputs []*wire.TxIn, outputs []*wire.TxOut,
modifiers []account.Modifier) ([]byte, error) {
rpcInputs := make([]*poolrpc.ServerInput, 0, len(inputs))
rpcInputs := make([]*auctioneerrpc.ServerInput, 0, len(inputs))
for _, input := range inputs {
op := input.PreviousOutPoint
rpcInputs = append(rpcInputs, &poolrpc.ServerInput{
Outpoint: &poolrpc.OutPoint{
rpcInputs = append(rpcInputs, &auctioneerrpc.ServerInput{
Outpoint: &auctioneerrpc.OutPoint{
Txid: op.Hash[:],
OutputIndex: op.Index,
},
@ -311,29 +316,31 @@ func (c *Client) ModifyAccount(ctx context.Context, account *account.Account,
})
}
rpcOutputs := make([]*poolrpc.ServerOutput, 0, len(outputs))
rpcOutputs := make([]*auctioneerrpc.ServerOutput, 0, len(outputs))
for _, output := range outputs {
rpcOutputs = append(rpcOutputs, &poolrpc.ServerOutput{
rpcOutputs = append(rpcOutputs, &auctioneerrpc.ServerOutput{
Value: uint64(output.Value),
Script: output.PkScript,
})
}
var rpcNewParams *poolrpc.ServerModifyAccountRequest_NewAccountParameters
var rpcNewParams *auctioneerrpc.ServerModifyAccountRequest_NewAccountParameters
modifiedAccount := account.Copy(modifiers...)
if len(modifiers) > 0 {
rpcNewParams = &poolrpc.ServerModifyAccountRequest_NewAccountParameters{
rpcNewParams = &auctioneerrpc.ServerModifyAccountRequest_NewAccountParameters{
Value: uint64(modifiedAccount.Value),
Expiry: modifiedAccount.Expiry,
}
}
resp, err := c.client.ModifyAccount(ctx, &poolrpc.ServerModifyAccountRequest{
TraderKey: account.TraderKey.PubKey.SerializeCompressed(),
NewInputs: rpcInputs,
NewOutputs: rpcOutputs,
NewParams: rpcNewParams,
})
resp, err := c.client.ModifyAccount(
ctx, &auctioneerrpc.ServerModifyAccountRequest{
TraderKey: account.TraderKey.PubKey.SerializeCompressed(),
NewInputs: rpcInputs,
NewOutputs: rpcOutputs,
NewParams: rpcNewParams,
},
)
if err != nil {
return nil, err
}
@ -348,15 +355,15 @@ func (c *Client) SubmitOrder(ctx context.Context, o order.Order,
// Prepare everything that is common to both ask and bid orders.
nonce := o.Nonce()
rpcRequest := &poolrpc.ServerSubmitOrderRequest{}
nodeAddrs := make([]*poolrpc.NodeAddress, 0, len(serverParams.Addrs))
rpcRequest := &auctioneerrpc.ServerSubmitOrderRequest{}
nodeAddrs := make([]*auctioneerrpc.NodeAddress, 0, len(serverParams.Addrs))
for _, addr := range serverParams.Addrs {
nodeAddrs = append(nodeAddrs, &poolrpc.NodeAddress{
nodeAddrs = append(nodeAddrs, &auctioneerrpc.NodeAddress{
Network: addr.Network(),
Addr: addr.String(),
})
}
details := &poolrpc.ServerOrder{
details := &auctioneerrpc.ServerOrder{
TraderKey: o.Details().AcctKey[:],
RateFixed: o.Details().FixedRate,
Amt: uint64(o.Details().Amt),
@ -372,12 +379,12 @@ func (c *Client) SubmitOrder(ctx context.Context, o order.Order,
// Split into server message which is type specific.
switch castOrder := o.(type) {
case *order.Ask:
serverAsk := &poolrpc.ServerAsk{
serverAsk := &auctioneerrpc.ServerAsk{
Details: details,
LeaseDurationBlocks: castOrder.LeaseDuration,
Version: uint32(castOrder.Version),
}
rpcRequest.Details = &poolrpc.ServerSubmitOrderRequest_Ask{
rpcRequest.Details = &auctioneerrpc.ServerSubmitOrderRequest_Ask{
Ask: serverAsk,
}
@ -387,13 +394,13 @@ func (c *Client) SubmitOrder(ctx context.Context, o order.Order,
return err
}
serverBid := &poolrpc.ServerBid{
serverBid := &auctioneerrpc.ServerBid{
Details: details,
LeaseDurationBlocks: castOrder.LeaseDuration,
Version: uint32(castOrder.Version),
MinNodeTier: nodeTierEnum,
}
rpcRequest.Details = &poolrpc.ServerSubmitOrderRequest_Bid{
rpcRequest.Details = &auctioneerrpc.ServerSubmitOrderRequest_Bid{
Bid: serverBid,
}
@ -407,13 +414,13 @@ func (c *Client) SubmitOrder(ctx context.Context, o order.Order,
return err
}
switch submitResp := resp.Details.(type) {
case *poolrpc.ServerSubmitOrderResponse_InvalidOrder:
case *auctioneerrpc.ServerSubmitOrderResponse_InvalidOrder:
return &order.UserError{
FailMsg: submitResp.InvalidOrder.FailString,
Details: submitResp.InvalidOrder,
}
case *poolrpc.ServerSubmitOrderResponse_Accepted:
case *auctioneerrpc.ServerSubmitOrderResponse_Accepted:
return nil
default:
@ -423,9 +430,11 @@ func (c *Client) SubmitOrder(ctx context.Context, o order.Order,
// CancelOrder sends an order cancellation message to the server.
func (c *Client) CancelOrder(ctx context.Context, noncePreimage lntypes.Preimage) error {
_, err := c.client.CancelOrder(ctx, &poolrpc.ServerCancelOrderRequest{
OrderNoncePreimage: noncePreimage[:],
})
_, err := c.client.CancelOrder(
ctx, &auctioneerrpc.ServerCancelOrderRequest{
OrderNoncePreimage: noncePreimage[:],
},
)
return err
}
@ -433,9 +442,9 @@ func (c *Client) CancelOrder(ctx context.Context, noncePreimage lntypes.Preimage
// state as it's currently known to the server's database. For real-time updates
// on the state, the SubscribeBatchAuction stream should be used.
func (c *Client) OrderState(ctx context.Context, nonce order.Nonce) (
*poolrpc.ServerOrderStateResponse, error) {
*auctioneerrpc.ServerOrderStateResponse, error) {
return c.client.OrderState(ctx, &poolrpc.ServerOrderStateRequest{
return c.client.OrderState(ctx, &auctioneerrpc.ServerOrderStateRequest{
OrderNonce: nonce[:],
})
}
@ -510,7 +519,7 @@ func (c *Client) connectAndAuthenticate(ctx context.Context,
acctKey: acctKey,
sendMsg: c.SendAuctionMessage,
signer: c.cfg.Signer,
msgChan: make(chan *poolrpc.ServerAuctionMessage),
msgChan: make(chan *auctioneerrpc.ServerAuctionMessage),
errChan: tempErrChan,
quit: make(chan struct{}),
}
@ -554,7 +563,7 @@ func (c *Client) connectAndAuthenticate(ctx context.Context,
// normal recovery in that case because the account
// subscription cannot be completed. This needs to be
// handled specifically so we return a typed error now.
if errMsg.ErrorCode == poolrpc.SubscribeError_INCOMPLETE_ACCOUNT_RESERVATION {
if errMsg.ErrorCode == auctioneerrpc.SubscribeError_INCOMPLETE_ACCOUNT_RESERVATION {
return sub, true, AcctResNotCompletedErrFromRPC(
*errMsg.AccountReservation,
)
@ -563,7 +572,7 @@ func (c *Client) connectAndAuthenticate(ctx context.Context,
// The account doesn't exist. We are in recovery mode so
// this is fine. We just skip this account key and try
// the next one.
if errMsg.ErrorCode == poolrpc.SubscribeError_ACCOUNT_DOES_NOT_EXIST {
if errMsg.ErrorCode == auctioneerrpc.SubscribeError_ACCOUNT_DOES_NOT_EXIST {
return sub, false, nil
}
@ -657,9 +666,9 @@ func (c *Client) RecoverAccounts(ctx context.Context,
// its database. The response to this message will be handled
// outside of the client.
numNotFoundAccounts = 0
err = c.SendAuctionMessage(&poolrpc.ClientAuctionMessage{
Msg: &poolrpc.ClientAuctionMessage_Recover{
Recover: &poolrpc.AccountRecovery{
err = c.SendAuctionMessage(&auctioneerrpc.ClientAuctionMessage{
Msg: &auctioneerrpc.ClientAuctionMessage_Recover{
Recover: &auctioneerrpc.AccountRecovery{
TraderKey: acctKeyBytes,
},
},
@ -672,7 +681,7 @@ func (c *Client) RecoverAccounts(ctx context.Context,
// Now we wait for the server to send us the account to recover.
select {
case msg := <-subscription.msgChan:
acctMsg, ok := msg.Msg.(*poolrpc.ServerAuctionMessage_Account)
acctMsg, ok := msg.Msg.(*auctioneerrpc.ServerAuctionMessage_Account)
if !ok {
return nil, fmt.Errorf("received unexpected "+
"recovery message from server: %v",
@ -752,7 +761,7 @@ func incompleteAcctFromErr(traderKey *keychain.KeyDescriptor,
// SendAuctionMessage sends an auction message through the long-lived stream to
// the auction server. A message can only be sent as a response to a server
// message, therefore the stream must already be open.
func (c *Client) SendAuctionMessage(msg *poolrpc.ClientAuctionMessage) error {
func (c *Client) SendAuctionMessage(msg *auctioneerrpc.ClientAuctionMessage) error {
if c.serverStream == nil {
return fmt.Errorf("cannot send message, stream not open")
}
@ -794,7 +803,7 @@ func (c *Client) connectServerStream(initialBackoff time.Duration,
// Try connecting by querying a "cheap" RPC that the server can
// answer from memory only.
_, err = c.client.Terms(ctxb, &poolrpc.TermsRequest{})
_, err = c.client.Terms(ctxb, &auctioneerrpc.TermsRequest{})
if err == nil {
log.Debugf("Connected successfully to server after "+
"%d tries", i+1)
@ -904,7 +913,7 @@ func (c *Client) readIncomingStream() { // nolint:gocyclo
switch t := msg.Msg.(type) {
// The server sends us the challenge that we need to complete
// the 3-way handshake.
case *poolrpc.ServerAuctionMessage_Challenge:
case *auctioneerrpc.ServerAuctionMessage_Challenge:
// Try to find the subscription this message is for so
// we can send it over the correct chan.
var commitHash [32]byte
@ -931,7 +940,7 @@ func (c *Client) readIncomingStream() { // nolint:gocyclo
// The server confirms the account subscription. We only really
// care about this response in the recovery case because it
// means we can recover this account.
case *poolrpc.ServerAuctionMessage_Success:
case *auctioneerrpc.ServerAuctionMessage_Success:
err := c.sendToSubscription(t.Success.TraderKey, msg)
if err != nil {
c.errChanSwitch.ErrChan() <- err
@ -941,7 +950,7 @@ func (c *Client) readIncomingStream() { // nolint:gocyclo
// We've requested to recover an account and the auctioneer now
// sent us their state of the account. We'll try to restore it
// in our database.
case *poolrpc.ServerAuctionMessage_Account:
case *auctioneerrpc.ServerAuctionMessage_Account:
err := c.sendToSubscription(t.Account.TraderKey, msg)
if err != nil {
c.errChanSwitch.ErrChan() <- err
@ -951,13 +960,13 @@ func (c *Client) readIncomingStream() { // nolint:gocyclo
// The shutdown message and the account not found error are sent
// as general error messages. We only handle these two specific
// cases here, the rest is forwarded to the handler.
case *poolrpc.ServerAuctionMessage_Error:
case *auctioneerrpc.ServerAuctionMessage_Error:
errCode := t.Error.ErrorCode
switch errCode {
// The server is shutting down. No need to forward this,
// we can just shutdown the stream and try to reconnect.
case poolrpc.SubscribeError_SERVER_SHUTDOWN:
case auctioneerrpc.SubscribeError_SERVER_SHUTDOWN:
err := c.HandleServerShutdown(nil)
if err != nil {
select {
@ -970,8 +979,8 @@ func (c *Client) readIncomingStream() { // nolint:gocyclo
// We received an account not found error. This is not
// a reason to abort in case we are in recovery mode.
// We let the subscription decide what to do.
case poolrpc.SubscribeError_ACCOUNT_DOES_NOT_EXIST,
poolrpc.SubscribeError_INCOMPLETE_ACCOUNT_RESERVATION:
case auctioneerrpc.SubscribeError_ACCOUNT_DOES_NOT_EXIST,
auctioneerrpc.SubscribeError_INCOMPLETE_ACCOUNT_RESERVATION:
err := c.sendToSubscription(
t.Error.TraderKey, msg,
@ -1005,7 +1014,7 @@ func (c *Client) readIncomingStream() { // nolint:gocyclo
// sendToSubscription finds the subscription for a trader's account public key
// and forwards the given message to it.
func (c *Client) sendToSubscription(traderAccountKey []byte,
msg *poolrpc.ServerAuctionMessage) error {
msg *auctioneerrpc.ServerAuctionMessage) error {
// Try to find the subscription this message is for so we can send it
// over the correct chan. If the key isn't a valid pubkey we'll just not
@ -1080,7 +1089,7 @@ func (c *Client) HandleServerShutdown(err error) error {
// unmarshallServerAccount parses the account information sent from the
// auctioneer into our local account struct.
func unmarshallServerRecoveredAccount(keyDesc *keychain.KeyDescriptor,
a *poolrpc.AuctionAccount) (*account.Account, error) {
a *auctioneerrpc.AuctionAccount) (*account.Account, error) {
// Parse all raw public keys.
auctioneerKey, err := btcec.ParsePubKey(a.AuctioneerKey, btcec.S256())
@ -1100,25 +1109,25 @@ func unmarshallServerRecoveredAccount(keyDesc *keychain.KeyDescriptor,
// side.
state := account.StateClosed
switch a.State {
case poolrpc.AuctionAccountState_STATE_OPEN,
poolrpc.AuctionAccountState_STATE_PENDING_OPEN:
case auctioneerrpc.AuctionAccountState_STATE_OPEN,
auctioneerrpc.AuctionAccountState_STATE_PENDING_OPEN:
state = account.StateInitiated
case poolrpc.AuctionAccountState_STATE_CLOSED:
case auctioneerrpc.AuctionAccountState_STATE_CLOSED:
// The auctioneer will keep the state as STATE_OPEN until the
// closing TX confirms on chain. Therefore if we get the
// STATE_CLOSED here it's already confirmed and we don't need to
// watch anything or try to re-publish the closing TX.
state = account.StateClosed
case poolrpc.AuctionAccountState_STATE_PENDING_UPDATE:
case auctioneerrpc.AuctionAccountState_STATE_PENDING_UPDATE:
state = account.StatePendingUpdate
case poolrpc.AuctionAccountState_STATE_PENDING_BATCH:
case auctioneerrpc.AuctionAccountState_STATE_PENDING_BATCH:
state = account.StatePendingBatch
case poolrpc.AuctionAccountState_STATE_EXPIRED:
case auctioneerrpc.AuctionAccountState_STATE_EXPIRED:
state = account.StateExpired
}
@ -1134,7 +1143,7 @@ func unmarshallServerRecoveredAccount(keyDesc *keychain.KeyDescriptor,
// The latest transaction is only known to the auctioneer after it's
// been confirmed.
var latestTx *wire.MsgTx
if a.State != poolrpc.AuctionAccountState_STATE_PENDING_OPEN {
if a.State != auctioneerrpc.AuctionAccountState_STATE_PENDING_OPEN {
latestTx = &wire.MsgTx{}
err := latestTx.Deserialize(bytes.NewReader(a.LatestTx))
if err != nil {
@ -1161,7 +1170,7 @@ func unmarshallServerRecoveredAccount(keyDesc *keychain.KeyDescriptor,
// Terms returns the current dynamic auctioneer terms like max account size, max
// order duration in blocks and the auction fee schedule.
func (c *Client) Terms(ctx context.Context) (*terms.AuctioneerTerms, error) {
resp, err := c.client.Terms(ctx, &poolrpc.TermsRequest{})
resp, err := c.client.Terms(ctx, &auctioneerrpc.TermsRequest{})
if err != nil {
return nil, err
}
@ -1183,9 +1192,10 @@ func (c *Client) Terms(ctx context.Context) (*terms.AuctioneerTerms, error) {
// NOTE: This isn't wrapped in "native" types, as atm we only use this to
// shuffle information back to the client over our RPC interface.
func (c *Client) BatchSnapshot(ctx context.Context,
targetBatch order.BatchID) (*poolrpc.BatchSnapshotResponse, error) {
targetBatch order.BatchID) (*auctioneerrpc.BatchSnapshotResponse,
error) {
return c.client.BatchSnapshot(ctx, &poolrpc.BatchSnapshotRequest{
return c.client.BatchSnapshot(ctx, &auctioneerrpc.BatchSnapshotRequest{
BatchId: targetBatch[:],
})
}
@ -1199,8 +1209,8 @@ func (c *Client) BatchSnapshot(ctx context.Context,
// NOTE: This isn't wrapped in "native" types, as atm we only use this to
// shuffle information back to the client over our RPC interface.
func (c *Client) BatchSnapshots(ctx context.Context,
req *poolrpc.BatchSnapshotsRequest) (*poolrpc.BatchSnapshotsResponse,
error) {
req *auctioneerrpc.BatchSnapshotsRequest) (
*auctioneerrpc.BatchSnapshotsResponse, error) {
return c.client.BatchSnapshots(ctx, req)
}
@ -1215,7 +1225,7 @@ func (c *Client) NodeRating(ctx context.Context,
pubKeys = append(pubKeys, nodeKey.SerializeCompressed())
}
req := &poolrpc.ServerNodeRatingRequest{
req := &auctioneerrpc.ServerNodeRatingRequest{
NodePubkeys: pubKeys,
}
serverResp, err := c.client.NodeRating(ctx, req)
@ -1230,16 +1240,16 @@ func (c *Client) NodeRating(ctx context.Context,
// MarshallNodeTier maps the node tier integer into the enum used on the RPC
// interface.
func MarshallNodeTier(nodeTier order.NodeTier) (poolrpc.NodeTier, error) {
func MarshallNodeTier(nodeTier order.NodeTier) (auctioneerrpc.NodeTier, error) {
switch nodeTier {
case order.NodeTierDefault:
return poolrpc.NodeTier_TIER_DEFAULT, nil
return auctioneerrpc.NodeTier_TIER_DEFAULT, nil
case order.NodeTier0:
return poolrpc.NodeTier_TIER_0, nil
return auctioneerrpc.NodeTier_TIER_0, nil
case order.NodeTier1:
return poolrpc.NodeTier_TIER_1, nil
return auctioneerrpc.NodeTier_TIER_1, nil
default:
return 0, fmt.Errorf("unknown node tier: %v", nodeTier)

View file

@ -5,7 +5,7 @@ import (
"fmt"
"github.com/btcsuite/btcutil"
"github.com/lightninglabs/pool/poolrpc"
"github.com/lightninglabs/pool/auctioneerrpc"
)
var (
@ -60,7 +60,7 @@ func (e *AcctResNotCompletedError) Unwrap() error {
// AcctResNotCompletedErrFromRPC creates a new AcctResNotCompletedError from an
// RPC account message.
func AcctResNotCompletedErrFromRPC(
rpcAcc poolrpc.AuctionAccount) *AcctResNotCompletedError {
rpcAcc auctioneerrpc.AuctionAccount) *AcctResNotCompletedError {
result := &AcctResNotCompletedError{
Value: btcutil.Amount(rpcAcc.Value),

View file

@ -0,0 +1,7 @@
---
Language: Proto
BasedOnStyle: Google
IndentWidth: 4
AllowShortFunctionsOnASingleLine: None
SpaceBeforeParens: Always
CompactNamespaces: false

View file

@ -1,7 +1,12 @@
// Code generated by protoc-gen-go. DO NOT EDIT.
// source: auctioneer.proto
package poolrpc
// We can't rename this to auctioneerrpc, otherwise it would be a breaking
// change since the package name is also contained in the HTTP URIs and old
// clients would call the wrong endpoints. Luckily with the go_package option we
// can have different golang and RPC package names.
package auctioneerrpc
import (
context "context"
@ -4414,263 +4419,263 @@ func init() {
func init() { proto.RegisterFile("auctioneer.proto", fileDescriptor_f3883418d94ca37f) }
var fileDescriptor_f3883418d94ca37f = []byte{
// 4090 bytes of a gzipped FileDescriptorProto
// 4093 bytes of a gzipped FileDescriptorProto
0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xdc, 0x3b, 0x4d, 0x73, 0xe3, 0xd8,
0x56, 0xf1, 0x47, 0x62, 0xfb, 0x58, 0x76, 0x94, 0xeb, 0x24, 0x9d, 0x78, 0x3a, 0x3d, 0xdd, 0x9a,
0x79, 0x43, 0x4f, 0x66, 0x3a, 0xd3, 0x93, 0x9e, 0xd7, 0xcc, 0x9b, 0xd7, 0x0c, 0xc8, 0xb6, 0xf2,
0xec, 0x69, 0xc7, 0xf6, 0xc8, 0x4e, 0xf7, 0xf4, 0x7b, 0x05, 0x2a, 0xd9, 0xbe, 0x76, 0x44, 0x6c,
0xc9, 0x48, 0x72, 0x77, 0xc2, 0xe2, 0x2d, 0xd8, 0xb1, 0x60, 0x49, 0x41, 0x15, 0xc5, 0x8e, 0x5f,
0x00, 0x1b, 0x96, 0x14, 0x0b, 0x58, 0xb1, 0x64, 0x45, 0x15, 0xb0, 0x60, 0x45, 0xb1, 0x60, 0xcb,
0x8e, 0xba, 0x1f, 0x92, 0x25, 0x59, 0x76, 0xf2, 0x98, 0xa1, 0x8a, 0x62, 0xd3, 0x6d, 0x9d, 0x8f,
0x7b, 0xcf, 0x39, 0xf7, 0x7c, 0xdc, 0x73, 0xa4, 0x80, 0xa8, 0xcf, 0x07, 0xae, 0x61, 0x99, 0x18,
0xdb, 0x27, 0x33, 0xdb, 0x72, 0x2d, 0x94, 0x99, 0x59, 0xd6, 0xc4, 0x9e, 0x0d, 0xa4, 0x3f, 0x48,
0xc0, 0x9e, 0x8a, 0x1d, 0x6c, 0xbf, 0xc5, 0xf2, 0x60, 0x60, 0xcd, 0x4d, 0x57, 0xc5, 0xbf, 0x37,
0xc7, 0x8e, 0x8b, 0x3e, 0x80, 0x82, 0xce, 0x20, 0xda, 0x5b, 0x7d, 0x32, 0xc7, 0x07, 0x89, 0x87,
0x89, 0xc7, 0x69, 0x55, 0xe0, 0xc0, 0x57, 0x04, 0x86, 0x7e, 0x04, 0x45, 0x8f, 0x08, 0x5f, 0xcf,
0x0c, 0xfb, 0xe6, 0x20, 0xf9, 0x30, 0xf1, 0xb8, 0xa0, 0x7a, 0xac, 0x0a, 0x05, 0xa2, 0x23, 0x00,
0xd7, 0xd6, 0x87, 0xd8, 0xd6, 0xae, 0xf0, 0xcd, 0x41, 0xea, 0x61, 0xe2, 0xb1, 0xa0, 0xe6, 0x18,
0xe4, 0x25, 0xbe, 0x91, 0xae, 0x60, 0x3f, 0x2a, 0x83, 0x33, 0xb3, 0x4c, 0x87, 0xad, 0xef, 0xcb,
0x4e, 0x99, 0x13, 0x94, 0xb9, 0xb0, 0x80, 0xbe, 0xc4, 0x37, 0xe8, 0x18, 0x76, 0x0c, 0xd3, 0x70,
0x0d, 0x7d, 0xa2, 0xf5, 0x75, 0x77, 0x70, 0x49, 0x29, 0x93, 0x94, 0x72, 0x9b, 0x23, 0x2a, 0x04,
0x4e, 0x36, 0xfb, 0xb7, 0x04, 0x1c, 0x74, 0xc9, 0x5e, 0x76, 0xc3, 0x34, 0xdc, 0x88, 0xd2, 0xcf,
0x17, 0x4a, 0xcf, 0x2c, 0xc3, 0x74, 0xe9, 0x76, 0xf9, 0xd3, 0x9d, 0x13, 0x6e, 0xaf, 0x93, 0xf6,
0xdc, 0xed, 0x10, 0x84, 0x6f, 0x07, 0xfa, 0x14, 0xb4, 0x83, 0x33, 0xb0, 0x8d, 0x99, 0xcb, 0x77,
0xf7, 0x56, 0xeb, 0x52, 0xe0, 0xb2, 0x4d, 0x53, 0x77, 0xb2, 0x69, 0xfa, 0x76, 0x9b, 0x6e, 0x46,
0x6d, 0xfa, 0x1e, 0x1c, 0xc6, 0x68, 0xc9, 0xcc, 0x2a, 0xcd, 0x3d, 0x13, 0x74, 0xe7, 0xfd, 0xa9,
0xe1, 0xb6, 0xed, 0x21, 0xb6, 0x3d, 0x13, 0x7c, 0x04, 0x29, 0xdd, 0xb9, 0xe2, 0x8a, 0x23, 0x5f,
0x71, 0x46, 0x2f, 0x3b, 0x57, 0xf5, 0x0d, 0x95, 0x10, 0x10, 0xba, 0xbe, 0x31, 0xa4, 0x7a, 0x2e,
0xd3, 0x55, 0x8c, 0x21, 0xa1, 0xeb, 0x1b, 0xc3, 0x4a, 0x0e, 0x32, 0x43, 0xec, 0xea, 0xc6, 0xc4,
0x21, 0xce, 0x76, 0x18, 0xb3, 0x2f, 0x3f, 0xeb, 0x17, 0x50, 0x30, 0xcc, 0xb7, 0xfa, 0xc4, 0x18,
0x6a, 0x16, 0x41, 0x70, 0x11, 0xf6, 0xfc, 0xa5, 0x1b, 0x0c, 0x4b, 0xb9, 0xea, 0x1b, 0xaa, 0x60,
0x04, 0x9e, 0xd1, 0x7d, 0xc8, 0xea, 0x83, 0x01, 0x9e, 0xb9, 0x98, 0xc9, 0x94, 0xad, 0x6f, 0xa8,
0x3e, 0x24, 0x28, 0x44, 0xd3, 0xd3, 0xbd, 0xaa, 0x9b, 0x03, 0x3c, 0x09, 0xe9, 0xfe, 0x14, 0x76,
0xe9, 0xd6, 0x9a, 0x69, 0x99, 0x03, 0xac, 0xcd, 0x6c, 0x6c, 0x4c, 0xf5, 0x31, 0xe6, 0x4e, 0x87,
0x28, 0xae, 0x45, 0x50, 0x1d, 0x8e, 0x59, 0x98, 0x39, 0xb4, 0x1a, 0x37, 0xf3, 0xbf, 0x26, 0x61,
0xb7, 0x3a, 0x31, 0xb0, 0xe9, 0xca, 0xcc, 0x5d, 0xcf, 0xb1, 0xe3, 0xe8, 0x63, 0x8c, 0xbe, 0x80,
0xad, 0x81, 0x35, 0x9d, 0x1a, 0x9e, 0x7f, 0x95, 0x7d, 0x1d, 0xf9, 0x49, 0x55, 0x29, 0x76, 0x8a,
0x4d, 0xb7, 0xbe, 0xa1, 0x72, 0x5a, 0xf4, 0x02, 0x72, 0xce, 0xbc, 0x4f, 0xfc, 0xab, 0x8f, 0xb9,
0xdd, 0xef, 0x47, 0x19, 0xbb, 0x8c, 0x60, 0x46, 0x76, 0xab, 0x6f, 0xa8, 0x0b, 0x06, 0xf4, 0x0c,
0xb6, 0x98, 0x39, 0xa8, 0xd3, 0xe5, 0x4f, 0x0f, 0x17, 0x3e, 0x4d, 0x84, 0x3e, 0x27, 0xf1, 0x21,
0x53, 0x02, 0xb2, 0x25, 0x23, 0x25, 0x4c, 0x36, 0xfe, 0x5d, 0x3c, 0x70, 0xa9, 0x0f, 0xc6, 0x33,
0xa9, 0x94, 0x80, 0x30, 0x31, 0x52, 0xf4, 0x04, 0xd2, 0x8e, 0x31, 0x36, 0xa9, 0x4f, 0xe6, 0x4f,
0xef, 0xc5, 0xb0, 0x74, 0x8d, 0x31, 0x91, 0x8e, 0x92, 0xa1, 0x2f, 0x20, 0x63, 0xe3, 0x81, 0xf5,
0x16, 0xdb, 0x07, 0x5b, 0x94, 0xe3, 0x20, 0xaa, 0x94, 0xca, 0xd0, 0x37, 0xf5, 0x0d, 0xd5, 0x23,
0xad, 0x6c, 0x42, 0x6a, 0xea, 0x8c, 0xa5, 0x37, 0xb0, 0xb3, 0x64, 0x32, 0xf4, 0x3e, 0xe4, 0x99,
0xc9, 0xb4, 0x4b, 0xdd, 0xb9, 0xe4, 0xa7, 0x07, 0x0c, 0x54, 0xd7, 0x9d, 0x4b, 0x12, 0x87, 0x2c,
0x4f, 0xbc, 0xc5, 0xb6, 0x63, 0x58, 0x26, 0xcf, 0x5a, 0x02, 0x05, 0xbe, 0x62, 0x30, 0xc9, 0x86,
0x52, 0x8c, 0x51, 0x23, 0x71, 0x97, 0x88, 0xc4, 0x1d, 0x7a, 0x04, 0x02, 0xdf, 0x9b, 0xfa, 0x10,
0xcf, 0x03, 0x5c, 0x1e, 0xea, 0x3b, 0xe8, 0x10, 0xb2, 0xfa, 0xdc, 0xbd, 0xd4, 0x1c, 0x63, 0xcc,
0x73, 0x61, 0x86, 0x3c, 0x77, 0x8d, 0xb1, 0xf4, 0x04, 0xc4, 0xe8, 0x69, 0x10, 0x72, 0x26, 0xac,
0x31, 0xe4, 0xdb, 0x65, 0xe8, 0x73, 0x63, 0x28, 0xfd, 0x45, 0x2a, 0x48, 0xcf, 0x0e, 0x62, 0x0d,
0x3d, 0xda, 0x27, 0xc7, 0xa9, 0x3b, 0x5c, 0xe1, 0x9c, 0xca, 0x9f, 0xd0, 0xcf, 0x20, 0xcf, 0x7e,
0x69, 0x03, 0x6b, 0xc8, 0xb2, 0x52, 0xf1, 0xf4, 0xa3, 0x95, 0x67, 0x7d, 0xc2, 0xfe, 0x53, 0x29,
0x8b, 0x0a, 0x8c, 0xb5, 0x6a, 0x0d, 0x31, 0x7a, 0x05, 0xdb, 0xcc, 0x09, 0x30, 0x0f, 0x62, 0xe7,
0x20, 0xfd, 0x30, 0xf5, 0x38, 0x7f, 0xfa, 0xe4, 0xb6, 0xc5, 0x30, 0x8b, 0x63, 0x47, 0x31, 0x5d,
0xfb, 0x46, 0x2d, 0xda, 0x21, 0x60, 0xf9, 0x35, 0x94, 0x62, 0xc8, 0x90, 0x08, 0x29, 0xef, 0x10,
0x72, 0x2a, 0xf9, 0x89, 0x8e, 0x61, 0x93, 0x65, 0x56, 0x16, 0x1f, 0xbb, 0xe1, 0x6d, 0xb9, 0xdc,
0x8c, 0xe4, 0xab, 0xe4, 0x97, 0x09, 0x69, 0x00, 0x42, 0x50, 0x19, 0x94, 0x87, 0xcc, 0x45, 0xeb,
0x65, 0xab, 0xfd, 0xba, 0x25, 0x6e, 0xa0, 0x7d, 0x40, 0x5d, 0x45, 0x7d, 0xa5, 0xa8, 0xda, 0x79,
0xa3, 0x5b, 0x51, 0xea, 0xf2, 0xab, 0x46, 0x5b, 0x15, 0x13, 0xa8, 0x0c, 0xfb, 0x15, 0xb9, 0x57,
0xad, 0x6b, 0xaf, 0x14, 0xb5, 0xdb, 0x68, 0xb7, 0x08, 0xfa, 0x9c, 0x00, 0xc4, 0x24, 0x42, 0x50,
0xec, 0xc8, 0x6a, 0xaf, 0x21, 0x37, 0x35, 0x55, 0xf9, 0x46, 0xa9, 0xf6, 0xc4, 0x94, 0xf4, 0x57,
0x09, 0xc8, 0x07, 0xf6, 0x0f, 0x1c, 0x43, 0x62, 0xdd, 0x31, 0x24, 0xe3, 0x8e, 0x81, 0x1b, 0x2d,
0xa8, 0xce, 0xd2, 0x31, 0x48, 0x55, 0xd8, 0x59, 0x22, 0x20, 0x92, 0xd5, 0x2e, 0x3a, 0xcd, 0x46,
0x55, 0xee, 0x29, 0x5a, 0x47, 0x51, 0x54, 0x71, 0x83, 0x68, 0x52, 0xad, 0xcb, 0xad, 0x96, 0xd2,
0xd4, 0xce, 0x2e, 0x5a, 0xb5, 0x46, 0xeb, 0x67, 0xda, 0x99, 0xdc, 0x68, 0x2a, 0x35, 0x31, 0x21,
0xfd, 0x57, 0x02, 0xf2, 0xd5, 0x4b, 0xdd, 0x34, 0xf1, 0xa4, 0x61, 0x8e, 0x2c, 0xf4, 0x18, 0xd2,
0xee, 0xcd, 0x8c, 0x25, 0xc3, 0x62, 0xc0, 0xb2, 0x9c, 0xa6, 0x77, 0x33, 0xc3, 0x2a, 0xa5, 0x40,
0x1f, 0x42, 0x71, 0x62, 0x0d, 0xf4, 0x89, 0x66, 0x5a, 0x43, 0x1c, 0xa8, 0xc5, 0x02, 0x85, 0xb6,
0xac, 0x21, 0x26, 0x91, 0xf2, 0x11, 0xf1, 0x95, 0xa9, 0xe5, 0xe2, 0x05, 0x19, 0x8b, 0x86, 0x02,
0x03, 0x7b, 0x74, 0xbf, 0x0e, 0x07, 0x6c, 0xb5, 0x99, 0x7e, 0x43, 0xc2, 0x5b, 0xeb, 0xeb, 0x0e,
0xe6, 0xe5, 0x39, 0x4d, 0x19, 0xf6, 0x28, 0xbe, 0xc3, 0xd0, 0x15, 0xdd, 0xc1, 0xac, 0x28, 0xff,
0x04, 0x0e, 0xf9, 0x06, 0x31, 0x9c, 0xac, 0x60, 0xee, 0x33, 0x82, 0x28, 0xab, 0xf4, 0x2f, 0x49,
0x28, 0x86, 0xd3, 0xd5, 0xba, 0xb0, 0x7a, 0x09, 0x82, 0x5f, 0xfd, 0x8d, 0xb1, 0x73, 0x90, 0xa4,
0x2e, 0xff, 0x78, 0x45, 0xe2, 0xf3, 0x53, 0xb5, 0x31, 0xe6, 0xde, 0x9e, 0xd7, 0x17, 0x10, 0xd4,
0x82, 0xc2, 0x80, 0x59, 0x54, 0x33, 0xcc, 0x91, 0xe5, 0x1c, 0xa4, 0xe8, 0x6a, 0x1f, 0xaf, 0x5a,
0x2d, 0x70, 0x44, 0x7c, 0x39, 0x61, 0x10, 0x00, 0x95, 0xbf, 0x06, 0x31, 0xba, 0x61, 0x4c, 0xdc,
0xec, 0x06, 0xe3, 0x46, 0x08, 0x44, 0x48, 0xf9, 0x02, 0x76, 0x96, 0xb6, 0xf8, 0x55, 0x02, 0x2f,
0xc0, 0x1c, 0x0c, 0xbc, 0xa7, 0xb0, 0x1d, 0xc9, 0xee, 0xb7, 0x64, 0x56, 0xe9, 0xcf, 0x52, 0xb0,
0xcb, 0x6f, 0x21, 0xe1, 0x6a, 0xfa, 0x25, 0xe4, 0x06, 0x97, 0xfa, 0x64, 0x82, 0x4d, 0x5e, 0xaa,
0x83, 0x25, 0x84, 0x57, 0x67, 0x0f, 0x4f, 0x6a, 0xa2, 0x4f, 0x8c, 0x7e, 0x0c, 0x19, 0x67, 0x3e,
0x18, 0x60, 0xc7, 0xe1, 0x62, 0x2f, 0xea, 0x5b, 0xd7, 0x2b, 0x9c, 0x5d, 0x46, 0x40, 0x6a, 0x0f,
0xa7, 0x45, 0x9f, 0xc1, 0x26, 0xb6, 0x6d, 0xcb, 0xe6, 0x95, 0xf4, 0xde, 0x32, 0x93, 0x42, 0xd0,
0xf5, 0x0d, 0x95, 0xd1, 0xa1, 0xe7, 0x90, 0x99, 0xd9, 0x78, 0xa6, 0xdb, 0x98, 0xd7, 0xd1, 0x72,
0xcc, 0x69, 0x76, 0x18, 0x05, 0xd9, 0x88, 0x13, 0xa3, 0xd3, 0x50, 0x25, 0xbd, 0xbf, 0xc2, 0x05,
0x2a, 0x78, 0x6c, 0x2c, 0xca, 0xe9, 0x4f, 0x20, 0x3b, 0x32, 0x4c, 0x7d, 0x62, 0xfc, 0x3e, 0xe6,
0xf5, 0xf4, 0xbd, 0x18, 0xbe, 0x33, 0x4e, 0x42, 0x6e, 0x49, 0x1e, 0x39, 0x7a, 0x06, 0x19, 0xee,
0x89, 0x07, 0x99, 0x88, 0x66, 0xdc, 0xe4, 0xfc, 0xc8, 0x88, 0x8c, 0x9c, 0xd2, 0x2b, 0xc4, 0x1d,
0xd8, 0x8e, 0x98, 0x1a, 0xdd, 0x8f, 0x9e, 0x8b, 0x10, 0xb4, 0x7d, 0xa4, 0x48, 0x27, 0xa3, 0x45,
0x5a, 0xfa, 0x1c, 0xc4, 0xe8, 0x21, 0xdc, 0xe6, 0x22, 0xff, 0x9e, 0x80, 0x02, 0x55, 0x0f, 0x0f,
0xcf, 0x75, 0xfb, 0x0a, 0xbb, 0xa8, 0x03, 0xc5, 0x29, 0x03, 0x78, 0xf5, 0x28, 0x11, 0x09, 0xa7,
0x10, 0xbd, 0xf7, 0x14, 0xac, 0x45, 0x85, 0x69, 0x10, 0x86, 0x4e, 0xa0, 0x34, 0x98, 0x60, 0xdd,
0x36, 0xcc, 0xb1, 0x36, 0xb3, 0x8d, 0x01, 0xd6, 0x6c, 0xdd, 0xc5, 0xfc, 0x06, 0xb1, 0xe3, 0xa1,
0x3a, 0x04, 0xa3, 0xea, 0x2e, 0x2e, 0xbf, 0x06, 0xb4, 0xbc, 0x68, 0x4c, 0x00, 0x7d, 0x12, 0x0e,
0xa0, 0xbd, 0xa8, 0x80, 0x2c, 0xa1, 0x07, 0x22, 0xe8, 0x3f, 0x36, 0x79, 0x96, 0x0f, 0x7a, 0x0f,
0xfa, 0x6e, 0x85, 0xc2, 0x4f, 0x56, 0x7b, 0x5c, 0x8c, 0xd2, 0x95, 0xe4, 0x41, 0x22, 0xaa, 0xf8,
0xe9, 0x1a, 0xc5, 0x29, 0xfd, 0xb2, 0xf2, 0xe8, 0x37, 0x41, 0x1c, 0x5c, 0xea, 0xf6, 0x18, 0x0f,
0x35, 0xee, 0x2f, 0x5e, 0x3e, 0xdb, 0x8d, 0x5e, 0xf2, 0x6a, 0xc6, 0x68, 0xa4, 0x6e, 0x73, 0x6a,
0x0e, 0x73, 0xd0, 0x57, 0x50, 0xc0, 0xd7, 0x78, 0x30, 0x27, 0xce, 0xa7, 0x8d, 0xb0, 0x17, 0x3f,
0x0b, 0xeb, 0x28, 0x1e, 0xf6, 0x0c, 0x63, 0x55, 0xc0, 0x81, 0x27, 0xf4, 0x09, 0xec, 0xb0, 0x8c,
0xed, 0xda, 0xba, 0xe9, 0xe8, 0xd4, 0x81, 0x79, 0xde, 0x17, 0x29, 0xa2, 0xb7, 0x80, 0xa3, 0x4f,
0xa1, 0x34, 0xc2, 0x4c, 0x25, 0xcd, 0xd1, 0x5d, 0x6d, 0x46, 0x7c, 0xec, 0x1d, 0x8d, 0xa0, 0xb4,
0xba, 0x3d, 0xc2, 0x54, 0x9f, 0xae, 0xee, 0x76, 0xb0, 0xfd, 0xf2, 0x1d, 0xa9, 0x70, 0x94, 0x1a,
0xf7, 0x39, 0x3d, 0x0d, 0x98, 0xb4, 0x2a, 0x10, 0x42, 0x0a, 0xec, 0xea, 0xe1, 0x9b, 0x58, 0x36,
0x5c, 0x32, 0x96, 0x6e, 0xa0, 0xb9, 0xe5, 0x1b, 0x28, 0x7a, 0x0d, 0xdb, 0xde, 0x59, 0x4e, 0xa9,
0x7b, 0x3a, 0x07, 0x40, 0x8d, 0x77, 0x72, 0xfb, 0x61, 0x32, 0x7f, 0xf6, 0xae, 0x53, 0xd3, 0x10,
0xf0, 0x7f, 0xcd, 0x27, 0xcb, 0x6f, 0xa0, 0x14, 0xb3, 0x7f, 0x70, 0xe5, 0x02, 0x5b, 0xf9, 0xd3,
0xf0, 0xca, 0xfb, 0xf1, 0xe1, 0x18, 0x2e, 0x18, 0xa5, 0x98, 0xb4, 0xb7, 0xee, 0x76, 0x6c, 0x01,
0x5a, 0x4e, 0x78, 0xeb, 0xea, 0xf8, 0x11, 0x00, 0x77, 0x98, 0x6b, 0xde, 0xd9, 0x0a, 0x6a, 0x8e,
0x79, 0xca, 0xb5, 0x31, 0x24, 0x19, 0xeb, 0x12, 0x1b, 0xe3, 0x4b, 0x57, 0xbb, 0x24, 0x37, 0x88,
0x14, 0xd5, 0x06, 0x18, 0xa8, 0x4e, 0x6e, 0x0d, 0x7f, 0x9d, 0x84, 0x62, 0xb8, 0x04, 0x90, 0xba,
0xca, 0x4a, 0x05, 0xb3, 0x2a, 0xaf, 0x07, 0x2f, 0x00, 0xe8, 0x8f, 0xe0, 0x3d, 0xef, 0x68, 0x45,
0x15, 0x39, 0xa1, 0xff, 0xaa, 0x39, 0xca, 0x40, 0x2f, 0xd9, 0xeb, 0xa7, 0x29, 0xa8, 0x0e, 0x25,
0xef, 0x36, 0x62, 0xd3, 0xa9, 0x8a, 0x4e, 0x1d, 0x3f, 0xbd, 0x36, 0xa3, 0xab, 0x48, 0xf7, 0x67,
0x04, 0x1e, 0x8b, 0x64, 0xc0, 0x26, 0xd3, 0x22, 0x74, 0x2b, 0x2e, 0xc1, 0x36, 0xbf, 0x15, 0x77,
0xeb, 0x17, 0xbd, 0x1a, 0x01, 0xd2, 0x2b, 0xb1, 0x5c, 0xad, 0xb6, 0x2f, 0x5a, 0x3d, 0xad, 0xd6,
0x56, 0xba, 0x5a, 0xab, 0xdd, 0xd3, 0x94, 0xef, 0x1a, 0xdd, 0x9e, 0x98, 0x44, 0x12, 0x3c, 0x68,
0xb4, 0xaa, 0xed, 0xf3, 0x4e, 0x53, 0xe9, 0x29, 0x9a, 0x47, 0xa6, 0x2a, 0x64, 0x15, 0xb9, 0xd7,
0x68, 0xb7, 0xc4, 0x94, 0xf4, 0xb7, 0x49, 0x28, 0x86, 0x25, 0x5a, 0x5c, 0x49, 0xd8, 0xe0, 0x89,
0x3d, 0x90, 0xbb, 0x73, 0x68, 0xd2, 0xc4, 0x9f, 0x6e, 0x33, 0xca, 0xf2, 0x20, 0x29, 0x1d, 0x37,
0x48, 0x7a, 0x0f, 0x72, 0x8b, 0x01, 0x12, 0x4b, 0x15, 0xcc, 0x5b, 0x08, 0xf2, 0x14, 0x36, 0x1d,
0x97, 0xa4, 0xbc, 0x2d, 0x7a, 0x60, 0xf7, 0x57, 0x98, 0xb2, 0x4b, 0x68, 0x54, 0x46, 0x1a, 0xf5,
0x99, 0x4c, 0xd4, 0x67, 0xd0, 0x13, 0xc8, 0x5a, 0x73, 0x97, 0xdd, 0x49, 0xb3, 0xab, 0x86, 0x4d,
0x3e, 0x09, 0x11, 0x70, 0xa2, 0xbb, 0xd8, 0x71, 0x35, 0xf7, 0x9a, 0xe6, 0x0c, 0x41, 0xcd, 0x32,
0x40, 0xef, 0x5a, 0xfa, 0x25, 0x08, 0xc1, 0xc0, 0x44, 0xcf, 0x41, 0xf0, 0xf2, 0x47, 0xdf, 0x18,
0x7a, 0x95, 0xa0, 0x14, 0x8d, 0xb5, 0x8a, 0x31, 0x54, 0xf3, 0x53, 0xff, 0xb7, 0x13, 0xe4, 0xd3,
0x9d, 0x2b, 0xef, 0x3e, 0xbb, 0xc4, 0x27, 0x3b, 0x57, 0x3e, 0x9f, 0xec, 0x5c, 0x39, 0xd2, 0x05,
0xc0, 0x02, 0x85, 0x3e, 0xbc, 0x65, 0x90, 0xc4, 0xc6, 0x48, 0x8f, 0x40, 0x98, 0x9b, 0x86, 0xeb,
0x68, 0x23, 0x63, 0x32, 0xe1, 0xb3, 0x9b, 0x82, 0x9a, 0xa7, 0xb0, 0x33, 0x0a, 0x0a, 0x2c, 0x5b,
0x31, 0x86, 0x64, 0xd9, 0x3e, 0x0f, 0xdd, 0xd8, 0xb9, 0x13, 0x9d, 0x3a, 0xdd, 0x65, 0xd9, 0xbf,
0x49, 0x42, 0x3e, 0x50, 0x7b, 0x88, 0x8b, 0x60, 0x73, 0x48, 0xaa, 0x5b, 0x5f, 0x9f, 0xe8, 0xa4,
0x77, 0x67, 0x8e, 0x57, 0x60, 0xd0, 0x0a, 0x03, 0xa2, 0x1a, 0x08, 0x9c, 0x8c, 0x39, 0x03, 0x8b,
0xde, 0x47, 0x71, 0xe5, 0xec, 0x24, 0xe4, 0x11, 0x79, 0xc6, 0x46, 0x1f, 0xc8, 0x66, 0xde, 0x99,
0x6a, 0x86, 0x39, 0xc4, 0xd7, 0xd4, 0x65, 0x37, 0xd5, 0x82, 0x07, 0x6d, 0x10, 0x60, 0xc4, 0xab,
0xd3, 0xd1, 0xfb, 0xce, 0x2f, 0x41, 0x08, 0x6e, 0x81, 0x76, 0x41, 0x6c, 0x5f, 0xf4, 0x3a, 0x17,
0x24, 0xba, 0xaa, 0xaa, 0x22, 0xf7, 0x94, 0x9a, 0xb8, 0x81, 0x1e, 0xc1, 0x11, 0x87, 0xd6, 0x2e,
0xba, 0x24, 0x2c, 0x7b, 0x4a, 0xab, 0xa6, 0xd4, 0xb4, 0xf6, 0xd9, 0x59, 0xb5, 0x2e, 0x37, 0x48,
0xf8, 0x1e, 0xc1, 0x61, 0x90, 0x44, 0xae, 0x11, 0x7c, 0xaf, 0xad, 0x9d, 0x29, 0x4a, 0x57, 0x4c,
0x92, 0x46, 0x98, 0xa3, 0xcf, 0x2e, 0x9a, 0xcd, 0x37, 0x5a, 0xb7, 0xa3, 0xb4, 0x48, 0x63, 0xfb,
0xa7, 0x29, 0xc8, 0x33, 0xc3, 0x33, 0x87, 0xbb, 0x65, 0x36, 0x72, 0x04, 0x40, 0xeb, 0xeb, 0xc8,
0xb8, 0xf6, 0x8f, 0x24, 0x47, 0x20, 0x67, 0x04, 0x40, 0xaa, 0x84, 0x3e, 0x75, 0xf9, 0x4c, 0x94,
0xfc, 0x44, 0x0f, 0x41, 0x98, 0x1a, 0xa6, 0x46, 0xfa, 0x19, 0x8d, 0xa0, 0xd2, 0x14, 0x05, 0x53,
0xc3, 0x24, 0x5d, 0x85, 0x3c, 0xa5, 0xa3, 0x9e, 0xc0, 0xc4, 0x8e, 0x46, 0xa6, 0xa0, 0xc2, 0x62,
0x50, 0x47, 0x02, 0x86, 0x11, 0x38, 0xc6, 0x98, 0x86, 0x9f, 0xa0, 0x66, 0x29, 0xa0, 0x6b, 0x8c,
0x91, 0x04, 0x85, 0xe9, 0x7c, 0xe2, 0x1a, 0x04, 0x49, 0x45, 0x66, 0x55, 0x3a, 0x4f, 0x81, 0x5d,
0x63, 0x4c, 0x84, 0x3e, 0x84, 0x2c, 0xed, 0x4f, 0x67, 0xf3, 0x3e, 0x0f, 0xb8, 0x0c, 0x79, 0xee,
0xcc, 0xfb, 0xe8, 0x73, 0xc8, 0x51, 0x94, 0x3e, 0x1c, 0xda, 0xbc, 0x32, 0x2f, 0xae, 0x35, 0xa4,
0x7d, 0x95, 0x87, 0x43, 0x1b, 0x3b, 0x8e, 0x4a, 0x57, 0x20, 0x0f, 0x44, 0x1c, 0xaa, 0x0d, 0xed,
0xa4, 0x05, 0x6a, 0x81, 0x2c, 0x01, 0x90, 0xee, 0x19, 0x7d, 0x0d, 0x47, 0x53, 0xfd, 0x9a, 0x8f,
0xb0, 0xe3, 0x6e, 0x23, 0x05, 0xaa, 0xff, 0xbd, 0xa9, 0x7e, 0x4d, 0xc7, 0xd9, 0x67, 0xe1, 0x5b,
0xc9, 0x37, 0xe9, 0xec, 0xa6, 0xb8, 0xf5, 0x4d, 0x3a, 0x9b, 0x17, 0x05, 0xe9, 0xef, 0x12, 0x90,
0xf3, 0x63, 0x02, 0x9d, 0xf8, 0xf3, 0x4f, 0x1e, 0x38, 0xbb, 0x91, 0xc0, 0x61, 0x95, 0xdc, 0x23,
0x42, 0xa7, 0xb0, 0x37, 0xc1, 0xa4, 0x59, 0x1e, 0xce, 0x6d, 0x5a, 0x0b, 0xb4, 0xfe, 0xc4, 0x1a,
0x5c, 0x39, 0xfc, 0xd0, 0x4a, 0x14, 0x59, 0xe3, 0xb8, 0x0a, 0x45, 0xa1, 0x03, 0xc8, 0x78, 0x97,
0x19, 0x36, 0xb0, 0xf6, 0x1e, 0xd1, 0x8f, 0xa1, 0x40, 0x8e, 0x91, 0xda, 0xca, 0x35, 0xb0, 0x4d,
0x33, 0x6b, 0x31, 0x90, 0xe8, 0x88, 0xad, 0x7a, 0x06, 0xb6, 0xd5, 0xfc, 0xd4, 0x30, 0xbd, 0x87,
0x6f, 0xd2, 0xd9, 0x94, 0x98, 0x96, 0xfe, 0xd0, 0x57, 0x84, 0x24, 0x95, 0x1f, 0x4c, 0x91, 0xf4,
0x9d, 0x14, 0xd9, 0x0c, 0x29, 0x22, 0x9d, 0x40, 0x3e, 0x30, 0xe7, 0x8d, 0x3a, 0x5f, 0x22, 0xea,
0x7c, 0xd2, 0x5f, 0x26, 0x40, 0x08, 0x4e, 0xad, 0x6f, 0xe5, 0x40, 0x32, 0xe4, 0x47, 0xba, 0x31,
0xd1, 0x02, 0x63, 0xba, 0xe2, 0xe9, 0xc3, 0xd8, 0x11, 0xf8, 0xc9, 0x99, 0x6e, 0x4c, 0xbc, 0xe1,
0xcf, 0xc8, 0xff, 0x4d, 0xf6, 0xa0, 0x4b, 0x38, 0x2e, 0xb9, 0x8b, 0xd3, 0x70, 0xca, 0x31, 0x82,
0x2e, 0x85, 0x48, 0x47, 0x00, 0x0b, 0x56, 0xb4, 0x0d, 0xf9, 0x46, 0xeb, 0x95, 0xdc, 0x6c, 0xd4,
0x34, 0xf9, 0xbc, 0x27, 0x6e, 0x48, 0xbf, 0xf0, 0x62, 0xba, 0x61, 0xce, 0xe6, 0xe1, 0x02, 0x95,
0xb8, 0xbd, 0x40, 0x1d, 0x01, 0x90, 0x60, 0x0a, 0xbd, 0x05, 0xc9, 0x39, 0xc6, 0x98, 0xbd, 0x01,
0x91, 0x5e, 0x80, 0xc0, 0xcf, 0x69, 0xee, 0x92, 0xd5, 0x57, 0x16, 0xf9, 0xd0, 0x02, 0xfc, 0x49,
0xfa, 0xfb, 0x24, 0x94, 0x19, 0xfb, 0xb9, 0x35, 0x34, 0x46, 0x37, 0x91, 0xb7, 0x37, 0xb7, 0xa4,
0x9f, 0x67, 0x00, 0x26, 0x7e, 0xa7, 0x19, 0x44, 0x2d, 0xaf, 0xa8, 0x45, 0xdd, 0x87, 0xea, 0xac,
0xe6, 0x4c, 0xfc, 0x8e, 0xfe, 0x22, 0xb5, 0x30, 0x4f, 0x98, 0x2c, 0x2a, 0xae, 0xd7, 0xbc, 0xec,
0x45, 0x9d, 0x8e, 0x62, 0x55, 0xb2, 0x3c, 0xfb, 0xe9, 0xa0, 0xd7, 0x6c, 0xb3, 0x99, 0x6e, 0xeb,
0x53, 0x87, 0x5f, 0xbe, 0xbe, 0x8c, 0xb0, 0xc5, 0x29, 0x71, 0xd2, 0xc2, 0xef, 0x38, 0xa4, 0x43,
0x78, 0xb1, 0x8b, 0x6d, 0x87, 0x0a, 0x44, 0x1f, 0x9d, 0x72, 0x0d, 0x76, 0xe3, 0x48, 0x7e, 0xb5,
0xeb, 0x92, 0xf4, 0x35, 0xbc, 0x17, 0x2b, 0x03, 0x7f, 0x17, 0xf3, 0x3e, 0xe4, 0x03, 0x13, 0x2d,
0xcf, 0x4f, 0x17, 0x63, 0x2a, 0xe9, 0x2b, 0xb8, 0x17, 0x88, 0x37, 0x56, 0xe0, 0xf8, 0x29, 0xdc,
0x1a, 0x15, 0xb6, 0xf7, 0x06, 0x26, 0xc8, 0xcb, 0x37, 0xfe, 0xd8, 0xbb, 0x63, 0xb1, 0x29, 0x63,
0x29, 0xdc, 0xe8, 0x84, 0xae, 0x56, 0x9f, 0xc0, 0x0e, 0x2b, 0xf1, 0x73, 0x73, 0x34, 0x9f, 0x84,
0xea, 0xbc, 0x48, 0x11, 0x17, 0x0b, 0xb8, 0x54, 0x04, 0xa1, 0x87, 0xed, 0xa9, 0xc3, 0x85, 0x94,
0xfe, 0x71, 0x13, 0x0a, 0x1c, 0xc0, 0x77, 0x3e, 0x86, 0x1d, 0x92, 0x7c, 0xe3, 0xde, 0x79, 0x6e,
0x4f, 0xf5, 0x6b, 0x39, 0xf8, 0x8a, 0xee, 0x37, 0xe0, 0x90, 0xd0, 0x32, 0x35, 0x63, 0x53, 0x24,
0x6d, 0x88, 0xf7, 0xa7, 0xfa, 0x35, 0x95, 0x3b, 0x92, 0x60, 0x96, 0x9a, 0xda, 0xd4, 0xdd, 0x9b,
0xda, 0xd7, 0xb0, 0x1d, 0x4e, 0x68, 0xde, 0x84, 0xfd, 0xd8, 0xe7, 0x0e, 0xe9, 0x75, 0xd2, 0x0c,
0x66, 0xb8, 0x40, 0x77, 0x5f, 0x0c, 0xa5, 0x3e, 0x07, 0x3d, 0x83, 0x7d, 0x13, 0x5f, 0xbb, 0xbc,
0xfa, 0x0c, 0x2c, 0x73, 0xa4, 0xb9, 0xa4, 0x17, 0x77, 0x79, 0x12, 0x2c, 0x11, 0x2c, 0x2d, 0x3b,
0x55, 0xcb, 0x1c, 0xf5, 0x28, 0x0a, 0xfd, 0x16, 0x3c, 0x08, 0x30, 0xad, 0x6e, 0xa0, 0x0f, 0x7c,
0xe6, 0x48, 0xcd, 0x42, 0x3f, 0x85, 0x72, 0x70, 0xdb, 0x09, 0xd6, 0x6d, 0xcd, 0x35, 0xa6, 0xd8,
0x71, 0xf5, 0xe9, 0x8c, 0x77, 0xd5, 0xf7, 0x16, 0x5b, 0x13, 0x7c, 0xcf, 0x43, 0xa3, 0x11, 0xec,
0x47, 0xb3, 0xfb, 0x7c, 0x40, 0xfb, 0xe4, 0x2c, 0xb5, 0xc9, 0xd3, 0xbb, 0xd8, 0xa4, 0xc2, 0x58,
0x58, 0xa7, 0xbc, 0x3b, 0x89, 0x41, 0x95, 0x65, 0x28, 0xc5, 0x98, 0x31, 0xa6, 0xad, 0x0d, 0x8d,
0x51, 0xb3, 0xc1, 0xce, 0x18, 0xc3, 0xe1, 0xca, 0x5d, 0x63, 0x16, 0x3a, 0x0d, 0x2e, 0x14, 0xec,
0x35, 0xc2, 0xfc, 0x3c, 0x20, 0x16, 0x5d, 0x72, 0x05, 0x76, 0x55, 0x3c, 0xc1, 0x6f, 0x75, 0x93,
0x19, 0xcc, 0x0b, 0xca, 0x22, 0x24, 0xfd, 0x7e, 0x37, 0x69, 0x0c, 0x51, 0x99, 0xbe, 0x2e, 0x65,
0x03, 0x19, 0x92, 0x09, 0x05, 0xd5, 0x7f, 0x96, 0xfe, 0x61, 0x13, 0x0a, 0xa1, 0x45, 0x82, 0x15,
0x31, 0x11, 0x2e, 0xed, 0x6c, 0xdd, 0xa4, 0xbf, 0xee, 0xf7, 0x1e, 0xf8, 0xf4, 0x96, 0xe6, 0x57,
0xe9, 0xc8, 0xc0, 0x2e, 0x24, 0xda, 0xf7, 0x9b, 0x5d, 0x6d, 0xae, 0x9b, 0x5d, 0x2d, 0x45, 0xe9,
0xd6, 0xdd, 0xa3, 0xf4, 0x21, 0xe4, 0x83, 0x43, 0x27, 0x76, 0xef, 0x0c, 0x82, 0x56, 0xcd, 0x9b,
0xb2, 0xf1, 0xf3, 0xa6, 0x53, 0xd8, 0x1b, 0xd8, 0x98, 0xb9, 0xb8, 0x1f, 0x1d, 0x9a, 0xe9, 0xd0,
0x1b, 0x69, 0x5a, 0x2d, 0x79, 0x48, 0x3f, 0x34, 0x5a, 0x0e, 0xea, 0xae, 0x9a, 0x1e, 0x1d, 0xaf,
0x37, 0xe5, 0xff, 0xbb, 0xc9, 0x51, 0x0d, 0x84, 0xe0, 0x51, 0xb1, 0x09, 0x90, 0x83, 0xe9, 0x99,
0xb2, 0x04, 0x9f, 0x21, 0xcf, 0x1c, 0xe5, 0x9d, 0x0a, 0x5d, 0x3f, 0xad, 0x66, 0xf8, 0x51, 0x48,
0x3f, 0x85, 0x7c, 0xe0, 0x4a, 0x4f, 0x42, 0xc2, 0xc4, 0xee, 0x3b, 0xcb, 0xbe, 0xe2, 0x6a, 0x7b,
0x8f, 0x08, 0x41, 0x9a, 0x36, 0x04, 0xec, 0x15, 0x2b, 0xfd, 0x2d, 0xc9, 0x90, 0xf5, 0xee, 0x4a,
0x04, 0x4f, 0xe7, 0x4b, 0x2c, 0x18, 0xe9, 0x6f, 0xd2, 0xae, 0xb2, 0x1b, 0x06, 0x6f, 0x06, 0x79,
0xbb, 0xca, 0x60, 0xb4, 0x15, 0x94, 0xfe, 0x24, 0x01, 0x79, 0xd9, 0xb9, 0xea, 0x9a, 0xfa, 0xcc,
0xb9, 0xb4, 0xdc, 0x35, 0x31, 0xf9, 0x3f, 0xb9, 0xbc, 0x87, 0x5b, 0xb3, 0x54, 0xb4, 0x35, 0x0b,
0xb5, 0x2d, 0xe9, 0x70, 0xdb, 0x42, 0x25, 0xab, 0x18, 0xc3, 0xff, 0x83, 0x92, 0xfd, 0x73, 0x02,
0x76, 0x83, 0x0e, 0xe7, 0x8b, 0x18, 0xfa, 0xc8, 0x25, 0x90, 0x99, 0x16, 0xf6, 0x8d, 0xf9, 0xc8,
0x65, 0x41, 0x17, 0xd0, 0x96, 0x8d, 0x1b, 0x3e, 0x00, 0x96, 0x70, 0x48, 0x7e, 0xa1, 0xce, 0xc3,
0xe4, 0x14, 0x3c, 0x20, 0x4d, 0x28, 0x9f, 0x02, 0x72, 0x2d, 0x57, 0x9f, 0x90, 0x78, 0x77, 0x58,
0xa9, 0xc3, 0x43, 0xde, 0xd3, 0x8a, 0x14, 0xd3, 0xd5, 0x5d, 0xa7, 0xca, 0xe0, 0x64, 0x49, 0x76,
0xbd, 0xe1, 0x11, 0xc8, 0xcb, 0x30, 0x1b, 0x6b, 0x70, 0xa5, 0xa4, 0xcf, 0x61, 0x97, 0xc6, 0xae,
0x2f, 0x0d, 0x4f, 0xf7, 0x6b, 0xa6, 0xa2, 0x7f, 0x94, 0x80, 0xbd, 0x50, 0xa8, 0xf8, 0x46, 0xa9,
0xad, 0x78, 0x75, 0x70, 0x14, 0x1b, 0xbc, 0xfe, 0x96, 0xdf, 0xef, 0xfd, 0x88, 0xf4, 0x4f, 0x69,
0xd8, 0x8b, 0xe8, 0xc0, 0x6f, 0x64, 0xab, 0xfd, 0x28, 0xa8, 0x5e, 0x32, 0x3c, 0xc3, 0x95, 0xa0,
0x30, 0xb3, 0xf1, 0x5b, 0xcd, 0xc7, 0xb3, 0x51, 0x60, 0x9e, 0x00, 0x2b, 0x9c, 0x66, 0x45, 0x35,
0x48, 0xaf, 0xab, 0x06, 0xf5, 0x25, 0xe3, 0x6c, 0xde, 0xc1, 0x38, 0x71, 0xb5, 0xe8, 0x01, 0xe4,
0xbd, 0x29, 0x33, 0x91, 0x2f, 0x43, 0xd3, 0x84, 0x37, 0x66, 0x6e, 0x0c, 0x17, 0xca, 0xb9, 0xd7,
0x7c, 0x9e, 0x91, 0xe1, 0x48, 0xf4, 0x02, 0xee, 0xfb, 0xac, 0xab, 0xab, 0xc7, 0x3e, 0x27, 0x3f,
0xfb, 0x01, 0x8a, 0xc8, 0x2f, 0x56, 0x15, 0x91, 0xd3, 0x45, 0x30, 0xc4, 0x1d, 0xde, 0x9d, 0x8a,
0x89, 0x7e, 0xd7, 0x9c, 0xff, 0x45, 0x38, 0xe7, 0x3f, 0x88, 0xcf, 0xf9, 0xbe, 0x0c, 0x81, 0xdc,
0xff, 0xc2, 0xeb, 0x53, 0x48, 0xee, 0x56, 0x75, 0x97, 0xc4, 0x22, 0x8f, 0x91, 0x47, 0x20, 0x78,
0x83, 0x9d, 0x2b, 0x7c, 0xc3, 0x9c, 0x5d, 0x50, 0xf3, 0x7c, 0xb8, 0x43, 0x40, 0xd2, 0x6f, 0x03,
0x2c, 0xf8, 0x48, 0x63, 0x13, 0x60, 0xf0, 0x1a, 0x9b, 0x05, 0x3d, 0x3a, 0xe1, 0xf3, 0x20, 0x3a,
0xe3, 0x48, 0xae, 0x9a, 0x71, 0xd0, 0x61, 0x10, 0xf9, 0x25, 0xa9, 0x5e, 0x23, 0x14, 0x14, 0x8e,
0x3b, 0xff, 0x73, 0x2e, 0x9d, 0x4d, 0xc1, 0xcb, 0xb3, 0xdb, 0x00, 0x0b, 0x95, 0x8a, 0xfd, 0x76,
0xa4, 0x71, 0x24, 0x9a, 0xbc, 0x8e, 0x07, 0x7d, 0x08, 0x45, 0xc7, 0xd5, 0x6d, 0x57, 0x8b, 0x24,
0x06, 0x81, 0x42, 0xbd, 0xd0, 0x78, 0x0c, 0xa2, 0x39, 0x9f, 0x32, 0x1a, 0xec, 0x68, 0x7d, 0x7d,
0x70, 0xc5, 0x43, 0xb7, 0x68, 0xce, 0xa7, 0x15, 0x06, 0xae, 0xe8, 0x83, 0x2b, 0x49, 0x85, 0xfd,
0xe8, 0x46, 0x5c, 0xf4, 0x2f, 0x21, 0xc3, 0xf9, 0xb9, 0xd4, 0x0f, 0xd6, 0xfb, 0x8a, 0xea, 0x91,
0x1f, 0x7f, 0xec, 0x7f, 0x71, 0x42, 0xe7, 0x61, 0x05, 0xc8, 0xf5, 0x5e, 0x2b, 0xf2, 0xcb, 0xa6,
0xd2, 0xed, 0x8a, 0x1b, 0x28, 0x0f, 0x19, 0xb9, 0x55, 0xad, 0xb7, 0xd5, 0xae, 0x98, 0x38, 0xfe,
0xe3, 0x04, 0x94, 0x62, 0xe6, 0xee, 0xf4, 0x9b, 0x9d, 0x1e, 0xfb, 0xc2, 0x85, 0x7d, 0xcf, 0xd2,
0xee, 0x28, 0x2d, 0x71, 0x03, 0x15, 0x01, 0x18, 0x9c, 0x3e, 0x27, 0xd0, 0x0e, 0x14, 0xd8, 0xb3,
0xf2, 0x5d, 0xa7, 0xa1, 0x2a, 0x35, 0x31, 0x89, 0x0e, 0x60, 0x37, 0xcc, 0x7a, 0xd1, 0xa9, 0xc9,
0x3d, 0x45, 0x4c, 0x21, 0x11, 0x04, 0x86, 0xa9, 0x36, 0xdb, 0x5d, 0xa5, 0x26, 0xa6, 0xd1, 0x3d,
0x28, 0x85, 0x69, 0xe9, 0x07, 0x41, 0xe2, 0xe6, 0xf1, 0x17, 0x90, 0xf5, 0x4e, 0x9a, 0xb0, 0xf5,
0x1a, 0x8a, 0xaa, 0xd5, 0x94, 0x33, 0xf9, 0xa2, 0xd9, 0x13, 0x37, 0x10, 0xc0, 0x16, 0x85, 0x3c,
0x15, 0x13, 0xfe, 0xef, 0xcf, 0xc5, 0xe4, 0xf1, 0x9f, 0x27, 0x00, 0x16, 0x1d, 0x2e, 0x2a, 0xc1,
0x76, 0x5b, 0xad, 0x29, 0xaa, 0xd6, 0xbd, 0xa8, 0x9c, 0x37, 0x7a, 0x6c, 0x8c, 0xbb, 0x03, 0x05,
0x06, 0xac, 0x36, 0x15, 0x99, 0x48, 0x4c, 0xdf, 0xba, 0x30, 0x10, 0xff, 0xe4, 0xa8, 0xf9, 0x46,
0x3b, 0x6b, 0x34, 0x9b, 0x54, 0x1b, 0x04, 0x45, 0x86, 0x53, 0xbe, 0x53, 0xaa, 0x17, 0x64, 0x89,
0xd4, 0x02, 0x56, 0x95, 0x5b, 0x55, 0xa5, 0x49, 0x35, 0xf1, 0x97, 0xf5, 0x0c, 0xb1, 0x49, 0xe4,
0x66, 0x20, 0xfe, 0x2d, 0xd0, 0xd6, 0xf1, 0xef, 0x40, 0x29, 0xa6, 0xf1, 0x20, 0x07, 0xd4, 0x6a,
0x6b, 0xe7, 0xb2, 0xfa, 0x52, 0xe9, 0x31, 0x09, 0xd9, 0x6f, 0xcf, 0x4e, 0x09, 0xb4, 0x0b, 0xa2,
0x5c, 0xad, 0x2a, 0x9d, 0x1e, 0x3d, 0x0a, 0xb2, 0x68, 0x57, 0x4c, 0xa2, 0x6d, 0xc8, 0x73, 0x42,
0x7a, 0x1a, 0xa9, 0xd3, 0xff, 0xcc, 0xf8, 0x5f, 0x99, 0xc8, 0xfe, 0x0b, 0x19, 0xf4, 0x2d, 0x14,
0xc3, 0xdf, 0x05, 0xa3, 0x07, 0x81, 0xab, 0x6b, 0xcc, 0x47, 0xcb, 0xe5, 0xf7, 0x57, 0xe2, 0xb9,
0x6f, 0xf6, 0x20, 0x1f, 0xf8, 0x20, 0x16, 0x3d, 0x5a, 0x1a, 0xff, 0x44, 0x3f, 0x09, 0x2e, 0x4b,
0xeb, 0x48, 0xf8, 0xaa, 0x3f, 0x87, 0x42, 0x68, 0x8e, 0x82, 0x3e, 0xb8, 0xc3, 0xa4, 0xa7, 0xfc,
0xe1, 0x7a, 0xa2, 0x85, 0xc4, 0x81, 0xaf, 0x65, 0x97, 0x24, 0x5e, 0xfe, 0x82, 0x77, 0x49, 0xe2,
0xb8, 0x8f, 0x6d, 0x7b, 0xe1, 0x49, 0x66, 0x74, 0xd5, 0xe5, 0x6f, 0x63, 0x97, 0x56, 0x8d, 0xf9,
0xe0, 0x15, 0x7d, 0x1b, 0xf2, 0xe2, 0x87, 0x71, 0xa3, 0xd9, 0xe0, 0xa8, 0xa8, 0xfc, 0x68, 0x0d,
0x05, 0x5f, 0xf2, 0x0d, 0xec, 0xf9, 0xef, 0x43, 0x69, 0xf6, 0xe0, 0xfe, 0x81, 0x16, 0x85, 0x37,
0xee, 0x13, 0xdb, 0xf2, 0x51, 0xf4, 0x85, 0x53, 0x08, 0xfd, 0x38, 0xf1, 0x34, 0x81, 0x9e, 0xc3,
0x26, 0x1d, 0x0b, 0xa0, 0xbd, 0xe8, 0x98, 0x80, 0x49, 0xb7, 0x1f, 0x3f, 0x3d, 0x40, 0x2d, 0xd8,
0x0b, 0x35, 0x4e, 0xfe, 0x05, 0xea, 0x28, 0xbe, 0xb1, 0x5a, 0x5e, 0x2f, 0xdc, 0x5d, 0xb7, 0xa0,
0xb0, 0x6a, 0x9d, 0xb8, 0xcb, 0x5d, 0xf9, 0x96, 0x74, 0x4a, 0x4e, 0x21, 0x50, 0xb5, 0xa2, 0xa7,
0xb0, 0x54, 0x08, 0x97, 0x4e, 0x21, 0xa6, 0x1a, 0x7d, 0x0b, 0xc5, 0x70, 0xb2, 0x47, 0x2b, 0x84,
0x70, 0x96, 0x23, 0x31, 0xbe, 0x4a, 0x54, 0x7e, 0xed, 0xe7, 0x3f, 0x1a, 0x1b, 0xee, 0xe5, 0xbc,
0x7f, 0x32, 0xb0, 0xa6, 0x9f, 0x4d, 0x8c, 0xf1, 0xa5, 0x6b, 0x1a, 0xe6, 0x78, 0xa2, 0xf7, 0x9d,
0xcf, 0x08, 0xeb, 0x67, 0x9c, 0xbf, 0xbf, 0x45, 0xff, 0x64, 0xe1, 0xd9, 0x7f, 0x07, 0x00, 0x00,
0xff, 0xff, 0x76, 0x2b, 0x71, 0x96, 0xc6, 0x30, 0x00, 0x00,
0x61, 0xaa, 0x27, 0x33, 0x9d, 0xe9, 0x49, 0xcf, 0x6b, 0xe6, 0xcd, 0x6b, 0x06, 0x64, 0x5b, 0x79,
0xf6, 0xb4, 0x63, 0x7b, 0x64, 0xa7, 0x3f, 0xde, 0x2b, 0x50, 0xc9, 0xf6, 0xb5, 0x23, 0x62, 0x4b,
0x46, 0x92, 0xbb, 0x13, 0x16, 0x6f, 0xc1, 0x8e, 0x05, 0x4b, 0x0a, 0xaa, 0x28, 0x76, 0xfc, 0x02,
0xd8, 0xb0, 0xa4, 0x58, 0xc0, 0x8a, 0x25, 0x2b, 0xaa, 0x80, 0x05, 0x2b, 0x8a, 0x05, 0x5b, 0x76,
0xd4, 0xfd, 0x90, 0x2c, 0xc9, 0xb2, 0x93, 0xc7, 0x3c, 0xaa, 0x28, 0x36, 0xdd, 0xd6, 0xf9, 0xb8,
0xf7, 0x9c, 0x73, 0xcf, 0xc7, 0x3d, 0x47, 0x0a, 0x88, 0xfa, 0x7c, 0xe0, 0x1a, 0x96, 0x89, 0xb1,
0x7d, 0x32, 0xb3, 0x2d, 0xd7, 0x42, 0x99, 0x99, 0x65, 0x4d, 0xec, 0xd9, 0x40, 0xfa, 0x83, 0x04,
0xec, 0xa9, 0xd8, 0xc1, 0xf6, 0x3b, 0x2c, 0x0f, 0x06, 0xd6, 0xdc, 0x74, 0x55, 0xfc, 0x7b, 0x73,
0xec, 0xb8, 0xe8, 0x23, 0x28, 0xe8, 0x0c, 0xa2, 0xbd, 0xd3, 0x27, 0x73, 0x7c, 0x90, 0x78, 0x98,
0x78, 0x9c, 0x56, 0x05, 0x0e, 0x7c, 0x45, 0x60, 0xe8, 0xd7, 0xa0, 0xe8, 0x11, 0xe1, 0xeb, 0x99,
0x61, 0xdf, 0x1c, 0x24, 0x1f, 0x26, 0x1e, 0x17, 0x54, 0x8f, 0x55, 0xa1, 0x40, 0x74, 0x04, 0xe0,
0xda, 0xfa, 0x10, 0xdb, 0xda, 0x15, 0xbe, 0x39, 0x48, 0x3d, 0x4c, 0x3c, 0x16, 0xd4, 0x1c, 0x83,
0xbc, 0xc4, 0x37, 0xd2, 0x15, 0xec, 0x47, 0x65, 0x70, 0x66, 0x96, 0xe9, 0xb0, 0xf5, 0x7d, 0xd9,
0x29, 0x73, 0x82, 0x32, 0x17, 0x16, 0xd0, 0x97, 0xf8, 0x06, 0x1d, 0xc3, 0x8e, 0x61, 0x1a, 0xae,
0xa1, 0x4f, 0xb4, 0xbe, 0xee, 0x0e, 0x2e, 0x29, 0x65, 0x92, 0x52, 0x6e, 0x73, 0x44, 0x85, 0xc0,
0xc9, 0x66, 0xff, 0x96, 0x80, 0x83, 0x2e, 0xd9, 0xcb, 0x6e, 0x98, 0x86, 0x1b, 0x51, 0xfa, 0xf9,
0x42, 0xe9, 0x99, 0x65, 0x98, 0x2e, 0xdd, 0x2e, 0x7f, 0xba, 0x73, 0xc2, 0xed, 0x75, 0xd2, 0x9e,
0xbb, 0x1d, 0x82, 0xf0, 0xed, 0x40, 0x9f, 0x82, 0x76, 0x70, 0x06, 0xb6, 0x31, 0x73, 0xf9, 0xee,
0xde, 0x6a, 0x5d, 0x0a, 0x5c, 0xb6, 0x69, 0xea, 0x4e, 0x36, 0x4d, 0xdf, 0x6e, 0xd3, 0xcd, 0xa8,
0x4d, 0x3f, 0x80, 0xc3, 0x18, 0x2d, 0x99, 0x59, 0xa5, 0xb9, 0x67, 0x82, 0xee, 0xbc, 0x3f, 0x35,
0xdc, 0xb6, 0x3d, 0xc4, 0xb6, 0x67, 0x82, 0x4f, 0x20, 0xa5, 0x3b, 0x57, 0x5c, 0x71, 0xe4, 0x2b,
0xce, 0xe8, 0x65, 0xe7, 0xaa, 0xbe, 0xa1, 0x12, 0x02, 0x42, 0xd7, 0x37, 0x86, 0x54, 0xcf, 0x65,
0xba, 0x8a, 0x31, 0x24, 0x74, 0x7d, 0x63, 0x58, 0xc9, 0x41, 0x66, 0x88, 0x5d, 0xdd, 0x98, 0x38,
0xc4, 0xd9, 0x0e, 0x63, 0xf6, 0xe5, 0x67, 0xfd, 0x02, 0x0a, 0x86, 0xf9, 0x4e, 0x9f, 0x18, 0x43,
0xcd, 0x22, 0x08, 0x2e, 0xc2, 0x9e, 0xbf, 0x74, 0x83, 0x61, 0x29, 0x57, 0x7d, 0x43, 0x15, 0x8c,
0xc0, 0x33, 0xba, 0x0f, 0x59, 0x7d, 0x30, 0xc0, 0x33, 0x17, 0x33, 0x99, 0xb2, 0xf5, 0x0d, 0xd5,
0x87, 0x04, 0x85, 0x68, 0x7a, 0xba, 0x57, 0x75, 0x73, 0x80, 0x27, 0x21, 0xdd, 0x9f, 0xc2, 0x2e,
0xdd, 0x5a, 0x33, 0x2d, 0x73, 0x80, 0xb5, 0x99, 0x8d, 0x8d, 0xa9, 0x3e, 0xc6, 0xdc, 0xe9, 0x10,
0xc5, 0xb5, 0x08, 0xaa, 0xc3, 0x31, 0x0b, 0x33, 0x87, 0x56, 0xe3, 0x66, 0xfe, 0xd7, 0x24, 0xec,
0x56, 0x27, 0x06, 0x36, 0x5d, 0x99, 0xb9, 0xeb, 0x39, 0x76, 0x1c, 0x7d, 0x8c, 0xd1, 0x57, 0xb0,
0x35, 0xb0, 0xa6, 0x53, 0xc3, 0xf3, 0xaf, 0xb2, 0xaf, 0x23, 0x3f, 0xa9, 0x2a, 0xc5, 0x4e, 0xb1,
0xe9, 0xd6, 0x37, 0x54, 0x4e, 0x8b, 0x5e, 0x40, 0xce, 0x99, 0xf7, 0x89, 0x7f, 0xf5, 0x31, 0xb7,
0xfb, 0xfd, 0x28, 0x63, 0x97, 0x11, 0xcc, 0xc8, 0x6e, 0xf5, 0x0d, 0x75, 0xc1, 0x80, 0x9e, 0xc1,
0x16, 0x33, 0x07, 0x75, 0xba, 0xfc, 0xe9, 0xe1, 0xc2, 0xa7, 0x89, 0xd0, 0xe7, 0x24, 0x3e, 0x64,
0x4a, 0x40, 0xb6, 0x64, 0xa4, 0x84, 0xc9, 0xc6, 0xbf, 0x8b, 0x07, 0x2e, 0xf5, 0xc1, 0x78, 0x26,
0x95, 0x12, 0x10, 0x26, 0x46, 0x8a, 0x9e, 0x40, 0xda, 0x31, 0xc6, 0x26, 0xf5, 0xc9, 0xfc, 0xe9,
0xbd, 0x18, 0x96, 0xae, 0x31, 0x26, 0xd2, 0x51, 0x32, 0xf4, 0x15, 0x64, 0x6c, 0x3c, 0xb0, 0xde,
0x61, 0xfb, 0x60, 0x8b, 0x72, 0x1c, 0x44, 0x95, 0x52, 0x19, 0xfa, 0xa6, 0xbe, 0xa1, 0x7a, 0xa4,
0x95, 0x4d, 0x48, 0x4d, 0x9d, 0xb1, 0xf4, 0x16, 0x76, 0x96, 0x4c, 0x86, 0x3e, 0x84, 0x3c, 0x33,
0x99, 0x76, 0xa9, 0x3b, 0x97, 0xfc, 0xf4, 0x80, 0x81, 0xea, 0xba, 0x73, 0x49, 0xe2, 0x90, 0xe5,
0x89, 0x77, 0xd8, 0x76, 0x0c, 0xcb, 0xe4, 0x59, 0x4b, 0xa0, 0xc0, 0x57, 0x0c, 0x26, 0xd9, 0x50,
0x8a, 0x31, 0x6a, 0x24, 0xee, 0x12, 0x91, 0xb8, 0x43, 0x8f, 0x40, 0xe0, 0x7b, 0x53, 0x1f, 0xe2,
0x79, 0x80, 0xcb, 0x43, 0x7d, 0x07, 0x1d, 0x42, 0x56, 0x9f, 0xbb, 0x97, 0x9a, 0x63, 0x8c, 0x79,
0x2e, 0xcc, 0x90, 0xe7, 0xae, 0x31, 0x96, 0x9e, 0x80, 0x18, 0x3d, 0x0d, 0x42, 0xce, 0x84, 0x35,
0x86, 0x7c, 0xbb, 0x0c, 0x7d, 0x6e, 0x0c, 0xa5, 0xbf, 0x48, 0x05, 0xe9, 0xd9, 0x41, 0xac, 0xa1,
0x47, 0xfb, 0xe4, 0x38, 0x75, 0x87, 0x2b, 0x9c, 0x53, 0xf9, 0x13, 0xfa, 0x29, 0xe4, 0xd9, 0x2f,
0x6d, 0x60, 0x0d, 0x59, 0x56, 0x2a, 0x9e, 0x7e, 0xb2, 0xf2, 0xac, 0x4f, 0xd8, 0x7f, 0x2a, 0x65,
0x51, 0x81, 0xb1, 0x56, 0xad, 0x21, 0x46, 0xaf, 0x60, 0x9b, 0x39, 0x01, 0xe6, 0x41, 0xec, 0x1c,
0xa4, 0x1f, 0xa6, 0x1e, 0xe7, 0x4f, 0x9f, 0xdc, 0xb6, 0x18, 0x66, 0x71, 0xec, 0x28, 0xa6, 0x6b,
0xdf, 0xa8, 0x45, 0x3b, 0x04, 0x2c, 0xbf, 0x86, 0x52, 0x0c, 0x19, 0x12, 0x21, 0xe5, 0x1d, 0x42,
0x4e, 0x25, 0x3f, 0xd1, 0x31, 0x6c, 0xb2, 0xcc, 0xca, 0xe2, 0x63, 0x37, 0xbc, 0x2d, 0x97, 0x9b,
0x91, 0x7c, 0x93, 0xfc, 0x3a, 0x21, 0x0d, 0x40, 0x08, 0x2a, 0x83, 0xf2, 0x90, 0xb9, 0x68, 0xbd,
0x6c, 0xb5, 0x5f, 0xb7, 0xc4, 0x0d, 0xb4, 0x0f, 0xa8, 0xab, 0xa8, 0xaf, 0x14, 0x55, 0x3b, 0x6f,
0x74, 0x2b, 0x4a, 0x5d, 0x7e, 0xd5, 0x68, 0xab, 0x62, 0x02, 0x95, 0x61, 0xbf, 0x22, 0xf7, 0xaa,
0x75, 0xed, 0x95, 0xa2, 0x76, 0x1b, 0xed, 0x16, 0x41, 0x9f, 0x13, 0x80, 0x98, 0x44, 0x08, 0x8a,
0x1d, 0x59, 0xed, 0x35, 0xe4, 0xa6, 0xa6, 0x2a, 0xdf, 0x29, 0xd5, 0x9e, 0x98, 0x92, 0xfe, 0x2a,
0x01, 0xf9, 0xc0, 0xfe, 0x81, 0x63, 0x48, 0xac, 0x3b, 0x86, 0x64, 0xdc, 0x31, 0x70, 0xa3, 0x05,
0xd5, 0x59, 0x3a, 0x06, 0xa9, 0x0a, 0x3b, 0x4b, 0x04, 0x44, 0xb2, 0xda, 0x45, 0xa7, 0xd9, 0xa8,
0xca, 0x3d, 0x45, 0xeb, 0x28, 0x8a, 0x2a, 0x6e, 0x10, 0x4d, 0xaa, 0x75, 0xb9, 0xd5, 0x52, 0x9a,
0xda, 0xd9, 0x45, 0xab, 0xd6, 0x68, 0xfd, 0x54, 0x3b, 0x93, 0x1b, 0x4d, 0xa5, 0x26, 0x26, 0xa4,
0xff, 0x4a, 0x40, 0xbe, 0x7a, 0xa9, 0x9b, 0x26, 0x9e, 0x34, 0xcc, 0x91, 0x85, 0x1e, 0x43, 0xda,
0xbd, 0x99, 0xb1, 0x64, 0x58, 0x0c, 0x58, 0x96, 0xd3, 0xf4, 0x6e, 0x66, 0x58, 0xa5, 0x14, 0xe8,
0x63, 0x28, 0x4e, 0xac, 0x81, 0x3e, 0xd1, 0x4c, 0x6b, 0x88, 0x03, 0xb5, 0x58, 0xa0, 0xd0, 0x96,
0x35, 0xc4, 0x24, 0x52, 0x3e, 0x21, 0xbe, 0x32, 0xb5, 0x5c, 0xbc, 0x20, 0x63, 0xd1, 0x50, 0x60,
0x60, 0x8f, 0xee, 0xd7, 0xe1, 0x80, 0xad, 0x36, 0xd3, 0x6f, 0x48, 0x78, 0x6b, 0x7d, 0xdd, 0xc1,
0xbc, 0x3c, 0xa7, 0x29, 0xc3, 0x1e, 0xc5, 0x77, 0x18, 0xba, 0xa2, 0x3b, 0x98, 0x15, 0xe5, 0x1f,
0xc3, 0x21, 0xdf, 0x20, 0x86, 0x93, 0x15, 0xcc, 0x7d, 0x46, 0x10, 0x65, 0x95, 0xfe, 0x25, 0x09,
0xc5, 0x70, 0xba, 0x5a, 0x17, 0x56, 0x2f, 0x41, 0xf0, 0xab, 0xbf, 0x31, 0x76, 0x0e, 0x92, 0xd4,
0xe5, 0x1f, 0xaf, 0x48, 0x7c, 0x7e, 0xaa, 0x36, 0xc6, 0xdc, 0xdb, 0xf3, 0xfa, 0x02, 0x82, 0x5a,
0x50, 0x18, 0x30, 0x8b, 0x6a, 0x86, 0x39, 0xb2, 0x9c, 0x83, 0x14, 0x5d, 0xed, 0xd3, 0x55, 0xab,
0x05, 0x8e, 0x88, 0x2f, 0x27, 0x0c, 0x02, 0xa0, 0xf2, 0xb7, 0x20, 0x46, 0x37, 0x8c, 0x89, 0x9b,
0xdd, 0x60, 0xdc, 0x08, 0x81, 0x08, 0x29, 0x5f, 0xc0, 0xce, 0xd2, 0x16, 0xbf, 0x4c, 0xe0, 0x05,
0x98, 0x83, 0x81, 0xf7, 0x14, 0xb6, 0x23, 0xd9, 0xfd, 0x96, 0xcc, 0x2a, 0xfd, 0x59, 0x0a, 0x76,
0xf9, 0x2d, 0x24, 0x5c, 0x4d, 0xbf, 0x86, 0xdc, 0xe0, 0x52, 0x9f, 0x4c, 0xb0, 0xc9, 0x4b, 0x75,
0xb0, 0x84, 0xf0, 0xea, 0xec, 0xe1, 0x49, 0x4d, 0xf4, 0x89, 0xd1, 0x8f, 0x20, 0xe3, 0xcc, 0x07,
0x03, 0xec, 0x38, 0x5c, 0xec, 0x45, 0x7d, 0xeb, 0x7a, 0x85, 0xb3, 0xcb, 0x08, 0x48, 0xed, 0xe1,
0xb4, 0xe8, 0x0b, 0xd8, 0xc4, 0xb6, 0x6d, 0xd9, 0xbc, 0x92, 0xde, 0x5b, 0x66, 0x52, 0x08, 0xba,
0xbe, 0xa1, 0x32, 0x3a, 0xf4, 0x1c, 0x32, 0x33, 0x1b, 0xcf, 0x74, 0x1b, 0xf3, 0x3a, 0x5a, 0x8e,
0x39, 0xcd, 0x0e, 0xa3, 0x20, 0x1b, 0x71, 0x62, 0x74, 0x1a, 0xaa, 0xa4, 0xf7, 0x57, 0xb8, 0x40,
0x05, 0x8f, 0x8d, 0x45, 0x39, 0xfd, 0x31, 0x64, 0x47, 0x86, 0xa9, 0x4f, 0x8c, 0xdf, 0xc7, 0xbc,
0x9e, 0x7e, 0x10, 0xc3, 0x77, 0xc6, 0x49, 0xc8, 0x2d, 0xc9, 0x23, 0x47, 0xcf, 0x20, 0xc3, 0x3d,
0xf1, 0x20, 0x13, 0xd1, 0x8c, 0x9b, 0x9c, 0x1f, 0x19, 0x91, 0x91, 0x53, 0x7a, 0x85, 0xb8, 0x03,
0xdb, 0x11, 0x53, 0xa3, 0xfb, 0xd1, 0x73, 0x11, 0x82, 0xb6, 0x8f, 0x14, 0xe9, 0x64, 0xb4, 0x48,
0x4b, 0x5f, 0x82, 0x18, 0x3d, 0x84, 0xdb, 0x5c, 0xe4, 0xdf, 0x13, 0x50, 0xa0, 0xea, 0xe1, 0xe1,
0xb9, 0x6e, 0x5f, 0x61, 0x17, 0x75, 0xa0, 0x38, 0x65, 0x00, 0xaf, 0x1e, 0x25, 0x22, 0xe1, 0x14,
0xa2, 0xf7, 0x9e, 0x82, 0xb5, 0xa8, 0x30, 0x0d, 0xc2, 0xd0, 0x09, 0x94, 0x06, 0x13, 0xac, 0xdb,
0x86, 0x39, 0xd6, 0x66, 0xb6, 0x31, 0xc0, 0x9a, 0xad, 0xbb, 0x98, 0xdf, 0x20, 0x76, 0x3c, 0x54,
0x87, 0x60, 0x54, 0xdd, 0xc5, 0xe5, 0xd7, 0x80, 0x96, 0x17, 0x8d, 0x09, 0xa0, 0xcf, 0xc2, 0x01,
0xb4, 0x17, 0x15, 0x90, 0x25, 0xf4, 0x40, 0x04, 0xfd, 0xc7, 0x26, 0xcf, 0xf2, 0x41, 0xef, 0x41,
0x6f, 0x56, 0x28, 0xfc, 0x64, 0xb5, 0xc7, 0xc5, 0x28, 0x5d, 0x49, 0x1e, 0x24, 0xa2, 0x8a, 0x9f,
0xae, 0x51, 0x9c, 0xd2, 0x2f, 0x2b, 0x8f, 0x7e, 0x13, 0xc4, 0xc1, 0xa5, 0x6e, 0x8f, 0xf1, 0x50,
0xe3, 0xfe, 0xe2, 0xe5, 0xb3, 0xdd, 0xe8, 0x25, 0xaf, 0x66, 0x8c, 0x46, 0xea, 0x36, 0xa7, 0xe6,
0x30, 0x07, 0x7d, 0x03, 0x05, 0x7c, 0x8d, 0x07, 0x73, 0xe2, 0x7c, 0xda, 0x08, 0x7b, 0xf1, 0xb3,
0xb0, 0x8e, 0xe2, 0x61, 0xcf, 0x30, 0x56, 0x05, 0x1c, 0x78, 0x42, 0x9f, 0xc1, 0x0e, 0xcb, 0xd8,
0xae, 0xad, 0x9b, 0x8e, 0x4e, 0x1d, 0x98, 0xe7, 0x7d, 0x91, 0x22, 0x7a, 0x0b, 0x38, 0xfa, 0x1c,
0x4a, 0x23, 0xcc, 0x54, 0xd2, 0x1c, 0xdd, 0xd5, 0x66, 0xc4, 0xc7, 0xde, 0xd3, 0x08, 0x4a, 0xab,
0xdb, 0x23, 0x4c, 0xf5, 0xe9, 0xea, 0x6e, 0x07, 0xdb, 0x2f, 0xdf, 0x93, 0x0a, 0x47, 0xa9, 0x71,
0x9f, 0xd3, 0xd3, 0x80, 0x49, 0xab, 0x02, 0x21, 0xa4, 0xc0, 0xae, 0x1e, 0xbe, 0x89, 0x65, 0xc3,
0x25, 0x63, 0xe9, 0x06, 0x9a, 0x5b, 0xbe, 0x81, 0xa2, 0xd7, 0xb0, 0xed, 0x9d, 0xe5, 0x94, 0xba,
0xa7, 0x73, 0x00, 0xd4, 0x78, 0x27, 0xb7, 0x1f, 0x26, 0xf3, 0x67, 0xef, 0x3a, 0x35, 0x0d, 0x01,
0xff, 0xd7, 0x7c, 0xb2, 0xfc, 0x16, 0x4a, 0x31, 0xfb, 0x07, 0x57, 0x2e, 0xb0, 0x95, 0x3f, 0x0f,
0xaf, 0xbc, 0x1f, 0x1f, 0x8e, 0xe1, 0x82, 0x51, 0x8a, 0x49, 0x7b, 0xeb, 0x6e, 0xc7, 0x16, 0xa0,
0xe5, 0x84, 0xb7, 0xae, 0x8e, 0x1f, 0x01, 0x70, 0x87, 0xb9, 0xe6, 0x9d, 0xad, 0xa0, 0xe6, 0x98,
0xa7, 0x5c, 0x1b, 0x43, 0x92, 0xb1, 0x2e, 0xb1, 0x31, 0xbe, 0x74, 0xb5, 0x4b, 0x72, 0x83, 0x48,
0x51, 0x6d, 0x80, 0x81, 0xea, 0xe4, 0xd6, 0xf0, 0xd7, 0x49, 0x28, 0x86, 0x4b, 0x00, 0xa9, 0xab,
0xac, 0x54, 0x30, 0xab, 0xf2, 0x7a, 0xf0, 0x02, 0x80, 0xfe, 0x08, 0xde, 0xf3, 0x8e, 0x56, 0x54,
0x91, 0x13, 0xfa, 0xaf, 0x9a, 0xa3, 0x0c, 0xf4, 0x92, 0xbd, 0x7e, 0x9a, 0x82, 0xea, 0x50, 0xf2,
0x6e, 0x23, 0x36, 0x9d, 0xaa, 0xe8, 0xd4, 0xf1, 0xd3, 0x6b, 0x33, 0xba, 0x8a, 0x74, 0x7f, 0x46,
0xe0, 0xb1, 0x48, 0x06, 0x6c, 0x32, 0x2d, 0x42, 0xb7, 0xe2, 0x12, 0x6c, 0xf3, 0x5b, 0x71, 0xb7,
0x7e, 0xd1, 0xab, 0x11, 0x20, 0xbd, 0x12, 0xcb, 0xd5, 0x6a, 0xfb, 0xa2, 0xd5, 0xd3, 0x6a, 0x6d,
0xa5, 0xab, 0xb5, 0xda, 0x3d, 0x4d, 0x79, 0xd3, 0xe8, 0xf6, 0xc4, 0x24, 0x92, 0xe0, 0x41, 0xa3,
0x55, 0x6d, 0x9f, 0x77, 0x9a, 0x4a, 0x4f, 0xd1, 0x3c, 0x32, 0x55, 0x21, 0xab, 0xc8, 0xbd, 0x46,
0xbb, 0x25, 0xa6, 0xa4, 0xbf, 0x4d, 0x42, 0x31, 0x2c, 0xd1, 0xe2, 0x4a, 0xc2, 0x06, 0x4f, 0xec,
0x81, 0xdc, 0x9d, 0x43, 0x93, 0x26, 0xfe, 0x74, 0x9b, 0x51, 0x96, 0x07, 0x49, 0xe9, 0xb8, 0x41,
0xd2, 0x07, 0x90, 0x5b, 0x0c, 0x90, 0x58, 0xaa, 0x60, 0xde, 0x42, 0x90, 0xa7, 0xb0, 0xe9, 0xb8,
0x24, 0xe5, 0x6d, 0xd1, 0x03, 0xbb, 0xbf, 0xc2, 0x94, 0x5d, 0x42, 0xa3, 0x32, 0xd2, 0xa8, 0xcf,
0x64, 0xa2, 0x3e, 0x83, 0x9e, 0x40, 0xd6, 0x9a, 0xbb, 0xec, 0x4e, 0x9a, 0x5d, 0x35, 0x6c, 0xf2,
0x49, 0x88, 0x80, 0x13, 0xdd, 0xc5, 0x8e, 0xab, 0xb9, 0xd7, 0x34, 0x67, 0x08, 0x6a, 0x96, 0x01,
0x7a, 0xd7, 0xd2, 0x2f, 0x40, 0x08, 0x06, 0x26, 0x7a, 0x0e, 0x82, 0x97, 0x3f, 0xfa, 0xc6, 0xd0,
0xab, 0x04, 0xa5, 0x68, 0xac, 0x55, 0x8c, 0xa1, 0x9a, 0x9f, 0xfa, 0xbf, 0x9d, 0x20, 0x9f, 0xee,
0x5c, 0x79, 0xf7, 0xd9, 0x25, 0x3e, 0xd9, 0xb9, 0xf2, 0xf9, 0x64, 0xe7, 0xca, 0x91, 0x2e, 0x00,
0x16, 0x28, 0xf4, 0xf1, 0x2d, 0x83, 0x24, 0x36, 0x46, 0x7a, 0x04, 0xc2, 0xdc, 0x34, 0x5c, 0x47,
0x1b, 0x19, 0x93, 0x09, 0x9f, 0xdd, 0x14, 0xd4, 0x3c, 0x85, 0x9d, 0x51, 0x50, 0x60, 0xd9, 0x8a,
0x31, 0x24, 0xcb, 0xf6, 0x79, 0xe8, 0xc6, 0xce, 0x9d, 0xe8, 0xd4, 0xe9, 0x2e, 0xcb, 0xfe, 0x4d,
0x12, 0xf2, 0x81, 0xda, 0x43, 0x5c, 0x04, 0x9b, 0x43, 0x52, 0xdd, 0xfa, 0xfa, 0x44, 0x27, 0xbd,
0x3b, 0x73, 0xbc, 0x02, 0x83, 0x56, 0x18, 0x10, 0xd5, 0x40, 0xe0, 0x64, 0xcc, 0x19, 0x58, 0xf4,
0x3e, 0x8a, 0x2b, 0x67, 0x27, 0x21, 0x8f, 0xc8, 0x33, 0x36, 0xfa, 0x40, 0x36, 0xf3, 0xce, 0x54,
0x33, 0xcc, 0x21, 0xbe, 0xa6, 0x2e, 0xbb, 0xa9, 0x16, 0x3c, 0x68, 0x83, 0x00, 0x23, 0x5e, 0x9d,
0x8e, 0xde, 0x77, 0x7e, 0x01, 0x42, 0x70, 0x0b, 0xb4, 0x0b, 0x62, 0xfb, 0xa2, 0xd7, 0xb9, 0x20,
0xd1, 0x55, 0x55, 0x15, 0xb9, 0xa7, 0xd4, 0xc4, 0x0d, 0xf4, 0x08, 0x8e, 0x38, 0xb4, 0x76, 0xd1,
0x25, 0x61, 0xd9, 0x53, 0x5a, 0x35, 0xa5, 0xa6, 0xb5, 0xcf, 0xce, 0xaa, 0x75, 0xb9, 0x41, 0xc2,
0xf7, 0x08, 0x0e, 0x83, 0x24, 0x72, 0x8d, 0xe0, 0x7b, 0x6d, 0xed, 0x4c, 0x51, 0xba, 0x62, 0x92,
0x34, 0xc2, 0x1c, 0x7d, 0x76, 0xd1, 0x6c, 0xbe, 0xd5, 0xba, 0x1d, 0xa5, 0x45, 0x1a, 0xdb, 0x3f,
0x4d, 0x41, 0x9e, 0x19, 0x9e, 0x39, 0xdc, 0x2d, 0xb3, 0x91, 0x23, 0x00, 0x5a, 0x5f, 0x47, 0xc6,
0xb5, 0x7f, 0x24, 0x39, 0x02, 0x39, 0x23, 0x00, 0x52, 0x25, 0xf4, 0xa9, 0xcb, 0x67, 0xa2, 0xe4,
0x27, 0x7a, 0x08, 0xc2, 0xd4, 0x30, 0x35, 0xd2, 0xcf, 0x68, 0x04, 0x95, 0xa6, 0x28, 0x98, 0x1a,
0x26, 0xe9, 0x2a, 0xe4, 0x29, 0x1d, 0xf5, 0x04, 0x26, 0x76, 0x34, 0x32, 0x05, 0x15, 0x16, 0x83,
0x3a, 0x12, 0x30, 0x8c, 0xc0, 0x31, 0xc6, 0x34, 0xfc, 0x04, 0x35, 0x4b, 0x01, 0x5d, 0x63, 0x8c,
0x24, 0x28, 0x4c, 0xe7, 0x13, 0xd7, 0x20, 0x48, 0x2a, 0x32, 0xab, 0xd2, 0x79, 0x0a, 0xec, 0x1a,
0x63, 0x22, 0xf4, 0x21, 0x64, 0x69, 0x7f, 0x3a, 0x9b, 0xf7, 0x79, 0xc0, 0x65, 0xc8, 0x73, 0x67,
0xde, 0x47, 0x5f, 0x42, 0x8e, 0xa2, 0xf4, 0xe1, 0xd0, 0xe6, 0x95, 0x79, 0x71, 0xad, 0x21, 0xed,
0xab, 0x3c, 0x1c, 0xda, 0xd8, 0x71, 0x54, 0xba, 0x02, 0x79, 0x20, 0xe2, 0x50, 0x6d, 0x68, 0x27,
0x2d, 0x50, 0x0b, 0x64, 0x09, 0x80, 0x74, 0xcf, 0xe8, 0x5b, 0x38, 0x9a, 0xea, 0xd7, 0x7c, 0x84,
0x1d, 0x77, 0x1b, 0x29, 0x50, 0xfd, 0xef, 0x4d, 0xf5, 0x6b, 0x3a, 0xce, 0x3e, 0x0b, 0xdf, 0x4a,
0xbe, 0x4b, 0x67, 0x37, 0xc5, 0xad, 0xef, 0xd2, 0xd9, 0xbc, 0x28, 0x48, 0x7f, 0x97, 0x80, 0x9c,
0x1f, 0x13, 0xe8, 0xc4, 0x9f, 0x7f, 0xf2, 0xc0, 0xd9, 0x8d, 0x04, 0x0e, 0xab, 0xe4, 0x1e, 0x11,
0x3a, 0x85, 0xbd, 0x09, 0x26, 0xcd, 0xf2, 0x70, 0x6e, 0xd3, 0x5a, 0xa0, 0xf5, 0x27, 0xd6, 0xe0,
0xca, 0xe1, 0x87, 0x56, 0xa2, 0xc8, 0x1a, 0xc7, 0x55, 0x28, 0x0a, 0x1d, 0x40, 0xc6, 0xbb, 0xcc,
0xb0, 0x81, 0xb5, 0xf7, 0x88, 0x7e, 0x04, 0x05, 0x72, 0x8c, 0xd4, 0x56, 0xae, 0x81, 0x6d, 0x9a,
0x59, 0x8b, 0x81, 0x44, 0x47, 0x6c, 0xd5, 0x33, 0xb0, 0xad, 0xe6, 0xa7, 0x86, 0xe9, 0x3d, 0x7c,
0x97, 0xce, 0xa6, 0xc4, 0xb4, 0xf4, 0x87, 0xbe, 0x22, 0x24, 0xa9, 0xfc, 0xca, 0x14, 0x49, 0xdf,
0x49, 0x91, 0xcd, 0x90, 0x22, 0xd2, 0x09, 0xe4, 0x03, 0x73, 0xde, 0xa8, 0xf3, 0x25, 0xa2, 0xce,
0x27, 0xfd, 0x65, 0x02, 0x84, 0xe0, 0xd4, 0xfa, 0x56, 0x0e, 0x24, 0x43, 0x7e, 0xa4, 0x1b, 0x13,
0x2d, 0x30, 0xa6, 0x2b, 0x9e, 0x3e, 0x8c, 0x1d, 0x81, 0x9f, 0x9c, 0xe9, 0xc6, 0xc4, 0x1b, 0xfe,
0x8c, 0xfc, 0xdf, 0x64, 0x0f, 0xba, 0x84, 0xe3, 0x92, 0xbb, 0x38, 0x0d, 0xa7, 0x1c, 0x23, 0xe8,
0x52, 0x88, 0x74, 0x04, 0xb0, 0x60, 0x45, 0xdb, 0x90, 0x6f, 0xb4, 0x5e, 0xc9, 0xcd, 0x46, 0x4d,
0x93, 0xcf, 0x7b, 0xe2, 0x86, 0xf4, 0x73, 0x2f, 0xa6, 0x1b, 0xe6, 0x6c, 0x1e, 0x2e, 0x50, 0x89,
0xdb, 0x0b, 0xd4, 0x11, 0x00, 0x09, 0xa6, 0xd0, 0x5b, 0x90, 0x9c, 0x63, 0x8c, 0xd9, 0x1b, 0x10,
0xe9, 0x05, 0x08, 0xfc, 0x9c, 0xe6, 0x2e, 0x59, 0x7d, 0x65, 0x91, 0x0f, 0x2d, 0xc0, 0x9f, 0xa4,
0xbf, 0x4f, 0x42, 0x99, 0xb1, 0x9f, 0x5b, 0x43, 0x63, 0x74, 0x13, 0x79, 0x7b, 0x73, 0x4b, 0xfa,
0x79, 0x06, 0x60, 0xe2, 0xf7, 0x9a, 0x41, 0xd4, 0xf2, 0x8a, 0x5a, 0xd4, 0x7d, 0xa8, 0xce, 0x6a,
0xce, 0xc4, 0xef, 0xe9, 0x2f, 0x52, 0x0b, 0xf3, 0x84, 0xc9, 0xa2, 0xe2, 0x7a, 0xcd, 0xcb, 0x5e,
0xd4, 0xe9, 0x28, 0x56, 0x25, 0xcb, 0xb3, 0x9f, 0x0e, 0x7a, 0xcd, 0x36, 0x9b, 0xe9, 0xb6, 0x3e,
0x75, 0xf8, 0xe5, 0xeb, 0xeb, 0x08, 0x5b, 0x9c, 0x12, 0x27, 0x2d, 0xfc, 0x9e, 0x43, 0x3a, 0x84,
0x17, 0xbb, 0xd8, 0x76, 0xa8, 0x40, 0xf4, 0xd1, 0x29, 0xd7, 0x60, 0x37, 0x8e, 0xe4, 0x97, 0xbb,
0x2e, 0x49, 0xdf, 0xc2, 0x07, 0xb1, 0x32, 0xf0, 0x77, 0x31, 0x1f, 0x42, 0x3e, 0x30, 0xd1, 0xf2,
0xfc, 0x74, 0x31, 0xa6, 0x92, 0xbe, 0x81, 0x7b, 0x81, 0x78, 0x63, 0x05, 0x8e, 0x9f, 0xc2, 0xad,
0x51, 0x61, 0x7b, 0x6f, 0x60, 0x82, 0xbc, 0x7c, 0xe3, 0x4f, 0xbd, 0x3b, 0x16, 0x9b, 0x32, 0x96,
0xc2, 0x8d, 0x4e, 0xe8, 0x6a, 0xf5, 0x19, 0xec, 0xb0, 0x12, 0x3f, 0x37, 0x47, 0xf3, 0x49, 0xa8,
0xce, 0x8b, 0x14, 0x71, 0xb1, 0x80, 0x4b, 0x45, 0x10, 0x7a, 0xd8, 0x9e, 0x3a, 0x5c, 0x48, 0xe9,
0x1f, 0x37, 0xa1, 0xc0, 0x01, 0x7c, 0xe7, 0x63, 0xd8, 0x21, 0xc9, 0x37, 0xee, 0x9d, 0xe7, 0xf6,
0x54, 0xbf, 0x96, 0x83, 0xaf, 0xe8, 0x7e, 0x03, 0x0e, 0x09, 0x2d, 0x53, 0x33, 0x36, 0x45, 0xd2,
0x86, 0x78, 0x7f, 0xaa, 0x5f, 0x53, 0xb9, 0x23, 0x09, 0x66, 0xa9, 0xa9, 0x4d, 0xdd, 0xbd, 0xa9,
0x7d, 0x0d, 0xdb, 0xe1, 0x84, 0xe6, 0x4d, 0xd8, 0x8f, 0x7d, 0xee, 0x90, 0x5e, 0x27, 0xcd, 0x60,
0x86, 0x0b, 0x74, 0xf7, 0xc5, 0x50, 0xea, 0x73, 0xd0, 0x33, 0xd8, 0x37, 0xf1, 0xb5, 0xcb, 0xab,
0xcf, 0xc0, 0x32, 0x47, 0x9a, 0x4b, 0x7a, 0x71, 0x97, 0x27, 0xc1, 0x12, 0xc1, 0xd2, 0xb2, 0x53,
0xb5, 0xcc, 0x51, 0x8f, 0xa2, 0xd0, 0x6f, 0xc1, 0x83, 0x00, 0xd3, 0xea, 0x06, 0xfa, 0xc0, 0x67,
0x8e, 0xd4, 0x2c, 0xf4, 0x13, 0x28, 0x07, 0xb7, 0x9d, 0x60, 0xdd, 0xd6, 0x5c, 0x63, 0x8a, 0x1d,
0x57, 0x9f, 0xce, 0x78, 0x57, 0x7d, 0x6f, 0xb1, 0x35, 0xc1, 0xf7, 0x3c, 0x34, 0x1a, 0xc1, 0x7e,
0x34, 0xbb, 0xcf, 0x07, 0xb4, 0x4f, 0xce, 0x52, 0x9b, 0x3c, 0xbd, 0x8b, 0x4d, 0x2a, 0x8c, 0x85,
0x75, 0xca, 0xbb, 0x93, 0x18, 0x54, 0x59, 0x86, 0x52, 0x8c, 0x19, 0x63, 0xda, 0xda, 0xd0, 0x18,
0x35, 0x1b, 0xec, 0x8c, 0x31, 0x1c, 0xae, 0xdc, 0x35, 0x66, 0xa1, 0xd3, 0xe0, 0x42, 0xc1, 0x5e,
0x23, 0xcc, 0xcf, 0x03, 0x62, 0xd1, 0x25, 0x57, 0x60, 0x57, 0xc5, 0x13, 0xfc, 0x4e, 0x37, 0x99,
0xc1, 0xbc, 0xa0, 0x2c, 0x42, 0xd2, 0xef, 0x77, 0x93, 0xc6, 0x10, 0x95, 0xe9, 0xeb, 0x52, 0x36,
0x90, 0x21, 0x99, 0x50, 0x50, 0xfd, 0x67, 0xe9, 0x1f, 0x36, 0xa1, 0x10, 0x5a, 0x24, 0x58, 0x11,
0x13, 0xe1, 0xd2, 0xce, 0xd6, 0x4d, 0xfa, 0xeb, 0xfe, 0xe0, 0x81, 0x4f, 0x6f, 0x69, 0x7e, 0x95,
0x8e, 0x0c, 0xec, 0x42, 0xa2, 0xfd, 0xb0, 0xd9, 0xd5, 0xe6, 0xba, 0xd9, 0xd5, 0x52, 0x94, 0x6e,
0xdd, 0x3d, 0x4a, 0x1f, 0x42, 0x3e, 0x38, 0x74, 0x62, 0xf7, 0xce, 0x20, 0x68, 0xd5, 0xbc, 0x29,
0x1b, 0x3f, 0x6f, 0x3a, 0x85, 0xbd, 0x81, 0x8d, 0x99, 0x8b, 0xfb, 0xd1, 0xa1, 0x99, 0x0e, 0xbd,
0x91, 0xa6, 0xd5, 0x92, 0x87, 0xf4, 0x43, 0xa3, 0xe5, 0xa0, 0xee, 0xaa, 0xe9, 0xd1, 0xf1, 0x7a,
0x53, 0xfe, 0xbf, 0x9b, 0x1c, 0xd5, 0x40, 0x08, 0x1e, 0x15, 0x9b, 0x00, 0x39, 0x98, 0x9e, 0x29,
0x4b, 0xf0, 0x19, 0xf2, 0xcc, 0x51, 0xde, 0xa9, 0xd0, 0xf5, 0xd3, 0x6a, 0x86, 0x1f, 0x85, 0xf4,
0x13, 0xc8, 0x07, 0xae, 0xf4, 0x24, 0x24, 0x4c, 0xec, 0xbe, 0xb7, 0xec, 0x2b, 0xae, 0xb6, 0xf7,
0x88, 0x10, 0xa4, 0x69, 0x43, 0xc0, 0x5e, 0xb1, 0xd2, 0xdf, 0x92, 0x0c, 0x59, 0xef, 0xae, 0x44,
0xf0, 0x74, 0xbe, 0xc4, 0x82, 0x91, 0xfe, 0x26, 0xed, 0x2a, 0xbb, 0x61, 0xf0, 0x66, 0x90, 0xb7,
0xab, 0x0c, 0x46, 0x5b, 0x41, 0xe9, 0x4f, 0x12, 0x90, 0x97, 0x9d, 0xab, 0xae, 0xa9, 0xcf, 0x9c,
0x4b, 0xcb, 0x5d, 0x13, 0x93, 0xff, 0x93, 0xcb, 0x7b, 0xb8, 0x35, 0x4b, 0x45, 0x5b, 0xb3, 0x50,
0xdb, 0x92, 0x0e, 0xb7, 0x2d, 0x54, 0xb2, 0x8a, 0x31, 0xfc, 0x3f, 0x28, 0xd9, 0x3f, 0x27, 0x60,
0x37, 0xe8, 0x70, 0xbe, 0x88, 0xa1, 0x8f, 0x5c, 0x02, 0x99, 0x69, 0x61, 0xdf, 0x98, 0x8f, 0x5c,
0x16, 0x74, 0x01, 0x6d, 0xd9, 0xb8, 0xe1, 0x23, 0x60, 0x09, 0x87, 0xe4, 0x17, 0xea, 0x3c, 0x4c,
0x4e, 0xc1, 0x03, 0xd2, 0x84, 0xf2, 0x39, 0x20, 0xd7, 0x72, 0xf5, 0x09, 0x89, 0x77, 0x87, 0x95,
0x3a, 0x3c, 0xe4, 0x3d, 0xad, 0x48, 0x31, 0x5d, 0xdd, 0x75, 0xaa, 0x0c, 0x4e, 0x96, 0x64, 0xd7,
0x1b, 0x1e, 0x81, 0xbc, 0x0c, 0xb3, 0xb1, 0x06, 0x57, 0x4a, 0xfa, 0x12, 0x76, 0x69, 0xec, 0xfa,
0xd2, 0xf0, 0x74, 0xbf, 0x66, 0x2a, 0xfa, 0x47, 0x09, 0xd8, 0x0b, 0x85, 0x8a, 0x6f, 0x94, 0xda,
0x8a, 0x57, 0x07, 0x47, 0xb1, 0xc1, 0xeb, 0x6f, 0xf9, 0xc3, 0xde, 0x8f, 0x48, 0xff, 0x94, 0x86,
0xbd, 0x88, 0x0e, 0xfc, 0x46, 0xb6, 0xda, 0x8f, 0x82, 0xea, 0x25, 0xc3, 0x33, 0x5c, 0x09, 0x0a,
0x33, 0x1b, 0xbf, 0xd3, 0x7c, 0x3c, 0x1b, 0x05, 0xe6, 0x09, 0xb0, 0xc2, 0x69, 0x56, 0x54, 0x83,
0xf4, 0xba, 0x6a, 0x50, 0x5f, 0x32, 0xce, 0xe6, 0x1d, 0x8c, 0x13, 0x57, 0x8b, 0x1e, 0x40, 0xde,
0x9b, 0x32, 0x13, 0xf9, 0x32, 0x34, 0x4d, 0x78, 0x63, 0xe6, 0xc6, 0x70, 0xa1, 0x9c, 0x7b, 0xcd,
0xe7, 0x19, 0x19, 0x8e, 0x44, 0x2f, 0xe0, 0xbe, 0xcf, 0xba, 0xba, 0x7a, 0xec, 0x73, 0xf2, 0xb3,
0x5f, 0x41, 0x11, 0xf9, 0xf9, 0xaa, 0x22, 0x72, 0xba, 0x08, 0x86, 0xb8, 0xc3, 0xbb, 0x53, 0x31,
0xd1, 0xef, 0x9a, 0xf3, 0xbf, 0x0a, 0xe7, 0xfc, 0x07, 0xf1, 0x39, 0xdf, 0x97, 0x21, 0x90, 0xfb,
0x5f, 0x78, 0x7d, 0x0a, 0xc9, 0xdd, 0xaa, 0xee, 0x92, 0x58, 0xe4, 0x31, 0xf2, 0x08, 0x04, 0x6f,
0xb0, 0x73, 0x85, 0x6f, 0x98, 0xb3, 0x0b, 0x6a, 0x9e, 0x0f, 0x77, 0x08, 0x48, 0xfa, 0x6d, 0x80,
0x05, 0x1f, 0x69, 0x6c, 0x02, 0x0c, 0x5e, 0x63, 0xb3, 0xa0, 0x47, 0x27, 0x7c, 0x1e, 0x44, 0x67,
0x1c, 0xc9, 0x55, 0x33, 0x0e, 0x3a, 0x0c, 0x22, 0xbf, 0x24, 0xd5, 0x6b, 0x84, 0x82, 0xc2, 0x71,
0xe7, 0x7f, 0xce, 0xa5, 0xb3, 0x29, 0x78, 0x79, 0x76, 0x1b, 0x60, 0xa1, 0x52, 0xb1, 0xdf, 0x8e,
0x34, 0x8e, 0x44, 0x93, 0xd7, 0xf1, 0xa0, 0x8f, 0xa1, 0xe8, 0xb8, 0xba, 0xed, 0x6a, 0x91, 0xc4,
0x20, 0x50, 0xa8, 0x17, 0x1a, 0x8f, 0x41, 0x34, 0xe7, 0x53, 0x46, 0x83, 0x1d, 0xad, 0xaf, 0x0f,
0xae, 0x78, 0xe8, 0x16, 0xcd, 0xf9, 0xb4, 0xc2, 0xc0, 0x15, 0x7d, 0x70, 0x25, 0xa9, 0xb0, 0x1f,
0xdd, 0x88, 0x8b, 0xfe, 0x35, 0x64, 0x38, 0x3f, 0x97, 0xfa, 0xc1, 0x7a, 0x5f, 0x51, 0x3d, 0xf2,
0xe3, 0x4f, 0xfd, 0x2f, 0x4e, 0xe8, 0x3c, 0xac, 0x00, 0xb9, 0xde, 0x6b, 0x45, 0x7e, 0xd9, 0x54,
0xba, 0x5d, 0x71, 0x03, 0xe5, 0x21, 0x23, 0xb7, 0xaa, 0xf5, 0xb6, 0xda, 0x15, 0x13, 0xc7, 0x7f,
0x9c, 0x80, 0x52, 0xcc, 0xdc, 0x9d, 0x7e, 0xb3, 0xd3, 0x63, 0x5f, 0xb8, 0xb0, 0xef, 0x59, 0xda,
0x1d, 0xa5, 0x25, 0x6e, 0xa0, 0x22, 0x00, 0x83, 0xd3, 0xe7, 0x04, 0xda, 0x81, 0x02, 0x7b, 0x56,
0xde, 0x74, 0x1a, 0xaa, 0x52, 0x13, 0x93, 0xe8, 0x00, 0x76, 0xc3, 0xac, 0x17, 0x9d, 0x9a, 0xdc,
0x53, 0xc4, 0x14, 0x12, 0x41, 0x60, 0x98, 0x6a, 0xb3, 0xdd, 0x55, 0x6a, 0x62, 0x1a, 0xdd, 0x83,
0x52, 0x98, 0x96, 0x7e, 0x10, 0x24, 0x6e, 0x1e, 0x7f, 0x05, 0x59, 0xef, 0xa4, 0x09, 0x5b, 0xaf,
0xa1, 0xa8, 0x5a, 0x4d, 0x39, 0x93, 0x2f, 0x9a, 0x3d, 0x71, 0x03, 0x01, 0x6c, 0x51, 0xc8, 0x53,
0x31, 0xe1, 0xff, 0xfe, 0x52, 0x4c, 0x1e, 0xff, 0x79, 0x02, 0x60, 0xd1, 0xe1, 0xa2, 0x12, 0x6c,
0xb7, 0xd5, 0x9a, 0xa2, 0x6a, 0xdd, 0x8b, 0xca, 0x79, 0xa3, 0xc7, 0xc6, 0xb8, 0x3b, 0x50, 0x60,
0xc0, 0x6a, 0x53, 0x91, 0x89, 0xc4, 0xf4, 0xad, 0x0b, 0x03, 0xf1, 0x4f, 0x8e, 0x9a, 0x6f, 0xb5,
0xb3, 0x46, 0xb3, 0x49, 0xb5, 0x41, 0x50, 0x64, 0x38, 0xe5, 0x8d, 0x52, 0xbd, 0x20, 0x4b, 0xa4,
0x16, 0xb0, 0xaa, 0xdc, 0xaa, 0x2a, 0x4d, 0xaa, 0x89, 0xbf, 0xac, 0x67, 0x88, 0x4d, 0x22, 0x37,
0x03, 0xf1, 0x6f, 0x81, 0xb6, 0x8e, 0x7f, 0x07, 0x4a, 0x31, 0x8d, 0x07, 0x39, 0xa0, 0x56, 0x5b,
0x3b, 0x97, 0xd5, 0x97, 0x4a, 0x8f, 0x49, 0xc8, 0x7e, 0x7b, 0x76, 0x4a, 0xa0, 0x5d, 0x10, 0xe5,
0x6a, 0x55, 0xe9, 0xf4, 0xe8, 0x51, 0x90, 0x45, 0xbb, 0x62, 0x12, 0x6d, 0x43, 0x9e, 0x13, 0xd2,
0xd3, 0x48, 0x9d, 0xfe, 0x67, 0xc6, 0xff, 0xca, 0x44, 0xf6, 0x5f, 0xc8, 0xa0, 0xef, 0xa1, 0x18,
0xfe, 0x2e, 0x18, 0x3d, 0x08, 0x5c, 0x5d, 0x63, 0x3e, 0x5a, 0x2e, 0x7f, 0xb8, 0x12, 0xcf, 0x7d,
0xb3, 0x07, 0xf9, 0xc0, 0x07, 0xb1, 0xe8, 0xd1, 0xd2, 0xf8, 0x27, 0xfa, 0x49, 0x70, 0x59, 0x5a,
0x47, 0xc2, 0x57, 0xfd, 0x19, 0x14, 0x42, 0x73, 0x14, 0xf4, 0xd1, 0x1d, 0x26, 0x3d, 0xe5, 0x8f,
0xd7, 0x13, 0x2d, 0x24, 0x0e, 0x7c, 0x2d, 0xbb, 0x24, 0xf1, 0xf2, 0x17, 0xbc, 0x4b, 0x12, 0xc7,
0x7d, 0x6c, 0xdb, 0x0b, 0x4f, 0x32, 0xa3, 0xab, 0x2e, 0x7f, 0x1b, 0xbb, 0xb4, 0x6a, 0xcc, 0x07,
0xaf, 0xe8, 0xfb, 0x90, 0x17, 0x3f, 0x8c, 0x1b, 0xcd, 0x06, 0x47, 0x45, 0xe5, 0x47, 0x6b, 0x28,
0xf8, 0x92, 0x6f, 0x61, 0xcf, 0x7f, 0x1f, 0x4a, 0xb3, 0x07, 0xf7, 0x0f, 0xb4, 0x28, 0xbc, 0x71,
0x9f, 0xd8, 0x96, 0x8f, 0xa2, 0x2f, 0x9c, 0x42, 0xe8, 0xc7, 0x89, 0xa7, 0x09, 0xf4, 0x1c, 0x36,
0xe9, 0x58, 0x00, 0xed, 0x45, 0xc7, 0x04, 0x4c, 0xba, 0xfd, 0xf8, 0xe9, 0x01, 0x6a, 0xc1, 0x5e,
0xa8, 0x71, 0xf2, 0x2f, 0x50, 0x47, 0xf1, 0x8d, 0xd5, 0xf2, 0x7a, 0xe1, 0xee, 0xba, 0x05, 0x85,
0x55, 0xeb, 0xc4, 0x5d, 0xee, 0xca, 0xb7, 0xa4, 0x53, 0x72, 0x0a, 0x81, 0xaa, 0x15, 0x3d, 0x85,
0xa5, 0x42, 0xb8, 0x74, 0x0a, 0x31, 0xd5, 0xe8, 0x7b, 0x28, 0x86, 0x93, 0x3d, 0x5a, 0x21, 0x84,
0xb3, 0x1c, 0x89, 0xf1, 0x55, 0xa2, 0xf2, 0xe4, 0x67, 0x9f, 0x8d, 0x0d, 0xf7, 0x72, 0xde, 0x3f,
0x19, 0x58, 0xd3, 0x2f, 0x26, 0xc6, 0xf8, 0xd2, 0x35, 0x0d, 0x73, 0x3c, 0xd1, 0xfb, 0xce, 0x17,
0x84, 0xf5, 0x8b, 0xc5, 0x9b, 0x59, 0x7b, 0x36, 0xe8, 0x6f, 0xd1, 0x3f, 0x5c, 0x78, 0xf6, 0xdf,
0x01, 0x00, 0x00, 0xff, 0xff, 0xa2, 0x17, 0xee, 0x85, 0xcc, 0x30, 0x00, 0x00,
}
// Reference imports to suppress errors if they are not otherwise used.

View file

@ -1,8 +1,12 @@
syntax = "proto3";
// We can't rename this to auctioneerrpc, otherwise it would be a breaking
// change since the package name is also contained in the HTTP URIs and old
// clients would call the wrong endpoints. Luckily with the go_package option we
// can have different golang and RPC package names.
package poolrpc;
option go_package = "github.com/lightninglabs/pool/poolrpc";
option go_package = "github.com/lightninglabs/pool/auctioneerrpc";
service ChannelAuctioneer {
rpc ReserveAccount (ReserveAccountRequest) returns (ReserveAccountResponse);

11
auctioneerrpc/gen_protos.sh Executable file
View file

@ -0,0 +1,11 @@
#!/bin/sh
set -e
# Generate the gRPC bindings for all proto files.
for file in ./*.proto; do
protoc -I/usr/local/include -I. \
--go_out=plugins=grpc,paths=source_relative:. \
"${file}"
done

View file

@ -5,6 +5,7 @@ import (
"io"
"time"
"github.com/lightninglabs/pool/auctioneerrpc"
"github.com/lightninglabs/pool/event"
"github.com/lightninglabs/pool/order"
"github.com/lightninglabs/pool/poolrpc"
@ -440,7 +441,7 @@ func (db *DB) StoreBatchEvents(batch *order.Batch, state order.MatchState,
// orders involved in a batch and stores it to the main event store, including
// the reason for the reject.
func (db *DB) StoreBatchPartialRejectEvents(batch *order.Batch,
partialRejects map[order.Nonce]*poolrpc.OrderReject) error {
partialRejects map[order.Nonce]*auctioneerrpc.OrderReject) error {
// In case an order itself wasn't rejected but was just in the same
// batch as a reject, we mark it in the event as such. If it was, this
@ -472,10 +473,10 @@ func (db *DB) StoreBatchPartialRejectEvents(batch *order.Batch,
reject, ok := partialRejects[otherNonce]
if ok {
switch reject.ReasonCode {
case poolrpc.OrderReject_CHANNEL_FUNDING_FAILED:
case auctioneerrpc.OrderReject_CHANNEL_FUNDING_FAILED:
evt.RejectReason = reasonFundingFailed
case poolrpc.OrderReject_DUPLICATE_PEER:
case auctioneerrpc.OrderReject_DUPLICATE_PEER:
evt.RejectReason = reasonDuplicatePeer
}
}

View file

@ -6,6 +6,7 @@ import (
"fmt"
"github.com/btcsuite/btcd/chaincfg/chainhash"
"github.com/lightninglabs/pool/auctioneerrpc"
"github.com/lightninglabs/pool/poolrpc"
"github.com/urfave/cli"
)
@ -51,7 +52,7 @@ func NewLeaseFromProto(a *poolrpc.Lease) *Lease {
// Markets is a simple type alias to make the following Snapshot struct more
// compact.
type Markets = map[uint32]*poolrpc.MatchedMarketSnapshot
type Markets = map[uint32]*auctioneerrpc.MatchedMarketSnapshot
// Snapshot is a copy of poolrpc.BatchSnapshotResponse that does not include the
// deprecated fields.
@ -67,7 +68,7 @@ type Snapshot struct {
}
// NewSnapshotsFromProtos creates a display Snapshot from its proto.
func NewSnapshotsFromProto(s []*poolrpc.BatchSnapshotResponse) []*Snapshot {
func NewSnapshotsFromProto(s []*auctioneerrpc.BatchSnapshotResponse) []*Snapshot {
result := make([]*Snapshot, len(s))
for idx, snapshot := range s {
result[idx] = &Snapshot{
@ -192,7 +193,7 @@ func batchSnapshot(ctx *cli.Context) error {
}
resp, err := client.BatchSnapshots(
ctxb, &poolrpc.BatchSnapshotsRequest{
ctxb, &auctioneerrpc.BatchSnapshotsRequest{
StartBatchId: batchID,
NumBatchesBack: uint32(ctx.Uint64("num_batches")),
},

View file

@ -12,10 +12,10 @@ import (
"github.com/btcsuite/btcd/chaincfg/chainhash"
"github.com/btcsuite/btcd/wire"
"github.com/lightninglabs/lndclient"
"github.com/lightninglabs/pool/auctioneerrpc"
"github.com/lightninglabs/pool/chaninfo"
"github.com/lightninglabs/pool/clientdb"
"github.com/lightninglabs/pool/order"
"github.com/lightninglabs/pool/poolrpc"
"github.com/lightningnetwork/lnd/input"
"github.com/lightningnetwork/lnd/lnrpc"
"github.com/lightningnetwork/lnd/routing/route"
@ -41,7 +41,7 @@ var (
type MatchRejectErr struct {
// RejectedOrders is the map of matches we reject, keyed with our order
// nonce.
RejectedOrders map[order.Nonce]*poolrpc.OrderReject
RejectedOrders map[order.Nonce]*auctioneerrpc.OrderReject
}
// Error returns the underlying error string.
@ -368,7 +368,7 @@ func (m *Manager) BatchChannelSetup(batch *order.Batch,
var (
eg errgroup.Group
chanPoints = make(map[wire.OutPoint]order.Nonce)
fundingRejects = make(map[order.Nonce]*poolrpc.OrderReject)
fundingRejects = make(map[order.Nonce]*auctioneerrpc.OrderReject)
fundingRejectsMtx sync.Mutex
)
partialReject := func(nonce order.Nonce, reason string,
@ -377,8 +377,8 @@ func (m *Manager) BatchChannelSetup(batch *order.Batch,
fundingRejectsMtx.Lock()
defer fundingRejectsMtx.Unlock()
fundingRejects[nonce] = &poolrpc.OrderReject{
ReasonCode: poolrpc.OrderReject_CHANNEL_FUNDING_FAILED,
fundingRejects[nonce] = &auctioneerrpc.OrderReject{
ReasonCode: auctioneerrpc.OrderReject_CHANNEL_FUNDING_FAILED,
Reason: reason,
}
@ -797,7 +797,7 @@ func (m *Manager) waitForPeerConnections(ctx context.Context,
// rejected because they would create channels to peers that the trader already
// has channels with.
func (m *Manager) rejectDuplicateChannels(
batch *order.Batch) (map[order.Nonce]*poolrpc.OrderReject, error) {
batch *order.Batch) (map[order.Nonce]*auctioneerrpc.OrderReject, error) {
// We gather all peers from the open and pending channels.
ctxb := context.Background()
@ -822,8 +822,8 @@ func (m *Manager) rejectDuplicateChannels(
// Gather the list of matches we reject because they are to peers we
// already have channels with.
const haveChannel = "already have open/pending channel with peer"
const rejectCode = poolrpc.OrderReject_DUPLICATE_PEER
fundingRejects := make(map[order.Nonce]*poolrpc.OrderReject)
const rejectCode = auctioneerrpc.OrderReject_DUPLICATE_PEER
fundingRejects := make(map[order.Nonce]*auctioneerrpc.OrderReject)
for _, matchedOrders := range batch.MatchedOrders {
for _, matchedOrder := range matchedOrders {
_, ok := peers[matchedOrder.NodeKey]
@ -834,7 +834,7 @@ func (m *Manager) rejectDuplicateChannels(
log.Debugf("Rejecting channel to node %x: %v",
matchedOrder.NodeKey[:], haveChannel)
otherNonce := matchedOrder.Order.Nonce()
fundingRejects[otherNonce] = &poolrpc.OrderReject{
fundingRejects[otherNonce] = &auctioneerrpc.OrderReject{
ReasonCode: rejectCode,
Reason: haveChannel,
}
@ -847,13 +847,13 @@ func (m *Manager) rejectDuplicateChannels(
// rejectFailedConnections gathers a list of all matched orders that are to
// peers to which we couldn't connect and want to reject because of that.
func (m *Manager) rejectFailedConnections(peers map[route.Vertex]struct{},
batch *order.Batch) map[order.Nonce]*poolrpc.OrderReject {
batch *order.Batch) map[order.Nonce]*auctioneerrpc.OrderReject {
// Gather the list of matches we reject because the connection to them
// failed.
const connFailed = "connection not established before timeout"
const rejectCode = poolrpc.OrderReject_CHANNEL_FUNDING_FAILED
fundingRejects := make(map[order.Nonce]*poolrpc.OrderReject)
const rejectCode = auctioneerrpc.OrderReject_CHANNEL_FUNDING_FAILED
fundingRejects := make(map[order.Nonce]*auctioneerrpc.OrderReject)
for _, matchedOrders := range batch.MatchedOrders {
for _, matchedOrder := range matchedOrders {
_, ok := peers[matchedOrder.NodeKey]
@ -864,7 +864,7 @@ func (m *Manager) rejectFailedConnections(peers map[route.Vertex]struct{},
log.Debugf("Rejecting channel to node %x: %v",
matchedOrder.NodeKey[:], connFailed)
otherNonce := matchedOrder.Order.Nonce()
fundingRejects[otherNonce] = &poolrpc.OrderReject{
fundingRejects[otherNonce] = &auctioneerrpc.OrderReject{
ReasonCode: rejectCode,
Reason: connFailed,
}

View file

@ -13,10 +13,10 @@ import (
"github.com/btcsuite/btcd/wire"
"github.com/btcsuite/btcutil"
"github.com/lightninglabs/lndclient"
"github.com/lightninglabs/pool/auctioneerrpc"
"github.com/lightninglabs/pool/clientdb"
"github.com/lightninglabs/pool/internal/test"
"github.com/lightninglabs/pool/order"
"github.com/lightninglabs/pool/poolrpc"
"github.com/lightningnetwork/lnd/input"
"github.com/lightningnetwork/lnd/keychain"
"github.com/lightningnetwork/lnd/lnrpc"
@ -385,9 +385,9 @@ func TestFundingManager(t *testing.T) {
require.Error(t, err)
expectedErr := &MatchRejectErr{
RejectedOrders: map[order.Nonce]*poolrpc.OrderReject{
RejectedOrders: map[order.Nonce]*auctioneerrpc.OrderReject{
ask.Nonce(): {
ReasonCode: poolrpc.OrderReject_DUPLICATE_PEER,
ReasonCode: auctioneerrpc.OrderReject_DUPLICATE_PEER,
Reason: "already have open/pending channel " +
"with peer",
},
@ -403,9 +403,9 @@ func TestFundingManager(t *testing.T) {
require.Error(t, err)
expectedErr = &MatchRejectErr{
RejectedOrders: map[order.Nonce]*poolrpc.OrderReject{
RejectedOrders: map[order.Nonce]*auctioneerrpc.OrderReject{
ask.Nonce(): {
ReasonCode: poolrpc.OrderReject_CHANNEL_FUNDING_FAILED,
ReasonCode: auctioneerrpc.OrderReject_CHANNEL_FUNDING_FAILED,
Reason: "connection not established before " +
"timeout",
},
@ -461,13 +461,13 @@ func TestFundingManager(t *testing.T) {
_, err = h.mgr.BatchChannelSetup(batch, h.quit)
require.Error(t, err)
code := &poolrpc.OrderReject{
ReasonCode: poolrpc.OrderReject_CHANNEL_FUNDING_FAILED,
code := &auctioneerrpc.OrderReject{
ReasonCode: auctioneerrpc.OrderReject_CHANNEL_FUNDING_FAILED,
Reason: "timed out waiting for pending open " +
"channel notification",
}
expectedErr = &MatchRejectErr{
RejectedOrders: map[order.Nonce]*poolrpc.OrderReject{
RejectedOrders: map[order.Nonce]*auctioneerrpc.OrderReject{
ask.Nonce(): code,
bid.Nonce(): code,
},
@ -566,12 +566,12 @@ func TestWaitForPeerConnections(t *testing.T) {
)
require.Error(t, err)
code := &poolrpc.OrderReject{
ReasonCode: poolrpc.OrderReject_CHANNEL_FUNDING_FAILED,
code := &auctioneerrpc.OrderReject{
ReasonCode: auctioneerrpc.OrderReject_CHANNEL_FUNDING_FAILED,
Reason: "connection not established before timeout",
}
expectedErr := &MatchRejectErr{
RejectedOrders: map[order.Nonce]*poolrpc.OrderReject{
RejectedOrders: map[order.Nonce]*auctioneerrpc.OrderReject{
fakeNonce2: code,
},
}

View file

@ -11,7 +11,7 @@ import (
"github.com/btcsuite/btcutil"
"github.com/lightninglabs/lndclient"
"github.com/lightninglabs/pool/account"
"github.com/lightninglabs/pool/poolrpc"
"github.com/lightninglabs/pool/auctioneerrpc"
"github.com/lightninglabs/pool/poolscript"
"github.com/lightninglabs/pool/terms"
"github.com/lightningnetwork/lnd/input"
@ -72,7 +72,7 @@ type AccountDiff struct {
// EndingState is the ending on-chain state of the account after the
// executed batch as the auctioneer calculated it.
EndingState poolrpc.AccountDiff_AccountState
EndingState auctioneerrpc.AccountDiff_AccountState
// EndingBalance is the ending balance for a trader's account.
EndingBalance btcutil.Amount
@ -101,9 +101,9 @@ func (d *AccountDiff) validateEndingState(tx *wire.MsgTx,
// by a simple transaction and not create a dust output. We
// expect the server to set the state correctly and not re-
// create an account outpoint.
if state != poolrpc.AccountDiff_OUTPUT_DUST_EXTENDED_OFFCHAIN &&
state != poolrpc.AccountDiff_OUTPUT_DUST_ADDED_TO_FEES &&
state != poolrpc.AccountDiff_OUTPUT_FULLY_SPENT {
if state != auctioneerrpc.AccountDiff_OUTPUT_DUST_EXTENDED_OFFCHAIN &&
state != auctioneerrpc.AccountDiff_OUTPUT_DUST_ADDED_TO_FEES &&
state != auctioneerrpc.AccountDiff_OUTPUT_FULLY_SPENT {
return wrongStateErr
}
@ -114,7 +114,7 @@ func (d *AccountDiff) validateEndingState(tx *wire.MsgTx,
} else {
// There should be enough balance left to justify a new account
// output. We should get the outpoint from the server.
if state != poolrpc.AccountDiff_OUTPUT_RECREATED {
if state != auctioneerrpc.AccountDiff_OUTPUT_RECREATED {
return wrongStateErr
}
if d.OutpointIndex < 0 {

View file

@ -6,7 +6,7 @@ import (
"github.com/btcsuite/btcd/btcec"
"github.com/btcsuite/btcd/wire"
"github.com/lightninglabs/pool/account"
"github.com/lightninglabs/pool/poolrpc"
"github.com/lightninglabs/pool/auctioneerrpc"
)
const (
@ -102,7 +102,7 @@ func (s *batchStorer) StorePendingBatch(batch *Batch, bestHeight uint32) error {
switch diff.EndingState {
// The account output has been recreated and needs to wait to be
// confirmed again.
case poolrpc.AccountDiff_OUTPUT_RECREATED:
case auctioneerrpc.AccountDiff_OUTPUT_RECREATED:
modifiers = append(
modifiers,
account.StateModifier(account.StatePendingBatch),
@ -115,9 +115,9 @@ func (s *batchStorer) StorePendingBatch(batch *Batch, bestHeight uint32) error {
// The account was fully spent on-chain. We need to wait for the
// batch (spend) TX to be confirmed still.
case poolrpc.AccountDiff_OUTPUT_FULLY_SPENT,
poolrpc.AccountDiff_OUTPUT_DUST_ADDED_TO_FEES,
poolrpc.AccountDiff_OUTPUT_DUST_EXTENDED_OFFCHAIN:
case auctioneerrpc.AccountDiff_OUTPUT_FULLY_SPENT,
auctioneerrpc.AccountDiff_OUTPUT_DUST_ADDED_TO_FEES,
auctioneerrpc.AccountDiff_OUTPUT_DUST_EXTENDED_OFFCHAIN:
modifiers = append(
modifiers,

View file

@ -5,7 +5,7 @@ import (
"github.com/btcsuite/btcd/wire"
"github.com/lightninglabs/pool/account"
"github.com/lightninglabs/pool/poolrpc"
"github.com/lightninglabs/pool/auctioneerrpc"
"github.com/lightningnetwork/lnd/keychain"
"github.com/lightningnetwork/lnd/lnwallet/chainfee"
)
@ -67,14 +67,14 @@ func TestBatchStorer(t *testing.T) {
{
AccountKeyRaw: acctIDBig,
AccountKey: acctKeyBig,
EndingState: poolrpc.AccountDiff_OUTPUT_RECREATED,
EndingState: auctioneerrpc.AccountDiff_OUTPUT_RECREATED,
OutpointIndex: 0,
EndingBalance: 600_000,
},
{
AccountKeyRaw: acctIDSmall,
AccountKey: acctKeySmall,
EndingState: poolrpc.AccountDiff_OUTPUT_FULLY_SPENT,
EndingState: auctioneerrpc.AccountDiff_OUTPUT_FULLY_SPENT,
OutpointIndex: -1,
EndingBalance: 0,
},

View file

@ -9,8 +9,8 @@ import (
"github.com/btcsuite/btcd/wire"
"github.com/btcsuite/btcutil"
"github.com/lightninglabs/pool/account"
"github.com/lightninglabs/pool/auctioneerrpc"
"github.com/lightninglabs/pool/internal/test"
"github.com/lightninglabs/pool/poolrpc"
"github.com/lightninglabs/pool/terms"
"github.com/lightningnetwork/lnd/input"
"github.com/lightningnetwork/lnd/keychain"
@ -29,8 +29,8 @@ var (
execFeeRate = btcutil.Amount(50)
clearingPrice = FixedRatePremium(5000)
leaseDuration = uint32(1000)
stateRecreated = poolrpc.AccountDiff_OUTPUT_RECREATED
stateExtendedOffchain = poolrpc.AccountDiff_OUTPUT_DUST_EXTENDED_OFFCHAIN
stateRecreated = auctioneerrpc.AccountDiff_OUTPUT_RECREATED
stateExtendedOffchain = auctioneerrpc.AccountDiff_OUTPUT_DUST_EXTENDED_OFFCHAIN
)
func TestBatchVerifier(t *testing.T) {

View file

@ -10,7 +10,7 @@ import (
"github.com/btcsuite/btcutil"
"github.com/lightninglabs/pool/account"
"github.com/lightninglabs/pool/poolrpc"
"github.com/lightninglabs/pool/auctioneerrpc"
"github.com/lightninglabs/pool/terms"
"github.com/lightningnetwork/lnd/keychain"
"github.com/lightningnetwork/lnd/lntypes"
@ -633,7 +633,7 @@ type Store interface {
// an invalid action or information provided by the user.
type UserError struct {
FailMsg string
Details *poolrpc.InvalidOrder
Details *auctioneerrpc.InvalidOrder
}
// Error returns the string representation of the underlying failure message.

View file

@ -5,7 +5,7 @@ import (
"github.com/btcsuite/btcutil"
"github.com/lightninglabs/pool/account"
"github.com/lightninglabs/pool/poolrpc"
"github.com/lightninglabs/pool/auctioneerrpc"
"github.com/lightninglabs/pool/terms"
"github.com/lightningnetwork/lnd/keychain"
)
@ -55,8 +55,8 @@ func TestValidateOrderAccountIsolation(t *testing.T) {
testTerms := &terms.AuctioneerTerms{
OrderExecBaseFee: 1,
OrderExecFeeRate: 100,
LeaseDurationBuckets: map[uint32]poolrpc.DurationBucketState{
144: poolrpc.DurationBucketState_MARKET_OPEN,
LeaseDurationBuckets: map[uint32]auctioneerrpc.DurationBucketState{
144: auctioneerrpc.DurationBucketState_MARKET_OPEN,
},
}

View file

@ -11,6 +11,7 @@ import (
"github.com/btcsuite/btcd/btcec"
"github.com/btcsuite/btcd/wire"
"github.com/btcsuite/btcutil"
"github.com/lightninglabs/pool/auctioneerrpc"
"github.com/lightninglabs/pool/poolrpc"
"github.com/lightninglabs/pool/terms"
"github.com/lightningnetwork/lnd/lntypes"
@ -66,7 +67,8 @@ func ParseRPCOrder(version, leaseDuration uint32,
// parseNodeAddrs parses the set of address in strong format as returned over
// the RPC layer into a proper interface we can use.
func parseNodeAddrs(rpcAddrs []*poolrpc.NodeAddress, orderIsAsk bool) ([]net.Addr, error) {
func parseNodeAddrs(rpcAddrs []*auctioneerrpc.NodeAddress,
orderIsAsk bool) ([]net.Addr, error) {
if len(rpcAddrs) == 0 && orderIsAsk {
return nil, fmt.Errorf("ask order doesn't include any node " +
@ -109,7 +111,7 @@ func parseNodeAddrs(rpcAddrs []*poolrpc.NodeAddress, orderIsAsk bool) ([]net.Add
// ParseRPCServerOrder parses the incoming raw RPC server order into the go
// native data types used in the order struct.
func ParseRPCServerOrder(version uint32, details *poolrpc.ServerOrder,
func ParseRPCServerOrder(version uint32, details *auctioneerrpc.ServerOrder,
orderIsAsk bool, leaseDuration uint32) (*Kit, [33]byte, []net.Addr, [33]byte, error) {
var (
@ -171,7 +173,7 @@ func ParseRPCServerOrder(version uint32, details *poolrpc.ServerOrder,
// ParseRPCServerAsk parses the incoming raw RPC server ask into the go
// native data types used in the order struct.
func ParseRPCServerAsk(details *poolrpc.ServerAsk) (*MatchedOrder, error) {
func ParseRPCServerAsk(details *auctioneerrpc.ServerAsk) (*MatchedOrder, error) {
var (
o = &MatchedOrder{}
kit *Kit
@ -196,7 +198,7 @@ func ParseRPCServerAsk(details *poolrpc.ServerAsk) (*MatchedOrder, error) {
// ParseRPCServerBid parses the incoming raw RPC server bid into the go
// native data types used in the order struct.
func ParseRPCServerBid(details *poolrpc.ServerBid) (*MatchedOrder, error) {
func ParseRPCServerBid(details *auctioneerrpc.ServerBid) (*MatchedOrder, error) {
var (
o = &MatchedOrder{}
kit *Kit
@ -219,7 +221,7 @@ func ParseRPCServerBid(details *poolrpc.ServerBid) (*MatchedOrder, error) {
// ParseRPCBatch parses the incoming raw RPC batch into the go native data types
// used by the order manager.
func ParseRPCBatch(prepareMsg *poolrpc.OrderMatchPrepare) (*Batch,
func ParseRPCBatch(prepareMsg *auctioneerrpc.OrderMatchPrepare) (*Batch,
error) {
b := &Batch{
@ -325,7 +327,7 @@ func ParseRPCBatch(prepareMsg *poolrpc.OrderMatchPrepare) (*Batch,
// ParseRPCMatchedOrders parses the incoming raw RPC matched orders into the go
// native structs used by the order manager.
func ParseRPCMatchedOrders(orders *poolrpc.MatchedOrder) ([]*MatchedOrder,
func ParseRPCMatchedOrders(orders *auctioneerrpc.MatchedOrder) ([]*MatchedOrder,
error) {
var result []*MatchedOrder

View file

@ -3,19 +3,18 @@
set -e
# Generate the gRPC bindings for all proto files.
for file in ./*.proto
do
protoc -I/usr/local/include -I. \
--go_out=plugins=grpc,paths=source_relative:. \
"${file}"
for file in ./*.proto; do
protoc -I/usr/local/include -I. -I.. \
--go_out=plugins=grpc,paths=source_relative:. \
"${file}"
# Generate the REST reverse proxy.
protoc -I/usr/local/include -I. \
protoc -I/usr/local/include -I. -I.. \
--grpc-gateway_out=logtostderr=true,paths=source_relative,grpc_api_configuration=rest-annotations.yaml:. \
"${file}"
# Finally, generate the swagger file which describes the REST API in detail.
protoc -I/usr/local/include -I. \
protoc -I/usr/local/include -I. -I.. \
--swagger_out=logtostderr=true,grpc_api_configuration=rest-annotations.yaml:. \
"${file}"

View file

@ -7,6 +7,7 @@ import (
context "context"
fmt "fmt"
proto "github.com/golang/protobuf/proto"
auctioneerrpc "github.com/lightninglabs/pool/auctioneerrpc"
grpc "google.golang.org/grpc"
codes "google.golang.org/grpc/codes"
status "google.golang.org/grpc/status"
@ -1275,7 +1276,7 @@ type Account struct {
//
//The current outpoint associated with the account. This will change every
//time the account has been updated.
Outpoint *OutPoint `protobuf:"bytes,2,opt,name=outpoint,proto3" json:"outpoint,omitempty"`
Outpoint *auctioneerrpc.OutPoint `protobuf:"bytes,2,opt,name=outpoint,proto3" json:"outpoint,omitempty"`
// The current total amount of satoshis in the account.
Value uint64 `protobuf:"varint,3,opt,name=value,proto3" json:"value,omitempty"`
//
@ -1325,7 +1326,7 @@ func (m *Account) GetTraderKey() []byte {
return nil
}
func (m *Account) GetOutpoint() *OutPoint {
func (m *Account) GetOutpoint() *auctioneerrpc.OutPoint {
if m != nil {
return m.Outpoint
}
@ -1487,7 +1488,7 @@ type isSubmitOrderResponse_Details interface {
}
type SubmitOrderResponse_InvalidOrder struct {
InvalidOrder *InvalidOrder `protobuf:"bytes,1,opt,name=invalid_order,json=invalidOrder,proto3,oneof"`
InvalidOrder *auctioneerrpc.InvalidOrder `protobuf:"bytes,1,opt,name=invalid_order,json=invalidOrder,proto3,oneof"`
}
type SubmitOrderResponse_AcceptedOrderNonce struct {
@ -1505,7 +1506,7 @@ func (m *SubmitOrderResponse) GetDetails() isSubmitOrderResponse_Details {
return nil
}
func (m *SubmitOrderResponse) GetInvalidOrder() *InvalidOrder {
func (m *SubmitOrderResponse) GetInvalidOrder() *auctioneerrpc.InvalidOrder {
if x, ok := m.GetDetails().(*SubmitOrderResponse_InvalidOrder); ok {
return x.InvalidOrder
}
@ -1715,7 +1716,7 @@ type Order struct {
OrderNonce []byte `protobuf:"bytes,5,opt,name=order_nonce,json=orderNonce,proto3" json:"order_nonce,omitempty"`
//
//The state the order currently is in.
State OrderState `protobuf:"varint,6,opt,name=state,proto3,enum=poolrpc.OrderState" json:"state,omitempty"`
State auctioneerrpc.OrderState `protobuf:"varint,6,opt,name=state,proto3,enum=poolrpc.OrderState" json:"state,omitempty"`
//
//The number of order units the amount corresponds to.
Units uint32 `protobuf:"varint,7,opt,name=units,proto3" json:"units,omitempty"`
@ -1800,11 +1801,11 @@ func (m *Order) GetOrderNonce() []byte {
return nil
}
func (m *Order) GetState() OrderState {
func (m *Order) GetState() auctioneerrpc.OrderState {
if m != nil {
return m.State
}
return OrderState_ORDER_SUBMITTED
return auctioneerrpc.OrderState_ORDER_SUBMITTED
}
func (m *Order) GetUnits() uint32 {
@ -1864,10 +1865,10 @@ type Bid struct {
//
//The minium node tier this order should be matched with. Only asks backed by
//a node this tier or higher will be eligible for matching with this bid.
MinNodeTier NodeTier `protobuf:"varint,4,opt,name=min_node_tier,json=minNodeTier,proto3,enum=poolrpc.NodeTier" json:"min_node_tier,omitempty"`
XXX_NoUnkeyedLiteral struct{} `json:"-"`
XXX_unrecognized []byte `json:"-"`
XXX_sizecache int32 `json:"-"`
MinNodeTier auctioneerrpc.NodeTier `protobuf:"varint,4,opt,name=min_node_tier,json=minNodeTier,proto3,enum=poolrpc.NodeTier" json:"min_node_tier,omitempty"`
XXX_NoUnkeyedLiteral struct{} `json:"-"`
XXX_unrecognized []byte `json:"-"`
XXX_sizecache int32 `json:"-"`
}
func (m *Bid) Reset() { *m = Bid{} }
@ -1916,11 +1917,11 @@ func (m *Bid) GetVersion() uint32 {
return 0
}
func (m *Bid) GetMinNodeTier() NodeTier {
func (m *Bid) GetMinNodeTier() auctioneerrpc.NodeTier {
if m != nil {
return m.MinNodeTier
}
return NodeTier_TIER_DEFAULT
return auctioneerrpc.NodeTier_TIER_DEFAULT
}
type Ask struct {
@ -2090,11 +2091,11 @@ type UpdatedEvent struct {
//
//The state of the order previous to the change. This is what the state
//changed from.
PreviousState OrderState `protobuf:"varint,1,opt,name=previous_state,json=previousState,proto3,enum=poolrpc.OrderState" json:"previous_state,omitempty"`
PreviousState auctioneerrpc.OrderState `protobuf:"varint,1,opt,name=previous_state,json=previousState,proto3,enum=poolrpc.OrderState" json:"previous_state,omitempty"`
//
//The new state of the order after the change. This is what the state changed
//to.
NewState OrderState `protobuf:"varint,2,opt,name=new_state,json=newState,proto3,enum=poolrpc.OrderState" json:"new_state,omitempty"`
NewState auctioneerrpc.OrderState `protobuf:"varint,2,opt,name=new_state,json=newState,proto3,enum=poolrpc.OrderState" json:"new_state,omitempty"`
// The units that were filled at the time of the event.
UnitsFilled uint32 `protobuf:"varint,3,opt,name=units_filled,json=unitsFilled,proto3" json:"units_filled,omitempty"`
XXX_NoUnkeyedLiteral struct{} `json:"-"`
@ -2127,18 +2128,18 @@ func (m *UpdatedEvent) XXX_DiscardUnknown() {
var xxx_messageInfo_UpdatedEvent proto.InternalMessageInfo
func (m *UpdatedEvent) GetPreviousState() OrderState {
func (m *UpdatedEvent) GetPreviousState() auctioneerrpc.OrderState {
if m != nil {
return m.PreviousState
}
return OrderState_ORDER_SUBMITTED
return auctioneerrpc.OrderState_ORDER_SUBMITTED
}
func (m *UpdatedEvent) GetNewState() OrderState {
func (m *UpdatedEvent) GetNewState() auctioneerrpc.OrderState {
if m != nil {
return m.NewState
}
return OrderState_ORDER_SUBMITTED
return auctioneerrpc.OrderState_ORDER_SUBMITTED
}
func (m *UpdatedEvent) GetUnitsFilled() uint32 {
@ -2322,10 +2323,10 @@ var xxx_messageInfo_AuctionFeeRequest proto.InternalMessageInfo
type AuctionFeeResponse struct {
//
//The execution fee charged per matched order.
ExecutionFee *ExecutionFee `protobuf:"bytes,1,opt,name=execution_fee,json=executionFee,proto3" json:"execution_fee,omitempty"`
XXX_NoUnkeyedLiteral struct{} `json:"-"`
XXX_unrecognized []byte `json:"-"`
XXX_sizecache int32 `json:"-"`
ExecutionFee *auctioneerrpc.ExecutionFee `protobuf:"bytes,1,opt,name=execution_fee,json=executionFee,proto3" json:"execution_fee,omitempty"`
XXX_NoUnkeyedLiteral struct{} `json:"-"`
XXX_unrecognized []byte `json:"-"`
XXX_sizecache int32 `json:"-"`
}
func (m *AuctionFeeResponse) Reset() { *m = AuctionFeeResponse{} }
@ -2353,7 +2354,7 @@ func (m *AuctionFeeResponse) XXX_DiscardUnknown() {
var xxx_messageInfo_AuctionFeeResponse proto.InternalMessageInfo
func (m *AuctionFeeResponse) GetExecutionFee() *ExecutionFee {
func (m *AuctionFeeResponse) GetExecutionFee() *auctioneerrpc.ExecutionFee {
if m != nil {
return m.ExecutionFee
}
@ -2362,7 +2363,7 @@ func (m *AuctionFeeResponse) GetExecutionFee() *ExecutionFee {
type Lease struct {
// The outpoint of the channel created.
ChannelPoint *OutPoint `protobuf:"bytes,1,opt,name=channel_point,json=channelPoint,proto3" json:"channel_point,omitempty"`
ChannelPoint *auctioneerrpc.OutPoint `protobuf:"bytes,1,opt,name=channel_point,json=channelPoint,proto3" json:"channel_point,omitempty"`
// The amount, in satoshis, of the channel created.
ChannelAmtSat uint64 `protobuf:"varint,2,opt,name=channel_amt_sat,json=channelAmtSat,proto3" json:"channel_amt_sat,omitempty"`
// The intended duration, in blocks, of the channel created.
@ -2395,10 +2396,10 @@ type Lease struct {
// The pubkey of the node that this channel was bought/sold from.
ChannelRemoteNodeKey []byte `protobuf:"bytes,12,opt,name=channel_remote_node_key,json=channelRemoteNodeKey,proto3" json:"channel_remote_node_key,omitempty"`
// The tier of the node that this channel was bought/sold from.
ChannelNodeTier NodeTier `protobuf:"varint,13,opt,name=channel_node_tier,json=channelNodeTier,proto3,enum=poolrpc.NodeTier" json:"channel_node_tier,omitempty"`
XXX_NoUnkeyedLiteral struct{} `json:"-"`
XXX_unrecognized []byte `json:"-"`
XXX_sizecache int32 `json:"-"`
ChannelNodeTier auctioneerrpc.NodeTier `protobuf:"varint,13,opt,name=channel_node_tier,json=channelNodeTier,proto3,enum=poolrpc.NodeTier" json:"channel_node_tier,omitempty"`
XXX_NoUnkeyedLiteral struct{} `json:"-"`
XXX_unrecognized []byte `json:"-"`
XXX_sizecache int32 `json:"-"`
}
func (m *Lease) Reset() { *m = Lease{} }
@ -2426,7 +2427,7 @@ func (m *Lease) XXX_DiscardUnknown() {
var xxx_messageInfo_Lease proto.InternalMessageInfo
func (m *Lease) GetChannelPoint() *OutPoint {
func (m *Lease) GetChannelPoint() *auctioneerrpc.OutPoint {
if m != nil {
return m.ChannelPoint
}
@ -2510,11 +2511,11 @@ func (m *Lease) GetChannelRemoteNodeKey() []byte {
return nil
}
func (m *Lease) GetChannelNodeTier() NodeTier {
func (m *Lease) GetChannelNodeTier() auctioneerrpc.NodeTier {
if m != nil {
return m.ChannelNodeTier
}
return NodeTier_TIER_DEFAULT
return auctioneerrpc.NodeTier_TIER_DEFAULT
}
type LeasesRequest struct {
@ -2852,10 +2853,10 @@ type LeaseDurationResponse struct {
//
//The set of lease durations the market is currently accepting and the state
//the duration buckets currently are in.
LeaseDurationBuckets map[uint32]DurationBucketState `protobuf:"bytes,2,rep,name=lease_duration_buckets,json=leaseDurationBuckets,proto3" json:"lease_duration_buckets,omitempty" protobuf_key:"varint,1,opt,name=key,proto3" protobuf_val:"varint,2,opt,name=value,proto3,enum=poolrpc.DurationBucketState"`
XXX_NoUnkeyedLiteral struct{} `json:"-"`
XXX_unrecognized []byte `json:"-"`
XXX_sizecache int32 `json:"-"`
LeaseDurationBuckets map[uint32]auctioneerrpc.DurationBucketState `protobuf:"bytes,2,rep,name=lease_duration_buckets,json=leaseDurationBuckets,proto3" json:"lease_duration_buckets,omitempty" protobuf_key:"varint,1,opt,name=key,proto3" protobuf_val:"varint,2,opt,name=value,proto3,enum=poolrpc.DurationBucketState"`
XXX_NoUnkeyedLiteral struct{} `json:"-"`
XXX_unrecognized []byte `json:"-"`
XXX_sizecache int32 `json:"-"`
}
func (m *LeaseDurationResponse) Reset() { *m = LeaseDurationResponse{} }
@ -2891,7 +2892,7 @@ func (m *LeaseDurationResponse) GetLeaseDurations() map[uint32]bool {
return nil
}
func (m *LeaseDurationResponse) GetLeaseDurationBuckets() map[uint32]DurationBucketState {
func (m *LeaseDurationResponse) GetLeaseDurationBuckets() map[uint32]auctioneerrpc.DurationBucketState {
if m != nil {
return m.LeaseDurationBuckets
}
@ -3035,10 +3036,10 @@ func (m *NodeRatingRequest) GetNodePubkeys() [][]byte {
type NodeRatingResponse struct {
// A series of node ratings for each of the queried nodes.
NodeRatings []*NodeRating `protobuf:"bytes,1,rep,name=node_ratings,json=nodeRatings,proto3" json:"node_ratings,omitempty"`
XXX_NoUnkeyedLiteral struct{} `json:"-"`
XXX_unrecognized []byte `json:"-"`
XXX_sizecache int32 `json:"-"`
NodeRatings []*auctioneerrpc.NodeRating `protobuf:"bytes,1,rep,name=node_ratings,json=nodeRatings,proto3" json:"node_ratings,omitempty"`
XXX_NoUnkeyedLiteral struct{} `json:"-"`
XXX_unrecognized []byte `json:"-"`
XXX_sizecache int32 `json:"-"`
}
func (m *NodeRatingResponse) Reset() { *m = NodeRatingResponse{} }
@ -3066,7 +3067,7 @@ func (m *NodeRatingResponse) XXX_DiscardUnknown() {
var xxx_messageInfo_NodeRatingResponse proto.InternalMessageInfo
func (m *NodeRatingResponse) GetNodeRatings() []*NodeRating {
func (m *NodeRatingResponse) GetNodeRatings() []*auctioneerrpc.NodeRating {
if m != nil {
return m.NodeRatings
}
@ -3120,7 +3121,7 @@ func init() {
proto.RegisterType((*LsatToken)(nil), "poolrpc.LsatToken")
proto.RegisterType((*LeaseDurationRequest)(nil), "poolrpc.LeaseDurationRequest")
proto.RegisterType((*LeaseDurationResponse)(nil), "poolrpc.LeaseDurationResponse")
proto.RegisterMapType((map[uint32]DurationBucketState)(nil), "poolrpc.LeaseDurationResponse.LeaseDurationBucketsEntry")
proto.RegisterMapType((map[uint32]auctioneerrpc.DurationBucketState)(nil), "poolrpc.LeaseDurationResponse.LeaseDurationBucketsEntry")
proto.RegisterMapType((map[uint32]bool)(nil), "poolrpc.LeaseDurationResponse.LeaseDurationsEntry")
proto.RegisterType((*NextBatchInfoRequest)(nil), "poolrpc.NextBatchInfoRequest")
proto.RegisterType((*NextBatchInfoResponse)(nil), "poolrpc.NextBatchInfoResponse")
@ -3131,7 +3132,7 @@ func init() {
func init() { proto.RegisterFile("trader.proto", fileDescriptor_b8f61804588c75fe) }
var fileDescriptor_b8f61804588c75fe = []byte{
// 2994 bytes of a gzipped FileDescriptorProto
// 3002 bytes of a gzipped FileDescriptorProto
0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xc4, 0x3a, 0x49, 0x73, 0x1b, 0xc7,
0xd5, 0x1c, 0x70, 0x7f, 0x58, 0x08, 0x36, 0x48, 0x8a, 0xa6, 0x4c, 0x4b, 0x9a, 0xaf, 0x6c, 0x4b,
0xb2, 0x3f, 0xc9, 0x61, 0x2c, 0xc5, 0x51, 0x9c, 0xd8, 0x00, 0x39, 0x34, 0x10, 0x51, 0x20, 0xdc,
@ -3139,187 +3140,187 @@ var fileDescriptor_b8f61804588c75fe = []byte{
0x9c, 0x92, 0x7b, 0x52, 0x4e, 0x25, 0xd7, 0xfc, 0x89, 0xdc, 0x52, 0x95, 0x43, 0x4e, 0xa9, 0x8a,
0x2f, 0xf9, 0x01, 0xf9, 0x1d, 0xb9, 0xa6, 0x7a, 0xc3, 0xf4, 0x0c, 0x06, 0xde, 0x2e, 0xb9, 0x71,
0xde, 0xd2, 0xfd, 0xf6, 0xf7, 0xfa, 0x81, 0x50, 0x62, 0x11, 0xf1, 0x68, 0xf4, 0x68, 0x14, 0x85,
0x2c, 0x44, 0xcb, 0xa3, 0x30, 0x1c, 0x44, 0xa3, 0xfe, 0x4e, 0x95, 0x8c, 0xfb, 0xcc, 0x0f, 0x03,
0xaa, 0x51, 0xf6, 0x57, 0x16, 0xa0, 0x56, 0xe0, 0xb3, 0x7a, 0xbf, 0x1f, 0x8e, 0x03, 0x86, 0xe9,
0xaf, 0xc6, 0x34, 0x66, 0xe8, 0xff, 0xa0, 0x4c, 0x24, 0xc4, 0xbd, 0x24, 0x83, 0x31, 0xdd, 0xb6,
0xee, 0x5a, 0xf7, 0x17, 0x70, 0x49, 0x01, 0x5f, 0x71, 0x18, 0x7a, 0x00, 0x6b, 0xa4, 0x17, 0x87,
0x83, 0x31, 0xa3, 0xee, 0x39, 0xf5, 0xcf, 0xce, 0xd9, 0x76, 0xe1, 0xae, 0x75, 0xbf, 0xdc, 0x9c,
0xc3, 0x15, 0x8d, 0x68, 0x0a, 0x38, 0x27, 0x8d, 0xe8, 0x80, 0x30, 0xff, 0x72, 0x42, 0x3a, 0xaf,
0x49, 0x35, 0x42, 0x91, 0xde, 0x83, 0x62, 0x3f, 0x0c, 0x4e, 0x5d, 0x46, 0xa2, 0x33, 0xca, 0xb6,
0x17, 0x04, 0x99, 0x85, 0x81, 0x03, 0xbb, 0x02, 0xd6, 0xa8, 0x42, 0x45, 0x4b, 0x47, 0xaf, 0x47,
0x7e, 0x74, 0xd3, 0x58, 0x82, 0x85, 0x53, 0x4a, 0x63, 0x9b, 0x42, 0xed, 0xd3, 0x71, 0xc8, 0xe8,
0xf7, 0x51, 0x27, 0x73, 0xb1, 0x56, 0xc5, 0xbc, 0x58, 0x5f, 0x73, 0x05, 0x1b, 0xe9, 0x6b, 0xe2,
0x51, 0x18, 0xc4, 0x14, 0xfd, 0x08, 0x5e, 0x1b, 0xfa, 0x01, 0x8d, 0xdc, 0x53, 0x4a, 0xdd, 0x88,
0x30, 0xea, 0xc6, 0x84, 0xb9, 0x23, 0x1a, 0xb9, 0x17, 0x57, 0xea, 0xce, 0x0d, 0x41, 0x70, 0x48,
0x29, 0x26, 0x8c, 0x9e, 0x10, 0xd6, 0xa1, 0xd1, 0xf3, 0x2b, 0xf4, 0x16, 0xac, 0x25, 0x8c, 0x2c,
0x64, 0x64, 0x20, 0xee, 0x5f, 0xc0, 0x65, 0x4d, 0xde, 0xe5, 0x40, 0xfb, 0x29, 0xd4, 0x8e, 0xfc,
0x58, 0x7b, 0x2b, 0xd6, 0xfa, 0xdd, 0x81, 0x22, 0xe9, 0x0b, 0xe3, 0x86, 0xc1, 0xe0, 0x46, 0xdc,
0xb4, 0x82, 0x41, 0x82, 0x8e, 0x83, 0xc1, 0x8d, 0x7d, 0x00, 0x1b, 0x69, 0x3e, 0x25, 0xf0, 0xbb,
0xb0, 0xa2, 0x6c, 0x10, 0x6f, 0x5b, 0x77, 0xe7, 0xef, 0x17, 0xf7, 0xaa, 0x8f, 0x54, 0xb0, 0x3c,
0xd2, 0xca, 0x4d, 0x28, 0xec, 0x8f, 0x60, 0xe9, 0x78, 0xcc, 0x46, 0x63, 0x86, 0x6e, 0xc3, 0xaa,
0x30, 0x24, 0xd7, 0x4f, 0x29, 0xb6, 0x22, 0x00, 0x27, 0x84, 0xa1, 0x6d, 0x58, 0x26, 0x9e, 0x17,
0xd1, 0x38, 0x16, 0x4a, 0xac, 0x62, 0xfd, 0x69, 0xff, 0xd6, 0x82, 0xb2, 0x3c, 0xe1, 0x17, 0x3e,
0x3b, 0x3f, 0xa4, 0xd4, 0xa4, 0xb5, 0x52, 0xb4, 0xdf, 0xc2, 0x1d, 0xe8, 0x11, 0xd4, 0xf2, 0x0c,
0xcd, 0x23, 0x6b, 0xa1, 0x39, 0x87, 0xd7, 0x4e, 0xd3, 0x56, 0x9e, 0xb8, 0x6f, 0x1f, 0xb6, 0xa4,
0x14, 0x31, 0x17, 0xa3, 0x35, 0x1c, 0x0d, 0xfc, 0xbe, 0xcf, 0xb8, 0x38, 0x0f, 0x60, 0x39, 0x94,
0x18, 0x65, 0x8e, 0xb5, 0x89, 0x39, 0x24, 0x07, 0xd6, 0x78, 0xfb, 0x1f, 0x16, 0xd4, 0xf6, 0x07,
0x61, 0x9c, 0x8d, 0xb5, 0x5d, 0x00, 0x99, 0x7c, 0xee, 0x05, 0x95, 0xae, 0x28, 0xe1, 0x55, 0x09,
0x79, 0x4e, 0x6f, 0xd0, 0xc7, 0xb0, 0x26, 0x4f, 0x70, 0xaf, 0x7c, 0x76, 0xce, 0xfd, 0x2d, 0x54,
0x2b, 0xee, 0x6d, 0x65, 0x6e, 0x52, 0x16, 0x6a, 0xce, 0xe1, 0x72, 0x98, 0x32, 0xd9, 0x4f, 0x12,
0x19, 0xe7, 0x05, 0xe7, 0x9d, 0x0c, 0x67, 0x56, 0xab, 0xe6, 0xdc, 0x44, 0xea, 0x46, 0x0d, 0xd6,
0x4f, 0xc7, 0x81, 0x17, 0xbb, 0x1e, 0x8d, 0x99, 0x1f, 0x10, 0x5e, 0x0d, 0xec, 0x27, 0xb0, 0x91,
0xd6, 0x44, 0x45, 0xc7, 0x2e, 0x40, 0x9f, 0xc3, 0x5d, 0x76, 0xed, 0x7b, 0x5a, 0x15, 0x01, 0xe9,
0x5e, 0xfb, 0x9e, 0xfd, 0x7b, 0x0b, 0xb6, 0xf8, 0x55, 0x5e, 0x44, 0xae, 0xbe, 0x9b, 0x11, 0x0c,
0x33, 0x17, 0xbe, 0xde, 0xcc, 0xe8, 0xdd, 0xaf, 0xf1, 0xf1, 0x94, 0x87, 0xed, 0x2f, 0xe0, 0xd6,
0x94, 0x44, 0x4a, 0x99, 0x87, 0xb0, 0xac, 0x02, 0x59, 0xc8, 0x93, 0x17, 0xe9, 0x9a, 0x80, 0xd7,
0x8b, 0x2b, 0x75, 0x8c, 0xd4, 0xbd, 0x20, 0x34, 0x28, 0x69, 0xa0, 0x50, 0xff, 0x37, 0x16, 0x6c,
0x1e, 0xd0, 0x51, 0x18, 0x4f, 0x55, 0xcf, 0x6f, 0xd0, 0x7e, 0x17, 0x80, 0x0c, 0x45, 0x31, 0xe2,
0xd9, 0x23, 0xf3, 0x7c, 0x55, 0x42, 0x78, 0xfa, 0x7c, 0x37, 0x8d, 0xcf, 0x60, 0x2b, 0x2b, 0xc4,
0xf7, 0x50, 0xf8, 0x1e, 0x94, 0x3c, 0x79, 0x8a, 0xa9, 0x6f, 0x51, 0xc1, 0x84, 0xba, 0x5f, 0x59,
0x50, 0xc3, 0x34, 0xa0, 0x59, 0x57, 0x8b, 0xda, 0x23, 0x6b, 0x6b, 0xa2, 0x2d, 0x28, 0x90, 0x74,
0x76, 0xd2, 0x26, 0x64, 0xb9, 0x9e, 0x6e, 0x13, 0x8e, 0x80, 0xa7, 0xda, 0x84, 0x22, 0x9d, 0x6a,
0x13, 0x8a, 0x74, 0x86, 0x95, 0x16, 0x72, 0xad, 0x34, 0xdd, 0x31, 0x6c, 0x0a, 0x1b, 0x69, 0x6d,
0xbe, 0x9f, 0xd5, 0x22, 0x7e, 0x06, 0x19, 0xa4, 0xac, 0xa6, 0x60, 0xc2, 0x6a, 0x1e, 0x6c, 0x36,
0xc6, 0xc3, 0x91, 0x62, 0xe5, 0x65, 0xff, 0xdb, 0xc5, 0xc8, 0x0c, 0xf5, 0x0a, 0xf9, 0x41, 0xb0,
0x0d, 0x5b, 0xd9, 0x5b, 0xa4, 0x3a, 0xf6, 0x1f, 0x0b, 0xb0, 0xac, 0xc0, 0xdf, 0x74, 0xe5, 0xff,
0xc3, 0x0a, 0x4f, 0xba, 0xd0, 0x0f, 0x98, 0x2a, 0x49, 0xeb, 0x66, 0x56, 0x76, 0x38, 0x02, 0x4f,
0x48, 0xd0, 0x06, 0x2c, 0xca, 0x5e, 0x2a, 0x03, 0x53, 0x7e, 0xa0, 0x77, 0x60, 0x9d, 0x5c, 0x12,
0x7f, 0x40, 0x7a, 0x03, 0xea, 0xf6, 0xc8, 0x80, 0x04, 0x7d, 0xaa, 0x9c, 0x52, 0x9d, 0x20, 0x1a,
0x12, 0xce, 0x89, 0x85, 0x37, 0x44, 0x15, 0xd2, 0x73, 0xc1, 0x22, 0x77, 0x38, 0xae, 0x26, 0x08,
0x35, 0x17, 0xbc, 0x03, 0x8b, 0x31, 0x23, 0x8c, 0x6e, 0x2f, 0xdd, 0xb5, 0xee, 0x57, 0xf6, 0x36,
0xb3, 0x6e, 0x39, 0xe1, 0x48, 0x2c, 0x69, 0x78, 0x50, 0x0e, 0x08, 0xa3, 0xb1, 0x0a, 0xe7, 0x65,
0x19, 0x94, 0x12, 0x24, 0xfc, 0xd2, 0x07, 0x74, 0x32, 0xee, 0x0d, 0x7d, 0x76, 0x1c, 0x79, 0x34,
0xd2, 0x4e, 0xb9, 0x0b, 0xf3, 0x24, 0xbe, 0x50, 0x8e, 0x2f, 0x25, 0x37, 0xc4, 0x17, 0xcd, 0x39,
0xcc, 0x51, 0x9c, 0xa2, 0xa7, 0x3c, 0x6d, 0x52, 0x34, 0x7c, 0x8f, 0x53, 0xf4, 0x7c, 0xaf, 0xb1,
0x0a, 0xcb, 0x1e, 0x65, 0xc4, 0x1f, 0xc4, 0xf6, 0x97, 0x16, 0xd4, 0x52, 0xb7, 0xa8, 0x18, 0xfb,
0x10, 0xca, 0x7e, 0x70, 0x49, 0x06, 0xbe, 0xe7, 0x86, 0x1c, 0xa1, 0x2e, 0x4c, 0x54, 0x6a, 0x49,
0xac, 0xe0, 0x6a, 0xce, 0xe1, 0x92, 0x6f, 0x7c, 0xa3, 0x3d, 0xd8, 0x20, 0xfd, 0x3e, 0x1d, 0x31,
0xaa, 0xd8, 0xdd, 0x20, 0xe4, 0x56, 0x16, 0xd1, 0xd7, 0x9c, 0xc3, 0x48, 0x63, 0x05, 0x79, 0x9b,
0xe3, 0x4c, 0xa1, 0xda, 0xb0, 0xce, 0x47, 0x01, 0x81, 0x9c, 0x0c, 0x10, 0xdb, 0xb0, 0x7c, 0x49,
0xa3, 0x5e, 0x18, 0x53, 0x35, 0x3c, 0xe8, 0xcf, 0xec, 0x68, 0x51, 0x98, 0x1a, 0x2d, 0x3e, 0x03,
0x64, 0x9e, 0xa7, 0x54, 0xbc, 0x0b, 0x0b, 0x24, 0xbe, 0xd0, 0x5d, 0x34, 0x65, 0x4a, 0x2c, 0x30,
0x9c, 0xa2, 0xe7, 0x7b, 0xba, 0x01, 0xa4, 0x4c, 0x89, 0x05, 0xc6, 0x7e, 0x02, 0x68, 0x9f, 0xc7,
0xc9, 0x20, 0xe5, 0xa3, 0x3b, 0x50, 0x34, 0xb5, 0x56, 0xf5, 0x26, 0x9c, 0xe8, 0x6a, 0x6f, 0x42,
0x2d, 0xc5, 0xa6, 0x32, 0xe1, 0xdf, 0xf3, 0xb0, 0x28, 0x0d, 0xf8, 0xcd, 0xe5, 0x59, 0xa4, 0xdd,
0xa9, 0x7f, 0x4d, 0xa5, 0xa7, 0xcb, 0x78, 0x95, 0x43, 0x0e, 0x39, 0x00, 0x55, 0x61, 0x9e, 0x0c,
0x99, 0x8a, 0x7a, 0xfe, 0x27, 0xfa, 0x19, 0xec, 0x0e, 0xc9, 0xb5, 0xdb, 0x23, 0xac, 0x7f, 0xee,
0xce, 0x2e, 0x4a, 0xb7, 0x86, 0xe4, 0xba, 0xc1, 0x69, 0xb2, 0xc3, 0x5f, 0x46, 0xa3, 0xc5, 0xac,
0x46, 0xe8, 0x41, 0x3a, 0xf4, 0x6b, 0x49, 0x5a, 0x72, 0x9a, 0x54, 0xe0, 0x6f, 0xc0, 0xe2, 0x38,
0xf0, 0x59, 0x2c, 0x42, 0xbe, 0x8c, 0xe5, 0x07, 0x4f, 0x34, 0xf1, 0x87, 0x3b, 0x0e, 0x4e, 0xc7,
0x83, 0x53, 0x7f, 0x30, 0xa0, 0xde, 0xf6, 0x8a, 0x4c, 0x34, 0x81, 0x78, 0x99, 0xc0, 0xd1, 0xbb,
0x80, 0x22, 0x1a, 0xd3, 0xe8, 0x92, 0x7a, 0x6e, 0x32, 0xe4, 0xad, 0xca, 0x1c, 0xd6, 0x98, 0x57,
0x7a, 0xd8, 0xdb, 0x83, 0xcd, 0x7e, 0x44, 0x65, 0x06, 0x33, 0x7f, 0x48, 0x63, 0x46, 0x86, 0x23,
0x37, 0x88, 0xb7, 0x41, 0x30, 0xd4, 0x34, 0xb2, 0xab, 0x71, 0x6d, 0x2e, 0xce, 0x12, 0xbd, 0xa4,
0x7c, 0xe6, 0x2c, 0x0a, 0xe7, 0x67, 0x14, 0x72, 0x38, 0x0e, 0x2b, 0x12, 0x35, 0x1a, 0xbb, 0x52,
0xfe, 0x21, 0xb7, 0xdf, 0x76, 0x49, 0x48, 0xce, 0x47, 0xe3, 0x97, 0x1c, 0xfa, 0x82, 0x03, 0xed,
0xbf, 0x58, 0x30, 0xdf, 0xf0, 0x3d, 0x74, 0x7f, 0x12, 0xea, 0x2a, 0xad, 0x2a, 0xe9, 0xd3, 0xb1,
0x46, 0x73, 0xd1, 0x07, 0x94, 0xc4, 0xd4, 0xf5, 0xc6, 0xaa, 0x04, 0xf5, 0x06, 0x61, 0xff, 0x22,
0x56, 0x3e, 0xaf, 0x09, 0xe4, 0x81, 0xc2, 0x35, 0x04, 0x4a, 0x25, 0x4a, 0xec, 0x87, 0x81, 0xec,
0x4c, 0x58, 0x7f, 0xa2, 0x27, 0xc0, 0x05, 0x72, 0x83, 0xd0, 0xa3, 0x2e, 0xf3, 0x69, 0x24, 0xbc,
0x5e, 0x31, 0x6a, 0x68, 0x3b, 0xf4, 0x68, 0xd7, 0xa7, 0x11, 0x2e, 0x0e, 0xfd, 0x40, 0x7f, 0xd8,
0xbf, 0x86, 0xf9, 0x7a, 0x7c, 0xf1, 0xbf, 0x92, 0xda, 0xfe, 0xbb, 0x05, 0x90, 0x18, 0x9d, 0x77,
0xb4, 0x94, 0x13, 0xb9, 0x2c, 0xf3, 0xb8, 0xc8, 0x0c, 0xe7, 0xdd, 0x86, 0x55, 0xe1, 0x19, 0x37,
0x66, 0x91, 0x9a, 0xef, 0x57, 0x04, 0xe0, 0x84, 0x45, 0xe8, 0x19, 0x94, 0x44, 0x1c, 0xba, 0xfd,
0x73, 0x12, 0x9c, 0x51, 0x35, 0xa0, 0x26, 0x85, 0xed, 0xe5, 0xc8, 0x23, 0x8c, 0x7a, 0xe2, 0xb2,
0xe6, 0x1c, 0x2e, 0x0a, 0xe2, 0x7d, 0x41, 0x8b, 0x1e, 0xc3, 0xb2, 0x70, 0x2f, 0xf5, 0x84, 0xe9,
0xcc, 0xb0, 0x10, 0x1e, 0xd6, 0x4c, 0x9a, 0xaa, 0xb1, 0x0c, 0x8b, 0xe2, 0x62, 0xfb, 0xcf, 0x16,
0x94, 0xcc, 0x93, 0xd1, 0x33, 0xa8, 0x8c, 0x22, 0x7a, 0xe9, 0x87, 0xe3, 0xd8, 0x95, 0x99, 0x63,
0xcd, 0xce, 0x9c, 0xb2, 0x26, 0x15, 0x9f, 0xe8, 0x3d, 0x58, 0x0d, 0xe8, 0x95, 0x62, 0x2b, 0xcc,
0x66, 0x5b, 0x09, 0xe8, 0x95, 0xe4, 0xb8, 0x07, 0x25, 0x19, 0x9d, 0x2a, 0xb1, 0xa4, 0x89, 0x8b,
0x02, 0x76, 0x28, 0x40, 0xf6, 0x3f, 0x2d, 0x80, 0x44, 0x09, 0xf4, 0x3e, 0x14, 0x85, 0x12, 0x33,
0x84, 0x13, 0x94, 0xf2, 0x16, 0x18, 0x4e, 0xfe, 0x9e, 0xba, 0xa7, 0x30, 0x75, 0x0f, 0x1f, 0x5c,
0x95, 0x75, 0x54, 0x67, 0x99, 0x97, 0x83, 0xab, 0x02, 0xca, 0xfa, 0xf7, 0x11, 0x94, 0x23, 0xfa,
0x05, 0xed, 0x33, 0x37, 0xa2, 0x24, 0x0e, 0x03, 0x15, 0xa9, 0x3b, 0xe9, 0xfb, 0xb1, 0x20, 0xc1,
0x82, 0x02, 0x97, 0x22, 0xe3, 0x8b, 0x8f, 0x1b, 0x98, 0xf6, 0xc3, 0x4b, 0x1a, 0x65, 0x1e, 0xa2,
0xf6, 0x31, 0xdc, 0x9a, 0xc2, 0xa8, 0x8e, 0xf0, 0x3e, 0x6c, 0x05, 0xe3, 0xa1, 0x1b, 0x49, 0x34,
0xf5, 0x5c, 0xe3, 0xe1, 0xc9, 0xf5, 0xd8, 0x08, 0xc6, 0x43, 0xac, 0x91, 0x9a, 0xdb, 0xae, 0xc1,
0x7a, 0x5d, 0xee, 0x2c, 0x92, 0xd9, 0xc9, 0xee, 0x00, 0x32, 0x81, 0xea, 0x82, 0x67, 0x50, 0xa6,
0xd7, 0xb4, 0x3f, 0x16, 0x39, 0xc1, 0xdf, 0x55, 0xd9, 0xae, 0xea, 0x68, 0x2c, 0xe7, 0x2a, 0x51,
0xe3, 0xcb, 0xfe, 0xd7, 0x02, 0x2c, 0x1e, 0xf1, 0xc4, 0x41, 0x4f, 0xa1, 0xcc, 0x63, 0x37, 0xa0,
0x03, 0x57, 0x8e, 0x42, 0xd6, 0xac, 0x51, 0xa8, 0xa4, 0xe8, 0xc4, 0x17, 0x2f, 0x53, 0x9a, 0x8f,
0x0c, 0xcd, 0xc9, 0x5e, 0x1f, 0x57, 0x1f, 0x8a, 0xe9, 0xfe, 0x29, 0xdc, 0xd2, 0x74, 0xd9, 0x04,
0x96, 0x71, 0xb3, 0xa9, 0xd0, 0x99, 0x14, 0x7e, 0x0f, 0x36, 0x34, 0x9f, 0x4c, 0x7f, 0x35, 0x1f,
0x8b, 0xfd, 0x08, 0x46, 0x0a, 0x27, 0x74, 0x50, 0x13, 0xf2, 0x1d, 0x28, 0x8e, 0x22, 0x3a, 0xf4,
0xc7, 0x43, 0x21, 0xcd, 0xa2, 0x90, 0x06, 0x14, 0x88, 0x8b, 0xf2, 0x90, 0x8f, 0x5f, 0x86, 0xc1,
0x04, 0xd9, 0x92, 0x9c, 0x30, 0x4d, 0xeb, 0x70, 0x5a, 0x5b, 0x98, 0xc5, 0x4f, 0xe8, 0x96, 0x05,
0x5d, 0x51, 0x00, 0x15, 0xcd, 0x23, 0xa8, 0xf5, 0x07, 0x94, 0x44, 0x7e, 0x70, 0x26, 0x5b, 0xe0,
0x28, 0xf2, 0xfb, 0x54, 0xf4, 0x99, 0x05, 0xbc, 0xae, 0x51, 0xbc, 0xf5, 0x75, 0x38, 0x02, 0xdd,
0x87, 0xaa, 0xec, 0x7b, 0xa2, 0xd3, 0x0a, 0x16, 0xd5, 0x66, 0x2a, 0x02, 0x2e, 0xfa, 0x2d, 0x56,
0xe3, 0x9c, 0xd9, 0x21, 0x61, 0xaa, 0x43, 0xbe, 0x0e, 0xab, 0xa3, 0x71, 0xd4, 0x3f, 0x27, 0x31,
0xf5, 0xb6, 0x8b, 0x62, 0x46, 0x49, 0x00, 0xe8, 0x49, 0x62, 0xf3, 0x88, 0x0e, 0x43, 0x46, 0x65,
0x95, 0xe6, 0xdd, 0xbf, 0x24, 0x8e, 0xd2, 0xa6, 0xc5, 0x02, 0xcb, 0x6b, 0x33, 0x1f, 0x04, 0x7e,
0x0a, 0xeb, 0x9a, 0x2d, 0xa9, 0xea, 0xe5, 0x59, 0x55, 0x5d, 0xbb, 0x7f, 0x52, 0xd9, 0x9b, 0x50,
0x16, 0xee, 0x98, 0x0c, 0x59, 0xb7, 0x61, 0x55, 0xce, 0x08, 0x7c, 0xec, 0xe1, 0x83, 0x51, 0x09,
0xaf, 0x08, 0x40, 0xcb, 0x8b, 0xd1, 0x8e, 0xb1, 0x89, 0x29, 0x48, 0xdc, 0x64, 0xef, 0xf2, 0x27,
0x0b, 0x2a, 0xfa, 0x28, 0x15, 0xec, 0x6f, 0xc1, 0x92, 0x08, 0x03, 0x3d, 0x61, 0x25, 0xed, 0x42,
0x10, 0x62, 0x85, 0x45, 0x8f, 0x61, 0x43, 0xac, 0x93, 0x44, 0x50, 0x52, 0x12, 0x05, 0xd4, 0x33,
0x62, 0x73, 0x5d, 0xe0, 0xea, 0x43, 0xe6, 0x08, 0x0c, 0x77, 0xe2, 0x3b, 0x80, 0x12, 0x86, 0x11,
0xf1, 0x25, 0xb9, 0x7a, 0x7c, 0x6a, 0xf2, 0x0e, 0xf1, 0x39, 0xb1, 0xbd, 0x06, 0xe5, 0x6e, 0x78,
0x41, 0x83, 0x49, 0xfe, 0x7f, 0x08, 0x15, 0x0d, 0x98, 0xbc, 0xa7, 0x96, 0x98, 0x80, 0x28, 0x41,
0x51, 0x22, 0x68, 0x4c, 0x98, 0x20, 0xc6, 0x8a, 0xc2, 0xfe, 0x6b, 0x01, 0x56, 0x27, 0x50, 0x5e,
0xcb, 0x7a, 0x3c, 0xd0, 0x87, 0xa4, 0x4f, 0xa2, 0x30, 0x0c, 0xd4, 0xa4, 0x56, 0xe2, 0xc0, 0x17,
0x0a, 0xc6, 0x6b, 0xe2, 0x88, 0xdc, 0x0c, 0x79, 0x3f, 0x3a, 0x27, 0xf1, 0xb9, 0x7e, 0x82, 0x29,
0x58, 0x93, 0xc4, 0xe7, 0xe8, 0x01, 0x54, 0x35, 0xc9, 0x28, 0xa2, 0xfe, 0x90, 0xa8, 0xbe, 0x54,
0xc2, 0x6b, 0x0a, 0xde, 0x51, 0x60, 0x1e, 0x91, 0xea, 0x65, 0x2e, 0x34, 0x1f, 0x72, 0xd5, 0x17,
0x44, 0x0b, 0xac, 0x48, 0x38, 0x57, 0xfc, 0x45, 0x4c, 0x18, 0xfa, 0x01, 0x6c, 0x46, 0xe1, 0x98,
0xf1, 0x50, 0xe7, 0x19, 0x91, 0x90, 0x2f, 0x0a, 0x72, 0xa4, 0x90, 0x87, 0x94, 0x4e, 0x58, 0x54,
0x6f, 0x75, 0xc5, 0x44, 0x44, 0x3d, 0x91, 0x69, 0xaa, 0xb7, 0xee, 0x4b, 0x10, 0xef, 0xd3, 0x22,
0xad, 0xa9, 0x7c, 0xb2, 0xac, 0x60, 0xfd, 0xc9, 0x99, 0x63, 0x16, 0x46, 0xe4, 0x8c, 0xba, 0x01,
0x19, 0xca, 0xa4, 0x5a, 0xe5, 0xfd, 0x53, 0xc0, 0xda, 0x64, 0x48, 0xed, 0x2d, 0xd8, 0x38, 0x32,
0x7b, 0xbf, 0xf6, 0xc9, 0x97, 0xf3, 0xb0, 0x99, 0x41, 0x28, 0xdf, 0xb8, 0xb0, 0x96, 0x1e, 0x25,
0xb4, 0x93, 0xf6, 0xd2, 0xd1, 0x94, 0x65, 0x4c, 0x43, 0x63, 0x27, 0x60, 0xd1, 0x4d, 0xa3, 0xb0,
0x6d, 0xe1, 0x4a, 0x6a, 0xf8, 0x88, 0x51, 0x00, 0x5b, 0xd9, 0x59, 0x65, 0xdc, 0xbf, 0xa0, 0x93,
0xb5, 0xcf, 0x07, 0xdf, 0xe5, 0x9e, 0x86, 0x64, 0x15, 0xb7, 0xe1, 0x8d, 0x41, 0x0e, 0x6a, 0xa7,
0x0e, 0xb5, 0x1c, 0xd1, 0xf8, 0xc8, 0xae, 0x27, 0xfd, 0x32, 0xe6, 0x7f, 0x26, 0x8f, 0x57, 0xf9,
0x9e, 0x91, 0x1f, 0xcf, 0x0a, 0x1f, 0x58, 0x3b, 0x14, 0x5e, 0x9b, 0x79, 0x6b, 0xce, 0x41, 0x7b,
0xe6, 0x41, 0x95, 0xbd, 0xd7, 0x27, 0x0a, 0xa5, 0xf9, 0xd5, 0x8c, 0x3e, 0xb9, 0x86, 0x3b, 0xab,
0x4d, 0xaf, 0x99, 0x78, 0x0f, 0xb4, 0x82, 0xd3, 0x50, 0x3b, 0xeb, 0x77, 0x16, 0x6c, 0x66, 0x10,
0xca, 0x59, 0x77, 0xd2, 0xfb, 0x50, 0xf9, 0x4c, 0x36, 0xb7, 0xa1, 0x33, 0x56, 0x06, 0x4b, 0xb9,
0x2b, 0x03, 0xf4, 0x36, 0xac, 0x89, 0x8a, 0x9c, 0x0c, 0xed, 0xaa, 0xa4, 0x57, 0x04, 0x78, 0x32,
0xae, 0xdb, 0x4f, 0x61, 0x9d, 0x97, 0x34, 0x4c, 0x78, 0x3c, 0xeb, 0x52, 0x76, 0x0f, 0x4a, 0xa2,
0x24, 0x8e, 0xc6, 0xbd, 0x0b, 0x7a, 0xa3, 0xab, 0x59, 0x91, 0xc3, 0x3a, 0x12, 0x64, 0x1f, 0x01,
0x32, 0xf9, 0x94, 0x16, 0x4f, 0x15, 0x63, 0x24, 0xc0, 0x3a, 0xde, 0x6a, 0xa9, 0x72, 0xaa, 0x58,
0xc4, 0x69, 0xf2, 0xef, 0xf8, 0xe1, 0x1f, 0x2c, 0x28, 0x99, 0x0f, 0x7d, 0x54, 0x85, 0x52, 0xc7,
0x69, 0x1f, 0xb4, 0xda, 0x9f, 0xb8, 0xc7, 0x1d, 0xa7, 0x5d, 0x9d, 0x43, 0x08, 0x2a, 0x1a, 0xf2,
0xb2, 0x73, 0x50, 0xef, 0x3a, 0x55, 0x0b, 0xad, 0xc0, 0x82, 0xc0, 0x16, 0x50, 0x11, 0x96, 0x9d,
0xcf, 0x3a, 0x2d, 0xec, 0x1c, 0x54, 0xe7, 0x4d, 0xd2, 0xfd, 0xa3, 0xe3, 0x13, 0xe7, 0xa0, 0xba,
0x80, 0x00, 0x96, 0xd4, 0xdf, 0x8b, 0xa8, 0x06, 0x6b, 0xd8, 0xd9, 0x3f, 0x7e, 0xe5, 0xe0, 0x5f,
0xba, 0x87, 0xf5, 0xd6, 0x91, 0x73, 0x50, 0x5d, 0x42, 0xeb, 0x50, 0xd6, 0x4c, 0x8d, 0x7a, 0x77,
0xbf, 0x59, 0x5d, 0x7e, 0xd8, 0x51, 0x53, 0x9d, 0x14, 0xa9, 0x08, 0xcb, 0x1d, 0xec, 0x74, 0xea,
0xd8, 0xa9, 0xce, 0xa1, 0x12, 0xac, 0xd4, 0xf7, 0xf7, 0x9d, 0x4e, 0xd7, 0x39, 0xa8, 0x5a, 0xfc,
0x0b, 0x3b, 0x3f, 0x77, 0xf6, 0xf9, 0x57, 0x81, 0x5f, 0x75, 0xd2, 0xfa, 0xa4, 0x2d, 0x44, 0x29,
0xc3, 0xea, 0x61, 0xab, 0x5d, 0x3f, 0x6a, 0x7d, 0xce, 0xa5, 0x78, 0xf8, 0x37, 0x0b, 0xd6, 0xa7,
0xc6, 0x2f, 0xae, 0x46, 0xfb, 0xb8, 0xcd, 0x8f, 0xdd, 0x02, 0x74, 0xe2, 0xe0, 0x57, 0x0e, 0x76,
0x5f, 0xb4, 0x4e, 0x1a, 0x4e, 0xb3, 0xfe, 0xaa, 0x75, 0x8c, 0xab, 0x16, 0xda, 0x81, 0x2d, 0x21,
0x94, 0xfb, 0xca, 0xc1, 0x27, 0xad, 0xe3, 0x36, 0x47, 0xbf, 0x10, 0x52, 0x16, 0xd0, 0x2e, 0xbc,
0xd6, 0xa9, 0xe3, 0x6e, 0xab, 0x7e, 0xe4, 0x4a, 0x21, 0xdc, 0xfd, 0xe3, 0xa3, 0xa3, 0x7a, 0xd7,
0xc1, 0xf5, 0xa3, 0xea, 0x3c, 0xba, 0x07, 0xbb, 0x19, 0xf4, 0xc1, 0xcb, 0xce, 0x51, 0x6b, 0xbf,
0xde, 0x75, 0xdc, 0x8e, 0xe3, 0xe0, 0xea, 0x02, 0x7a, 0x00, 0x6f, 0x66, 0x4f, 0x68, 0xd6, 0xdb,
0x6d, 0xe7, 0xc8, 0x3d, 0x7c, 0x29, 0x2d, 0xa2, 0xac, 0xb4, 0xb8, 0xf7, 0x9f, 0x22, 0x2c, 0x75,
0xc5, 0x5b, 0x1a, 0x3d, 0x87, 0x92, 0xf9, 0x2b, 0x09, 0x4a, 0x92, 0x23, 0xe7, 0x37, 0x9a, 0x9d,
0xdd, 0x19, 0xd8, 0xc9, 0xce, 0xa4, 0x68, 0xfc, 0x4e, 0x85, 0x6e, 0x1b, 0xbb, 0x92, 0xec, 0xfe,
0x75, 0x67, 0x6a, 0x65, 0xc7, 0x45, 0x31, 0x7f, 0xff, 0x30, 0x44, 0xc9, 0xf9, 0x39, 0xc5, 0x10,
0x25, 0xf7, 0x47, 0x93, 0xe7, 0x50, 0x32, 0xd7, 0xe5, 0xc6, 0x61, 0x39, 0xbf, 0x07, 0x18, 0x87,
0xe5, 0xee, 0xd8, 0xbb, 0xb0, 0x96, 0xd9, 0x58, 0xa3, 0x64, 0x9f, 0x9f, 0xbf, 0x5d, 0xdf, 0xb9,
0x3b, 0x9b, 0x40, 0x9d, 0xfa, 0x29, 0x54, 0xd2, 0x5b, 0x61, 0xf4, 0x46, 0x52, 0x99, 0xf2, 0x76,
0xd6, 0x3b, 0x77, 0x66, 0xe2, 0x13, 0xad, 0xcd, 0x85, 0xa9, 0xa1, 0x75, 0xce, 0x56, 0xd8, 0xd0,
0x3a, 0x77, 0xcb, 0xfa, 0x29, 0x54, 0xd2, 0x0b, 0x4b, 0x43, 0xbe, 0xdc, 0x7d, 0xa9, 0x21, 0x5f,
0xfe, 0xa6, 0x93, 0x1b, 0x32, 0xf3, 0xf4, 0x30, 0x0c, 0x99, 0xff, 0x5c, 0x31, 0x0c, 0x39, 0xeb,
0xd5, 0xd2, 0x84, 0xa2, 0xb1, 0xc1, 0x33, 0xc2, 0x6e, 0x7a, 0x7b, 0xb8, 0xf3, 0x7a, 0x3e, 0x52,
0x9d, 0xe4, 0x00, 0x24, 0x7b, 0x32, 0xb4, 0x93, 0x0a, 0xb1, 0xd4, 0x32, 0x6e, 0xe7, 0x76, 0x2e,
0x2e, 0x11, 0xc8, 0xd8, 0x6e, 0x19, 0x02, 0x4d, 0xaf, 0xca, 0x0c, 0x81, 0x72, 0x16, 0x62, 0x5c,
0xa0, 0xe4, 0x15, 0x65, 0x08, 0x34, 0xf5, 0xde, 0x32, 0x04, 0xca, 0x79, 0x76, 0x1d, 0xab, 0xd9,
0x34, 0xe9, 0xfa, 0xbb, 0xb3, 0xba, 0xba, 0x3c, 0xed, 0x8d, 0xaf, 0x6f, 0xfa, 0xa8, 0x0d, 0xe5,
0x54, 0x07, 0x34, 0xce, 0xcb, 0x6b, 0x99, 0xc6, 0x79, 0xf9, 0x8d, 0xb3, 0x0d, 0x65, 0x01, 0x3c,
0x09, 0xc8, 0x28, 0x3e, 0x0f, 0x99, 0x71, 0x5e, 0x0a, 0x3e, 0x7d, 0x5e, 0x06, 0xad, 0xce, 0xfb,
0x18, 0xca, 0x9f, 0x50, 0x36, 0x99, 0x53, 0x63, 0x94, 0xfc, 0x72, 0x97, 0x1a, 0x86, 0x77, 0x6e,
0x4d, 0xc1, 0xd5, 0x09, 0x3f, 0x86, 0x25, 0x39, 0xce, 0x1b, 0xac, 0xa9, 0xa7, 0x82, 0xc1, 0x9a,
0x99, 0xfb, 0x0f, 0xa1, 0x98, 0xb4, 0x48, 0x33, 0x8c, 0xa6, 0x7a, 0xb4, 0xe1, 0xb5, 0x9c, 0x3e,
0xcc, 0x13, 0xd0, 0xd4, 0x2e, 0x46, 0x33, 0xd4, 0x8e, 0x73, 0x12, 0x30, 0x83, 0x97, 0x47, 0x36,
0xde, 0xfe, 0xfc, 0xcd, 0x33, 0x9f, 0x9d, 0x8f, 0x7b, 0x8f, 0xfa, 0xe1, 0xf0, 0xf1, 0xc0, 0x3f,
0x3b, 0x67, 0x81, 0x1f, 0x9c, 0x0d, 0x48, 0x2f, 0x7e, 0xcc, 0x59, 0x1f, 0x2b, 0xfe, 0xde, 0x92,
0xf8, 0xd7, 0x83, 0x1f, 0xfe, 0x37, 0x00, 0x00, 0xff, 0xff, 0x4c, 0x3a, 0x88, 0x58, 0xa5, 0x20,
0x00, 0x00,
0x2c, 0x44, 0xcb, 0xa3, 0x30, 0x1c, 0x44, 0xa3, 0xfe, 0xce, 0x1b, 0x64, 0xdc, 0x67, 0x7e, 0x18,
0x50, 0x1a, 0x45, 0xa3, 0xfe, 0xe3, 0xe4, 0x4b, 0x12, 0xda, 0x5f, 0x59, 0x80, 0x5a, 0x81, 0xcf,
0xea, 0xfd, 0x7e, 0x38, 0x0e, 0x18, 0xa6, 0xbf, 0x1a, 0xd3, 0x98, 0xa1, 0xff, 0x83, 0x32, 0x91,
0x10, 0xf7, 0x92, 0x0c, 0xc6, 0x74, 0xdb, 0xba, 0x6b, 0xdd, 0x5f, 0xc0, 0x25, 0x05, 0x7c, 0xc5,
0x61, 0xe8, 0x01, 0xac, 0x91, 0x5e, 0x1c, 0x0e, 0xc6, 0x8c, 0xba, 0xe7, 0xd4, 0x3f, 0x3b, 0x67,
0xdb, 0x85, 0xbb, 0xd6, 0xfd, 0x72, 0x73, 0x0e, 0x57, 0x34, 0xa2, 0x29, 0xe0, 0x9c, 0x34, 0xa2,
0x03, 0xc2, 0xfc, 0xcb, 0x09, 0xe9, 0xbc, 0x26, 0xd5, 0x08, 0x45, 0x7a, 0x0f, 0x8a, 0xfd, 0x30,
0x38, 0x75, 0x19, 0x89, 0xce, 0x28, 0xdb, 0x5e, 0x10, 0x64, 0x16, 0x06, 0x0e, 0xec, 0x0a, 0x58,
0xa3, 0x0a, 0x15, 0x2d, 0x1d, 0xbd, 0x1e, 0xf9, 0xd1, 0x4d, 0x63, 0x09, 0x16, 0x4e, 0x29, 0x8d,
0x6d, 0x0a, 0xb5, 0x4f, 0xc7, 0x21, 0xa3, 0xdf, 0x47, 0x9d, 0xcc, 0xc5, 0x5a, 0x15, 0xf3, 0x62,
0x7d, 0xcd, 0x15, 0x6c, 0xa4, 0xaf, 0x89, 0x47, 0x61, 0x10, 0x53, 0xf4, 0x23, 0x78, 0x6d, 0xe8,
0x07, 0x34, 0x72, 0x4f, 0x29, 0x75, 0x23, 0xc2, 0xa8, 0x1b, 0x13, 0xe6, 0x8e, 0x68, 0xe4, 0x5e,
0x5c, 0xa9, 0x3b, 0x37, 0x04, 0xc1, 0x21, 0xa5, 0x98, 0x30, 0x7a, 0x42, 0x58, 0x87, 0x46, 0xcf,
0xaf, 0xd0, 0x5b, 0xb0, 0x96, 0x30, 0xb2, 0x90, 0x91, 0x81, 0xb8, 0x7f, 0x01, 0x97, 0x35, 0x79,
0x97, 0x03, 0xed, 0xa7, 0x50, 0x3b, 0xf2, 0x63, 0xed, 0xad, 0x58, 0xeb, 0x77, 0x07, 0x8a, 0xa4,
0x2f, 0x8c, 0x1b, 0x06, 0x83, 0x1b, 0x71, 0xd3, 0x0a, 0x06, 0x09, 0x3a, 0x0e, 0x06, 0x37, 0xf6,
0x01, 0x6c, 0xa4, 0xf9, 0x94, 0xc0, 0xef, 0xc2, 0x8a, 0xb2, 0x41, 0xbc, 0x6d, 0xdd, 0x9d, 0xbf,
0x5f, 0xdc, 0xab, 0x3e, 0x52, 0xa1, 0xf3, 0x48, 0x2b, 0x37, 0xa1, 0xb0, 0x3f, 0x82, 0xa5, 0xe3,
0x31, 0x1b, 0x8d, 0x19, 0xba, 0x0d, 0xab, 0xc2, 0x90, 0x5c, 0x3f, 0xa5, 0xd8, 0x8a, 0x00, 0x9c,
0x10, 0x86, 0xb6, 0x61, 0x99, 0x78, 0x5e, 0x44, 0xe3, 0x58, 0x28, 0xb1, 0x8a, 0xf5, 0xa7, 0xfd,
0x5b, 0x0b, 0xca, 0xf2, 0x84, 0x5f, 0xf8, 0xec, 0xfc, 0x90, 0x52, 0x93, 0xd6, 0x4a, 0xd1, 0x7e,
0x0b, 0x77, 0xa0, 0x47, 0x50, 0xcb, 0x33, 0x34, 0x8f, 0xac, 0x85, 0xe6, 0x1c, 0x5e, 0x3b, 0x4d,
0x5b, 0x79, 0xe2, 0xbe, 0x7d, 0xd8, 0x92, 0x52, 0xc4, 0x5c, 0x8c, 0xd6, 0x70, 0x34, 0xf0, 0xfb,
0x3e, 0xe3, 0xe2, 0x3c, 0x80, 0xe5, 0x50, 0x62, 0x94, 0x39, 0xd6, 0x26, 0xe6, 0x90, 0x1c, 0x58,
0xe3, 0xed, 0x7f, 0x58, 0x50, 0xdb, 0x1f, 0x84, 0x71, 0x36, 0xd6, 0x76, 0x01, 0x64, 0x2a, 0xba,
0x17, 0x54, 0xba, 0xa2, 0x84, 0x57, 0x25, 0xe4, 0x39, 0xbd, 0x41, 0x1f, 0xc3, 0x9a, 0x3c, 0xc1,
0xbd, 0xf2, 0xd9, 0x39, 0xf7, 0xb7, 0x50, 0xad, 0xb8, 0xb7, 0x95, 0xb9, 0x49, 0x59, 0xa8, 0x39,
0x87, 0xcb, 0x61, 0xca, 0x64, 0x3f, 0x49, 0x64, 0x9c, 0x17, 0x9c, 0x77, 0x32, 0x9c, 0x59, 0xad,
0x9a, 0x73, 0x13, 0xa9, 0x1b, 0x35, 0x58, 0x3f, 0x1d, 0x07, 0x5e, 0xec, 0x7a, 0x34, 0x66, 0x7e,
0x40, 0x78, 0x35, 0xb0, 0x9f, 0xc0, 0x46, 0x5a, 0x13, 0x15, 0x1d, 0xbb, 0x00, 0x7d, 0x0e, 0x77,
0xd9, 0xb5, 0xef, 0x69, 0x55, 0x04, 0xa4, 0x7b, 0xed, 0x7b, 0xf6, 0xef, 0x2d, 0xd8, 0xe2, 0x57,
0x79, 0x11, 0xb9, 0xfa, 0x6e, 0x46, 0x30, 0xcc, 0x5c, 0xf8, 0x7a, 0x33, 0xa3, 0x77, 0xbf, 0xc6,
0xc7, 0x53, 0x1e, 0xb6, 0xbf, 0x80, 0x5b, 0x53, 0x12, 0x29, 0x65, 0x1e, 0xc2, 0xb2, 0x0a, 0x64,
0x21, 0x4f, 0x5e, 0xa4, 0x6b, 0x02, 0x5e, 0x2f, 0xae, 0xd4, 0x31, 0x52, 0xf7, 0x82, 0xd0, 0xa0,
0xa4, 0x81, 0x42, 0xfd, 0xdf, 0x58, 0xb0, 0x79, 0x40, 0x47, 0x61, 0x3c, 0x55, 0x3d, 0xbf, 0x41,
0xfb, 0x5d, 0x00, 0x32, 0x14, 0xc5, 0x88, 0x67, 0x8f, 0xcc, 0xf3, 0x55, 0x09, 0xe1, 0xe9, 0xf3,
0xdd, 0x34, 0x3e, 0x83, 0xad, 0xac, 0x10, 0xdf, 0x43, 0xe1, 0x7b, 0x50, 0xf2, 0xe4, 0x29, 0xa6,
0xbe, 0x45, 0x05, 0x13, 0xea, 0x7e, 0x65, 0x41, 0x0d, 0xd3, 0x80, 0x66, 0x5d, 0x2d, 0x6a, 0x8f,
0xac, 0xad, 0x89, 0xb6, 0xa0, 0x40, 0xd2, 0xd9, 0x49, 0x9b, 0x90, 0xe5, 0x7a, 0xba, 0x4d, 0x38,
0x02, 0x9e, 0x6a, 0x13, 0x8a, 0x74, 0xaa, 0x4d, 0x28, 0xd2, 0x19, 0x56, 0x5a, 0xc8, 0xb5, 0xd2,
0x74, 0xc7, 0xb0, 0x29, 0x6c, 0xa4, 0xb5, 0xf9, 0x7e, 0x56, 0x8b, 0xf8, 0x19, 0x64, 0x90, 0xb2,
0x9a, 0x82, 0x09, 0xab, 0x79, 0xb0, 0xd9, 0x18, 0x0f, 0x47, 0x8a, 0x95, 0x97, 0xfd, 0x6f, 0x17,
0x23, 0x33, 0xd4, 0x2b, 0xe4, 0x07, 0xc1, 0x36, 0x6c, 0x65, 0x6f, 0x91, 0xea, 0xd8, 0x7f, 0x2c,
0xc0, 0xb2, 0x02, 0x7f, 0xd3, 0x95, 0xff, 0x0f, 0x2b, 0x3c, 0xe9, 0x42, 0x3f, 0x60, 0xaa, 0x24,
0xad, 0x9b, 0x59, 0xd9, 0xe1, 0x08, 0x3c, 0x21, 0x41, 0x1b, 0xb0, 0x28, 0x7b, 0xa9, 0x0c, 0x4c,
0xf9, 0x81, 0xde, 0x81, 0x75, 0x72, 0x49, 0xfc, 0x01, 0xe9, 0x0d, 0xa8, 0xdb, 0x23, 0x03, 0x12,
0xf4, 0xa9, 0x72, 0x4a, 0x75, 0x82, 0x68, 0x48, 0x38, 0x27, 0x16, 0xde, 0x10, 0x55, 0x48, 0xcf,
0x05, 0x8b, 0xdc, 0xe1, 0xb8, 0x9a, 0x20, 0xd4, 0x5c, 0xf0, 0x0e, 0x2c, 0xc6, 0x8c, 0x30, 0xba,
0xbd, 0x74, 0xd7, 0xba, 0x5f, 0xd9, 0xdb, 0xcc, 0xba, 0xe5, 0x84, 0x23, 0xb1, 0xa4, 0xe1, 0x41,
0x39, 0x20, 0x8c, 0xc6, 0x2a, 0x9c, 0x97, 0x65, 0x50, 0x4a, 0x90, 0xf0, 0x4b, 0x1f, 0xd0, 0xc9,
0xb8, 0x37, 0xf4, 0xd9, 0x71, 0xe4, 0xd1, 0x48, 0x3b, 0xe5, 0x2e, 0xcc, 0x93, 0xf8, 0x42, 0x39,
0xbe, 0x94, 0xdc, 0x10, 0x5f, 0x34, 0xe7, 0x30, 0x47, 0x71, 0x8a, 0x9e, 0xf2, 0xb4, 0x49, 0xd1,
0xf0, 0x3d, 0x4e, 0xd1, 0xf3, 0xbd, 0xc6, 0x2a, 0x2c, 0x7b, 0x94, 0x11, 0x7f, 0x10, 0xdb, 0x5f,
0x5a, 0x50, 0x4b, 0xdd, 0xa2, 0x62, 0xec, 0x43, 0x28, 0xfb, 0xc1, 0x25, 0x19, 0xf8, 0x9e, 0x1b,
0x72, 0x84, 0xba, 0x30, 0x51, 0xa9, 0x25, 0xb1, 0x82, 0xab, 0x39, 0x87, 0x4b, 0xbe, 0xf1, 0x8d,
0xf6, 0x60, 0x83, 0xf4, 0xfb, 0x74, 0xc4, 0xa8, 0x62, 0x77, 0x83, 0x90, 0x5b, 0x59, 0x44, 0x5f,
0x73, 0x0e, 0x23, 0x8d, 0x15, 0xe4, 0x6d, 0x8e, 0x33, 0x85, 0x6a, 0xc3, 0x3a, 0x1f, 0x05, 0x04,
0x72, 0x32, 0x40, 0x6c, 0xc3, 0xf2, 0x25, 0x8d, 0x7a, 0x61, 0x4c, 0xd5, 0xf0, 0xa0, 0x3f, 0xb3,
0xa3, 0x45, 0x61, 0x6a, 0xb4, 0xf8, 0x0c, 0x90, 0x79, 0x9e, 0x52, 0xf1, 0x2e, 0x2c, 0x90, 0xf8,
0x42, 0x77, 0xd1, 0x94, 0x29, 0xb1, 0xc0, 0x70, 0x8a, 0x9e, 0xef, 0xe9, 0x06, 0x90, 0x32, 0x25,
0x16, 0x18, 0xfb, 0x09, 0xa0, 0x7d, 0x1e, 0x27, 0x83, 0x94, 0x8f, 0xee, 0x40, 0xd1, 0xd4, 0x5a,
0xd5, 0x9b, 0x70, 0xa2, 0xab, 0xbd, 0x09, 0xb5, 0x14, 0x9b, 0xca, 0x84, 0x7f, 0xcf, 0xc3, 0xa2,
0x34, 0xe0, 0x37, 0x97, 0x67, 0x91, 0x76, 0xa7, 0xfe, 0x35, 0x95, 0x9e, 0x2e, 0xe3, 0x55, 0x0e,
0x39, 0xe4, 0x00, 0x54, 0x85, 0x79, 0x32, 0x64, 0x2a, 0xea, 0xf9, 0x9f, 0xe8, 0x67, 0xb0, 0x3b,
0x24, 0xd7, 0x6e, 0x8f, 0xb0, 0xfe, 0xb9, 0x3b, 0xbb, 0x28, 0xdd, 0x1a, 0x92, 0xeb, 0x06, 0xa7,
0xc9, 0x0e, 0x7f, 0x19, 0x8d, 0x16, 0xb3, 0x1a, 0xa1, 0x07, 0xe9, 0xd0, 0xaf, 0x25, 0x69, 0xc9,
0x69, 0x52, 0x81, 0xbf, 0x01, 0x8b, 0xe3, 0xc0, 0x67, 0xb1, 0x08, 0xf9, 0x32, 0x96, 0x1f, 0x3c,
0xd1, 0xc4, 0x1f, 0xee, 0x38, 0x38, 0x1d, 0x0f, 0x4e, 0xfd, 0xc1, 0x80, 0x7a, 0xdb, 0x2b, 0x32,
0xd1, 0x04, 0xe2, 0x65, 0x02, 0x47, 0xef, 0x02, 0x8a, 0x68, 0x4c, 0xa3, 0x4b, 0xea, 0xb9, 0xc9,
0x90, 0xb7, 0x2a, 0x73, 0x58, 0x63, 0x5e, 0xe9, 0x61, 0x6f, 0x0f, 0x36, 0xfb, 0x11, 0x95, 0x19,
0xcc, 0xfc, 0x21, 0x8d, 0x19, 0x19, 0x8e, 0xdc, 0x20, 0xde, 0x06, 0xc1, 0x50, 0xd3, 0xc8, 0xae,
0xc6, 0xb5, 0xb9, 0x38, 0x4b, 0xf4, 0x92, 0xf2, 0x99, 0xb3, 0x28, 0x9c, 0x9f, 0x51, 0xc8, 0xe1,
0x38, 0xac, 0x48, 0xd4, 0x68, 0xec, 0x4a, 0xf9, 0x87, 0xdc, 0x7e, 0xdb, 0x25, 0x21, 0x39, 0x1f,
0x8d, 0x5f, 0x72, 0xe8, 0x0b, 0x0e, 0xb4, 0xff, 0x62, 0xc1, 0x7c, 0xc3, 0xf7, 0xd0, 0xfd, 0x49,
0xa8, 0xab, 0xb4, 0xaa, 0xa4, 0x4f, 0xc7, 0x1a, 0xcd, 0x45, 0x1f, 0x50, 0x12, 0x53, 0xd7, 0x1b,
0xab, 0x12, 0xd4, 0x1b, 0x84, 0xfd, 0x8b, 0x58, 0xf9, 0xbc, 0x26, 0x90, 0x07, 0x0a, 0xd7, 0x10,
0x28, 0x95, 0x28, 0xb1, 0x1f, 0x06, 0xb2, 0x33, 0x61, 0xfd, 0x89, 0x9e, 0x00, 0x17, 0xc8, 0x0d,
0x42, 0x8f, 0xba, 0xcc, 0xa7, 0x91, 0xf0, 0x7a, 0xc5, 0xa8, 0xa1, 0xed, 0xd0, 0xa3, 0x5d, 0x9f,
0x46, 0xb8, 0x38, 0xf4, 0x03, 0xfd, 0x61, 0xff, 0x1a, 0xe6, 0xeb, 0xf1, 0xc5, 0xff, 0x4a, 0x6a,
0xfb, 0xef, 0x16, 0x40, 0x62, 0x74, 0xde, 0xd1, 0x52, 0x4e, 0xe4, 0xb2, 0xcc, 0xe3, 0x22, 0x33,
0x9c, 0x77, 0x1b, 0x56, 0x85, 0x67, 0xdc, 0x98, 0x45, 0x6a, 0xbe, 0x5f, 0x11, 0x80, 0x13, 0x16,
0xa1, 0x67, 0x50, 0x12, 0x71, 0xe8, 0xf6, 0xcf, 0x49, 0x70, 0x46, 0xd5, 0x80, 0x9a, 0x14, 0xb6,
0x97, 0x23, 0x8f, 0x30, 0xea, 0x89, 0xcb, 0x9a, 0x73, 0xb8, 0x28, 0x88, 0xf7, 0x05, 0x2d, 0x7a,
0x0c, 0xcb, 0xc2, 0xbd, 0xd4, 0x13, 0xa6, 0x33, 0xc3, 0x42, 0x78, 0x58, 0x33, 0x69, 0xaa, 0xc6,
0x32, 0x2c, 0x8a, 0x8b, 0xed, 0x3f, 0x5b, 0x50, 0x32, 0x4f, 0x46, 0xcf, 0xa0, 0x32, 0x8a, 0xe8,
0xa5, 0x1f, 0x8e, 0x63, 0x57, 0x66, 0x8e, 0x35, 0x3b, 0x73, 0xca, 0x9a, 0x54, 0x7c, 0xa2, 0xf7,
0x60, 0x35, 0xa0, 0x57, 0x8a, 0xad, 0x30, 0x9b, 0x6d, 0x25, 0xa0, 0x57, 0x92, 0xe3, 0x1e, 0x94,
0x64, 0x74, 0xaa, 0xc4, 0x92, 0x26, 0x2e, 0x0a, 0xd8, 0xa1, 0x00, 0xd9, 0xff, 0xb4, 0x00, 0x12,
0x25, 0xd0, 0xfb, 0x50, 0x14, 0x4a, 0xcc, 0x10, 0x4e, 0x50, 0xca, 0x5b, 0x60, 0x38, 0xf9, 0x7b,
0xea, 0x9e, 0xc2, 0xd4, 0x3d, 0x7c, 0x70, 0x55, 0xd6, 0x51, 0x9d, 0x65, 0x5e, 0x0e, 0xae, 0x0a,
0x28, 0xeb, 0xdf, 0x47, 0x50, 0x8e, 0xe8, 0x17, 0xb4, 0xcf, 0xdc, 0x88, 0x92, 0x38, 0x0c, 0x54,
0xa4, 0xee, 0xa4, 0xef, 0xc7, 0x82, 0x04, 0x0b, 0x0a, 0x5c, 0x8a, 0x8c, 0x2f, 0x3e, 0x6e, 0x60,
0xda, 0x0f, 0x2f, 0x69, 0x94, 0x79, 0x88, 0xda, 0xc7, 0x70, 0x6b, 0x0a, 0xa3, 0x3a, 0xc2, 0xfb,
0xb0, 0x15, 0x8c, 0x87, 0x6e, 0x24, 0xd1, 0xd4, 0x73, 0x8d, 0x87, 0x27, 0xd7, 0x63, 0x23, 0x18,
0x0f, 0xb1, 0x46, 0x6a, 0x6e, 0xbb, 0x06, 0xeb, 0x75, 0xb9, 0xb3, 0x48, 0x66, 0x27, 0xbb, 0x03,
0xc8, 0x04, 0xaa, 0x0b, 0x9e, 0x41, 0x99, 0x5e, 0xd3, 0xfe, 0x58, 0xe4, 0x04, 0x7f, 0x57, 0x65,
0xbb, 0xaa, 0xa3, 0xb1, 0x9c, 0xab, 0x44, 0x8d, 0x2f, 0xfb, 0x5f, 0x0b, 0xb0, 0x78, 0xc4, 0x13,
0x07, 0x3d, 0x85, 0x32, 0x8f, 0xdd, 0x80, 0x0e, 0x5c, 0x39, 0x0a, 0x59, 0xb3, 0x46, 0xa1, 0x92,
0xa2, 0x13, 0x5f, 0xbc, 0x4c, 0x69, 0x3e, 0x32, 0x34, 0x27, 0x7b, 0x7d, 0x5c, 0x7d, 0x28, 0xa6,
0xfb, 0xa7, 0x70, 0x4b, 0xd3, 0x65, 0x13, 0x58, 0xc6, 0xcd, 0xa6, 0x42, 0x67, 0x52, 0xf8, 0x3d,
0xd8, 0xd0, 0x7c, 0x32, 0xfd, 0xd5, 0x7c, 0x2c, 0xf6, 0x23, 0x18, 0x29, 0x9c, 0xd0, 0x41, 0x4d,
0xc8, 0x77, 0xa0, 0x38, 0x8a, 0xe8, 0xd0, 0x1f, 0x0f, 0x85, 0x34, 0x8b, 0x42, 0x1a, 0x50, 0x20,
0x2e, 0xca, 0x43, 0x3e, 0x7e, 0x19, 0x06, 0x13, 0x64, 0x4b, 0x72, 0xc2, 0x34, 0xad, 0xc3, 0x69,
0x6d, 0x61, 0x16, 0x3f, 0xa1, 0x5b, 0x16, 0x74, 0x45, 0x01, 0x54, 0x34, 0x8f, 0xa0, 0xd6, 0x1f,
0x50, 0x12, 0xf9, 0xc1, 0x99, 0x6c, 0x81, 0xa3, 0xc8, 0xef, 0x53, 0xd1, 0x67, 0x16, 0xf0, 0xba,
0x46, 0xf1, 0xd6, 0xd7, 0xe1, 0x08, 0x74, 0x1f, 0xaa, 0xb2, 0xef, 0x89, 0x4e, 0x2b, 0x58, 0x54,
0x9b, 0xa9, 0x08, 0xb8, 0xe8, 0xb7, 0x58, 0x8d, 0x73, 0x66, 0x87, 0x84, 0xa9, 0x0e, 0xf9, 0x3a,
0xac, 0x8e, 0xc6, 0x51, 0xff, 0x9c, 0xc4, 0xd4, 0xdb, 0x2e, 0x8a, 0x19, 0x25, 0x01, 0xa0, 0x27,
0x89, 0xcd, 0x23, 0x3a, 0x0c, 0x19, 0x95, 0x55, 0x9a, 0x77, 0xff, 0x92, 0x38, 0x4a, 0x9b, 0x16,
0x0b, 0x2c, 0xaf, 0xcd, 0x7c, 0x10, 0xf8, 0x29, 0xac, 0x6b, 0xb6, 0xa4, 0xaa, 0x97, 0x67, 0x55,
0x75, 0xed, 0xfe, 0x49, 0x65, 0x6f, 0x42, 0x59, 0xb8, 0x63, 0x32, 0x64, 0xdd, 0x86, 0x55, 0x39,
0x23, 0xf0, 0xb1, 0x87, 0x0f, 0x46, 0x25, 0xbc, 0x22, 0x00, 0x2d, 0x2f, 0x46, 0x3b, 0xc6, 0x26,
0xa6, 0x20, 0x71, 0x93, 0xbd, 0xcb, 0x9f, 0x2c, 0xa8, 0xe8, 0xa3, 0x54, 0xb0, 0xbf, 0x05, 0x4b,
0x22, 0x0c, 0xf4, 0x84, 0x95, 0xb4, 0x0b, 0x41, 0x88, 0x15, 0x16, 0x3d, 0x86, 0x0d, 0xb1, 0x4e,
0x12, 0x41, 0x49, 0x49, 0x14, 0x50, 0xcf, 0x88, 0xcd, 0x75, 0x81, 0xab, 0x0f, 0x99, 0x23, 0x30,
0xdc, 0x89, 0xef, 0x00, 0x4a, 0x18, 0x46, 0xc4, 0x97, 0xe4, 0xea, 0xf1, 0xa9, 0xc9, 0x3b, 0xc4,
0xe7, 0xc4, 0xf6, 0x1a, 0x94, 0xbb, 0xe1, 0x05, 0x0d, 0x26, 0xf9, 0xff, 0x21, 0x54, 0x34, 0x60,
0xf2, 0x9e, 0x5a, 0x62, 0x02, 0xa2, 0x04, 0x45, 0x89, 0xa0, 0x31, 0x61, 0x82, 0x18, 0x2b, 0x0a,
0xfb, 0xaf, 0x05, 0x58, 0x9d, 0x40, 0x79, 0x2d, 0xeb, 0xf1, 0x40, 0x1f, 0x92, 0x3e, 0x89, 0xc2,
0x30, 0x50, 0x93, 0x5a, 0x89, 0x03, 0x5f, 0x28, 0x18, 0xaf, 0x89, 0x23, 0x72, 0x33, 0xe4, 0xfd,
0xe8, 0x9c, 0xc4, 0xe7, 0xfa, 0x09, 0xa6, 0x60, 0x4d, 0x12, 0x9f, 0xa3, 0x07, 0x50, 0xd5, 0x24,
0xa3, 0x88, 0xfa, 0x43, 0xa2, 0xfa, 0x52, 0x09, 0xaf, 0x29, 0x78, 0x47, 0x81, 0x79, 0x44, 0xaa,
0x97, 0xb9, 0xd0, 0x7c, 0xc8, 0x55, 0x5f, 0x10, 0x2d, 0xb0, 0x22, 0xe1, 0x5c, 0xf1, 0x17, 0x31,
0x61, 0xe8, 0x07, 0xb0, 0x19, 0x85, 0x63, 0xc6, 0x43, 0x9d, 0x67, 0x44, 0x42, 0xbe, 0x28, 0xc8,
0x91, 0x42, 0x1e, 0x52, 0x3a, 0x61, 0x51, 0xbd, 0xd5, 0x15, 0x13, 0x11, 0xf5, 0x44, 0xa6, 0xa9,
0xde, 0xba, 0x2f, 0x41, 0xbc, 0x4f, 0x8b, 0xb4, 0xa6, 0xf2, 0xc9, 0xb2, 0x82, 0xf5, 0x27, 0x67,
0x8e, 0x59, 0x18, 0x91, 0x33, 0xea, 0x06, 0x64, 0x28, 0x93, 0x6a, 0x95, 0xf7, 0x4f, 0x01, 0x6b,
0x93, 0x21, 0xb5, 0xb7, 0x60, 0xe3, 0xc8, 0xec, 0xfd, 0xda, 0x27, 0x5f, 0xce, 0xc3, 0x66, 0x06,
0xa1, 0x7c, 0xe3, 0xc2, 0x5a, 0x7a, 0x94, 0xd0, 0x4e, 0xda, 0x4b, 0x47, 0x53, 0x96, 0x31, 0x0d,
0x8d, 0x9d, 0x80, 0x45, 0x37, 0x8d, 0xc2, 0xb6, 0x85, 0x2b, 0xa9, 0xe1, 0x23, 0x46, 0x01, 0x6c,
0x65, 0x67, 0x95, 0x71, 0xff, 0x82, 0x4e, 0xd6, 0x3e, 0x1f, 0x7c, 0x97, 0x7b, 0x1a, 0x92, 0x55,
0xdc, 0x86, 0x37, 0x06, 0x39, 0xa8, 0x9d, 0x3a, 0xd4, 0x72, 0x44, 0xe3, 0x23, 0xbb, 0x9e, 0xf4,
0xcb, 0x98, 0xff, 0x99, 0x3c, 0x5e, 0xe5, 0x7b, 0x46, 0x7e, 0x3c, 0x2b, 0x7c, 0x60, 0xed, 0x50,
0x78, 0x6d, 0xe6, 0xad, 0x39, 0x07, 0xed, 0x99, 0x07, 0x55, 0xf6, 0x5e, 0x9f, 0x28, 0x94, 0xe6,
0x57, 0x33, 0xfa, 0xe4, 0x1a, 0xee, 0xac, 0x36, 0xbd, 0x66, 0xe2, 0x3d, 0xd0, 0x0a, 0x4e, 0x43,
0xed, 0xac, 0xdf, 0x59, 0xb0, 0x99, 0x41, 0x28, 0x67, 0xdd, 0x49, 0xef, 0x43, 0xe5, 0x33, 0xd9,
0xdc, 0x86, 0xce, 0x58, 0x19, 0x2c, 0xe5, 0xae, 0x0c, 0xd0, 0xdb, 0xb0, 0x26, 0x2a, 0x72, 0x32,
0xb4, 0xab, 0x92, 0x5e, 0x11, 0xe0, 0xc9, 0xb8, 0x6e, 0x3f, 0x85, 0x75, 0x5e, 0xd2, 0x30, 0xe1,
0xf1, 0xac, 0x4b, 0xd9, 0x3d, 0x28, 0x89, 0x92, 0x38, 0x1a, 0xf7, 0x2e, 0xe8, 0x8d, 0xae, 0x66,
0x45, 0x0e, 0xeb, 0x48, 0x90, 0x7d, 0x04, 0xc8, 0xe4, 0x53, 0x5a, 0x3c, 0x55, 0x8c, 0x91, 0x00,
0xeb, 0x78, 0xab, 0xa5, 0xca, 0xa9, 0x62, 0x11, 0xa7, 0xc9, 0xbf, 0xe3, 0x87, 0x7f, 0xb0, 0xa0,
0x64, 0x3e, 0xf4, 0x51, 0x15, 0x4a, 0x1d, 0xa7, 0x7d, 0xd0, 0x6a, 0x7f, 0xe2, 0x1e, 0x77, 0x9c,
0x76, 0x75, 0x0e, 0x21, 0xa8, 0x68, 0xc8, 0xcb, 0xce, 0x41, 0xbd, 0xeb, 0x54, 0x2d, 0xb4, 0x02,
0x0b, 0x02, 0x5b, 0x40, 0x45, 0x58, 0x76, 0x3e, 0xeb, 0xb4, 0xb0, 0x73, 0x50, 0x9d, 0x37, 0x49,
0xf7, 0x8f, 0x8e, 0x4f, 0x9c, 0x83, 0xea, 0x02, 0x02, 0x58, 0x52, 0x7f, 0x2f, 0xa2, 0x1a, 0xac,
0x61, 0x67, 0xff, 0xf8, 0x95, 0x83, 0x7f, 0xe9, 0x1e, 0xd6, 0x5b, 0x47, 0xce, 0x41, 0x75, 0x09,
0xad, 0x43, 0x59, 0x33, 0x35, 0xea, 0xdd, 0xfd, 0x66, 0x75, 0xf9, 0x61, 0x47, 0x4d, 0x75, 0x52,
0xa4, 0x22, 0x2c, 0x77, 0xb0, 0xd3, 0xa9, 0x63, 0xa7, 0x3a, 0x87, 0x4a, 0xb0, 0x52, 0xdf, 0xdf,
0x77, 0x3a, 0x5d, 0xe7, 0xa0, 0x6a, 0xf1, 0x2f, 0xec, 0xfc, 0xdc, 0xd9, 0xe7, 0x5f, 0x05, 0x7e,
0xd5, 0x49, 0xeb, 0x93, 0xb6, 0x10, 0xa5, 0x0c, 0xab, 0x87, 0xad, 0x76, 0xfd, 0xa8, 0xf5, 0x39,
0x97, 0xe2, 0xe1, 0xdf, 0x2c, 0x58, 0x9f, 0x1a, 0xbf, 0xb8, 0x1a, 0xed, 0xe3, 0x36, 0x3f, 0x76,
0x0b, 0xd0, 0x89, 0x83, 0x5f, 0x39, 0xd8, 0x7d, 0xd1, 0x3a, 0x69, 0x38, 0xcd, 0xfa, 0xab, 0xd6,
0x31, 0xae, 0x5a, 0x68, 0x07, 0xb6, 0x84, 0x50, 0xee, 0x2b, 0x07, 0x9f, 0xb4, 0x8e, 0xdb, 0x1c,
0xfd, 0x42, 0x48, 0x59, 0x40, 0xbb, 0xf0, 0x5a, 0xa7, 0x8e, 0xbb, 0xad, 0xfa, 0x91, 0x2b, 0x85,
0x70, 0xf7, 0x8f, 0x8f, 0x8e, 0xea, 0x5d, 0x07, 0xd7, 0x8f, 0xaa, 0xf3, 0xe8, 0x1e, 0xec, 0x66,
0xd0, 0x07, 0x2f, 0x3b, 0x47, 0xad, 0xfd, 0x7a, 0xd7, 0x71, 0x3b, 0x8e, 0x83, 0xab, 0x0b, 0xe8,
0x01, 0xbc, 0x99, 0x3d, 0xa1, 0x59, 0x6f, 0xb7, 0x9d, 0x23, 0xf7, 0xf0, 0xa5, 0xb4, 0x88, 0xb2,
0xd2, 0xe2, 0xde, 0x7f, 0x8a, 0xb0, 0xd4, 0x15, 0x6f, 0x69, 0xf4, 0x1c, 0x4a, 0xe6, 0xaf, 0x24,
0x28, 0x49, 0x8e, 0x9c, 0xdf, 0x68, 0x76, 0x76, 0x67, 0x60, 0x27, 0x3b, 0x93, 0xa2, 0xf1, 0x3b,
0x15, 0xba, 0x6d, 0xec, 0x4a, 0xb2, 0xfb, 0xd7, 0x9d, 0xa9, 0x95, 0x1d, 0x17, 0xc5, 0xfc, 0xfd,
0xc3, 0x10, 0x25, 0xe7, 0xe7, 0x14, 0x43, 0x94, 0xdc, 0x1f, 0x4d, 0x9e, 0x43, 0xc9, 0x5c, 0x97,
0x1b, 0x87, 0xe5, 0xfc, 0x1e, 0x60, 0x1c, 0x96, 0xbb, 0x63, 0xef, 0xc2, 0x5a, 0x66, 0x63, 0x8d,
0x92, 0x7d, 0x7e, 0xfe, 0x76, 0x7d, 0xe7, 0xee, 0x6c, 0x02, 0x75, 0xea, 0xa7, 0x50, 0x49, 0x6f,
0x85, 0xd1, 0x1b, 0x49, 0x65, 0xca, 0xdb, 0x59, 0xef, 0xdc, 0x99, 0x89, 0x4f, 0xb4, 0x36, 0x17,
0xa6, 0x86, 0xd6, 0x39, 0x5b, 0x61, 0x43, 0xeb, 0xdc, 0x2d, 0xeb, 0xa7, 0x50, 0x49, 0x2f, 0x2c,
0x0d, 0xf9, 0x72, 0xf7, 0xa5, 0x86, 0x7c, 0xf9, 0x9b, 0x4e, 0x6e, 0xc8, 0xcc, 0xd3, 0xc3, 0x30,
0x64, 0xfe, 0x73, 0xc5, 0x30, 0xe4, 0xac, 0x57, 0x4b, 0x13, 0x8a, 0xc6, 0x06, 0xcf, 0x08, 0xbb,
0xe9, 0xed, 0xe1, 0xce, 0xeb, 0xf9, 0x48, 0x75, 0x92, 0x03, 0x90, 0xec, 0xc9, 0xd0, 0x4e, 0x2a,
0xc4, 0x52, 0xcb, 0xb8, 0x9d, 0xdb, 0xb9, 0xb8, 0x44, 0x20, 0x63, 0xbb, 0x65, 0x08, 0x34, 0xbd,
0x2a, 0x33, 0x04, 0xca, 0x59, 0x88, 0x71, 0x81, 0x92, 0x57, 0x94, 0x21, 0xd0, 0xd4, 0x7b, 0xcb,
0x10, 0x28, 0xe7, 0xd9, 0x75, 0xac, 0x66, 0xd3, 0xa4, 0xeb, 0xef, 0xce, 0xea, 0xea, 0xf2, 0xb4,
0x37, 0xbe, 0xbe, 0xe9, 0xa3, 0x36, 0x94, 0x53, 0x1d, 0xd0, 0x38, 0x2f, 0xaf, 0x65, 0x1a, 0xe7,
0xe5, 0x37, 0xce, 0x36, 0x94, 0x05, 0xf0, 0x24, 0x20, 0xa3, 0xf8, 0x3c, 0x64, 0xc6, 0x79, 0x29,
0xf8, 0xf4, 0x79, 0x19, 0xb4, 0x3a, 0xef, 0x63, 0x28, 0x7f, 0x42, 0xd9, 0x64, 0x4e, 0x8d, 0x51,
0xf2, 0xcb, 0x5d, 0x6a, 0x18, 0xde, 0xb9, 0x35, 0x05, 0x57, 0x27, 0xfc, 0x18, 0x96, 0xe4, 0x38,
0x6f, 0xb0, 0xa6, 0x9e, 0x0a, 0x06, 0x6b, 0x66, 0xee, 0x3f, 0x84, 0x62, 0xd2, 0x22, 0xcd, 0x30,
0x9a, 0xea, 0xd1, 0x86, 0xd7, 0x72, 0xfa, 0x30, 0x4f, 0x40, 0x53, 0xbb, 0x18, 0xcd, 0x50, 0x3b,
0xce, 0x49, 0xc0, 0x0c, 0x5e, 0x1e, 0xd9, 0x78, 0xfb, 0xf3, 0x37, 0xcf, 0x7c, 0x76, 0x3e, 0xee,
0x3d, 0xea, 0x87, 0xc3, 0xc7, 0x03, 0xff, 0xec, 0x9c, 0x05, 0x7e, 0x70, 0x36, 0x20, 0xbd, 0xf8,
0x31, 0x67, 0x7d, 0xac, 0xf8, 0x7b, 0x4b, 0xe2, 0x5f, 0x0f, 0x7e, 0xf8, 0xdf, 0x00, 0x00, 0x00,
0xff, 0xff, 0x6c, 0x39, 0x4b, 0xb1, 0xb3, 0x20, 0x00, 0x00,
}
// Reference imports to suppress errors if they are not otherwise used.
@ -3402,7 +3403,7 @@ type TraderClient interface {
//BatchSnapshot returns the snapshot of a past batch identified by its ID.
//If no ID is provided, the snapshot of the last finalized batch is returned.
//Deprecated, use BatchSnapshots instead.
BatchSnapshot(ctx context.Context, in *BatchSnapshotRequest, opts ...grpc.CallOption) (*BatchSnapshotResponse, error)
BatchSnapshot(ctx context.Context, in *auctioneerrpc.BatchSnapshotRequest, opts ...grpc.CallOption) (*auctioneerrpc.BatchSnapshotResponse, error)
// pool: `listauth`
//GetLsatTokens returns all LSAT tokens the daemon ever paid for.
GetLsatTokens(ctx context.Context, in *TokensRequest, opts ...grpc.CallOption) (*TokensResponse, error)
@ -3420,7 +3421,7 @@ type TraderClient interface {
//number of specified batches. A maximum of 100 snapshots can be queried in
//one call. If no start batch ID is provided, the most recent finalized batch
//is used as the starting point to go back from.
BatchSnapshots(ctx context.Context, in *BatchSnapshotsRequest, opts ...grpc.CallOption) (*BatchSnapshotsResponse, error)
BatchSnapshots(ctx context.Context, in *auctioneerrpc.BatchSnapshotsRequest, opts ...grpc.CallOption) (*auctioneerrpc.BatchSnapshotsResponse, error)
}
type traderClient struct {
@ -3566,8 +3567,8 @@ func (c *traderClient) NextBatchInfo(ctx context.Context, in *NextBatchInfoReque
return out, nil
}
func (c *traderClient) BatchSnapshot(ctx context.Context, in *BatchSnapshotRequest, opts ...grpc.CallOption) (*BatchSnapshotResponse, error) {
out := new(BatchSnapshotResponse)
func (c *traderClient) BatchSnapshot(ctx context.Context, in *auctioneerrpc.BatchSnapshotRequest, opts ...grpc.CallOption) (*auctioneerrpc.BatchSnapshotResponse, error) {
out := new(auctioneerrpc.BatchSnapshotResponse)
err := c.cc.Invoke(ctx, "/poolrpc.Trader/BatchSnapshot", in, out, opts...)
if err != nil {
return nil, err
@ -3602,8 +3603,8 @@ func (c *traderClient) NodeRatings(ctx context.Context, in *NodeRatingRequest, o
return out, nil
}
func (c *traderClient) BatchSnapshots(ctx context.Context, in *BatchSnapshotsRequest, opts ...grpc.CallOption) (*BatchSnapshotsResponse, error) {
out := new(BatchSnapshotsResponse)
func (c *traderClient) BatchSnapshots(ctx context.Context, in *auctioneerrpc.BatchSnapshotsRequest, opts ...grpc.CallOption) (*auctioneerrpc.BatchSnapshotsResponse, error) {
out := new(auctioneerrpc.BatchSnapshotsResponse)
err := c.cc.Invoke(ctx, "/poolrpc.Trader/BatchSnapshots", in, out, opts...)
if err != nil {
return nil, err
@ -3681,7 +3682,7 @@ type TraderServer interface {
//BatchSnapshot returns the snapshot of a past batch identified by its ID.
//If no ID is provided, the snapshot of the last finalized batch is returned.
//Deprecated, use BatchSnapshots instead.
BatchSnapshot(context.Context, *BatchSnapshotRequest) (*BatchSnapshotResponse, error)
BatchSnapshot(context.Context, *auctioneerrpc.BatchSnapshotRequest) (*auctioneerrpc.BatchSnapshotResponse, error)
// pool: `listauth`
//GetLsatTokens returns all LSAT tokens the daemon ever paid for.
GetLsatTokens(context.Context, *TokensRequest) (*TokensResponse, error)
@ -3699,7 +3700,7 @@ type TraderServer interface {
//number of specified batches. A maximum of 100 snapshots can be queried in
//one call. If no start batch ID is provided, the most recent finalized batch
//is used as the starting point to go back from.
BatchSnapshots(context.Context, *BatchSnapshotsRequest) (*BatchSnapshotsResponse, error)
BatchSnapshots(context.Context, *auctioneerrpc.BatchSnapshotsRequest) (*auctioneerrpc.BatchSnapshotsResponse, error)
}
// UnimplementedTraderServer can be embedded to have forward compatible implementations.
@ -3751,7 +3752,7 @@ func (*UnimplementedTraderServer) LeaseDurations(ctx context.Context, req *Lease
func (*UnimplementedTraderServer) NextBatchInfo(ctx context.Context, req *NextBatchInfoRequest) (*NextBatchInfoResponse, error) {
return nil, status.Errorf(codes.Unimplemented, "method NextBatchInfo not implemented")
}
func (*UnimplementedTraderServer) BatchSnapshot(ctx context.Context, req *BatchSnapshotRequest) (*BatchSnapshotResponse, error) {
func (*UnimplementedTraderServer) BatchSnapshot(ctx context.Context, req *auctioneerrpc.BatchSnapshotRequest) (*auctioneerrpc.BatchSnapshotResponse, error) {
return nil, status.Errorf(codes.Unimplemented, "method BatchSnapshot not implemented")
}
func (*UnimplementedTraderServer) GetLsatTokens(ctx context.Context, req *TokensRequest) (*TokensResponse, error) {
@ -3763,7 +3764,7 @@ func (*UnimplementedTraderServer) Leases(ctx context.Context, req *LeasesRequest
func (*UnimplementedTraderServer) NodeRatings(ctx context.Context, req *NodeRatingRequest) (*NodeRatingResponse, error) {
return nil, status.Errorf(codes.Unimplemented, "method NodeRatings not implemented")
}
func (*UnimplementedTraderServer) BatchSnapshots(ctx context.Context, req *BatchSnapshotsRequest) (*BatchSnapshotsResponse, error) {
func (*UnimplementedTraderServer) BatchSnapshots(ctx context.Context, req *auctioneerrpc.BatchSnapshotsRequest) (*auctioneerrpc.BatchSnapshotsResponse, error) {
return nil, status.Errorf(codes.Unimplemented, "method BatchSnapshots not implemented")
}
@ -4042,7 +4043,7 @@ func _Trader_NextBatchInfo_Handler(srv interface{}, ctx context.Context, dec fun
}
func _Trader_BatchSnapshot_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
in := new(BatchSnapshotRequest)
in := new(auctioneerrpc.BatchSnapshotRequest)
if err := dec(in); err != nil {
return nil, err
}
@ -4054,7 +4055,7 @@ func _Trader_BatchSnapshot_Handler(srv interface{}, ctx context.Context, dec fun
FullMethod: "/poolrpc.Trader/BatchSnapshot",
}
handler := func(ctx context.Context, req interface{}) (interface{}, error) {
return srv.(TraderServer).BatchSnapshot(ctx, req.(*BatchSnapshotRequest))
return srv.(TraderServer).BatchSnapshot(ctx, req.(*auctioneerrpc.BatchSnapshotRequest))
}
return interceptor(ctx, in, info, handler)
}
@ -4114,7 +4115,7 @@ func _Trader_NodeRatings_Handler(srv interface{}, ctx context.Context, dec func(
}
func _Trader_BatchSnapshots_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
in := new(BatchSnapshotsRequest)
in := new(auctioneerrpc.BatchSnapshotsRequest)
if err := dec(in); err != nil {
return nil, err
}
@ -4126,7 +4127,7 @@ func _Trader_BatchSnapshots_Handler(srv interface{}, ctx context.Context, dec fu
FullMethod: "/poolrpc.Trader/BatchSnapshots",
}
handler := func(ctx context.Context, req interface{}) (interface{}, error) {
return srv.(TraderServer).BatchSnapshots(ctx, req.(*BatchSnapshotsRequest))
return srv.(TraderServer).BatchSnapshots(ctx, req.(*auctioneerrpc.BatchSnapshotsRequest))
}
return interceptor(ctx, in, info, handler)
}

View file

@ -17,6 +17,7 @@ import (
"github.com/golang/protobuf/proto"
"github.com/grpc-ecosystem/grpc-gateway/runtime"
"github.com/grpc-ecosystem/grpc-gateway/utilities"
"github.com/lightninglabs/pool/auctioneerrpc"
"google.golang.org/grpc"
"google.golang.org/grpc/codes"
"google.golang.org/grpc/grpclog"
@ -515,7 +516,7 @@ var (
)
func request_Trader_BatchSnapshot_0(ctx context.Context, marshaler runtime.Marshaler, client TraderClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {
var protoReq BatchSnapshotRequest
var protoReq auctioneerrpc.BatchSnapshotRequest
var metadata runtime.ServerMetadata
if err := req.ParseForm(); err != nil {
@ -531,7 +532,7 @@ func request_Trader_BatchSnapshot_0(ctx context.Context, marshaler runtime.Marsh
}
func local_request_Trader_BatchSnapshot_0(ctx context.Context, marshaler runtime.Marshaler, server TraderServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {
var protoReq BatchSnapshotRequest
var protoReq auctioneerrpc.BatchSnapshotRequest
var metadata runtime.ServerMetadata
if err := runtime.PopulateQueryParameters(&protoReq, req.URL.Query(), filter_Trader_BatchSnapshot_0); err != nil {
@ -628,7 +629,7 @@ func local_request_Trader_NodeRatings_0(ctx context.Context, marshaler runtime.M
}
func request_Trader_BatchSnapshots_0(ctx context.Context, marshaler runtime.Marshaler, client TraderClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {
var protoReq BatchSnapshotsRequest
var protoReq auctioneerrpc.BatchSnapshotsRequest
var metadata runtime.ServerMetadata
var (
@ -666,7 +667,7 @@ func request_Trader_BatchSnapshots_0(ctx context.Context, marshaler runtime.Mars
}
func local_request_Trader_BatchSnapshots_0(ctx context.Context, marshaler runtime.Marshaler, server TraderServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {
var protoReq BatchSnapshotsRequest
var protoReq auctioneerrpc.BatchSnapshotsRequest
var metadata runtime.ServerMetadata
var (

View file

@ -1,6 +1,6 @@
syntax = "proto3";
import "auctioneer.proto";
import "auctioneerrpc/auctioneer.proto";
package poolrpc;

View file

@ -21,6 +21,7 @@ import (
"github.com/lightninglabs/lndclient"
"github.com/lightninglabs/pool/account"
"github.com/lightninglabs/pool/auctioneer"
"github.com/lightninglabs/pool/auctioneerrpc"
"github.com/lightninglabs/pool/chaninfo"
"github.com/lightninglabs/pool/clientdb"
"github.com/lightninglabs/pool/event"
@ -345,10 +346,12 @@ func (s *rpcServer) updateHeight(height int32) {
// handleServerMessage reads a gRPC message received in the stream from the
// auctioneer server and passes it to the correct manager.
func (s *rpcServer) handleServerMessage(rpcMsg *poolrpc.ServerAuctionMessage) error {
func (s *rpcServer) handleServerMessage(
rpcMsg *auctioneerrpc.ServerAuctionMessage) error {
switch msg := rpcMsg.Msg.(type) {
// A new batch has been assembled with some of our orders.
case *poolrpc.ServerAuctionMessage_Prepare:
case *auctioneerrpc.ServerAuctionMessage_Prepare:
// Parse and formally validate what we got from the server.
rpcLog.Tracef("Received prepare msg from server, batch_id=%x: %v",
msg.Prepare.BatchId, spew.Sdump(msg))
@ -440,7 +443,7 @@ func (s *rpcServer) handleServerMessage(rpcMsg *poolrpc.ServerAuctionMessage) er
return s.sendRejectBatch(batch, err)
}
case *poolrpc.ServerAuctionMessage_Sign:
case *auctioneerrpc.ServerAuctionMessage_Sign:
// We were able to accept the batch. Inform the auctioneer,
// then start negotiating with the remote peers. We'll sign
// once all channel partners have responded.
@ -471,7 +474,7 @@ func (s *rpcServer) handleServerMessage(rpcMsg *poolrpc.ServerAuctionMessage) er
// The previously prepared batch has been executed and we can finalize
// it by opening the channel and persisting the account and order diffs.
case *poolrpc.ServerAuctionMessage_Finalize:
case *auctioneerrpc.ServerAuctionMessage_Finalize:
rpcLog.Tracef("Received finalize msg from server, batch_id=%x: %v",
msg.Finalize.BatchId, spew.Sdump(msg))
@ -703,7 +706,7 @@ func MarshallAccount(a *account.Account) (*poolrpc.Account, error) {
return &poolrpc.Account{
TraderKey: a.TraderKey.PubKey.SerializeCompressed(),
Outpoint: &poolrpc.OutPoint{
Outpoint: &auctioneerrpc.OutPoint{
Txid: a.OutPoint.Hash[:],
OutputIndex: a.OutPoint.Index,
},
@ -1447,8 +1450,8 @@ func (s *rpcServer) sendRejectBatch(batch *order.Batch, failure error) error {
return err
}
msg := &poolrpc.ClientAuctionMessage_Reject{
Reject: &poolrpc.OrderMatchReject{
msg := &auctioneerrpc.ClientAuctionMessage_Reject{
Reject: &auctioneerrpc.OrderMatchReject{
BatchId: batch.ID[:],
Reason: failure.Error(),
},
@ -1458,7 +1461,7 @@ func (s *rpcServer) sendRejectBatch(batch *order.Batch, failure error) error {
var partialReject *funding.MatchRejectErr
switch {
case errors.Is(failure, order.ErrVersionMismatch):
msg.Reject.ReasonCode = poolrpc.OrderMatchReject_BATCH_VERSION_MISMATCH
msg.Reject.ReasonCode = auctioneerrpc.OrderMatchReject_BATCH_VERSION_MISMATCH
// Track this reject by adding an event to our orders.
err := s.server.db.StoreBatchEvents(
@ -1470,7 +1473,7 @@ func (s *rpcServer) sendRejectBatch(batch *order.Batch, failure error) error {
}
case errors.Is(failure, order.ErrMismatchErr):
msg.Reject.ReasonCode = poolrpc.OrderMatchReject_SERVER_MISBEHAVIOR
msg.Reject.ReasonCode = auctioneerrpc.OrderMatchReject_SERVER_MISBEHAVIOR
// Track this reject by adding an event to our orders.
err := s.server.db.StoreBatchEvents(
@ -1482,8 +1485,8 @@ func (s *rpcServer) sendRejectBatch(batch *order.Batch, failure error) error {
}
case errors.As(failure, &partialReject):
msg.Reject.ReasonCode = poolrpc.OrderMatchReject_PARTIAL_REJECT
msg.Reject.RejectedOrders = make(map[string]*poolrpc.OrderReject)
msg.Reject.ReasonCode = auctioneerrpc.OrderMatchReject_PARTIAL_REJECT
msg.Reject.RejectedOrders = make(map[string]*auctioneerrpc.OrderReject)
for nonce, reject := range partialReject.RejectedOrders {
msg.Reject.RejectedOrders[nonce.String()] = reject
}
@ -1498,7 +1501,7 @@ func (s *rpcServer) sendRejectBatch(batch *order.Batch, failure error) error {
}
default:
msg.Reject.ReasonCode = poolrpc.OrderMatchReject_UNKNOWN
msg.Reject.ReasonCode = auctioneerrpc.OrderMatchReject_UNKNOWN
}
rpcLog.Infof("Sending batch rejection message for batch %x with "+
@ -1508,7 +1511,7 @@ func (s *rpcServer) sendRejectBatch(batch *order.Batch, failure error) error {
// Send the message to the server. If a new error happens we return that
// one because we know the causing error has at least been logged at
// some point before.
err = s.auctioneer.SendAuctionMessage(&poolrpc.ClientAuctionMessage{
err = s.auctioneer.SendAuctionMessage(&auctioneerrpc.ClientAuctionMessage{
Msg: msg,
})
if err != nil {
@ -1534,9 +1537,9 @@ func (s *rpcServer) sendAcceptBatch(batch *order.Batch) error {
}
// Send the message to the server.
return s.auctioneer.SendAuctionMessage(&poolrpc.ClientAuctionMessage{
Msg: &poolrpc.ClientAuctionMessage_Accept{
Accept: &poolrpc.OrderMatchAccept{
return s.auctioneer.SendAuctionMessage(&auctioneerrpc.ClientAuctionMessage{
Msg: &auctioneerrpc.ClientAuctionMessage_Accept{
Accept: &auctioneerrpc.OrderMatchAccept{
BatchId: batch.ID[:],
},
},
@ -1590,12 +1593,12 @@ func (s *rpcServer) sendSignBatch(batch *order.Batch, sigs order.BatchSignature,
rpcSigs[key] = sig.Serialize()
}
rpcChannelInfos := make(map[string]*poolrpc.ChannelInfo, len(chanInfos))
rpcChannelInfos := make(map[string]*auctioneerrpc.ChannelInfo, len(chanInfos))
for chanPoint, chanInfo := range chanInfos {
var channelType poolrpc.ChannelType
var channelType auctioneerrpc.ChannelType
switch chanInfo.Version {
case chanbackup.TweaklessCommitVersion:
channelType = poolrpc.ChannelType_TWEAKLESS
channelType = auctioneerrpc.ChannelType_TWEAKLESS
// The AnchorsCommitVersion was never widely deployed (at least
// in mainnet) because the lnd version that included it guarded
@ -1606,12 +1609,12 @@ func (s *rpcServer) sendSignBatch(batch *order.Batch, sigs order.BatchSignature,
case chanbackup.AnchorsCommitVersion,
chanbackup.AnchorsZeroFeeHtlcTxCommitVersion:
channelType = poolrpc.ChannelType_ANCHORS
channelType = auctioneerrpc.ChannelType_ANCHORS
default:
return fmt.Errorf("unknown channel type: %v",
chanInfo.Version)
}
rpcChannelInfos[chanPoint.String()] = &poolrpc.ChannelInfo{
rpcChannelInfos[chanPoint.String()] = &auctioneerrpc.ChannelInfo{
Type: channelType,
LocalNodeKey: chanInfo.LocalNodeKey.
SerializeCompressed(),
@ -1634,9 +1637,9 @@ func (s *rpcServer) sendSignBatch(batch *order.Batch, sigs order.BatchSignature,
rpcLog.Errorf("Unable to store order events: %v", err)
}
return s.auctioneer.SendAuctionMessage(&poolrpc.ClientAuctionMessage{
Msg: &poolrpc.ClientAuctionMessage_Sign{
Sign: &poolrpc.OrderMatchSign{
return s.auctioneer.SendAuctionMessage(&auctioneerrpc.ClientAuctionMessage{
Msg: &auctioneerrpc.ClientAuctionMessage_Sign{
Sign: &auctioneerrpc.OrderMatchSign{
BatchId: batch.ID[:],
AccountSigs: rpcSigs,
ChannelInfos: rpcChannelInfos,
@ -1658,7 +1661,7 @@ func (s *rpcServer) AuctionFee(ctx context.Context,
// TODO(roasbeef): accept the amt of order instead?
return &poolrpc.AuctionFeeResponse{
ExecutionFee: &poolrpc.ExecutionFee{
ExecutionFee: &auctioneerrpc.ExecutionFee{
BaseFee: uint64(auctionTerms.OrderExecBaseFee),
FeeRate: uint64(auctionTerms.OrderExecFeeRate),
},
@ -1748,13 +1751,14 @@ func (s *rpcServer) Leases(ctx context.Context,
// fetchNodeRatings returns an up to date set of ratings for each of the nodes
// we matched with in the passed batch.
func fetchNodeRatings(ctx context.Context, batches []*clientdb.LocalBatchSnapshot,
auctioneer *auctioneer.Client) (map[[33]byte]poolrpc.NodeTier, error) {
auctioneer *auctioneer.Client) (map[[33]byte]auctioneerrpc.NodeTier,
error) {
// As the node ratings call is batched, we'll first do a single query
// to fetch all the ratings that we'll want to populate below.
//
// TODO(roasbeef): capture rating at time of lease? also cache
nodeRatings := make(map[[33]byte]poolrpc.NodeTier)
nodeRatings := make(map[[33]byte]auctioneerrpc.NodeTier)
for _, batch := range batches {
for _, matches := range batch.MatchedOrders {
for _, match := range matches {
@ -1913,7 +1917,7 @@ func (s *rpcServer) prepareLeasesResponse(ctx context.Context,
purchased := ourOrder.Type() == order.TypeBid
nodeTier := nodeRatings[match.NodeKey]
rpcLeases = append(rpcLeases, &poolrpc.Lease{
ChannelPoint: &poolrpc.OutPoint{
ChannelPoint: &auctioneerrpc.OutPoint{
Txid: batchTxHash[:],
OutputIndex: chanOutputIdx,
},
@ -1968,7 +1972,8 @@ func (s *rpcServer) prepareLeasesResponse(ctx context.Context,
// BatchSnapshot returns information about a target batch including the
// clearing price of the batch, and the set of orders matched within the batch.
func (s *rpcServer) BatchSnapshot(ctx context.Context,
req *poolrpc.BatchSnapshotRequest) (*poolrpc.BatchSnapshotResponse, error) {
req *auctioneerrpc.BatchSnapshotRequest) (
*auctioneerrpc.BatchSnapshotResponse, error) {
// THe current version of this call just proxies the request to the
// auctioneer, as we may only have information about the batch if we
@ -1984,8 +1989,8 @@ func (s *rpcServer) BatchSnapshot(ctx context.Context,
// one call. If no start batch ID is provided, the most recent finalized batch
// is used as the starting point to go back from.
func (s *rpcServer) BatchSnapshots(ctx context.Context,
req *poolrpc.BatchSnapshotsRequest) (*poolrpc.BatchSnapshotsResponse,
error) {
req *auctioneerrpc.BatchSnapshotsRequest) (
*auctioneerrpc.BatchSnapshotsResponse, error) {
return s.auctioneer.BatchSnapshots(ctx, req)
}
@ -2004,8 +2009,8 @@ func (s *rpcServer) LeaseDurations(ctx context.Context,
map[uint32]bool, len(auctionTerms.LeaseDurationBuckets),
)
for duration, market := range auctionTerms.LeaseDurationBuckets {
const accept = poolrpc.DurationBucketState_ACCEPTING_ORDERS
const open = poolrpc.DurationBucketState_MARKET_OPEN
const accept = auctioneerrpc.DurationBucketState_ACCEPTING_ORDERS
const open = auctioneerrpc.DurationBucketState_MARKET_OPEN
legacyDurations[duration] = market == accept || market == open
}
@ -2059,27 +2064,29 @@ func (s *rpcServer) NodeRatings(ctx context.Context,
// rpcOrderStateToDBState maps the order state as received over the RPC
// protocol to the local state that we use in the database.
func rpcOrderStateToDBState(state poolrpc.OrderState) (order.State, error) {
func rpcOrderStateToDBState(state auctioneerrpc.OrderState) (order.State,
error) {
switch state {
case poolrpc.OrderState_ORDER_SUBMITTED:
case auctioneerrpc.OrderState_ORDER_SUBMITTED:
return order.StateSubmitted, nil
case poolrpc.OrderState_ORDER_CLEARED:
case auctioneerrpc.OrderState_ORDER_CLEARED:
return order.StateCleared, nil
case poolrpc.OrderState_ORDER_PARTIALLY_FILLED:
case auctioneerrpc.OrderState_ORDER_PARTIALLY_FILLED:
return order.StatePartiallyFilled, nil
case poolrpc.OrderState_ORDER_EXECUTED:
case auctioneerrpc.OrderState_ORDER_EXECUTED:
return order.StateExecuted, nil
case poolrpc.OrderState_ORDER_CANCELED:
case auctioneerrpc.OrderState_ORDER_CANCELED:
return order.StateCanceled, nil
case poolrpc.OrderState_ORDER_EXPIRED:
case auctioneerrpc.OrderState_ORDER_EXPIRED:
return order.StateExpired, nil
case poolrpc.OrderState_ORDER_FAILED:
case auctioneerrpc.OrderState_ORDER_FAILED:
return order.StateFailed, nil
default:
@ -2089,28 +2096,30 @@ func rpcOrderStateToDBState(state poolrpc.OrderState) (order.State, error) {
// DBOrderStateToRPCState maps the order state as stored in the database to the
// corresponding RPC enum type.
func DBOrderStateToRPCState(state order.State) (poolrpc.OrderState, error) {
func DBOrderStateToRPCState(state order.State) (auctioneerrpc.OrderState,
error) {
switch state {
case order.StateSubmitted:
return poolrpc.OrderState_ORDER_SUBMITTED, nil
return auctioneerrpc.OrderState_ORDER_SUBMITTED, nil
case order.StateCleared:
return poolrpc.OrderState_ORDER_CLEARED, nil
return auctioneerrpc.OrderState_ORDER_CLEARED, nil
case order.StatePartiallyFilled:
return poolrpc.OrderState_ORDER_PARTIALLY_FILLED, nil
return auctioneerrpc.OrderState_ORDER_PARTIALLY_FILLED, nil
case order.StateExecuted:
return poolrpc.OrderState_ORDER_EXECUTED, nil
return auctioneerrpc.OrderState_ORDER_EXECUTED, nil
case order.StateCanceled:
return poolrpc.OrderState_ORDER_CANCELED, nil
return auctioneerrpc.OrderState_ORDER_CANCELED, nil
case order.StateExpired:
return poolrpc.OrderState_ORDER_EXPIRED, nil
return auctioneerrpc.OrderState_ORDER_EXPIRED, nil
case order.StateFailed:
return poolrpc.OrderState_ORDER_FAILED, nil
return auctioneerrpc.OrderState_ORDER_FAILED, nil
default:
return 0, fmt.Errorf("unknown state: %v", state)
@ -2226,15 +2235,17 @@ func nodeHasTorAddrs(nodeAddrs []string) bool {
// unmarshallNodeTier maps the RPC node tier enum to the node tier used in
// memory.
func unmarshallNodeTier(nodeTier poolrpc.NodeTier) (order.NodeTier, error) {
func unmarshallNodeTier(nodeTier auctioneerrpc.NodeTier) (order.NodeTier,
error) {
switch nodeTier {
case poolrpc.NodeTier_TIER_DEFAULT:
case auctioneerrpc.NodeTier_TIER_DEFAULT:
return order.DefaultMinNodeTier, nil
case poolrpc.NodeTier_TIER_0:
case auctioneerrpc.NodeTier_TIER_0:
return order.NodeTier0, nil
case poolrpc.NodeTier_TIER_1:
case auctioneerrpc.NodeTier_TIER_1:
return order.NodeTier1, nil
default:

View file

@ -4,7 +4,7 @@ import (
"time"
"github.com/btcsuite/btcutil"
"github.com/lightninglabs/pool/poolrpc"
"github.com/lightninglabs/pool/auctioneerrpc"
"github.com/lightningnetwork/lnd/lnwallet/chainfee"
)
@ -22,7 +22,7 @@ type AuctioneerTerms struct {
// LeaseDurationBuckets lists the current set of lease durations and
// maps them to their current market state.
LeaseDurationBuckets map[uint32]poolrpc.DurationBucketState
LeaseDurationBuckets map[uint32]auctioneerrpc.DurationBucketState
// NextBatchConfTarget is the confirmation target the auctioneer will
// use to estimate the fee rate of the next batch.