From 56282db30afb831635fa3b6b08eafc9f02a8d30c Mon Sep 17 00:00:00 2001 From: Andras Banki-Horvath Date: Fri, 22 Nov 2019 16:08:56 +0100 Subject: [PATCH 1/4] queue: Introducing a general purpose priority queue. This commit introduces PriorityQueue, which is a general, heap based priority queue, and PriorityQueueItem which is an interface that concrete priority queue items must implement. This implementation is encapsulated, users do not need to use any other package for full functionality. PriorityQueue exports the usual public methids: Push, Pop, Top, Empty and Len. For full documentaton consult the priority_queue.go, for usage: priority_queue_test.go --- queue/priority_queue.go | 74 ++++++++++++++++++++++++++++++++++++ queue/priority_queue_test.go | 67 ++++++++++++++++++++++++++++++++ 2 files changed, 141 insertions(+) create mode 100644 queue/priority_queue.go create mode 100644 queue/priority_queue_test.go diff --git a/queue/priority_queue.go b/queue/priority_queue.go new file mode 100644 index 00000000..aae7b423 --- /dev/null +++ b/queue/priority_queue.go @@ -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] +} diff --git a/queue/priority_queue_test.go b/queue/priority_queue_test.go new file mode 100644 index 00000000..be1209e0 --- /dev/null +++ b/queue/priority_queue_test.go @@ -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") + } +} From 499f2b16cf36bd591e893927c5f28e702f614613 Mon Sep 17 00:00:00 2001 From: Joost Jager Date: Wed, 4 Dec 2019 18:47:53 +0100 Subject: [PATCH 2/4] invoices: add RegistryConfig struct --- htlcswitch/mock.go | 9 ++++++--- invoices/invoiceregistry.go | 26 ++++++++++++++++---------- invoices/invoiceregistry_test.go | 15 ++++++++++++--- server.go | 8 +++++--- 4 files changed, 39 insertions(+), 19 deletions(-) diff --git a/htlcswitch/mock.go b/htlcswitch/mock.go index c63aa171..d3d61ca9 100644 --- a/htlcswitch/mock.go +++ b/htlcswitch/mock.go @@ -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{ diff --git a/invoices/invoiceregistry.go b/invoices/invoiceregistry.go index e67ecd80..e54f0952 100644 --- a/invoices/invoiceregistry.go +++ b/invoices/invoiceregistry.go @@ -41,6 +41,16 @@ 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 +} + // 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 +59,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,13 +82,6 @@ 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 - wg sync.WaitGroup quit chan struct{} } @@ -84,7 +90,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, @@ -95,7 +101,7 @@ 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, quit: make(chan struct{}), } } @@ -442,7 +448,7 @@ func (i *InvoiceRegistry) NotifyExitHopHtlc(rHash lntypes.Hash, amtPaid: amtPaid, expiry: expiry, currentHeight: currentHeight, - finalCltvRejectDelta: i.finalCltvRejectDelta, + finalCltvRejectDelta: i.cfg.FinalCltvRejectDelta, customRecords: payload.CustomRecords(), } diff --git a/invoices/invoiceregistry_test.go b/invoices/invoiceregistry_test.go index b5cf30ca..1ae46f63 100644 --- a/invoices/invoiceregistry_test.go +++ b/invoices/invoiceregistry_test.go @@ -71,7 +71,10 @@ func newTestContext(t *testing.T) *testContext { } // 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 { @@ -390,7 +393,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 +564,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 { diff --git a/server.go b/server.go index bb9493f8..1a767910 100644 --- a/server.go +++ b/server.go @@ -378,6 +378,10 @@ func newServer(listenAddrs []net.Addr, chanDB *channeldb.DB, return nil, err } + registryConfig := invoices.RegistryConfig{ + FinalCltvRejectDelta: defaultFinalCltvRejectDelta, + } + s := &server{ chanDB: chanDB, cc: cc, @@ -386,9 +390,7 @@ func newServer(listenAddrs []net.Addr, chanDB *channeldb.DB, readPool: readPool, chansToRestore: chansToRestore, - invoices: invoices.NewRegistry( - chanDB, defaultFinalCltvRejectDelta, - ), + invoices: invoices.NewRegistry(chanDB, ®istryConfig), channelNotifier: channelnotifier.New(chanDB), From 56958493fe0bc8477fe8bdd9c44b30d421ea3315 Mon Sep 17 00:00:00 2001 From: Joost Jager Date: Mon, 9 Dec 2019 13:28:05 +0100 Subject: [PATCH 3/4] invoices/test: add test clock --- invoices/clock_test.go | 77 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 77 insertions(+) create mode 100644 invoices/clock_test.go diff --git a/invoices/clock_test.go b/invoices/clock_test.go new file mode 100644 index 00000000..41dd4991 --- /dev/null +++ b/invoices/clock_test.go @@ -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 +} From b2f43858c39535c3bdb8feaaeae7846ab0698245 Mon Sep 17 00:00:00 2001 From: Joost Jager Date: Tue, 3 Sep 2019 12:23:39 +0200 Subject: [PATCH 4/4] invoices: accept mpp payments --- channeldb/invoices.go | 16 +- invoices/invoiceregistry.go | 241 ++++++- invoices/invoiceregistry_test.go | 92 +++ invoices/update.go | 165 ++++- lnrpc/invoicesrpc/utils.go | 17 +- lnrpc/rpc.pb.go | 1151 +++++++++++++++--------------- lnrpc/rpc.proto | 3 + lnrpc/rpc.swagger.json | 5 + lntest/itest/lnd_test.go | 26 +- server.go | 3 + 10 files changed, 1125 insertions(+), 594 deletions(-) diff --git a/channeldb/invoices.go b/channeldb/invoices.go index 89ad5569..106c0e41 100644 --- a/channeldb/invoices.go +++ b/channeldb/invoices.go @@ -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, diff --git a/invoices/invoiceregistry.go b/invoices/invoiceregistry.go index e54f0952..bfdc54a6 100644 --- a/invoices/invoiceregistry.go +++ b/invoices/invoiceregistry.go @@ -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. @@ -49,6 +57,38 @@ type RegistryConfig struct { // 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 @@ -82,6 +122,10 @@ type InvoiceRegistry struct { // subscriber. This is used to unsubscribe from all hashes efficiently. hodlReverseSubscriptions map[chan<- interface{}]map[channeldb.CircuitKey]struct{} + // htlcAutoReleaseChan contains the new htlcs that need to be + // auto-released. + htlcAutoReleaseChan chan *htlcReleaseEvent + wg sync.WaitGroup quit chan struct{} } @@ -91,7 +135,6 @@ type InvoiceRegistry struct { // 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, cfg *RegistryConfig) *InvoiceRegistry { - return &InvoiceRegistry{ cdb: cdb, notificationClients: make(map[uint32]*InvoiceSubscription), @@ -102,6 +145,7 @@ func NewRegistry(cdb *channeldb.DB, cfg *RegistryConfig) *InvoiceRegistry { hodlSubscriptions: make(map[channeldb.CircuitKey]map[chan<- interface{}]struct{}), hodlReverseSubscriptions: make(map[chan<- interface{}]map[channeldb.CircuitKey]struct{}), cfg: cfg, + htlcAutoReleaseChan: make(chan *htlcReleaseEvent), quit: make(chan struct{}), } } @@ -110,7 +154,7 @@ func NewRegistry(cdb *channeldb.DB, cfg *RegistryConfig) *InvoiceRegistry { func (i *InvoiceRegistry) Start() error { i.wg.Add(1) - go i.invoiceEventNotifier() + go i.invoiceEventLoop() return nil } @@ -130,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 @@ -202,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 } @@ -418,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. // @@ -428,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{}, @@ -436,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 @@ -450,6 +650,7 @@ func (i *InvoiceRegistry) NotifyExitHopHtlc(rHash lntypes.Hash, currentHeight: currentHeight, finalCltvRejectDelta: i.cfg.FinalCltvRejectDelta, customRecords: payload.CustomRecords(), + mpp: mpp, } // We'll attempt to settle an invoice matching this rHash on disk (if @@ -514,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, @@ -521,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 diff --git a/invoices/invoiceregistry_test.go b/invoices/invoiceregistry_test.go index 1ae46f63..8b992258 100644 --- a/invoices/invoiceregistry_test.go +++ b/invoices/invoiceregistry_test.go @@ -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,20 +61,27 @@ 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. cfg := RegistryConfig{ FinalCltvRejectDelta: testFinalCltvRejectDelta, + HtlcHoldDuration: 30 * time.Second, + Now: clock.now, + TickAfter: clock.tickAfter, } registry := NewRegistry(cdb, &cfg) @@ -84,6 +93,7 @@ func newTestContext(t *testing.T) *testContext { ctx := testContext{ registry: registry, + clock: clock, t: t, cleanup: func() { registry.Stop() @@ -683,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) + } +} diff --git a/invoices/update.go b/invoices/update.go index 9ce60218..3175efa6 100644 --- a/invoices/update.go +++ b/invoices/update.go @@ -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 diff --git a/lnrpc/invoicesrpc/utils.go b/lnrpc/invoicesrpc/utils.go index 5ffaa494..e659403b 100644 --- a/lnrpc/invoicesrpc/utils.go +++ b/lnrpc/invoicesrpc/utils.go @@ -75,14 +75,15 @@ func CreateRPCInvoice(invoice *channeldb.Invoice, } rpcHtlc := lnrpc.InvoiceHTLC{ - ChanId: key.ChanID.ToUint64(), - HtlcIndex: key.HtlcID, - AcceptHeight: int32(htlc.AcceptHeight), - AcceptTime: htlc.AcceptTime.Unix(), - ExpiryHeight: int32(htlc.Expiry), - AmtMsat: uint64(htlc.Amt), - State: state, - CustomRecords: htlc.CustomRecords, + ChanId: key.ChanID.ToUint64(), + HtlcIndex: key.HtlcID, + AcceptHeight: int32(htlc.AcceptHeight), + AcceptTime: htlc.AcceptTime.Unix(), + ExpiryHeight: int32(htlc.Expiry), + AmtMsat: uint64(htlc.Amt), + State: state, + CustomRecords: htlc.CustomRecords, + MppTotalAmtMsat: uint64(htlc.MppTotalAmt), } // Only report resolved times if htlc is resolved. diff --git a/lnrpc/rpc.pb.go b/lnrpc/rpc.pb.go index 40534db5..1fdfee25 100644 --- a/lnrpc/rpc.pb.go +++ b/lnrpc/rpc.pb.go @@ -7323,10 +7323,12 @@ type InvoiceHTLC struct { /// Current state the htlc is in. 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"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` + 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:"-"` } func (m *InvoiceHTLC) Reset() { *m = InvoiceHTLC{} } @@ -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. diff --git a/lnrpc/rpc.proto b/lnrpc/rpc.proto index cb5a2e2c..2b0cd90c 100644 --- a/lnrpc/rpc.proto +++ b/lnrpc/rpc.proto @@ -2407,6 +2407,9 @@ message InvoiceHTLC { /// Custom tlv records. map 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 { diff --git a/lnrpc/rpc.swagger.json b/lnrpc/rpc.swagger.json index 244c5108..b2fd2fc9 100644 --- a/lnrpc/rpc.swagger.json +++ b/lnrpc/rpc.swagger.json @@ -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" diff --git a/lntest/itest/lnd_test.go b/lntest/itest/lnd_test.go index 9dc5f16c..8cd889b4 100644 --- a/lntest/itest/lnd_test.go +++ b/lntest/itest/lnd_test.go @@ -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) diff --git a/server.go b/server.go index 1a767910..88dce9de 100644 --- a/server.go +++ b/server.go @@ -380,6 +380,9 @@ func newServer(listenAddrs []net.Addr, chanDB *channeldb.DB, registryConfig := invoices.RegistryConfig{ FinalCltvRejectDelta: defaultFinalCltvRejectDelta, + HtlcHoldDuration: invoices.DefaultHtlcHoldDuration, + Now: time.Now, + TickAfter: time.After, } s := &server{