Merge pull request #3415 from joostjager/mpp

htlcswitch+invoices: allow settling invoices via multi-path payments
This commit is contained in:
Joost Jager 2019-12-11 19:30:15 +01:00 committed by GitHub
commit 62dadff291
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
14 changed files with 1381 additions and 612 deletions

@ -117,6 +117,7 @@ const (
resolveTimeType tlv.Type = 11
expiryHeightType tlv.Type = 13
htlcStateType tlv.Type = 15
mppTotalAmtType tlv.Type = 17
// A set of tlv type definitions used to serialize invoice bodiees.
//
@ -289,6 +290,10 @@ type InvoiceHTLC struct {
// Amt is the amount that is carried by this htlc.
Amt lnwire.MilliSatoshi
// MppTotalAmt is a field for mpp that indicates the expected total
// amount.
MppTotalAmt lnwire.MilliSatoshi
// AcceptHeight is the block height at which the invoice registry
// decided to accept this htlc as a payment to the invoice. At this
// height, the invoice cltv delay must have been met.
@ -323,6 +328,10 @@ type HtlcAcceptDesc struct {
// Amt is the amount that is carried by this htlc.
Amt lnwire.MilliSatoshi
// MppTotalAmt is a field for mpp that indicates the expected total
// amount.
MppTotalAmt lnwire.MilliSatoshi
// Expiry is the expiry height of this htlc.
Expiry uint32
@ -1018,6 +1027,7 @@ func serializeHtlcs(w io.Writer, htlcs map[CircuitKey]*InvoiceHTLC) error {
// Encode the htlc in a tlv stream.
chanID := key.ChanID.ToUint64()
amt := uint64(htlc.Amt)
mppTotalAmt := uint64(htlc.MppTotalAmt)
acceptTime := uint64(htlc.AcceptTime.UnixNano())
resolveTime := uint64(htlc.ResolveTime.UnixNano())
state := uint8(htlc.State)
@ -1034,6 +1044,7 @@ func serializeHtlcs(w io.Writer, htlcs map[CircuitKey]*InvoiceHTLC) error {
tlv.MakePrimitiveRecord(resolveTimeType, &resolveTime),
tlv.MakePrimitiveRecord(expiryHeightType, &htlc.Expiry),
tlv.MakePrimitiveRecord(htlcStateType, &state),
tlv.MakePrimitiveRecord(mppTotalAmtType, &mppTotalAmt),
)
// Convert the custom records to tlv.Record types that are ready
@ -1193,7 +1204,7 @@ func deserializeHtlcs(r io.Reader) (map[CircuitKey]*InvoiceHTLC, error) {
chanID uint64
state uint8
acceptTime, resolveTime uint64
amt uint64
amt, mppTotalAmt uint64
)
tlvStream, err := tlv.NewStream(
tlv.MakePrimitiveRecord(chanIDType, &chanID),
@ -1206,6 +1217,7 @@ func deserializeHtlcs(r io.Reader) (map[CircuitKey]*InvoiceHTLC, error) {
tlv.MakePrimitiveRecord(resolveTimeType, &resolveTime),
tlv.MakePrimitiveRecord(expiryHeightType, &htlc.Expiry),
tlv.MakePrimitiveRecord(htlcStateType, &state),
tlv.MakePrimitiveRecord(mppTotalAmtType, &mppTotalAmt),
)
if err != nil {
return nil, err
@ -1221,6 +1233,7 @@ func deserializeHtlcs(r io.Reader) (map[CircuitKey]*InvoiceHTLC, error) {
htlc.ResolveTime = time.Unix(0, int64(resolveTime))
htlc.State = HtlcState(state)
htlc.Amt = lnwire.MilliSatoshi(amt)
htlc.MppTotalAmt = lnwire.MilliSatoshi(mppTotalAmt)
// Reconstruct the custom records fields from the parsed types
// map return from the tlv parser.
@ -1324,6 +1337,7 @@ func (d *DB) updateInvoice(hash lntypes.Hash, invoices, settleIndex *bbolt.Bucke
htlc := &InvoiceHTLC{
Amt: htlcUpdate.Amt,
MppTotalAmt: htlcUpdate.MppTotalAmt,
Expiry: htlcUpdate.Expiry,
AcceptHeight: uint32(htlcUpdate.AcceptHeight),
AcceptTime: now,

@ -790,9 +790,12 @@ func newMockRegistry(minDelta uint32) *mockInvoiceRegistry {
panic(err)
}
finalCltvRejectDelta := int32(5)
registry := invoices.NewRegistry(cdb, finalCltvRejectDelta)
registry := invoices.NewRegistry(
cdb,
&invoices.RegistryConfig{
FinalCltvRejectDelta: 5,
},
)
registry.Start()
return &mockInvoiceRegistry{

77
invoices/clock_test.go Normal file

@ -0,0 +1,77 @@
package invoices
import (
"sync"
"time"
)
// testClock can be used in tests to mock time.
type testClock struct {
currentTime time.Time
timeChanMap map[time.Time][]chan time.Time
timeLock sync.Mutex
}
// newTestClock returns a new test clock.
func newTestClock(startTime time.Time) *testClock {
return &testClock{
currentTime: startTime,
timeChanMap: make(map[time.Time][]chan time.Time),
}
}
// now returns the current (test) time.
func (c *testClock) now() time.Time {
c.timeLock.Lock()
defer c.timeLock.Unlock()
return c.currentTime
}
// tickAfter returns a channel that will receive a tick at the specified time.
func (c *testClock) tickAfter(duration time.Duration) <-chan time.Time {
c.timeLock.Lock()
defer c.timeLock.Unlock()
triggerTime := c.currentTime.Add(duration)
log.Debugf("tickAfter called: duration=%v, trigger_time=%v",
duration, triggerTime)
ch := make(chan time.Time, 1)
// If already expired, tick immediately.
if !triggerTime.After(c.currentTime) {
ch <- c.currentTime
return ch
}
// Otherwise store the channel until the trigger time is there.
chans := c.timeChanMap[triggerTime]
chans = append(chans, ch)
c.timeChanMap[triggerTime] = chans
return ch
}
// setTime sets the (test) time and triggers tick channels when they expire.
func (c *testClock) setTime(now time.Time) {
c.timeLock.Lock()
defer c.timeLock.Unlock()
c.currentTime = now
remainingChans := make(map[time.Time][]chan time.Time)
for triggerTime, chans := range c.timeChanMap {
// If the trigger time is still in the future, keep this channel
// in the channel map for later.
if triggerTime.After(now) {
remainingChans[triggerTime] = chans
continue
}
for _, c := range chans {
c <- now
}
}
c.timeChanMap = remainingChans
}

@ -2,8 +2,10 @@ package invoices
import (
"errors"
"fmt"
"sync"
"sync/atomic"
"time"
"github.com/davecgh/go-spew/spew"
"github.com/lightningnetwork/lnd/channeldb"
@ -26,6 +28,12 @@ var (
ErrShuttingDown = errors.New("invoice registry shutting down")
)
const (
// DefaultHtlcHoldDuration defines the default for how long mpp htlcs
// are held while waiting for the other set members to arrive.
DefaultHtlcHoldDuration = 120 * time.Second
)
// HodlEvent describes how an htlc should be resolved. If HodlEvent.Preimage is
// set, the event indicates a settle event. If Preimage is nil, it is a cancel
// event.
@ -41,6 +49,48 @@ type HodlEvent struct {
AcceptHeight int32
}
// RegistryConfig contains the configuration parameters for invoice registry.
type RegistryConfig struct {
// FinalCltvRejectDelta defines the number of blocks before the expiry
// of the htlc where we no longer settle it as an exit hop and instead
// cancel it back. Normally this value should be lower than the cltv
// expiry of any invoice we create and the code effectuating this should
// not be hit.
FinalCltvRejectDelta int32
// HtlcHoldDuration defines for how long mpp htlcs are held while
// waiting for the other set members to arrive.
HtlcHoldDuration time.Duration
// Now returns the current time.
Now func() time.Time
// TickAfter returns a channel that is sent on after the specified
// duration as passed.
TickAfter func(duration time.Duration) <-chan time.Time
}
// htlcReleaseEvent describes an htlc auto-release event. It is used to release
// mpp htlcs for which the complete set didn't arrive in time.
type htlcReleaseEvent struct {
// hash is the payment hash of the htlc to release.
hash lntypes.Hash
// key is the circuit key of the htlc to release.
key channeldb.CircuitKey
// releaseTime is the time at which to release the htlc.
releaseTime time.Time
}
// Less is used to order PriorityQueueItem's by their release time such that
// items with the older release time are at the top of the queue.
//
// NOTE: Part of the queue.PriorityQueueItem interface.
func (r *htlcReleaseEvent) Less(other queue.PriorityQueueItem) bool {
return r.releaseTime.Before(other.(*htlcReleaseEvent).releaseTime)
}
// InvoiceRegistry is a central registry of all the outstanding invoices
// created by the daemon. The registry is a thin wrapper around a map in order
// to ensure that all updates/reads are thread safe.
@ -49,6 +99,9 @@ type InvoiceRegistry struct {
cdb *channeldb.DB
// cfg contains the registry's configuration parameters.
cfg *RegistryConfig
clientMtx sync.Mutex
nextClientID uint32
notificationClients map[uint32]*InvoiceSubscription
@ -69,12 +122,9 @@ type InvoiceRegistry struct {
// subscriber. This is used to unsubscribe from all hashes efficiently.
hodlReverseSubscriptions map[chan<- interface{}]map[channeldb.CircuitKey]struct{}
// finalCltvRejectDelta defines the number of blocks before the expiry
// of the htlc where we no longer settle it as an exit hop and instead
// cancel it back. Normally this value should be lower than the cltv
// expiry of any invoice we create and the code effectuating this should
// not be hit.
finalCltvRejectDelta int32
// htlcAutoReleaseChan contains the new htlcs that need to be
// auto-released.
htlcAutoReleaseChan chan *htlcReleaseEvent
wg sync.WaitGroup
quit chan struct{}
@ -84,8 +134,7 @@ type InvoiceRegistry struct {
// wraps the persistent on-disk invoice storage with an additional in-memory
// layer. The in-memory layer is in place such that debug invoices can be added
// which are volatile yet available system wide within the daemon.
func NewRegistry(cdb *channeldb.DB, finalCltvRejectDelta int32) *InvoiceRegistry {
func NewRegistry(cdb *channeldb.DB, cfg *RegistryConfig) *InvoiceRegistry {
return &InvoiceRegistry{
cdb: cdb,
notificationClients: make(map[uint32]*InvoiceSubscription),
@ -95,7 +144,8 @@ func NewRegistry(cdb *channeldb.DB, finalCltvRejectDelta int32) *InvoiceRegistry
invoiceEvents: make(chan interface{}, 100),
hodlSubscriptions: make(map[channeldb.CircuitKey]map[chan<- interface{}]struct{}),
hodlReverseSubscriptions: make(map[chan<- interface{}]map[channeldb.CircuitKey]struct{}),
finalCltvRejectDelta: finalCltvRejectDelta,
cfg: cfg,
htlcAutoReleaseChan: make(chan *htlcReleaseEvent),
quit: make(chan struct{}),
}
}
@ -104,7 +154,7 @@ func NewRegistry(cdb *channeldb.DB, finalCltvRejectDelta int32) *InvoiceRegistry
func (i *InvoiceRegistry) Start() error {
i.wg.Add(1)
go i.invoiceEventNotifier()
go i.invoiceEventLoop()
return nil
}
@ -124,13 +174,31 @@ type invoiceEvent struct {
invoice *channeldb.Invoice
}
// invoiceEventNotifier is the dedicated goroutine responsible for accepting
// tickAt returns a channel that ticks at the specified time. If the time has
// already passed, it will tick immediately.
func (i *InvoiceRegistry) tickAt(t time.Time) <-chan time.Time {
now := i.cfg.Now()
return i.cfg.TickAfter(t.Sub(now))
}
// invoiceEventLoop is the dedicated goroutine responsible for accepting
// new notification subscriptions, cancelling old subscriptions, and
// dispatching new invoice events.
func (i *InvoiceRegistry) invoiceEventNotifier() {
func (i *InvoiceRegistry) invoiceEventLoop() {
defer i.wg.Done()
// Set up a heap for htlc auto-releases.
autoReleaseHeap := &queue.PriorityQueue{}
for {
// If there is something to release, set up a release tick
// channel.
var nextReleaseTick <-chan time.Time
if autoReleaseHeap.Len() > 0 {
head := autoReleaseHeap.Top().(*htlcReleaseEvent)
nextReleaseTick = i.tickAt(head.releaseTime)
}
select {
// A new invoice subscription for all invoices has just arrived!
// We'll query for any backlog notifications, then add it to the
@ -196,6 +264,29 @@ func (i *InvoiceRegistry) invoiceEventNotifier() {
i.singleNotificationClients[e.id] = e
}
// A new htlc came in for auto-release.
case event := <-i.htlcAutoReleaseChan:
log.Debugf("Scheduling auto-release for htlc: "+
"hash=%v, key=%v at %v",
event.hash, event.key, event.releaseTime)
// We use an independent timer for every htlc rather
// than a set timer that is reset with every htlc coming
// in. Otherwise the sender could keep resetting the
// timer until the broadcast window is entered and our
// channel is force closed.
autoReleaseHeap.Push(event)
// The htlc at the top of the heap needs to be auto-released.
case <-nextReleaseTick:
event := autoReleaseHeap.Pop().(*htlcReleaseEvent)
err := i.cancelSingleHtlc(
event.hash, event.key,
)
if err != nil {
log.Errorf("HTLC timer: %v", err)
}
case <-i.quit:
return
}
@ -412,6 +503,114 @@ func (i *InvoiceRegistry) LookupInvoice(rHash lntypes.Hash) (channeldb.Invoice,
return i.cdb.LookupInvoice(rHash)
}
// startHtlcTimer starts a new timer via the invoice registry main loop that
// cancels a single htlc on an invoice when the htlc hold duration has passed.
func (i *InvoiceRegistry) startHtlcTimer(hash lntypes.Hash,
key channeldb.CircuitKey, acceptTime time.Time) error {
releaseTime := acceptTime.Add(i.cfg.HtlcHoldDuration)
event := &htlcReleaseEvent{
hash: hash,
key: key,
releaseTime: releaseTime,
}
select {
case i.htlcAutoReleaseChan <- event:
return nil
case <-i.quit:
return ErrShuttingDown
}
}
// cancelSingleHtlc cancels a single accepted htlc on an invoice.
func (i *InvoiceRegistry) cancelSingleHtlc(hash lntypes.Hash,
key channeldb.CircuitKey) error {
i.Lock()
defer i.Unlock()
updateInvoice := func(invoice *channeldb.Invoice) (
*channeldb.InvoiceUpdateDesc, error) {
// Only allow individual htlc cancelation on open invoices.
if invoice.State != channeldb.ContractOpen {
log.Debugf("cancelSingleHtlc: invoice %v no longer "+
"open", hash)
return nil, nil
}
// Lookup the current status of the htlc in the database.
htlc, ok := invoice.Htlcs[key]
if !ok {
return nil, fmt.Errorf("htlc %v not found", key)
}
// Cancelation is only possible if the htlc wasn't already
// resolved.
if htlc.State != channeldb.HtlcStateAccepted {
log.Debugf("cancelSingleHtlc: htlc %v on invoice %v "+
"is already resolved", key, hash)
return nil, nil
}
log.Debugf("cancelSingleHtlc: cancelling htlc %v on invoice %v",
key, hash)
// Return an update descriptor that cancels htlc and keeps
// invoice open.
canceledHtlcs := map[channeldb.CircuitKey]struct{}{
key: {},
}
return &channeldb.InvoiceUpdateDesc{
CancelHtlcs: canceledHtlcs,
}, nil
}
// Try to mark the specified htlc as canceled in the invoice database.
// Intercept the update descriptor to set the local updated variable. If
// no invoice update is performed, we can return early.
var updated bool
invoice, err := i.cdb.UpdateInvoice(hash,
func(invoice *channeldb.Invoice) (
*channeldb.InvoiceUpdateDesc, error) {
updateDesc, err := updateInvoice(invoice)
if err != nil {
return nil, err
}
updated = updateDesc != nil
return updateDesc, err
},
)
if err != nil {
return err
}
if !updated {
return nil
}
// The invoice has been updated. Notify subscribers of the htlc
// resolution.
htlc, ok := invoice.Htlcs[key]
if !ok {
return fmt.Errorf("htlc %v not found", key)
}
if htlc.State == channeldb.HtlcStateCanceled {
i.notifyHodlSubscribers(HodlEvent{
CircuitKey: key,
AcceptHeight: int32(htlc.AcceptHeight),
Preimage: nil,
})
}
return nil
}
// NotifyExitHopHtlc attempts to mark an invoice as settled. The return value
// describes how the htlc should be resolved.
//
@ -422,6 +621,11 @@ func (i *InvoiceRegistry) LookupInvoice(rHash lntypes.Hash) (channeldb.Invoice,
// to be taken on the htlc (settle or cancel). The caller needs to ensure that
// the channel is either buffered or received on from another goroutine to
// prevent deadlock.
//
// In the case that the htlc is part of a larger set of htlcs that pay to the
// same invoice (multi-path payment), the htlc is held until the set is
// complete. If the set doesn't fully arrive in time, a timer will cancel the
// held htlc.
func (i *InvoiceRegistry) NotifyExitHopHtlc(rHash lntypes.Hash,
amtPaid lnwire.MilliSatoshi, expiry uint32, currentHeight int32,
circuitKey channeldb.CircuitKey, hodlChan chan<- interface{},
@ -430,9 +634,11 @@ func (i *InvoiceRegistry) NotifyExitHopHtlc(rHash lntypes.Hash,
i.Lock()
defer i.Unlock()
mpp := payload.MultiPath()
debugLog := func(s string) {
log.Debugf("Invoice(%x): %v, amt=%v, expiry=%v, circuit=%v",
rHash[:], s, amtPaid, expiry, circuitKey)
log.Debugf("Invoice(%x): %v, amt=%v, expiry=%v, circuit=%v, "+
"mpp=%v", rHash[:], s, amtPaid, expiry, circuitKey, mpp)
}
// Create the update context containing the relevant details of the
@ -442,8 +648,9 @@ func (i *InvoiceRegistry) NotifyExitHopHtlc(rHash lntypes.Hash,
amtPaid: amtPaid,
expiry: expiry,
currentHeight: currentHeight,
finalCltvRejectDelta: i.finalCltvRejectDelta,
finalCltvRejectDelta: i.cfg.FinalCltvRejectDelta,
customRecords: payload.CustomRecords(),
mpp: mpp,
}
// We'll attempt to settle an invoice matching this rHash on disk (if
@ -508,6 +715,21 @@ func (i *InvoiceRegistry) NotifyExitHopHtlc(rHash lntypes.Hash,
}, nil
case channeldb.HtlcStateSettled:
// Also settle any previously accepted htlcs. The invoice state
// is leading. If an htlc is marked as settled, we should follow
// now and settle the htlc with our peer.
for key, htlc := range invoice.Htlcs {
if htlc.State != channeldb.HtlcStateSettled {
continue
}
i.notifyHodlSubscribers(HodlEvent{
CircuitKey: key,
Preimage: &invoice.Terms.PaymentPreimage,
AcceptHeight: int32(htlc.AcceptHeight),
})
}
return &HodlEvent{
CircuitKey: circuitKey,
Preimage: &invoice.Terms.PaymentPreimage,
@ -515,6 +737,19 @@ func (i *InvoiceRegistry) NotifyExitHopHtlc(rHash lntypes.Hash,
}, nil
case channeldb.HtlcStateAccepted:
// (Re)start the htlc timer if the invoice is still open. It can
// only happen for mpp payments that there are htlcs in state
// Accepted while the invoice is Open.
if invoice.State == channeldb.ContractOpen {
err := i.startHtlcTimer(
rHash, circuitKey,
invoiceHtlc.AcceptTime,
)
if err != nil {
return nil, err
}
}
i.hodlSubscribe(hodlChan, circuitKey)
return nil, nil

@ -16,6 +16,8 @@ import (
var (
testTimeout = 5 * time.Second
testTime = time.Date(2018, time.February, 2, 14, 0, 0, 0, time.UTC)
preimage = lntypes.Preimage{
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1,
@ -59,19 +61,29 @@ var (
type testContext struct {
registry *InvoiceRegistry
clock *testClock
cleanup func()
t *testing.T
}
func newTestContext(t *testing.T) *testContext {
clock := newTestClock(testTime)
cdb, cleanup, err := newDB()
if err != nil {
t.Fatal(err)
}
cdb.Now = clock.now
// Instantiate and start the invoice ctx.registry.
registry := NewRegistry(cdb, testFinalCltvRejectDelta)
cfg := RegistryConfig{
FinalCltvRejectDelta: testFinalCltvRejectDelta,
HtlcHoldDuration: 30 * time.Second,
Now: clock.now,
TickAfter: clock.tickAfter,
}
registry := NewRegistry(cdb, &cfg)
err = registry.Start()
if err != nil {
@ -81,6 +93,7 @@ func newTestContext(t *testing.T) *testContext {
ctx := testContext{
registry: registry,
clock: clock,
t: t,
cleanup: func() {
registry.Stop()
@ -390,7 +403,10 @@ func TestSettleHoldInvoice(t *testing.T) {
defer cleanup()
// Instantiate and start the invoice ctx.registry.
registry := NewRegistry(cdb, testFinalCltvRejectDelta)
cfg := RegistryConfig{
FinalCltvRejectDelta: testFinalCltvRejectDelta,
}
registry := NewRegistry(cdb, &cfg)
err = registry.Start()
if err != nil {
@ -558,7 +574,10 @@ func TestCancelHoldInvoice(t *testing.T) {
defer cleanup()
// Instantiate and start the invoice ctx.registry.
registry := NewRegistry(cdb, testFinalCltvRejectDelta)
cfg := RegistryConfig{
FinalCltvRejectDelta: testFinalCltvRejectDelta,
}
registry := NewRegistry(cdb, &cfg)
err = registry.Start()
if err != nil {
@ -674,3 +693,85 @@ func (p *mockPayload) MultiPath() *record.MPP {
func (p *mockPayload) CustomRecords() hop.CustomRecordSet {
return make(hop.CustomRecordSet)
}
// TestSettleMpp tests settling of an invoice with multiple partial payments.
func TestSettleMpp(t *testing.T) {
defer timeout(t)()
ctx := newTestContext(t)
defer ctx.cleanup()
// Add the invoice.
_, err := ctx.registry.AddInvoice(testInvoice, hash)
if err != nil {
t.Fatal(err)
}
mppPayload := &mockPayload{
mpp: record.NewMPP(testInvoiceAmt, [32]byte{}),
}
// Send htlc 1.
hodlChan1 := make(chan interface{}, 1)
event, err := ctx.registry.NotifyExitHopHtlc(
hash, testInvoice.Terms.Value/2,
testHtlcExpiry,
testCurrentHeight, getCircuitKey(10), hodlChan1, mppPayload,
)
if err != nil {
t.Fatal(err)
}
if event != nil {
t.Fatal("expected no direct resolution")
}
// Simulate mpp timeout releasing htlc 1.
ctx.clock.setTime(testTime.Add(30 * time.Second))
hodlEvent := (<-hodlChan1).(HodlEvent)
if hodlEvent.Preimage != nil {
t.Fatal("expected cancel event")
}
// Send htlc 2.
hodlChan2 := make(chan interface{}, 1)
event, err = ctx.registry.NotifyExitHopHtlc(
hash, testInvoice.Terms.Value/2,
testHtlcExpiry,
testCurrentHeight, getCircuitKey(11), hodlChan2, mppPayload,
)
if err != nil {
t.Fatal(err)
}
if event != nil {
t.Fatal("expected no direct resolution")
}
// Send htlc 3.
hodlChan3 := make(chan interface{}, 1)
event, err = ctx.registry.NotifyExitHopHtlc(
hash, testInvoice.Terms.Value/2,
testHtlcExpiry,
testCurrentHeight, getCircuitKey(12), hodlChan3, mppPayload,
)
if err != nil {
t.Fatal(err)
}
if event == nil {
t.Fatal("expected a settle event")
}
// Check that settled amount is equal to the sum of values of the htlcs
// 0 and 1.
inv, err := ctx.registry.LookupInvoice(hash)
if err != nil {
t.Fatal(err)
}
if inv.State != channeldb.ContractSettled {
t.Fatal("expected invoice to be settled")
}
if inv.AmtPaid != testInvoice.Terms.Value {
t.Fatalf("amount incorrect, expected %v but got %v",
testInvoice.Terms.Value, inv.AmtPaid)
}
}

@ -7,6 +7,7 @@ import (
"github.com/lightningnetwork/lnd/channeldb"
"github.com/lightningnetwork/lnd/lnwire"
"github.com/lightningnetwork/lnd/record"
)
// updateResult is the result of the invoice update call.
@ -24,6 +25,13 @@ const (
resultDuplicateToSettled
resultAccepted
resultSettled
resultInvoiceNotOpen
resultPartialAccepted
resultMppInProgress
resultAddressMismatch
resultHtlcSetTotalMismatch
resultHtlcSetTotalTooLow
resultHtlcSetOverpayment
)
// String returns a human-readable representation of the invoice update result.
@ -63,6 +71,27 @@ func (u updateResult) String() string {
case resultSettled:
return "settled"
case resultInvoiceNotOpen:
return "invoice no longer open"
case resultPartialAccepted:
return "partial payment accepted"
case resultMppInProgress:
return "mpp reception in progress"
case resultAddressMismatch:
return "payment address mismatch"
case resultHtlcSetTotalMismatch:
return "htlc total amt doesn't match set total"
case resultHtlcSetTotalTooLow:
return "set total too low for invoice"
case resultHtlcSetOverpayment:
return "mpp is overpaying set total"
default:
return "unknown"
}
@ -77,6 +106,7 @@ type invoiceUpdateCtx struct {
currentHeight int32
finalCltvRejectDelta int32
customRecords hop.CustomRecordSet
mpp *record.MPP
}
// updateInvoice is a callback for DB.UpdateInvoice that contains the invoice
@ -102,8 +132,125 @@ func updateInvoice(ctx *invoiceUpdateCtx, inv *channeldb.Invoice) (
}
}
// If the invoice is already canceled, there is no further checking to
// do.
if ctx.mpp == nil {
return updateLegacy(ctx, inv)
}
return updateMpp(ctx, inv)
}
// updateMpp is a callback for DB.UpdateInvoice that contains the invoice
// settlement logic for mpp payments.
func updateMpp(ctx *invoiceUpdateCtx, inv *channeldb.Invoice) (
*channeldb.InvoiceUpdateDesc, updateResult, error) {
// Start building the accept descriptor.
acceptDesc := &channeldb.HtlcAcceptDesc{
Amt: ctx.amtPaid,
Expiry: ctx.expiry,
AcceptHeight: ctx.currentHeight,
MppTotalAmt: ctx.mpp.TotalMsat(),
CustomRecords: ctx.customRecords,
}
// Only accept payments to open invoices. This behaviour differs from
// non-mpp payments that are accepted even after the invoice is settled.
// Because non-mpp payments don't have a payment address, this is needed
// to thwart probing.
if inv.State != channeldb.ContractOpen {
return nil, resultInvoiceNotOpen, nil
}
// Check the payment address that authorizes the payment.
if ctx.mpp.PaymentAddr() != inv.Terms.PaymentAddr {
return nil, resultAddressMismatch, nil
}
// Don't accept zero-valued sets.
if ctx.mpp.TotalMsat() == 0 {
return nil, resultHtlcSetTotalTooLow, nil
}
// Check that the total amt of the htlc set is high enough. In case this
// is a zero-valued invoice, it will always be enough.
if ctx.mpp.TotalMsat() < inv.Terms.Value {
return nil, resultHtlcSetTotalTooLow, nil
}
// Check whether total amt matches other htlcs in the set.
var newSetTotal lnwire.MilliSatoshi
for _, htlc := range inv.Htlcs {
// Only consider accepted mpp htlcs. It is possible that there
// are htlcs registered in the invoice database that previously
// timed out and are in the canceled state now.
if htlc.State != channeldb.HtlcStateAccepted {
continue
}
if ctx.mpp.TotalMsat() != htlc.MppTotalAmt {
return nil, resultHtlcSetTotalMismatch, nil
}
newSetTotal += htlc.Amt
}
// Add amount of new htlc.
newSetTotal += ctx.amtPaid
// Make sure the communicated set total isn't overpaid.
if newSetTotal > ctx.mpp.TotalMsat() {
return nil, resultHtlcSetOverpayment, nil
}
// The invoice is still open. Check the expiry.
if ctx.expiry < uint32(ctx.currentHeight+ctx.finalCltvRejectDelta) {
return nil, resultExpiryTooSoon, nil
}
if ctx.expiry < uint32(ctx.currentHeight+inv.Terms.FinalCltvDelta) {
return nil, resultExpiryTooSoon, nil
}
// Record HTLC in the invoice database.
newHtlcs := map[channeldb.CircuitKey]*channeldb.HtlcAcceptDesc{
ctx.circuitKey: acceptDesc,
}
update := channeldb.InvoiceUpdateDesc{
AddHtlcs: newHtlcs,
}
// If the invoice cannot be settled yet, only record the htlc.
setComplete := newSetTotal == ctx.mpp.TotalMsat()
if !setComplete {
return &update, resultPartialAccepted, nil
}
// Check to see if we can settle or this is an hold invoice and
// we need to wait for the preimage.
holdInvoice := inv.Terms.PaymentPreimage == channeldb.UnknownPreimage
if holdInvoice {
update.State = &channeldb.InvoiceStateUpdateDesc{
NewState: channeldb.ContractAccepted,
}
return &update, resultAccepted, nil
}
update.State = &channeldb.InvoiceStateUpdateDesc{
NewState: channeldb.ContractSettled,
Preimage: inv.Terms.PaymentPreimage,
}
return &update, resultSettled, nil
}
// updateLegacy is a callback for DB.UpdateInvoice that contains the invoice
// settlement logic for legacy payments.
func updateLegacy(ctx *invoiceUpdateCtx, inv *channeldb.Invoice) (
*channeldb.InvoiceUpdateDesc, updateResult, error) {
// If the invoice is already canceled, there is no further
// checking to do.
if inv.State == channeldb.ContractCanceled {
return nil, resultInvoiceAlreadyCanceled, nil
}
@ -116,6 +263,20 @@ func updateInvoice(ctx *invoiceUpdateCtx, inv *channeldb.Invoice) (
return nil, resultAmountTooLow, nil
}
// TODO(joostjager): Check invoice mpp required feature
// bit when feature becomes mandatory.
// Don't allow settling the invoice with an old style
// htlc if we are already in the process of gathering an
// mpp set.
for _, htlc := range inv.Htlcs {
if htlc.State == channeldb.HtlcStateAccepted &&
htlc.MppTotalAmt > 0 {
return nil, resultMppInProgress, nil
}
}
// The invoice is still open. Check the expiry.
if ctx.expiry < uint32(ctx.currentHeight+ctx.finalCltvRejectDelta) {
return nil, resultExpiryTooSoon, nil

@ -83,6 +83,7 @@ func CreateRPCInvoice(invoice *channeldb.Invoice,
AmtMsat: uint64(htlc.Amt),
State: state,
CustomRecords: htlc.CustomRecords,
MppTotalAmtMsat: uint64(htlc.MppTotalAmt),
}
// Only report resolved times if htlc is resolved.

@ -7324,6 +7324,8 @@ type InvoiceHTLC struct {
State InvoiceHTLCState `protobuf:"varint,8,opt,name=state,proto3,enum=lnrpc.InvoiceHTLCState" json:"state,omitempty"`
/// Custom tlv records.
CustomRecords map[uint64][]byte `protobuf:"bytes,9,rep,name=custom_records,proto3" json:"custom_records,omitempty" protobuf_key:"varint,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"`
/// The total amount of the mpp payment in msat.
MppTotalAmtMsat uint64 `protobuf:"varint,10,opt,name=mpp_total_amt_msat,proto3" json:"mpp_total_amt_msat,omitempty"`
XXX_NoUnkeyedLiteral struct{} `json:"-"`
XXX_unrecognized []byte `json:"-"`
XXX_sizecache int32 `json:"-"`
@ -7417,6 +7419,13 @@ func (m *InvoiceHTLC) GetCustomRecords() map[uint64][]byte {
return nil
}
func (m *InvoiceHTLC) GetMppTotalAmtMsat() uint64 {
if m != nil {
return m.MppTotalAmtMsat
}
return 0
}
type AddInvoiceResponse struct {
RHash []byte `protobuf:"bytes,1,opt,name=r_hash,proto3" json:"r_hash,omitempty"`
//*
@ -9793,573 +9802,573 @@ func init() {
func init() { proto.RegisterFile("rpc.proto", fileDescriptor_77a6da22d6a3feb1) }
var fileDescriptor_77a6da22d6a3feb1 = []byte{
// 9047 bytes of a gzipped FileDescriptorProto
0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xbc, 0xbd, 0x4d, 0x6c, 0x1c, 0x49,
0x96, 0x1f, 0xae, 0xfa, 0x20, 0x59, 0xf5, 0xaa, 0x48, 0x16, 0x83, 0x14, 0x59, 0xaa, 0x96, 0xd4,
0xea, 0x1c, 0x8d, 0xa4, 0xd6, 0xf4, 0x50, 0x6a, 0xce, 0x4c, 0xff, 0x7b, 0xbb, 0xff, 0xeb, 0x5d,
0x8a, 0xa4, 0x44, 0x75, 0x53, 0x14, 0x27, 0x29, 0x8d, 0x3c, 0x33, 0xbb, 0xc8, 0x49, 0x56, 0x05,
0xc9, 0x1c, 0x55, 0x65, 0x56, 0x67, 0x66, 0x91, 0xe2, 0xb4, 0xdb, 0x07, 0xc3, 0x30, 0x0c, 0x5f,
0x16, 0x63, 0xc3, 0x80, 0x6d, 0xd8, 0x58, 0x60, 0xd6, 0x80, 0xb1, 0xf0, 0xc1, 0xbe, 0x18, 0xf0,
0x1a, 0xeb, 0x93, 0x0f, 0x0b, 0x18, 0x30, 0x7c, 0xb0, 0x01, 0x03, 0x36, 0xb0, 0x86, 0x61, 0x03,
0xf6, 0xc2, 0xf0, 0xcd, 0xbe, 0x1b, 0xef, 0xc5, 0x47, 0x46, 0x64, 0x66, 0x49, 0xea, 0x99, 0xf1,
0x9e, 0x58, 0xf1, 0x8b, 0xc8, 0xf8, 0x7c, 0xef, 0xc5, 0x8b, 0xf7, 0x5e, 0x04, 0xa1, 0x19, 0x8f,
0xfb, 0xeb, 0xe3, 0x38, 0x4a, 0x23, 0x36, 0x33, 0x0c, 0xe3, 0x71, 0xbf, 0x77, 0xf5, 0x24, 0x8a,
0x4e, 0x86, 0xfc, 0x9e, 0x3f, 0x0e, 0xee, 0xf9, 0x61, 0x18, 0xa5, 0x7e, 0x1a, 0x44, 0x61, 0x22,
0x0a, 0x39, 0x3f, 0x81, 0x85, 0x47, 0x3c, 0x3c, 0xe4, 0x7c, 0xe0, 0xf2, 0x2f, 0x26, 0x3c, 0x49,
0xd9, 0xb7, 0x60, 0xc9, 0xe7, 0x3f, 0xe3, 0x7c, 0xe0, 0x8d, 0xfd, 0x24, 0x19, 0x9f, 0xc6, 0x7e,
0xc2, 0xbb, 0x95, 0x1b, 0x95, 0x3b, 0x6d, 0xb7, 0x23, 0x32, 0x0e, 0x34, 0xce, 0xde, 0x83, 0x76,
0x82, 0x45, 0x79, 0x98, 0xc6, 0xd1, 0xf8, 0xa2, 0x5b, 0xa5, 0x72, 0x2d, 0xc4, 0x76, 0x04, 0xe4,
0x0c, 0x61, 0x51, 0xb7, 0x90, 0x8c, 0xa3, 0x30, 0xe1, 0xec, 0x3e, 0xac, 0xf4, 0x83, 0xf1, 0x29,
0x8f, 0x3d, 0xfa, 0x78, 0x14, 0xf2, 0x51, 0x14, 0x06, 0xfd, 0x6e, 0xe5, 0x46, 0xed, 0x4e, 0xd3,
0x65, 0x22, 0x0f, 0xbf, 0x78, 0x22, 0x73, 0xd8, 0x6d, 0x58, 0xe4, 0xa1, 0xc0, 0xf9, 0x80, 0xbe,
0x92, 0x4d, 0x2d, 0x64, 0x30, 0x7e, 0xe0, 0xfc, 0xf5, 0x2a, 0x2c, 0x3d, 0x0e, 0x83, 0xf4, 0x85,
0x3f, 0x1c, 0xf2, 0x54, 0x8d, 0xe9, 0x36, 0x2c, 0x9e, 0x13, 0x40, 0x63, 0x3a, 0x8f, 0xe2, 0x81,
0x1c, 0xd1, 0x82, 0x80, 0x0f, 0x24, 0x3a, 0xb5, 0x67, 0xd5, 0xa9, 0x3d, 0x2b, 0x9d, 0xae, 0xda,
0x94, 0xe9, 0xba, 0x0d, 0x8b, 0x31, 0xef, 0x47, 0x67, 0x3c, 0xbe, 0xf0, 0xce, 0x83, 0x70, 0x10,
0x9d, 0x77, 0xeb, 0x37, 0x2a, 0x77, 0x66, 0xdc, 0x05, 0x05, 0xbf, 0x20, 0x94, 0x3d, 0x80, 0xc5,
0xfe, 0xa9, 0x1f, 0x86, 0x7c, 0xe8, 0x1d, 0xf9, 0xfd, 0x97, 0x93, 0x71, 0xd2, 0x9d, 0xb9, 0x51,
0xb9, 0xd3, 0xda, 0xb8, 0xb2, 0x4e, 0xab, 0xba, 0xbe, 0x75, 0xea, 0x87, 0x0f, 0x28, 0xe7, 0x30,
0xf4, 0xc7, 0xc9, 0x69, 0x94, 0xba, 0x0b, 0xf2, 0x0b, 0x01, 0x27, 0xce, 0x0a, 0x30, 0x73, 0x26,
0xc4, 0xdc, 0x3b, 0xff, 0xb8, 0x02, 0xcb, 0xcf, 0xc3, 0x61, 0xd4, 0x7f, 0xf9, 0x4b, 0x4e, 0x51,
0xc9, 0x18, 0xaa, 0x6f, 0x3b, 0x86, 0xda, 0xd7, 0x1d, 0xc3, 0x2a, 0xac, 0xd8, 0x9d, 0x95, 0xa3,
0xe0, 0x70, 0x19, 0xbf, 0x3e, 0xe1, 0xaa, 0x5b, 0x6a, 0x18, 0xef, 0x43, 0xa7, 0x3f, 0x89, 0x63,
0x1e, 0x16, 0xc6, 0xb1, 0x28, 0x71, 0x3d, 0x90, 0xf7, 0xa0, 0x1d, 0xf2, 0xf3, 0xac, 0x98, 0xa4,
0xdd, 0x90, 0x9f, 0xab, 0x22, 0x4e, 0x17, 0x56, 0xf3, 0xcd, 0xc8, 0x0e, 0xfc, 0x97, 0x0a, 0xd4,
0x9f, 0xa7, 0xaf, 0x22, 0xb6, 0x0e, 0xf5, 0xf4, 0x62, 0x2c, 0x38, 0x64, 0x61, 0x83, 0xc9, 0xa1,
0x6d, 0x0e, 0x06, 0x31, 0x4f, 0x92, 0x67, 0x17, 0x63, 0xee, 0xb6, 0x7d, 0x91, 0xf0, 0xb0, 0x1c,
0xeb, 0xc2, 0x9c, 0x4c, 0x53, 0x83, 0x4d, 0x57, 0x25, 0xd9, 0x75, 0x00, 0x7f, 0x14, 0x4d, 0xc2,
0xd4, 0x4b, 0xfc, 0x94, 0xa6, 0xaa, 0xe6, 0x1a, 0x08, 0xbb, 0x0a, 0xcd, 0xf1, 0x4b, 0x2f, 0xe9,
0xc7, 0xc1, 0x38, 0x25, 0xb2, 0x69, 0xba, 0x19, 0xc0, 0xbe, 0x05, 0x8d, 0x68, 0x92, 0x8e, 0xa3,
0x20, 0x4c, 0x25, 0xa9, 0x2c, 0xca, 0xbe, 0x3c, 0x9d, 0xa4, 0x07, 0x08, 0xbb, 0xba, 0x00, 0xbb,
0x09, 0xf3, 0xfd, 0x28, 0x3c, 0x0e, 0xe2, 0x91, 0x10, 0x06, 0xdd, 0x59, 0x6a, 0xcd, 0x06, 0x9d,
0x3f, 0xaa, 0x42, 0xeb, 0x59, 0xec, 0x87, 0x89, 0xdf, 0x47, 0x00, 0xbb, 0x9e, 0xbe, 0xf2, 0x4e,
0xfd, 0xe4, 0x94, 0x46, 0xdb, 0x74, 0x55, 0x92, 0xad, 0xc2, 0xac, 0xe8, 0x28, 0x8d, 0xa9, 0xe6,
0xca, 0x14, 0xfb, 0x00, 0x96, 0xc2, 0xc9, 0xc8, 0xb3, 0xdb, 0xaa, 0x11, 0xb5, 0x14, 0x33, 0x70,
0x02, 0x8e, 0x70, 0xad, 0x45, 0x13, 0x62, 0x84, 0x06, 0xc2, 0x1c, 0x68, 0xcb, 0x14, 0x0f, 0x4e,
0x4e, 0xc5, 0x30, 0x67, 0x5c, 0x0b, 0xc3, 0x3a, 0xd2, 0x60, 0xc4, 0xbd, 0x24, 0xf5, 0x47, 0x63,
0x39, 0x2c, 0x03, 0xa1, 0xfc, 0x28, 0xf5, 0x87, 0xde, 0x31, 0xe7, 0x49, 0x77, 0x4e, 0xe6, 0x6b,
0x84, 0xdd, 0x82, 0x85, 0x01, 0x4f, 0x52, 0x4f, 0x2e, 0x0a, 0x4f, 0xba, 0x0d, 0x62, 0xfd, 0x1c,
0x8a, 0xf5, 0xc4, 0xfe, 0xb9, 0x87, 0x13, 0xc0, 0x5f, 0x75, 0x9b, 0xa2, 0xaf, 0x19, 0x82, 0x94,
0xf3, 0x88, 0xa7, 0xc6, 0xec, 0x25, 0x92, 0x42, 0x9d, 0x3d, 0x60, 0x06, 0xbc, 0xcd, 0x53, 0x3f,
0x18, 0x26, 0xec, 0x23, 0x68, 0xa7, 0x46, 0x61, 0x12, 0x85, 0x2d, 0x4d, 0x4e, 0xc6, 0x07, 0xae,
0x55, 0xce, 0x39, 0x85, 0xc6, 0x43, 0xce, 0xf7, 0x82, 0x51, 0x90, 0xb2, 0x55, 0x98, 0x39, 0x0e,
0x5e, 0x71, 0x41, 0xf0, 0xb5, 0xdd, 0x4b, 0xae, 0x48, 0xb2, 0x77, 0x01, 0xe8, 0x87, 0x37, 0xd2,
0x84, 0xb5, 0x7b, 0xc9, 0x6d, 0x12, 0xf6, 0x04, 0x29, 0xab, 0x07, 0x73, 0x63, 0x1e, 0xf7, 0xb9,
0x5a, 0xbf, 0xdd, 0x4b, 0xae, 0x02, 0x1e, 0xcc, 0xc1, 0xcc, 0x10, 0x6b, 0x77, 0x7e, 0x6f, 0x06,
0x5a, 0x87, 0x3c, 0xd4, 0x9c, 0xc6, 0xa0, 0x8e, 0x73, 0x22, 0xb9, 0x8b, 0x7e, 0xb3, 0x6f, 0x40,
0x8b, 0xe6, 0x29, 0x49, 0xe3, 0x20, 0x3c, 0x11, 0x04, 0xfe, 0xa0, 0xda, 0xad, 0xb8, 0x80, 0xf0,
0x21, 0xa1, 0xac, 0x03, 0x35, 0x7f, 0xa4, 0x08, 0x1c, 0x7f, 0xb2, 0x2b, 0xd0, 0xf0, 0x47, 0xa9,
0xe8, 0x5e, 0x9b, 0xe0, 0x39, 0x7f, 0x94, 0x52, 0xd7, 0xde, 0x83, 0xf6, 0xd8, 0xbf, 0x18, 0x21,
0x3f, 0x6b, 0xaa, 0x68, 0xbb, 0x2d, 0x89, 0xed, 0x22, 0x59, 0x6c, 0xc0, 0xb2, 0x59, 0x44, 0x35,
0x3e, 0xa3, 0x1b, 0x5f, 0x32, 0x4a, 0xcb, 0x3e, 0xdc, 0x86, 0x45, 0xf5, 0x4d, 0x2c, 0xc6, 0x43,
0xb4, 0xd2, 0x74, 0x17, 0x24, 0xac, 0x46, 0x79, 0x07, 0x3a, 0xc7, 0x41, 0xe8, 0x0f, 0xbd, 0xfe,
0x30, 0x3d, 0xf3, 0x06, 0x7c, 0x98, 0xfa, 0x44, 0x35, 0x33, 0xee, 0x02, 0xe1, 0x5b, 0xc3, 0xf4,
0x6c, 0x1b, 0x51, 0xf6, 0x01, 0x34, 0x8f, 0x39, 0xf7, 0x68, 0xb2, 0xba, 0x0d, 0x8b, 0x03, 0xd5,
0x0a, 0xb9, 0x8d, 0x63, 0xb5, 0x56, 0x1f, 0x40, 0x27, 0x9a, 0xa4, 0x27, 0x51, 0x10, 0x9e, 0x78,
0x28, 0xf3, 0xbc, 0x60, 0x40, 0x54, 0x54, 0x7f, 0x50, 0xbd, 0x5f, 0x71, 0x17, 0x54, 0x1e, 0x4a,
0x9f, 0xc7, 0x03, 0x76, 0x0b, 0x16, 0x87, 0x7e, 0x92, 0x7a, 0xa7, 0xd1, 0xd8, 0x1b, 0x4f, 0x8e,
0x5e, 0xf2, 0x8b, 0xee, 0x3c, 0x4d, 0xc4, 0x3c, 0xc2, 0xbb, 0xd1, 0xf8, 0x80, 0x40, 0x76, 0x0d,
0x80, 0xfa, 0x29, 0x3a, 0x01, 0x37, 0x2a, 0x77, 0xe6, 0xdd, 0x26, 0x22, 0xa2, 0xd1, 0x1f, 0xc2,
0x32, 0x2d, 0x4f, 0x7f, 0x92, 0xa4, 0xd1, 0xc8, 0x43, 0x79, 0x1d, 0x0f, 0x92, 0x6e, 0x8b, 0x68,
0xed, 0x7d, 0xd9, 0x59, 0x63, 0x8d, 0xd7, 0xb7, 0x79, 0x92, 0x6e, 0x51, 0x61, 0x57, 0x94, 0xc5,
0x4d, 0xfd, 0xc2, 0x5d, 0x1a, 0xe4, 0x71, 0xf6, 0x01, 0x30, 0x7f, 0x38, 0x8c, 0xce, 0xbd, 0x84,
0x0f, 0x8f, 0x3d, 0x39, 0x89, 0xdd, 0x85, 0x1b, 0x95, 0x3b, 0x0d, 0xb7, 0x43, 0x39, 0x87, 0x7c,
0x78, 0x7c, 0x20, 0xf0, 0xde, 0x36, 0xac, 0x96, 0x57, 0x8d, 0xc4, 0x81, 0xa3, 0x43, 0xa2, 0xaa,
0xbb, 0xf8, 0x93, 0xad, 0xc0, 0xcc, 0x99, 0x3f, 0x9c, 0x70, 0x29, 0x9f, 0x45, 0xe2, 0x93, 0xea,
0xc7, 0x15, 0xe7, 0x9f, 0x57, 0xa0, 0x2d, 0x7a, 0x2b, 0xf5, 0x8a, 0x9b, 0x30, 0xaf, 0x56, 0x95,
0xc7, 0x71, 0x14, 0x4b, 0x31, 0x65, 0x83, 0xec, 0x2e, 0x74, 0x14, 0x30, 0x8e, 0x79, 0x30, 0xf2,
0x4f, 0x54, 0xdd, 0x05, 0x9c, 0x6d, 0x64, 0x35, 0xc6, 0xd1, 0x24, 0xe5, 0x72, 0x07, 0x6b, 0xcb,
0xb9, 0x72, 0x11, 0x73, 0xed, 0x22, 0x28, 0xa6, 0x4a, 0x48, 0xd6, 0xc2, 0x9c, 0xbf, 0x5d, 0x01,
0x86, 0x5d, 0x7f, 0x16, 0x89, 0x2a, 0x24, 0xb5, 0xe5, 0xa9, 0xbd, 0xf2, 0xd6, 0xd4, 0x5e, 0x7d,
0x1d, 0xb5, 0x3b, 0x30, 0x23, 0x7a, 0x5f, 0x2f, 0xe9, 0xbd, 0xc8, 0xfa, 0xac, 0xde, 0xa8, 0x75,
0xea, 0xce, 0x7f, 0xac, 0xc1, 0xca, 0x96, 0xd8, 0x82, 0x37, 0xfb, 0x7d, 0x3e, 0xd6, 0x7c, 0xf0,
0x2e, 0xb4, 0xc2, 0x68, 0xc0, 0x15, 0xf5, 0x89, 0x8e, 0x01, 0x42, 0x06, 0xe9, 0x9d, 0xfa, 0x41,
0x28, 0x3a, 0x2e, 0xe6, 0xb3, 0x49, 0x08, 0x75, 0xfb, 0x16, 0x2c, 0x8e, 0x79, 0x38, 0x30, 0xc9,
0x5d, 0x28, 0x49, 0xf3, 0x12, 0x96, 0x94, 0xfe, 0x2e, 0xb4, 0x8e, 0x27, 0xa2, 0x1c, 0x0a, 0x89,
0x3a, 0xd1, 0x01, 0x48, 0x68, 0x53, 0xc8, 0x8a, 0xf1, 0x24, 0x39, 0xa5, 0xdc, 0x19, 0xca, 0x9d,
0xc3, 0x34, 0x66, 0x5d, 0x03, 0x18, 0x4c, 0x92, 0x54, 0x52, 0xff, 0x2c, 0x65, 0x36, 0x11, 0x11,
0xd4, 0xff, 0x6d, 0x58, 0x1e, 0xf9, 0xaf, 0x3c, 0xa2, 0x1f, 0x2f, 0x08, 0xbd, 0xe3, 0x21, 0xed,
0x22, 0x73, 0x54, 0xae, 0x33, 0xf2, 0x5f, 0xfd, 0x00, 0x73, 0x1e, 0x87, 0x0f, 0x09, 0x47, 0x11,
0xa1, 0xd4, 0x97, 0x98, 0x27, 0x3c, 0x3e, 0xe3, 0xc4, 0xd5, 0x75, 0xad, 0xa3, 0xb8, 0x02, 0xc5,
0x1e, 0x8d, 0x70, 0xdc, 0xe9, 0xb0, 0x2f, 0x58, 0xd8, 0x9d, 0x1b, 0x05, 0xe1, 0x6e, 0x3a, 0xec,
0xb3, 0xab, 0x00, 0x28, 0x13, 0xc6, 0x3c, 0xf6, 0x5e, 0x9e, 0x13, 0x3f, 0xd6, 0x49, 0x06, 0x1c,
0xf0, 0xf8, 0xf3, 0x73, 0xf6, 0x0e, 0x34, 0xfb, 0x09, 0x09, 0x15, 0xff, 0xa2, 0xdb, 0x22, 0x66,
0x6d, 0xf4, 0x13, 0x14, 0x27, 0xfe, 0x05, 0x32, 0x14, 0xf6, 0xd6, 0xa7, 0x55, 0xe0, 0x03, 0xaa,
0x3e, 0x21, 0xe9, 0x38, 0x4f, 0x9d, 0xdd, 0x94, 0x19, 0xd8, 0x4e, 0xc2, 0xbe, 0x01, 0xf3, 0xaa,
0xb3, 0xc7, 0x43, 0xff, 0x24, 0x21, 0xf1, 0x30, 0xef, 0xb6, 0x25, 0xf8, 0x10, 0x31, 0xe7, 0x85,
0x50, 0x9a, 0x8c, 0xb5, 0x95, 0x7c, 0x83, 0xdb, 0x37, 0x21, 0xb4, 0xae, 0x0d, 0x57, 0xa6, 0xca,
0x16, 0xad, 0x5a, 0xb2, 0x68, 0xce, 0x2f, 0x2a, 0xd0, 0x96, 0x35, 0x93, 0xa6, 0xc1, 0xee, 0x03,
0x53, 0xab, 0x98, 0xbe, 0x0a, 0x06, 0xde, 0xd1, 0x45, 0xca, 0x13, 0x41, 0x34, 0xbb, 0x97, 0xdc,
0x92, 0x3c, 0x94, 0x87, 0x16, 0x9a, 0xa4, 0xb1, 0xa0, 0xe9, 0xdd, 0x4b, 0x6e, 0x21, 0x07, 0x59,
0x0c, 0x75, 0x99, 0x49, 0xea, 0x05, 0xe1, 0x80, 0xbf, 0x22, 0x52, 0x9a, 0x77, 0x2d, 0xec, 0xc1,
0x02, 0xb4, 0xcd, 0xef, 0x9c, 0x9f, 0x42, 0x43, 0x69, 0x42, 0xa4, 0x05, 0xe4, 0xfa, 0xe5, 0x1a,
0x08, 0xeb, 0x41, 0xc3, 0xee, 0x85, 0xdb, 0xf8, 0x3a, 0x6d, 0x3b, 0x7f, 0x01, 0x3a, 0x7b, 0x48,
0x44, 0x21, 0x12, 0xad, 0x54, 0xef, 0x56, 0x61, 0xd6, 0x60, 0x9e, 0xa6, 0x2b, 0x53, 0xb8, 0x8f,
0x9e, 0x46, 0x49, 0x2a, 0xdb, 0xa1, 0xdf, 0xce, 0x9f, 0x54, 0x80, 0xed, 0x24, 0x69, 0x30, 0xf2,
0x53, 0xfe, 0x90, 0x6b, 0xf1, 0xf0, 0x14, 0xda, 0x58, 0xdb, 0xb3, 0x68, 0x53, 0x28, 0x5b, 0x42,
0x49, 0xf8, 0x96, 0x64, 0xe7, 0xe2, 0x07, 0xeb, 0x66, 0x69, 0x21, 0xba, 0xad, 0x0a, 0x90, 0xdb,
0x52, 0x3f, 0x3e, 0xe1, 0x29, 0x69, 0x62, 0x52, 0x8f, 0x07, 0x01, 0x6d, 0x45, 0xe1, 0x71, 0xef,
0xb7, 0x60, 0xa9, 0x50, 0x87, 0x29, 0xa3, 0x9b, 0x25, 0x32, 0xba, 0x66, 0xca, 0xe8, 0x3e, 0x2c,
0x5b, 0xfd, 0x92, 0x14, 0xd7, 0x85, 0x39, 0x64, 0x0c, 0xdc, 0xf0, 0x2b, 0x62, 0xc3, 0x97, 0x49,
0xb6, 0x01, 0x2b, 0xc7, 0x9c, 0xc7, 0x7e, 0x4a, 0x49, 0x62, 0x1d, 0x5c, 0x13, 0x59, 0x73, 0x69,
0x9e, 0xf3, 0x5f, 0x2b, 0xb0, 0x88, 0xd2, 0xf4, 0x89, 0x1f, 0x5e, 0xa8, 0xb9, 0xda, 0x2b, 0x9d,
0xab, 0x3b, 0xc6, 0x26, 0x67, 0x94, 0xfe, 0xba, 0x13, 0x55, 0xcb, 0x4f, 0x14, 0xbb, 0x01, 0x6d,
0xab, 0xbb, 0x33, 0x42, 0xb3, 0x4c, 0xfc, 0xf4, 0x80, 0xc7, 0x0f, 0x2e, 0x52, 0xfe, 0xab, 0x4f,
0xe5, 0x2d, 0xe8, 0x64, 0xdd, 0x96, 0xf3, 0xc8, 0xa0, 0x8e, 0x84, 0x29, 0x2b, 0xa0, 0xdf, 0xce,
0xdf, 0xaf, 0x88, 0x82, 0x5b, 0x51, 0xa0, 0xb5, 0x4e, 0x2c, 0x88, 0xca, 0xab, 0x2a, 0x88, 0xbf,
0xa7, 0x6a, 0xed, 0xbf, 0xfa, 0x60, 0x51, 0x26, 0x26, 0x3c, 0x1c, 0x78, 0xfe, 0x70, 0x48, 0x82,
0xb8, 0xe1, 0xce, 0x61, 0x7a, 0x73, 0x38, 0x74, 0x6e, 0xc3, 0x92, 0xd1, 0xbb, 0xd7, 0x8c, 0x63,
0x1f, 0xd8, 0x5e, 0x90, 0xa4, 0xcf, 0xc3, 0x64, 0x6c, 0x28, 0x64, 0xef, 0x40, 0x13, 0xa5, 0x2d,
0xf6, 0x4c, 0x70, 0xee, 0x8c, 0x8b, 0xe2, 0x17, 0xfb, 0x95, 0x50, 0xa6, 0xff, 0x4a, 0x66, 0x56,
0x65, 0xa6, 0xff, 0x8a, 0x32, 0x9d, 0x8f, 0x61, 0xd9, 0xaa, 0x4f, 0x36, 0xfd, 0x1e, 0xcc, 0x4c,
0xd2, 0x57, 0x91, 0x52, 0xb9, 0x5b, 0x92, 0x42, 0xf0, 0x70, 0xe7, 0x8a, 0x1c, 0xe7, 0x53, 0x58,
0xda, 0xe7, 0xe7, 0x92, 0x91, 0x55, 0x47, 0x6e, 0xbd, 0xf1, 0xe0, 0x47, 0xf9, 0xce, 0x3a, 0x30,
0xf3, 0xe3, 0x8c, 0x01, 0xd4, 0x31, 0xb0, 0x62, 0x1d, 0x03, 0x9d, 0x5b, 0xc0, 0x0e, 0x83, 0x93,
0xf0, 0x09, 0x4f, 0x12, 0xff, 0x44, 0xb3, 0x7e, 0x07, 0x6a, 0xa3, 0xe4, 0x44, 0x8a, 0x2a, 0xfc,
0xe9, 0x7c, 0x07, 0x96, 0xad, 0x72, 0xb2, 0xe2, 0xab, 0xd0, 0x4c, 0x82, 0x93, 0xd0, 0x4f, 0x27,
0x31, 0x97, 0x55, 0x67, 0x80, 0xf3, 0x10, 0x56, 0x7e, 0xc0, 0xe3, 0xe0, 0xf8, 0xe2, 0x4d, 0xd5,
0xdb, 0xf5, 0x54, 0xf3, 0xf5, 0xec, 0xc0, 0xe5, 0x5c, 0x3d, 0xb2, 0x79, 0x41, 0xbe, 0x72, 0x25,
0x1b, 0xae, 0x48, 0x18, 0xb2, 0xaf, 0x6a, 0xca, 0x3e, 0xe7, 0x39, 0xb0, 0xad, 0x28, 0x0c, 0x79,
0x3f, 0x3d, 0xe0, 0x3c, 0xce, 0x2c, 0x50, 0x19, 0xad, 0xb6, 0x36, 0xd6, 0xe4, 0xcc, 0xe6, 0x05,
0xaa, 0x24, 0x62, 0x06, 0xf5, 0x31, 0x8f, 0x47, 0x54, 0x71, 0xc3, 0xa5, 0xdf, 0xce, 0x65, 0x58,
0xb6, 0xaa, 0x95, 0x67, 0xf6, 0x0f, 0xe1, 0xf2, 0x76, 0x90, 0xf4, 0x8b, 0x0d, 0x76, 0x61, 0x6e,
0x3c, 0x39, 0xf2, 0x32, 0x4e, 0x54, 0x49, 0x3c, 0xc6, 0xe5, 0x3f, 0x91, 0x95, 0xfd, 0xb5, 0x0a,
0xd4, 0x77, 0x9f, 0xed, 0x6d, 0xe1, 0x5e, 0x11, 0x84, 0xfd, 0x68, 0x84, 0x5a, 0x98, 0x18, 0xb4,
0x4e, 0x4f, 0xe5, 0xb0, 0xab, 0xd0, 0x24, 0xe5, 0x0d, 0x4f, 0xae, 0x52, 0x0f, 0xca, 0x00, 0x3c,
0x35, 0xf3, 0x57, 0xe3, 0x20, 0xa6, 0x63, 0xb1, 0x3a, 0xec, 0xd6, 0x69, 0x9b, 0x29, 0x66, 0x38,
0xbf, 0x98, 0x83, 0x39, 0xb9, 0xf9, 0x8a, 0x8d, 0x3c, 0x0d, 0xce, 0x78, 0xb6, 0x91, 0x63, 0x0a,
0x15, 0xe3, 0x98, 0x8f, 0xa2, 0x54, 0xeb, 0x6f, 0x62, 0x19, 0x6c, 0x90, 0xac, 0x02, 0x52, 0x89,
0x10, 0x76, 0x84, 0x9a, 0x28, 0x65, 0x81, 0xec, 0x2a, 0xcc, 0x29, 0x65, 0xa0, 0xae, 0x0f, 0x2c,
0x0a, 0xc2, 0xd9, 0xe8, 0xfb, 0x63, 0xbf, 0x1f, 0xa4, 0x17, 0x52, 0x2c, 0xe8, 0x34, 0xd6, 0x3f,
0x8c, 0xfa, 0xfe, 0xd0, 0x3b, 0xf2, 0x87, 0x7e, 0xd8, 0xe7, 0xca, 0xea, 0x60, 0x81, 0x78, 0x02,
0x97, 0xdd, 0x52, 0xc5, 0xc4, 0x29, 0x3d, 0x87, 0xe2, 0x1e, 0xde, 0x8f, 0x46, 0xa3, 0x20, 0xc5,
0x83, 0x3b, 0xa9, 0x66, 0x35, 0xd7, 0x40, 0x84, 0x8d, 0x83, 0x52, 0xe7, 0x62, 0x06, 0x9b, 0xca,
0xc6, 0x61, 0x80, 0x58, 0x4b, 0x4e, 0x43, 0xab, 0xb9, 0x06, 0x82, 0x6b, 0x31, 0x09, 0x13, 0x9e,
0xa6, 0x43, 0x3e, 0xd0, 0x1d, 0x6a, 0x51, 0xb1, 0x62, 0x06, 0xbb, 0x0f, 0xcb, 0xc2, 0x96, 0x90,
0xf8, 0x69, 0x94, 0x9c, 0x06, 0x89, 0x97, 0xe0, 0x31, 0x48, 0x9c, 0x69, 0xcb, 0xb2, 0xd8, 0xc7,
0xb0, 0x96, 0x83, 0x63, 0xde, 0xe7, 0xc1, 0x19, 0x1f, 0x90, 0x0a, 0x57, 0x73, 0xa7, 0x65, 0xb3,
0x1b, 0xd0, 0x0a, 0x27, 0x23, 0x6f, 0x32, 0x1e, 0xf8, 0xa8, 0xc4, 0x2c, 0x90, 0x72, 0x69, 0x42,
0xec, 0x43, 0x50, 0x7a, 0x9a, 0xd4, 0x1e, 0x17, 0x2d, 0x09, 0x87, 0xd4, 0xeb, 0xda, 0x25, 0x90,
0x30, 0x33, 0x95, 0xb4, 0x23, 0xcf, 0x8f, 0x0a, 0x20, 0x3e, 0x89, 0x83, 0x33, 0x3f, 0xe5, 0xdd,
0x25, 0x21, 0xd4, 0x65, 0x12, 0xbf, 0x0b, 0xc2, 0x20, 0x0d, 0xfc, 0x34, 0x8a, 0xbb, 0x8c, 0xf2,
0x32, 0x00, 0x27, 0x91, 0xe8, 0x23, 0x49, 0xfd, 0x74, 0x92, 0x48, 0x0d, 0x75, 0x99, 0x88, 0xab,
0x98, 0xc1, 0x3e, 0x82, 0x55, 0x41, 0x11, 0x94, 0x25, 0x75, 0x6f, 0x52, 0x15, 0x56, 0x68, 0x46,
0xa6, 0xe4, 0xe2, 0x54, 0x4a, 0x12, 0x29, 0x7c, 0x78, 0x59, 0x4c, 0xe5, 0x94, 0x6c, 0xec, 0x1f,
0xf6, 0x20, 0xe8, 0x7b, 0xb2, 0x04, 0xb2, 0xc8, 0x2a, 0x8d, 0xa2, 0x98, 0x81, 0x24, 0x3e, 0x0c,
0x8e, 0x79, 0x1a, 0x8c, 0x78, 0x77, 0x4d, 0x90, 0xb8, 0x4a, 0x23, 0x03, 0x4e, 0xc6, 0x94, 0xd3,
0x15, 0x0c, 0x2f, 0x52, 0xce, 0xef, 0x57, 0xc4, 0xe6, 0x23, 0x19, 0x35, 0x31, 0x8e, 0x55, 0x82,
0x45, 0xbd, 0x28, 0x1c, 0x5e, 0x48, 0xae, 0x05, 0x01, 0x3d, 0x0d, 0x87, 0x17, 0xa8, 0xd8, 0x07,
0xa1, 0x59, 0x44, 0xc8, 0xb9, 0xb6, 0x02, 0xa9, 0xd0, 0xbb, 0xd0, 0x1a, 0x4f, 0x8e, 0x86, 0x41,
0x5f, 0x14, 0xa9, 0x89, 0x5a, 0x04, 0x44, 0x05, 0xf0, 0x5c, 0x29, 0x56, 0x4a, 0x94, 0xa8, 0x53,
0x89, 0x96, 0xc4, 0xb0, 0x88, 0xf3, 0x00, 0x56, 0xec, 0x0e, 0x4a, 0x81, 0x7e, 0x17, 0x1a, 0x92,
0xff, 0x95, 0xa1, 0x60, 0xc1, 0x30, 0xdf, 0xe2, 0x31, 0x48, 0xe7, 0x3b, 0xff, 0xa2, 0x0e, 0xcb,
0x12, 0xdd, 0x1a, 0x46, 0x09, 0x3f, 0x9c, 0x8c, 0x46, 0x7e, 0x5c, 0x22, 0x58, 0x2a, 0x6f, 0x10,
0x2c, 0xd5, 0xa2, 0x60, 0xb9, 0x6e, 0x9d, 0x2f, 0x85, 0x64, 0x32, 0x10, 0x76, 0x07, 0x16, 0xfb,
0xc3, 0x28, 0x11, 0xea, 0xbe, 0x69, 0x41, 0xcc, 0xc3, 0x45, 0x61, 0x38, 0x53, 0x26, 0x0c, 0x4d,
0x41, 0x36, 0x9b, 0x13, 0x64, 0x0e, 0xb4, 0xb1, 0x52, 0xae, 0x64, 0xf3, 0x9c, 0x3c, 0x6c, 0x19,
0x18, 0xf6, 0x27, 0x2f, 0x36, 0x84, 0x8c, 0x5a, 0x2c, 0x13, 0x1a, 0xc1, 0x88, 0x93, 0xec, 0x37,
0x4a, 0x37, 0xa5, 0xd0, 0x28, 0x66, 0xb1, 0x87, 0x00, 0xa2, 0x2d, 0x52, 0x40, 0x80, 0x14, 0x90,
0x5b, 0xf6, 0xaa, 0x98, 0xf3, 0xbf, 0x8e, 0x89, 0x49, 0xcc, 0x49, 0x29, 0x31, 0xbe, 0x74, 0xfe,
0x46, 0x05, 0x5a, 0x46, 0x1e, 0xbb, 0x0c, 0x4b, 0x5b, 0x4f, 0x9f, 0x1e, 0xec, 0xb8, 0x9b, 0xcf,
0x1e, 0xff, 0x60, 0xc7, 0xdb, 0xda, 0x7b, 0x7a, 0xb8, 0xd3, 0xb9, 0x84, 0xf0, 0xde, 0xd3, 0xad,
0xcd, 0x3d, 0xef, 0xe1, 0x53, 0x77, 0x4b, 0xc1, 0x15, 0xb6, 0x0a, 0xcc, 0xdd, 0x79, 0xf2, 0xf4,
0xd9, 0x8e, 0x85, 0x57, 0x59, 0x07, 0xda, 0x0f, 0xdc, 0x9d, 0xcd, 0xad, 0x5d, 0x89, 0xd4, 0xd8,
0x0a, 0x74, 0x1e, 0x3e, 0xdf, 0xdf, 0x7e, 0xbc, 0xff, 0xc8, 0xdb, 0xda, 0xdc, 0xdf, 0xda, 0xd9,
0xdb, 0xd9, 0xee, 0xd4, 0xd9, 0x3c, 0x34, 0x37, 0x1f, 0x6c, 0xee, 0x6f, 0x3f, 0xdd, 0xdf, 0xd9,
0xee, 0xcc, 0x38, 0x7f, 0x5a, 0x81, 0xcb, 0xd4, 0xeb, 0x41, 0x9e, 0x49, 0x6e, 0x40, 0xab, 0x1f,
0x45, 0x63, 0x54, 0xfc, 0xb3, 0xad, 0xcd, 0x84, 0x90, 0x01, 0x84, 0x50, 0x38, 0x8e, 0xe2, 0x3e,
0x97, 0x3c, 0x02, 0x04, 0x3d, 0x44, 0x04, 0x19, 0x40, 0x2e, 0xaf, 0x28, 0x21, 0x58, 0xa4, 0x25,
0x30, 0x51, 0x64, 0x15, 0x66, 0x8f, 0x62, 0xee, 0xf7, 0x4f, 0x25, 0x77, 0xc8, 0x14, 0x7b, 0x3f,
0x3b, 0x99, 0xf6, 0x71, 0xf6, 0x87, 0x7c, 0x40, 0x14, 0xd3, 0x70, 0x17, 0x25, 0xbe, 0x25, 0x61,
0x94, 0x82, 0xfe, 0x91, 0x1f, 0x0e, 0xa2, 0x90, 0x0f, 0xa4, 0xda, 0x9b, 0x01, 0xce, 0x01, 0xac,
0xe6, 0xc7, 0x27, 0x79, 0xec, 0x23, 0x83, 0xc7, 0x84, 0x16, 0xda, 0x9b, 0xbe, 0x9a, 0x06, 0xbf,
0xfd, 0xe7, 0x2a, 0xd4, 0x51, 0x29, 0x99, 0xae, 0xc0, 0x98, 0x7a, 0x66, 0xad, 0xe0, 0x6e, 0xa0,
0xc3, 0xae, 0xd8, 0xa2, 0xa4, 0xa1, 0x25, 0x43, 0xb2, 0xfc, 0x98, 0xf7, 0xcf, 0xa4, 0xa9, 0xc5,
0x40, 0x90, 0x41, 0xf0, 0x10, 0x40, 0x5f, 0x4b, 0x06, 0x51, 0x69, 0x95, 0x47, 0x5f, 0xce, 0x65,
0x79, 0xf4, 0x5d, 0x17, 0xe6, 0x82, 0xf0, 0x28, 0x9a, 0x84, 0x03, 0x62, 0x88, 0x86, 0xab, 0x92,
0xe4, 0xe0, 0x20, 0x46, 0x45, 0xf9, 0x29, 0xc8, 0x3f, 0x03, 0xd8, 0x06, 0x34, 0x93, 0x8b, 0xb0,
0x6f, 0xd2, 0xfc, 0x8a, 0x9c, 0x25, 0x9c, 0x83, 0xf5, 0xc3, 0x8b, 0xb0, 0x4f, 0x14, 0x9e, 0x15,
0x73, 0x7e, 0x0b, 0x1a, 0x0a, 0x46, 0xb2, 0x7c, 0xbe, 0xff, 0xf9, 0xfe, 0xd3, 0x17, 0xfb, 0xde,
0xe1, 0x0f, 0xf7, 0xb7, 0x3a, 0x97, 0xd8, 0x22, 0xb4, 0x36, 0xb7, 0x88, 0xd2, 0x09, 0xa8, 0x60,
0x91, 0x83, 0xcd, 0xc3, 0x43, 0x8d, 0x54, 0x1d, 0x86, 0x07, 0xf9, 0x84, 0x34, 0x3f, 0x6d, 0xc0,
0xff, 0x08, 0x96, 0x0c, 0x2c, 0x3b, 0x45, 0x8c, 0x11, 0xc8, 0x9d, 0x22, 0x48, 0x65, 0x14, 0x39,
0x4e, 0x07, 0x16, 0x1e, 0xf1, 0xf4, 0x71, 0x78, 0x1c, 0xa9, 0x9a, 0xfe, 0x7b, 0x1d, 0x16, 0x35,
0x24, 0x2b, 0xba, 0x03, 0x8b, 0xc1, 0x80, 0x87, 0x69, 0x90, 0x5e, 0x78, 0x96, 0xbd, 0x20, 0x0f,
0xa3, 0xaa, 0xed, 0x0f, 0x03, 0x5f, 0xf9, 0x91, 0x44, 0x02, 0xcf, 0xcf, 0xa8, 0x03, 0x98, 0x76,
0x1b, 0xa2, 0x2b, 0x61, 0xa6, 0x28, 0xcd, 0x43, 0x09, 0x84, 0xb8, 0xdc, 0x66, 0xf4, 0x27, 0x42,
0xe5, 0x2c, 0xcb, 0xc2, 0xa5, 0x12, 0x35, 0xe1, 0x90, 0x67, 0x84, 0x9e, 0xa0, 0x81, 0x82, 0xa3,
0x66, 0x56, 0xc8, 0xc7, 0xbc, 0xa3, 0xc6, 0x70, 0xf6, 0x34, 0x0a, 0xce, 0x1e, 0x94, 0x9f, 0x17,
0x61, 0x9f, 0x0f, 0xbc, 0x34, 0xf2, 0x48, 0xce, 0x13, 0x49, 0x34, 0xdc, 0x3c, 0x8c, 0xfb, 0x46,
0xca, 0x93, 0x34, 0xe4, 0xc2, 0xe2, 0xdd, 0x20, 0x2b, 0xa8, 0x82, 0xf0, 0x7c, 0x30, 0x89, 0x83,
0xa4, 0xdb, 0x26, 0x37, 0x0e, 0xfd, 0x66, 0xdf, 0x85, 0xcb, 0x47, 0x3c, 0x49, 0xbd, 0x53, 0xee,
0x0f, 0x78, 0x4c, 0xe4, 0x25, 0xfc, 0x45, 0x42, 0xe5, 0x2a, 0xcf, 0x44, 0xc2, 0x3d, 0xe3, 0x71,
0x12, 0x44, 0x21, 0x29, 0x5b, 0x4d, 0x57, 0x25, 0xb1, 0x3e, 0x1c, 0xbc, 0xde, 0xa8, 0xf5, 0x0c,
0x2e, 0xd2, 0xc0, 0xcb, 0x33, 0xd9, 0x4d, 0x98, 0xa5, 0x01, 0x24, 0xdd, 0x0e, 0xd1, 0x4c, 0x3b,
0xe3, 0xf9, 0x20, 0x74, 0x65, 0x1e, 0xae, 0x72, 0x3f, 0x1a, 0x46, 0x31, 0x69, 0x5c, 0x4d, 0x57,
0x24, 0xec, 0xd9, 0x39, 0x89, 0xfd, 0xf1, 0xa9, 0xd4, 0xba, 0xf2, 0xf0, 0x67, 0xf5, 0x46, 0xab,
0xd3, 0x76, 0xfe, 0x3f, 0x98, 0xa1, 0x6a, 0xa9, 0x3a, 0x9a, 0xcc, 0x8a, 0xac, 0x8e, 0xd0, 0x2e,
0xcc, 0x85, 0x3c, 0x3d, 0x8f, 0xe2, 0x97, 0xca, 0x29, 0x29, 0x93, 0xce, 0xcf, 0xe8, 0x84, 0xa6,
0x9d, 0x74, 0xcf, 0x49, 0xb5, 0xc4, 0x73, 0xb6, 0x58, 0xaa, 0xe4, 0xd4, 0x97, 0x87, 0xc6, 0x06,
0x01, 0x87, 0xa7, 0x3e, 0xca, 0x5a, 0x6b, 0xf5, 0xc5, 0x39, 0xbc, 0x45, 0xd8, 0xae, 0x58, 0xfc,
0x9b, 0xb0, 0xa0, 0xdc, 0x7f, 0x89, 0x37, 0xe4, 0xc7, 0xa9, 0xb2, 0xa2, 0x85, 0x93, 0x11, 0x1d,
0xd6, 0xf7, 0xf8, 0x71, 0xea, 0xec, 0xc3, 0x92, 0x94, 0x7f, 0x4f, 0xc7, 0x5c, 0x35, 0xfd, 0x1b,
0x65, 0xba, 0x44, 0x6b, 0x63, 0xd9, 0x16, 0x98, 0xc2, 0xe1, 0x69, 0x97, 0x74, 0x5c, 0x60, 0xa6,
0x3c, 0x95, 0x15, 0xca, 0xcd, 0x5c, 0xd9, 0x09, 0xe5, 0x70, 0x2c, 0x0c, 0xe7, 0x27, 0x99, 0xf4,
0xfb, 0xca, 0x69, 0xdb, 0x70, 0x55, 0xd2, 0xf9, 0xf7, 0x15, 0x58, 0xa6, 0xda, 0x94, 0x36, 0x24,
0xf7, 0xac, 0x8f, 0xbf, 0x46, 0x37, 0x95, 0x95, 0x56, 0xd8, 0x26, 0x57, 0x60, 0xc6, 0xdc, 0xc5,
0x44, 0xe2, 0xeb, 0xdb, 0x64, 0xea, 0x05, 0x9b, 0xcc, 0x5d, 0xe8, 0x0c, 0xf8, 0x30, 0x20, 0xc7,
0xbd, 0xda, 0x13, 0x84, 0xea, 0x53, 0xc0, 0x9d, 0xbf, 0x53, 0x81, 0x25, 0xb1, 0xe9, 0x90, 0x66,
0x2e, 0xa7, 0xea, 0xff, 0x87, 0x79, 0xa1, 0x3d, 0x48, 0x09, 0x22, 0x07, 0x95, 0x89, 0x61, 0x42,
0x45, 0xe1, 0xdd, 0x4b, 0xae, 0x5d, 0x98, 0x7d, 0x4a, 0x1a, 0x5c, 0xe8, 0x11, 0x5a, 0x12, 0x0a,
0x60, 0xaf, 0xcb, 0xee, 0x25, 0xd7, 0x28, 0xfe, 0xa0, 0x81, 0x8a, 0x35, 0xe2, 0xce, 0x23, 0x98,
0xb7, 0x1a, 0xb2, 0x6c, 0x47, 0x6d, 0x61, 0x3b, 0x2a, 0x18, 0x69, 0xab, 0x25, 0x46, 0xda, 0x7f,
0x56, 0x03, 0x86, 0x84, 0x95, 0x5b, 0xb9, 0x1b, 0xb6, 0xa7, 0x43, 0x45, 0x05, 0x64, 0x10, 0xdb,
0x00, 0x66, 0x24, 0x95, 0x07, 0xa6, 0xa6, 0x3d, 0x30, 0x25, 0xb9, 0x28, 0x96, 0xa5, 0x86, 0xa2,
0xbd, 0x1b, 0x64, 0x17, 0x10, 0xcb, 0x54, 0x9a, 0x87, 0xbb, 0x28, 0xb9, 0x3a, 0xf0, 0x04, 0x23,
0xcf, 0xd2, 0x2a, 0x9d, 0xa7, 0x87, 0xd9, 0x37, 0xd2, 0xc3, 0x5c, 0x81, 0x1e, 0x8c, 0xd3, 0x5c,
0xc3, 0x3e, 0xcd, 0xdd, 0x84, 0x79, 0xe5, 0xd1, 0x10, 0x4e, 0x59, 0x79, 0x74, 0xb6, 0x40, 0xa4,
0x27, 0x75, 0xa0, 0xd2, 0x47, 0x46, 0xe1, 0x72, 0x2c, 0xe0, 0xb8, 0x5f, 0x64, 0x56, 0xbb, 0x16,
0x75, 0x36, 0x03, 0xe8, 0xfc, 0x85, 0x54, 0xe2, 0x4d, 0x42, 0x19, 0x11, 0xc0, 0x07, 0x74, 0x68,
0xc6, 0xf3, 0x57, 0x3e, 0xc3, 0xf9, 0x9b, 0x15, 0xe8, 0xe0, 0xba, 0x59, 0xa4, 0xf9, 0x09, 0x10,
0x17, 0xbd, 0x25, 0x65, 0x5a, 0x65, 0xd9, 0xc7, 0xd0, 0xa4, 0x74, 0x34, 0xe6, 0xa1, 0xa4, 0xcb,
0xae, 0x4d, 0x97, 0x99, 0xfc, 0xd9, 0xbd, 0xe4, 0x66, 0x85, 0x0d, 0xaa, 0xfc, 0xb7, 0x15, 0x68,
0xc9, 0x56, 0x7e, 0x69, 0xab, 0x50, 0xcf, 0x08, 0xe1, 0x10, 0xca, 0x5a, 0x16, 0xb1, 0x71, 0x07,
0x16, 0x47, 0x7e, 0x3a, 0x89, 0x71, 0xff, 0xb7, 0x2c, 0x42, 0x79, 0x18, 0x37, 0x73, 0x12, 0xb5,
0x89, 0x97, 0x06, 0x43, 0x4f, 0xe5, 0xca, 0x60, 0x89, 0xb2, 0x2c, 0x94, 0x38, 0x49, 0xea, 0x9f,
0x70, 0xb9, 0x4f, 0x8b, 0x84, 0xd3, 0x85, 0xd5, 0x83, 0xcc, 0xcb, 0x63, 0xe8, 0xe3, 0xce, 0x3f,
0x99, 0x87, 0xb5, 0x42, 0x96, 0x0e, 0xed, 0x92, 0x66, 0x8e, 0x61, 0x30, 0x3a, 0x8a, 0xf4, 0x61,
0xa6, 0x62, 0x5a, 0x40, 0xac, 0x2c, 0x76, 0x02, 0x97, 0x95, 0x42, 0x82, 0x73, 0x9a, 0x6d, 0x9e,
0x55, 0xda, 0x15, 0x3f, 0xb4, 0x97, 0x30, 0xdf, 0xa0, 0xc2, 0x4d, 0x46, 0x2e, 0xaf, 0x8f, 0x9d,
0x42, 0x57, 0x6b, 0x3e, 0x52, 0xb8, 0x1b, 0xda, 0x11, 0xb6, 0xf5, 0xc1, 0x1b, 0xda, 0xb2, 0xd4,
0x77, 0x77, 0x6a, 0x6d, 0xec, 0x02, 0xae, 0xab, 0x3c, 0x92, 0xde, 0xc5, 0xf6, 0xea, 0x6f, 0x35,
0x36, 0x3a, 0x98, 0xd8, 0x8d, 0xbe, 0xa1, 0x62, 0xf6, 0x53, 0x58, 0x3d, 0xf7, 0x83, 0x54, 0x75,
0xcb, 0xd0, 0x45, 0x66, 0xa8, 0xc9, 0x8d, 0x37, 0x34, 0xf9, 0x42, 0x7c, 0x6c, 0x6d, 0x69, 0x53,
0x6a, 0xec, 0xfd, 0x71, 0x15, 0x16, 0xec, 0x7a, 0x90, 0x4c, 0x25, 0xef, 0x2b, 0x19, 0xa8, 0xb4,
0xd7, 0x1c, 0x5c, 0xb4, 0x09, 0x54, 0xcb, 0x6c, 0x02, 0xe6, 0x29, 0xbc, 0xf6, 0x26, 0x73, 0x62,
0xfd, 0xed, 0xcc, 0x89, 0x33, 0xa5, 0xe6, 0xc4, 0xe9, 0x56, 0xa7, 0xd9, 0x5f, 0xd6, 0xea, 0x34,
0xf7, 0x5a, 0xab, 0x53, 0xef, 0xff, 0x54, 0x80, 0x15, 0xa9, 0x97, 0x3d, 0x12, 0x66, 0x90, 0x90,
0x0f, 0xa5, 0x10, 0xfb, 0xf6, 0xdb, 0x71, 0x80, 0x5a, 0x2d, 0xf5, 0x35, 0xb2, 0xa2, 0x19, 0x5f,
0x65, 0xaa, 0x63, 0xf3, 0x6e, 0x59, 0x56, 0xce, 0xa4, 0x5a, 0x7f, 0xb3, 0x49, 0x75, 0xe6, 0xcd,
0x26, 0xd5, 0xd9, 0xbc, 0x49, 0xb5, 0xf7, 0x57, 0x2b, 0xb0, 0x5c, 0x42, 0x66, 0xbf, 0xbe, 0x81,
0x23, 0x61, 0x58, 0xd2, 0xa7, 0x2a, 0x09, 0xc3, 0x04, 0x7b, 0x7f, 0x09, 0xe6, 0x2d, 0xd6, 0xfa,
0xf5, 0xb5, 0x9f, 0xd7, 0x28, 0x05, 0x65, 0x5b, 0x58, 0xef, 0x7f, 0x56, 0x81, 0x15, 0xd9, 0xfb,
0xcf, 0xb5, 0x0f, 0xc5, 0x79, 0xaa, 0x95, 0xcc, 0xd3, 0xff, 0xd3, 0x9d, 0xe7, 0x03, 0x58, 0x92,
0x41, 0xa3, 0x86, 0xe1, 0x4b, 0x50, 0x4c, 0x31, 0x03, 0x75, 0x6a, 0xdb, 0x9e, 0xdd, 0xb0, 0x82,
0xe4, 0x8c, 0xed, 0x37, 0x67, 0xd6, 0x76, 0x7a, 0xd0, 0x95, 0x33, 0xb4, 0x73, 0xc6, 0xc3, 0xf4,
0x70, 0x72, 0x24, 0xa2, 0x26, 0x83, 0x28, 0x24, 0x35, 0xd0, 0xcc, 0x94, 0x0a, 0xc5, 0x77, 0xa1,
0x6d, 0x6e, 0x1f, 0x72, 0x39, 0x72, 0xb6, 0x4f, 0x54, 0x25, 0xcc, 0x52, 0x6c, 0x1b, 0x16, 0x48,
0x48, 0x0e, 0xf4, 0x77, 0x55, 0xfa, 0xee, 0x35, 0xf6, 0x9c, 0xdd, 0x4b, 0x6e, 0xee, 0x1b, 0xf6,
0x9b, 0xb0, 0x60, 0x1f, 0x16, 0xa5, 0x56, 0x52, 0x76, 0x7a, 0xc0, 0xcf, 0xed, 0xc2, 0x6c, 0x13,
0x3a, 0xf9, 0xd3, 0xa6, 0x8c, 0xfc, 0x99, 0x52, 0x41, 0xa1, 0x38, 0xfb, 0x58, 0x3a, 0x37, 0x67,
0xc8, 0xce, 0x72, 0xd3, 0xfe, 0xcc, 0x98, 0xa6, 0x75, 0xf1, 0xc7, 0x70, 0x77, 0xfe, 0x0e, 0x40,
0x86, 0xb1, 0x0e, 0xb4, 0x9f, 0x1e, 0xec, 0xec, 0x7b, 0x5b, 0xbb, 0x9b, 0xfb, 0xfb, 0x3b, 0x7b,
0x9d, 0x4b, 0x8c, 0xc1, 0x02, 0x99, 0x05, 0xb7, 0x35, 0x56, 0x41, 0x4c, 0x1a, 0x62, 0x14, 0x56,
0x65, 0x2b, 0xd0, 0x79, 0xbc, 0x9f, 0x43, 0x6b, 0x0f, 0x9a, 0x9a, 0x3f, 0x9c, 0x55, 0x58, 0x11,
0x41, 0xc1, 0x0f, 0x04, 0x79, 0x28, 0xed, 0xe4, 0x1f, 0x54, 0xe0, 0x72, 0x2e, 0x23, 0x0b, 0x0f,
0x13, 0x0a, 0x88, 0xad, 0x95, 0xd8, 0x20, 0x39, 0x2b, 0x94, 0xae, 0x99, 0x93, 0x20, 0xc5, 0x0c,
0xa4, 0x79, 0x43, 0x37, 0xcd, 0x71, 0x52, 0x59, 0x96, 0xb3, 0xa6, 0xa3, 0x70, 0x72, 0x1d, 0x3f,
0x16, 0xc1, 0xc6, 0x66, 0x46, 0xe6, 0x2c, 0xb6, 0xbb, 0xac, 0x92, 0x78, 0xac, 0xb0, 0x94, 0x1d,
0xbb, 0xbf, 0xa5, 0x79, 0xce, 0xff, 0xaa, 0x03, 0xfb, 0xfe, 0x84, 0xc7, 0x17, 0x14, 0xff, 0xa5,
0xad, 0xac, 0x6b, 0x79, 0x1b, 0xe2, 0xec, 0x78, 0x72, 0xf4, 0x39, 0xbf, 0x50, 0xf1, 0x9a, 0xd5,
0xb7, 0x8a, 0xd7, 0x2c, 0x8b, 0x97, 0xac, 0xbf, 0x39, 0x5e, 0x72, 0xe6, 0x4d, 0xf1, 0x92, 0xdf,
0x80, 0xf9, 0xe0, 0x24, 0x8c, 0x50, 0x1c, 0xa0, 0x0a, 0x91, 0x74, 0x67, 0x6f, 0xd4, 0xf0, 0x98,
0x2e, 0xc1, 0x7d, 0xc4, 0xd8, 0xa7, 0x59, 0x21, 0x3e, 0x38, 0xa1, 0xf8, 0x5e, 0x53, 0x40, 0xec,
0x0c, 0x4e, 0xf8, 0x5e, 0xd4, 0xf7, 0xd3, 0x28, 0xa6, 0x73, 0x9a, 0xfa, 0x18, 0xf1, 0x84, 0xdd,
0x84, 0x85, 0x24, 0x9a, 0xa0, 0x52, 0xa5, 0xa6, 0x41, 0x18, 0xa5, 0xda, 0x02, 0x3d, 0x10, 0x93,
0xb1, 0x0e, 0xcb, 0x93, 0x84, 0x7b, 0xa3, 0x20, 0x49, 0x70, 0xe3, 0xec, 0x47, 0x61, 0x1a, 0x47,
0x43, 0x69, 0x9a, 0x5a, 0x9a, 0x24, 0xfc, 0x89, 0xc8, 0xd9, 0x12, 0x19, 0xec, 0xbb, 0x59, 0x97,
0xc6, 0x7e, 0x10, 0x27, 0x5d, 0xa0, 0x2e, 0xa9, 0x91, 0x62, 0xbf, 0x0f, 0xfc, 0x20, 0xd6, 0x7d,
0xc1, 0x44, 0x92, 0x8b, 0xe3, 0x6c, 0xe5, 0xe3, 0x38, 0x7f, 0x52, 0x1e, 0xc7, 0x39, 0x4f, 0x55,
0xdf, 0x97, 0x55, 0x17, 0x97, 0xf8, 0xed, 0xc3, 0x39, 0x7f, 0x3d, 0x01, 0x9a, 0x32, 0xa6, 0x70,
0x1d, 0x1a, 0x6a, 0x98, 0x78, 0x56, 0x3f, 0x8e, 0xa3, 0x91, 0x3a, 0xab, 0xe3, 0x6f, 0xb6, 0x00,
0xd5, 0x34, 0x92, 0x1f, 0x57, 0xd3, 0xc8, 0xf9, 0x5d, 0x68, 0x19, 0x2b, 0xc5, 0xde, 0x13, 0x66,
0x03, 0xd4, 0x09, 0xe5, 0x21, 0x5f, 0x78, 0x86, 0x9a, 0x12, 0x7d, 0x3c, 0x60, 0xdf, 0x82, 0xa5,
0x41, 0x10, 0x73, 0x0a, 0x89, 0xf6, 0x62, 0x7e, 0xc6, 0xe3, 0x44, 0x99, 0x4f, 0x3a, 0x3a, 0xc3,
0x15, 0xb8, 0xe3, 0xc1, 0xb2, 0x35, 0x35, 0x5a, 0x38, 0xcc, 0x52, 0x20, 0xa4, 0xb2, 0xe0, 0xda,
0x41, 0x92, 0x32, 0x0f, 0xb7, 0x55, 0x69, 0xf9, 0xf1, 0xc6, 0x71, 0x74, 0x44, 0x8d, 0x54, 0x5c,
0x0b, 0x73, 0xfe, 0x47, 0x0d, 0x6a, 0xbb, 0xd1, 0xd8, 0xf4, 0x67, 0x55, 0x8a, 0xfe, 0x2c, 0xa9,
0xff, 0x7a, 0x5a, 0xbd, 0x95, 0x4a, 0x8a, 0x05, 0xb2, 0xbb, 0xb0, 0x80, 0x9c, 0x96, 0x46, 0xa8,
0xef, 0x9f, 0xfb, 0xb1, 0x88, 0x9a, 0xac, 0x11, 0xf9, 0xe6, 0x72, 0xd8, 0x0a, 0xd4, 0xb4, 0xda,
0x46, 0x05, 0x30, 0x89, 0x87, 0x4d, 0x8a, 0x19, 0xb8, 0x90, 0x66, 0x5a, 0x99, 0x42, 0xc1, 0x65,
0x7f, 0x2f, 0xd8, 0x59, 0x6c, 0xbe, 0x65, 0x59, 0xa8, 0x8b, 0x23, 0xc3, 0x8e, 0x32, 0xd5, 0x56,
0xa7, 0x4d, 0x07, 0x44, 0xc3, 0x76, 0x40, 0xdc, 0x80, 0x56, 0x3a, 0x3c, 0xf3, 0xc6, 0xfe, 0xc5,
0x30, 0xf2, 0x07, 0x92, 0x51, 0x4c, 0x88, 0xdd, 0x07, 0x18, 0x8d, 0xc7, 0x92, 0x8a, 0xc9, 0x82,
0xd0, 0xda, 0xe8, 0xc8, 0xd9, 0x7f, 0x72, 0x70, 0x20, 0xa8, 0xcf, 0x35, 0xca, 0xb0, 0x1d, 0x58,
0x28, 0x0d, 0x61, 0xbe, 0xa6, 0x3c, 0xdb, 0xd1, 0x78, 0xbd, 0x84, 0xce, 0x73, 0x1f, 0xf5, 0x7e,
0x1b, 0xd8, 0xaf, 0x18, 0x81, 0xfc, 0x02, 0x9a, 0xba, 0x87, 0x66, 0xdc, 0x2f, 0x85, 0xaf, 0xb4,
0xec, 0xb8, 0x5f, 0x8a, 0x56, 0xb9, 0x05, 0x0b, 0x62, 0xb7, 0xd1, 0xf2, 0x53, 0x84, 0x1c, 0xe4,
0x50, 0xe7, 0xcf, 0x2a, 0x30, 0x43, 0x94, 0x87, 0xea, 0x97, 0xc8, 0xd3, 0x8e, 0x40, 0xea, 0xda,
0xbc, 0x9b, 0x87, 0x99, 0x63, 0x5d, 0x6d, 0xa8, 0x6a, 0x32, 0x30, 0xaf, 0x37, 0xdc, 0x80, 0xa6,
0x6e, 0xc9, 0x20, 0xa5, 0x0c, 0x64, 0xd7, 0xa1, 0x7e, 0x1a, 0x8d, 0xd5, 0x09, 0x15, 0xb2, 0x19,
0x75, 0x09, 0xcf, 0xfa, 0x83, 0xf5, 0x89, 0x21, 0x88, 0x53, 0x40, 0x1e, 0x2e, 0x19, 0xeb, 0x6c,
0xe9, 0x58, 0x9f, 0xc3, 0x22, 0xca, 0x07, 0xc3, 0x31, 0x32, 0x7d, 0x2f, 0x7a, 0x1f, 0x55, 0x9b,
0xfe, 0x70, 0x32, 0xe0, 0xa6, 0x9d, 0x80, 0x0c, 0xdf, 0x12, 0x57, 0x1a, 0xb2, 0xf3, 0x4f, 0x2b,
0x42, 0xee, 0x60, 0xbd, 0xec, 0x0e, 0xd4, 0x71, 0xdb, 0xc8, 0x99, 0x85, 0x74, 0x48, 0x11, 0x96,
0x73, 0xa9, 0x04, 0xae, 0x22, 0x99, 0xa6, 0xcd, 0xda, 0x85, 0x61, 0x3a, 0x3b, 0x64, 0xeb, 0x91,
0xe5, 0xce, 0xa6, 0x39, 0x94, 0xad, 0x1b, 0x7e, 0xbd, 0xba, 0xb5, 0x15, 0x29, 0x4d, 0x6a, 0x70,
0xc2, 0x0d, 0x7f, 0xde, 0x1f, 0x56, 0x60, 0xde, 0xea, 0x13, 0x72, 0x0f, 0x05, 0xfe, 0x0b, 0x2b,
0x93, 0x5c, 0x79, 0x13, 0x32, 0x39, 0xaf, 0x6a, 0x73, 0x9e, 0xf6, 0x0f, 0xd5, 0x4c, 0xff, 0xd0,
0x7d, 0x68, 0x66, 0x77, 0x5b, 0xec, 0x4e, 0x61, 0x8b, 0x2a, 0xb8, 0x2a, 0x2b, 0x94, 0x79, 0x20,
0x66, 0x0c, 0x0f, 0x84, 0xf3, 0x29, 0xb4, 0x8c, 0xf2, 0xa6, 0x07, 0xa1, 0x62, 0x79, 0x10, 0x74,
0xe4, 0x61, 0x35, 0x8b, 0x3c, 0x74, 0x7e, 0x5e, 0x85, 0x79, 0x24, 0xef, 0x20, 0x3c, 0x39, 0x88,
0x86, 0x41, 0xff, 0x82, 0xc8, 0x4a, 0x51, 0xb2, 0x54, 0x1b, 0x14, 0x99, 0xdb, 0x30, 0x8a, 0x21,
0x1d, 0x6e, 0x2d, 0x64, 0xa6, 0x4e, 0xa3, 0x50, 0x45, 0x91, 0x74, 0xe4, 0x27, 0xdc, 0xb8, 0xec,
0xe2, 0xda, 0x20, 0x8a, 0x3e, 0x04, 0x28, 0x8e, 0x74, 0x14, 0x0c, 0x87, 0x81, 0x28, 0x2b, 0xce,
0xbb, 0x65, 0x59, 0xd8, 0xe6, 0x20, 0x48, 0xfc, 0xa3, 0xcc, 0xf7, 0xab, 0xd3, 0x64, 0x2c, 0xf5,
0x5f, 0x19, 0xc6, 0x52, 0x11, 0x78, 0x6e, 0x83, 0xf9, 0x85, 0x9c, 0x2b, 0x2c, 0xa4, 0xf3, 0xaf,
0xaa, 0xd0, 0x32, 0xc8, 0x02, 0xd9, 0xb9, 0x74, 0xdf, 0x33, 0x50, 0x19, 0x14, 0x11, 0x5a, 0x16,
0x14, 0x03, 0x61, 0x37, 0xed, 0x56, 0xc9, 0xc9, 0x42, 0x0c, 0x6f, 0x91, 0xd0, 0x55, 0x68, 0x22,
0xe9, 0x7f, 0x48, 0xe6, 0x1a, 0x79, 0xb1, 0x4c, 0x03, 0x2a, 0x77, 0x83, 0x72, 0x67, 0xb2, 0x5c,
0x02, 0x5e, 0x1b, 0x26, 0xf1, 0x31, 0xb4, 0x65, 0x35, 0xb4, 0xc6, 0x34, 0xe8, 0x8c, 0xf9, 0xac,
0xf5, 0x77, 0xad, 0x92, 0xea, 0xcb, 0x0d, 0xf5, 0x65, 0xe3, 0x4d, 0x5f, 0xaa, 0x92, 0xce, 0x23,
0x1d, 0x81, 0xf2, 0x28, 0xf6, 0xc7, 0xa7, 0x4a, 0xa0, 0xdc, 0x87, 0x65, 0x25, 0x37, 0x26, 0xa1,
0x1f, 0x86, 0xd1, 0x24, 0xec, 0x73, 0x15, 0xa4, 0x58, 0x96, 0xe5, 0x0c, 0x74, 0x48, 0x3b, 0x55,
0xc4, 0xee, 0xc2, 0x8c, 0x50, 0x3c, 0x85, 0x7a, 0x50, 0x2e, 0x42, 0x44, 0x11, 0x76, 0x07, 0x66,
0x84, 0xfe, 0x59, 0x9d, 0xca, 0xf4, 0xa2, 0x80, 0xb3, 0x0e, 0x8b, 0x14, 0x43, 0x6f, 0xc8, 0xbe,
0x77, 0xca, 0xd4, 0x86, 0xd9, 0xbe, 0x88, 0xb4, 0x5f, 0x01, 0xb6, 0x2f, 0xf8, 0xca, 0xf4, 0x23,
0xff, 0x59, 0x0d, 0x5a, 0x06, 0x8c, 0xf2, 0x89, 0x9c, 0x7f, 0xde, 0x20, 0xf0, 0x47, 0x3c, 0xe5,
0xb1, 0xe4, 0xa5, 0x1c, 0x8a, 0xe5, 0xfc, 0xb3, 0x13, 0x2f, 0x9a, 0xa4, 0xde, 0x80, 0x9f, 0xc4,
0x9c, 0x4b, 0x7d, 0x26, 0x87, 0x62, 0x39, 0xa4, 0x66, 0xa3, 0x9c, 0x70, 0xd7, 0xe5, 0x50, 0xe5,
0x15, 0x16, 0xf3, 0x54, 0xcf, 0xbc, 0xc2, 0x62, 0x56, 0xf2, 0x92, 0x75, 0xa6, 0x44, 0xb2, 0x7e,
0x04, 0xab, 0x42, 0x86, 0x4a, 0xe9, 0xe1, 0xe5, 0x88, 0x6b, 0x4a, 0x2e, 0xbb, 0x0b, 0x1d, 0xec,
0xb3, 0x62, 0x8d, 0x24, 0xf8, 0x99, 0xe0, 0xb1, 0x8a, 0x5b, 0xc0, 0xb1, 0x2c, 0xb9, 0x1e, 0xcc,
0xb2, 0x22, 0x34, 0xa7, 0x80, 0x53, 0x59, 0xff, 0x95, 0x5d, 0xb6, 0x29, 0xcb, 0xe6, 0x70, 0xf6,
0x31, 0xac, 0x8d, 0xf8, 0x20, 0xf0, 0xed, 0x2a, 0xbc, 0x6c, 0x93, 0x9f, 0x96, 0x8d, 0xad, 0xe0,
0x2c, 0xfc, 0x2c, 0x1a, 0x1d, 0x05, 0x62, 0x63, 0x13, 0x4e, 0x92, 0xba, 0x5b, 0xc0, 0x9d, 0x79,
0x68, 0x1d, 0xa6, 0xd1, 0x58, 0x2d, 0xfd, 0x02, 0xb4, 0x45, 0x52, 0x86, 0xa5, 0xbe, 0x03, 0x57,
0x88, 0x5e, 0x9f, 0x45, 0xe3, 0x68, 0x18, 0x9d, 0x5c, 0x58, 0xa6, 0x8e, 0x7f, 0x53, 0x81, 0x65,
0x2b, 0x37, 0xb3, 0x75, 0x90, 0x5d, 0x56, 0xc5, 0x12, 0x0a, 0x12, 0x5f, 0x32, 0xb6, 0x05, 0x51,
0x50, 0xb8, 0xc1, 0x9e, 0xcb, 0xf0, 0xc2, 0xcd, 0xec, 0x82, 0x8c, 0xfa, 0x50, 0xd0, 0x7b, 0xb7,
0x48, 0xef, 0xf2, 0x7b, 0x75, 0x75, 0x46, 0x55, 0xf1, 0x9b, 0x32, 0x90, 0x6a, 0x20, 0x07, 0x5d,
0xb3, 0x83, 0x5f, 0x4c, 0xd3, 0x98, 0xea, 0x41, 0x5f, 0x83, 0x89, 0xf3, 0x8b, 0x0a, 0x40, 0xd6,
0x3b, 0x0a, 0xbf, 0xd1, 0x5b, 0x9b, 0xb8, 0x4b, 0x6e, 0x6c, 0x63, 0xef, 0x41, 0x5b, 0x47, 0x50,
0x64, 0xbb, 0x65, 0x4b, 0x61, 0xa8, 0x5d, 0xdc, 0x86, 0xc5, 0x93, 0x61, 0x74, 0x44, 0x5a, 0x0c,
0xc5, 0x39, 0x27, 0x32, 0x38, 0x77, 0x41, 0xc0, 0x0f, 0x25, 0x9a, 0x6d, 0xad, 0x75, 0x73, 0x6b,
0x2d, 0xdf, 0x28, 0x7f, 0x5e, 0xd5, 0x6e, 0xec, 0x6c, 0x26, 0x5e, 0xcb, 0xe5, 0x6c, 0xa3, 0x20,
0xd6, 0xa7, 0x78, 0x8e, 0xe9, 0x0c, 0x74, 0xf0, 0x46, 0x4b, 0xf9, 0xa7, 0xb0, 0x10, 0x0b, 0x99,
0xa9, 0x04, 0x6a, 0xfd, 0x35, 0x02, 0x75, 0x3e, 0xb6, 0x76, 0xe6, 0xf7, 0xa1, 0xe3, 0x0f, 0xce,
0x78, 0x9c, 0x06, 0x64, 0x39, 0x24, 0x35, 0x4a, 0x0c, 0x70, 0xd1, 0xc0, 0x49, 0x5b, 0xb9, 0x0d,
0x8b, 0x32, 0x54, 0x5a, 0x97, 0x94, 0xb7, 0x2a, 0x33, 0x18, 0x0b, 0x3a, 0xff, 0x48, 0x79, 0xcd,
0xed, 0xd5, 0x7d, 0xfd, 0xac, 0x98, 0x23, 0xac, 0xe6, 0x46, 0xf8, 0x0d, 0xe9, 0x99, 0x1e, 0x28,
0x13, 0x65, 0xcd, 0x08, 0xc9, 0x1b, 0xc8, 0xa8, 0x03, 0x7b, 0x5a, 0xeb, 0x6f, 0x33, 0xad, 0xce,
0x7f, 0xa8, 0xc0, 0xdc, 0x6e, 0x34, 0xde, 0xc5, 0x29, 0x46, 0x1d, 0x07, 0xd9, 0x44, 0xdf, 0x53,
0x50, 0xc9, 0x37, 0x84, 0x2e, 0x96, 0x6a, 0x25, 0xf3, 0x79, 0xad, 0xe4, 0xb7, 0xe1, 0x1d, 0x32,
0x92, 0xc7, 0xd1, 0x38, 0x8a, 0x91, 0x5d, 0xfd, 0xa1, 0x50, 0x41, 0xa2, 0x30, 0x3d, 0x55, 0xe2,
0xf4, 0x75, 0x45, 0xc8, 0x72, 0x35, 0x4c, 0xcf, 0x3c, 0x71, 0xc2, 0x93, 0x5a, 0x94, 0x90, 0xb2,
0xc5, 0x0c, 0xe7, 0x37, 0xa0, 0x49, 0x27, 0x0c, 0x1a, 0xda, 0x07, 0xd0, 0x3c, 0x8d, 0xc6, 0xde,
0x69, 0x10, 0xa6, 0x8a, 0xfd, 0x17, 0x32, 0xd5, 0x7f, 0x97, 0x26, 0x45, 0x17, 0x70, 0xfe, 0x64,
0x16, 0xe6, 0x1e, 0x87, 0x67, 0x51, 0xd0, 0x27, 0xef, 0xfb, 0x88, 0x8f, 0x22, 0x75, 0x73, 0x03,
0x7f, 0xd3, 0xe5, 0xe8, 0xec, 0x6e, 0xa5, 0x60, 0x21, 0x03, 0xc1, 0x33, 0x69, 0x6c, 0xde, 0x8d,
0x94, 0xa9, 0xec, 0xa0, 0x35, 0x63, 0xdc, 0x7d, 0xc1, 0xda, 0xc4, 0x9d, 0x3d, 0x9a, 0x3b, 0x11,
0x71, 0x6b, 0x20, 0x38, 0xf9, 0x32, 0xa4, 0x52, 0xc4, 0xdc, 0x89, 0xf8, 0x1f, 0x09, 0xd1, 0x39,
0x3b, 0xe6, 0xc2, 0xcd, 0xa1, 0x55, 0x2f, 0x3c, 0x67, 0x9b, 0x20, 0xaa, 0x67, 0xe2, 0x03, 0x51,
0x46, 0x6c, 0x07, 0x26, 0x84, 0x0a, 0x6a, 0xfe, 0xc6, 0xb0, 0xb8, 0xf5, 0x9d, 0x87, 0x45, 0x9c,
0x85, 0x16, 0xba, 0x62, 0x9c, 0x20, 0xee, 0x97, 0xe6, 0x71, 0xe3, 0x74, 0x2e, 0x62, 0xca, 0xd5,
0xe9, 0x1c, 0x49, 0xc6, 0x1f, 0x0e, 0x8f, 0xfc, 0xfe, 0x4b, 0x71, 0x98, 0x6c, 0x0b, 0xef, 0x98,
0x05, 0x52, 0x60, 0x64, 0xb6, 0xae, 0x14, 0xbd, 0x54, 0x77, 0x4d, 0x88, 0x6d, 0x40, 0x8b, 0x2c,
0x17, 0x72, 0x65, 0x17, 0x68, 0x65, 0x3b, 0xa6, 0x69, 0x83, 0xd6, 0xd6, 0x2c, 0x64, 0xc6, 0x05,
0x2c, 0x16, 0xa2, 0xbc, 0xfd, 0xc1, 0x40, 0x86, 0x54, 0x74, 0xc4, 0xfd, 0x4a, 0x0d, 0x90, 0x6d,
0x44, 0x4c, 0x98, 0x28, 0xb0, 0x44, 0x05, 0x2c, 0x8c, 0x5d, 0x17, 0x96, 0xc3, 0xb1, 0x1f, 0x0c,
0x28, 0x60, 0x49, 0x1c, 0x3f, 0x35, 0x86, 0x75, 0xa8, 0xdf, 0xb4, 0x71, 0x2e, 0xd3, 0xac, 0x58,
0x18, 0xce, 0x8d, 0x4e, 0x8f, 0xb2, 0xb0, 0x70, 0x1b, 0x64, 0x1f, 0x92, 0x53, 0x3b, 0xe5, 0x14,
0xfb, 0xbd, 0xb0, 0xf1, 0x8e, 0x1c, 0xb3, 0x24, 0x5b, 0xf5, 0xf7, 0x10, 0x8b, 0xb8, 0xa2, 0x24,
0xaa, 0x6d, 0xc2, 0xaf, 0xb0, 0x6a, 0xa9, 0x6d, 0xb2, 0x28, 0xf9, 0x15, 0x44, 0x01, 0x67, 0x13,
0xda, 0x66, 0x05, 0xac, 0x01, 0xf5, 0xa7, 0x07, 0x3b, 0xfb, 0x9d, 0x4b, 0xac, 0x05, 0x73, 0x87,
0x3b, 0xcf, 0x9e, 0xed, 0xed, 0x6c, 0x77, 0x2a, 0xac, 0x0d, 0x0d, 0x1d, 0xef, 0x5a, 0xc5, 0xd4,
0xe6, 0xd6, 0xd6, 0xce, 0xc1, 0xb3, 0x9d, 0xed, 0x4e, 0xed, 0xb3, 0x7a, 0xa3, 0xda, 0xa9, 0x39,
0x7f, 0x54, 0x83, 0x96, 0x51, 0xff, 0x1b, 0x6c, 0x46, 0xd7, 0x01, 0xe8, 0x44, 0x91, 0xc5, 0xb4,
0xd4, 0x5d, 0x03, 0x41, 0x09, 0xa9, 0xcf, 0xda, 0x35, 0x71, 0xd9, 0x54, 0xa5, 0x69, 0xd6, 0xe8,
0x56, 0xa7, 0xe9, 0xc4, 0x99, 0x71, 0x6d, 0x10, 0x29, 0x4a, 0x02, 0x14, 0x84, 0x29, 0xf8, 0xd0,
0x84, 0x70, 0x85, 0x62, 0x9e, 0x44, 0xc3, 0x33, 0x2e, 0x8a, 0x08, 0xbd, 0xcc, 0xc2, 0xb0, 0x2d,
0x29, 0x6a, 0x8c, 0x00, 0xe9, 0x19, 0xd7, 0x06, 0xd9, 0xb7, 0xd5, 0x0a, 0x35, 0x68, 0x85, 0xd6,
0x8a, 0xd3, 0x6d, 0xad, 0xce, 0x93, 0x82, 0xd1, 0xa7, 0x49, 0xcb, 0xf4, 0xcd, 0xe2, 0x77, 0x7f,
0x3e, 0xc6, 0x9f, 0x14, 0xd8, 0xe6, 0x60, 0x20, 0x9b, 0x35, 0xef, 0xd2, 0xc6, 0xe6, 0xe5, 0x6d,
0x25, 0xdb, 0x4a, 0xe4, 0x47, 0xb5, 0x5c, 0x7e, 0xbc, 0x96, 0xcb, 0x9c, 0xc7, 0xd0, 0x3a, 0x30,
0xae, 0x83, 0x3b, 0x28, 0x6a, 0xd5, 0x45, 0x70, 0x21, 0x84, 0x85, 0xd1, 0x27, 0x43, 0x8d, 0x2e,
0x55, 0xcd, 0x2e, 0x39, 0xff, 0xb0, 0x22, 0x6e, 0xd8, 0xe9, 0x21, 0x88, 0xf6, 0x1d, 0x68, 0x6b,
0xbf, 0x41, 0x76, 0x29, 0xc1, 0xc2, 0xb0, 0x0c, 0x75, 0xc7, 0x8b, 0x8e, 0x8f, 0x13, 0xae, 0xc2,
0x87, 0x2d, 0x4c, 0x69, 0xb5, 0xa8, 0x27, 0x07, 0xa2, 0x85, 0x44, 0x86, 0x11, 0x17, 0x70, 0xa4,
0x5c, 0x69, 0xb7, 0x55, 0x81, 0xd3, 0x3a, 0xad, 0xef, 0x4e, 0xe4, 0x67, 0xfa, 0x2e, 0x34, 0x74,
0xbd, 0xf6, 0x96, 0xa5, 0x4a, 0xea, 0x7c, 0xdc, 0x1a, 0xe9, 0xc4, 0x6b, 0x75, 0x5a, 0x30, 0x50,
0x31, 0x83, 0xad, 0x03, 0x3b, 0x0e, 0xe2, 0x7c, 0x71, 0xc1, 0x51, 0x25, 0x39, 0xce, 0x0b, 0x58,
0x56, 0xe2, 0xc0, 0x50, 0xb7, 0xed, 0x85, 0xac, 0xbc, 0x49, 0x5c, 0x56, 0x8b, 0xe2, 0xd2, 0xf9,
0x97, 0x75, 0x98, 0x93, 0xab, 0x5d, 0x78, 0x56, 0x40, 0x6c, 0xb8, 0x16, 0xc6, 0xba, 0xd6, 0xe5,
0x51, 0x22, 0x04, 0xb9, 0x89, 0xde, 0xc9, 0x6f, 0x83, 0x99, 0xf1, 0x2f, 0xb7, 0x15, 0xae, 0x42,
0x7d, 0xec, 0xa7, 0xa7, 0x64, 0x1b, 0x12, 0xb4, 0x44, 0x69, 0x65, 0x5e, 0x9e, 0xb1, 0xcd, 0xcb,
0x65, 0x8f, 0x29, 0x08, 0x9d, 0xaf, 0xf8, 0x98, 0xc2, 0x55, 0x68, 0x8a, 0x6d, 0x3b, 0xb3, 0x20,
0x67, 0x40, 0x6e, 0x9b, 0x6f, 0x14, 0xb6, 0xf9, 0xb7, 0xdf, 0x80, 0xbf, 0x0b, 0xb3, 0xe2, 0x42,
0x91, 0x0c, 0x13, 0xbf, 0xaa, 0x1c, 0xc4, 0xa2, 0x9c, 0xfa, 0x2b, 0xe2, 0xc7, 0x5c, 0x59, 0xd6,
0xbc, 0x92, 0xdc, 0xb2, 0xaf, 0x24, 0x9b, 0x86, 0xef, 0x76, 0xce, 0xf0, 0x7d, 0x17, 0x3a, 0x7a,
0xfa, 0xc8, 0x52, 0x15, 0x26, 0x32, 0x8a, 0xb8, 0x80, 0x67, 0xfb, 0xcb, 0x82, 0xb5, 0xbf, 0xa0,
0xc4, 0xda, 0x4c, 0x53, 0x3e, 0x1a, 0xa7, 0x6a, 0x7f, 0x79, 0x08, 0xf3, 0x56, 0x27, 0x71, 0x5b,
0x91, 0xc1, 0xeb, 0x9d, 0x4b, 0x6c, 0x1e, 0x9a, 0x8f, 0xf7, 0xbd, 0x87, 0x7b, 0x8f, 0x1f, 0xed,
0x3e, 0xeb, 0x54, 0x30, 0x79, 0xf8, 0x7c, 0x6b, 0x6b, 0x67, 0x67, 0x9b, 0xb6, 0x19, 0x80, 0xd9,
0x87, 0x9b, 0x8f, 0x71, 0xcb, 0xa9, 0x39, 0xff, 0xbb, 0x02, 0x2d, 0xa3, 0x7a, 0xf6, 0x3d, 0x3d,
0x33, 0xe2, 0xd6, 0xea, 0xb5, 0x62, 0x17, 0xd6, 0x95, 0xe0, 0x35, 0xa6, 0x46, 0xbf, 0x1f, 0x51,
0x9d, 0xfa, 0x7e, 0x04, 0x2e, 0x8f, 0x2f, 0x6a, 0xd0, 0xf3, 0x20, 0x8e, 0x21, 0x79, 0x58, 0xc4,
0x08, 0x65, 0xbb, 0x05, 0x96, 0x14, 0xa6, 0xb7, 0x3c, 0xec, 0x7c, 0x04, 0x90, 0xf5, 0xc6, 0x1e,
0xf6, 0x25, 0x7b, 0xd8, 0x15, 0x63, 0xd8, 0x55, 0x67, 0x5b, 0x08, 0x0c, 0x39, 0x85, 0xda, 0xc3,
0xf9, 0x6d, 0x60, 0xca, 0xd2, 0x43, 0xb1, 0x78, 0xe3, 0x21, 0x4f, 0xd5, 0x75, 0x92, 0x25, 0x99,
0xf3, 0x58, 0x67, 0xa8, 0x1b, 0x51, 0x59, 0x2d, 0x99, 0xdc, 0x91, 0x14, 0x97, 0x97, 0x3b, 0xb2,
0xa8, 0xab, 0xf3, 0x9d, 0x1e, 0x74, 0xb7, 0x39, 0xd6, 0xb6, 0x39, 0x1c, 0xe6, 0xba, 0x83, 0x47,
0xf5, 0x92, 0x3c, 0x79, 0x8e, 0xff, 0x3e, 0x5c, 0xde, 0x14, 0x37, 0x47, 0x7e, 0x5d, 0x81, 0xc5,
0x4e, 0x17, 0x56, 0xf3, 0x55, 0xca, 0xc6, 0x1e, 0xc2, 0xd2, 0x36, 0x3f, 0x9a, 0x9c, 0xec, 0xf1,
0xb3, 0xac, 0x21, 0x06, 0xf5, 0xe4, 0x34, 0x3a, 0x97, 0xf3, 0x43, 0xbf, 0xd9, 0x35, 0x80, 0x21,
0x96, 0xf1, 0x92, 0x31, 0xef, 0xab, 0x5b, 0xc1, 0x84, 0x1c, 0x8e, 0x79, 0xdf, 0xf9, 0x08, 0x98,
0x59, 0x8f, 0x9c, 0x2f, 0xd4, 0xad, 0x27, 0x47, 0x5e, 0x72, 0x91, 0xa4, 0x7c, 0xa4, 0xae, 0x3b,
0x9b, 0x90, 0x73, 0x1b, 0xda, 0x07, 0xfe, 0x85, 0xcb, 0xbf, 0x90, 0xef, 0x95, 0xac, 0xc1, 0xdc,
0xd8, 0xbf, 0x40, 0x7e, 0xd6, 0xe6, 0x7f, 0xca, 0x76, 0xfe, 0xb4, 0x06, 0xb3, 0xa2, 0x24, 0xd6,
0x3a, 0xe0, 0x49, 0x1a, 0x84, 0xc4, 0x63, 0xaa, 0x56, 0x03, 0x2a, 0x08, 0xcc, 0x6a, 0x89, 0xc0,
0x94, 0x36, 0x29, 0x75, 0xbb, 0x52, 0x92, 0xac, 0x85, 0xa1, 0xd8, 0xca, 0x6e, 0x08, 0x08, 0x4a,
0xcd, 0x80, 0x9c, 0x7f, 0x2d, 0xd3, 0xe0, 0x45, 0xff, 0xd4, 0x5e, 0x20, 0x65, 0xa2, 0x09, 0x95,
0x9e, 0x13, 0xe6, 0x54, 0x3c, 0x76, 0xee, 0x9c, 0x50, 0x38, 0x0f, 0x34, 0xde, 0xe2, 0x3c, 0x20,
0x0c, 0x55, 0xaf, 0x3b, 0x0f, 0xc0, 0xdb, 0x9c, 0x07, 0xde, 0xc6, 0xaf, 0xd5, 0x83, 0x06, 0xed,
0xe9, 0x86, 0x88, 0x54, 0x69, 0xe4, 0x17, 0x6d, 0x4e, 0x99, 0xb7, 0xf8, 0x45, 0xda, 0x53, 0x5c,
0x9d, 0xef, 0x8c, 0x60, 0x4e, 0x82, 0xa8, 0x8a, 0x1d, 0x05, 0xa9, 0xb4, 0x5c, 0xe2, 0x4f, 0xa4,
0xc8, 0xd0, 0x1f, 0xa9, 0xdb, 0xe8, 0xf4, 0x1b, 0x87, 0x4c, 0x97, 0x62, 0xbf, 0x98, 0x04, 0x31,
0x1f, 0xa8, 0x7b, 0x5d, 0x06, 0x44, 0x91, 0xb8, 0x89, 0xf7, 0x32, 0x8c, 0xce, 0x43, 0x79, 0xb3,
0x4b, 0xa7, 0x1d, 0x06, 0x1d, 0x7a, 0x95, 0x02, 0x8f, 0xd3, 0x8a, 0x2d, 0xff, 0x6e, 0x05, 0x3a,
0x92, 0x41, 0x74, 0x9e, 0x72, 0x42, 0xbf, 0xee, 0xfa, 0xe2, 0x4d, 0x98, 0xa7, 0xc3, 0xbc, 0xde,
0x2a, 0xa4, 0x43, 0xd7, 0x02, 0xb1, 0xbf, 0x2a, 0x14, 0x6e, 0x14, 0x0c, 0x25, 0xbd, 0x99, 0x90,
0xda, 0x6d, 0x62, 0x5f, 0x06, 0xf1, 0x57, 0x5c, 0x9d, 0x76, 0xfe, 0xb8, 0x02, 0x4b, 0x46, 0x87,
0x25, 0x83, 0x7d, 0x0a, 0x6d, 0xfd, 0xf8, 0x0b, 0xd7, 0xca, 0xd0, 0x9a, 0x2d, 0x11, 0xb2, 0xcf,
0xac, 0xc2, 0x44, 0xa7, 0xfe, 0x05, 0x75, 0x30, 0x99, 0x8c, 0xa4, 0x16, 0x62, 0x42, 0xb8, 0xfe,
0xe7, 0x9c, 0xbf, 0xd4, 0x45, 0x84, 0x1e, 0x64, 0x61, 0xe4, 0x04, 0x89, 0xc2, 0xf4, 0x54, 0x17,
0xaa, 0x4b, 0x27, 0x88, 0x09, 0x3a, 0xff, 0xa9, 0x0a, 0xcb, 0xc2, 0xaa, 0x24, 0xad, 0x79, 0xfa,
0xfe, 0xfd, 0xac, 0x30, 0xb0, 0x09, 0x61, 0xb3, 0x7b, 0xc9, 0x95, 0x69, 0xf6, 0xbd, 0xb7, 0xb4,
0x84, 0xe9, 0xdb, 0x02, 0x53, 0xd6, 0xa2, 0x56, 0xb6, 0x16, 0xaf, 0x99, 0xe9, 0x32, 0x7f, 0xd4,
0x4c, 0xb9, 0x3f, 0xea, 0xed, 0xfc, 0x3f, 0x85, 0x90, 0xfa, 0x39, 0x59, 0xca, 0x0a, 0xa9, 0xdf,
0x80, 0x35, 0x0b, 0x20, 0x39, 0x1b, 0x1c, 0x07, 0x5c, 0xdd, 0x95, 0x5b, 0x4a, 0x78, 0xea, 0x59,
0x45, 0x1e, 0xcc, 0xc1, 0x4c, 0xd2, 0x8f, 0xc6, 0xdc, 0x59, 0x85, 0x15, 0x7b, 0x72, 0xa5, 0x74,
0xff, 0x45, 0x05, 0xba, 0x0f, 0x85, 0x23, 0x3f, 0x08, 0x4f, 0x76, 0x83, 0x24, 0x8d, 0x62, 0xfd,
0x4c, 0xca, 0x75, 0x80, 0x24, 0xf5, 0x63, 0x79, 0xde, 0x13, 0x4a, 0xaa, 0x81, 0xe0, 0x1c, 0xf1,
0x70, 0x20, 0x72, 0x05, 0x6d, 0xe8, 0x74, 0xe1, 0x10, 0x20, 0x6d, 0x6e, 0x96, 0x2a, 0x7d, 0x4b,
0xdc, 0xf4, 0xc1, 0xc9, 0xe0, 0x67, 0xb4, 0x65, 0x0a, 0x43, 0x56, 0x0e, 0x75, 0x7e, 0xbf, 0x0a,
0x8b, 0x59, 0x27, 0x29, 0xc2, 0xcc, 0x16, 0xbc, 0x52, 0x7f, 0xce, 0x04, 0xaf, 0xf4, 0x8f, 0x79,
0x01, 0x2a, 0xd4, 0x86, 0xd9, 0xcd, 0x40, 0xd9, 0x4d, 0x68, 0xa9, 0x54, 0x34, 0x49, 0x8d, 0xf7,
0x0a, 0x4c, 0x58, 0xc4, 0xe3, 0xa3, 0x4a, 0x2f, 0x8f, 0x27, 0x32, 0x45, 0x77, 0x27, 0x47, 0x29,
0x7d, 0x29, 0xd6, 0x54, 0x25, 0x51, 0x36, 0xa1, 0x2e, 0x2c, 0xd6, 0x90, 0xf4, 0x60, 0x53, 0x47,
0x6c, 0xe8, 0x77, 0x9e, 0x34, 0xcf, 0x8b, 0x1a, 0xb3, 0xcb, 0x14, 0x75, 0xd7, 0x84, 0x94, 0xd9,
0x23, 0x9a, 0x18, 0x41, 0x01, 0x75, 0xd7, 0xc2, 0x9c, 0xdf, 0xab, 0xc0, 0x95, 0x92, 0x65, 0x94,
0x32, 0x60, 0x1b, 0x96, 0x8e, 0x75, 0xa6, 0x9a, 0x6a, 0x21, 0x08, 0x56, 0x95, 0xb4, 0xb5, 0xa7,
0xd7, 0x2d, 0x7e, 0xa0, 0x8f, 0x49, 0x62, 0xf1, 0xac, 0xbb, 0x33, 0xc5, 0x0c, 0xe7, 0x00, 0x7a,
0x3b, 0xaf, 0x50, 0xa4, 0x6c, 0x99, 0x8f, 0x76, 0x2a, 0xca, 0xda, 0x28, 0x88, 0xcc, 0x37, 0x5b,
0x5b, 0x8f, 0x61, 0xde, 0xaa, 0x8b, 0x7d, 0xe7, 0x6d, 0x2b, 0x31, 0xb9, 0xff, 0x86, 0x5c, 0x75,
0xf1, 0xea, 0xa8, 0xba, 0xc1, 0x63, 0x40, 0xce, 0x19, 0x2c, 0x3e, 0x99, 0x0c, 0xd3, 0x20, 0x7b,
0x81, 0x94, 0x7d, 0x4f, 0x7e, 0x44, 0x55, 0xa8, 0xa9, 0x2b, 0x6d, 0xca, 0x2c, 0x87, 0x33, 0x36,
0xc2, 0x9a, 0xbc, 0x62, 0x8b, 0xc5, 0x0c, 0xe7, 0x0a, 0xac, 0x65, 0x4d, 0x8a, 0xb9, 0x53, 0xdb,
0xce, 0x1f, 0x54, 0x44, 0x18, 0xaa, 0xfd, 0x20, 0x2a, 0x7b, 0x04, 0xcb, 0x49, 0x10, 0x9e, 0x0c,
0xb9, 0x59, 0x4f, 0x22, 0x67, 0xe2, 0xb2, 0xdd, 0x3d, 0xf9, 0x68, 0xaa, 0x5b, 0xf6, 0x05, 0x12,
0x48, 0x79, 0x47, 0x33, 0x02, 0xc9, 0x4d, 0x49, 0xd9, 0x00, 0x3e, 0x83, 0x05, 0xbb, 0x31, 0xf6,
0xb1, 0xbc, 0x78, 0x93, 0xf5, 0xcc, 0x74, 0x8f, 0xda, 0x94, 0x61, 0x95, 0x74, 0x7e, 0x5e, 0x81,
0xae, 0xcb, 0x91, 0x8c, 0xb9, 0xd1, 0xa8, 0xa4, 0x9e, 0x4f, 0x0b, 0xd5, 0x4e, 0x1f, 0xb0, 0xbe,
0xd0, 0xa3, 0xc6, 0xba, 0x3e, 0x75, 0x51, 0x76, 0x2f, 0x95, 0x8c, 0xea, 0x41, 0x03, 0x66, 0xe5,
0xf8, 0xd6, 0xe0, 0xb2, 0xec, 0x92, 0xea, 0x4e, 0xe6, 0x57, 0xb3, 0x1a, 0xb5, 0xfc, 0x6a, 0x3d,
0xe8, 0x8a, 0xd7, 0x70, 0xcc, 0x71, 0xc8, 0x0f, 0xb7, 0x81, 0x3d, 0xf1, 0xfb, 0x7e, 0x1c, 0x45,
0xe1, 0x01, 0x8f, 0x65, 0xdc, 0x20, 0x69, 0x8d, 0xe4, 0x76, 0x52, 0x0a, 0xae, 0x48, 0xa9, 0x07,
0x5c, 0xa2, 0x50, 0x3d, 0x94, 0x23, 0x52, 0x8e, 0x0b, 0xcb, 0x0f, 0xfc, 0x97, 0x5c, 0xd5, 0x94,
0xcd, 0x52, 0x6b, 0xac, 0x2b, 0x55, 0x73, 0xaf, 0xee, 0xd4, 0x15, 0x9b, 0x75, 0xcd, 0xd2, 0xce,
0x06, 0xac, 0xd8, 0x75, 0x4a, 0x51, 0xd2, 0x83, 0xc6, 0x48, 0x62, 0xb2, 0x77, 0x3a, 0x7d, 0xf7,
0x2b, 0x68, 0x19, 0x2f, 0x1c, 0xb1, 0x35, 0x58, 0x7e, 0xf1, 0xf8, 0xd9, 0xfe, 0xce, 0xe1, 0xa1,
0x77, 0xf0, 0xfc, 0xc1, 0xe7, 0x3b, 0x3f, 0xf4, 0x76, 0x37, 0x0f, 0x77, 0x3b, 0x97, 0xd8, 0x2a,
0xb0, 0xfd, 0x9d, 0xc3, 0x67, 0x3b, 0xdb, 0x16, 0x5e, 0x61, 0xd7, 0xa1, 0xf7, 0x7c, 0xff, 0xf9,
0xe1, 0xce, 0xb6, 0x57, 0xf6, 0x5d, 0x95, 0x5d, 0x83, 0x2b, 0x32, 0xbf, 0xe4, 0xf3, 0xda, 0xdd,
0x4f, 0xa1, 0x93, 0x37, 0x0f, 0x5a, 0x66, 0xd5, 0xd7, 0xd9, 0x5f, 0x37, 0x7e, 0x5e, 0x83, 0x05,
0x11, 0x18, 0x2c, 0x9e, 0x14, 0xe6, 0x31, 0x7b, 0x02, 0x73, 0xf2, 0x6d, 0x6a, 0xa6, 0x48, 0xcb,
0x7e, 0x0d, 0xbb, 0xb7, 0x9a, 0x87, 0xe5, 0xb2, 0x2e, 0xff, 0x95, 0x7f, 0xf7, 0xdf, 0xfe, 0x56,
0x75, 0x9e, 0xb5, 0xee, 0x9d, 0x7d, 0x78, 0xef, 0x84, 0x87, 0x09, 0xd6, 0xf1, 0x3b, 0x00, 0xd9,
0x8b, 0xcb, 0xac, 0xab, 0xad, 0x51, 0xb9, 0xe7, 0xa8, 0x7b, 0x57, 0x4a, 0x72, 0x64, 0xbd, 0x57,
0xa8, 0xde, 0x65, 0x67, 0x01, 0xeb, 0x0d, 0xc2, 0x20, 0x15, 0xaf, 0x2f, 0x7f, 0x52, 0xb9, 0xcb,
0x06, 0xd0, 0x36, 0xdf, 0x42, 0x66, 0xca, 0x4d, 0x5a, 0xf2, 0x9a, 0x73, 0xef, 0x9d, 0xd2, 0x3c,
0x45, 0xcb, 0xd4, 0xc6, 0x65, 0xa7, 0x83, 0x6d, 0x4c, 0xa8, 0x44, 0xd6, 0xca, 0x50, 0x70, 0x78,
0xf6, 0xe4, 0x31, 0xbb, 0x6a, 0x30, 0x5d, 0xe1, 0xc1, 0xe5, 0xde, 0xb5, 0x29, 0xb9, 0xb2, 0xad,
0x6b, 0xd4, 0xd6, 0x9a, 0xc3, 0xb0, 0xad, 0x3e, 0x95, 0x51, 0x0f, 0x2e, 0x7f, 0x52, 0xb9, 0xbb,
0xf1, 0xaf, 0x6f, 0x43, 0x53, 0x87, 0x50, 0xb0, 0x9f, 0xc2, 0xbc, 0x15, 0xb9, 0xcd, 0xd4, 0x30,
0xca, 0x02, 0xbd, 0x7b, 0x57, 0xcb, 0x33, 0x65, 0xc3, 0xd7, 0xa9, 0xe1, 0x2e, 0x5b, 0xc5, 0x86,
0x65, 0xe8, 0xf3, 0x3d, 0xba, 0x83, 0x20, 0xae, 0x3c, 0xbf, 0x34, 0x24, 0x99, 0x68, 0xec, 0x6a,
0x5e, 0xb8, 0x58, 0xad, 0x5d, 0x9b, 0x92, 0x2b, 0x9b, 0xbb, 0x4a, 0xcd, 0xad, 0xb2, 0x15, 0xb3,
0x39, 0x1d, 0xd6, 0xc0, 0xe9, 0x9e, 0xbf, 0xf9, 0x1a, 0x30, 0xbb, 0xa6, 0x09, 0xab, 0xec, 0x95,
0x60, 0x4d, 0x22, 0xc5, 0xa7, 0x82, 0x9d, 0x2e, 0x35, 0xc5, 0x18, 0x2d, 0x9f, 0xf9, 0x18, 0x30,
0x3b, 0x82, 0x96, 0xf1, 0xd8, 0x1e, 0xbb, 0x32, 0xf5, 0x61, 0xc0, 0x5e, 0xaf, 0x2c, 0xab, 0x6c,
0x28, 0x66, 0xfd, 0xf7, 0x50, 0xd1, 0xf9, 0x31, 0x34, 0xf5, 0xf3, 0x6d, 0x6c, 0xcd, 0x78, 0x4e,
0xcf, 0x7c, 0x6e, 0xae, 0xd7, 0x2d, 0x66, 0x94, 0x11, 0x9f, 0x59, 0x3b, 0x12, 0xdf, 0x0b, 0x68,
0x19, 0x4f, 0xb4, 0xe9, 0x01, 0x14, 0x9f, 0x81, 0xd3, 0x03, 0x28, 0x79, 0xd1, 0xcd, 0x59, 0xa2,
0x26, 0x5a, 0xac, 0x49, 0xf4, 0x9d, 0xbe, 0x8a, 0x12, 0xb6, 0x07, 0x97, 0xa5, 0xc4, 0x3e, 0xe2,
0x5f, 0x67, 0x19, 0x4a, 0x1e, 0x60, 0xbe, 0x5f, 0x61, 0x9f, 0x42, 0x43, 0xbd, 0xc4, 0xc7, 0x56,
0xcb, 0x5f, 0x14, 0xec, 0xad, 0x15, 0x70, 0x29, 0x5e, 0x7f, 0x08, 0x90, 0xbd, 0x07, 0xa7, 0x85,
0x44, 0xe1, 0x7d, 0x39, 0x4d, 0x01, 0xc5, 0xc7, 0xe3, 0x9c, 0x55, 0x1a, 0x60, 0x87, 0x91, 0x90,
0x08, 0xf9, 0xb9, 0x7a, 0xd2, 0xe3, 0x27, 0xd0, 0x32, 0x9e, 0x84, 0xd3, 0xd3, 0x57, 0x7c, 0x4e,
0x4e, 0x4f, 0x5f, 0xc9, 0x0b, 0x72, 0x4e, 0x8f, 0x6a, 0x5f, 0x71, 0x16, 0xb1, 0xf6, 0x24, 0x38,
0x09, 0x47, 0xa2, 0x00, 0x2e, 0xd0, 0x29, 0xcc, 0x5b, 0xef, 0xbe, 0x69, 0x0e, 0x2d, 0x7b, 0x55,
0x4e, 0x73, 0x68, 0xe9, 0x53, 0x71, 0x8a, 0xce, 0x9c, 0x25, 0x6c, 0xe7, 0x8c, 0x8a, 0x18, 0x2d,
0xfd, 0x08, 0x5a, 0xc6, 0x1b, 0x6e, 0x7a, 0x2c, 0xc5, 0xe7, 0xe2, 0xf4, 0x58, 0xca, 0x9e, 0x7c,
0x5b, 0xa1, 0x36, 0x16, 0x1c, 0x22, 0x05, 0x7a, 0x9c, 0x02, 0xeb, 0xfe, 0x29, 0x2c, 0xd8, 0xaf,
0xba, 0x69, 0xde, 0x2f, 0x7d, 0x1f, 0x4e, 0xf3, 0xfe, 0x94, 0xa7, 0xe0, 0x24, 0x49, 0xdf, 0x5d,
0xd6, 0x8d, 0xdc, 0xfb, 0x52, 0x06, 0x61, 0x7e, 0xc5, 0xbe, 0x8f, 0x02, 0x4e, 0xbe, 0x16, 0xc2,
0xd6, 0x0c, 0xaa, 0x35, 0xdf, 0x14, 0xd1, 0xfc, 0x52, 0x78, 0x58, 0xc4, 0x26, 0x66, 0xf1, 0xbc,
0x06, 0xed, 0x5a, 0xf4, 0x6a, 0x88, 0xb1, 0x6b, 0x99, 0x0f, 0x8b, 0x18, 0xbb, 0x96, 0xf5, 0xb8,
0x48, 0x7e, 0xd7, 0x4a, 0x03, 0xac, 0x23, 0x84, 0xc5, 0xdc, 0xed, 0x32, 0xcd, 0x15, 0xe5, 0x17,
0x80, 0x7b, 0xd7, 0x5f, 0x7f, 0x29, 0xcd, 0x96, 0x20, 0x4a, 0x08, 0xde, 0x53, 0xd7, 0xad, 0x7f,
0x17, 0xda, 0xe6, 0x4b, 0x53, 0xcc, 0x64, 0xe5, 0x7c, 0x4b, 0xef, 0x94, 0xe6, 0xd9, 0x8b, 0xcb,
0xda, 0x66, 0x33, 0xec, 0x07, 0xb0, 0xaa, 0x59, 0xdd, 0xbc, 0xb0, 0x94, 0xb0, 0x77, 0x4b, 0xae,
0x31, 0x99, 0x7a, 0x5c, 0xef, 0xca, 0xd4, 0x7b, 0x4e, 0xf7, 0x2b, 0x48, 0x34, 0xf6, 0xf3, 0x3d,
0xd9, 0x86, 0x51, 0xf6, 0x6a, 0x51, 0xb6, 0x61, 0x94, 0xbe, 0xf9, 0xa3, 0x88, 0x86, 0x2d, 0x5b,
0x73, 0x24, 0xe2, 0x55, 0xd8, 0x8f, 0x60, 0xd1, 0xb8, 0x12, 0x7a, 0x78, 0x11, 0xf6, 0x35, 0x03,
0x14, 0x5f, 0x2c, 0xe8, 0x95, 0x9d, 0x52, 0x9c, 0x35, 0xaa, 0x7f, 0xc9, 0xb1, 0x26, 0x07, 0x89,
0x7f, 0x0b, 0x5a, 0xe6, 0x75, 0xd3, 0xd7, 0xd4, 0xbb, 0x66, 0x64, 0x99, 0x97, 0xed, 0xef, 0x57,
0xd8, 0x81, 0x88, 0x5b, 0xd4, 0x4f, 0x09, 0x47, 0x71, 0x7e, 0xfb, 0xb4, 0x9f, 0x18, 0xd6, 0x0b,
0x59, 0xf6, 0xb8, 0xf4, 0x9d, 0xca, 0xfd, 0x0a, 0xfb, 0x7b, 0x15, 0x68, 0x5b, 0xd7, 0x41, 0xad,
0x28, 0xb0, 0x5c, 0xcf, 0xba, 0x66, 0x9e, 0xd9, 0x35, 0xc7, 0xa5, 0x61, 0xef, 0xdd, 0xfd, 0xcc,
0x9a, 0xd6, 0x2f, 0x2d, 0x53, 0xdd, 0x7a, 0xfe, 0x3d, 0xe1, 0xaf, 0xf2, 0x05, 0xcc, 0x77, 0x22,
0xbe, 0xba, 0x5f, 0x61, 0x7f, 0x58, 0x81, 0x05, 0xdb, 0x76, 0xae, 0x87, 0x5b, 0x6a, 0xa5, 0xd7,
0x8b, 0x3f, 0xc5, 0xe0, 0xfe, 0x23, 0xea, 0xe5, 0xb3, 0xbb, 0xae, 0xd5, 0x4b, 0xf9, 0x54, 0xd4,
0xaf, 0xd6, 0x5b, 0xf6, 0x89, 0x78, 0xa6, 0x5f, 0xb9, 0x0d, 0x59, 0xf1, 0x59, 0x77, 0x4d, 0x30,
0xe6, 0xe3, 0xe9, 0xb4, 0x08, 0x3f, 0x11, 0xef, 0xe8, 0x2a, 0xdf, 0x13, 0xd2, 0xdd, 0xdb, 0x7e,
0xef, 0xdc, 0xa4, 0x31, 0x5d, 0x77, 0xae, 0x58, 0x63, 0xca, 0xef, 0xf0, 0x9b, 0xa2, 0x77, 0xf2,
0xdd, 0xf3, 0x6c, 0x8b, 0x2a, 0xbc, 0x85, 0x3e, 0xbd, 0x93, 0x23, 0xd1, 0x49, 0x59, 0xdc, 0x62,
0x8e, 0xb7, 0xac, 0xc6, 0xb9, 0x4b, 0x7d, 0xbd, 0xe9, 0xbc, 0x3b, 0xb5, 0xaf, 0xf7, 0xc8, 0x02,
0x8e, 0x3d, 0x3e, 0x00, 0xc8, 0xdc, 0xfc, 0x2c, 0xe7, 0x62, 0xd6, 0x22, 0xa3, 0x18, 0x09, 0x60,
0x73, 0xa0, 0xf2, 0x44, 0x63, 0x8d, 0x3f, 0x16, 0x02, 0xf0, 0xb1, 0x72, 0x4e, 0x9b, 0x6a, 0x8e,
0xed, 0x8b, 0xb7, 0xd4, 0x9c, 0x7c, 0xfd, 0x96, 0xf8, 0xd3, 0x9e, 0xee, 0xe7, 0x30, 0xbf, 0x17,
0x45, 0x2f, 0x27, 0x63, 0x1d, 0xa0, 0x65, 0x3b, 0xa7, 0x76, 0xfd, 0xe4, 0xb4, 0x97, 0x1b, 0x85,
0x73, 0x83, 0xaa, 0xea, 0xb1, 0xae, 0x51, 0xd5, 0xbd, 0x2f, 0xb3, 0x10, 0x82, 0xaf, 0x98, 0x0f,
0x4b, 0x5a, 0xaa, 0xea, 0x8e, 0xf7, 0xec, 0x6a, 0x2c, 0x59, 0x9a, 0x6f, 0xc2, 0xd2, 0xc7, 0x55,
0x6f, 0xef, 0x25, 0xaa, 0x4e, 0x92, 0x29, 0xed, 0x6d, 0xde, 0xa7, 0x9b, 0x62, 0xe4, 0xe1, 0x59,
0xce, 0x3a, 0xae, 0x5d, 0x43, 0xbd, 0x79, 0x0b, 0xb4, 0x77, 0x9a, 0xb1, 0x7f, 0x11, 0xf3, 0x2f,
0xee, 0x7d, 0x29, 0x7d, 0x47, 0x5f, 0xa9, 0x9d, 0x46, 0x39, 0xd7, 0xac, 0x9d, 0x26, 0xe7, 0x8d,
0xb3, 0x76, 0x9a, 0x82, 0x37, 0xce, 0x9a, 0x6a, 0xe5, 0xdc, 0x63, 0x43, 0x58, 0x2a, 0x38, 0xf0,
0xf4, 0x26, 0x33, 0xcd, 0xed, 0xd7, 0xbb, 0x31, 0xbd, 0x80, 0xdd, 0xda, 0x5d, 0xbb, 0xb5, 0x43,
0x98, 0xdf, 0xe6, 0x62, 0xb2, 0x44, 0x44, 0x7a, 0xee, 0x4e, 0xb1, 0x19, 0xef, 0x9e, 0xdf, 0x12,
0x28, 0xcf, 0x56, 0x25, 0x28, 0x14, 0x9c, 0xfd, 0x18, 0x5a, 0x8f, 0x78, 0xaa, 0x42, 0xd0, 0xb5,
0x32, 0x9b, 0x8b, 0x49, 0xef, 0x95, 0x44, 0xb0, 0xdb, 0x34, 0x43, 0xb5, 0xdd, 0xe3, 0x83, 0x13,
0x2e, 0x84, 0x93, 0x17, 0x0c, 0xbe, 0x62, 0x7f, 0x91, 0x2a, 0xd7, 0x77, 0x70, 0x56, 0x8d, 0x78,
0x62, 0xb3, 0xf2, 0xc5, 0x1c, 0x5e, 0x56, 0x73, 0x18, 0x0d, 0xb8, 0xa1, 0x54, 0x85, 0xd0, 0x32,
0xee, 0xf0, 0x69, 0x06, 0x2a, 0x5e, 0x79, 0xd4, 0x0c, 0x54, 0x72, 0xe5, 0xcf, 0xb9, 0x43, 0xed,
0x38, 0xec, 0x46, 0xd6, 0x8e, 0xb8, 0xe6, 0x97, 0xb5, 0x74, 0xef, 0x4b, 0x7f, 0x94, 0x7e, 0xc5,
0x5e, 0xd0, 0xd3, 0x6d, 0x66, 0x88, 0x7d, 0xa6, 0x9d, 0xe7, 0xa3, 0xf1, 0xf5, 0x64, 0x19, 0x59,
0xb6, 0xc6, 0x2e, 0x9a, 0x22, 0xdd, 0xeb, 0x7b, 0x00, 0x87, 0x69, 0x34, 0xde, 0xf6, 0xf9, 0x28,
0x0a, 0x33, 0x59, 0x9b, 0x05, 0x78, 0x67, 0xf2, 0xcb, 0x88, 0xf2, 0x66, 0x2f, 0x8c, 0xe3, 0x8c,
0x75, 0x4b, 0x41, 0x11, 0xd7, 0xd4, 0x18, 0x70, 0x3d, 0x21, 0x25, 0x71, 0xe0, 0xf7, 0x2b, 0x6c,
0x13, 0x20, 0xf3, 0xe0, 0xea, 0xc3, 0x49, 0xc1, 0x39, 0xac, 0xc5, 0x5e, 0x89, 0xbb, 0xf7, 0x00,
0x9a, 0x99, 0xdf, 0x6c, 0x2d, 0xbb, 0xd1, 0x6b, 0x79, 0xd9, 0xf4, 0x0e, 0x5e, 0xf0, 0x66, 0x39,
0x1d, 0x9a, 0x2a, 0x60, 0x0d, 0x9c, 0x2a, 0x72, 0x51, 0x05, 0xb0, 0x2c, 0x3a, 0xa8, 0x15, 0x1c,
0x0a, 0x4c, 0x56, 0x23, 0x29, 0xf1, 0x28, 0x69, 0x6e, 0x2e, 0x75, 0x88, 0x58, 0x36, 0x16, 0xa4,
0x56, 0x11, 0x14, 0x8d, 0xa2, 0x79, 0x04, 0x4b, 0x05, 0x1b, 0xbb, 0x66, 0xe9, 0x69, 0x4e, 0x14,
0xcd, 0xd2, 0x53, 0xcd, 0xf3, 0xce, 0x65, 0x6a, 0x72, 0xd1, 0x01, 0x3a, 0x53, 0x9d, 0x07, 0x69,
0xff, 0x14, 0x9b, 0xfb, 0x83, 0x0a, 0x2c, 0x97, 0x98, 0xd0, 0xd9, 0x7b, 0xea, 0x78, 0x3e, 0xd5,
0xbc, 0xde, 0x2b, 0xb5, 0xb0, 0x3a, 0x87, 0xd4, 0xce, 0x13, 0xf6, 0xb9, 0xb5, 0xb1, 0x09, 0xe3,
0xa6, 0xe4, 0xcc, 0xd7, 0x2a, 0x15, 0xa5, 0x1a, 0xc5, 0x17, 0xb0, 0x26, 0x3a, 0xb2, 0x39, 0x1c,
0xe6, 0xac, 0xbf, 0xd7, 0x0b, 0xff, 0xca, 0xcb, 0xb2, 0x6a, 0xf7, 0xa6, 0xff, 0xab, 0xaf, 0x29,
0x0a, 0xb0, 0xe8, 0x2a, 0x9b, 0x40, 0x27, 0x6f, 0x51, 0x65, 0xd3, 0xeb, 0xea, 0xbd, 0x6b, 0x1d,
0x34, 0x4b, 0xac, 0xb0, 0xdf, 0xa4, 0xc6, 0xde, 0x75, 0x7a, 0x65, 0xf3, 0x22, 0xce, 0x9e, 0xb8,
0x1e, 0x7f, 0x59, 0x9b, 0x7f, 0x73, 0xe3, 0x54, 0x0d, 0x4c, 0xb3, 0x57, 0xeb, 0xa3, 0x6e, 0xb9,
0xf5, 0xf8, 0x16, 0x35, 0x7f, 0xc3, 0x79, 0xa7, 0xac, 0xf9, 0x58, 0x7c, 0x22, 0x0e, 0xbd, 0x6b,
0x79, 0xbe, 0x56, 0x3d, 0xb8, 0x51, 0xb6, 0xde, 0x53, 0x4f, 0x2f, 0xb9, 0xb9, 0xbe, 0x44, 0xba,
0x5d, 0xdb, 0x34, 0xf7, 0x6a, 0xf6, 0x29, 0xb1, 0x2b, 0x6b, 0xf6, 0x29, 0xb3, 0x0f, 0xdb, 0x7a,
0x8d, 0xb2, 0x0c, 0x7f, 0x52, 0xb9, 0xfb, 0xe0, 0xf6, 0x8f, 0xbe, 0x79, 0x12, 0xa4, 0xa7, 0x93,
0xa3, 0xf5, 0x7e, 0x34, 0xba, 0x37, 0x54, 0x66, 0x3d, 0x79, 0x59, 0xe7, 0xde, 0x30, 0x1c, 0xdc,
0xa3, 0x6a, 0x8f, 0x66, 0xe9, 0x7f, 0x0f, 0x7e, 0xe7, 0xff, 0x06, 0x00, 0x00, 0xff, 0xff, 0x55,
0x01, 0x55, 0xb7, 0xad, 0x70, 0x00, 0x00,
// 9056 bytes of a gzipped FileDescriptorProto
0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xbc, 0x7d, 0x4d, 0x6c, 0x1c, 0x49,
0x96, 0x9e, 0xea, 0x87, 0x64, 0xd5, 0xab, 0x22, 0x59, 0x0c, 0x52, 0x64, 0xa9, 0x5a, 0x52, 0xab,
0x73, 0x34, 0x92, 0x46, 0xd3, 0x43, 0xa9, 0x39, 0x33, 0xed, 0xde, 0x6e, 0xaf, 0x77, 0x29, 0x92,
0x12, 0xd5, 0x2d, 0x51, 0x9c, 0xa4, 0x34, 0xf2, 0xcc, 0xec, 0x22, 0x27, 0x59, 0x15, 0x24, 0x73,
0x54, 0x95, 0x59, 0x9d, 0x99, 0x45, 0x8a, 0xd3, 0x6e, 0x1f, 0x0c, 0xc3, 0x30, 0x7c, 0x59, 0x8c,
0x0d, 0x03, 0xb6, 0x61, 0x63, 0x81, 0x59, 0x03, 0xc6, 0xc2, 0x07, 0xfb, 0x62, 0xc0, 0x36, 0xd6,
0x27, 0x1f, 0x16, 0x30, 0x60, 0xf8, 0x60, 0x03, 0x06, 0x6c, 0x60, 0x0d, 0xc3, 0x06, 0xec, 0x85,
0xe1, 0x9b, 0x7d, 0x37, 0xde, 0x8b, 0x9f, 0x8c, 0xc8, 0xcc, 0x92, 0xd8, 0x33, 0xed, 0x3d, 0xb1,
0xe2, 0x8b, 0xc8, 0xf8, 0x7d, 0xef, 0xc5, 0x8b, 0xf7, 0x5e, 0x04, 0xa1, 0x19, 0x8f, 0xfb, 0xeb,
0xe3, 0x38, 0x4a, 0x23, 0x36, 0x33, 0x0c, 0xe3, 0x71, 0xbf, 0x77, 0xf5, 0x38, 0x8a, 0x8e, 0x87,
0xfc, 0x9e, 0x3f, 0x0e, 0xee, 0xf9, 0x61, 0x18, 0xa5, 0x7e, 0x1a, 0x44, 0x61, 0x22, 0x0a, 0x39,
0x3f, 0x85, 0x85, 0x47, 0x3c, 0x3c, 0xe0, 0x7c, 0xe0, 0xf2, 0xcf, 0x27, 0x3c, 0x49, 0xd9, 0xb7,
0x61, 0xc9, 0xe7, 0x3f, 0xe7, 0x7c, 0xe0, 0x8d, 0xfd, 0x24, 0x19, 0x9f, 0xc4, 0x7e, 0xc2, 0xbb,
0x95, 0x1b, 0x95, 0x3b, 0x6d, 0xb7, 0x23, 0x32, 0xf6, 0x35, 0xce, 0xde, 0x83, 0x76, 0x82, 0x45,
0x79, 0x98, 0xc6, 0xd1, 0xf8, 0xbc, 0x5b, 0xa5, 0x72, 0x2d, 0xc4, 0x76, 0x04, 0xe4, 0x0c, 0x61,
0x51, 0xb7, 0x90, 0x8c, 0xa3, 0x30, 0xe1, 0xec, 0x3e, 0xac, 0xf4, 0x83, 0xf1, 0x09, 0x8f, 0x3d,
0xfa, 0x78, 0x14, 0xf2, 0x51, 0x14, 0x06, 0xfd, 0x6e, 0xe5, 0x46, 0xed, 0x4e, 0xd3, 0x65, 0x22,
0x0f, 0xbf, 0x78, 0x2a, 0x73, 0xd8, 0x6d, 0x58, 0xe4, 0xa1, 0xc0, 0xf9, 0x80, 0xbe, 0x92, 0x4d,
0x2d, 0x64, 0x30, 0x7e, 0xe0, 0xfc, 0xf5, 0x2a, 0x2c, 0x3d, 0x0e, 0x83, 0xf4, 0xa5, 0x3f, 0x1c,
0xf2, 0x54, 0x8d, 0xe9, 0x36, 0x2c, 0x9e, 0x11, 0x40, 0x63, 0x3a, 0x8b, 0xe2, 0x81, 0x1c, 0xd1,
0x82, 0x80, 0xf7, 0x25, 0x3a, 0xb5, 0x67, 0xd5, 0xa9, 0x3d, 0x2b, 0x9d, 0xae, 0xda, 0x94, 0xe9,
0xba, 0x0d, 0x8b, 0x31, 0xef, 0x47, 0xa7, 0x3c, 0x3e, 0xf7, 0xce, 0x82, 0x70, 0x10, 0x9d, 0x75,
0xeb, 0x37, 0x2a, 0x77, 0x66, 0xdc, 0x05, 0x05, 0xbf, 0x24, 0x94, 0x3d, 0x80, 0xc5, 0xfe, 0x89,
0x1f, 0x86, 0x7c, 0xe8, 0x1d, 0xfa, 0xfd, 0x57, 0x93, 0x71, 0xd2, 0x9d, 0xb9, 0x51, 0xb9, 0xd3,
0xda, 0xb8, 0xb2, 0x4e, 0xab, 0xba, 0xbe, 0x75, 0xe2, 0x87, 0x0f, 0x28, 0xe7, 0x20, 0xf4, 0xc7,
0xc9, 0x49, 0x94, 0xba, 0x0b, 0xf2, 0x0b, 0x01, 0x27, 0xce, 0x0a, 0x30, 0x73, 0x26, 0xc4, 0xdc,
0x3b, 0xff, 0xb8, 0x02, 0xcb, 0x2f, 0xc2, 0x61, 0xd4, 0x7f, 0xf5, 0x2b, 0x4e, 0x51, 0xc9, 0x18,
0xaa, 0x17, 0x1d, 0x43, 0xed, 0xab, 0x8e, 0x61, 0x15, 0x56, 0xec, 0xce, 0xca, 0x51, 0x70, 0xb8,
0x8c, 0x5f, 0x1f, 0x73, 0xd5, 0x2d, 0x35, 0x8c, 0x6f, 0x41, 0xa7, 0x3f, 0x89, 0x63, 0x1e, 0x16,
0xc6, 0xb1, 0x28, 0x71, 0x3d, 0x90, 0xf7, 0xa0, 0x1d, 0xf2, 0xb3, 0xac, 0x98, 0xa4, 0xdd, 0x90,
0x9f, 0xa9, 0x22, 0x4e, 0x17, 0x56, 0xf3, 0xcd, 0xc8, 0x0e, 0xfc, 0xd7, 0x0a, 0xd4, 0x5f, 0xa4,
0xaf, 0x23, 0xb6, 0x0e, 0xf5, 0xf4, 0x7c, 0x2c, 0x38, 0x64, 0x61, 0x83, 0xc9, 0xa1, 0x6d, 0x0e,
0x06, 0x31, 0x4f, 0x92, 0xe7, 0xe7, 0x63, 0xee, 0xb6, 0x7d, 0x91, 0xf0, 0xb0, 0x1c, 0xeb, 0xc2,
0x9c, 0x4c, 0x53, 0x83, 0x4d, 0x57, 0x25, 0xd9, 0x75, 0x00, 0x7f, 0x14, 0x4d, 0xc2, 0xd4, 0x4b,
0xfc, 0x94, 0xa6, 0xaa, 0xe6, 0x1a, 0x08, 0xbb, 0x0a, 0xcd, 0xf1, 0x2b, 0x2f, 0xe9, 0xc7, 0xc1,
0x38, 0x25, 0xb2, 0x69, 0xba, 0x19, 0xc0, 0xbe, 0x0d, 0x8d, 0x68, 0x92, 0x8e, 0xa3, 0x20, 0x4c,
0x25, 0xa9, 0x2c, 0xca, 0xbe, 0x3c, 0x9b, 0xa4, 0xfb, 0x08, 0xbb, 0xba, 0x00, 0xbb, 0x09, 0xf3,
0xfd, 0x28, 0x3c, 0x0a, 0xe2, 0x91, 0x10, 0x06, 0xdd, 0x59, 0x6a, 0xcd, 0x06, 0x9d, 0x7f, 0x51,
0x85, 0xd6, 0xf3, 0xd8, 0x0f, 0x13, 0xbf, 0x8f, 0x00, 0x76, 0x3d, 0x7d, 0xed, 0x9d, 0xf8, 0xc9,
0x09, 0x8d, 0xb6, 0xe9, 0xaa, 0x24, 0x5b, 0x85, 0x59, 0xd1, 0x51, 0x1a, 0x53, 0xcd, 0x95, 0x29,
0xf6, 0x3e, 0x2c, 0x85, 0x93, 0x91, 0x67, 0xb7, 0x55, 0x23, 0x6a, 0x29, 0x66, 0xe0, 0x04, 0x1c,
0xe2, 0x5a, 0x8b, 0x26, 0xc4, 0x08, 0x0d, 0x84, 0x39, 0xd0, 0x96, 0x29, 0x1e, 0x1c, 0x9f, 0x88,
0x61, 0xce, 0xb8, 0x16, 0x86, 0x75, 0xa4, 0xc1, 0x88, 0x7b, 0x49, 0xea, 0x8f, 0xc6, 0x72, 0x58,
0x06, 0x42, 0xf9, 0x51, 0xea, 0x0f, 0xbd, 0x23, 0xce, 0x93, 0xee, 0x9c, 0xcc, 0xd7, 0x08, 0xbb,
0x05, 0x0b, 0x03, 0x9e, 0xa4, 0x9e, 0x5c, 0x14, 0x9e, 0x74, 0x1b, 0xc4, 0xfa, 0x39, 0x14, 0xeb,
0x89, 0xfd, 0x33, 0x0f, 0x27, 0x80, 0xbf, 0xee, 0x36, 0x45, 0x5f, 0x33, 0x04, 0x29, 0xe7, 0x11,
0x4f, 0x8d, 0xd9, 0x4b, 0x24, 0x85, 0x3a, 0x4f, 0x80, 0x19, 0xf0, 0x36, 0x4f, 0xfd, 0x60, 0x98,
0xb0, 0x0f, 0xa1, 0x9d, 0x1a, 0x85, 0x49, 0x14, 0xb6, 0x34, 0x39, 0x19, 0x1f, 0xb8, 0x56, 0x39,
0xe7, 0x04, 0x1a, 0x0f, 0x39, 0x7f, 0x12, 0x8c, 0x82, 0x94, 0xad, 0xc2, 0xcc, 0x51, 0xf0, 0x9a,
0x0b, 0x82, 0xaf, 0xed, 0x5e, 0x72, 0x45, 0x92, 0xbd, 0x0b, 0x40, 0x3f, 0xbc, 0x91, 0x26, 0xac,
0xdd, 0x4b, 0x6e, 0x93, 0xb0, 0xa7, 0x48, 0x59, 0x3d, 0x98, 0x1b, 0xf3, 0xb8, 0xcf, 0xd5, 0xfa,
0xed, 0x5e, 0x72, 0x15, 0xf0, 0x60, 0x0e, 0x66, 0x86, 0x58, 0xbb, 0xf3, 0x7b, 0x33, 0xd0, 0x3a,
0xe0, 0xa1, 0xe6, 0x34, 0x06, 0x75, 0x9c, 0x13, 0xc9, 0x5d, 0xf4, 0x9b, 0x7d, 0x03, 0x5a, 0x34,
0x4f, 0x49, 0x1a, 0x07, 0xe1, 0xb1, 0x20, 0xf0, 0x07, 0xd5, 0x6e, 0xc5, 0x05, 0x84, 0x0f, 0x08,
0x65, 0x1d, 0xa8, 0xf9, 0x23, 0x45, 0xe0, 0xf8, 0x93, 0x5d, 0x81, 0x86, 0x3f, 0x4a, 0x45, 0xf7,
0xda, 0x04, 0xcf, 0xf9, 0xa3, 0x94, 0xba, 0xf6, 0x1e, 0xb4, 0xc7, 0xfe, 0xf9, 0x08, 0xf9, 0x59,
0x53, 0x45, 0xdb, 0x6d, 0x49, 0x6c, 0x17, 0xc9, 0x62, 0x03, 0x96, 0xcd, 0x22, 0xaa, 0xf1, 0x19,
0xdd, 0xf8, 0x92, 0x51, 0x5a, 0xf6, 0xe1, 0x36, 0x2c, 0xaa, 0x6f, 0x62, 0x31, 0x1e, 0xa2, 0x95,
0xa6, 0xbb, 0x20, 0x61, 0x35, 0xca, 0x3b, 0xd0, 0x39, 0x0a, 0x42, 0x7f, 0xe8, 0xf5, 0x87, 0xe9,
0xa9, 0x37, 0xe0, 0xc3, 0xd4, 0x27, 0xaa, 0x99, 0x71, 0x17, 0x08, 0xdf, 0x1a, 0xa6, 0xa7, 0xdb,
0x88, 0xb2, 0xf7, 0xa1, 0x79, 0xc4, 0xb9, 0x47, 0x93, 0xd5, 0x6d, 0x58, 0x1c, 0xa8, 0x56, 0xc8,
0x6d, 0x1c, 0xa9, 0xb5, 0x7a, 0x1f, 0x3a, 0xd1, 0x24, 0x3d, 0x8e, 0x82, 0xf0, 0xd8, 0x43, 0x99,
0xe7, 0x05, 0x03, 0xa2, 0xa2, 0xfa, 0x83, 0xea, 0xfd, 0x8a, 0xbb, 0xa0, 0xf2, 0x50, 0xfa, 0x3c,
0x1e, 0xb0, 0x5b, 0xb0, 0x38, 0xf4, 0x93, 0xd4, 0x3b, 0x89, 0xc6, 0xde, 0x78, 0x72, 0xf8, 0x8a,
0x9f, 0x77, 0xe7, 0x69, 0x22, 0xe6, 0x11, 0xde, 0x8d, 0xc6, 0xfb, 0x04, 0xb2, 0x6b, 0x00, 0xd4,
0x4f, 0xd1, 0x09, 0xb8, 0x51, 0xb9, 0x33, 0xef, 0x36, 0x11, 0x11, 0x8d, 0xfe, 0x08, 0x96, 0x69,
0x79, 0xfa, 0x93, 0x24, 0x8d, 0x46, 0x1e, 0xca, 0xeb, 0x78, 0x90, 0x74, 0x5b, 0x44, 0x6b, 0xdf,
0x92, 0x9d, 0x35, 0xd6, 0x78, 0x7d, 0x9b, 0x27, 0xe9, 0x16, 0x15, 0x76, 0x45, 0x59, 0xdc, 0xd4,
0xcf, 0xdd, 0xa5, 0x41, 0x1e, 0x67, 0xef, 0x03, 0xf3, 0x87, 0xc3, 0xe8, 0xcc, 0x4b, 0xf8, 0xf0,
0xc8, 0x93, 0x93, 0xd8, 0x5d, 0xb8, 0x51, 0xb9, 0xd3, 0x70, 0x3b, 0x94, 0x73, 0xc0, 0x87, 0x47,
0xfb, 0x02, 0xef, 0x6d, 0xc3, 0x6a, 0x79, 0xd5, 0x48, 0x1c, 0x38, 0x3a, 0x24, 0xaa, 0xba, 0x8b,
0x3f, 0xd9, 0x0a, 0xcc, 0x9c, 0xfa, 0xc3, 0x09, 0x97, 0xf2, 0x59, 0x24, 0x3e, 0xae, 0x7e, 0x54,
0x71, 0xfe, 0x79, 0x05, 0xda, 0xa2, 0xb7, 0x52, 0xaf, 0xb8, 0x09, 0xf3, 0x6a, 0x55, 0x79, 0x1c,
0x47, 0xb1, 0x14, 0x53, 0x36, 0xc8, 0xee, 0x42, 0x47, 0x01, 0xe3, 0x98, 0x07, 0x23, 0xff, 0x58,
0xd5, 0x5d, 0xc0, 0xd9, 0x46, 0x56, 0x63, 0x1c, 0x4d, 0x52, 0x2e, 0x77, 0xb0, 0xb6, 0x9c, 0x2b,
0x17, 0x31, 0xd7, 0x2e, 0x82, 0x62, 0xaa, 0x84, 0x64, 0x2d, 0xcc, 0xf9, 0xdb, 0x15, 0x60, 0xd8,
0xf5, 0xe7, 0x91, 0xa8, 0x42, 0x52, 0x5b, 0x9e, 0xda, 0x2b, 0x17, 0xa6, 0xf6, 0xea, 0x9b, 0xa8,
0xdd, 0x81, 0x19, 0xd1, 0xfb, 0x7a, 0x49, 0xef, 0x45, 0xd6, 0xa7, 0xf5, 0x46, 0xad, 0x53, 0x77,
0xfe, 0x53, 0x0d, 0x56, 0xb6, 0xc4, 0x16, 0xbc, 0xd9, 0xef, 0xf3, 0xb1, 0xe6, 0x83, 0x77, 0xa1,
0x15, 0x46, 0x03, 0xae, 0xa8, 0x4f, 0x74, 0x0c, 0x10, 0x32, 0x48, 0xef, 0xc4, 0x0f, 0x42, 0xd1,
0x71, 0x31, 0x9f, 0x4d, 0x42, 0xa8, 0xdb, 0xb7, 0x60, 0x71, 0xcc, 0xc3, 0x81, 0x49, 0xee, 0x42,
0x49, 0x9a, 0x97, 0xb0, 0xa4, 0xf4, 0x77, 0xa1, 0x75, 0x34, 0x11, 0xe5, 0x50, 0x48, 0xd4, 0x89,
0x0e, 0x40, 0x42, 0x9b, 0x42, 0x56, 0x8c, 0x27, 0xc9, 0x09, 0xe5, 0xce, 0x50, 0xee, 0x1c, 0xa6,
0x31, 0xeb, 0x1a, 0xc0, 0x60, 0x92, 0xa4, 0x92, 0xfa, 0x67, 0x29, 0xb3, 0x89, 0x88, 0xa0, 0xfe,
0xef, 0xc0, 0xf2, 0xc8, 0x7f, 0xed, 0x11, 0xfd, 0x78, 0x41, 0xe8, 0x1d, 0x0d, 0x69, 0x17, 0x99,
0xa3, 0x72, 0x9d, 0x91, 0xff, 0xfa, 0x87, 0x98, 0xf3, 0x38, 0x7c, 0x48, 0x38, 0x8a, 0x08, 0xa5,
0xbe, 0xc4, 0x3c, 0xe1, 0xf1, 0x29, 0x27, 0xae, 0xae, 0x6b, 0x1d, 0xc5, 0x15, 0x28, 0xf6, 0x68,
0x84, 0xe3, 0x4e, 0x87, 0x7d, 0xc1, 0xc2, 0xee, 0xdc, 0x28, 0x08, 0x77, 0xd3, 0x61, 0x9f, 0x5d,
0x05, 0x40, 0x99, 0x30, 0xe6, 0xb1, 0xf7, 0xea, 0x8c, 0xf8, 0xb1, 0x4e, 0x32, 0x60, 0x9f, 0xc7,
0x9f, 0x9d, 0xb1, 0x77, 0xa0, 0xd9, 0x4f, 0x48, 0xa8, 0xf8, 0xe7, 0xdd, 0x16, 0x31, 0x6b, 0xa3,
0x9f, 0xa0, 0x38, 0xf1, 0xcf, 0x91, 0xa1, 0xb0, 0xb7, 0x3e, 0xad, 0x02, 0x1f, 0x50, 0xf5, 0x09,
0x49, 0xc7, 0x79, 0xea, 0xec, 0xa6, 0xcc, 0xc0, 0x76, 0x12, 0xf6, 0x0d, 0x98, 0x57, 0x9d, 0x3d,
0x1a, 0xfa, 0xc7, 0x09, 0x89, 0x87, 0x79, 0xb7, 0x2d, 0xc1, 0x87, 0x88, 0x39, 0x2f, 0x85, 0xd2,
0x64, 0xac, 0xad, 0xe4, 0x1b, 0xdc, 0xbe, 0x09, 0xa1, 0x75, 0x6d, 0xb8, 0x32, 0x55, 0xb6, 0x68,
0xd5, 0x92, 0x45, 0x73, 0x7e, 0x59, 0x81, 0xb6, 0xac, 0x99, 0x34, 0x0d, 0x76, 0x1f, 0x98, 0x5a,
0xc5, 0xf4, 0x75, 0x30, 0xf0, 0x0e, 0xcf, 0x53, 0x9e, 0x08, 0xa2, 0xd9, 0xbd, 0xe4, 0x96, 0xe4,
0xa1, 0x3c, 0xb4, 0xd0, 0x24, 0x8d, 0x05, 0x4d, 0xef, 0x5e, 0x72, 0x0b, 0x39, 0xc8, 0x62, 0xa8,
0xcb, 0x4c, 0x52, 0x2f, 0x08, 0x07, 0xfc, 0x35, 0x91, 0xd2, 0xbc, 0x6b, 0x61, 0x0f, 0x16, 0xa0,
0x6d, 0x7e, 0xe7, 0xfc, 0x0c, 0x1a, 0x4a, 0x13, 0x22, 0x2d, 0x20, 0xd7, 0x2f, 0xd7, 0x40, 0x58,
0x0f, 0x1a, 0x76, 0x2f, 0xdc, 0xc6, 0x57, 0x69, 0xdb, 0xf9, 0x0b, 0xd0, 0x79, 0x82, 0x44, 0x14,
0x22, 0xd1, 0x4a, 0xf5, 0x6e, 0x15, 0x66, 0x0d, 0xe6, 0x69, 0xba, 0x32, 0x85, 0xfb, 0xe8, 0x49,
0x94, 0xa4, 0xb2, 0x1d, 0xfa, 0xed, 0xfc, 0x71, 0x05, 0xd8, 0x4e, 0x92, 0x06, 0x23, 0x3f, 0xe5,
0x0f, 0xb9, 0x16, 0x0f, 0xcf, 0xa0, 0x8d, 0xb5, 0x3d, 0x8f, 0x36, 0x85, 0xb2, 0x25, 0x94, 0x84,
0x6f, 0x4b, 0x76, 0x2e, 0x7e, 0xb0, 0x6e, 0x96, 0x16, 0xa2, 0xdb, 0xaa, 0x00, 0xb9, 0x2d, 0xf5,
0xe3, 0x63, 0x9e, 0x92, 0x26, 0x26, 0xf5, 0x78, 0x10, 0xd0, 0x56, 0x14, 0x1e, 0xf5, 0x7e, 0x0b,
0x96, 0x0a, 0x75, 0x98, 0x32, 0xba, 0x59, 0x22, 0xa3, 0x6b, 0xa6, 0x8c, 0xee, 0xc3, 0xb2, 0xd5,
0x2f, 0x49, 0x71, 0x5d, 0x98, 0x43, 0xc6, 0xc0, 0x0d, 0xbf, 0x22, 0x36, 0x7c, 0x99, 0x64, 0x1b,
0xb0, 0x72, 0xc4, 0x79, 0xec, 0xa7, 0x94, 0x24, 0xd6, 0xc1, 0x35, 0x91, 0x35, 0x97, 0xe6, 0x39,
0xff, 0xad, 0x02, 0x8b, 0x28, 0x4d, 0x9f, 0xfa, 0xe1, 0xb9, 0x9a, 0xab, 0x27, 0xa5, 0x73, 0x75,
0xc7, 0xd8, 0xe4, 0x8c, 0xd2, 0x5f, 0x75, 0xa2, 0x6a, 0xf9, 0x89, 0x62, 0x37, 0xa0, 0x6d, 0x75,
0x77, 0x46, 0x68, 0x96, 0x89, 0x9f, 0xee, 0xf3, 0xf8, 0xc1, 0x79, 0xca, 0x7f, 0xfd, 0xa9, 0xbc,
0x05, 0x9d, 0xac, 0xdb, 0x72, 0x1e, 0x19, 0xd4, 0x91, 0x30, 0x65, 0x05, 0xf4, 0xdb, 0xf9, 0xfb,
0x15, 0x51, 0x70, 0x2b, 0x0a, 0xb4, 0xd6, 0x89, 0x05, 0x51, 0x79, 0x55, 0x05, 0xf1, 0xf7, 0x54,
0xad, 0xfd, 0xd7, 0x1f, 0x2c, 0xca, 0xc4, 0x84, 0x87, 0x03, 0xcf, 0x1f, 0x0e, 0x49, 0x10, 0x37,
0xdc, 0x39, 0x4c, 0x6f, 0x0e, 0x87, 0xce, 0x6d, 0x58, 0x32, 0x7a, 0xf7, 0x86, 0x71, 0xec, 0x01,
0x7b, 0x12, 0x24, 0xe9, 0x8b, 0x30, 0x19, 0x1b, 0x0a, 0xd9, 0x3b, 0xd0, 0x44, 0x69, 0x8b, 0x3d,
0x13, 0x9c, 0x3b, 0xe3, 0xa2, 0xf8, 0xc5, 0x7e, 0x25, 0x94, 0xe9, 0xbf, 0x96, 0x99, 0x55, 0x99,
0xe9, 0xbf, 0xa6, 0x4c, 0xe7, 0x23, 0x58, 0xb6, 0xea, 0x93, 0x4d, 0xbf, 0x07, 0x33, 0x93, 0xf4,
0x75, 0xa4, 0x54, 0xee, 0x96, 0xa4, 0x10, 0x3c, 0xdc, 0xb9, 0x22, 0xc7, 0xf9, 0x04, 0x96, 0xf6,
0xf8, 0x99, 0x64, 0x64, 0xd5, 0x91, 0x5b, 0x6f, 0x3d, 0xf8, 0x51, 0xbe, 0xb3, 0x0e, 0xcc, 0xfc,
0x38, 0x63, 0x00, 0x75, 0x0c, 0xac, 0x58, 0xc7, 0x40, 0xe7, 0x16, 0xb0, 0x83, 0xe0, 0x38, 0x7c,
0xca, 0x93, 0xc4, 0x3f, 0xd6, 0xac, 0xdf, 0x81, 0xda, 0x28, 0x39, 0x96, 0xa2, 0x0a, 0x7f, 0x3a,
0xdf, 0x85, 0x65, 0xab, 0x9c, 0xac, 0xf8, 0x2a, 0x34, 0x93, 0xe0, 0x38, 0xf4, 0xd3, 0x49, 0xcc,
0x65, 0xd5, 0x19, 0xe0, 0x3c, 0x84, 0x95, 0x1f, 0xf2, 0x38, 0x38, 0x3a, 0x7f, 0x5b, 0xf5, 0x76,
0x3d, 0xd5, 0x7c, 0x3d, 0x3b, 0x70, 0x39, 0x57, 0x8f, 0x6c, 0x5e, 0x90, 0xaf, 0x5c, 0xc9, 0x86,
0x2b, 0x12, 0x86, 0xec, 0xab, 0x9a, 0xb2, 0xcf, 0x79, 0x01, 0x6c, 0x2b, 0x0a, 0x43, 0xde, 0x4f,
0xf7, 0x39, 0x8f, 0x33, 0x0b, 0x54, 0x46, 0xab, 0xad, 0x8d, 0x35, 0x39, 0xb3, 0x79, 0x81, 0x2a,
0x89, 0x98, 0x41, 0x7d, 0xcc, 0xe3, 0x11, 0x55, 0xdc, 0x70, 0xe9, 0xb7, 0x73, 0x19, 0x96, 0xad,
0x6a, 0xe5, 0x99, 0xfd, 0x03, 0xb8, 0xbc, 0x1d, 0x24, 0xfd, 0x62, 0x83, 0x5d, 0x98, 0x1b, 0x4f,
0x0e, 0xbd, 0x8c, 0x13, 0x55, 0x12, 0x8f, 0x71, 0xf9, 0x4f, 0x64, 0x65, 0x7f, 0xad, 0x02, 0xf5,
0xdd, 0xe7, 0x4f, 0xb6, 0x70, 0xaf, 0x08, 0xc2, 0x7e, 0x34, 0x42, 0x2d, 0x4c, 0x0c, 0x5a, 0xa7,
0xa7, 0x72, 0xd8, 0x55, 0x68, 0x92, 0xf2, 0x86, 0x27, 0x57, 0xa9, 0x07, 0x65, 0x00, 0x9e, 0x9a,
0xf9, 0xeb, 0x71, 0x10, 0xd3, 0xb1, 0x58, 0x1d, 0x76, 0xeb, 0xb4, 0xcd, 0x14, 0x33, 0x9c, 0x5f,
0xce, 0xc1, 0x9c, 0xdc, 0x7c, 0xc5, 0x46, 0x9e, 0x06, 0xa7, 0x3c, 0xdb, 0xc8, 0x31, 0x85, 0x8a,
0x71, 0xcc, 0x47, 0x51, 0xaa, 0xf5, 0x37, 0xb1, 0x0c, 0x36, 0x48, 0x56, 0x01, 0xa9, 0x44, 0x08,
0x3b, 0x42, 0x4d, 0x94, 0xb2, 0x40, 0x76, 0x15, 0xe6, 0x94, 0x32, 0x50, 0xd7, 0x07, 0x16, 0x05,
0xe1, 0x6c, 0xf4, 0xfd, 0xb1, 0xdf, 0x0f, 0xd2, 0x73, 0x29, 0x16, 0x74, 0x1a, 0xeb, 0x1f, 0x46,
0x7d, 0x7f, 0xe8, 0x1d, 0xfa, 0x43, 0x3f, 0xec, 0x73, 0x65, 0x75, 0xb0, 0x40, 0x3c, 0x81, 0xcb,
0x6e, 0xa9, 0x62, 0xe2, 0x94, 0x9e, 0x43, 0x71, 0x0f, 0xef, 0x47, 0xa3, 0x51, 0x90, 0xe2, 0xc1,
0x9d, 0x54, 0xb3, 0x9a, 0x6b, 0x20, 0xc2, 0xc6, 0x41, 0xa9, 0x33, 0x31, 0x83, 0x4d, 0x65, 0xe3,
0x30, 0x40, 0xac, 0x25, 0xa7, 0xa1, 0xd5, 0x5c, 0x03, 0xc1, 0xb5, 0x98, 0x84, 0x09, 0x4f, 0xd3,
0x21, 0x1f, 0xe8, 0x0e, 0xb5, 0xa8, 0x58, 0x31, 0x83, 0xdd, 0x87, 0x65, 0x61, 0x4b, 0x48, 0xfc,
0x34, 0x4a, 0x4e, 0x82, 0xc4, 0x4b, 0xf0, 0x18, 0x24, 0xce, 0xb4, 0x65, 0x59, 0xec, 0x23, 0x58,
0xcb, 0xc1, 0x31, 0xef, 0xf3, 0xe0, 0x94, 0x0f, 0x48, 0x85, 0xab, 0xb9, 0xd3, 0xb2, 0xd9, 0x0d,
0x68, 0x85, 0x93, 0x91, 0x37, 0x19, 0x0f, 0x7c, 0x54, 0x62, 0x16, 0x48, 0xb9, 0x34, 0x21, 0xf6,
0x01, 0x28, 0x3d, 0x4d, 0x6a, 0x8f, 0x8b, 0x96, 0x84, 0x43, 0xea, 0x75, 0xed, 0x12, 0x48, 0x98,
0x99, 0x4a, 0xda, 0x91, 0xe7, 0x47, 0x05, 0x10, 0x9f, 0xc4, 0xc1, 0xa9, 0x9f, 0xf2, 0xee, 0x92,
0x10, 0xea, 0x32, 0x89, 0xdf, 0x05, 0x61, 0x90, 0x06, 0x7e, 0x1a, 0xc5, 0x5d, 0x46, 0x79, 0x19,
0x80, 0x93, 0x48, 0xf4, 0x91, 0xa4, 0x7e, 0x3a, 0x49, 0xa4, 0x86, 0xba, 0x4c, 0xc4, 0x55, 0xcc,
0x60, 0x1f, 0xc2, 0xaa, 0xa0, 0x08, 0xca, 0x92, 0xba, 0x37, 0xa9, 0x0a, 0x2b, 0x34, 0x23, 0x53,
0x72, 0x71, 0x2a, 0x25, 0x89, 0x14, 0x3e, 0xbc, 0x2c, 0xa6, 0x72, 0x4a, 0x36, 0xf6, 0x0f, 0x7b,
0x10, 0xf4, 0x3d, 0x59, 0x02, 0x59, 0x64, 0x95, 0x46, 0x51, 0xcc, 0x40, 0x12, 0x1f, 0x06, 0x47,
0x3c, 0x0d, 0x46, 0xbc, 0xbb, 0x26, 0x48, 0x5c, 0xa5, 0x91, 0x01, 0x27, 0x63, 0xca, 0xe9, 0x0a,
0x86, 0x17, 0x29, 0xe7, 0xf7, 0x2b, 0x62, 0xf3, 0x91, 0x8c, 0x9a, 0x18, 0xc7, 0x2a, 0xc1, 0xa2,
0x5e, 0x14, 0x0e, 0xcf, 0x25, 0xd7, 0x82, 0x80, 0x9e, 0x85, 0xc3, 0x73, 0x54, 0xec, 0x83, 0xd0,
0x2c, 0x22, 0xe4, 0x5c, 0x5b, 0x81, 0x54, 0xe8, 0x5d, 0x68, 0x8d, 0x27, 0x87, 0xc3, 0xa0, 0x2f,
0x8a, 0xd4, 0x44, 0x2d, 0x02, 0xa2, 0x02, 0x78, 0xae, 0x14, 0x2b, 0x25, 0x4a, 0xd4, 0xa9, 0x44,
0x4b, 0x62, 0x58, 0xc4, 0x79, 0x00, 0x2b, 0x76, 0x07, 0xa5, 0x40, 0xbf, 0x0b, 0x0d, 0xc9, 0xff,
0xca, 0x50, 0xb0, 0x60, 0x98, 0x6f, 0xf1, 0x18, 0xa4, 0xf3, 0x9d, 0x7f, 0x59, 0x87, 0x65, 0x89,
0x6e, 0x0d, 0xa3, 0x84, 0x1f, 0x4c, 0x46, 0x23, 0x3f, 0x2e, 0x11, 0x2c, 0x95, 0xb7, 0x08, 0x96,
0x6a, 0x51, 0xb0, 0x5c, 0xb7, 0xce, 0x97, 0x42, 0x32, 0x19, 0x08, 0xbb, 0x03, 0x8b, 0xfd, 0x61,
0x94, 0x08, 0x75, 0xdf, 0xb4, 0x20, 0xe6, 0xe1, 0xa2, 0x30, 0x9c, 0x29, 0x13, 0x86, 0xa6, 0x20,
0x9b, 0xcd, 0x09, 0x32, 0x07, 0xda, 0x58, 0x29, 0x57, 0xb2, 0x79, 0x4e, 0x1e, 0xb6, 0x0c, 0x0c,
0xfb, 0x93, 0x17, 0x1b, 0x42, 0x46, 0x2d, 0x96, 0x09, 0x8d, 0x60, 0xc4, 0x49, 0xf6, 0x1b, 0xa5,
0x9b, 0x52, 0x68, 0x14, 0xb3, 0xd8, 0x43, 0x00, 0xd1, 0x16, 0x29, 0x20, 0x40, 0x0a, 0xc8, 0x2d,
0x7b, 0x55, 0xcc, 0xf9, 0x5f, 0xc7, 0xc4, 0x24, 0xe6, 0xa4, 0x94, 0x18, 0x5f, 0x3a, 0x7f, 0xa3,
0x02, 0x2d, 0x23, 0x8f, 0x5d, 0x86, 0xa5, 0xad, 0x67, 0xcf, 0xf6, 0x77, 0xdc, 0xcd, 0xe7, 0x8f,
0x7f, 0xb8, 0xe3, 0x6d, 0x3d, 0x79, 0x76, 0xb0, 0xd3, 0xb9, 0x84, 0xf0, 0x93, 0x67, 0x5b, 0x9b,
0x4f, 0xbc, 0x87, 0xcf, 0xdc, 0x2d, 0x05, 0x57, 0xd8, 0x2a, 0x30, 0x77, 0xe7, 0xe9, 0xb3, 0xe7,
0x3b, 0x16, 0x5e, 0x65, 0x1d, 0x68, 0x3f, 0x70, 0x77, 0x36, 0xb7, 0x76, 0x25, 0x52, 0x63, 0x2b,
0xd0, 0x79, 0xf8, 0x62, 0x6f, 0xfb, 0xf1, 0xde, 0x23, 0x6f, 0x6b, 0x73, 0x6f, 0x6b, 0xe7, 0xc9,
0xce, 0x76, 0xa7, 0xce, 0xe6, 0xa1, 0xb9, 0xf9, 0x60, 0x73, 0x6f, 0xfb, 0xd9, 0xde, 0xce, 0x76,
0x67, 0xc6, 0xf9, 0x93, 0x0a, 0x5c, 0xa6, 0x5e, 0x0f, 0xf2, 0x4c, 0x72, 0x03, 0x5a, 0xfd, 0x28,
0x1a, 0xa3, 0xe2, 0x9f, 0x6d, 0x6d, 0x26, 0x84, 0x0c, 0x20, 0x84, 0xc2, 0x51, 0x14, 0xf7, 0xb9,
0xe4, 0x11, 0x20, 0xe8, 0x21, 0x22, 0xc8, 0x00, 0x72, 0x79, 0x45, 0x09, 0xc1, 0x22, 0x2d, 0x81,
0x89, 0x22, 0xab, 0x30, 0x7b, 0x18, 0x73, 0xbf, 0x7f, 0x22, 0xb9, 0x43, 0xa6, 0xd8, 0xb7, 0xb2,
0x93, 0x69, 0x1f, 0x67, 0x7f, 0xc8, 0x07, 0x44, 0x31, 0x0d, 0x77, 0x51, 0xe2, 0x5b, 0x12, 0x46,
0x29, 0xe8, 0x1f, 0xfa, 0xe1, 0x20, 0x0a, 0xf9, 0x40, 0xaa, 0xbd, 0x19, 0xe0, 0xec, 0xc3, 0x6a,
0x7e, 0x7c, 0x92, 0xc7, 0x3e, 0x34, 0x78, 0x4c, 0x68, 0xa1, 0xbd, 0xe9, 0xab, 0x69, 0xf0, 0xdb,
0x7f, 0xa9, 0x42, 0x1d, 0x95, 0x92, 0xe9, 0x0a, 0x8c, 0xa9, 0x67, 0xd6, 0x0a, 0xee, 0x06, 0x3a,
0xec, 0x8a, 0x2d, 0x4a, 0x1a, 0x5a, 0x32, 0x24, 0xcb, 0x8f, 0x79, 0xff, 0x54, 0x9a, 0x5a, 0x0c,
0x04, 0x19, 0x04, 0x0f, 0x01, 0xf4, 0xb5, 0x64, 0x10, 0x95, 0x56, 0x79, 0xf4, 0xe5, 0x5c, 0x96,
0x47, 0xdf, 0x75, 0x61, 0x2e, 0x08, 0x0f, 0xa3, 0x49, 0x38, 0x20, 0x86, 0x68, 0xb8, 0x2a, 0x49,
0x0e, 0x0e, 0x62, 0x54, 0x94, 0x9f, 0x82, 0xfc, 0x33, 0x80, 0x6d, 0x40, 0x33, 0x39, 0x0f, 0xfb,
0x26, 0xcd, 0xaf, 0xc8, 0x59, 0xc2, 0x39, 0x58, 0x3f, 0x38, 0x0f, 0xfb, 0x44, 0xe1, 0x59, 0x31,
0xe7, 0xb7, 0xa0, 0xa1, 0x60, 0x24, 0xcb, 0x17, 0x7b, 0x9f, 0xed, 0x3d, 0x7b, 0xb9, 0xe7, 0x1d,
0xfc, 0x68, 0x6f, 0xab, 0x73, 0x89, 0x2d, 0x42, 0x6b, 0x73, 0x8b, 0x28, 0x9d, 0x80, 0x0a, 0x16,
0xd9, 0xdf, 0x3c, 0x38, 0xd0, 0x48, 0xd5, 0x61, 0x78, 0x90, 0x4f, 0x48, 0xf3, 0xd3, 0x06, 0xfc,
0x0f, 0x61, 0xc9, 0xc0, 0xb2, 0x53, 0xc4, 0x18, 0x81, 0xdc, 0x29, 0x82, 0x54, 0x46, 0x91, 0xe3,
0x74, 0x60, 0xe1, 0x11, 0x4f, 0x1f, 0x87, 0x47, 0x91, 0xaa, 0xe9, 0x7f, 0xd4, 0x61, 0x51, 0x43,
0xb2, 0xa2, 0x3b, 0xb0, 0x18, 0x0c, 0x78, 0x98, 0x06, 0xe9, 0xb9, 0x67, 0xd9, 0x0b, 0xf2, 0x30,
0xaa, 0xda, 0xfe, 0x30, 0xf0, 0x95, 0x1f, 0x49, 0x24, 0xf0, 0xfc, 0x8c, 0x3a, 0x80, 0x69, 0xb7,
0x21, 0xba, 0x12, 0x66, 0x8a, 0xd2, 0x3c, 0x94, 0x40, 0x88, 0xcb, 0x6d, 0x46, 0x7f, 0x22, 0x54,
0xce, 0xb2, 0x2c, 0x5c, 0x2a, 0x51, 0x13, 0x0e, 0x79, 0x46, 0xe8, 0x09, 0x1a, 0x28, 0x38, 0x6a,
0x66, 0x85, 0x7c, 0xcc, 0x3b, 0x6a, 0x0c, 0x67, 0x4f, 0xa3, 0xe0, 0xec, 0x41, 0xf9, 0x79, 0x1e,
0xf6, 0xf9, 0xc0, 0x4b, 0x23, 0x8f, 0xe4, 0x3c, 0x91, 0x44, 0xc3, 0xcd, 0xc3, 0xb8, 0x6f, 0xa4,
0x3c, 0x49, 0x43, 0x2e, 0x2c, 0xde, 0x0d, 0xb2, 0x82, 0x2a, 0x08, 0xcf, 0x07, 0x93, 0x38, 0x48,
0xba, 0x6d, 0x72, 0xe3, 0xd0, 0x6f, 0xf6, 0x3d, 0xb8, 0x7c, 0xc8, 0x93, 0xd4, 0x3b, 0xe1, 0xfe,
0x80, 0xc7, 0x44, 0x5e, 0xc2, 0x5f, 0x24, 0x54, 0xae, 0xf2, 0x4c, 0x24, 0xdc, 0x53, 0x1e, 0x27,
0x41, 0x14, 0x92, 0xb2, 0xd5, 0x74, 0x55, 0x12, 0xeb, 0xc3, 0xc1, 0xeb, 0x8d, 0x5a, 0xcf, 0xe0,
0x22, 0x0d, 0xbc, 0x3c, 0x93, 0xdd, 0x84, 0x59, 0x1a, 0x40, 0xd2, 0xed, 0x10, 0xcd, 0xb4, 0x33,
0x9e, 0x0f, 0x42, 0x57, 0xe6, 0xe1, 0x2a, 0xf7, 0xa3, 0x61, 0x14, 0x93, 0xc6, 0xd5, 0x74, 0x45,
0xc2, 0x9e, 0x9d, 0xe3, 0xd8, 0x1f, 0x9f, 0x48, 0xad, 0x2b, 0x0f, 0x7f, 0x5a, 0x6f, 0xb4, 0x3a,
0x6d, 0xe7, 0xcf, 0xc1, 0x0c, 0x55, 0x4b, 0xd5, 0xd1, 0x64, 0x56, 0x64, 0x75, 0x84, 0x76, 0x61,
0x2e, 0xe4, 0xe9, 0x59, 0x14, 0xbf, 0x52, 0x4e, 0x49, 0x99, 0x74, 0x7e, 0x4e, 0x27, 0x34, 0xed,
0xa4, 0x7b, 0x41, 0xaa, 0x25, 0x9e, 0xb3, 0xc5, 0x52, 0x25, 0x27, 0xbe, 0x3c, 0x34, 0x36, 0x08,
0x38, 0x38, 0xf1, 0x51, 0xd6, 0x5a, 0xab, 0x2f, 0xce, 0xe1, 0x2d, 0xc2, 0x76, 0xc5, 0xe2, 0xdf,
0x84, 0x05, 0xe5, 0xfe, 0x4b, 0xbc, 0x21, 0x3f, 0x4a, 0x95, 0x15, 0x2d, 0x9c, 0x8c, 0xe8, 0xb0,
0xfe, 0x84, 0x1f, 0xa5, 0xce, 0x1e, 0x2c, 0x49, 0xf9, 0xf7, 0x6c, 0xcc, 0x55, 0xd3, 0xbf, 0x51,
0xa6, 0x4b, 0xb4, 0x36, 0x96, 0x6d, 0x81, 0x29, 0x1c, 0x9e, 0x76, 0x49, 0xc7, 0x05, 0x66, 0xca,
0x53, 0x59, 0xa1, 0xdc, 0xcc, 0x95, 0x9d, 0x50, 0x0e, 0xc7, 0xc2, 0x70, 0x7e, 0x92, 0x49, 0xbf,
0xaf, 0x9c, 0xb6, 0x0d, 0x57, 0x25, 0x9d, 0xff, 0x50, 0x81, 0x65, 0xaa, 0x4d, 0x69, 0x43, 0x72,
0xcf, 0xfa, 0xe8, 0x2b, 0x74, 0x53, 0x59, 0x69, 0x85, 0x6d, 0x72, 0x05, 0x66, 0xcc, 0x5d, 0x4c,
0x24, 0xbe, 0xba, 0x4d, 0xa6, 0x5e, 0xb0, 0xc9, 0xdc, 0x85, 0xce, 0x80, 0x0f, 0x03, 0x72, 0xdc,
0xab, 0x3d, 0x41, 0xa8, 0x3e, 0x05, 0xdc, 0xf9, 0x3b, 0x15, 0x58, 0x12, 0x9b, 0x0e, 0x69, 0xe6,
0x72, 0xaa, 0xfe, 0x3c, 0xcc, 0x0b, 0xed, 0x41, 0x4a, 0x10, 0x39, 0xa8, 0x4c, 0x0c, 0x13, 0x2a,
0x0a, 0xef, 0x5e, 0x72, 0xed, 0xc2, 0xec, 0x13, 0xd2, 0xe0, 0x42, 0x8f, 0xd0, 0x92, 0x50, 0x00,
0x7b, 0x5d, 0x76, 0x2f, 0xb9, 0x46, 0xf1, 0x07, 0x0d, 0x54, 0xac, 0x11, 0x77, 0x1e, 0xc1, 0xbc,
0xd5, 0x90, 0x65, 0x3b, 0x6a, 0x0b, 0xdb, 0x51, 0xc1, 0x48, 0x5b, 0x2d, 0x31, 0xd2, 0xfe, 0xb3,
0x1a, 0x30, 0x24, 0xac, 0xdc, 0xca, 0xdd, 0xb0, 0x3d, 0x1d, 0x2a, 0x2a, 0x20, 0x83, 0xd8, 0x06,
0x30, 0x23, 0xa9, 0x3c, 0x30, 0x35, 0xed, 0x81, 0x29, 0xc9, 0x45, 0xb1, 0x2c, 0x35, 0x14, 0xed,
0xdd, 0x20, 0xbb, 0x80, 0x58, 0xa6, 0xd2, 0x3c, 0xdc, 0x45, 0xc9, 0xd5, 0x81, 0x27, 0x18, 0x79,
0x96, 0x56, 0xe9, 0x3c, 0x3d, 0xcc, 0xbe, 0x95, 0x1e, 0xe6, 0x0a, 0xf4, 0x60, 0x9c, 0xe6, 0x1a,
0xf6, 0x69, 0xee, 0x26, 0xcc, 0x2b, 0x8f, 0x86, 0x70, 0xca, 0xca, 0xa3, 0xb3, 0x05, 0x22, 0x3d,
0xa9, 0x03, 0x95, 0x3e, 0x32, 0x0a, 0x97, 0x63, 0x01, 0xc7, 0xfd, 0x22, 0xb3, 0xda, 0xb5, 0xa8,
0xb3, 0x19, 0x40, 0xe7, 0x2f, 0xa4, 0x12, 0x6f, 0x12, 0xca, 0x88, 0x00, 0x3e, 0xa0, 0x43, 0x33,
0x9e, 0xbf, 0xf2, 0x19, 0xce, 0xdf, 0xac, 0x40, 0x07, 0xd7, 0xcd, 0x22, 0xcd, 0x8f, 0x81, 0xb8,
0xe8, 0x82, 0x94, 0x69, 0x95, 0x65, 0x1f, 0x41, 0x93, 0xd2, 0xd1, 0x98, 0x87, 0x92, 0x2e, 0xbb,
0x36, 0x5d, 0x66, 0xf2, 0x67, 0xf7, 0x92, 0x9b, 0x15, 0x36, 0xa8, 0xf2, 0xdf, 0x55, 0xa0, 0x25,
0x5b, 0xf9, 0x95, 0xad, 0x42, 0x3d, 0x23, 0x84, 0x43, 0x28, 0x6b, 0x59, 0xc4, 0xc6, 0x1d, 0x58,
0x1c, 0xf9, 0xe9, 0x24, 0xc6, 0xfd, 0xdf, 0xb2, 0x08, 0xe5, 0x61, 0xdc, 0xcc, 0x49, 0xd4, 0x26,
0x5e, 0x1a, 0x0c, 0x3d, 0x95, 0x2b, 0x83, 0x25, 0xca, 0xb2, 0x50, 0xe2, 0x24, 0xa9, 0x7f, 0xcc,
0xe5, 0x3e, 0x2d, 0x12, 0x4e, 0x17, 0x56, 0xf7, 0x33, 0x2f, 0x8f, 0xa1, 0x8f, 0x3b, 0xff, 0x64,
0x1e, 0xd6, 0x0a, 0x59, 0x3a, 0xb4, 0x4b, 0x9a, 0x39, 0x86, 0xc1, 0xe8, 0x30, 0xd2, 0x87, 0x99,
0x8a, 0x69, 0x01, 0xb1, 0xb2, 0xd8, 0x31, 0x5c, 0x56, 0x0a, 0x09, 0xce, 0x69, 0xb6, 0x79, 0x56,
0x69, 0x57, 0xfc, 0xc0, 0x5e, 0xc2, 0x7c, 0x83, 0x0a, 0x37, 0x19, 0xb9, 0xbc, 0x3e, 0x76, 0x02,
0x5d, 0xad, 0xf9, 0x48, 0xe1, 0x6e, 0x68, 0x47, 0xd8, 0xd6, 0xfb, 0x6f, 0x69, 0xcb, 0x52, 0xdf,
0xdd, 0xa9, 0xb5, 0xb1, 0x73, 0xb8, 0xae, 0xf2, 0x48, 0x7a, 0x17, 0xdb, 0xab, 0x5f, 0x68, 0x6c,
0x74, 0x30, 0xb1, 0x1b, 0x7d, 0x4b, 0xc5, 0xec, 0x67, 0xb0, 0x7a, 0xe6, 0x07, 0xa9, 0xea, 0x96,
0xa1, 0x8b, 0xcc, 0x50, 0x93, 0x1b, 0x6f, 0x69, 0xf2, 0xa5, 0xf8, 0xd8, 0xda, 0xd2, 0xa6, 0xd4,
0xd8, 0xfb, 0xa3, 0x2a, 0x2c, 0xd8, 0xf5, 0x20, 0x99, 0x4a, 0xde, 0x57, 0x32, 0x50, 0x69, 0xaf,
0x39, 0xb8, 0x68, 0x13, 0xa8, 0x96, 0xd9, 0x04, 0xcc, 0x53, 0x78, 0xed, 0x6d, 0xe6, 0xc4, 0xfa,
0xc5, 0xcc, 0x89, 0x33, 0xa5, 0xe6, 0xc4, 0xe9, 0x56, 0xa7, 0xd9, 0x5f, 0xd5, 0xea, 0x34, 0xf7,
0x46, 0xab, 0x53, 0xef, 0xff, 0x56, 0x80, 0x15, 0xa9, 0x97, 0x3d, 0x12, 0x66, 0x90, 0x90, 0x0f,
0xa5, 0x10, 0xfb, 0xce, 0xc5, 0x38, 0x40, 0xad, 0x96, 0xfa, 0x1a, 0x59, 0xd1, 0x8c, 0xaf, 0x32,
0xd5, 0xb1, 0x79, 0xb7, 0x2c, 0x2b, 0x67, 0x52, 0xad, 0xbf, 0xdd, 0xa4, 0x3a, 0xf3, 0x76, 0x93,
0xea, 0x6c, 0xde, 0xa4, 0xda, 0xfb, 0xab, 0x15, 0x58, 0x2e, 0x21, 0xb3, 0xaf, 0x6f, 0xe0, 0x48,
0x18, 0x96, 0xf4, 0xa9, 0x4a, 0xc2, 0x30, 0xc1, 0xde, 0x5f, 0x82, 0x79, 0x8b, 0xb5, 0xbe, 0xbe,
0xf6, 0xf3, 0x1a, 0xa5, 0xa0, 0x6c, 0x0b, 0xeb, 0xfd, 0xaf, 0x2a, 0xb0, 0x22, 0x7b, 0xff, 0x99,
0xf6, 0xa1, 0x38, 0x4f, 0xb5, 0x92, 0x79, 0xfa, 0xff, 0xba, 0xf3, 0xbc, 0x0f, 0x4b, 0x32, 0x68,
0xd4, 0x30, 0x7c, 0x09, 0x8a, 0x29, 0x66, 0xa0, 0x4e, 0x6d, 0xdb, 0xb3, 0x1b, 0x56, 0x90, 0x9c,
0xb1, 0xfd, 0xe6, 0xcc, 0xda, 0x4e, 0x0f, 0xba, 0x72, 0x86, 0x76, 0x4e, 0x79, 0x98, 0x1e, 0x4c,
0x0e, 0x45, 0xd4, 0x64, 0x10, 0x85, 0xa4, 0x06, 0x9a, 0x99, 0x52, 0xa1, 0xf8, 0x1e, 0xb4, 0xcd,
0xed, 0x43, 0x2e, 0x47, 0xce, 0xf6, 0x89, 0xaa, 0x84, 0x59, 0x8a, 0x6d, 0xc3, 0x02, 0x09, 0xc9,
0x81, 0xfe, 0xae, 0x4a, 0xdf, 0xbd, 0xc1, 0x9e, 0xb3, 0x7b, 0xc9, 0xcd, 0x7d, 0xc3, 0x7e, 0x13,
0x16, 0xec, 0xc3, 0xa2, 0xd4, 0x4a, 0xca, 0x4e, 0x0f, 0xf8, 0xb9, 0x5d, 0x98, 0x6d, 0x42, 0x27,
0x7f, 0xda, 0x94, 0x91, 0x3f, 0x53, 0x2a, 0x28, 0x14, 0x67, 0x1f, 0x49, 0xe7, 0xe6, 0x0c, 0xd9,
0x59, 0x6e, 0xda, 0x9f, 0x19, 0xd3, 0xb4, 0x2e, 0xfe, 0x18, 0xee, 0xce, 0xdf, 0x01, 0xc8, 0x30,
0xd6, 0x81, 0xf6, 0xb3, 0xfd, 0x9d, 0x3d, 0x6f, 0x6b, 0x77, 0x73, 0x6f, 0x6f, 0xe7, 0x49, 0xe7,
0x12, 0x63, 0xb0, 0x40, 0x66, 0xc1, 0x6d, 0x8d, 0x55, 0x10, 0x93, 0x86, 0x18, 0x85, 0x55, 0xd9,
0x0a, 0x74, 0x1e, 0xef, 0xe5, 0xd0, 0xda, 0x83, 0xa6, 0xe6, 0x0f, 0x67, 0x15, 0x56, 0x44, 0x50,
0xf0, 0x03, 0x41, 0x1e, 0x4a, 0x3b, 0xf9, 0x07, 0x15, 0xb8, 0x9c, 0xcb, 0xc8, 0xc2, 0xc3, 0x84,
0x02, 0x62, 0x6b, 0x25, 0x36, 0x48, 0xce, 0x0a, 0xa5, 0x6b, 0xe6, 0x24, 0x48, 0x31, 0x03, 0x69,
0xde, 0xd0, 0x4d, 0x73, 0x9c, 0x54, 0x96, 0xe5, 0xac, 0xe9, 0x28, 0x9c, 0x5c, 0xc7, 0x8f, 0x44,
0xb0, 0xb1, 0x99, 0x91, 0x39, 0x8b, 0xed, 0x2e, 0xab, 0x24, 0x1e, 0x2b, 0x2c, 0x65, 0xc7, 0xee,
0x6f, 0x69, 0x9e, 0xf3, 0xbf, 0xeb, 0xc0, 0x7e, 0x30, 0xe1, 0xf1, 0x39, 0xc5, 0x7f, 0x69, 0x2b,
0xeb, 0x5a, 0xde, 0x86, 0x38, 0x3b, 0x9e, 0x1c, 0x7e, 0xc6, 0xcf, 0x55, 0xbc, 0x66, 0xf5, 0x42,
0xf1, 0x9a, 0x65, 0xf1, 0x92, 0xf5, 0xb7, 0xc7, 0x4b, 0xce, 0xbc, 0x2d, 0x5e, 0xf2, 0x1b, 0x30,
0x1f, 0x1c, 0x87, 0x11, 0x8a, 0x03, 0x54, 0x21, 0x92, 0xee, 0xec, 0x8d, 0x1a, 0x1e, 0xd3, 0x25,
0xb8, 0x87, 0x18, 0xfb, 0x24, 0x2b, 0xc4, 0x07, 0xc7, 0x14, 0xdf, 0x6b, 0x0a, 0x88, 0x9d, 0xc1,
0x31, 0x7f, 0x12, 0xf5, 0xfd, 0x34, 0x8a, 0xe9, 0x9c, 0xa6, 0x3e, 0x46, 0x3c, 0x61, 0x37, 0x61,
0x21, 0x89, 0x26, 0xa8, 0x54, 0xa9, 0x69, 0x10, 0x46, 0xa9, 0xb6, 0x40, 0xf7, 0xc5, 0x64, 0xac,
0xc3, 0xf2, 0x24, 0xe1, 0xde, 0x28, 0x48, 0x12, 0xdc, 0x38, 0xfb, 0x51, 0x98, 0xc6, 0xd1, 0x50,
0x9a, 0xa6, 0x96, 0x26, 0x09, 0x7f, 0x2a, 0x72, 0xb6, 0x44, 0x06, 0xfb, 0x5e, 0xd6, 0xa5, 0xb1,
0x1f, 0xc4, 0x49, 0x17, 0xa8, 0x4b, 0x6a, 0xa4, 0xd8, 0xef, 0x7d, 0x3f, 0x88, 0x75, 0x5f, 0x30,
0x91, 0xe4, 0xe2, 0x38, 0x5b, 0xf9, 0x38, 0xce, 0x9f, 0x96, 0xc7, 0x71, 0xce, 0x53, 0xd5, 0xf7,
0x65, 0xd5, 0xc5, 0x25, 0xbe, 0x78, 0x38, 0xe7, 0xd7, 0x13, 0xa0, 0x29, 0x63, 0x0a, 0xd7, 0xa1,
0xa1, 0x86, 0x89, 0x67, 0xf5, 0xa3, 0x38, 0x1a, 0xa9, 0xb3, 0x3a, 0xfe, 0x66, 0x0b, 0x50, 0x4d,
0x23, 0xf9, 0x71, 0x35, 0x8d, 0x9c, 0xdf, 0x85, 0x96, 0xb1, 0x52, 0xec, 0x3d, 0x61, 0x36, 0x40,
0x9d, 0x50, 0x1e, 0xf2, 0x85, 0x67, 0xa8, 0x29, 0xd1, 0xc7, 0x03, 0xf6, 0x6d, 0x58, 0x1a, 0x04,
0x31, 0xa7, 0x90, 0x68, 0x2f, 0xe6, 0xa7, 0x3c, 0x4e, 0x94, 0xf9, 0xa4, 0xa3, 0x33, 0x5c, 0x81,
0x3b, 0x1e, 0x2c, 0x5b, 0x53, 0xa3, 0x85, 0xc3, 0x2c, 0x05, 0x42, 0x2a, 0x0b, 0xae, 0x1d, 0x24,
0x29, 0xf3, 0x70, 0x5b, 0x95, 0x96, 0x1f, 0x6f, 0x1c, 0x47, 0x87, 0xd4, 0x48, 0xc5, 0xb5, 0x30,
0xe7, 0x7f, 0xd6, 0xa0, 0xb6, 0x1b, 0x8d, 0x4d, 0x7f, 0x56, 0xa5, 0xe8, 0xcf, 0x92, 0xfa, 0xaf,
0xa7, 0xd5, 0x5b, 0xa9, 0xa4, 0x58, 0x20, 0xbb, 0x0b, 0x0b, 0xc8, 0x69, 0x69, 0x84, 0xfa, 0xfe,
0x99, 0x1f, 0x8b, 0xa8, 0xc9, 0x1a, 0x91, 0x6f, 0x2e, 0x87, 0xad, 0x40, 0x4d, 0xab, 0x6d, 0x54,
0x00, 0x93, 0x78, 0xd8, 0xa4, 0x98, 0x81, 0x73, 0x69, 0xa6, 0x95, 0x29, 0x14, 0x5c, 0xf6, 0xf7,
0x82, 0x9d, 0xc5, 0xe6, 0x5b, 0x96, 0x85, 0xba, 0x38, 0x32, 0xec, 0x28, 0x53, 0x6d, 0x75, 0xda,
0x74, 0x40, 0x34, 0x6c, 0x07, 0xc4, 0x0d, 0x68, 0xa5, 0xc3, 0x53, 0x6f, 0xec, 0x9f, 0x0f, 0x23,
0x7f, 0x20, 0x19, 0xc5, 0x84, 0xd8, 0x7d, 0x80, 0xd1, 0x78, 0x2c, 0xa9, 0x98, 0x2c, 0x08, 0xad,
0x8d, 0x8e, 0x9c, 0xfd, 0xa7, 0xfb, 0xfb, 0x82, 0xfa, 0x5c, 0xa3, 0x0c, 0xdb, 0x81, 0x85, 0xd2,
0x10, 0xe6, 0x6b, 0xca, 0xb3, 0x1d, 0x8d, 0xd7, 0x4b, 0xe8, 0x3c, 0xf7, 0x51, 0xef, 0xb7, 0x81,
0xfd, 0x9a, 0x11, 0xc8, 0x2f, 0xa1, 0xa9, 0x7b, 0x68, 0xc6, 0xfd, 0x52, 0xf8, 0x4a, 0xcb, 0x8e,
0xfb, 0xa5, 0x68, 0x95, 0x5b, 0xb0, 0x20, 0x76, 0x1b, 0x2d, 0x3f, 0x45, 0xc8, 0x41, 0x0e, 0x75,
0xfe, 0xb4, 0x02, 0x33, 0x44, 0x79, 0xa8, 0x7e, 0x89, 0x3c, 0xed, 0x08, 0xa4, 0xae, 0xcd, 0xbb,
0x79, 0x98, 0x39, 0xd6, 0xd5, 0x86, 0xaa, 0x26, 0x03, 0xf3, 0x7a, 0xc3, 0x0d, 0x68, 0xea, 0x96,
0x0c, 0x52, 0xca, 0x40, 0x76, 0x1d, 0xea, 0x27, 0xd1, 0x58, 0x9d, 0x50, 0x21, 0x9b, 0x51, 0x97,
0xf0, 0xac, 0x3f, 0x58, 0x9f, 0x18, 0x82, 0x38, 0x05, 0xe4, 0xe1, 0x92, 0xb1, 0xce, 0x96, 0x8e,
0xf5, 0x05, 0x2c, 0xa2, 0x7c, 0x30, 0x1c, 0x23, 0xd3, 0xf7, 0xa2, 0x6f, 0xa1, 0x6a, 0xd3, 0x1f,
0x4e, 0x06, 0xdc, 0xb4, 0x13, 0x90, 0xe1, 0x5b, 0xe2, 0x4a, 0x43, 0x76, 0xfe, 0x69, 0x45, 0xc8,
0x1d, 0xac, 0x97, 0xdd, 0x81, 0x3a, 0x6e, 0x1b, 0x39, 0xb3, 0x90, 0x0e, 0x29, 0xc2, 0x72, 0x2e,
0x95, 0xc0, 0x55, 0x24, 0xd3, 0xb4, 0x59, 0xbb, 0x30, 0x4c, 0x67, 0x87, 0x6c, 0x3d, 0xb2, 0xdc,
0xd9, 0x34, 0x87, 0xb2, 0x75, 0xc3, 0xaf, 0x57, 0xb7, 0xb6, 0x22, 0xa5, 0x49, 0x0d, 0x8e, 0xb9,
0xe1, 0xcf, 0xfb, 0xc3, 0x0a, 0xcc, 0x5b, 0x7d, 0x42, 0xee, 0xa1, 0xc0, 0x7f, 0x61, 0x65, 0x92,
0x2b, 0x6f, 0x42, 0x26, 0xe7, 0x55, 0x6d, 0xce, 0xd3, 0xfe, 0xa1, 0x9a, 0xe9, 0x1f, 0xba, 0x0f,
0xcd, 0xec, 0x6e, 0x8b, 0xdd, 0x29, 0x6c, 0x51, 0x05, 0x57, 0x65, 0x85, 0x32, 0x0f, 0xc4, 0x8c,
0xe1, 0x81, 0x70, 0x3e, 0x81, 0x96, 0x51, 0xde, 0xf4, 0x20, 0x54, 0x2c, 0x0f, 0x82, 0x8e, 0x3c,
0xac, 0x66, 0x91, 0x87, 0xce, 0x2f, 0xaa, 0x30, 0x8f, 0xe4, 0x1d, 0x84, 0xc7, 0xfb, 0xd1, 0x30,
0xe8, 0x9f, 0x13, 0x59, 0x29, 0x4a, 0x96, 0x6a, 0x83, 0x22, 0x73, 0x1b, 0x46, 0x31, 0xa4, 0xc3,
0xad, 0x85, 0xcc, 0xd4, 0x69, 0x14, 0xaa, 0x28, 0x92, 0x0e, 0xfd, 0x84, 0x1b, 0x97, 0x5d, 0x5c,
0x1b, 0x44, 0xd1, 0x87, 0x00, 0xc5, 0x91, 0x8e, 0x82, 0xe1, 0x30, 0x10, 0x65, 0xc5, 0x79, 0xb7,
0x2c, 0x0b, 0xdb, 0x1c, 0x04, 0x89, 0x7f, 0x98, 0xf9, 0x7e, 0x75, 0x9a, 0x8c, 0xa5, 0xfe, 0x6b,
0xc3, 0x58, 0x2a, 0x02, 0xcf, 0x6d, 0x30, 0xbf, 0x90, 0x73, 0x85, 0x85, 0x74, 0xfe, 0x75, 0x15,
0x5a, 0x06, 0x59, 0x20, 0x3b, 0x97, 0xee, 0x7b, 0x06, 0x2a, 0x83, 0x22, 0x42, 0xcb, 0x82, 0x62,
0x20, 0xec, 0xa6, 0xdd, 0x2a, 0x39, 0x59, 0x88, 0xe1, 0x2d, 0x12, 0xba, 0x0a, 0x4d, 0x24, 0xfd,
0x0f, 0xc8, 0x5c, 0x23, 0x2f, 0x96, 0x69, 0x40, 0xe5, 0x6e, 0x50, 0xee, 0x4c, 0x96, 0x4b, 0xc0,
0x1b, 0xc3, 0x24, 0x3e, 0x82, 0xb6, 0xac, 0x86, 0xd6, 0x98, 0x06, 0x9d, 0x31, 0x9f, 0xb5, 0xfe,
0xae, 0x55, 0x52, 0x7d, 0xb9, 0xa1, 0xbe, 0x6c, 0xbc, 0xed, 0x4b, 0x55, 0xd2, 0x79, 0xa4, 0x23,
0x50, 0x1e, 0xc5, 0xfe, 0xf8, 0x44, 0x09, 0x94, 0xfb, 0xb0, 0xac, 0xe4, 0xc6, 0x24, 0xf4, 0xc3,
0x30, 0x9a, 0x84, 0x7d, 0xae, 0x82, 0x14, 0xcb, 0xb2, 0x9c, 0x81, 0x0e, 0x69, 0xa7, 0x8a, 0xd8,
0x5d, 0x98, 0x11, 0x8a, 0xa7, 0x50, 0x0f, 0xca, 0x45, 0x88, 0x28, 0xc2, 0xee, 0xc0, 0x8c, 0xd0,
0x3f, 0xab, 0x53, 0x99, 0x5e, 0x14, 0x70, 0xd6, 0x61, 0x91, 0x62, 0xe8, 0x0d, 0xd9, 0xf7, 0x4e,
0x99, 0xda, 0x30, 0xdb, 0x17, 0x91, 0xf6, 0x2b, 0xc0, 0xf6, 0x04, 0x5f, 0x99, 0x7e, 0xe4, 0x3f,
0xad, 0x41, 0xcb, 0x80, 0x51, 0x3e, 0x91, 0xf3, 0xcf, 0x1b, 0x04, 0xfe, 0x88, 0xa7, 0x3c, 0x96,
0xbc, 0x94, 0x43, 0xb1, 0x9c, 0x7f, 0x7a, 0xec, 0x45, 0x93, 0xd4, 0x1b, 0xf0, 0xe3, 0x98, 0x73,
0xa9, 0xcf, 0xe4, 0x50, 0x2c, 0x87, 0xd4, 0x6c, 0x94, 0x13, 0xee, 0xba, 0x1c, 0xaa, 0xbc, 0xc2,
0x62, 0x9e, 0xea, 0x99, 0x57, 0x58, 0xcc, 0x4a, 0x5e, 0xb2, 0xce, 0x94, 0x48, 0xd6, 0x0f, 0x61,
0x55, 0xc8, 0x50, 0x29, 0x3d, 0xbc, 0x1c, 0x71, 0x4d, 0xc9, 0x65, 0x77, 0xa1, 0x83, 0x7d, 0x56,
0xac, 0x91, 0x04, 0x3f, 0x17, 0x3c, 0x56, 0x71, 0x0b, 0x38, 0x96, 0x25, 0xd7, 0x83, 0x59, 0x56,
0x84, 0xe6, 0x14, 0x70, 0x2a, 0xeb, 0xbf, 0xb6, 0xcb, 0x36, 0x65, 0xd9, 0x1c, 0xce, 0x3e, 0x82,
0xb5, 0x11, 0x1f, 0x04, 0xbe, 0x5d, 0x85, 0x97, 0x6d, 0xf2, 0xd3, 0xb2, 0xb1, 0x15, 0x9c, 0x85,
0x9f, 0x47, 0xa3, 0xc3, 0x40, 0x6c, 0x6c, 0xc2, 0x49, 0x52, 0x77, 0x0b, 0xb8, 0x33, 0x0f, 0xad,
0x83, 0x34, 0x1a, 0xab, 0xa5, 0x5f, 0x80, 0xb6, 0x48, 0xca, 0xb0, 0xd4, 0x77, 0xe0, 0x0a, 0xd1,
0xeb, 0xf3, 0x68, 0x1c, 0x0d, 0xa3, 0xe3, 0x73, 0xcb, 0xd4, 0xf1, 0x6f, 0x2b, 0xb0, 0x6c, 0xe5,
0x66, 0xb6, 0x0e, 0xb2, 0xcb, 0xaa, 0x58, 0x42, 0x41, 0xe2, 0x4b, 0xc6, 0xb6, 0x20, 0x0a, 0x0a,
0x37, 0xd8, 0x0b, 0x19, 0x5e, 0xb8, 0x99, 0x5d, 0x90, 0x51, 0x1f, 0x0a, 0x7a, 0xef, 0x16, 0xe9,
0x5d, 0x7e, 0xaf, 0xae, 0xce, 0xa8, 0x2a, 0x7e, 0x53, 0x06, 0x52, 0x0d, 0xe4, 0xa0, 0x6b, 0x76,
0xf0, 0x8b, 0x69, 0x1a, 0x53, 0x3d, 0xe8, 0x6b, 0x30, 0x71, 0x7e, 0x59, 0x01, 0xc8, 0x7a, 0x47,
0xe1, 0x37, 0x7a, 0x6b, 0x13, 0x77, 0xc9, 0x8d, 0x6d, 0xec, 0x3d, 0x68, 0xeb, 0x08, 0x8a, 0x6c,
0xb7, 0x6c, 0x29, 0x0c, 0xb5, 0x8b, 0xdb, 0xb0, 0x78, 0x3c, 0x8c, 0x0e, 0x49, 0x8b, 0xa1, 0x38,
0xe7, 0x44, 0x06, 0xe7, 0x2e, 0x08, 0xf8, 0xa1, 0x44, 0xb3, 0xad, 0xb5, 0x6e, 0x6e, 0xad, 0xe5,
0x1b, 0xe5, 0x2f, 0xaa, 0xda, 0x8d, 0x9d, 0xcd, 0xc4, 0x1b, 0xb9, 0x9c, 0x6d, 0x14, 0xc4, 0xfa,
0x14, 0xcf, 0x31, 0x9d, 0x81, 0xf6, 0xdf, 0x6a, 0x29, 0xff, 0x04, 0x16, 0x62, 0x21, 0x33, 0x95,
0x40, 0xad, 0xbf, 0x41, 0xa0, 0xce, 0xc7, 0xd6, 0xce, 0xfc, 0x2d, 0xe8, 0xf8, 0x83, 0x53, 0x1e,
0xa7, 0x01, 0x59, 0x0e, 0x49, 0x8d, 0x12, 0x03, 0x5c, 0x34, 0x70, 0xd2, 0x56, 0x6e, 0xc3, 0xa2,
0x0c, 0x95, 0xd6, 0x25, 0xe5, 0xad, 0xca, 0x0c, 0xc6, 0x82, 0xce, 0x3f, 0x52, 0x5e, 0x73, 0x7b,
0x75, 0xdf, 0x3c, 0x2b, 0xe6, 0x08, 0xab, 0xb9, 0x11, 0x7e, 0x43, 0x7a, 0xa6, 0x07, 0xca, 0x44,
0x59, 0x33, 0x42, 0xf2, 0x06, 0x32, 0xea, 0xc0, 0x9e, 0xd6, 0xfa, 0x45, 0xa6, 0xd5, 0xf9, 0x8f,
0x15, 0x98, 0xdb, 0x8d, 0xc6, 0xbb, 0x38, 0xc5, 0xa8, 0xe3, 0x20, 0x9b, 0xe8, 0x7b, 0x0a, 0x2a,
0xf9, 0x96, 0xd0, 0xc5, 0x52, 0xad, 0x64, 0x3e, 0xaf, 0x95, 0xfc, 0x36, 0xbc, 0x43, 0x46, 0xf2,
0x38, 0x1a, 0x47, 0x31, 0xb2, 0xab, 0x3f, 0x14, 0x2a, 0x48, 0x14, 0xa6, 0x27, 0x4a, 0x9c, 0xbe,
0xa9, 0x08, 0x59, 0xae, 0x86, 0xe9, 0xa9, 0x27, 0x4e, 0x78, 0x52, 0x8b, 0x12, 0x52, 0xb6, 0x98,
0xe1, 0xfc, 0x06, 0x34, 0xe9, 0x84, 0x41, 0x43, 0x7b, 0x1f, 0x9a, 0x27, 0xd1, 0xd8, 0x3b, 0x09,
0xc2, 0x54, 0xb1, 0xff, 0x42, 0xa6, 0xfa, 0xef, 0xd2, 0xa4, 0xe8, 0x02, 0xce, 0x1f, 0xcf, 0xc2,
0xdc, 0xe3, 0xf0, 0x34, 0x0a, 0xfa, 0xe4, 0x7d, 0x1f, 0xf1, 0x51, 0xa4, 0x6e, 0x6e, 0xe0, 0x6f,
0xba, 0x1c, 0x9d, 0xdd, 0xad, 0x14, 0x2c, 0x64, 0x20, 0x78, 0x26, 0x8d, 0xcd, 0xbb, 0x91, 0x32,
0x95, 0x1d, 0xb4, 0x66, 0x8c, 0xbb, 0x2f, 0x58, 0x9b, 0xb8, 0xb3, 0x47, 0x73, 0x27, 0x22, 0x6e,
0x0d, 0x04, 0x27, 0x5f, 0x86, 0x54, 0x8a, 0x98, 0x3b, 0x11, 0xff, 0x23, 0x21, 0x3a, 0x67, 0xc7,
0x5c, 0xb8, 0x39, 0xb4, 0xea, 0x85, 0xe7, 0x6c, 0x13, 0x44, 0xf5, 0x4c, 0x7c, 0x20, 0xca, 0x88,
0xed, 0xc0, 0x84, 0x50, 0x41, 0xcd, 0xdf, 0x18, 0x16, 0xb7, 0xbe, 0xf3, 0xb0, 0x88, 0xb3, 0xd0,
0x42, 0x57, 0x8c, 0x13, 0xc4, 0xfd, 0xd2, 0x3c, 0x6e, 0x9c, 0xce, 0x45, 0x4c, 0xb9, 0x3a, 0x9d,
0x23, 0xc9, 0xf8, 0xc3, 0xe1, 0xa1, 0xdf, 0x7f, 0x25, 0x0e, 0x93, 0x6d, 0xe1, 0x1d, 0xb3, 0x40,
0x0a, 0x8c, 0xcc, 0xd6, 0x95, 0xa2, 0x97, 0xea, 0xae, 0x09, 0xb1, 0x0d, 0x68, 0x91, 0xe5, 0x42,
0xae, 0xec, 0x02, 0xad, 0x6c, 0xc7, 0x34, 0x6d, 0xd0, 0xda, 0x9a, 0x85, 0xcc, 0xb8, 0x80, 0xc5,
0x42, 0x94, 0xb7, 0x3f, 0x18, 0xc8, 0x90, 0x8a, 0x8e, 0xb8, 0x5f, 0xa9, 0x01, 0xb2, 0x8d, 0x88,
0x09, 0x13, 0x05, 0x96, 0xa8, 0x80, 0x85, 0xb1, 0xeb, 0xc2, 0x72, 0x38, 0xf6, 0x83, 0x01, 0x05,
0x2c, 0x89, 0xe3, 0xa7, 0xc6, 0xb0, 0x0e, 0xf5, 0x9b, 0x36, 0xce, 0x65, 0x9a, 0x15, 0x0b, 0xc3,
0xb9, 0xd1, 0xe9, 0x51, 0x16, 0x16, 0x6e, 0x83, 0xec, 0x03, 0x72, 0x6a, 0xa7, 0x9c, 0x62, 0xbf,
0x17, 0x36, 0xde, 0x91, 0x63, 0x96, 0x64, 0xab, 0xfe, 0x1e, 0x60, 0x11, 0x57, 0x94, 0x44, 0xb5,
0x4d, 0xf8, 0x15, 0x56, 0x2d, 0xb5, 0x4d, 0x16, 0x25, 0xbf, 0x82, 0x28, 0xe0, 0x6c, 0x42, 0xdb,
0xac, 0x80, 0x35, 0xa0, 0xfe, 0x6c, 0x7f, 0x67, 0xaf, 0x73, 0x89, 0xb5, 0x60, 0xee, 0x60, 0xe7,
0xf9, 0xf3, 0x27, 0x3b, 0xdb, 0x9d, 0x0a, 0x6b, 0x43, 0x43, 0xc7, 0xbb, 0x56, 0x31, 0xb5, 0xb9,
0xb5, 0xb5, 0xb3, 0xff, 0x7c, 0x67, 0xbb, 0x53, 0xfb, 0xb4, 0xde, 0xa8, 0x76, 0x6a, 0xa4, 0xb9,
0x19, 0xf5, 0xbf, 0xc5, 0x66, 0x74, 0x1d, 0x80, 0x4e, 0x14, 0x59, 0x4c, 0x4b, 0xdd, 0x35, 0x10,
0x94, 0x90, 0xfa, 0xac, 0x5d, 0x13, 0x97, 0x4d, 0x55, 0x9a, 0x66, 0x8d, 0x6e, 0x75, 0x9a, 0x4e,
0x9c, 0x19, 0xd7, 0x06, 0x91, 0xa2, 0x24, 0x40, 0x41, 0x98, 0x82, 0x0f, 0x4d, 0x08, 0x57, 0x28,
0xe6, 0x49, 0x34, 0x3c, 0xe5, 0xa2, 0x88, 0xd0, 0xcb, 0x2c, 0x0c, 0xdb, 0x92, 0xa2, 0xc6, 0x08,
0x90, 0x9e, 0x71, 0x6d, 0x90, 0x7d, 0x47, 0xad, 0x50, 0x83, 0x56, 0x68, 0xad, 0x38, 0xdd, 0xd6,
0xea, 0x3c, 0x2d, 0x18, 0x7d, 0x9a, 0xb4, 0x4c, 0xdf, 0x2c, 0x7e, 0x77, 0x01, 0xe3, 0x0f, 0x5b,
0x07, 0x36, 0x1a, 0x8f, 0xbd, 0x12, 0x6b, 0x4c, 0xdd, 0x2d, 0xc9, 0xf9, 0x1a, 0x8c, 0x45, 0x29,
0xb0, 0xcd, 0xc1, 0x40, 0x76, 0xd3, 0xbc, 0x7b, 0x1b, 0x9b, 0x97, 0xbd, 0x95, 0x2c, 0x2c, 0x91,
0x37, 0xd5, 0x72, 0x79, 0xf3, 0x46, 0xae, 0x74, 0x1e, 0x43, 0x6b, 0xdf, 0xb8, 0x3e, 0xee, 0xa0,
0x68, 0x56, 0x17, 0xc7, 0x85, 0xd0, 0x16, 0x46, 0xa2, 0x0c, 0x35, 0xba, 0x54, 0x35, 0xbb, 0xe4,
0xfc, 0xc3, 0x8a, 0xb8, 0x91, 0xa7, 0x87, 0x20, 0xda, 0x77, 0xa0, 0xad, 0xfd, 0x0c, 0xd9, 0x25,
0x06, 0x0b, 0xc3, 0x32, 0xd4, 0x1d, 0x2f, 0x3a, 0x3a, 0x4a, 0xb8, 0x0a, 0x37, 0xb6, 0x30, 0xa5,
0x05, 0xa3, 0x5e, 0x1d, 0x88, 0x16, 0x12, 0x19, 0x76, 0x5c, 0xc0, 0x91, 0xd2, 0xa5, 0x9d, 0x57,
0x05, 0x5a, 0xeb, 0xb4, 0xbe, 0x6b, 0x91, 0x9f, 0xe9, 0xbb, 0xd0, 0xd0, 0xf5, 0xda, 0x5b, 0x9c,
0x2a, 0xa9, 0xf3, 0x71, 0x2b, 0xa5, 0x13, 0xb2, 0xd5, 0x69, 0xc1, 0x70, 0xc5, 0x0c, 0xa4, 0xa5,
0xa3, 0x20, 0xce, 0x17, 0x17, 0x1c, 0x58, 0x92, 0xe3, 0xbc, 0x84, 0x65, 0x25, 0x3e, 0x0c, 0xf5,
0xdc, 0x5e, 0xc8, 0xca, 0xdb, 0xc4, 0x6b, 0xb5, 0x28, 0x5e, 0x9d, 0x7f, 0x55, 0x87, 0x39, 0xb9,
0xda, 0x85, 0x67, 0x08, 0xc4, 0x06, 0x6d, 0x61, 0xac, 0x6b, 0x5d, 0x36, 0x25, 0x42, 0x90, 0x9b,
0xee, 0x9d, 0xfc, 0xb6, 0x99, 0x19, 0x0b, 0x73, 0x5b, 0xe7, 0x2a, 0xd4, 0xc7, 0x7e, 0x7a, 0x42,
0xb6, 0x24, 0x41, 0x4b, 0x94, 0x56, 0xe6, 0xe8, 0x19, 0xdb, 0x1c, 0x5d, 0xf6, 0xf8, 0x82, 0xd0,
0x11, 0x8b, 0x8f, 0x2f, 0x5c, 0x85, 0xa6, 0xd8, 0xe6, 0x33, 0x8b, 0x73, 0x06, 0xe4, 0xd4, 0x82,
0x46, 0x41, 0x2d, 0xb8, 0xf8, 0x86, 0xfd, 0x3d, 0x98, 0x15, 0x17, 0x90, 0x64, 0x58, 0xf9, 0x55,
0xe5, 0x50, 0x16, 0xe5, 0xd4, 0x5f, 0x11, 0x6f, 0xe6, 0xca, 0xb2, 0xe6, 0x15, 0xe6, 0x96, 0x7d,
0x85, 0xd9, 0x34, 0x94, 0xb7, 0x73, 0x86, 0xf2, 0xbb, 0xd0, 0xd1, 0xd3, 0x47, 0x96, 0xad, 0x30,
0x91, 0x51, 0xc7, 0x05, 0x3c, 0xdb, 0x8f, 0x16, 0xac, 0xfd, 0x08, 0x25, 0xdc, 0x66, 0x9a, 0xf2,
0xd1, 0x38, 0x55, 0xfb, 0xd1, 0x43, 0x98, 0xb7, 0x3a, 0x89, 0xdb, 0x90, 0x0c, 0x76, 0xef, 0x5c,
0x62, 0xf3, 0xd0, 0x7c, 0xbc, 0xe7, 0x3d, 0x7c, 0xf2, 0xf8, 0xd1, 0xee, 0xf3, 0x4e, 0x05, 0x93,
0x07, 0x2f, 0xb6, 0xb6, 0x76, 0x76, 0xb6, 0x69, 0x5b, 0x02, 0x98, 0x7d, 0xb8, 0xf9, 0x18, 0xb7,
0xa8, 0x9a, 0xf3, 0x7f, 0x2a, 0xd0, 0x32, 0xaa, 0x67, 0xdf, 0xd7, 0x33, 0x23, 0x6e, 0xb9, 0x5e,
0x2b, 0x76, 0x61, 0x5d, 0x09, 0x6a, 0x63, 0x6a, 0xf4, 0x7b, 0x13, 0xd5, 0xa9, 0xef, 0x4d, 0xe0,
0xf2, 0xf8, 0xa2, 0x06, 0x3d, 0x0f, 0xe2, 0xd8, 0x92, 0x87, 0x45, 0x4c, 0x51, 0xb6, 0xbb, 0x60,
0x49, 0x61, 0xaa, 0xcb, 0xc3, 0xce, 0x87, 0x00, 0x59, 0x6f, 0xec, 0x61, 0x5f, 0xb2, 0x87, 0x5d,
0x31, 0x86, 0x5d, 0x75, 0xb6, 0x85, 0xc0, 0x90, 0x53, 0xa8, 0x3d, 0xa2, 0xdf, 0x01, 0xa6, 0x2c,
0x43, 0x14, 0xbb, 0x37, 0x1e, 0xf2, 0x54, 0x5d, 0x3f, 0x59, 0x92, 0x39, 0x8f, 0x75, 0x86, 0xba,
0x41, 0x95, 0xd5, 0x92, 0xc9, 0x1d, 0x49, 0x71, 0x79, 0xb9, 0x23, 0x8b, 0xba, 0x3a, 0xdf, 0xe9,
0x41, 0x77, 0x9b, 0x63, 0x6d, 0x9b, 0xc3, 0x61, 0xae, 0x3b, 0x78, 0xb4, 0x2f, 0xc9, 0x93, 0xe7,
0xfe, 0x1f, 0xc0, 0xe5, 0x4d, 0x71, 0xd3, 0xe4, 0xeb, 0x0a, 0x44, 0x76, 0xba, 0xb0, 0x9a, 0xaf,
0x52, 0x36, 0xf6, 0x10, 0x96, 0xb6, 0xf9, 0xe1, 0xe4, 0xf8, 0x09, 0x3f, 0xcd, 0x1a, 0x62, 0x50,
0x4f, 0x4e, 0xa2, 0x33, 0x39, 0x3f, 0xf4, 0x9b, 0x5d, 0x03, 0x18, 0x62, 0x19, 0x2f, 0x19, 0xf3,
0xbe, 0xba, 0x45, 0x4c, 0xc8, 0xc1, 0x98, 0xf7, 0x9d, 0x0f, 0x81, 0x99, 0xf5, 0xc8, 0xf9, 0x42,
0x5d, 0x7c, 0x72, 0xe8, 0x25, 0xe7, 0x49, 0xca, 0x47, 0xea, 0x7a, 0xb4, 0x09, 0x39, 0xb7, 0xa1,
0xbd, 0xef, 0x9f, 0xbb, 0xfc, 0x73, 0xf9, 0xbe, 0xc9, 0x1a, 0xcc, 0x8d, 0xfd, 0x73, 0xe4, 0x67,
0xed, 0x2e, 0xa0, 0x6c, 0xe7, 0x4f, 0x6a, 0x30, 0x2b, 0x4a, 0x62, 0xad, 0x03, 0x9e, 0xa4, 0x41,
0x48, 0x3c, 0xa6, 0x6a, 0x35, 0xa0, 0x82, 0xc0, 0xac, 0x96, 0x08, 0x4c, 0x69, 0xc3, 0x52, 0xb7,
0x31, 0x25, 0xc9, 0x5a, 0x18, 0x8a, 0xad, 0xec, 0x46, 0x81, 0xa0, 0xd4, 0x0c, 0xc8, 0xf9, 0xe3,
0x32, 0x8d, 0x5f, 0xf4, 0x4f, 0xed, 0x05, 0x52, 0x26, 0x9a, 0x50, 0xe9, 0xb9, 0x62, 0x4e, 0xc5,
0x6f, 0xe7, 0xce, 0x15, 0x85, 0xf3, 0x43, 0xe3, 0x02, 0xe7, 0x07, 0x61, 0xd8, 0x7a, 0xd3, 0xf9,
0x01, 0x2e, 0x72, 0x7e, 0xb8, 0x88, 0x1f, 0xac, 0x07, 0x0d, 0xda, 0xd3, 0x0d, 0x11, 0xa9, 0xd2,
0xc8, 0x2f, 0xda, 0xfc, 0x32, 0x6f, 0xf1, 0x8b, 0xb4, 0xbf, 0xb8, 0x3a, 0xdf, 0x19, 0xc1, 0x9c,
0x04, 0x51, 0x15, 0x3b, 0x0c, 0x52, 0x69, 0xe9, 0xc4, 0x9f, 0x48, 0x91, 0xa1, 0x3f, 0x52, 0xb7,
0xd7, 0xe9, 0x37, 0x0e, 0x99, 0x2e, 0xd1, 0x7e, 0x3e, 0x09, 0x62, 0x3e, 0x50, 0xf7, 0xc0, 0x0c,
0x88, 0x22, 0x77, 0x13, 0xef, 0x55, 0x18, 0x9d, 0x85, 0xf2, 0x26, 0x98, 0x4e, 0x3b, 0x0c, 0x3a,
0xf4, 0x8a, 0x05, 0x1e, 0xbf, 0x15, 0x5b, 0xfe, 0xdd, 0x0a, 0x74, 0x24, 0x83, 0xe8, 0x3c, 0xe5,
0xb4, 0x7e, 0xd3, 0x75, 0xc7, 0x9b, 0x30, 0x4f, 0x87, 0x7f, 0xbd, 0x55, 0x48, 0x07, 0xb0, 0x05,
0x62, 0x7f, 0x55, 0xe8, 0xdc, 0x28, 0x18, 0x4a, 0x7a, 0x33, 0x21, 0xb5, 0xdb, 0xc4, 0xbe, 0x0c,
0xfa, 0xaf, 0xb8, 0x3a, 0xed, 0xfc, 0x51, 0x05, 0x96, 0x8c, 0x0e, 0x4b, 0x06, 0xfb, 0x04, 0xda,
0xfa, 0xb1, 0x18, 0xae, 0x95, 0xa1, 0x35, 0x5b, 0x22, 0x64, 0x9f, 0x59, 0x85, 0x89, 0x4e, 0xfd,
0x73, 0xea, 0x60, 0x32, 0x19, 0x49, 0x2d, 0xc4, 0x84, 0x70, 0xfd, 0xcf, 0x38, 0x7f, 0xa5, 0x8b,
0x08, 0x3d, 0xc8, 0xc2, 0xc8, 0x69, 0x12, 0x85, 0xe9, 0x89, 0x2e, 0x54, 0x97, 0x4e, 0x13, 0x13,
0x74, 0xfe, 0x73, 0x15, 0x96, 0x85, 0x15, 0x4a, 0x5a, 0xff, 0xf4, 0x7d, 0xfd, 0x59, 0x61, 0x90,
0x13, 0xc2, 0x66, 0xf7, 0x92, 0x2b, 0xd3, 0xec, 0xfb, 0x17, 0xb4, 0x9c, 0xe9, 0xdb, 0x05, 0x53,
0xd6, 0xa2, 0x56, 0xb6, 0x16, 0x6f, 0x98, 0xe9, 0x32, 0xff, 0xd5, 0x4c, 0xb9, 0xff, 0xea, 0x62,
0xfe, 0xa2, 0x42, 0x08, 0xfe, 0x9c, 0x2c, 0x65, 0x85, 0xe0, 0x6f, 0xc0, 0x9a, 0x05, 0x90, 0x9c,
0x0d, 0x8e, 0x02, 0xae, 0xee, 0xd6, 0x2d, 0x25, 0x3c, 0xf5, 0xac, 0x22, 0x0f, 0xe6, 0x60, 0x26,
0xe9, 0x47, 0x63, 0xee, 0xac, 0xc2, 0x8a, 0x3d, 0xb9, 0x52, 0xba, 0xff, 0xb2, 0x02, 0xdd, 0x87,
0xc2, 0xf1, 0x1f, 0x84, 0xc7, 0xbb, 0x41, 0x92, 0x46, 0xb1, 0x7e, 0x56, 0xe5, 0x3a, 0x40, 0x92,
0xfa, 0xb1, 0x3c, 0x1f, 0x0a, 0x25, 0xd5, 0x40, 0x70, 0x8e, 0x78, 0x38, 0x10, 0xb9, 0x82, 0x36,
0x74, 0xba, 0x70, 0x08, 0x90, 0x36, 0x3a, 0x4b, 0x95, 0xbe, 0x25, 0x6e, 0x06, 0xe1, 0x64, 0xf0,
0x53, 0xda, 0x32, 0x85, 0xe1, 0x2b, 0x87, 0x3a, 0xbf, 0x5f, 0x85, 0xc5, 0xac, 0x93, 0x14, 0x91,
0x66, 0x0b, 0x5e, 0xa9, 0x3f, 0x67, 0x82, 0x57, 0xfa, 0xd3, 0xbc, 0x00, 0x15, 0x6a, 0xc3, 0x4c,
0x67, 0xa0, 0xec, 0x26, 0xb4, 0x54, 0x2a, 0x9a, 0xa4, 0xc6, 0xfb, 0x06, 0x26, 0x2c, 0xe2, 0xf7,
0x51, 0xa5, 0x97, 0xc7, 0x13, 0x99, 0xa2, 0xbb, 0x96, 0xa3, 0x94, 0xbe, 0x14, 0x6b, 0xaa, 0x92,
0x28, 0x9b, 0x50, 0x17, 0x16, 0x6b, 0x48, 0x7a, 0xb0, 0xa9, 0x23, 0x36, 0xf4, 0xbb, 0x50, 0x9a,
0xe7, 0x45, 0x8d, 0xd9, 0xe5, 0x8b, 0xba, 0x6b, 0x42, 0xca, 0x4c, 0x12, 0x4d, 0xac, 0x63, 0xab,
0x85, 0x39, 0xbf, 0x57, 0x81, 0x2b, 0x25, 0xcb, 0x28, 0x65, 0xc0, 0x36, 0x2c, 0x1d, 0xe9, 0x4c,
0x35, 0xd5, 0x42, 0x10, 0xac, 0x2a, 0x69, 0x6b, 0x4f, 0xaf, 0x5b, 0xfc, 0x40, 0x1f, 0x93, 0xc4,
0xe2, 0x59, 0x77, 0x6d, 0x8a, 0x19, 0xce, 0x3e, 0xf4, 0x76, 0x5e, 0xa3, 0x48, 0xd9, 0x32, 0x1f,
0xf9, 0x54, 0x94, 0xb5, 0x51, 0x10, 0x99, 0x6f, 0xb7, 0xce, 0x1e, 0xc1, 0xbc, 0x55, 0x17, 0xfb,
0xee, 0x45, 0x2b, 0x31, 0xb9, 0xff, 0x86, 0x5c, 0x75, 0xf1, 0x4a, 0xa9, 0xba, 0xf1, 0x63, 0x40,
0xce, 0x29, 0x2c, 0x3e, 0x9d, 0x0c, 0xd3, 0x20, 0x7b, 0xb1, 0x94, 0x7d, 0x5f, 0x7e, 0x44, 0x55,
0xa8, 0xa9, 0x2b, 0x6d, 0xca, 0x2c, 0x87, 0x33, 0x36, 0xc2, 0x9a, 0xbc, 0x62, 0x8b, 0xc5, 0x0c,
0xe7, 0x0a, 0xac, 0x65, 0x4d, 0x8a, 0xb9, 0x53, 0xdb, 0xce, 0x1f, 0x54, 0x44, 0xd8, 0xaa, 0xfd,
0x80, 0x2a, 0x7b, 0x04, 0xcb, 0x49, 0x10, 0x1e, 0x0f, 0xb9, 0x59, 0x4f, 0x22, 0x67, 0xe2, 0xb2,
0xdd, 0x3d, 0xf9, 0xc8, 0xaa, 0x5b, 0xf6, 0x05, 0x12, 0x48, 0x79, 0x47, 0x33, 0x02, 0xc9, 0x4d,
0x49, 0xd9, 0x00, 0x3e, 0x85, 0x05, 0xbb, 0x31, 0xf6, 0x91, 0xbc, 0xa8, 0x93, 0xf5, 0xcc, 0x74,
0xa7, 0xda, 0x94, 0x61, 0x95, 0x74, 0x7e, 0x51, 0x81, 0xae, 0xcb, 0x91, 0x8c, 0xb9, 0xd1, 0xa8,
0xa4, 0x9e, 0x4f, 0x0a, 0xd5, 0x4e, 0x1f, 0xb0, 0xbe, 0x00, 0xa4, 0xc6, 0xba, 0x3e, 0x75, 0x51,
0x76, 0x2f, 0x95, 0x8c, 0xea, 0x41, 0x03, 0x66, 0xe5, 0xf8, 0xd6, 0xe0, 0xb2, 0xec, 0x92, 0xea,
0x4e, 0xe6, 0x87, 0xb3, 0x1a, 0xb5, 0xfc, 0x70, 0x3d, 0xe8, 0x8a, 0xd7, 0x73, 0xcc, 0x71, 0xc8,
0x0f, 0xb7, 0x81, 0x3d, 0xf5, 0xfb, 0x7e, 0x1c, 0x45, 0xe1, 0x3e, 0x8f, 0x65, 0x9c, 0x21, 0x69,
0x8d, 0xe4, 0xa6, 0x52, 0x0a, 0xae, 0x48, 0xa9, 0x07, 0x5f, 0xa2, 0x50, 0x3d, 0xac, 0x23, 0x52,
0x8e, 0x0b, 0xcb, 0x0f, 0xfc, 0x57, 0x5c, 0xd5, 0x94, 0xcd, 0x52, 0x6b, 0xac, 0x2b, 0x55, 0x73,
0xaf, 0xee, 0xe0, 0x15, 0x9b, 0x75, 0xcd, 0xd2, 0xce, 0x06, 0xac, 0xd8, 0x75, 0x4a, 0x51, 0xd2,
0x83, 0xc6, 0x48, 0x62, 0xb2, 0x77, 0x3a, 0x7d, 0xf7, 0x4b, 0x68, 0x19, 0x2f, 0x22, 0xb1, 0x35,
0x58, 0x7e, 0xf9, 0xf8, 0xf9, 0xde, 0xce, 0xc1, 0x81, 0xb7, 0xff, 0xe2, 0xc1, 0x67, 0x3b, 0x3f,
0xf2, 0x76, 0x37, 0x0f, 0x76, 0x3b, 0x97, 0xd8, 0x2a, 0xb0, 0xbd, 0x9d, 0x83, 0xe7, 0x3b, 0xdb,
0x16, 0x5e, 0x61, 0xd7, 0xa1, 0xf7, 0x62, 0xef, 0xc5, 0xc1, 0xce, 0xb6, 0x57, 0xf6, 0x5d, 0x95,
0x5d, 0x83, 0x2b, 0x32, 0xbf, 0xe4, 0xf3, 0xda, 0xdd, 0x4f, 0xa0, 0x93, 0x37, 0x27, 0x5a, 0x66,
0xd8, 0x37, 0xd9, 0x6b, 0x37, 0x7e, 0x51, 0x83, 0x05, 0x11, 0x48, 0x2c, 0x9e, 0x20, 0xe6, 0x31,
0x7b, 0x0a, 0x73, 0xf2, 0x2d, 0x6b, 0xa6, 0x48, 0xcb, 0x7e, 0x3d, 0xbb, 0xb7, 0x9a, 0x87, 0xe5,
0xb2, 0x2e, 0xff, 0x95, 0x7f, 0xff, 0xdf, 0xff, 0x56, 0x75, 0x9e, 0xb5, 0xee, 0x9d, 0x7e, 0x70,
0xef, 0x98, 0x87, 0x09, 0xd6, 0xf1, 0x3b, 0x00, 0xd9, 0x0b, 0xcd, 0xac, 0xab, 0xad, 0x51, 0xb9,
0xe7, 0xab, 0x7b, 0x57, 0x4a, 0x72, 0x64, 0xbd, 0x57, 0xa8, 0xde, 0x65, 0x67, 0x01, 0xeb, 0x0d,
0xc2, 0x20, 0x15, 0xaf, 0x35, 0x7f, 0x5c, 0xb9, 0xcb, 0x06, 0xd0, 0x36, 0xdf, 0x4e, 0x66, 0xca,
0xad, 0x5a, 0xf2, 0xfa, 0x73, 0xef, 0x9d, 0xd2, 0x3c, 0x45, 0xcb, 0xd4, 0xc6, 0x65, 0xa7, 0x83,
0x6d, 0x4c, 0xa8, 0x44, 0xd6, 0xca, 0x50, 0x70, 0x78, 0xf6, 0x44, 0x32, 0xbb, 0x6a, 0x30, 0x5d,
0xe1, 0x81, 0xe6, 0xde, 0xb5, 0x29, 0xb9, 0xb2, 0xad, 0x6b, 0xd4, 0xd6, 0x9a, 0xc3, 0xb0, 0xad,
0x3e, 0x95, 0x51, 0x0f, 0x34, 0x7f, 0x5c, 0xb9, 0xbb, 0xf1, 0x6f, 0x6e, 0x43, 0x53, 0x87, 0x5c,
0xb0, 0x9f, 0xc1, 0xbc, 0x15, 0xe9, 0xcd, 0xd4, 0x30, 0xca, 0x02, 0xc3, 0x7b, 0x57, 0xcb, 0x33,
0x65, 0xc3, 0xd7, 0xa9, 0xe1, 0x2e, 0x5b, 0xc5, 0x86, 0x65, 0xa8, 0xf4, 0x3d, 0xba, 0xb3, 0x20,
0xae, 0x48, 0xbf, 0x32, 0x24, 0x99, 0x68, 0xec, 0x6a, 0x5e, 0xb8, 0x58, 0xad, 0x5d, 0x9b, 0x92,
0x2b, 0x9b, 0xbb, 0x4a, 0xcd, 0xad, 0xb2, 0x15, 0xb3, 0x39, 0x1d, 0x06, 0xc1, 0xe9, 0x5d, 0x00,
0xf3, 0xf5, 0x60, 0x76, 0x4d, 0x13, 0x56, 0xd9, 0xab, 0xc2, 0x9a, 0x44, 0x8a, 0x4f, 0x0b, 0x3b,
0x5d, 0x6a, 0x8a, 0x31, 0x5a, 0x3e, 0xf3, 0xf1, 0x60, 0x76, 0x08, 0x2d, 0xe3, 0x71, 0x3e, 0x76,
0x65, 0xea, 0x43, 0x82, 0xbd, 0x5e, 0x59, 0x56, 0xd9, 0x50, 0xcc, 0xfa, 0xef, 0xa1, 0xa2, 0xf3,
0x13, 0x68, 0xea, 0xe7, 0xde, 0xd8, 0x9a, 0xf1, 0xfc, 0x9e, 0xf9, 0x3c, 0x5d, 0xaf, 0x5b, 0xcc,
0x28, 0x23, 0x3e, 0xb3, 0x76, 0x24, 0xbe, 0x97, 0xd0, 0x32, 0x9e, 0x74, 0xd3, 0x03, 0x28, 0x3e,
0x1b, 0xa7, 0x07, 0x50, 0xf2, 0x02, 0x9c, 0xb3, 0x44, 0x4d, 0xb4, 0x58, 0x93, 0xe8, 0x3b, 0x7d,
0x1d, 0x25, 0xec, 0x09, 0x5c, 0x96, 0x12, 0xfb, 0x90, 0x7f, 0x95, 0x65, 0x28, 0x79, 0xb0, 0xf9,
0x7e, 0x85, 0x7d, 0x02, 0x0d, 0xf5, 0x72, 0x1f, 0x5b, 0x2d, 0x7f, 0x81, 0xb0, 0xb7, 0x56, 0xc0,
0xa5, 0x78, 0xfd, 0x11, 0x40, 0xf6, 0x7e, 0x9c, 0x16, 0x12, 0x85, 0xf7, 0xe8, 0x34, 0x05, 0x14,
0x1f, 0x9b, 0x73, 0x56, 0x69, 0x80, 0x1d, 0x46, 0x42, 0x22, 0xe4, 0x67, 0xea, 0x09, 0x90, 0x9f,
0x42, 0xcb, 0x78, 0x42, 0x4e, 0x4f, 0x5f, 0xf1, 0xf9, 0x39, 0x3d, 0x7d, 0x25, 0x2f, 0xce, 0x39,
0x3d, 0xaa, 0x7d, 0xc5, 0x59, 0xc4, 0xda, 0x93, 0xe0, 0x38, 0x1c, 0x89, 0x02, 0xb8, 0x40, 0x27,
0x30, 0x6f, 0xbd, 0x13, 0xa7, 0x39, 0xb4, 0xec, 0x15, 0x3a, 0xcd, 0xa1, 0xa5, 0x4f, 0xcb, 0x29,
0x3a, 0x73, 0x96, 0xb0, 0x9d, 0x53, 0x2a, 0x62, 0xb4, 0xf4, 0x63, 0x68, 0x19, 0x6f, 0xbe, 0xe9,
0xb1, 0x14, 0x9f, 0x97, 0xd3, 0x63, 0x29, 0x7b, 0x22, 0x6e, 0x85, 0xda, 0x58, 0x70, 0x88, 0x14,
0xe8, 0x31, 0x0b, 0xac, 0xfb, 0x67, 0xb0, 0x60, 0xbf, 0x02, 0xa7, 0x79, 0xbf, 0xf4, 0x3d, 0x39,
0xcd, 0xfb, 0x53, 0x9e, 0x8e, 0x93, 0x24, 0x7d, 0x77, 0x59, 0x37, 0x72, 0xef, 0x0b, 0x19, 0xb4,
0xf9, 0x25, 0xfb, 0x01, 0x0a, 0x38, 0xf9, 0xba, 0x08, 0x5b, 0x33, 0xa8, 0xd6, 0x7c, 0x83, 0x44,
0xf3, 0x4b, 0xe1, 0x21, 0x12, 0x9b, 0x98, 0xc5, 0x73, 0x1c, 0xb4, 0x6b, 0xd1, 0x2b, 0x23, 0xc6,
0xae, 0x65, 0x3e, 0x44, 0x62, 0xec, 0x5a, 0xd6, 0x63, 0x24, 0xf9, 0x5d, 0x2b, 0x0d, 0xb0, 0x8e,
0x10, 0x16, 0x73, 0xb7, 0xd1, 0x34, 0x57, 0x94, 0x5f, 0x18, 0xee, 0x5d, 0x7f, 0xf3, 0x25, 0x36,
0x5b, 0x82, 0x28, 0x21, 0x78, 0x4f, 0x5d, 0xcf, 0xfe, 0x5d, 0x68, 0x9b, 0x2f, 0x53, 0x31, 0x93,
0x95, 0xf3, 0x2d, 0xbd, 0x53, 0x9a, 0x67, 0x2f, 0x2e, 0x6b, 0x9b, 0xcd, 0xb0, 0x1f, 0xc2, 0xaa,
0x66, 0x75, 0xf3, 0x82, 0x53, 0xc2, 0xde, 0x2d, 0xb9, 0xf6, 0x64, 0xea, 0x71, 0xbd, 0x2b, 0x53,
0xef, 0x45, 0xdd, 0xaf, 0x20, 0xd1, 0xd8, 0xcf, 0xfd, 0x64, 0x1b, 0x46, 0xd9, 0x2b, 0x47, 0xd9,
0x86, 0x51, 0xfa, 0x46, 0x90, 0x22, 0x1a, 0xb6, 0x6c, 0xcd, 0x91, 0x88, 0x6f, 0x61, 0x3f, 0x86,
0x45, 0xe3, 0x0a, 0xe9, 0xc1, 0x79, 0xd8, 0xd7, 0x0c, 0x50, 0x7c, 0xe1, 0xa0, 0x57, 0x76, 0x4a,
0x71, 0xd6, 0xa8, 0xfe, 0x25, 0xc7, 0x9a, 0x1c, 0x24, 0xfe, 0x2d, 0x68, 0x99, 0xd7, 0x53, 0xdf,
0x50, 0xef, 0x9a, 0x91, 0x65, 0x5e, 0xce, 0xbf, 0x5f, 0x61, 0xfb, 0x22, 0xce, 0x51, 0x3f, 0x3d,
0x1c, 0xc5, 0xf9, 0xed, 0xd3, 0x7e, 0x92, 0x58, 0x2f, 0x64, 0xd9, 0x63, 0xd4, 0x77, 0x2a, 0xf7,
0x2b, 0xec, 0xef, 0x55, 0xa0, 0x6d, 0x5d, 0x1f, 0xb5, 0xa2, 0xc6, 0x72, 0x3d, 0xeb, 0x9a, 0x79,
0x66, 0xd7, 0x1c, 0x97, 0x86, 0xfd, 0xe4, 0xee, 0xa7, 0xd6, 0xb4, 0x7e, 0x61, 0x99, 0xea, 0xd6,
0xf3, 0xef, 0x0f, 0x7f, 0x99, 0x2f, 0x60, 0xbe, 0x2b, 0xf1, 0xe5, 0xfd, 0x0a, 0xfb, 0xc3, 0x0a,
0x2c, 0xd8, 0xb6, 0x73, 0x3d, 0xdc, 0x52, 0x2b, 0xbd, 0x5e, 0xfc, 0x29, 0x06, 0xf7, 0x1f, 0x53,
0x2f, 0x9f, 0xdf, 0x75, 0xad, 0x5e, 0xca, 0xa7, 0xa5, 0x7e, 0xbd, 0xde, 0xb2, 0x8f, 0xc5, 0xb3,
0xfe, 0xca, 0x6d, 0xc8, 0x8a, 0xcf, 0xc0, 0x6b, 0x82, 0x31, 0x1f, 0x5b, 0xa7, 0x45, 0xf8, 0xa9,
0x78, 0x77, 0x57, 0xf9, 0x9e, 0x90, 0xee, 0x2e, 0xfa, 0xbd, 0x73, 0x93, 0xc6, 0x74, 0xdd, 0xb9,
0x62, 0x8d, 0x29, 0xbf, 0xc3, 0x6f, 0x8a, 0xde, 0xc9, 0x77, 0xd2, 0xb3, 0x2d, 0xaa, 0xf0, 0x76,
0xfa, 0xf4, 0x4e, 0x8e, 0x44, 0x27, 0x65, 0x71, 0x8b, 0x39, 0x2e, 0x58, 0x8d, 0x73, 0x97, 0xfa,
0x7a, 0xd3, 0x79, 0x77, 0x6a, 0x5f, 0xef, 0x91, 0x05, 0x1c, 0x7b, 0xbc, 0x0f, 0x90, 0xb9, 0xf9,
0x59, 0xce, 0xc5, 0xac, 0x45, 0x46, 0x31, 0x12, 0xc0, 0xe6, 0x40, 0xe5, 0x89, 0xc6, 0x1a, 0x7f,
0x22, 0x04, 0xe0, 0x63, 0xe5, 0x9c, 0x36, 0xd5, 0x1c, 0xdb, 0x17, 0x6f, 0xa9, 0x39, 0xf9, 0xfa,
0x2d, 0xf1, 0xa7, 0x3d, 0xdd, 0x2f, 0x60, 0xfe, 0x49, 0x14, 0xbd, 0x9a, 0x8c, 0x75, 0x40, 0x97,
0xed, 0x9c, 0xda, 0xf5, 0x93, 0x93, 0x5e, 0x6e, 0x14, 0xce, 0x0d, 0xaa, 0xaa, 0xc7, 0xba, 0x46,
0x55, 0xf7, 0xbe, 0xc8, 0x42, 0x08, 0xbe, 0x64, 0x3e, 0x2c, 0x69, 0xa9, 0xaa, 0x3b, 0xde, 0xb3,
0xab, 0xb1, 0x64, 0x69, 0xbe, 0x09, 0x4b, 0x1f, 0x57, 0xbd, 0xbd, 0x97, 0xa8, 0x3a, 0x49, 0xa6,
0xb4, 0xb7, 0x79, 0x9f, 0x6e, 0x96, 0x91, 0x87, 0x67, 0x39, 0xeb, 0xb8, 0x76, 0x0d, 0xf5, 0xe6,
0x2d, 0xd0, 0xde, 0x69, 0xc6, 0xfe, 0x79, 0xcc, 0x3f, 0xbf, 0xf7, 0x85, 0xf4, 0x1d, 0x7d, 0xa9,
0x76, 0x1a, 0xe5, 0x5c, 0xb3, 0x76, 0x9a, 0x9c, 0x37, 0xce, 0xda, 0x69, 0x0a, 0xde, 0x38, 0x6b,
0xaa, 0x95, 0x73, 0x8f, 0x0d, 0x61, 0xa9, 0xe0, 0xc0, 0xd3, 0x9b, 0xcc, 0x34, 0xb7, 0x5f, 0xef,
0xc6, 0xf4, 0x02, 0x76, 0x6b, 0x77, 0xed, 0xd6, 0x0e, 0x60, 0x7e, 0x9b, 0x8b, 0xc9, 0x12, 0x11,
0xec, 0xb9, 0x3b, 0xc8, 0x66, 0x7c, 0x7c, 0x7e, 0x4b, 0xa0, 0x3c, 0x5b, 0x95, 0xa0, 0xd0, 0x71,
0xf6, 0x13, 0x68, 0x3d, 0xe2, 0xa9, 0x0a, 0x59, 0xd7, 0xca, 0x6c, 0x2e, 0x86, 0xbd, 0x57, 0x12,
0xf1, 0x6e, 0xd3, 0x0c, 0xd5, 0x76, 0x8f, 0x0f, 0x8e, 0xb9, 0x10, 0x4e, 0x5e, 0x30, 0xf8, 0x92,
0xfd, 0x45, 0xaa, 0x5c, 0xdf, 0xd9, 0x59, 0x35, 0xe2, 0x8f, 0xcd, 0xca, 0x17, 0x73, 0x78, 0x59,
0xcd, 0x61, 0x34, 0xe0, 0x86, 0x52, 0x15, 0x42, 0xcb, 0xb8, 0xf3, 0xa7, 0x19, 0xa8, 0x78, 0x45,
0x52, 0x33, 0x50, 0xc9, 0x15, 0x41, 0xe7, 0x0e, 0xb5, 0xe3, 0xb0, 0x1b, 0x59, 0x3b, 0xe2, 0x5a,
0x60, 0xd6, 0xd2, 0xbd, 0x2f, 0xfc, 0x51, 0xfa, 0x25, 0x7b, 0x49, 0x4f, 0xbd, 0x99, 0x21, 0xf9,
0x99, 0x76, 0x9e, 0x8f, 0xde, 0xd7, 0x93, 0x65, 0x64, 0xd9, 0x1a, 0xbb, 0x68, 0x8a, 0x74, 0xaf,
0xef, 0x03, 0x1c, 0xa4, 0xd1, 0x78, 0xdb, 0xe7, 0xa3, 0x28, 0xcc, 0x64, 0x6d, 0x16, 0x10, 0x9e,
0xc9, 0x2f, 0x23, 0x2a, 0x9c, 0xbd, 0x34, 0x8e, 0x33, 0xd6, 0xad, 0x06, 0x45, 0x5c, 0x53, 0x63,
0xc6, 0xf5, 0x84, 0x94, 0xc4, 0x8d, 0xdf, 0xaf, 0xb0, 0x4d, 0x80, 0xcc, 0x83, 0xab, 0x0f, 0x27,
0x05, 0xe7, 0xb0, 0x16, 0x7b, 0x25, 0xee, 0xde, 0x7d, 0x68, 0x66, 0x7e, 0xb3, 0xb5, 0xec, 0x06,
0xb0, 0xe5, 0x65, 0xd3, 0x3b, 0x78, 0xc1, 0x9b, 0xe5, 0x74, 0x68, 0xaa, 0x80, 0x35, 0x70, 0xaa,
0xc8, 0x45, 0x15, 0xc0, 0xb2, 0xe8, 0xa0, 0x56, 0x70, 0x28, 0x90, 0x59, 0x8d, 0xa4, 0xc4, 0xa3,
0xa4, 0xb9, 0xb9, 0xd4, 0x21, 0x62, 0xd9, 0x58, 0x90, 0x5a, 0x45, 0x10, 0x35, 0x8a, 0xe6, 0x11,
0x2c, 0x15, 0x6c, 0xec, 0x9a, 0xa5, 0xa7, 0x39, 0x51, 0x34, 0x4b, 0x4f, 0x35, 0xcf, 0x3b, 0x97,
0xa9, 0xc9, 0x45, 0x07, 0xe8, 0x4c, 0x75, 0x16, 0xa4, 0xfd, 0x13, 0x6c, 0xee, 0x0f, 0x2a, 0xb0,
0x5c, 0x62, 0x42, 0x67, 0xef, 0xa9, 0xe3, 0xf9, 0x54, 0xf3, 0x7a, 0xaf, 0xd4, 0xc2, 0xea, 0x1c,
0x50, 0x3b, 0x4f, 0xd9, 0x67, 0xd6, 0xc6, 0x26, 0x8c, 0x9b, 0x92, 0x33, 0xdf, 0xa8, 0x54, 0x94,
0x6a, 0x14, 0x9f, 0xc3, 0x9a, 0xe8, 0xc8, 0xe6, 0x70, 0x98, 0xb3, 0xfe, 0x5e, 0x2f, 0xfc, 0xeb,
0x2f, 0xcb, 0xaa, 0xdd, 0x9b, 0xfe, 0xaf, 0xc1, 0xa6, 0x28, 0xc0, 0xa2, 0xab, 0x6c, 0x02, 0x9d,
0xbc, 0x45, 0x95, 0x4d, 0xaf, 0xab, 0xf7, 0xae, 0x75, 0xd0, 0x2c, 0xb1, 0xc2, 0x7e, 0x93, 0x1a,
0x7b, 0xd7, 0xe9, 0x95, 0xcd, 0x8b, 0x38, 0x7b, 0xe2, 0x7a, 0xfc, 0x65, 0x6d, 0xfe, 0xcd, 0x8d,
0x53, 0x35, 0x30, 0xcd, 0x5e, 0xad, 0x8f, 0xba, 0xe5, 0xd6, 0xe3, 0x5b, 0xd4, 0xfc, 0x0d, 0xe7,
0x9d, 0xb2, 0xe6, 0x63, 0xf1, 0x89, 0x38, 0xf4, 0xae, 0xe5, 0xf9, 0x5a, 0xf5, 0xe0, 0x46, 0xd9,
0x7a, 0x4f, 0x3d, 0xbd, 0xe4, 0xe6, 0xfa, 0x12, 0xe9, 0x76, 0x6d, 0xd3, 0xdc, 0xab, 0xd9, 0xa7,
0xc4, 0xae, 0xac, 0xd9, 0xa7, 0xcc, 0x3e, 0x6c, 0xeb, 0x35, 0xca, 0x32, 0xfc, 0x71, 0xe5, 0xee,
0x83, 0xdb, 0x3f, 0xfe, 0xe6, 0x71, 0x90, 0x9e, 0x4c, 0x0e, 0xd7, 0xfb, 0xd1, 0xe8, 0xde, 0x50,
0x99, 0xf5, 0xe4, 0xe5, 0x9e, 0x7b, 0xc3, 0x70, 0x70, 0x8f, 0xaa, 0x3d, 0x9c, 0xa5, 0xff, 0x55,
0xf8, 0xdd, 0xff, 0x17, 0x00, 0x00, 0xff, 0xff, 0x44, 0x97, 0x33, 0xa8, 0xdd, 0x70, 0x00, 0x00,
}
// Reference imports to suppress errors if they are not otherwise used.

@ -2407,6 +2407,9 @@ message InvoiceHTLC {
/// Custom tlv records.
map<uint64, bytes> custom_records = 9 [json_name = "custom_records"];
/// The total amount of the mpp payment in msat.
uint64 mpp_total_amt_msat = 10 [json_name = "mpp_total_amt_msat"];
}
message AddInvoiceResponse {

@ -2854,6 +2854,11 @@
"format": "byte"
},
"description": "/ Custom tlv records."
},
"mpp_total_amt_msat": {
"type": "string",
"format": "uint64",
"description": "/ The total amount of the mpp payment in msat."
}
},
"title": "/ Details of an HTLC that paid to an invoice"

@ -4712,13 +4712,29 @@ func testSingleHopSendToRouteCase(net *lntest.NetworkHarness, t *harnessTest,
}
// Create invoices for Dave, which expect a payment from Carol.
_, rHashes, _, err := createPayReqs(
payReqs, rHashes, _, err := createPayReqs(
dave, paymentAmtSat, numPayments,
)
if err != nil {
t.Fatalf("unable to create pay reqs: %v", err)
}
// Reconstruct payment addresses.
var payAddrs [][]byte
for _, payReq := range payReqs {
ctx, _ := context.WithTimeout(
context.Background(), defaultTimeout,
)
resp, err := dave.DecodePayReq(
ctx,
&lnrpc.PayReqString{PayReq: payReq},
)
if err != nil {
t.Fatalf("decode pay req: %v", err)
}
payAddrs = append(payAddrs, resp.PaymentAddr)
}
// Query for routes to pay from Carol to Dave.
// We set FinalCltvDelta to 40 since by default QueryRoutes returns
// the last hop with a final cltv delta of 9 where as the default in
@ -4741,12 +4757,10 @@ func testSingleHopSendToRouteCase(net *lntest.NetworkHarness, t *harnessTest,
// Construct a closure that will set MPP fields on the route, which
// allows us to test MPP payments.
setMPPFields := func(i int) {
addr := [32]byte{byte(i)}
hop := r.Hops[len(r.Hops)-1]
hop.TlvPayload = true
hop.MppRecord = &lnrpc.MPPRecord{
PaymentAddr: addr[:],
PaymentAddr: payAddrs[i],
TotalAmtMsat: paymentAmtSat * 1000,
}
}
@ -4930,8 +4944,8 @@ func testSingleHopSendToRouteCase(net *lntest.NetworkHarness, t *harnessTest,
hop.MppRecord.TotalAmtMsat)
}
expAddr := [32]byte{byte(i)}
if !bytes.Equal(hop.MppRecord.PaymentAddr, expAddr[:]) {
expAddr := payAddrs[i]
if !bytes.Equal(hop.MppRecord.PaymentAddr, expAddr) {
t.Fatalf("incorrect mpp payment addr for payment %d "+
"want: %x, got: %x",
i, expAddr, hop.MppRecord.PaymentAddr)

74
queue/priority_queue.go Normal file

@ -0,0 +1,74 @@
package queue
import (
"container/heap"
)
// PriorityQueueItem is an interface that represents items in a PriorityQueue.
// Users of PriorityQueue will need to define a Less function such that
// PriorityQueue will be able to use that to build and restore an underlying
// heap.
type PriorityQueueItem interface {
Less(other PriorityQueueItem) bool
}
type priorityQueue []PriorityQueueItem
// Len returns the length of the priorityQueue.
func (pq priorityQueue) Len() int { return len(pq) }
// Less is used to order PriorityQueueItem items in the queue.
func (pq priorityQueue) Less(i, j int) bool {
return pq[i].Less(pq[j])
}
// Swap swaps two items in the priorityQueue. Swap is used by heap.Interface.
func (pq priorityQueue) Swap(i, j int) {
pq[i], pq[j] = pq[j], pq[i]
}
// Push adds a new item the the priorityQueue.
func (pq *priorityQueue) Push(x interface{}) {
item := x.(PriorityQueueItem)
*pq = append(*pq, item)
}
// Pop removes the top item from the priorityQueue.
func (pq *priorityQueue) Pop() interface{} {
old := *pq
n := len(old)
item := old[n-1]
old[n-1] = nil
*pq = old[0 : n-1]
return item
}
// Priority wrap a standard heap in a more object-oriented structure.
type PriorityQueue struct {
queue priorityQueue
}
// Len returns the length of the queue.
func (pq *PriorityQueue) Len() int {
return len(pq.queue)
}
// Empty returns true if the queue is empty.
func (pq *PriorityQueue) Empty() bool {
return len(pq.queue) == 0
}
// Push adds an item to the priority queue.
func (pq *PriorityQueue) Push(item PriorityQueueItem) {
heap.Push(&pq.queue, item)
}
// Pop removes the top most item from the queue.
func (pq *PriorityQueue) Pop() PriorityQueueItem {
return heap.Pop(&pq.queue).(PriorityQueueItem)
}
// Top returns the top most item from the queue without removing it.
func (pq *PriorityQueue) Top() PriorityQueueItem {
return pq.queue[0]
}

@ -0,0 +1,67 @@
package queue
import (
"math/rand"
"testing"
"time"
)
type testQueueItem struct {
Value int
Expiry time.Time
}
func (e testQueueItem) Less(other PriorityQueueItem) bool {
return e.Expiry.Before(other.(*testQueueItem).Expiry)
}
func TestExpiryQueue(t *testing.T) {
// The number of elements we push to the queue.
count := 100
// Generate a random permutation of a range [0, count)
array := rand.Perm(count)
// t0 holds a reference time point.
t0 := time.Date(1975, time.April, 5, 12, 0, 0, 0, time.UTC)
var testQueue PriorityQueue
if testQueue.Len() != 0 && !testQueue.Empty() {
t.Fatal("Expected the queue to be empty")
}
// Create elements with expiry of t0 + value * second.
for _, value := range array {
testQueue.Push(&testQueueItem{
Value: value,
Expiry: t0.Add(time.Duration(value) * time.Second),
})
}
// Now expect that we can retrieve elements in order of their expiry.
for i := 0; i < count; i++ {
expectedQueueLen := count - i
if testQueue.Len() != expectedQueueLen {
t.Fatalf("Expected the queue len %v, got %v",
expectedQueueLen, testQueue.Len())
}
if testQueue.Empty() {
t.Fatalf("Did not expect the queue to be empty")
}
top := testQueue.Top().(*testQueueItem)
if top.Value != i {
t.Fatalf("Expected queue top %v, got %v", i, top.Value)
}
popped := testQueue.Pop().(*testQueueItem)
if popped != top {
t.Fatalf("Expected queue top %v equal to popped: %v",
top, popped)
}
}
if testQueue.Len() != 0 || !testQueue.Empty() {
t.Fatalf("Expected the queue to be empty")
}
}

@ -378,6 +378,13 @@ func newServer(listenAddrs []net.Addr, chanDB *channeldb.DB,
return nil, err
}
registryConfig := invoices.RegistryConfig{
FinalCltvRejectDelta: defaultFinalCltvRejectDelta,
HtlcHoldDuration: invoices.DefaultHtlcHoldDuration,
Now: time.Now,
TickAfter: time.After,
}
s := &server{
chanDB: chanDB,
cc: cc,
@ -386,9 +393,7 @@ func newServer(listenAddrs []net.Addr, chanDB *channeldb.DB,
readPool: readPool,
chansToRestore: chansToRestore,
invoices: invoices.NewRegistry(
chanDB, defaultFinalCltvRejectDelta,
),
invoices: invoices.NewRegistry(chanDB, &registryConfig),
channelNotifier: channelnotifier.New(chanDB),