Merge pull request #4452 from yyforyongyu/add-connection-timeout

lnrpc+tor: add network connection timeout
This commit is contained in:
Wilmer Paulino 2020-09-16 12:28:29 -07:00 committed by GitHub
commit a5c5304c09
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
22 changed files with 994 additions and 724 deletions

@ -10,6 +10,7 @@ import (
"github.com/btcsuite/btcd/btcec" "github.com/btcsuite/btcd/btcec"
"github.com/lightningnetwork/lnd/keychain" "github.com/lightningnetwork/lnd/keychain"
"github.com/lightningnetwork/lnd/lnwire" "github.com/lightningnetwork/lnd/lnwire"
"github.com/lightningnetwork/lnd/tor"
) )
// Conn is an implementation of net.Conn which enforces an authenticated key // Conn is an implementation of net.Conn which enforces an authenticated key
@ -34,12 +35,12 @@ var _ net.Conn = (*Conn)(nil)
// public key. In the case of a handshake failure, the connection is closed and // public key. In the case of a handshake failure, the connection is closed and
// a non-nil error is returned. // a non-nil error is returned.
func Dial(local keychain.SingleKeyECDH, netAddr *lnwire.NetAddress, func Dial(local keychain.SingleKeyECDH, netAddr *lnwire.NetAddress,
dialer func(string, string) (net.Conn, error)) (*Conn, error) { timeout time.Duration, dialer tor.DialFunc) (*Conn, error) {
ipAddr := netAddr.Address.String() ipAddr := netAddr.Address.String()
var conn net.Conn var conn net.Conn
var err error var err error
conn, err = dialer("tcp", ipAddr) conn, err = dialer("tcp", ipAddr, timeout)
if err != nil { if err != nil {
return nil, err return nil, err
} }

@ -13,6 +13,7 @@ import (
"github.com/btcsuite/btcd/btcec" "github.com/btcsuite/btcd/btcec"
"github.com/lightningnetwork/lnd/keychain" "github.com/lightningnetwork/lnd/keychain"
"github.com/lightningnetwork/lnd/lnwire" "github.com/lightningnetwork/lnd/lnwire"
"github.com/lightningnetwork/lnd/tor"
) )
type maybeNetConn struct { type maybeNetConn struct {
@ -66,7 +67,10 @@ func establishTestConnection() (net.Conn, net.Conn, func(), error) {
// successful. // successful.
remoteConnChan := make(chan maybeNetConn, 1) remoteConnChan := make(chan maybeNetConn, 1)
go func() { go func() {
remoteConn, err := Dial(remoteKeyECDH, netAddr, net.Dial) remoteConn, err := Dial(
remoteKeyECDH, netAddr,
tor.DefaultConnTimeout, net.DialTimeout,
)
remoteConnChan <- maybeNetConn{remoteConn, err} remoteConnChan <- maybeNetConn{remoteConn, err}
}() }()
@ -196,7 +200,10 @@ func TestConcurrentHandshakes(t *testing.T) {
remoteKeyECDH := &keychain.PrivKeyECDH{PrivKey: remotePriv} remoteKeyECDH := &keychain.PrivKeyECDH{PrivKey: remotePriv}
go func() { go func() {
remoteConn, err := Dial(remoteKeyECDH, netAddr, net.Dial) remoteConn, err := Dial(
remoteKeyECDH, netAddr,
tor.DefaultConnTimeout, net.DialTimeout,
)
connChan <- maybeNetConn{remoteConn, err} connChan <- maybeNetConn{remoteConn, err}
}() }()

@ -775,7 +775,10 @@ func initNeutrinoBackend(cfg *Config, chainDir string) (*neutrino.ChainService,
AddPeers: cfg.NeutrinoMode.AddPeers, AddPeers: cfg.NeutrinoMode.AddPeers,
ConnectPeers: cfg.NeutrinoMode.ConnectPeers, ConnectPeers: cfg.NeutrinoMode.ConnectPeers,
Dialer: func(addr net.Addr) (net.Conn, error) { Dialer: func(addr net.Addr) (net.Conn, error) {
return cfg.net.Dial(addr.Network(), addr.String()) return cfg.net.Dial(
addr.Network(), addr.String(),
cfg.ConnectionTimeout,
)
}, },
NameResolver: func(host string) ([]net.IP, error) { NameResolver: func(host string) ([]net.IP, error) {
addrs, err := cfg.net.LookupHost(host) addrs, err := cfg.net.LookupHost(host)

@ -271,7 +271,7 @@ func (s *server) ConnectPeer(nodePub *btcec.PublicKey, addrs []net.Addr) error {
// Attempt to connect to the peer using this full address. If // Attempt to connect to the peer using this full address. If
// we're unable to connect to them, then we'll try the next // we're unable to connect to them, then we'll try the next
// address in place of it. // address in place of it.
err := s.ConnectToPeer(netAddr, true) err := s.ConnectToPeer(netAddr, true, s.cfg.ConnectionTimeout)
// If we're already connected to this peer, then we don't // If we're already connected to this peer, then we don't
// consider this an error, so we'll exit here. // consider this an error, so we'll exit here.

@ -496,6 +496,14 @@ var connectCommand = cli.Command{
Category: "Peers", Category: "Peers",
Usage: "Connect to a remote lnd peer.", Usage: "Connect to a remote lnd peer.",
ArgsUsage: "<pubkey>@host", ArgsUsage: "<pubkey>@host",
Description: `
Connect to a peer using its <pubkey> and host.
A custom timeout on the connection is supported. For instance, to timeout
the connection request in 30 seconds, use the following:
lncli connect <pubkey>@host --timeout 30s
`,
Flags: []cli.Flag{ Flags: []cli.Flag{
cli.BoolFlag{ cli.BoolFlag{
Name: "perm", Name: "perm",
@ -503,6 +511,13 @@ var connectCommand = cli.Command{
"connect to the target peer.\n" + "connect to the target peer.\n" +
" If not, the call will be synchronous.", " If not, the call will be synchronous.",
}, },
cli.DurationFlag{
Name: "timeout",
Usage: "The connection timeout value for current request. " +
"Valid uints are {ms, s, m, h}.\n" +
"If not set, the global connection " +
"timeout value (default to 120s) is used.",
},
}, },
Action: actionDecorator(connectPeer), Action: actionDecorator(connectPeer),
} }
@ -524,8 +539,9 @@ func connectPeer(ctx *cli.Context) error {
Host: splitAddr[1], Host: splitAddr[1],
} }
req := &lnrpc.ConnectPeerRequest{ req := &lnrpc.ConnectPeerRequest{
Addr: addr, Addr: addr,
Perm: ctx.Bool("perm"), Perm: ctx.Bool("perm"),
Timeout: uint64(ctx.Duration("timeout").Seconds()),
} }
lnid, err := client.ConnectPeer(ctxb, req) lnid, err := client.ConnectPeer(ctxb, req)

@ -191,21 +191,22 @@ type Config struct {
// loadConfig function. We need to expose the 'raw' strings so the // loadConfig function. We need to expose the 'raw' strings so the
// command line library can access them. // command line library can access them.
// Only the parsed net.Addrs should be used! // Only the parsed net.Addrs should be used!
RawRPCListeners []string `long:"rpclisten" description:"Add an interface/port/socket to listen for RPC connections"` RawRPCListeners []string `long:"rpclisten" description:"Add an interface/port/socket to listen for RPC connections"`
RawRESTListeners []string `long:"restlisten" description:"Add an interface/port/socket to listen for REST connections"` RawRESTListeners []string `long:"restlisten" description:"Add an interface/port/socket to listen for REST connections"`
RawListeners []string `long:"listen" description:"Add an interface/port to listen for peer connections"` RawListeners []string `long:"listen" description:"Add an interface/port to listen for peer connections"`
RawExternalIPs []string `long:"externalip" description:"Add an ip:port to the list of local addresses we claim to listen on to peers. If a port is not specified, the default (9735) will be used regardless of other parameters"` RawExternalIPs []string `long:"externalip" description:"Add an ip:port to the list of local addresses we claim to listen on to peers. If a port is not specified, the default (9735) will be used regardless of other parameters"`
ExternalHosts []string `long:"externalhosts" description:"A set of hosts that should be periodically resolved to announce IPs for"` ExternalHosts []string `long:"externalhosts" description:"A set of hosts that should be periodically resolved to announce IPs for"`
RPCListeners []net.Addr RPCListeners []net.Addr
RESTListeners []net.Addr RESTListeners []net.Addr
RestCORS []string `long:"restcors" description:"Add an ip:port/hostname to allow cross origin access from. To allow all origins, set as \"*\"."` RestCORS []string `long:"restcors" description:"Add an ip:port/hostname to allow cross origin access from. To allow all origins, set as \"*\"."`
Listeners []net.Addr Listeners []net.Addr
ExternalIPs []net.Addr ExternalIPs []net.Addr
DisableListen bool `long:"nolisten" description:"Disable listening for incoming peer connections"` DisableListen bool `long:"nolisten" description:"Disable listening for incoming peer connections"`
DisableRest bool `long:"norest" description:"Disable REST API"` DisableRest bool `long:"norest" description:"Disable REST API"`
NAT bool `long:"nat" description:"Toggle NAT traversal support (using either UPnP or NAT-PMP) to automatically advertise your external IP address to the network -- NOTE this does not support devices behind multiple NATs"` NAT bool `long:"nat" description:"Toggle NAT traversal support (using either UPnP or NAT-PMP) to automatically advertise your external IP address to the network -- NOTE this does not support devices behind multiple NATs"`
MinBackoff time.Duration `long:"minbackoff" description:"Shortest backoff when reconnecting to persistent peers. Valid time units are {s, m, h}."` MinBackoff time.Duration `long:"minbackoff" description:"Shortest backoff when reconnecting to persistent peers. Valid time units are {s, m, h}."`
MaxBackoff time.Duration `long:"maxbackoff" description:"Longest backoff when reconnecting to persistent peers. Valid time units are {s, m, h}."` MaxBackoff time.Duration `long:"maxbackoff" description:"Longest backoff when reconnecting to persistent peers. Valid time units are {s, m, h}."`
ConnectionTimeout time.Duration `long:"connectiontimeout" description:"The timeout value for network connections. Valid time units are {ms, s, m, h}."`
DebugLevel string `short:"d" long:"debuglevel" description:"Logging level for all subsystems {trace, debug, info, warn, error, critical} -- You may also specify <subsystem>=<level>,<subsystem2>=<level>,... to set the log level for individual subsystems -- Use show to list available subsystems"` DebugLevel string `short:"d" long:"debuglevel" description:"Logging level for all subsystems {trace, debug, info, warn, error, critical} -- You may also specify <subsystem>=<level>,<subsystem2>=<level>,... to set the log level for individual subsystems -- Use show to list available subsystems"`
@ -376,6 +377,7 @@ func DefaultConfig() Config {
NoSeedBackup: defaultNoSeedBackup, NoSeedBackup: defaultNoSeedBackup,
MinBackoff: defaultMinBackoff, MinBackoff: defaultMinBackoff,
MaxBackoff: defaultMaxBackoff, MaxBackoff: defaultMaxBackoff,
ConnectionTimeout: tor.DefaultConnTimeout,
SubRPCServers: &subRPCServerConfigs{ SubRPCServers: &subRPCServerConfigs{
SignRPC: &signrpc.Config{}, SignRPC: &signrpc.Config{},
RouterRPC: routerrpc.DefaultConfig(), RouterRPC: routerrpc.DefaultConfig(),

@ -287,6 +287,10 @@ type DNSSeedBootstrapper struct {
// the network seed. // the network seed.
dnsSeeds [][2]string dnsSeeds [][2]string
net tor.Net net tor.Net
// timeout is the maximum amount of time a dial will wait for a connect to
// complete.
timeout time.Duration
} }
// A compile time assertion to ensure that DNSSeedBootstrapper meets the // A compile time assertion to ensure that DNSSeedBootstrapper meets the
@ -300,8 +304,10 @@ var _ NetworkPeerBootstrapper = (*ChannelGraphBootstrapper)(nil)
// used as a fallback for manual TCP resolution in the case of an error // used as a fallback for manual TCP resolution in the case of an error
// receiving the UDP response. The second host should return a single A record // receiving the UDP response. The second host should return a single A record
// with the IP address of the authoritative name server. // with the IP address of the authoritative name server.
func NewDNSSeedBootstrapper(seeds [][2]string, net tor.Net) NetworkPeerBootstrapper { func NewDNSSeedBootstrapper(
return &DNSSeedBootstrapper{dnsSeeds: seeds, net: net} seeds [][2]string, net tor.Net,
timeout time.Duration) NetworkPeerBootstrapper {
return &DNSSeedBootstrapper{dnsSeeds: seeds, net: net, timeout: timeout}
} }
// fallBackSRVLookup attempts to manually query for SRV records we need to // fallBackSRVLookup attempts to manually query for SRV records we need to
@ -327,7 +333,7 @@ func (d *DNSSeedBootstrapper) fallBackSRVLookup(soaShim string,
// Once we have the IP address, we'll establish a TCP connection using // Once we have the IP address, we'll establish a TCP connection using
// port 53. // port 53.
dnsServer := net.JoinHostPort(addrs[0], "53") dnsServer := net.JoinHostPort(addrs[0], "53")
conn, err := d.net.Dial("tcp", dnsServer) conn, err := d.net.Dial("tcp", dnsServer, d.timeout)
if err != nil { if err != nil {
return nil, err return nil, err
} }
@ -389,7 +395,9 @@ search:
// obtain a random sample of the encoded public keys of nodes. // obtain a random sample of the encoded public keys of nodes.
// We use the lndLookupSRV function for this task. // We use the lndLookupSRV function for this task.
primarySeed := dnsSeedTuple[0] primarySeed := dnsSeedTuple[0]
_, addrs, err := d.net.LookupSRV("nodes", "tcp", primarySeed) _, addrs, err := d.net.LookupSRV(
"nodes", "tcp", primarySeed, d.timeout,
)
if err != nil { if err != nil {
log.Tracef("Unable to lookup SRV records via "+ log.Tracef("Unable to lookup SRV records via "+
"primary seed (%v): %v", primarySeed, err) "primary seed (%v): %v", primarySeed, err)

@ -2588,7 +2588,11 @@ type ConnectPeerRequest struct {
Addr *LightningAddress `protobuf:"bytes,1,opt,name=addr,proto3" json:"addr,omitempty"` Addr *LightningAddress `protobuf:"bytes,1,opt,name=addr,proto3" json:"addr,omitempty"`
// If set, the daemon will attempt to persistently connect to the target // If set, the daemon will attempt to persistently connect to the target
// peer. Otherwise, the call will be synchronous. // peer. Otherwise, the call will be synchronous.
Perm bool `protobuf:"varint,2,opt,name=perm,proto3" json:"perm,omitempty"` Perm bool `protobuf:"varint,2,opt,name=perm,proto3" json:"perm,omitempty"`
//
//The connection timeout value (in seconds) for this request. It won't affect
//other requests.
Timeout uint64 `protobuf:"varint,3,opt,name=timeout,proto3" json:"timeout,omitempty"`
XXX_NoUnkeyedLiteral struct{} `json:"-"` XXX_NoUnkeyedLiteral struct{} `json:"-"`
XXX_unrecognized []byte `json:"-"` XXX_unrecognized []byte `json:"-"`
XXX_sizecache int32 `json:"-"` XXX_sizecache int32 `json:"-"`
@ -2633,6 +2637,13 @@ func (m *ConnectPeerRequest) GetPerm() bool {
return false return false
} }
func (m *ConnectPeerRequest) GetTimeout() uint64 {
if m != nil {
return m.Timeout
}
return 0
}
type ConnectPeerResponse struct { type ConnectPeerResponse struct {
XXX_NoUnkeyedLiteral struct{} `json:"-"` XXX_NoUnkeyedLiteral struct{} `json:"-"`
XXX_unrecognized []byte `json:"-"` XXX_unrecognized []byte `json:"-"`
@ -12490,7 +12501,7 @@ func init() {
func init() { proto.RegisterFile("rpc.proto", fileDescriptor_77a6da22d6a3feb1) } func init() { proto.RegisterFile("rpc.proto", fileDescriptor_77a6da22d6a3feb1) }
var fileDescriptor_77a6da22d6a3feb1 = []byte{ var fileDescriptor_77a6da22d6a3feb1 = []byte{
// 11993 bytes of a gzipped FileDescriptorProto // 12005 bytes of a gzipped FileDescriptorProto
0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xbc, 0xbd, 0x59, 0x6c, 0x23, 0x49, 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xbc, 0xbd, 0x59, 0x6c, 0x23, 0x49,
0x9a, 0x18, 0x5c, 0xbc, 0x44, 0xf2, 0xe3, 0x21, 0x2a, 0x74, 0xb1, 0x54, 0x5d, 0x5d, 0xd5, 0xd9, 0x9a, 0x18, 0x5c, 0xbc, 0x44, 0xf2, 0xe3, 0x21, 0x2a, 0x74, 0xb1, 0x54, 0x5d, 0x5d, 0xd5, 0xd9,
0x3d, 0xdd, 0x35, 0xd5, 0x3d, 0xea, 0xea, 0xea, 0xae, 0x3e, 0xa6, 0xfe, 0xed, 0x19, 0x8a, 0xa2, 0x3d, 0xdd, 0x35, 0xd5, 0x3d, 0xea, 0xea, 0xea, 0xae, 0x3e, 0xa6, 0xfe, 0xed, 0x19, 0x8a, 0xa2,
@ -12606,641 +12617,642 @@ var fileDescriptor_77a6da22d6a3feb1 = []byte{
0x69, 0x70, 0x26, 0xf8, 0x19, 0xfb, 0x69, 0x7c, 0x08, 0xab, 0x31, 0x3a, 0x51, 0xf0, 0x6b, 0x50, 0x69, 0x70, 0x26, 0xf8, 0x19, 0xfb, 0x69, 0x7c, 0x08, 0xab, 0x31, 0x3a, 0x51, 0xf0, 0x6b, 0x50,
0x0e, 0x9c, 0x33, 0x17, 0x85, 0x30, 0x51, 0x74, 0x04, 0x30, 0xf6, 0x60, 0xed, 0x0b, 0xea, 0x3b, 0x0e, 0x9c, 0x33, 0x17, 0x85, 0x30, 0x51, 0x74, 0x04, 0x30, 0xf6, 0x60, 0xed, 0x0b, 0xea, 0x3b,
0xa7, 0x57, 0x2f, 0x2b, 0x3e, 0x5e, 0x4e, 0x36, 0x59, 0x4e, 0x07, 0xd6, 0x13, 0xe5, 0x88, 0xea, 0xa7, 0x57, 0x2f, 0x2b, 0x3e, 0x5e, 0x4e, 0x36, 0x59, 0x4e, 0x07, 0xd6, 0x13, 0xe5, 0x88, 0xea,
0xf9, 0xa2, 0x16, 0x33, 0x59, 0x32, 0x79, 0x42, 0xe3, 0x91, 0x59, 0x9d, 0x47, 0x1a, 0xc7, 0x40, 0xf9, 0xa2, 0x16, 0x33, 0x59, 0x32, 0x79, 0x42, 0xe3, 0x91, 0x59, 0x9d, 0x47, 0x1a, 0x1e, 0x90,
0xda, 0x9e, 0xeb, 0xd2, 0x51, 0x78, 0x44, 0xa9, 0x2f, 0x1b, 0xf3, 0xae, 0xb6, 0x82, 0x2b, 0x0f, 0xb6, 0xe7, 0xba, 0x74, 0x14, 0x1e, 0x51, 0xea, 0xcb, 0xc6, 0xbc, 0xab, 0xad, 0xe0, 0xca, 0xc3,
0x37, 0xc5, 0xc8, 0x26, 0x19, 0xaf, 0x58, 0xda, 0x04, 0xf2, 0x33, 0xea, 0x4f, 0xb1, 0xe0, 0x92, 0x4d, 0x31, 0xb2, 0x49, 0xc6, 0x2b, 0x96, 0x36, 0x81, 0xfc, 0x8c, 0xfa, 0x53, 0x2c, 0xb8, 0x64,
0x89, 0xbf, 0x8d, 0x75, 0x58, 0x8d, 0x15, 0xcb, 0xdb, 0x66, 0x3c, 0x80, 0xf5, 0x5d, 0x27, 0x18, 0xe2, 0x6f, 0x36, 0xb8, 0x4c, 0x33, 0xf5, 0xe6, 0x5c, 0x73, 0xc9, 0x9b, 0x32, 0x69, 0xac, 0xc3,
0x2d, 0x56, 0xb8, 0x09, 0xc5, 0xd9, 0xfc, 0xc4, 0x8a, 0xf3, 0xf0, 0xa7, 0xf4, 0xca, 0x68, 0xc2, 0x6a, 0xac, 0x42, 0xde, 0x6a, 0xe3, 0x01, 0xac, 0xef, 0x3a, 0xc1, 0x68, 0xb1, 0x29, 0x9b, 0x50,
0x46, 0x32, 0x87, 0x28, 0xeb, 0xd7, 0x33, 0x90, 0xdf, 0x1f, 0x1e, 0xb4, 0xc9, 0x16, 0x94, 0x1c, 0x9c, 0xcd, 0x4f, 0xac, 0x38, 0x77, 0x7f, 0x4a, 0xaf, 0x8c, 0x26, 0x6c, 0x24, 0x73, 0x88, 0xb2,
0x77, 0xe4, 0x4d, 0x99, 0x90, 0xc6, 0xfb, 0xac, 0xd2, 0xd7, 0x6e, 0xbb, 0x5b, 0x50, 0x46, 0xd9, 0x7e, 0x3d, 0x03, 0xf9, 0xfd, 0xe1, 0x41, 0x9b, 0x6c, 0x41, 0xc9, 0x71, 0x47, 0xde, 0x94, 0x89,
0x8e, 0xa9, 0xd7, 0x42, 0x4c, 0x2a, 0x31, 0xc0, 0x81, 0x37, 0x7a, 0xc6, 0xf4, 0x7a, 0x7a, 0x39, 0x6f, 0x7c, 0x34, 0x54, 0xfa, 0xda, 0x0d, 0x79, 0x0b, 0xca, 0x28, 0xf5, 0x31, 0xc5, 0x5b, 0x08,
0x73, 0x7c, 0xd4, 0xdc, 0xa5, 0x66, 0x9a, 0xe7, 0x72, 0x41, 0x84, 0x10, 0x0a, 0xea, 0xaf, 0x67, 0x50, 0x25, 0x06, 0x38, 0xf0, 0x46, 0xcf, 0x98, 0xc6, 0x4f, 0x2f, 0x67, 0x8e, 0x8f, 0x3a, 0xbd,
0x81, 0x88, 0x93, 0xb9, 0xed, 0xb9, 0x41, 0xe8, 0xdb, 0x8e, 0x1b, 0x06, 0x71, 0xc9, 0x23, 0x93, 0xd4, 0x59, 0xf3, 0x5c, 0x62, 0x88, 0x10, 0x42, 0x75, 0xfd, 0xf5, 0x2c, 0x10, 0x71, 0x66, 0xb7,
0x90, 0x3c, 0xee, 0x41, 0x03, 0x4f, 0x7b, 0x21, 0xf5, 0x20, 0xb3, 0xce, 0x46, 0x92, 0x8f, 0x10, 0x3d, 0x37, 0x08, 0x7d, 0xdb, 0x71, 0xc3, 0x20, 0x2e, 0x93, 0x64, 0x12, 0x32, 0xc9, 0x3d, 0x68,
0x7b, 0x18, 0xd3, 0x7e, 0x0b, 0xea, 0x91, 0xc0, 0xa5, 0xcc, 0x26, 0x79, 0xb3, 0xaa, 0x84, 0x2e, 0xa0, 0x1c, 0x20, 0xe4, 0x21, 0x64, 0xe3, 0xd9, 0x48, 0x26, 0x12, 0x02, 0x11, 0x63, 0xe7, 0x6f,
0xc1, 0xda, 0xd9, 0xa6, 0x93, 0x92, 0x84, 0xd2, 0x0e, 0xb9, 0x6c, 0xb7, 0x32, 0xb5, 0x2f, 0x8f, 0x41, 0x3d, 0x12, 0xc5, 0x94, 0x41, 0x25, 0x6f, 0x56, 0x95, 0x38, 0x26, 0x98, 0x3e, 0xdb, 0x8e,
0xa8, 0x14, 0xef, 0x50, 0x4f, 0x34, 0xa0, 0x26, 0x05, 0x2a, 0x4e, 0xc9, 0xe5, 0xbc, 0x8a, 0x90, 0x52, 0xc6, 0x50, 0x7a, 0x23, 0x97, 0xfa, 0x56, 0xa6, 0xf6, 0xe5, 0x11, 0x95, 0x82, 0x1f, 0x6a,
0xaa, 0x90, 0x26, 0x5d, 0x3c, 0x5a, 0x4a, 0x17, 0x8f, 0x8c, 0x7f, 0x5f, 0x86, 0xa2, 0x18, 0x06, 0x90, 0x06, 0xd4, 0xa4, 0xa8, 0xc5, 0x29, 0xb9, 0x04, 0x58, 0x11, 0xf2, 0x16, 0xd2, 0xa4, 0x0b,
0x2e, 0xec, 0x84, 0xce, 0x05, 0x8d, 0x84, 0x1d, 0x96, 0x62, 0x22, 0x94, 0x4f, 0xa7, 0x5e, 0xa8, 0x4e, 0x4b, 0xe9, 0x82, 0x93, 0xf1, 0xef, 0xcb, 0x50, 0x14, 0xc3, 0xc0, 0xc5, 0xa0, 0xd0, 0xb9,
0x64, 0x5c, 0xbe, 0x14, 0xab, 0x1c, 0x28, 0xa4, 0x5c, 0x4d, 0xce, 0xe2, 0xd6, 0x9e, 0x1c, 0x27, 0xa0, 0x91, 0x18, 0xc4, 0x52, 0x4c, 0xb8, 0xf2, 0xe9, 0xd4, 0x0b, 0x95, 0xf4, 0xcb, 0x17, 0x69,
0x1a, 0xe9, 0xd2, 0xcf, 0x2d, 0x28, 0x4a, 0x71, 0x29, 0xaf, 0xd4, 0xc0, 0xa5, 0x11, 0x17, 0x70, 0x95, 0x03, 0x85, 0xfc, 0xab, 0x49, 0x60, 0xdc, 0x0e, 0x94, 0xe3, 0x44, 0x23, 0x5d, 0x2e, 0xba,
0xb7, 0xa0, 0x34, 0xb2, 0x67, 0xf6, 0xc8, 0x09, 0xaf, 0x04, 0xb7, 0x54, 0x69, 0x56, 0xfa, 0xc4, 0x05, 0x45, 0x29, 0x48, 0xe5, 0x95, 0x82, 0xb8, 0x34, 0xe2, 0xa2, 0xef, 0x16, 0x94, 0x46, 0xf6,
0x1b, 0xd9, 0x13, 0xeb, 0xc4, 0x9e, 0xd8, 0xee, 0x88, 0x0a, 0x33, 0x4a, 0x15, 0x81, 0x3b, 0x1c, 0xcc, 0x1e, 0x39, 0xe1, 0x95, 0xe0, 0xa3, 0x2a, 0xcd, 0x4a, 0x9f, 0x78, 0x23, 0x7b, 0x62, 0x9d,
0x46, 0xbe, 0x03, 0x75, 0xd1, 0x4e, 0x49, 0xc5, 0xad, 0x29, 0xa2, 0xf5, 0x92, 0x8c, 0xc9, 0xe3, 0xd8, 0x13, 0xdb, 0x1d, 0x51, 0x61, 0x60, 0xa9, 0x22, 0x70, 0x87, 0xc3, 0xc8, 0x77, 0xa0, 0x2e,
0xde, 0x94, 0xcd, 0xcb, 0x29, 0xe5, 0x92, 0x6b, 0xce, 0x2c, 0x73, 0xc8, 0x1e, 0xc5, 0xde, 0x0a, 0xda, 0x29, 0xa9, 0xb8, 0x9d, 0x45, 0xb4, 0x5e, 0x92, 0x31, 0x49, 0xdd, 0x9b, 0xb2, 0x79, 0x39,
0xf4, 0x73, 0xbe, 0x82, 0xca, 0xbc, 0x2a, 0x0e, 0xfc, 0x92, 0x5b, 0x3f, 0x16, 0xc5, 0xd7, 0x9c, 0xa5, 0x5c, 0xa6, 0xcd, 0x99, 0x65, 0x0e, 0xd9, 0xa3, 0xd8, 0x5b, 0x81, 0x7e, 0xce, 0x57, 0x50,
0x26, 0xbe, 0xbe, 0x0b, 0x2b, 0x73, 0x37, 0xa0, 0x61, 0x38, 0xa1, 0x63, 0xd5, 0x96, 0x0a, 0x12, 0x99, 0x57, 0xc5, 0x81, 0x5f, 0x72, 0xbb, 0xc8, 0xa2, 0x60, 0x9b, 0xd3, 0x04, 0xdb, 0x77, 0x61,
0x35, 0x14, 0x42, 0x36, 0x67, 0x1b, 0x56, 0xb9, 0xfd, 0x27, 0xb0, 0x43, 0x2f, 0x38, 0x77, 0x02, 0x65, 0xee, 0x06, 0x34, 0x0c, 0x27, 0x74, 0xac, 0xda, 0x52, 0x41, 0xa2, 0x86, 0x42, 0xc8, 0xe6,
0x2b, 0x60, 0x4a, 0x25, 0xb7, 0x10, 0xac, 0x20, 0x6a, 0x20, 0x30, 0x03, 0xae, 0x55, 0x6e, 0x26, 0x6c, 0xc3, 0x2a, 0xb7, 0x0c, 0x05, 0x76, 0xe8, 0x05, 0xe7, 0x4e, 0x60, 0x05, 0x4c, 0xdd, 0xe4,
0xe8, 0x7d, 0x3a, 0xa2, 0xce, 0x05, 0x1d, 0xa3, 0x68, 0x9b, 0x33, 0xd7, 0x63, 0x79, 0x4c, 0x81, 0xb6, 0x83, 0x15, 0x44, 0x0d, 0x04, 0x66, 0xc0, 0xf5, 0xcd, 0xcd, 0x04, 0xbd, 0x4f, 0x47, 0xd4,
0x44, 0x3d, 0x65, 0x3e, 0xb5, 0xe6, 0xb3, 0xb1, 0xcd, 0xe4, 0xbb, 0x3a, 0xd7, 0x1f, 0xdc, 0xf9, 0xb9, 0xa0, 0x63, 0x14, 0x7a, 0x73, 0xe6, 0x7a, 0x2c, 0x8f, 0x29, 0x90, 0xa8, 0xc1, 0xcc, 0xa7,
0xf4, 0x98, 0x43, 0xc8, 0x03, 0x90, 0xc2, 0xab, 0x58, 0x33, 0xcb, 0x31, 0xb6, 0xce, 0xf6, 0xac, 0xd6, 0x7c, 0x36, 0xb6, 0x99, 0xe4, 0x57, 0xe7, 0x9a, 0x85, 0x3b, 0x9f, 0x1e, 0x73, 0x08, 0x79,
0x59, 0x15, 0x14, 0x5c, 0xb6, 0xbe, 0xa3, 0x6f, 0x96, 0x06, 0x5b, 0x61, 0xa8, 0x67, 0x45, 0x1b, 0x00, 0x52, 0xac, 0x15, 0x6b, 0x66, 0x39, 0xc6, 0xf0, 0xd9, 0x9e, 0x35, 0xab, 0x82, 0x82, 0x4b,
0xa6, 0x09, 0xc5, 0x99, 0xef, 0x5c, 0xd8, 0x21, 0x6d, 0xae, 0xf0, 0x13, 0x4e, 0x24, 0x19, 0x93, 0xdd, 0x77, 0xf4, 0xcd, 0xd2, 0x60, 0x2b, 0x0c, 0x35, 0xb0, 0x68, 0xc3, 0x34, 0xa1, 0x38, 0xf3,
0x74, 0x5c, 0x27, 0x74, 0xec, 0xd0, 0xf3, 0x9b, 0x04, 0x71, 0x11, 0x80, 0xdc, 0x87, 0x15, 0x5c, 0x9d, 0x0b, 0x3b, 0xa4, 0xcd, 0x15, 0x7e, 0xf6, 0x89, 0x24, 0x63, 0x9f, 0x8e, 0xeb, 0x84, 0x8e,
0x27, 0x41, 0x68, 0x87, 0xf3, 0x40, 0x08, 0xee, 0xab, 0xb8, 0xa0, 0x50, 0xf5, 0x18, 0x20, 0x1c, 0x1d, 0x7a, 0x7e, 0x93, 0x20, 0x2e, 0x02, 0x90, 0xfb, 0xb0, 0x82, 0xeb, 0x24, 0x08, 0xed, 0x70,
0x65, 0x77, 0xf2, 0x09, 0x6c, 0xf0, 0xa5, 0xb1, 0xb0, 0x35, 0xd7, 0xd8, 0x70, 0x60, 0x8b, 0x56, 0x1e, 0x08, 0x91, 0x7e, 0x15, 0x17, 0x14, 0x2a, 0x25, 0x03, 0x84, 0xa3, 0x54, 0x4f, 0x3e, 0x81,
0x91, 0xa2, 0x1d, 0xdf, 0xa3, 0x9f, 0xc1, 0xa6, 0x58, 0x2e, 0x0b, 0x39, 0xd7, 0x55, 0xce, 0x35, 0x0d, 0xbe, 0x34, 0x16, 0xb6, 0xe6, 0x1a, 0x1b, 0x0e, 0x6c, 0xd1, 0x2a, 0x52, 0xb4, 0xe3, 0x7b,
0x4e, 0x92, 0xc8, 0xba, 0x0d, 0x2b, 0xac, 0x69, 0xce, 0xc8, 0x12, 0x25, 0xb0, 0x5d, 0xb1, 0xc1, 0xf4, 0x33, 0xd8, 0x14, 0xcb, 0x65, 0x21, 0xe7, 0xba, 0xca, 0xb9, 0xc6, 0x49, 0x12, 0x59, 0xb7,
0x7a, 0x81, 0x99, 0x96, 0x39, 0xd2, 0x44, 0xdc, 0x53, 0x7a, 0x45, 0x3e, 0x87, 0x65, 0xbe, 0x7c, 0x61, 0x85, 0x35, 0xcd, 0x19, 0x59, 0xa2, 0x04, 0xb6, 0x2b, 0x36, 0x58, 0x2f, 0x30, 0xd3, 0x32,
0x50, 0x3b, 0xc5, 0xc3, 0x6f, 0x0b, 0x0f, 0xbf, 0x75, 0x31, 0xb8, 0x6d, 0x85, 0xc5, 0xf3, 0xaf, 0x47, 0x9a, 0x88, 0x7b, 0x4a, 0xaf, 0xc8, 0xe7, 0xb0, 0xcc, 0x97, 0x0f, 0xea, 0xad, 0x78, 0x2c,
0x3e, 0x8a, 0xa5, 0xd9, 0xd6, 0x98, 0x38, 0xa7, 0x34, 0x74, 0xa6, 0xb4, 0xb9, 0xc9, 0x17, 0x9b, 0x6e, 0xe1, 0xb1, 0xb8, 0x2e, 0x06, 0xb7, 0xad, 0xb0, 0x78, 0x32, 0xd6, 0x47, 0xb1, 0x34, 0xdb,
0x4c, 0xb3, 0x5d, 0x3b, 0x9f, 0x21, 0xa6, 0xc9, 0x59, 0x25, 0x4f, 0xe1, 0x3a, 0x9e, 0x78, 0x01, 0x1a, 0x13, 0xe7, 0x94, 0x32, 0x2e, 0xdd, 0xdc, 0xe4, 0x8b, 0x4d, 0xa6, 0xd9, 0xae, 0x9d, 0xcf,
0x95, 0x96, 0xc3, 0xe6, 0x4d, 0xb1, 0x21, 0x19, 0x50, 0x8a, 0xe0, 0x4c, 0x8f, 0xe1, 0x3a, 0xa3, 0x10, 0xd3, 0xe4, 0xac, 0x92, 0xa7, 0x70, 0x1d, 0x4f, 0xbc, 0x80, 0x4a, 0x9b, 0x62, 0xf3, 0xa6,
0xb2, 0xef, 0xde, 0xc2, 0x85, 0x51, 0xe3, 0xaa, 0xa3, 0xb4, 0xf1, 0x32, 0x71, 0xe7, 0xdc, 0x7e, 0xd8, 0x90, 0x0c, 0x28, 0x85, 0x73, 0xa6, 0xe1, 0x70, 0x6d, 0x52, 0x59, 0x7e, 0x6f, 0xe1, 0xc2,
0x2e, 0x99, 0xea, 0x6b, 0xc8, 0x4d, 0x80, 0x81, 0x84, 0x39, 0x70, 0x0f, 0x56, 0xc4, 0x2c, 0x44, 0xa8, 0x71, 0xa5, 0x52, 0x5a, 0x7f, 0x99, 0x20, 0x74, 0x6e, 0x3f, 0x97, 0x4c, 0xf5, 0x35, 0xe4,
0xcc, 0xb4, 0x79, 0x1b, 0x8f, 0xa1, 0x9b, 0xb2, 0x8f, 0x0b, 0xdc, 0xd6, 0x6c, 0xf0, 0x79, 0xd1, 0x26, 0xc0, 0x40, 0xc2, 0x50, 0xb8, 0x07, 0x2b, 0x62, 0x16, 0x22, 0x66, 0xda, 0xbc, 0x8d, 0x07,
0xf8, 0xef, 0x3e, 0x10, 0x39, 0x29, 0x5a, 0x41, 0xaf, 0xbf, 0xac, 0xa0, 0x15, 0x31, 0x4d, 0x11, 0xd4, 0x4d, 0xd9, 0xc7, 0x05, 0x6e, 0x6b, 0x36, 0xf8, 0xbc, 0x68, 0xfc, 0x77, 0x1f, 0x88, 0x9c,
0xc8, 0xf8, 0xdd, 0x0c, 0x97, 0x5a, 0x04, 0x75, 0xa0, 0xe9, 0xeb, 0x9c, 0xaf, 0x59, 0x9e, 0x3b, 0x14, 0xad, 0xa0, 0xd7, 0x5f, 0x56, 0xd0, 0x8a, 0x98, 0xa6, 0x08, 0x64, 0xfc, 0x6e, 0x86, 0xcb,
0xb9, 0x12, 0xac, 0x0e, 0x38, 0xa8, 0xef, 0x4e, 0x90, 0xd7, 0x38, 0xae, 0x4e, 0xc2, 0x0f, 0xc8, 0x33, 0x82, 0x3a, 0xd0, 0x34, 0x79, 0xce, 0xd7, 0x2c, 0xcf, 0x9d, 0x5c, 0x09, 0x56, 0x07, 0x1c,
0xaa, 0x04, 0x22, 0xd1, 0x1d, 0xa8, 0xcc, 0xe6, 0x27, 0x13, 0x67, 0xc4, 0x49, 0x72, 0xbc, 0x14, 0xd4, 0x77, 0x27, 0xc8, 0x6b, 0x1c, 0x57, 0x27, 0xe1, 0x47, 0x67, 0x55, 0x02, 0x91, 0xe8, 0x0e,
0x0e, 0x42, 0x82, 0x37, 0xa0, 0x2a, 0xd6, 0x3a, 0xa7, 0xc8, 0x23, 0x45, 0x45, 0xc0, 0x90, 0x04, 0x54, 0x66, 0xf3, 0x93, 0x89, 0x33, 0xe2, 0x24, 0x39, 0x5e, 0x0a, 0x07, 0x21, 0xc1, 0x1b, 0x50,
0x0f, 0x60, 0xea, 0x23, 0xb3, 0xab, 0x9a, 0xf8, 0xdb, 0xd8, 0x81, 0xb5, 0x78, 0xa3, 0x85, 0x74, 0x15, 0x6b, 0x9d, 0x53, 0xe4, 0x91, 0xa2, 0x22, 0x60, 0x48, 0x82, 0x47, 0x33, 0xf5, 0x91, 0xd9,
0x70, 0x1f, 0x4a, 0x82, 0x93, 0x4a, 0x4b, 0x56, 0x3d, 0x3e, 0x1a, 0xa6, 0xc2, 0x1b, 0xff, 0xa1, 0x55, 0x4d, 0xfc, 0x6d, 0xec, 0xc0, 0x5a, 0xbc, 0xd1, 0x42, 0x6e, 0xb8, 0x0f, 0x25, 0xc1, 0x49,
0x00, 0xab, 0x72, 0x8c, 0xd8, 0x64, 0x0f, 0xe6, 0xd3, 0xa9, 0xed, 0xa7, 0xb0, 0xe8, 0xcc, 0x8b, 0xa5, 0x8d, 0xab, 0x1e, 0x1f, 0x0d, 0x53, 0xe1, 0x8d, 0xff, 0x50, 0x80, 0x55, 0x39, 0x46, 0x6c,
0x59, 0x74, 0x76, 0x81, 0x45, 0xc7, 0x4d, 0x19, 0x9c, 0xc3, 0xc7, 0x4d, 0x19, 0x6c, 0x75, 0x71, 0xb2, 0x07, 0xf3, 0xe9, 0xd4, 0xf6, 0x53, 0x58, 0x74, 0xe6, 0xc5, 0x2c, 0x3a, 0xbb, 0xc0, 0xa2,
0xed, 0x52, 0x37, 0x98, 0xd7, 0x04, 0x78, 0xc8, 0x0d, 0xf3, 0x0b, 0x07, 0x4a, 0x21, 0xe5, 0x40, 0xe3, 0x46, 0x0e, 0xce, 0xe1, 0xe3, 0x46, 0x0e, 0xb6, 0xba, 0xb8, 0xde, 0xa9, 0x9b, 0xd2, 0x6b,
0xd1, 0x8f, 0x83, 0xa5, 0xc4, 0x71, 0xf0, 0x06, 0xf0, 0x65, 0x2c, 0xd7, 0x63, 0x91, 0x2b, 0x9c, 0x02, 0x3c, 0xe4, 0x26, 0xfb, 0x85, 0x03, 0xa5, 0x90, 0x72, 0xa0, 0xe8, 0xc7, 0xc1, 0x52, 0xe2,
0x08, 0x13, 0x0b, 0xf2, 0x1d, 0x58, 0x4e, 0x72, 0x60, 0xce, 0xea, 0xeb, 0x29, 0xfc, 0xd7, 0x99, 0x38, 0x78, 0x03, 0xf8, 0x32, 0x96, 0xeb, 0xb1, 0xc8, 0x55, 0x51, 0x84, 0x89, 0x05, 0xf9, 0x0e,
0x52, 0x14, 0x29, 0x34, 0xe2, 0xb2, 0xe0, 0xbf, 0xce, 0x94, 0x1e, 0x20, 0x46, 0xd2, 0x77, 0x00, 0x2c, 0x27, 0x39, 0x30, 0x67, 0xf5, 0xf5, 0x14, 0xfe, 0xeb, 0x4c, 0x29, 0x8a, 0x14, 0x1a, 0x71,
0x78, 0xdd, 0xb8, 0x8d, 0x01, 0xb7, 0xf1, 0xdb, 0x89, 0x95, 0xa9, 0x8d, 0xfa, 0x36, 0x4b, 0xcc, 0x59, 0xf0, 0x5f, 0x67, 0x4a, 0x0f, 0x10, 0x23, 0xe9, 0x3b, 0x00, 0xbc, 0x6e, 0xdc, 0xc6, 0x80,
0x7d, 0x8a, 0xfb, 0xba, 0x8c, 0x39, 0x71, 0x4b, 0x7f, 0x02, 0x75, 0x6f, 0x46, 0x5d, 0x2b, 0xe2, 0xdb, 0xf8, 0xed, 0xc4, 0xca, 0xd4, 0x46, 0x7d, 0x9b, 0x25, 0xe6, 0x3e, 0xc5, 0x7d, 0x5d, 0xc6,
0x82, 0x15, 0x2c, 0xaa, 0x21, 0x8a, 0xea, 0x4a, 0xb8, 0x59, 0x63, 0x74, 0x2a, 0x49, 0x3e, 0xe3, 0x9c, 0xb8, 0xa5, 0x3f, 0x81, 0xba, 0x37, 0xa3, 0xae, 0x15, 0x71, 0xc1, 0x0a, 0x16, 0xd5, 0x10,
0x83, 0x4c, 0xb5, 0x9c, 0xd5, 0x6b, 0x72, 0xd6, 0x91, 0x30, 0xca, 0xfa, 0x21, 0x54, 0x7c, 0x1a, 0x45, 0x75, 0x25, 0xdc, 0xac, 0x31, 0x3a, 0x95, 0x24, 0x9f, 0xf1, 0x41, 0xa6, 0x5a, 0xce, 0xea,
0x78, 0x93, 0x39, 0xb7, 0xbe, 0xd7, 0x70, 0x1d, 0x49, 0x73, 0xa4, 0xa9, 0x30, 0xa6, 0x4e, 0x65, 0x35, 0x39, 0xeb, 0x48, 0x18, 0x65, 0xfd, 0x10, 0x2a, 0x3e, 0x0d, 0xbc, 0xc9, 0x9c, 0xdb, 0xe5,
0xfc, 0x46, 0x06, 0x2a, 0x5a, 0x1f, 0xc8, 0x3a, 0xac, 0xb4, 0xfb, 0xfd, 0xa3, 0x8e, 0xd9, 0x1a, 0x6b, 0xb8, 0x8e, 0xa4, 0xa1, 0xd2, 0x54, 0x18, 0x53, 0xa7, 0x32, 0x7e, 0x23, 0x03, 0x15, 0xad,
0x76, 0xbf, 0xe8, 0x58, 0xed, 0x83, 0xfe, 0xa0, 0xd3, 0xb8, 0xc1, 0xc0, 0x07, 0xfd, 0x76, 0xeb, 0x0f, 0x64, 0x1d, 0x56, 0xda, 0xfd, 0xfe, 0x51, 0xc7, 0x6c, 0x0d, 0xbb, 0x5f, 0x74, 0xac, 0xf6,
0xc0, 0xda, 0xeb, 0x9b, 0x6d, 0x09, 0xce, 0x90, 0x0d, 0x20, 0x66, 0xe7, 0xb0, 0x3f, 0xec, 0xc4, 0x41, 0x7f, 0xd0, 0x69, 0xdc, 0x60, 0xe0, 0x83, 0x7e, 0xbb, 0x75, 0x60, 0xed, 0xf5, 0xcd, 0xb6,
0xe0, 0x59, 0xd2, 0x80, 0xea, 0x8e, 0xd9, 0x69, 0xb5, 0xf7, 0x05, 0x24, 0x47, 0xd6, 0xa0, 0xb1, 0x04, 0x67, 0xc8, 0x06, 0x10, 0xb3, 0x73, 0xd8, 0x1f, 0x76, 0x62, 0xf0, 0x2c, 0x69, 0x40, 0x75,
0x77, 0xdc, 0xdb, 0xed, 0xf6, 0x9e, 0x58, 0xed, 0x56, 0xaf, 0xdd, 0x39, 0xe8, 0xec, 0x36, 0xf2, 0xc7, 0xec, 0xb4, 0xda, 0xfb, 0x02, 0x92, 0x23, 0x6b, 0xd0, 0xd8, 0x3b, 0xee, 0xed, 0x76, 0x7b,
0xa4, 0x06, 0xe5, 0xd6, 0x4e, 0xab, 0xb7, 0xdb, 0xef, 0x75, 0x76, 0x1b, 0x05, 0xe3, 0xbf, 0x67, 0x4f, 0xac, 0x76, 0xab, 0xd7, 0xee, 0x1c, 0x74, 0x76, 0x1b, 0x79, 0x52, 0x83, 0x72, 0x6b, 0xa7,
0x00, 0xa2, 0x86, 0x32, 0xbe, 0x1a, 0x35, 0x55, 0xf7, 0x76, 0xad, 0x2f, 0x74, 0x8a, 0xf3, 0x55, 0xd5, 0xdb, 0xed, 0xf7, 0x3a, 0xbb, 0x8d, 0x82, 0xf1, 0xdf, 0x33, 0x00, 0x51, 0x43, 0x19, 0x5f,
0x3f, 0x96, 0x26, 0x0f, 0xa1, 0xe8, 0xcd, 0xc3, 0x91, 0x37, 0xe5, 0x82, 0x7a, 0xfd, 0x61, 0x73, 0x8d, 0x9a, 0xaa, 0xfb, 0xc1, 0xd6, 0x17, 0x3a, 0xc5, 0xf9, 0xaa, 0x1f, 0x4b, 0x93, 0x87, 0x50,
0x21, 0x5f, 0x9f, 0xe3, 0x4d, 0x49, 0x18, 0xf3, 0x68, 0xe5, 0x5e, 0xe6, 0xd1, 0x8a, 0xbb, 0xce, 0xf4, 0xe6, 0xe1, 0xc8, 0x9b, 0x72, 0x11, 0xbe, 0xfe, 0xb0, 0xb9, 0x90, 0xaf, 0xcf, 0xf1, 0xa6,
0xb8, 0x5c, 0xa7, 0xb9, 0xce, 0x6e, 0x03, 0x04, 0xcf, 0x29, 0x9d, 0xa1, 0x31, 0x46, 0xec, 0x82, 0x24, 0x8c, 0xf9, 0xba, 0x72, 0x2f, 0xf3, 0x75, 0xc5, 0x9d, 0x6a, 0x5c, 0xae, 0xd3, 0x9c, 0x6a,
0x32, 0x42, 0x86, 0x4c, 0x8f, 0xfb, 0xa3, 0x0c, 0xac, 0xe3, 0x5a, 0x1a, 0x27, 0x99, 0xd8, 0x5d, 0xb7, 0x01, 0x82, 0xe7, 0x94, 0xce, 0xd0, 0x4c, 0x23, 0x76, 0x41, 0x19, 0x21, 0x43, 0xa6, 0xe1,
0xa8, 0x8c, 0x3c, 0x6f, 0xc6, 0x54, 0xff, 0x48, 0x5e, 0xd3, 0x41, 0x8c, 0x41, 0x71, 0x86, 0x7c, 0xfd, 0x51, 0x06, 0xd6, 0x71, 0x2d, 0x8d, 0x93, 0x4c, 0xec, 0x2e, 0x54, 0x46, 0x9e, 0x37, 0xa3,
0xea, 0xf9, 0x23, 0x2a, 0x78, 0x18, 0x20, 0x68, 0x8f, 0x41, 0xd8, 0x1e, 0x12, 0x9b, 0x90, 0x53, 0x4c, 0xa4, 0x55, 0xf2, 0x9a, 0x0e, 0x62, 0x0c, 0x8a, 0x33, 0xe4, 0x53, 0xcf, 0x1f, 0x51, 0xc1,
0x70, 0x16, 0x56, 0xe1, 0x30, 0x4e, 0xb2, 0x01, 0x4b, 0x27, 0x3e, 0xb5, 0x47, 0xe7, 0x82, 0x7b, 0xc3, 0x00, 0x41, 0x7b, 0x0c, 0xc2, 0xf6, 0x90, 0xd8, 0x84, 0x9c, 0x82, 0xb3, 0xb0, 0x0a, 0x87,
0x89, 0x14, 0xf9, 0x6e, 0x64, 0x94, 0x1a, 0xb1, 0x3d, 0x31, 0xa1, 0xbc, 0xf1, 0x25, 0x73, 0x59, 0x71, 0x92, 0x0d, 0x58, 0x3a, 0xf1, 0xa9, 0x3d, 0x3a, 0x17, 0xdc, 0x4b, 0xa4, 0xc8, 0x77, 0x23,
0xc0, 0xdb, 0x02, 0xcc, 0xce, 0x79, 0xfb, 0xc4, 0x76, 0xc7, 0x9e, 0x4b, 0xc7, 0x42, 0xcb, 0x8d, 0x73, 0xd5, 0x88, 0xed, 0x89, 0x09, 0xe5, 0x8d, 0x2f, 0x99, 0xcb, 0x02, 0xde, 0x16, 0x60, 0x76,
0x00, 0xc6, 0x11, 0x6c, 0x24, 0xfb, 0x27, 0xf8, 0xdd, 0xc7, 0x1a, 0xbf, 0xe3, 0xea, 0xe5, 0xd6, 0xce, 0xdb, 0x27, 0xb6, 0x3b, 0xf6, 0x5c, 0x3a, 0x16, 0xfa, 0x6f, 0x04, 0x30, 0x8e, 0x60, 0x23,
0xf5, 0x7b, 0x4c, 0xe3, 0x7d, 0xff, 0x2a, 0x0f, 0x79, 0xa6, 0x6e, 0x5c, 0xab, 0x99, 0xe8, 0xfa, 0xd9, 0x3f, 0xc1, 0xef, 0x3e, 0xd6, 0xf8, 0x1d, 0x57, 0x3c, 0xb7, 0xae, 0xdf, 0x63, 0x1a, 0xef,
0x63, 0x6e, 0xc1, 0xcf, 0x89, 0xb6, 0x2f, 0x2e, 0x80, 0x89, 0xc9, 0x42, 0x08, 0x0a, 0x5e, 0x0a, 0xfb, 0x57, 0x79, 0xc8, 0x33, 0x75, 0xe3, 0x5a, 0xcd, 0x44, 0xd7, 0x2c, 0x73, 0x0b, 0x1e, 0x50,
0xed, 0xd3, 0xd1, 0x85, 0x90, 0xbc, 0x39, 0xda, 0xa4, 0xa3, 0x0b, 0x54, 0xe7, 0xed, 0x90, 0xe7, 0xb4, 0x8a, 0x71, 0x01, 0x4c, 0x4c, 0x16, 0x42, 0x50, 0xf0, 0x52, 0x68, 0x9f, 0x8e, 0x2e, 0x84,
0xe5, 0xfc, 0xaa, 0x18, 0xd8, 0x21, 0xe6, 0x14, 0x28, 0xcc, 0x57, 0x54, 0x28, 0xcc, 0xd5, 0x84, 0xe4, 0xcd, 0xd1, 0x26, 0x1d, 0x5d, 0xa0, 0xa2, 0x6f, 0x87, 0x3c, 0x2f, 0xe7, 0x57, 0xc5, 0xc0,
0xa2, 0xe3, 0x9e, 0x78, 0x73, 0x77, 0x8c, 0xec, 0xa9, 0x64, 0xca, 0x24, 0xba, 0x55, 0x91, 0x93, 0x0e, 0x31, 0xa7, 0x40, 0x61, 0xbe, 0xa2, 0x42, 0x61, 0xae, 0x26, 0x14, 0x1d, 0xf7, 0xc4, 0x9b,
0xb2, 0xa3, 0x9d, 0x73, 0xa3, 0x12, 0x03, 0x0c, 0xd9, 0xe1, 0xfe, 0x01, 0x94, 0x83, 0x2b, 0x77, 0xbb, 0x63, 0x64, 0x4f, 0x25, 0x53, 0x26, 0xd1, 0xe1, 0x8a, 0x9c, 0x94, 0x1d, 0xed, 0x9c, 0x1b,
0xa4, 0xf3, 0xa0, 0x35, 0x31, 0x3e, 0xac, 0xf7, 0xdb, 0x83, 0x2b, 0x77, 0x84, 0x2b, 0xbe, 0x14, 0x95, 0x18, 0x60, 0xc8, 0x0e, 0xf7, 0x0f, 0xa0, 0x1c, 0x5c, 0xb9, 0x23, 0x9d, 0x07, 0xad, 0x89,
0x88, 0x5f, 0xe4, 0x11, 0x94, 0x94, 0x23, 0x82, 0x9f, 0x20, 0x37, 0xf5, 0x1c, 0xd2, 0xfb, 0xc0, 0xf1, 0x61, 0xbd, 0xdf, 0x1e, 0x5c, 0xb9, 0x23, 0x5c, 0xf1, 0xa5, 0x40, 0xfc, 0x22, 0x8f, 0xa0,
0xed, 0x3d, 0x8a, 0x94, 0xbc, 0x0f, 0x4b, 0xe8, 0x2d, 0x08, 0x9a, 0x55, 0xcc, 0x24, 0x95, 0x4a, 0xa4, 0x5c, 0x14, 0xfc, 0x04, 0xb9, 0xa9, 0xe7, 0x90, 0x7e, 0x09, 0x6e, 0x09, 0x52, 0xa4, 0xe4,
0xd6, 0x0c, 0xf4, 0x68, 0xd2, 0x31, 0x7a, 0x0e, 0x4c, 0x41, 0xc6, 0x86, 0xe9, 0x74, 0x62, 0xcf, 0x7d, 0x58, 0x42, 0x3f, 0x42, 0xd0, 0xac, 0x62, 0x26, 0xa9, 0x6e, 0xb2, 0x66, 0xa0, 0xaf, 0x93,
0xac, 0x11, 0xaa, 0x6f, 0x35, 0xee, 0x18, 0x64, 0x90, 0x36, 0x6a, 0x70, 0x77, 0xa1, 0x8a, 0x4e, 0x8e, 0xd1, 0xa7, 0x60, 0x0a, 0x32, 0x36, 0x4c, 0xa7, 0x13, 0x7b, 0x66, 0x8d, 0x50, 0x7d, 0xab,
0x1e, 0xa4, 0x71, 0xb9, 0x1c, 0x9a, 0x33, 0x81, 0xc1, 0xf6, 0x26, 0xf6, 0xac, 0x17, 0x6c, 0x3d, 0x71, 0x97, 0x21, 0x83, 0xb4, 0x51, 0x83, 0xbb, 0x0b, 0x55, 0x74, 0xff, 0x20, 0x8d, 0xcb, 0xe5,
0x85, 0x5a, 0xac, 0x31, 0xba, 0x01, 0xa8, 0xc6, 0x0d, 0x40, 0x6f, 0xe9, 0x06, 0xa0, 0xe8, 0x28, 0xd0, 0x9c, 0x09, 0x0c, 0xb6, 0x37, 0xb1, 0x67, 0xbd, 0x60, 0xeb, 0x29, 0xd4, 0x62, 0x8d, 0xd1,
0x14, 0xd9, 0x74, 0x83, 0xd0, 0x0f, 0xa0, 0x24, 0xc7, 0x82, 0xf1, 0x9c, 0xe3, 0xde, 0xd3, 0x5e, 0x4d, 0x43, 0x35, 0x6e, 0x1a, 0x7a, 0x4b, 0x37, 0x0d, 0x45, 0x47, 0xa1, 0xc8, 0xa6, 0x9b, 0x8a,
0xff, 0xcb, 0x9e, 0x35, 0xf8, 0xaa, 0xd7, 0x6e, 0xdc, 0x20, 0xcb, 0x50, 0x69, 0xb5, 0x91, 0x8d, 0x7e, 0x00, 0x25, 0x39, 0x16, 0x8c, 0xe7, 0x1c, 0xf7, 0x9e, 0xf6, 0xfa, 0x5f, 0xf6, 0xac, 0xc1,
0x21, 0x20, 0xc3, 0x48, 0x8e, 0x5a, 0x83, 0x81, 0x82, 0x64, 0x8d, 0x3d, 0x68, 0x24, 0xbb, 0xca, 0x57, 0xbd, 0x76, 0xe3, 0x06, 0x59, 0x86, 0x4a, 0xab, 0x8d, 0x6c, 0x0c, 0x01, 0x19, 0x46, 0x72,
0x16, 0x75, 0x28, 0x61, 0xc2, 0x19, 0x13, 0x01, 0x98, 0x22, 0xcf, 0xfd, 0x2b, 0x5c, 0x4d, 0xe2, 0xd4, 0x1a, 0x0c, 0x14, 0x24, 0x6b, 0xec, 0x41, 0x23, 0xd9, 0x55, 0xb6, 0xa8, 0x43, 0x09, 0x13,
0x09, 0xe3, 0x11, 0x34, 0xd8, 0xc1, 0xce, 0xc6, 0x5a, 0x77, 0xb3, 0x4e, 0x98, 0xe8, 0xad, 0x3b, 0x6e, 0x9a, 0x08, 0xc0, 0x54, 0x7c, 0xee, 0x79, 0xe1, 0x6a, 0x12, 0x4f, 0x18, 0x8f, 0xa0, 0xc1,
0x64, 0x4a, 0x66, 0x85, 0xc3, 0xb0, 0x2a, 0xe3, 0x63, 0x58, 0xd1, 0xb2, 0x45, 0x86, 0x17, 0x26, 0x0e, 0x76, 0x36, 0xd6, 0xba, 0x03, 0x76, 0xc2, 0x44, 0x6f, 0xdd, 0x55, 0x53, 0x32, 0x2b, 0x1c,
0x2c, 0x24, 0x0d, 0x2f, 0xa8, 0x66, 0x73, 0x8c, 0xb1, 0x09, 0xeb, 0x2c, 0xd9, 0xb9, 0xa0, 0x6e, 0x86, 0x55, 0x19, 0x1f, 0xc3, 0x8a, 0x96, 0x2d, 0x32, 0xc9, 0x30, 0x61, 0x21, 0x69, 0x92, 0x41,
0x38, 0x98, 0x9f, 0x70, 0xef, 0xbc, 0xe3, 0xb9, 0x4c, 0xfd, 0x2e, 0x2b, 0xcc, 0xf5, 0xbb, 0x64, 0x35, 0x9b, 0x63, 0x8c, 0x4d, 0x58, 0x67, 0xc9, 0xce, 0x05, 0x75, 0xc3, 0xc1, 0xfc, 0x84, 0xfb,
0x5b, 0xd8, 0x68, 0x38, 0x5b, 0xdc, 0xd2, 0x6a, 0xc0, 0x8c, 0xdb, 0xf8, 0x37, 0x66, 0xab, 0x29, 0xed, 0x1d, 0xcf, 0x65, 0xea, 0x77, 0x59, 0x61, 0xae, 0xdf, 0x25, 0xdb, 0xc2, 0x7a, 0xc3, 0xd9,
0x2b, 0x10, 0x1b, 0xd6, 0xa3, 0x4e, 0xc7, 0xb4, 0xfa, 0xbd, 0x83, 0x6e, 0x8f, 0x1d, 0x0e, 0x6c, 0xe2, 0x96, 0x56, 0x03, 0x66, 0xdc, 0xc6, 0xbf, 0x31, 0x2b, 0x4e, 0x59, 0x81, 0xd8, 0xb0, 0x1e,
0x58, 0x11, 0xb0, 0xb7, 0x87, 0x90, 0x8c, 0xd1, 0x80, 0xfa, 0x13, 0x1a, 0x76, 0xdd, 0x53, 0x4f, 0x75, 0x3a, 0xa6, 0xd5, 0xef, 0x1d, 0x74, 0x7b, 0xec, 0x70, 0x60, 0xc3, 0x8a, 0x80, 0xbd, 0x3d,
0x0c, 0x86, 0xf1, 0xe7, 0x97, 0x60, 0x59, 0x81, 0x22, 0x5b, 0xcf, 0x05, 0xf5, 0x03, 0xc7, 0x73, 0x84, 0x64, 0x8c, 0x06, 0xd4, 0x9f, 0xd0, 0xb0, 0xeb, 0x9e, 0x7a, 0x62, 0x30, 0x8c, 0x3f, 0xbf,
0x71, 0x9d, 0x94, 0x4d, 0x99, 0x64, 0xec, 0x4d, 0x68, 0x69, 0x28, 0x66, 0xac, 0x21, 0x56, 0xe8, 0x04, 0xcb, 0x0a, 0x14, 0x59, 0x81, 0x2e, 0xa8, 0x1f, 0x38, 0x9e, 0x8b, 0xeb, 0xa4, 0x6c, 0xca,
0x75, 0x28, 0x63, 0xbc, 0x03, 0xcb, 0xce, 0x98, 0xba, 0xa1, 0x13, 0x5e, 0x59, 0x31, 0x2b, 0x73, 0x24, 0x63, 0x6f, 0x42, 0x4b, 0x43, 0x31, 0x63, 0x0d, 0xb1, 0x42, 0xaf, 0x43, 0x19, 0xe3, 0x1d,
0x5d, 0x82, 0x85, 0x9c, 0xb1, 0x06, 0x05, 0x7b, 0xe2, 0xd8, 0x32, 0xea, 0x81, 0x27, 0x18, 0x74, 0x58, 0x76, 0xc6, 0xd4, 0x0d, 0x9d, 0xf0, 0xca, 0x8a, 0xd9, 0x9f, 0xeb, 0x12, 0x2c, 0xe4, 0x8c,
0xe4, 0x4d, 0x3c, 0x1f, 0xf5, 0x96, 0xb2, 0xc9, 0x13, 0xe4, 0x01, 0xac, 0x31, 0x1d, 0x4a, 0x37, 0x35, 0x28, 0xd8, 0x13, 0xc7, 0x96, 0xf1, 0x10, 0x3c, 0xc1, 0xa0, 0x23, 0x6f, 0xe2, 0xf9, 0xa8,
0xfd, 0x23, 0x87, 0xe2, 0x06, 0x6f, 0xe2, 0xce, 0xa7, 0x47, 0x91, 0xf9, 0x9f, 0x61, 0x98, 0x74, 0xb7, 0x94, 0x4d, 0x9e, 0x20, 0x0f, 0x60, 0x8d, 0xe9, 0x50, 0xba, 0x53, 0x00, 0x39, 0x14, 0x37,
0xc1, 0x72, 0x08, 0x71, 0x52, 0x65, 0xe0, 0x56, 0x89, 0x15, 0x77, 0x3e, 0x6d, 0x21, 0x46, 0xd1, 0x85, 0x13, 0x77, 0x3e, 0x3d, 0x8a, 0x1c, 0x03, 0x0c, 0xc3, 0xa4, 0x0b, 0x96, 0x43, 0x88, 0x93,
0x3f, 0x84, 0x75, 0x46, 0xaf, 0x04, 0x50, 0x95, 0x63, 0x19, 0x73, 0xb0, 0xc2, 0xba, 0x02, 0xa7, 0x2a, 0x03, 0xb7, 0x4a, 0xac, 0xb8, 0xf3, 0x69, 0x0b, 0x31, 0x8a, 0xfe, 0x21, 0xac, 0x33, 0x7a,
0xf2, 0xdc, 0x82, 0x32, 0x6f, 0x15, 0x5b, 0x12, 0x05, 0x6e, 0xb3, 0xc0, 0xa6, 0x50, 0x3f, 0x58, 0x25, 0x80, 0xaa, 0x1c, 0xcb, 0x98, 0x83, 0x15, 0xd6, 0x15, 0x38, 0x95, 0xe7, 0x16, 0x94, 0x79,
0x08, 0x50, 0xe0, 0x86, 0x80, 0x64, 0x80, 0x82, 0x16, 0xe2, 0x50, 0x4a, 0x86, 0x38, 0x3c, 0x84, 0xab, 0xd8, 0x92, 0x28, 0x70, 0x9b, 0x05, 0x36, 0x85, 0xfa, 0xc1, 0x42, 0xe8, 0x02, 0x37, 0x04,
0xf5, 0x13, 0xb6, 0x46, 0xcf, 0xa9, 0x3d, 0xa6, 0xbe, 0x15, 0xad, 0x7c, 0xae, 0x6e, 0xae, 0x32, 0x24, 0x43, 0x17, 0xb4, 0xe0, 0x87, 0x52, 0x32, 0xf8, 0xe1, 0x21, 0xac, 0x9f, 0xb0, 0x35, 0x7a,
0xe4, 0x3e, 0xe2, 0xd4, 0x46, 0x61, 0x92, 0x20, 0x63, 0x3c, 0x74, 0x6c, 0x85, 0x9e, 0x85, 0x02, 0x4e, 0xed, 0x31, 0xf5, 0xad, 0x68, 0xe5, 0x73, 0x75, 0x73, 0x95, 0x21, 0xf7, 0x11, 0xa7, 0x36,
0x22, 0xb2, 0xb0, 0x92, 0x59, 0xe3, 0xe0, 0xa1, 0xd7, 0x66, 0xc0, 0x38, 0xdd, 0x99, 0x6f, 0xcf, 0x0a, 0x93, 0x04, 0x19, 0xe3, 0xa1, 0x63, 0x2b, 0xf4, 0x2c, 0x14, 0x10, 0x91, 0x85, 0x95, 0xcc,
0xce, 0x85, 0x32, 0xa8, 0xe8, 0x9e, 0x30, 0x20, 0x79, 0x0d, 0x8a, 0x6c, 0x4f, 0xb8, 0x94, 0xfb, 0x1a, 0x07, 0x0f, 0xbd, 0x36, 0x03, 0xc6, 0xe9, 0xce, 0x7c, 0x7b, 0x76, 0x2e, 0x94, 0x41, 0x45,
0x7b, 0xb9, 0x9a, 0x25, 0x41, 0xe4, 0x2d, 0x58, 0xc2, 0x3a, 0x82, 0x66, 0x03, 0x37, 0x44, 0x35, 0xf7, 0x84, 0x01, 0xc9, 0x6b, 0x50, 0x64, 0x7b, 0xc2, 0xa5, 0xdc, 0x13, 0xcc, 0xd5, 0x2c, 0x09,
0x3a, 0x2a, 0x1c, 0xd7, 0x14, 0x38, 0x26, 0x6e, 0xcf, 0x7d, 0x87, 0xf3, 0xb1, 0xb2, 0x89, 0xbf, 0x22, 0x6f, 0xc1, 0x12, 0xd6, 0x11, 0x34, 0x1b, 0xb8, 0x21, 0xaa, 0xd1, 0x51, 0xe1, 0xb8, 0xa6,
0xc9, 0x0f, 0x35, 0xa6, 0xb8, 0x8a, 0x79, 0xdf, 0x12, 0x79, 0x13, 0x4b, 0xf1, 0x3a, 0xfe, 0xf8, 0xc0, 0x31, 0x71, 0x7b, 0xee, 0x3b, 0x9c, 0x8f, 0x95, 0x4d, 0xfc, 0x4d, 0x7e, 0xa8, 0x31, 0xc5,
0xad, 0x72, 0xab, 0x1f, 0xe5, 0x4b, 0x95, 0x46, 0xd5, 0x68, 0x62, 0x5c, 0x86, 0x49, 0x47, 0xde, 0x55, 0xcc, 0xfb, 0x96, 0xc8, 0x9b, 0x58, 0x8a, 0xd7, 0xf1, 0xc7, 0x6f, 0x95, 0x5b, 0xfd, 0x28,
0x05, 0xf5, 0xaf, 0x62, 0x7b, 0x24, 0x03, 0x9b, 0x0b, 0xa8, 0xc8, 0xbd, 0xeb, 0x0b, 0xb8, 0x35, 0x5f, 0xaa, 0x34, 0xaa, 0x46, 0x13, 0x23, 0x36, 0x4c, 0x3a, 0xf2, 0x2e, 0xa8, 0x7f, 0x15, 0xdb,
0xf5, 0xc6, 0x52, 0x28, 0xa8, 0x4a, 0xe0, 0xa1, 0x37, 0x66, 0xc2, 0xcb, 0x8a, 0x22, 0x3a, 0x75, 0x23, 0x19, 0xd8, 0x5c, 0x40, 0x45, 0x8e, 0x5f, 0x5f, 0xc0, 0xad, 0xa9, 0x37, 0x96, 0x42, 0x41,
0x5c, 0x27, 0x38, 0xa7, 0x63, 0x21, 0x1b, 0x34, 0x24, 0x62, 0x4f, 0xc0, 0x99, 0x04, 0x3e, 0xf3, 0x55, 0x02, 0x0f, 0xbd, 0x31, 0x13, 0x5e, 0x56, 0x14, 0xd1, 0xa9, 0xe3, 0x3a, 0xc1, 0x39, 0x1d,
0xbd, 0x33, 0x75, 0x54, 0x66, 0x4c, 0x95, 0x36, 0x3e, 0x81, 0x02, 0x9f, 0x41, 0xb6, 0x51, 0x70, 0x0b, 0xd9, 0xa0, 0x21, 0x11, 0x7b, 0x02, 0xce, 0x24, 0xf0, 0x99, 0xef, 0x9d, 0xa9, 0xa3, 0x32,
0x7e, 0x33, 0x62, 0xa3, 0x20, 0xb4, 0x09, 0x45, 0x97, 0x86, 0xcf, 0x3d, 0xff, 0x99, 0xf4, 0x15, 0x63, 0xaa, 0xb4, 0xf1, 0x09, 0x14, 0xf8, 0x0c, 0xb2, 0x8d, 0x82, 0xf3, 0x9b, 0x11, 0x1b, 0x05,
0x89, 0xa4, 0xf1, 0x13, 0x34, 0x5c, 0xaa, 0x00, 0x1b, 0x6e, 0x7c, 0x60, 0x4b, 0x98, 0x2f, 0xc1, 0xa1, 0x4d, 0x28, 0xba, 0x34, 0x7c, 0xee, 0xf9, 0xcf, 0xa4, 0x17, 0x49, 0x24, 0x8d, 0x9f, 0xa0,
0xe0, 0xdc, 0x16, 0xb6, 0xd4, 0x12, 0x02, 0x06, 0xe7, 0xf6, 0xc2, 0x12, 0xce, 0x2e, 0xc6, 0xd8, 0x49, 0x53, 0x85, 0xde, 0x70, 0xe3, 0x03, 0x5b, 0xc2, 0x7c, 0x09, 0x06, 0xe7, 0xb6, 0xb0, 0xb2,
0xbc, 0x05, 0x75, 0x19, 0xd2, 0x13, 0x58, 0x13, 0x7a, 0x1a, 0x8a, 0x2d, 0x59, 0x15, 0xf1, 0x3c, 0x96, 0x10, 0x30, 0x38, 0xb7, 0x17, 0x96, 0x70, 0x76, 0x31, 0xfa, 0xe6, 0x2d, 0xa8, 0xcb, 0x60,
0xc1, 0x01, 0x3d, 0x0d, 0x8d, 0x43, 0x58, 0x11, 0x9b, 0xa6, 0x3f, 0xa3, 0xb2, 0xea, 0x4f, 0xd3, 0x9f, 0xc0, 0x9a, 0xd0, 0xd3, 0x50, 0x6c, 0xc9, 0xaa, 0x88, 0xf4, 0x09, 0x0e, 0xe8, 0x69, 0x68,
0xb4, 0xa2, 0xca, 0xc3, 0xd5, 0xb8, 0xb8, 0xc1, 0x05, 0xbb, 0x98, 0xaa, 0x64, 0xfc, 0x38, 0xb2, 0x1c, 0xc2, 0x8a, 0xd8, 0x34, 0xfd, 0x19, 0x95, 0x55, 0x7f, 0x9a, 0xa6, 0x15, 0x55, 0x1e, 0xae,
0x20, 0x32, 0x61, 0x44, 0x94, 0x27, 0x74, 0x13, 0xe9, 0x62, 0x93, 0x9e, 0x6a, 0xa5, 0x01, 0x39, 0xc6, 0xc5, 0x0d, 0x2e, 0xd8, 0xc5, 0x54, 0x25, 0xe3, 0xc7, 0x91, 0x05, 0x91, 0x09, 0x23, 0xa2,
0x63, 0x36, 0x3a, 0xc1, 0x7c, 0x34, 0x92, 0xa1, 0x56, 0x25, 0x53, 0x26, 0x8d, 0x7f, 0x9b, 0x81, 0x3c, 0xa1, 0x9b, 0x48, 0xe7, 0x9b, 0xf4, 0x61, 0x2b, 0x0d, 0xc8, 0x19, 0xb3, 0xd1, 0x09, 0xe6,
0x55, 0x2c, 0x4c, 0x6a, 0x75, 0xe2, 0xa4, 0xf8, 0xa9, 0x1b, 0xc9, 0xe6, 0x47, 0x97, 0x00, 0x79, 0xa3, 0x91, 0x0c, 0xc2, 0x2a, 0x99, 0x32, 0x69, 0xfc, 0xdb, 0x0c, 0xac, 0x62, 0x61, 0x52, 0xab,
0xe2, 0x9b, 0xbb, 0x2f, 0xf2, 0x0b, 0xee, 0x8b, 0xef, 0x42, 0x63, 0x4c, 0x27, 0x0e, 0x2e, 0x25, 0x13, 0x27, 0xc5, 0x4f, 0xdd, 0x48, 0x36, 0x3f, 0xba, 0x04, 0xc8, 0x13, 0xdf, 0xdc, 0xb1, 0x91,
0x29, 0x50, 0x71, 0x09, 0x76, 0x59, 0xc2, 0x85, 0x95, 0xc1, 0xf8, 0x2b, 0x19, 0x58, 0xe1, 0xf2, 0x5f, 0x70, 0x6c, 0x7c, 0x17, 0x1a, 0x63, 0x3a, 0x71, 0x70, 0x29, 0x49, 0x81, 0x8a, 0x4b, 0xb0,
0x1a, 0xda, 0x6d, 0xc4, 0x40, 0x3d, 0x96, 0x06, 0x0a, 0xc1, 0x4e, 0x45, 0x9f, 0x22, 0x39, 0x06, 0xcb, 0x12, 0x2e, 0xac, 0x0c, 0xc6, 0x5f, 0xc9, 0xc0, 0x0a, 0x97, 0xd7, 0xd0, 0x6e, 0x23, 0x06,
0xa1, 0x9c, 0x78, 0xff, 0x86, 0x30, 0x5c, 0x08, 0x28, 0xf9, 0x3e, 0x6a, 0xa2, 0xae, 0x85, 0x40, 0xea, 0xb1, 0x34, 0x50, 0x08, 0x76, 0x2a, 0xfa, 0x14, 0xc9, 0x31, 0x08, 0xe5, 0xc4, 0xfb, 0x37,
0x21, 0x87, 0xdf, 0x4c, 0x91, 0x10, 0x55, 0x76, 0xa6, 0xa6, 0xba, 0x08, 0xda, 0x29, 0xc1, 0x12, 0x84, 0xe1, 0x42, 0x40, 0xc9, 0xf7, 0x51, 0x13, 0x75, 0x2d, 0x04, 0x0a, 0x39, 0xfc, 0x66, 0x8a,
0xb7, 0x82, 0x19, 0x7b, 0x50, 0x8b, 0x55, 0x13, 0xf3, 0xa6, 0x54, 0xb9, 0x37, 0x65, 0xc1, 0xbb, 0x84, 0xa8, 0xb2, 0x33, 0x35, 0xd5, 0x45, 0xd0, 0x4e, 0x09, 0x96, 0xb8, 0x15, 0xcc, 0xd8, 0x83,
0x99, 0x5d, 0xf4, 0x6e, 0x5e, 0xc1, 0xaa, 0x49, 0xed, 0xf1, 0xd5, 0x9e, 0xe7, 0x1f, 0x05, 0x27, 0x5a, 0xac, 0x9a, 0x98, 0x9f, 0xa5, 0xca, 0xfd, 0x2c, 0x0b, 0x7e, 0xcf, 0xec, 0xa2, 0xdf, 0xf3,
0xe1, 0x1e, 0x17, 0x82, 0xd9, 0x19, 0xa4, 0x5c, 0xf6, 0x31, 0x97, 0x85, 0xf4, 0xdc, 0x4a, 0x33, 0x0a, 0x56, 0x4d, 0x6a, 0x8f, 0xaf, 0xf6, 0x3c, 0xff, 0x28, 0x38, 0x09, 0xf7, 0xb8, 0x10, 0xcc,
0xcc, 0x77, 0xa0, 0x1e, 0xf9, 0xf6, 0x35, 0xb3, 0x77, 0x4d, 0xb9, 0xf7, 0x51, 0x76, 0x22, 0x90, 0xce, 0x20, 0xe5, 0xcc, 0x8f, 0x39, 0x33, 0xa4, 0x4f, 0x57, 0x9a, 0x61, 0xbe, 0x03, 0xf5, 0xc8,
0x9f, 0x05, 0x27, 0xa1, 0x30, 0x7c, 0xe3, 0x6f, 0xe3, 0x7f, 0xe5, 0x81, 0xb0, 0xd5, 0x9c, 0x58, 0xeb, 0xaf, 0x99, 0xbd, 0x6b, 0xca, 0xf1, 0x8f, 0xb2, 0x13, 0x81, 0xfc, 0x2c, 0x38, 0x09, 0x85,
0x30, 0x89, 0xa8, 0x84, 0xec, 0x42, 0x54, 0xc2, 0x03, 0x20, 0x1a, 0x81, 0x0c, 0x96, 0xc8, 0xa9, 0xe1, 0x1b, 0x7f, 0x1b, 0xff, 0x2b, 0x0f, 0x84, 0xad, 0xe6, 0xc4, 0x82, 0x49, 0xc4, 0x2b, 0x64,
0x60, 0x89, 0x46, 0x44, 0x2b, 0x62, 0x25, 0x1e, 0xc0, 0x9a, 0xd0, 0x28, 0xe2, 0x4d, 0xe5, 0x4b, 0x17, 0xe2, 0x15, 0x1e, 0x00, 0xd1, 0x08, 0x64, 0x18, 0x45, 0x4e, 0x85, 0x51, 0x34, 0x22, 0x5a,
0x83, 0x70, 0xd5, 0x22, 0xd6, 0x5e, 0x19, 0x91, 0x20, 0x2d, 0xd5, 0x39, 0x1e, 0x91, 0x20, 0x0d, 0x11, 0x45, 0xf1, 0x00, 0xd6, 0x84, 0x46, 0x11, 0x6f, 0x2a, 0x5f, 0x1a, 0x84, 0xab, 0x16, 0xb1,
0x4a, 0xda, 0x02, 0x5c, 0x7a, 0xe9, 0x02, 0x2c, 0x2e, 0x2c, 0x40, 0xcd, 0xb8, 0x58, 0x8a, 0x1b, 0xf6, 0xca, 0x58, 0x05, 0x69, 0xa9, 0xce, 0xf1, 0x58, 0x05, 0x69, 0x50, 0xd2, 0x16, 0xe0, 0xd2,
0x17, 0x17, 0xcc, 0xe4, 0x5c, 0x7c, 0x8e, 0x99, 0xc9, 0xef, 0x41, 0x43, 0x1a, 0x9a, 0x94, 0x09, 0x4b, 0x17, 0x60, 0x71, 0x61, 0x01, 0x6a, 0xc6, 0xc5, 0x52, 0xdc, 0xb8, 0xb8, 0x60, 0x26, 0xe7,
0x93, 0x87, 0x12, 0x09, 0x23, 0x72, 0x5b, 0x1a, 0x31, 0x63, 0x7e, 0xb3, 0x4a, 0xc2, 0x6f, 0xf6, 0xe2, 0x73, 0xcc, 0x4c, 0x7e, 0x0f, 0x1a, 0xd2, 0xd0, 0xa4, 0x4c, 0x98, 0x3c, 0xc8, 0x48, 0x18,
0x2e, 0xac, 0x04, 0x6c, 0xfd, 0x5a, 0x73, 0x57, 0xc4, 0x13, 0xd2, 0x31, 0xea, 0xe3, 0x25, 0xb3, 0x91, 0xdb, 0xd2, 0x88, 0x19, 0xf3, 0xa8, 0x55, 0x12, 0x1e, 0xb5, 0x77, 0x61, 0x25, 0x60, 0xeb,
0x81, 0x88, 0xe3, 0x08, 0xbe, 0x68, 0x92, 0xab, 0xa5, 0x98, 0xe4, 0x1e, 0x45, 0x2e, 0xfa, 0xe0, 0xd7, 0x9a, 0xbb, 0x22, 0xd2, 0x90, 0x8e, 0x51, 0x1f, 0x2f, 0x99, 0x0d, 0x44, 0x1c, 0x47, 0xf0,
0xdc, 0x99, 0xa2, 0xe0, 0x13, 0xc5, 0xc8, 0x89, 0x01, 0x1e, 0x9c, 0x3b, 0x53, 0x53, 0xc6, 0x83, 0x45, 0x93, 0x5c, 0x2d, 0xc5, 0x24, 0xf7, 0x28, 0x72, 0xde, 0x07, 0xe7, 0xce, 0x14, 0x05, 0x9f,
0xb0, 0x04, 0x69, 0xc3, 0x1d, 0xd1, 0x9f, 0x94, 0x50, 0x0e, 0x3e, 0x0a, 0xcb, 0x28, 0xa9, 0x6e, 0x28, 0x7a, 0x4e, 0x0c, 0xf0, 0xe0, 0xdc, 0x99, 0x9a, 0x32, 0x52, 0x84, 0x25, 0x48, 0x1b, 0xee,
0x71, 0xb2, 0xc3, 0x44, 0x54, 0x47, 0x62, 0x50, 0x58, 0x21, 0xdc, 0x0a, 0xdc, 0xd0, 0x07, 0xe5, 0x88, 0xfe, 0xa4, 0x04, 0x79, 0xf0, 0x51, 0x58, 0x46, 0x49, 0x75, 0x8b, 0x93, 0x1d, 0x26, 0xe2,
0xd0, 0xbe, 0xe4, 0x7e, 0x83, 0xff, 0x99, 0x81, 0x06, 0x5b, 0x76, 0xb1, 0x1d, 0xfd, 0x19, 0x20, 0x3d, 0x12, 0x83, 0xc2, 0x0a, 0xe1, 0x56, 0xe0, 0x86, 0x3e, 0x28, 0x87, 0xf6, 0x25, 0xf7, 0x1b,
0xef, 0x79, 0xc5, 0x0d, 0x5d, 0x61, 0xb4, 0x72, 0x3f, 0x7f, 0x02, 0xb8, 0x41, 0x2d, 0x6f, 0x46, 0xfc, 0xcf, 0x0c, 0x34, 0xd8, 0xb2, 0x8b, 0xed, 0xe8, 0xcf, 0x00, 0x79, 0xcf, 0x2b, 0x6e, 0xe8,
0x5d, 0xb1, 0x9d, 0x9b, 0xf1, 0xed, 0x1c, 0xb1, 0xec, 0xfd, 0x1b, 0x5c, 0xe1, 0x63, 0x10, 0xf2, 0x0a, 0xa3, 0x95, 0xfb, 0xf9, 0x13, 0xc0, 0x0d, 0x6a, 0x79, 0x33, 0xea, 0x8a, 0xed, 0xdc, 0x8c,
0x19, 0x94, 0xd9, 0x3e, 0xc0, 0x45, 0x29, 0x22, 0x4c, 0xb7, 0x94, 0x12, 0xbf, 0xb0, 0x25, 0x59, 0x6f, 0xe7, 0x88, 0x65, 0xef, 0xdf, 0xe0, 0x0a, 0x1f, 0x83, 0x90, 0xcf, 0xa0, 0xcc, 0xf6, 0x01,
0xd6, 0x99, 0x48, 0xa6, 0x05, 0x71, 0xe4, 0x53, 0x82, 0x38, 0x34, 0x7e, 0xb1, 0x0f, 0xf0, 0x94, 0x2e, 0x4a, 0x11, 0x7b, 0xba, 0xa5, 0x94, 0xf8, 0x85, 0x2d, 0xc9, 0xb2, 0xce, 0x44, 0x32, 0x2d,
0x5e, 0x1d, 0x78, 0x23, 0x34, 0xa7, 0xdc, 0x06, 0x60, 0x5b, 0xe7, 0xd4, 0x9e, 0x3a, 0xc2, 0x90, 0xbc, 0x23, 0x9f, 0x12, 0xde, 0xa1, 0xf1, 0x8b, 0x7d, 0x80, 0xa7, 0xf4, 0xea, 0xc0, 0x1b, 0xa1,
0x58, 0x30, 0xcb, 0xcf, 0xe8, 0xd5, 0x1e, 0x02, 0xd8, 0xba, 0x61, 0xe8, 0x88, 0x69, 0x14, 0xcc, 0x39, 0xe5, 0x36, 0x00, 0xdb, 0x3a, 0xa7, 0xf6, 0xd4, 0x11, 0x86, 0xc4, 0x82, 0x59, 0x7e, 0x46,
0xd2, 0x33, 0x7a, 0xc5, 0x39, 0x86, 0x05, 0xb5, 0xa7, 0xf4, 0x6a, 0x97, 0x72, 0xc1, 0xdc, 0xf3, 0xaf, 0xf6, 0x10, 0xc0, 0xd6, 0x0d, 0x43, 0x47, 0x4c, 0xa3, 0x60, 0x96, 0x9e, 0xd1, 0x2b, 0xce,
0xd9, 0x9a, 0xf5, 0xed, 0xe7, 0x4c, 0x12, 0x8f, 0x05, 0x60, 0x54, 0x7c, 0xfb, 0xf9, 0x53, 0x7a, 0x31, 0x2c, 0xa8, 0x3d, 0xa5, 0x57, 0xbb, 0x94, 0x0b, 0xe6, 0x9e, 0xcf, 0xd6, 0xac, 0x6f, 0x3f,
0x25, 0x83, 0x41, 0x8a, 0x0c, 0x3f, 0xf1, 0x46, 0x42, 0x94, 0x90, 0xb6, 0x9b, 0xa8, 0x51, 0xe6, 0x67, 0x92, 0x78, 0x2c, 0x34, 0xa3, 0xe2, 0xdb, 0xcf, 0x9f, 0xd2, 0x2b, 0x19, 0x26, 0x52, 0x64,
0xd2, 0x33, 0xfc, 0x6d, 0xfc, 0x49, 0x06, 0x6a, 0xac, 0xfd, 0x78, 0x0a, 0xe0, 0x0a, 0x11, 0x11, 0xf8, 0x89, 0x37, 0x12, 0xa2, 0x84, 0xb4, 0xdd, 0x44, 0x8d, 0x32, 0x97, 0x9e, 0xe1, 0x6f, 0xe3,
0x89, 0x99, 0x28, 0x22, 0xf1, 0xa1, 0x60, 0xa2, 0xfc, 0x48, 0xc9, 0x5e, 0x7f, 0xa4, 0xe0, 0xdc, 0x4f, 0x32, 0x50, 0x63, 0xed, 0xc7, 0x53, 0x00, 0x57, 0x88, 0x88, 0x55, 0xcc, 0x44, 0xb1, 0x8a,
0xf0, 0xf3, 0xe4, 0x03, 0x28, 0x73, 0x2e, 0xc0, 0xd8, 0x4a, 0x2e, 0x36, 0xc1, 0xb1, 0x0e, 0x99, 0x0f, 0x05, 0x13, 0xe5, 0x47, 0x4a, 0xf6, 0xfa, 0x23, 0x05, 0xe7, 0x86, 0x9f, 0x27, 0x1f, 0x40,
0x25, 0x24, 0x7b, 0xca, 0x03, 0xa0, 0x34, 0x33, 0x39, 0x1f, 0xe2, 0xb2, 0xaf, 0x8c, 0xe3, 0x29, 0x99, 0x73, 0x01, 0xc6, 0x56, 0x72, 0xb1, 0x09, 0x8e, 0x75, 0xc8, 0x2c, 0x21, 0xd9, 0x53, 0x1e,
0xd3, 0x50, 0xb8, 0x26, 0x00, 0x4a, 0xb7, 0x41, 0x2f, 0x25, 0x6d, 0xd0, 0x86, 0x0b, 0x25, 0x36, 0x1a, 0xa5, 0x99, 0xc9, 0xf9, 0x10, 0x97, 0x7d, 0x65, 0x1c, 0x4f, 0x99, 0x86, 0xc2, 0x35, 0xa1,
0xd5, 0xd8, 0xd9, 0x94, 0x42, 0x33, 0x69, 0x85, 0x32, 0xc1, 0xc3, 0x66, 0x67, 0x10, 0xe3, 0xab, 0x51, 0xba, 0x0d, 0x7a, 0x29, 0x69, 0x83, 0x36, 0x5c, 0x28, 0xb1, 0xa9, 0xc6, 0xce, 0xa6, 0x14,
0x59, 0x21, 0x78, 0xd8, 0x01, 0x65, 0x05, 0xb1, 0x86, 0xbb, 0x9e, 0x85, 0x46, 0x5d, 0x61, 0xee, 0x9a, 0x49, 0x2b, 0x94, 0x09, 0x1e, 0x36, 0x3b, 0x83, 0x18, 0x5f, 0xcd, 0x0a, 0xc1, 0xc3, 0x0e,
0x2c, 0x99, 0x65, 0xd7, 0x3b, 0xe2, 0x00, 0xe3, 0xcf, 0x66, 0xa0, 0xa2, 0xed, 0x47, 0xb4, 0xf2, 0x28, 0x2b, 0x88, 0x35, 0xdc, 0xf5, 0x2c, 0x34, 0xea, 0x0a, 0x73, 0x67, 0xc9, 0x2c, 0xbb, 0xde,
0xab, 0xe1, 0xe4, 0x9b, 0x37, 0xbe, 0x03, 0x62, 0xf3, 0xb1, 0x7f, 0xc3, 0xac, 0x8d, 0x62, 0x13, 0x11, 0x07, 0x18, 0x7f, 0x36, 0x03, 0x15, 0x6d, 0x3f, 0xa2, 0x95, 0x5f, 0x0d, 0x27, 0xdf, 0xbc,
0xb4, 0x2d, 0x96, 0x32, 0xe6, 0xcc, 0xc6, 0x4c, 0x4b, 0xb2, 0x5f, 0x72, 0xfd, 0xb2, 0xdf, 0x3b, 0xf1, 0x1d, 0x10, 0x9b, 0x8f, 0xfd, 0x1b, 0x66, 0x6d, 0x14, 0x9b, 0xa0, 0x6d, 0xb1, 0x94, 0x31,
0x4b, 0x90, 0x67, 0xa4, 0xc6, 0x63, 0x58, 0xd1, 0x9a, 0xc1, 0x4d, 0x2f, 0xaf, 0x3a, 0x00, 0xc6, 0x67, 0x36, 0x66, 0x5a, 0x92, 0xfd, 0x92, 0xeb, 0x97, 0xfd, 0xde, 0x59, 0x82, 0x3c, 0x23, 0x35,
0x2f, 0xab, 0xcc, 0xac, 0x0e, 0xee, 0x9a, 0x96, 0xb1, 0x66, 0x74, 0xcc, 0xc7, 0x45, 0xc4, 0xb4, 0x1e, 0xc3, 0x8a, 0xd6, 0x0c, 0x6e, 0x7a, 0x79, 0xd5, 0x01, 0x30, 0x7e, 0x59, 0x65, 0x66, 0x75,
0x71, 0x10, 0x8e, 0xcc, 0xab, 0xc6, 0x3f, 0xfd, 0x99, 0x0c, 0xac, 0x6a, 0xc5, 0xef, 0x39, 0xae, 0x70, 0xa7, 0xb5, 0x8c, 0x42, 0xa3, 0x63, 0x3e, 0x2e, 0x22, 0xda, 0x8d, 0x83, 0x70, 0x64, 0x5e,
0x3d, 0x71, 0x7e, 0x82, 0xf2, 0x47, 0xe0, 0x9c, 0xb9, 0x89, 0x0a, 0x38, 0xe8, 0x9b, 0x54, 0xc0, 0x35, 0x32, 0xea, 0xcf, 0x64, 0x60, 0x55, 0x2b, 0x7e, 0xcf, 0x71, 0xed, 0x89, 0xf3, 0x13, 0x94,
0x8e, 0x09, 0x1e, 0xb9, 0xca, 0xa3, 0x9f, 0xc5, 0xd1, 0x08, 0x08, 0x33, 0xed, 0xe7, 0xc3, 0x4b, 0x3f, 0x02, 0xe7, 0xcc, 0x4d, 0x54, 0xc0, 0x41, 0xdf, 0xa4, 0x02, 0x76, 0x4c, 0xf0, 0x98, 0x56,
0xe3, 0xaf, 0x66, 0x61, 0x4d, 0x34, 0x01, 0x03, 0x8c, 0x1d, 0x26, 0x76, 0x1e, 0x06, 0x67, 0xe4, 0x1e, 0x17, 0x2d, 0x8e, 0x46, 0x40, 0x98, 0x69, 0x3f, 0x1f, 0x5e, 0x1a, 0x7f, 0x35, 0x0b, 0x6b,
0x33, 0xa8, 0xb1, 0xe1, 0xb3, 0x7c, 0x7a, 0xe6, 0x04, 0x21, 0x95, 0x5e, 0xf3, 0x14, 0x4e, 0xcb, 0xa2, 0x09, 0x18, 0x7a, 0xec, 0x30, 0xb1, 0xf3, 0x30, 0x38, 0x23, 0x9f, 0x41, 0x8d, 0x0d, 0x9f,
0xa4, 0x0f, 0x46, 0x6a, 0x0a, 0x4a, 0xf2, 0x18, 0x2a, 0x98, 0x95, 0x5b, 0xbf, 0xc4, 0x5c, 0x35, 0xe5, 0xd3, 0x33, 0x27, 0x08, 0xa9, 0xf4, 0xa7, 0xa7, 0x70, 0x5a, 0x26, 0x7d, 0x30, 0x52, 0x53,
0x17, 0x33, 0xf2, 0xb9, 0xd8, 0xbf, 0x61, 0x42, 0x10, 0xcd, 0xcc, 0x63, 0xa8, 0xe0, 0x34, 0x5f, 0x50, 0x92, 0xc7, 0x50, 0xc1, 0xac, 0xdc, 0xfa, 0x25, 0xe6, 0xaa, 0xb9, 0x98, 0x91, 0xcf, 0xc5,
0xe0, 0x58, 0x27, 0x98, 0xdd, 0xc2, 0x5c, 0xb0, 0xcc, 0xb3, 0x68, 0x66, 0x5a, 0x50, 0xe3, 0xec, 0xfe, 0x0d, 0x13, 0x82, 0x68, 0x66, 0x1e, 0x43, 0x05, 0xa7, 0xf9, 0x02, 0xc7, 0x3a, 0xc1, 0xec,
0x4e, 0x8c, 0xa4, 0x08, 0x5c, 0xdc, 0x5a, 0xcc, 0x2e, 0xc7, 0x9a, 0x35, 0x7e, 0xa6, 0xa5, 0x77, 0x16, 0xe6, 0x82, 0x65, 0x9e, 0x45, 0x33, 0xd3, 0x82, 0x1a, 0x67, 0x77, 0x62, 0x24, 0x45, 0x48,
0xca, 0x50, 0x0c, 0x7d, 0xe7, 0xec, 0x8c, 0xfa, 0xc6, 0x86, 0x1a, 0x1a, 0xc6, 0xc7, 0xe9, 0x20, 0xe3, 0xd6, 0x62, 0x76, 0x39, 0xd6, 0xac, 0xf1, 0x33, 0x2d, 0xbd, 0x53, 0x86, 0x62, 0xe8, 0x3b,
0xa4, 0x33, 0xa6, 0x4f, 0x18, 0xff, 0x22, 0x03, 0x15, 0xc1, 0x99, 0x7f, 0x6a, 0x57, 0xfd, 0x56, 0x67, 0x67, 0xd4, 0x37, 0x36, 0xd4, 0xd0, 0x30, 0x3e, 0x4e, 0x07, 0x21, 0x9d, 0x31, 0x7d, 0xc2,
0xc2, 0x4e, 0x5a, 0xd6, 0xcc, 0xa2, 0xef, 0xc0, 0xf2, 0x94, 0x29, 0x3f, 0x4c, 0x39, 0x8f, 0xf9, 0xf8, 0x17, 0x19, 0xa8, 0x08, 0xce, 0xfc, 0x53, 0xbb, 0xea, 0xb7, 0x12, 0x76, 0xd2, 0xb2, 0x66,
0xe9, 0xeb, 0x12, 0x2c, 0xe4, 0xfa, 0x6d, 0x58, 0x45, 0x31, 0x3f, 0xb0, 0x42, 0x67, 0x62, 0x49, 0x16, 0x7d, 0x07, 0x96, 0xa7, 0x4c, 0xf9, 0x61, 0xca, 0x79, 0xcc, 0x4f, 0x5f, 0x97, 0x60, 0x21,
0xa4, 0x88, 0xb2, 0x5f, 0xe1, 0xa8, 0xa1, 0x33, 0x39, 0x14, 0x08, 0x26, 0xed, 0x06, 0xa1, 0x7d, 0xd7, 0x6f, 0xc3, 0x2a, 0x8a, 0xf9, 0x81, 0x15, 0x3a, 0x13, 0x4b, 0x22, 0x45, 0xfc, 0xfd, 0x0a,
0x46, 0x05, 0x77, 0xe0, 0x09, 0xa6, 0x50, 0x25, 0xf4, 0x72, 0xa9, 0x50, 0xfd, 0x9f, 0x15, 0xd8, 0x47, 0x0d, 0x9d, 0xc9, 0xa1, 0x40, 0x30, 0x69, 0x37, 0x08, 0xed, 0x33, 0x2a, 0xb8, 0x03, 0x4f,
0x5c, 0x40, 0x09, 0x85, 0x4a, 0x39, 0x66, 0x27, 0xce, 0xf4, 0xc4, 0x53, 0x8e, 0x81, 0x8c, 0xe6, 0x30, 0x85, 0x2a, 0xa1, 0x97, 0x4b, 0x85, 0xea, 0xff, 0xac, 0xc0, 0xe6, 0x02, 0x4a, 0x28, 0x54,
0x98, 0x3d, 0x60, 0x18, 0xe9, 0x18, 0xa0, 0xb0, 0x2e, 0x97, 0x2c, 0x5a, 0xf6, 0x95, 0xea, 0x9e, 0xca, 0x31, 0x3b, 0x71, 0xa6, 0x27, 0x9e, 0x72, 0x0c, 0x64, 0x34, 0xc7, 0xec, 0x01, 0xc3, 0x48,
0x45, 0xc5, 0xf2, 0x83, 0xf8, 0x31, 0x98, 0xac, 0x4e, 0xc2, 0x75, 0x59, 0x6e, 0x75, 0xb6, 0x00, 0xc7, 0x00, 0x85, 0x75, 0xb9, 0x64, 0xd1, 0xb2, 0xaf, 0x54, 0xf7, 0x2c, 0x2a, 0x96, 0x1f, 0xc4,
0x0b, 0xc8, 0xff, 0x0f, 0x4d, 0xb5, 0x33, 0x84, 0x9e, 0xa1, 0xd9, 0x21, 0x58, 0x4d, 0xef, 0xbd, 0x8f, 0xc1, 0x64, 0x75, 0x12, 0xae, 0xcb, 0x72, 0xab, 0xb3, 0x05, 0x58, 0x40, 0xfe, 0x7f, 0x68,
0xa4, 0xa6, 0x98, 0xc9, 0x15, 0x85, 0xbd, 0x0d, 0xb9, 0xa9, 0x78, 0x81, 0xaa, 0xae, 0x0b, 0x78, 0xaa, 0x9d, 0x21, 0xf4, 0x0c, 0xcd, 0x0e, 0xc1, 0x6a, 0x7a, 0xef, 0x25, 0x35, 0xc5, 0x4c, 0xae,
0x5d, 0xd6, 0x85, 0x7a, 0xc3, 0x62, 0x8d, 0xf9, 0x57, 0xea, 0x1b, 0x9a, 0x93, 0x63, 0xd5, 0x9a, 0x28, 0xec, 0x6d, 0xc8, 0x4d, 0xc5, 0x0b, 0x54, 0x75, 0x5d, 0xc0, 0xeb, 0xb2, 0x2e, 0xd4, 0x1b,
0xb7, 0x44, 0xc1, 0x0a, 0xa5, 0xd7, 0x7b, 0x0e, 0x1b, 0xcf, 0x6d, 0x27, 0x94, 0x7d, 0xd4, 0xcc, 0x16, 0x6b, 0xcc, 0xbf, 0x52, 0xdf, 0xd0, 0x9c, 0x1c, 0xab, 0xd6, 0xbc, 0x25, 0x0a, 0x56, 0x28,
0x20, 0x05, 0xac, 0xef, 0xe1, 0x4b, 0xea, 0xfb, 0x92, 0x67, 0x8e, 0x69, 0x52, 0x6b, 0xcf, 0x17, 0xbd, 0xde, 0x73, 0xd8, 0x78, 0x6e, 0x3b, 0xa1, 0xec, 0xa3, 0x66, 0x06, 0x29, 0x60, 0x7d, 0x0f,
0x81, 0xc1, 0xd6, 0xdf, 0xce, 0x41, 0x3d, 0x5e, 0x0a, 0x63, 0x3d, 0xe2, 0xb8, 0x92, 0x02, 0xb2, 0x5f, 0x52, 0xdf, 0x97, 0x3c, 0x73, 0x4c, 0x93, 0x5a, 0x7b, 0xbe, 0x08, 0x0c, 0xb6, 0xfe, 0x76,
0x90, 0xda, 0x85, 0xd3, 0xaa, 0xc7, 0x05, 0xe3, 0x45, 0x77, 0x5a, 0x36, 0xc5, 0x9d, 0xa6, 0x7b, 0x0e, 0xea, 0xf1, 0x52, 0x18, 0xeb, 0x11, 0xc7, 0x95, 0x14, 0x90, 0x85, 0xd4, 0x2e, 0x9c, 0x56,
0xb1, 0x72, 0x2f, 0x0b, 0x6a, 0xc8, 0xbf, 0x52, 0x50, 0x43, 0x21, 0x2d, 0xa8, 0xe1, 0xc3, 0x6b, 0x3d, 0x2e, 0x18, 0x2f, 0xba, 0xd3, 0xb2, 0x29, 0xee, 0x34, 0xdd, 0x8b, 0x95, 0x7b, 0x59, 0x50,
0xbd, 0xe0, 0xdc, 0x16, 0x9d, 0xea, 0x01, 0x7f, 0x74, 0xbd, 0x07, 0x9c, 0x8b, 0xdb, 0xd7, 0x79, 0x43, 0xfe, 0x95, 0x82, 0x1a, 0x0a, 0x69, 0x41, 0x0d, 0x1f, 0x5e, 0xeb, 0x05, 0xe7, 0xb6, 0xe8,
0xbf, 0x35, 0xdf, 0x7d, 0xe9, 0x1a, 0xdf, 0x93, 0xe6, 0xcd, 0x4f, 0xf1, 0x7e, 0x97, 0xbf, 0x81, 0x54, 0x0f, 0xf8, 0xa3, 0xeb, 0x3d, 0xe0, 0x5c, 0xdc, 0xbe, 0xce, 0xfb, 0xad, 0xf9, 0xee, 0x4b,
0xf7, 0x7b, 0xeb, 0x4f, 0x32, 0x40, 0x16, 0x77, 0x07, 0x79, 0xc2, 0x3d, 0x95, 0x2e, 0x9d, 0x08, 0xd7, 0xf8, 0x9e, 0x34, 0x6f, 0x7e, 0x8a, 0xf7, 0xbb, 0xfc, 0x0d, 0xbc, 0xdf, 0x5b, 0x7f, 0x92,
0xce, 0xfd, 0xbd, 0x57, 0xdb, 0x61, 0x72, 0x41, 0xc8, 0xdc, 0xe4, 0x7d, 0x58, 0xd5, 0xef, 0x02, 0x01, 0xb2, 0xb8, 0x3b, 0xc8, 0x13, 0xee, 0xa9, 0x74, 0xe9, 0x44, 0x70, 0xee, 0xef, 0xbd, 0xda,
0xe9, 0x66, 0x86, 0x9a, 0x49, 0x74, 0x54, 0x64, 0x30, 0xd3, 0x22, 0x48, 0xf2, 0x2f, 0x8d, 0x20, 0x0e, 0x93, 0x0b, 0x42, 0xe6, 0x26, 0xef, 0xc3, 0xaa, 0x7e, 0x4b, 0x48, 0x37, 0x33, 0xd4, 0x4c,
0x29, 0xbc, 0x34, 0x82, 0x64, 0x29, 0x1e, 0x41, 0xb2, 0xf5, 0x6f, 0x32, 0xb0, 0x9a, 0xb2, 0x88, 0xa2, 0xa3, 0x22, 0x83, 0x99, 0x16, 0x41, 0x92, 0x7f, 0x69, 0x04, 0x49, 0xe1, 0xa5, 0x11, 0x24,
0xbf, 0xbd, 0x3e, 0xb3, 0xb5, 0x17, 0x63, 0x6b, 0x59, 0xb1, 0xf6, 0x74, 0x8e, 0x76, 0x20, 0x8d, 0x4b, 0xf1, 0x08, 0x92, 0xad, 0x7f, 0x93, 0x81, 0xd5, 0x94, 0x45, 0xfc, 0xed, 0xf5, 0x99, 0xad,
0xac, 0x6c, 0x2a, 0x02, 0x71, 0x52, 0xdd, 0x7f, 0x19, 0x77, 0x89, 0x72, 0x98, 0x7a, 0xf6, 0xad, 0xbd, 0x18, 0x5b, 0xcb, 0x8a, 0xb5, 0xa7, 0x73, 0xb4, 0x03, 0x69, 0x64, 0x65, 0x53, 0x11, 0x88,
0xbf, 0x9b, 0x85, 0x8a, 0x86, 0x64, 0xa3, 0xc8, 0x97, 0xac, 0x16, 0xbf, 0xc8, 0x65, 0x4b, 0x34, 0x93, 0xea, 0xfe, 0xcb, 0xb8, 0x4b, 0x94, 0xc3, 0xd4, 0xb3, 0x6f, 0xfd, 0xdd, 0x2c, 0x54, 0x34,
0x92, 0xdc, 0x01, 0xe1, 0x8b, 0xe2, 0x78, 0xbe, 0xb9, 0x84, 0x20, 0x89, 0x04, 0xdb, 0xb0, 0x2a, 0x24, 0x1b, 0x45, 0xbe, 0x64, 0xb5, 0xc8, 0x46, 0x2e, 0x5b, 0xa2, 0x91, 0xe4, 0x0e, 0x08, 0x5f,
0xbd, 0xc8, 0x34, 0x0a, 0x69, 0x16, 0x67, 0x8d, 0x08, 0x08, 0x10, 0x8d, 0x44, 0xfa, 0xf7, 0xa5, 0x14, 0xc7, 0xf3, 0xcd, 0x25, 0x04, 0x49, 0x24, 0xd8, 0x86, 0x55, 0xe9, 0x45, 0xa6, 0x51, 0xb0,
0xfe, 0x1a, 0xcd, 0x9d, 0xe6, 0x95, 0x5b, 0x11, 0xa1, 0x08, 0x62, 0x12, 0xd9, 0x3a, 0xff, 0x00, 0xb3, 0x38, 0x6b, 0x44, 0x40, 0x80, 0x68, 0x24, 0xd2, 0xbf, 0x2f, 0xf5, 0xd7, 0x68, 0xee, 0x34,
0xd6, 0x55, 0x2c, 0x42, 0x2c, 0x07, 0xf7, 0xfd, 0x10, 0x19, 0x73, 0xa0, 0x65, 0xf9, 0x21, 0xdc, 0xaf, 0xdc, 0x8a, 0x08, 0x45, 0x10, 0x93, 0xc8, 0xd6, 0xf9, 0x07, 0xb0, 0xae, 0x62, 0x11, 0x62,
0x4e, 0xb4, 0x29, 0x91, 0x95, 0xc7, 0xde, 0xdf, 0x8c, 0xb5, 0x4e, 0x2f, 0x61, 0xeb, 0x4f, 0x41, 0x39, 0xb8, 0xef, 0x87, 0xc8, 0x98, 0x03, 0x2d, 0xcb, 0x0f, 0xe1, 0x76, 0xa2, 0x4d, 0x89, 0xac,
0x2d, 0xc6, 0x28, 0xbf, 0xbd, 0x29, 0x4f, 0x1a, 0xa6, 0xf8, 0x88, 0xea, 0x86, 0xa9, 0xad, 0xff, 0x3c, 0x2a, 0xff, 0x66, 0xac, 0x75, 0x7a, 0x09, 0x5b, 0x7f, 0x0a, 0x6a, 0x31, 0x46, 0xf9, 0xed,
0x91, 0x03, 0xb2, 0xc8, 0xab, 0x7f, 0x9e, 0x4d, 0x58, 0x5c, 0x98, 0xb9, 0x94, 0x85, 0xf9, 0xff, 0x4d, 0x79, 0xd2, 0x30, 0xc5, 0x47, 0x54, 0x37, 0x4c, 0x6d, 0xfd, 0x8f, 0x1c, 0x90, 0x45, 0x5e,
0x4c, 0x7e, 0x88, 0xec, 0xa3, 0x5a, 0x28, 0x00, 0xdf, 0x9c, 0x0d, 0x85, 0x90, 0xad, 0xf8, 0x24, 0xfd, 0xf3, 0x6c, 0xc2, 0xe2, 0xc2, 0xcc, 0xa5, 0x2c, 0xcc, 0xff, 0x67, 0xf2, 0x43, 0x64, 0x1f,
0x19, 0x30, 0x55, 0x8a, 0x5d, 0x67, 0xd3, 0x04, 0xa8, 0x44, 0xdc, 0xd4, 0x31, 0x2c, 0xd9, 0xee, 0xd5, 0x42, 0x01, 0xf8, 0xe6, 0x6c, 0x28, 0x84, 0x6c, 0xc5, 0x27, 0xc9, 0x80, 0xa9, 0x52, 0xec,
0xe8, 0xdc, 0xf3, 0x05, 0x1f, 0xfc, 0x85, 0x6f, 0x7c, 0x7c, 0x6e, 0xb7, 0x30, 0x3f, 0x4a, 0x6d, 0xa2, 0x9b, 0x26, 0x40, 0x25, 0xe2, 0xa6, 0x8e, 0x61, 0xc9, 0x76, 0x47, 0xe7, 0x9e, 0x2f, 0xf8,
0xa6, 0x28, 0xcc, 0xf8, 0x00, 0x2a, 0x1a, 0x98, 0x94, 0xa1, 0x70, 0xd0, 0x3d, 0xdc, 0xe9, 0x37, 0xe0, 0x2f, 0x7c, 0xe3, 0xe3, 0x73, 0xbb, 0x85, 0xf9, 0x51, 0x6a, 0x33, 0x45, 0x61, 0xc6, 0x07,
0x6e, 0x90, 0x1a, 0x94, 0xcd, 0x4e, 0xbb, 0xff, 0x45, 0xc7, 0xec, 0xec, 0x36, 0x32, 0xa4, 0x04, 0x50, 0xd1, 0xc0, 0xa4, 0x0c, 0x85, 0x83, 0xee, 0xe1, 0x4e, 0xbf, 0x71, 0x83, 0xd4, 0xa0, 0x6c,
0xf9, 0x83, 0xfe, 0x60, 0xd8, 0xc8, 0x1a, 0x5b, 0xd0, 0x14, 0x25, 0x2e, 0x7a, 0x8a, 0x7e, 0x2b, 0x76, 0xda, 0xfd, 0x2f, 0x3a, 0x66, 0x67, 0xb7, 0x91, 0x21, 0x25, 0xc8, 0x1f, 0xf4, 0x07, 0xc3,
0xaf, 0xec, 0x9b, 0x88, 0x14, 0x4a, 0xfe, 0x87, 0x50, 0xd5, 0xc5, 0x1b, 0xb1, 0x22, 0x12, 0xd1, 0x46, 0xd6, 0xd8, 0x82, 0xa6, 0x28, 0x71, 0xd1, 0x53, 0xf4, 0x5b, 0x79, 0x65, 0xdf, 0x44, 0xa4,
0x28, 0x4c, 0xbd, 0xf7, 0x34, 0x5e, 0xdd, 0x06, 0x1e, 0x8b, 0x30, 0x56, 0xd9, 0xb2, 0x31, 0xb9, 0x50, 0xf2, 0x3f, 0x84, 0xaa, 0x2e, 0xde, 0x88, 0x15, 0x91, 0x88, 0x46, 0x61, 0xea, 0xbd, 0xa7,
0x35, 0xc5, 0xa9, 0x8b, 0xfa, 0x51, 0x6c, 0x19, 0xfe, 0x7f, 0x50, 0x8f, 0x7b, 0x45, 0x04, 0x47, 0xf1, 0xea, 0x36, 0xf0, 0x58, 0x84, 0xb1, 0xca, 0x96, 0x8d, 0xc9, 0xad, 0x29, 0x4e, 0x5d, 0xd4,
0x4a, 0x53, 0x59, 0x59, 0xee, 0x98, 0x9b, 0x84, 0xfc, 0x10, 0x1a, 0x49, 0xaf, 0x8a, 0x10, 0x9e, 0x8f, 0x62, 0xcb, 0xf0, 0xff, 0x83, 0x7a, 0xdc, 0x2b, 0x22, 0x38, 0x52, 0x9a, 0xca, 0xca, 0x72,
0xaf, 0xc9, 0xbf, 0xec, 0xc4, 0x1d, 0x2d, 0x64, 0x1f, 0xd6, 0xd2, 0x04, 0x3c, 0x5c, 0x1f, 0xd7, 0xc7, 0xdc, 0x24, 0xe4, 0x87, 0xd0, 0x48, 0x7a, 0x55, 0x84, 0xf0, 0x7c, 0x4d, 0xfe, 0x65, 0x27,
0x9b, 0x39, 0xc8, 0xa2, 0x10, 0x47, 0x3e, 0x15, 0xde, 0xb5, 0x02, 0x4e, 0xff, 0x5b, 0xf1, 0xfa, 0xee, 0x68, 0x21, 0xfb, 0xb0, 0x96, 0x26, 0xe0, 0xe1, 0xfa, 0xb8, 0xde, 0xcc, 0x41, 0x16, 0x85,
0xb5, 0xc1, 0xde, 0xe6, 0xff, 0x34, 0x3f, 0xdb, 0x05, 0x40, 0x04, 0x23, 0x0d, 0xa8, 0xf6, 0x8f, 0x38, 0xf2, 0xa9, 0xf0, 0xae, 0x15, 0x70, 0xfa, 0xdf, 0x8a, 0xd7, 0xaf, 0x0d, 0xf6, 0x36, 0xff,
0x3a, 0x3d, 0xab, 0xbd, 0xdf, 0xea, 0xf5, 0x3a, 0x07, 0x8d, 0x1b, 0x84, 0x40, 0x1d, 0x03, 0x2a, 0xa7, 0xf9, 0xd9, 0x2e, 0x00, 0x22, 0x18, 0x69, 0x40, 0xb5, 0x7f, 0xd4, 0xe9, 0x59, 0xed, 0xfd,
0x76, 0x15, 0x2c, 0xc3, 0x60, 0xc2, 0xcb, 0x29, 0x61, 0x59, 0xb2, 0x06, 0x8d, 0x6e, 0x2f, 0x01, 0x56, 0xaf, 0xd7, 0x39, 0x68, 0xdc, 0x20, 0x04, 0xea, 0x18, 0x50, 0xb1, 0xab, 0x60, 0x19, 0x06,
0xcd, 0x91, 0x26, 0xac, 0x1d, 0x75, 0x78, 0x0c, 0x46, 0xac, 0xdc, 0x3c, 0x53, 0x1a, 0x44, 0x77, 0x13, 0x5e, 0x4e, 0x09, 0xcb, 0x92, 0x35, 0x68, 0x74, 0x7b, 0x09, 0x68, 0x8e, 0x34, 0x61, 0xed,
0x99, 0xd2, 0xf0, 0xa5, 0x3d, 0x99, 0xd0, 0x50, 0xec, 0x03, 0x29, 0x4b, 0xff, 0xb5, 0x0c, 0xac, 0xa8, 0xc3, 0x63, 0x30, 0x62, 0xe5, 0xe6, 0x99, 0xd2, 0x20, 0xba, 0xcb, 0x94, 0x86, 0x2f, 0xed,
0x27, 0x10, 0x91, 0x6b, 0x82, 0x4b, 0xd2, 0x71, 0x19, 0xba, 0x8a, 0x40, 0xb9, 0x9b, 0xde, 0x85, 0xc9, 0x84, 0x86, 0x62, 0x1f, 0x48, 0x59, 0xfa, 0xaf, 0x65, 0x60, 0x3d, 0x81, 0x88, 0x5c, 0x13,
0x15, 0x65, 0x29, 0x4b, 0x9c, 0x4a, 0x0d, 0x85, 0x90, 0xc4, 0xef, 0xc3, 0xaa, 0x66, 0x70, 0x4b, 0x5c, 0x92, 0x8e, 0xcb, 0xd0, 0x55, 0x04, 0xca, 0xdd, 0xf4, 0x2e, 0xac, 0x28, 0x4b, 0x59, 0xe2,
0xf0, 0x0a, 0xa2, 0xa1, 0x44, 0x06, 0x63, 0x53, 0xdd, 0xf0, 0x49, 0xb4, 0x7a, 0x0c, 0x1b, 0x49, 0x54, 0x6a, 0x28, 0x84, 0x24, 0x7e, 0x1f, 0x56, 0x35, 0x83, 0x5b, 0x82, 0x57, 0x10, 0x0d, 0x25,
0x44, 0xe4, 0x7c, 0x8c, 0xb7, 0x57, 0x26, 0xc9, 0x83, 0xc4, 0x42, 0x88, 0xb7, 0x56, 0x9f, 0x70, 0x32, 0x18, 0x9b, 0xea, 0xee, 0x4f, 0xa2, 0xd5, 0x63, 0xd8, 0x48, 0x22, 0x22, 0xe7, 0x63, 0xbc,
0x59, 0xfd, 0xef, 0x2c, 0x01, 0xf9, 0xf1, 0x9c, 0xfa, 0x57, 0x78, 0xb3, 0x2c, 0x78, 0x59, 0xf8, 0xbd, 0x32, 0x49, 0x1e, 0x24, 0x16, 0x42, 0xbc, 0xb5, 0xfa, 0x84, 0xcb, 0xea, 0x7f, 0x67, 0x09,
0xb4, 0xb4, 0xd5, 0x64, 0x5f, 0xe9, 0xf6, 0x68, 0xda, 0xed, 0xcd, 0xfc, 0xcb, 0x6f, 0x6f, 0x16, 0xc8, 0x8f, 0xe7, 0xd4, 0xbf, 0xc2, 0x3b, 0x67, 0xc1, 0xcb, 0xc2, 0xa7, 0xa5, 0xad, 0x26, 0xfb,
0x5e, 0x76, 0x7b, 0xf3, 0x4d, 0xa8, 0x39, 0x67, 0xae, 0xc7, 0x58, 0x21, 0x93, 0x84, 0x83, 0xe6, 0x4a, 0xf7, 0x4a, 0xd3, 0xee, 0x75, 0xe6, 0x5f, 0x7e, 0xaf, 0xb3, 0xf0, 0xb2, 0x7b, 0x9d, 0x6f,
0xd2, 0xdd, 0xdc, 0xbd, 0xaa, 0x59, 0x15, 0x40, 0x26, 0x07, 0x07, 0xe4, 0x71, 0x44, 0x44, 0xc7, 0x42, 0xcd, 0x39, 0x73, 0x3d, 0xc6, 0x0a, 0x99, 0x24, 0x1c, 0x34, 0x97, 0xee, 0xe6, 0xee, 0x55,
0x67, 0x78, 0x83, 0x59, 0x67, 0x82, 0x9d, 0xf1, 0x19, 0x15, 0xa6, 0x29, 0xd4, 0x34, 0x64, 0x66, 0xcd, 0xaa, 0x00, 0x32, 0x39, 0x38, 0x20, 0x8f, 0x23, 0x22, 0x3a, 0x3e, 0xc3, 0xbb, 0xcd, 0x3a,
0x06, 0x0f, 0xc8, 0x5b, 0x50, 0x0f, 0xbc, 0x39, 0x53, 0x2c, 0xe4, 0x30, 0x70, 0xef, 0x63, 0x95, 0x13, 0xec, 0x8c, 0xcf, 0xa8, 0x30, 0x4d, 0xa1, 0xa6, 0x21, 0x33, 0x33, 0x78, 0x40, 0xde, 0x82,
0x43, 0x8f, 0xa4, 0x2f, 0x7a, 0x75, 0x1e, 0x50, 0x6b, 0xea, 0x04, 0x01, 0x13, 0xcf, 0x46, 0x9e, 0x7a, 0xe0, 0xcd, 0x99, 0x62, 0x21, 0x87, 0x81, 0x7b, 0x1f, 0xab, 0x1c, 0x7a, 0x24, 0x7d, 0xd1,
0x1b, 0xfa, 0xde, 0x44, 0x38, 0x14, 0x57, 0xe6, 0x01, 0x3d, 0xe4, 0x98, 0x36, 0x47, 0x90, 0x8f, 0xab, 0xf3, 0x80, 0x5a, 0x53, 0x27, 0x08, 0x98, 0x78, 0x36, 0xf2, 0xdc, 0xd0, 0xf7, 0x26, 0xc2,
0xa2, 0x26, 0xcd, 0x6c, 0xc7, 0x0f, 0x9a, 0x80, 0x4d, 0x92, 0x3d, 0x45, 0xf9, 0xdd, 0x76, 0x7c, 0xa1, 0xb8, 0x32, 0x0f, 0xe8, 0x21, 0xc7, 0xb4, 0x39, 0x82, 0x7c, 0x14, 0x35, 0x69, 0x66, 0x3b,
0xd5, 0x16, 0x96, 0x08, 0x12, 0xb7, 0x4a, 0x2b, 0xc9, 0x5b, 0xa5, 0xbf, 0x96, 0x7e, 0xab, 0x94, 0x7e, 0xd0, 0x04, 0x6c, 0x92, 0xec, 0x29, 0xca, 0xef, 0xb6, 0xe3, 0xab, 0xb6, 0xb0, 0x44, 0x90,
0xc7, 0x50, 0x3d, 0x10, 0x45, 0x2f, 0x4e, 0xf1, 0x37, 0xba, 0x5c, 0xba, 0x78, 0x59, 0xb6, 0xfe, 0xb8, 0x6f, 0x5a, 0x49, 0xde, 0x37, 0xfd, 0xb5, 0xf4, 0xfb, 0xa6, 0x3c, 0x86, 0xea, 0x81, 0x28,
0x4d, 0x2e, 0xcb, 0x2e, 0xa7, 0x5d, 0x96, 0xfd, 0x00, 0x2a, 0x78, 0x8d, 0xd1, 0x3a, 0xc7, 0x48, 0x7a, 0x71, 0x8a, 0xbf, 0xd1, 0xb5, 0xd3, 0xc5, 0x6b, 0xb4, 0xf5, 0x6f, 0x72, 0x8d, 0x76, 0x39,
0x4a, 0xee, 0x20, 0x6d, 0xe8, 0xf7, 0x1c, 0xf7, 0x1d, 0x37, 0x34, 0xc1, 0x97, 0x3f, 0x83, 0xc5, 0xed, 0x1a, 0xed, 0x07, 0x50, 0xc1, 0x0b, 0x8e, 0xd6, 0x39, 0x46, 0x52, 0x72, 0x07, 0x69, 0x43,
0x7b, 0xab, 0x2b, 0x3f, 0xc7, 0x7b, 0xab, 0xe2, 0xba, 0xe5, 0x36, 0x94, 0xe4, 0x3c, 0x11, 0x02, 0xbf, 0x01, 0xb9, 0xef, 0xb8, 0xa1, 0x09, 0xbe, 0xfc, 0x19, 0x2c, 0xde, 0x68, 0x5d, 0xf9, 0x39,
0xf9, 0x53, 0xdf, 0x9b, 0x4a, 0xa7, 0x0c, 0xfb, 0x4d, 0xea, 0x90, 0x0d, 0x3d, 0x91, 0x39, 0x1b, 0xde, 0x68, 0x15, 0x17, 0x31, 0xb7, 0xa1, 0x24, 0xe7, 0x89, 0x10, 0xc8, 0x9f, 0xfa, 0xde, 0x54,
0x7a, 0xc6, 0xaf, 0x40, 0x45, 0x5b, 0x6a, 0xe4, 0x0d, 0x6e, 0xd9, 0x64, 0xba, 0x99, 0x90, 0x2d, 0x3a, 0x65, 0xd8, 0x6f, 0x52, 0x87, 0x6c, 0xe8, 0x89, 0xcc, 0xd9, 0xd0, 0x33, 0x7e, 0x05, 0x2a,
0xf9, 0x28, 0x96, 0x05, 0xb4, 0x3b, 0x66, 0xfc, 0x66, 0xec, 0xf8, 0x14, 0x6f, 0x98, 0x5b, 0x3e, 0xda, 0x52, 0x23, 0x6f, 0x70, 0xcb, 0x26, 0xd3, 0xcd, 0x84, 0x6c, 0xc9, 0x47, 0xb1, 0x2c, 0xa0,
0xbd, 0xa0, 0x7e, 0x20, 0x9d, 0x64, 0x0d, 0x85, 0x30, 0x39, 0xdc, 0xf8, 0x55, 0x58, 0x8d, 0xcd, 0xdd, 0x31, 0xe3, 0x37, 0x63, 0xc7, 0xa7, 0x78, 0xf7, 0xdc, 0xf2, 0xe9, 0x05, 0xf5, 0x03, 0xe9,
0xad, 0x60, 0x11, 0x6f, 0xc1, 0x12, 0x8e, 0x9b, 0x8c, 0xc4, 0x88, 0xdf, 0x1f, 0x15, 0x38, 0xbc, 0x24, 0x6b, 0x28, 0x84, 0xc9, 0xe1, 0xc6, 0xaf, 0xc2, 0x6a, 0x6c, 0x6e, 0x05, 0x8b, 0x78, 0x0b,
0x4d, 0xcf, 0xfd, 0x7b, 0xd6, 0xcc, 0xf7, 0x4e, 0xb0, 0x92, 0x8c, 0x59, 0x11, 0xb0, 0x23, 0xdf, 0x96, 0x70, 0xdc, 0x64, 0x24, 0x46, 0xfc, 0x66, 0xa9, 0xc0, 0xe1, 0x3d, 0x7b, 0xee, 0xdf, 0xb3,
0x3b, 0x31, 0xfe, 0x30, 0x07, 0xb9, 0x7d, 0x6f, 0xa6, 0x47, 0x5f, 0x66, 0x16, 0xa2, 0x2f, 0x85, 0x66, 0xbe, 0x77, 0x82, 0x95, 0x64, 0xcc, 0x8a, 0x80, 0x1d, 0xf9, 0xde, 0x89, 0xf1, 0x87, 0x39,
0xc2, 0x69, 0x29, 0x85, 0x52, 0xc8, 0xec, 0xe8, 0xd9, 0x92, 0x4a, 0xe5, 0x3d, 0xa8, 0x33, 0x3e, 0xc8, 0xed, 0x7b, 0x33, 0x3d, 0xfa, 0x32, 0xb3, 0x10, 0x7d, 0x29, 0x14, 0x4e, 0x4b, 0x29, 0x94,
0x11, 0x7a, 0x4c, 0x63, 0x7f, 0x6e, 0xfb, 0x5c, 0x20, 0xe6, 0xc1, 0xcc, 0x55, 0x7b, 0x1a, 0x0e, 0x42, 0x66, 0x47, 0xcf, 0x96, 0x54, 0x2a, 0xef, 0x41, 0x9d, 0xf1, 0x89, 0xd0, 0x63, 0x1a, 0xfb,
0xbd, 0x3d, 0x0e, 0x27, 0x6b, 0x90, 0x53, 0xea, 0x0b, 0xa2, 0x59, 0x92, 0x6c, 0xc0, 0x12, 0xde, 0x73, 0xdb, 0xe7, 0x02, 0x31, 0x0f, 0x66, 0xae, 0xda, 0xd3, 0x70, 0xe8, 0xed, 0x71, 0x38, 0x59,
0x95, 0xb8, 0x12, 0x91, 0x04, 0x22, 0x45, 0xbe, 0x07, 0xab, 0xf1, 0x72, 0x39, 0x2b, 0x12, 0xb2, 0x83, 0x9c, 0x52, 0x5f, 0x10, 0xcd, 0x92, 0x64, 0x03, 0x96, 0xf0, 0xae, 0xc4, 0x95, 0x88, 0x24,
0x91, 0x5e, 0x30, 0xf2, 0xa4, 0x9b, 0xc0, 0xf8, 0x08, 0xa7, 0x11, 0x21, 0x4f, 0xa7, 0x94, 0x22, 0x10, 0x29, 0xf2, 0x3d, 0x58, 0x8d, 0x97, 0xcb, 0x59, 0x91, 0x90, 0x8d, 0xf4, 0x82, 0x91, 0x27,
0x4a, 0x63, 0x7a, 0xa5, 0x18, 0xd3, 0xbb, 0x03, 0x95, 0x70, 0x72, 0x61, 0xcd, 0xec, 0xab, 0x89, 0xdd, 0x04, 0xc6, 0x47, 0x38, 0x8d, 0x08, 0x79, 0x3a, 0xa5, 0x14, 0x51, 0x1a, 0xd3, 0x2b, 0xc5,
0x67, 0x8f, 0xc5, 0xfe, 0x86, 0x70, 0x72, 0x71, 0xc4, 0x21, 0xe4, 0x7d, 0x80, 0xe9, 0x6c, 0x26, 0x98, 0xde, 0x1d, 0xa8, 0x84, 0x93, 0x0b, 0x6b, 0x66, 0x5f, 0x4d, 0x3c, 0x7b, 0x2c, 0xf6, 0x37,
0xf6, 0x1e, 0x7a, 0x6b, 0xa2, 0xa5, 0x7c, 0x78, 0x74, 0xc4, 0x97, 0x9c, 0x59, 0x9e, 0xce, 0x66, 0x84, 0x93, 0x8b, 0x23, 0x0e, 0x21, 0xef, 0x03, 0x4c, 0x67, 0x33, 0xb1, 0xf7, 0xd0, 0x5b, 0x13,
0xfc, 0x27, 0xd9, 0x85, 0x7a, 0xea, 0x2d, 0xf0, 0xdb, 0x32, 0xa6, 0xdd, 0x9b, 0x6d, 0xa7, 0x6c, 0x2d, 0xe5, 0xc3, 0xa3, 0x23, 0xbe, 0xe4, 0xcc, 0xf2, 0x74, 0x36, 0xe3, 0x3f, 0xc9, 0x2e, 0xd4,
0xce, 0xda, 0x48, 0x87, 0x6d, 0xfd, 0x10, 0xc8, 0xcf, 0x78, 0x17, 0x7b, 0x08, 0x65, 0xd5, 0x3e, 0x53, 0xef, 0x87, 0xdf, 0x96, 0x31, 0xed, 0xde, 0x6c, 0x3b, 0x65, 0x73, 0xd6, 0x46, 0x3a, 0x6c,
0xfd, 0x2a, 0x33, 0x5e, 0xd6, 0xa9, 0xc4, 0xae, 0x32, 0xb7, 0xc6, 0x63, 0x9f, 0xf1, 0x45, 0x7e, 0xeb, 0x87, 0x40, 0x7e, 0xc6, 0x5b, 0xda, 0x43, 0x28, 0xab, 0xf6, 0xe9, 0x97, 0x9c, 0xf1, 0x1a,
0x60, 0x2a, 0x96, 0x0f, 0xda, 0x89, 0x29, 0x6e, 0x83, 0x18, 0xff, 0x39, 0x03, 0x05, 0x7e, 0xaf, 0x4f, 0x25, 0x76, 0xc9, 0xb9, 0x35, 0x1e, 0xfb, 0x8c, 0x2f, 0xf2, 0x03, 0x53, 0xb1, 0x7c, 0xd0,
0xfa, 0x6d, 0x58, 0xe6, 0xf4, 0x2a, 0x92, 0x55, 0xc4, 0x1f, 0xf0, 0x73, 0x77, 0x28, 0x82, 0x58, 0x4e, 0x4c, 0x71, 0x1b, 0xc4, 0xf8, 0xcf, 0x19, 0x28, 0xf0, 0x1b, 0xd7, 0x6f, 0xc3, 0x32, 0xa7,
0xd9, 0xb6, 0xd0, 0xde, 0x9a, 0xc8, 0xaa, 0x99, 0xd7, 0xde, 0x9b, 0xb8, 0x03, 0x65, 0x55, 0xb5, 0x57, 0x91, 0xac, 0x22, 0xfe, 0x80, 0x9f, 0xbb, 0x43, 0x11, 0xc4, 0xca, 0xb6, 0x85, 0xf6, 0x0a,
0xb6, 0x74, 0x4a, 0xb2, 0x66, 0xf2, 0x3a, 0xe4, 0xcf, 0xbd, 0x99, 0xb4, 0xfc, 0x40, 0x34, 0x92, 0x45, 0x56, 0xcd, 0xbc, 0xf6, 0x12, 0xc5, 0x1d, 0x28, 0xab, 0xaa, 0xb5, 0xa5, 0x53, 0x92, 0x35,
0x26, 0xc2, 0xa3, 0xb6, 0xb0, 0x3a, 0xa2, 0x5b, 0x2a, 0x39, 0xd1, 0x16, 0x56, 0x09, 0x2e, 0x83, 0x93, 0xd7, 0x21, 0x7f, 0xee, 0xcd, 0xa4, 0xe5, 0x07, 0xa2, 0x91, 0x34, 0x11, 0x1e, 0xb5, 0x85,
0xc5, 0x3e, 0x2e, 0xa5, 0xf4, 0xf1, 0x18, 0x96, 0x19, 0x1f, 0xd0, 0x82, 0x20, 0xae, 0x3f, 0x34, 0xd5, 0x11, 0xdd, 0x52, 0xc9, 0x89, 0xb6, 0xb0, 0x4a, 0x70, 0x19, 0x2c, 0xf6, 0x71, 0x29, 0xa5,
0xbf, 0xcb, 0x24, 0xbc, 0xd1, 0x64, 0x3e, 0xa6, 0xba, 0xed, 0x0d, 0xc3, 0x12, 0x05, 0x5c, 0x4a, 0x8f, 0xc7, 0xb0, 0xcc, 0xf8, 0x80, 0x16, 0x04, 0x71, 0xfd, 0xa1, 0xf9, 0x5d, 0x26, 0xe1, 0x8d,
0xd6, 0xc6, 0xef, 0x64, 0x38, 0x7f, 0x61, 0xe5, 0x92, 0x7b, 0x90, 0x77, 0x65, 0xc0, 0x44, 0x24, 0x26, 0xf3, 0x31, 0xd5, 0x6d, 0x6f, 0x18, 0x96, 0x28, 0xe0, 0x52, 0xb2, 0x36, 0x7e, 0x27, 0xc3,
0xc7, 0xa9, 0x5b, 0x53, 0x8c, 0xce, 0x44, 0x0a, 0x36, 0x75, 0x18, 0x66, 0xa0, 0x97, 0x5e, 0x33, 0xf9, 0x0b, 0x2b, 0x97, 0xdc, 0x83, 0xbc, 0x2b, 0x03, 0x26, 0x22, 0x39, 0x4e, 0xdd, 0xa7, 0x62,
0x2b, 0xee, 0x7c, 0xaa, 0x4c, 0x57, 0xdf, 0x91, 0xdd, 0x4a, 0x98, 0x7d, 0x78, 0xef, 0xd5, 0x36, 0x74, 0x26, 0x52, 0xb0, 0xa9, 0xc3, 0x30, 0x03, 0xbd, 0xf4, 0x9a, 0x59, 0x71, 0xe7, 0x53, 0x65,
0xdd, 0xd6, 0xe2, 0x1b, 0xf3, 0xb1, 0x13, 0x53, 0x4a, 0x81, 0xe3, 0x33, 0xaa, 0xc5, 0x35, 0xfe, 0xba, 0xfa, 0x8e, 0xec, 0x56, 0xc2, 0xec, 0xc3, 0x7b, 0xaf, 0xb6, 0xe9, 0xb6, 0x16, 0xdf, 0x98,
0x5e, 0x16, 0x6a, 0xb1, 0x16, 0x61, 0x80, 0x27, 0x3b, 0x00, 0xb8, 0x6b, 0x4a, 0xcc, 0x37, 0xc6, 0x8f, 0x9d, 0x98, 0x52, 0x0a, 0x1c, 0x9f, 0x51, 0x2d, 0xae, 0xf1, 0xf7, 0xb2, 0x50, 0x8b, 0xb5,
0xd1, 0x09, 0x41, 0x5d, 0x1b, 0xa7, 0x6c, 0x6c, 0x9c, 0x54, 0xc4, 0x53, 0x4e, 0x8f, 0x78, 0x7a, 0x08, 0x03, 0x3c, 0xd9, 0x01, 0xc0, 0x5d, 0x53, 0x62, 0xbe, 0x31, 0x8e, 0x4e, 0x08, 0xea, 0xda,
0x00, 0xe5, 0xe8, 0x8d, 0x91, 0x78, 0x93, 0x58, 0x7d, 0xf2, 0xee, 0x58, 0x44, 0x14, 0xc5, 0x48, 0x38, 0x65, 0x63, 0xe3, 0xa4, 0x22, 0x9e, 0x72, 0x7a, 0xc4, 0xd3, 0x03, 0x28, 0x47, 0xaf, 0x8f,
0x15, 0xf4, 0x18, 0xa9, 0xcf, 0xb5, 0x90, 0x9a, 0x25, 0x2c, 0xc6, 0x48, 0x1b, 0xd1, 0x9f, 0x4b, 0xc4, 0x9b, 0xc4, 0xea, 0x93, 0xb7, 0xca, 0x22, 0xa2, 0x28, 0x46, 0xaa, 0xa0, 0xc7, 0x48, 0x7d,
0x40, 0x8d, 0xf1, 0x18, 0x2a, 0x5a, 0xe3, 0xf5, 0xb0, 0x94, 0x4c, 0x2c, 0x2c, 0x45, 0xdd, 0xfd, 0xae, 0x85, 0xd4, 0x2c, 0x61, 0x31, 0x46, 0xda, 0x88, 0xfe, 0x5c, 0x02, 0x6a, 0x8c, 0xc7, 0x50,
0xcc, 0x46, 0x77, 0x3f, 0x8d, 0x3f, 0x97, 0x85, 0x1a, 0xdb, 0x5f, 0x8e, 0x7b, 0x76, 0xe4, 0x4d, 0xd1, 0x1a, 0xaf, 0x87, 0xa5, 0x64, 0x62, 0x61, 0x29, 0xea, 0x56, 0x68, 0x36, 0xba, 0x15, 0x6a,
0x9c, 0x11, 0xba, 0xaa, 0xd4, 0x0e, 0x13, 0x82, 0x96, 0xdc, 0x67, 0x62, 0x8b, 0x71, 0x39, 0x4b, 0xfc, 0xb9, 0x2c, 0xd4, 0xd8, 0xfe, 0x72, 0xdc, 0xb3, 0x23, 0x6f, 0xe2, 0x8c, 0xd0, 0x55, 0xa5,
0xbf, 0xf8, 0xce, 0x99, 0xb4, 0xba, 0xf8, 0x6e, 0x40, 0x8d, 0x31, 0x46, 0x74, 0x3a, 0x45, 0x2f, 0x76, 0x98, 0x10, 0xb4, 0xe4, 0x3e, 0x13, 0x5b, 0x8c, 0xcb, 0x59, 0xfa, 0x95, 0x78, 0xce, 0xa4,
0x95, 0x98, 0x95, 0x53, 0x4a, 0x77, 0xec, 0x80, 0x73, 0xc8, 0xef, 0xc1, 0x2a, 0xa3, 0xc1, 0x3b, 0xd5, 0x95, 0x78, 0x03, 0x6a, 0x8c, 0x31, 0xa2, 0xd3, 0x29, 0x7a, 0xc3, 0xc4, 0xac, 0x9c, 0x52,
0xbf, 0x53, 0x67, 0x32, 0x71, 0xa2, 0x6b, 0x61, 0x39, 0xb3, 0x71, 0x4a, 0xa9, 0x69, 0x87, 0xf4, 0xba, 0x63, 0x07, 0x9c, 0x43, 0x7e, 0x0f, 0x56, 0x19, 0x0d, 0xde, 0x06, 0x9e, 0x3a, 0x93, 0x89,
0x90, 0x21, 0xc4, 0xc3, 0x26, 0xa5, 0xb1, 0x13, 0xd8, 0x27, 0x51, 0x18, 0xae, 0x4a, 0xa3, 0x2b, 0x13, 0x5d, 0x0b, 0xcb, 0x99, 0x8d, 0x53, 0x4a, 0x4d, 0x3b, 0xa4, 0x87, 0x0c, 0x21, 0x9e, 0x3c,
0x5c, 0xb8, 0x72, 0xa3, 0x4d, 0x96, 0x37, 0x2b, 0x53, 0xee, 0xc8, 0xc5, 0xfc, 0x89, 0x95, 0x54, 0x29, 0x8d, 0x9d, 0xc0, 0x3e, 0x89, 0xc2, 0x70, 0x55, 0x1a, 0x5d, 0xe1, 0xc2, 0x95, 0x1b, 0x6d,
0x4c, 0xae, 0x24, 0xe3, 0x9f, 0x66, 0xa1, 0xa2, 0x2d, 0xcb, 0x57, 0x39, 0x5d, 0x6f, 0x2f, 0xb8, 0xb2, 0xbc, 0x59, 0x99, 0x72, 0x47, 0x2e, 0xe6, 0x4f, 0xac, 0xa4, 0x62, 0x72, 0x25, 0x19, 0xff,
0x16, 0xcb, 0xba, 0x17, 0xf1, 0xcd, 0x78, 0x95, 0x39, 0x75, 0x77, 0x48, 0x5f, 0xc0, 0xb7, 0xa0, 0x34, 0x0b, 0x15, 0x6d, 0x59, 0xbe, 0xca, 0xe9, 0x7a, 0x7b, 0xc1, 0xb5, 0x58, 0xd6, 0xbd, 0x88,
0xcc, 0x76, 0xdd, 0x07, 0x68, 0x82, 0x15, 0x0f, 0x0b, 0x21, 0xe0, 0x68, 0x7e, 0x22, 0x91, 0x0f, 0x6f, 0xc6, 0xab, 0xcc, 0xa9, 0xbb, 0x43, 0xfa, 0x02, 0xbe, 0x05, 0x65, 0xb6, 0xeb, 0x3e, 0x40,
0x11, 0x59, 0x88, 0x90, 0x0f, 0x19, 0xf2, 0x45, 0x77, 0x07, 0x3e, 0x81, 0xaa, 0x28, 0x15, 0xe7, 0x13, 0xac, 0x78, 0x72, 0x08, 0x01, 0x47, 0xf3, 0x13, 0x89, 0x7c, 0x88, 0xc8, 0x42, 0x84, 0x7c,
0x14, 0xbb, 0x1b, 0xed, 0xfa, 0xd8, 0x7c, 0x9b, 0x15, 0x5e, 0x1d, 0x9f, 0x7c, 0x91, 0xf1, 0xa1, 0xc8, 0x90, 0x2f, 0xba, 0x3b, 0xf0, 0x09, 0x54, 0x45, 0xa9, 0x38, 0xa7, 0xd8, 0xdd, 0x68, 0xd7,
0xcc, 0x58, 0x7a, 0x59, 0xc6, 0x87, 0x3c, 0x61, 0xec, 0xa9, 0xeb, 0x18, 0x18, 0xcc, 0x26, 0xf9, 0xc7, 0xe6, 0xdb, 0xac, 0xf0, 0xea, 0xf8, 0xe4, 0x8b, 0x8c, 0x0f, 0x65, 0xc6, 0xd2, 0xcb, 0x32,
0xd8, 0xfb, 0xb0, 0x2a, 0xd9, 0xd5, 0xdc, 0xb5, 0x5d, 0xd7, 0x9b, 0xbb, 0x23, 0x2a, 0xaf, 0x7f, 0x3e, 0xe4, 0x09, 0x63, 0x4f, 0x5d, 0xc7, 0xc0, 0x60, 0x36, 0xc9, 0xc7, 0xde, 0x87, 0x55, 0xc9,
0x12, 0x81, 0x3a, 0x8e, 0x30, 0xc6, 0x58, 0xbd, 0x25, 0xc0, 0x83, 0xe2, 0xee, 0x43, 0x81, 0xcb, 0xae, 0xe6, 0xae, 0xed, 0xba, 0xde, 0xdc, 0x1d, 0x51, 0x79, 0x31, 0x94, 0x08, 0xd4, 0x71, 0x84,
0xe5, 0x5c, 0xf8, 0x48, 0x67, 0x5c, 0x9c, 0x84, 0xdc, 0x83, 0x02, 0x17, 0xcf, 0xb3, 0xd7, 0x32, 0x31, 0xc6, 0xea, 0x95, 0x01, 0x1e, 0x14, 0x77, 0x1f, 0x0a, 0x5c, 0x2e, 0xe7, 0xc2, 0x47, 0x3a,
0x1b, 0x4e, 0x60, 0xb4, 0x80, 0xb0, 0x8c, 0x87, 0x34, 0xf4, 0x9d, 0x51, 0x10, 0xdd, 0x2c, 0x2d, 0xe3, 0xe2, 0x24, 0xe4, 0x1e, 0x14, 0xb8, 0x78, 0x9e, 0xbd, 0x96, 0xd9, 0x70, 0x02, 0xa3, 0x05,
0x30, 0xfd, 0x93, 0xd7, 0x15, 0x59, 0x6e, 0x23, 0x4a, 0xd4, 0x51, 0x39, 0x0d, 0x3b, 0x98, 0x56, 0x84, 0x65, 0x3c, 0xa4, 0xa1, 0xef, 0x8c, 0x82, 0xe8, 0xce, 0x69, 0x81, 0xe9, 0x9f, 0xbc, 0xae,
0x63, 0x65, 0x08, 0x71, 0x69, 0x02, 0x1b, 0x27, 0x34, 0x7c, 0x4e, 0xa9, 0xeb, 0x32, 0x61, 0x68, 0xc8, 0x72, 0x1b, 0x51, 0xa2, 0x8e, 0xca, 0x69, 0xd8, 0xc1, 0xb4, 0x1a, 0x2b, 0x43, 0x88, 0x4b,
0x44, 0xdd, 0xd0, 0xb7, 0x27, 0x6c, 0x92, 0x78, 0x0f, 0x1e, 0x2d, 0x94, 0x1a, 0xd9, 0x40, 0x76, 0x13, 0xd8, 0x38, 0xa1, 0xe1, 0x73, 0x4a, 0x5d, 0x97, 0x09, 0x43, 0x23, 0xea, 0x86, 0xbe, 0x3d,
0xa2, 0x8c, 0x6d, 0x95, 0x8f, 0xf3, 0x8e, 0xf5, 0x93, 0x34, 0xdc, 0xd6, 0x2f, 0xc3, 0xd6, 0xf5, 0x61, 0x93, 0xc4, 0x7b, 0xf0, 0x68, 0xa1, 0xd4, 0xc8, 0x06, 0xb2, 0x13, 0x65, 0x6c, 0xab, 0x7c,
0x99, 0x52, 0x6e, 0x95, 0xdf, 0x8b, 0x73, 0x15, 0xe5, 0x07, 0x9c, 0x78, 0x76, 0xc8, 0x5b, 0xa3, 0x9c, 0x77, 0xac, 0x9f, 0xa4, 0xe1, 0xb6, 0x7e, 0x19, 0xb6, 0xae, 0xcf, 0x94, 0x72, 0xdf, 0xfc,
0x73, 0x96, 0x1e, 0x54, 0x34, 0x4c, 0x74, 0xf6, 0x67, 0x50, 0xb8, 0xe3, 0x09, 0x76, 0x22, 0xb9, 0x5e, 0x9c, 0xab, 0x28, 0x3f, 0xe0, 0xc4, 0xb3, 0x43, 0xde, 0x1a, 0x9d, 0xb3, 0xf4, 0xa0, 0xa2,
0x9e, 0x3f, 0x45, 0xbf, 0xdb, 0xd8, 0x8a, 0x4a, 0xcf, 0x98, 0xcb, 0x11, 0x1c, 0xc3, 0x30, 0x8c, 0x61, 0xa2, 0xb3, 0x3f, 0x83, 0xc2, 0x1d, 0x4f, 0xb0, 0x13, 0xc9, 0xf5, 0xfc, 0x29, 0xfa, 0xdd,
0x6d, 0x58, 0x46, 0xc9, 0x5e, 0x3b, 0xe8, 0x5e, 0x24, 0x0c, 0x1a, 0x6b, 0x40, 0x7a, 0x9c, 0x77, 0xc6, 0x56, 0x54, 0x7a, 0xc6, 0x5c, 0x8e, 0xe0, 0x18, 0x86, 0x61, 0x6c, 0xc3, 0x32, 0x4a, 0xf6,
0xe9, 0x01, 0x82, 0xff, 0x2e, 0x07, 0x15, 0x0d, 0xcc, 0x4e, 0x23, 0x8c, 0xaa, 0xb4, 0xc6, 0x8e, 0xda, 0x41, 0xf7, 0x22, 0x61, 0xd0, 0x58, 0x03, 0xd2, 0xe3, 0xbc, 0x4b, 0x0f, 0x10, 0xfc, 0x77,
0x3d, 0xa5, 0xd2, 0xc9, 0x59, 0x33, 0x6b, 0x08, 0xdd, 0x15, 0x40, 0x76, 0x16, 0xdb, 0x17, 0x67, 0x39, 0xa8, 0x68, 0x60, 0x76, 0x1a, 0x61, 0x54, 0xa5, 0x35, 0x76, 0xec, 0x29, 0x95, 0x4e, 0xce,
0x96, 0x37, 0x0f, 0xad, 0x31, 0x3d, 0xf3, 0xa9, 0x6c, 0x65, 0xd5, 0xbe, 0x38, 0xeb, 0xcf, 0xc3, 0x9a, 0x59, 0x43, 0xe8, 0xae, 0x00, 0xb2, 0xb3, 0xd8, 0xbe, 0x38, 0xb3, 0xbc, 0x79, 0x68, 0x8d,
0x5d, 0x84, 0x31, 0x2a, 0xc6, 0x4b, 0x34, 0x2a, 0x11, 0x64, 0x37, 0xb5, 0x2f, 0x23, 0x2a, 0x11, 0xe9, 0x99, 0x4f, 0x65, 0x2b, 0xab, 0xf6, 0xc5, 0x59, 0x7f, 0x1e, 0xee, 0x22, 0x8c, 0x51, 0x31,
0x8d, 0xca, 0x57, 0x66, 0x5e, 0x45, 0xa3, 0x72, 0x6d, 0x31, 0x79, 0x80, 0x16, 0x16, 0x0f, 0xd0, 0x5e, 0xa2, 0x51, 0x89, 0x20, 0xbb, 0xa9, 0x7d, 0x19, 0x51, 0x89, 0x68, 0x54, 0xbe, 0x32, 0xf3,
0x8f, 0x60, 0x83, 0x1f, 0xa0, 0x82, 0x35, 0x5b, 0x89, 0x9d, 0xbc, 0x86, 0x58, 0xd1, 0x49, 0x4d, 0x2a, 0x1a, 0x95, 0x6b, 0x8b, 0xc9, 0x03, 0xb4, 0xb0, 0x78, 0x80, 0x7e, 0x04, 0x1b, 0xfc, 0x00,
0xec, 0x6d, 0xb0, 0x1e, 0x48, 0xb6, 0x14, 0x38, 0x3f, 0xe1, 0x8c, 0x2c, 0x63, 0xb2, 0x9e, 0x89, 0x15, 0xac, 0xd9, 0x4a, 0xec, 0xe4, 0x35, 0xc4, 0x8a, 0x4e, 0x6a, 0x62, 0x6f, 0x83, 0xf5, 0x40,
0xc2, 0x07, 0xce, 0x4f, 0x28, 0xa3, 0xc4, 0x70, 0x1e, 0x9d, 0x52, 0xdc, 0x0c, 0x9a, 0x3a, 0x6e, 0xb2, 0xa5, 0xc0, 0xf9, 0x09, 0x67, 0x64, 0x19, 0x93, 0xf5, 0x4c, 0x14, 0x3e, 0x70, 0x7e, 0x42,
0x92, 0xd2, 0xbe, 0x8c, 0x53, 0x96, 0x05, 0xa5, 0x7d, 0xa9, 0x53, 0x3e, 0x82, 0xcd, 0x29, 0x1d, 0x19, 0x25, 0x86, 0xf3, 0xe8, 0x94, 0xe2, 0x66, 0xd0, 0xd4, 0x71, 0x93, 0x94, 0xf6, 0x65, 0x9c,
0x3b, 0x76, 0xbc, 0x58, 0x2b, 0x12, 0xdc, 0xd6, 0x38, 0x5a, 0xcb, 0x33, 0xe0, 0x8a, 0x3b, 0x1b, 0xb2, 0x2c, 0x28, 0xed, 0x4b, 0x9d, 0xf2, 0x11, 0x6c, 0x4e, 0xe9, 0xd8, 0xb1, 0xe3, 0xc5, 0x5a,
0x8d, 0x9f, 0x78, 0xd3, 0x13, 0x87, 0xcb, 0x2c, 0x3c, 0xc0, 0x28, 0x6f, 0xd6, 0xdd, 0xf9, 0xf4, 0x91, 0xe0, 0xb6, 0xc6, 0xd1, 0x5a, 0x9e, 0x01, 0x57, 0xdc, 0xd9, 0x68, 0xfc, 0xc4, 0x9b, 0x9e,
0x97, 0x10, 0xcc, 0xb2, 0x04, 0x46, 0x0d, 0x2a, 0x83, 0xd0, 0x9b, 0xc9, 0x69, 0xae, 0x43, 0x95, 0x38, 0x5c, 0x66, 0xe1, 0x01, 0x46, 0x79, 0xb3, 0xee, 0xce, 0xa7, 0xbf, 0x84, 0x60, 0x96, 0x25,
0x27, 0xc5, 0x9d, 0xea, 0x5b, 0x70, 0x13, 0x59, 0xc2, 0xd0, 0x9b, 0x79, 0x13, 0xef, 0xec, 0x2a, 0x30, 0x6a, 0x50, 0x19, 0x84, 0xde, 0x4c, 0x4e, 0x73, 0x1d, 0xaa, 0x3c, 0x29, 0xee, 0x54, 0xdf,
0x66, 0xc7, 0xfb, 0x97, 0x19, 0x58, 0x8d, 0x61, 0x05, 0x7b, 0xfd, 0x88, 0xf3, 0x33, 0x75, 0x23, 0x82, 0x9b, 0xc8, 0x12, 0x86, 0xde, 0xcc, 0x9b, 0x78, 0x67, 0x57, 0x31, 0x3b, 0xde, 0xbf, 0xcc,
0x34, 0x13, 0xbb, 0x0e, 0xc4, 0xe6, 0x8b, 0x13, 0x72, 0x66, 0x26, 0x6f, 0x89, 0xb6, 0xa2, 0xc7, 0xc0, 0x6a, 0x0c, 0x2b, 0xd8, 0xeb, 0x47, 0x9c, 0x9f, 0xa9, 0x1b, 0xa1, 0x99, 0xd8, 0x75, 0x20,
0x5f, 0x64, 0x46, 0xce, 0x52, 0x9a, 0x8b, 0x2c, 0x45, 0xe4, 0x97, 0xcf, 0xc2, 0xc8, 0x22, 0x7e, 0x36, 0x5f, 0x9c, 0x90, 0x33, 0x33, 0x79, 0x4b, 0xb4, 0x15, 0x3d, 0x0b, 0x23, 0x33, 0x72, 0x96,
0x41, 0xdc, 0xde, 0x1a, 0x8b, 0x2e, 0xe7, 0xe2, 0xf7, 0x3b, 0x74, 0x9b, 0x9f, 0x6c, 0x41, 0x64, 0xd2, 0x5c, 0x64, 0x29, 0x22, 0xbf, 0x7c, 0x30, 0x46, 0x16, 0xf1, 0x0b, 0xe2, 0xf6, 0xd6, 0x58,
0x08, 0x0c, 0x8c, 0xbf, 0x93, 0x01, 0x88, 0x5a, 0x87, 0x37, 0x4c, 0x94, 0xdc, 0x92, 0xc1, 0xd8, 0x74, 0x39, 0x17, 0xbf, 0xdf, 0xa1, 0xdb, 0xfc, 0x64, 0x0b, 0x22, 0x43, 0x60, 0x60, 0xfc, 0x9d,
0x5e, 0x4d, 0x46, 0x79, 0x03, 0xaa, 0x2a, 0x0c, 0x3c, 0x92, 0x84, 0x2a, 0x12, 0xc6, 0xc4, 0xa1, 0x0c, 0x40, 0xd4, 0x3a, 0xbc, 0x61, 0xa2, 0xe4, 0x96, 0x0c, 0xc6, 0xf6, 0x6a, 0x32, 0xca, 0x1b,
0x77, 0x60, 0xf9, 0x6c, 0xe2, 0x9d, 0xa0, 0xc4, 0x2a, 0xe4, 0x16, 0x1e, 0x45, 0x50, 0xe7, 0x60, 0x50, 0x55, 0x61, 0xe0, 0x91, 0x24, 0x54, 0x91, 0x30, 0x26, 0x0e, 0xbd, 0x03, 0xcb, 0x67, 0x13,
0x29, 0x8d, 0x44, 0x72, 0x53, 0x3e, 0x35, 0x52, 0x5c, 0x97, 0x82, 0x8c, 0xbf, 0x94, 0x55, 0xb1, 0xef, 0x04, 0x25, 0x56, 0x21, 0xb7, 0xf0, 0x28, 0x82, 0x3a, 0x07, 0x4b, 0x69, 0x24, 0x92, 0x9b,
0xa6, 0xd1, 0x48, 0xbc, 0x58, 0xbd, 0xfb, 0x69, 0xa2, 0x71, 0x5e, 0xe4, 0x5e, 0x7c, 0x0c, 0x75, 0xf2, 0xa9, 0x91, 0xe2, 0xba, 0x14, 0x64, 0xfc, 0xa5, 0xac, 0x8a, 0x35, 0x8d, 0x46, 0xe2, 0xc5,
0x9f, 0x1f, 0x4a, 0xf2, 0xc4, 0xca, 0xbf, 0xe0, 0xc4, 0xaa, 0xf9, 0x31, 0x49, 0xe7, 0xbb, 0xd0, 0xea, 0xdd, 0x4f, 0x13, 0x8d, 0xf3, 0x22, 0xf7, 0xe2, 0x63, 0xa8, 0xfb, 0xfc, 0x50, 0x92, 0x27,
0xb0, 0xc7, 0x17, 0xd4, 0x0f, 0x1d, 0xb4, 0xd6, 0xa3, 0x7c, 0x2c, 0xa2, 0x3b, 0x35, 0x38, 0x0a, 0x56, 0xfe, 0x05, 0x27, 0x56, 0xcd, 0x8f, 0x49, 0x3a, 0xdf, 0x85, 0x86, 0x3d, 0xbe, 0xa0, 0x7e,
0xa2, 0xef, 0xc0, 0xb2, 0xb8, 0xe7, 0xaf, 0x28, 0xc5, 0x2b, 0x63, 0x11, 0x98, 0x11, 0x1a, 0xff, 0xe8, 0xa0, 0xb5, 0x1e, 0xe5, 0x63, 0x11, 0xdd, 0xa9, 0xc1, 0x51, 0x10, 0x7d, 0x07, 0x96, 0xc5,
0x40, 0x06, 0xb7, 0xc6, 0x67, 0xf7, 0xc5, 0xa3, 0xa2, 0xf7, 0x30, 0xbb, 0xe8, 0x40, 0x15, 0x0b, 0x3d, 0x7f, 0x45, 0x29, 0xde, 0x1f, 0x8b, 0xc0, 0x8c, 0xd0, 0xf8, 0x07, 0x32, 0xb8, 0x35, 0x3e,
0x49, 0x38, 0x01, 0x04, 0x3f, 0xe2, 0x40, 0xe1, 0x02, 0x88, 0x0f, 0x6b, 0xfe, 0x55, 0x86, 0xd5, 0xbb, 0x2f, 0x1e, 0x15, 0xbd, 0x87, 0xd9, 0x45, 0x07, 0xaa, 0x58, 0x48, 0xc2, 0x09, 0x20, 0xf8,
0xf8, 0xd7, 0x19, 0x28, 0xee, 0x7b, 0xb3, 0x7d, 0x87, 0x5f, 0x91, 0xc0, 0x6d, 0xa2, 0x7c, 0x54, 0x11, 0x07, 0x0a, 0x17, 0x40, 0x7c, 0x58, 0xf3, 0xaf, 0x32, 0xac, 0xc6, 0xbf, 0xce, 0x40, 0x71,
0x4b, 0x2c, 0x89, 0xa1, 0x43, 0x2f, 0xb8, 0x29, 0x99, 0x2a, 0xe6, 0xd5, 0xe2, 0x62, 0xde, 0xe7, 0xdf, 0x9b, 0xed, 0x3b, 0xfc, 0x8a, 0x04, 0x6e, 0x13, 0xe5, 0xa3, 0x5a, 0x62, 0x49, 0x0c, 0x1d,
0x70, 0x0b, 0x5d, 0x80, 0xbe, 0x37, 0xf3, 0x7c, 0xb6, 0x55, 0xed, 0x09, 0x17, 0xf7, 0x3c, 0x37, 0x7a, 0xc1, 0x4d, 0xc9, 0x54, 0x31, 0xaf, 0x16, 0x17, 0xf3, 0x3e, 0x87, 0x5b, 0xe8, 0x02, 0xf4,
0x3c, 0x97, 0xbc, 0xf3, 0xe6, 0x29, 0xa5, 0x47, 0x1a, 0xc5, 0xa1, 0x22, 0xc0, 0x5b, 0xd2, 0x93, 0xbd, 0x99, 0xe7, 0xb3, 0xad, 0x6a, 0x4f, 0xb8, 0xb8, 0xe7, 0xb9, 0xe1, 0xb9, 0xe4, 0x9d, 0x37,
0xf0, 0xc2, 0xe2, 0x1a, 0xba, 0x90, 0x47, 0x39, 0x47, 0x5d, 0x66, 0x88, 0x0e, 0xc2, 0x51, 0x22, 0x4f, 0x29, 0x3d, 0xd2, 0x28, 0x0e, 0x15, 0x01, 0xde, 0x92, 0x9e, 0x84, 0x17, 0x16, 0xd7, 0xd0,
0x35, 0x3e, 0x85, 0xb2, 0x32, 0xf6, 0x90, 0x77, 0xa1, 0x7c, 0xee, 0xcd, 0x84, 0x45, 0x28, 0x13, 0x85, 0x3c, 0xca, 0x39, 0xea, 0x32, 0x43, 0x74, 0x10, 0x8e, 0x12, 0xa9, 0xf1, 0x29, 0x94, 0x95,
0xbb, 0x4d, 0x2a, 0x7a, 0x6d, 0x96, 0xce, 0xf9, 0x8f, 0xc0, 0xf8, 0xc3, 0x22, 0x14, 0xbb, 0xee, 0xb1, 0x87, 0xbc, 0x0b, 0xe5, 0x73, 0x6f, 0x26, 0x2c, 0x42, 0x99, 0xd8, 0x6d, 0x52, 0xd1, 0x6b,
0x85, 0xe7, 0x8c, 0x30, 0x3c, 0x76, 0x4a, 0xa7, 0x9e, 0x7c, 0x6c, 0x84, 0xfd, 0xc6, 0xe8, 0xae, 0xb3, 0x74, 0xce, 0x7f, 0x04, 0xc6, 0x1f, 0x16, 0xa1, 0xd8, 0x75, 0x2f, 0x3c, 0x67, 0x84, 0xe1,
0xe8, 0xad, 0xb0, 0x9c, 0x88, 0xee, 0x52, 0xaf, 0x84, 0xad, 0xc3, 0x92, 0xaf, 0x3f, 0xf6, 0x55, 0xb1, 0x53, 0x3a, 0xf5, 0xe4, 0x33, 0x24, 0xec, 0x37, 0x46, 0x77, 0x45, 0xaf, 0x88, 0xe5, 0x44,
0xf0, 0xf1, 0x52, 0x81, 0x3a, 0x2f, 0x0b, 0xda, 0x13, 0x2e, 0xac, 0x2c, 0x1e, 0xb9, 0x88, 0x43, 0x74, 0x97, 0x7a, 0x3f, 0x6c, 0x1d, 0x96, 0x7c, 0xfd, 0x19, 0xb0, 0x82, 0x8f, 0x97, 0x0a, 0xd4,
0xc6, 0x6f, 0x3a, 0x97, 0x11, 0x82, 0x03, 0xf6, 0x1a, 0x14, 0xc5, 0xe5, 0x4d, 0x7e, 0x95, 0x8c, 0x79, 0x59, 0xd0, 0x1e, 0x77, 0x61, 0x65, 0xf1, 0xc8, 0x45, 0x1c, 0x32, 0x7e, 0xd3, 0xb9, 0x8c,
0xdf, 0x02, 0x10, 0x20, 0x5c, 0x0d, 0x3e, 0xe5, 0x2e, 0x5c, 0x25, 0xc8, 0xe6, 0xcc, 0xaa, 0x04, 0x10, 0x1c, 0xb0, 0xd7, 0xa0, 0x28, 0x2e, 0x6f, 0xf2, 0xab, 0x64, 0xfc, 0x16, 0x80, 0x00, 0xe1,
0xee, 0xb2, 0xb5, 0x76, 0x07, 0x2a, 0x9c, 0x9e, 0x93, 0x94, 0x44, 0x54, 0x29, 0x82, 0x90, 0x20, 0x6a, 0xf0, 0x29, 0x77, 0xe1, 0x2a, 0x41, 0x36, 0x67, 0x56, 0x25, 0x70, 0x97, 0xad, 0xb5, 0x3b,
0xe5, 0xcd, 0xbc, 0x72, 0xea, 0x9b, 0x79, 0x18, 0xff, 0xac, 0xb8, 0x2c, 0xef, 0x22, 0xf0, 0x97, 0x50, 0xe1, 0xf4, 0x9c, 0xa4, 0x24, 0xa2, 0x4a, 0x11, 0x84, 0x04, 0x29, 0xaf, 0xe9, 0x95, 0x53,
0xd2, 0x34, 0xb8, 0x7c, 0x88, 0x52, 0xd8, 0x54, 0xf8, 0x23, 0x00, 0xd2, 0xa6, 0xf2, 0x26, 0xd4, 0x5f, 0xd3, 0xc3, 0xf8, 0x67, 0xc5, 0x65, 0x79, 0x17, 0x81, 0xbf, 0xa1, 0xa6, 0xc1, 0xe5, 0x13,
0x4e, 0xed, 0xc9, 0xe4, 0xc4, 0x1e, 0x3d, 0xe3, 0xa6, 0x80, 0x2a, 0xb7, 0x7e, 0x4a, 0x20, 0xda, 0x95, 0xc2, 0xa6, 0xc2, 0x1f, 0x01, 0x90, 0x36, 0x95, 0x37, 0xa1, 0x76, 0x6a, 0x4f, 0x26, 0x27,
0x02, 0xee, 0x40, 0x45, 0x9b, 0x65, 0x0c, 0x19, 0xcd, 0x9b, 0x10, 0xcd, 0x6f, 0xd2, 0xc2, 0x57, 0xf6, 0xe8, 0x19, 0x37, 0x05, 0x54, 0xb9, 0xf5, 0x53, 0x02, 0xd1, 0x16, 0x70, 0x07, 0x2a, 0xda,
0x7f, 0x05, 0x0b, 0x9f, 0x16, 0x3a, 0xbb, 0x1c, 0x0f, 0x9d, 0xbd, 0x85, 0xdc, 0x54, 0x04, 0x2d, 0x2c, 0x63, 0xc8, 0x68, 0xde, 0x84, 0x68, 0x7e, 0x93, 0x16, 0xbe, 0xfa, 0x2b, 0x58, 0xf8, 0xb4,
0x36, 0xf8, 0xb3, 0x5c, 0xf6, 0x78, 0x8c, 0x41, 0x8b, 0x68, 0xc8, 0xe2, 0x83, 0xc7, 0xf1, 0x2b, 0xd0, 0xd9, 0xe5, 0x78, 0xe8, 0xec, 0x2d, 0xe4, 0xa6, 0x22, 0x68, 0xb1, 0xc1, 0x1f, 0xec, 0xb2,
0x5c, 0x97, 0xe0, 0x30, 0x4e, 0x72, 0x9b, 0x9b, 0xa9, 0x67, 0xb6, 0x33, 0xc6, 0x9b, 0x1c, 0xdc, 0xc7, 0x63, 0x0c, 0x5a, 0x44, 0x43, 0x16, 0x1f, 0x3c, 0x8e, 0x5f, 0xe1, 0xba, 0x04, 0x87, 0x71,
0x7a, 0x50, 0xb4, 0xa7, 0xe1, 0x91, 0xed, 0x60, 0xb8, 0x96, 0x44, 0xe3, 0xe9, 0xb8, 0xca, 0xc7, 0x92, 0xdb, 0xdc, 0x4c, 0x3d, 0xb3, 0x9d, 0x31, 0xde, 0xe4, 0xe0, 0xd6, 0x83, 0xa2, 0x3d, 0x0d,
0x5f, 0xa0, 0x07, 0xfc, 0x89, 0x0b, 0x45, 0x31, 0x55, 0xb7, 0xf8, 0xcd, 0x8a, 0x20, 0xc1, 0x75, 0x8f, 0x6c, 0x07, 0xc3, 0xb5, 0x24, 0x1a, 0x4f, 0xc7, 0x55, 0x3e, 0xfe, 0x02, 0x3d, 0xe0, 0x4f,
0xf0, 0x01, 0x46, 0xf9, 0x84, 0x14, 0xef, 0xe9, 0xd7, 0x1f, 0xde, 0x52, 0xc1, 0x07, 0xb8, 0x4a, 0x5c, 0x28, 0x8a, 0xa9, 0xba, 0xc5, 0x6f, 0x56, 0x04, 0x09, 0xae, 0x83, 0x0f, 0x30, 0xca, 0x27,
0xe5, 0x7f, 0xee, 0x1c, 0xe3, 0x94, 0x4c, 0xb8, 0xe3, 0x3e, 0xba, 0x8d, 0x98, 0xfc, 0x2b, 0x48, 0xa4, 0x78, 0x4f, 0xbf, 0xfe, 0xf0, 0x96, 0x0a, 0x3e, 0xc0, 0x55, 0x2a, 0xff, 0x73, 0xe7, 0x18,
0xd1, 0x47, 0xc7, 0x09, 0xc8, 0xa7, 0x9a, 0xfe, 0xda, 0x44, 0xe2, 0xd7, 0x12, 0xe5, 0x5f, 0x77, 0xa7, 0x64, 0xc2, 0x1d, 0xf7, 0xd1, 0x6d, 0xc4, 0xe4, 0x5f, 0x41, 0x8a, 0x3e, 0x3a, 0x4e, 0x40,
0x55, 0xee, 0x36, 0x80, 0x13, 0xb0, 0x53, 0x26, 0xa0, 0xee, 0x18, 0xaf, 0xdb, 0x97, 0xcc, 0xb2, 0x3e, 0xd5, 0xf4, 0xd7, 0x26, 0x12, 0xbf, 0x96, 0x28, 0xff, 0xba, 0xab, 0x72, 0xb7, 0x01, 0x9c,
0x13, 0x3c, 0xe5, 0x80, 0x6f, 0x57, 0xb1, 0x6d, 0x41, 0x55, 0xef, 0x26, 0x29, 0x41, 0xbe, 0x7f, 0x80, 0x9d, 0x32, 0x01, 0x75, 0xc7, 0x78, 0xdd, 0xbe, 0x64, 0x96, 0x9d, 0xe0, 0x29, 0x07, 0x7c,
0xd4, 0xe9, 0x35, 0x6e, 0x90, 0x0a, 0x14, 0x07, 0x9d, 0xe1, 0xf0, 0x00, 0x3d, 0x7d, 0x55, 0x28, 0xbb, 0x8a, 0x6d, 0x0b, 0xaa, 0x7a, 0x37, 0x49, 0x09, 0xf2, 0xfd, 0xa3, 0x4e, 0xaf, 0x71, 0x83,
0xa9, 0xcb, 0xb4, 0x59, 0x96, 0x6a, 0xb5, 0xdb, 0x9d, 0xa3, 0x61, 0x67, 0xb7, 0x91, 0xfb, 0x51, 0x54, 0xa0, 0x38, 0xe8, 0x0c, 0x87, 0x07, 0xe8, 0xe9, 0xab, 0x42, 0x49, 0x5d, 0xa6, 0xcd, 0xb2,
0xbe, 0x94, 0x6d, 0xe4, 0x8c, 0x3f, 0xca, 0x41, 0x45, 0x1b, 0x85, 0x17, 0x33, 0xe3, 0xdb, 0x00, 0x54, 0xab, 0xdd, 0xee, 0x1c, 0x0d, 0x3b, 0xbb, 0x8d, 0xdc, 0x8f, 0xf2, 0xa5, 0x6c, 0x23, 0x67,
0xa8, 0x49, 0x46, 0x31, 0xad, 0x79, 0xb3, 0xcc, 0x20, 0x7c, 0xf2, 0x75, 0x1f, 0x05, 0x7f, 0xef, 0xfc, 0x51, 0x0e, 0x2a, 0xda, 0x28, 0xbc, 0x98, 0x19, 0xdf, 0x06, 0x40, 0x4d, 0x32, 0x8a, 0x69,
0x44, 0xf9, 0x28, 0xde, 0x84, 0x1a, 0x7f, 0x91, 0x44, 0xf7, 0xd7, 0x16, 0xcc, 0x2a, 0x07, 0x0a, 0xcd, 0x9b, 0x65, 0x06, 0xe1, 0x93, 0xaf, 0xfb, 0x28, 0xc4, 0xc3, 0x32, 0xd2, 0x47, 0xf1, 0x26,
0x56, 0x8d, 0x57, 0xf3, 0x91, 0x08, 0x2f, 0x3d, 0x8a, 0x27, 0x93, 0x38, 0x08, 0xaf, 0x3d, 0xe2, 0xd4, 0xf8, 0x8b, 0x24, 0xba, 0xbf, 0xb6, 0x60, 0x56, 0x39, 0x50, 0xb0, 0x6a, 0xbc, 0x9a, 0x8f,
0x9d, 0xd5, 0xc0, 0x9b, 0x5c, 0x50, 0x4e, 0xc1, 0x25, 0xc2, 0x8a, 0x80, 0x0d, 0xc5, 0xb3, 0x07, 0x44, 0x78, 0xe9, 0x51, 0x3c, 0xa6, 0xc4, 0x41, 0x78, 0xed, 0x11, 0xef, 0xac, 0x06, 0xde, 0xe4,
0x82, 0x1f, 0x6a, 0x77, 0xc3, 0x0b, 0x66, 0x95, 0x03, 0x45, 0x45, 0xdf, 0x93, 0x0b, 0x88, 0x47, 0x82, 0x72, 0x0a, 0x2e, 0x11, 0x56, 0x04, 0x6c, 0x28, 0x9e, 0x3d, 0x10, 0xfc, 0x50, 0xbb, 0x1b,
0xaf, 0x6c, 0x2e, 0xae, 0x86, 0xd8, 0xe2, 0x39, 0x58, 0x30, 0x23, 0x96, 0x71, 0x61, 0x7c, 0x67, 0x5e, 0x30, 0xab, 0x1c, 0x28, 0x2a, 0xfa, 0x9e, 0x5c, 0x40, 0x3c, 0x7a, 0x65, 0x73, 0x71, 0x35,
0x31, 0xdf, 0xcb, 0xcd, 0x89, 0xe4, 0x5d, 0x20, 0xd3, 0xd9, 0xcc, 0x4a, 0x31, 0xf0, 0xe5, 0xcd, 0xc4, 0x16, 0xcf, 0xc1, 0x82, 0x19, 0xb1, 0x8c, 0x0b, 0xe3, 0x3b, 0x8b, 0xf9, 0x5e, 0x6e, 0x4e,
0xe5, 0xe9, 0x6c, 0x36, 0xd4, 0xec, 0x5f, 0xdf, 0x82, 0xed, 0xf1, 0x6b, 0x20, 0x2d, 0xb6, 0x81, 0x24, 0xef, 0x02, 0x99, 0xce, 0x66, 0x56, 0x8a, 0x81, 0x2f, 0x6f, 0x2e, 0x4f, 0x67, 0xb3, 0xa1,
0xb1, 0x89, 0x4a, 0x15, 0x8b, 0xd8, 0x72, 0x46, 0x67, 0xcb, 0x29, 0xdc, 0x2f, 0x9b, 0xca, 0xfd, 0x66, 0xff, 0xfa, 0x16, 0x6c, 0x8f, 0x5f, 0x03, 0x69, 0xb1, 0x0d, 0x8c, 0x4d, 0x54, 0xaa, 0x58,
0x5e, 0xc4, 0x27, 0x8c, 0x3d, 0xa8, 0x1c, 0x69, 0x0f, 0x33, 0xde, 0x65, 0x27, 0x84, 0x7c, 0x92, 0xc4, 0x96, 0x33, 0x3a, 0x5b, 0x4e, 0xe1, 0x7e, 0xd9, 0x54, 0xee, 0xf7, 0x22, 0x3e, 0x61, 0xec,
0x91, 0x9f, 0x1d, 0xdc, 0xa6, 0xe8, 0x8b, 0x97, 0x18, 0xb5, 0xd6, 0x64, 0xb5, 0xd6, 0x18, 0x7f, 0x41, 0xe5, 0x48, 0x7b, 0xb2, 0xf1, 0x2e, 0x3b, 0x21, 0xe4, 0x63, 0x8d, 0xfc, 0xec, 0xe0, 0x36,
0x2b, 0xc3, 0x1f, 0xb2, 0x52, 0x8d, 0x8f, 0xde, 0x82, 0x94, 0xee, 0xb7, 0xe8, 0x09, 0x87, 0x8a, 0x45, 0x5f, 0xbc, 0xd1, 0xa8, 0xb5, 0x26, 0xab, 0xb5, 0xc6, 0xf8, 0x5b, 0x19, 0xfe, 0xc4, 0x95,
0x74, 0xbb, 0x89, 0xd7, 0x17, 0xb0, 0x69, 0x96, 0x77, 0x7a, 0x1a, 0x50, 0x19, 0xe3, 0x51, 0x41, 0x6a, 0x7c, 0xf4, 0x4a, 0xa4, 0x74, 0xbf, 0x45, 0x4f, 0x38, 0x54, 0xa4, 0xdb, 0x4d, 0xbc, 0xbe,
0x58, 0x1f, 0x41, 0x52, 0xf8, 0x66, 0x12, 0xbe, 0xc3, 0xcb, 0x0f, 0x44, 0x60, 0x07, 0x13, 0xbe, 0x80, 0x4d, 0xb3, 0xbc, 0xd3, 0xd3, 0x80, 0xca, 0x18, 0x8f, 0x0a, 0xc2, 0xfa, 0x08, 0x92, 0xc2,
0x0f, 0xed, 0x4b, 0x51, 0x6b, 0xc0, 0x44, 0x10, 0xe1, 0x1f, 0x90, 0x57, 0x98, 0x55, 0xda, 0xf8, 0x37, 0x93, 0xf0, 0x1d, 0x5e, 0x7e, 0x20, 0x02, 0x3b, 0x98, 0xf0, 0x7d, 0x68, 0x5f, 0x8a, 0x5a,
0xeb, 0xe2, 0x95, 0x89, 0xe4, 0xf8, 0xde, 0x87, 0x92, 0x2a, 0x35, 0x7e, 0xc2, 0x4a, 0x4a, 0x85, 0x03, 0x26, 0x82, 0x08, 0xff, 0x80, 0xbc, 0xc2, 0xac, 0xd2, 0xc6, 0x5f, 0x17, 0xaf, 0x4c, 0x24,
0x67, 0xe7, 0x38, 0x1a, 0x43, 0x62, 0x2d, 0xe6, 0x9b, 0x0b, 0x7d, 0x3c, 0x5d, 0xad, 0xd5, 0xef, 0xc7, 0xf7, 0x3e, 0x94, 0x54, 0xa9, 0xf1, 0x13, 0x56, 0x52, 0x2a, 0x3c, 0x3b, 0xc7, 0xd1, 0x18,
0x01, 0x39, 0x75, 0xfc, 0x24, 0x31, 0xdf, 0x6c, 0x0d, 0xc4, 0x68, 0xd4, 0xc6, 0x31, 0xac, 0x4a, 0x12, 0x6b, 0x31, 0xdf, 0x5c, 0xe8, 0xe3, 0xe9, 0x6a, 0xad, 0x7e, 0x0f, 0xc8, 0xa9, 0xe3, 0x27,
0x2e, 0xa1, 0x69, 0x04, 0xf1, 0xc9, 0xcb, 0xbc, 0x84, 0xc9, 0x67, 0x17, 0x98, 0xbc, 0xf1, 0x1b, 0x89, 0xf9, 0x66, 0x6b, 0x20, 0x46, 0xa3, 0x36, 0x8e, 0x61, 0x55, 0x72, 0x09, 0x4d, 0x23, 0x88,
0x05, 0x28, 0xca, 0x47, 0x4e, 0xd3, 0x1e, 0xe6, 0x2c, 0xc7, 0x1f, 0xe6, 0x6c, 0xc6, 0x9e, 0x6b, 0x4f, 0x5e, 0xe6, 0x25, 0x4c, 0x3e, 0xbb, 0xc0, 0xe4, 0x8d, 0xdf, 0x28, 0x40, 0x51, 0x3e, 0x7f,
0xc3, 0xa9, 0x17, 0xe7, 0xfd, 0x3b, 0xc9, 0x23, 0x5b, 0xf3, 0x55, 0xc4, 0x8e, 0x6d, 0xe1, 0xab, 0x9a, 0xf6, 0x64, 0x67, 0x39, 0xfe, 0x64, 0x67, 0x33, 0xf6, 0x90, 0x1b, 0x4e, 0xbd, 0x38, 0xef,
0x28, 0xc4, 0x7d, 0x15, 0x69, 0x8f, 0x95, 0x72, 0xd1, 0x73, 0xe1, 0xb1, 0xd2, 0x5b, 0xc0, 0xe5, 0xdf, 0x49, 0x1e, 0xd9, 0x9a, 0xaf, 0x22, 0x76, 0x6c, 0x0b, 0x5f, 0x45, 0x21, 0xee, 0xab, 0x48,
0x08, 0x2d, 0xb8, 0xad, 0x84, 0x00, 0x71, 0x0d, 0x5f, 0x13, 0x3b, 0x4a, 0x49, 0xb1, 0xe3, 0x95, 0x7b, 0xc6, 0x94, 0x8b, 0x9e, 0x0b, 0xcf, 0x98, 0xde, 0x02, 0x2e, 0x47, 0x68, 0xc1, 0x6d, 0x25,
0x45, 0x82, 0x8f, 0x60, 0x89, 0xbf, 0x58, 0x23, 0xae, 0x64, 0xcb, 0x83, 0x43, 0x8c, 0x95, 0xfc, 0x04, 0x88, 0x6b, 0xf8, 0x9a, 0xd8, 0x51, 0x4a, 0x8a, 0x1d, 0xaf, 0x2c, 0x12, 0x7c, 0x04, 0x4b,
0xcf, 0xef, 0x4c, 0x98, 0x82, 0x56, 0x7f, 0xf9, 0xaf, 0x12, 0x7b, 0xf9, 0x4f, 0xf7, 0xa1, 0x54, 0xfc, 0xc5, 0x1a, 0x71, 0x25, 0x5b, 0x1e, 0x1c, 0x62, 0xac, 0xe4, 0x7f, 0x7e, 0x67, 0xc2, 0x14,
0xe3, 0x3e, 0x94, 0x7b, 0xd0, 0x50, 0x03, 0x87, 0x16, 0x49, 0x37, 0x10, 0xd7, 0x31, 0xeb, 0x12, 0xb4, 0xfa, 0x9b, 0x80, 0x95, 0xd8, 0x9b, 0x80, 0xba, 0x0f, 0xa5, 0x1a, 0xf7, 0xa1, 0xdc, 0x83,
0xce, 0xb8, 0x61, 0x2f, 0x88, 0x0e, 0xbe, 0x7a, 0xec, 0xe0, 0x63, 0xbc, 0xaa, 0x15, 0x86, 0x74, 0x86, 0x1a, 0x38, 0xb4, 0x48, 0xba, 0x81, 0xb8, 0x8e, 0x59, 0x97, 0x70, 0xc6, 0x0d, 0x7b, 0x41,
0x3a, 0x0b, 0xe5, 0xc1, 0xa7, 0xbd, 0x0f, 0xcb, 0x67, 0x9e, 0xdf, 0x17, 0x91, 0xd3, 0xcb, 0x57, 0x74, 0xf0, 0xd5, 0x63, 0x07, 0x1f, 0xe3, 0x55, 0xad, 0x30, 0xa4, 0xd3, 0x59, 0x28, 0x0f, 0x3e,
0xc7, 0x0e, 0xd4, 0x4f, 0x6d, 0x67, 0x32, 0xf7, 0xa9, 0xe5, 0x53, 0x3b, 0xf0, 0x5c, 0xdc, 0xfc, 0xed, 0xe5, 0x58, 0x3e, 0xf3, 0xfc, 0xbe, 0x88, 0x9c, 0x5e, 0xbe, 0x3a, 0x76, 0xa0, 0x7e, 0x6a,
0xd1, 0x19, 0x2c, 0xba, 0xb8, 0xc7, 0x69, 0x4c, 0x24, 0x31, 0x6b, 0xa7, 0x7a, 0x12, 0x6f, 0x5d, 0x3b, 0x93, 0xb9, 0x4f, 0x2d, 0x9f, 0xda, 0x81, 0xe7, 0xe2, 0xe6, 0x8f, 0xce, 0x60, 0xd1, 0xc5,
0xe9, 0x23, 0xc1, 0x8e, 0x2c, 0x71, 0x31, 0x9b, 0xc7, 0xaa, 0x74, 0x7b, 0xd6, 0xde, 0x41, 0xf7, 0x3d, 0x4e, 0x63, 0x22, 0x89, 0x59, 0x3b, 0xd5, 0x93, 0x78, 0xeb, 0x4a, 0x1f, 0x09, 0x76, 0x64,
0xc9, 0xfe, 0xb0, 0x91, 0x61, 0xc9, 0xc1, 0x71, 0xbb, 0xdd, 0xe9, 0xec, 0xe2, 0x11, 0x06, 0xb0, 0x89, 0x8b, 0xd9, 0x3c, 0x56, 0xa5, 0xdb, 0xb3, 0xf6, 0x0e, 0xba, 0x4f, 0xf6, 0x87, 0x8d, 0x0c,
0xb4, 0xd7, 0xea, 0x1e, 0x88, 0x03, 0x2c, 0xdf, 0x28, 0x18, 0xff, 0x24, 0x0b, 0x15, 0xad, 0x37, 0x4b, 0x0e, 0x8e, 0xdb, 0xed, 0x4e, 0x67, 0x17, 0x8f, 0x30, 0x80, 0xa5, 0xbd, 0x56, 0xf7, 0x40,
0xe4, 0x91, 0x9a, 0x04, 0xfe, 0x14, 0xc4, 0xed, 0xc5, 0x1e, 0x6f, 0x4b, 0x0e, 0xaf, 0xcd, 0x82, 0x1c, 0x60, 0xf9, 0x46, 0xc1, 0xf8, 0x27, 0x59, 0xa8, 0x68, 0xbd, 0x21, 0x8f, 0xd4, 0x24, 0xf0,
0x7a, 0x09, 0x36, 0x7b, 0xed, 0x4b, 0xb0, 0xe4, 0x6d, 0x58, 0xb6, 0x79, 0x09, 0x6a, 0xd0, 0x85, 0xa7, 0x20, 0x6e, 0x2f, 0xf6, 0x78, 0x5b, 0x72, 0x78, 0x6d, 0x16, 0xd4, 0x1b, 0xb1, 0xd9, 0x6b,
0x71, 0x5f, 0x80, 0xc5, 0x98, 0xbf, 0x2d, 0x9e, 0xa5, 0x10, 0xc7, 0x14, 0xa3, 0xcb, 0xcb, 0xa0, 0xdf, 0x88, 0x25, 0x6f, 0xc3, 0xb2, 0xcd, 0x4b, 0x50, 0x83, 0x2e, 0x8c, 0xfb, 0x02, 0x2c, 0xc6,
0x4d, 0x75, 0x52, 0xe1, 0xdc, 0x14, 0xc5, 0xc8, 0x08, 0x67, 0xbc, 0x3a, 0xf0, 0xc5, 0x78, 0x49, 0xfc, 0x6d, 0xf1, 0x2c, 0x85, 0x38, 0xa6, 0x18, 0x5d, 0x5e, 0x06, 0x6d, 0xaa, 0x93, 0x0a, 0xe7,
0x34, 0xbf, 0x8a, 0xa9, 0xad, 0xf0, 0xaa, 0xa9, 0xd2, 0xc6, 0xc7, 0x00, 0x51, 0x7f, 0xe2, 0xc3, 0xa6, 0x28, 0x46, 0x46, 0x38, 0xe3, 0xd5, 0x81, 0x2f, 0xc6, 0x4b, 0xa2, 0xf9, 0x55, 0x4c, 0x6d,
0x77, 0x23, 0x3e, 0x7c, 0x19, 0x6d, 0xf8, 0xb2, 0xc6, 0xdf, 0x17, 0xac, 0x4b, 0xcc, 0x85, 0x32, 0x85, 0x57, 0x4d, 0x95, 0x36, 0x3e, 0x06, 0x88, 0xfa, 0x13, 0x1f, 0xbe, 0x1b, 0xf1, 0xe1, 0xcb,
0xf5, 0x7d, 0x0f, 0xa4, 0xf1, 0xd1, 0xc2, 0x20, 0xef, 0xd9, 0x84, 0x86, 0xf2, 0x36, 0xe9, 0x8a, 0x68, 0xc3, 0x97, 0x35, 0xfe, 0xbe, 0x60, 0x5d, 0x62, 0x2e, 0x94, 0xa9, 0xef, 0x7b, 0x20, 0x8d,
0xc0, 0x74, 0x15, 0x62, 0x81, 0xd5, 0x66, 0x17, 0x59, 0xed, 0x1b, 0x50, 0xc5, 0x77, 0xce, 0x44, 0x8f, 0x16, 0x06, 0x79, 0xcf, 0x26, 0x34, 0x94, 0xb7, 0x49, 0x57, 0x04, 0xa6, 0xab, 0x10, 0x0b,
0x45, 0x82, 0x5d, 0x55, 0xa6, 0xf6, 0xa5, 0xac, 0x3b, 0xc6, 0x63, 0xf3, 0x09, 0x1e, 0xfb, 0x37, 0xac, 0x36, 0xbb, 0xc8, 0x6a, 0xdf, 0x80, 0x2a, 0xbe, 0x73, 0x26, 0x2a, 0x12, 0xec, 0xaa, 0x32,
0x32, 0xfc, 0x51, 0x9c, 0xa8, 0xa1, 0x11, 0x93, 0x55, 0x65, 0xc6, 0x99, 0xac, 0x20, 0x35, 0x15, 0xb5, 0x2f, 0x65, 0xdd, 0x31, 0x1e, 0x9b, 0x4f, 0xf0, 0xd8, 0xbf, 0x91, 0xe1, 0x8f, 0xe2, 0x44,
0xfe, 0x1a, 0xc6, 0x99, 0x4d, 0x67, 0x9c, 0xe9, 0x2c, 0x39, 0x97, 0xca, 0x92, 0x8d, 0x2d, 0x68, 0x0d, 0x8d, 0x98, 0xac, 0x2a, 0x33, 0xce, 0x64, 0x05, 0xa9, 0xa9, 0xf0, 0xd7, 0x30, 0xce, 0x6c,
0xee, 0x52, 0x36, 0x14, 0xad, 0xc9, 0x24, 0x31, 0x96, 0xc6, 0x2d, 0xb8, 0x99, 0x82, 0x13, 0x56, 0x3a, 0xe3, 0x4c, 0x67, 0xc9, 0xb9, 0x54, 0x96, 0x6c, 0x6c, 0x41, 0x73, 0x97, 0xb2, 0xa1, 0x68,
0x9b, 0xdf, 0xcc, 0xc0, 0x7a, 0x8b, 0xbf, 0x85, 0xf1, 0xad, 0x5d, 0xf7, 0xfc, 0x0c, 0x6e, 0xaa, 0x4d, 0x26, 0x89, 0xb1, 0x34, 0x6e, 0xc1, 0xcd, 0x14, 0x9c, 0xb0, 0xda, 0xfc, 0x66, 0x06, 0xd6,
0x88, 0x6d, 0xed, 0x16, 0x99, 0xfe, 0x90, 0x91, 0x0c, 0xf6, 0xd6, 0xee, 0x29, 0xb0, 0x33, 0xd3, 0x5b, 0xfc, 0x2d, 0x8c, 0x6f, 0xed, 0xba, 0xe7, 0x67, 0x70, 0x53, 0x45, 0x6c, 0x6b, 0xb7, 0xc8,
0x68, 0xc2, 0x46, 0xb2, 0x35, 0xa2, 0xa1, 0x7b, 0xb0, 0xb2, 0x4b, 0x4f, 0xe6, 0x67, 0x07, 0xf4, 0xf4, 0x87, 0x8c, 0x64, 0xb0, 0xb7, 0x76, 0x4f, 0x81, 0x9d, 0x99, 0x46, 0x13, 0x36, 0x92, 0xad,
0x22, 0x6a, 0x23, 0x81, 0x7c, 0x70, 0xee, 0x3d, 0x17, 0x0b, 0x03, 0x7f, 0x63, 0x48, 0x27, 0xa3, 0x11, 0x0d, 0xdd, 0x83, 0x95, 0x5d, 0x7a, 0x32, 0x3f, 0x3b, 0xa0, 0x17, 0x51, 0x1b, 0x09, 0xe4,
0xb1, 0x82, 0x19, 0x1d, 0x49, 0xab, 0x3f, 0x42, 0x06, 0x33, 0x3a, 0x32, 0x1e, 0x01, 0xd1, 0xcb, 0x83, 0x73, 0xef, 0xb9, 0x58, 0x18, 0xf8, 0x1b, 0x43, 0x3a, 0x19, 0x8d, 0x15, 0xcc, 0xe8, 0x48,
0x11, 0xb3, 0xc8, 0x54, 0xb2, 0xf9, 0x89, 0x15, 0x5c, 0x05, 0x21, 0x9d, 0xca, 0x1b, 0x92, 0x10, 0x5a, 0xfd, 0x11, 0x32, 0x98, 0xd1, 0x91, 0xf1, 0x08, 0x88, 0x5e, 0x8e, 0x98, 0x45, 0xa6, 0x92,
0xcc, 0x4f, 0x06, 0x1c, 0x62, 0xbc, 0x03, 0xd5, 0x23, 0xfb, 0xca, 0xa4, 0x5f, 0x8b, 0x8b, 0x88, 0xcd, 0x4f, 0xac, 0xe0, 0x2a, 0x08, 0xe9, 0x54, 0xde, 0x90, 0x84, 0x60, 0x7e, 0x32, 0xe0, 0x10,
0x9b, 0x50, 0x9c, 0xd9, 0x57, 0x8c, 0x17, 0x2b, 0x07, 0x20, 0xa2, 0x8d, 0x7f, 0x98, 0x87, 0x25, 0xe3, 0x1d, 0xa8, 0x1e, 0xd9, 0x57, 0x26, 0xfd, 0x5a, 0x5c, 0x44, 0xdc, 0x84, 0xe2, 0xcc, 0xbe,
0x4e, 0x49, 0xee, 0xf2, 0x37, 0xda, 0x1d, 0x17, 0x79, 0xa1, 0x3c, 0x95, 0x34, 0xd0, 0xc2, 0xc1, 0x62, 0xbc, 0x58, 0x39, 0x00, 0x11, 0x6d, 0xfc, 0xc3, 0x3c, 0x2c, 0x71, 0x4a, 0x72, 0x97, 0xbf,
0x95, 0x5d, 0x3c, 0xb8, 0x84, 0xb5, 0x52, 0x3e, 0xb4, 0x26, 0x5d, 0x35, 0xee, 0x7c, 0x2a, 0x5f, 0xde, 0xee, 0xb8, 0xc8, 0x0b, 0xe5, 0xa9, 0xa4, 0x81, 0x16, 0x0e, 0xae, 0xec, 0xe2, 0xc1, 0x25,
0x57, 0x8b, 0x3f, 0x05, 0x91, 0x8f, 0xde, 0xf6, 0xe7, 0xd7, 0xe0, 0xe3, 0xce, 0xf4, 0x48, 0xf1, 0xac, 0x95, 0xf2, 0xa1, 0x35, 0xe9, 0xaa, 0x71, 0xe7, 0x53, 0xf9, 0xba, 0x5a, 0xfc, 0x29, 0x88,
0xe3, 0xad, 0x93, 0xe7, 0xb1, 0x38, 0xb3, 0x74, 0x50, 0xaa, 0x76, 0x59, 0x94, 0xb7, 0x6b, 0xe3, 0x7c, 0xf4, 0xea, 0x3f, 0xbf, 0x06, 0x1f, 0x77, 0xa6, 0x47, 0x8a, 0x1f, 0x6f, 0x9d, 0x3c, 0x8f,
0xda, 0xe5, 0x82, 0x16, 0x59, 0x7a, 0xb9, 0x16, 0xc9, 0xcd, 0x98, 0x2f, 0xd0, 0x22, 0xe1, 0x15, 0xc5, 0x99, 0xa5, 0x83, 0x52, 0xb5, 0xcb, 0xa2, 0xbc, 0x5d, 0x1b, 0xd7, 0x2e, 0x17, 0xb4, 0xc8,
0xb4, 0xc8, 0x57, 0x70, 0x64, 0xdf, 0x84, 0x12, 0x0a, 0x59, 0xda, 0x11, 0xc6, 0x84, 0x2b, 0x76, 0xd2, 0xcb, 0xb5, 0x48, 0x6e, 0xc6, 0x7c, 0x81, 0x16, 0x09, 0xaf, 0xa0, 0x45, 0xbe, 0x82, 0x23,
0x84, 0x7d, 0xa2, 0xe9, 0x59, 0x3c, 0x8a, 0x46, 0x3b, 0x43, 0x4c, 0xfa, 0xf5, 0xcf, 0xc7, 0x41, 0xfb, 0x26, 0x94, 0x50, 0xc8, 0xd2, 0x8e, 0x30, 0x26, 0x5c, 0xb1, 0x23, 0xec, 0x13, 0x4d, 0xcf,
0xf8, 0x15, 0x14, 0x05, 0x94, 0x2d, 0x68, 0xd7, 0x9e, 0xca, 0x27, 0x3b, 0xf1, 0x37, 0x1b, 0x36, 0xe2, 0x51, 0x34, 0xda, 0x19, 0x62, 0xd2, 0xaf, 0x7f, 0x3e, 0x0e, 0xc2, 0xaf, 0xa0, 0x28, 0xa0,
0x7c, 0x60, 0xef, 0xeb, 0xb9, 0xe3, 0xd3, 0xb1, 0x7c, 0xe6, 0xcb, 0xc1, 0xfd, 0xcd, 0x20, 0xac, 0x6c, 0x41, 0xbb, 0xf6, 0x54, 0x3e, 0xe6, 0x89, 0xbf, 0xd9, 0xb0, 0xe1, 0x03, 0x7b, 0x5f, 0xcf,
0x83, 0x4c, 0xe7, 0x73, 0xbd, 0xe7, 0xae, 0xe0, 0x5b, 0x45, 0x27, 0x78, 0xca, 0x92, 0x06, 0x81, 0x1d, 0x9f, 0x8e, 0xe5, 0x33, 0x5f, 0x0e, 0xee, 0x6f, 0x06, 0x61, 0x1d, 0x64, 0x3a, 0x9f, 0xeb,
0x06, 0x3e, 0xf0, 0x3b, 0xf3, 0x7c, 0x29, 0x21, 0x18, 0xbf, 0x9b, 0x81, 0x86, 0xd8, 0x5d, 0x0a, 0x3d, 0x77, 0x05, 0xdf, 0x2a, 0x3a, 0xc1, 0x53, 0x96, 0x34, 0x08, 0x34, 0xf0, 0xe9, 0xdf, 0x99,
0xa7, 0xab, 0x5c, 0x85, 0xeb, 0x82, 0x3e, 0x5e, 0xfc, 0x68, 0x97, 0x01, 0x35, 0xb4, 0x34, 0x29, 0xe7, 0x4b, 0x09, 0xc1, 0xf8, 0xdd, 0x0c, 0x34, 0xc4, 0xee, 0x52, 0x38, 0x5d, 0xe5, 0x2a, 0x5c,
0x71, 0x81, 0x5b, 0xca, 0x2a, 0x0c, 0xb8, 0x27, 0x44, 0x86, 0xd7, 0xa1, 0x22, 0x03, 0xce, 0xa7, 0x17, 0xf4, 0xf1, 0xe2, 0x47, 0xbb, 0x0c, 0xa8, 0xa1, 0xa5, 0x49, 0x89, 0x0b, 0xdc, 0x52, 0x56,
0xce, 0x44, 0x7e, 0xc6, 0x83, 0x47, 0x9c, 0x1f, 0x3a, 0x13, 0x29, 0x6d, 0xf8, 0xb6, 0xb8, 0xed, 0x61, 0xc0, 0x3d, 0x21, 0x32, 0xbc, 0x0e, 0x15, 0x19, 0x70, 0x3e, 0x75, 0x26, 0xf2, 0x03, 0x1f,
0x9d, 0x41, 0x69, 0xc3, 0xb4, 0x43, 0x6a, 0xfc, 0xe3, 0x0c, 0xac, 0x68, 0x5d, 0x11, 0xfb, 0xf6, 0x3c, 0xe2, 0xfc, 0xd0, 0x99, 0x48, 0x69, 0xc3, 0xb7, 0xc5, 0x6d, 0xef, 0x0c, 0x4a, 0x1b, 0xa6,
0xfb, 0x50, 0x55, 0x2f, 0x6b, 0x53, 0x25, 0xe6, 0x6e, 0xc6, 0x79, 0x54, 0x94, 0xad, 0x32, 0x52, 0x1d, 0x52, 0xe3, 0x1f, 0x67, 0x60, 0x45, 0xeb, 0x8a, 0xd8, 0xb7, 0xdf, 0x87, 0xaa, 0x7a, 0x73,
0x90, 0x80, 0x35, 0x66, 0x6c, 0x5f, 0xf1, 0xa8, 0xe8, 0xf9, 0x54, 0x6a, 0x92, 0x63, 0xfb, 0x6a, 0x9b, 0x2a, 0x31, 0x77, 0x33, 0xce, 0xa3, 0xa2, 0x6c, 0x95, 0x91, 0x82, 0x04, 0xac, 0x31, 0x63,
0x8f, 0xd2, 0xc1, 0x7c, 0x4a, 0xee, 0x42, 0xf5, 0x39, 0xa5, 0xcf, 0x14, 0x01, 0x67, 0xbd, 0xc0, 0xfb, 0x8a, 0x47, 0x45, 0xcf, 0xa7, 0x52, 0x93, 0x1c, 0xdb, 0x57, 0x7b, 0x94, 0x0e, 0xe6, 0x53,
0x60, 0x82, 0xc2, 0x80, 0xda, 0xd4, 0x73, 0xc3, 0x73, 0x45, 0x22, 0x44, 0x7c, 0x04, 0x72, 0x1a, 0x72, 0x17, 0xaa, 0xcf, 0x29, 0x7d, 0xa6, 0x08, 0x38, 0xeb, 0x05, 0x06, 0x13, 0x14, 0x06, 0xd4,
0xe3, 0x0f, 0xb2, 0xb0, 0xca, 0xed, 0x99, 0xc2, 0x8e, 0x2c, 0x58, 0x57, 0x13, 0x96, 0xb8, 0x69, 0xa6, 0x9e, 0x1b, 0x9e, 0x2b, 0x12, 0x21, 0xe2, 0x23, 0x90, 0xd3, 0x18, 0x7f, 0x90, 0x85, 0x55,
0x97, 0x33, 0xaf, 0xfd, 0x1b, 0xa6, 0x48, 0x93, 0x8f, 0x5e, 0xd1, 0x06, 0x2b, 0x2f, 0x94, 0x5f, 0x6e, 0xcf, 0x14, 0x76, 0x64, 0xc1, 0xba, 0x9a, 0xb0, 0xc4, 0x4d, 0xbb, 0x9c, 0x79, 0xed, 0xdf,
0x33, 0xfc, 0xb9, 0xc5, 0xe1, 0xbf, 0x7e, 0x78, 0xd3, 0xbc, 0xca, 0x85, 0x34, 0xaf, 0xf2, 0xab, 0x30, 0x45, 0x9a, 0x7c, 0xf4, 0x8a, 0x36, 0x58, 0x79, 0xa1, 0xfc, 0x9a, 0xe1, 0xcf, 0x2d, 0x0e,
0xf8, 0x72, 0x17, 0xae, 0x3e, 0x17, 0x17, 0x5f, 0x08, 0x7d, 0x04, 0x9b, 0x31, 0x1a, 0xe4, 0xd6, 0xff, 0xf5, 0xc3, 0x9b, 0xe6, 0x55, 0x2e, 0xa4, 0x79, 0x95, 0x5f, 0xc5, 0x97, 0xbb, 0x70, 0xf5,
0xce, 0xa9, 0x43, 0xe5, 0x1b, 0x44, 0x6b, 0x1a, 0xf5, 0x40, 0xe2, 0x76, 0x8a, 0x50, 0x08, 0x46, 0xb9, 0xb8, 0xf8, 0x42, 0xe8, 0x23, 0xd8, 0x8c, 0xd1, 0x20, 0xb7, 0x76, 0x4e, 0x1d, 0x2a, 0xdf,
0xde, 0x8c, 0x1a, 0x1b, 0xb0, 0x16, 0x1f, 0x55, 0x71, 0x4c, 0xfc, 0x76, 0x06, 0x9a, 0x22, 0x06, 0x20, 0x5a, 0xd3, 0xa8, 0x07, 0x12, 0xb7, 0x53, 0x84, 0x42, 0x30, 0xf2, 0x66, 0xd4, 0xd8, 0x80,
0xc8, 0x71, 0xcf, 0xf6, 0x9d, 0x20, 0xf4, 0x7c, 0xf5, 0x02, 0xf5, 0x6d, 0x00, 0xfe, 0x49, 0x11, 0xb5, 0xf8, 0xa8, 0x8a, 0x63, 0xe2, 0xb7, 0x33, 0xd0, 0x14, 0x31, 0x40, 0x8e, 0x7b, 0xb6, 0xef,
0x54, 0xdc, 0xc5, 0xa3, 0x39, 0x08, 0x41, 0xb5, 0xfd, 0x26, 0x94, 0xa8, 0x3b, 0xe6, 0x48, 0xbe, 0x04, 0xa1, 0xe7, 0xab, 0xb7, 0xa9, 0x6f, 0x03, 0xf0, 0x8f, 0x8d, 0xa0, 0xe2, 0x2e, 0x1e, 0xcd,
0x1a, 0x8a, 0xd4, 0x1d, 0x4b, 0xa5, 0x7f, 0xe1, 0x18, 0xae, 0xc5, 0x05, 0x0c, 0xf1, 0xfc, 0x03, 0x41, 0x08, 0xaa, 0xed, 0x37, 0xa1, 0x44, 0xdd, 0x31, 0x47, 0xf2, 0xd5, 0x50, 0xa4, 0xee, 0x58,
0x1b, 0x1d, 0x7a, 0x81, 0xe2, 0x40, 0x5e, 0x3d, 0xff, 0x70, 0x68, 0x5f, 0x62, 0x44, 0x6d, 0x60, 0x2a, 0xfd, 0x0b, 0xc7, 0x70, 0x2d, 0x2e, 0x60, 0x88, 0xe7, 0x1f, 0xd8, 0xe8, 0xd0, 0x0b, 0x14,
0xfc, 0xe5, 0x2c, 0x2c, 0x47, 0xed, 0xe3, 0x0f, 0xe0, 0xbc, 0xf8, 0x29, 0x9f, 0xbb, 0x62, 0x39, 0x07, 0xf2, 0xea, 0xf9, 0x87, 0x43, 0xfb, 0x12, 0x23, 0x6a, 0x03, 0xe3, 0x2f, 0x67, 0x61, 0x39,
0x38, 0x4c, 0x59, 0xd2, 0xac, 0xbc, 0x25, 0xbe, 0x39, 0xbb, 0x2e, 0x31, 0xa0, 0x22, 0x29, 0xbc, 0x6a, 0x1f, 0x7f, 0x00, 0xe7, 0xc5, 0x4f, 0xf9, 0xdc, 0x15, 0xcb, 0xc1, 0x61, 0xca, 0x92, 0x66,
0x79, 0xa8, 0xbd, 0x6a, 0x5a, 0xe6, 0x24, 0xfd, 0x79, 0xc8, 0xb4, 0x5b, 0xa6, 0xe6, 0x3b, 0xae, 0xe5, 0x2d, 0xf1, 0xcd, 0xd9, 0x75, 0x89, 0x01, 0x15, 0x49, 0xe1, 0xcd, 0x43, 0xed, 0x55, 0xd3,
0xd0, 0x2f, 0x0b, 0xf6, 0x34, 0xec, 0xe2, 0x77, 0x6b, 0x18, 0x98, 0x65, 0xe3, 0x13, 0xc9, 0xa8, 0x32, 0x27, 0xe9, 0xcf, 0x43, 0xa6, 0xdd, 0x32, 0x35, 0xdf, 0x71, 0x85, 0x7e, 0x59, 0xb0, 0xa7,
0x18, 0x7d, 0x83, 0x2b, 0x3b, 0x7c, 0xe6, 0x50, 0xd1, 0xd1, 0x35, 0x01, 0xfe, 0xd4, 0xbe, 0xd2, 0x61, 0x17, 0xbf, 0x68, 0xc3, 0xc0, 0x2c, 0x1b, 0x9f, 0x48, 0x46, 0xc5, 0xe8, 0x1b, 0x5c, 0xd9,
0x04, 0x5e, 0x87, 0x0a, 0x2f, 0x3c, 0xba, 0xe9, 0x8e, 0x4f, 0x8c, 0x85, 0x5d, 0x17, 0xf1, 0xc2, 0xe1, 0x33, 0x87, 0x8a, 0x8e, 0xae, 0x09, 0xf0, 0x47, 0xf8, 0x95, 0x26, 0xf0, 0x3a, 0x54, 0x78,
0xe2, 0xe6, 0xcd, 0x63, 0x76, 0x06, 0xe0, 0x55, 0x61, 0x88, 0xcd, 0x6f, 0x66, 0xe0, 0x66, 0xca, 0xe1, 0xd1, 0x4d, 0x77, 0x7c, 0x62, 0x2c, 0xec, 0xba, 0x88, 0x17, 0x16, 0x37, 0x6f, 0x1e, 0xb3,
0xb4, 0x89, 0x5d, 0xde, 0x86, 0x95, 0x53, 0x85, 0x94, 0xa3, 0xcb, 0xb7, 0xfa, 0x86, 0x64, 0xab, 0x33, 0x00, 0xaf, 0x0a, 0x43, 0x6c, 0x7e, 0x33, 0x03, 0x37, 0x53, 0xa6, 0x4d, 0xec, 0xf2, 0x36,
0xf1, 0x31, 0x35, 0x1b, 0xa7, 0x71, 0x40, 0xa4, 0xe1, 0xf2, 0x19, 0x8c, 0xbd, 0xa3, 0x80, 0xe2, 0xac, 0x9c, 0x2a, 0xa4, 0x1c, 0x5d, 0xbe, 0xd5, 0x37, 0x24, 0x5b, 0x8d, 0x8f, 0xa9, 0xd9, 0x38,
0x14, 0x9f, 0x46, 0xae, 0x5c, 0x1e, 0xc1, 0x56, 0xe7, 0x92, 0x71, 0x0c, 0x15, 0x96, 0x3b, 0x7a, 0x8d, 0x03, 0x22, 0x0d, 0x97, 0xcf, 0x60, 0xec, 0x1d, 0x05, 0x14, 0xa7, 0xf8, 0x34, 0x72, 0xe5,
0x36, 0x97, 0x9e, 0xaf, 0x84, 0x35, 0x3f, 0xf3, 0x4a, 0xd6, 0xfc, 0x31, 0xbf, 0x09, 0xad, 0xca, 0xf2, 0x08, 0xb6, 0x3a, 0x97, 0x8c, 0x63, 0xa8, 0xb0, 0xdc, 0xd1, 0xb3, 0xb9, 0xf4, 0x7c, 0x25,
0xfa, 0x69, 0x0a, 0xc1, 0x03, 0x94, 0xe5, 0x39, 0xc1, 0x22, 0xe4, 0x83, 0x0a, 0x0c, 0xc4, 0x0b, 0xac, 0xf9, 0x99, 0x57, 0xb2, 0xe6, 0x8f, 0xf9, 0x4d, 0x68, 0x55, 0xd6, 0x4f, 0x53, 0x08, 0x1e,
0x35, 0x02, 0x58, 0x3e, 0x9c, 0x4f, 0x42, 0xa7, 0xad, 0x40, 0xe4, 0x23, 0x91, 0x07, 0xeb, 0x91, 0xa0, 0x2c, 0xcf, 0x09, 0x16, 0x21, 0x1f, 0x54, 0x60, 0x20, 0x5e, 0xa8, 0x11, 0xc0, 0xf2, 0xe1,
0xa3, 0x96, 0x5a, 0x11, 0xa8, 0x8a, 0x70, 0xb0, 0xa6, 0xac, 0x20, 0x6b, 0xb1, 0xbe, 0xe5, 0x69, 0x7c, 0x12, 0x3a, 0x6d, 0x05, 0x22, 0x1f, 0x89, 0x3c, 0x58, 0x8f, 0x1c, 0xb5, 0xd4, 0x8a, 0x40,
0xbc, 0x06, 0xe3, 0x26, 0x6c, 0x46, 0x29, 0x3e, 0x6c, 0xf2, 0xa8, 0xf9, 0x9b, 0x19, 0x1e, 0xbe, 0x55, 0x84, 0x83, 0x35, 0x65, 0x05, 0x59, 0x8b, 0xf5, 0x2d, 0x4f, 0xe3, 0x35, 0x18, 0x37, 0x61,
0xcf, 0x71, 0x03, 0xd7, 0x9e, 0x05, 0xe7, 0x5e, 0x48, 0x3a, 0xb0, 0x1a, 0x38, 0xee, 0xd9, 0x84, 0x33, 0x4a, 0xf1, 0x61, 0x93, 0x47, 0xcd, 0xdf, 0xcc, 0xf0, 0xf0, 0x7d, 0x8e, 0x1b, 0xb8, 0xf6,
0xea, 0xc5, 0x07, 0x62, 0x10, 0xd6, 0xe3, 0x6d, 0xe3, 0x59, 0x03, 0x73, 0x85, 0xe7, 0x88, 0x4a, 0x2c, 0x38, 0xf7, 0x42, 0xd2, 0x81, 0xd5, 0xc0, 0x71, 0xcf, 0x26, 0x54, 0x2f, 0x3e, 0x10, 0x83,
0x0b, 0xc8, 0xce, 0x75, 0x8d, 0x8c, 0x96, 0x45, 0x62, 0x34, 0x16, 0x1b, 0xdf, 0x85, 0x7a, 0xbc, 0xb0, 0x1e, 0x6f, 0x1b, 0xcf, 0x1a, 0x98, 0x2b, 0x3c, 0x47, 0x54, 0x5a, 0x40, 0x76, 0xae, 0x6b,
0x22, 0xf2, 0x89, 0x78, 0x40, 0x20, 0x6a, 0x55, 0x2e, 0x71, 0x7d, 0x3a, 0x5a, 0x10, 0x95, 0x68, 0x64, 0xb4, 0x2c, 0x12, 0xa3, 0xb1, 0xd8, 0xf8, 0x2e, 0xd4, 0xe3, 0x15, 0x91, 0x4f, 0xc4, 0x03,
0xec, 0x03, 0xe3, 0x2f, 0x66, 0xa0, 0x69, 0x52, 0xb6, 0x72, 0xb5, 0x56, 0xca, 0x35, 0xf3, 0xfd, 0x02, 0x51, 0xab, 0x72, 0x89, 0xeb, 0xd3, 0xd1, 0x82, 0xa8, 0x44, 0x63, 0x1f, 0x18, 0x7f, 0x31,
0x85, 0x52, 0xaf, 0xef, 0xab, 0x7c, 0x97, 0x40, 0xb6, 0xe8, 0xbd, 0x6b, 0x27, 0x63, 0xff, 0xc6, 0x03, 0x4d, 0x93, 0xb2, 0x95, 0xab, 0xb5, 0x52, 0xae, 0x99, 0xef, 0x2f, 0x94, 0x7a, 0x7d, 0x5f,
0x42, 0x8f, 0x76, 0x4a, 0xb0, 0xc4, 0x49, 0x8c, 0x4d, 0x58, 0x17, 0xed, 0x91, 0x6d, 0x89, 0x5c, 0xe5, 0xbb, 0x04, 0xb2, 0x45, 0xef, 0x5d, 0x3b, 0x19, 0xfb, 0x37, 0x16, 0x7a, 0xb4, 0x53, 0x82,
0xb5, 0xb1, 0x1a, 0x63, 0xae, 0xda, 0x2d, 0x68, 0xf2, 0x7b, 0xbe, 0x7a, 0x27, 0x44, 0xc6, 0x5d, 0x25, 0x4e, 0x62, 0x6c, 0xc2, 0xba, 0x68, 0x8f, 0x6c, 0x4b, 0xe4, 0xaa, 0x8d, 0xd5, 0x18, 0x73,
0x20, 0x87, 0xf6, 0xc8, 0xf6, 0x3d, 0xcf, 0x3d, 0xa2, 0xbe, 0x08, 0x86, 0x46, 0x09, 0x13, 0x3d, 0xd5, 0x6e, 0x41, 0x93, 0xdf, 0xf3, 0xd5, 0x3b, 0x21, 0x32, 0xee, 0x02, 0x39, 0xb4, 0x47, 0xb6,
0x99, 0x52, 0x14, 0xe6, 0x29, 0xf9, 0x96, 0xb3, 0xe7, 0xca, 0xd8, 0x2f, 0x9e, 0x32, 0x7c, 0x58, 0xef, 0x79, 0xee, 0x11, 0xf5, 0x45, 0x30, 0x34, 0x4a, 0x98, 0xe8, 0xc9, 0x94, 0xa2, 0x30, 0x4f,
0xdd, 0xb1, 0x9f, 0x51, 0x59, 0x92, 0x1c, 0xa2, 0xc7, 0x50, 0x99, 0xa9, 0x42, 0xe5, 0xb8, 0xcb, 0xc9, 0xb7, 0x9c, 0x3d, 0x57, 0xc6, 0x7e, 0xf1, 0x94, 0xe1, 0xc3, 0xea, 0x8e, 0xfd, 0x8c, 0xca,
0xf7, 0x54, 0x16, 0xab, 0x35, 0x75, 0x6a, 0xc6, 0x82, 0x7c, 0xcf, 0x0b, 0xf1, 0xed, 0x02, 0xe9, 0x92, 0xe4, 0x10, 0x3d, 0x86, 0xca, 0x4c, 0x15, 0x2a, 0xc7, 0x5d, 0xbe, 0xa7, 0xb2, 0x58, 0xad,
0x0c, 0x33, 0xcb, 0x0c, 0xf4, 0x94, 0x5e, 0x75, 0xc7, 0xc6, 0x43, 0x58, 0x8b, 0xd7, 0x29, 0x58, 0xa9, 0x53, 0x33, 0x16, 0xe4, 0x7b, 0x5e, 0x88, 0x6f, 0x17, 0x48, 0x67, 0x98, 0x59, 0x66, 0xa0,
0xcb, 0x16, 0x94, 0xa6, 0x02, 0x26, 0x5a, 0xaf, 0xd2, 0x4c, 0x19, 0x61, 0x2a, 0x9f, 0xcc, 0xd3, 0xa7, 0xf4, 0xaa, 0x3b, 0x36, 0x1e, 0xc2, 0x5a, 0xbc, 0x4e, 0xc1, 0x5a, 0xb6, 0xa0, 0x34, 0x15,
0xdd, 0x55, 0x2a, 0xd5, 0x63, 0xd8, 0x5c, 0xc0, 0x88, 0x02, 0xef, 0x42, 0x55, 0x6b, 0x08, 0xef, 0x30, 0xd1, 0x7a, 0x95, 0x66, 0xca, 0x08, 0x53, 0xf9, 0x64, 0x9e, 0xee, 0xae, 0x52, 0xa9, 0x1e,
0x46, 0x9e, 0x89, 0xac, 0xa2, 0x25, 0x81, 0xf1, 0x19, 0x6c, 0x72, 0x7d, 0x2c, 0xca, 0x2e, 0x87, 0xc3, 0xe6, 0x02, 0x46, 0x14, 0x78, 0x17, 0xaa, 0x5a, 0x43, 0x78, 0x37, 0xf2, 0x4c, 0x64, 0x15,
0x20, 0xd1, 0x8b, 0x4c, 0xb2, 0x17, 0x1f, 0x49, 0x35, 0x4f, 0xcf, 0x1a, 0x5d, 0x15, 0x18, 0x23, 0x2d, 0x09, 0x8c, 0xcf, 0x60, 0x93, 0xeb, 0x63, 0x51, 0x76, 0x39, 0x04, 0x89, 0x5e, 0x64, 0x92,
0x4e, 0x86, 0xef, 0xc8, 0xa4, 0x71, 0x0c, 0x1b, 0x8b, 0xc3, 0xc7, 0xda, 0xff, 0x33, 0x0d, 0xb9, 0xbd, 0xf8, 0x48, 0xaa, 0x79, 0x7a, 0xd6, 0xe8, 0xaa, 0xc0, 0x18, 0x71, 0x32, 0x7c, 0x47, 0x26,
0x1c, 0x9e, 0x08, 0xad, 0x86, 0xe7, 0xbf, 0x64, 0xf8, 0xf8, 0xc4, 0x50, 0xa2, 0x99, 0x63, 0x20, 0x8d, 0x63, 0xd8, 0x58, 0x1c, 0x3e, 0xd6, 0xfe, 0x9f, 0x69, 0xc8, 0xe5, 0xf0, 0x44, 0x68, 0x35,
0x53, 0x1a, 0x9e, 0x7b, 0x63, 0x6b, 0xb1, 0xe6, 0x47, 0x2a, 0x7a, 0x28, 0x35, 0xef, 0xf6, 0x21, 0x3c, 0xff, 0x25, 0xc3, 0xc7, 0x27, 0x86, 0x12, 0xcd, 0x1c, 0x03, 0x99, 0xd2, 0xf0, 0xdc, 0x1b,
0x66, 0xd4, 0x30, 0x22, 0x8e, 0x7d, 0x9a, 0x84, 0x6f, 0x8d, 0x60, 0x23, 0x9d, 0x38, 0x25, 0xe6, 0x5b, 0x8b, 0x35, 0x3f, 0x52, 0xd1, 0x43, 0xa9, 0x79, 0xb7, 0x0f, 0x31, 0xa3, 0x86, 0x11, 0x71,
0xe6, 0xc3, 0xb8, 0xa0, 0x7e, 0xfb, 0xda, 0xee, 0xb3, 0x66, 0xe9, 0x72, 0xfb, 0x6f, 0x95, 0xa0, 0xec, 0xd3, 0x24, 0x7c, 0x6b, 0x04, 0x1b, 0xe9, 0xc4, 0x29, 0x31, 0x37, 0x1f, 0xc6, 0x05, 0xf5,
0x28, 0xac, 0x24, 0x64, 0x1b, 0xf2, 0x23, 0x19, 0xbf, 0x19, 0xbd, 0x55, 0x27, 0xb0, 0xf2, 0x7f, 0xdb, 0xd7, 0x76, 0x9f, 0x35, 0x4b, 0x97, 0xdb, 0x7f, 0xab, 0x04, 0x45, 0x61, 0x25, 0x21, 0xdb,
0x1b, 0xa3, 0x38, 0x19, 0x1d, 0x79, 0x0c, 0xf5, 0x78, 0x08, 0x43, 0xe2, 0x1d, 0x8b, 0x78, 0xec, 0x90, 0x1f, 0xc9, 0xf8, 0xcd, 0xe8, 0xad, 0x3a, 0x81, 0x95, 0xff, 0xdb, 0x18, 0xc5, 0xc9, 0xe8,
0x41, 0x6d, 0x94, 0x70, 0x56, 0x97, 0x23, 0xe1, 0x8a, 0xcb, 0x9c, 0xa5, 0x73, 0x4d, 0xfa, 0xf2, 0xc8, 0x63, 0xa8, 0xc7, 0x43, 0x18, 0x12, 0xef, 0x58, 0xc4, 0x63, 0x0f, 0x6a, 0xa3, 0x84, 0xb3,
0x5c, 0xa6, 0xaf, 0x05, 0xe7, 0xb6, 0xf5, 0xf0, 0xd1, 0xc7, 0xe2, 0x21, 0x8b, 0x0a, 0x02, 0x07, 0xba, 0x1c, 0x09, 0x57, 0x5c, 0xe6, 0x2c, 0x9d, 0x6b, 0xd2, 0x97, 0xe7, 0x32, 0x7d, 0x2d, 0x38,
0xe7, 0xf6, 0xc3, 0x47, 0x1f, 0x27, 0x35, 0x31, 0xf1, 0x8c, 0x85, 0xa6, 0x89, 0xad, 0x41, 0x81, 0xb7, 0xad, 0x87, 0x8f, 0x3e, 0x16, 0x0f, 0x59, 0x54, 0x10, 0x38, 0x38, 0xb7, 0x1f, 0x3e, 0xfa,
0x3f, 0x78, 0xcd, 0x03, 0xf1, 0x78, 0x82, 0x3c, 0x80, 0x35, 0x69, 0x78, 0x13, 0x57, 0x26, 0xf8, 0x38, 0xa9, 0x89, 0x89, 0x67, 0x2c, 0x34, 0x4d, 0x6c, 0x0d, 0x0a, 0xfc, 0xc1, 0x6b, 0x1e, 0x88,
0x29, 0x5a, 0xe2, 0xb7, 0x54, 0x05, 0x6e, 0x80, 0x28, 0x6e, 0xaa, 0xdb, 0x80, 0xa5, 0xf3, 0xe8, 0xc7, 0x13, 0xe4, 0x01, 0xac, 0x49, 0xc3, 0x9b, 0xb8, 0x32, 0xc1, 0x4f, 0xd1, 0x12, 0xbf, 0xa5,
0x05, 0xf3, 0x9a, 0x29, 0x52, 0xc6, 0x1f, 0x14, 0xa0, 0xa2, 0x0d, 0x0a, 0xa9, 0x42, 0xc9, 0xec, 0x2a, 0x70, 0x03, 0x44, 0x71, 0x53, 0xdd, 0x06, 0x2c, 0x9d, 0x47, 0x2f, 0x98, 0xd7, 0x4c, 0x91,
0x0c, 0x3a, 0xe6, 0x17, 0x9d, 0xdd, 0xc6, 0x0d, 0x72, 0x0f, 0xde, 0xea, 0xf6, 0xda, 0x7d, 0xd3, 0x32, 0xfe, 0xa0, 0x00, 0x15, 0x6d, 0x50, 0x48, 0x15, 0x4a, 0x66, 0x67, 0xd0, 0x31, 0xbf, 0xe8,
0xec, 0xb4, 0x87, 0x56, 0xdf, 0xb4, 0xe4, 0x8b, 0x89, 0x47, 0xad, 0xaf, 0x0e, 0x3b, 0xbd, 0xa1, 0xec, 0x36, 0x6e, 0x90, 0x7b, 0xf0, 0x56, 0xb7, 0xd7, 0xee, 0x9b, 0x66, 0xa7, 0x3d, 0xb4, 0xfa,
0xb5, 0xdb, 0x19, 0xb6, 0xba, 0x07, 0x83, 0x46, 0x86, 0xbc, 0x06, 0xcd, 0x88, 0x52, 0xa2, 0x5b, 0xa6, 0x25, 0x5f, 0x4c, 0x3c, 0x6a, 0x7d, 0x75, 0xd8, 0xe9, 0x0d, 0xad, 0xdd, 0xce, 0xb0, 0xd5,
0x87, 0xfd, 0xe3, 0xde, 0xb0, 0x91, 0x25, 0x77, 0xe0, 0xd6, 0x5e, 0xb7, 0xd7, 0x3a, 0xb0, 0x22, 0x3d, 0x18, 0x34, 0x32, 0xe4, 0x35, 0x68, 0x46, 0x94, 0x12, 0xdd, 0x3a, 0xec, 0x1f, 0xf7, 0x86,
0x9a, 0xf6, 0xc1, 0xf0, 0x0b, 0xab, 0xf3, 0x8b, 0x47, 0x5d, 0xf3, 0xab, 0x46, 0x2e, 0x8d, 0x60, 0x8d, 0x2c, 0xb9, 0x03, 0xb7, 0xf6, 0xba, 0xbd, 0xd6, 0x81, 0x15, 0xd1, 0xb4, 0x0f, 0x86, 0x5f,
0x7f, 0x78, 0xd0, 0x96, 0x25, 0xe4, 0xc9, 0x4d, 0x58, 0xe7, 0x04, 0x3c, 0x8b, 0x35, 0xec, 0xf7, 0x58, 0x9d, 0x5f, 0x3c, 0xea, 0x9a, 0x5f, 0x35, 0x72, 0x69, 0x04, 0xfb, 0xc3, 0x83, 0xb6, 0x2c,
0xad, 0x41, 0xbf, 0xdf, 0x6b, 0x14, 0xc8, 0x0a, 0xd4, 0xba, 0xbd, 0x2f, 0x5a, 0x07, 0xdd, 0x5d, 0x21, 0x4f, 0x6e, 0xc2, 0x3a, 0x27, 0xe0, 0x59, 0xac, 0x61, 0xbf, 0x6f, 0x0d, 0xfa, 0xfd, 0x5e,
0xcb, 0xec, 0xb4, 0x0e, 0x0e, 0x1b, 0x4b, 0x64, 0x15, 0x96, 0x93, 0x74, 0x45, 0x56, 0x84, 0xa4, 0xa3, 0x40, 0x56, 0xa0, 0xd6, 0xed, 0x7d, 0xd1, 0x3a, 0xe8, 0xee, 0x5a, 0x66, 0xa7, 0x75, 0x70,
0xeb, 0xf7, 0xba, 0xfd, 0x9e, 0xf5, 0x45, 0xc7, 0x1c, 0x74, 0xfb, 0xbd, 0x46, 0x89, 0x6c, 0x00, 0xd8, 0x58, 0x22, 0xab, 0xb0, 0x9c, 0xa4, 0x2b, 0xb2, 0x22, 0x24, 0x5d, 0xbf, 0xd7, 0xed, 0xf7,
0x89, 0xa3, 0xf6, 0x0f, 0x5b, 0xed, 0x46, 0x99, 0xac, 0xc3, 0x4a, 0x1c, 0xfe, 0xb4, 0xf3, 0x55, 0xac, 0x2f, 0x3a, 0xe6, 0xa0, 0xdb, 0xef, 0x35, 0x4a, 0x64, 0x03, 0x48, 0x1c, 0xb5, 0x7f, 0xd8,
0x03, 0x48, 0x13, 0xd6, 0x78, 0xc3, 0xac, 0x9d, 0xce, 0x41, 0xff, 0x4b, 0xeb, 0xb0, 0xdb, 0xeb, 0x6a, 0x37, 0xca, 0x64, 0x1d, 0x56, 0xe2, 0xf0, 0xa7, 0x9d, 0xaf, 0x1a, 0x40, 0x9a, 0xb0, 0xc6,
0x1e, 0x1e, 0x1f, 0x36, 0x2a, 0xf8, 0x6e, 0x6d, 0xa7, 0x63, 0x75, 0x7b, 0x83, 0xe3, 0xbd, 0xbd, 0x1b, 0x66, 0xed, 0x74, 0x0e, 0xfa, 0x5f, 0x5a, 0x87, 0xdd, 0x5e, 0xf7, 0xf0, 0xf8, 0xb0, 0x51,
0x6e, 0xbb, 0xdb, 0xe9, 0x0d, 0x1b, 0x55, 0x5e, 0x73, 0x5a, 0xc7, 0x6b, 0x2c, 0x83, 0xb8, 0x57, 0xc1, 0x77, 0x6b, 0x3b, 0x1d, 0xab, 0xdb, 0x1b, 0x1c, 0xef, 0xed, 0x75, 0xdb, 0xdd, 0x4e, 0x6f,
0x65, 0xed, 0x76, 0x07, 0xad, 0x9d, 0x83, 0xce, 0x6e, 0xa3, 0x4e, 0x6e, 0xc3, 0xcd, 0x61, 0xe7, 0xd8, 0xa8, 0xf2, 0x9a, 0xd3, 0x3a, 0x5e, 0x63, 0x19, 0xc4, 0xbd, 0x2a, 0x6b, 0xb7, 0x3b, 0x68,
0xf0, 0xa8, 0x6f, 0xb6, 0xcc, 0xaf, 0xe4, 0xbd, 0x2b, 0x6b, 0xaf, 0xd5, 0x3d, 0x38, 0x36, 0x3b, 0xed, 0x1c, 0x74, 0x76, 0x1b, 0x75, 0x72, 0x1b, 0x6e, 0x0e, 0x3b, 0x87, 0x47, 0x7d, 0xb3, 0x65,
0x8d, 0x65, 0xf2, 0x06, 0xdc, 0x36, 0x3b, 0x3f, 0x3e, 0xee, 0x9a, 0x9d, 0x5d, 0xab, 0xd7, 0xdf, 0x7e, 0x25, 0xef, 0x5d, 0x59, 0x7b, 0xad, 0xee, 0xc1, 0xb1, 0xd9, 0x69, 0x2c, 0x93, 0x37, 0xe0,
0xed, 0x58, 0x7b, 0x9d, 0xd6, 0xf0, 0xd8, 0xec, 0x58, 0x87, 0xdd, 0xc1, 0xa0, 0xdb, 0x7b, 0xd2, 0xb6, 0xd9, 0xf9, 0xf1, 0x71, 0xd7, 0xec, 0xec, 0x5a, 0xbd, 0xfe, 0x6e, 0xc7, 0xda, 0xeb, 0xb4,
0x68, 0x90, 0xb7, 0xe0, 0xae, 0x22, 0x51, 0x05, 0x24, 0xa8, 0x56, 0x58, 0xff, 0xe4, 0x94, 0xf6, 0x86, 0xc7, 0x66, 0xc7, 0x3a, 0xec, 0x0e, 0x06, 0xdd, 0xde, 0x93, 0x46, 0x83, 0xbc, 0x05, 0x77,
0x3a, 0xbf, 0x38, 0xb4, 0x8e, 0x3a, 0x1d, 0xb3, 0x41, 0xc8, 0x16, 0x6c, 0x44, 0xd5, 0xf3, 0x0a, 0x15, 0x89, 0x2a, 0x20, 0x41, 0xb5, 0xc2, 0xfa, 0x27, 0xa7, 0xb4, 0xd7, 0xf9, 0xc5, 0xa1, 0x75,
0x44, 0xdd, 0xab, 0x0c, 0x77, 0xd4, 0x31, 0x0f, 0x5b, 0x3d, 0x36, 0xc1, 0x31, 0xdc, 0x1a, 0x6b, 0xd4, 0xe9, 0x98, 0x0d, 0x42, 0xb6, 0x60, 0x23, 0xaa, 0x9e, 0x57, 0x20, 0xea, 0x5e, 0x65, 0xb8,
0x76, 0x84, 0x4b, 0x36, 0x7b, 0x9d, 0x10, 0xa8, 0x6b, 0xb3, 0xb2, 0xd7, 0x32, 0x1b, 0x1b, 0x64, 0xa3, 0x8e, 0x79, 0xd8, 0xea, 0xb1, 0x09, 0x8e, 0xe1, 0xd6, 0x58, 0xb3, 0x23, 0x5c, 0xb2, 0xd9,
0x19, 0x2a, 0x87, 0x47, 0x47, 0xd6, 0xb0, 0x7b, 0xd8, 0xe9, 0x1f, 0x0f, 0x1b, 0x9b, 0x64, 0x1d, 0xeb, 0x84, 0x40, 0x5d, 0x9b, 0x95, 0xbd, 0x96, 0xd9, 0xd8, 0x20, 0xcb, 0x50, 0x39, 0x3c, 0x3a,
0x1a, 0xdd, 0xde, 0xb0, 0x63, 0xb2, 0xb9, 0x96, 0x59, 0xff, 0x6b, 0x91, 0xac, 0xc1, 0xb2, 0x6c, 0xb2, 0x86, 0xdd, 0xc3, 0x4e, 0xff, 0x78, 0xd8, 0xd8, 0x24, 0xeb, 0xd0, 0xe8, 0xf6, 0x86, 0x1d,
0xa9, 0x84, 0xfe, 0x71, 0x91, 0x6c, 0x02, 0x39, 0xee, 0x99, 0x9d, 0xd6, 0x2e, 0x1b, 0x38, 0x85, 0x93, 0xcd, 0xb5, 0xcc, 0xfa, 0x5f, 0x8b, 0x64, 0x0d, 0x96, 0x65, 0x4b, 0x25, 0xf4, 0x8f, 0x8b,
0xf8, 0x6f, 0x45, 0xe1, 0xce, 0xfc, 0xdd, 0x9c, 0x12, 0xf6, 0xa2, 0xf8, 0xa0, 0xf8, 0x67, 0x3d, 0x64, 0x13, 0xc8, 0x71, 0xcf, 0xec, 0xb4, 0x76, 0xd9, 0xc0, 0x29, 0xc4, 0x7f, 0x2b, 0x0a, 0x77,
0xaa, 0xda, 0xe7, 0x38, 0x5e, 0xf6, 0x71, 0x2e, 0x4d, 0x35, 0xcf, 0x2d, 0xa8, 0xe6, 0x0b, 0xb6, 0xe6, 0xef, 0xe6, 0x94, 0xb0, 0x17, 0xc5, 0x07, 0xc5, 0x3f, 0xf8, 0x51, 0xd5, 0x3e, 0xd4, 0xf1,
0x9f, 0x9a, 0xae, 0x3b, 0xbc, 0x09, 0xb5, 0x29, 0xff, 0xc4, 0x87, 0x78, 0xbf, 0x1e, 0x44, 0xb0, 0xb2, 0xcf, 0x76, 0x69, 0xaa, 0x79, 0x6e, 0x41, 0x35, 0x5f, 0xb0, 0xfd, 0xd4, 0x74, 0xdd, 0xe1,
0x1c, 0x07, 0xf2, 0xc7, 0xeb, 0x17, 0xbe, 0x4e, 0x55, 0x58, 0xfc, 0x3a, 0x55, 0x9a, 0x7e, 0xb8, 0x4d, 0xa8, 0x4d, 0xf9, 0xc7, 0x3f, 0xc4, 0xfb, 0xf5, 0x20, 0x82, 0xe5, 0x38, 0x90, 0x3f, 0x5e,
0x94, 0xa6, 0x1f, 0xde, 0x87, 0x15, 0xce, 0x9a, 0x1c, 0xd7, 0x99, 0x4a, 0xab, 0x0b, 0xd7, 0x22, 0xbf, 0xf0, 0xdd, 0xaa, 0xc2, 0xe2, 0x77, 0xab, 0xd2, 0xf4, 0xc3, 0xa5, 0x34, 0xfd, 0xf0, 0x3e,
0x96, 0x91, 0x45, 0x71, 0xb8, 0x54, 0x47, 0xa5, 0xca, 0x2a, 0x58, 0x48, 0x51, 0x68, 0xab, 0x31, 0xac, 0x70, 0xd6, 0xe4, 0xb8, 0xce, 0x54, 0x5a, 0x5d, 0xb8, 0x16, 0xb1, 0x8c, 0x2c, 0x8a, 0xc3,
0x4d, 0x95, 0x73, 0x0e, 0xa5, 0xa9, 0xaa, 0x1a, 0xec, 0xcb, 0xa8, 0x86, 0x8a, 0x56, 0x03, 0x87, 0xa5, 0x3a, 0x2a, 0x55, 0x56, 0xc1, 0x42, 0x8a, 0x42, 0x5b, 0x8d, 0x69, 0xaa, 0x9c, 0x73, 0x28,
0x63, 0x0d, 0xf7, 0x61, 0x85, 0x5e, 0x86, 0xbe, 0x6d, 0x79, 0x33, 0xfb, 0xeb, 0x39, 0xc6, 0x5b, 0x4d, 0x55, 0xd5, 0x60, 0x5f, 0x46, 0x35, 0x54, 0xb4, 0x1a, 0x38, 0x1c, 0x6b, 0xb8, 0x0f, 0x2b,
0xd8, 0x68, 0x03, 0xaa, 0x9a, 0xcb, 0x88, 0xe8, 0x23, 0x7c, 0xd7, 0x0e, 0x6d, 0xe3, 0x57, 0x00, 0xf4, 0x32, 0xf4, 0x6d, 0xcb, 0x9b, 0xd9, 0x5f, 0xcf, 0x31, 0xde, 0xc2, 0x46, 0x1b, 0x50, 0xd5,
0xd4, 0xa9, 0x3a, 0x66, 0x0c, 0xd0, 0xf5, 0xe4, 0xb5, 0xbb, 0xaa, 0xc9, 0x13, 0x38, 0x8f, 0xa1, 0x5c, 0x46, 0x44, 0x1f, 0xe1, 0xbb, 0x76, 0x68, 0x1b, 0xbf, 0x02, 0xa0, 0x4e, 0xd5, 0x31, 0x63,
0xe7, 0xdb, 0x67, 0xb4, 0x2b, 0xdf, 0x82, 0x89, 0x00, 0xe4, 0x16, 0xe4, 0xbc, 0x99, 0x0c, 0x25, 0x80, 0xae, 0x27, 0xaf, 0xdd, 0x55, 0x4d, 0x9e, 0xc0, 0x79, 0x0c, 0x3d, 0xdf, 0x3e, 0xa3, 0x5d,
0x2b, 0xcb, 0x07, 0x99, 0x67, 0x26, 0x83, 0x1a, 0x1f, 0x43, 0xb6, 0x3f, 0xbb, 0x56, 0x54, 0x6a, 0xf9, 0x16, 0x4c, 0x04, 0x20, 0xb7, 0x20, 0xe7, 0xcd, 0x64, 0x28, 0x59, 0x59, 0x3e, 0xc8, 0x3c,
0x42, 0x51, 0x7e, 0x8f, 0x32, 0x8b, 0xe1, 0x63, 0x32, 0x79, 0xff, 0x4f, 0x43, 0x45, 0xfb, 0x2a, 0x33, 0x19, 0xd4, 0xf8, 0x18, 0xb2, 0xfd, 0xd9, 0xb5, 0xa2, 0x52, 0x13, 0x8a, 0xf2, 0x4b, 0x95,
0x0d, 0xd9, 0x84, 0xd5, 0x2f, 0xbb, 0xc3, 0x5e, 0x67, 0x30, 0xb0, 0x8e, 0x8e, 0x77, 0x9e, 0x76, 0x59, 0x0c, 0x1f, 0x93, 0xc9, 0xfb, 0x7f, 0x1a, 0x2a, 0xda, 0xf7, 0x6a, 0xc8, 0x26, 0xac, 0x7e,
0xbe, 0xb2, 0xf6, 0x5b, 0x83, 0xfd, 0xc6, 0x0d, 0xc6, 0x4b, 0x7a, 0x9d, 0xc1, 0xb0, 0xb3, 0x1b, 0xd9, 0x1d, 0xf6, 0x3a, 0x83, 0x81, 0x75, 0x74, 0xbc, 0xf3, 0xb4, 0xf3, 0x95, 0xb5, 0xdf, 0x1a,
0x83, 0x67, 0xc8, 0xeb, 0xb0, 0x75, 0xdc, 0x3b, 0x1e, 0x74, 0x76, 0xad, 0xb4, 0x7c, 0x59, 0xb6, 0xec, 0x37, 0x6e, 0x30, 0x5e, 0xd2, 0xeb, 0x0c, 0x86, 0x9d, 0xdd, 0x18, 0x3c, 0x43, 0x5e, 0x87,
0x79, 0x04, 0x3e, 0x25, 0x7b, 0xee, 0xfe, 0xaf, 0x42, 0x3d, 0xfe, 0x32, 0x02, 0x01, 0x58, 0x3a, 0xad, 0xe3, 0xde, 0xf1, 0xa0, 0xb3, 0x6b, 0xa5, 0xe5, 0xcb, 0xb2, 0xcd, 0x23, 0xf0, 0x29, 0xd9,
0xe8, 0x3c, 0x69, 0xb5, 0xbf, 0xe2, 0x0f, 0x6e, 0x0f, 0x86, 0xad, 0x61, 0xb7, 0x6d, 0x89, 0x07, 0x73, 0xf7, 0x7f, 0x15, 0xea, 0xf1, 0x97, 0x11, 0x08, 0xc0, 0xd2, 0x41, 0xe7, 0x49, 0xab, 0xfd,
0xb6, 0x19, 0xa3, 0xca, 0x90, 0x0a, 0x14, 0x5b, 0xbd, 0xf6, 0x7e, 0xdf, 0x1c, 0x34, 0xb2, 0xe4, 0x15, 0x7f, 0x70, 0x7b, 0x30, 0x6c, 0x0d, 0xbb, 0x6d, 0x4b, 0x3c, 0xb0, 0xcd, 0x18, 0x55, 0x86,
0x35, 0xd8, 0x94, 0x5b, 0xa8, 0xdd, 0x3f, 0x3c, 0xec, 0x0e, 0x91, 0x47, 0x0f, 0xbf, 0x3a, 0x62, 0x54, 0xa0, 0xd8, 0xea, 0xb5, 0xf7, 0xfb, 0xe6, 0xa0, 0x91, 0x25, 0xaf, 0xc1, 0xa6, 0xdc, 0x42,
0x3b, 0xe6, 0xbe, 0x0d, 0xe5, 0xe8, 0x6d, 0x70, 0xe4, 0x7b, 0xdd, 0x61, 0xb7, 0x35, 0x8c, 0x98, 0xed, 0xfe, 0xe1, 0x61, 0x77, 0x88, 0x3c, 0x7a, 0xf8, 0xd5, 0x11, 0xdb, 0x31, 0xf7, 0x6d, 0x28,
0x7e, 0xe3, 0x06, 0x63, 0xab, 0x11, 0x18, 0x1f, 0xf8, 0x6e, 0x64, 0xf8, 0xe5, 0x51, 0x09, 0xe4, 0x47, 0x6f, 0x83, 0x23, 0xdf, 0xeb, 0x0e, 0xbb, 0xad, 0x61, 0xc4, 0xf4, 0x1b, 0x37, 0x18, 0x5b,
0xb5, 0x37, 0xb2, 0x6c, 0xaf, 0x47, 0xd0, 0x9d, 0xfe, 0x90, 0x75, 0xe1, 0xd7, 0xa0, 0x1e, 0x7f, 0x8d, 0xc0, 0xf8, 0xc0, 0x77, 0x23, 0xc3, 0x2f, 0x8f, 0x4a, 0x20, 0xaf, 0xbd, 0x91, 0x65, 0x7b,
0x82, 0x9b, 0x34, 0xa0, 0xca, 0xea, 0xd7, 0xaa, 0x00, 0x58, 0xe2, 0x2d, 0x6e, 0x64, 0x38, 0x63, 0x3d, 0x82, 0xee, 0xf4, 0x87, 0xac, 0x0b, 0xbf, 0x06, 0xf5, 0xf8, 0x13, 0xdc, 0xa4, 0x01, 0x55,
0x6f, 0xf7, 0x0f, 0xbb, 0xbd, 0x27, 0x78, 0x1a, 0x34, 0xb2, 0x0c, 0xd4, 0x3f, 0x1e, 0x3e, 0xe9, 0x56, 0xbf, 0x56, 0x05, 0xc0, 0x12, 0x6f, 0x71, 0x23, 0xc3, 0x19, 0x7b, 0xbb, 0x7f, 0xd8, 0xed,
0x2b, 0x50, 0x8e, 0xe5, 0xe0, 0xdd, 0x69, 0xe4, 0xef, 0x7f, 0x0d, 0x2b, 0x0b, 0x8f, 0x75, 0xb3, 0x3d, 0xc1, 0xd3, 0xa0, 0x91, 0x65, 0xa0, 0xfe, 0xf1, 0xf0, 0x49, 0x5f, 0x81, 0x72, 0x2c, 0x07,
0x56, 0xf7, 0x8f, 0x87, 0xed, 0xfe, 0xa1, 0x5e, 0x4f, 0x05, 0x8a, 0xed, 0x83, 0x56, 0xf7, 0x10, 0xef, 0x4e, 0x23, 0x7f, 0xff, 0x6b, 0x58, 0x59, 0x78, 0xac, 0x9b, 0xb5, 0xba, 0x7f, 0x3c, 0x6c,
0x1d, 0x21, 0x35, 0x28, 0x1f, 0xf7, 0x64, 0x32, 0x1b, 0x7f, 0x66, 0x3c, 0xc7, 0x58, 0xd4, 0x5e, 0xf7, 0x0f, 0xf5, 0x7a, 0x2a, 0x50, 0x6c, 0x1f, 0xb4, 0xba, 0x87, 0xe8, 0x08, 0xa9, 0x41, 0xf9,
0xd7, 0x1c, 0x0c, 0xad, 0xc1, 0xb0, 0xf5, 0xa4, 0xd3, 0xc8, 0xb3, 0xbc, 0x92, 0x5f, 0x15, 0xee, 0xb8, 0x27, 0x93, 0xd9, 0xf8, 0x33, 0xe3, 0x39, 0xc6, 0xa2, 0xf6, 0xba, 0xe6, 0x60, 0x68, 0x0d,
0x7f, 0x06, 0xf5, 0x78, 0xdc, 0x73, 0xdc, 0x81, 0xb5, 0x05, 0x1b, 0x3b, 0x9d, 0xe1, 0x97, 0x9d, 0x86, 0xad, 0x27, 0x9d, 0x46, 0x9e, 0xe5, 0x95, 0xfc, 0xaa, 0x70, 0xff, 0x33, 0xa8, 0xc7, 0xe3,
0x4e, 0x0f, 0xa7, 0xbc, 0xdd, 0xe9, 0x0d, 0xcd, 0xd6, 0x41, 0x77, 0xf8, 0x55, 0x23, 0x73, 0xff, 0x9e, 0xe3, 0x0e, 0xac, 0x2d, 0xd8, 0xd8, 0xe9, 0x0c, 0xbf, 0xec, 0x74, 0x7a, 0x38, 0xe5, 0xed,
0x31, 0x34, 0x92, 0x41, 0x06, 0xb1, 0xa8, 0x8c, 0x17, 0x85, 0x6f, 0xdc, 0xff, 0x8f, 0x19, 0x58, 0x4e, 0x6f, 0x68, 0xb6, 0x0e, 0xba, 0xc3, 0xaf, 0x1a, 0x99, 0xfb, 0x8f, 0xa1, 0x91, 0x0c, 0x32,
0x4b, 0xf3, 0xaf, 0xb1, 0x85, 0x29, 0x18, 0x21, 0x3b, 0x0e, 0x07, 0xfd, 0x9e, 0xd5, 0xeb, 0xe3, 0x88, 0x45, 0x65, 0xbc, 0x28, 0x7c, 0xe3, 0xfe, 0x7f, 0xcc, 0xc0, 0x5a, 0x9a, 0x7f, 0x8d, 0x2d,
0xbb, 0xbb, 0x5b, 0xb0, 0x91, 0x40, 0xc8, 0x5e, 0x64, 0xc8, 0x2d, 0xd8, 0x5c, 0xc8, 0x64, 0x99, 0x4c, 0xc1, 0x08, 0xd9, 0x71, 0x38, 0xe8, 0xf7, 0xac, 0x5e, 0x1f, 0xdf, 0xdd, 0xdd, 0x82, 0x8d,
0xfd, 0x63, 0x9c, 0xcb, 0x26, 0xac, 0x25, 0x90, 0x1d, 0xd3, 0xec, 0x9b, 0x8d, 0x1c, 0x79, 0x0f, 0x04, 0x42, 0xf6, 0x22, 0x43, 0x6e, 0xc1, 0xe6, 0x42, 0x26, 0xcb, 0xec, 0x1f, 0xe3, 0x5c, 0x36,
0xee, 0x25, 0x30, 0x8b, 0x42, 0x80, 0x94, 0x11, 0xf2, 0xe4, 0x1d, 0x78, 0x73, 0x81, 0x3a, 0x3a, 0x61, 0x2d, 0x81, 0xec, 0x98, 0x66, 0xdf, 0x6c, 0xe4, 0xc8, 0x7b, 0x70, 0x2f, 0x81, 0x59, 0x14,
0x27, 0xad, 0x9d, 0xd6, 0x01, 0xeb, 0x5e, 0xa3, 0x70, 0xff, 0xef, 0xe5, 0x00, 0xa2, 0x8b, 0x85, 0x02, 0xa4, 0x8c, 0x90, 0x27, 0xef, 0xc0, 0x9b, 0x0b, 0xd4, 0xd1, 0x39, 0x69, 0xed, 0xb4, 0x0e,
0xac, 0xfe, 0xdd, 0xd6, 0xb0, 0x75, 0xd0, 0x67, 0x7b, 0xc6, 0xec, 0x0f, 0x59, 0xe9, 0x66, 0xe7, 0x58, 0xf7, 0x1a, 0x85, 0xfb, 0x7f, 0x2f, 0x07, 0x10, 0x5d, 0x2c, 0x64, 0xf5, 0xef, 0xb6, 0x86,
0xc7, 0x8d, 0x1b, 0xa9, 0x98, 0xfe, 0x11, 0xeb, 0xd0, 0x26, 0xac, 0xf2, 0xf5, 0x77, 0xc0, 0xba, 0xad, 0x83, 0x3e, 0xdb, 0x33, 0x66, 0x7f, 0xc8, 0x4a, 0x37, 0x3b, 0x3f, 0x6e, 0xdc, 0x48, 0xc5,
0xc1, 0x96, 0x0b, 0x3e, 0xe1, 0x8c, 0x92, 0xc6, 0xf1, 0xd1, 0x9e, 0xd9, 0xef, 0x0d, 0xad, 0xc1, 0xf4, 0x8f, 0x58, 0x87, 0x36, 0x61, 0x95, 0xaf, 0xbf, 0x03, 0xd6, 0x0d, 0xb6, 0x5c, 0xf0, 0x09,
0xfe, 0xf1, 0x70, 0x17, 0x1f, 0x80, 0x6e, 0x9b, 0xdd, 0x23, 0x5e, 0x66, 0xfe, 0x45, 0x04, 0xac, 0x67, 0x94, 0x34, 0x8e, 0x8f, 0xf6, 0xcc, 0x7e, 0x6f, 0x68, 0x0d, 0xf6, 0x8f, 0x87, 0xbb, 0xf8,
0xe8, 0x02, 0xdb, 0xe0, 0x4f, 0xfa, 0x83, 0x41, 0xf7, 0xc8, 0xfa, 0xf1, 0x71, 0xc7, 0xec, 0x76, 0x00, 0x74, 0xdb, 0xec, 0x1e, 0xf1, 0x32, 0xf3, 0x2f, 0x22, 0x60, 0x45, 0x17, 0xd8, 0x06, 0x7f,
0x06, 0x98, 0x71, 0x29, 0x05, 0xce, 0xe8, 0x8b, 0x6c, 0xcd, 0x0e, 0x0f, 0xbe, 0x10, 0x02, 0x04, 0xd2, 0x1f, 0x0c, 0xba, 0x47, 0xd6, 0x8f, 0x8f, 0x3b, 0x66, 0xb7, 0x33, 0xc0, 0x8c, 0x4b, 0x29,
0x23, 0x2d, 0xc5, 0x41, 0x8c, 0xaa, 0xcc, 0x66, 0x87, 0x9d, 0xc0, 0x29, 0x25, 0xc3, 0x35, 0x38, 0x70, 0x46, 0x5f, 0x64, 0x6b, 0x76, 0x78, 0xf0, 0x85, 0x10, 0x20, 0x18, 0x69, 0x29, 0x0e, 0x62,
0x96, 0xaf, 0xc2, 0x64, 0x8b, 0x85, 0x9d, 0x8f, 0xd9, 0xaa, 0xe9, 0x28, 0x96, 0x0b, 0xc5, 0x0e, 0x54, 0x65, 0x36, 0x3b, 0xec, 0x04, 0x4e, 0x29, 0x19, 0xae, 0xc1, 0xb1, 0x7c, 0x15, 0x26, 0x5b,
0x25, 0xa4, 0xed, 0xee, 0x9a, 0x98, 0xa1, 0xbe, 0x00, 0x65, 0xb4, 0xcb, 0x6c, 0x11, 0xb2, 0x23, 0x2c, 0xec, 0x7c, 0xcc, 0x56, 0x4d, 0x47, 0xb1, 0x5c, 0x28, 0x76, 0x28, 0x21, 0x6d, 0x77, 0xd7,
0x9a, 0x91, 0x34, 0x64, 0x82, 0x61, 0x56, 0x1e, 0xfe, 0xf3, 0x37, 0xa0, 0xac, 0x2e, 0x18, 0x90, 0xc4, 0x0c, 0xf5, 0x05, 0x28, 0xa3, 0x5d, 0x66, 0x8b, 0x90, 0x1d, 0xd1, 0x8c, 0xa4, 0x21, 0x13,
0x1f, 0x41, 0x2d, 0x76, 0xe3, 0x9b, 0x48, 0x13, 0x7e, 0xda, 0x05, 0xf1, 0xad, 0xd7, 0xd2, 0x91, 0x0c, 0xb3, 0xf2, 0xf0, 0x9f, 0xbf, 0x01, 0x65, 0x75, 0xc1, 0x80, 0xfc, 0x08, 0x6a, 0xb1, 0x1b,
0x42, 0x39, 0x39, 0xd4, 0xac, 0x01, 0xbc, 0xb0, 0xd7, 0x92, 0x1a, 0x7a, 0xac, 0xb4, 0xdb, 0xd7, 0xdf, 0x44, 0x9a, 0xf0, 0xd3, 0x2e, 0x88, 0x6f, 0xbd, 0x96, 0x8e, 0x14, 0xca, 0xc9, 0xa1, 0x66,
0x60, 0x45, 0x71, 0x4f, 0xf1, 0x35, 0x69, 0xfd, 0xe3, 0xc6, 0xe4, 0x76, 0xf4, 0xb4, 0x6f, 0xca, 0x0d, 0xe0, 0x85, 0xbd, 0x96, 0xd4, 0xd0, 0x63, 0xa5, 0xdd, 0xbe, 0x06, 0x2b, 0x8a, 0x7b, 0x8a,
0x47, 0x8f, 0xb7, 0x6e, 0x2e, 0x7e, 0x86, 0x58, 0x7e, 0xb7, 0x78, 0x17, 0x2a, 0xda, 0x37, 0xfb, 0xaf, 0x49, 0xeb, 0x9f, 0x3d, 0x26, 0xb7, 0xa3, 0xa7, 0x7d, 0x53, 0x3e, 0x87, 0xbc, 0x75, 0x73,
0xc8, 0xcd, 0x6b, 0xbf, 0x2f, 0xb8, 0xb5, 0x95, 0x86, 0x12, 0x4d, 0xfa, 0x1c, 0xca, 0xea, 0xfb, 0xf1, 0x03, 0xc5, 0xf2, 0x8b, 0xc6, 0xbb, 0x50, 0xd1, 0xbe, 0xe6, 0x47, 0x6e, 0x5e, 0xfb, 0xe5,
0x6d, 0x64, 0x53, 0xfb, 0xf6, 0x9e, 0xfe, 0x15, 0xba, 0xad, 0xe6, 0x22, 0x42, 0xe4, 0xdf, 0x85, 0xc1, 0xad, 0xad, 0x34, 0x94, 0x68, 0xd2, 0xe7, 0x50, 0x56, 0x5f, 0x76, 0x23, 0x9b, 0xda, 0x57,
0x8a, 0xf6, 0x19, 0x36, 0xd5, 0x8a, 0xc5, 0x4f, 0xbd, 0xa9, 0x56, 0xa4, 0x7d, 0xb5, 0xed, 0x00, 0xf9, 0xf4, 0xef, 0xd3, 0x6d, 0x35, 0x17, 0x11, 0x22, 0xff, 0x2e, 0x54, 0xb4, 0x0f, 0xb4, 0xa9,
0xd6, 0x85, 0xcd, 0xe1, 0x84, 0x7e, 0x93, 0xe1, 0x49, 0xf9, 0x4a, 0xf3, 0x83, 0x0c, 0x79, 0x0c, 0x56, 0x2c, 0x7e, 0x04, 0x4e, 0xb5, 0x22, 0xed, 0x7b, 0x6e, 0x07, 0xb0, 0x2e, 0x6c, 0x0e, 0x27,
0x25, 0xf9, 0xc1, 0x3d, 0xb2, 0x91, 0xfe, 0x39, 0xc1, 0xad, 0xcd, 0x05, 0xb8, 0x68, 0x4a, 0x0b, 0xf4, 0x9b, 0x0c, 0x4f, 0xca, 0xf7, 0x9b, 0x1f, 0x64, 0xc8, 0x63, 0x28, 0xc9, 0x4f, 0xf1, 0x91,
0x20, 0xfa, 0xc0, 0x1b, 0x91, 0x1d, 0x5f, 0xf8, 0x60, 0x9c, 0x9a, 0x99, 0x94, 0xaf, 0xc1, 0xed, 0x8d, 0xf4, 0x0f, 0x0d, 0x6e, 0x6d, 0x2e, 0xc0, 0x45, 0x53, 0x5a, 0x00, 0xd1, 0xa7, 0xdf, 0x88,
0x42, 0x45, 0xfb, 0x96, 0x9b, 0x1a, 0x93, 0xc5, 0xef, 0xc0, 0xa9, 0x31, 0x49, 0xfb, 0xf4, 0xdb, 0xec, 0xf8, 0xc2, 0xa7, 0xe4, 0xd4, 0xcc, 0xa4, 0x7c, 0x27, 0x6e, 0x17, 0x2a, 0xda, 0x57, 0xde,
0x8f, 0xa0, 0x16, 0xfb, 0x28, 0x9b, 0x5a, 0xc7, 0x69, 0x9f, 0x7c, 0x53, 0xeb, 0x38, 0xfd, 0x3b, 0xd4, 0x98, 0x2c, 0x7e, 0x21, 0x4e, 0x8d, 0x49, 0xda, 0x47, 0xe1, 0x7e, 0x04, 0xb5, 0xd8, 0xe7,
0x6e, 0xbb, 0x50, 0xd1, 0x3e, 0xa1, 0xa6, 0x5a, 0xb4, 0xf8, 0xb5, 0x36, 0xd5, 0xa2, 0x94, 0x2f, 0xda, 0xd4, 0x3a, 0x4e, 0xfb, 0x18, 0x9c, 0x5a, 0xc7, 0xe9, 0x5f, 0x78, 0xdb, 0x85, 0x8a, 0xf6,
0xae, 0xb1, 0xdd, 0x10, 0xff, 0x7e, 0x9a, 0xda, 0x0d, 0xa9, 0x1f, 0x62, 0x53, 0xbb, 0x21, 0xfd, 0x09, 0x35, 0xd5, 0xa2, 0xc5, 0xef, 0xb8, 0xa9, 0x16, 0xa5, 0x7c, 0x71, 0x8d, 0xed, 0x86, 0xf8,
0xa3, 0x6b, 0x6c, 0xe9, 0xa9, 0x67, 0xe4, 0xc9, 0x66, 0x4c, 0xd5, 0x8f, 0xde, 0xa3, 0x57, 0x4b, 0xf7, 0xd3, 0xd4, 0x6e, 0x48, 0xfd, 0x10, 0x9b, 0xda, 0x0d, 0xe9, 0x1f, 0x5d, 0x63, 0x4b, 0x4f,
0x6f, 0xf1, 0xc5, 0xf9, 0x27, 0xb0, 0xaa, 0x16, 0x8d, 0x7a, 0x04, 0x3e, 0x50, 0x6d, 0x4a, 0x7d, 0x3d, 0x23, 0x4f, 0x36, 0x63, 0xaa, 0x7e, 0xf4, 0x1e, 0xbd, 0x5a, 0x7a, 0x8b, 0x2f, 0xce, 0x3f,
0x6a, 0x7e, 0xab, 0x91, 0xc4, 0x3e, 0xc8, 0x90, 0x4f, 0xa1, 0x28, 0x5e, 0xd6, 0x26, 0xeb, 0xc9, 0x81, 0x55, 0xb5, 0x68, 0xd4, 0x23, 0xf0, 0x81, 0x6a, 0x53, 0xea, 0x53, 0xf3, 0x5b, 0x8d, 0x24,
0x97, 0xb6, 0x79, 0x23, 0x36, 0xd2, 0x1f, 0xe0, 0x26, 0x47, 0xb8, 0xa1, 0xf5, 0xa7, 0xaf, 0xf5, 0xf6, 0x41, 0x86, 0x7c, 0x0a, 0x45, 0xf1, 0xb2, 0x36, 0x59, 0x4f, 0xbe, 0xb4, 0xcd, 0x1b, 0xb1,
0x15, 0x9b, 0xf2, 0x5a, 0xf6, 0xd6, 0xeb, 0xd7, 0xa1, 0xa3, 0x12, 0x93, 0xcf, 0xb5, 0xdf, 0xbe, 0x91, 0xfe, 0x00, 0x37, 0x39, 0xc2, 0x0d, 0xad, 0x3f, 0x7d, 0xad, 0xaf, 0xd8, 0x94, 0xd7, 0xb2,
0xee, 0x25, 0x96, 0x78, 0x89, 0xd7, 0x3d, 0x19, 0xf7, 0x04, 0xaa, 0xfa, 0xd7, 0x7b, 0x88, 0xbe, 0xb7, 0x5e, 0xbf, 0x0e, 0x1d, 0x95, 0x98, 0x7c, 0xae, 0xfd, 0xf6, 0x75, 0x2f, 0xb1, 0xc4, 0x4b,
0x0f, 0x93, 0x65, 0xdd, 0x4a, 0xc5, 0x89, 0x82, 0xbe, 0x80, 0x0d, 0x35, 0xde, 0xfa, 0xb3, 0x20, 0xbc, 0xee, 0xc9, 0xb8, 0x27, 0x50, 0xd5, 0xbf, 0xde, 0x43, 0xf4, 0x7d, 0x98, 0x2c, 0xeb, 0x56,
0x01, 0xb9, 0x93, 0xf2, 0x58, 0x48, 0x6c, 0xd4, 0x6f, 0x5e, 0xfb, 0x9a, 0xc8, 0x83, 0x0c, 0x32, 0x2a, 0x4e, 0x14, 0xf4, 0x05, 0x6c, 0xa8, 0xf1, 0xd6, 0x9f, 0x05, 0x09, 0xc8, 0x9d, 0x94, 0xc7,
0xd9, 0xd8, 0x07, 0x37, 0x22, 0x26, 0x9b, 0xf6, 0x9d, 0x91, 0x88, 0xc9, 0xa6, 0x7f, 0xa5, 0xa3, 0x42, 0x62, 0xa3, 0x7e, 0xf3, 0xda, 0xd7, 0x44, 0x1e, 0x64, 0x90, 0xc9, 0xc6, 0x3e, 0xb8, 0x11,
0x05, 0xcb, 0xda, 0xb3, 0x26, 0x83, 0x2b, 0x77, 0xa4, 0xd6, 0xfb, 0xe2, 0x9b, 0xc4, 0x5b, 0x69, 0x31, 0xd9, 0xb4, 0xef, 0x8c, 0x44, 0x4c, 0x36, 0xfd, 0x2b, 0x1d, 0x2d, 0x58, 0xd6, 0x9e, 0x35,
0x96, 0x6f, 0xd2, 0x86, 0x8a, 0xfe, 0x32, 0xca, 0x0b, 0xb2, 0x6f, 0x6a, 0x28, 0xfd, 0xd9, 0xd9, 0x19, 0x5c, 0xb9, 0x23, 0xb5, 0xde, 0x17, 0xdf, 0x24, 0xde, 0x4a, 0xb3, 0x7c, 0x93, 0x36, 0x54,
0x07, 0x19, 0x72, 0x00, 0x8d, 0xe4, 0x3b, 0x86, 0x6a, 0x0b, 0xa7, 0xbd, 0xfd, 0xb8, 0x95, 0x40, 0xf4, 0x97, 0x51, 0x5e, 0x90, 0x7d, 0x53, 0x43, 0xe9, 0xcf, 0xce, 0x3e, 0xc8, 0x90, 0x03, 0x68,
0xc6, 0x5e, 0x3f, 0x64, 0xeb, 0x22, 0xf6, 0x35, 0x60, 0xcf, 0x4f, 0x1e, 0x45, 0xf1, 0xaf, 0x04, 0x24, 0xdf, 0x31, 0x54, 0x5b, 0x38, 0xed, 0xed, 0xc7, 0xad, 0x04, 0x32, 0xf6, 0xfa, 0x21, 0x5b,
0xab, 0xd2, 0xd2, 0xbe, 0x0f, 0x7d, 0x2f, 0xf3, 0x20, 0x43, 0xf6, 0xa0, 0x1a, 0x7b, 0xc6, 0x2b, 0x17, 0xb1, 0xef, 0x04, 0x7b, 0x7e, 0xf2, 0x28, 0x8a, 0x7f, 0x3f, 0x58, 0x95, 0x96, 0xf6, 0xe5,
0x76, 0xd7, 0x25, 0xd1, 0xcd, 0xa6, 0x8e, 0x4b, 0xf4, 0xf3, 0x10, 0xea, 0xf1, 0x10, 0x0d, 0xd5, 0xe8, 0x7b, 0x99, 0x07, 0x19, 0xb2, 0x07, 0xd5, 0xd8, 0x33, 0x5e, 0xb1, 0xbb, 0x2e, 0x89, 0x6e,
0xb0, 0xd4, 0x38, 0x12, 0x35, 0x7d, 0xe9, 0x71, 0x1d, 0xe4, 0x07, 0xfc, 0x5b, 0xf7, 0x32, 0x94, 0x36, 0x75, 0x5c, 0xa2, 0x9f, 0x87, 0x50, 0x8f, 0x87, 0x68, 0xa8, 0x86, 0xa5, 0xc6, 0x91, 0xa8,
0x8f, 0x2c, 0x7e, 0x1b, 0x5d, 0xcd, 0x99, 0xfe, 0x25, 0x71, 0x23, 0xf7, 0x17, 0xb2, 0x19, 0xec, 0xe9, 0x4b, 0x8f, 0xeb, 0x20, 0x3f, 0xe0, 0x5f, 0xc1, 0x97, 0xa1, 0x7c, 0x64, 0xf1, 0xab, 0xe9,
0xd7, 0xf7, 0xf9, 0x97, 0x66, 0x65, 0x34, 0x17, 0x9b, 0xff, 0x57, 0x2d, 0x84, 0xec, 0xf1, 0xca, 0x6a, 0xce, 0xf4, 0x6f, 0x8c, 0x1b, 0xb9, 0xbf, 0x90, 0xcd, 0x60, 0xbf, 0xbe, 0xcf, 0xbf, 0x41,
0xc5, 0x77, 0xbe, 0x23, 0xce, 0xbd, 0xf0, 0xed, 0xef, 0x97, 0xb4, 0xa1, 0xc5, 0xdb, 0x20, 0xf2, 0x2b, 0xa3, 0xb9, 0xd8, 0xfc, 0xbf, 0x6a, 0x21, 0x64, 0x8f, 0x57, 0x2e, 0xbe, 0x00, 0x1e, 0x71,
0xc4, 0xd6, 0xe0, 0x2b, 0x96, 0x45, 0x3e, 0x01, 0x88, 0x42, 0x64, 0x49, 0x22, 0x50, 0x53, 0x6d, 0xee, 0x85, 0xaf, 0x82, 0xbf, 0xa4, 0x0d, 0x2d, 0xde, 0x06, 0x91, 0x27, 0xb6, 0x06, 0x5f, 0xb1,
0xa8, 0x94, 0x28, 0xda, 0x0e, 0xdf, 0xef, 0x2a, 0x52, 0x54, 0x3f, 0x92, 0xe3, 0x41, 0xab, 0xb1, 0x2c, 0xf2, 0x09, 0x40, 0x14, 0x22, 0x4b, 0x12, 0x81, 0x9a, 0x6a, 0x43, 0xa5, 0x44, 0xd1, 0x76,
0x23, 0x39, 0x59, 0xcc, 0x87, 0x50, 0x3b, 0xf0, 0xbc, 0x67, 0xf3, 0x99, 0xba, 0x67, 0x11, 0x0f, 0xf8, 0x7e, 0x57, 0x91, 0xa2, 0xfa, 0x91, 0x1c, 0x0f, 0x5a, 0x8d, 0x1d, 0xc9, 0xc9, 0x62, 0x3e,
0x63, 0xda, 0xb7, 0x83, 0xf3, 0xad, 0x44, 0xb3, 0x48, 0x0b, 0x56, 0x14, 0x8b, 0x88, 0x42, 0x55, 0x84, 0xda, 0x81, 0xe7, 0x3d, 0x9b, 0xcf, 0xd4, 0x3d, 0x8b, 0x78, 0x18, 0xd3, 0xbe, 0x1d, 0x9c,
0xe3, 0x44, 0x31, 0xc6, 0x90, 0x28, 0xe0, 0x41, 0x86, 0x3c, 0x84, 0xea, 0x2e, 0x1d, 0xe1, 0x33, 0x6f, 0x25, 0x9a, 0x45, 0x5a, 0xb0, 0xa2, 0x58, 0x44, 0x14, 0xaa, 0x1a, 0x27, 0x8a, 0x31, 0x86,
0x1b, 0x18, 0x34, 0xb3, 0x1a, 0x0b, 0xc0, 0xe0, 0xd1, 0x36, 0x5b, 0xb5, 0x18, 0x50, 0xb2, 0xb8, 0x44, 0x01, 0x0f, 0x32, 0xe4, 0x21, 0x54, 0x77, 0xe9, 0x08, 0x9f, 0xd9, 0xc0, 0xa0, 0x99, 0xd5,
0x28, 0x70, 0x4b, 0x3f, 0x33, 0xe2, 0xd1, 0x4f, 0x31, 0x16, 0xb7, 0x10, 0xbc, 0xf5, 0x05, 0xac, 0x58, 0x00, 0x06, 0x8f, 0xb6, 0xd9, 0xaa, 0xc5, 0x80, 0x92, 0xc5, 0x45, 0x81, 0x5b, 0xfa, 0x99,
0x2c, 0x84, 0x46, 0x29, 0xee, 0x76, 0x5d, 0x40, 0xd5, 0xd6, 0xdd, 0xeb, 0x09, 0x44, 0xb9, 0x3f, 0x11, 0x8f, 0x7e, 0x8a, 0xb1, 0xb8, 0x85, 0xe0, 0xad, 0x2f, 0x60, 0x65, 0x21, 0x34, 0x4a, 0x71,
0x84, 0x1a, 0x7f, 0x85, 0xf8, 0x84, 0xf2, 0x6b, 0xb2, 0x89, 0x37, 0xa6, 0xf4, 0x3b, 0xb8, 0x49, 0xb7, 0xeb, 0x02, 0xaa, 0xb6, 0xee, 0x5e, 0x4f, 0x20, 0xca, 0xfd, 0x21, 0xd4, 0xf8, 0x2b, 0xc4,
0x96, 0xc4, 0x33, 0x3c, 0xc1, 0x6f, 0x93, 0x68, 0x97, 0x50, 0xd5, 0xbc, 0x2e, 0x5e, 0x8c, 0x55, 0x27, 0x94, 0x5f, 0x93, 0x4d, 0xbc, 0x31, 0xa5, 0xdf, 0xc1, 0x4d, 0xb2, 0x24, 0x9e, 0xe1, 0x09,
0xf3, 0x9a, 0x76, 0xdf, 0xf5, 0x33, 0xa8, 0x3c, 0xa1, 0xa1, 0xbc, 0xd6, 0xa9, 0xe4, 0xa3, 0xc4, 0x7e, 0x9b, 0x44, 0xbb, 0x84, 0xaa, 0xe6, 0x75, 0xf1, 0x62, 0xac, 0x9a, 0xd7, 0xb4, 0xfb, 0xae,
0x3d, 0xcf, 0xad, 0x94, 0xcb, 0xb8, 0xe4, 0x63, 0xcc, 0xaa, 0x9e, 0x28, 0xd8, 0xd0, 0x6a, 0xd1, 0x9f, 0x41, 0xe5, 0x09, 0x0d, 0xe5, 0xb5, 0x4e, 0x25, 0x1f, 0x25, 0xee, 0x79, 0x6e, 0xa5, 0x5c,
0xb3, 0x2e, 0x27, 0xe0, 0x4c, 0xfa, 0xd0, 0x1e, 0x2a, 0x51, 0x0d, 0x5f, 0x7c, 0x98, 0x46, 0x35, 0xc6, 0x25, 0x1f, 0x63, 0x56, 0xf5, 0x44, 0xc1, 0x86, 0x56, 0x8b, 0x9e, 0x75, 0x39, 0x01, 0x67,
0x3c, 0xed, 0x5d, 0x93, 0x1f, 0xf0, 0x11, 0xd0, 0x2e, 0x92, 0x46, 0x22, 0x58, 0xf2, 0xce, 0xa9, 0xd2, 0x87, 0xf6, 0x50, 0x89, 0x6a, 0xf8, 0xe2, 0xc3, 0x34, 0xaa, 0xe1, 0x69, 0xef, 0x9a, 0xfc,
0x6a, 0xbe, 0x4e, 0xfe, 0x08, 0x60, 0x10, 0x7a, 0xb3, 0x5d, 0x9b, 0x4e, 0x3d, 0x37, 0xe2, 0x09, 0x80, 0x8f, 0x80, 0x76, 0x91, 0x34, 0x12, 0xc1, 0x92, 0x77, 0x4e, 0x55, 0xf3, 0x75, 0xf2, 0x47,
0xd1, 0x15, 0xc6, 0x68, 0x23, 0x6a, 0xf7, 0x18, 0xc9, 0x97, 0x9a, 0x6c, 0x1a, 0x9b, 0x12, 0x39, 0x00, 0x83, 0xd0, 0x9b, 0xed, 0xda, 0x74, 0xea, 0xb9, 0x11, 0x4f, 0x88, 0xae, 0x30, 0x46, 0x1b,
0xed, 0xd7, 0xde, 0x72, 0x54, 0xdd, 0x49, 0xb9, 0xe9, 0x88, 0x4c, 0x02, 0xa2, 0xc8, 0x33, 0x25, 0x51, 0xbb, 0xc7, 0x48, 0xbe, 0xd4, 0x64, 0xd3, 0xd8, 0x94, 0xc8, 0x69, 0xbf, 0xf6, 0x96, 0xa3,
0x69, 0x2e, 0x04, 0xb5, 0xa9, 0xbd, 0x9e, 0x12, 0xa6, 0xf6, 0x39, 0x94, 0xa3, 0x90, 0x9d, 0xcd, 0xea, 0x4e, 0xca, 0x4d, 0x47, 0x64, 0x12, 0x10, 0x45, 0x9e, 0x29, 0x49, 0x73, 0x21, 0xa8, 0x4d,
0xe8, 0xd5, 0xa4, 0x58, 0x80, 0x8f, 0xe2, 0xde, 0x8b, 0xe1, 0x32, 0x3d, 0x58, 0xe5, 0xcd, 0x51, 0xed, 0xf5, 0x94, 0x30, 0xb5, 0xcf, 0xa1, 0x1c, 0x85, 0xec, 0x6c, 0x46, 0xaf, 0x26, 0xc5, 0x02,
0xc7, 0x1f, 0x5e, 0xb4, 0x53, 0x9f, 0xd6, 0x59, 0x8c, 0x53, 0x51, 0xfb, 0x27, 0x2d, 0xda, 0x82, 0x7c, 0x14, 0xf7, 0x5e, 0x0c, 0x97, 0xe9, 0xc1, 0x2a, 0x6f, 0x8e, 0x3a, 0xfe, 0xf0, 0xa2, 0x9d,
0xed, 0x9f, 0x05, 0xaf, 0xbd, 0xda, 0x3f, 0xd7, 0x85, 0x61, 0xa8, 0xfd, 0x73, 0xbd, 0xc3, 0xbf, 0xfa, 0xb4, 0xce, 0x62, 0x9c, 0x8a, 0xda, 0x3f, 0x69, 0xd1, 0x16, 0x6c, 0xff, 0x2c, 0x78, 0xed,
0x07, 0xab, 0x29, 0xfe, 0x77, 0xf2, 0x86, 0x54, 0x6c, 0xae, 0xf5, 0xcd, 0x6f, 0xa5, 0xfa, 0x69, 0xd5, 0xfe, 0xb9, 0x2e, 0x0c, 0x43, 0xed, 0x9f, 0xeb, 0x1d, 0xfe, 0x3d, 0x58, 0x4d, 0xf1, 0xbf,
0xc9, 0x10, 0x36, 0x79, 0x9e, 0xd6, 0x64, 0x92, 0x70, 0xf7, 0xbe, 0xae, 0x65, 0x48, 0x71, 0x61, 0x93, 0x37, 0xa4, 0x62, 0x73, 0xad, 0x6f, 0x7e, 0x2b, 0xd5, 0x4f, 0x4b, 0x86, 0xb0, 0xc9, 0xf3,
0xc7, 0x44, 0x99, 0x84, 0x1b, 0xbb, 0x07, 0x8d, 0xa4, 0xa7, 0x94, 0x5c, 0x4f, 0xbe, 0x75, 0x27, 0xb4, 0x26, 0x93, 0x84, 0xbb, 0xf7, 0x75, 0x2d, 0x43, 0x8a, 0x0b, 0x3b, 0x26, 0xca, 0x24, 0xdc,
0x26, 0xb2, 0x2f, 0x7a, 0x57, 0xc9, 0x17, 0xca, 0x5f, 0x9b, 0x68, 0xe3, 0x9d, 0xe8, 0x8b, 0x70, 0xd8, 0x3d, 0x68, 0x24, 0x3d, 0xa5, 0xe4, 0x7a, 0xf2, 0xad, 0x3b, 0x31, 0x91, 0x7d, 0xd1, 0xbb,
0xa9, 0xde, 0x65, 0xa5, 0x0d, 0xa4, 0xba, 0x7b, 0xc9, 0x2f, 0xc2, 0x66, 0x72, 0x45, 0xcb, 0x92, 0x4a, 0xbe, 0x50, 0xfe, 0xda, 0x44, 0x1b, 0xef, 0x44, 0x5f, 0x84, 0x4b, 0xf5, 0x2e, 0x2b, 0x6d,
0xef, 0xa6, 0x0d, 0xd7, 0xb5, 0xa2, 0x5c, 0xbc, 0x43, 0x0f, 0x32, 0x8c, 0x11, 0xeb, 0x5e, 0x55, 0x20, 0xd5, 0xdd, 0x4b, 0x7e, 0x11, 0x36, 0x93, 0x2b, 0x5a, 0x96, 0x7c, 0x37, 0x6d, 0xb8, 0xae,
0xb5, 0x90, 0x52, 0xdc, 0xbb, 0x6a, 0x21, 0xa5, 0xba, 0x61, 0x8f, 0x60, 0x39, 0xe1, 0x50, 0x55, 0x15, 0xe5, 0xe2, 0x1d, 0x7a, 0x90, 0x61, 0x8c, 0x58, 0xf7, 0xaa, 0xaa, 0x85, 0x94, 0xe2, 0xde,
0x62, 0x70, 0xba, 0x0b, 0x56, 0x89, 0xc1, 0xd7, 0xf9, 0x61, 0x07, 0xd0, 0x48, 0xba, 0x4a, 0xd5, 0x55, 0x0b, 0x29, 0xd5, 0x0d, 0x7b, 0x04, 0xcb, 0x09, 0x87, 0xaa, 0x12, 0x83, 0xd3, 0x5d, 0xb0,
0x5c, 0x5f, 0xe3, 0x7e, 0xdd, 0xba, 0x73, 0x2d, 0x3e, 0xde, 0x4c, 0xcd, 0xa9, 0x18, 0x6b, 0xe6, 0x4a, 0x0c, 0xbe, 0xce, 0x0f, 0x3b, 0x80, 0x46, 0xd2, 0x55, 0xaa, 0xe6, 0xfa, 0x1a, 0xf7, 0xeb,
0xa2, 0x2b, 0x34, 0xd6, 0xcc, 0x14, 0x97, 0xe6, 0xce, 0x3b, 0xbf, 0xf4, 0x9d, 0x33, 0x27, 0x3c, 0xd6, 0x9d, 0x6b, 0xf1, 0xf1, 0x66, 0x6a, 0x4e, 0xc5, 0x58, 0x33, 0x17, 0x5d, 0xa1, 0xb1, 0x66,
0x9f, 0x9f, 0x6c, 0x8f, 0xbc, 0xe9, 0xfb, 0x13, 0x69, 0xd5, 0x10, 0xf7, 0xce, 0xdf, 0x9f, 0xb8, 0xa6, 0xb8, 0x34, 0x77, 0xde, 0xf9, 0xa5, 0xef, 0x9c, 0x39, 0xe1, 0xf9, 0xfc, 0x64, 0x7b, 0xe4,
0xe3, 0xf7, 0xb1, 0x80, 0x93, 0xa5, 0x99, 0xef, 0x85, 0xde, 0x87, 0xff, 0x37, 0x00, 0x00, 0xff, 0x4d, 0xdf, 0x9f, 0x48, 0xab, 0x86, 0xb8, 0x77, 0xfe, 0xfe, 0xc4, 0x1d, 0xbf, 0x8f, 0x05, 0x9c,
0xff, 0xee, 0x02, 0x2a, 0x27, 0x75, 0x8b, 0x00, 0x00, 0x2c, 0xcd, 0x7c, 0x2f, 0xf4, 0x3e, 0xfc, 0xbf, 0x01, 0x00, 0x00, 0xff, 0xff, 0x34, 0x23, 0x20,
0x4e, 0x8f, 0x8b, 0x00, 0x00,
} }
// Reference imports to suppress errors if they are not otherwise used. // Reference imports to suppress errors if they are not otherwise used.

@ -969,6 +969,12 @@ message ConnectPeerRequest {
/* If set, the daemon will attempt to persistently connect to the target /* If set, the daemon will attempt to persistently connect to the target
* peer. Otherwise, the call will be synchronous. */ * peer. Otherwise, the call will be synchronous. */
bool perm = 2; bool perm = 2;
/*
The connection timeout value (in seconds) for this request. It won't affect
other requests.
*/
uint64 timeout = 3;
} }
message ConnectPeerResponse { message ConnectPeerResponse {
} }

@ -3223,6 +3223,11 @@
"type": "boolean", "type": "boolean",
"format": "boolean", "format": "boolean",
"description": "If set, the daemon will attempt to persistently connect to the target\npeer. Otherwise, the call will be synchronous." "description": "If set, the daemon will attempt to persistently connect to the target\npeer. Otherwise, the call will be synchronous."
},
"timeout": {
"type": "string",
"format": "uint64",
"description": "The connection timeout value (in seconds) for this request. It won't affect\nother requests."
} }
} }
}, },

@ -14378,6 +14378,10 @@ var testsCases = []*testCase{
name: "maximum channel size", name: "maximum channel size",
test: testMaxChannelSize, test: testMaxChannelSize,
}, },
{
name: "connection timeout",
test: testNetworkConnectionTimeout,
},
} }
// TestLightningNetworkDaemon performs a series of integration tests amongst a // TestLightningNetworkDaemon performs a series of integration tests amongst a

@ -221,3 +221,9 @@
<time> [ERR] RPCS: [/lnrpc.Lightning/BakeMacaroon]: invalid permission entity. supported actions are [read write generate], supported entities are [onchain offchain address message peers info invoices signer macaroon uri] <time> [ERR] RPCS: [/lnrpc.Lightning/BakeMacaroon]: invalid permission entity. supported actions are [read write generate], supported entities are [onchain offchain address message peers info invoices signer macaroon uri]
<time> [ERR] RPCS: [/lnrpc.Lightning/BakeMacaroon]: permission list cannot be empty. specify at least one action/entity pair. supported actions are [read write generate], supported entities are [onchain offchain address message peers info invoices signer macaroon uri] <time> [ERR] RPCS: [/lnrpc.Lightning/BakeMacaroon]: permission list cannot be empty. specify at least one action/entity pair. supported actions are [read write generate], supported entities are [onchain offchain address message peers info invoices signer macaroon uri]
<time> [ERR] RPCS: [/lnrpc.Lightning/DeleteMacaroonID]: the specified ID cannot be deleted <time> [ERR] RPCS: [/lnrpc.Lightning/DeleteMacaroonID]: the specified ID cannot be deleted
<time> [ERR] RPCS: [/lnrpc.Lightning/ConnectPeer]: dial tcp <ip>: i/o timeout
<time> [ERR] RPCS: [connectpeer]: error connecting to peer: dial tcp <ip>: i/o timeout
<time> [ERR] SRVR: Unable to connect to <hex>@<ip>: dial tcp <ip>: i/o timeout
<time> [ERR] RPCS: [/lnrpc.Lightning/ConnectPeer]: dial tcp <ip>: i/o timeout
<time> [ERR] RPCS: [connectpeer]: error connecting to peer: dial tcp <ip>: i/o timeout
<time> [ERR] SRVR: Unable to connect to <hex>@<ip>: dial tcp <ip>: i/o timeout

125
lntest/itest/network.go Normal file

@ -0,0 +1,125 @@
// +build rpctest
package itest
import (
"context"
"fmt"
"strings"
"time"
"github.com/lightningnetwork/lnd"
"github.com/lightningnetwork/lnd/lnrpc"
"github.com/lightningnetwork/lnd/lntest"
"github.com/stretchr/testify/require"
)
// testNetworkConnectionTimeout checks that the connectiontimeout is taking
// effect. It creates a node with a small connection timeout value, and connects
// it to a non-routable IP address.
func testNetworkConnectionTimeout(net *lntest.NetworkHarness, t *harnessTest) {
var (
ctxt, _ = context.WithTimeout(
context.Background(), defaultTimeout,
)
// testPub is a random public key for testing only.
testPub = "0332bda7da70fefe4b6ab92f53b3c4f4ee7999" +
"f312284a8e89c8670bb3f67dbee2"
// testHost is a non-routable IP address. It's used to cause a
// connection timeout.
testHost = "10.255.255.255"
)
// First, test the global timeout settings.
// Create Carol with a connection timeout of 1 millisecond.
carol, err := net.NewNode("Carol", []string{"--connectiontimeout=1ms"})
if err != nil {
t.Fatalf("unable to create new node carol: %v", err)
}
defer shutdownAndAssert(net, t, carol)
// Try to connect Carol to a non-routable IP address, which should give
// us a timeout error.
req := &lnrpc.ConnectPeerRequest{
Addr: &lnrpc.LightningAddress{
Pubkey: testPub,
Host: testHost,
},
}
assertTimeoutError(ctxt, t, carol, req)
// Second, test timeout on the connect peer request.
// Create Dave with the default timeout setting.
dave, err := net.NewNode("Dave", nil)
if err != nil {
t.Fatalf("unable to create new node dave: %v", err)
}
defer shutdownAndAssert(net, t, dave)
// Try to connect Dave to a non-routable IP address, using a timeout
// value of 1ms, which should give us a timeout error immediately.
req = &lnrpc.ConnectPeerRequest{
Addr: &lnrpc.LightningAddress{
Pubkey: testPub,
Host: testHost,
},
Timeout: 1,
}
assertTimeoutError(ctxt, t, dave, req)
}
// assertTimeoutError asserts that a connection timeout error is raised. A
// context with a default timeout is used to make the request. If our customized
// connection timeout is less than the default, we won't see the request context
// times out, instead a network connection timeout will be returned.
func assertTimeoutError(ctxt context.Context, t *harnessTest,
node *lntest.HarnessNode, req *lnrpc.ConnectPeerRequest) {
t.t.Helper()
// Create a context with a timeout value.
ctxt, cancel := context.WithTimeout(ctxt, defaultTimeout)
defer cancel()
err := connect(node, ctxt, req)
// a DeadlineExceeded error will appear in the context if the above
// ctxtTimeout value is reached.
require.NoError(t.t, ctxt.Err(), "context time out")
// Check that the network returns a timeout error.
require.Containsf(
t.t, err.Error(), "i/o timeout",
"expected to get a timeout error, instead got: %v", err,
)
}
func connect(node *lntest.HarnessNode, ctxt context.Context,
req *lnrpc.ConnectPeerRequest) error {
syncTimeout := time.After(15 * time.Second)
ticker := time.NewTicker(time.Millisecond * 100)
defer ticker.Stop()
for {
select {
case <-ticker.C:
_, err := node.ConnectPeer(ctxt, req)
// If there's no error, return nil
if err == nil {
return err
}
// If the error is no ErrServerNotActive, return it.
// Otherwise, we will retry until timeout.
if !strings.Contains(err.Error(),
lnd.ErrServerNotActive.Error()) {
return err
}
case <-syncTimeout:
return fmt.Errorf("chain backend did not " +
"finish syncing")
}
}
return nil
}

@ -226,7 +226,9 @@ func initAutoPilot(svr *server, cfg *lncfg.AutoPilot,
"address type %T", addr) "address type %T", addr)
} }
err := svr.ConnectToPeer(lnAddr, false) err := svr.ConnectToPeer(
lnAddr, false, svr.cfg.ConnectionTimeout,
)
if err != nil { if err != nil {
// If we weren't able to connect to the // If we weren't able to connect to the
// peer at this address, then we'll move // peer at this address, then we'll move

@ -1512,8 +1512,25 @@ func (r *rpcServer) ConnectPeer(ctx context.Context,
rpcsLog.Debugf("[connectpeer] requested connection to %x@%s", rpcsLog.Debugf("[connectpeer] requested connection to %x@%s",
peerAddr.IdentityKey.SerializeCompressed(), peerAddr.Address) peerAddr.IdentityKey.SerializeCompressed(), peerAddr.Address)
if err := r.server.ConnectToPeer(peerAddr, in.Perm); err != nil { // By default, we will use the global connection timeout value.
rpcsLog.Errorf("[connectpeer]: error connecting to peer: %v", err) timeout := r.cfg.ConnectionTimeout
// Check if the connection timeout is set. If set, we will use it in our
// request.
if in.Timeout != 0 {
timeout = time.Duration(in.Timeout) * time.Second
rpcsLog.Debugf(
"[connectpeer] connection timeout is set to %v",
timeout,
)
}
if err := r.server.ConnectToPeer(peerAddr,
in.Perm, timeout); err != nil {
rpcsLog.Errorf(
"[connectpeer]: error connecting to peer: %v", err,
)
return nil, err return nil, err
} }
@ -1980,8 +1997,8 @@ out:
// If a final channel open update is being sent, then // If a final channel open update is being sent, then
// we can break out of our recv loop as we no longer // we can break out of our recv loop as we no longer
// need to process any further updates. // need to process any further updates.
switch update := fundingUpdate.Update.(type) { update, ok := fundingUpdate.Update.(*lnrpc.OpenStatusUpdate_ChanOpen)
case *lnrpc.OpenStatusUpdate_ChanOpen: if ok {
chanPoint := update.ChanOpen.ChannelPoint chanPoint := update.ChanOpen.ChannelPoint
txid, err := GetChanPointFundingTxid(chanPoint) txid, err := GetChanPointFundingTxid(chanPoint)
if err != nil { if err != nil {

@ -158,6 +158,9 @@
; support devices behind multiple NATs. ; support devices behind multiple NATs.
; nat=true ; nat=true
; The timeout value for network connections in seconds, default to 120 seconds.
; Valid uints are {ms, s, m, h}.
; connectiontimeout=120s
; Debug logging level. ; Debug logging level.
; Valid levels are {trace, debug, info, warn, error, critical} ; Valid levels are {trace, debug, info, warn, error, critical}

@ -68,6 +68,7 @@ import (
"github.com/lightningnetwork/lnd/watchtower/wtclient" "github.com/lightningnetwork/lnd/watchtower/wtclient"
"github.com/lightningnetwork/lnd/watchtower/wtdb" "github.com/lightningnetwork/lnd/watchtower/wtdb"
"github.com/lightningnetwork/lnd/watchtower/wtpolicy" "github.com/lightningnetwork/lnd/watchtower/wtpolicy"
"github.com/lightningnetwork/lnd/watchtower/wtserver"
) )
const ( const (
@ -325,11 +326,11 @@ func parseAddr(address string, netCfg tor.Net) (net.Addr, error) {
// noiseDial is a factory function which creates a connmgr compliant dialing // noiseDial is a factory function which creates a connmgr compliant dialing
// function by returning a closure which includes the server's identity key. // function by returning a closure which includes the server's identity key.
func noiseDial(idKey keychain.SingleKeyECDH, func noiseDial(idKey keychain.SingleKeyECDH,
netCfg tor.Net) func(net.Addr) (net.Conn, error) { netCfg tor.Net, timeout time.Duration) func(net.Addr) (net.Conn, error) {
return func(a net.Addr) (net.Conn, error) { return func(a net.Addr) (net.Conn, error) {
lnAddr := a.(*lnwire.NetAddress) lnAddr := a.(*lnwire.NetAddress)
return brontide.Dial(idKey, lnAddr, netCfg.Dial) return brontide.Dial(idKey, lnAddr, timeout, netCfg.Dial)
} }
} }
@ -1236,12 +1237,23 @@ func newServer(cfg *Config, listenAddrs []net.Addr,
return nil, err return nil, err
} }
// authDial is the wrapper around the btrontide.Dial for the
// watchtower.
authDial := func(localKey keychain.SingleKeyECDH,
netAddr *lnwire.NetAddress,
dialer tor.DialFunc) (wtserver.Peer, error) {
return brontide.Dial(
localKey, netAddr, cfg.ConnectionTimeout, dialer,
)
}
s.towerClient, err = wtclient.New(&wtclient.Config{ s.towerClient, err = wtclient.New(&wtclient.Config{
Signer: cc.wallet.Cfg.Signer, Signer: cc.wallet.Cfg.Signer,
NewAddress: newSweepPkScriptGen(cc.wallet), NewAddress: newSweepPkScriptGen(cc.wallet),
SecretKeyRing: s.cc.keyRing, SecretKeyRing: s.cc.keyRing,
Dial: cfg.net.Dial, Dial: cfg.net.Dial,
AuthDial: wtclient.AuthDial, AuthDial: authDial,
DB: towerClientDB, DB: towerClientDB,
Policy: policy, Policy: policy,
ChainHash: *s.cfg.ActiveNetParams.GenesisHash, ChainHash: *s.cfg.ActiveNetParams.GenesisHash,
@ -1332,8 +1344,10 @@ func newServer(cfg *Config, listenAddrs []net.Addr,
OnAccept: s.InboundPeerConnected, OnAccept: s.InboundPeerConnected,
RetryDuration: time.Second * 5, RetryDuration: time.Second * 5,
TargetOutbound: 100, TargetOutbound: 100,
Dial: noiseDial(s.identityECDH, s.cfg.net), Dial: noiseDial(
OnConnection: s.OutboundPeerConnected, s.identityECDH, s.cfg.net, s.cfg.ConnectionTimeout,
),
OnConnection: s.OutboundPeerConnected,
}) })
if err != nil { if err != nil {
return nil, err return nil, err
@ -1847,7 +1861,7 @@ func initNetworkBootstrappers(s *server) ([]discovery.NetworkPeerBootstrapper, e
"seeds: %v", dnsSeeds) "seeds: %v", dnsSeeds)
dnsBootStrapper := discovery.NewDNSSeedBootstrapper( dnsBootStrapper := discovery.NewDNSSeedBootstrapper(
dnsSeeds, s.cfg.net, dnsSeeds, s.cfg.net, s.cfg.ConnectionTimeout,
) )
bootStrappers = append(bootStrappers, dnsBootStrapper) bootStrappers = append(bootStrappers, dnsBootStrapper)
} }
@ -1970,7 +1984,10 @@ func (s *server) peerBootstrapper(numTargetPeers uint32,
// TODO(roasbeef): can do AS, subnet, // TODO(roasbeef): can do AS, subnet,
// country diversity, etc // country diversity, etc
errChan := make(chan error, 1) errChan := make(chan error, 1)
s.connectToPeer(a, errChan) s.connectToPeer(
a, errChan,
s.cfg.ConnectionTimeout,
)
select { select {
case err := <-errChan: case err := <-errChan:
if err == nil { if err == nil {
@ -2072,7 +2089,9 @@ func (s *server) initialPeerBootstrap(ignore map[autopilot.NodeID]struct{},
defer wg.Done() defer wg.Done()
errChan := make(chan error, 1) errChan := make(chan error, 1)
go s.connectToPeer(addr, errChan) go s.connectToPeer(
addr, errChan, s.cfg.ConnectionTimeout,
)
// We'll only allow this connection attempt to // We'll only allow this connection attempt to
// take up to 3 seconds. This allows us to move // take up to 3 seconds. This allows us to move
@ -3383,7 +3402,9 @@ type openChanReq struct {
// connection is established, or the initial handshake process fails. // connection is established, or the initial handshake process fails.
// //
// NOTE: This function is safe for concurrent access. // NOTE: This function is safe for concurrent access.
func (s *server) ConnectToPeer(addr *lnwire.NetAddress, perm bool) error { func (s *server) ConnectToPeer(addr *lnwire.NetAddress,
perm bool, timeout time.Duration) error {
targetPub := string(addr.IdentityKey.SerializeCompressed()) targetPub := string(addr.IdentityKey.SerializeCompressed())
// Acquire mutex, but use explicit unlocking instead of defer for // Acquire mutex, but use explicit unlocking instead of defer for
@ -3444,7 +3465,7 @@ func (s *server) ConnectToPeer(addr *lnwire.NetAddress, perm bool) error {
// the crypto negotiation breaks down, then return an error to the // the crypto negotiation breaks down, then return an error to the
// caller. // caller.
errChan := make(chan error, 1) errChan := make(chan error, 1)
s.connectToPeer(addr, errChan) s.connectToPeer(addr, errChan, timeout)
select { select {
case err := <-errChan: case err := <-errChan:
@ -3457,8 +3478,12 @@ func (s *server) ConnectToPeer(addr *lnwire.NetAddress, perm bool) error {
// connectToPeer establishes a connection to a remote peer. errChan is used to // connectToPeer establishes a connection to a remote peer. errChan is used to
// notify the caller if the connection attempt has failed. Otherwise, it will be // notify the caller if the connection attempt has failed. Otherwise, it will be
// closed. // closed.
func (s *server) connectToPeer(addr *lnwire.NetAddress, errChan chan<- error) { func (s *server) connectToPeer(addr *lnwire.NetAddress,
conn, err := brontide.Dial(s.identityECDH, addr, s.cfg.net.Dial) errChan chan<- error, timeout time.Duration) {
conn, err := brontide.Dial(
s.identityECDH, addr, timeout, s.cfg.net.Dial,
)
if err != nil { if err != nil {
srvrLog.Errorf("Unable to connect to %v: %v", addr, err) srvrLog.Errorf("Unable to connect to %v: %v", addr, err)
select { select {

@ -1,19 +1,31 @@
package tor package tor
import ( import (
"context"
"errors" "errors"
"net" "net"
"time"
) )
// TODO: this interface and its implementations should ideally be moved // TODO: this interface and its implementations should ideally be moved
// elsewhere as they are not Tor-specific. // elsewhere as they are not Tor-specific.
const (
// DefaultConnTimeout is the maximum amount of time a dial will wait for
// a connect to complete.
DefaultConnTimeout time.Duration = time.Second * 120
)
// DialFunc is a type defines the signature of a dialer used by our Net
// interface.
type DialFunc func(net, addr string, timeout time.Duration) (net.Conn, error)
// Net is an interface housing a Dial function and several DNS functions that // Net is an interface housing a Dial function and several DNS functions that
// allows us to abstract the implementations of these functions over different // allows us to abstract the implementations of these functions over different
// networks, e.g. clearnet, Tor net, etc. // networks, e.g. clearnet, Tor net, etc.
type Net interface { type Net interface {
// Dial connects to the address on the named network. // Dial connects to the address on the named network.
Dial(network, address string) (net.Conn, error) Dial(network, address string, timeout time.Duration) (net.Conn, error)
// LookupHost performs DNS resolution on a given host and returns its // LookupHost performs DNS resolution on a given host and returns its
// addresses. // addresses.
@ -21,7 +33,8 @@ type Net interface {
// LookupSRV tries to resolve an SRV query of the given service, // LookupSRV tries to resolve an SRV query of the given service,
// protocol, and domain name. // protocol, and domain name.
LookupSRV(service, proto, name string) (string, []*net.SRV, error) LookupSRV(service, proto, name string,
timeout time.Duration) (string, []*net.SRV, error)
// ResolveTCPAddr resolves TCP addresses. // ResolveTCPAddr resolves TCP addresses.
ResolveTCPAddr(network, address string) (*net.TCPAddr, error) ResolveTCPAddr(network, address string) (*net.TCPAddr, error)
@ -32,8 +45,10 @@ type Net interface {
type ClearNet struct{} type ClearNet struct{}
// Dial on the regular network uses net.Dial // Dial on the regular network uses net.Dial
func (r *ClearNet) Dial(network, address string) (net.Conn, error) { func (r *ClearNet) Dial(
return net.Dial(network, address) network, address string, timeout time.Duration) (net.Conn, error) {
return net.DialTimeout(network, address, timeout)
} }
// LookupHost for regular network uses the net.LookupHost function // LookupHost for regular network uses the net.LookupHost function
@ -42,8 +57,14 @@ func (r *ClearNet) LookupHost(host string) ([]string, error) {
} }
// LookupSRV for regular network uses net.LookupSRV function // LookupSRV for regular network uses net.LookupSRV function
func (r *ClearNet) LookupSRV(service, proto, name string) (string, []*net.SRV, error) { func (r *ClearNet) LookupSRV(service, proto, name string,
return net.LookupSRV(service, proto, name) timeout time.Duration) (string, []*net.SRV, error) {
// Create a context with a timeout value.
ctxt, cancel := context.WithTimeout(context.Background(), timeout)
defer cancel()
return net.DefaultResolver.LookupSRV(ctxt, service, proto, name)
} }
// ResolveTCPAddr for regular network uses net.ResolveTCPAddr function // ResolveTCPAddr for regular network uses net.ResolveTCPAddr function
@ -71,13 +92,15 @@ type ProxyNet struct {
// Dial uses the Tor Dial function in order to establish connections through // Dial uses the Tor Dial function in order to establish connections through
// Tor. Since Tor only supports TCP connections, only TCP networks are allowed. // Tor. Since Tor only supports TCP connections, only TCP networks are allowed.
func (p *ProxyNet) Dial(network, address string) (net.Conn, error) { func (p *ProxyNet) Dial(network, address string,
timeout time.Duration) (net.Conn, error) {
switch network { switch network {
case "tcp", "tcp4", "tcp6": case "tcp", "tcp4", "tcp6":
default: default:
return nil, errors.New("cannot dial non-tcp network via Tor") return nil, errors.New("cannot dial non-tcp network via Tor")
} }
return Dial(address, p.SOCKS, p.StreamIsolation) return Dial(address, p.SOCKS, p.StreamIsolation, timeout)
} }
// LookupHost uses the Tor LookupHost function in order to resolve hosts over // LookupHost uses the Tor LookupHost function in order to resolve hosts over
@ -88,8 +111,13 @@ func (p *ProxyNet) LookupHost(host string) ([]string, error) {
// LookupSRV uses the Tor LookupSRV function in order to resolve SRV DNS queries // LookupSRV uses the Tor LookupSRV function in order to resolve SRV DNS queries
// over Tor. // over Tor.
func (p *ProxyNet) LookupSRV(service, proto, name string) (string, []*net.SRV, error) { func (p *ProxyNet) LookupSRV(service, proto,
return LookupSRV(service, proto, name, p.SOCKS, p.DNS, p.StreamIsolation) name string, timeout time.Duration) (string, []*net.SRV, error) {
return LookupSRV(
service, proto, name, p.SOCKS, p.DNS,
p.StreamIsolation, timeout,
)
} }
// ResolveTCPAddr uses the Tor ResolveTCPAddr function in order to resolve TCP // ResolveTCPAddr uses the Tor ResolveTCPAddr function in order to resolve TCP

@ -6,6 +6,7 @@ import (
"fmt" "fmt"
"net" "net"
"strconv" "strconv"
"time"
"github.com/btcsuite/btcd/connmgr" "github.com/btcsuite/btcd/connmgr"
"github.com/miekg/dns" "github.com/miekg/dns"
@ -54,8 +55,10 @@ func (c *proxyConn) RemoteAddr() net.Addr {
// Dial is a wrapper over the non-exported dial function that returns a wrapper // Dial is a wrapper over the non-exported dial function that returns a wrapper
// around net.Conn in order to expose the actual remote address we're dialing, // around net.Conn in order to expose the actual remote address we're dialing,
// rather than the proxy's address. // rather than the proxy's address.
func Dial(address, socksAddr string, streamIsolation bool) (net.Conn, error) { func Dial(address, socksAddr string, streamIsolation bool,
conn, err := dial(address, socksAddr, streamIsolation) timeout time.Duration) (net.Conn, error) {
conn, err := dial(address, socksAddr, streamIsolation, timeout)
if err != nil { if err != nil {
return nil, err return nil, err
} }
@ -75,11 +78,13 @@ func Dial(address, socksAddr string, streamIsolation bool) (net.Conn, error) {
} }
// dial establishes a connection to the address via Tor's SOCKS proxy. Only TCP // dial establishes a connection to the address via Tor's SOCKS proxy. Only TCP
// is supported over Tor. The final argument determines if we should force // is supported over Tor. The argument streamIsolation determines if we should
// stream isolation for this new connection. If we do, then this means this new // force stream isolation for this new connection. If we do, then this means
// connection will use a fresh circuit, rather than possibly re-using an // this new connection will use a fresh circuit, rather than possibly re-using
// existing circuit. // an existing circuit.
func dial(address, socksAddr string, streamIsolation bool) (net.Conn, error) { func dial(address, socksAddr string, streamIsolation bool,
timeout time.Duration) (net.Conn, error) {
// If we were requested to force stream isolation for this connection, // If we were requested to force stream isolation for this connection,
// we'll populate the authentication credentials with random data as // we'll populate the authentication credentials with random data as
// Tor will create a new circuit for each set of credentials. // Tor will create a new circuit for each set of credentials.
@ -97,7 +102,8 @@ func dial(address, socksAddr string, streamIsolation bool) (net.Conn, error) {
} }
// Establish the connection through Tor's SOCKS proxy. // Establish the connection through Tor's SOCKS proxy.
dialer, err := proxy.SOCKS5("tcp", socksAddr, auth, proxy.Direct) proxyDialer := &net.Dialer{Timeout: timeout}
dialer, err := proxy.SOCKS5("tcp", socksAddr, auth, proxyDialer)
if err != nil { if err != nil {
return nil, err return nil, err
} }
@ -121,11 +127,12 @@ func LookupHost(host, socksAddr string) ([]string, error) {
// natively support SRV queries so we must route all SRV queries through the // natively support SRV queries so we must route all SRV queries through the
// proxy by connecting directly to a DNS server and querying it. The DNS server // proxy by connecting directly to a DNS server and querying it. The DNS server
// must have TCP resolution enabled for the given port. // must have TCP resolution enabled for the given port.
func LookupSRV(service, proto, name, socksAddr, dnsServer string, func LookupSRV(service, proto, name, socksAddr,
streamIsolation bool) (string, []*net.SRV, error) { dnsServer string, streamIsolation bool,
timeout time.Duration) (string, []*net.SRV, error) {
// Connect to the DNS server we'll be using to query SRV records. // Connect to the DNS server we'll be using to query SRV records.
conn, err := dial(dnsServer, socksAddr, streamIsolation) conn, err := dial(dnsServer, socksAddr, streamIsolation, timeout)
if err != nil { if err != nil {
return "", nil, err return "", nil, err
} }

@ -14,6 +14,7 @@ import (
"github.com/lightningnetwork/lnd/keychain" "github.com/lightningnetwork/lnd/keychain"
"github.com/lightningnetwork/lnd/lnwallet" "github.com/lightningnetwork/lnd/lnwallet"
"github.com/lightningnetwork/lnd/lnwire" "github.com/lightningnetwork/lnd/lnwire"
"github.com/lightningnetwork/lnd/tor"
"github.com/lightningnetwork/lnd/watchtower/wtdb" "github.com/lightningnetwork/lnd/watchtower/wtdb"
"github.com/lightningnetwork/lnd/watchtower/wtpolicy" "github.com/lightningnetwork/lnd/watchtower/wtpolicy"
"github.com/lightningnetwork/lnd/watchtower/wtserver" "github.com/lightningnetwork/lnd/watchtower/wtserver"
@ -137,7 +138,7 @@ type Config struct {
// Dial connects to an addr using the specified net and returns the // Dial connects to an addr using the specified net and returns the
// connection object. // connection object.
Dial Dial Dial tor.DialFunc
// AuthDialer establishes a brontide connection over an onion or clear // AuthDialer establishes a brontide connection over an onion or clear
// network. // network.

@ -16,6 +16,7 @@ import (
"github.com/lightningnetwork/lnd/keychain" "github.com/lightningnetwork/lnd/keychain"
"github.com/lightningnetwork/lnd/lnwallet" "github.com/lightningnetwork/lnd/lnwallet"
"github.com/lightningnetwork/lnd/lnwire" "github.com/lightningnetwork/lnd/lnwire"
"github.com/lightningnetwork/lnd/tor"
"github.com/lightningnetwork/lnd/watchtower/blob" "github.com/lightningnetwork/lnd/watchtower/blob"
"github.com/lightningnetwork/lnd/watchtower/wtclient" "github.com/lightningnetwork/lnd/watchtower/wtclient"
"github.com/lightningnetwork/lnd/watchtower/wtdb" "github.com/lightningnetwork/lnd/watchtower/wtdb"
@ -84,7 +85,9 @@ func newMockNet(cb func(wtserver.Peer)) *mockNet {
} }
} }
func (m *mockNet) Dial(network string, address string) (net.Conn, error) { func (m *mockNet) Dial(network string, address string,
timeout time.Duration) (net.Conn, error) {
return nil, nil return nil, nil
} }
@ -100,8 +103,9 @@ func (m *mockNet) ResolveTCPAddr(network string, address string) (*net.TCPAddr,
panic("not implemented") panic("not implemented")
} }
func (m *mockNet) AuthDial(local keychain.SingleKeyECDH, netAddr *lnwire.NetAddress, func (m *mockNet) AuthDial(local keychain.SingleKeyECDH,
dialer func(string, string) (net.Conn, error)) (wtserver.Peer, error) { netAddr *lnwire.NetAddress,
dialer tor.DialFunc) (wtserver.Peer, error) {
localPk := local.PubKey() localPk := local.PubKey()
localAddr := &net.TCPAddr{ localAddr := &net.TCPAddr{
@ -433,10 +437,8 @@ func newHarness(t *testing.T, cfg harnessCfg) *testHarness {
clientDB := wtmock.NewClientDB() clientDB := wtmock.NewClientDB()
clientCfg := &wtclient.Config{ clientCfg := &wtclient.Config{
Signer: signer, Signer: signer,
Dial: func(string, string) (net.Conn, error) { Dial: mockNet.Dial,
return nil, nil
},
DB: clientDB, DB: clientDB,
AuthDial: mockNet.AuthDial, AuthDial: mockNet.AuthDial,
SecretKeyRing: wtmock.NewSecretKeyRing(), SecretKeyRing: wtmock.NewSecretKeyRing(),

@ -4,9 +4,9 @@ import (
"net" "net"
"github.com/btcsuite/btcd/btcec" "github.com/btcsuite/btcd/btcec"
"github.com/lightningnetwork/lnd/brontide"
"github.com/lightningnetwork/lnd/keychain" "github.com/lightningnetwork/lnd/keychain"
"github.com/lightningnetwork/lnd/lnwire" "github.com/lightningnetwork/lnd/lnwire"
"github.com/lightningnetwork/lnd/tor"
"github.com/lightningnetwork/lnd/watchtower/wtdb" "github.com/lightningnetwork/lnd/watchtower/wtdb"
"github.com/lightningnetwork/lnd/watchtower/wtserver" "github.com/lightningnetwork/lnd/watchtower/wtserver"
) )
@ -95,22 +95,12 @@ type DB interface {
AckUpdate(id *wtdb.SessionID, seqNum, lastApplied uint16) error AckUpdate(id *wtdb.SessionID, seqNum, lastApplied uint16) error
} }
// Dial connects to an addr using the specified net and returns the connection
// object.
type Dial func(net, addr string) (net.Conn, error)
// AuthDialer connects to a remote node using an authenticated transport, such as // AuthDialer connects to a remote node using an authenticated transport, such as
// brontide. The dialer argument is used to specify a resolver, which allows // brontide. The dialer argument is used to specify a resolver, which allows
// this method to be used over Tor or clear net connections. // this method to be used over Tor or clear net connections.
type AuthDialer func(localKey keychain.SingleKeyECDH, netAddr *lnwire.NetAddress, type AuthDialer func(localKey keychain.SingleKeyECDH,
dialer func(string, string) (net.Conn, error)) (wtserver.Peer, error) netAddr *lnwire.NetAddress,
dialer tor.DialFunc) (wtserver.Peer, error)
// AuthDial is the watchtower client's default method of dialing.
func AuthDial(localKey keychain.SingleKeyECDH, netAddr *lnwire.NetAddress,
dialer func(string, string) (net.Conn, error)) (wtserver.Peer, error) {
return brontide.Dial(localKey, netAddr, dialer)
}
// ECDHKeyRing abstracts the ability to derive shared ECDH keys given a // ECDHKeyRing abstracts the ability to derive shared ECDH keys given a
// description of the derivation path of a private key. // description of the derivation path of a private key.