lnrpc: add route hints proto field to invoices

This commit is contained in:
Wilmer Paulino 2018-03-27 23:45:22 -04:00
parent ea9e609ef0
commit 6394c2fbb5
No known key found for this signature in database
GPG Key ID: 6DF57B9F9514972F
4 changed files with 606 additions and 445 deletions

@ -82,6 +82,8 @@ It has these top-level messages:
NodeUpdate NodeUpdate
ChannelEdgeUpdate ChannelEdgeUpdate
ClosedChannelUpdate ClosedChannelUpdate
HopHint
RouteHint
Invoice Invoice
AddInvoiceResponse AddInvoiceResponse
PaymentHash PaymentHash
@ -519,9 +521,7 @@ func (m *ChannelPoint) String() string { return proto.CompactTextStri
func (*ChannelPoint) ProtoMessage() {} func (*ChannelPoint) ProtoMessage() {}
func (*ChannelPoint) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{11} } func (*ChannelPoint) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{11} }
type isChannelPoint_FundingTxid interface { type isChannelPoint_FundingTxid interface{ isChannelPoint_FundingTxid() }
isChannelPoint_FundingTxid()
}
type ChannelPoint_FundingTxidBytes struct { type ChannelPoint_FundingTxidBytes struct {
FundingTxidBytes []byte `protobuf:"bytes,1,opt,name=funding_txid_bytes,proto3,oneof"` FundingTxidBytes []byte `protobuf:"bytes,1,opt,name=funding_txid_bytes,proto3,oneof"`
@ -1608,9 +1608,7 @@ func (m *CloseStatusUpdate) String() string { return proto.CompactTex
func (*CloseStatusUpdate) ProtoMessage() {} func (*CloseStatusUpdate) ProtoMessage() {}
func (*CloseStatusUpdate) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{41} } func (*CloseStatusUpdate) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{41} }
type isCloseStatusUpdate_Update interface { type isCloseStatusUpdate_Update interface{ isCloseStatusUpdate_Update() }
isCloseStatusUpdate_Update()
}
type CloseStatusUpdate_ClosePending struct { type CloseStatusUpdate_ClosePending struct {
ClosePending *PendingUpdate `protobuf:"bytes,1,opt,name=close_pending,oneof"` ClosePending *PendingUpdate `protobuf:"bytes,1,opt,name=close_pending,oneof"`
@ -1873,9 +1871,7 @@ func (m *OpenStatusUpdate) String() string { return proto.CompactText
func (*OpenStatusUpdate) ProtoMessage() {} func (*OpenStatusUpdate) ProtoMessage() {}
func (*OpenStatusUpdate) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{44} } func (*OpenStatusUpdate) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{44} }
type isOpenStatusUpdate_Update interface { type isOpenStatusUpdate_Update interface{ isOpenStatusUpdate_Update() }
isOpenStatusUpdate_Update()
}
type OpenStatusUpdate_ChanPending struct { type OpenStatusUpdate_ChanPending struct {
ChanPending *PendingUpdate `protobuf:"bytes,1,opt,name=chan_pending,oneof"` ChanPending *PendingUpdate `protobuf:"bytes,1,opt,name=chan_pending,oneof"`
@ -2808,7 +2804,7 @@ func (m *RoutingPolicy) GetFeeRateMilliMsat() int64 {
// * // *
// A fully authenticated channel along with all its unique attributes. // A fully authenticated channel along with all its unique attributes.
// Once an authenticated channel announcement has been processed on the network, // Once an authenticated channel announcement has been processed on the network,
// then a instance of ChannelEdgeInfo encapsulating the channels attributes is // then an instance of ChannelEdgeInfo encapsulating the channels attributes is
// stored. The other portions relevant to routing policy of a channel are stored // stored. The other portions relevant to routing policy of a channel are stored
// within a ChannelEdgePolicy for each direction of the channel. // within a ChannelEdgePolicy for each direction of the channel.
type ChannelEdge struct { type ChannelEdge struct {
@ -3230,6 +3226,80 @@ func (m *ClosedChannelUpdate) GetChanPoint() *ChannelPoint {
return nil return nil
} }
type HopHint struct {
// / The public key of the node at the start of the channel.
NodeId string `protobuf:"bytes,1,opt,name=node_id" json:"node_id,omitempty"`
// / The unique identifier of the channel.
ChanId uint64 `protobuf:"varint,2,opt,name=chan_id" json:"chan_id,omitempty"`
// / The base fee of the channel denominated in millisatoshis.
FeeBaseMsat uint32 `protobuf:"varint,3,opt,name=fee_base_msat" json:"fee_base_msat,omitempty"`
// *
// The fee rate of the channel for sending one satoshi across it denominated in
// millionths of a satoshi.
FeeProportionalMillionths uint32 `protobuf:"varint,4,opt,name=fee_proportional_millionths" json:"fee_proportional_millionths,omitempty"`
// / The time-lock delta of the channel.
CltvExpiryDelta uint32 `protobuf:"varint,5,opt,name=cltv_expiry_delta" json:"cltv_expiry_delta,omitempty"`
}
func (m *HopHint) Reset() { *m = HopHint{} }
func (m *HopHint) String() string { return proto.CompactTextString(m) }
func (*HopHint) ProtoMessage() {}
func (*HopHint) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{74} }
func (m *HopHint) GetNodeId() string {
if m != nil {
return m.NodeId
}
return ""
}
func (m *HopHint) GetChanId() uint64 {
if m != nil {
return m.ChanId
}
return 0
}
func (m *HopHint) GetFeeBaseMsat() uint32 {
if m != nil {
return m.FeeBaseMsat
}
return 0
}
func (m *HopHint) GetFeeProportionalMillionths() uint32 {
if m != nil {
return m.FeeProportionalMillionths
}
return 0
}
func (m *HopHint) GetCltvExpiryDelta() uint32 {
if m != nil {
return m.CltvExpiryDelta
}
return 0
}
type RouteHint struct {
// *
// A list of hop hints that when chained together can assist in reaching a
// specific destination.
HopHints []*HopHint `protobuf:"bytes,1,rep,name=hop_hints" json:"hop_hints,omitempty"`
}
func (m *RouteHint) Reset() { *m = RouteHint{} }
func (m *RouteHint) String() string { return proto.CompactTextString(m) }
func (*RouteHint) ProtoMessage() {}
func (*RouteHint) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{75} }
func (m *RouteHint) GetHopHints() []*HopHint {
if m != nil {
return m.HopHints
}
return nil
}
type Invoice struct { type Invoice struct {
// * // *
// An optional memo to attach along with the invoice. Used for record keeping // An optional memo to attach along with the invoice. Used for record keeping
@ -3269,12 +3339,16 @@ type Invoice struct {
FallbackAddr string `protobuf:"bytes,12,opt,name=fallback_addr" json:"fallback_addr,omitempty"` FallbackAddr string `protobuf:"bytes,12,opt,name=fallback_addr" json:"fallback_addr,omitempty"`
// / Delta to use for the time-lock of the CLTV extended to the final hop. // / Delta to use for the time-lock of the CLTV extended to the final hop.
CltvExpiry uint64 `protobuf:"varint,13,opt,name=cltv_expiry" json:"cltv_expiry,omitempty"` CltvExpiry uint64 `protobuf:"varint,13,opt,name=cltv_expiry" json:"cltv_expiry,omitempty"`
// *
// Route hints that can each be individually used to assist in reaching the
// invoice's destination.
RouteHints []*RouteHint `protobuf:"bytes,14,rep,name=route_hints" json:"route_hints,omitempty"`
} }
func (m *Invoice) Reset() { *m = Invoice{} } func (m *Invoice) Reset() { *m = Invoice{} }
func (m *Invoice) String() string { return proto.CompactTextString(m) } func (m *Invoice) String() string { return proto.CompactTextString(m) }
func (*Invoice) ProtoMessage() {} func (*Invoice) ProtoMessage() {}
func (*Invoice) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{74} } func (*Invoice) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{76} }
func (m *Invoice) GetMemo() string { func (m *Invoice) GetMemo() string {
if m != nil { if m != nil {
@ -3367,6 +3441,13 @@ func (m *Invoice) GetCltvExpiry() uint64 {
return 0 return 0
} }
func (m *Invoice) GetRouteHints() []*RouteHint {
if m != nil {
return m.RouteHints
}
return nil
}
type AddInvoiceResponse struct { type AddInvoiceResponse struct {
RHash []byte `protobuf:"bytes,1,opt,name=r_hash,proto3" json:"r_hash,omitempty"` RHash []byte `protobuf:"bytes,1,opt,name=r_hash,proto3" json:"r_hash,omitempty"`
// * // *
@ -3379,7 +3460,7 @@ type AddInvoiceResponse struct {
func (m *AddInvoiceResponse) Reset() { *m = AddInvoiceResponse{} } func (m *AddInvoiceResponse) Reset() { *m = AddInvoiceResponse{} }
func (m *AddInvoiceResponse) String() string { return proto.CompactTextString(m) } func (m *AddInvoiceResponse) String() string { return proto.CompactTextString(m) }
func (*AddInvoiceResponse) ProtoMessage() {} func (*AddInvoiceResponse) ProtoMessage() {}
func (*AddInvoiceResponse) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{75} } func (*AddInvoiceResponse) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{77} }
func (m *AddInvoiceResponse) GetRHash() []byte { func (m *AddInvoiceResponse) GetRHash() []byte {
if m != nil { if m != nil {
@ -3407,7 +3488,7 @@ type PaymentHash struct {
func (m *PaymentHash) Reset() { *m = PaymentHash{} } func (m *PaymentHash) Reset() { *m = PaymentHash{} }
func (m *PaymentHash) String() string { return proto.CompactTextString(m) } func (m *PaymentHash) String() string { return proto.CompactTextString(m) }
func (*PaymentHash) ProtoMessage() {} func (*PaymentHash) ProtoMessage() {}
func (*PaymentHash) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{76} } func (*PaymentHash) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{78} }
func (m *PaymentHash) GetRHashStr() string { func (m *PaymentHash) GetRHashStr() string {
if m != nil { if m != nil {
@ -3431,7 +3512,7 @@ type ListInvoiceRequest struct {
func (m *ListInvoiceRequest) Reset() { *m = ListInvoiceRequest{} } func (m *ListInvoiceRequest) Reset() { *m = ListInvoiceRequest{} }
func (m *ListInvoiceRequest) String() string { return proto.CompactTextString(m) } func (m *ListInvoiceRequest) String() string { return proto.CompactTextString(m) }
func (*ListInvoiceRequest) ProtoMessage() {} func (*ListInvoiceRequest) ProtoMessage() {}
func (*ListInvoiceRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{77} } func (*ListInvoiceRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{79} }
func (m *ListInvoiceRequest) GetPendingOnly() bool { func (m *ListInvoiceRequest) GetPendingOnly() bool {
if m != nil { if m != nil {
@ -3447,7 +3528,7 @@ type ListInvoiceResponse struct {
func (m *ListInvoiceResponse) Reset() { *m = ListInvoiceResponse{} } func (m *ListInvoiceResponse) Reset() { *m = ListInvoiceResponse{} }
func (m *ListInvoiceResponse) String() string { return proto.CompactTextString(m) } func (m *ListInvoiceResponse) String() string { return proto.CompactTextString(m) }
func (*ListInvoiceResponse) ProtoMessage() {} func (*ListInvoiceResponse) ProtoMessage() {}
func (*ListInvoiceResponse) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{78} } func (*ListInvoiceResponse) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{80} }
func (m *ListInvoiceResponse) GetInvoices() []*Invoice { func (m *ListInvoiceResponse) GetInvoices() []*Invoice {
if m != nil { if m != nil {
@ -3462,7 +3543,7 @@ type InvoiceSubscription struct {
func (m *InvoiceSubscription) Reset() { *m = InvoiceSubscription{} } func (m *InvoiceSubscription) Reset() { *m = InvoiceSubscription{} }
func (m *InvoiceSubscription) String() string { return proto.CompactTextString(m) } func (m *InvoiceSubscription) String() string { return proto.CompactTextString(m) }
func (*InvoiceSubscription) ProtoMessage() {} func (*InvoiceSubscription) ProtoMessage() {}
func (*InvoiceSubscription) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{79} } func (*InvoiceSubscription) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{81} }
type Payment struct { type Payment struct {
// / The payment hash // / The payment hash
@ -3482,7 +3563,7 @@ type Payment struct {
func (m *Payment) Reset() { *m = Payment{} } func (m *Payment) Reset() { *m = Payment{} }
func (m *Payment) String() string { return proto.CompactTextString(m) } func (m *Payment) String() string { return proto.CompactTextString(m) }
func (*Payment) ProtoMessage() {} func (*Payment) ProtoMessage() {}
func (*Payment) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{80} } func (*Payment) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{82} }
func (m *Payment) GetPaymentHash() string { func (m *Payment) GetPaymentHash() string {
if m != nil { if m != nil {
@ -3532,7 +3613,7 @@ type ListPaymentsRequest struct {
func (m *ListPaymentsRequest) Reset() { *m = ListPaymentsRequest{} } func (m *ListPaymentsRequest) Reset() { *m = ListPaymentsRequest{} }
func (m *ListPaymentsRequest) String() string { return proto.CompactTextString(m) } func (m *ListPaymentsRequest) String() string { return proto.CompactTextString(m) }
func (*ListPaymentsRequest) ProtoMessage() {} func (*ListPaymentsRequest) ProtoMessage() {}
func (*ListPaymentsRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{81} } func (*ListPaymentsRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{83} }
type ListPaymentsResponse struct { type ListPaymentsResponse struct {
// / The list of payments // / The list of payments
@ -3542,7 +3623,7 @@ type ListPaymentsResponse struct {
func (m *ListPaymentsResponse) Reset() { *m = ListPaymentsResponse{} } func (m *ListPaymentsResponse) Reset() { *m = ListPaymentsResponse{} }
func (m *ListPaymentsResponse) String() string { return proto.CompactTextString(m) } func (m *ListPaymentsResponse) String() string { return proto.CompactTextString(m) }
func (*ListPaymentsResponse) ProtoMessage() {} func (*ListPaymentsResponse) ProtoMessage() {}
func (*ListPaymentsResponse) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{82} } func (*ListPaymentsResponse) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{84} }
func (m *ListPaymentsResponse) GetPayments() []*Payment { func (m *ListPaymentsResponse) GetPayments() []*Payment {
if m != nil { if m != nil {
@ -3557,7 +3638,7 @@ type DeleteAllPaymentsRequest struct {
func (m *DeleteAllPaymentsRequest) Reset() { *m = DeleteAllPaymentsRequest{} } func (m *DeleteAllPaymentsRequest) Reset() { *m = DeleteAllPaymentsRequest{} }
func (m *DeleteAllPaymentsRequest) String() string { return proto.CompactTextString(m) } func (m *DeleteAllPaymentsRequest) String() string { return proto.CompactTextString(m) }
func (*DeleteAllPaymentsRequest) ProtoMessage() {} func (*DeleteAllPaymentsRequest) ProtoMessage() {}
func (*DeleteAllPaymentsRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{83} } func (*DeleteAllPaymentsRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{85} }
type DeleteAllPaymentsResponse struct { type DeleteAllPaymentsResponse struct {
} }
@ -3565,7 +3646,7 @@ type DeleteAllPaymentsResponse struct {
func (m *DeleteAllPaymentsResponse) Reset() { *m = DeleteAllPaymentsResponse{} } func (m *DeleteAllPaymentsResponse) Reset() { *m = DeleteAllPaymentsResponse{} }
func (m *DeleteAllPaymentsResponse) String() string { return proto.CompactTextString(m) } func (m *DeleteAllPaymentsResponse) String() string { return proto.CompactTextString(m) }
func (*DeleteAllPaymentsResponse) ProtoMessage() {} func (*DeleteAllPaymentsResponse) ProtoMessage() {}
func (*DeleteAllPaymentsResponse) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{84} } func (*DeleteAllPaymentsResponse) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{86} }
type DebugLevelRequest struct { type DebugLevelRequest struct {
Show bool `protobuf:"varint,1,opt,name=show" json:"show,omitempty"` Show bool `protobuf:"varint,1,opt,name=show" json:"show,omitempty"`
@ -3575,7 +3656,7 @@ type DebugLevelRequest struct {
func (m *DebugLevelRequest) Reset() { *m = DebugLevelRequest{} } func (m *DebugLevelRequest) Reset() { *m = DebugLevelRequest{} }
func (m *DebugLevelRequest) String() string { return proto.CompactTextString(m) } func (m *DebugLevelRequest) String() string { return proto.CompactTextString(m) }
func (*DebugLevelRequest) ProtoMessage() {} func (*DebugLevelRequest) ProtoMessage() {}
func (*DebugLevelRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{85} } func (*DebugLevelRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{87} }
func (m *DebugLevelRequest) GetShow() bool { func (m *DebugLevelRequest) GetShow() bool {
if m != nil { if m != nil {
@ -3598,7 +3679,7 @@ type DebugLevelResponse struct {
func (m *DebugLevelResponse) Reset() { *m = DebugLevelResponse{} } func (m *DebugLevelResponse) Reset() { *m = DebugLevelResponse{} }
func (m *DebugLevelResponse) String() string { return proto.CompactTextString(m) } func (m *DebugLevelResponse) String() string { return proto.CompactTextString(m) }
func (*DebugLevelResponse) ProtoMessage() {} func (*DebugLevelResponse) ProtoMessage() {}
func (*DebugLevelResponse) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{86} } func (*DebugLevelResponse) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{88} }
func (m *DebugLevelResponse) GetSubSystems() string { func (m *DebugLevelResponse) GetSubSystems() string {
if m != nil { if m != nil {
@ -3615,7 +3696,7 @@ type PayReqString struct {
func (m *PayReqString) Reset() { *m = PayReqString{} } func (m *PayReqString) Reset() { *m = PayReqString{} }
func (m *PayReqString) String() string { return proto.CompactTextString(m) } func (m *PayReqString) String() string { return proto.CompactTextString(m) }
func (*PayReqString) ProtoMessage() {} func (*PayReqString) ProtoMessage() {}
func (*PayReqString) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{87} } func (*PayReqString) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{89} }
func (m *PayReqString) GetPayReq() string { func (m *PayReqString) GetPayReq() string {
if m != nil { if m != nil {
@ -3634,12 +3715,13 @@ type PayReq struct {
DescriptionHash string `protobuf:"bytes,7,opt,name=description_hash" json:"description_hash,omitempty"` DescriptionHash string `protobuf:"bytes,7,opt,name=description_hash" json:"description_hash,omitempty"`
FallbackAddr string `protobuf:"bytes,8,opt,name=fallback_addr" json:"fallback_addr,omitempty"` FallbackAddr string `protobuf:"bytes,8,opt,name=fallback_addr" json:"fallback_addr,omitempty"`
CltvExpiry int64 `protobuf:"varint,9,opt,name=cltv_expiry" json:"cltv_expiry,omitempty"` CltvExpiry int64 `protobuf:"varint,9,opt,name=cltv_expiry" json:"cltv_expiry,omitempty"`
RouteHints []*RouteHint `protobuf:"bytes,10,rep,name=route_hints" json:"route_hints,omitempty"`
} }
func (m *PayReq) Reset() { *m = PayReq{} } func (m *PayReq) Reset() { *m = PayReq{} }
func (m *PayReq) String() string { return proto.CompactTextString(m) } func (m *PayReq) String() string { return proto.CompactTextString(m) }
func (*PayReq) ProtoMessage() {} func (*PayReq) ProtoMessage() {}
func (*PayReq) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{88} } func (*PayReq) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{90} }
func (m *PayReq) GetDestination() string { func (m *PayReq) GetDestination() string {
if m != nil { if m != nil {
@ -3704,13 +3786,20 @@ func (m *PayReq) GetCltvExpiry() int64 {
return 0 return 0
} }
func (m *PayReq) GetRouteHints() []*RouteHint {
if m != nil {
return m.RouteHints
}
return nil
}
type FeeReportRequest struct { type FeeReportRequest struct {
} }
func (m *FeeReportRequest) Reset() { *m = FeeReportRequest{} } func (m *FeeReportRequest) Reset() { *m = FeeReportRequest{} }
func (m *FeeReportRequest) String() string { return proto.CompactTextString(m) } func (m *FeeReportRequest) String() string { return proto.CompactTextString(m) }
func (*FeeReportRequest) ProtoMessage() {} func (*FeeReportRequest) ProtoMessage() {}
func (*FeeReportRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{89} } func (*FeeReportRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{91} }
type ChannelFeeReport struct { type ChannelFeeReport struct {
// / The channel that this fee report belongs to. // / The channel that this fee report belongs to.
@ -3726,7 +3815,7 @@ type ChannelFeeReport struct {
func (m *ChannelFeeReport) Reset() { *m = ChannelFeeReport{} } func (m *ChannelFeeReport) Reset() { *m = ChannelFeeReport{} }
func (m *ChannelFeeReport) String() string { return proto.CompactTextString(m) } func (m *ChannelFeeReport) String() string { return proto.CompactTextString(m) }
func (*ChannelFeeReport) ProtoMessage() {} func (*ChannelFeeReport) ProtoMessage() {}
func (*ChannelFeeReport) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{90} } func (*ChannelFeeReport) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{92} }
func (m *ChannelFeeReport) GetChanPoint() string { func (m *ChannelFeeReport) GetChanPoint() string {
if m != nil { if m != nil {
@ -3770,7 +3859,7 @@ type FeeReportResponse struct {
func (m *FeeReportResponse) Reset() { *m = FeeReportResponse{} } func (m *FeeReportResponse) Reset() { *m = FeeReportResponse{} }
func (m *FeeReportResponse) String() string { return proto.CompactTextString(m) } func (m *FeeReportResponse) String() string { return proto.CompactTextString(m) }
func (*FeeReportResponse) ProtoMessage() {} func (*FeeReportResponse) ProtoMessage() {}
func (*FeeReportResponse) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{91} } func (*FeeReportResponse) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{93} }
func (m *FeeReportResponse) GetChannelFees() []*ChannelFeeReport { func (m *FeeReportResponse) GetChannelFees() []*ChannelFeeReport {
if m != nil { if m != nil {
@ -3816,11 +3905,9 @@ type PolicyUpdateRequest struct {
func (m *PolicyUpdateRequest) Reset() { *m = PolicyUpdateRequest{} } func (m *PolicyUpdateRequest) Reset() { *m = PolicyUpdateRequest{} }
func (m *PolicyUpdateRequest) String() string { return proto.CompactTextString(m) } func (m *PolicyUpdateRequest) String() string { return proto.CompactTextString(m) }
func (*PolicyUpdateRequest) ProtoMessage() {} func (*PolicyUpdateRequest) ProtoMessage() {}
func (*PolicyUpdateRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{92} } func (*PolicyUpdateRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{94} }
type isPolicyUpdateRequest_Scope interface { type isPolicyUpdateRequest_Scope interface{ isPolicyUpdateRequest_Scope() }
isPolicyUpdateRequest_Scope()
}
type PolicyUpdateRequest_Global struct { type PolicyUpdateRequest_Global struct {
Global bool `protobuf:"varint,1,opt,name=global,oneof"` Global bool `protobuf:"varint,1,opt,name=global,oneof"`
@ -3953,7 +4040,7 @@ type PolicyUpdateResponse struct {
func (m *PolicyUpdateResponse) Reset() { *m = PolicyUpdateResponse{} } func (m *PolicyUpdateResponse) Reset() { *m = PolicyUpdateResponse{} }
func (m *PolicyUpdateResponse) String() string { return proto.CompactTextString(m) } func (m *PolicyUpdateResponse) String() string { return proto.CompactTextString(m) }
func (*PolicyUpdateResponse) ProtoMessage() {} func (*PolicyUpdateResponse) ProtoMessage() {}
func (*PolicyUpdateResponse) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{93} } func (*PolicyUpdateResponse) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{95} }
type ForwardingHistoryRequest struct { type ForwardingHistoryRequest struct {
// / Start time is the starting point of the forwarding history request. All records beyond this point will be included, respecting the end time, and the index offset. // / Start time is the starting point of the forwarding history request. All records beyond this point will be included, respecting the end time, and the index offset.
@ -3969,7 +4056,7 @@ type ForwardingHistoryRequest struct {
func (m *ForwardingHistoryRequest) Reset() { *m = ForwardingHistoryRequest{} } func (m *ForwardingHistoryRequest) Reset() { *m = ForwardingHistoryRequest{} }
func (m *ForwardingHistoryRequest) String() string { return proto.CompactTextString(m) } func (m *ForwardingHistoryRequest) String() string { return proto.CompactTextString(m) }
func (*ForwardingHistoryRequest) ProtoMessage() {} func (*ForwardingHistoryRequest) ProtoMessage() {}
func (*ForwardingHistoryRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{94} } func (*ForwardingHistoryRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{96} }
func (m *ForwardingHistoryRequest) GetStartTime() uint64 { func (m *ForwardingHistoryRequest) GetStartTime() uint64 {
if m != nil { if m != nil {
@ -4017,7 +4104,7 @@ type ForwardingEvent struct {
func (m *ForwardingEvent) Reset() { *m = ForwardingEvent{} } func (m *ForwardingEvent) Reset() { *m = ForwardingEvent{} }
func (m *ForwardingEvent) String() string { return proto.CompactTextString(m) } func (m *ForwardingEvent) String() string { return proto.CompactTextString(m) }
func (*ForwardingEvent) ProtoMessage() {} func (*ForwardingEvent) ProtoMessage() {}
func (*ForwardingEvent) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{95} } func (*ForwardingEvent) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{97} }
func (m *ForwardingEvent) GetTimestamp() uint64 { func (m *ForwardingEvent) GetTimestamp() uint64 {
if m != nil { if m != nil {
@ -4071,7 +4158,7 @@ type ForwardingHistoryResponse struct {
func (m *ForwardingHistoryResponse) Reset() { *m = ForwardingHistoryResponse{} } func (m *ForwardingHistoryResponse) Reset() { *m = ForwardingHistoryResponse{} }
func (m *ForwardingHistoryResponse) String() string { return proto.CompactTextString(m) } func (m *ForwardingHistoryResponse) String() string { return proto.CompactTextString(m) }
func (*ForwardingHistoryResponse) ProtoMessage() {} func (*ForwardingHistoryResponse) ProtoMessage() {}
func (*ForwardingHistoryResponse) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{96} } func (*ForwardingHistoryResponse) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{98} }
func (m *ForwardingHistoryResponse) GetForwardingEvents() []*ForwardingEvent { func (m *ForwardingHistoryResponse) GetForwardingEvents() []*ForwardingEvent {
if m != nil { if m != nil {
@ -4166,6 +4253,8 @@ func init() {
proto.RegisterType((*NodeUpdate)(nil), "lnrpc.NodeUpdate") proto.RegisterType((*NodeUpdate)(nil), "lnrpc.NodeUpdate")
proto.RegisterType((*ChannelEdgeUpdate)(nil), "lnrpc.ChannelEdgeUpdate") proto.RegisterType((*ChannelEdgeUpdate)(nil), "lnrpc.ChannelEdgeUpdate")
proto.RegisterType((*ClosedChannelUpdate)(nil), "lnrpc.ClosedChannelUpdate") proto.RegisterType((*ClosedChannelUpdate)(nil), "lnrpc.ClosedChannelUpdate")
proto.RegisterType((*HopHint)(nil), "lnrpc.HopHint")
proto.RegisterType((*RouteHint)(nil), "lnrpc.RouteHint")
proto.RegisterType((*Invoice)(nil), "lnrpc.Invoice") proto.RegisterType((*Invoice)(nil), "lnrpc.Invoice")
proto.RegisterType((*AddInvoiceResponse)(nil), "lnrpc.AddInvoiceResponse") proto.RegisterType((*AddInvoiceResponse)(nil), "lnrpc.AddInvoiceResponse")
proto.RegisterType((*PaymentHash)(nil), "lnrpc.PaymentHash") proto.RegisterType((*PaymentHash)(nil), "lnrpc.PaymentHash")
@ -6203,346 +6292,353 @@ var _Lightning_serviceDesc = grpc.ServiceDesc{
func init() { proto.RegisterFile("rpc.proto", fileDescriptor0) } func init() { proto.RegisterFile("rpc.proto", fileDescriptor0) }
var fileDescriptor0 = []byte{ var fileDescriptor0 = []byte{
// 5446 bytes of a gzipped FileDescriptorProto // 5560 bytes of a gzipped FileDescriptorProto
0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xbc, 0x7c, 0xcd, 0x93, 0x1c, 0xc9, 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xbc, 0x5c, 0xcd, 0x93, 0x1c, 0xc9,
0x55, 0xb8, 0xaa, 0xa7, 0xe7, 0xa3, 0x5f, 0xf7, 0x7c, 0xe5, 0x8c, 0x46, 0xad, 0x5e, 0x59, 0xab, 0x55, 0x57, 0xf5, 0xf4, 0x7c, 0xf4, 0xeb, 0x9e, 0x9e, 0x99, 0x9c, 0xd1, 0xa8, 0xd5, 0xd2, 0x6a,
0x4d, 0x6f, 0x58, 0xfa, 0xcd, 0x6f, 0xd1, 0x68, 0xc7, 0xf6, 0xb2, 0xac, 0xc0, 0x0e, 0x7d, 0xcf, 0xb5, 0xe5, 0x8d, 0x95, 0x18, 0x16, 0x8d, 0x76, 0x6c, 0x2f, 0xeb, 0x15, 0xac, 0xd1, 0xf7, 0xac,
0xda, 0x5a, 0x79, 0x5c, 0x23, 0x79, 0xc1, 0x0b, 0xb4, 0x6b, 0xba, 0x73, 0x7a, 0xca, 0xea, 0xae, 0xad, 0x95, 0xc7, 0x35, 0x92, 0x17, 0xbc, 0x40, 0xbb, 0xa6, 0x3b, 0xa7, 0xa7, 0xac, 0xea, 0xaa,
0xaa, 0xad, 0xaa, 0x9e, 0x51, 0xef, 0xa2, 0x08, 0x3e, 0x22, 0x38, 0xe1, 0xe0, 0x00, 0x17, 0x43, 0xda, 0xaa, 0xea, 0x19, 0xf5, 0x2e, 0x8a, 0xe0, 0x23, 0x82, 0x13, 0x0e, 0x0e, 0x70, 0x31, 0x04,
0x38, 0x88, 0xb0, 0x2f, 0x70, 0xe0, 0xc8, 0xc9, 0x04, 0x7f, 0x80, 0x23, 0x08, 0x0e, 0x3e, 0x39, 0x41, 0x84, 0x7d, 0x81, 0x03, 0x47, 0x4e, 0xe6, 0x2f, 0x70, 0x04, 0x41, 0x10, 0x7b, 0x72, 0x70,
0xb8, 0xf1, 0x71, 0x00, 0x82, 0x23, 0x17, 0x0e, 0x04, 0xf1, 0x5e, 0x7e, 0x54, 0x66, 0x55, 0x8d, 0xe3, 0xe3, 0x00, 0x04, 0x17, 0x22, 0xb8, 0x70, 0x20, 0x88, 0xf7, 0xf2, 0xa3, 0x32, 0xab, 0x6a,
0x24, 0xdb, 0xc0, 0xad, 0xf3, 0xe5, 0xcb, 0x97, 0x5f, 0xef, 0xbd, 0x7c, 0x5f, 0xd5, 0xd0, 0x4a, 0x24, 0xd9, 0x06, 0xdf, 0x3a, 0x7f, 0xf9, 0xea, 0xe5, 0xd7, 0x7b, 0x2f, 0xdf, 0x7b, 0x99, 0xd9,
0x93, 0xc1, 0xf5, 0x24, 0x8d, 0xf3, 0x98, 0xcd, 0x8f, 0xa3, 0x34, 0x19, 0xf4, 0x2e, 0x8d, 0xe2, 0xd0, 0x4a, 0x93, 0xe1, 0xb5, 0x24, 0x8d, 0xf3, 0x98, 0xcd, 0x87, 0x51, 0x9a, 0x0c, 0xfb, 0x17,
0x78, 0x34, 0x16, 0x3b, 0x41, 0x12, 0xee, 0x04, 0x51, 0x14, 0xe7, 0x41, 0x1e, 0xc6, 0x51, 0x26, 0xc7, 0x71, 0x3c, 0x0e, 0xf9, 0xb6, 0x9f, 0x04, 0xdb, 0x7e, 0x14, 0xc5, 0xb9, 0x9f, 0x07, 0x71,
0x91, 0xf8, 0xb7, 0x60, 0xe5, 0x81, 0x88, 0x0e, 0x84, 0x18, 0xfa, 0xe2, 0xe3, 0xa9, 0xc8, 0x72, 0x94, 0x09, 0x22, 0xf7, 0x5b, 0xd0, 0xbd, 0xcf, 0xa3, 0x7d, 0xce, 0x47, 0x1e, 0xff, 0x78, 0xca,
0xf6, 0xff, 0x61, 0x3d, 0x10, 0x9f, 0x08, 0x31, 0xec, 0x27, 0x41, 0x96, 0x25, 0xc7, 0x69, 0x90, 0xb3, 0x9c, 0xfd, 0x3c, 0xac, 0xf9, 0xfc, 0x13, 0xce, 0x47, 0x83, 0xc4, 0xcf, 0xb2, 0xe4, 0x28,
0x89, 0xae, 0x77, 0xc5, 0xbb, 0xd6, 0xf1, 0xd7, 0x64, 0xc7, 0xbe, 0x81, 0xb3, 0x37, 0xa0, 0x93, 0xf5, 0x33, 0xde, 0x73, 0x2e, 0x3b, 0x57, 0x3b, 0xde, 0xaa, 0xa8, 0xd8, 0xd3, 0x38, 0x7b, 0x0d,
0x21, 0xaa, 0x88, 0xf2, 0x34, 0x4e, 0x66, 0xdd, 0x06, 0xe1, 0xb5, 0x11, 0x76, 0x4f, 0x82, 0xf8, 0x3a, 0x19, 0x92, 0xf2, 0x28, 0x4f, 0xe3, 0x64, 0xd6, 0x6b, 0x10, 0x5d, 0x1b, 0xb1, 0xbb, 0x02,
0x18, 0x56, 0xcd, 0x0c, 0x59, 0x12, 0x47, 0x99, 0x60, 0x37, 0x60, 0x73, 0x10, 0x26, 0xc7, 0x22, 0x72, 0x43, 0x58, 0xd1, 0x2d, 0x64, 0x49, 0x1c, 0x65, 0x9c, 0x5d, 0x87, 0x8d, 0x61, 0x90, 0x1c,
0xed, 0xd3, 0xe0, 0x49, 0x24, 0x26, 0x71, 0x14, 0x0e, 0xba, 0xde, 0x95, 0xb9, 0x6b, 0x2d, 0x9f, 0xf1, 0x74, 0x40, 0x1f, 0x4f, 0x22, 0x3e, 0x89, 0xa3, 0x60, 0xd8, 0x73, 0x2e, 0xcf, 0x5d, 0x6d,
0xc9, 0x3e, 0x1c, 0xf1, 0x81, 0xea, 0x61, 0x57, 0x61, 0x55, 0x44, 0x12, 0x2e, 0x86, 0x34, 0x4a, 0x79, 0x4c, 0xd4, 0xe1, 0x17, 0x1f, 0xc8, 0x1a, 0x76, 0x05, 0x56, 0x78, 0x24, 0x70, 0x3e, 0xa2,
0x4d, 0xb5, 0x52, 0x80, 0x71, 0x00, 0xff, 0x53, 0x0f, 0xd6, 0xdf, 0x8f, 0xc2, 0xfc, 0xc3, 0x60, 0xaf, 0x64, 0x53, 0xdd, 0x02, 0xc6, 0x0f, 0xdc, 0x3f, 0x75, 0x60, 0xed, 0xfd, 0x28, 0xc8, 0x3f,
0x3c, 0x16, 0xb9, 0xde, 0xd3, 0x55, 0x58, 0x3d, 0x25, 0x00, 0xed, 0xe9, 0x34, 0x4e, 0x87, 0x6a, 0xf4, 0xc3, 0x90, 0xe7, 0x6a, 0x4c, 0x57, 0x60, 0xe5, 0x84, 0x00, 0x1a, 0xd3, 0x49, 0x9c, 0x8e,
0x47, 0x2b, 0x12, 0xbc, 0xaf, 0xa0, 0x67, 0xae, 0xac, 0x71, 0xe6, 0xca, 0x6a, 0x8f, 0x6b, 0xae, 0xe4, 0x88, 0xba, 0x02, 0xde, 0x93, 0xe8, 0xa9, 0x3d, 0x6b, 0x9c, 0xda, 0xb3, 0xda, 0xe9, 0x9a,
0xfe, 0xb8, 0xf8, 0x26, 0x30, 0x7b, 0x71, 0xf2, 0x38, 0xf8, 0x97, 0x60, 0xe3, 0x49, 0x34, 0x8e, 0xab, 0x9f, 0x2e, 0x77, 0x03, 0x98, 0xd9, 0x39, 0x31, 0x1d, 0xee, 0x7b, 0xb0, 0xfe, 0x38, 0x0a,
0x07, 0x4f, 0x7f, 0xb6, 0x45, 0xf3, 0x2d, 0xd8, 0x74, 0xc7, 0x2b, 0xba, 0xdf, 0x6d, 0x40, 0xfb, 0xe3, 0xe1, 0x93, 0x9f, 0xac, 0xd3, 0xee, 0x26, 0x6c, 0xd8, 0xdf, 0x4b, 0xbe, 0xdf, 0x6d, 0x40,
0x71, 0x1a, 0x44, 0x59, 0x30, 0xc0, 0x2b, 0x67, 0x5d, 0x58, 0xcc, 0x9f, 0xf5, 0x8f, 0x83, 0xec, 0xfb, 0x51, 0xea, 0x47, 0x99, 0x3f, 0xc4, 0x25, 0x67, 0x3d, 0x58, 0xcc, 0x9f, 0x0e, 0x8e, 0xfc,
0x98, 0x08, 0xb5, 0x7c, 0xdd, 0x64, 0x5b, 0xb0, 0x10, 0x4c, 0xe2, 0x69, 0x94, 0xd3, 0xa9, 0xce, 0xec, 0x88, 0x18, 0xb5, 0x3c, 0x55, 0x64, 0x9b, 0xb0, 0xe0, 0x4f, 0xe2, 0x69, 0x94, 0xd3, 0xac,
0xf9, 0xaa, 0xc5, 0xde, 0x82, 0xf5, 0x68, 0x3a, 0xe9, 0x0f, 0xe2, 0xe8, 0x28, 0x4c, 0x27, 0x92, 0xce, 0x79, 0xb2, 0xc4, 0xde, 0x84, 0xb5, 0x68, 0x3a, 0x19, 0x0c, 0xe3, 0xe8, 0x30, 0x48, 0x27,
0x71, 0x68, 0x73, 0xf3, 0x7e, 0xb5, 0x83, 0x5d, 0x06, 0x38, 0xc4, 0x65, 0xc8, 0x29, 0x9a, 0x34, 0x42, 0x70, 0x68, 0x70, 0xf3, 0x5e, 0xb5, 0x82, 0x5d, 0x02, 0x38, 0xc0, 0x6e, 0x88, 0x26, 0x9a,
0x85, 0x05, 0x61, 0x1c, 0x3a, 0xaa, 0x25, 0xc2, 0xd1, 0x71, 0xde, 0x9d, 0x27, 0x42, 0x0e, 0x0c, 0xd4, 0x84, 0x81, 0x30, 0x17, 0x3a, 0xb2, 0xc4, 0x83, 0xf1, 0x51, 0xde, 0x9b, 0x27, 0x46, 0x16,
0x69, 0xe4, 0xe1, 0x44, 0xf4, 0xb3, 0x3c, 0x98, 0x24, 0xdd, 0x05, 0x5a, 0x8d, 0x05, 0xa1, 0xfe, 0x86, 0x3c, 0xf2, 0x60, 0xc2, 0x07, 0x59, 0xee, 0x4f, 0x92, 0xde, 0x02, 0xf5, 0xc6, 0x40, 0xa8,
0x38, 0x0f, 0xc6, 0xfd, 0x23, 0x21, 0xb2, 0xee, 0xa2, 0xea, 0x37, 0x10, 0xf6, 0x39, 0x58, 0x19, 0x3e, 0xce, 0xfd, 0x70, 0x70, 0xc8, 0x79, 0xd6, 0x5b, 0x94, 0xf5, 0x1a, 0x61, 0x6f, 0x40, 0x77,
0x8a, 0x2c, 0xef, 0x07, 0xc3, 0x61, 0x2a, 0xb2, 0x4c, 0x64, 0xdd, 0x25, 0xba, 0xba, 0x12, 0x94, 0xc4, 0xb3, 0x7c, 0xe0, 0x8f, 0x46, 0x29, 0xcf, 0x32, 0x9e, 0xf5, 0x96, 0x68, 0xe9, 0x4a, 0xa8,
0x77, 0x61, 0xeb, 0x81, 0xc8, 0xad, 0xd3, 0xc9, 0xd4, 0xb1, 0xf3, 0x87, 0xc0, 0x2c, 0xf0, 0x5d, 0xdb, 0x83, 0xcd, 0xfb, 0x3c, 0x37, 0x66, 0x27, 0x93, 0xd3, 0xee, 0x3e, 0x00, 0x66, 0xc0, 0x77,
0x91, 0x07, 0xe1, 0x38, 0x63, 0xef, 0x40, 0x27, 0xb7, 0x90, 0x89, 0x55, 0xdb, 0xbb, 0xec, 0x3a, 0x78, 0xee, 0x07, 0x61, 0xc6, 0xde, 0x86, 0x4e, 0x6e, 0x10, 0x93, 0xa8, 0xb6, 0x77, 0xd8, 0x35,
0xc9, 0xd8, 0x75, 0x6b, 0x80, 0xef, 0xe0, 0xf1, 0xff, 0xf4, 0xa0, 0x7d, 0x20, 0x22, 0x23, 0x5d, 0xd2, 0xb1, 0x6b, 0xc6, 0x07, 0x9e, 0x45, 0xe7, 0xfe, 0xb7, 0x03, 0xed, 0x7d, 0x1e, 0x69, 0xed,
0x0c, 0x9a, 0xb8, 0x12, 0x75, 0x93, 0xf4, 0x9b, 0xbd, 0x0e, 0x6d, 0x5a, 0x5d, 0x96, 0xa7, 0x61, 0x62, 0xd0, 0xc4, 0x9e, 0xc8, 0x95, 0xa4, 0xdf, 0xec, 0x55, 0x68, 0x53, 0xef, 0xb2, 0x3c, 0x0d,
0x34, 0xa2, 0x2b, 0x68, 0xf9, 0x80, 0xa0, 0x03, 0x82, 0xb0, 0x35, 0x98, 0x0b, 0x26, 0x39, 0x1d, 0xa2, 0x31, 0x2d, 0x41, 0xcb, 0x03, 0x84, 0xf6, 0x09, 0x61, 0xab, 0x30, 0xe7, 0x4f, 0x72, 0x9a,
0xfc, 0x9c, 0x8f, 0x3f, 0x51, 0xee, 0x92, 0x60, 0x36, 0x11, 0x51, 0x5e, 0x1c, 0x76, 0xc7, 0x6f, 0xf8, 0x39, 0x0f, 0x7f, 0xa2, 0xde, 0x25, 0xfe, 0x6c, 0xc2, 0xa3, 0xbc, 0x98, 0xec, 0x8e, 0xd7,
0x2b, 0xd8, 0x1e, 0x9e, 0xf6, 0x75, 0xd8, 0xb0, 0x51, 0x34, 0xf5, 0x79, 0xa2, 0xbe, 0x6e, 0x61, 0x96, 0xd8, 0x2e, 0xce, 0xf6, 0x35, 0x58, 0x37, 0x49, 0x14, 0xf7, 0x79, 0xe2, 0xbe, 0x66, 0x50,
0xaa, 0x49, 0xae, 0xc2, 0xaa, 0xc6, 0x4f, 0xe5, 0x62, 0xe9, 0xf8, 0x5b, 0xfe, 0x8a, 0x02, 0xeb, 0xca, 0x46, 0xae, 0xc0, 0x8a, 0xa2, 0x4f, 0x45, 0x67, 0x69, 0xfa, 0x5b, 0x5e, 0x57, 0xc2, 0x6a,
0x2d, 0x5c, 0x83, 0xb5, 0xa3, 0x30, 0x0a, 0xc6, 0xfd, 0xc1, 0x38, 0x3f, 0xe9, 0x0f, 0xc5, 0x38, 0x08, 0x57, 0x61, 0xf5, 0x30, 0x88, 0xfc, 0x70, 0x30, 0x0c, 0xf3, 0xe3, 0xc1, 0x88, 0x87, 0xb9,
0x0f, 0xe8, 0x22, 0xe6, 0xfd, 0x15, 0x82, 0xdf, 0x19, 0xe7, 0x27, 0x77, 0x11, 0xca, 0xff, 0xd8, 0x4f, 0x0b, 0x31, 0xef, 0x75, 0x09, 0xbf, 0x1d, 0xe6, 0xc7, 0x77, 0x10, 0x75, 0xff, 0xd8, 0x81,
0x83, 0x8e, 0xdc, 0xbc, 0x12, 0xfc, 0x37, 0x61, 0x59, 0xcf, 0x21, 0xd2, 0x34, 0x4e, 0x15, 0x1f, 0x8e, 0x18, 0xbc, 0x54, 0xfc, 0xd7, 0x61, 0x59, 0xb5, 0xc1, 0xd3, 0x34, 0x4e, 0xa5, 0x1c, 0xda,
0xba, 0x40, 0xb6, 0x0d, 0x6b, 0x1a, 0x90, 0xa4, 0x22, 0x9c, 0x04, 0x23, 0xa1, 0xa4, 0xbd, 0x02, 0x20, 0xdb, 0x82, 0x55, 0x05, 0x24, 0x29, 0x0f, 0x26, 0xfe, 0x98, 0x4b, 0x6d, 0xaf, 0xe0, 0x6c,
0x67, 0xbb, 0x05, 0xc5, 0x34, 0x9e, 0xe6, 0x52, 0xf4, 0xda, 0xbb, 0x1d, 0x75, 0x31, 0x3e, 0xc2, 0xa7, 0xe0, 0x98, 0xc6, 0xd3, 0x5c, 0xa8, 0x5e, 0x7b, 0xa7, 0x23, 0x17, 0xc6, 0x43, 0xcc, 0xb3,
0x7c, 0x17, 0x85, 0x7f, 0xdf, 0x83, 0xce, 0x9d, 0xe3, 0x20, 0x8a, 0xc4, 0x78, 0x3f, 0x0e, 0xa3, 0x49, 0xdc, 0xef, 0x39, 0xd0, 0xb9, 0x7d, 0xe4, 0x47, 0x11, 0x0f, 0xf7, 0xe2, 0x20, 0xca, 0xd9,
0x9c, 0xdd, 0x00, 0x76, 0x34, 0x8d, 0x86, 0x61, 0x34, 0xea, 0xe7, 0xcf, 0xc2, 0x61, 0xff, 0x70, 0x75, 0x60, 0x87, 0xd3, 0x68, 0x14, 0x44, 0xe3, 0x41, 0xfe, 0x34, 0x18, 0x0d, 0x0e, 0x66, 0x39,
0x96, 0x8b, 0x4c, 0x5e, 0xd1, 0xde, 0x39, 0xbf, 0xa6, 0x8f, 0xbd, 0x05, 0x6b, 0x0e, 0x34, 0xcb, 0xcf, 0xc4, 0x12, 0xed, 0x9e, 0xf1, 0x6a, 0xea, 0xd8, 0x9b, 0xb0, 0x6a, 0xa1, 0x59, 0x9e, 0x8a,
0x53, 0x79, 0x6f, 0x7b, 0xe7, 0xfc, 0x4a, 0x0f, 0x32, 0x7e, 0x3c, 0xcd, 0x93, 0x69, 0xde, 0x0f, 0x75, 0xdb, 0x3d, 0xe3, 0x55, 0x6a, 0x50, 0xf0, 0xe3, 0x69, 0x9e, 0x4c, 0xf3, 0x41, 0x10, 0x8d,
0xa3, 0xa1, 0x78, 0x46, 0x6b, 0x5c, 0xf6, 0x1d, 0xd8, 0xed, 0x15, 0xe8, 0xd8, 0xe3, 0xf8, 0x97, 0xf8, 0x53, 0xea, 0xe3, 0xb2, 0x67, 0x61, 0xb7, 0xba, 0xd0, 0x31, 0xbf, 0x73, 0xdf, 0x83, 0xd5,
0x60, 0xed, 0x21, 0x4a, 0x44, 0x14, 0x46, 0xa3, 0x5b, 0x92, 0x6d, 0x51, 0x4c, 0x93, 0xe9, 0xe1, 0x07, 0xa8, 0x11, 0x51, 0x10, 0x8d, 0x6f, 0x0a, 0xb1, 0x45, 0x35, 0x4d, 0xa6, 0x07, 0x4f, 0xf8,
0x53, 0x31, 0x53, 0xe7, 0xa6, 0x5a, 0xc8, 0x54, 0xc7, 0x71, 0x96, 0x2b, 0xce, 0xa1, 0xdf, 0xfc, 0x4c, 0xce, 0x9b, 0x2c, 0xa1, 0x50, 0x1d, 0xc5, 0x59, 0x2e, 0x25, 0x87, 0x7e, 0xbb, 0xff, 0xe4,
0x1f, 0x3d, 0x58, 0xc5, 0xb3, 0xff, 0x20, 0x88, 0x66, 0xfa, 0xe6, 0x1e, 0x42, 0x07, 0x49, 0x3d, 0xc0, 0x0a, 0xce, 0xfd, 0x07, 0x7e, 0x34, 0x53, 0x2b, 0xf7, 0x00, 0x3a, 0xc8, 0xea, 0x51, 0x7c,
0x8e, 0x6f, 0x49, 0x61, 0x97, 0x4c, 0x7c, 0x4d, 0x9d, 0x55, 0x09, 0xfb, 0xba, 0x8d, 0x8a, 0xca, 0x53, 0x28, 0xbb, 0x10, 0xe2, 0xab, 0x72, 0xae, 0x4a, 0xd4, 0xd7, 0x4c, 0x52, 0x34, 0xe6, 0x33,
0x7c, 0xe6, 0x3b, 0xa3, 0x91, 0x6d, 0xf3, 0x20, 0x1d, 0x89, 0x9c, 0xd4, 0x80, 0x52, 0x0b, 0x20, 0xcf, 0xfa, 0x1a, 0xc5, 0x36, 0xf7, 0xd3, 0x31, 0xcf, 0xc9, 0x0c, 0x48, 0xb3, 0x00, 0x02, 0xba,
0x41, 0x77, 0xe2, 0xe8, 0x88, 0x5d, 0x81, 0x4e, 0x16, 0xe4, 0xfd, 0x44, 0xa4, 0x74, 0x6a, 0xc4, 0x1d, 0x47, 0x87, 0xec, 0x32, 0x74, 0x32, 0x3f, 0x1f, 0x24, 0x3c, 0xa5, 0x59, 0x23, 0xd1, 0x9b,
0x7a, 0x73, 0x3e, 0x64, 0x41, 0xbe, 0x2f, 0xd2, 0xdb, 0xb3, 0x5c, 0xf4, 0xbe, 0x0c, 0xeb, 0x95, 0xf3, 0x20, 0xf3, 0xf3, 0x3d, 0x9e, 0xde, 0x9a, 0xe5, 0xbc, 0xff, 0x65, 0x58, 0xab, 0xb4, 0x82,
0x59, 0x90, 0xdb, 0x8b, 0x2d, 0xe2, 0x4f, 0xb6, 0x09, 0xf3, 0x27, 0xc1, 0x78, 0x2a, 0x94, 0x76, 0xd2, 0x5e, 0x0c, 0x11, 0x7f, 0xb2, 0x0d, 0x98, 0x3f, 0xf6, 0xc3, 0x29, 0x97, 0xd6, 0x49, 0x14,
0x92, 0x8d, 0xf7, 0x1a, 0xef, 0x7a, 0xfc, 0x73, 0xb0, 0x56, 0x2c, 0x5b, 0x31, 0x19, 0x83, 0x26, 0xde, 0x6d, 0xbc, 0xe3, 0xb8, 0x6f, 0xc0, 0x6a, 0xd1, 0x6d, 0x29, 0x64, 0x0c, 0x9a, 0x38, 0x83,
0x9e, 0xa0, 0x22, 0x40, 0xbf, 0xf9, 0xef, 0x78, 0x12, 0xf1, 0x4e, 0x1c, 0x1a, 0x49, 0x47, 0x44, 0x92, 0x01, 0xfd, 0x76, 0x7f, 0xc7, 0x11, 0x84, 0xb7, 0xe3, 0x40, 0x6b, 0x3a, 0x12, 0xa2, 0x41,
0x54, 0x08, 0x1a, 0x11, 0x7f, 0x9f, 0xa9, 0x09, 0x7f, 0xfe, 0xcd, 0xf2, 0xab, 0xb0, 0x6e, 0x2d, 0x50, 0x84, 0xf8, 0xfb, 0x54, 0x4b, 0xf8, 0xd3, 0x0f, 0xd6, 0xbd, 0x02, 0x6b, 0x46, 0x17, 0x9e,
0xe1, 0x05, 0x8b, 0xfd, 0x8e, 0x07, 0xeb, 0x8f, 0xc4, 0xa9, 0xba, 0x75, 0xbd, 0xda, 0x77, 0xa1, 0xd3, 0xd9, 0xef, 0x38, 0xb0, 0xf6, 0x90, 0x9f, 0xc8, 0x55, 0x57, 0xbd, 0x7d, 0x07, 0x9a, 0xf9,
0x99, 0xcf, 0x12, 0xf9, 0x14, 0xaf, 0xec, 0xbe, 0xa9, 0x2e, 0xad, 0x82, 0x77, 0x5d, 0x35, 0x1f, 0x2c, 0x11, 0x5b, 0x71, 0x77, 0xe7, 0x75, 0xb9, 0x68, 0x15, 0xba, 0x6b, 0xb2, 0xf8, 0x68, 0x96,
0xcf, 0x12, 0xe1, 0xd3, 0x08, 0xfe, 0x25, 0x68, 0x5b, 0x40, 0x76, 0x01, 0x36, 0x3e, 0x7c, 0xff, 0x70, 0x8f, 0xbe, 0x70, 0xdf, 0x83, 0xb6, 0x01, 0xb2, 0x73, 0xb0, 0xfe, 0xe1, 0xfb, 0x8f, 0x1e,
0xf1, 0xa3, 0x7b, 0x07, 0x07, 0xfd, 0xfd, 0x27, 0xb7, 0xbf, 0x7a, 0xef, 0xd7, 0xfa, 0x7b, 0xb7, 0xde, 0xdd, 0xdf, 0x1f, 0xec, 0x3d, 0xbe, 0xf5, 0xd5, 0xbb, 0xbf, 0x36, 0xd8, 0xbd, 0xb9, 0xbf,
0x0e, 0xf6, 0xd6, 0xce, 0xb1, 0x2d, 0x60, 0x8f, 0xee, 0x1d, 0x3c, 0xbe, 0x77, 0xd7, 0x81, 0x7b, 0xbb, 0x7a, 0x86, 0x6d, 0x02, 0x7b, 0x78, 0x77, 0xff, 0xd1, 0xdd, 0x3b, 0x16, 0xee, 0xb8, 0x7d,
0xbc, 0x07, 0xdd, 0x47, 0xe2, 0xf4, 0xc3, 0x30, 0x8f, 0x44, 0x96, 0xb9, 0xb3, 0xf1, 0xeb, 0xc0, 0xe8, 0x3d, 0xe4, 0x27, 0x1f, 0x06, 0x79, 0xc4, 0xb3, 0xcc, 0x6e, 0xcd, 0xbd, 0x06, 0xcc, 0xec,
0xec, 0x25, 0xa8, 0x5d, 0x75, 0x61, 0x51, 0xa9, 0x5a, 0xfd, 0xd2, 0xa8, 0x26, 0xff, 0x1c, 0xb0, 0x82, 0x1c, 0x55, 0x0f, 0x16, 0xa5, 0xa9, 0x55, 0x3b, 0x8d, 0x2c, 0xba, 0x6f, 0x00, 0xdb, 0x0f,
0x83, 0x70, 0x14, 0x7d, 0x20, 0xb2, 0x2c, 0x18, 0x09, 0xbd, 0xb7, 0x35, 0x98, 0x9b, 0x64, 0x23, 0xc6, 0xd1, 0x07, 0x3c, 0xcb, 0xfc, 0x31, 0x57, 0x63, 0x5b, 0x85, 0xb9, 0x49, 0x36, 0x96, 0x46,
0xa5, 0x14, 0xf1, 0x27, 0xff, 0x3c, 0x6c, 0x38, 0x78, 0x8a, 0xf0, 0x25, 0x68, 0x65, 0xe1, 0x28, 0x11, 0x7f, 0xba, 0x9f, 0x87, 0x75, 0x8b, 0x4e, 0x32, 0xbe, 0x08, 0xad, 0x2c, 0x18, 0x47, 0x7e,
0x0a, 0xf2, 0x69, 0x2a, 0x14, 0xe9, 0x02, 0xc0, 0xef, 0xc3, 0xe6, 0x37, 0x44, 0x1a, 0x1e, 0xcd, 0x3e, 0x4d, 0xb9, 0x64, 0x5d, 0x00, 0xee, 0x3d, 0xd8, 0xf8, 0x06, 0x4f, 0x83, 0xc3, 0xd9, 0x8b,
0x5e, 0x46, 0xde, 0xa5, 0xd3, 0x28, 0xd3, 0xb9, 0x07, 0xe7, 0x4b, 0x74, 0xd4, 0xf4, 0x92, 0x11, 0xd8, 0xdb, 0x7c, 0x1a, 0x65, 0x3e, 0x77, 0xe1, 0x6c, 0x89, 0x8f, 0x6c, 0x5e, 0x08, 0xa2, 0x5c,
0xd5, 0x75, 0x2d, 0xf9, 0xb2, 0x61, 0x89, 0x65, 0xc3, 0x16, 0x4b, 0xfe, 0x04, 0xd8, 0x9d, 0x38, 0xae, 0x25, 0x4f, 0x14, 0x0c, 0xb5, 0x6c, 0x98, 0x6a, 0xe9, 0x3e, 0x06, 0x76, 0x3b, 0x8e, 0x22,
0x8a, 0xc4, 0x20, 0xdf, 0x17, 0x22, 0x2d, 0xec, 0xab, 0x82, 0xeb, 0xda, 0xbb, 0x17, 0xd4, 0x3d, 0x3e, 0xcc, 0xf7, 0x38, 0x4f, 0x0b, 0xff, 0xaa, 0x90, 0xba, 0xf6, 0xce, 0x39, 0xb9, 0x8e, 0x65,
0x96, 0x65, 0x5d, 0xb1, 0x23, 0x83, 0x66, 0x22, 0xd2, 0x09, 0x11, 0x5e, 0xf2, 0xe9, 0x37, 0x3f, 0x5d, 0x97, 0xe2, 0xc8, 0xa0, 0x99, 0xf0, 0x74, 0x42, 0x8c, 0x97, 0x3c, 0xfa, 0xed, 0x9e, 0x85,
0x0f, 0x1b, 0x0e, 0x59, 0xf5, 0xda, 0xbf, 0x0d, 0xe7, 0xef, 0x86, 0xd9, 0xa0, 0x3a, 0x61, 0x17, 0x75, 0x8b, 0xad, 0xdc, 0xed, 0xdf, 0x82, 0xb3, 0x77, 0x82, 0x6c, 0x58, 0x6d, 0xb0, 0x07, 0x8b,
0x16, 0x93, 0xe9, 0x61, 0xbf, 0x90, 0x29, 0xdd, 0xc4, 0x47, 0xb0, 0x3c, 0x44, 0x11, 0xfb, 0x7d, 0xc9, 0xf4, 0x60, 0x50, 0xe8, 0x94, 0x2a, 0xe2, 0x26, 0x58, 0xfe, 0x44, 0x32, 0xfb, 0x7d, 0x07,
0x0f, 0x9a, 0x7b, 0x8f, 0x1f, 0xde, 0x61, 0x3d, 0x58, 0x0a, 0xa3, 0x41, 0x3c, 0xc1, 0xa7, 0x43, 0x9a, 0xbb, 0x8f, 0x1e, 0xdc, 0x66, 0x7d, 0x58, 0x0a, 0xa2, 0x61, 0x3c, 0xc1, 0xad, 0x43, 0x0c,
0x6e, 0xda, 0xb4, 0xcf, 0x94, 0x95, 0x4b, 0xd0, 0xa2, 0x17, 0x07, 0xdf, 0x75, 0x65, 0x0a, 0x15, 0x5a, 0x97, 0x4f, 0xd5, 0x95, 0x8b, 0xd0, 0xa2, 0x1d, 0x07, 0xf7, 0x75, 0xe9, 0x0a, 0x15, 0x00,
0x00, 0xb4, 0x29, 0xc4, 0xb3, 0x24, 0x4c, 0xc9, 0x68, 0xd0, 0xa6, 0x40, 0x93, 0x34, 0x62, 0xb5, 0xfa, 0x14, 0xfc, 0x69, 0x12, 0xa4, 0xe4, 0x34, 0x28, 0x57, 0xa0, 0x49, 0x16, 0xb1, 0x5a, 0xe1,
0x83, 0xff, 0x57, 0x13, 0x16, 0x95, 0xae, 0xa6, 0xf9, 0x06, 0x79, 0x78, 0x22, 0xd4, 0x4a, 0x54, 0xfe, 0x4f, 0x13, 0x16, 0xa5, 0xad, 0xa6, 0xf6, 0x86, 0x79, 0x70, 0xcc, 0x65, 0x4f, 0x64, 0x09,
0x0b, 0x5f, 0x95, 0x54, 0x4c, 0xe2, 0x5c, 0xf4, 0x9d, 0x6b, 0x70, 0x81, 0x88, 0x35, 0x90, 0x84, 0x77, 0x95, 0x94, 0x4f, 0xe2, 0x9c, 0x0f, 0xac, 0x65, 0xb0, 0x41, 0xa4, 0x1a, 0x0a, 0x46, 0x83,
0xfa, 0x09, 0x6a, 0x7d, 0x5a, 0x59, 0xcb, 0x77, 0x81, 0x78, 0x58, 0x08, 0xe8, 0x87, 0x43, 0x5a, 0x04, 0xad, 0x3e, 0xf5, 0xac, 0xe5, 0xd9, 0x20, 0x4e, 0x16, 0x02, 0x83, 0x60, 0x44, 0x7d, 0x6a,
0x53, 0xd3, 0xd7, 0x4d, 0x3c, 0x89, 0x41, 0x90, 0x04, 0x83, 0x30, 0x9f, 0x29, 0xe1, 0x36, 0x6d, 0x7a, 0xaa, 0x88, 0x33, 0x31, 0xf4, 0x13, 0x7f, 0x18, 0xe4, 0x33, 0xa9, 0xdc, 0xba, 0x8c, 0xbc,
0xa4, 0x3d, 0x8e, 0x07, 0xc1, 0xb8, 0x7f, 0x18, 0x8c, 0x83, 0x68, 0x20, 0x94, 0xe1, 0xe2, 0x02, 0xc3, 0x78, 0xe8, 0x87, 0x83, 0x03, 0x3f, 0xf4, 0xa3, 0x21, 0x97, 0x8e, 0x8b, 0x0d, 0xa2, 0x6f,
0xd1, 0x36, 0x51, 0x4b, 0xd2, 0x68, 0xd2, 0x7e, 0x29, 0x41, 0xd1, 0xc6, 0x19, 0xc4, 0x93, 0x49, 0x22, 0xbb, 0xa4, 0xc8, 0x84, 0xff, 0x52, 0x42, 0xd1, 0xc7, 0x19, 0xc6, 0x93, 0x49, 0x90, 0xa3,
0x98, 0xa3, 0x49, 0xd3, 0x5d, 0x92, 0x8a, 0xa4, 0x80, 0xd0, 0x4e, 0x64, 0xeb, 0x54, 0x9e, 0x5e, 0x4b, 0xd3, 0x5b, 0x12, 0x86, 0xa4, 0x40, 0x68, 0x24, 0xa2, 0x74, 0x22, 0x66, 0xaf, 0x25, 0x5a,
0x4b, 0xce, 0xe6, 0x00, 0x91, 0xca, 0x91, 0x10, 0xa4, 0x90, 0x9e, 0x9e, 0x76, 0x41, 0x52, 0x29, 0xb3, 0x40, 0xe4, 0x72, 0xc8, 0x39, 0x19, 0xa4, 0x27, 0x27, 0x3d, 0x10, 0x5c, 0x0a, 0x04, 0xd7,
0x20, 0x78, 0x0f, 0xd3, 0x28, 0x13, 0x79, 0x3e, 0x16, 0x43, 0xb3, 0xa0, 0x36, 0xa1, 0x55, 0x3b, 0x61, 0x1a, 0x65, 0x3c, 0xcf, 0x43, 0x3e, 0xd2, 0x1d, 0x6a, 0x13, 0x59, 0xb5, 0x82, 0x5d, 0x87,
0xd8, 0x0d, 0xd8, 0x90, 0x56, 0x56, 0x16, 0xe4, 0x71, 0x76, 0x1c, 0x66, 0xfd, 0x4c, 0x44, 0x79, 0x75, 0xe1, 0x65, 0x65, 0x7e, 0x1e, 0x67, 0x47, 0x41, 0x36, 0xc8, 0x78, 0x94, 0xf7, 0x3a, 0x44,
0xb7, 0x43, 0xf8, 0x75, 0x5d, 0xec, 0x5d, 0xb8, 0x50, 0x02, 0xa7, 0x62, 0x20, 0xc2, 0x13, 0x31, 0x5f, 0x57, 0xc5, 0xde, 0x81, 0x73, 0x25, 0x38, 0xe5, 0x43, 0x1e, 0x1c, 0xf3, 0x51, 0x6f, 0x99,
0xec, 0x2e, 0xd3, 0xa8, 0xb3, 0xba, 0xd9, 0x15, 0x68, 0xa3, 0x71, 0x39, 0x4d, 0x86, 0x01, 0xbe, 0xbe, 0x3a, 0xad, 0x9a, 0x5d, 0x86, 0x36, 0x3a, 0x97, 0xd3, 0x64, 0xe4, 0xe3, 0x3e, 0xdc, 0xa5,
0xc3, 0x2b, 0x74, 0x0f, 0x36, 0x88, 0xbd, 0x0d, 0xcb, 0x89, 0x90, 0x8f, 0xe5, 0x71, 0x3e, 0x1e, 0x75, 0x30, 0x21, 0xf6, 0x16, 0x2c, 0x27, 0x5c, 0x6c, 0x96, 0x47, 0x79, 0x38, 0xcc, 0x7a, 0x2b,
0x64, 0xdd, 0x55, 0x7a, 0xc9, 0xda, 0x4a, 0x98, 0x90, 0x73, 0x7d, 0x17, 0x03, 0x99, 0x72, 0x90, 0xb4, 0x93, 0xb5, 0xa5, 0x32, 0xa1, 0xe4, 0x7a, 0x36, 0x05, 0x0a, 0xe5, 0x30, 0x23, 0x77, 0xc5,
0x91, 0xb9, 0x12, 0xcc, 0xba, 0x6b, 0xc4, 0x6e, 0x05, 0x80, 0x64, 0x24, 0x0d, 0x4f, 0x82, 0x5c, 0x9f, 0xf5, 0x56, 0x49, 0xdc, 0x0a, 0x80, 0x74, 0x24, 0x0d, 0x8e, 0xfd, 0x9c, 0xf7, 0xd6, 0x48,
0x74, 0xd7, 0x89, 0xb7, 0x74, 0x93, 0xff, 0x99, 0x07, 0x1b, 0x0f, 0xc3, 0x2c, 0x57, 0x4c, 0x68, 0xb6, 0x54, 0xd1, 0xfd, 0x73, 0x07, 0xd6, 0x1f, 0x04, 0x59, 0x2e, 0x85, 0x50, 0x9b, 0xe3, 0x57,
0xd4, 0xf1, 0xeb, 0xd0, 0x96, 0xec, 0xd7, 0x8f, 0xa3, 0xf1, 0x4c, 0x71, 0x24, 0x48, 0xd0, 0xd7, 0xa1, 0x2d, 0xc4, 0x6f, 0x10, 0x47, 0xe1, 0x4c, 0x4a, 0x24, 0x08, 0xe8, 0x6b, 0x51, 0x38, 0x63,
0xa2, 0xf1, 0x8c, 0x7d, 0x16, 0x96, 0xc3, 0xc8, 0x46, 0x91, 0x32, 0xdc, 0xd1, 0x40, 0x42, 0x7a, 0x9f, 0x83, 0xe5, 0x20, 0x32, 0x49, 0x84, 0x0e, 0x77, 0x14, 0x48, 0x44, 0xaf, 0x42, 0x3b, 0x99,
0x1d, 0xda, 0xc9, 0xf4, 0x70, 0x1c, 0x0e, 0x24, 0xca, 0x9c, 0xa4, 0x22, 0x41, 0x84, 0x80, 0x86, 0x1e, 0x84, 0xc1, 0x50, 0x90, 0xcc, 0x09, 0x2e, 0x02, 0x22, 0x02, 0x74, 0xf4, 0x44, 0x4f, 0x04,
0x9e, 0x5c, 0x89, 0xc4, 0x68, 0x12, 0x46, 0x5b, 0xc1, 0x10, 0x85, 0xdf, 0x86, 0x4d, 0x77, 0x81, 0x45, 0x93, 0x28, 0xda, 0x12, 0x43, 0x12, 0xf7, 0x16, 0x6c, 0xd8, 0x1d, 0x94, 0xc6, 0x6a, 0x0b,
0x4a, 0x59, 0x6d, 0xc3, 0x92, 0xe2, 0xed, 0xac, 0xdb, 0xa6, 0xf3, 0x59, 0x51, 0xe7, 0xa3, 0x50, 0x96, 0xa4, 0x6c, 0x67, 0xbd, 0x36, 0xcd, 0x4f, 0x57, 0xce, 0x8f, 0x24, 0xf5, 0x74, 0xbd, 0xfb,
0x7d, 0xd3, 0xcf, 0xff, 0xd5, 0x83, 0x26, 0x2a, 0x80, 0xb3, 0x95, 0x85, 0xad, 0xd3, 0xe7, 0x1c, 0x6f, 0x0e, 0x34, 0xd1, 0x00, 0x9c, 0x6e, 0x2c, 0x4c, 0x9b, 0x3e, 0x67, 0xd9, 0x74, 0xf2, 0xfb,
0x9d, 0x4e, 0x76, 0x3f, 0x5a, 0x45, 0x92, 0x25, 0xa4, 0xd8, 0x58, 0x90, 0xa2, 0x3f, 0x15, 0x83, 0xd1, 0x2b, 0x12, 0x22, 0x21, 0xd4, 0xc6, 0x40, 0x8a, 0xfa, 0x94, 0x0f, 0x8f, 0x49, 0x77, 0x74,
0x13, 0x92, 0x1d, 0xd3, 0x8f, 0x10, 0x94, 0x2c, 0x7c, 0x3a, 0x69, 0xb4, 0x14, 0x1c, 0xd3, 0xd6, 0x3d, 0x22, 0xa8, 0x59, 0xb8, 0x75, 0xd2, 0xd7, 0x42, 0x71, 0x74, 0x59, 0xd5, 0xd1, 0x97, 0x8b,
0x7d, 0x34, 0x72, 0xb1, 0xe8, 0xa3, 0x71, 0x5d, 0x58, 0x0c, 0xa3, 0xc3, 0x78, 0x1a, 0x0d, 0x49, 0x45, 0x1d, 0x7d, 0xd7, 0x83, 0xc5, 0x20, 0x3a, 0x88, 0xa7, 0xd1, 0x88, 0x94, 0x64, 0xc9, 0x53,
0x48, 0x96, 0x7c, 0xdd, 0xc4, 0xcb, 0x4e, 0xc8, 0x92, 0x0a, 0x27, 0x42, 0x49, 0x47, 0x01, 0xe0, 0x45, 0x5c, 0xec, 0x84, 0x3c, 0xa9, 0x60, 0xc2, 0xa5, 0x76, 0x14, 0x80, 0xcb, 0xd0, 0xb5, 0xca,
0x0c, 0x4d, 0xab, 0x8c, 0x14, 0x9e, 0x79, 0xc7, 0xde, 0x81, 0x75, 0x0b, 0xa6, 0x4e, 0xf0, 0x0d, 0xc8, 0xe0, 0xe9, 0x7d, 0xec, 0x6d, 0x58, 0x33, 0x30, 0x39, 0x83, 0xaf, 0xc1, 0x7c, 0x82, 0x80,
0x98, 0x4f, 0x10, 0xa0, 0x0c, 0x25, 0xcd, 0x5e, 0xa4, 0x29, 0x65, 0x0f, 0x5f, 0x43, 0xff, 0x39, 0x74, 0x94, 0x94, 0x78, 0x91, 0xa5, 0x14, 0x35, 0xee, 0x2a, 0xc6, 0xcf, 0xf9, 0xfb, 0xd1, 0x61,
0x7f, 0x3f, 0x3a, 0x8a, 0x35, 0xa5, 0x9f, 0xcc, 0xa1, 0xc3, 0xab, 0x40, 0x8a, 0xd0, 0x35, 0x58, 0xac, 0x38, 0xfd, 0x68, 0x0e, 0x03, 0x5e, 0x09, 0x49, 0x46, 0x57, 0x61, 0x25, 0x18, 0xf1, 0x28,
0x0d, 0x87, 0x22, 0xca, 0xc3, 0x7c, 0xd6, 0x77, 0x2c, 0xb8, 0x32, 0x18, 0x5f, 0x98, 0x60, 0x1c, 0x0f, 0xf2, 0xd9, 0xc0, 0xf2, 0xe0, 0xca, 0x30, 0xee, 0x30, 0x7e, 0x18, 0xf8, 0x99, 0xb4, 0x61,
0x06, 0x99, 0xd2, 0x61, 0xb2, 0xc1, 0x76, 0x61, 0x13, 0xd9, 0x5f, 0x73, 0xb4, 0xb9, 0x56, 0x69, 0xa2, 0xc0, 0x76, 0x60, 0x03, 0xc5, 0x5f, 0x49, 0xb4, 0x5e, 0x56, 0xe1, 0x48, 0xd6, 0xd6, 0xa1,
0x48, 0xd6, 0xf6, 0xa1, 0xc4, 0x22, 0x5c, 0x71, 0xa0, 0x19, 0x22, 0x35, 0x6d, 0x5d, 0x17, 0x9e, 0xc6, 0x22, 0x2e, 0x25, 0x50, 0x7f, 0x22, 0x2c, 0x6d, 0x5d, 0x15, 0xce, 0x9a, 0xe0, 0x84, 0x43,
0x9a, 0xa4, 0x84, 0x5b, 0x9e, 0x97, 0x22, 0x62, 0x00, 0x15, 0xef, 0x6d, 0x41, 0x1a, 0xb1, 0x65, 0x9e, 0x17, 0x2a, 0xa2, 0x81, 0x4a, 0xf4, 0xb6, 0x20, 0x9c, 0xd8, 0x72, 0xf4, 0x66, 0x44, 0x80,
0xef, 0xcd, 0xf2, 0x00, 0x97, 0x2a, 0x1e, 0xe0, 0x35, 0x58, 0xcd, 0x66, 0xd1, 0x40, 0x0c, 0xfb, 0x4b, 0x95, 0x08, 0xf0, 0x2a, 0xac, 0x64, 0xb3, 0x68, 0xc8, 0x47, 0x83, 0x3c, 0xc6, 0x76, 0x83,
0x79, 0x8c, 0xf3, 0x86, 0x11, 0xdd, 0xce, 0x92, 0x5f, 0x06, 0x93, 0xaf, 0x2a, 0xb2, 0x3c, 0x12, 0x88, 0x56, 0x67, 0xc9, 0x2b, 0xc3, 0x14, 0xab, 0xf2, 0x2c, 0x8f, 0x78, 0x4e, 0xa6, 0x6b, 0xc9,
0x39, 0xa9, 0xae, 0x25, 0x5f, 0x37, 0xf1, 0x15, 0x20, 0x14, 0xc9, 0xd4, 0x2d, 0x5f, 0xb5, 0xf0, 0x53, 0x45, 0xdc, 0x05, 0x88, 0x44, 0x08, 0x75, 0xcb, 0x93, 0x25, 0xdc, 0x2a, 0xa7, 0x69, 0x90,
0xa9, 0x9c, 0xa6, 0x61, 0xd6, 0xed, 0x10, 0x94, 0x7e, 0xb3, 0x2f, 0xc0, 0xf9, 0x43, 0xf4, 0xac, 0xf5, 0x3a, 0x84, 0xd2, 0x6f, 0xf6, 0x05, 0x38, 0x7b, 0x80, 0x91, 0xd5, 0x11, 0xf7, 0x47, 0x3c,
0x8e, 0x45, 0x30, 0x14, 0x29, 0xdd, 0xbe, 0x74, 0x2c, 0xa5, 0x06, 0xaa, 0xef, 0xc4, 0xb9, 0x4f, 0xa5, 0xd5, 0x17, 0x81, 0xa5, 0xb0, 0x40, 0xf5, 0x95, 0xd8, 0xf6, 0x31, 0x4f, 0xb3, 0x20, 0x8e,
0x44, 0x9a, 0x85, 0x71, 0x44, 0xba, 0xa7, 0xe5, 0xeb, 0x26, 0xff, 0x84, 0x5e, 0x74, 0xe3, 0xf2, 0xc8, 0xf6, 0xb4, 0x3c, 0x55, 0x74, 0x3f, 0xa1, 0x1d, 0x5d, 0x87, 0xbc, 0x8f, 0xc9, 0x1c, 0xb1,
0x3e, 0x21, 0x75, 0xc4, 0x5e, 0x83, 0x96, 0xdc, 0x63, 0x76, 0x1c, 0x28, 0x23, 0x63, 0x89, 0x00, 0x0b, 0xd0, 0x12, 0x63, 0xcc, 0x8e, 0x7c, 0xe9, 0x64, 0x2c, 0x11, 0xb0, 0x7f, 0xe4, 0xa3, 0x02,
0x07, 0xc7, 0x01, 0x0a, 0xb0, 0x73, 0x6c, 0x0d, 0xb2, 0x1c, 0xdb, 0x04, 0xdb, 0x93, 0xa7, 0xf6, 0x5b, 0xd3, 0xd6, 0x20, 0xcf, 0xb1, 0x4d, 0xd8, 0xae, 0x98, 0xb5, 0xd7, 0xa1, 0xab, 0x82, 0xe9,
0x26, 0xac, 0x68, 0x67, 0x3a, 0xeb, 0x8f, 0xc5, 0x51, 0xae, 0x1d, 0x84, 0x68, 0x3a, 0xc1, 0xe9, 0x6c, 0x10, 0xf2, 0xc3, 0x5c, 0x05, 0x08, 0xd1, 0x74, 0x82, 0xcd, 0x65, 0x0f, 0xf8, 0x61, 0xee,
0xb2, 0x87, 0xe2, 0x28, 0xe7, 0x8f, 0x60, 0x5d, 0xc9, 0xed, 0xd7, 0x12, 0xa1, 0xa7, 0xfe, 0xa5, 0x3e, 0x84, 0x35, 0xa9, 0xb7, 0x5f, 0x4b, 0xb8, 0x6a, 0xfa, 0x4b, 0xe5, 0x4d, 0x4d, 0x78, 0x15,
0xf2, 0xa3, 0x26, 0xad, 0x8a, 0x0d, 0x57, 0xd0, 0xc9, 0xcb, 0x29, 0xbd, 0x74, 0xdc, 0x07, 0xa6, 0xeb, 0xb6, 0xa2, 0x53, 0x94, 0x53, 0xda, 0xe9, 0x5c, 0x0f, 0x98, 0xac, 0xbe, 0x1d, 0xc6, 0x19,
0xba, 0xef, 0x8c, 0xe3, 0x4c, 0x28, 0x82, 0x1c, 0x3a, 0x83, 0x71, 0x9c, 0x69, 0x37, 0x44, 0x6d, 0x97, 0x0c, 0x5d, 0xe8, 0x0c, 0xc3, 0x38, 0x53, 0x61, 0x88, 0x1c, 0x8e, 0x85, 0xe1, 0xfc, 0x64,
0xc7, 0x81, 0xe1, 0xf9, 0x64, 0xd3, 0xc1, 0x00, 0x35, 0x81, 0xd4, 0x69, 0xba, 0xc9, 0xff, 0xdc, 0xd3, 0xe1, 0x10, 0x2d, 0x81, 0xb0, 0x69, 0xaa, 0xe8, 0xfe, 0x85, 0x03, 0xeb, 0xc4, 0x4d, 0x59,
0x83, 0x0d, 0xa2, 0xa6, 0x35, 0x8c, 0xb1, 0x5d, 0x5f, 0x7d, 0x99, 0x9d, 0x81, 0xed, 0x9a, 0x6d, 0x18, 0xed, 0xbb, 0xbe, 0x7c, 0x37, 0x3b, 0x43, 0x33, 0x34, 0xdb, 0x80, 0xf9, 0xc3, 0x38, 0x1d,
0xc2, 0xfc, 0x51, 0x9c, 0x0e, 0x84, 0x9a, 0x49, 0x36, 0x7e, 0x7a, 0x6b, 0xbc, 0x59, 0xb1, 0xc6, 0x72, 0xd9, 0x92, 0x28, 0xfc, 0xf8, 0xde, 0x78, 0xb3, 0xe2, 0x8d, 0xff, 0xc8, 0x81, 0x35, 0xea,
0x7f, 0xe2, 0xc1, 0x3a, 0x2d, 0xf5, 0x20, 0x0f, 0xf2, 0x69, 0xa6, 0xb6, 0xff, 0xcb, 0xb0, 0x8c, 0xea, 0x7e, 0xee, 0xe7, 0xd3, 0x4c, 0x0e, 0xff, 0x97, 0x60, 0x19, 0x87, 0xca, 0x95, 0x3a, 0xc9,
0x5b, 0x15, 0x5a, 0x9c, 0xd4, 0x42, 0x37, 0x8d, 0xe4, 0x13, 0x54, 0x22, 0xef, 0x9d, 0xf3, 0x5d, 0x8e, 0x6e, 0x68, 0xcd, 0x27, 0x54, 0x10, 0xef, 0x9e, 0xf1, 0x6c, 0x62, 0xf6, 0x65, 0xe8, 0x98,
0x64, 0xf6, 0x65, 0xe8, 0xd8, 0x11, 0x11, 0x5a, 0x73, 0x7b, 0xf7, 0xa2, 0xde, 0x65, 0x85, 0x73, 0x19, 0x11, 0xea, 0x73, 0x7b, 0xe7, 0xbc, 0x1a, 0x65, 0x45, 0x72, 0x76, 0xcf, 0x78, 0xd6, 0x07,
0xf6, 0xce, 0xf9, 0xce, 0x00, 0x76, 0x13, 0x80, 0xcc, 0x0d, 0x22, 0xab, 0x5c, 0xd9, 0x8b, 0xee, 0xec, 0x06, 0x00, 0xb9, 0x1b, 0xc4, 0x56, 0x86, 0xb2, 0xe7, 0xed, 0x49, 0x32, 0x16, 0x6b, 0xf7,
0x21, 0x59, 0x97, 0xb5, 0x77, 0xce, 0xb7, 0xd0, 0x6f, 0x2f, 0xc1, 0x82, 0x7c, 0x1f, 0xf9, 0x03, 0x8c, 0x67, 0x90, 0xdf, 0x5a, 0x82, 0x05, 0xb1, 0x3f, 0xba, 0xf7, 0x61, 0xd9, 0xea, 0xa9, 0x15,
0x58, 0x76, 0x56, 0xea, 0x78, 0x19, 0x1d, 0xe9, 0x65, 0x54, 0x9c, 0xd2, 0x46, 0xd5, 0x29, 0xe5, 0x65, 0x74, 0x44, 0x94, 0x51, 0x09, 0x4a, 0x1b, 0xd5, 0xa0, 0xd4, 0xfd, 0x97, 0x06, 0x30, 0x94,
0xff, 0xdc, 0x00, 0x86, 0xdc, 0x56, 0xba, 0x4e, 0x7c, 0xa0, 0xe3, 0xa1, 0x63, 0x6e, 0x75, 0x7c, 0xb6, 0xd2, 0x72, 0xe2, 0x06, 0x1d, 0x8f, 0x2c, 0x77, 0xab, 0xe3, 0x99, 0x10, 0xbb, 0x06, 0xcc,
0x1b, 0xc4, 0xae, 0x03, 0xb3, 0x9a, 0x3a, 0xf6, 0x20, 0xdf, 0x8d, 0x9a, 0x1e, 0x54, 0x70, 0xd2, 0x28, 0xaa, 0xdc, 0x83, 0xd8, 0x37, 0x6a, 0x6a, 0xd0, 0xc0, 0x09, 0x5f, 0x49, 0xc5, 0xc0, 0xd2,
0x56, 0xd2, 0x3e, 0xb0, 0x32, 0x2c, 0xe5, 0xbd, 0xd5, 0xf6, 0xe1, 0xd3, 0x90, 0x4c, 0xb3, 0x63, 0xb1, 0x14, 0xeb, 0x56, 0x5b, 0x87, 0x5b, 0x43, 0x32, 0xcd, 0x8e, 0xd0, 0x81, 0x50, 0x0e, 0x99,
0x34, 0x20, 0xb4, 0x41, 0xa6, 0xdb, 0x65, 0x06, 0x59, 0x78, 0x29, 0x83, 0x2c, 0x96, 0x19, 0xc4, 0x2a, 0x97, 0x05, 0x64, 0xe1, 0x85, 0x02, 0xb2, 0x58, 0x16, 0x10, 0xd3, 0x25, 0x58, 0xb2, 0x5c,
0x36, 0x09, 0x96, 0x1c, 0x93, 0x00, 0xed, 0xaf, 0x49, 0x18, 0x91, 0x5d, 0xd1, 0x9f, 0xe0, 0xec, 0x02, 0xf4, 0xbf, 0x26, 0x41, 0x44, 0x7e, 0xc5, 0x60, 0x82, 0xad, 0x4b, 0xff, 0xcb, 0x02, 0xd9,
0xca, 0xfe, 0x72, 0x80, 0x6c, 0x1b, 0xd6, 0x94, 0x5d, 0x57, 0xd8, 0x1d, 0x40, 0x67, 0x5c, 0x81, 0x16, 0xac, 0x4a, 0xbf, 0xae, 0xf0, 0x3b, 0x80, 0xe6, 0xb8, 0x82, 0xbb, 0x9f, 0x39, 0xb0, 0x8a,
0xf3, 0x1f, 0x7b, 0xb0, 0x86, 0xe7, 0xec, 0xf0, 0xe2, 0x7b, 0x40, 0xa2, 0xf0, 0x8a, 0xac, 0xe8, 0xf3, 0x6c, 0xc9, 0xe2, 0xbb, 0x40, 0xaa, 0xf0, 0x92, 0xa2, 0x68, 0xd1, 0xfe, 0xf4, 0x92, 0xf8,
0xe0, 0xfe, 0xfc, 0x9c, 0xf8, 0x2e, 0xb4, 0x88, 0x60, 0x9c, 0x88, 0x48, 0x31, 0x62, 0xd7, 0x65, 0x0e, 0xb4, 0x88, 0x61, 0x9c, 0xf0, 0x48, 0x0a, 0x62, 0xcf, 0x16, 0xc4, 0xc2, 0x0a, 0xed, 0x9e,
0xc4, 0x42, 0x0b, 0xed, 0x9d, 0xf3, 0x0b, 0x64, 0x8b, 0x0d, 0xff, 0xce, 0x83, 0xb6, 0x5a, 0xe6, 0xf1, 0x0a, 0x62, 0x43, 0x0c, 0xff, 0xce, 0x81, 0xb6, 0xec, 0xe6, 0x4f, 0x1c, 0x4b, 0xf4, 0x61,
0xcf, 0xec, 0x4b, 0xf4, 0x60, 0x09, 0x39, 0xd2, 0x32, 0xd8, 0x4d, 0x1b, 0x5f, 0x93, 0x09, 0x3a, 0x09, 0x25, 0xd2, 0x70, 0xd8, 0x75, 0x19, 0x77, 0x93, 0x09, 0x06, 0x6c, 0xb8, 0x7d, 0x5a, 0x71,
0x6c, 0xf8, 0x7c, 0x3a, 0x7e, 0x44, 0x19, 0x8c, 0x6f, 0x21, 0x29, 0xdc, 0xac, 0x9f, 0x87, 0xe3, 0x44, 0x19, 0xc6, 0xbd, 0x90, 0x0c, 0x6e, 0x36, 0xc8, 0x83, 0x70, 0xa0, 0x6a, 0x65, 0x02, 0xb2,
0xbe, 0xee, 0x55, 0x01, 0xc8, 0xba, 0x2e, 0xd4, 0x3b, 0x59, 0x1e, 0x8c, 0x84, 0x7a, 0xe6, 0x64, 0xae, 0x0a, 0xed, 0x4e, 0x96, 0xfb, 0x63, 0x2e, 0xb7, 0x39, 0x51, 0xc0, 0x80, 0x49, 0x0e, 0xa8,
0x03, 0x1d, 0x26, 0xb5, 0xa1, 0x92, 0x39, 0xc8, 0x7f, 0x04, 0x70, 0xa1, 0xd2, 0x65, 0xc2, 0xdd, 0xe4, 0x0e, 0xba, 0x3f, 0x04, 0x38, 0x57, 0xa9, 0xd2, 0xe9, 0x6e, 0xe9, 0x20, 0x87, 0xc1, 0xe4,
0xca, 0x40, 0x1e, 0x87, 0x93, 0xc3, 0xd8, 0xd8, 0xda, 0x9e, 0x6d, 0x3b, 0x3b, 0x5d, 0x6c, 0x04, 0x20, 0xd6, 0xbe, 0xb6, 0x63, 0xfa, 0xce, 0x56, 0x15, 0x1b, 0xc3, 0x59, 0xb5, 0x9f, 0xe3, 0x9c,
0xe7, 0xf5, 0x7b, 0x8e, 0x67, 0x5a, 0xbc, 0xde, 0x0d, 0x32, 0x44, 0xde, 0x76, 0x79, 0xa0, 0x3c, 0x16, 0xbb, 0x77, 0x83, 0x1c, 0x91, 0xb7, 0x6c, 0x19, 0x28, 0x37, 0xa8, 0x70, 0x53, 0x73, 0xeb,
0xa1, 0x86, 0xdb, 0x92, 0x5b, 0x4f, 0x8f, 0x1d, 0x43, 0xd7, 0x18, 0x0e, 0x4a, 0xc5, 0x5b, 0xc6, 0xf9, 0xb1, 0x23, 0xe8, 0x69, 0xc7, 0x41, 0x9a, 0x78, 0xc3, 0xb9, 0xc0, 0xb6, 0xde, 0x7c, 0x41,
0x05, 0xce, 0xf5, 0xd6, 0x4b, 0xe6, 0x22, 0x7d, 0x34, 0xd4, 0xd3, 0x9c, 0x49, 0x8d, 0xcd, 0xe0, 0x5b, 0x64, 0x8f, 0x46, 0xaa, 0x99, 0x53, 0xb9, 0xb1, 0x19, 0x5c, 0x52, 0x75, 0x64, 0xc3, 0xab,
0xb2, 0xee, 0x23, 0x1d, 0x5e, 0x9d, 0xaf, 0xf9, 0x4a, 0x7b, 0xbb, 0x8f, 0x83, 0xdd, 0x49, 0x5f, 0xed, 0x35, 0x5f, 0x6a, 0x6c, 0xf7, 0xf0, 0x63, 0xbb, 0xd1, 0x17, 0x30, 0xee, 0xff, 0xd0, 0x81,
0x42, 0xb8, 0xf7, 0x23, 0x0f, 0x56, 0x5c, 0x72, 0xc8, 0x3a, 0x4a, 0x08, 0xb5, 0x32, 0xd2, 0x06, 0xae, 0xcd, 0x0e, 0x45, 0x47, 0x2a, 0xa1, 0x32, 0x46, 0xca, 0x21, 0x2b, 0xc1, 0xd5, 0xb0, 0xb1,
0x59, 0x09, 0x5c, 0x75, 0x1b, 0x1b, 0x75, 0x6e, 0xa3, 0xed, 0x1c, 0xce, 0xbd, 0xcc, 0x39, 0x6c, 0x51, 0x17, 0x36, 0x9a, 0xc1, 0xe1, 0xdc, 0x8b, 0x82, 0xc3, 0xe6, 0xcb, 0x05, 0x87, 0xf3, 0x75,
0xbe, 0x9a, 0x73, 0x38, 0x5f, 0xe7, 0x1c, 0xf6, 0xfe, 0xc3, 0x03, 0x56, 0xbd, 0x5f, 0xf6, 0x40, 0xc1, 0x61, 0xff, 0xbf, 0x1c, 0x60, 0xd5, 0xf5, 0x65, 0xf7, 0x45, 0xdc, 0x1a, 0xf1, 0x50, 0xda,
0xfa, 0xad, 0x91, 0x18, 0x2b, 0x3d, 0xf1, 0x0b, 0xaf, 0xc6, 0x23, 0xfa, 0x0c, 0xf5, 0x68, 0x64, 0x89, 0x5f, 0x78, 0x39, 0x19, 0x51, 0x73, 0xa8, 0xbe, 0x46, 0x61, 0x35, 0x0d, 0x81, 0xe9, 0xb6,
0x56, 0x5b, 0x11, 0xd8, 0x66, 0xcb, 0xb2, 0x5f, 0xd7, 0x55, 0x72, 0x57, 0x9b, 0x2f, 0x77, 0x57, 0x2c, 0x7b, 0x75, 0x55, 0xa5, 0x70, 0xb5, 0xf9, 0xe2, 0x70, 0x75, 0xfe, 0xc5, 0xe1, 0xea, 0x42,
0xe7, 0x5f, 0xee, 0xae, 0x2e, 0x94, 0xdd, 0xd5, 0xde, 0x6f, 0xc1, 0xb2, 0x73, 0xeb, 0xff, 0x73, 0x39, 0x5c, 0xed, 0xff, 0x16, 0x2c, 0x5b, 0xab, 0xfe, 0x7f, 0x37, 0xe2, 0xb2, 0xcb, 0x23, 0x16,
0x3b, 0x2e, 0x9b, 0x3c, 0xf2, 0x82, 0x1d, 0x58, 0xef, 0xdf, 0x1a, 0xc0, 0xaa, 0x9c, 0xf7, 0x7f, 0xd8, 0xc2, 0xfa, 0xff, 0xde, 0x00, 0x56, 0x95, 0xbc, 0x9f, 0x69, 0x1f, 0x48, 0x8e, 0x2c, 0x03,
0xba, 0x06, 0xe2, 0x23, 0x47, 0x81, 0xcc, 0x29, 0x3e, 0x72, 0x54, 0xc7, 0xff, 0xa6, 0x52, 0x7c, 0x32, 0x27, 0xe5, 0xc8, 0x32, 0x1d, 0xff, 0x9f, 0x46, 0xf1, 0x4d, 0x58, 0x4b, 0xf9, 0x30, 0x3e,
0x0b, 0xd6, 0x53, 0x31, 0x88, 0x4f, 0x28, 0x09, 0xe7, 0x86, 0x3a, 0xaa, 0x1d, 0x68, 0xf4, 0xb9, 0xa6, 0x43, 0x38, 0x3b, 0xd5, 0x51, 0xad, 0x40, 0xa7, 0xcf, 0x0e, 0xd2, 0x97, 0xac, 0x33, 0x13,
0x4e, 0xfa, 0x92, 0x93, 0x33, 0xb1, 0x5e, 0x86, 0x92, 0xaf, 0xce, 0xb7, 0x60, 0x53, 0xa6, 0xb2, 0x63, 0x67, 0x28, 0xc5, 0xea, 0xee, 0x26, 0x6c, 0x88, 0xa3, 0xac, 0x5b, 0x82, 0x95, 0x32, 0xb2,
0x6e, 0x4b, 0x52, 0x5a, 0xc9, 0x7e, 0xcf, 0x83, 0xf3, 0xa5, 0x8e, 0x22, 0xb1, 0x20, 0xf5, 0xa8, 0x7f, 0xe6, 0xc0, 0xd9, 0x52, 0x45, 0x71, 0xb0, 0x20, 0xec, 0xa8, 0x6d, 0x5c, 0x6d, 0x10, 0xfb,
0xab, 0x5c, 0x5d, 0x20, 0xae, 0x5f, 0x31, 0xb0, 0xb5, 0x7e, 0xf9, 0xde, 0x54, 0x3b, 0xf0, 0x7c, 0x2f, 0x05, 0xd8, 0xe8, 0xbf, 0xd8, 0x6f, 0xaa, 0x15, 0x38, 0x3f, 0xd3, 0xa8, 0x4a, 0x2f, 0x66,
0xa6, 0x51, 0x15, 0x5f, 0x9e, 0x7a, 0x5d, 0x17, 0xbf, 0x00, 0xe7, 0xd5, 0xcd, 0x96, 0x16, 0x7e, 0xbd, 0xae, 0xca, 0x3d, 0x07, 0x67, 0xe5, 0xca, 0x96, 0x3a, 0x7e, 0x08, 0x9b, 0xe5, 0x8a, 0x22,
0x04, 0x5b, 0xe5, 0x8e, 0x22, 0x52, 0xea, 0x2e, 0x59, 0x37, 0xd1, 0x24, 0x72, 0x74, 0xb6, 0xbb, 0x53, 0x6a, 0x77, 0x59, 0x15, 0xd1, 0x25, 0xb2, 0x6c, 0xb6, 0xdd, 0xdf, 0xda, 0x3a, 0xf7, 0x37,
0xde, 0xda, 0x3e, 0xfe, 0x9b, 0xc0, 0xbe, 0x3e, 0x15, 0xe9, 0x8c, 0xd2, 0x1e, 0x26, 0x54, 0x71, 0x81, 0x7d, 0x7d, 0xca, 0xd3, 0x19, 0x1d, 0x7b, 0xe8, 0x54, 0xc5, 0xb9, 0x72, 0x4c, 0xbf, 0x90,
0xa1, 0xec, 0xd3, 0x2f, 0x24, 0xd3, 0xc3, 0xaf, 0x8a, 0x99, 0xce, 0x2b, 0x35, 0x8a, 0xbc, 0xd2, 0x4c, 0x0f, 0xbe, 0xca, 0x67, 0xea, 0x5c, 0xa9, 0x51, 0x9c, 0x2b, 0xbd, 0x02, 0x80, 0xa1, 0x08,
0x67, 0x00, 0xd0, 0x15, 0xa1, 0x3c, 0x89, 0xce, 0xf4, 0xa1, 0x0f, 0x28, 0x09, 0xf2, 0x9b, 0xb0, 0x9d, 0x93, 0xa8, 0x93, 0x3e, 0x8c, 0x01, 0x05, 0x43, 0xf7, 0x06, 0xac, 0x5b, 0xfc, 0xf5, 0xec,
0xe1, 0xd0, 0x37, 0xa7, 0xbf, 0xa0, 0x46, 0x48, 0x47, 0xd9, 0xcd, 0xbe, 0xa8, 0x3e, 0xfe, 0xef, 0x2f, 0xc8, 0x2f, 0x44, 0xa0, 0x6c, 0x9f, 0xbe, 0xc8, 0x3a, 0xf7, 0x3f, 0x1c, 0x98, 0xdb, 0x8d,
0x1e, 0xcc, 0xed, 0xc5, 0x89, 0x1d, 0x62, 0xf3, 0xdc, 0x10, 0x9b, 0xd2, 0xb5, 0x7d, 0xa3, 0x4a, 0x13, 0x33, 0xc5, 0xe6, 0xd8, 0x29, 0x36, 0x69, 0x6b, 0x07, 0xda, 0x94, 0x36, 0xa4, 0xa5, 0x30,
0x1b, 0x4a, 0x53, 0xd8, 0x40, 0xb6, 0x0d, 0x2b, 0xc1, 0x24, 0x47, 0x57, 0xf1, 0x28, 0x4e, 0x4f, 0x41, 0xb6, 0x05, 0x5d, 0x7f, 0x92, 0x63, 0xa8, 0x78, 0x18, 0xa7, 0x27, 0x7e, 0x3a, 0x12, 0x4b,
0x83, 0x74, 0x28, 0xaf, 0xe4, 0x76, 0xa3, 0xeb, 0xf9, 0xa5, 0x1e, 0xb6, 0x09, 0x73, 0x46, 0x29, 0x72, 0xab, 0xd1, 0x73, 0xbc, 0x52, 0x0d, 0xdb, 0x80, 0x39, 0x6d, 0x94, 0x88, 0x00, 0x8b, 0xe8,
0x11, 0x02, 0x36, 0xd1, 0xd8, 0xa0, 0x48, 0xe3, 0x4c, 0x79, 0xb9, 0xaa, 0x85, 0x37, 0xee, 0x8e, 0x6c, 0x50, 0xa6, 0x71, 0x26, 0xa3, 0x5c, 0x59, 0xc2, 0x15, 0xb7, 0xbf, 0x17, 0xee, 0x9d, 0x90,
0x97, 0xe6, 0x9d, 0xe4, 0xf0, 0xba, 0x2e, 0xd4, 0xfb, 0xa8, 0xa3, 0x08, 0x4d, 0x85, 0x27, 0x74, 0xf0, 0xba, 0x2a, 0xb4, 0xfb, 0x68, 0xa3, 0x88, 0x4c, 0xa6, 0x27, 0x54, 0xd9, 0xfd, 0x57, 0x07,
0x9b, 0xff, 0x8b, 0x07, 0xf3, 0x74, 0x02, 0x28, 0x93, 0x92, 0x11, 0x29, 0x91, 0x49, 0x61, 0x51, 0xe6, 0x69, 0x06, 0x50, 0x27, 0x85, 0x20, 0xd2, 0x41, 0x26, 0xa5, 0x45, 0x1d, 0xa1, 0x93, 0x25,
0x4f, 0xca, 0x64, 0x09, 0xcc, 0xb8, 0x93, 0xde, 0x6c, 0x98, 0x65, 0xdb, 0x29, 0xce, 0x2b, 0xd0, 0x98, 0xb9, 0xd6, 0xf1, 0x66, 0x43, 0x77, 0xdb, 0x3c, 0xe2, 0xbc, 0x0c, 0x2d, 0x51, 0xd2, 0x67,
0x92, 0x2d, 0x93, 0x13, 0x24, 0x94, 0x02, 0xc8, 0x2e, 0x43, 0xf3, 0x38, 0x4e, 0xf4, 0x8b, 0x0a, 0x82, 0x44, 0x52, 0x80, 0xec, 0x12, 0x34, 0x8f, 0xe2, 0x44, 0xed, 0xa8, 0xa0, 0xb2, 0x62, 0x71,
0x3a, 0x2a, 0x16, 0x27, 0x3e, 0xc1, 0x8b, 0xf5, 0x20, 0x3d, 0xb9, 0x78, 0xa9, 0x93, 0xcb, 0x60, 0xe2, 0x11, 0x5e, 0xf4, 0x07, 0xf9, 0x89, 0xce, 0x0b, 0x9b, 0x5c, 0x86, 0x71, 0x57, 0xd2, 0x6c,
0x7c, 0x95, 0x0c, 0x59, 0xfb, 0x30, 0x4a, 0x50, 0xbe, 0x0d, 0xab, 0x8f, 0xe2, 0xa1, 0xb0, 0xe2, 0xcd, 0xc9, 0x28, 0xa1, 0xee, 0x16, 0xac, 0x3c, 0x8c, 0x47, 0xdc, 0xc8, 0x83, 0x9c, 0x2a, 0x75,
0x20, 0x67, 0x72, 0x1d, 0xff, 0x6d, 0x0f, 0x96, 0x34, 0x32, 0xbb, 0x06, 0x4d, 0x7c, 0x6a, 0x4b, 0xee, 0x6f, 0x3b, 0xb0, 0xa4, 0x88, 0xd9, 0x55, 0x68, 0xe2, 0x56, 0x5b, 0x72, 0x6e, 0x75, 0x36,
0xc6, 0xad, 0x89, 0x86, 0x23, 0x9e, 0x4f, 0x18, 0xa8, 0x22, 0xc9, 0x4b, 0x2e, 0x4c, 0x21, 0xed, 0x1c, 0xe9, 0x3c, 0xa2, 0x40, 0x13, 0x49, 0x51, 0x72, 0xe1, 0x0a, 0xa9, 0x18, 0xb9, 0x70, 0x32,
0x23, 0x17, 0x46, 0x86, 0x59, 0x6e, 0xe9, 0x31, 0x2e, 0x41, 0xf9, 0x5f, 0x78, 0xb0, 0xec, 0xcc, 0x74, 0x77, 0x4b, 0x9b, 0x71, 0x09, 0x75, 0xff, 0xd2, 0x81, 0x65, 0xab, 0x0d, 0x0c, 0x69, 0x42,
0x81, 0x2e, 0xcd, 0x38, 0xc8, 0x72, 0x15, 0x61, 0x54, 0xd7, 0x63, 0x83, 0xec, 0xc8, 0x58, 0xc3, 0x3f, 0xcb, 0x65, 0x86, 0x51, 0x2e, 0x8f, 0x09, 0x99, 0x99, 0xb1, 0x86, 0x9d, 0x19, 0xd3, 0x39,
0x8d, 0x8c, 0x99, 0x98, 0xcd, 0x9c, 0x1d, 0xb3, 0xb9, 0x01, 0xad, 0x22, 0x09, 0xdd, 0x74, 0x54, 0x9b, 0x39, 0x33, 0x67, 0x73, 0x1d, 0x5a, 0xc5, 0x21, 0x74, 0xd3, 0x32, 0x7d, 0xd8, 0xa2, 0xca,
0x1f, 0xce, 0xa8, 0xe3, 0xfc, 0x05, 0x12, 0xd2, 0x19, 0xc4, 0xe3, 0x38, 0x55, 0x39, 0x5a, 0xd9, 0xf3, 0x17, 0x44, 0xc8, 0x67, 0x18, 0x87, 0x71, 0x2a, 0xcf, 0x68, 0x45, 0xc1, 0xbd, 0x01, 0x6d,
0xe0, 0x37, 0xa1, 0x6d, 0xe1, 0xe3, 0x32, 0x22, 0x91, 0x9f, 0xc6, 0xe9, 0x53, 0x1d, 0xa0, 0x53, 0x83, 0x1e, 0xbb, 0x11, 0xf1, 0xfc, 0x24, 0x4e, 0x9f, 0xa8, 0x04, 0x9d, 0x2c, 0xea, 0xe3, 0xac,
0x4d, 0x93, 0xce, 0x6a, 0x14, 0xe9, 0x2c, 0xfe, 0x97, 0x1e, 0x2c, 0x23, 0x0f, 0x86, 0xd1, 0x68, 0x46, 0x71, 0x9c, 0xe5, 0xfe, 0x95, 0x03, 0xcb, 0x28, 0x83, 0x41, 0x34, 0xde, 0x8b, 0xc3, 0x60,
0x3f, 0x1e, 0x87, 0x83, 0x19, 0xdd, 0xbd, 0x66, 0x37, 0x95, 0xbc, 0xd5, 0xbc, 0xe8, 0x82, 0x91, 0x38, 0xa3, 0xb5, 0x57, 0xe2, 0x26, 0x0f, 0x6f, 0x95, 0x2c, 0xda, 0x30, 0xca, 0xb6, 0x8a, 0x68,
0xb7, 0xb5, 0x47, 0xa3, 0x04, 0xd1, 0xb4, 0x51, 0x52, 0x91, 0xcf, 0x0f, 0x83, 0x4c, 0x31, 0xbf, 0xa4, 0x22, 0xea, 0x32, 0x6a, 0x2a, 0xca, 0xf9, 0x81, 0x9f, 0x49, 0xe1, 0x97, 0x7b, 0x91, 0x05,
0x7a, 0x8b, 0x1c, 0x20, 0xca, 0x13, 0x02, 0xd2, 0x20, 0x17, 0xfd, 0x49, 0x38, 0x1e, 0x87, 0x12, 0xa2, 0x3e, 0x21, 0x90, 0xfa, 0x39, 0x1f, 0x4c, 0x82, 0x30, 0x0c, 0x04, 0xad, 0x70, 0x11, 0xea,
0x57, 0x9a, 0x08, 0x75, 0x5d, 0xfc, 0x87, 0x0d, 0x68, 0x2b, 0x4d, 0x79, 0x6f, 0x38, 0x92, 0xa1, 0xaa, 0xdc, 0x1f, 0x34, 0xa0, 0x2d, 0x2d, 0xe5, 0xdd, 0xd1, 0x58, 0xa4, 0xc2, 0xa5, 0xa3, 0xa5,
0x70, 0x65, 0x68, 0x19, 0x75, 0x61, 0x41, 0x74, 0xbf, 0x63, 0x9a, 0x59, 0x90, 0xf2, 0xb5, 0xce, 0xcd, 0x85, 0x81, 0xa8, 0x7a, 0xcb, 0x35, 0x33, 0x90, 0xf2, 0xb2, 0xce, 0x55, 0x97, 0xf5, 0x22,
0x55, 0xaf, 0xf5, 0x12, 0xb4, 0x90, 0xbd, 0xde, 0x26, 0x1b, 0x50, 0xd6, 0x2c, 0x14, 0x00, 0xdd, 0xb4, 0x50, 0xbc, 0xde, 0x22, 0x1f, 0x50, 0xdc, 0x59, 0x28, 0x00, 0x55, 0xbb, 0x43, 0xb5, 0xf3,
0xbb, 0x4b, 0xbd, 0xf3, 0x45, 0x2f, 0x01, 0x1c, 0xab, 0x6f, 0xa1, 0x64, 0xf5, 0xbd, 0x0b, 0x1d, 0x45, 0x2d, 0x01, 0x96, 0xd7, 0xb7, 0x50, 0xf2, 0xfa, 0xde, 0x81, 0x8e, 0x64, 0x43, 0xf3, 0x4e,
0x45, 0x86, 0xce, 0x9d, 0xb4, 0x43, 0xc1, 0xe0, 0xce, 0x9d, 0xf8, 0x0e, 0xa6, 0x1e, 0xb9, 0xab, 0xd6, 0xa1, 0x10, 0x70, 0x6b, 0x4d, 0x3c, 0x8b, 0x52, 0x7d, 0xb9, 0xa3, 0xbe, 0x5c, 0x7a, 0xd1,
0x47, 0x2e, 0xbd, 0x6c, 0xa4, 0xc6, 0xa4, 0xcc, 0x90, 0x3c, 0x9b, 0x07, 0x69, 0x90, 0x1c, 0xeb, 0x97, 0x8a, 0x92, 0x4e, 0x86, 0xc4, 0xdc, 0xdc, 0x4f, 0xfd, 0xe4, 0x48, 0xed, 0x3e, 0x23, 0x7d,
0xd7, 0x67, 0x68, 0xd2, 0xdd, 0x04, 0x66, 0xdb, 0x30, 0x8f, 0xc3, 0xb4, 0xb6, 0xae, 0x17, 0x3a, 0xdc, 0x4d, 0x30, 0xdb, 0x82, 0x79, 0xfc, 0x4c, 0x59, 0xeb, 0x7a, 0xa5, 0x13, 0x24, 0xec, 0x2a,
0x89, 0xc2, 0xae, 0xc1, 0xbc, 0x18, 0x8e, 0x84, 0xf6, 0x3c, 0x98, 0xeb, 0x03, 0xe2, 0x1d, 0xf9, 0xcc, 0xf3, 0xd1, 0x98, 0xab, 0xc8, 0x83, 0xd9, 0x31, 0x20, 0xae, 0x91, 0x27, 0x08, 0xd0, 0x04,
0x12, 0x01, 0x55, 0x00, 0x42, 0x4b, 0x2a, 0xc0, 0xd5, 0xf4, 0x0b, 0xd8, 0x7c, 0x7f, 0xc8, 0x37, 0x20, 0x5a, 0x32, 0x01, 0xb6, 0xa5, 0x5f, 0xc0, 0xe2, 0xfb, 0x23, 0x77, 0x03, 0xd8, 0x43, 0x21,
0x81, 0x3d, 0x92, 0x5c, 0x6b, 0x47, 0x4e, 0x7f, 0x6f, 0x0e, 0xda, 0x16, 0x18, 0xa5, 0x79, 0x84, 0xb5, 0x66, 0xe6, 0xf4, 0xf7, 0xe6, 0xa0, 0x6d, 0xc0, 0xa8, 0xcd, 0x63, 0xec, 0xf0, 0x60, 0x14,
0x0b, 0xee, 0x0f, 0xc3, 0x60, 0x22, 0x72, 0x91, 0x2a, 0x4e, 0x2d, 0x41, 0x11, 0x2f, 0x38, 0x19, 0xf8, 0x13, 0x9e, 0xf3, 0x54, 0x4a, 0x6a, 0x09, 0x45, 0x3a, 0xff, 0x78, 0x3c, 0x88, 0xa7, 0xf9,
0xf5, 0xe3, 0x69, 0xde, 0x1f, 0x8a, 0x51, 0x2a, 0xe4, 0x1b, 0x89, 0x8f, 0x81, 0x03, 0x45, 0xbc, 0x60, 0xc4, 0xc7, 0x29, 0x17, 0x7b, 0x24, 0x6e, 0x06, 0x16, 0x8a, 0x74, 0x13, 0xff, 0xa9, 0x49,
0x49, 0xf0, 0xcc, 0xc6, 0x93, 0xfc, 0x50, 0x82, 0xea, 0x38, 0xa8, 0x3c, 0xa3, 0x66, 0x11, 0x07, 0x27, 0xe4, 0xa1, 0x84, 0xaa, 0x3c, 0xa8, 0x98, 0xa3, 0x66, 0x91, 0x07, 0x15, 0x33, 0x52, 0xb6,
0x95, 0x27, 0x52, 0xd6, 0x43, 0xf3, 0x35, 0x7a, 0xe8, 0x1d, 0xd8, 0x92, 0x1a, 0x47, 0xc9, 0x66, 0x43, 0xf3, 0x35, 0x76, 0xe8, 0x6d, 0xd8, 0x14, 0x16, 0x47, 0xea, 0xe6, 0xa0, 0x24, 0x26, 0xa7,
0xbf, 0xc4, 0x26, 0x67, 0xf4, 0xb2, 0x6d, 0x58, 0xc3, 0x35, 0x6b, 0x06, 0xcf, 0xc2, 0x4f, 0x64, 0xd4, 0xb2, 0x2d, 0x58, 0xc5, 0x3e, 0x2b, 0x01, 0xcf, 0x82, 0x4f, 0x44, 0x66, 0xc2, 0xf1, 0x2a,
0x64, 0xc2, 0xf3, 0x2b, 0x70, 0xc4, 0x45, 0x71, 0x74, 0x70, 0x65, 0xae, 0xa8, 0x02, 0x27, 0xdc, 0x38, 0xd2, 0xa2, 0x3a, 0x5a, 0xb4, 0xe2, 0xac, 0xa8, 0x82, 0x13, 0xad, 0xff, 0xd4, 0xa6, 0x6d,
0xe0, 0x99, 0x8b, 0xdb, 0x52, 0xb8, 0x25, 0x38, 0x5f, 0x86, 0xf6, 0x41, 0x1e, 0x27, 0xfa, 0x52, 0x49, 0xda, 0x12, 0xee, 0x2e, 0x43, 0x7b, 0x3f, 0x8f, 0x13, 0xb5, 0x28, 0x5d, 0xe8, 0x88, 0xa2,
0x56, 0xa0, 0x23, 0x9b, 0x2a, 0x33, 0xf8, 0x1a, 0x5c, 0x24, 0x2e, 0x7a, 0x1c, 0x27, 0xf1, 0x38, 0x3c, 0x19, 0xbc, 0x00, 0xe7, 0x49, 0x8a, 0x1e, 0xc5, 0x49, 0x1c, 0xc6, 0xe3, 0xd9, 0xfe, 0xf4,
0x1e, 0xcd, 0x0e, 0xa6, 0x87, 0xd9, 0x20, 0x0d, 0x13, 0xf4, 0x08, 0xf8, 0xdf, 0x7a, 0xb0, 0xe1, 0x20, 0x1b, 0xa6, 0x41, 0x82, 0x11, 0x81, 0xfb, 0xb7, 0x0e, 0xac, 0x5b, 0xb5, 0x32, 0x95, 0xf1,
0xf4, 0xaa, 0x50, 0xc6, 0x17, 0x24, 0x4b, 0x9b, 0x94, 0x8e, 0x64, 0xbc, 0x75, 0x4b, 0x1d, 0x4a, 0x05, 0x21, 0xd2, 0xfa, 0x48, 0x47, 0x08, 0xde, 0x9a, 0x61, 0x0e, 0x05, 0xa1, 0x48, 0x22, 0x3d,
0x44, 0x19, 0x44, 0x7a, 0xa2, 0xb2, 0x3c, 0xb7, 0x60, 0x55, 0xaf, 0x4c, 0x0f, 0x94, 0x5c, 0xd8, 0x96, 0xa7, 0x3c, 0x37, 0x61, 0x45, 0xf5, 0x4c, 0x7d, 0x28, 0xa4, 0xb0, 0x57, 0x95, 0x42, 0xf9,
0xad, 0x72, 0xa1, 0x1a, 0xbf, 0xa2, 0x06, 0x68, 0x12, 0xbf, 0x22, 0xed, 0x6a, 0x31, 0xa4, 0x3d, 0x7d, 0x57, 0x7e, 0xa0, 0x58, 0xfc, 0xb2, 0xf0, 0xab, 0xf9, 0x88, 0xc6, 0xa8, 0x62, 0xda, 0xbe,
0x6a, 0x9f, 0xb6, 0xa7, 0xc7, 0xdb, 0xc6, 0xbc, 0x5e, 0xc1, 0xc0, 0x00, 0x33, 0xfe, 0x07, 0x1e, 0xfa, 0xde, 0x74, 0xe6, 0x55, 0x0f, 0x86, 0x1a, 0xcc, 0xdc, 0x3f, 0x70, 0x00, 0x8a, 0xde, 0xa1,
0x40, 0xb1, 0x3a, 0x64, 0x8c, 0x42, 0xa5, 0xcb, 0x62, 0x35, 0x4b, 0x7d, 0xbf, 0x01, 0x1d, 0x13, 0x60, 0x14, 0x26, 0x5d, 0x5c, 0x56, 0x33, 0xcc, 0xf7, 0x6b, 0xd0, 0xd1, 0xd9, 0xfc, 0x62, 0x97,
0xcd, 0x2f, 0x5e, 0x89, 0xb6, 0x86, 0xa1, 0xc1, 0x75, 0x15, 0x56, 0x47, 0xe3, 0xf8, 0x90, 0x9e, 0x68, 0x2b, 0x0c, 0x1d, 0xae, 0x2b, 0xb0, 0x32, 0x0e, 0xe3, 0x03, 0xda, 0x62, 0xe9, 0xa8, 0x39,
0x58, 0x4a, 0x35, 0x67, 0x2a, 0x3f, 0xba, 0x22, 0xc1, 0xf7, 0x15, 0xb4, 0x78, 0x52, 0x9a, 0xd6, 0x93, 0xe7, 0xa3, 0x5d, 0x01, 0xdf, 0x93, 0x68, 0xb1, 0xa5, 0x34, 0x8d, 0x2d, 0xc5, 0xfd, 0x4e,
0x93, 0xc2, 0xbf, 0xd3, 0x30, 0x31, 0xe0, 0x62, 0xcf, 0x67, 0x4a, 0x19, 0xdb, 0xad, 0x28, 0xc7, 0x43, 0xe7, 0x80, 0x8b, 0x31, 0x9f, 0xaa, 0x65, 0x6c, 0xa7, 0x62, 0x1c, 0x4f, 0x49, 0xb9, 0x52,
0x33, 0x42, 0xae, 0x14, 0xbd, 0xd9, 0x7f, 0xa9, 0x23, 0x7b, 0x13, 0x56, 0x52, 0xa9, 0x7d, 0xb4, 0xf6, 0x66, 0xef, 0x85, 0x81, 0xec, 0x0d, 0xe8, 0xa6, 0xc2, 0xfa, 0x28, 0xd3, 0xd4, 0x7c, 0x8e,
0x6a, 0x6a, 0xbe, 0x40, 0x35, 0x2d, 0xa7, 0xce, 0xbb, 0xf3, 0xff, 0x60, 0x2d, 0x18, 0x9e, 0x88, 0x69, 0x5a, 0x4e, 0xad, 0x7d, 0xe7, 0xe7, 0x60, 0xd5, 0x1f, 0x1d, 0xf3, 0x34, 0x0f, 0x28, 0xa2,
0x34, 0x0f, 0xc9, 0xa3, 0xa1, 0x47, 0x5f, 0x2a, 0xd4, 0x55, 0x0b, 0x4e, 0x6f, 0xf1, 0x55, 0x58, 0xa1, 0x4d, 0x5f, 0x18, 0xd4, 0x15, 0x03, 0xa7, 0xbd, 0xf8, 0x0a, 0xac, 0xc8, 0x33, 0x69, 0x4d,
0x55, 0x39, 0x69, 0x83, 0xa9, 0x2a, 0x91, 0x0a, 0x30, 0x22, 0xf2, 0x1f, 0xe8, 0x70, 0xb3, 0x7b, 0x29, 0x6f, 0x22, 0x15, 0x30, 0x12, 0xba, 0xdf, 0x57, 0xe9, 0x66, 0x7b, 0x0d, 0x4f, 0x9f, 0x11,
0x87, 0x67, 0x9f, 0x88, 0xbd, 0xbb, 0x46, 0x69, 0x77, 0x9f, 0x55, 0xa1, 0xdf, 0xa1, 0x76, 0x9b, 0x73, 0x74, 0x8d, 0xd2, 0xe8, 0x3e, 0x27, 0x53, 0xbf, 0x23, 0x15, 0x36, 0xc9, 0x24, 0xbc, 0x00,
0x54, 0x10, 0x5e, 0x02, 0x55, 0xa8, 0xde, 0x3d, 0xd2, 0xe6, 0xab, 0x1c, 0x29, 0xff, 0xde, 0x1c, 0x65, 0xaa, 0xde, 0x9e, 0xd2, 0xe6, 0xcb, 0x4c, 0xa9, 0xfb, 0x99, 0x03, 0x8b, 0xbb, 0x71, 0xb2,
0x2c, 0xbe, 0x1f, 0x9d, 0xc4, 0xe1, 0x80, 0x02, 0xb1, 0x13, 0x31, 0x89, 0x75, 0xb9, 0x07, 0xfe, 0x2b, 0x8f, 0x97, 0x49, 0x11, 0xf4, 0x8d, 0x0f, 0x55, 0x34, 0xbd, 0xe2, 0x46, 0xc5, 0x2b, 0xae,
0xc6, 0x17, 0x9d, 0x52, 0x9f, 0x49, 0xae, 0x22, 0xa9, 0xba, 0x89, 0xaf, 0x5b, 0x5a, 0x94, 0x40, 0xee, 0xb5, 0xcb, 0xe5, 0xbd, 0xf6, 0x57, 0xe0, 0x02, 0x45, 0xcb, 0x69, 0x9c, 0xc4, 0x29, 0x2a,
0x49, 0x4e, 0xb1, 0x20, 0x68, 0xc7, 0xa6, 0x76, 0xfd, 0x97, 0x6a, 0x15, 0xf5, 0x32, 0xf3, 0x56, 0xa3, 0x1f, 0x8a, 0x8d, 0x35, 0x8e, 0xf2, 0x23, 0x65, 0xc6, 0x9e, 0x47, 0x42, 0xd1, 0x51, 0x98,
0xbd, 0x0c, 0x85, 0xed, 0x65, 0x56, 0x97, 0x8e, 0x73, 0xc9, 0xd7, 0x4d, 0xb2, 0xbb, 0x53, 0x21, 0x1f, 0x0f, 0x84, 0x33, 0x2c, 0x7d, 0x03, 0x61, 0xdd, 0xaa, 0x15, 0xee, 0x97, 0xa0, 0x45, 0xce,
0x9d, 0x7a, 0x7a, 0x27, 0x17, 0x95, 0xdd, 0x6d, 0x03, 0xf1, 0x2d, 0x95, 0x03, 0x24, 0x8e, 0xd4, 0x2d, 0x0d, 0xeb, 0x4d, 0x68, 0x1d, 0xc5, 0xc9, 0xe0, 0x28, 0x88, 0x72, 0xa5, 0xdc, 0xdd, 0xc2,
0x35, 0x36, 0x08, 0x6d, 0x8b, 0x72, 0x09, 0x59, 0x4b, 0x5e, 0x71, 0x09, 0x8c, 0x0a, 0x69, 0x28, 0xeb, 0xdc, 0xa5, 0x09, 0xd1, 0x04, 0xee, 0xdf, 0xcf, 0xc1, 0xe2, 0xfb, 0xd1, 0x71, 0x1c, 0x0c,
0x8c, 0xde, 0x90, 0x7b, 0x00, 0x59, 0xe2, 0x55, 0x86, 0x5b, 0xd6, 0xba, 0xcc, 0x4e, 0x6b, 0x6b, 0x29, 0x33, 0x3d, 0xe1, 0x93, 0x58, 0xdd, 0x7f, 0xc1, 0xdf, 0x38, 0x15, 0x74, 0x16, 0x9c, 0xe4,
0x1d, 0x6d, 0x90, 0x60, 0x3c, 0x3e, 0x0c, 0x06, 0x4f, 0xa9, 0xb0, 0x8f, 0x92, 0xd1, 0x2d, 0xdf, 0x32, 0xb5, 0xac, 0x8a, 0xb8, 0xdd, 0xa7, 0xc5, 0x9d, 0x30, 0xa1, 0x3a, 0x06, 0x82, 0x8e, 0x7d,
0x05, 0xe2, 0xaa, 0xa9, 0x4e, 0x4d, 0x91, 0x58, 0x96, 0xc9, 0x64, 0x0b, 0xc4, 0xbf, 0x01, 0xec, 0x6a, 0x5e, 0x88, 0x93, 0xa5, 0xe2, 0x02, 0xd1, 0xbc, 0x71, 0x81, 0x88, 0xce, 0x31, 0xc4, 0x31,
0xd6, 0x70, 0xa8, 0x6e, 0xc8, 0xf8, 0x34, 0xc5, 0xd9, 0x7a, 0xce, 0xd9, 0xd6, 0xec, 0xb1, 0x51, 0x37, 0xc9, 0xd7, 0x92, 0xa7, 0x8a, 0x14, 0x88, 0xa4, 0x5c, 0x64, 0x39, 0xc8, 0x71, 0x58, 0x94,
0xbb, 0x47, 0x7e, 0x0f, 0xda, 0xfb, 0x56, 0x3d, 0x1e, 0x5d, 0xa6, 0xae, 0xc4, 0x53, 0x0c, 0x60, 0x81, 0x88, 0x09, 0xa2, 0x73, 0x21, 0x3e, 0x10, 0x34, 0xc2, 0xf8, 0x9a, 0x10, 0x3a, 0x5b, 0xe5,
0x41, 0xac, 0x09, 0x1b, 0xf6, 0x84, 0xfc, 0x17, 0x81, 0x3d, 0x0c, 0xb3, 0xdc, 0xac, 0x4f, 0x1e, 0x3b, 0x75, 0x2d, 0x21, 0xf3, 0x25, 0x18, 0x2d, 0xf4, 0x88, 0x6b, 0x43, 0x2a, 0xc6, 0x00, 0xe2,
0xe0, 0x1b, 0xd0, 0x31, 0x1e, 0x60, 0x91, 0x7f, 0x6e, 0x2b, 0x18, 0xe5, 0x85, 0x6f, 0xc9, 0xc4, 0xce, 0x5b, 0x19, 0x37, 0xc2, 0x17, 0x71, 0x5c, 0xaf, 0xc2, 0x17, 0x14, 0x14, 0x3f, 0x0c, 0x0f,
0x75, 0x79, 0x63, 0xdb, 0xb0, 0x14, 0x4a, 0x90, 0xd6, 0xc3, 0x3a, 0x2d, 0xac, 0x31, 0x4d, 0x3f, 0xfc, 0xe1, 0x13, 0xba, 0xe9, 0x48, 0xa7, 0xf3, 0x2d, 0xcf, 0x06, 0xb1, 0xd7, 0xc6, 0x6a, 0xd2,
0x1a, 0x14, 0x0a, 0xe8, 0xa8, 0xf9, 0x1f, 0x7a, 0xb0, 0xa8, 0xb6, 0x86, 0xcf, 0xa1, 0x53, 0x89, 0x49, 0x58, 0xd3, 0x33, 0x21, 0xb6, 0x03, 0x6d, 0x0a, 0xd9, 0xe4, 0x7a, 0x76, 0x69, 0x3d, 0x57,
0x28, 0x37, 0xe6, 0xc0, 0xea, 0xeb, 0xb7, 0xaa, 0x5c, 0x37, 0x57, 0xc7, 0x75, 0x0c, 0x9a, 0x49, 0xcd, 0x98, 0x8e, 0x56, 0xd4, 0x24, 0x72, 0xbf, 0x01, 0xec, 0xe6, 0x68, 0x24, 0x57, 0x55, 0x07,
0x90, 0x1f, 0x93, 0x05, 0xdd, 0xf2, 0xe9, 0x37, 0xfa, 0xad, 0xe8, 0xd5, 0x49, 0xee, 0x26, 0x8f, 0x86, 0xc5, 0x7a, 0x38, 0xd6, 0x7a, 0xd4, 0xcc, 0x4b, 0xa3, 0x76, 0x5e, 0xdc, 0xbb, 0xd0, 0xde,
0xae, 0xae, 0x64, 0x50, 0xea, 0x8c, 0x0a, 0x1c, 0x37, 0x45, 0xa9, 0x5e, 0x09, 0x37, 0x11, 0x5c, 0x33, 0x2e, 0x35, 0x92, 0x00, 0xa8, 0xeb, 0x8c, 0x52, 0x68, 0x0c, 0xc4, 0x68, 0xb0, 0x61, 0x36,
0x95, 0x46, 0x2f, 0xc0, 0xc5, 0x79, 0x29, 0x12, 0xe5, 0xf3, 0x52, 0xa8, 0xbe, 0xe9, 0xe7, 0x3d, 0xe8, 0xfe, 0x22, 0xb0, 0x07, 0x41, 0x96, 0xeb, 0xfe, 0x89, 0x49, 0x7f, 0x0d, 0x3a, 0x3a, 0x8c,
0xe8, 0xde, 0x15, 0x63, 0x91, 0x8b, 0x5b, 0xe3, 0x71, 0x99, 0xfe, 0x6b, 0x70, 0xb1, 0xa6, 0x4f, 0x2e, 0x0e, 0xf1, 0xdb, 0x12, 0xa3, 0xc3, 0xf5, 0x9b, 0xe2, 0xf4, 0xbf, 0x3c, 0xb0, 0x2d, 0x58,
0xbd, 0xaa, 0xf7, 0x61, 0xfd, 0xae, 0x38, 0x9c, 0x8e, 0x1e, 0x8a, 0x93, 0x22, 0xcd, 0xc2, 0xa0, 0x0a, 0x04, 0x54, 0x96, 0x77, 0x45, 0xa9, 0xeb, 0xd1, 0x2b, 0x93, 0xa0, 0xb5, 0x57, 0xfe, 0xc0,
0x99, 0x1d, 0xc7, 0xa7, 0xea, 0x6e, 0xe9, 0x37, 0x3a, 0xe8, 0x63, 0xc4, 0xe9, 0x67, 0x89, 0x18, 0x81, 0x45, 0x39, 0x34, 0xf4, 0x29, 0xac, 0xeb, 0x9c, 0x62, 0x60, 0x16, 0x56, 0x7f, 0x09, 0xae,
0xe8, 0xca, 0x25, 0x82, 0x1c, 0x24, 0x62, 0xc0, 0xdf, 0x01, 0x66, 0xd3, 0x51, 0x5b, 0x40, 0xc9, 0x2a, 0xa9, 0x73, 0x75, 0x92, 0xca, 0xa0, 0x99, 0xf8, 0xf9, 0x11, 0x85, 0x21, 0x2d, 0x8f, 0x7e,
0x9d, 0x1e, 0xf6, 0xb3, 0x59, 0x96, 0x8b, 0x89, 0x2e, 0xc9, 0xb2, 0x41, 0xfc, 0x2a, 0x74, 0xf6, 0x63, 0xf0, 0x8f, 0xa1, 0xb1, 0xd0, 0x08, 0x0a, 0x8b, 0xeb, 0xee, 0x5d, 0x0a, 0xc3, 0x5b, 0xc1,
0x83, 0x99, 0x2f, 0x3e, 0x56, 0xc5, 0xa0, 0xe8, 0xbc, 0x05, 0x33, 0x64, 0x65, 0xe3, 0xbc, 0x51, 0x71, 0x50, 0x74, 0x5e, 0x2e, 0x70, 0x9d, 0x06, 0x97, 0x77, 0x11, 0x0a, 0xb8, 0x98, 0x2f, 0xc9,
0x37, 0xff, 0x9b, 0x06, 0x2c, 0x48, 0x4c, 0xa4, 0x3a, 0x14, 0x59, 0x1e, 0x46, 0x32, 0xc5, 0xa0, 0xa2, 0x3c, 0x5f, 0x92, 0xd4, 0xd3, 0xf5, 0x6e, 0x1f, 0x7a, 0x77, 0x78, 0xc8, 0x73, 0x7e, 0x33,
0xa8, 0x5a, 0xa0, 0x0a, 0x6f, 0x34, 0x6a, 0x78, 0x43, 0x99, 0x53, 0xba, 0x0a, 0x44, 0x31, 0x81, 0x0c, 0xcb, 0xfc, 0x2f, 0xc0, 0xf9, 0x9a, 0x3a, 0xe9, 0x9a, 0xdc, 0x83, 0xb5, 0x3b, 0xfc, 0x60,
0x03, 0xc3, 0x77, 0xb7, 0x48, 0xdd, 0x4a, 0xef, 0xa1, 0x00, 0x94, 0xbc, 0xf9, 0x42, 0x3f, 0xc8, 0x3a, 0x7e, 0xc0, 0x8f, 0x8b, 0xb3, 0x2a, 0x06, 0xcd, 0xec, 0x28, 0x3e, 0x91, 0x6b, 0x4b, 0xbf,
0xf5, 0x69, 0xa6, 0x55, 0xec, 0x60, 0x83, 0x6a, 0xb5, 0xd0, 0xa2, 0xe4, 0x9a, 0x8a, 0x16, 0xaa, 0xd9, 0x2b, 0x00, 0x21, 0xd2, 0x0c, 0xb2, 0x84, 0x0f, 0xd5, 0xf5, 0x2f, 0x42, 0xf6, 0x13, 0x3e,
0x68, 0x9b, 0xa5, 0x57, 0xd0, 0x36, 0xd2, 0xc6, 0x72, 0xb4, 0x0d, 0x83, 0xb5, 0xfb, 0x42, 0xf8, 0x74, 0xdf, 0x06, 0x66, 0xf2, 0x91, 0x43, 0x40, 0x6d, 0x9f, 0x1e, 0x0c, 0xb2, 0x59, 0x96, 0xf3,
0x22, 0x89, 0x53, 0x5d, 0x51, 0xcb, 0xbf, 0xeb, 0xc1, 0x9a, 0x7a, 0x3d, 0x4c, 0x1f, 0x7b, 0xc3, 0x89, 0xba, 0xd7, 0x66, 0x42, 0xee, 0x15, 0xe8, 0xec, 0xf9, 0x33, 0x8f, 0x7f, 0x2c, 0x6f, 0xd4,
0x79, 0x6a, 0xbc, 0xba, 0xa8, 0xf3, 0x9b, 0xb0, 0x4c, 0xce, 0x96, 0x09, 0x41, 0xa8, 0x78, 0x89, 0x62, 0x04, 0xec, 0xcf, 0x50, 0x94, 0x75, 0x04, 0x4c, 0xd5, 0xee, 0x7f, 0x36, 0x60, 0x41, 0x50,
0x03, 0xc4, 0x35, 0xe9, 0x38, 0xea, 0x24, 0x1c, 0xab, 0x03, 0xb6, 0x41, 0x3a, 0x8a, 0x81, 0xce, 0x22, 0xd7, 0x11, 0xcf, 0xf2, 0x20, 0x12, 0xe7, 0x34, 0x92, 0xab, 0x01, 0x55, 0x64, 0xa3, 0x51,
0x18, 0x1d, 0xaf, 0xe7, 0x9b, 0x36, 0xff, 0x6b, 0x0f, 0xd6, 0xad, 0x05, 0x2b, 0x8e, 0xba, 0x09, 0x23, 0x1b, 0xd2, 0x27, 0x55, 0x57, 0x69, 0xa4, 0x10, 0x58, 0x18, 0x3a, 0x2f, 0xc5, 0xf9, 0xb7,
0x3a, 0x4d, 0x2b, 0x23, 0x15, 0x52, 0x30, 0x2e, 0xb8, 0x2f, 0x61, 0x31, 0xcc, 0x41, 0xa6, 0x8b, 0x08, 0xc1, 0x0a, 0xa0, 0x94, 0x12, 0x29, 0x6c, 0x8a, 0xe8, 0x9f, 0x12, 0x5a, 0x29, 0x0e, 0x26,
0x09, 0x66, 0xb4, 0xc0, 0x6c, 0x2a, 0x6b, 0xdb, 0x9a, 0xbe, 0x0d, 0x42, 0xa6, 0x38, 0x15, 0xe2, 0x54, 0x6b, 0xb9, 0x16, 0x85, 0xd4, 0x54, 0x2c, 0x57, 0xc5, 0x42, 0x2d, 0xbd, 0x84, 0x85, 0x12,
0xa9, 0x41, 0x99, 0x23, 0x14, 0x07, 0x46, 0x59, 0xb8, 0x38, 0xca, 0x8f, 0x0d, 0x92, 0x2c, 0x3c, 0x8e, 0xea, 0xf3, 0x2c, 0x14, 0xbc, 0x8c, 0x85, 0x62, 0xb0, 0x7a, 0x8f, 0x73, 0x8f, 0xe3, 0xde,
0x71, 0x81, 0xfc, 0xef, 0x3d, 0xd8, 0x90, 0x16, 0x88, 0xb2, 0xef, 0x4c, 0x51, 0xdc, 0x82, 0x34, 0xa7, 0xc4, 0xe9, 0xbb, 0x0e, 0xac, 0xca, 0x6d, 0x5b, 0xd7, 0xb1, 0xd7, 0xac, 0x3d, 0xde, 0xa9,
0xb9, 0xa4, 0x74, 0xed, 0x9d, 0xf3, 0x55, 0x9b, 0x7d, 0xf1, 0x15, 0xad, 0x26, 0x93, 0x7d, 0x3d, 0x4b, 0xf7, 0xbf, 0x0e, 0xcb, 0xb4, 0xf3, 0xea, 0xdc, 0x8f, 0x4c, 0x54, 0x59, 0x20, 0x8e, 0x43,
0xe3, 0x2e, 0xe6, 0xea, 0xee, 0xe2, 0x05, 0x27, 0x5d, 0xe7, 0x99, 0xcf, 0xd7, 0x7a, 0xe6, 0xb7, 0x25, 0xb0, 0x27, 0x41, 0x28, 0x17, 0xc5, 0x84, 0x54, 0xfa, 0x08, 0xa3, 0x60, 0x5a, 0x12, 0xc7,
0x17, 0x61, 0x3e, 0x1b, 0xc4, 0x89, 0xe0, 0x5b, 0xb0, 0xe9, 0x6e, 0x4e, 0xa9, 0x93, 0xef, 0x7b, 0xd3, 0x65, 0xf7, 0x6f, 0x1c, 0x58, 0x33, 0x3a, 0x2c, 0xa5, 0xf0, 0x06, 0xa8, 0xf3, 0x71, 0x91,
0xd0, 0xbd, 0x2f, 0xe3, 0x54, 0x61, 0x34, 0xda, 0x0b, 0xb3, 0x3c, 0x4e, 0x4d, 0x15, 0xf0, 0x65, 0x22, 0x12, 0xca, 0x74, 0xce, 0x76, 0x41, 0x8a, 0xcf, 0x2c, 0x62, 0x5a, 0x4c, 0x7f, 0x46, 0x1d,
0x80, 0x2c, 0x0f, 0xd2, 0x5c, 0x56, 0xc7, 0x28, 0x9f, 0xba, 0x80, 0xe0, 0x1a, 0x45, 0x34, 0x94, 0xcc, 0xa6, 0x13, 0xe9, 0x67, 0x98, 0x10, 0x0a, 0xd2, 0x09, 0xe7, 0x4f, 0x34, 0xc9, 0x1c, 0x91,
0xbd, 0xf2, 0x6e, 0x4c, 0x1b, 0x2f, 0x86, 0x32, 0xc3, 0xfd, 0xf8, 0xe8, 0x28, 0x13, 0xc6, 0x46, 0x58, 0x18, 0x1d, 0x7f, 0xa2, 0xc7, 0xa0, 0x89, 0xc4, 0x8d, 0x1f, 0x1b, 0x74, 0xff, 0xc1, 0x81,
0xb2, 0x61, 0xe8, 0x66, 0xa1, 0xf4, 0xa2, 0x63, 0x21, 0x4e, 0x48, 0x6d, 0x4a, 0x1f, 0xaa, 0x04, 0x75, 0xe1, 0xfa, 0x49, 0xc7, 0x5a, 0xdf, 0x46, 0x5c, 0x10, 0xbe, 0xae, 0xd0, 0xc8, 0xdd, 0x33,
0xe5, 0x7f, 0xe5, 0xc1, 0x6a, 0xb1, 0xc8, 0x7b, 0x08, 0x74, 0x25, 0x5d, 0x2e, 0xcd, 0x92, 0x74, 0x9e, 0x2c, 0xb3, 0x2f, 0xbe, 0xa4, 0xbb, 0xaa, 0x8f, 0xbd, 0x4f, 0x59, 0x8b, 0xb9, 0xba, 0xb5,
0xed, 0xed, 0x87, 0xc3, 0x7e, 0x18, 0xa9, 0xb5, 0x59, 0x10, 0x92, 0x3e, 0xd5, 0x8a, 0xa7, 0xba, 0x78, 0xce, 0x4c, 0xd7, 0xa5, 0x44, 0xe6, 0x6b, 0x53, 0x22, 0xb7, 0x16, 0x61, 0x3e, 0x1b, 0xc6,
0x12, 0xc9, 0x06, 0xc9, 0x34, 0x63, 0x8e, 0xa3, 0x65, 0x19, 0x92, 0x6a, 0x51, 0x71, 0xd3, 0x24, 0x09, 0x77, 0x37, 0x61, 0xc3, 0x1e, 0x9c, 0x34, 0x41, 0xdf, 0x73, 0xa0, 0x77, 0x4f, 0x24, 0x08,
0xa7, 0x51, 0x0b, 0x32, 0x26, 0xa9, 0x9a, 0xfa, 0xad, 0x59, 0x24, 0x28, 0xfe, 0xe4, 0x7f, 0xe8, 0x83, 0x68, 0xbc, 0x1b, 0x64, 0x79, 0x9c, 0xea, 0xeb, 0xd7, 0x97, 0x00, 0xb2, 0xdc, 0x4f, 0x73,
0xc1, 0xc5, 0x9a, 0xc3, 0x55, 0x92, 0x71, 0x17, 0xd6, 0x8f, 0x4c, 0xa7, 0x3e, 0x00, 0x29, 0x1e, 0x71, 0x2d, 0x49, 0x26, 0x33, 0x0a, 0x04, 0xfb, 0xc8, 0xa3, 0x91, 0xa8, 0x15, 0x6b, 0xa3, 0xcb,
0x5b, 0x8a, 0x8b, 0x4a, 0x9b, 0xf6, 0xab, 0x03, 0xd8, 0x5b, 0xb0, 0x4e, 0x41, 0x0a, 0x79, 0xa4, 0xb8, 0x30, 0x74, 0x24, 0x3f, 0x88, 0x0f, 0x0f, 0x33, 0xae, 0x9d, 0x53, 0x13, 0xc3, 0xf8, 0x16,
0x4e, 0x86, 0xbe, 0xda, 0xb1, 0xfb, 0x83, 0x06, 0xac, 0xc8, 0xb8, 0xb8, 0xfc, 0x0e, 0x44, 0xa4, 0x35, 0x1e, 0x23, 0x3a, 0x7e, 0x4c, 0xa6, 0x56, 0x78, 0x7d, 0x25, 0xd4, 0xfd, 0x6b, 0x07, 0x56,
0xec, 0x03, 0x58, 0x54, 0x5f, 0xdd, 0xb0, 0xf3, 0x6a, 0x5a, 0xf7, 0x3b, 0x9f, 0xde, 0x56, 0x19, 0x8a, 0x4e, 0xde, 0x45, 0xd0, 0xb6, 0x0e, 0xa2, 0x6b, 0x86, 0x75, 0x50, 0x69, 0x96, 0x60, 0x34,
0xac, 0x78, 0x67, 0xe3, 0x77, 0x7f, 0xfc, 0x4f, 0x7f, 0xd4, 0x58, 0x66, 0xed, 0x9d, 0x93, 0xb7, 0x08, 0x22, 0xd9, 0x37, 0x03, 0x21, 0x8d, 0x95, 0xa5, 0x78, 0xaa, 0xae, 0x80, 0x99, 0x90, 0x38,
0x77, 0x46, 0x22, 0xca, 0x90, 0xc6, 0xaf, 0x03, 0x14, 0x1f, 0xae, 0xb0, 0xae, 0x31, 0x18, 0x4a, 0xdf, 0xcd, 0xf1, 0x6b, 0x71, 0xff, 0x4b, 0x96, 0xe8, 0x56, 0xd9, 0x24, 0xa7, 0xaf, 0x16, 0x84,
0x1f, 0xda, 0xf4, 0x2e, 0xd6, 0xf4, 0x28, 0xba, 0x17, 0x89, 0xee, 0x06, 0x5f, 0x41, 0xba, 0x61, 0xdb, 0x2b, 0x8b, 0x6a, 0x7f, 0x5a, 0x24, 0x14, 0x7f, 0xba, 0x7f, 0xe8, 0xc0, 0xf9, 0x9a, 0xc9,
0x14, 0xe6, 0xf2, 0x2b, 0x96, 0xf7, 0xbc, 0x6d, 0x36, 0x84, 0x8e, 0xfd, 0x01, 0x0b, 0xd3, 0xfe, 0x95, 0x9a, 0x71, 0x07, 0xd6, 0x0e, 0x75, 0xa5, 0x9a, 0x00, 0xa1, 0x1e, 0x9b, 0x52, 0x8a, 0x4a,
0x59, 0xcd, 0x57, 0x31, 0xbd, 0xd7, 0x6a, 0xfb, 0xb4, 0x73, 0x4a, 0x73, 0x9c, 0xe7, 0x6b, 0x38, 0x83, 0xf6, 0xaa, 0x1f, 0xa0, 0x13, 0x4c, 0xd9, 0x21, 0x31, 0xa5, 0xd6, 0xd5, 0x88, 0x6a, 0xc5,
0xc7, 0x94, 0x30, 0xcc, 0x2c, 0xbb, 0xff, 0xf0, 0x1a, 0xb4, 0x4c, 0x8c, 0x83, 0x7d, 0x1b, 0x96, 0xce, 0xf7, 0x1b, 0xd0, 0x15, 0x07, 0x12, 0xe2, 0x01, 0x0e, 0x4f, 0xd9, 0x07, 0xb0, 0x28, 0x9f,
0x9d, 0x54, 0x02, 0xd3, 0x84, 0xeb, 0x32, 0x0f, 0xbd, 0x4b, 0xf5, 0x9d, 0x6a, 0xda, 0xcb, 0x34, 0x3b, 0xb1, 0xb3, 0xb2, 0x59, 0xfb, 0x81, 0x55, 0x7f, 0xb3, 0x0c, 0x4b, 0xd9, 0x59, 0xff, 0xdd,
0x6d, 0x97, 0x6d, 0xe1, 0xb4, 0x2a, 0x16, 0xbf, 0x43, 0x09, 0x14, 0x59, 0xcc, 0xf4, 0x14, 0x56, 0xcf, 0xfe, 0xf9, 0x8f, 0x1a, 0xcb, 0xac, 0xbd, 0x7d, 0xfc, 0xd6, 0xf6, 0x98, 0x47, 0x19, 0xf2,
0xdc, 0xf0, 0x3f, 0xbb, 0xe4, 0x2a, 0x94, 0xd2, 0x6c, 0x9f, 0x39, 0xa3, 0x57, 0x4d, 0x77, 0x89, 0xf8, 0x75, 0x80, 0xe2, 0xc5, 0x10, 0xeb, 0x69, 0x27, 0xa3, 0xf4, 0xc2, 0xa9, 0x7f, 0xbe, 0xa6,
0xa6, 0xdb, 0x62, 0x9b, 0xf6, 0x74, 0x26, 0xf6, 0x20, 0xa8, 0xfc, 0xcc, 0xfe, 0xb2, 0x85, 0x7d, 0x46, 0xf2, 0x3d, 0x4f, 0x7c, 0xd7, 0xdd, 0x2e, 0xf2, 0x0d, 0xa2, 0x20, 0x17, 0xcf, 0x87, 0xde,
0xc6, 0x5c, 0x75, 0xdd, 0x17, 0x2f, 0xe6, 0xd2, 0xaa, 0x9f, 0xbd, 0xf0, 0x2e, 0x4d, 0xc5, 0x18, 0x75, 0xb6, 0xd8, 0x08, 0x3a, 0xe6, 0xcb, 0x21, 0xa6, 0x02, 0xe3, 0x9a, 0xe7, 0x48, 0xfd, 0x0b,
0x1d, 0xa8, 0xfd, 0x61, 0x0b, 0xfb, 0x08, 0x5a, 0xa6, 0x9a, 0x9d, 0x5d, 0xb0, 0x3e, 0x21, 0xb0, 0xb5, 0x75, 0x2a, 0x2b, 0x40, 0x6d, 0x9c, 0x75, 0x57, 0xb1, 0x8d, 0x29, 0x51, 0xe8, 0x56, 0x76,
0x4b, 0xec, 0x7b, 0xdd, 0x6a, 0x47, 0xdd, 0x55, 0xd9, 0x94, 0x91, 0x21, 0x1e, 0xc2, 0x79, 0x65, 0xfe, 0xf1, 0x02, 0xb4, 0x74, 0x72, 0x89, 0x7d, 0x1b, 0x96, 0xad, 0x33, 0x1c, 0xa6, 0x18, 0xd7,
0x70, 0x1e, 0x8a, 0x9f, 0x66, 0x27, 0x35, 0xdf, 0xe3, 0xdc, 0xf0, 0xd8, 0x4d, 0x58, 0xd2, 0x1f, 0x1d, 0xf9, 0xf4, 0x2f, 0xd6, 0x57, 0xca, 0x66, 0x2f, 0x51, 0xb3, 0x3d, 0xb6, 0x89, 0xcd, 0xca,
0x09, 0xb0, 0xad, 0xfa, 0x8f, 0x1d, 0x7a, 0x17, 0x2a, 0x70, 0x25, 0xcf, 0xb7, 0x00, 0x8a, 0x02, 0x43, 0x90, 0x6d, 0x3a, 0xb9, 0x12, 0xb7, 0xc8, 0x9e, 0x40, 0xd7, 0x3e, 0x77, 0x61, 0x17, 0x6d,
0x77, 0xc3, 0xf9, 0x95, 0xb2, 0x7b, 0x73, 0x88, 0x35, 0xd5, 0xf0, 0x23, 0x2a, 0xe7, 0x77, 0xeb, 0x83, 0x52, 0x6a, 0xed, 0x95, 0x53, 0x6a, 0x65, 0x73, 0x17, 0xa9, 0xb9, 0x4d, 0xb6, 0x61, 0x36,
0xe7, 0xd9, 0xeb, 0x05, 0x7e, 0x6d, 0x65, 0xfd, 0x0b, 0x08, 0xf2, 0x2d, 0x3a, 0xbb, 0x35, 0x46, 0xa7, 0x93, 0x3e, 0x9c, 0xee, 0xfd, 0x99, 0x4f, 0x8a, 0xd8, 0x2b, 0x7a, 0xa9, 0xeb, 0x9e, 0x1a,
0xa2, 0x14, 0x89, 0x53, 0x5d, 0x88, 0x79, 0x17, 0xda, 0x56, 0xd1, 0x3c, 0xd3, 0x14, 0xaa, 0x05, 0xe9, 0x45, 0xab, 0xbe, 0x37, 0x72, 0x7b, 0xd4, 0x14, 0x63, 0x34, 0xa1, 0xe6, 0x8b, 0x22, 0xf6,
0xf7, 0xbd, 0x5e, 0x5d, 0x97, 0x5a, 0xee, 0x57, 0x60, 0xd9, 0xa9, 0x7e, 0x37, 0x92, 0x51, 0x57, 0x11, 0xb4, 0xf4, 0x33, 0x02, 0x76, 0xce, 0x78, 0xbb, 0x61, 0xbe, 0x6d, 0xe8, 0xf7, 0xaa, 0x15,
0x5b, 0x6f, 0x24, 0xa3, 0xbe, 0x60, 0xfe, 0x9b, 0xd0, 0xb6, 0x6a, 0xd5, 0x99, 0x55, 0x80, 0x52, 0x75, 0x4b, 0x65, 0x72, 0x46, 0x81, 0x78, 0x00, 0x67, 0xa5, 0x93, 0x7a, 0xc0, 0x7f, 0x9c, 0x91,
0xaa, 0x52, 0x37, 0x2b, 0xaa, 0x2b, 0x6d, 0xdf, 0xa4, 0xfd, 0xae, 0xf0, 0x16, 0xee, 0x97, 0xaa, 0xd4, 0x3c, 0x84, 0xba, 0xee, 0xb0, 0x1b, 0xb0, 0xa4, 0x5e, 0x67, 0xb0, 0xcd, 0xfa, 0x57, 0x26,
0x11, 0x91, 0x49, 0xbe, 0x0d, 0x2b, 0x6e, 0xf5, 0xba, 0x91, 0xaa, 0xda, 0x3a, 0x78, 0x23, 0x55, 0xfd, 0x73, 0x15, 0x5c, 0xea, 0xf3, 0x4d, 0x80, 0xe2, 0x65, 0x81, 0x96, 0xfc, 0xca, 0x7b, 0x07,
0x67, 0x94, 0xbc, 0x2b, 0x86, 0xdc, 0xde, 0x30, 0x93, 0xec, 0x7c, 0xaa, 0x22, 0xfc, 0xcf, 0xd9, 0x3d, 0x89, 0x35, 0xcf, 0x10, 0xc6, 0xf4, 0x8e, 0xc2, 0x7e, 0xb8, 0xc0, 0x5e, 0x2d, 0xe8, 0x6b,
0xd7, 0x51, 0x75, 0xa8, 0xf2, 0x50, 0x56, 0xd4, 0xec, 0xbb, 0x45, 0xa4, 0x86, 0xdb, 0x2b, 0x95, 0x9f, 0x34, 0x3c, 0x87, 0xa1, 0xbb, 0x49, 0x73, 0xb7, 0xca, 0x48, 0x95, 0x22, 0x7e, 0xa2, 0x6e,
0xa4, 0x7c, 0x9d, 0x88, 0xb7, 0x59, 0xb1, 0x03, 0xa9, 0xa1, 0xa9, 0x4c, 0xd4, 0xd2, 0xd0, 0x76, 0xc0, 0xde, 0x81, 0xb6, 0xf1, 0x5a, 0x81, 0x29, 0x0e, 0xd5, 0x97, 0x0e, 0xfd, 0x7e, 0x5d, 0x95,
0x25, 0xa9, 0xa5, 0xa1, 0x9d, 0x6a, 0xd2, 0xb2, 0x86, 0xce, 0x43, 0xa4, 0x11, 0xc1, 0x6a, 0x29, 0xec, 0xee, 0x57, 0x60, 0xd9, 0x7a, 0x76, 0xa0, 0x35, 0xa3, 0xee, 0x51, 0x83, 0xd6, 0x8c, 0xfa,
0xe9, 0x6c, 0x84, 0xa5, 0xbe, 0x64, 0xa5, 0x77, 0xf9, 0xc5, 0xb9, 0x6a, 0x57, 0xcd, 0x68, 0xf5, 0x97, 0x0a, 0xdf, 0x84, 0xb6, 0xf1, 0x48, 0x80, 0x19, 0x37, 0x7f, 0x4a, 0xcf, 0x03, 0x74, 0x8f,
0xb2, 0xa3, 0x2b, 0x8c, 0x7e, 0x03, 0x3a, 0x76, 0xd5, 0xb1, 0xd1, 0xd9, 0x35, 0xb5, 0xd2, 0x46, 0xea, 0xde, 0x14, 0x6c, 0xd0, 0x78, 0xbb, 0x6e, 0x0b, 0xc7, 0x4b, 0xd7, 0x40, 0x51, 0x48, 0xbe,
0x67, 0xd7, 0x95, 0x29, 0xeb, 0xcb, 0x65, 0x1d, 0x7b, 0x1a, 0xf6, 0x4d, 0x58, 0xb5, 0xca, 0x1b, 0x0d, 0x5d, 0xfb, 0xd9, 0x80, 0xd6, 0xaa, 0xda, 0x07, 0x08, 0x5a, 0xab, 0x4e, 0x79, 0x6b, 0x20,
0x0e, 0x66, 0xd1, 0xc0, 0x30, 0x4f, 0xb5, 0x20, 0xad, 0x57, 0x67, 0x9f, 0xf1, 0x0b, 0x44, 0x78, 0x05, 0x72, 0x6b, 0x5d, 0x37, 0xb2, 0xfd, 0xa9, 0x3c, 0x5a, 0x79, 0xc6, 0xbe, 0x8e, 0xa6, 0x43,
0x9d, 0x3b, 0x84, 0x91, 0x71, 0xee, 0x40, 0xdb, 0x2e, 0x9d, 0x78, 0x01, 0xdd, 0x0b, 0x56, 0x97, 0xde, 0xcb, 0x65, 0xc5, 0x63, 0x09, 0xfb, 0xf6, 0xae, 0x96, 0xf6, 0xca, 0x15, 0x5e, 0x77, 0x8d,
0x5d, 0x9b, 0x75, 0xc3, 0x63, 0x7f, 0xe2, 0x41, 0xc7, 0x2e, 0x75, 0x64, 0x4e, 0x50, 0xb1, 0x44, 0x98, 0xb7, 0x59, 0x31, 0x02, 0x61, 0xa1, 0xe9, 0x7e, 0xae, 0x61, 0xa1, 0xcd, 0x2b, 0xbc, 0x86,
0xa7, 0x6b, 0xf7, 0xd9, 0x84, 0xb8, 0x4f, 0x8b, 0x7c, 0xb8, 0xfd, 0x15, 0xe7, 0x90, 0x3f, 0x75, 0x85, 0xb6, 0xae, 0xf1, 0x96, 0x2d, 0x74, 0x1e, 0x20, 0x8f, 0x08, 0x56, 0x4a, 0xa7, 0xfd, 0x5a,
0xec, 0xfc, 0xeb, 0xe5, 0x0f, 0xca, 0x9e, 0x97, 0x11, 0xec, 0xa2, 0xbd, 0xe7, 0x37, 0x3c, 0xf6, 0x59, 0xea, 0xef, 0x0a, 0xf5, 0x2f, 0x3d, 0xff, 0x92, 0x80, 0x6d, 0x66, 0x94, 0x79, 0xd9, 0x56,
0x9e, 0xfc, 0xe8, 0x50, 0xfb, 0xe8, 0xcc, 0x52, 0x6e, 0xe5, 0x23, 0xb3, 0xbf, 0xcf, 0xbb, 0xe6, 0x57, 0xbb, 0x7e, 0x03, 0x3a, 0xe6, 0x75, 0x6f, 0x6d, 0xb3, 0x6b, 0x2e, 0xa9, 0x6b, 0x9b, 0x5d,
0xdd, 0xf0, 0xd8, 0xb7, 0xe4, 0x77, 0x63, 0x6a, 0x2c, 0x9d, 0xfc, 0xab, 0x8e, 0xe7, 0x6f, 0xd2, 0x77, 0x3f, 0x5c, 0x2d, 0x2e, 0xeb, 0x98, 0xcd, 0xb0, 0x6f, 0xc2, 0x8a, 0x71, 0xaf, 0x64, 0x7f,
0x6e, 0x2e, 0xf3, 0x8b, 0xce, 0x6e, 0xca, 0xda, 0x7d, 0x1f, 0xa0, 0x08, 0xb8, 0xb0, 0x52, 0xf4, 0x16, 0x0d, 0xb5, 0xf0, 0x54, 0x6f, 0x02, 0xf6, 0xeb, 0xfc, 0x33, 0xf7, 0x1c, 0x31, 0x5e, 0x73,
0xc1, 0xe8, 0xbd, 0x6a, 0x4c, 0xc6, 0xbd, 0x51, 0x1d, 0xa4, 0x40, 0x8a, 0x1f, 0x49, 0x66, 0x54, 0x2d, 0xc6, 0x28, 0x38, 0xb7, 0xa1, 0x6d, 0xde, 0x59, 0x79, 0x0e, 0xdf, 0x73, 0x46, 0x95, 0x79,
0xf8, 0x99, 0xb9, 0xd2, 0x6a, 0xe0, 0xa4, 0xd7, 0xab, 0xeb, 0xaa, 0x63, 0x45, 0x4d, 0x9f, 0x3d, 0x29, 0xee, 0xba, 0xc3, 0xfe, 0xc4, 0x81, 0x8e, 0x79, 0xc7, 0x94, 0x59, 0xd9, 0xdc, 0x12, 0x9f,
0x81, 0xe5, 0x87, 0x71, 0xfc, 0x74, 0x9a, 0x98, 0x20, 0x9e, 0xeb, 0xff, 0xef, 0x05, 0xd9, 0x71, 0x9e, 0x59, 0x67, 0x32, 0x72, 0x3d, 0xea, 0xe4, 0x83, 0xad, 0xaf, 0x58, 0x93, 0xfc, 0xa9, 0xe5,
0xaf, 0xb4, 0x0b, 0x7e, 0x85, 0x48, 0xf5, 0x58, 0xd7, 0x22, 0xb5, 0xf3, 0x69, 0x11, 0xee, 0x79, 0xe7, 0x5f, 0x2b, 0xbf, 0xe4, 0x7b, 0x56, 0x26, 0x30, 0x6f, 0x4b, 0x3e, 0xbb, 0xee, 0xb0, 0x77,
0xce, 0x02, 0x58, 0x37, 0x6f, 0x9c, 0x59, 0x78, 0xcf, 0x25, 0x63, 0x47, 0x5d, 0x2a, 0x53, 0x38, 0xc5, 0x6b, 0x4f, 0x15, 0xd7, 0x33, 0xc3, 0xb8, 0x95, 0xa7, 0xcc, 0x7c, 0x18, 0x79, 0xd5, 0xb9,
0x56, 0x87, 0x5e, 0xed, 0x4e, 0xa6, 0x69, 0xde, 0xf0, 0xd8, 0x3e, 0x74, 0xee, 0x8a, 0x41, 0x3c, 0xee, 0xb0, 0x6f, 0x89, 0x07, 0x7b, 0xf2, 0x5b, 0x9a, 0xf9, 0x97, 0xfd, 0xde, 0x7d, 0x9d, 0x46,
0x14, 0xca, 0x63, 0xdf, 0x28, 0x16, 0x6e, 0x5c, 0xfd, 0xde, 0xb2, 0x03, 0x74, 0xa5, 0x3e, 0x09, 0x73, 0xc9, 0x3d, 0x6f, 0x8d, 0xa6, 0x6c, 0xdd, 0xf7, 0x00, 0x8a, 0x24, 0x0d, 0x2b, 0x65, 0x2c,
0x66, 0xa9, 0xf8, 0x78, 0xe7, 0x53, 0x15, 0x0b, 0x78, 0xae, 0xa5, 0x5e, 0xc7, 0x2f, 0x1c, 0xa9, 0xb4, 0xdd, 0xab, 0xe6, 0x71, 0xec, 0x15, 0x55, 0x89, 0x0d, 0xe4, 0xf8, 0x91, 0x10, 0x46, 0x49,
0x2f, 0x05, 0x3c, 0x1c, 0xa9, 0xaf, 0x04, 0x3c, 0x9c, 0xa3, 0xd6, 0xf1, 0x13, 0x36, 0x86, 0xf5, 0x9f, 0xe9, 0x25, 0xad, 0x26, 0x5b, 0xfa, 0xfd, 0xba, 0xaa, 0x3a, 0x51, 0x54, 0xfc, 0xd9, 0x63,
0x4a, 0x8c, 0xc4, 0xbc, 0x94, 0x67, 0x45, 0x56, 0x7a, 0x57, 0xce, 0x46, 0x70, 0x67, 0xdb, 0x76, 0x58, 0x7e, 0x10, 0xc7, 0x4f, 0xa6, 0x89, 0x4e, 0x16, 0xda, 0x39, 0x83, 0x5d, 0x3f, 0x3b, 0xea,
0x67, 0x3b, 0x80, 0xe5, 0xbb, 0x42, 0x1e, 0x96, 0x4c, 0x8c, 0xf5, 0x5c, 0x35, 0x62, 0x27, 0xd1, 0x97, 0x46, 0xe1, 0x5e, 0x26, 0x56, 0x7d, 0xd6, 0x33, 0x58, 0x6d, 0x7f, 0x5a, 0xa4, 0x88, 0x9e,
0xca, 0x2a, 0x86, 0xfa, 0x5c, 0xb5, 0x4e, 0x59, 0x29, 0xf6, 0x11, 0xb4, 0x1f, 0x88, 0x5c, 0x67, 0x31, 0x1f, 0xd6, 0xf4, 0x1e, 0xa7, 0x3b, 0xde, 0xb7, 0xd9, 0x98, 0x99, 0x9a, 0x4a, 0x13, 0x96,
0xc2, 0x8c, 0xbd, 0x51, 0x4a, 0x8d, 0xf5, 0x6a, 0x12, 0x69, 0x2e, 0xcf, 0x10, 0xb5, 0x1d, 0x31, 0xd7, 0xa1, 0x7a, 0xbb, 0x9d, 0x29, 0x9e, 0xd7, 0x1d, 0xb6, 0x07, 0x9d, 0x3b, 0x7c, 0x18, 0x8f,
0x1c, 0x09, 0x29, 0xec, 0xfd, 0x70, 0xf8, 0x9c, 0xfd, 0x2a, 0x11, 0x37, 0xc9, 0xf3, 0x2d, 0x2b, 0xb8, 0x8c, 0xf2, 0xd7, 0x8b, 0x8e, 0xeb, 0xf4, 0x40, 0x7f, 0xd9, 0x02, 0x6d, 0xad, 0x4f, 0xfc,
0x81, 0x62, 0x13, 0x5f, 0x2d, 0xc1, 0xeb, 0x28, 0x47, 0xf1, 0x50, 0x58, 0x0f, 0x5c, 0x04, 0x6d, 0x59, 0xca, 0x3f, 0xde, 0xfe, 0x54, 0xe6, 0x0f, 0x9e, 0x29, 0xad, 0x57, 0x39, 0x0f, 0x4b, 0xeb,
0xab, 0xb2, 0xc3, 0x08, 0x50, 0xb5, 0x9a, 0xc4, 0x08, 0x50, 0x4d, 0x21, 0x08, 0xbf, 0x46, 0xf3, 0x4b, 0x49, 0x12, 0x4b, 0xeb, 0x2b, 0x49, 0x12, 0x6b, 0xaa, 0x55, 0xce, 0x85, 0x85, 0xb0, 0x56,
0x70, 0x76, 0xa5, 0x98, 0x47, 0x16, 0x7f, 0x14, 0x33, 0xed, 0x7c, 0x1a, 0x4c, 0xf2, 0xe7, 0xec, 0xc9, 0xab, 0xe8, 0x9d, 0xf2, 0xb4, 0x6c, 0x4c, 0xff, 0xf2, 0xe9, 0x04, 0x76, 0x6b, 0x5b, 0x76,
0x43, 0xfa, 0x6e, 0xc2, 0xce, 0xf6, 0x15, 0xf6, 0x4e, 0x39, 0x31, 0x68, 0x0e, 0xcb, 0xea, 0x72, 0x6b, 0xfb, 0xb0, 0x7c, 0x87, 0x8b, 0xc9, 0x12, 0x27, 0x92, 0x7d, 0xdb, 0x8c, 0x98, 0xa7, 0x97,
0x6d, 0x20, 0x39, 0x15, 0xbd, 0x83, 0x5f, 0x04, 0x38, 0xc8, 0xe3, 0xe4, 0x6e, 0x20, 0x26, 0x71, 0x65, 0x13, 0x43, 0x75, 0xb6, 0x59, 0xa7, 0xe3, 0x40, 0xf6, 0x11, 0xb4, 0xef, 0xf3, 0x5c, 0x1d,
0x54, 0x68, 0xae, 0x22, 0xa3, 0x55, 0x68, 0x2e, 0x2b, 0xad, 0xc5, 0x3e, 0xb4, 0x2c, 0x4e, 0x27, 0x41, 0x6a, 0x7f, 0xa3, 0x74, 0x26, 0xd9, 0xaf, 0x39, 0xc1, 0xb4, 0x65, 0x86, 0xb8, 0x6d, 0xf3,
0x59, 0xaa, 0x99, 0xeb, 0xcc, 0xa4, 0x97, 0x39, 0x90, 0x9a, 0xc4, 0xd7, 0x0d, 0x0f, 0xed, 0xc7, 0xd1, 0x98, 0x0b, 0x65, 0x1f, 0x04, 0xa3, 0x67, 0xec, 0x57, 0x89, 0xb9, 0xbe, 0xb5, 0xb0, 0x69,
0x22, 0x22, 0x67, 0xec, 0xc7, 0x4a, 0xb0, 0xcf, 0xa8, 0xbd, 0x9a, 0xf0, 0xdd, 0x3e, 0xb4, 0x8a, 0x9c, 0x5c, 0x99, 0xcc, 0x57, 0x4a, 0x78, 0x1d, 0xe7, 0x28, 0x1e, 0x71, 0x63, 0x83, 0x8b, 0xa0,
0xb0, 0x90, 0x7e, 0x92, 0xca, 0x41, 0x24, 0xf3, 0xc6, 0x54, 0x82, 0x35, 0x7c, 0x8d, 0x8e, 0x0a, 0x6d, 0x5c, 0xa9, 0xd1, 0x0a, 0x54, 0xbd, 0xc6, 0xa3, 0x15, 0xa8, 0xe6, 0x06, 0x8e, 0x7b, 0x95,
0xd8, 0x12, 0x1e, 0x15, 0x45, 0x60, 0x42, 0xd8, 0x90, 0x0b, 0x34, 0x0f, 0x26, 0xe5, 0x68, 0xf4, 0xda, 0x71, 0xd9, 0xe5, 0xa2, 0x1d, 0x71, 0xeb, 0xa6, 0x68, 0x69, 0xfb, 0x53, 0x7f, 0x92, 0x3f,
0x4e, 0x6a, 0x02, 0x26, 0x46, 0x9a, 0x6b, 0xe3, 0x0d, 0x8e, 0x6f, 0x87, 0xdc, 0x2a, 0xf3, 0x43, 0x63, 0x1f, 0xd2, 0x83, 0x15, 0xf3, 0x98, 0xb5, 0xf0, 0x77, 0xca, 0x27, 0xb2, 0x7a, 0xb2, 0x8c,
0xa8, 0x9a, 0x27, 0xb0, 0x5e, 0x71, 0x96, 0x8d, 0x48, 0x9f, 0x15, 0xa3, 0x30, 0x22, 0x7d, 0xa6, 0x2a, 0xdb, 0x07, 0x12, 0x4d, 0xd1, 0x3e, 0xf8, 0x45, 0x80, 0xfd, 0x3c, 0x4e, 0xee, 0xf8, 0x7c,
0x9f, 0xcd, 0xcf, 0xd3, 0x94, 0xab, 0x1c, 0x70, 0xca, 0xec, 0x34, 0xcc, 0x07, 0xc7, 0xef, 0x79, 0x12, 0x47, 0x85, 0xe5, 0x2a, 0x8e, 0x12, 0x0b, 0xcb, 0x65, 0x9c, 0x27, 0xb2, 0x0f, 0x0d, 0x8f,
0xdb, 0x87, 0x0b, 0xf4, 0xb7, 0x16, 0x9f, 0xff, 0xef, 0x00, 0x00, 0x00, 0xff, 0xff, 0xbc, 0xb9, 0xd3, 0x3a, 0xa5, 0x56, 0xc2, 0x75, 0xea, 0x69, 0xa3, 0x9e, 0x90, 0x9a, 0x13, 0xc7, 0xeb, 0x0e,
0x7b, 0x12, 0x08, 0x43, 0x00, 0x00, 0xfa, 0x8f, 0x45, 0x16, 0x4f, 0xfb, 0x8f, 0x95, 0x04, 0xa1, 0x36, 0x7b, 0x35, 0x29, 0xbf, 0x3d,
0x68, 0x15, 0x69, 0x21, 0xb5, 0x25, 0x95, 0x93, 0x48, 0x7a, 0x8f, 0xa9, 0x24, 0x6b, 0xdc, 0x55,
0x9a, 0x2a, 0x60, 0x4b, 0x38, 0x55, 0x94, 0x81, 0x09, 0x60, 0x5d, 0x74, 0x50, 0x6f, 0x98, 0x74,
0x38, 0xa6, 0x46, 0x52, 0x93, 0x30, 0xd1, 0xda, 0x5c, 0x9b, 0x6f, 0xb0, 0x62, 0x3b, 0x94, 0x56,
0x71, 0x30, 0x87, 0xa6, 0x79, 0x02, 0x6b, 0x95, 0x60, 0x59, 0xab, 0xf4, 0x69, 0x39, 0x0a, 0xad,
0xd2, 0xa7, 0xc6, 0xd9, 0xee, 0x59, 0x6a, 0x72, 0xc5, 0x05, 0x6c, 0x32, 0x3b, 0x09, 0xf2, 0xe1,
0xd1, 0xbb, 0xce, 0xd6, 0xc1, 0x02, 0xfd, 0x9f, 0xc8, 0xe7, 0xff, 0x37, 0x00, 0x00, 0xff, 0xff,
0xbe, 0xb8, 0xff, 0xb8, 0x81, 0x44, 0x00, 0x00,
} }

@ -592,18 +592,10 @@ func RegisterWalletUnlockerHandlerFromEndpoint(ctx context.Context, mux *runtime
// RegisterWalletUnlockerHandler registers the http handlers for service WalletUnlocker to "mux". // RegisterWalletUnlockerHandler registers the http handlers for service WalletUnlocker to "mux".
// The handlers forward requests to the grpc endpoint over "conn". // The handlers forward requests to the grpc endpoint over "conn".
func RegisterWalletUnlockerHandler(ctx context.Context, mux *runtime.ServeMux, conn *grpc.ClientConn) error { func RegisterWalletUnlockerHandler(ctx context.Context, mux *runtime.ServeMux, conn *grpc.ClientConn) error {
return RegisterWalletUnlockerHandlerClient(ctx, mux, NewWalletUnlockerClient(conn)) client := NewWalletUnlockerClient(conn)
}
// RegisterWalletUnlockerHandler registers the http handlers for service WalletUnlocker to "mux".
// The handlers forward requests to the grpc endpoint over the given implementation of "WalletUnlockerClient".
// Note: the gRPC framework executes interceptors within the gRPC handler. If the passed in "WalletUnlockerClient"
// doesn't go through the normal gRPC flow (creating a gRPC client etc.) then it will be up to the passed in
// "WalletUnlockerClient" to call the correct interceptors.
func RegisterWalletUnlockerHandlerClient(ctx context.Context, mux *runtime.ServeMux, client WalletUnlockerClient) error {
mux.Handle("GET", pattern_WalletUnlocker_GenSeed_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { mux.Handle("GET", pattern_WalletUnlocker_GenSeed_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {
ctx, cancel := context.WithCancel(req.Context()) ctx, cancel := context.WithCancel(ctx)
defer cancel() defer cancel()
if cn, ok := w.(http.CloseNotifier); ok { if cn, ok := w.(http.CloseNotifier); ok {
go func(done <-chan struct{}, closed <-chan bool) { go func(done <-chan struct{}, closed <-chan bool) {
@ -632,7 +624,7 @@ func RegisterWalletUnlockerHandlerClient(ctx context.Context, mux *runtime.Serve
}) })
mux.Handle("POST", pattern_WalletUnlocker_InitWallet_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { mux.Handle("POST", pattern_WalletUnlocker_InitWallet_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {
ctx, cancel := context.WithCancel(req.Context()) ctx, cancel := context.WithCancel(ctx)
defer cancel() defer cancel()
if cn, ok := w.(http.CloseNotifier); ok { if cn, ok := w.(http.CloseNotifier); ok {
go func(done <-chan struct{}, closed <-chan bool) { go func(done <-chan struct{}, closed <-chan bool) {
@ -661,7 +653,7 @@ func RegisterWalletUnlockerHandlerClient(ctx context.Context, mux *runtime.Serve
}) })
mux.Handle("POST", pattern_WalletUnlocker_UnlockWallet_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { mux.Handle("POST", pattern_WalletUnlocker_UnlockWallet_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {
ctx, cancel := context.WithCancel(req.Context()) ctx, cancel := context.WithCancel(ctx)
defer cancel() defer cancel()
if cn, ok := w.(http.CloseNotifier); ok { if cn, ok := w.(http.CloseNotifier); ok {
go func(done <-chan struct{}, closed <-chan bool) { go func(done <-chan struct{}, closed <-chan bool) {
@ -736,18 +728,10 @@ func RegisterLightningHandlerFromEndpoint(ctx context.Context, mux *runtime.Serv
// RegisterLightningHandler registers the http handlers for service Lightning to "mux". // RegisterLightningHandler registers the http handlers for service Lightning to "mux".
// The handlers forward requests to the grpc endpoint over "conn". // The handlers forward requests to the grpc endpoint over "conn".
func RegisterLightningHandler(ctx context.Context, mux *runtime.ServeMux, conn *grpc.ClientConn) error { func RegisterLightningHandler(ctx context.Context, mux *runtime.ServeMux, conn *grpc.ClientConn) error {
return RegisterLightningHandlerClient(ctx, mux, NewLightningClient(conn)) client := NewLightningClient(conn)
}
// RegisterLightningHandler registers the http handlers for service Lightning to "mux".
// The handlers forward requests to the grpc endpoint over the given implementation of "LightningClient".
// Note: the gRPC framework executes interceptors within the gRPC handler. If the passed in "LightningClient"
// doesn't go through the normal gRPC flow (creating a gRPC client etc.) then it will be up to the passed in
// "LightningClient" to call the correct interceptors.
func RegisterLightningHandlerClient(ctx context.Context, mux *runtime.ServeMux, client LightningClient) error {
mux.Handle("GET", pattern_Lightning_WalletBalance_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { mux.Handle("GET", pattern_Lightning_WalletBalance_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {
ctx, cancel := context.WithCancel(req.Context()) ctx, cancel := context.WithCancel(ctx)
defer cancel() defer cancel()
if cn, ok := w.(http.CloseNotifier); ok { if cn, ok := w.(http.CloseNotifier); ok {
go func(done <-chan struct{}, closed <-chan bool) { go func(done <-chan struct{}, closed <-chan bool) {
@ -776,7 +760,7 @@ func RegisterLightningHandlerClient(ctx context.Context, mux *runtime.ServeMux,
}) })
mux.Handle("GET", pattern_Lightning_ChannelBalance_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { mux.Handle("GET", pattern_Lightning_ChannelBalance_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {
ctx, cancel := context.WithCancel(req.Context()) ctx, cancel := context.WithCancel(ctx)
defer cancel() defer cancel()
if cn, ok := w.(http.CloseNotifier); ok { if cn, ok := w.(http.CloseNotifier); ok {
go func(done <-chan struct{}, closed <-chan bool) { go func(done <-chan struct{}, closed <-chan bool) {
@ -805,7 +789,7 @@ func RegisterLightningHandlerClient(ctx context.Context, mux *runtime.ServeMux,
}) })
mux.Handle("GET", pattern_Lightning_GetTransactions_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { mux.Handle("GET", pattern_Lightning_GetTransactions_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {
ctx, cancel := context.WithCancel(req.Context()) ctx, cancel := context.WithCancel(ctx)
defer cancel() defer cancel()
if cn, ok := w.(http.CloseNotifier); ok { if cn, ok := w.(http.CloseNotifier); ok {
go func(done <-chan struct{}, closed <-chan bool) { go func(done <-chan struct{}, closed <-chan bool) {
@ -834,7 +818,7 @@ func RegisterLightningHandlerClient(ctx context.Context, mux *runtime.ServeMux,
}) })
mux.Handle("POST", pattern_Lightning_SendCoins_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { mux.Handle("POST", pattern_Lightning_SendCoins_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {
ctx, cancel := context.WithCancel(req.Context()) ctx, cancel := context.WithCancel(ctx)
defer cancel() defer cancel()
if cn, ok := w.(http.CloseNotifier); ok { if cn, ok := w.(http.CloseNotifier); ok {
go func(done <-chan struct{}, closed <-chan bool) { go func(done <-chan struct{}, closed <-chan bool) {
@ -863,7 +847,7 @@ func RegisterLightningHandlerClient(ctx context.Context, mux *runtime.ServeMux,
}) })
mux.Handle("GET", pattern_Lightning_NewWitnessAddress_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { mux.Handle("GET", pattern_Lightning_NewWitnessAddress_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {
ctx, cancel := context.WithCancel(req.Context()) ctx, cancel := context.WithCancel(ctx)
defer cancel() defer cancel()
if cn, ok := w.(http.CloseNotifier); ok { if cn, ok := w.(http.CloseNotifier); ok {
go func(done <-chan struct{}, closed <-chan bool) { go func(done <-chan struct{}, closed <-chan bool) {
@ -892,7 +876,7 @@ func RegisterLightningHandlerClient(ctx context.Context, mux *runtime.ServeMux,
}) })
mux.Handle("POST", pattern_Lightning_ConnectPeer_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { mux.Handle("POST", pattern_Lightning_ConnectPeer_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {
ctx, cancel := context.WithCancel(req.Context()) ctx, cancel := context.WithCancel(ctx)
defer cancel() defer cancel()
if cn, ok := w.(http.CloseNotifier); ok { if cn, ok := w.(http.CloseNotifier); ok {
go func(done <-chan struct{}, closed <-chan bool) { go func(done <-chan struct{}, closed <-chan bool) {
@ -921,7 +905,7 @@ func RegisterLightningHandlerClient(ctx context.Context, mux *runtime.ServeMux,
}) })
mux.Handle("DELETE", pattern_Lightning_DisconnectPeer_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { mux.Handle("DELETE", pattern_Lightning_DisconnectPeer_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {
ctx, cancel := context.WithCancel(req.Context()) ctx, cancel := context.WithCancel(ctx)
defer cancel() defer cancel()
if cn, ok := w.(http.CloseNotifier); ok { if cn, ok := w.(http.CloseNotifier); ok {
go func(done <-chan struct{}, closed <-chan bool) { go func(done <-chan struct{}, closed <-chan bool) {
@ -950,7 +934,7 @@ func RegisterLightningHandlerClient(ctx context.Context, mux *runtime.ServeMux,
}) })
mux.Handle("GET", pattern_Lightning_ListPeers_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { mux.Handle("GET", pattern_Lightning_ListPeers_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {
ctx, cancel := context.WithCancel(req.Context()) ctx, cancel := context.WithCancel(ctx)
defer cancel() defer cancel()
if cn, ok := w.(http.CloseNotifier); ok { if cn, ok := w.(http.CloseNotifier); ok {
go func(done <-chan struct{}, closed <-chan bool) { go func(done <-chan struct{}, closed <-chan bool) {
@ -979,7 +963,7 @@ func RegisterLightningHandlerClient(ctx context.Context, mux *runtime.ServeMux,
}) })
mux.Handle("GET", pattern_Lightning_GetInfo_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { mux.Handle("GET", pattern_Lightning_GetInfo_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {
ctx, cancel := context.WithCancel(req.Context()) ctx, cancel := context.WithCancel(ctx)
defer cancel() defer cancel()
if cn, ok := w.(http.CloseNotifier); ok { if cn, ok := w.(http.CloseNotifier); ok {
go func(done <-chan struct{}, closed <-chan bool) { go func(done <-chan struct{}, closed <-chan bool) {
@ -1008,7 +992,7 @@ func RegisterLightningHandlerClient(ctx context.Context, mux *runtime.ServeMux,
}) })
mux.Handle("GET", pattern_Lightning_PendingChannels_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { mux.Handle("GET", pattern_Lightning_PendingChannels_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {
ctx, cancel := context.WithCancel(req.Context()) ctx, cancel := context.WithCancel(ctx)
defer cancel() defer cancel()
if cn, ok := w.(http.CloseNotifier); ok { if cn, ok := w.(http.CloseNotifier); ok {
go func(done <-chan struct{}, closed <-chan bool) { go func(done <-chan struct{}, closed <-chan bool) {
@ -1037,7 +1021,7 @@ func RegisterLightningHandlerClient(ctx context.Context, mux *runtime.ServeMux,
}) })
mux.Handle("GET", pattern_Lightning_ListChannels_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { mux.Handle("GET", pattern_Lightning_ListChannels_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {
ctx, cancel := context.WithCancel(req.Context()) ctx, cancel := context.WithCancel(ctx)
defer cancel() defer cancel()
if cn, ok := w.(http.CloseNotifier); ok { if cn, ok := w.(http.CloseNotifier); ok {
go func(done <-chan struct{}, closed <-chan bool) { go func(done <-chan struct{}, closed <-chan bool) {
@ -1066,7 +1050,7 @@ func RegisterLightningHandlerClient(ctx context.Context, mux *runtime.ServeMux,
}) })
mux.Handle("POST", pattern_Lightning_OpenChannelSync_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { mux.Handle("POST", pattern_Lightning_OpenChannelSync_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {
ctx, cancel := context.WithCancel(req.Context()) ctx, cancel := context.WithCancel(ctx)
defer cancel() defer cancel()
if cn, ok := w.(http.CloseNotifier); ok { if cn, ok := w.(http.CloseNotifier); ok {
go func(done <-chan struct{}, closed <-chan bool) { go func(done <-chan struct{}, closed <-chan bool) {
@ -1095,7 +1079,7 @@ func RegisterLightningHandlerClient(ctx context.Context, mux *runtime.ServeMux,
}) })
mux.Handle("DELETE", pattern_Lightning_CloseChannel_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { mux.Handle("DELETE", pattern_Lightning_CloseChannel_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {
ctx, cancel := context.WithCancel(req.Context()) ctx, cancel := context.WithCancel(ctx)
defer cancel() defer cancel()
if cn, ok := w.(http.CloseNotifier); ok { if cn, ok := w.(http.CloseNotifier); ok {
go func(done <-chan struct{}, closed <-chan bool) { go func(done <-chan struct{}, closed <-chan bool) {
@ -1124,7 +1108,7 @@ func RegisterLightningHandlerClient(ctx context.Context, mux *runtime.ServeMux,
}) })
mux.Handle("POST", pattern_Lightning_SendPaymentSync_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { mux.Handle("POST", pattern_Lightning_SendPaymentSync_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {
ctx, cancel := context.WithCancel(req.Context()) ctx, cancel := context.WithCancel(ctx)
defer cancel() defer cancel()
if cn, ok := w.(http.CloseNotifier); ok { if cn, ok := w.(http.CloseNotifier); ok {
go func(done <-chan struct{}, closed <-chan bool) { go func(done <-chan struct{}, closed <-chan bool) {
@ -1153,7 +1137,7 @@ func RegisterLightningHandlerClient(ctx context.Context, mux *runtime.ServeMux,
}) })
mux.Handle("POST", pattern_Lightning_AddInvoice_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { mux.Handle("POST", pattern_Lightning_AddInvoice_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {
ctx, cancel := context.WithCancel(req.Context()) ctx, cancel := context.WithCancel(ctx)
defer cancel() defer cancel()
if cn, ok := w.(http.CloseNotifier); ok { if cn, ok := w.(http.CloseNotifier); ok {
go func(done <-chan struct{}, closed <-chan bool) { go func(done <-chan struct{}, closed <-chan bool) {
@ -1182,7 +1166,7 @@ func RegisterLightningHandlerClient(ctx context.Context, mux *runtime.ServeMux,
}) })
mux.Handle("GET", pattern_Lightning_ListInvoices_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { mux.Handle("GET", pattern_Lightning_ListInvoices_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {
ctx, cancel := context.WithCancel(req.Context()) ctx, cancel := context.WithCancel(ctx)
defer cancel() defer cancel()
if cn, ok := w.(http.CloseNotifier); ok { if cn, ok := w.(http.CloseNotifier); ok {
go func(done <-chan struct{}, closed <-chan bool) { go func(done <-chan struct{}, closed <-chan bool) {
@ -1211,7 +1195,7 @@ func RegisterLightningHandlerClient(ctx context.Context, mux *runtime.ServeMux,
}) })
mux.Handle("GET", pattern_Lightning_LookupInvoice_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { mux.Handle("GET", pattern_Lightning_LookupInvoice_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {
ctx, cancel := context.WithCancel(req.Context()) ctx, cancel := context.WithCancel(ctx)
defer cancel() defer cancel()
if cn, ok := w.(http.CloseNotifier); ok { if cn, ok := w.(http.CloseNotifier); ok {
go func(done <-chan struct{}, closed <-chan bool) { go func(done <-chan struct{}, closed <-chan bool) {
@ -1240,7 +1224,7 @@ func RegisterLightningHandlerClient(ctx context.Context, mux *runtime.ServeMux,
}) })
mux.Handle("GET", pattern_Lightning_SubscribeInvoices_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { mux.Handle("GET", pattern_Lightning_SubscribeInvoices_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {
ctx, cancel := context.WithCancel(req.Context()) ctx, cancel := context.WithCancel(ctx)
defer cancel() defer cancel()
if cn, ok := w.(http.CloseNotifier); ok { if cn, ok := w.(http.CloseNotifier); ok {
go func(done <-chan struct{}, closed <-chan bool) { go func(done <-chan struct{}, closed <-chan bool) {
@ -1269,7 +1253,7 @@ func RegisterLightningHandlerClient(ctx context.Context, mux *runtime.ServeMux,
}) })
mux.Handle("GET", pattern_Lightning_DecodePayReq_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { mux.Handle("GET", pattern_Lightning_DecodePayReq_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {
ctx, cancel := context.WithCancel(req.Context()) ctx, cancel := context.WithCancel(ctx)
defer cancel() defer cancel()
if cn, ok := w.(http.CloseNotifier); ok { if cn, ok := w.(http.CloseNotifier); ok {
go func(done <-chan struct{}, closed <-chan bool) { go func(done <-chan struct{}, closed <-chan bool) {
@ -1298,7 +1282,7 @@ func RegisterLightningHandlerClient(ctx context.Context, mux *runtime.ServeMux,
}) })
mux.Handle("GET", pattern_Lightning_ListPayments_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { mux.Handle("GET", pattern_Lightning_ListPayments_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {
ctx, cancel := context.WithCancel(req.Context()) ctx, cancel := context.WithCancel(ctx)
defer cancel() defer cancel()
if cn, ok := w.(http.CloseNotifier); ok { if cn, ok := w.(http.CloseNotifier); ok {
go func(done <-chan struct{}, closed <-chan bool) { go func(done <-chan struct{}, closed <-chan bool) {
@ -1327,7 +1311,7 @@ func RegisterLightningHandlerClient(ctx context.Context, mux *runtime.ServeMux,
}) })
mux.Handle("DELETE", pattern_Lightning_DeleteAllPayments_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { mux.Handle("DELETE", pattern_Lightning_DeleteAllPayments_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {
ctx, cancel := context.WithCancel(req.Context()) ctx, cancel := context.WithCancel(ctx)
defer cancel() defer cancel()
if cn, ok := w.(http.CloseNotifier); ok { if cn, ok := w.(http.CloseNotifier); ok {
go func(done <-chan struct{}, closed <-chan bool) { go func(done <-chan struct{}, closed <-chan bool) {
@ -1356,7 +1340,7 @@ func RegisterLightningHandlerClient(ctx context.Context, mux *runtime.ServeMux,
}) })
mux.Handle("GET", pattern_Lightning_DescribeGraph_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { mux.Handle("GET", pattern_Lightning_DescribeGraph_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {
ctx, cancel := context.WithCancel(req.Context()) ctx, cancel := context.WithCancel(ctx)
defer cancel() defer cancel()
if cn, ok := w.(http.CloseNotifier); ok { if cn, ok := w.(http.CloseNotifier); ok {
go func(done <-chan struct{}, closed <-chan bool) { go func(done <-chan struct{}, closed <-chan bool) {
@ -1385,7 +1369,7 @@ func RegisterLightningHandlerClient(ctx context.Context, mux *runtime.ServeMux,
}) })
mux.Handle("GET", pattern_Lightning_GetChanInfo_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { mux.Handle("GET", pattern_Lightning_GetChanInfo_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {
ctx, cancel := context.WithCancel(req.Context()) ctx, cancel := context.WithCancel(ctx)
defer cancel() defer cancel()
if cn, ok := w.(http.CloseNotifier); ok { if cn, ok := w.(http.CloseNotifier); ok {
go func(done <-chan struct{}, closed <-chan bool) { go func(done <-chan struct{}, closed <-chan bool) {
@ -1414,7 +1398,7 @@ func RegisterLightningHandlerClient(ctx context.Context, mux *runtime.ServeMux,
}) })
mux.Handle("GET", pattern_Lightning_GetNodeInfo_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { mux.Handle("GET", pattern_Lightning_GetNodeInfo_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {
ctx, cancel := context.WithCancel(req.Context()) ctx, cancel := context.WithCancel(ctx)
defer cancel() defer cancel()
if cn, ok := w.(http.CloseNotifier); ok { if cn, ok := w.(http.CloseNotifier); ok {
go func(done <-chan struct{}, closed <-chan bool) { go func(done <-chan struct{}, closed <-chan bool) {
@ -1443,7 +1427,7 @@ func RegisterLightningHandlerClient(ctx context.Context, mux *runtime.ServeMux,
}) })
mux.Handle("GET", pattern_Lightning_QueryRoutes_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { mux.Handle("GET", pattern_Lightning_QueryRoutes_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {
ctx, cancel := context.WithCancel(req.Context()) ctx, cancel := context.WithCancel(ctx)
defer cancel() defer cancel()
if cn, ok := w.(http.CloseNotifier); ok { if cn, ok := w.(http.CloseNotifier); ok {
go func(done <-chan struct{}, closed <-chan bool) { go func(done <-chan struct{}, closed <-chan bool) {
@ -1472,7 +1456,7 @@ func RegisterLightningHandlerClient(ctx context.Context, mux *runtime.ServeMux,
}) })
mux.Handle("GET", pattern_Lightning_GetNetworkInfo_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { mux.Handle("GET", pattern_Lightning_GetNetworkInfo_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {
ctx, cancel := context.WithCancel(req.Context()) ctx, cancel := context.WithCancel(ctx)
defer cancel() defer cancel()
if cn, ok := w.(http.CloseNotifier); ok { if cn, ok := w.(http.CloseNotifier); ok {
go func(done <-chan struct{}, closed <-chan bool) { go func(done <-chan struct{}, closed <-chan bool) {
@ -1501,7 +1485,7 @@ func RegisterLightningHandlerClient(ctx context.Context, mux *runtime.ServeMux,
}) })
mux.Handle("GET", pattern_Lightning_FeeReport_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { mux.Handle("GET", pattern_Lightning_FeeReport_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {
ctx, cancel := context.WithCancel(req.Context()) ctx, cancel := context.WithCancel(ctx)
defer cancel() defer cancel()
if cn, ok := w.(http.CloseNotifier); ok { if cn, ok := w.(http.CloseNotifier); ok {
go func(done <-chan struct{}, closed <-chan bool) { go func(done <-chan struct{}, closed <-chan bool) {
@ -1530,7 +1514,7 @@ func RegisterLightningHandlerClient(ctx context.Context, mux *runtime.ServeMux,
}) })
mux.Handle("POST", pattern_Lightning_UpdateChannelPolicy_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { mux.Handle("POST", pattern_Lightning_UpdateChannelPolicy_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {
ctx, cancel := context.WithCancel(req.Context()) ctx, cancel := context.WithCancel(ctx)
defer cancel() defer cancel()
if cn, ok := w.(http.CloseNotifier); ok { if cn, ok := w.(http.CloseNotifier); ok {
go func(done <-chan struct{}, closed <-chan bool) { go func(done <-chan struct{}, closed <-chan bool) {
@ -1559,7 +1543,7 @@ func RegisterLightningHandlerClient(ctx context.Context, mux *runtime.ServeMux,
}) })
mux.Handle("POST", pattern_Lightning_ForwardingHistory_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { mux.Handle("POST", pattern_Lightning_ForwardingHistory_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {
ctx, cancel := context.WithCancel(req.Context()) ctx, cancel := context.WithCancel(ctx)
defer cancel() defer cancel()
if cn, ok := w.(http.CloseNotifier); ok { if cn, ok := w.(http.CloseNotifier); ok {
go func(done <-chan struct{}, closed <-chan bool) { go func(done <-chan struct{}, closed <-chan bool) {

@ -1369,6 +1369,34 @@ message ClosedChannelUpdate {
ChannelPoint chan_point = 4; ChannelPoint chan_point = 4;
} }
message HopHint {
/// The public key of the node at the start of the channel.
string node_id = 1 [json_name = "node_id"];
/// The unique identifier of the channel.
uint64 chan_id = 2 [json_name = "chan_id"];
/// The base fee of the channel denominated in millisatoshis.
uint32 fee_base_msat = 3 [json_name = "fee_base_msat"];
/**
The fee rate of the channel for sending one satoshi across it denominated in
millionths of a satoshi.
*/
uint32 fee_proportional_millionths = 4 [json_name = "fee_proportional_millionths"];
/// The time-lock delta of the channel.
uint32 cltv_expiry_delta = 5 [json_name = "cltv_expiry_delta"];
}
message RouteHint {
/**
A list of hop hints that when chained together can assist in reaching a
specific destination.
*/
repeated HopHint hop_hints = 1 [json_name = "hop_hints"];
}
message Invoice { message Invoice {
/** /**
An optional memo to attach along with the invoice. Used for record keeping An optional memo to attach along with the invoice. Used for record keeping
@ -1424,6 +1452,12 @@ message Invoice {
/// Delta to use for the time-lock of the CLTV extended to the final hop. /// Delta to use for the time-lock of the CLTV extended to the final hop.
uint64 cltv_expiry = 13 [json_name = "cltv_expiry"]; uint64 cltv_expiry = 13 [json_name = "cltv_expiry"];
/**
Route hints that can each be individually used to assist in reaching the
invoice's destination.
*/
repeated RouteHint route_hints = 14 [json_name = "route_hints"];
} }
message AddInvoiceResponse { message AddInvoiceResponse {
bytes r_hash = 1 [json_name = "r_hash"]; bytes r_hash = 1 [json_name = "r_hash"];
@ -1513,6 +1547,7 @@ message PayReq {
string description_hash = 7 [json_name = "description_hash"]; string description_hash = 7 [json_name = "description_hash"];
string fallback_addr = 8 [json_name = "fallback_addr"]; string fallback_addr = 8 [json_name = "fallback_addr"];
int64 cltv_expiry = 9 [json_name = "cltv_expiry"]; int64 cltv_expiry = 9 [json_name = "cltv_expiry"];
repeated RouteHint route_hints = 10 [json_name = "route_hints"];
} }
message FeeReportRequest {} message FeeReportRequest {}

@ -789,14 +789,6 @@
} }
}, },
"definitions": { "definitions": {
"NewAddressRequestAddressType": {
"type": "string",
"enum": [
"WITNESS_PUBKEY_HASH",
"NESTED_PUBKEY_HASH"
],
"default": "WITNESS_PUBKEY_HASH"
},
"PendingChannelsResponseClosedChannel": { "PendingChannelsResponseClosedChannel": {
"type": "object", "type": "object",
"properties": { "properties": {
@ -1515,6 +1507,35 @@
} }
} }
}, },
"lnrpcHopHint": {
"type": "object",
"properties": {
"node_id": {
"type": "string",
"description": "/ The public key of the node at the start of the channel."
},
"chan_id": {
"type": "string",
"format": "uint64",
"description": "/ The unique identifier of the channel."
},
"fee_base_msat": {
"type": "integer",
"format": "int64",
"description": "/ The base fee of the channel denominated in millisatoshis."
},
"fee_proportional_millionths": {
"type": "integer",
"format": "int64",
"description": "*\nThe fee rate of the channel for sending one satoshi across it denominated in\nmillionths of a satoshi."
},
"cltv_expiry_delta": {
"type": "integer",
"format": "int64",
"description": "/ The time-lock delta of the channel."
}
}
},
"lnrpcInitWalletRequest": { "lnrpcInitWalletRequest": {
"type": "object", "type": "object",
"properties": { "properties": {
@ -1604,6 +1625,13 @@
"type": "string", "type": "string",
"format": "uint64", "format": "uint64",
"description": "/ Delta to use for the time-lock of the CLTV extended to the final hop." "description": "/ Delta to use for the time-lock of the CLTV extended to the final hop."
},
"route_hints": {
"type": "array",
"items": {
"$ref": "#/definitions/lnrpcRouteHint"
},
"description": "*\nRoute hints that can each be individually used to assist in reaching the\ninvoice's destination."
} }
} }
}, },
@ -1887,6 +1915,12 @@
"cltv_expiry": { "cltv_expiry": {
"type": "string", "type": "string",
"format": "int64" "format": "int64"
},
"route_hints": {
"type": "array",
"items": {
"$ref": "#/definitions/lnrpcRouteHint"
}
} }
} }
}, },
@ -2127,6 +2161,18 @@
}, },
"description": "*\nA path through the channel graph which runs over one or more channels in\nsuccession. This struct carries all the information required to craft the\nSphinx onion packet, and send the payment along the first hop in the path. A\nroute is only selected as valid if all the channels have sufficient capacity to\ncarry the initial payment amount after fees are accounted for." "description": "*\nA path through the channel graph which runs over one or more channels in\nsuccession. This struct carries all the information required to craft the\nSphinx onion packet, and send the payment along the first hop in the path. A\nroute is only selected as valid if all the channels have sufficient capacity to\ncarry the initial payment amount after fees are accounted for."
}, },
"lnrpcRouteHint": {
"type": "object",
"properties": {
"hop_hints": {
"type": "array",
"items": {
"$ref": "#/definitions/lnrpcHopHint"
},
"description": "*\nA list of hop hints that when chained together can assist in reaching a\nspecific destination."
}
}
},
"lnrpcRoutingPolicy": { "lnrpcRoutingPolicy": {
"type": "object", "type": "object",
"properties": { "properties": {