Merge pull request #4463 from guggero/macaroon-custom-permissions

Advanced macaroons 1/2: Custom URI permissions
This commit is contained in:
Oliver Gugger 2020-09-04 11:42:42 +02:00 committed by GitHub
commit b4bf4b2906
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
20 changed files with 1929 additions and 1232 deletions

@ -10,9 +10,11 @@ import (
"strconv"
"strings"
"github.com/golang/protobuf/proto"
"github.com/lightningnetwork/lnd/lnrpc"
"github.com/lightningnetwork/lnd/macaroons"
"github.com/urfave/cli"
"gopkg.in/macaroon-bakery.v2/bakery"
"gopkg.in/macaroon.v2"
)
@ -34,6 +36,19 @@ var bakeMacaroonCommand = cli.Command{
colon. Multiple operations can be added as arguments, for example:
lncli bakemacaroon info:read invoices:write foo:bar
For even more fine-grained permission control, it is also possible to
specify single RPC method URIs that are allowed to be accessed by a
macaroon. This can be achieved by specifying "uri:<methodURI>" pairs,
for example:
lncli bakemacaroon uri:/lnrpc.Lightning/GetInfo uri:/verrpc.Versioner/GetVersion
The macaroon created by this command would only be allowed to use the
"lncli getinfo" and "lncli version" commands.
To get a list of all available URIs and permissions, use the
"lncli listpermissions" command.
`,
Flags: []cli.Flag{
cli.StringFlag{
@ -269,3 +284,125 @@ func deleteMacaroonID(ctx *cli.Context) error {
printRespJSON(resp)
return nil
}
var listPermissionsCommand = cli.Command{
Name: "listpermissions",
Category: "Macaroons",
Usage: "Lists all RPC method URIs and the macaroon permissions they " +
"require to be invoked.",
Action: actionDecorator(listPermissions),
}
func listPermissions(ctx *cli.Context) error {
client, cleanUp := getClient(ctx)
defer cleanUp()
request := &lnrpc.ListPermissionsRequest{}
response, err := client.ListPermissions(context.Background(), request)
if err != nil {
return err
}
printRespJSON(response)
return nil
}
type macaroonContent struct {
Version uint16 `json:"version"`
Location string `json:"location"`
RootKeyID string `json:"root_key_id"`
Permissions []string `json:"permissions"`
Caveats []string `json:"caveats"`
}
var printMacaroonCommand = cli.Command{
Name: "printmacaroon",
Category: "Macaroons",
Usage: "Print the content of a macaroon in a human readable format.",
ArgsUsage: "[macaroon_content_hex]",
Description: `
Decode a macaroon and show its content in a more human readable format.
The macaroon can either be passed as a hex encoded positional parameter
or loaded from a file.
`,
Flags: []cli.Flag{
cli.StringFlag{
Name: "macaroon_file",
Usage: "load the macaroon from a file instead of the " +
"command line directly",
},
},
Action: actionDecorator(printMacaroon),
}
func printMacaroon(ctx *cli.Context) error {
// Show command help if no arguments or flags are set.
if ctx.NArg() == 0 && ctx.NumFlags() == 0 {
return cli.ShowCommandHelp(ctx, "printmacaroon")
}
var (
macBytes []byte
err error
args = ctx.Args()
)
switch {
case ctx.IsSet("macaroon_file"):
macPath := cleanAndExpandPath(ctx.String("macaroon_file"))
// Load the specified macaroon file.
macBytes, err = ioutil.ReadFile(macPath)
if err != nil {
return fmt.Errorf("unable to read macaroon path %v: %v",
macPath, err)
}
case args.Present():
macBytes, err = hex.DecodeString(args.First())
if err != nil {
return fmt.Errorf("unable to hex decode macaroon: %v",
err)
}
default:
return fmt.Errorf("macaroon parameter missing")
}
// Decode the macaroon and its protobuf encoded internal identifier.
mac := &macaroon.Macaroon{}
if err = mac.UnmarshalBinary(macBytes); err != nil {
return fmt.Errorf("unable to decode macaroon: %v", err)
}
rawID := mac.Id()
if rawID[0] != byte(bakery.LatestVersion) {
return fmt.Errorf("invalid macaroon version: %x", rawID)
}
decodedID := &lnrpc.MacaroonId{}
idProto := rawID[1:]
err = proto.Unmarshal(idProto, decodedID)
if err != nil {
return fmt.Errorf("unable to decode macaroon version: %v", err)
}
// Prepare everything to be printed in a more human readable format.
content := &macaroonContent{
Version: uint16(mac.Version()),
Location: mac.Location(),
RootKeyID: string(decodedID.StorageId),
Permissions: nil,
Caveats: nil,
}
for _, caveat := range mac.Caveats() {
content.Caveats = append(content.Caveats, string(caveat.Id))
}
for _, op := range decodedID.Ops {
permission := fmt.Sprintf("%s:%s", op.Entity, op.Actions[0])
content.Permissions = append(content.Permissions, permission)
}
printJSON(content)
return nil
}

@ -303,6 +303,8 @@ func main() {
bakeMacaroonCommand,
listMacaroonIDsCommand,
deleteMacaroonIDCommand,
listPermissionsCommand,
printMacaroonCommand,
trackPaymentCommand,
versionCommand,
}

@ -137,6 +137,8 @@ http:
get: "/v1/macaroon/ids"
- selector: lnrpc.Lightning.DeleteMacaroonID
delete: "/v1/macaroon/{root_key_id}"
- selector: lnrpc.Lightning.ListPermissions
get: "/v1/macaroon/permissions"
# walletunlocker.proto
- selector: lnrpc.WalletUnlocker.GenSeed

@ -760,7 +760,7 @@ func (x Failure_FailureCode) String() string {
}
func (Failure_FailureCode) EnumDescriptor() ([]byte, []int) {
return fileDescriptor_77a6da22d6a3feb1, []int{154, 0}
return fileDescriptor_77a6da22d6a3feb1, []int{157, 0}
}
type Utxo struct {
@ -11758,6 +11758,119 @@ func (m *DeleteMacaroonIDResponse) GetDeleted() bool {
return false
}
type MacaroonPermissionList struct {
// A list of macaroon permissions.
Permissions []*MacaroonPermission `protobuf:"bytes,1,rep,name=permissions,proto3" json:"permissions,omitempty"`
XXX_NoUnkeyedLiteral struct{} `json:"-"`
XXX_unrecognized []byte `json:"-"`
XXX_sizecache int32 `json:"-"`
}
func (m *MacaroonPermissionList) Reset() { *m = MacaroonPermissionList{} }
func (m *MacaroonPermissionList) String() string { return proto.CompactTextString(m) }
func (*MacaroonPermissionList) ProtoMessage() {}
func (*MacaroonPermissionList) Descriptor() ([]byte, []int) {
return fileDescriptor_77a6da22d6a3feb1, []int{154}
}
func (m *MacaroonPermissionList) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_MacaroonPermissionList.Unmarshal(m, b)
}
func (m *MacaroonPermissionList) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
return xxx_messageInfo_MacaroonPermissionList.Marshal(b, m, deterministic)
}
func (m *MacaroonPermissionList) XXX_Merge(src proto.Message) {
xxx_messageInfo_MacaroonPermissionList.Merge(m, src)
}
func (m *MacaroonPermissionList) XXX_Size() int {
return xxx_messageInfo_MacaroonPermissionList.Size(m)
}
func (m *MacaroonPermissionList) XXX_DiscardUnknown() {
xxx_messageInfo_MacaroonPermissionList.DiscardUnknown(m)
}
var xxx_messageInfo_MacaroonPermissionList proto.InternalMessageInfo
func (m *MacaroonPermissionList) GetPermissions() []*MacaroonPermission {
if m != nil {
return m.Permissions
}
return nil
}
type ListPermissionsRequest struct {
XXX_NoUnkeyedLiteral struct{} `json:"-"`
XXX_unrecognized []byte `json:"-"`
XXX_sizecache int32 `json:"-"`
}
func (m *ListPermissionsRequest) Reset() { *m = ListPermissionsRequest{} }
func (m *ListPermissionsRequest) String() string { return proto.CompactTextString(m) }
func (*ListPermissionsRequest) ProtoMessage() {}
func (*ListPermissionsRequest) Descriptor() ([]byte, []int) {
return fileDescriptor_77a6da22d6a3feb1, []int{155}
}
func (m *ListPermissionsRequest) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_ListPermissionsRequest.Unmarshal(m, b)
}
func (m *ListPermissionsRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
return xxx_messageInfo_ListPermissionsRequest.Marshal(b, m, deterministic)
}
func (m *ListPermissionsRequest) XXX_Merge(src proto.Message) {
xxx_messageInfo_ListPermissionsRequest.Merge(m, src)
}
func (m *ListPermissionsRequest) XXX_Size() int {
return xxx_messageInfo_ListPermissionsRequest.Size(m)
}
func (m *ListPermissionsRequest) XXX_DiscardUnknown() {
xxx_messageInfo_ListPermissionsRequest.DiscardUnknown(m)
}
var xxx_messageInfo_ListPermissionsRequest proto.InternalMessageInfo
type ListPermissionsResponse struct {
//
//A map between all RPC method URIs and their required macaroon permissions to
//access them.
MethodPermissions map[string]*MacaroonPermissionList `protobuf:"bytes,1,rep,name=method_permissions,json=methodPermissions,proto3" json:"method_permissions,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"`
XXX_NoUnkeyedLiteral struct{} `json:"-"`
XXX_unrecognized []byte `json:"-"`
XXX_sizecache int32 `json:"-"`
}
func (m *ListPermissionsResponse) Reset() { *m = ListPermissionsResponse{} }
func (m *ListPermissionsResponse) String() string { return proto.CompactTextString(m) }
func (*ListPermissionsResponse) ProtoMessage() {}
func (*ListPermissionsResponse) Descriptor() ([]byte, []int) {
return fileDescriptor_77a6da22d6a3feb1, []int{156}
}
func (m *ListPermissionsResponse) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_ListPermissionsResponse.Unmarshal(m, b)
}
func (m *ListPermissionsResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
return xxx_messageInfo_ListPermissionsResponse.Marshal(b, m, deterministic)
}
func (m *ListPermissionsResponse) XXX_Merge(src proto.Message) {
xxx_messageInfo_ListPermissionsResponse.Merge(m, src)
}
func (m *ListPermissionsResponse) XXX_Size() int {
return xxx_messageInfo_ListPermissionsResponse.Size(m)
}
func (m *ListPermissionsResponse) XXX_DiscardUnknown() {
xxx_messageInfo_ListPermissionsResponse.DiscardUnknown(m)
}
var xxx_messageInfo_ListPermissionsResponse proto.InternalMessageInfo
func (m *ListPermissionsResponse) GetMethodPermissions() map[string]*MacaroonPermissionList {
if m != nil {
return m.MethodPermissions
}
return nil
}
type Failure struct {
// Failure code as defined in the Lightning spec
Code Failure_FailureCode `protobuf:"varint,1,opt,name=code,proto3,enum=lnrpc.Failure_FailureCode" json:"code,omitempty"`
@ -11786,7 +11899,7 @@ func (m *Failure) Reset() { *m = Failure{} }
func (m *Failure) String() string { return proto.CompactTextString(m) }
func (*Failure) ProtoMessage() {}
func (*Failure) Descriptor() ([]byte, []int) {
return fileDescriptor_77a6da22d6a3feb1, []int{154}
return fileDescriptor_77a6da22d6a3feb1, []int{157}
}
func (m *Failure) XXX_Unmarshal(b []byte) error {
@ -11930,7 +12043,7 @@ func (m *ChannelUpdate) Reset() { *m = ChannelUpdate{} }
func (m *ChannelUpdate) String() string { return proto.CompactTextString(m) }
func (*ChannelUpdate) ProtoMessage() {}
func (*ChannelUpdate) Descriptor() ([]byte, []int) {
return fileDescriptor_77a6da22d6a3feb1, []int{155}
return fileDescriptor_77a6da22d6a3feb1, []int{158}
}
func (m *ChannelUpdate) XXX_Unmarshal(b []byte) error {
@ -12035,6 +12148,108 @@ func (m *ChannelUpdate) GetExtraOpaqueData() []byte {
return nil
}
type MacaroonId struct {
Nonce []byte `protobuf:"bytes,1,opt,name=nonce,proto3" json:"nonce,omitempty"`
StorageId []byte `protobuf:"bytes,2,opt,name=storageId,proto3" json:"storageId,omitempty"`
Ops []*Op `protobuf:"bytes,3,rep,name=ops,proto3" json:"ops,omitempty"`
XXX_NoUnkeyedLiteral struct{} `json:"-"`
XXX_unrecognized []byte `json:"-"`
XXX_sizecache int32 `json:"-"`
}
func (m *MacaroonId) Reset() { *m = MacaroonId{} }
func (m *MacaroonId) String() string { return proto.CompactTextString(m) }
func (*MacaroonId) ProtoMessage() {}
func (*MacaroonId) Descriptor() ([]byte, []int) {
return fileDescriptor_77a6da22d6a3feb1, []int{159}
}
func (m *MacaroonId) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_MacaroonId.Unmarshal(m, b)
}
func (m *MacaroonId) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
return xxx_messageInfo_MacaroonId.Marshal(b, m, deterministic)
}
func (m *MacaroonId) XXX_Merge(src proto.Message) {
xxx_messageInfo_MacaroonId.Merge(m, src)
}
func (m *MacaroonId) XXX_Size() int {
return xxx_messageInfo_MacaroonId.Size(m)
}
func (m *MacaroonId) XXX_DiscardUnknown() {
xxx_messageInfo_MacaroonId.DiscardUnknown(m)
}
var xxx_messageInfo_MacaroonId proto.InternalMessageInfo
func (m *MacaroonId) GetNonce() []byte {
if m != nil {
return m.Nonce
}
return nil
}
func (m *MacaroonId) GetStorageId() []byte {
if m != nil {
return m.StorageId
}
return nil
}
func (m *MacaroonId) GetOps() []*Op {
if m != nil {
return m.Ops
}
return nil
}
type Op struct {
Entity string `protobuf:"bytes,1,opt,name=entity,proto3" json:"entity,omitempty"`
Actions []string `protobuf:"bytes,2,rep,name=actions,proto3" json:"actions,omitempty"`
XXX_NoUnkeyedLiteral struct{} `json:"-"`
XXX_unrecognized []byte `json:"-"`
XXX_sizecache int32 `json:"-"`
}
func (m *Op) Reset() { *m = Op{} }
func (m *Op) String() string { return proto.CompactTextString(m) }
func (*Op) ProtoMessage() {}
func (*Op) Descriptor() ([]byte, []int) {
return fileDescriptor_77a6da22d6a3feb1, []int{160}
}
func (m *Op) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_Op.Unmarshal(m, b)
}
func (m *Op) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
return xxx_messageInfo_Op.Marshal(b, m, deterministic)
}
func (m *Op) XXX_Merge(src proto.Message) {
xxx_messageInfo_Op.Merge(m, src)
}
func (m *Op) XXX_Size() int {
return xxx_messageInfo_Op.Size(m)
}
func (m *Op) XXX_DiscardUnknown() {
xxx_messageInfo_Op.DiscardUnknown(m)
}
var xxx_messageInfo_Op proto.InternalMessageInfo
func (m *Op) GetEntity() string {
if m != nil {
return m.Entity
}
return ""
}
func (m *Op) GetActions() []string {
if m != nil {
return m.Actions
}
return nil
}
func init() {
proto.RegisterEnum("lnrpc.AddressType", AddressType_name, AddressType_value)
proto.RegisterEnum("lnrpc.CommitmentType", CommitmentType_name, CommitmentType_value)
@ -12226,751 +12441,766 @@ func init() {
proto.RegisterType((*ListMacaroonIDsResponse)(nil), "lnrpc.ListMacaroonIDsResponse")
proto.RegisterType((*DeleteMacaroonIDRequest)(nil), "lnrpc.DeleteMacaroonIDRequest")
proto.RegisterType((*DeleteMacaroonIDResponse)(nil), "lnrpc.DeleteMacaroonIDResponse")
proto.RegisterType((*MacaroonPermissionList)(nil), "lnrpc.MacaroonPermissionList")
proto.RegisterType((*ListPermissionsRequest)(nil), "lnrpc.ListPermissionsRequest")
proto.RegisterType((*ListPermissionsResponse)(nil), "lnrpc.ListPermissionsResponse")
proto.RegisterMapType((map[string]*MacaroonPermissionList)(nil), "lnrpc.ListPermissionsResponse.MethodPermissionsEntry")
proto.RegisterType((*Failure)(nil), "lnrpc.Failure")
proto.RegisterType((*ChannelUpdate)(nil), "lnrpc.ChannelUpdate")
proto.RegisterType((*MacaroonId)(nil), "lnrpc.MacaroonId")
proto.RegisterType((*Op)(nil), "lnrpc.Op")
}
func init() { proto.RegisterFile("rpc.proto", fileDescriptor_77a6da22d6a3feb1) }
var fileDescriptor_77a6da22d6a3feb1 = []byte{
// 11788 bytes of a gzipped FileDescriptorProto
0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xbc, 0x7d, 0x4b, 0x6c, 0x23, 0x49,
0x96, 0x58, 0xf1, 0x27, 0x92, 0x8f, 0xa4, 0x94, 0x0a, 0xfd, 0x58, 0xaa, 0xae, 0xae, 0xea, 0xec,
0x9e, 0xee, 0x9a, 0xea, 0x99, 0xea, 0xea, 0x9a, 0xae, 0xfe, 0x4c, 0x79, 0x67, 0x86, 0xa2, 0xa8,
0x12, 0xa7, 0x24, 0x52, 0x93, 0xa4, 0xba, 0xb7, 0x17, 0xeb, 0xcd, 0x4d, 0x91, 0x21, 0x29, 0x5d,
0x64, 0x26, 0x3b, 0x33, 0xa9, 0x92, 0xc6, 0xf0, 0x6d, 0xfd, 0xc1, 0x62, 0x6d, 0xc0, 0x80, 0xd7,
0x80, 0x3f, 0x0b, 0xff, 0x60, 0xfb, 0xb6, 0x30, 0xbc, 0x6b, 0x9f, 0x7c, 0xf6, 0x5e, 0x6c, 0x18,
0x86, 0xd7, 0xf0, 0x07, 0x8b, 0x05, 0x7c, 0xf0, 0xfa, 0x60, 0xc0, 0x58, 0xc0, 0x06, 0x0c, 0x1f,
0x0c, 0x18, 0x11, 0x2f, 0x22, 0x32, 0x32, 0x99, 0xaa, 0xaa, 0x9e, 0x6d, 0xcf, 0x45, 0x62, 0xbe,
0xf7, 0x22, 0x32, 0x3e, 0x2f, 0x5e, 0xbc, 0x5f, 0x44, 0x42, 0x35, 0x98, 0x8d, 0x1e, 0xcc, 0x02,
0x3f, 0xf2, 0x49, 0x69, 0xe2, 0x05, 0xb3, 0x91, 0xf9, 0x47, 0x39, 0x28, 0x1e, 0x47, 0x97, 0x3e,
0x79, 0x0c, 0x75, 0x67, 0x3c, 0x0e, 0x68, 0x18, 0xda, 0xd1, 0xd5, 0x8c, 0x36, 0x73, 0x77, 0x73,
0xf7, 0x96, 0x1f, 0x91, 0x07, 0x9c, 0xec, 0x41, 0x0b, 0x51, 0xc3, 0xab, 0x19, 0xb5, 0x6a, 0x4e,
0xfc, 0x40, 0x9a, 0x50, 0x16, 0x8f, 0xcd, 0xfc, 0xdd, 0xdc, 0xbd, 0xaa, 0x25, 0x1f, 0xc9, 0x6d,
0x00, 0x67, 0xea, 0xcf, 0xbd, 0xc8, 0x0e, 0x9d, 0xa8, 0x59, 0xb8, 0x9b, 0xbb, 0x57, 0xb0, 0xaa,
0x08, 0x19, 0x38, 0x11, 0xb9, 0x05, 0xd5, 0xd9, 0x73, 0x3b, 0x1c, 0x05, 0xee, 0x2c, 0x6a, 0x16,
0x79, 0xd1, 0xca, 0xec, 0xf9, 0x80, 0x3f, 0x93, 0xf7, 0xa1, 0xe2, 0xcf, 0xa3, 0x99, 0xef, 0x7a,
0x51, 0xb3, 0x74, 0x37, 0x77, 0xaf, 0xf6, 0x68, 0x45, 0x34, 0xa4, 0x3f, 0x8f, 0x8e, 0x18, 0xd8,
0x52, 0x04, 0xe4, 0x1d, 0x68, 0x8c, 0x7c, 0xef, 0xd4, 0x0d, 0xa6, 0x4e, 0xe4, 0xfa, 0x5e, 0xd8,
0x5c, 0xe2, 0xef, 0x4a, 0x02, 0xcd, 0x7f, 0x99, 0x87, 0xda, 0x30, 0x70, 0xbc, 0xd0, 0x19, 0x31,
0x00, 0xd9, 0x82, 0x72, 0x74, 0x69, 0x9f, 0x3b, 0xe1, 0x39, 0xef, 0x6a, 0xd5, 0x5a, 0x8a, 0x2e,
0xf7, 0x9d, 0xf0, 0x9c, 0x6c, 0xc2, 0x12, 0xb6, 0x92, 0x77, 0xa8, 0x60, 0x89, 0x27, 0xf2, 0x3e,
0xac, 0x7a, 0xf3, 0xa9, 0x9d, 0x7c, 0x15, 0xeb, 0x56, 0xc9, 0x32, 0xbc, 0xf9, 0xb4, 0xad, 0xc3,
0x59, 0xe7, 0x4f, 0x26, 0xfe, 0xe8, 0x39, 0xbe, 0x00, 0xbb, 0x57, 0xe5, 0x10, 0xfe, 0x8e, 0xb7,
0xa0, 0x2e, 0xd0, 0xd4, 0x3d, 0x3b, 0xc7, 0x3e, 0x96, 0xac, 0x1a, 0x12, 0x70, 0x10, 0xab, 0x21,
0x72, 0xa7, 0xd4, 0x0e, 0x23, 0x67, 0x3a, 0x13, 0x5d, 0xaa, 0x32, 0xc8, 0x80, 0x01, 0x38, 0xda,
0x8f, 0x9c, 0x89, 0x7d, 0x4a, 0x69, 0xd8, 0x2c, 0x0b, 0x34, 0x83, 0xec, 0x51, 0x1a, 0x92, 0x6f,
0xc1, 0xf2, 0x98, 0x86, 0x91, 0x2d, 0x26, 0x83, 0x86, 0xcd, 0xca, 0xdd, 0xc2, 0xbd, 0xaa, 0xd5,
0x60, 0xd0, 0x96, 0x04, 0x92, 0x37, 0x00, 0x02, 0xe7, 0x85, 0xcd, 0x06, 0x82, 0x5e, 0x36, 0xab,
0x38, 0x0b, 0x81, 0xf3, 0x62, 0x78, 0xb9, 0x4f, 0x2f, 0xc9, 0x3a, 0x94, 0x26, 0xce, 0x09, 0x9d,
0x34, 0x81, 0x23, 0xf0, 0xc1, 0xfc, 0x25, 0xd8, 0x7c, 0x4a, 0x23, 0x6d, 0x28, 0x43, 0x8b, 0x7e,
0x35, 0xa7, 0x61, 0xc4, 0x7a, 0x15, 0x46, 0x4e, 0x10, 0xc9, 0x5e, 0xe5, 0xb0, 0x57, 0x1c, 0x16,
0xf7, 0x8a, 0x7a, 0x63, 0x49, 0x90, 0xe7, 0x04, 0x55, 0xea, 0x8d, 0x11, 0x6d, 0x1e, 0x00, 0xd1,
0x2a, 0xde, 0xa5, 0x91, 0xe3, 0x4e, 0x42, 0xf2, 0x31, 0xd4, 0x23, 0xed, 0x75, 0xcd, 0xdc, 0xdd,
0xc2, 0xbd, 0x9a, 0x62, 0x4d, 0xad, 0x80, 0x95, 0xa0, 0x33, 0xcf, 0xa1, 0xb2, 0x47, 0xe9, 0x81,
0x3b, 0x75, 0x23, 0xb2, 0x09, 0xa5, 0x53, 0xf7, 0x92, 0x8e, 0x79, 0xa3, 0x0a, 0xfb, 0x37, 0x2c,
0x7c, 0x24, 0x77, 0x00, 0xf8, 0x0f, 0x7b, 0xaa, 0xb8, 0x74, 0xff, 0x86, 0x55, 0xe5, 0xb0, 0xc3,
0xd0, 0x89, 0xc8, 0x36, 0x94, 0x67, 0x34, 0x18, 0x51, 0xc9, 0x0f, 0xfb, 0x37, 0x2c, 0x09, 0xd8,
0x29, 0x43, 0x69, 0xc2, 0x6a, 0x37, 0x7f, 0xaf, 0x04, 0xb5, 0x01, 0xf5, 0xc6, 0x72, 0x24, 0x08,
0x14, 0xd9, 0x40, 0xf3, 0x97, 0xd5, 0x2d, 0xfe, 0x9b, 0xbc, 0x0d, 0x35, 0x3e, 0x25, 0x61, 0x14,
0xb8, 0xde, 0x19, 0xae, 0x96, 0x9d, 0x7c, 0x33, 0x67, 0x01, 0x03, 0x0f, 0x38, 0x94, 0x18, 0x50,
0x70, 0xa6, 0x72, 0xb5, 0xb0, 0x9f, 0xe4, 0x26, 0x54, 0x9c, 0x69, 0x84, 0xcd, 0xab, 0x73, 0x70,
0xd9, 0x99, 0x46, 0xbc, 0x69, 0x6f, 0x41, 0x7d, 0xe6, 0x5c, 0x4d, 0xa9, 0x17, 0xc5, 0x6c, 0x56,
0xb7, 0x6a, 0x02, 0xc6, 0x19, 0xed, 0x11, 0xac, 0xe9, 0x24, 0xf2, 0xe5, 0x25, 0xf5, 0xf2, 0x55,
0x8d, 0x5a, 0xb4, 0xe1, 0x3d, 0x58, 0x91, 0x65, 0x02, 0xec, 0x0f, 0x67, 0xbf, 0xaa, 0xb5, 0x2c,
0xc0, 0xb2, 0x97, 0xf7, 0xc0, 0x38, 0x75, 0x3d, 0x67, 0x62, 0x8f, 0x26, 0xd1, 0x85, 0x3d, 0xa6,
0x93, 0xc8, 0xe1, 0x9c, 0x58, 0xb2, 0x96, 0x39, 0xbc, 0x3d, 0x89, 0x2e, 0x76, 0x19, 0x94, 0x7c,
0x07, 0xaa, 0xa7, 0x94, 0xda, 0x7c, 0xb0, 0x9a, 0x95, 0xc4, 0x82, 0x96, 0x33, 0x64, 0x55, 0x4e,
0xe5, 0x5c, 0x7d, 0x07, 0x0c, 0x7f, 0x1e, 0x9d, 0xf9, 0xae, 0x77, 0x66, 0x8f, 0xce, 0x1d, 0xcf,
0x76, 0xc7, 0x9c, 0x37, 0x8b, 0x3b, 0xf9, 0x87, 0x39, 0x6b, 0x59, 0xe2, 0xda, 0xe7, 0x8e, 0xd7,
0x1d, 0x93, 0x77, 0x61, 0x65, 0xe2, 0x84, 0x91, 0x7d, 0xee, 0xcf, 0xec, 0xd9, 0xfc, 0xe4, 0x39,
0xbd, 0x6a, 0x36, 0xf8, 0x40, 0x34, 0x18, 0x78, 0xdf, 0x9f, 0x1d, 0x71, 0x20, 0x63, 0x3d, 0xde,
0x4e, 0x6c, 0x04, 0x63, 0xe9, 0x86, 0x55, 0x65, 0x10, 0x7c, 0xe9, 0x97, 0xb0, 0xc6, 0xa7, 0x67,
0x34, 0x0f, 0x23, 0x7f, 0x6a, 0x07, 0x74, 0xe4, 0x07, 0xe3, 0xb0, 0x59, 0xe3, 0xbc, 0xf6, 0x6d,
0xd1, 0x58, 0x6d, 0x8e, 0x1f, 0xec, 0xd2, 0x30, 0x6a, 0x73, 0x62, 0x0b, 0x69, 0x3b, 0x5e, 0x14,
0x5c, 0x59, 0xab, 0xe3, 0x34, 0x9c, 0x7c, 0x07, 0x88, 0x33, 0x99, 0xf8, 0x2f, 0xec, 0x90, 0x4e,
0x4e, 0x6d, 0x31, 0x88, 0xcd, 0xe5, 0xbb, 0xb9, 0x7b, 0x15, 0xcb, 0xe0, 0x98, 0x01, 0x9d, 0x9c,
0x1e, 0x21, 0x9c, 0x7c, 0x0c, 0x7c, 0x91, 0xda, 0xa7, 0xd4, 0x89, 0xe6, 0x01, 0x0d, 0x9b, 0x2b,
0x77, 0x0b, 0xf7, 0x96, 0x1f, 0xad, 0xaa, 0xf1, 0xe2, 0xe0, 0x1d, 0x37, 0xb2, 0xea, 0x8c, 0x4e,
0x3c, 0x87, 0xdb, 0xbb, 0xb0, 0x99, 0xdd, 0x24, 0xc6, 0x54, 0x6c, 0x54, 0x18, 0x33, 0x16, 0x2d,
0xf6, 0x93, 0xad, 0xec, 0x0b, 0x67, 0x32, 0xa7, 0x9c, 0x0b, 0xeb, 0x16, 0x3e, 0x7c, 0x3f, 0xff,
0x69, 0xce, 0xfc, 0xdd, 0x1c, 0xd4, 0xb1, 0x97, 0xe1, 0xcc, 0xf7, 0x42, 0x4a, 0xde, 0x86, 0x86,
0xe4, 0x06, 0x1a, 0x04, 0x7e, 0x20, 0xa4, 0xa5, 0xe4, 0xbc, 0x0e, 0x83, 0x91, 0x6f, 0x83, 0x21,
0x89, 0x66, 0x01, 0x75, 0xa7, 0xce, 0x99, 0xac, 0x5a, 0xb2, 0xd2, 0x91, 0x00, 0x93, 0x0f, 0xe3,
0xfa, 0x02, 0x7f, 0x1e, 0x51, 0xce, 0xeb, 0xb5, 0x47, 0x75, 0xd1, 0x3d, 0x8b, 0xc1, 0x54, 0xed,
0xfc, 0xe9, 0x35, 0xf8, 0xdc, 0xfc, 0xcd, 0x1c, 0x10, 0xd6, 0xec, 0xa1, 0x8f, 0x15, 0xc4, 0x12,
0x29, 0x51, 0x32, 0xf7, 0xda, 0x2b, 0x24, 0xff, 0xb2, 0x15, 0x62, 0x42, 0x09, 0xdb, 0x5e, 0xcc,
0x68, 0x3b, 0xa2, 0x7e, 0x5c, 0xac, 0x14, 0x8c, 0xa2, 0xf9, 0x9f, 0x0b, 0xb0, 0xce, 0xf8, 0xd4,
0xa3, 0x93, 0xd6, 0x68, 0x44, 0x67, 0x6a, 0xed, 0xdc, 0x81, 0x9a, 0xe7, 0x8f, 0xa9, 0xe4, 0x58,
0x6c, 0x18, 0x30, 0x90, 0xc6, 0xae, 0xe7, 0x8e, 0xeb, 0x61, 0xc3, 0x71, 0x30, 0xab, 0x1c, 0xc2,
0x9b, 0xfd, 0x2e, 0xac, 0xcc, 0xa8, 0x37, 0xd6, 0x97, 0x48, 0x01, 0xb9, 0x5e, 0x80, 0xc5, 0xea,
0xb8, 0x03, 0xb5, 0xd3, 0x39, 0xd2, 0x31, 0xc1, 0x52, 0xe4, 0x3c, 0x00, 0x02, 0xd4, 0x42, 0xf9,
0x32, 0x9b, 0x87, 0xe7, 0x1c, 0x5b, 0xe2, 0xd8, 0x32, 0x7b, 0x66, 0xa8, 0xdb, 0x00, 0xe3, 0x79,
0x18, 0x89, 0x15, 0xb3, 0xc4, 0x91, 0x55, 0x06, 0xc1, 0x15, 0xf3, 0x5d, 0x58, 0x9b, 0x3a, 0x97,
0x36, 0xe7, 0x1d, 0xdb, 0xf5, 0xec, 0xd3, 0x09, 0x17, 0xea, 0x65, 0x4e, 0x67, 0x4c, 0x9d, 0xcb,
0xcf, 0x19, 0xa6, 0xeb, 0xed, 0x71, 0x38, 0x13, 0x2b, 0x23, 0x1c, 0x09, 0x3b, 0xa0, 0x21, 0x0d,
0x2e, 0x28, 0x97, 0x04, 0x45, 0x6b, 0x59, 0x80, 0x2d, 0x84, 0xb2, 0x16, 0x4d, 0x59, 0xbf, 0xa3,
0xc9, 0x08, 0x97, 0xbd, 0x55, 0x9e, 0xba, 0xde, 0x7e, 0x34, 0x19, 0xb1, 0xfd, 0x8a, 0xc9, 0x91,
0x19, 0x0d, 0xec, 0xe7, 0x2f, 0xf8, 0x1a, 0x2e, 0x72, 0xb9, 0x71, 0x44, 0x83, 0x67, 0x2f, 0x98,
0x4a, 0x31, 0x0a, 0xb9, 0x20, 0x72, 0xae, 0x9a, 0x35, 0xbe, 0xc0, 0x2b, 0xa3, 0x90, 0x89, 0x20,
0xe7, 0x8a, 0x2d, 0x42, 0xd6, 0x5a, 0x87, 0xcf, 0x02, 0x1d, 0xf3, 0xea, 0x43, 0x2e, 0x51, 0x1b,
0xbc, 0xb1, 0x2d, 0x81, 0x60, 0xef, 0x09, 0x19, 0xd7, 0xcb, 0xc6, 0x9e, 0x4e, 0x9c, 0xb3, 0x90,
0x8b, 0x94, 0x86, 0x55, 0x17, 0xc0, 0x3d, 0x06, 0x33, 0xbf, 0x80, 0x8d, 0xd4, 0xdc, 0x8a, 0x35,
0xc3, 0x54, 0x08, 0x0e, 0xe1, 0xf3, 0x5a, 0xb1, 0xc4, 0x53, 0xd6, 0xa4, 0xe5, 0x33, 0x26, 0xcd,
0xfc, 0xad, 0x1c, 0xd4, 0x45, 0xcd, 0x5c, 0xd9, 0x21, 0x0f, 0x80, 0xc8, 0x59, 0x8c, 0x2e, 0xdd,
0xb1, 0x7d, 0x72, 0x15, 0xd1, 0x10, 0x99, 0x66, 0xff, 0x86, 0x65, 0x08, 0xdc, 0xf0, 0xd2, 0x1d,
0xef, 0x30, 0x0c, 0xb9, 0x0f, 0x46, 0x82, 0x3e, 0x8c, 0x02, 0xe4, 0xe8, 0xfd, 0x1b, 0xd6, 0xb2,
0x46, 0x3d, 0x88, 0x02, 0xb6, 0x46, 0x98, 0x2a, 0x35, 0x8f, 0x6c, 0xd7, 0x1b, 0xd3, 0x4b, 0xce,
0x46, 0x0d, 0xab, 0x86, 0xb0, 0x2e, 0x03, 0xed, 0x2c, 0x43, 0x5d, 0xaf, 0xce, 0x3c, 0x83, 0x8a,
0xd4, 0xc3, 0xb8, 0x22, 0x92, 0x6a, 0x92, 0x55, 0x8d, 0x54, 0x4b, 0x6e, 0x42, 0x25, 0xd9, 0x02,
0xab, 0x1c, 0xbd, 0xf6, 0x8b, 0xcd, 0x1f, 0x80, 0x71, 0xc0, 0x98, 0xc7, 0x63, 0xcc, 0x2a, 0xf4,
0xca, 0x4d, 0x58, 0xd2, 0x16, 0x4d, 0xd5, 0x12, 0x4f, 0x6c, 0xcf, 0x3d, 0xf7, 0xc3, 0x48, 0xbc,
0x85, 0xff, 0x36, 0x7f, 0x2f, 0x07, 0xa4, 0x13, 0x46, 0xee, 0xd4, 0x89, 0xe8, 0x1e, 0x55, 0x62,
0xa1, 0x0f, 0x75, 0x56, 0xdb, 0xd0, 0x6f, 0xa1, 0xa2, 0x87, 0x0a, 0xc5, 0xfb, 0x62, 0x19, 0x2f,
0x16, 0x78, 0xa0, 0x53, 0xa3, 0x98, 0x4f, 0x54, 0xc0, 0x56, 0x59, 0xe4, 0x04, 0x67, 0x34, 0xe2,
0xea, 0xa1, 0xd0, 0x6b, 0x00, 0x41, 0x4c, 0x31, 0xdc, 0xfe, 0x21, 0xac, 0x2e, 0xd4, 0xa1, 0xcb,
0xe5, 0x6a, 0x86, 0x5c, 0x2e, 0xe8, 0x72, 0xd9, 0x86, 0xb5, 0x44, 0xbb, 0x04, 0xa7, 0x6d, 0x41,
0x99, 0x2d, 0x08, 0xa6, 0x1c, 0xe4, 0x50, 0x5b, 0x3d, 0xa5, 0x94, 0xa9, 0xd7, 0x1f, 0xc0, 0xfa,
0x29, 0xa5, 0x81, 0x13, 0x71, 0x24, 0x5f, 0x31, 0x6c, 0x86, 0x44, 0xc5, 0xab, 0x02, 0x37, 0x70,
0xa2, 0x23, 0x1a, 0xb0, 0x99, 0x32, 0xff, 0x4f, 0x0e, 0x56, 0x98, 0x04, 0x3d, 0x74, 0xbc, 0x2b,
0x39, 0x4e, 0x07, 0x99, 0xe3, 0x74, 0x4f, 0xdb, 0x0c, 0x35, 0xea, 0xaf, 0x3b, 0x48, 0x85, 0xf4,
0x20, 0x91, 0xbb, 0x50, 0x4f, 0xb4, 0xb5, 0xc4, 0xdb, 0x0a, 0xa1, 0x6a, 0x64, 0xac, 0x91, 0x2e,
0x69, 0x1a, 0xe9, 0x9f, 0x7c, 0x70, 0xdf, 0x05, 0x23, 0xee, 0x8c, 0x18, 0x59, 0x02, 0x45, 0xc6,
0xa8, 0xa2, 0x02, 0xfe, 0xdb, 0xfc, 0xa7, 0x39, 0x24, 0x6c, 0xfb, 0x6e, 0xac, 0xf5, 0x12, 0x28,
0x32, 0x2d, 0x5b, 0x12, 0xb2, 0xdf, 0xd7, 0xda, 0x10, 0xdf, 0xc0, 0x10, 0xdc, 0x84, 0x4a, 0xc8,
0x54, 0x68, 0x67, 0x82, 0xa3, 0x50, 0xb1, 0xca, 0xec, 0xb9, 0x35, 0x99, 0xc4, 0xa3, 0x53, 0xd6,
0xf5, 0xf5, 0xf7, 0x60, 0x55, 0x6b, 0xf3, 0x4b, 0x7a, 0xd7, 0x03, 0x72, 0xe0, 0x86, 0xd1, 0xb1,
0x17, 0xce, 0x34, 0x25, 0xef, 0x16, 0x54, 0x99, 0x34, 0x66, 0xed, 0x0d, 0x85, 0x46, 0xcf, 0xc4,
0x33, 0x6b, 0x6d, 0xc8, 0x91, 0xce, 0xa5, 0x40, 0xe6, 0x05, 0xd2, 0xb9, 0xe4, 0x48, 0xf3, 0x53,
0x58, 0x4b, 0xd4, 0x27, 0x5e, 0xfd, 0x16, 0x94, 0xe6, 0xd1, 0xa5, 0x2f, 0xd5, 0xf8, 0x9a, 0xe0,
0x26, 0x66, 0x84, 0x5a, 0x88, 0x31, 0x9f, 0xc0, 0x6a, 0x8f, 0xbe, 0x10, 0x0b, 0x5e, 0x36, 0xe4,
0x5d, 0x28, 0xbe, 0xc2, 0x30, 0xe5, 0x78, 0xf3, 0x01, 0x10, 0xbd, 0xb0, 0x78, 0xab, 0x66, 0xa7,
0xe6, 0x12, 0x76, 0xaa, 0xf9, 0x2e, 0x90, 0x81, 0x7b, 0xe6, 0x1d, 0xd2, 0x30, 0x74, 0xce, 0x94,
0x88, 0x30, 0xa0, 0x30, 0x0d, 0xcf, 0x84, 0x3c, 0x63, 0x3f, 0xcd, 0xef, 0xc1, 0x5a, 0x82, 0x4e,
0x54, 0xfc, 0x06, 0x54, 0x43, 0xf7, 0xcc, 0xe3, 0x4a, 0x98, 0xa8, 0x3a, 0x06, 0x98, 0x7b, 0xb0,
0xfe, 0x39, 0x0d, 0xdc, 0xd3, 0xab, 0x57, 0x55, 0x9f, 0xac, 0x27, 0x9f, 0xae, 0xa7, 0x03, 0x1b,
0xa9, 0x7a, 0xc4, 0xeb, 0x91, 0xa9, 0xc5, 0x4c, 0x56, 0x2c, 0x7c, 0xd0, 0x64, 0x64, 0x5e, 0x97,
0x91, 0xe6, 0x31, 0x90, 0xb6, 0xef, 0x79, 0x74, 0x14, 0x1d, 0x51, 0x1a, 0xc8, 0xc6, 0xbc, 0xaf,
0x71, 0x70, 0xed, 0xd1, 0x96, 0x18, 0xd9, 0xb4, 0xe0, 0x15, 0xac, 0x4d, 0xa0, 0x38, 0xa3, 0xc1,
0x94, 0x57, 0x5c, 0xb1, 0xf8, 0x6f, 0x73, 0x03, 0xd6, 0x12, 0xd5, 0x62, 0xdb, 0xcc, 0x87, 0xb0,
0xb1, 0xeb, 0x86, 0xa3, 0xc5, 0x17, 0x6e, 0x41, 0x79, 0x36, 0x3f, 0xb1, 0x93, 0x32, 0xfc, 0x19,
0xbd, 0x32, 0x9b, 0xb0, 0x99, 0x2e, 0x21, 0xea, 0xfa, 0xb5, 0x1c, 0x14, 0xf7, 0x87, 0x07, 0x6d,
0xb2, 0x0d, 0x15, 0xd7, 0x1b, 0xf9, 0x53, 0xa6, 0xa4, 0x61, 0x9f, 0xd5, 0xf3, 0xb5, 0xcb, 0xee,
0x16, 0x54, 0xb9, 0x6e, 0xc7, 0xcc, 0x6b, 0xa1, 0x26, 0x55, 0x18, 0xe0, 0xc0, 0x1f, 0x3d, 0x67,
0x76, 0x3d, 0xbd, 0x9c, 0xb9, 0x01, 0xb7, 0xdc, 0xa5, 0x65, 0x5a, 0x44, 0xbd, 0x20, 0x46, 0x08,
0x03, 0xf5, 0xd7, 0xf2, 0x40, 0xc4, 0xce, 0xdc, 0xf6, 0xbd, 0x30, 0x0a, 0x1c, 0xd7, 0x8b, 0xc2,
0xa4, 0xe6, 0x91, 0x4b, 0x69, 0x1e, 0xf7, 0xc0, 0xe0, 0xbb, 0xbd, 0xd0, 0x7a, 0xb8, 0xb0, 0xce,
0xc7, 0x9a, 0x8f, 0x50, 0x7b, 0x98, 0xd0, 0x7e, 0x07, 0x96, 0x63, 0x85, 0x4b, 0xb9, 0x4d, 0x8a,
0x56, 0x5d, 0x29, 0x5d, 0x42, 0xb4, 0xb3, 0x45, 0x27, 0x35, 0x09, 0x65, 0x1d, 0xa2, 0x6e, 0xb7,
0x3a, 0x75, 0x2e, 0x8f, 0xa8, 0x54, 0xef, 0xb8, 0x9d, 0x68, 0x42, 0x43, 0x2a, 0x54, 0x48, 0x89,
0x7a, 0x5e, 0x4d, 0x68, 0x55, 0x9c, 0x26, 0x5b, 0x3d, 0x5a, 0xca, 0x56, 0x8f, 0xcc, 0xff, 0x50,
0x85, 0xb2, 0x18, 0x06, 0x54, 0x76, 0x22, 0xf7, 0x82, 0xc6, 0xca, 0x0e, 0x7b, 0x62, 0x2a, 0x54,
0x40, 0xa7, 0x7e, 0xa4, 0x74, 0x5c, 0x64, 0xc5, 0x3a, 0x02, 0x85, 0x96, 0xab, 0xe9, 0x59, 0xe8,
0xed, 0x29, 0x20, 0xd1, 0x48, 0xd7, 0x7e, 0x6e, 0x41, 0x59, 0xaa, 0x4b, 0x45, 0x65, 0x06, 0x2e,
0x8d, 0x50, 0xc1, 0xdd, 0x86, 0xca, 0xc8, 0x99, 0x39, 0x23, 0x37, 0xba, 0x12, 0xd2, 0x52, 0x3d,
0xb3, 0xda, 0x27, 0xfe, 0xc8, 0x99, 0xd8, 0x27, 0xce, 0xc4, 0xf1, 0x46, 0x54, 0xb8, 0x51, 0xea,
0x1c, 0xb8, 0x83, 0x30, 0xf2, 0x2d, 0x58, 0x16, 0xed, 0x94, 0x54, 0xe8, 0x4d, 0x11, 0xad, 0x97,
0x64, 0x4c, 0x1f, 0xf7, 0xa7, 0x6c, 0x5e, 0x4e, 0x29, 0x6a, 0xae, 0x05, 0xab, 0x8a, 0x90, 0x3d,
0xca, 0x7b, 0x2b, 0xd0, 0x2f, 0x90, 0x83, 0xaa, 0xf8, 0x2a, 0x04, 0x7e, 0x81, 0xde, 0x8f, 0x45,
0xf5, 0xb5, 0xa0, 0xa9, 0xaf, 0xef, 0xc3, 0xea, 0xdc, 0x0b, 0x69, 0x14, 0x4d, 0xe8, 0x58, 0xb5,
0xa5, 0xc6, 0x89, 0x0c, 0x85, 0x90, 0xcd, 0x79, 0x00, 0x6b, 0xe8, 0xff, 0x09, 0x9d, 0xc8, 0x0f,
0xcf, 0xdd, 0xd0, 0x0e, 0x99, 0x51, 0x89, 0x1e, 0x82, 0x55, 0x8e, 0x1a, 0x08, 0xcc, 0x00, 0xad,
0xca, 0xad, 0x14, 0x7d, 0x40, 0x47, 0xd4, 0xbd, 0xa0, 0x63, 0xae, 0xda, 0x16, 0xac, 0x8d, 0x44,
0x19, 0x4b, 0x20, 0xb9, 0x9d, 0x32, 0x9f, 0xda, 0xf3, 0xd9, 0xd8, 0x61, 0xfa, 0xdd, 0x32, 0xda,
0x0f, 0xde, 0x7c, 0x7a, 0x8c, 0x10, 0xf2, 0x10, 0xa4, 0xf2, 0x2a, 0x78, 0x66, 0x25, 0x21, 0xd6,
0xd9, 0x9a, 0xb5, 0xea, 0x82, 0x02, 0x75, 0xeb, 0x3b, 0xfa, 0x62, 0x31, 0x18, 0x87, 0x71, 0x3b,
0x2b, 0x5e, 0x30, 0x4d, 0x28, 0xcf, 0x02, 0xf7, 0xc2, 0x89, 0x68, 0x73, 0x15, 0x77, 0x38, 0xf1,
0xc8, 0x84, 0xa4, 0xeb, 0xb9, 0x91, 0xeb, 0x44, 0x7e, 0xd0, 0x24, 0x1c, 0x17, 0x03, 0xc8, 0x7d,
0x58, 0xe5, 0x7c, 0x12, 0x46, 0x4e, 0x34, 0x0f, 0x85, 0xe2, 0xbe, 0xc6, 0x19, 0x8a, 0x9b, 0x1e,
0x03, 0x0e, 0xe7, 0xba, 0x3b, 0xf9, 0x04, 0x36, 0x91, 0x35, 0x16, 0x96, 0xe6, 0x3a, 0x1b, 0x0e,
0xde, 0xa2, 0x35, 0x4e, 0xd1, 0x4e, 0xae, 0xd1, 0xcf, 0x60, 0x4b, 0xb0, 0xcb, 0x42, 0xc9, 0x0d,
0x55, 0x72, 0x1d, 0x49, 0x52, 0x45, 0x1f, 0xc0, 0x2a, 0x6b, 0x9a, 0x3b, 0xb2, 0x45, 0x0d, 0x6c,
0x55, 0x6c, 0xb2, 0x5e, 0xf0, 0x42, 0x2b, 0x88, 0xb4, 0x38, 0xee, 0x19, 0xbd, 0x22, 0x3f, 0x80,
0x15, 0x64, 0x1f, 0x6e, 0x9d, 0xf2, 0xcd, 0x6f, 0x9b, 0x6f, 0x7e, 0x1b, 0x62, 0x70, 0xdb, 0x0a,
0xcb, 0xf7, 0xbf, 0xe5, 0x51, 0xe2, 0x99, 0x2d, 0x8d, 0x89, 0x7b, 0x4a, 0x23, 0x77, 0x4a, 0x9b,
0x5b, 0xc8, 0x6c, 0xf2, 0x99, 0xad, 0xda, 0xf9, 0x8c, 0x63, 0x9a, 0x28, 0x2a, 0xf1, 0x89, 0xf3,
0xf1, 0xc4, 0x0f, 0xa9, 0xf4, 0x1c, 0x36, 0x6f, 0x8a, 0x05, 0xc9, 0x80, 0x52, 0x05, 0x67, 0x76,
0x0c, 0xda, 0x8c, 0xca, 0xbf, 0x7b, 0x8b, 0x33, 0x46, 0x03, 0x4d, 0x47, 0xe9, 0xe3, 0x65, 0xea,
0xce, 0xb9, 0xf3, 0x42, 0x0a, 0xd5, 0x37, 0xb8, 0x34, 0x01, 0x06, 0x12, 0xee, 0xc0, 0x3d, 0x58,
0x15, 0xb3, 0x10, 0x0b, 0xd3, 0xe6, 0x6d, 0xbe, 0x0d, 0xdd, 0x94, 0x7d, 0x5c, 0x90, 0xb6, 0x96,
0x81, 0xf3, 0xa2, 0xc9, 0xdf, 0x7d, 0x20, 0x72, 0x52, 0xb4, 0x8a, 0xde, 0x7c, 0x55, 0x45, 0xab,
0x62, 0x9a, 0x62, 0x90, 0xf9, 0x3b, 0x39, 0xd4, 0x5a, 0x04, 0x75, 0xa8, 0xd9, 0xeb, 0x28, 0xd7,
0x6c, 0xdf, 0x9b, 0x5c, 0x09, 0x51, 0x07, 0x08, 0xea, 0x7b, 0x13, 0x2e, 0x6b, 0x5c, 0x4f, 0x27,
0xc1, 0x0d, 0xb2, 0x2e, 0x81, 0x9c, 0xe8, 0x0e, 0xd4, 0x66, 0xf3, 0x93, 0x89, 0x3b, 0x42, 0x92,
0x02, 0xd6, 0x82, 0x20, 0x4e, 0xf0, 0x16, 0xd4, 0x05, 0xaf, 0x23, 0x45, 0x91, 0x53, 0xd4, 0x04,
0x8c, 0x93, 0xf0, 0x0d, 0x98, 0x06, 0x5c, 0xd8, 0xd5, 0x2d, 0xfe, 0xdb, 0xdc, 0x81, 0xf5, 0x64,
0xa3, 0x85, 0x76, 0x70, 0x1f, 0x2a, 0x42, 0x92, 0x4a, 0x4f, 0xd6, 0x72, 0x72, 0x34, 0x2c, 0x85,
0x37, 0xff, 0x63, 0x09, 0xd6, 0xe4, 0x18, 0xb1, 0xc9, 0x1e, 0xcc, 0xa7, 0x53, 0x27, 0xc8, 0x10,
0xd1, 0xb9, 0x97, 0x8b, 0xe8, 0xfc, 0x82, 0x88, 0x4e, 0xba, 0x32, 0x50, 0xc2, 0x27, 0x5d, 0x19,
0x8c, 0xbb, 0xd0, 0xba, 0xd4, 0x1d, 0xe6, 0x0d, 0x01, 0x1e, 0xa2, 0x63, 0x7e, 0x61, 0x43, 0x29,
0x65, 0x6c, 0x28, 0xfa, 0x76, 0xb0, 0x94, 0xda, 0x0e, 0xde, 0x02, 0x64, 0x63, 0xc9, 0x8f, 0x65,
0x34, 0x38, 0x39, 0x4c, 0x30, 0xe4, 0x7b, 0xb0, 0x92, 0x96, 0xc0, 0x28, 0xea, 0x97, 0x33, 0xe4,
0xaf, 0x3b, 0xa5, 0x5c, 0xa5, 0xd0, 0x88, 0xab, 0x42, 0xfe, 0xba, 0x53, 0x7a, 0xc0, 0x31, 0x92,
0xbe, 0x03, 0x80, 0xef, 0xe6, 0xcb, 0x18, 0xf8, 0x32, 0x7e, 0x37, 0xc5, 0x99, 0xda, 0xa8, 0x3f,
0x60, 0x0f, 0xf3, 0x80, 0xf2, 0x75, 0x5d, 0xe5, 0x25, 0xf9, 0x92, 0xfe, 0x04, 0x96, 0xfd, 0x19,
0xf5, 0xec, 0x58, 0x0a, 0xd6, 0x78, 0x55, 0x86, 0xa8, 0xaa, 0x2b, 0xe1, 0x56, 0x83, 0xd1, 0xa9,
0x47, 0xf2, 0x19, 0x0e, 0x32, 0xd5, 0x4a, 0xd6, 0xaf, 0x29, 0xb9, 0xcc, 0x09, 0xe3, 0xa2, 0xdf,
0x83, 0x5a, 0x40, 0x43, 0x7f, 0x32, 0x47, 0xef, 0x7b, 0x83, 0xf3, 0x91, 0x74, 0x47, 0x5a, 0x0a,
0x63, 0xe9, 0x54, 0xe6, 0xaf, 0xe7, 0xa0, 0xa6, 0xf5, 0x81, 0x6c, 0xc0, 0x6a, 0xbb, 0xdf, 0x3f,
0xea, 0x58, 0xad, 0x61, 0xf7, 0xf3, 0x8e, 0xdd, 0x3e, 0xe8, 0x0f, 0x3a, 0xc6, 0x0d, 0x06, 0x3e,
0xe8, 0xb7, 0x5b, 0x07, 0xf6, 0x5e, 0xdf, 0x6a, 0x4b, 0x70, 0x8e, 0x6c, 0x02, 0xb1, 0x3a, 0x87,
0xfd, 0x61, 0x27, 0x01, 0xcf, 0x13, 0x03, 0xea, 0x3b, 0x56, 0xa7, 0xd5, 0xde, 0x17, 0x90, 0x02,
0x59, 0x07, 0x63, 0xef, 0xb8, 0xb7, 0xdb, 0xed, 0x3d, 0xb5, 0xdb, 0xad, 0x5e, 0xbb, 0x73, 0xd0,
0xd9, 0x35, 0x8a, 0xa4, 0x01, 0xd5, 0xd6, 0x4e, 0xab, 0xb7, 0xdb, 0xef, 0x75, 0x76, 0x8d, 0x92,
0xf9, 0xdf, 0x73, 0x00, 0x71, 0x43, 0x99, 0x5c, 0x8d, 0x9b, 0xaa, 0x47, 0xbb, 0x36, 0x16, 0x3a,
0x85, 0x72, 0x35, 0x48, 0x3c, 0x93, 0x47, 0x50, 0xf6, 0xe7, 0xd1, 0xc8, 0x9f, 0xa2, 0xa2, 0xbe,
0xfc, 0xa8, 0xb9, 0x50, 0xae, 0x8f, 0x78, 0x4b, 0x12, 0x26, 0x22, 0x5a, 0x85, 0x57, 0x45, 0xb4,
0x92, 0xa1, 0x33, 0xd4, 0xeb, 0xb4, 0xd0, 0xd9, 0x6d, 0x80, 0xf0, 0x05, 0xa5, 0x33, 0xee, 0x8c,
0x11, 0xab, 0xa0, 0xca, 0x21, 0x43, 0x66, 0xc7, 0xfd, 0x61, 0x0e, 0x36, 0x38, 0x2f, 0x8d, 0xd3,
0x42, 0xec, 0x2e, 0xd4, 0x46, 0xbe, 0x3f, 0x63, 0xa6, 0x7f, 0xac, 0xaf, 0xe9, 0x20, 0x26, 0xa0,
0x50, 0x20, 0x9f, 0xfa, 0xc1, 0x88, 0x0a, 0x19, 0x06, 0x1c, 0xb4, 0xc7, 0x20, 0x6c, 0x0d, 0x89,
0x45, 0x88, 0x14, 0x28, 0xc2, 0x6a, 0x08, 0x43, 0x92, 0x4d, 0x58, 0x3a, 0x09, 0xa8, 0x33, 0x3a,
0x17, 0xd2, 0x4b, 0x3c, 0x91, 0x6f, 0xc7, 0x4e, 0xa9, 0x11, 0x5b, 0x13, 0x13, 0x8a, 0x8d, 0xaf,
0x58, 0x2b, 0x02, 0xde, 0x16, 0x60, 0xb6, 0xcf, 0x3b, 0x27, 0x8e, 0x37, 0xf6, 0x3d, 0x3a, 0x16,
0x56, 0x6e, 0x0c, 0x30, 0x8f, 0x60, 0x33, 0xdd, 0x3f, 0x21, 0xef, 0x3e, 0xd6, 0xe4, 0x1d, 0x9a,
0x97, 0xdb, 0xd7, 0xaf, 0x31, 0x4d, 0xf6, 0xfd, 0xe5, 0x22, 0x14, 0x99, 0xb9, 0x71, 0xad, 0x65,
0xa2, 0xdb, 0x8f, 0x85, 0x85, 0x38, 0x27, 0xf7, 0x7d, 0xa1, 0x02, 0x26, 0x26, 0x8b, 0x43, 0xb8,
0xe2, 0xa5, 0xd0, 0x01, 0x1d, 0x5d, 0x08, 0xcd, 0x1b, 0xd1, 0x16, 0x1d, 0x5d, 0x70, 0x73, 0xde,
0x89, 0xb0, 0x2c, 0xca, 0xab, 0x72, 0xe8, 0x44, 0xbc, 0xa4, 0x40, 0xf1, 0x72, 0x65, 0x85, 0xe2,
0xa5, 0x9a, 0x50, 0x76, 0xbd, 0x13, 0x7f, 0xee, 0x8d, 0xb9, 0x78, 0xaa, 0x58, 0xf2, 0x91, 0x87,
0x55, 0xb9, 0x24, 0x65, 0x5b, 0x3b, 0x4a, 0xa3, 0x0a, 0x03, 0x0c, 0xd9, 0xe6, 0xfe, 0x21, 0x54,
0xc3, 0x2b, 0x6f, 0xa4, 0xcb, 0xa0, 0x75, 0x31, 0x3e, 0xac, 0xf7, 0x0f, 0x06, 0x57, 0xde, 0x88,
0x73, 0x7c, 0x25, 0x14, 0xbf, 0xc8, 0x63, 0xa8, 0xa8, 0x40, 0x04, 0xee, 0x20, 0x37, 0xf5, 0x12,
0x32, 0xfa, 0x80, 0xfe, 0x1e, 0x45, 0x4a, 0x3e, 0x80, 0x25, 0x1e, 0x2d, 0x08, 0x9b, 0x75, 0x5e,
0x48, 0x1a, 0x95, 0xac, 0x19, 0x3c, 0xa2, 0x49, 0xc7, 0x3c, 0x72, 0x60, 0x09, 0xb2, 0xed, 0x67,
0xd0, 0x48, 0xd4, 0xa5, 0xfb, 0x6f, 0x1a, 0xe8, 0xbf, 0x79, 0x47, 0xf7, 0xdf, 0xc4, 0x3b, 0x99,
0x28, 0xa6, 0xfb, 0x73, 0x7e, 0x08, 0x15, 0xd9, 0x15, 0x26, 0x32, 0x8e, 0x7b, 0xcf, 0x7a, 0xfd,
0x2f, 0x7a, 0xf6, 0xe0, 0xcb, 0x5e, 0xdb, 0xb8, 0x41, 0x56, 0xa0, 0xd6, 0x6a, 0x73, 0x29, 0xc4,
0x01, 0x39, 0x46, 0x72, 0xd4, 0x1a, 0x0c, 0x14, 0x24, 0x6f, 0xee, 0x81, 0x91, 0x6e, 0x29, 0xe3,
0xc9, 0x48, 0xc2, 0x44, 0x2c, 0x25, 0x06, 0x30, 0x3b, 0x1c, 0xc3, 0x23, 0x68, 0xe5, 0xe0, 0x83,
0xf9, 0x18, 0x0c, 0xb6, 0x2f, 0xb3, 0xa1, 0xd2, 0xa3, 0xa4, 0x13, 0xa6, 0x39, 0xeb, 0xf1, 0x94,
0x8a, 0x55, 0x43, 0x18, 0x7f, 0x95, 0xf9, 0x31, 0xac, 0x6a, 0xc5, 0x62, 0xbf, 0x09, 0xdb, 0xeb,
0xd3, 0x7e, 0x13, 0x6e, 0x25, 0x23, 0xc6, 0xdc, 0x82, 0x0d, 0xf6, 0xd8, 0xb9, 0xa0, 0x5e, 0x34,
0x98, 0x9f, 0x60, 0x70, 0xdd, 0xf5, 0x3d, 0x66, 0x3d, 0x57, 0x15, 0xe6, 0x7a, 0x26, 0x7f, 0x20,
0x5c, 0x2c, 0x28, 0xd5, 0xb6, 0xb5, 0x37, 0xf0, 0x82, 0x0f, 0xf8, 0xdf, 0x84, 0xab, 0xa5, 0xaa,
0x40, 0x6c, 0x58, 0x8f, 0x3a, 0x1d, 0xcb, 0xee, 0xf7, 0x0e, 0xba, 0x3d, 0x26, 0xdb, 0xd9, 0xb0,
0x72, 0xc0, 0xde, 0x1e, 0x87, 0xe4, 0x4c, 0x03, 0x96, 0x9f, 0xd2, 0xa8, 0xeb, 0x9d, 0xfa, 0x62,
0x30, 0xcc, 0xbf, 0xb8, 0x04, 0x2b, 0x0a, 0x14, 0xbb, 0x6a, 0x2e, 0x68, 0x10, 0xba, 0xbe, 0xc7,
0xcd, 0x8d, 0xaa, 0x25, 0x1f, 0x99, 0x74, 0x12, 0x46, 0x16, 0xd7, 0x12, 0xd6, 0x39, 0x56, 0x98,
0x65, 0x5c, 0x45, 0x78, 0x0f, 0x56, 0xdc, 0x31, 0xf5, 0x22, 0x37, 0xba, 0xb2, 0x13, 0x4e, 0xe2,
0x65, 0x09, 0x16, 0x6a, 0xc2, 0x3a, 0x94, 0x9c, 0x89, 0xeb, 0xc8, 0xa4, 0x05, 0x7c, 0x60, 0xd0,
0x91, 0x3f, 0xf1, 0x03, 0x6e, 0x76, 0x54, 0x2d, 0x7c, 0x20, 0x0f, 0x61, 0x9d, 0x99, 0x40, 0xba,
0xe7, 0x9e, 0x0b, 0x18, 0xf4, 0x57, 0x13, 0x6f, 0x3e, 0x3d, 0x8a, 0xbd, 0xf7, 0x0c, 0xc3, 0x94,
0x03, 0x56, 0x42, 0x68, 0x83, 0xaa, 0x00, 0x3a, 0x15, 0x56, 0xbd, 0xf9, 0xb4, 0xc5, 0x31, 0x8a,
0xfe, 0x11, 0x6c, 0x30, 0x7a, 0xa5, 0x3f, 0xaa, 0x12, 0x2b, 0xbc, 0x04, 0xab, 0xac, 0x2b, 0x70,
0xaa, 0xcc, 0x2d, 0xa8, 0x62, 0xab, 0x18, 0x4b, 0x94, 0xd0, 0xe5, 0xc0, 0x9b, 0x42, 0x83, 0x70,
0x21, 0xbf, 0x00, 0xed, 0xf8, 0x74, 0x7e, 0x81, 0x96, 0xa1, 0x50, 0x49, 0x67, 0x28, 0x3c, 0x82,
0x8d, 0x13, 0xc6, 0xa3, 0xe7, 0xd4, 0x19, 0xd3, 0xc0, 0x8e, 0x39, 0x1f, 0xad, 0xc5, 0x35, 0x86,
0xdc, 0xe7, 0x38, 0xb5, 0x50, 0x98, 0x22, 0xc7, 0xe4, 0x06, 0x1d, 0xdb, 0x91, 0x6f, 0x73, 0xfd,
0x8e, 0x4b, 0xa0, 0x8a, 0xd5, 0x40, 0xf0, 0xd0, 0x6f, 0x33, 0x60, 0x92, 0xee, 0x2c, 0x70, 0x66,
0xe7, 0xc2, 0x96, 0x53, 0x74, 0x4f, 0x19, 0x90, 0xbc, 0x01, 0x65, 0xb6, 0x26, 0x3c, 0x8a, 0xe1,
0x5a, 0xb4, 0x92, 0x24, 0x88, 0xbc, 0x03, 0x4b, 0xfc, 0x1d, 0x61, 0xd3, 0xe0, 0x0b, 0xa2, 0x1e,
0x4b, 0x7a, 0xd7, 0xb3, 0x04, 0x8e, 0x69, 0xcb, 0xf3, 0xc0, 0x45, 0x31, 0x54, 0xb5, 0xf8, 0x6f,
0xf2, 0x23, 0x4d, 0xa6, 0xad, 0xf1, 0xb2, 0xef, 0x88, 0xb2, 0x29, 0x56, 0xbc, 0x4e, 0xbc, 0x7d,
0xa3, 0xd2, 0xea, 0xc7, 0xc5, 0x4a, 0xcd, 0xa8, 0x9b, 0x4d, 0x9e, 0x56, 0x61, 0xd1, 0x91, 0x7f,
0x41, 0x83, 0xab, 0xc4, 0x1a, 0xc9, 0xc1, 0xd6, 0x02, 0x2a, 0x8e, 0xce, 0x06, 0x02, 0x6e, 0x4f,
0xfd, 0xb1, 0xdc, 0xd3, 0xeb, 0x12, 0x78, 0xe8, 0x8f, 0x99, 0xee, 0xb1, 0xaa, 0x88, 0x4e, 0x5d,
0xcf, 0x0d, 0xcf, 0xe9, 0x58, 0x6c, 0xed, 0x86, 0x44, 0xec, 0x09, 0x38, 0x53, 0xa0, 0x67, 0x81,
0x7f, 0xa6, 0x76, 0xba, 0x9c, 0xa5, 0x9e, 0xcd, 0x4f, 0xa0, 0x84, 0x33, 0xc8, 0x16, 0x0a, 0x9f,
0xdf, 0x9c, 0x58, 0x28, 0x1c, 0xda, 0x84, 0xb2, 0x47, 0xa3, 0x17, 0x7e, 0xf0, 0x5c, 0x86, 0x7a,
0xc4, 0xa3, 0xf9, 0x53, 0xee, 0x77, 0x54, 0xf9, 0x31, 0xe8, 0x3b, 0x60, 0x2c, 0x8c, 0x2c, 0x18,
0x9e, 0x3b, 0xc2, 0x15, 0x5a, 0xe1, 0x80, 0xc1, 0xb9, 0xb3, 0xc0, 0xc2, 0xf9, 0xc5, 0x14, 0x99,
0x77, 0x60, 0x59, 0x66, 0xe4, 0x84, 0xf6, 0x84, 0x9e, 0x46, 0x62, 0x49, 0xd6, 0x45, 0x3a, 0x4e,
0x78, 0x40, 0x4f, 0x23, 0xf3, 0x10, 0x56, 0xc5, 0xa2, 0xe9, 0xcf, 0xa8, 0x7c, 0xf5, 0xa7, 0x59,
0x46, 0x4d, 0xed, 0xd1, 0x5a, 0x52, 0x5b, 0x40, 0xbd, 0x2c, 0x61, 0xe9, 0x98, 0x3f, 0x89, 0x1d,
0x80, 0x4c, 0x97, 0x10, 0xf5, 0x09, 0xd3, 0x42, 0x46, 0xc8, 0x64, 0xa0, 0x59, 0x19, 0x30, 0xee,
0x98, 0x8d, 0x4e, 0x38, 0x1f, 0x8d, 0x64, 0xa6, 0x54, 0xc5, 0x92, 0x8f, 0xe6, 0xbf, 0xcb, 0xc1,
0x1a, 0xaf, 0x4c, 0x1a, 0x65, 0x62, 0xa7, 0xf8, 0x99, 0x1b, 0xc9, 0xe6, 0x47, 0x57, 0xe0, 0xf0,
0xe1, 0xeb, 0x47, 0x1f, 0x8a, 0x0b, 0xd1, 0x87, 0x6f, 0x83, 0x31, 0xa6, 0x13, 0x97, 0xb3, 0x92,
0xd4, 0x87, 0x50, 0x01, 0x5d, 0x91, 0x70, 0xe1, 0x24, 0x30, 0xff, 0x7a, 0x0e, 0x56, 0x51, 0xdd,
0xe2, 0x6e, 0x17, 0x31, 0x50, 0x4f, 0xa4, 0x7f, 0x41, 0x88, 0x53, 0xd1, 0xa7, 0x58, 0x0d, 0xe1,
0x50, 0x24, 0xde, 0xbf, 0x21, 0xfc, 0x0e, 0x02, 0x4a, 0xbe, 0xcf, 0x0d, 0x49, 0xcf, 0xe6, 0x40,
0xa1, 0x46, 0xdf, 0xcc, 0x50, 0xf0, 0x54, 0x71, 0x66, 0x65, 0x7a, 0x1c, 0xb4, 0x53, 0x81, 0x25,
0x74, 0x62, 0x99, 0x7b, 0xd0, 0x48, 0xbc, 0x26, 0x11, 0x0c, 0xa9, 0x63, 0x30, 0x64, 0x21, 0x38,
0x99, 0x5f, 0x0c, 0x4e, 0x5e, 0xc1, 0x9a, 0x45, 0x9d, 0xf1, 0xd5, 0x9e, 0x1f, 0x1c, 0x85, 0x27,
0xd1, 0x1e, 0xea, 0xb0, 0x6c, 0x0f, 0x52, 0x11, 0xf7, 0x44, 0xc4, 0x41, 0x06, 0x5e, 0xa5, 0x17,
0xe5, 0x5b, 0xb0, 0x1c, 0x87, 0xe6, 0x35, 0xaf, 0x75, 0x43, 0x45, 0xe7, 0xb9, 0xf3, 0x9a, 0xd9,
0xfb, 0xe1, 0x49, 0x24, 0xfc, 0xd6, 0xfc, 0xb7, 0xf9, 0xbf, 0x8a, 0x40, 0x18, 0x37, 0xa7, 0x18,
0x26, 0x95, 0x54, 0x90, 0x5f, 0x48, 0x2a, 0x78, 0x08, 0x44, 0x23, 0x90, 0xb9, 0x0e, 0x05, 0x95,
0xeb, 0x60, 0xc4, 0xb4, 0x22, 0xd5, 0xe1, 0x21, 0xac, 0x0b, 0x83, 0x20, 0xd9, 0x54, 0x64, 0x0d,
0x82, 0x96, 0x41, 0xa2, 0xbd, 0x32, 0xa1, 0x40, 0x3a, 0x9a, 0x0b, 0x98, 0x50, 0x20, 0xfd, 0x41,
0x1a, 0x03, 0x2e, 0xbd, 0x92, 0x01, 0xcb, 0x0b, 0x0c, 0xa8, 0xf9, 0x06, 0x2b, 0x49, 0xdf, 0xe0,
0x82, 0x97, 0x1b, 0xb5, 0xdf, 0x84, 0x97, 0xfb, 0x1e, 0x18, 0xd2, 0x4f, 0xa4, 0x3c, 0x90, 0x98,
0x09, 0x24, 0x7c, 0xc0, 0x6d, 0xe9, 0x83, 0x4c, 0x84, 0xbd, 0x6a, 0xa9, 0xb0, 0xd7, 0xfb, 0xb0,
0x1a, 0x32, 0xfe, 0xb5, 0xe7, 0x9e, 0x48, 0x07, 0xa4, 0x63, 0x6e, 0x4e, 0x57, 0x2c, 0x83, 0x23,
0x8e, 0x63, 0xf8, 0xa2, 0x47, 0xad, 0x91, 0xe1, 0x51, 0x7b, 0x1c, 0x47, 0xd8, 0xc3, 0x73, 0x77,
0xca, 0x15, 0x9f, 0x38, 0xc5, 0x4d, 0x0c, 0xf0, 0xe0, 0xdc, 0x9d, 0x5a, 0x32, 0x9d, 0x83, 0x3d,
0x90, 0x36, 0xdc, 0x11, 0xfd, 0xc9, 0xc8, 0xc4, 0xc0, 0x51, 0x58, 0xe1, 0x9a, 0xea, 0x36, 0x92,
0x1d, 0xa6, 0x92, 0x32, 0x52, 0x83, 0xc2, 0x2a, 0x41, 0x27, 0xae, 0xa1, 0x0f, 0xca, 0xa1, 0x73,
0x89, 0x6e, 0xff, 0xff, 0x99, 0x03, 0x83, 0xb1, 0x5d, 0x62, 0x45, 0x7f, 0x06, 0x5c, 0xf6, 0xbc,
0xe6, 0x82, 0xae, 0x31, 0x5a, 0xb9, 0x9e, 0x3f, 0x01, 0xbe, 0x40, 0x6d, 0x7f, 0x46, 0x3d, 0xb1,
0x9c, 0x9b, 0xc9, 0xe5, 0x1c, 0x8b, 0xec, 0xfd, 0x1b, 0x68, 0xaf, 0x31, 0x08, 0xf9, 0x0c, 0xaa,
0x6c, 0x1d, 0x70, 0xa6, 0x14, 0x09, 0xa2, 0xdb, 0xca, 0x06, 0x5f, 0x58, 0x92, 0xac, 0xe8, 0x4c,
0x3c, 0x66, 0xe5, 0x60, 0x14, 0x33, 0x72, 0x30, 0x34, 0x79, 0xb1, 0x0f, 0xf0, 0x8c, 0x5e, 0x1d,
0xf8, 0x23, 0xee, 0x0d, 0xb9, 0x0d, 0xc0, 0x96, 0xce, 0xa9, 0x33, 0x75, 0x85, 0x1f, 0xb0, 0x64,
0x55, 0x9f, 0xd3, 0xab, 0x3d, 0x0e, 0x60, 0x7c, 0xc3, 0xd0, 0xb1, 0xd0, 0x28, 0x59, 0x95, 0xe7,
0xf4, 0x0a, 0x25, 0x86, 0x0d, 0x8d, 0x67, 0xf4, 0x6a, 0x97, 0xa2, 0x62, 0xee, 0x07, 0x8c, 0x67,
0x03, 0xe7, 0x05, 0xd3, 0xc4, 0x13, 0xf9, 0x13, 0xb5, 0xc0, 0x79, 0xf1, 0x8c, 0x5e, 0xc9, 0x5c,
0x8e, 0x32, 0xc3, 0x4f, 0xfc, 0x91, 0x50, 0x25, 0xa4, 0xeb, 0x25, 0x6e, 0x94, 0xb5, 0xf4, 0x9c,
0xff, 0x36, 0xff, 0x38, 0x07, 0x0d, 0xd6, 0x7e, 0xbe, 0x0b, 0x70, 0x0e, 0x11, 0x09, 0x85, 0xb9,
0x38, 0xa1, 0xf0, 0x91, 0x10, 0xa2, 0xb8, 0xa5, 0xe4, 0xaf, 0xdf, 0x52, 0xf8, 0xdc, 0xe0, 0x7e,
0xf2, 0x21, 0x54, 0x51, 0x0a, 0x30, 0xb1, 0x52, 0x48, 0x4c, 0x70, 0xa2, 0x43, 0x56, 0x85, 0x93,
0x3d, 0xc3, 0xfc, 0x25, 0xcd, 0xcb, 0x8d, 0x43, 0x5c, 0x0d, 0x94, 0x6f, 0x3b, 0x63, 0x1a, 0x4a,
0xd7, 0xe4, 0x2f, 0xe9, 0x2e, 0xe4, 0xa5, 0xb4, 0x0b, 0xd9, 0xf4, 0xa0, 0xc2, 0xa6, 0x9a, 0x77,
0x36, 0xa3, 0xd2, 0x5c, 0x56, 0xa5, 0x4c, 0xf1, 0x70, 0xd8, 0x1e, 0xc4, 0xe4, 0x6a, 0x5e, 0x28,
0x1e, 0x4e, 0x48, 0x59, 0x45, 0xac, 0xe1, 0x9e, 0x6f, 0x73, 0x9f, 0xac, 0xf0, 0x56, 0x56, 0xac,
0xaa, 0xe7, 0x1f, 0x21, 0xc0, 0xfc, 0xf3, 0x39, 0xa8, 0x69, 0xeb, 0x91, 0x3b, 0xe9, 0xd5, 0x70,
0xe2, 0xe2, 0x4d, 0xae, 0x80, 0xc4, 0x7c, 0xec, 0xdf, 0xb0, 0x1a, 0xa3, 0xc4, 0x04, 0x3d, 0x10,
0xac, 0xcc, 0x4b, 0xe6, 0x13, 0x9e, 0x21, 0xd9, 0x2f, 0xc9, 0xbf, 0xec, 0xf7, 0xce, 0x12, 0x14,
0x19, 0xa9, 0xf9, 0x04, 0x56, 0xb5, 0x66, 0xa0, 0xe7, 0xe4, 0x75, 0x07, 0xc0, 0xfc, 0x65, 0x55,
0x98, 0xbd, 0x03, 0x23, 0xcb, 0x32, 0x55, 0x8c, 0x8e, 0x71, 0x5c, 0x44, 0x4a, 0x1a, 0x82, 0xf8,
0xc8, 0xbc, 0x6e, 0xfa, 0xd2, 0xaf, 0xc0, 0x9a, 0x56, 0xfb, 0x9e, 0xeb, 0x39, 0x13, 0xf7, 0xa7,
0x5c, 0xfd, 0x08, 0xdd, 0x33, 0x2f, 0x55, 0x3f, 0x82, 0xbe, 0x56, 0xfd, 0x7f, 0x23, 0x0f, 0xeb,
0xe2, 0x05, 0x3c, 0xf9, 0xd7, 0x65, 0x3a, 0xe5, 0x61, 0x78, 0x46, 0x3e, 0x83, 0x06, 0x1b, 0x1b,
0x3b, 0xa0, 0x67, 0x6e, 0x18, 0x51, 0x19, 0xd1, 0xce, 0x10, 0xa3, 0x4c, 0xb5, 0x60, 0xa4, 0x96,
0xa0, 0x24, 0x4f, 0xa0, 0xc6, 0x8b, 0xa2, 0x67, 0x4a, 0x4c, 0x44, 0x73, 0xb1, 0x20, 0x0e, 0xf4,
0xfe, 0x0d, 0x0b, 0xc2, 0x78, 0xd8, 0x9f, 0x40, 0x8d, 0xcf, 0xe1, 0x05, 0x1f, 0xc8, 0x94, 0x24,
0x5b, 0x18, 0x68, 0x56, 0x78, 0x16, 0x0f, 0x7b, 0x0b, 0x1a, 0x28, 0xcb, 0xc4, 0x38, 0x89, 0xa4,
0xc2, 0xed, 0xc5, 0xe2, 0x72, 0x24, 0x59, 0xe3, 0x67, 0xda, 0xf3, 0x4e, 0x15, 0xca, 0x51, 0xe0,
0x9e, 0x9d, 0xd1, 0xc0, 0xdc, 0x54, 0x43, 0xc3, 0x84, 0x34, 0x1d, 0x44, 0x74, 0xc6, 0x8c, 0x05,
0xf3, 0x5f, 0xe5, 0xa0, 0x26, 0xc4, 0xee, 0xcf, 0x1c, 0x46, 0xdf, 0x4e, 0xf9, 0x30, 0xab, 0x9a,
0xcb, 0xf2, 0x3d, 0x58, 0x99, 0x32, 0xcb, 0x86, 0x59, 0xde, 0x89, 0x18, 0xfa, 0xb2, 0x04, 0x0b,
0xa5, 0xfd, 0x01, 0xac, 0x71, 0x1d, 0x3e, 0xb4, 0x23, 0x77, 0x62, 0x4b, 0xa4, 0xc8, 0x80, 0x5f,
0x45, 0xd4, 0xd0, 0x9d, 0x1c, 0x0a, 0x04, 0x53, 0x65, 0xc3, 0xc8, 0x39, 0xa3, 0x62, 0xe9, 0xe3,
0x03, 0xb3, 0x96, 0x52, 0x46, 0xb7, 0xb4, 0x96, 0xfe, 0xef, 0x2a, 0x6c, 0x2d, 0xa0, 0x84, 0xb5,
0xa4, 0x82, 0xa6, 0x13, 0x77, 0x7a, 0xe2, 0x2b, 0xa7, 0x7d, 0x4e, 0x0b, 0x9a, 0x1e, 0x30, 0x8c,
0x74, 0xda, 0x53, 0xd8, 0x90, 0x0c, 0xc9, 0xbd, 0xee, 0xca, 0x2e, 0xcf, 0x73, 0xab, 0xf1, 0xc3,
0xe4, 0x1e, 0x97, 0x7e, 0x9d, 0x84, 0xeb, 0x8a, 0xda, 0xda, 0x6c, 0x01, 0x16, 0x92, 0x3f, 0x03,
0x4d, 0xc5, 0xf7, 0xc2, 0x88, 0xd0, 0x9c, 0x0c, 0xec, 0x4d, 0xdf, 0x79, 0xc5, 0x9b, 0x12, 0xee,
0x50, 0xae, 0xc9, 0x6d, 0xca, 0x25, 0x83, 0x15, 0xaa, 0x77, 0x5d, 0xc0, 0x9b, 0xf2, 0x5d, 0xdc,
0x28, 0x58, 0x7c, 0x63, 0xf1, 0xb5, 0xfa, 0xc6, 0x5d, 0xbd, 0x89, 0xd7, 0x5a, 0xb7, 0x44, 0xc5,
0x0a, 0xa5, 0xbf, 0xf7, 0x1c, 0x36, 0x5f, 0x38, 0x6e, 0x24, 0xfb, 0xa8, 0xf9, 0x38, 0x4a, 0xfc,
0x7d, 0x8f, 0x5e, 0xf1, 0xbe, 0x2f, 0xb0, 0x70, 0xc2, 0x4c, 0x5a, 0x7f, 0xb1, 0x08, 0x0c, 0xb7,
0xff, 0x5e, 0x01, 0x96, 0x93, 0xb5, 0x30, 0xc1, 0x22, 0xf6, 0x22, 0xa9, 0xfd, 0x0a, 0x95, 0x5c,
0x04, 0x94, 0x7a, 0xa8, 0xf5, 0x2e, 0x86, 0xba, 0xf2, 0x19, 0xa1, 0x2e, 0x3d, 0xc2, 0x54, 0x78,
0x55, 0xc2, 0x41, 0xf1, 0xb5, 0x12, 0x0e, 0x4a, 0x59, 0x09, 0x07, 0xdf, 0xbb, 0x36, 0x42, 0x8d,
0x7e, 0xe2, 0xcc, 0xe8, 0xf4, 0xe3, 0xeb, 0xa3, 0xd3, 0xa8, 0x4b, 0x5f, 0x17, 0x99, 0xd6, 0xe2,
0xea, 0x95, 0x6b, 0xe2, 0x42, 0x5a, 0xa4, 0x3d, 0x23, 0x32, 0x5d, 0xfd, 0x1a, 0x91, 0xe9, 0xed,
0x3f, 0xce, 0x01, 0x59, 0x5c, 0x1d, 0xe4, 0x29, 0x46, 0x11, 0x3d, 0x3a, 0x11, 0x92, 0xfb, 0xbb,
0xaf, 0xb7, 0xc2, 0x24, 0x43, 0xc8, 0xd2, 0xe4, 0x03, 0x58, 0xd3, 0xcf, 0xe9, 0xe8, 0x3e, 0x84,
0x86, 0x45, 0x74, 0x54, 0xec, 0x0d, 0xd3, 0xb2, 0x3b, 0x8a, 0xaf, 0xcc, 0xee, 0x28, 0xbd, 0x32,
0xbb, 0x63, 0x29, 0x99, 0xdd, 0xb1, 0xfd, 0x6f, 0x73, 0xb0, 0x96, 0xc1, 0xc4, 0xdf, 0x5c, 0x9f,
0x19, 0xef, 0x25, 0xc4, 0x5a, 0x5e, 0xf0, 0x9e, 0x2e, 0xd1, 0x0e, 0xa4, 0x07, 0x95, 0x4d, 0x45,
0x28, 0x76, 0xaa, 0xfb, 0xaf, 0x92, 0x2e, 0x71, 0x09, 0x4b, 0x2f, 0xbe, 0xfd, 0x0f, 0xf2, 0x50,
0xd3, 0x90, 0x6c, 0x14, 0x91, 0x65, 0xb5, 0xdc, 0x42, 0x54, 0x1c, 0xb9, 0x07, 0xe4, 0x0e, 0x88,
0x38, 0x11, 0xe2, 0x71, 0x71, 0x09, 0x2d, 0x91, 0x13, 0x3c, 0x80, 0x35, 0x19, 0xe1, 0xa5, 0x71,
0xba, 0xb1, 0xd8, 0x6b, 0x44, 0xb0, 0x5e, 0x34, 0x92, 0xd3, 0x7f, 0x20, 0x8d, 0xd3, 0x78, 0xee,
0xb4, 0x88, 0xd9, 0xaa, 0x48, 0x13, 0x10, 0x93, 0xc8, 0xf8, 0xfc, 0x43, 0xd8, 0x50, 0x79, 0x02,
0x89, 0x12, 0x18, 0x97, 0x21, 0x32, 0x1f, 0x40, 0x2b, 0xf2, 0x23, 0xb8, 0x9d, 0x6a, 0x53, 0xaa,
0x28, 0xe6, 0xc5, 0xdf, 0x4c, 0xb4, 0x4e, 0xaf, 0x61, 0xfb, 0xcf, 0x42, 0x23, 0x21, 0x28, 0xbf,
0xb9, 0x29, 0x4f, 0x7b, 0x9d, 0x70, 0x44, 0x75, 0xaf, 0xd3, 0xf6, 0xff, 0x28, 0x00, 0x59, 0x94,
0xd5, 0x3f, 0xcf, 0x26, 0x2c, 0x32, 0x66, 0x21, 0x83, 0x31, 0xff, 0xbf, 0xe9, 0x0f, 0xb1, 0xf3,
0x53, 0x0b, 0xd3, 0xe3, 0xe2, 0x34, 0x14, 0x42, 0xb6, 0xe2, 0x93, 0x74, 0x32, 0x53, 0x25, 0x71,
0xd4, 0x4c, 0x53, 0xa0, 0x52, 0x39, 0x4d, 0xc7, 0xb0, 0xe4, 0x78, 0xa3, 0x73, 0x3f, 0x10, 0x72,
0xf0, 0x17, 0xbe, 0xf6, 0xf6, 0xf9, 0xa0, 0xc5, 0xcb, 0x73, 0xad, 0xcd, 0x12, 0x95, 0x99, 0x1f,
0x42, 0x4d, 0x03, 0x93, 0x2a, 0x94, 0x0e, 0xba, 0x87, 0x3b, 0x7d, 0xe3, 0x06, 0x69, 0x40, 0xd5,
0xea, 0xb4, 0xfb, 0x9f, 0x77, 0xac, 0xce, 0xae, 0x91, 0x23, 0x15, 0x28, 0x1e, 0xf4, 0x07, 0x43,
0x23, 0x6f, 0x6e, 0x43, 0x53, 0xd4, 0xb8, 0x18, 0x06, 0xfa, 0xcd, 0xa2, 0x72, 0x5e, 0x72, 0xa4,
0xb0, 0xe0, 0xbf, 0x07, 0x75, 0x5d, 0xbd, 0x11, 0x1c, 0x91, 0xca, 0x14, 0x61, 0xb6, 0xbb, 0xaf,
0xc9, 0xea, 0x36, 0x60, 0x9e, 0xc0, 0x58, 0x15, 0xcb, 0x27, 0xf4, 0xd6, 0x8c, 0x80, 0x2b, 0x37,
0x7e, 0x12, 0x6c, 0xf8, 0xa7, 0x60, 0x39, 0x19, 0xf2, 0x10, 0x12, 0x29, 0xcb, 0x1e, 0x65, 0xa5,
0x13, 0x31, 0x10, 0xf2, 0x23, 0x30, 0xd2, 0x21, 0x13, 0xa1, 0x3c, 0x5f, 0x53, 0x7e, 0xc5, 0x4d,
0x46, 0x51, 0xc8, 0x3e, 0xac, 0x67, 0x29, 0x78, 0x9c, 0x3f, 0xae, 0xf7, 0x61, 0x90, 0x45, 0x25,
0x8e, 0x7c, 0x2a, 0x42, 0x67, 0x25, 0x3e, 0xfd, 0xef, 0x24, 0xdf, 0xaf, 0x0d, 0xf6, 0x03, 0xfc,
0xa7, 0x05, 0xd1, 0x2e, 0x00, 0x62, 0x18, 0x31, 0xa0, 0xde, 0x3f, 0xea, 0xf4, 0xec, 0xf6, 0x7e,
0xab, 0xd7, 0xeb, 0x1c, 0x18, 0x37, 0x08, 0x81, 0x65, 0x9e, 0xec, 0xb0, 0xab, 0x60, 0x39, 0x06,
0x13, 0x21, 0x4c, 0x09, 0xcb, 0x93, 0x75, 0x30, 0xba, 0xbd, 0x14, 0xb4, 0x40, 0x9a, 0xb0, 0x7e,
0xd4, 0xc1, 0xfc, 0x88, 0x44, 0xbd, 0x45, 0x66, 0x34, 0x88, 0xee, 0x32, 0xa3, 0xe1, 0x0b, 0x67,
0x32, 0xa1, 0x91, 0x58, 0x07, 0x52, 0x97, 0xfe, 0x9b, 0x39, 0xd8, 0x48, 0x21, 0xe2, 0xb8, 0x03,
0x6a, 0xd2, 0x49, 0x1d, 0xba, 0xce, 0x81, 0x72, 0x35, 0xbd, 0x0f, 0xab, 0xca, 0x0d, 0x96, 0xda,
0x95, 0x0c, 0x85, 0x90, 0xc4, 0x1f, 0xc0, 0x9a, 0xe6, 0x4d, 0x4b, 0xc9, 0x0a, 0xa2, 0xa1, 0x44,
0x01, 0x73, 0x4b, 0x9d, 0xbe, 0x49, 0xb5, 0x7a, 0x0c, 0x9b, 0x69, 0x44, 0x1c, 0x59, 0x4c, 0xb6,
0x57, 0x3e, 0x92, 0x87, 0x29, 0x46, 0x48, 0xb6, 0x56, 0x9f, 0x70, 0xf9, 0xfa, 0xdf, 0x5e, 0x02,
0xf2, 0x93, 0x39, 0x0d, 0xae, 0xf8, 0xa9, 0xaf, 0xf0, 0x55, 0xa9, 0xcd, 0xd2, 0x11, 0x93, 0x7f,
0xad, 0x93, 0x9d, 0x59, 0x27, 0x2b, 0x8b, 0xaf, 0x3e, 0x59, 0x59, 0x7a, 0xd5, 0xc9, 0xca, 0xb7,
0xa1, 0xe1, 0x9e, 0x79, 0x3e, 0x13, 0x85, 0x4c, 0x13, 0x0e, 0x9b, 0x4b, 0x77, 0x0b, 0xf7, 0xea,
0x56, 0x5d, 0x00, 0x99, 0x1e, 0x1c, 0x92, 0x27, 0x31, 0x11, 0x1d, 0x9f, 0xf1, 0xd3, 0xc5, 0xba,
0x10, 0xec, 0x8c, 0xcf, 0xa8, 0xf0, 0x3b, 0x71, 0x4b, 0x43, 0x16, 0x66, 0xf0, 0x90, 0xbc, 0x03,
0xcb, 0xa1, 0x3f, 0x67, 0x86, 0x85, 0x1c, 0x06, 0x0c, 0x2d, 0xd6, 0x11, 0x7a, 0x24, 0x03, 0xcd,
0x6b, 0xf3, 0x90, 0xda, 0x53, 0x37, 0x0c, 0x99, 0x7a, 0x36, 0xf2, 0xbd, 0x28, 0xf0, 0x27, 0x22,
0x5a, 0xb8, 0x3a, 0x0f, 0xe9, 0x21, 0x62, 0xda, 0x88, 0x20, 0x1f, 0xc5, 0x4d, 0x9a, 0x39, 0x6e,
0x10, 0x36, 0x81, 0x37, 0x49, 0xf6, 0x94, 0xeb, 0xef, 0x8e, 0x1b, 0xa8, 0xb6, 0xb0, 0x87, 0x30,
0x75, 0xe2, 0xb3, 0x96, 0x3e, 0xf1, 0xf9, 0xab, 0xd9, 0x27, 0x3e, 0x31, 0xbf, 0xe9, 0xa1, 0xa8,
0x7a, 0x71, 0x8a, 0xbf, 0xd6, 0xc1, 0xcf, 0xc5, 0x83, 0xac, 0xcb, 0x5f, 0xe7, 0x20, 0xeb, 0x4a,
0xd6, 0x41, 0xd6, 0x0f, 0xa1, 0xc6, 0x8f, 0x18, 0xda, 0xe7, 0x3c, 0xcb, 0x11, 0xa3, 0x9f, 0x86,
0x7e, 0x06, 0x71, 0xdf, 0xf5, 0x22, 0x0b, 0x02, 0xf9, 0x33, 0x5c, 0x3c, 0x53, 0xba, 0xfa, 0x73,
0x3c, 0x53, 0x2a, 0x8e, 0x42, 0x3e, 0x80, 0x8a, 0x9c, 0x27, 0x42, 0xa0, 0x78, 0x1a, 0xf8, 0x53,
0x19, 0x71, 0x61, 0xbf, 0xc9, 0x32, 0xe4, 0x23, 0x5f, 0x14, 0xce, 0x47, 0xbe, 0xf9, 0xa7, 0xa1,
0xa6, 0xb1, 0x1a, 0x79, 0x0b, 0xdd, 0x96, 0xcc, 0x36, 0x13, 0xba, 0x25, 0x8e, 0x62, 0x55, 0x40,
0xbb, 0x63, 0x26, 0x6f, 0xc6, 0x6e, 0x40, 0xf9, 0xe9, 0x6f, 0x3b, 0xa0, 0x17, 0x34, 0x08, 0x65,
0x04, 0xcc, 0x50, 0x08, 0x0b, 0xe1, 0xe6, 0xaf, 0xc0, 0x5a, 0x62, 0x6e, 0x85, 0x88, 0x78, 0x07,
0x96, 0xf8, 0xb8, 0xc9, 0x34, 0x8b, 0xe4, 0xd9, 0x4e, 0x81, 0xe3, 0x27, 0xdd, 0x31, 0x78, 0x67,
0xcf, 0x02, 0xff, 0x84, 0xbf, 0x24, 0x67, 0xd5, 0x04, 0xec, 0x28, 0xf0, 0x4f, 0xcc, 0x3f, 0x28,
0x40, 0x61, 0xdf, 0x9f, 0xe9, 0x99, 0x91, 0xb9, 0x85, 0xcc, 0x48, 0x61, 0x70, 0xda, 0xca, 0xa0,
0x14, 0x3a, 0x3b, 0x0f, 0x5b, 0x49, 0xa3, 0xf2, 0x1e, 0x2c, 0x33, 0x39, 0x11, 0xf9, 0xcc, 0x62,
0x7f, 0xe1, 0x04, 0xa8, 0x10, 0x63, 0xa2, 0x71, 0xdd, 0x99, 0x46, 0x43, 0x7f, 0x0f, 0xe1, 0x64,
0x1d, 0x0a, 0xca, 0x7c, 0xe1, 0x68, 0xf6, 0x48, 0x36, 0x61, 0x89, 0x9f, 0x63, 0xb8, 0x12, 0x69,
0x02, 0xe2, 0x89, 0x7c, 0x17, 0xd6, 0x92, 0xf5, 0xa2, 0x28, 0x12, 0xba, 0x91, 0x5e, 0x31, 0x97,
0x49, 0x37, 0x81, 0xc9, 0x11, 0xa4, 0x11, 0xe9, 0x48, 0xa7, 0x94, 0x72, 0x94, 0x26, 0xf4, 0x2a,
0x09, 0xa1, 0x77, 0x07, 0x6a, 0xd1, 0xe4, 0xc2, 0x9e, 0x39, 0x57, 0x13, 0xdf, 0x19, 0x8b, 0xf5,
0x0d, 0xd1, 0xe4, 0xe2, 0x08, 0x21, 0xe4, 0x03, 0x80, 0xe9, 0x6c, 0x26, 0xd6, 0x1e, 0x0f, 0xc5,
0xc4, 0xac, 0x7c, 0x78, 0x74, 0x84, 0x2c, 0x67, 0x55, 0xa7, 0xb3, 0x19, 0xfe, 0x24, 0xbb, 0xb0,
0x9c, 0x79, 0x42, 0xfb, 0xb6, 0xcc, 0x37, 0xf7, 0x67, 0x0f, 0x32, 0x16, 0x67, 0x63, 0xa4, 0xc3,
0xb6, 0x7f, 0x04, 0xe4, 0x4f, 0x78, 0x4e, 0x7a, 0x08, 0x55, 0xd5, 0x3e, 0xfd, 0x98, 0x31, 0x3f,
0x48, 0x53, 0x4b, 0x1c, 0x33, 0x6e, 0x8d, 0xc7, 0x01, 0x93, 0x8b, 0xb8, 0x61, 0x2a, 0x91, 0x0f,
0xda, 0x8e, 0x29, 0x4e, 0x6a, 0x98, 0xff, 0x25, 0x07, 0x25, 0x3c, 0xf3, 0xfc, 0x2e, 0xac, 0x20,
0xbd, 0xca, 0x32, 0x15, 0xc9, 0x05, 0xb8, 0xef, 0x0e, 0x45, 0x82, 0x29, 0x5b, 0x16, 0xda, 0x3d,
0x10, 0x79, 0x35, 0xf3, 0xda, 0x5d, 0x10, 0x77, 0xa0, 0xaa, 0x5e, 0xad, 0xb1, 0x4e, 0x45, 0xbe,
0x99, 0xbc, 0x09, 0xc5, 0x73, 0x7f, 0x26, 0x3d, 0x3f, 0x10, 0x8f, 0xa4, 0xc5, 0xe1, 0x71, 0x5b,
0xd8, 0x3b, 0xe2, 0x13, 0x24, 0x05, 0xd1, 0x16, 0xf6, 0x12, 0xce, 0x06, 0x8b, 0x7d, 0x5c, 0xca,
0xe8, 0xe3, 0x31, 0xac, 0x30, 0x39, 0xa0, 0x65, 0x38, 0x5c, 0xbf, 0x69, 0x7e, 0x9b, 0x69, 0x78,
0xa3, 0xc9, 0x7c, 0x4c, 0x75, 0xdf, 0x1b, 0x4f, 0x19, 0x14, 0x70, 0xa9, 0x59, 0x9b, 0xbf, 0x9d,
0x43, 0xf9, 0xc2, 0xea, 0x25, 0xf7, 0xa0, 0xe8, 0xc9, 0x6c, 0x88, 0x58, 0x8f, 0x53, 0x27, 0x9a,
0x18, 0x9d, 0xc5, 0x29, 0xd8, 0xd4, 0xf1, 0x1c, 0x02, 0xbd, 0xf6, 0x86, 0x55, 0xf3, 0xe6, 0x53,
0xe5, 0xba, 0xfa, 0x96, 0xec, 0x56, 0xca, 0xed, 0x83, 0xbd, 0x57, 0xcb, 0xf4, 0x81, 0x96, 0x7b,
0x58, 0x4c, 0xec, 0x98, 0x52, 0x0b, 0x1c, 0x9f, 0x51, 0x2d, 0xe7, 0xf0, 0x77, 0xf3, 0xd0, 0x48,
0xb4, 0x88, 0x27, 0x5f, 0xb2, 0x0d, 0x00, 0xe3, 0x4e, 0x62, 0xbe, 0x81, 0x81, 0x84, 0xa2, 0xae,
0x8d, 0x53, 0x3e, 0x31, 0x4e, 0x2a, 0x9d, 0xa9, 0xa0, 0xa7, 0x33, 0x3d, 0x84, 0x6a, 0x7c, 0xff,
0x47, 0xb2, 0x49, 0xec, 0x7d, 0xf2, 0x5c, 0x57, 0x4c, 0x14, 0x27, 0x40, 0x95, 0xf4, 0x04, 0xa8,
0x1f, 0x68, 0xf9, 0x32, 0x4b, 0xbc, 0x1a, 0x33, 0x6b, 0x44, 0x7f, 0x2e, 0xd9, 0x32, 0xe6, 0x13,
0xa8, 0x69, 0x8d, 0xd7, 0x73, 0x4e, 0x72, 0x89, 0x9c, 0x13, 0x75, 0x2e, 0x33, 0x1f, 0x9f, 0xcb,
0x34, 0xff, 0x42, 0x1e, 0x1a, 0x6c, 0x7d, 0xb9, 0xde, 0xd9, 0x91, 0x3f, 0x71, 0x47, 0x3c, 0x0e,
0xa5, 0x56, 0x98, 0x50, 0xb4, 0xe4, 0x3a, 0x13, 0x4b, 0x0c, 0xf5, 0x2c, 0xfd, 0x50, 0x3a, 0x0a,
0x69, 0x75, 0x28, 0xdd, 0x84, 0x06, 0x13, 0x8c, 0x3c, 0xa2, 0x14, 0xdf, 0x22, 0x62, 0xd5, 0x4e,
0x29, 0xdd, 0x71, 0x42, 0x94, 0x90, 0xdf, 0x85, 0x35, 0x46, 0xc3, 0xcf, 0xe3, 0x4e, 0xdd, 0xc9,
0xc4, 0x8d, 0x8f, 0x6c, 0x15, 0x2c, 0xe3, 0x94, 0x52, 0xcb, 0x89, 0xe8, 0x21, 0x43, 0x88, 0x4b,
0x47, 0x2a, 0x63, 0x37, 0x74, 0x4e, 0xe2, 0x14, 0x59, 0xf5, 0xcc, 0xe3, 0xdc, 0x22, 0x4e, 0x1b,
0x2f, 0xb2, 0xa2, 0x55, 0x9b, 0x62, 0x94, 0x96, 0x97, 0x4f, 0x71, 0x52, 0x39, 0xcd, 0x49, 0xe6,
0xbf, 0xc8, 0x43, 0x4d, 0x63, 0xcb, 0xd7, 0xd9, 0x5d, 0x6f, 0x2f, 0xc4, 0x0d, 0xab, 0x7a, 0x88,
0xf0, 0xed, 0xe4, 0x2b, 0x0b, 0xea, 0x5c, 0x8f, 0xce, 0xc0, 0xb7, 0xa0, 0xca, 0x56, 0xdd, 0x87,
0xdc, 0x05, 0x2b, 0x2e, 0xfd, 0xe1, 0x80, 0xa3, 0xf9, 0x89, 0x44, 0x3e, 0xe2, 0xc8, 0x52, 0x8c,
0x7c, 0xc4, 0x90, 0x2f, 0xcb, 0xeb, 0xff, 0x04, 0xea, 0xa2, 0x56, 0x3e, 0xa7, 0xbc, 0xbb, 0xf1,
0xaa, 0x4f, 0xcc, 0xb7, 0x55, 0xc3, 0xd7, 0xe1, 0xe4, 0x8b, 0x82, 0x8f, 0x64, 0xc1, 0xca, 0xab,
0x0a, 0x3e, 0xc2, 0x07, 0x73, 0x4f, 0x1d, 0x95, 0xe0, 0x99, 0x6a, 0x52, 0x8e, 0x7d, 0x00, 0x6b,
0x52, 0x5c, 0xcd, 0x3d, 0xc7, 0xf3, 0xfc, 0xb9, 0x37, 0xa2, 0xf2, 0x68, 0x26, 0x11, 0xa8, 0xe3,
0x18, 0x63, 0x8e, 0xd5, 0x39, 0x7f, 0xcc, 0x78, 0xbb, 0x0f, 0x25, 0xd4, 0xcb, 0x51, 0xf9, 0xc8,
0x16, 0x5c, 0x48, 0x42, 0xee, 0x41, 0x09, 0xd5, 0xf3, 0xfc, 0xb5, 0xc2, 0x06, 0x09, 0xcc, 0x16,
0x10, 0x56, 0xf0, 0x90, 0x46, 0x81, 0x3b, 0x0a, 0xe3, 0x53, 0x9f, 0x25, 0x66, 0x7f, 0xe2, 0xbb,
0x62, 0xcf, 0x6d, 0x4c, 0xc9, 0x6d, 0x54, 0xa4, 0x61, 0x1b, 0xd3, 0x5a, 0xa2, 0x0e, 0xa1, 0x2e,
0x4d, 0x60, 0xf3, 0x84, 0x46, 0x2f, 0x28, 0xf5, 0x3c, 0xa6, 0x0c, 0x8d, 0xa8, 0x17, 0x05, 0xce,
0x84, 0x4d, 0x12, 0xf6, 0xe0, 0xf1, 0x42, 0xad, 0xb1, 0x0f, 0x64, 0x27, 0x2e, 0xd8, 0x56, 0xe5,
0x50, 0x76, 0x6c, 0x9c, 0x64, 0xe1, 0xb6, 0x7f, 0x19, 0xb6, 0xaf, 0x2f, 0x94, 0x71, 0xe2, 0xfb,
0x5e, 0x52, 0xaa, 0xa8, 0x38, 0xe0, 0xc4, 0x77, 0x22, 0x6c, 0x8d, 0x2e, 0x59, 0x7a, 0x50, 0xd3,
0x30, 0xf1, 0xde, 0x9f, 0xe3, 0xca, 0x1d, 0x3e, 0xb0, 0x1d, 0xc9, 0xf3, 0x83, 0x29, 0x8f, 0xbb,
0x8d, 0xed, 0xb8, 0xf6, 0x9c, 0xb5, 0x12, 0xc3, 0x79, 0x8e, 0x85, 0xf9, 0x00, 0x56, 0xb8, 0x66,
0xaf, 0x6d, 0x74, 0x2f, 0x53, 0x06, 0xcd, 0x75, 0x20, 0x3d, 0x94, 0x5d, 0x7a, 0xf6, 0xdf, 0xbf,
0x2f, 0x40, 0x4d, 0x03, 0xb3, 0xdd, 0x88, 0xa7, 0x4c, 0xda, 0x63, 0xd7, 0x99, 0x52, 0x19, 0xe4,
0x6c, 0x58, 0x0d, 0x0e, 0xdd, 0x15, 0x40, 0xb6, 0x17, 0x3b, 0x17, 0x67, 0xb6, 0x3f, 0x8f, 0xec,
0x31, 0x3d, 0x0b, 0xa8, 0x6c, 0x65, 0xdd, 0xb9, 0x38, 0xeb, 0xcf, 0xa3, 0x5d, 0x0e, 0x63, 0x54,
0x4c, 0x96, 0x68, 0x54, 0x22, 0x83, 0x6e, 0xea, 0x5c, 0xc6, 0x54, 0x22, 0xd5, 0x14, 0x39, 0xb3,
0xa8, 0x52, 0x4d, 0xd1, 0x5a, 0x4c, 0x6f, 0xa0, 0xa5, 0xc5, 0x0d, 0xf4, 0x23, 0xd8, 0xc4, 0x0d,
0x54, 0x88, 0x66, 0x3b, 0xb5, 0x92, 0xd7, 0x39, 0x56, 0x74, 0x52, 0x53, 0x7b, 0x0d, 0xd6, 0x03,
0x29, 0x96, 0x42, 0xf7, 0xa7, 0x28, 0xc8, 0x72, 0x16, 0xeb, 0x99, 0xa8, 0x7c, 0xe0, 0xfe, 0x94,
0x32, 0x4a, 0x9e, 0xab, 0xa3, 0x53, 0x8a, 0x53, 0x3b, 0x53, 0xd7, 0x4b, 0x53, 0x3a, 0x97, 0x49,
0xca, 0xaa, 0xa0, 0x74, 0x2e, 0x75, 0xca, 0xc7, 0xb0, 0x35, 0xa5, 0x63, 0xd7, 0x49, 0x56, 0x6b,
0xc7, 0x8a, 0xdb, 0x3a, 0xa2, 0xb5, 0x32, 0x03, 0x34, 0xdc, 0xd9, 0x68, 0xfc, 0xd4, 0x9f, 0x9e,
0xb8, 0xa8, 0xb3, 0x60, 0xf6, 0x50, 0xd1, 0x5a, 0xf6, 0xe6, 0xd3, 0x5f, 0xe2, 0x60, 0x56, 0x24,
0x34, 0x1b, 0x50, 0x1b, 0x44, 0xfe, 0x4c, 0x4e, 0xf3, 0x32, 0xd4, 0xf1, 0x51, 0x9c, 0x77, 0xbe,
0x05, 0x37, 0xb9, 0x48, 0x18, 0xfa, 0x33, 0x7f, 0xe2, 0x9f, 0x5d, 0x25, 0xfc, 0x78, 0xff, 0x3a,
0x07, 0x6b, 0x09, 0xac, 0x10, 0xaf, 0x1f, 0xa1, 0x3c, 0x53, 0xa7, 0x35, 0x73, 0x89, 0xa3, 0x3a,
0x6c, 0xbe, 0x90, 0x10, 0x85, 0x99, 0x3c, 0xc1, 0xd9, 0x8a, 0x2f, 0x66, 0x91, 0x05, 0x51, 0xa4,
0x34, 0x17, 0x45, 0x8a, 0x28, 0x2f, 0xaf, 0x6c, 0x91, 0x55, 0xfc, 0x82, 0x38, 0x59, 0x35, 0x16,
0x5d, 0x2e, 0x24, 0xcf, 0x5e, 0xe8, 0x3e, 0x3f, 0xd9, 0x82, 0xd8, 0x11, 0x18, 0x9a, 0x7f, 0x3f,
0x07, 0x10, 0xb7, 0x8e, 0x9f, 0xfe, 0x50, 0x7a, 0x4b, 0x8e, 0x27, 0xee, 0x6a, 0x3a, 0xca, 0x5b,
0x50, 0x57, 0x39, 0xde, 0xb1, 0x26, 0x54, 0x93, 0x30, 0xa6, 0x0e, 0xbd, 0x07, 0x2b, 0x67, 0x13,
0xff, 0x84, 0x6b, 0xac, 0x42, 0x6f, 0xc1, 0xec, 0xb9, 0x65, 0x04, 0x4b, 0x6d, 0x24, 0xd6, 0x9b,
0x8a, 0x99, 0x69, 0xe0, 0xba, 0x16, 0x64, 0xfe, 0xd5, 0xbc, 0x4a, 0x24, 0x8d, 0x47, 0xe2, 0xe5,
0xe6, 0xdd, 0xcf, 0x92, 0x6a, 0xf3, 0xb2, 0xf0, 0xe2, 0x13, 0x58, 0x0e, 0x70, 0x53, 0x92, 0x3b,
0x56, 0xf1, 0x25, 0x3b, 0x56, 0x23, 0x48, 0x68, 0x3a, 0xdf, 0x06, 0xc3, 0x19, 0x5f, 0xd0, 0x20,
0x72, 0xb9, 0xb7, 0x9e, 0xeb, 0xc7, 0x22, 0x75, 0x53, 0x83, 0x73, 0x45, 0xf4, 0x3d, 0x58, 0x11,
0x67, 0xf0, 0x15, 0xa5, 0xb8, 0x01, 0x2c, 0x06, 0x33, 0x42, 0xf3, 0x1f, 0xcb, 0xcc, 0xd5, 0xe4,
0xec, 0xbe, 0x7c, 0x54, 0xf4, 0x1e, 0xe6, 0x17, 0x03, 0xa8, 0x82, 0x91, 0x44, 0x10, 0x40, 0xc8,
0x23, 0x04, 0x8a, 0x10, 0x40, 0x72, 0x58, 0x8b, 0xaf, 0x33, 0xac, 0xe6, 0xbf, 0xc9, 0x41, 0x79,
0xdf, 0x9f, 0xed, 0xbb, 0x78, 0xfe, 0x81, 0x2f, 0x13, 0x15, 0xa3, 0x5a, 0x62, 0x8f, 0x3c, 0x2f,
0xe8, 0x25, 0xa7, 0x18, 0x33, 0xd5, 0xbc, 0x46, 0x52, 0xcd, 0xfb, 0x01, 0xdc, 0xe2, 0x21, 0xc0,
0xc0, 0x9f, 0xf9, 0x01, 0x5b, 0xaa, 0xce, 0x04, 0xd5, 0x3d, 0xdf, 0x8b, 0xce, 0xa5, 0xec, 0xbc,
0x79, 0x4a, 0xe9, 0x91, 0x46, 0x71, 0xa8, 0x08, 0xf8, 0x09, 0xe6, 0x49, 0x74, 0x61, 0xa3, 0x85,
0x2e, 0xf4, 0x51, 0x94, 0xa8, 0x2b, 0x0c, 0xd1, 0xe1, 0x70, 0xae, 0x91, 0x9a, 0x9f, 0x42, 0x55,
0x39, 0x7b, 0xc8, 0xfb, 0x50, 0x3d, 0xf7, 0x67, 0xc2, 0x23, 0x94, 0x4b, 0x9c, 0xf4, 0x14, 0xbd,
0xb6, 0x2a, 0xe7, 0xf8, 0x23, 0x34, 0xff, 0xa0, 0x0c, 0xe5, 0xae, 0x77, 0xe1, 0xbb, 0x23, 0x9e,
0xfb, 0x3a, 0xa5, 0x53, 0x5f, 0x5e, 0x04, 0xc2, 0x7e, 0xf3, 0xd4, 0xad, 0xf8, 0x1e, 0xaf, 0x82,
0x48, 0xdd, 0x52, 0x37, 0x78, 0x6d, 0xc0, 0x52, 0xa0, 0x5f, 0xc4, 0x55, 0x0a, 0xf8, 0x89, 0x01,
0xb5, 0x5f, 0x96, 0xb4, 0xeb, 0x55, 0x58, 0x5d, 0x98, 0x96, 0xc8, 0x87, 0x0c, 0x4f, 0x21, 0x57,
0x39, 0x84, 0x0f, 0xd8, 0x1b, 0x50, 0x16, 0x07, 0x2b, 0xf1, 0x98, 0x17, 0xa6, 0xf8, 0x0b, 0x10,
0xe7, 0x86, 0x80, 0x62, 0x08, 0x57, 0x29, 0xb2, 0x05, 0xab, 0x2e, 0x81, 0xbb, 0x8c, 0xd7, 0xee,
0x40, 0x0d, 0xe9, 0x91, 0xa4, 0x22, 0x52, 0x46, 0x39, 0x88, 0x13, 0x64, 0xdc, 0x67, 0x57, 0xcd,
0xbc, 0xcf, 0x8e, 0x27, 0x37, 0x2b, 0x29, 0x8b, 0x5d, 0x04, 0xbc, 0xc5, 0x4c, 0x83, 0xcb, 0x4b,
0x22, 0x85, 0x4f, 0x05, 0x0f, 0xe8, 0x4b, 0x9f, 0xca, 0xdb, 0xd0, 0x38, 0x75, 0x26, 0x93, 0x13,
0x67, 0xf4, 0x1c, 0x5d, 0x01, 0x75, 0xf4, 0x7e, 0x4a, 0x20, 0xf7, 0x05, 0xdc, 0x81, 0x9a, 0x36,
0xcb, 0x3c, 0x1f, 0xb4, 0x68, 0x41, 0x3c, 0xbf, 0x69, 0x0f, 0xdf, 0xf2, 0x6b, 0x78, 0xf8, 0xb4,
0xbc, 0xd8, 0x95, 0x64, 0x5e, 0xec, 0x2d, 0x2e, 0x4d, 0x45, 0x46, 0xa2, 0x81, 0x57, 0x66, 0x39,
0xe3, 0x31, 0xcf, 0x48, 0xe4, 0x8e, 0x2c, 0x1c, 0x3c, 0xc4, 0xaf, 0xa2, 0x2d, 0x81, 0x30, 0x24,
0xb9, 0x8d, 0x6e, 0xea, 0x99, 0xe3, 0x8e, 0xf9, 0x31, 0x0d, 0xf4, 0x1e, 0x94, 0x9d, 0x69, 0x74,
0xe4, 0xb8, 0x63, 0x72, 0x17, 0xea, 0x12, 0xcd, 0x77, 0xc7, 0x35, 0x1c, 0x7f, 0x81, 0x1e, 0xe0,
0xf5, 0x13, 0x8a, 0x62, 0xaa, 0x4e, 0xd8, 0x5b, 0x35, 0x41, 0xc2, 0xf9, 0xe0, 0x43, 0x9e, 0xe5,
0x13, 0x51, 0x7e, 0x86, 0x7e, 0xf9, 0xd1, 0x2d, 0x95, 0x7c, 0xc0, 0xb9, 0x54, 0xfe, 0xc7, 0xe0,
0x18, 0x52, 0x32, 0xe5, 0x0e, 0x63, 0x74, 0x9b, 0x09, 0xfd, 0x57, 0x90, 0xf2, 0x18, 0x1d, 0x12,
0x90, 0x4f, 0x35, 0xfb, 0xb5, 0xc9, 0x89, 0xdf, 0x48, 0xd5, 0x7f, 0xdd, 0x31, 0xb6, 0xdb, 0x00,
0x6e, 0xc8, 0x76, 0x99, 0x90, 0x7a, 0x63, 0x7e, 0x14, 0xbe, 0x62, 0x55, 0xdd, 0xf0, 0x19, 0x02,
0xbe, 0x59, 0xc3, 0xb6, 0x05, 0x75, 0xbd, 0x9b, 0xa4, 0x02, 0xc5, 0xfe, 0x51, 0xa7, 0x67, 0xdc,
0x20, 0x35, 0x28, 0x0f, 0x3a, 0xc3, 0xe1, 0x01, 0x8f, 0xf4, 0xd5, 0xa1, 0xa2, 0x0e, 0xba, 0xe6,
0xd9, 0x53, 0xab, 0xdd, 0xee, 0x1c, 0x0d, 0x3b, 0xbb, 0x46, 0xe1, 0xc7, 0xc5, 0x4a, 0xde, 0x28,
0x98, 0x7f, 0x58, 0x80, 0x9a, 0x36, 0x0a, 0x2f, 0x17, 0xc6, 0xb7, 0x01, 0xb8, 0x25, 0x19, 0x27,
0xac, 0x16, 0xad, 0x2a, 0x83, 0xe0, 0xe4, 0xeb, 0x31, 0x0a, 0xbc, 0x8b, 0x44, 0xc5, 0x28, 0xde,
0x86, 0x06, 0xde, 0x16, 0xa2, 0xc7, 0x6b, 0x4b, 0x56, 0x1d, 0x81, 0x42, 0x54, 0xf3, 0x63, 0xf3,
0x9c, 0x88, 0x1f, 0x48, 0x14, 0xd7, 0x19, 0x21, 0x88, 0x1f, 0x49, 0xe4, 0xe7, 0x49, 0x43, 0x7f,
0x72, 0x41, 0x91, 0x02, 0x35, 0xc2, 0x9a, 0x80, 0x0d, 0xc5, 0x95, 0x04, 0x42, 0x1e, 0x6a, 0xe7,
0xb6, 0x4b, 0x56, 0x1d, 0x81, 0xe2, 0x45, 0xdf, 0x95, 0x0c, 0x84, 0xd9, 0x2b, 0x5b, 0x8b, 0xdc,
0x90, 0x60, 0x9e, 0x83, 0x05, 0x37, 0x62, 0x95, 0x33, 0xc6, 0xb7, 0x16, 0xcb, 0xbd, 0xda, 0x9d,
0x48, 0xde, 0x07, 0x32, 0x9d, 0xcd, 0xec, 0x0c, 0x07, 0x5f, 0xd1, 0x5a, 0x99, 0xce, 0x66, 0x43,
0xcd, 0xff, 0xf5, 0x0d, 0xf8, 0x1e, 0xbf, 0x02, 0xd2, 0x62, 0x0b, 0x98, 0x37, 0x51, 0x99, 0x62,
0xb1, 0x58, 0xce, 0xe9, 0x62, 0x39, 0x43, 0xfa, 0xe5, 0x33, 0xa5, 0xdf, 0xcb, 0xe4, 0x84, 0xb9,
0x07, 0xb5, 0x23, 0xed, 0xd2, 0xc4, 0xbb, 0x6c, 0x87, 0x90, 0xd7, 0x25, 0xe2, 0xde, 0x81, 0x3e,
0xc5, 0x40, 0xdc, 0x92, 0xa8, 0xb5, 0x26, 0xaf, 0xb5, 0xc6, 0xfc, 0xbb, 0x39, 0xbc, 0x64, 0x4a,
0x35, 0x3e, 0xbe, 0xa7, 0x51, 0x86, 0xdf, 0xe2, 0xeb, 0x15, 0x6a, 0x32, 0xec, 0x26, 0x6e, 0x46,
0xe0, 0x4d, 0xb3, 0xfd, 0xd3, 0xd3, 0x90, 0xca, 0x1c, 0x8f, 0x1a, 0x87, 0xf5, 0x39, 0x48, 0x2a,
0xdf, 0x4c, 0xc3, 0x77, 0xb1, 0xfe, 0x50, 0x24, 0x76, 0x30, 0xe5, 0xfb, 0xd0, 0xb9, 0x14, 0x6f,
0x0d, 0x99, 0x0a, 0x22, 0xe2, 0x03, 0xf2, 0x78, 0xb1, 0x7a, 0x36, 0xff, 0x96, 0xb8, 0x01, 0x22,
0x3d, 0xbe, 0xf7, 0xa1, 0xa2, 0x6a, 0x4d, 0xee, 0xb0, 0x92, 0x52, 0xe1, 0xd9, 0x3e, 0xce, 0x9d,
0x21, 0x89, 0x16, 0xe3, 0xe2, 0xe2, 0x31, 0x9e, 0xae, 0xd6, 0xea, 0xef, 0x00, 0x39, 0x75, 0x83,
0x34, 0x31, 0x2e, 0x36, 0x83, 0x63, 0x34, 0x6a, 0xf3, 0x18, 0xd6, 0xa4, 0x94, 0xd0, 0x2c, 0x82,
0xe4, 0xe4, 0xe5, 0x5e, 0x21, 0xe4, 0xf3, 0x0b, 0x42, 0xde, 0xfc, 0xf5, 0x12, 0x94, 0xe5, 0x05,
0xa4, 0x59, 0x97, 0x66, 0x56, 0x93, 0x97, 0x66, 0x36, 0x13, 0x57, 0xa9, 0xf1, 0xa9, 0x17, 0xfb,
0xfd, 0x7b, 0xe9, 0x2d, 0x5b, 0x8b, 0x55, 0x24, 0xb6, 0x6d, 0x11, 0xab, 0x28, 0x25, 0x63, 0x15,
0x59, 0x17, 0x89, 0xa2, 0xea, 0xb9, 0x70, 0x91, 0xe8, 0x2d, 0x40, 0x3d, 0x42, 0x4b, 0x6e, 0xab,
0x70, 0x80, 0x38, 0x22, 0xaf, 0xa9, 0x1d, 0x95, 0xb4, 0xda, 0xf1, 0xda, 0x2a, 0xc1, 0x47, 0xb0,
0x84, 0xb7, 0xc9, 0x88, 0xe3, 0xd2, 0x72, 0xe3, 0x10, 0x63, 0x25, 0xff, 0xe3, 0x81, 0x08, 0x4b,
0xd0, 0xea, 0xb7, 0xf2, 0xd5, 0x12, 0xb7, 0xf2, 0xe9, 0x31, 0x94, 0x7a, 0x32, 0x86, 0x72, 0x0f,
0x0c, 0x35, 0x70, 0xdc, 0x23, 0xe9, 0x85, 0xe2, 0xac, 0xe5, 0xb2, 0x84, 0x33, 0x69, 0xd8, 0x0b,
0xe3, 0x8d, 0x6f, 0x39, 0xb1, 0xf1, 0x31, 0x59, 0xd5, 0x8a, 0x22, 0x3a, 0x9d, 0x45, 0x72, 0xe3,
0xd3, 0xee, 0x6e, 0xc5, 0x99, 0xc7, 0xc3, 0x20, 0x72, 0x7a, 0x91, 0x3b, 0x76, 0x60, 0xf9, 0xd4,
0x71, 0x27, 0xf3, 0x80, 0xda, 0x01, 0x75, 0x42, 0xdf, 0xe3, 0x8b, 0x3f, 0xde, 0x83, 0x45, 0x17,
0xf7, 0x90, 0xc6, 0xe2, 0x24, 0x56, 0xe3, 0x54, 0x7f, 0xe4, 0x47, 0xaa, 0xf4, 0x91, 0x60, 0x5b,
0x96, 0x38, 0x75, 0x8d, 0xb9, 0x2a, 0xdd, 0x9e, 0xbd, 0x77, 0xd0, 0x7d, 0xba, 0x3f, 0x34, 0x72,
0xec, 0x71, 0x70, 0xdc, 0x6e, 0x77, 0x3a, 0xbb, 0x7c, 0x0b, 0x03, 0x58, 0xda, 0x6b, 0x75, 0x0f,
0xc4, 0x06, 0x56, 0x34, 0x4a, 0xe6, 0x3f, 0xcf, 0x43, 0x4d, 0xeb, 0x0d, 0x79, 0xac, 0x26, 0x01,
0xaf, 0x69, 0xb8, 0xbd, 0xd8, 0xe3, 0x07, 0x52, 0xc2, 0x6b, 0xb3, 0xa0, 0x6e, 0x69, 0xcd, 0x5f,
0x7b, 0x4b, 0x2b, 0x79, 0x17, 0x56, 0x1c, 0xac, 0x41, 0x0d, 0xba, 0x70, 0xee, 0x0b, 0xb0, 0x18,
0xf3, 0x77, 0xc5, 0x95, 0x11, 0x62, 0x9b, 0x62, 0x74, 0x45, 0x99, 0xb4, 0xa9, 0x76, 0x2a, 0x3e,
0x37, 0x65, 0x31, 0x32, 0x22, 0x18, 0xaf, 0x36, 0x7c, 0x31, 0x5e, 0x12, 0x8d, 0xe7, 0x2c, 0x35,
0x0e, 0xaf, 0x5b, 0xea, 0xd9, 0xfc, 0x18, 0x20, 0xee, 0x4f, 0x72, 0xf8, 0x6e, 0x24, 0x87, 0x2f,
0xa7, 0x0d, 0x5f, 0xde, 0xfc, 0x47, 0x42, 0x74, 0x89, 0xb9, 0x50, 0xae, 0xbe, 0xef, 0x82, 0x74,
0x3e, 0xda, 0x3c, 0xc9, 0x7b, 0x36, 0xa1, 0x91, 0x3c, 0x2a, 0xba, 0x2a, 0x30, 0x5d, 0x85, 0x58,
0x10, 0xb5, 0xf9, 0x45, 0x51, 0xfb, 0x16, 0xd4, 0xf9, 0x1d, 0x64, 0xe2, 0x45, 0x42, 0x5c, 0xd5,
0xa6, 0xce, 0xa5, 0x7c, 0x77, 0x42, 0xc6, 0x16, 0x53, 0x32, 0xf6, 0x6f, 0xe7, 0xf0, 0xc2, 0x9a,
0xb8, 0xa1, 0xb1, 0x90, 0x55, 0x75, 0x26, 0x85, 0xac, 0x20, 0xb5, 0x14, 0xfe, 0x1a, 0xc1, 0x99,
0xcf, 0x16, 0x9c, 0xd9, 0x22, 0xb9, 0x90, 0x29, 0x92, 0xcd, 0x6d, 0x68, 0xee, 0x52, 0x36, 0x14,
0xad, 0xc9, 0x24, 0x35, 0x96, 0xe6, 0x2d, 0xb8, 0x99, 0x81, 0x13, 0x5e, 0x9b, 0xdf, 0xc8, 0xc1,
0x46, 0x0b, 0xef, 0xa9, 0xf8, 0xc6, 0xce, 0x72, 0x7e, 0x06, 0x37, 0x55, 0xc6, 0xb6, 0x76, 0x44,
0x4c, 0xbf, 0x64, 0x48, 0x26, 0x7b, 0x6b, 0xe7, 0x14, 0xd8, 0x9e, 0x69, 0x36, 0x61, 0x33, 0xdd,
0x1a, 0xd1, 0xd0, 0x3d, 0x58, 0xdd, 0xa5, 0x27, 0xf3, 0xb3, 0x03, 0x7a, 0x11, 0xb7, 0x91, 0x40,
0x31, 0x3c, 0xf7, 0x5f, 0x08, 0xc6, 0xe0, 0xbf, 0x79, 0x4a, 0x27, 0xa3, 0xb1, 0xc3, 0x19, 0x1d,
0x49, 0xaf, 0x3f, 0x87, 0x0c, 0x66, 0x74, 0x64, 0x3e, 0x06, 0xa2, 0xd7, 0x23, 0x66, 0x91, 0x99,
0x64, 0xf3, 0x13, 0x3b, 0xbc, 0x0a, 0x23, 0x3a, 0x95, 0xc7, 0x1f, 0x21, 0x9c, 0x9f, 0x0c, 0x10,
0x62, 0xbe, 0x07, 0xf5, 0x23, 0xe7, 0xca, 0xa2, 0x5f, 0x89, 0x53, 0x86, 0x5b, 0x50, 0x9e, 0x39,
0x57, 0x4c, 0x16, 0xab, 0x00, 0x20, 0x47, 0x9b, 0xff, 0xa4, 0x08, 0x4b, 0x48, 0x49, 0xee, 0xe2,
0xfd, 0xe9, 0xae, 0xc7, 0x65, 0xa1, 0xdc, 0x95, 0x34, 0xd0, 0xc2, 0xc6, 0x95, 0x5f, 0xdc, 0xb8,
0x84, 0xb7, 0x52, 0x5e, 0x82, 0x26, 0x43, 0x35, 0xde, 0x7c, 0x2a, 0x6f, 0x3e, 0x4b, 0xde, 0xf3,
0x50, 0x8c, 0xef, 0xdd, 0xc7, 0x33, 0xee, 0xc9, 0x60, 0x7a, 0x6c, 0xf8, 0x61, 0xeb, 0xe4, 0x7e,
0x2c, 0xf6, 0x2c, 0x1d, 0x94, 0x69, 0x5d, 0x96, 0xe5, 0xd1, 0xd9, 0xa4, 0x75, 0xb9, 0x60, 0x45,
0x56, 0x5e, 0x6d, 0x45, 0xa2, 0x1b, 0xf3, 0x25, 0x56, 0x24, 0xbc, 0x86, 0x15, 0xf9, 0x1a, 0x81,
0xec, 0x9b, 0x50, 0xe1, 0x4a, 0x96, 0xb6, 0x85, 0x31, 0xe5, 0x8a, 0x6d, 0x61, 0x9f, 0x68, 0x76,
0x16, 0x66, 0xd1, 0x68, 0x7b, 0x88, 0x45, 0xbf, 0xfa, 0xf9, 0x04, 0x08, 0xbf, 0x84, 0xb2, 0x80,
0x32, 0x86, 0xf6, 0x9c, 0xa9, 0xbc, 0x4e, 0x93, 0xff, 0x66, 0xc3, 0xc6, 0x2f, 0xbf, 0xfb, 0x6a,
0xee, 0x06, 0x74, 0x2c, 0xaf, 0xe0, 0x72, 0xf9, 0xfa, 0x66, 0x10, 0xd6, 0x41, 0x66, 0xf3, 0x79,
0xfe, 0x0b, 0x4f, 0xc8, 0xad, 0xb2, 0x1b, 0x3e, 0x63, 0x8f, 0x26, 0x01, 0x83, 0x5f, 0xbe, 0x3b,
0xf3, 0x03, 0xa9, 0x21, 0x98, 0xbf, 0x93, 0x03, 0x43, 0xac, 0x2e, 0x85, 0xd3, 0x4d, 0xae, 0xd2,
0x75, 0x49, 0x1f, 0x2f, 0xbf, 0x50, 0xcb, 0x84, 0x06, 0xf7, 0x34, 0x29, 0x75, 0x01, 0x3d, 0x65,
0x35, 0x06, 0xdc, 0x13, 0x2a, 0xc3, 0x9b, 0x50, 0x93, 0x09, 0xe7, 0x53, 0x77, 0x22, 0x3f, 0xb1,
0x81, 0x19, 0xe7, 0x87, 0xee, 0x44, 0x6a, 0x1b, 0x81, 0x23, 0x8e, 0x72, 0xe7, 0xb8, 0xb6, 0x61,
0x39, 0x11, 0x35, 0xff, 0x59, 0x0e, 0x56, 0xb5, 0xae, 0x88, 0x75, 0xfb, 0x7d, 0xa8, 0xab, 0x5b,
0xaf, 0xa9, 0x52, 0x73, 0xb7, 0x92, 0x32, 0x2a, 0x2e, 0x56, 0x1b, 0x29, 0x48, 0xc8, 0x1a, 0x33,
0x76, 0xae, 0x30, 0x2b, 0x7a, 0x3e, 0x95, 0x96, 0xe4, 0xd8, 0xb9, 0xda, 0xa3, 0x74, 0x30, 0x9f,
0x92, 0xbb, 0x50, 0x7f, 0x41, 0xe9, 0x73, 0x45, 0x80, 0xa2, 0x17, 0x18, 0x4c, 0x50, 0x98, 0xd0,
0x98, 0xfa, 0x5e, 0x74, 0xae, 0x48, 0x84, 0x8a, 0xcf, 0x81, 0x48, 0x63, 0xfe, 0x7e, 0x1e, 0xd6,
0xd0, 0x9f, 0x29, 0xfc, 0xc8, 0x42, 0x74, 0x35, 0x61, 0x09, 0x5d, 0xbb, 0x28, 0xbc, 0xf6, 0x6f,
0x58, 0xe2, 0x99, 0x7c, 0xf4, 0x9a, 0x3e, 0x58, 0x79, 0x5a, 0xfc, 0x9a, 0xe1, 0x2f, 0x2c, 0x0e,
0xff, 0xf5, 0xc3, 0x9b, 0x15, 0x55, 0x2e, 0x65, 0x45, 0x95, 0x5f, 0x27, 0x96, 0xbb, 0x70, 0xae,
0xb9, 0xbc, 0x78, 0x7b, 0xe7, 0x63, 0xd8, 0x4a, 0xd0, 0x70, 0x69, 0xed, 0x9e, 0xba, 0x54, 0xde,
0x0f, 0xb4, 0xae, 0x51, 0x0f, 0x24, 0x6e, 0xa7, 0x0c, 0xa5, 0x70, 0xe4, 0xcf, 0xa8, 0xb9, 0x09,
0xeb, 0xc9, 0x51, 0x15, 0xdb, 0xc4, 0x6f, 0xe5, 0xa0, 0x29, 0x72, 0x80, 0x5c, 0xef, 0x6c, 0xdf,
0x0d, 0x23, 0x3f, 0x50, 0xb7, 0x43, 0xdf, 0x06, 0xc0, 0xcf, 0x7d, 0x70, 0xc3, 0x5d, 0xdc, 0x88,
0xc3, 0x21, 0xdc, 0x6c, 0xbf, 0x09, 0x15, 0xea, 0x8d, 0x11, 0x89, 0xdc, 0x50, 0xa6, 0xde, 0x58,
0x1a, 0xfd, 0x0b, 0xdb, 0x70, 0x23, 0xa9, 0x60, 0x88, 0xbb, 0x1d, 0xd8, 0xe8, 0xd0, 0x0b, 0xae,
0x0e, 0x14, 0xd5, 0xdd, 0x0e, 0x87, 0xce, 0x25, 0xcf, 0xa8, 0x0d, 0xcd, 0xbf, 0x96, 0x87, 0x95,
0xb8, 0x7d, 0x78, 0xbb, 0xcd, 0xcb, 0xef, 0xe9, 0xb9, 0x2b, 0xd8, 0xc1, 0x65, 0xc6, 0x92, 0xe6,
0xe5, 0xad, 0xe0, 0xe2, 0xec, 0x7a, 0xc4, 0x84, 0x9a, 0xa4, 0xf0, 0xe7, 0x91, 0x76, 0xe3, 0x68,
0x15, 0x49, 0xfa, 0xf3, 0x88, 0x59, 0xb7, 0xcc, 0xcc, 0x77, 0x3d, 0x61, 0x5f, 0x96, 0x9c, 0x69,
0xd4, 0xe5, 0xdf, 0x94, 0x61, 0x60, 0x56, 0x0c, 0x27, 0x92, 0x51, 0x31, 0x7a, 0x03, 0x8d, 0x1d,
0x9c, 0x39, 0x6e, 0xe8, 0xe8, 0x96, 0x00, 0x5e, 0x83, 0xaf, 0x2c, 0x81, 0x37, 0xa1, 0x86, 0x95,
0xc7, 0xc7, 0xd8, 0xf9, 0xf5, 0x5f, 0x51, 0xd7, 0xe3, 0x78, 0xe1, 0x71, 0xf3, 0xe7, 0x09, 0x3f,
0x03, 0xe0, 0xab, 0x78, 0x8a, 0xcd, 0x6f, 0xe4, 0xe0, 0x66, 0xc6, 0xb4, 0x89, 0x55, 0xde, 0x86,
0xd5, 0x53, 0x85, 0x94, 0xa3, 0x8b, 0x4b, 0x7d, 0x53, 0x8a, 0xd5, 0xe4, 0x98, 0x5a, 0xc6, 0x69,
0x12, 0x10, 0x5b, 0xb8, 0x38, 0x83, 0x89, 0x4b, 0x12, 0xb8, 0x3a, 0x85, 0xd3, 0x88, 0xc6, 0xe5,
0x11, 0x6c, 0x77, 0x2e, 0x99, 0xc4, 0x50, 0x69, 0xb9, 0xa3, 0xe7, 0x73, 0x19, 0xf9, 0x4a, 0x79,
0xf3, 0x73, 0xaf, 0xe5, 0xcd, 0x1f, 0xe3, 0x31, 0x67, 0x55, 0xd7, 0xcf, 0x52, 0x09, 0xdf, 0x40,
0x59, 0x99, 0x13, 0x5e, 0x85, 0xbc, 0x2d, 0x81, 0x81, 0xb0, 0x52, 0x33, 0x84, 0x95, 0xc3, 0xf9,
0x24, 0x72, 0xdb, 0x0a, 0x44, 0x3e, 0x12, 0x65, 0xf8, 0x7b, 0xe4, 0xa8, 0x65, 0xbe, 0x08, 0xd4,
0x8b, 0xf8, 0x60, 0x4d, 0x59, 0x45, 0xf6, 0xe2, 0xfb, 0x56, 0xa6, 0xc9, 0x37, 0x98, 0x37, 0x61,
0x2b, 0x7e, 0xc2, 0x61, 0x93, 0x5b, 0xcd, 0xdf, 0xc9, 0x61, 0xfa, 0x3e, 0xe2, 0x06, 0x9e, 0x33,
0x0b, 0xcf, 0xfd, 0x88, 0x74, 0x60, 0x2d, 0x74, 0xbd, 0xb3, 0x09, 0xd5, 0xab, 0x0f, 0xc5, 0x20,
0x6c, 0x24, 0xdb, 0x86, 0x45, 0x43, 0x6b, 0x15, 0x4b, 0xc4, 0xb5, 0x85, 0x64, 0xe7, 0xba, 0x46,
0xc6, 0x6c, 0x91, 0x1a, 0x8d, 0xc5, 0xc6, 0x77, 0x61, 0x39, 0xf9, 0x22, 0xf2, 0x89, 0xb8, 0x1d,
0x20, 0x6e, 0x55, 0x21, 0x75, 0x36, 0x3a, 0x66, 0x88, 0x5a, 0x3c, 0xf6, 0xa1, 0xf9, 0x57, 0x72,
0xd0, 0xb4, 0x28, 0xe3, 0x5c, 0xad, 0x95, 0x92, 0x67, 0xbe, 0xbf, 0x50, 0xeb, 0xf5, 0x7d, 0x95,
0x97, 0x0e, 0xc8, 0x16, 0x7d, 0xe7, 0xda, 0xc9, 0xd8, 0xbf, 0xb1, 0xd0, 0xa3, 0x9d, 0x0a, 0x2c,
0x21, 0x89, 0xb9, 0x05, 0x1b, 0xa2, 0x3d, 0xb2, 0x2d, 0x71, 0xa8, 0x36, 0xf1, 0xc6, 0x44, 0xa8,
0x76, 0x1b, 0x9a, 0x78, 0xce, 0x57, 0xef, 0x84, 0x28, 0xb8, 0x0b, 0xe4, 0xd0, 0x19, 0x39, 0x81,
0xef, 0x7b, 0x47, 0x34, 0x10, 0xc9, 0xd0, 0x5c, 0xc3, 0xe4, 0x91, 0x4c, 0xa9, 0x0a, 0xe3, 0x93,
0xbc, 0x67, 0xd9, 0xf7, 0x64, 0xee, 0x17, 0x3e, 0x99, 0x01, 0xac, 0xed, 0x38, 0xcf, 0xa9, 0xac,
0x49, 0x0e, 0xd1, 0x13, 0xa8, 0xcd, 0x54, 0xa5, 0x72, 0xdc, 0xe5, 0x65, 0x29, 0x8b, 0xaf, 0xb5,
0x74, 0x6a, 0x26, 0x82, 0x02, 0xdf, 0x8f, 0xf8, 0xc5, 0x04, 0x32, 0x18, 0x66, 0x55, 0x19, 0xe8,
0x19, 0xbd, 0xea, 0x8e, 0xcd, 0x47, 0xb0, 0x9e, 0x7c, 0xa7, 0x10, 0x2d, 0xdb, 0x50, 0x99, 0x0a,
0x98, 0x68, 0xbd, 0x7a, 0x66, 0xc6, 0x08, 0x33, 0xf9, 0x64, 0x99, 0xee, 0xae, 0x32, 0xa9, 0x9e,
0xc0, 0xd6, 0x02, 0x46, 0x54, 0x78, 0x17, 0xea, 0x5a, 0x43, 0xb0, 0x1b, 0x45, 0xa6, 0xb2, 0x8a,
0x96, 0x84, 0xe6, 0x67, 0xb0, 0x85, 0xf6, 0x58, 0x5c, 0x5c, 0x0e, 0x41, 0xaa, 0x17, 0xb9, 0x74,
0x2f, 0x3e, 0x92, 0x66, 0x9e, 0x5e, 0x34, 0x3e, 0x2a, 0x30, 0xe6, 0x38, 0x99, 0xbe, 0x23, 0x1f,
0xcd, 0xdf, 0xac, 0x40, 0x59, 0x58, 0xf3, 0xe4, 0x01, 0x14, 0x47, 0x32, 0xcf, 0x30, 0xbe, 0x30,
0x4d, 0x60, 0xe5, 0xff, 0x36, 0xcf, 0x36, 0x64, 0x74, 0xe4, 0x09, 0x2c, 0x27, 0x43, 0xed, 0xa9,
0xcb, 0x14, 0x92, 0x31, 0xf2, 0xc6, 0x28, 0x15, 0x54, 0xad, 0xc6, 0x4a, 0x00, 0xea, 0x46, 0x95,
0x73, 0x4d, 0x4b, 0xf0, 0x3d, 0x66, 0x57, 0x84, 0xe7, 0x8e, 0xfd, 0xe8, 0xf1, 0xc7, 0xe2, 0x36,
0x85, 0x1a, 0x07, 0x0e, 0xce, 0x9d, 0x47, 0x8f, 0x3f, 0x4e, 0x5b, 0x0c, 0xe2, 0x2e, 0x05, 0xcd,
0x62, 0x58, 0x87, 0x12, 0x5e, 0x9a, 0x8c, 0x09, 0x63, 0xf8, 0x40, 0x1e, 0xc2, 0xba, 0x74, 0x10,
0x89, 0xd4, 0x7e, 0x94, 0xf6, 0x15, 0x3c, 0x4d, 0x29, 0x70, 0x03, 0x8e, 0x42, 0x97, 0xd2, 0x26,
0x2c, 0x9d, 0xc7, 0xb7, 0x60, 0x37, 0x2c, 0xf1, 0x64, 0xfe, 0x7e, 0x09, 0x6a, 0xda, 0xa0, 0x90,
0x3a, 0x54, 0xac, 0xce, 0xa0, 0x63, 0x7d, 0xde, 0xd9, 0x35, 0x6e, 0x90, 0x7b, 0xf0, 0x4e, 0xb7,
0xd7, 0xee, 0x5b, 0x56, 0xa7, 0x3d, 0xb4, 0xfb, 0x96, 0x2d, 0xaf, 0xed, 0x3b, 0x6a, 0x7d, 0x79,
0xd8, 0xe9, 0x0d, 0xed, 0xdd, 0xce, 0xb0, 0xd5, 0x3d, 0x18, 0x18, 0x39, 0xf2, 0x06, 0x34, 0x63,
0x4a, 0x89, 0x6e, 0x1d, 0xf6, 0x8f, 0x7b, 0x43, 0x23, 0x4f, 0xee, 0xc0, 0xad, 0xbd, 0x6e, 0xaf,
0x75, 0x60, 0xc7, 0x34, 0xed, 0x83, 0xe1, 0xe7, 0x76, 0xe7, 0x17, 0x8f, 0xba, 0xd6, 0x97, 0x46,
0x21, 0x8b, 0x60, 0x7f, 0x78, 0xd0, 0x96, 0x35, 0x14, 0xc9, 0x4d, 0xd8, 0x40, 0x02, 0x2c, 0x62,
0x0f, 0xfb, 0x7d, 0x7b, 0xd0, 0xef, 0xf7, 0x8c, 0x12, 0x59, 0x85, 0x46, 0xb7, 0xf7, 0x79, 0xeb,
0xa0, 0xbb, 0x6b, 0x5b, 0x9d, 0xd6, 0xc1, 0xa1, 0xb1, 0x44, 0xd6, 0x60, 0x25, 0x4d, 0x57, 0x66,
0x55, 0x48, 0xba, 0x7e, 0xaf, 0xdb, 0xef, 0xd9, 0x9f, 0x77, 0xac, 0x41, 0xb7, 0xdf, 0x33, 0x2a,
0x64, 0x13, 0x48, 0x12, 0xb5, 0x7f, 0xd8, 0x6a, 0x1b, 0x55, 0xb2, 0x01, 0xab, 0x49, 0xf8, 0xb3,
0xce, 0x97, 0x06, 0x90, 0x26, 0xac, 0x63, 0xc3, 0xec, 0x9d, 0xce, 0x41, 0xff, 0x0b, 0xfb, 0xb0,
0xdb, 0xeb, 0x1e, 0x1e, 0x1f, 0x1a, 0x35, 0x7e, 0xf7, 0x69, 0xa7, 0x63, 0x77, 0x7b, 0x83, 0xe3,
0xbd, 0xbd, 0x6e, 0xbb, 0xdb, 0xe9, 0x0d, 0x8d, 0x3a, 0xbe, 0x39, 0xab, 0xe3, 0x0d, 0x56, 0x40,
0x9c, 0xff, 0xb1, 0x77, 0xbb, 0x83, 0xd6, 0xce, 0x41, 0x67, 0xd7, 0x58, 0x26, 0xb7, 0xe1, 0xe6,
0xb0, 0x73, 0x78, 0xd4, 0xb7, 0x5a, 0xd6, 0x97, 0xf2, 0x7c, 0x90, 0xbd, 0xd7, 0xea, 0x1e, 0x1c,
0x5b, 0x1d, 0x63, 0x85, 0xbc, 0x05, 0xb7, 0xad, 0xce, 0x4f, 0x8e, 0xbb, 0x56, 0x67, 0xd7, 0xee,
0xf5, 0x77, 0x3b, 0xf6, 0x5e, 0xa7, 0x35, 0x3c, 0xb6, 0x3a, 0xf6, 0x61, 0x77, 0x30, 0xe8, 0xf6,
0x9e, 0x1a, 0x06, 0x79, 0x07, 0xee, 0x2a, 0x12, 0x55, 0x41, 0x8a, 0x6a, 0x95, 0xf5, 0x4f, 0x4e,
0x69, 0xaf, 0xf3, 0x8b, 0x43, 0xfb, 0xa8, 0xd3, 0xb1, 0x0c, 0x42, 0xb6, 0x61, 0x33, 0x7e, 0x3d,
0xbe, 0x40, 0xbc, 0x7b, 0x8d, 0xe1, 0x8e, 0x3a, 0xd6, 0x61, 0xab, 0xc7, 0x26, 0x38, 0x81, 0x5b,
0x67, 0xcd, 0x8e, 0x71, 0xe9, 0x66, 0x6f, 0x10, 0x02, 0xcb, 0xda, 0xac, 0xec, 0xb5, 0x2c, 0x63,
0x93, 0xac, 0x40, 0xed, 0xf0, 0xe8, 0xc8, 0x1e, 0x76, 0x0f, 0x3b, 0xfd, 0xe3, 0xa1, 0xb1, 0x45,
0x36, 0xc0, 0xe8, 0xf6, 0x86, 0x1d, 0x8b, 0xcd, 0xb5, 0x2c, 0xfa, 0x5f, 0xcb, 0x64, 0x1d, 0x56,
0x64, 0x4b, 0x25, 0xf4, 0x8f, 0xca, 0x64, 0x0b, 0xc8, 0x71, 0xcf, 0xea, 0xb4, 0x76, 0xd9, 0xc0,
0x29, 0xc4, 0x7f, 0x2b, 0x8b, 0xb0, 0xdb, 0xef, 0x14, 0x94, 0x52, 0x12, 0xe7, 0xb1, 0x24, 0x3f,
0x0d, 0x51, 0xd7, 0x3e, 0xe9, 0xf0, 0xaa, 0x0f, 0x3c, 0x69, 0x26, 0x64, 0x61, 0xc1, 0x84, 0x5c,
0xf0, 0x51, 0x34, 0x74, 0x1d, 0xf7, 0x6d, 0x68, 0x4c, 0xf1, 0x33, 0x11, 0xe2, 0x0e, 0x74, 0x10,
0x49, 0x5d, 0x08, 0xc4, 0x0b, 0xd0, 0x17, 0xbe, 0x70, 0x54, 0x5a, 0xfc, 0xc2, 0x51, 0x96, 0x1d,
0xb3, 0x94, 0x65, 0xc7, 0xdc, 0x87, 0x55, 0x14, 0x4d, 0xae, 0xe7, 0x4e, 0xa5, 0x77, 0x00, 0xb5,
0xdd, 0x15, 0x2e, 0xa2, 0x10, 0x2e, 0xcd, 0x26, 0x69, 0x5a, 0x09, 0x11, 0x52, 0x16, 0x56, 0x55,
0xc2, 0xa2, 0x42, 0xc9, 0xa1, 0x2c, 0x2a, 0xf5, 0x06, 0xe7, 0x32, 0x7e, 0x43, 0x4d, 0x7b, 0x03,
0xc2, 0xf9, 0x1b, 0xee, 0xc3, 0x2a, 0xbd, 0x8c, 0x02, 0xc7, 0xf6, 0x67, 0xce, 0x57, 0x73, 0x9e,
0x17, 0xe0, 0x70, 0x5f, 0x45, 0xdd, 0x5a, 0xe1, 0x88, 0x3e, 0x87, 0xef, 0x3a, 0x91, 0x73, 0xff,
0xcf, 0x41, 0x4d, 0xfb, 0x84, 0x08, 0xd9, 0x82, 0xb5, 0x2f, 0xba, 0xc3, 0x5e, 0x67, 0x30, 0xb0,
0x8f, 0x8e, 0x77, 0x9e, 0x75, 0xbe, 0xb4, 0xf7, 0x5b, 0x83, 0x7d, 0xe3, 0x06, 0x5b, 0xb4, 0xbd,
0xce, 0x60, 0xd8, 0xd9, 0x4d, 0xc0, 0x73, 0xe4, 0x4d, 0xd8, 0x3e, 0xee, 0x1d, 0x0f, 0x3a, 0xbb,
0x76, 0x56, 0xb9, 0x3c, 0xe3, 0x52, 0x81, 0xcf, 0x28, 0x5e, 0xb8, 0xff, 0x2b, 0xb0, 0x9c, 0x3c,
0x2a, 0x4f, 0x00, 0x96, 0x0e, 0x3a, 0x4f, 0x5b, 0xed, 0x2f, 0xf1, 0x76, 0xe4, 0xc1, 0xb0, 0x35,
0xec, 0xb6, 0x6d, 0x71, 0x1b, 0x32, 0x93, 0x08, 0x39, 0x52, 0x83, 0x72, 0xab, 0xd7, 0xde, 0xef,
0x5b, 0x03, 0x23, 0x4f, 0xde, 0x80, 0x2d, 0xc9, 0xab, 0xed, 0xfe, 0xe1, 0x61, 0x77, 0xc8, 0x85,
0xe1, 0xf0, 0xcb, 0x23, 0xc6, 0x9a, 0xf7, 0x1d, 0xa8, 0xc6, 0x17, 0x39, 0x73, 0x01, 0xd3, 0x1d,
0x76, 0x5b, 0xc3, 0x58, 0xba, 0x1a, 0x37, 0x98, 0xfc, 0x8a, 0xc1, 0xfc, 0x36, 0x66, 0x23, 0x87,
0xa7, 0x09, 0x25, 0x10, 0xdf, 0x6e, 0xe4, 0xd9, 0xa2, 0x8a, 0xa1, 0x3b, 0xfd, 0x21, 0xeb, 0xc2,
0xaf, 0xc2, 0x72, 0xf2, 0xbe, 0x64, 0x62, 0x40, 0x9d, 0xbd, 0x5f, 0x7b, 0x05, 0xc0, 0x12, 0xb6,
0xd8, 0xc8, 0xa1, 0x04, 0x6d, 0xf7, 0x0f, 0xbb, 0xbd, 0xa7, 0x5c, 0xec, 0x1a, 0x79, 0x06, 0xea,
0x1f, 0x0f, 0x9f, 0xf6, 0x15, 0xa8, 0xc0, 0x4a, 0x60, 0x77, 0x8c, 0xe2, 0xfd, 0xaf, 0x60, 0x75,
0xe1, 0x66, 0x65, 0xd6, 0xea, 0xfe, 0xf1, 0xb0, 0xdd, 0x3f, 0xd4, 0xdf, 0x53, 0x83, 0x72, 0xfb,
0xa0, 0xd5, 0x3d, 0xe4, 0x9e, 0xf1, 0x06, 0x54, 0x8f, 0x7b, 0xf2, 0x31, 0x9f, 0xbc, 0x13, 0xba,
0xc0, 0x64, 0xc1, 0x5e, 0xd7, 0x1a, 0x0c, 0xed, 0xc1, 0xb0, 0xf5, 0xb4, 0x63, 0x14, 0x59, 0x59,
0x29, 0x18, 0x4a, 0xf7, 0x3f, 0x83, 0xe5, 0x64, 0x22, 0x6c, 0x32, 0xa2, 0xb1, 0x0d, 0x9b, 0x3b,
0x9d, 0xe1, 0x17, 0x9d, 0x4e, 0x8f, 0x4f, 0x79, 0xbb, 0xd3, 0x1b, 0x5a, 0xad, 0x83, 0xee, 0xf0,
0x4b, 0x23, 0x77, 0xff, 0x09, 0x18, 0xe9, 0xa8, 0x73, 0x22, 0x4c, 0xff, 0xb2, 0x78, 0xfe, 0xfd,
0xff, 0x94, 0x83, 0xf5, 0xac, 0x80, 0x0b, 0x63, 0x4c, 0x21, 0x71, 0xd8, 0xbe, 0x33, 0xe8, 0xf7,
0xec, 0x5e, 0x9f, 0xdf, 0xb2, 0xba, 0x0d, 0x9b, 0x29, 0x84, 0xec, 0x45, 0x8e, 0xdc, 0x82, 0xad,
0x85, 0x42, 0xb6, 0xd5, 0x3f, 0xe6, 0x73, 0xd9, 0x84, 0xf5, 0x14, 0xb2, 0x63, 0x59, 0x7d, 0xcb,
0x28, 0x90, 0xef, 0xc0, 0xbd, 0x14, 0x66, 0x71, 0xb7, 0x95, 0x9b, 0x71, 0x91, 0xbc, 0x07, 0x6f,
0x2f, 0x50, 0xc7, 0x1b, 0x92, 0xbd, 0xd3, 0x3a, 0x60, 0xdd, 0x33, 0x4a, 0xf7, 0xff, 0x61, 0x01,
0x20, 0x3e, 0x69, 0xc6, 0xde, 0xbf, 0xdb, 0x1a, 0xb6, 0x0e, 0xfa, 0x6c, 0xcd, 0x58, 0xfd, 0x21,
0xab, 0xdd, 0xea, 0xfc, 0xc4, 0xb8, 0x91, 0x89, 0xe9, 0x1f, 0xb1, 0x0e, 0x6d, 0xc1, 0x1a, 0xf2,
0xdf, 0x01, 0xeb, 0x06, 0x63, 0x17, 0x7e, 0x61, 0x2f, 0xdf, 0xd2, 0x8f, 0x8f, 0xf6, 0xac, 0x7e,
0x6f, 0x68, 0x0f, 0xf6, 0x8f, 0x87, 0xbb, 0xfc, 0xba, 0xdf, 0xb6, 0xd5, 0x3d, 0xc2, 0x3a, 0x8b,
0x2f, 0x23, 0x60, 0x55, 0x97, 0xd8, 0x02, 0x7f, 0xda, 0x1f, 0x0c, 0xba, 0x47, 0xf6, 0x4f, 0x8e,
0x3b, 0x56, 0xb7, 0x33, 0xe0, 0x05, 0x97, 0x32, 0xe0, 0x8c, 0xbe, 0xcc, 0x78, 0x76, 0x78, 0xf0,
0xb9, 0xd8, 0xa9, 0x19, 0x69, 0x25, 0x09, 0x62, 0x54, 0x55, 0x36, 0x3b, 0x6c, 0xab, 0xcb, 0xa8,
0x19, 0xae, 0xc1, 0xb1, 0x72, 0x35, 0xb6, 0x89, 0x2f, 0xac, 0x7c, 0x5e, 0xac, 0x9e, 0x8d, 0x62,
0xa5, 0xf8, 0xfe, 0xae, 0xb4, 0xa1, 0xdd, 0x5d, 0x8b, 0x17, 0x58, 0x5e, 0x80, 0x32, 0xda, 0x15,
0xc6, 0x84, 0x6c, 0x2f, 0x64, 0x24, 0x86, 0x7c, 0x60, 0x98, 0xd5, 0x47, 0xff, 0xfb, 0x2e, 0x54,
0x55, 0xc6, 0x39, 0xf9, 0x31, 0x34, 0x12, 0x47, 0x80, 0x89, 0xf4, 0xe9, 0x66, 0x9d, 0x18, 0xde,
0x7e, 0x23, 0x1b, 0x29, 0x94, 0xea, 0x43, 0xcd, 0x3c, 0xc4, 0xca, 0xde, 0x48, 0x9b, 0x6c, 0x89,
0xda, 0x6e, 0x5f, 0x83, 0x15, 0xd5, 0x3d, 0xe3, 0x77, 0x07, 0xeb, 0x5f, 0xa2, 0x25, 0xb7, 0xe3,
0x8b, 0x5c, 0x33, 0xbe, 0x50, 0xbb, 0x7d, 0x73, 0xf1, 0x9b, 0xb1, 0xf2, 0x23, 0xb3, 0xbb, 0x50,
0xd3, 0x3e, 0xb0, 0x46, 0x6e, 0x5e, 0xfb, 0x31, 0xb8, 0xed, 0xed, 0x2c, 0x94, 0x68, 0xd2, 0x0f,
0xa0, 0xaa, 0x3e, 0xb6, 0x45, 0xb6, 0xb4, 0x0f, 0xa5, 0xe9, 0x9f, 0x0c, 0xdb, 0x6e, 0x2e, 0x22,
0x44, 0xf9, 0x5d, 0xa8, 0x69, 0xdf, 0xcc, 0x52, 0xad, 0x58, 0xfc, 0x2e, 0x97, 0x6a, 0x45, 0xd6,
0x27, 0xb6, 0x0e, 0x60, 0x43, 0x18, 0xa1, 0x27, 0xf4, 0xeb, 0x0c, 0x4f, 0xc6, 0x27, 0x75, 0x1f,
0xe6, 0xc8, 0x13, 0xa8, 0xc8, 0xaf, 0xa3, 0x91, 0xcd, 0xec, 0x6f, 0xbf, 0x6d, 0x6f, 0x2d, 0xc0,
0x45, 0x53, 0x5a, 0x00, 0xf1, 0xd7, 0xb8, 0x88, 0xec, 0xf8, 0xc2, 0xd7, 0xbd, 0xd4, 0xcc, 0x64,
0x7c, 0xba, 0x6b, 0x17, 0x6a, 0xda, 0x87, 0xb7, 0xd4, 0x98, 0x2c, 0x7e, 0xb4, 0x4b, 0x8d, 0x49,
0xd6, 0x77, 0xba, 0x7e, 0x0c, 0x8d, 0xc4, 0x17, 0xb4, 0x14, 0x1f, 0x67, 0x7d, 0x9f, 0x4b, 0xf1,
0x71, 0xf6, 0x47, 0xb7, 0x76, 0xa1, 0xa6, 0x7d, 0xef, 0x4a, 0xb5, 0x68, 0xf1, 0xd3, 0x5a, 0xaa,
0x45, 0x19, 0x9f, 0xc7, 0x62, 0xab, 0x21, 0xf9, 0xb1, 0x2b, 0xb5, 0x1a, 0x32, 0xbf, 0x9a, 0xa5,
0x56, 0x43, 0xf6, 0x17, 0xb2, 0x18, 0xeb, 0xa9, 0x4b, 0xc3, 0xc9, 0x96, 0xc6, 0x1d, 0xfa, 0xed,
0xe3, 0x8a, 0xf5, 0x16, 0xef, 0x17, 0x7f, 0x0a, 0x6b, 0x8a, 0x69, 0xd4, 0x95, 0xdf, 0xa1, 0x6a,
0x53, 0xe6, 0xc5, 0xe2, 0xdb, 0x46, 0x1a, 0xfb, 0x30, 0x47, 0x3e, 0x85, 0xb2, 0xb8, 0x47, 0x99,
0x6c, 0xa4, 0xef, 0x55, 0xc6, 0x46, 0x6c, 0x66, 0x5f, 0xb7, 0x4c, 0x8e, 0xf8, 0x82, 0xd6, 0x2f,
0x3a, 0xd6, 0x39, 0x36, 0xe3, 0x6e, 0xe4, 0xed, 0x37, 0xaf, 0x43, 0xc7, 0x35, 0xa6, 0x2f, 0xe7,
0xbe, 0x7d, 0xdd, 0xd5, 0x1c, 0xc9, 0x1a, 0xaf, 0xbb, 0x43, 0xec, 0x29, 0xd4, 0xf5, 0x4f, 0xad,
0x10, 0x7d, 0x1d, 0xa6, 0xeb, 0xba, 0x95, 0x89, 0x13, 0x15, 0x7d, 0x0e, 0x9b, 0x6a, 0xbc, 0xf5,
0x7b, 0x22, 0x42, 0x72, 0x27, 0xe3, 0xf6, 0x88, 0xc4, 0xa8, 0xdf, 0xbc, 0xf6, 0x7a, 0x89, 0x87,
0x39, 0x2e, 0x64, 0x13, 0x5f, 0x47, 0x88, 0x85, 0x6c, 0xd6, 0x47, 0x21, 0x62, 0x21, 0x9b, 0xfd,
0x49, 0x85, 0x16, 0xac, 0x68, 0xf7, 0x5c, 0x0c, 0xae, 0xbc, 0x91, 0xe2, 0xf7, 0xc5, 0x1b, 0x68,
0xb7, 0xb3, 0x5c, 0xa1, 0xa4, 0x0d, 0x35, 0xfd, 0xaa, 0x8c, 0x97, 0x14, 0xdf, 0xd2, 0x50, 0xfa,
0x25, 0xa3, 0x0f, 0x73, 0xe4, 0x00, 0x8c, 0xf4, 0xc5, 0x76, 0x6a, 0x09, 0x67, 0x5d, 0x06, 0xb8,
0x9d, 0x42, 0x26, 0xae, 0xc3, 0x63, 0x7c, 0x91, 0xf8, 0x74, 0xab, 0x1f, 0xa4, 0xb7, 0xa2, 0xe4,
0x27, 0x5d, 0x55, 0x6d, 0x59, 0x1f, 0xf3, 0xbd, 0x97, 0x7b, 0x98, 0x23, 0x7b, 0x50, 0x4f, 0xdc,
0xeb, 0x94, 0x38, 0xfc, 0x90, 0xea, 0x66, 0x53, 0xc7, 0xa5, 0xfa, 0x79, 0x08, 0xcb, 0xc9, 0x98,
0xbd, 0x6a, 0x58, 0x66, 0x62, 0x81, 0x9a, 0xbe, 0xec, 0x40, 0x3f, 0xf9, 0x21, 0x7e, 0x98, 0x5c,
0xe6, 0x76, 0x91, 0xc5, 0x0f, 0x59, 0xab, 0x39, 0xd3, 0x3f, 0xfb, 0x6c, 0x16, 0xfe, 0x52, 0x3e,
0xc7, 0xfb, 0xf5, 0x7d, 0xfc, 0x2c, 0xa8, 0x4c, 0xef, 0x61, 0xf3, 0xff, 0xba, 0x95, 0x90, 0x3d,
0x7c, 0xb9, 0xf8, 0x28, 0x73, 0x2c, 0xb9, 0x17, 0x3e, 0xd4, 0xfc, 0x8a, 0x36, 0xb4, 0xb0, 0x0d,
0xa2, 0x4c, 0x82, 0x07, 0x5f, 0xb3, 0x2e, 0xf2, 0x09, 0x40, 0x9c, 0x33, 0x49, 0x52, 0x99, 0x7b,
0x6a, 0x41, 0x65, 0xa4, 0x55, 0x76, 0x70, 0xbd, 0xab, 0xd4, 0x41, 0x7d, 0x4b, 0x4e, 0x66, 0x31,
0x26, 0xb6, 0xe4, 0x74, 0x35, 0xdf, 0x83, 0xc6, 0x81, 0xef, 0x3f, 0x9f, 0xcf, 0x54, 0xe2, 0x7d,
0x32, 0xaf, 0x85, 0xd9, 0xfc, 0xdb, 0xa9, 0x66, 0x91, 0x16, 0xac, 0x2a, 0x11, 0x11, 0xe7, 0x2e,
0x26, 0x89, 0x12, 0x82, 0x21, 0x55, 0xc1, 0xc3, 0x1c, 0x79, 0x04, 0xf5, 0x5d, 0x3a, 0xe2, 0xf7,
0x2e, 0xf0, 0x2c, 0x8a, 0xb5, 0x44, 0x44, 0x1e, 0xd3, 0x2f, 0xb6, 0x1b, 0x09, 0xa0, 0x14, 0x71,
0x71, 0x26, 0x8f, 0xbe, 0x67, 0x24, 0xd3, 0x61, 0x12, 0x22, 0x6e, 0x21, 0x9b, 0xe7, 0x73, 0x58,
0x5d, 0xc8, 0x95, 0x51, 0xd2, 0xed, 0xba, 0x0c, 0x9b, 0xed, 0xbb, 0xd7, 0x13, 0x88, 0x7a, 0x7f,
0x04, 0x0d, 0xbc, 0x73, 0xf6, 0x84, 0xe2, 0xb9, 0xc9, 0xd4, 0xa5, 0x43, 0xfa, 0xa1, 0xcc, 0xb4,
0x48, 0xc2, 0x02, 0x4f, 0xf9, 0x97, 0x28, 0xb4, 0x53, 0x89, 0x6a, 0x5e, 0x17, 0x4f, 0x4a, 0xaa,
0x79, 0xcd, 0x3a, 0x00, 0xf9, 0x19, 0xd4, 0x9e, 0xd2, 0x48, 0x9e, 0xf3, 0x53, 0xfa, 0x51, 0xea,
0xe0, 0xdf, 0x76, 0xc6, 0xe9, 0x4c, 0xf2, 0x31, 0x2f, 0xaa, 0xce, 0xac, 0x6f, 0x6a, 0x6f, 0xd1,
0x8b, 0xae, 0xa4, 0xe0, 0x4c, 0xfb, 0xd0, 0x6e, 0xae, 0x50, 0x0d, 0x5f, 0xbc, 0xa9, 0x44, 0x35,
0x3c, 0xeb, 0xa2, 0x8b, 0x1f, 0xe2, 0x08, 0x68, 0x27, 0x0b, 0x63, 0x15, 0x2c, 0x7d, 0x08, 0x51,
0x35, 0x5f, 0x27, 0x7f, 0x0c, 0x30, 0x88, 0xfc, 0xd9, 0xae, 0x43, 0xa7, 0xbe, 0x17, 0xcb, 0x84,
0xf8, 0x4c, 0x5b, 0xbc, 0x10, 0xb5, 0x83, 0x6d, 0xe4, 0x0b, 0x4d, 0x37, 0x4d, 0x4c, 0x89, 0x9c,
0xf6, 0x6b, 0x8f, 0xbd, 0xa9, 0xee, 0x64, 0x1c, 0x7d, 0xe3, 0x42, 0x02, 0xe2, 0x54, 0x24, 0xa5,
0x69, 0x2e, 0x64, 0x39, 0xa9, 0xb5, 0x9e, 0x91, 0xb7, 0xf4, 0x03, 0xa8, 0xc6, 0x39, 0x1c, 0x5b,
0xf1, 0x35, 0x3a, 0x89, 0x8c, 0x0f, 0x25, 0xbd, 0x17, 0xf3, 0x27, 0x7a, 0xb0, 0x86, 0xcd, 0x51,
0xdb, 0x1f, 0x3f, 0x79, 0xa5, 0x3e, 0xa4, 0xb2, 0x98, 0xb8, 0xa0, 0xd6, 0x4f, 0x56, 0xf8, 0x9d,
0xad, 0x9f, 0x85, 0x30, 0xae, 0x5a, 0x3f, 0xd7, 0xc5, 0xe5, 0xd5, 0xfa, 0xb9, 0x3e, 0x02, 0xdc,
0x83, 0xb5, 0x8c, 0x80, 0x2c, 0x79, 0x4b, 0x1a, 0x36, 0xd7, 0x06, 0x6b, 0xb7, 0x33, 0x03, 0x77,
0x64, 0x08, 0x5b, 0x58, 0xa6, 0x35, 0x99, 0xa4, 0xe2, 0x7f, 0x6f, 0x6a, 0x05, 0x32, 0x62, 0x9a,
0x09, 0x55, 0x26, 0x15, 0xd7, 0xec, 0x81, 0x91, 0x0e, 0x9d, 0x91, 0xeb, 0xc9, 0xb7, 0xef, 0x24,
0x54, 0xf6, 0xc5, 0x70, 0x1b, 0xf9, 0x5c, 0x05, 0xf0, 0x52, 0x6d, 0xbc, 0x13, 0x7f, 0xbe, 0x2b,
0x33, 0xdc, 0xa8, 0xac, 0x81, 0xcc, 0xf8, 0x1f, 0xf9, 0x45, 0xd8, 0x4a, 0x73, 0xb4, 0xac, 0xf9,
0x6e, 0xd6, 0x70, 0x5d, 0xab, 0xca, 0x25, 0x3b, 0xf4, 0x30, 0xc7, 0x04, 0xb1, 0x1e, 0x66, 0x53,
0x8c, 0x94, 0x11, 0xef, 0x53, 0x8c, 0x94, 0x19, 0x97, 0x3b, 0x82, 0x95, 0x54, 0x84, 0x4d, 0xa9,
0xc1, 0xd9, 0x31, 0x39, 0xa5, 0x06, 0x5f, 0x17, 0x98, 0x1b, 0x80, 0x91, 0x8e, 0x9d, 0xa9, 0xb9,
0xbe, 0x26, 0x1e, 0xb7, 0x7d, 0xe7, 0x5a, 0x3c, 0x56, 0xba, 0xf3, 0xde, 0x2f, 0x7d, 0xeb, 0xcc,
0x8d, 0xce, 0xe7, 0x27, 0x0f, 0x46, 0xfe, 0xf4, 0x83, 0x89, 0xf4, 0x41, 0x88, 0x63, 0xc3, 0x1f,
0x4c, 0xbc, 0xf1, 0x07, 0xbc, 0x86, 0x93, 0xa5, 0x59, 0xe0, 0x47, 0xfe, 0xf7, 0xfe, 0x5f, 0x00,
0x00, 0x00, 0xff, 0xff, 0xa4, 0x19, 0x80, 0x8a, 0xd0, 0x88, 0x00, 0x00,
// 11936 bytes of a gzipped FileDescriptorProto
0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xbc, 0x7d, 0x59, 0x6c, 0x23, 0x49,
0x96, 0x58, 0xf1, 0x12, 0xc9, 0x47, 0x52, 0xa2, 0x42, 0x17, 0x4b, 0xd5, 0xd5, 0x55, 0x9d, 0xdd,
0xd3, 0x5d, 0x53, 0xdd, 0xa3, 0xae, 0xae, 0xee, 0xea, 0x63, 0xca, 0xdb, 0x33, 0x94, 0x44, 0x95,
0x38, 0x25, 0x91, 0x9a, 0x24, 0xd5, 0xbd, 0xbd, 0xd8, 0xdd, 0xdc, 0x14, 0x19, 0x92, 0xd2, 0x45,
0x66, 0xb2, 0x33, 0x93, 0x2a, 0x69, 0x0c, 0xff, 0xad, 0x0f, 0x2c, 0xd6, 0x06, 0x0c, 0x78, 0x0d,
0xf8, 0x58, 0xf8, 0x82, 0xed, 0xbf, 0x85, 0xe1, 0x5d, 0xfb, 0xcb, 0xdf, 0x5e, 0x18, 0xb0, 0x61,
0x18, 0x5e, 0xc3, 0x07, 0x16, 0x0b, 0x18, 0xb0, 0xd7, 0x1f, 0x06, 0x8c, 0x05, 0xec, 0x1f, 0x7f,
0x18, 0x30, 0x22, 0x5e, 0x44, 0x64, 0xe4, 0xa1, 0xaa, 0xea, 0x99, 0xf6, 0xfc, 0x48, 0x8c, 0xf7,
0x5e, 0xdc, 0x11, 0x2f, 0xde, 0x15, 0x91, 0x50, 0xf5, 0x67, 0xa3, 0xad, 0x99, 0xef, 0x85, 0x1e,
0x29, 0x4d, 0x5c, 0x7f, 0x36, 0x32, 0xfe, 0x38, 0x07, 0xc5, 0xe3, 0xf0, 0xd2, 0x23, 0x8f, 0xa0,
0x6e, 0x8f, 0xc7, 0x3e, 0x0d, 0x02, 0x2b, 0xbc, 0x9a, 0xd1, 0x56, 0xee, 0x6e, 0xee, 0xde, 0xe2,
0x43, 0xb2, 0xc5, 0xc9, 0xb6, 0xda, 0x88, 0x1a, 0x5e, 0xcd, 0xa8, 0x59, 0xb3, 0xa3, 0x04, 0x69,
0x41, 0x59, 0x24, 0x5b, 0xf9, 0xbb, 0xb9, 0x7b, 0x55, 0x53, 0x26, 0xc9, 0x6d, 0x00, 0x7b, 0xea,
0xcd, 0xdd, 0xd0, 0x0a, 0xec, 0xb0, 0x55, 0xb8, 0x9b, 0xbb, 0x57, 0x30, 0xab, 0x08, 0x19, 0xd8,
0x21, 0xb9, 0x05, 0xd5, 0xd9, 0x33, 0x2b, 0x18, 0xf9, 0xce, 0x2c, 0x6c, 0x15, 0x79, 0xd6, 0xca,
0xec, 0xd9, 0x80, 0xa7, 0xc9, 0xbb, 0x50, 0xf1, 0xe6, 0xe1, 0xcc, 0x73, 0xdc, 0xb0, 0x55, 0xba,
0x9b, 0xbb, 0x57, 0x7b, 0xb8, 0x24, 0x1a, 0xd2, 0x9f, 0x87, 0x47, 0x0c, 0x6c, 0x2a, 0x02, 0xf2,
0x16, 0x34, 0x46, 0x9e, 0x7b, 0xea, 0xf8, 0x53, 0x3b, 0x74, 0x3c, 0x37, 0x68, 0x2d, 0xf0, 0xba,
0xe2, 0x40, 0xe3, 0x5f, 0xe4, 0xa1, 0x36, 0xf4, 0x6d, 0x37, 0xb0, 0x47, 0x0c, 0x40, 0x36, 0xa0,
0x1c, 0x5e, 0x5a, 0xe7, 0x76, 0x70, 0xce, 0xbb, 0x5a, 0x35, 0x17, 0xc2, 0xcb, 0x7d, 0x3b, 0x38,
0x27, 0xeb, 0xb0, 0x80, 0xad, 0xe4, 0x1d, 0x2a, 0x98, 0x22, 0x45, 0xde, 0x85, 0x65, 0x77, 0x3e,
0xb5, 0xe2, 0x55, 0xb1, 0x6e, 0x95, 0xcc, 0xa6, 0x3b, 0x9f, 0xee, 0xe8, 0x70, 0xd6, 0xf9, 0x93,
0x89, 0x37, 0x7a, 0x86, 0x15, 0x60, 0xf7, 0xaa, 0x1c, 0xc2, 0xeb, 0x78, 0x03, 0xea, 0x02, 0x4d,
0x9d, 0xb3, 0x73, 0xec, 0x63, 0xc9, 0xac, 0x21, 0x01, 0x07, 0xb1, 0x12, 0x42, 0x67, 0x4a, 0xad,
0x20, 0xb4, 0xa7, 0x33, 0xd1, 0xa5, 0x2a, 0x83, 0x0c, 0x18, 0x80, 0xa3, 0xbd, 0xd0, 0x9e, 0x58,
0xa7, 0x94, 0x06, 0xad, 0xb2, 0x40, 0x33, 0xc8, 0x1e, 0xa5, 0x01, 0xf9, 0x0e, 0x2c, 0x8e, 0x69,
0x10, 0x5a, 0x62, 0x32, 0x68, 0xd0, 0xaa, 0xdc, 0x2d, 0xdc, 0xab, 0x9a, 0x0d, 0x06, 0x6d, 0x4b,
0x20, 0x79, 0x0d, 0xc0, 0xb7, 0x9f, 0x5b, 0x6c, 0x20, 0xe8, 0x65, 0xab, 0x8a, 0xb3, 0xe0, 0xdb,
0xcf, 0x87, 0x97, 0xfb, 0xf4, 0x92, 0xac, 0x42, 0x69, 0x62, 0x9f, 0xd0, 0x49, 0x0b, 0x38, 0x02,
0x13, 0xc6, 0x2f, 0xc1, 0xfa, 0x13, 0x1a, 0x6a, 0x43, 0x19, 0x98, 0xf4, 0xeb, 0x39, 0x0d, 0x42,
0xd6, 0xab, 0x20, 0xb4, 0xfd, 0x50, 0xf6, 0x2a, 0x87, 0xbd, 0xe2, 0xb0, 0xa8, 0x57, 0xd4, 0x1d,
0x4b, 0x82, 0x3c, 0x27, 0xa8, 0x52, 0x77, 0x8c, 0x68, 0xe3, 0x00, 0x88, 0x56, 0xf0, 0x2e, 0x0d,
0x6d, 0x67, 0x12, 0x90, 0x8f, 0xa1, 0x1e, 0x6a, 0xd5, 0xb5, 0x72, 0x77, 0x0b, 0xf7, 0x6a, 0x6a,
0x69, 0x6a, 0x19, 0xcc, 0x18, 0x9d, 0x71, 0x0e, 0x95, 0x3d, 0x4a, 0x0f, 0x9c, 0xa9, 0x13, 0x92,
0x75, 0x28, 0x9d, 0x3a, 0x97, 0x74, 0xcc, 0x1b, 0x55, 0xd8, 0xbf, 0x61, 0x62, 0x92, 0xdc, 0x01,
0xe0, 0x3f, 0xac, 0xa9, 0x5a, 0xa5, 0xfb, 0x37, 0xcc, 0x2a, 0x87, 0x1d, 0x06, 0x76, 0x48, 0x36,
0xa1, 0x3c, 0xa3, 0xfe, 0x88, 0xca, 0xf5, 0xb0, 0x7f, 0xc3, 0x94, 0x80, 0xed, 0x32, 0x94, 0x26,
0xac, 0x74, 0xe3, 0xf7, 0x4b, 0x50, 0x1b, 0x50, 0x77, 0x2c, 0x47, 0x82, 0x40, 0x91, 0x0d, 0x34,
0xaf, 0xac, 0x6e, 0xf2, 0xdf, 0xe4, 0x4d, 0xa8, 0xf1, 0x29, 0x09, 0x42, 0xdf, 0x71, 0xcf, 0x70,
0xb7, 0x6c, 0xe7, 0x5b, 0x39, 0x13, 0x18, 0x78, 0xc0, 0xa1, 0xa4, 0x09, 0x05, 0x7b, 0x2a, 0x77,
0x0b, 0xfb, 0x49, 0x6e, 0x42, 0xc5, 0x9e, 0x86, 0xd8, 0xbc, 0x3a, 0x07, 0x97, 0xed, 0x69, 0xc8,
0x9b, 0xf6, 0x06, 0xd4, 0x67, 0xf6, 0xd5, 0x94, 0xba, 0x61, 0xb4, 0xcc, 0xea, 0x66, 0x4d, 0xc0,
0xf8, 0x42, 0x7b, 0x08, 0x2b, 0x3a, 0x89, 0xac, 0xbc, 0xa4, 0x2a, 0x5f, 0xd6, 0xa8, 0x45, 0x1b,
0xde, 0x81, 0x25, 0x99, 0xc7, 0xc7, 0xfe, 0xf0, 0xe5, 0x57, 0x35, 0x17, 0x05, 0x58, 0xf6, 0xf2,
0x1e, 0x34, 0x4f, 0x1d, 0xd7, 0x9e, 0x58, 0xa3, 0x49, 0x78, 0x61, 0x8d, 0xe9, 0x24, 0xb4, 0xf9,
0x4a, 0x2c, 0x99, 0x8b, 0x1c, 0xbe, 0x33, 0x09, 0x2f, 0x76, 0x19, 0x94, 0xbc, 0x07, 0xd5, 0x53,
0x4a, 0x2d, 0x3e, 0x58, 0xad, 0x4a, 0x6c, 0x43, 0xcb, 0x19, 0x32, 0x2b, 0xa7, 0x72, 0xae, 0xde,
0x83, 0xa6, 0x37, 0x0f, 0xcf, 0x3c, 0xc7, 0x3d, 0xb3, 0x46, 0xe7, 0xb6, 0x6b, 0x39, 0x63, 0xbe,
0x36, 0x8b, 0xdb, 0xf9, 0x07, 0x39, 0x73, 0x51, 0xe2, 0x76, 0xce, 0x6d, 0xb7, 0x3b, 0x26, 0x6f,
0xc3, 0xd2, 0xc4, 0x0e, 0x42, 0xeb, 0xdc, 0x9b, 0x59, 0xb3, 0xf9, 0xc9, 0x33, 0x7a, 0xd5, 0x6a,
0xf0, 0x81, 0x68, 0x30, 0xf0, 0xbe, 0x37, 0x3b, 0xe2, 0x40, 0xb6, 0xf4, 0x78, 0x3b, 0xb1, 0x11,
0x6c, 0x49, 0x37, 0xcc, 0x2a, 0x83, 0x60, 0xa5, 0x5f, 0xc1, 0x0a, 0x9f, 0x9e, 0xd1, 0x3c, 0x08,
0xbd, 0xa9, 0xe5, 0xd3, 0x91, 0xe7, 0x8f, 0x83, 0x56, 0x8d, 0xaf, 0xb5, 0xef, 0x8a, 0xc6, 0x6a,
0x73, 0xbc, 0xb5, 0x4b, 0x83, 0x70, 0x87, 0x13, 0x9b, 0x48, 0xdb, 0x71, 0x43, 0xff, 0xca, 0x5c,
0x1e, 0x27, 0xe1, 0xe4, 0x3d, 0x20, 0xf6, 0x64, 0xe2, 0x3d, 0xb7, 0x02, 0x3a, 0x39, 0xb5, 0xc4,
0x20, 0xb6, 0x16, 0xef, 0xe6, 0xee, 0x55, 0xcc, 0x26, 0xc7, 0x0c, 0xe8, 0xe4, 0xf4, 0x08, 0xe1,
0xe4, 0x63, 0xe0, 0x9b, 0xd4, 0x3a, 0xa5, 0x76, 0x38, 0xf7, 0x69, 0xd0, 0x5a, 0xba, 0x5b, 0xb8,
0xb7, 0xf8, 0x70, 0x59, 0x8d, 0x17, 0x07, 0x6f, 0x3b, 0xa1, 0x59, 0x67, 0x74, 0x22, 0x1d, 0x6c,
0xee, 0xc2, 0x7a, 0x76, 0x93, 0xd8, 0xa2, 0x62, 0xa3, 0xc2, 0x16, 0x63, 0xd1, 0x64, 0x3f, 0xd9,
0xce, 0xbe, 0xb0, 0x27, 0x73, 0xca, 0x57, 0x61, 0xdd, 0xc4, 0xc4, 0xf7, 0xf3, 0x9f, 0xe6, 0x8c,
0xdf, 0xcb, 0x41, 0x1d, 0x7b, 0x19, 0xcc, 0x3c, 0x37, 0xa0, 0xe4, 0x4d, 0x68, 0xc8, 0xd5, 0x40,
0x7d, 0xdf, 0xf3, 0x05, 0xb7, 0x94, 0x2b, 0xaf, 0xc3, 0x60, 0xe4, 0xbb, 0xd0, 0x94, 0x44, 0x33,
0x9f, 0x3a, 0x53, 0xfb, 0x4c, 0x16, 0x2d, 0x97, 0xd2, 0x91, 0x00, 0x93, 0x0f, 0xa2, 0xf2, 0x7c,
0x6f, 0x1e, 0x52, 0xbe, 0xd6, 0x6b, 0x0f, 0xeb, 0xa2, 0x7b, 0x26, 0x83, 0xa9, 0xd2, 0x79, 0xea,
0x15, 0xd6, 0xb9, 0xf1, 0x5b, 0x39, 0x20, 0xac, 0xd9, 0x43, 0x0f, 0x0b, 0x88, 0x38, 0x52, 0x2c,
0x67, 0xee, 0x95, 0x77, 0x48, 0xfe, 0x45, 0x3b, 0xc4, 0x80, 0x12, 0xb6, 0xbd, 0x98, 0xd1, 0x76,
0x44, 0xfd, 0xa8, 0x58, 0x29, 0x34, 0x8b, 0xc6, 0x7f, 0x2e, 0xc0, 0x2a, 0x5b, 0xa7, 0x2e, 0x9d,
0xb4, 0x47, 0x23, 0x3a, 0x53, 0x7b, 0xe7, 0x0e, 0xd4, 0x5c, 0x6f, 0x4c, 0xe5, 0x8a, 0xc5, 0x86,
0x01, 0x03, 0x69, 0xcb, 0xf5, 0xdc, 0x76, 0x5c, 0x6c, 0x38, 0x0e, 0x66, 0x95, 0x43, 0x78, 0xb3,
0xdf, 0x86, 0xa5, 0x19, 0x75, 0xc7, 0xfa, 0x16, 0x29, 0xe0, 0xaa, 0x17, 0x60, 0xb1, 0x3b, 0xee,
0x40, 0xed, 0x74, 0x8e, 0x74, 0x8c, 0xb1, 0x14, 0xf9, 0x1a, 0x00, 0x01, 0x6a, 0x23, 0x7f, 0x99,
0xcd, 0x83, 0x73, 0x8e, 0x2d, 0x71, 0x6c, 0x99, 0xa5, 0x19, 0xea, 0x36, 0xc0, 0x78, 0x1e, 0x84,
0x62, 0xc7, 0x2c, 0x70, 0x64, 0x95, 0x41, 0x70, 0xc7, 0x7c, 0x0f, 0x56, 0xa6, 0xf6, 0xa5, 0xc5,
0xd7, 0x8e, 0xe5, 0xb8, 0xd6, 0xe9, 0x84, 0x33, 0xf5, 0x32, 0xa7, 0x6b, 0x4e, 0xed, 0xcb, 0x2f,
0x18, 0xa6, 0xeb, 0xee, 0x71, 0x38, 0x63, 0x2b, 0x23, 0x1c, 0x09, 0xcb, 0xa7, 0x01, 0xf5, 0x2f,
0x28, 0xe7, 0x04, 0x45, 0x73, 0x51, 0x80, 0x4d, 0x84, 0xb2, 0x16, 0x4d, 0x59, 0xbf, 0xc3, 0xc9,
0x08, 0xb7, 0xbd, 0x59, 0x9e, 0x3a, 0xee, 0x7e, 0x38, 0x19, 0xb1, 0xf3, 0x8a, 0xf1, 0x91, 0x19,
0xf5, 0xad, 0x67, 0xcf, 0xf9, 0x1e, 0x2e, 0x72, 0xbe, 0x71, 0x44, 0xfd, 0xa7, 0xcf, 0x99, 0x48,
0x31, 0x0a, 0x38, 0x23, 0xb2, 0xaf, 0x5a, 0x35, 0xbe, 0xc1, 0x2b, 0xa3, 0x80, 0xb1, 0x20, 0xfb,
0x8a, 0x6d, 0x42, 0xd6, 0x5a, 0x9b, 0xcf, 0x02, 0x1d, 0xf3, 0xe2, 0x03, 0xce, 0x51, 0x1b, 0xbc,
0xb1, 0x6d, 0x81, 0x60, 0xf5, 0x04, 0x6c, 0xd5, 0xcb, 0xc6, 0x9e, 0x4e, 0xec, 0xb3, 0x80, 0xb3,
0x94, 0x86, 0x59, 0x17, 0xc0, 0x3d, 0x06, 0x33, 0xbe, 0x84, 0xb5, 0xc4, 0xdc, 0x8a, 0x3d, 0xc3,
0x44, 0x08, 0x0e, 0xe1, 0xf3, 0x5a, 0x31, 0x45, 0x2a, 0x6b, 0xd2, 0xf2, 0x19, 0x93, 0x66, 0xfc,
0x76, 0x0e, 0xea, 0xa2, 0x64, 0x2e, 0xec, 0x90, 0x2d, 0x20, 0x72, 0x16, 0xc3, 0x4b, 0x67, 0x6c,
0x9d, 0x5c, 0x85, 0x34, 0xc0, 0x45, 0xb3, 0x7f, 0xc3, 0x6c, 0x0a, 0xdc, 0xf0, 0xd2, 0x19, 0x6f,
0x33, 0x0c, 0xb9, 0x0f, 0xcd, 0x18, 0x7d, 0x10, 0xfa, 0xb8, 0xa2, 0xf7, 0x6f, 0x98, 0x8b, 0x1a,
0xf5, 0x20, 0xf4, 0xd9, 0x1e, 0x61, 0xa2, 0xd4, 0x3c, 0xb4, 0x1c, 0x77, 0x4c, 0x2f, 0xf9, 0x32,
0x6a, 0x98, 0x35, 0x84, 0x75, 0x19, 0x68, 0x7b, 0x11, 0xea, 0x7a, 0x71, 0xc6, 0x19, 0x54, 0xa4,
0x1c, 0xc6, 0x05, 0x91, 0x44, 0x93, 0xcc, 0x6a, 0xa8, 0x5a, 0x72, 0x13, 0x2a, 0xf1, 0x16, 0x98,
0xe5, 0xf0, 0x95, 0x2b, 0x36, 0x3e, 0x87, 0xe6, 0x01, 0x5b, 0x3c, 0x2e, 0x5b, 0xac, 0x42, 0xae,
0x5c, 0x87, 0x05, 0x6d, 0xd3, 0x54, 0x4d, 0x91, 0x62, 0x67, 0xee, 0xb9, 0x17, 0x84, 0xa2, 0x16,
0xfe, 0xdb, 0xf8, 0xfd, 0x1c, 0x90, 0x4e, 0x10, 0x3a, 0x53, 0x3b, 0xa4, 0x7b, 0x54, 0xb1, 0x85,
0x3e, 0xd4, 0x59, 0x69, 0x43, 0xaf, 0x8d, 0x82, 0x1e, 0x0a, 0x14, 0xef, 0x8a, 0x6d, 0x9c, 0xce,
0xb0, 0xa5, 0x53, 0x23, 0x9b, 0x8f, 0x15, 0xc0, 0x76, 0x59, 0x68, 0xfb, 0x67, 0x34, 0xe4, 0xe2,
0xa1, 0x90, 0x6b, 0x00, 0x41, 0x4c, 0x30, 0xdc, 0xfc, 0x01, 0x2c, 0xa7, 0xca, 0xd0, 0xf9, 0x72,
0x35, 0x83, 0x2f, 0x17, 0x74, 0xbe, 0x6c, 0xc1, 0x4a, 0xac, 0x5d, 0x62, 0xa5, 0x6d, 0x40, 0x99,
0x6d, 0x08, 0x26, 0x1c, 0xe4, 0x50, 0x5a, 0x3d, 0xa5, 0x94, 0x89, 0xd7, 0xef, 0xc3, 0xea, 0x29,
0xa5, 0xbe, 0x1d, 0x72, 0x24, 0xdf, 0x31, 0x6c, 0x86, 0x44, 0xc1, 0xcb, 0x02, 0x37, 0xb0, 0xc3,
0x23, 0xea, 0xb3, 0x99, 0x32, 0xfe, 0x4f, 0x0e, 0x96, 0x18, 0x07, 0x3d, 0xb4, 0xdd, 0x2b, 0x39,
0x4e, 0x07, 0x99, 0xe3, 0x74, 0x4f, 0x3b, 0x0c, 0x35, 0xea, 0x6f, 0x3a, 0x48, 0x85, 0xe4, 0x20,
0x91, 0xbb, 0x50, 0x8f, 0xb5, 0xb5, 0xc4, 0xdb, 0x0a, 0x81, 0x6a, 0x64, 0x24, 0x91, 0x2e, 0x68,
0x12, 0xe9, 0xcf, 0x3e, 0xb8, 0x6f, 0x43, 0x33, 0xea, 0x8c, 0x18, 0x59, 0x02, 0x45, 0xb6, 0x50,
0x45, 0x01, 0xfc, 0xb7, 0xf1, 0x4f, 0x72, 0x48, 0xb8, 0xe3, 0x39, 0x91, 0xd4, 0x4b, 0xa0, 0xc8,
0xa4, 0x6c, 0x49, 0xc8, 0x7e, 0x5f, 0xab, 0x43, 0x7c, 0x0b, 0x43, 0x70, 0x13, 0x2a, 0x01, 0x13,
0xa1, 0xed, 0x09, 0x8e, 0x42, 0xc5, 0x2c, 0xb3, 0x74, 0x7b, 0x32, 0x89, 0x46, 0xa7, 0xac, 0xcb,
0xeb, 0xef, 0xc0, 0xb2, 0xd6, 0xe6, 0x17, 0xf4, 0xae, 0x07, 0xe4, 0xc0, 0x09, 0xc2, 0x63, 0x37,
0x98, 0x69, 0x42, 0xde, 0x2d, 0xa8, 0x32, 0x6e, 0xcc, 0xda, 0x1b, 0x08, 0x89, 0x9e, 0xb1, 0x67,
0xd6, 0xda, 0x80, 0x23, 0xed, 0x4b, 0x81, 0xcc, 0x0b, 0xa4, 0x7d, 0xc9, 0x91, 0xc6, 0xa7, 0xb0,
0x12, 0x2b, 0x4f, 0x54, 0xfd, 0x06, 0x94, 0xe6, 0xe1, 0xa5, 0x27, 0xc5, 0xf8, 0x9a, 0x58, 0x4d,
0x4c, 0x09, 0x35, 0x11, 0x63, 0x3c, 0x86, 0xe5, 0x1e, 0x7d, 0x2e, 0x36, 0xbc, 0x6c, 0xc8, 0xdb,
0x50, 0x7c, 0x89, 0x62, 0xca, 0xf1, 0xc6, 0x16, 0x10, 0x3d, 0xb3, 0xa8, 0x55, 0xd3, 0x53, 0x73,
0x31, 0x3d, 0xd5, 0x78, 0x1b, 0xc8, 0xc0, 0x39, 0x73, 0x0f, 0x69, 0x10, 0xd8, 0x67, 0x8a, 0x45,
0x34, 0xa1, 0x30, 0x0d, 0xce, 0x04, 0x3f, 0x63, 0x3f, 0x8d, 0x0f, 0x61, 0x25, 0x46, 0x27, 0x0a,
0x7e, 0x0d, 0xaa, 0x81, 0x73, 0xe6, 0x72, 0x21, 0x4c, 0x14, 0x1d, 0x01, 0x8c, 0x3d, 0x58, 0xfd,
0x82, 0xfa, 0xce, 0xe9, 0xd5, 0xcb, 0x8a, 0x8f, 0x97, 0x93, 0x4f, 0x96, 0xd3, 0x81, 0xb5, 0x44,
0x39, 0xa2, 0x7a, 0x5c, 0xd4, 0x62, 0x26, 0x2b, 0x26, 0x26, 0x34, 0x1e, 0x99, 0xd7, 0x79, 0xa4,
0x71, 0x0c, 0x64, 0xc7, 0x73, 0x5d, 0x3a, 0x0a, 0x8f, 0x28, 0xf5, 0x65, 0x63, 0xde, 0xd5, 0x56,
0x70, 0xed, 0xe1, 0x86, 0x18, 0xd9, 0x24, 0xe3, 0x15, 0x4b, 0x9b, 0x40, 0x71, 0x46, 0xfd, 0x29,
0x2f, 0xb8, 0x62, 0xf2, 0xdf, 0xc6, 0x1a, 0xac, 0xc4, 0x8a, 0xc5, 0xb6, 0x19, 0x0f, 0x60, 0x6d,
0xd7, 0x09, 0x46, 0xe9, 0x0a, 0x37, 0xa0, 0x3c, 0x9b, 0x9f, 0x58, 0x71, 0x1e, 0xfe, 0x94, 0x5e,
0x19, 0x2d, 0x58, 0x4f, 0xe6, 0x10, 0x65, 0xfd, 0x7a, 0x0e, 0x8a, 0xfb, 0xc3, 0x83, 0x1d, 0xb2,
0x09, 0x15, 0xc7, 0x1d, 0x79, 0x53, 0x26, 0xa4, 0x61, 0x9f, 0x55, 0xfa, 0xda, 0x6d, 0x77, 0x0b,
0xaa, 0x5c, 0xb6, 0x63, 0xea, 0xb5, 0x10, 0x93, 0x2a, 0x0c, 0x70, 0xe0, 0x8d, 0x9e, 0x31, 0xbd,
0x9e, 0x5e, 0xce, 0x1c, 0x9f, 0x6b, 0xee, 0x52, 0x33, 0x2d, 0xa2, 0x5c, 0x10, 0x21, 0x84, 0x82,
0xfa, 0xeb, 0x79, 0x20, 0xe2, 0x64, 0xde, 0xf1, 0xdc, 0x20, 0xf4, 0x6d, 0xc7, 0x0d, 0x83, 0xb8,
0xe4, 0x91, 0x4b, 0x48, 0x1e, 0xf7, 0xa0, 0xc9, 0x4f, 0x7b, 0x21, 0xf5, 0x70, 0x66, 0x9d, 0x8f,
0x24, 0x1f, 0x21, 0xf6, 0x30, 0xa6, 0xfd, 0x16, 0x2c, 0x46, 0x02, 0x97, 0x32, 0x9b, 0x14, 0xcd,
0xba, 0x12, 0xba, 0x04, 0x6b, 0x67, 0x9b, 0x4e, 0x4a, 0x12, 0x4a, 0x3b, 0x44, 0xd9, 0x6e, 0x79,
0x6a, 0x5f, 0x1e, 0x51, 0x29, 0xde, 0x71, 0x3d, 0xd1, 0x80, 0x86, 0x14, 0xa8, 0x90, 0x12, 0xe5,
0xbc, 0x9a, 0x90, 0xaa, 0x38, 0x4d, 0xb6, 0x78, 0xb4, 0x90, 0x2d, 0x1e, 0x19, 0xff, 0xa1, 0x0a,
0x65, 0x31, 0x0c, 0x28, 0xec, 0x84, 0xce, 0x05, 0x8d, 0x84, 0x1d, 0x96, 0x62, 0x22, 0x94, 0x4f,
0xa7, 0x5e, 0xa8, 0x64, 0x5c, 0x5c, 0x8a, 0x75, 0x04, 0x0a, 0x29, 0x57, 0x93, 0xb3, 0xd0, 0xda,
0x53, 0x40, 0xa2, 0x91, 0x2e, 0xfd, 0xdc, 0x82, 0xb2, 0x14, 0x97, 0x8a, 0x4a, 0x0d, 0x5c, 0x18,
0xa1, 0x80, 0xbb, 0x09, 0x95, 0x91, 0x3d, 0xb3, 0x47, 0x4e, 0x78, 0x25, 0xb8, 0xa5, 0x4a, 0xb3,
0xd2, 0x27, 0xde, 0xc8, 0x9e, 0x58, 0x27, 0xf6, 0xc4, 0x76, 0x47, 0x54, 0x98, 0x51, 0xea, 0x1c,
0xb8, 0x8d, 0x30, 0xf2, 0x1d, 0x58, 0x14, 0xed, 0x94, 0x54, 0x68, 0x4d, 0x11, 0xad, 0x97, 0x64,
0x4c, 0x1e, 0xf7, 0xa6, 0x6c, 0x5e, 0x4e, 0x29, 0x4a, 0xae, 0x05, 0xb3, 0x8a, 0x90, 0x3d, 0xca,
0x7b, 0x2b, 0xd0, 0xcf, 0x71, 0x05, 0x55, 0xb1, 0x2a, 0x04, 0x7e, 0x89, 0xd6, 0x8f, 0xb4, 0xf8,
0x5a, 0xd0, 0xc4, 0xd7, 0x77, 0x61, 0x79, 0xee, 0x06, 0x34, 0x0c, 0x27, 0x74, 0xac, 0xda, 0x52,
0xe3, 0x44, 0x4d, 0x85, 0x90, 0xcd, 0xd9, 0x82, 0x15, 0xb4, 0xff, 0x04, 0x76, 0xe8, 0x05, 0xe7,
0x4e, 0x60, 0x05, 0x4c, 0xa9, 0x44, 0x0b, 0xc1, 0x32, 0x47, 0x0d, 0x04, 0x66, 0x80, 0x5a, 0xe5,
0x46, 0x82, 0xde, 0xa7, 0x23, 0xea, 0x5c, 0xd0, 0x31, 0x17, 0x6d, 0x0b, 0xe6, 0x5a, 0x2c, 0x8f,
0x29, 0x90, 0x5c, 0x4f, 0x99, 0x4f, 0xad, 0xf9, 0x6c, 0x6c, 0x33, 0xf9, 0x6e, 0x11, 0xf5, 0x07,
0x77, 0x3e, 0x3d, 0x46, 0x08, 0x79, 0x00, 0x52, 0x78, 0x15, 0x6b, 0x66, 0x29, 0xc6, 0xd6, 0xd9,
0x9e, 0x35, 0xeb, 0x82, 0x02, 0x65, 0xeb, 0x3b, 0xfa, 0x66, 0x69, 0xb2, 0x15, 0xc6, 0xf5, 0xac,
0x68, 0xc3, 0xb4, 0xa0, 0x3c, 0xf3, 0x9d, 0x0b, 0x3b, 0xa4, 0xad, 0x65, 0x3c, 0xe1, 0x44, 0x92,
0x31, 0x49, 0xc7, 0x75, 0x42, 0xc7, 0x0e, 0x3d, 0xbf, 0x45, 0x38, 0x2e, 0x02, 0x90, 0xfb, 0xb0,
0xcc, 0xd7, 0x49, 0x10, 0xda, 0xe1, 0x3c, 0x10, 0x82, 0xfb, 0x0a, 0x5f, 0x50, 0x5c, 0xf5, 0x18,
0x70, 0x38, 0x97, 0xdd, 0xc9, 0x27, 0xb0, 0x8e, 0x4b, 0x23, 0xb5, 0x35, 0x57, 0xd9, 0x70, 0xf0,
0x16, 0xad, 0x70, 0x8a, 0x9d, 0xf8, 0x1e, 0xfd, 0x0c, 0x36, 0xc4, 0x72, 0x49, 0xe5, 0x5c, 0x53,
0x39, 0x57, 0x91, 0x24, 0x91, 0x75, 0x0b, 0x96, 0x59, 0xd3, 0x9c, 0x91, 0x25, 0x4a, 0x60, 0xbb,
0x62, 0x9d, 0xf5, 0x82, 0x67, 0x5a, 0x42, 0xa4, 0xc9, 0x71, 0x4f, 0xe9, 0x15, 0xf9, 0x1c, 0x96,
0x70, 0xf9, 0x70, 0xed, 0x94, 0x1f, 0x7e, 0x9b, 0xfc, 0xf0, 0x5b, 0x13, 0x83, 0xbb, 0xa3, 0xb0,
0xfc, 0xfc, 0x5b, 0x1c, 0xc5, 0xd2, 0x6c, 0x6b, 0x4c, 0x9c, 0x53, 0x1a, 0x3a, 0x53, 0xda, 0xda,
0xc0, 0xc5, 0x26, 0xd3, 0x6c, 0xd7, 0xce, 0x67, 0x1c, 0xd3, 0x42, 0x56, 0x89, 0x29, 0xbe, 0x8e,
0x27, 0x5e, 0x40, 0xa5, 0xe5, 0xb0, 0x75, 0x53, 0x6c, 0x48, 0x06, 0x94, 0x22, 0x38, 0xd3, 0x63,
0x50, 0x67, 0x54, 0xf6, 0xdd, 0x5b, 0x7c, 0x61, 0x34, 0x50, 0x75, 0x94, 0x36, 0x5e, 0x26, 0xee,
0x9c, 0xdb, 0xcf, 0x25, 0x53, 0x7d, 0x8d, 0x73, 0x13, 0x60, 0x20, 0x61, 0x0e, 0xdc, 0x83, 0x65,
0x31, 0x0b, 0x11, 0x33, 0x6d, 0xdd, 0xe6, 0xc7, 0xd0, 0x4d, 0xd9, 0xc7, 0x14, 0xb7, 0x35, 0x9b,
0x38, 0x2f, 0x1a, 0xff, 0xdd, 0x07, 0x22, 0x27, 0x45, 0x2b, 0xe8, 0xf5, 0x97, 0x15, 0xb4, 0x2c,
0xa6, 0x29, 0x02, 0x19, 0xbf, 0x9b, 0x43, 0xa9, 0x45, 0x50, 0x07, 0x9a, 0xbe, 0x8e, 0x7c, 0xcd,
0xf2, 0xdc, 0xc9, 0x95, 0x60, 0x75, 0x80, 0xa0, 0xbe, 0x3b, 0xe1, 0xbc, 0xc6, 0x71, 0x75, 0x12,
0x3c, 0x20, 0xeb, 0x12, 0xc8, 0x89, 0xee, 0x40, 0x6d, 0x36, 0x3f, 0x99, 0x38, 0x23, 0x24, 0x29,
0x60, 0x29, 0x08, 0xe2, 0x04, 0x6f, 0x40, 0x5d, 0xac, 0x75, 0xa4, 0x28, 0x72, 0x8a, 0x9a, 0x80,
0x71, 0x12, 0x7e, 0x00, 0x53, 0x9f, 0x33, 0xbb, 0xba, 0xc9, 0x7f, 0x1b, 0xdb, 0xb0, 0x1a, 0x6f,
0xb4, 0x90, 0x0e, 0xee, 0x43, 0x45, 0x70, 0x52, 0x69, 0xc9, 0x5a, 0x8c, 0x8f, 0x86, 0xa9, 0xf0,
0xc6, 0x7f, 0x2c, 0xc1, 0x8a, 0x1c, 0x23, 0x36, 0xd9, 0x83, 0xf9, 0x74, 0x6a, 0xfb, 0x19, 0x2c,
0x3a, 0xf7, 0x62, 0x16, 0x9d, 0x4f, 0xb1, 0xe8, 0xb8, 0x29, 0x03, 0x39, 0x7c, 0xdc, 0x94, 0xc1,
0x56, 0x17, 0x6a, 0x97, 0xba, 0xc1, 0xbc, 0x21, 0xc0, 0x43, 0x34, 0xcc, 0xa7, 0x0e, 0x94, 0x52,
0xc6, 0x81, 0xa2, 0x1f, 0x07, 0x0b, 0x89, 0xe3, 0xe0, 0x0d, 0xc0, 0x65, 0x2c, 0xd7, 0x63, 0x19,
0x15, 0x4e, 0x0e, 0x13, 0x0b, 0xf2, 0x1d, 0x58, 0x4a, 0x72, 0x60, 0x64, 0xf5, 0x8b, 0x19, 0xfc,
0xd7, 0x99, 0x52, 0x2e, 0x52, 0x68, 0xc4, 0x55, 0xc1, 0x7f, 0x9d, 0x29, 0x3d, 0xe0, 0x18, 0x49,
0xdf, 0x01, 0xc0, 0xba, 0xf9, 0x36, 0x06, 0xbe, 0x8d, 0xdf, 0x4e, 0xac, 0x4c, 0x6d, 0xd4, 0xb7,
0x58, 0x62, 0xee, 0x53, 0xbe, 0xaf, 0xab, 0x3c, 0x27, 0xdf, 0xd2, 0x9f, 0xc0, 0xa2, 0x37, 0xa3,
0xae, 0x15, 0x71, 0xc1, 0x1a, 0x2f, 0xaa, 0x29, 0x8a, 0xea, 0x4a, 0xb8, 0xd9, 0x60, 0x74, 0x2a,
0x49, 0x3e, 0xc3, 0x41, 0xa6, 0x5a, 0xce, 0xfa, 0x35, 0x39, 0x17, 0x39, 0x61, 0x94, 0xf5, 0x43,
0xa8, 0xf9, 0x34, 0xf0, 0x26, 0x73, 0xb4, 0xbe, 0x37, 0xf8, 0x3a, 0x92, 0xe6, 0x48, 0x53, 0x61,
0x4c, 0x9d, 0xca, 0xf8, 0x8d, 0x1c, 0xd4, 0xb4, 0x3e, 0x90, 0x35, 0x58, 0xde, 0xe9, 0xf7, 0x8f,
0x3a, 0x66, 0x7b, 0xd8, 0xfd, 0xa2, 0x63, 0xed, 0x1c, 0xf4, 0x07, 0x9d, 0xe6, 0x0d, 0x06, 0x3e,
0xe8, 0xef, 0xb4, 0x0f, 0xac, 0xbd, 0xbe, 0xb9, 0x23, 0xc1, 0x39, 0xb2, 0x0e, 0xc4, 0xec, 0x1c,
0xf6, 0x87, 0x9d, 0x18, 0x3c, 0x4f, 0x9a, 0x50, 0xdf, 0x36, 0x3b, 0xed, 0x9d, 0x7d, 0x01, 0x29,
0x90, 0x55, 0x68, 0xee, 0x1d, 0xf7, 0x76, 0xbb, 0xbd, 0x27, 0xd6, 0x4e, 0xbb, 0xb7, 0xd3, 0x39,
0xe8, 0xec, 0x36, 0x8b, 0xa4, 0x01, 0xd5, 0xf6, 0x76, 0xbb, 0xb7, 0xdb, 0xef, 0x75, 0x76, 0x9b,
0x25, 0xe3, 0x7f, 0xe4, 0x00, 0xa2, 0x86, 0x32, 0xbe, 0x1a, 0x35, 0x55, 0xf7, 0x76, 0xad, 0xa5,
0x3a, 0x85, 0x7c, 0xd5, 0x8f, 0xa5, 0xc9, 0x43, 0x28, 0x7b, 0xf3, 0x70, 0xe4, 0x4d, 0x51, 0x50,
0x5f, 0x7c, 0xd8, 0x4a, 0xe5, 0xeb, 0x23, 0xde, 0x94, 0x84, 0x31, 0x8f, 0x56, 0xe1, 0x65, 0x1e,
0xad, 0xb8, 0xeb, 0x0c, 0xe5, 0x3a, 0xcd, 0x75, 0x76, 0x1b, 0x20, 0x78, 0x4e, 0xe9, 0x8c, 0x1b,
0x63, 0xc4, 0x2e, 0xa8, 0x72, 0xc8, 0x90, 0xe9, 0x71, 0x7f, 0x94, 0x83, 0x35, 0xbe, 0x96, 0xc6,
0x49, 0x26, 0x76, 0x17, 0x6a, 0x23, 0xcf, 0x9b, 0x31, 0xd5, 0x3f, 0x92, 0xd7, 0x74, 0x10, 0x63,
0x50, 0xc8, 0x90, 0x4f, 0x3d, 0x7f, 0x44, 0x05, 0x0f, 0x03, 0x0e, 0xda, 0x63, 0x10, 0xb6, 0x87,
0xc4, 0x26, 0x44, 0x0a, 0x64, 0x61, 0x35, 0x84, 0x21, 0xc9, 0x3a, 0x2c, 0x9c, 0xf8, 0xd4, 0x1e,
0x9d, 0x0b, 0xee, 0x25, 0x52, 0xe4, 0xbb, 0x91, 0x51, 0x6a, 0xc4, 0xf6, 0xc4, 0x84, 0x62, 0xe3,
0x2b, 0xe6, 0x92, 0x80, 0xef, 0x08, 0x30, 0x3b, 0xe7, 0xed, 0x13, 0xdb, 0x1d, 0x7b, 0x2e, 0x1d,
0x0b, 0x2d, 0x37, 0x02, 0x18, 0x47, 0xb0, 0x9e, 0xec, 0x9f, 0xe0, 0x77, 0x1f, 0x6b, 0xfc, 0x0e,
0xd5, 0xcb, 0xcd, 0xeb, 0xf7, 0x98, 0xc6, 0xfb, 0xfe, 0x52, 0x11, 0x8a, 0x4c, 0xdd, 0xb8, 0x56,
0x33, 0xd1, 0xf5, 0xc7, 0x42, 0xca, 0xcf, 0xc9, 0x6d, 0x5f, 0x28, 0x80, 0x89, 0xc9, 0xe2, 0x10,
0x2e, 0x78, 0x29, 0xb4, 0x4f, 0x47, 0x17, 0x42, 0xf2, 0x46, 0xb4, 0x49, 0x47, 0x17, 0x5c, 0x9d,
0xb7, 0x43, 0xcc, 0x8b, 0xfc, 0xaa, 0x1c, 0xd8, 0x21, 0xcf, 0x29, 0x50, 0x3c, 0x5f, 0x59, 0xa1,
0x78, 0xae, 0x16, 0x94, 0x1d, 0xf7, 0xc4, 0x9b, 0xbb, 0x63, 0xce, 0x9e, 0x2a, 0xa6, 0x4c, 0x72,
0xb7, 0x2a, 0xe7, 0xa4, 0xec, 0x68, 0x47, 0x6e, 0x54, 0x61, 0x80, 0x21, 0x3b, 0xdc, 0x3f, 0x80,
0x6a, 0x70, 0xe5, 0x8e, 0x74, 0x1e, 0xb4, 0x2a, 0xc6, 0x87, 0xf5, 0x7e, 0x6b, 0x70, 0xe5, 0x8e,
0xf8, 0x8a, 0xaf, 0x04, 0xe2, 0x17, 0x79, 0x04, 0x15, 0xe5, 0x88, 0xc0, 0x13, 0xe4, 0xa6, 0x9e,
0x43, 0x7a, 0x1f, 0xd0, 0xde, 0xa3, 0x48, 0xc9, 0xfb, 0xb0, 0xc0, 0xbd, 0x05, 0x41, 0xab, 0xce,
0x33, 0x49, 0xa5, 0x92, 0x35, 0x83, 0x7b, 0x34, 0xe9, 0x98, 0x7b, 0x0e, 0x4c, 0x41, 0xb6, 0xf9,
0x14, 0x1a, 0xb1, 0xb2, 0x74, 0xfb, 0x4d, 0x03, 0xed, 0x37, 0x6f, 0xe9, 0xf6, 0x9b, 0xe8, 0x24,
0x13, 0xd9, 0x74, 0x7b, 0xce, 0x0f, 0xa0, 0x22, 0xbb, 0xc2, 0x58, 0xc6, 0x71, 0xef, 0x69, 0xaf,
0xff, 0x65, 0xcf, 0x1a, 0x7c, 0xd5, 0xdb, 0x69, 0xde, 0x20, 0x4b, 0x50, 0x6b, 0xef, 0x70, 0x2e,
0xc4, 0x01, 0x39, 0x46, 0x72, 0xd4, 0x1e, 0x0c, 0x14, 0x24, 0x6f, 0xec, 0x41, 0x33, 0xd9, 0x52,
0xb6, 0x26, 0x43, 0x09, 0x13, 0xbe, 0x94, 0x08, 0xc0, 0xf4, 0x70, 0x74, 0x8f, 0xa0, 0x96, 0x83,
0x09, 0xe3, 0x11, 0x34, 0xd9, 0xb9, 0xcc, 0x86, 0x4a, 0xf7, 0x92, 0x4e, 0x98, 0xe4, 0xac, 0xfb,
0x53, 0x2a, 0x66, 0x0d, 0x61, 0xbc, 0x2a, 0xe3, 0x63, 0x58, 0xd6, 0xb2, 0x45, 0x76, 0x13, 0x76,
0xd6, 0x27, 0xed, 0x26, 0x5c, 0x4b, 0x46, 0x8c, 0xb1, 0x01, 0x6b, 0x2c, 0xd9, 0xb9, 0xa0, 0x6e,
0x38, 0x98, 0x9f, 0xa0, 0x73, 0xdd, 0xf1, 0x5c, 0xa6, 0x3d, 0x57, 0x15, 0xe6, 0xfa, 0x45, 0xbe,
0x25, 0x4c, 0x2c, 0xc8, 0xd5, 0x36, 0xb5, 0x1a, 0x78, 0xc6, 0x2d, 0xfe, 0x37, 0x66, 0x6a, 0xa9,
0x2a, 0x10, 0x1b, 0xd6, 0xa3, 0x4e, 0xc7, 0xb4, 0xfa, 0xbd, 0x83, 0x6e, 0x8f, 0xf1, 0x76, 0x36,
0xac, 0x1c, 0xb0, 0xb7, 0xc7, 0x21, 0x39, 0xa3, 0x09, 0x8b, 0x4f, 0x68, 0xd8, 0x75, 0x4f, 0x3d,
0x31, 0x18, 0xc6, 0x5f, 0x58, 0x80, 0x25, 0x05, 0x8a, 0x4c, 0x35, 0x17, 0xd4, 0x0f, 0x1c, 0xcf,
0xe5, 0xea, 0x46, 0xd5, 0x94, 0x49, 0xc6, 0x9d, 0x84, 0x92, 0xc5, 0xa5, 0x84, 0x55, 0x8e, 0x15,
0x6a, 0x19, 0x17, 0x11, 0xde, 0x81, 0x25, 0x67, 0x4c, 0xdd, 0xd0, 0x09, 0xaf, 0xac, 0x98, 0x91,
0x78, 0x51, 0x82, 0x85, 0x98, 0xb0, 0x0a, 0x25, 0x7b, 0xe2, 0xd8, 0x32, 0x68, 0x01, 0x13, 0x0c,
0x3a, 0xf2, 0x26, 0x9e, 0xcf, 0xd5, 0x8e, 0xaa, 0x89, 0x09, 0xf2, 0x00, 0x56, 0x99, 0x0a, 0xa4,
0x5b, 0xee, 0x39, 0x83, 0x41, 0x7b, 0x35, 0x71, 0xe7, 0xd3, 0xa3, 0xc8, 0x7a, 0xcf, 0x30, 0x4c,
0x38, 0x60, 0x39, 0x84, 0x34, 0xa8, 0x32, 0xa0, 0x51, 0x61, 0xd9, 0x9d, 0x4f, 0xdb, 0x1c, 0xa3,
0xe8, 0x1f, 0xc2, 0x1a, 0xa3, 0x57, 0xf2, 0xa3, 0xca, 0xb1, 0xc4, 0x73, 0xb0, 0xc2, 0xba, 0x02,
0xa7, 0xf2, 0xdc, 0x82, 0x2a, 0xb6, 0x8a, 0x2d, 0x89, 0x12, 0x9a, 0x1c, 0x78, 0x53, 0xa8, 0x1f,
0xa4, 0xe2, 0x0b, 0x50, 0x8f, 0x4f, 0xc6, 0x17, 0x68, 0x11, 0x0a, 0x95, 0x64, 0x84, 0xc2, 0x43,
0x58, 0x3b, 0x61, 0x6b, 0xf4, 0x9c, 0xda, 0x63, 0xea, 0x5b, 0xd1, 0xca, 0x47, 0x6d, 0x71, 0x85,
0x21, 0xf7, 0x39, 0x4e, 0x6d, 0x14, 0x26, 0xc8, 0x31, 0xbe, 0x41, 0xc7, 0x56, 0xe8, 0x59, 0x5c,
0xbe, 0xe3, 0x1c, 0xa8, 0x62, 0x36, 0x10, 0x3c, 0xf4, 0x76, 0x18, 0x30, 0x4e, 0x77, 0xe6, 0xdb,
0xb3, 0x73, 0xa1, 0xcb, 0x29, 0xba, 0x27, 0x0c, 0x48, 0x5e, 0x83, 0x32, 0xdb, 0x13, 0x2e, 0x45,
0x77, 0x2d, 0x6a, 0x49, 0x12, 0x44, 0xde, 0x82, 0x05, 0x5e, 0x47, 0xd0, 0x6a, 0xf2, 0x0d, 0x51,
0x8f, 0x38, 0xbd, 0xe3, 0x9a, 0x02, 0xc7, 0xa4, 0xe5, 0xb9, 0xef, 0x20, 0x1b, 0xaa, 0x9a, 0xfc,
0x37, 0xf9, 0xa1, 0xc6, 0xd3, 0x56, 0x78, 0xde, 0xb7, 0x44, 0xde, 0xc4, 0x52, 0xbc, 0x8e, 0xbd,
0x7d, 0xab, 0xdc, 0xea, 0x47, 0xc5, 0x4a, 0xad, 0x59, 0x37, 0x5a, 0x3c, 0xac, 0xc2, 0xa4, 0x23,
0xef, 0x82, 0xfa, 0x57, 0xb1, 0x3d, 0x92, 0x83, 0x8d, 0x14, 0x2a, 0xf2, 0xce, 0xfa, 0x02, 0x6e,
0x4d, 0xbd, 0xb1, 0x3c, 0xd3, 0xeb, 0x12, 0x78, 0xe8, 0x8d, 0x99, 0xec, 0xb1, 0xac, 0x88, 0x4e,
0x1d, 0xd7, 0x09, 0xce, 0xe9, 0x58, 0x1c, 0xed, 0x4d, 0x89, 0xd8, 0x13, 0x70, 0x26, 0x40, 0xcf,
0x7c, 0xef, 0x4c, 0x9d, 0x74, 0x39, 0x53, 0xa5, 0x8d, 0x4f, 0xa0, 0x84, 0x33, 0xc8, 0x36, 0x0a,
0x9f, 0xdf, 0x9c, 0xd8, 0x28, 0x1c, 0xda, 0x82, 0xb2, 0x4b, 0xc3, 0xe7, 0x9e, 0xff, 0x4c, 0xba,
0x7a, 0x44, 0xd2, 0xf8, 0x09, 0xb7, 0x3b, 0xaa, 0xf8, 0x18, 0xb4, 0x1d, 0xb0, 0x25, 0x8c, 0x4b,
0x30, 0x38, 0xb7, 0x85, 0x29, 0xb4, 0xc2, 0x01, 0x83, 0x73, 0x3b, 0xb5, 0x84, 0xf3, 0xe9, 0x10,
0x99, 0xb7, 0x60, 0x51, 0x46, 0xe4, 0x04, 0xd6, 0x84, 0x9e, 0x86, 0x62, 0x4b, 0xd6, 0x45, 0x38,
0x4e, 0x70, 0x40, 0x4f, 0x43, 0xe3, 0x10, 0x96, 0xc5, 0xa6, 0xe9, 0xcf, 0xa8, 0xac, 0xfa, 0xd3,
0x2c, 0xa5, 0xa6, 0xf6, 0x70, 0x25, 0x2e, 0x2d, 0xa0, 0x5c, 0x16, 0xd3, 0x74, 0x8c, 0x1f, 0x47,
0x06, 0x40, 0x26, 0x4b, 0x88, 0xf2, 0x84, 0x6a, 0x21, 0x3d, 0x64, 0xd2, 0xd1, 0xac, 0x14, 0x18,
0x67, 0xcc, 0x46, 0x27, 0x98, 0x8f, 0x46, 0x32, 0x52, 0xaa, 0x62, 0xca, 0xa4, 0xf1, 0xef, 0x72,
0xb0, 0xc2, 0x0b, 0x93, 0x4a, 0x99, 0x38, 0x29, 0x7e, 0xea, 0x46, 0xb2, 0xf9, 0xd1, 0x05, 0x38,
0x4c, 0x7c, 0x73, 0xef, 0x43, 0x31, 0xe5, 0x7d, 0xf8, 0x2e, 0x34, 0xc7, 0x74, 0xe2, 0xf0, 0xa5,
0x24, 0xe5, 0x21, 0x14, 0x40, 0x97, 0x24, 0x5c, 0x18, 0x09, 0x8c, 0xbf, 0x96, 0x83, 0x65, 0x14,
0xb7, 0xb8, 0xd9, 0x45, 0x0c, 0xd4, 0x63, 0x69, 0x5f, 0x10, 0xec, 0x54, 0xf4, 0x29, 0x12, 0x43,
0x38, 0x14, 0x89, 0xf7, 0x6f, 0x08, 0xbb, 0x83, 0x80, 0x92, 0xef, 0x73, 0x45, 0xd2, 0xb5, 0x38,
0x50, 0x88, 0xd1, 0x37, 0x33, 0x04, 0x3c, 0x95, 0x9d, 0x69, 0x99, 0x2e, 0x07, 0x6d, 0x57, 0x60,
0x01, 0x8d, 0x58, 0xc6, 0x1e, 0x34, 0x62, 0xd5, 0xc4, 0x9c, 0x21, 0x75, 0x74, 0x86, 0xa4, 0x9c,
0x93, 0xf9, 0xb4, 0x73, 0xf2, 0x0a, 0x56, 0x4c, 0x6a, 0x8f, 0xaf, 0xf6, 0x3c, 0xff, 0x28, 0x38,
0x09, 0xf7, 0x50, 0x86, 0x65, 0x67, 0x90, 0xf2, 0xb8, 0xc7, 0x3c, 0x0e, 0xd2, 0xf1, 0x2a, 0xad,
0x28, 0xdf, 0x81, 0xc5, 0xc8, 0x35, 0xaf, 0x59, 0xad, 0x1b, 0xca, 0x3b, 0xcf, 0x8d, 0xd7, 0x4c,
0xdf, 0x0f, 0x4e, 0x42, 0x61, 0xb7, 0xe6, 0xbf, 0x8d, 0xff, 0x5d, 0x04, 0xc2, 0x56, 0x73, 0x62,
0xc1, 0x24, 0x82, 0x0a, 0xf2, 0xa9, 0xa0, 0x82, 0x07, 0x40, 0x34, 0x02, 0x19, 0xeb, 0x50, 0x50,
0xb1, 0x0e, 0xcd, 0x88, 0x56, 0x84, 0x3a, 0x3c, 0x80, 0x55, 0xa1, 0x10, 0xc4, 0x9b, 0x8a, 0x4b,
0x83, 0xa0, 0x66, 0x10, 0x6b, 0xaf, 0x0c, 0x28, 0x90, 0x86, 0xe6, 0x02, 0x06, 0x14, 0x48, 0x7b,
0x90, 0xb6, 0x00, 0x17, 0x5e, 0xba, 0x00, 0xcb, 0xa9, 0x05, 0xa8, 0xd9, 0x06, 0x2b, 0x71, 0xdb,
0x60, 0xca, 0xca, 0x8d, 0xd2, 0x6f, 0xcc, 0xca, 0x7d, 0x0f, 0x9a, 0xd2, 0x4e, 0xa4, 0x2c, 0x90,
0x18, 0x09, 0x24, 0x6c, 0xc0, 0x3b, 0xd2, 0x06, 0x19, 0x73, 0x7b, 0xd5, 0x12, 0x6e, 0xaf, 0x77,
0x61, 0x39, 0x60, 0xeb, 0xd7, 0x9a, 0xbb, 0x22, 0x1c, 0x90, 0x8e, 0xb9, 0x3a, 0x5d, 0x31, 0x9b,
0x1c, 0x71, 0x1c, 0xc1, 0xd3, 0x16, 0xb5, 0x46, 0x86, 0x45, 0xed, 0x51, 0xe4, 0x61, 0x0f, 0xce,
0x9d, 0x29, 0x17, 0x7c, 0xa2, 0x10, 0x37, 0x31, 0xc0, 0x83, 0x73, 0x67, 0x6a, 0xca, 0x70, 0x0e,
0x96, 0x20, 0x3b, 0x70, 0x47, 0xf4, 0x27, 0x23, 0x12, 0x03, 0x47, 0x61, 0x89, 0x4b, 0xaa, 0x9b,
0x48, 0x76, 0x98, 0x08, 0xca, 0x48, 0x0c, 0x0a, 0x2b, 0x04, 0x8d, 0xb8, 0x4d, 0x7d, 0x50, 0x0e,
0xed, 0x4b, 0x34, 0xfb, 0xff, 0xaf, 0x1c, 0x34, 0xd9, 0xb2, 0x8b, 0xed, 0xe8, 0xcf, 0x80, 0xf3,
0x9e, 0x57, 0xdc, 0xd0, 0x35, 0x46, 0x2b, 0xf7, 0xf3, 0x27, 0xc0, 0x37, 0xa8, 0xe5, 0xcd, 0xa8,
0x2b, 0xb6, 0x73, 0x2b, 0xbe, 0x9d, 0x23, 0x96, 0xbd, 0x7f, 0x03, 0xf5, 0x35, 0x06, 0x21, 0x9f,
0x41, 0x95, 0xed, 0x03, 0xbe, 0x28, 0x45, 0x80, 0xe8, 0xa6, 0xd2, 0xc1, 0x53, 0x5b, 0x92, 0x65,
0x9d, 0x89, 0x64, 0x56, 0x0c, 0x46, 0x31, 0x23, 0x06, 0x43, 0xe3, 0x17, 0xfb, 0x00, 0x4f, 0xe9,
0xd5, 0x81, 0x37, 0xe2, 0xd6, 0x90, 0xdb, 0x00, 0x6c, 0xeb, 0x9c, 0xda, 0x53, 0x47, 0xd8, 0x01,
0x4b, 0x66, 0xf5, 0x19, 0xbd, 0xda, 0xe3, 0x00, 0xb6, 0x6e, 0x18, 0x3a, 0x62, 0x1a, 0x25, 0xb3,
0xf2, 0x8c, 0x5e, 0x21, 0xc7, 0xb0, 0xa0, 0xf1, 0x94, 0x5e, 0xed, 0x52, 0x14, 0xcc, 0x3d, 0x9f,
0xad, 0x59, 0xdf, 0x7e, 0xce, 0x24, 0xf1, 0x58, 0xfc, 0x44, 0xcd, 0xb7, 0x9f, 0x3f, 0xa5, 0x57,
0x32, 0x96, 0xa3, 0xcc, 0xf0, 0x13, 0x6f, 0x24, 0x44, 0x09, 0x69, 0x7a, 0x89, 0x1a, 0x65, 0x2e,
0x3c, 0xe3, 0xbf, 0x8d, 0x3f, 0xc9, 0x41, 0x83, 0xb5, 0x9f, 0x9f, 0x02, 0x7c, 0x85, 0x88, 0x80,
0xc2, 0x5c, 0x14, 0x50, 0xf8, 0x50, 0x30, 0x51, 0x3c, 0x52, 0xf2, 0xd7, 0x1f, 0x29, 0x7c, 0x6e,
0xf0, 0x3c, 0xf9, 0x00, 0xaa, 0xc8, 0x05, 0x18, 0x5b, 0x29, 0xc4, 0x26, 0x38, 0xd6, 0x21, 0xb3,
0xc2, 0xc9, 0x9e, 0x62, 0xfc, 0x92, 0x66, 0xe5, 0xc6, 0x21, 0xae, 0xfa, 0xca, 0xb6, 0x9d, 0x31,
0x0d, 0xa5, 0x6b, 0xe2, 0x97, 0x74, 0x13, 0xf2, 0x42, 0xd2, 0x84, 0x6c, 0xb8, 0x50, 0x61, 0x53,
0xcd, 0x3b, 0x9b, 0x51, 0x68, 0x2e, 0xab, 0x50, 0x26, 0x78, 0xd8, 0xec, 0x0c, 0x62, 0x7c, 0x35,
0x2f, 0x04, 0x0f, 0x3b, 0xa0, 0xac, 0x20, 0xd6, 0x70, 0xd7, 0xb3, 0xb8, 0x4d, 0x56, 0x58, 0x2b,
0x2b, 0x66, 0xd5, 0xf5, 0x8e, 0x10, 0x60, 0xfc, 0xb9, 0x1c, 0xd4, 0xb4, 0xfd, 0xc8, 0x8d, 0xf4,
0x6a, 0x38, 0x71, 0xf3, 0xc6, 0x77, 0x40, 0x6c, 0x3e, 0xf6, 0x6f, 0x98, 0x8d, 0x51, 0x6c, 0x82,
0xb6, 0xc4, 0x52, 0xe6, 0x39, 0xf3, 0x31, 0xcb, 0x90, 0xec, 0x97, 0x5c, 0xbf, 0xec, 0xf7, 0xf6,
0x02, 0x14, 0x19, 0xa9, 0xf1, 0x18, 0x96, 0xb5, 0x66, 0xa0, 0xe5, 0xe4, 0x55, 0x07, 0xc0, 0xf8,
0x65, 0x95, 0x99, 0xd5, 0x81, 0x9e, 0x65, 0x19, 0x2a, 0x46, 0xc7, 0x38, 0x2e, 0x22, 0x24, 0x0d,
0x41, 0x7c, 0x64, 0x5e, 0x35, 0x7c, 0xe9, 0x57, 0x61, 0x45, 0x2b, 0x7d, 0xcf, 0x71, 0xed, 0x89,
0xf3, 0x13, 0x2e, 0x7e, 0x04, 0xce, 0x99, 0x9b, 0x28, 0x1f, 0x41, 0xdf, 0xa8, 0xfc, 0xbf, 0x9e,
0x87, 0x55, 0x51, 0x01, 0x0f, 0xfe, 0x75, 0x98, 0x4c, 0x79, 0x18, 0x9c, 0x91, 0xcf, 0xa0, 0xc1,
0xc6, 0xc6, 0xf2, 0xe9, 0x99, 0x13, 0x84, 0x54, 0x7a, 0xb4, 0x33, 0xd8, 0x28, 0x13, 0x2d, 0x18,
0xa9, 0x29, 0x28, 0xc9, 0x63, 0xa8, 0xf1, 0xac, 0x68, 0x99, 0x12, 0x13, 0xd1, 0x4a, 0x67, 0xc4,
0x81, 0xde, 0xbf, 0x61, 0x42, 0x10, 0x0d, 0xfb, 0x63, 0xa8, 0xf1, 0x39, 0xbc, 0xe0, 0x03, 0x99,
0xe0, 0x64, 0xa9, 0x81, 0x66, 0x99, 0x67, 0xd1, 0xb0, 0xb7, 0xa1, 0x81, 0xbc, 0x4c, 0x8c, 0x93,
0x08, 0x2a, 0xdc, 0x4c, 0x67, 0x97, 0x23, 0xc9, 0x1a, 0x3f, 0xd3, 0xd2, 0xdb, 0x55, 0x28, 0x87,
0xbe, 0x73, 0x76, 0x46, 0x7d, 0x63, 0x5d, 0x0d, 0x0d, 0x63, 0xd2, 0x74, 0x10, 0xd2, 0x19, 0x53,
0x16, 0x8c, 0x7f, 0x95, 0x83, 0x9a, 0x60, 0xbb, 0x3f, 0xb5, 0x1b, 0x7d, 0x33, 0x61, 0xc3, 0xac,
0x6a, 0x26, 0xcb, 0x77, 0x60, 0x69, 0xca, 0x34, 0x1b, 0xa6, 0x79, 0xc7, 0x7c, 0xe8, 0x8b, 0x12,
0x2c, 0x84, 0xf6, 0x2d, 0x58, 0xe1, 0x32, 0x7c, 0x60, 0x85, 0xce, 0xc4, 0x92, 0x48, 0x11, 0x01,
0xbf, 0x8c, 0xa8, 0xa1, 0x33, 0x39, 0x14, 0x08, 0x26, 0xca, 0x06, 0xa1, 0x7d, 0x46, 0xc5, 0xd6,
0xc7, 0x04, 0xd3, 0x96, 0x12, 0x4a, 0xb7, 0xd4, 0x96, 0xfe, 0xef, 0x32, 0x6c, 0xa4, 0x50, 0x42,
0x5b, 0x52, 0x4e, 0xd3, 0x89, 0x33, 0x3d, 0xf1, 0x94, 0xd1, 0x3e, 0xa7, 0x39, 0x4d, 0x0f, 0x18,
0x46, 0x1a, 0xed, 0x29, 0xac, 0xc9, 0x05, 0xc9, 0xad, 0xee, 0x4a, 0x2f, 0xcf, 0x73, 0xad, 0xf1,
0x83, 0xf8, 0x19, 0x97, 0xac, 0x4e, 0xc2, 0x75, 0x41, 0x6d, 0x65, 0x96, 0x82, 0x05, 0xe4, 0x4f,
0x43, 0x4b, 0xad, 0x7b, 0xa1, 0x44, 0x68, 0x46, 0x06, 0x56, 0xd3, 0x7b, 0x2f, 0xa9, 0x29, 0x66,
0x0e, 0xe5, 0x92, 0xdc, 0xba, 0xdc, 0x32, 0x58, 0xa0, 0xaa, 0xeb, 0x02, 0x5e, 0x97, 0x75, 0x71,
0xa5, 0x20, 0x5d, 0x63, 0xf1, 0x95, 0xfa, 0xc6, 0x4d, 0xbd, 0xb1, 0x6a, 0xcd, 0x5b, 0xa2, 0x60,
0x85, 0xd2, 0xeb, 0x3d, 0x87, 0xf5, 0xe7, 0xb6, 0x13, 0xca, 0x3e, 0x6a, 0x36, 0x8e, 0x12, 0xaf,
0xef, 0xe1, 0x4b, 0xea, 0xfb, 0x12, 0x33, 0xc7, 0xd4, 0xa4, 0xd5, 0xe7, 0x69, 0x60, 0xb0, 0xf9,
0x77, 0x0b, 0xb0, 0x18, 0x2f, 0x85, 0x31, 0x16, 0x71, 0x16, 0x49, 0xe9, 0x57, 0x88, 0xe4, 0xc2,
0xa1, 0xd4, 0x43, 0xa9, 0x37, 0xed, 0xea, 0xca, 0x67, 0xb8, 0xba, 0x74, 0x0f, 0x53, 0xe1, 0x65,
0x01, 0x07, 0xc5, 0x57, 0x0a, 0x38, 0x28, 0x65, 0x05, 0x1c, 0x7c, 0x78, 0xad, 0x87, 0x1a, 0xed,
0xc4, 0x99, 0xde, 0xe9, 0x47, 0xd7, 0x7b, 0xa7, 0x51, 0x96, 0xbe, 0xce, 0x33, 0xad, 0xf9, 0xd5,
0x2b, 0xd7, 0xf8, 0x85, 0x34, 0x4f, 0x7b, 0x86, 0x67, 0xba, 0xfa, 0x0d, 0x3c, 0xd3, 0x9b, 0x7f,
0x92, 0x03, 0x92, 0xde, 0x1d, 0xe4, 0x09, 0x7a, 0x11, 0x5d, 0x3a, 0x11, 0x9c, 0xfb, 0x7b, 0xaf,
0xb6, 0xc3, 0xe4, 0x82, 0x90, 0xb9, 0xc9, 0xfb, 0xb0, 0xa2, 0xdf, 0xd3, 0xd1, 0x6d, 0x08, 0x0d,
0x93, 0xe8, 0xa8, 0xc8, 0x1a, 0xa6, 0x45, 0x77, 0x14, 0x5f, 0x1a, 0xdd, 0x51, 0x7a, 0x69, 0x74,
0xc7, 0x42, 0x3c, 0xba, 0x63, 0xf3, 0xdf, 0xe6, 0x60, 0x25, 0x63, 0x11, 0x7f, 0x7b, 0x7d, 0x66,
0x6b, 0x2f, 0xc6, 0xd6, 0xf2, 0x62, 0xed, 0xe9, 0x1c, 0xed, 0x40, 0x5a, 0x50, 0xd9, 0x54, 0x04,
0xe2, 0xa4, 0xba, 0xff, 0x32, 0xee, 0x12, 0xe5, 0x30, 0xf5, 0xec, 0x9b, 0x7f, 0x3f, 0x0f, 0x35,
0x0d, 0xc9, 0x46, 0x11, 0x97, 0xac, 0x16, 0x5b, 0x88, 0x82, 0x23, 0xb7, 0x80, 0xdc, 0x01, 0xe1,
0x27, 0x42, 0x3c, 0x6e, 0x2e, 0x21, 0x25, 0x72, 0x82, 0x2d, 0x58, 0x91, 0x1e, 0x5e, 0x1a, 0x85,
0x1b, 0x8b, 0xb3, 0x46, 0x38, 0xeb, 0x45, 0x23, 0x39, 0xfd, 0xfb, 0x52, 0x39, 0x8d, 0xe6, 0x4e,
0xf3, 0x98, 0x2d, 0x8b, 0x30, 0x01, 0x31, 0x89, 0x6c, 0x9d, 0x7f, 0x00, 0x6b, 0x2a, 0x4e, 0x20,
0x96, 0x03, 0xfd, 0x32, 0x44, 0xc6, 0x03, 0x68, 0x59, 0x7e, 0x08, 0xb7, 0x13, 0x6d, 0x4a, 0x64,
0xc5, 0xb8, 0xf8, 0x9b, 0xb1, 0xd6, 0xe9, 0x25, 0x6c, 0xfe, 0x19, 0x68, 0xc4, 0x18, 0xe5, 0xb7,
0x37, 0xe5, 0x49, 0xab, 0x13, 0x8e, 0xa8, 0x6e, 0x75, 0xda, 0xfc, 0x9f, 0x05, 0x20, 0x69, 0x5e,
0xfd, 0xf3, 0x6c, 0x42, 0x7a, 0x61, 0x16, 0x32, 0x16, 0xe6, 0xff, 0x37, 0xf9, 0x21, 0x32, 0x7e,
0x6a, 0x6e, 0x7a, 0xdc, 0x9c, 0x4d, 0x85, 0x90, 0xad, 0xf8, 0x24, 0x19, 0xcc, 0x54, 0x89, 0x5d,
0x35, 0xd3, 0x04, 0xa8, 0x44, 0x4c, 0xd3, 0x31, 0x2c, 0xd8, 0xee, 0xe8, 0xdc, 0xf3, 0x05, 0x1f,
0xfc, 0x85, 0x6f, 0x7c, 0x7c, 0x6e, 0xb5, 0x79, 0x7e, 0x2e, 0xb5, 0x99, 0xa2, 0x30, 0xe3, 0x03,
0xa8, 0x69, 0x60, 0x52, 0x85, 0xd2, 0x41, 0xf7, 0x70, 0xbb, 0xdf, 0xbc, 0x41, 0x1a, 0x50, 0x35,
0x3b, 0x3b, 0xfd, 0x2f, 0x3a, 0x66, 0x67, 0xb7, 0x99, 0x23, 0x15, 0x28, 0x1e, 0xf4, 0x07, 0xc3,
0x66, 0xde, 0xd8, 0x84, 0x96, 0x28, 0x31, 0xed, 0x06, 0xfa, 0xad, 0xa2, 0x32, 0x5e, 0x72, 0xa4,
0xd0, 0xe0, 0x3f, 0x84, 0xba, 0x2e, 0xde, 0x88, 0x15, 0x91, 0x88, 0x14, 0x61, 0xba, 0xbb, 0xa7,
0xf1, 0xea, 0x1d, 0xc0, 0x38, 0x81, 0xb1, 0xca, 0x96, 0x8f, 0xc9, 0xad, 0x19, 0x0e, 0x57, 0xae,
0xfc, 0xc4, 0x96, 0xe1, 0x9f, 0x82, 0xc5, 0xb8, 0xcb, 0x43, 0x70, 0xa4, 0x2c, 0x7d, 0x94, 0xe5,
0x8e, 0xf9, 0x40, 0xc8, 0x0f, 0xa1, 0x99, 0x74, 0x99, 0x08, 0xe1, 0xf9, 0x9a, 0xfc, 0x4b, 0x4e,
0xdc, 0x8b, 0x42, 0xf6, 0x61, 0x35, 0x4b, 0xc0, 0xe3, 0xeb, 0xe3, 0x7a, 0x1b, 0x06, 0x49, 0x0b,
0x71, 0xe4, 0x53, 0xe1, 0x3a, 0x2b, 0xf1, 0xe9, 0x7f, 0x2b, 0x5e, 0xbf, 0x36, 0xd8, 0x5b, 0xf8,
0x4f, 0x73, 0xa2, 0x5d, 0x00, 0x44, 0x30, 0xd2, 0x84, 0x7a, 0xff, 0xa8, 0xd3, 0xb3, 0x76, 0xf6,
0xdb, 0xbd, 0x5e, 0xe7, 0xa0, 0x79, 0x83, 0x10, 0x58, 0xe4, 0xc1, 0x0e, 0xbb, 0x0a, 0x96, 0x63,
0x30, 0xe1, 0xc2, 0x94, 0xb0, 0x3c, 0x59, 0x85, 0x66, 0xb7, 0x97, 0x80, 0x16, 0x48, 0x0b, 0x56,
0x8f, 0x3a, 0x18, 0x1f, 0x11, 0x2b, 0xb7, 0xc8, 0x94, 0x06, 0xd1, 0x5d, 0xa6, 0x34, 0x7c, 0x69,
0x4f, 0x26, 0x34, 0x14, 0xfb, 0x40, 0xca, 0xd2, 0x7f, 0x23, 0x07, 0x6b, 0x09, 0x44, 0xe4, 0x77,
0x40, 0x49, 0x3a, 0x2e, 0x43, 0xd7, 0x39, 0x50, 0xee, 0xa6, 0x77, 0x61, 0x59, 0x99, 0xc1, 0x12,
0xa7, 0x52, 0x53, 0x21, 0x24, 0xf1, 0xfb, 0xb0, 0xa2, 0x59, 0xd3, 0x12, 0xbc, 0x82, 0x68, 0x28,
0x91, 0xc1, 0xd8, 0x50, 0xb7, 0x6f, 0x12, 0xad, 0x1e, 0xc3, 0x7a, 0x12, 0x11, 0x79, 0x16, 0xe3,
0xed, 0x95, 0x49, 0xf2, 0x20, 0xb1, 0x10, 0xe2, 0xad, 0xd5, 0x27, 0x5c, 0x56, 0xff, 0x3b, 0x0b,
0x40, 0x7e, 0x3c, 0xa7, 0xfe, 0x15, 0xbf, 0xf5, 0x15, 0xbc, 0x2c, 0xb4, 0x59, 0x1a, 0x62, 0xf2,
0xaf, 0x74, 0xb3, 0x33, 0xeb, 0x66, 0x65, 0xf1, 0xe5, 0x37, 0x2b, 0x4b, 0x2f, 0xbb, 0x59, 0xf9,
0x26, 0x34, 0x9c, 0x33, 0xd7, 0x63, 0xac, 0x90, 0x49, 0xc2, 0x41, 0x6b, 0xe1, 0x6e, 0xe1, 0x5e,
0xdd, 0xac, 0x0b, 0x20, 0x93, 0x83, 0x03, 0xf2, 0x38, 0x22, 0xa2, 0xe3, 0x33, 0x7e, 0xbb, 0x58,
0x67, 0x82, 0x9d, 0xf1, 0x19, 0x15, 0x76, 0x27, 0xae, 0x69, 0xc8, 0xcc, 0x0c, 0x1e, 0x90, 0xb7,
0x60, 0x31, 0xf0, 0xe6, 0x4c, 0xb1, 0x90, 0xc3, 0x80, 0xae, 0xc5, 0x3a, 0x42, 0x8f, 0xa4, 0xa3,
0x79, 0x65, 0x1e, 0x50, 0x6b, 0xea, 0x04, 0x01, 0x13, 0xcf, 0x46, 0x9e, 0x1b, 0xfa, 0xde, 0x44,
0x78, 0x0b, 0x97, 0xe7, 0x01, 0x3d, 0x44, 0xcc, 0x0e, 0x22, 0xc8, 0x47, 0x51, 0x93, 0x66, 0xb6,
0xe3, 0x07, 0x2d, 0xe0, 0x4d, 0x92, 0x3d, 0xe5, 0xf2, 0xbb, 0xed, 0xf8, 0xaa, 0x2d, 0x2c, 0x11,
0x24, 0x6e, 0x7c, 0xd6, 0x92, 0x37, 0x3e, 0x7f, 0x2d, 0xfb, 0xc6, 0x27, 0xc6, 0x37, 0x3d, 0x10,
0x45, 0xa7, 0xa7, 0xf8, 0x1b, 0x5d, 0xfc, 0x4c, 0x5f, 0x64, 0x5d, 0xfc, 0x26, 0x17, 0x59, 0x97,
0xb2, 0x2e, 0xb2, 0x7e, 0x00, 0x35, 0x7e, 0xc5, 0xd0, 0x3a, 0xe7, 0x51, 0x8e, 0xe8, 0xfd, 0x6c,
0xea, 0x77, 0x10, 0xf7, 0x1d, 0x37, 0x34, 0xc1, 0x97, 0x3f, 0x83, 0xf4, 0x9d, 0xd2, 0xe5, 0x9f,
0xe3, 0x9d, 0x52, 0x71, 0x15, 0x72, 0x0b, 0x2a, 0x72, 0x9e, 0x08, 0x81, 0xe2, 0xa9, 0xef, 0x4d,
0xa5, 0xc7, 0x85, 0xfd, 0x26, 0x8b, 0x90, 0x0f, 0x3d, 0x91, 0x39, 0x1f, 0x7a, 0xc6, 0xaf, 0x40,
0x4d, 0x5b, 0x6a, 0xe4, 0x0d, 0x34, 0x5b, 0x32, 0xdd, 0x4c, 0xc8, 0x96, 0x38, 0x8a, 0x55, 0x01,
0xed, 0x8e, 0x19, 0xbf, 0x19, 0x3b, 0x3e, 0xe5, 0xb7, 0xbf, 0x2d, 0x9f, 0x5e, 0x50, 0x3f, 0x90,
0x1e, 0xb0, 0xa6, 0x42, 0x98, 0x08, 0x37, 0x7e, 0x15, 0x56, 0x62, 0x73, 0x2b, 0x58, 0xc4, 0x5b,
0xb0, 0xc0, 0xc7, 0x4d, 0x86, 0x59, 0xc4, 0xef, 0x76, 0x0a, 0x1c, 0xbf, 0xe9, 0x8e, 0xce, 0x3b,
0x6b, 0xe6, 0x7b, 0x27, 0xbc, 0x92, 0x9c, 0x59, 0x13, 0xb0, 0x23, 0xdf, 0x3b, 0x31, 0xfe, 0xb0,
0x00, 0x85, 0x7d, 0x6f, 0xa6, 0x47, 0x46, 0xe6, 0x52, 0x91, 0x91, 0x42, 0xe1, 0xb4, 0x94, 0x42,
0x29, 0x64, 0x76, 0xee, 0xb6, 0x92, 0x4a, 0xe5, 0x3d, 0x58, 0x64, 0x7c, 0x22, 0xf4, 0x98, 0xc6,
0xfe, 0xdc, 0xf6, 0x51, 0x20, 0xc6, 0x40, 0xe3, 0xba, 0x3d, 0x0d, 0x87, 0xde, 0x1e, 0xc2, 0xc9,
0x2a, 0x14, 0x94, 0xfa, 0xc2, 0xd1, 0x2c, 0x49, 0xd6, 0x61, 0x81, 0xdf, 0x63, 0xb8, 0x12, 0x61,
0x02, 0x22, 0x45, 0xbe, 0x07, 0x2b, 0xf1, 0x72, 0x91, 0x15, 0x09, 0xd9, 0x48, 0x2f, 0x98, 0xf3,
0xa4, 0x9b, 0xc0, 0xf8, 0x08, 0xd2, 0x88, 0x70, 0xa4, 0x53, 0x4a, 0x39, 0x4a, 0x63, 0x7a, 0x95,
0x18, 0xd3, 0xbb, 0x03, 0xb5, 0x70, 0x72, 0x61, 0xcd, 0xec, 0xab, 0x89, 0x67, 0x8f, 0xc5, 0xfe,
0x86, 0x70, 0x72, 0x71, 0x84, 0x10, 0xf2, 0x3e, 0xc0, 0x74, 0x36, 0x13, 0x7b, 0x8f, 0xbb, 0x62,
0xa2, 0xa5, 0x7c, 0x78, 0x74, 0x84, 0x4b, 0xce, 0xac, 0x4e, 0x67, 0x33, 0xfc, 0x49, 0x76, 0x61,
0x31, 0xf3, 0x86, 0xf6, 0x6d, 0x19, 0x6f, 0xee, 0xcd, 0xb6, 0x32, 0x36, 0x67, 0x63, 0xa4, 0xc3,
0x36, 0x7f, 0x08, 0xe4, 0x67, 0xbc, 0x27, 0x3d, 0x84, 0xaa, 0x6a, 0x9f, 0x7e, 0xcd, 0x98, 0x5f,
0xa4, 0xa9, 0xc5, 0xae, 0x19, 0xb7, 0xc7, 0x63, 0x9f, 0xf1, 0x45, 0x3c, 0x30, 0x15, 0xcb, 0x07,
0xed, 0xc4, 0x14, 0x37, 0x35, 0x8c, 0xff, 0x92, 0x83, 0x12, 0xde, 0x79, 0x7e, 0x1b, 0x96, 0x90,
0x5e, 0x45, 0x99, 0x8a, 0xe0, 0x02, 0x3c, 0x77, 0x87, 0x22, 0xc0, 0x94, 0x6d, 0x0b, 0xed, 0x1d,
0x88, 0xbc, 0x9a, 0x79, 0xed, 0x2d, 0x88, 0x3b, 0x50, 0x55, 0x55, 0x6b, 0x4b, 0xa7, 0x22, 0x6b,
0x26, 0xaf, 0x43, 0xf1, 0xdc, 0x9b, 0x49, 0xcb, 0x0f, 0x44, 0x23, 0x69, 0x72, 0x78, 0xd4, 0x16,
0x56, 0x47, 0x74, 0x83, 0xa4, 0x20, 0xda, 0xc2, 0x2a, 0xe1, 0xcb, 0x20, 0xdd, 0xc7, 0x85, 0x8c,
0x3e, 0x1e, 0xc3, 0x12, 0xe3, 0x03, 0x5a, 0x84, 0xc3, 0xf5, 0x87, 0xe6, 0x77, 0x99, 0x84, 0x37,
0x9a, 0xcc, 0xc7, 0x54, 0xb7, 0xbd, 0xf1, 0x90, 0x41, 0x01, 0x97, 0x92, 0xb5, 0xf1, 0x3b, 0x39,
0xe4, 0x2f, 0xac, 0x5c, 0x72, 0x0f, 0x8a, 0xae, 0x8c, 0x86, 0x88, 0xe4, 0x38, 0x75, 0xa3, 0x89,
0xd1, 0x99, 0x9c, 0x82, 0x4d, 0x1d, 0x8f, 0x21, 0xd0, 0x4b, 0x6f, 0x98, 0x35, 0x77, 0x3e, 0x55,
0xa6, 0xab, 0xef, 0xc8, 0x6e, 0x25, 0xcc, 0x3e, 0xd8, 0x7b, 0xb5, 0x4d, 0xb7, 0xb4, 0xd8, 0xc3,
0x62, 0xec, 0xc4, 0x94, 0x52, 0xe0, 0xf8, 0x8c, 0x6a, 0x31, 0x87, 0xbf, 0x97, 0x87, 0x46, 0xac,
0x45, 0x3c, 0xf8, 0x92, 0x1d, 0x00, 0xe8, 0x77, 0x12, 0xf3, 0x0d, 0x0c, 0x24, 0x04, 0x75, 0x6d,
0x9c, 0xf2, 0xb1, 0x71, 0x52, 0xe1, 0x4c, 0x05, 0x3d, 0x9c, 0xe9, 0x01, 0x54, 0xa3, 0xf7, 0x3f,
0xe2, 0x4d, 0x62, 0xf5, 0xc9, 0x7b, 0x5d, 0x11, 0x51, 0x14, 0x00, 0x55, 0xd2, 0x03, 0xa0, 0x3e,
0xd7, 0xe2, 0x65, 0x16, 0x78, 0x31, 0x46, 0xd6, 0x88, 0xfe, 0x5c, 0xa2, 0x65, 0x8c, 0xc7, 0x50,
0xd3, 0x1a, 0xaf, 0xc7, 0x9c, 0xe4, 0x62, 0x31, 0x27, 0xea, 0x5e, 0x66, 0x3e, 0xba, 0x97, 0x69,
0xfc, 0xf9, 0x3c, 0x34, 0xd8, 0xfe, 0x72, 0xdc, 0xb3, 0x23, 0x6f, 0xe2, 0x8c, 0xb8, 0x1f, 0x4a,
0xed, 0x30, 0x21, 0x68, 0xc9, 0x7d, 0x26, 0xb6, 0x18, 0xca, 0x59, 0xfa, 0xa5, 0x74, 0x64, 0xd2,
0xea, 0x52, 0xba, 0x01, 0x0d, 0xc6, 0x18, 0xb9, 0x47, 0x29, 0x7a, 0x45, 0xc4, 0xac, 0x9d, 0x52,
0xba, 0x6d, 0x07, 0xc8, 0x21, 0xbf, 0x07, 0x2b, 0x8c, 0x86, 0xdf, 0xc7, 0x9d, 0x3a, 0x93, 0x89,
0x13, 0x5d, 0xd9, 0x2a, 0x98, 0xcd, 0x53, 0x4a, 0x4d, 0x3b, 0xa4, 0x87, 0x0c, 0x21, 0x1e, 0x1d,
0xa9, 0x8c, 0x9d, 0xc0, 0x3e, 0x89, 0x42, 0x64, 0x55, 0x9a, 0xfb, 0xb9, 0x85, 0x9f, 0x36, 0xda,
0x64, 0x45, 0xb3, 0x36, 0x45, 0x2f, 0x2d, 0xcf, 0x9f, 0x58, 0x49, 0xe5, 0xe4, 0x4a, 0x32, 0xfe,
0x79, 0x1e, 0x6a, 0xda, 0xb2, 0x7c, 0x95, 0xd3, 0xf5, 0x76, 0xca, 0x6f, 0x58, 0xd5, 0x5d, 0x84,
0x6f, 0xc6, 0xab, 0x2c, 0xa8, 0x7b, 0x3d, 0xfa, 0x02, 0xbe, 0x05, 0x55, 0xb6, 0xeb, 0x3e, 0xe0,
0x26, 0x58, 0xf1, 0xe8, 0x0f, 0x07, 0x1c, 0xcd, 0x4f, 0x24, 0xf2, 0x21, 0x47, 0x96, 0x22, 0xe4,
0x43, 0x86, 0x7c, 0x51, 0x5c, 0xff, 0x27, 0x50, 0x17, 0xa5, 0xf2, 0x39, 0xe5, 0xdd, 0x8d, 0x76,
0x7d, 0x6c, 0xbe, 0xcd, 0x1a, 0x56, 0x87, 0x93, 0x2f, 0x32, 0x3e, 0x94, 0x19, 0x2b, 0x2f, 0xcb,
0xf8, 0x10, 0x13, 0xc6, 0x9e, 0xba, 0x2a, 0xc1, 0x23, 0xd5, 0x24, 0x1f, 0x7b, 0x1f, 0x56, 0x24,
0xbb, 0x9a, 0xbb, 0xb6, 0xeb, 0x7a, 0x73, 0x77, 0x44, 0xe5, 0xd5, 0x4c, 0x22, 0x50, 0xc7, 0x11,
0xc6, 0x18, 0xab, 0x7b, 0xfe, 0x18, 0xf1, 0x76, 0x1f, 0x4a, 0x28, 0x97, 0xa3, 0xf0, 0x91, 0xcd,
0xb8, 0x90, 0x84, 0xdc, 0x83, 0x12, 0x8a, 0xe7, 0xf9, 0x6b, 0x99, 0x0d, 0x12, 0x18, 0x6d, 0x20,
0x2c, 0xe3, 0x21, 0x0d, 0x7d, 0x67, 0x14, 0x44, 0xb7, 0x3e, 0x4b, 0x4c, 0xff, 0xc4, 0xba, 0x22,
0xcb, 0x6d, 0x44, 0xc9, 0x75, 0x54, 0xa4, 0x61, 0x07, 0xd3, 0x4a, 0xac, 0x0c, 0x21, 0x2e, 0x4d,
0x60, 0xfd, 0x84, 0x86, 0xcf, 0x29, 0x75, 0x5d, 0x26, 0x0c, 0x8d, 0xa8, 0x1b, 0xfa, 0xf6, 0x84,
0x4d, 0x12, 0xf6, 0xe0, 0x51, 0xaa, 0xd4, 0xc8, 0x06, 0xb2, 0x1d, 0x65, 0xdc, 0x51, 0xf9, 0x90,
0x77, 0xac, 0x9d, 0x64, 0xe1, 0x36, 0x7f, 0x19, 0x36, 0xaf, 0xcf, 0x94, 0x71, 0xe3, 0xfb, 0x5e,
0x9c, 0xab, 0x28, 0x3f, 0xe0, 0xc4, 0xb3, 0x43, 0x6c, 0x8d, 0xce, 0x59, 0x7a, 0x50, 0xd3, 0x30,
0xd1, 0xd9, 0x9f, 0xe3, 0xc2, 0x1d, 0x26, 0xd8, 0x89, 0xe4, 0x7a, 0xfe, 0x94, 0xfb, 0xdd, 0xc6,
0x56, 0x54, 0x7a, 0xce, 0x5c, 0x8a, 0xe0, 0x3c, 0xc6, 0xc2, 0xd8, 0x82, 0x25, 0x2e, 0xd9, 0x6b,
0x07, 0xdd, 0x8b, 0x84, 0x41, 0x63, 0x15, 0x48, 0x0f, 0x79, 0x97, 0x1e, 0xfd, 0xf7, 0xef, 0x0b,
0x50, 0xd3, 0xc0, 0xec, 0x34, 0xe2, 0x21, 0x93, 0xd6, 0xd8, 0xb1, 0xa7, 0x54, 0x3a, 0x39, 0x1b,
0x66, 0x83, 0x43, 0x77, 0x05, 0x90, 0x9d, 0xc5, 0xf6, 0xc5, 0x99, 0xe5, 0xcd, 0x43, 0x6b, 0x4c,
0xcf, 0x7c, 0x2a, 0x5b, 0x59, 0xb7, 0x2f, 0xce, 0xfa, 0xf3, 0x70, 0x97, 0xc3, 0x18, 0x15, 0xe3,
0x25, 0x1a, 0x95, 0x88, 0xa0, 0x9b, 0xda, 0x97, 0x11, 0x95, 0x08, 0x35, 0xc5, 0x95, 0x59, 0x54,
0xa1, 0xa6, 0xa8, 0x2d, 0x26, 0x0f, 0xd0, 0x52, 0xfa, 0x00, 0xfd, 0x08, 0xd6, 0xf1, 0x00, 0x15,
0xac, 0xd9, 0x4a, 0xec, 0xe4, 0x55, 0x8e, 0x15, 0x9d, 0xd4, 0xc4, 0xde, 0x26, 0xeb, 0x81, 0x64,
0x4b, 0x81, 0xf3, 0x13, 0x64, 0x64, 0x39, 0x93, 0xf5, 0x4c, 0x14, 0x3e, 0x70, 0x7e, 0x42, 0x19,
0x25, 0x8f, 0xd5, 0xd1, 0x29, 0xc5, 0xad, 0x9d, 0xa9, 0xe3, 0x26, 0x29, 0xed, 0xcb, 0x38, 0x65,
0x55, 0x50, 0xda, 0x97, 0x3a, 0xe5, 0x23, 0xd8, 0x98, 0xd2, 0xb1, 0x63, 0xc7, 0x8b, 0xb5, 0x22,
0xc1, 0x6d, 0x15, 0xd1, 0x5a, 0x9e, 0x01, 0x2a, 0xee, 0x6c, 0x34, 0x7e, 0xe2, 0x4d, 0x4f, 0x1c,
0x94, 0x59, 0x30, 0x7a, 0xa8, 0x68, 0x2e, 0xba, 0xf3, 0xe9, 0x2f, 0x71, 0x30, 0xcb, 0x12, 0x18,
0x0d, 0xa8, 0x0d, 0x42, 0x6f, 0x26, 0xa7, 0x79, 0x11, 0xea, 0x98, 0x14, 0xf7, 0x9d, 0x6f, 0xc1,
0x4d, 0xce, 0x12, 0x86, 0xde, 0xcc, 0x9b, 0x78, 0x67, 0x57, 0x31, 0x3b, 0xde, 0xbf, 0xce, 0xc1,
0x4a, 0x0c, 0x2b, 0xd8, 0xeb, 0x47, 0xc8, 0xcf, 0xd4, 0x6d, 0xcd, 0x5c, 0xec, 0xaa, 0x0e, 0x9b,
0x2f, 0x24, 0x44, 0x66, 0x26, 0x6f, 0x70, 0xb6, 0xa3, 0x87, 0x59, 0x64, 0x46, 0x64, 0x29, 0xad,
0x34, 0x4b, 0x11, 0xf9, 0xe5, 0x93, 0x2d, 0xb2, 0x88, 0x5f, 0x10, 0x37, 0xab, 0xc6, 0xa2, 0xcb,
0x85, 0xf8, 0xdd, 0x0b, 0xdd, 0xe6, 0x27, 0x5b, 0x10, 0x19, 0x02, 0x03, 0xe3, 0xef, 0xe5, 0x00,
0xa2, 0xd6, 0xf1, 0xdb, 0x1f, 0x4a, 0x6e, 0xc9, 0xf1, 0xc0, 0x5d, 0x4d, 0x46, 0x79, 0x03, 0xea,
0x2a, 0xc6, 0x3b, 0x92, 0x84, 0x6a, 0x12, 0xc6, 0xc4, 0xa1, 0x77, 0x60, 0xe9, 0x6c, 0xe2, 0x9d,
0x70, 0x89, 0x55, 0xc8, 0x2d, 0x18, 0x3d, 0xb7, 0x88, 0x60, 0x29, 0x8d, 0x44, 0x72, 0x53, 0x31,
0x33, 0x0c, 0x5c, 0x97, 0x82, 0x8c, 0xbf, 0x92, 0x57, 0x81, 0xa4, 0xd1, 0x48, 0xbc, 0x58, 0xbd,
0xfb, 0x69, 0x42, 0x6d, 0x5e, 0xe4, 0x5e, 0x7c, 0x0c, 0x8b, 0x3e, 0x1e, 0x4a, 0xf2, 0xc4, 0x2a,
0xbe, 0xe0, 0xc4, 0x6a, 0xf8, 0x31, 0x49, 0xe7, 0xbb, 0xd0, 0xb4, 0xc7, 0x17, 0xd4, 0x0f, 0x1d,
0x6e, 0xad, 0xe7, 0xf2, 0xb1, 0x08, 0xdd, 0xd4, 0xe0, 0x5c, 0x10, 0x7d, 0x07, 0x96, 0xc4, 0x1d,
0x7c, 0x45, 0x29, 0x5e, 0x00, 0x8b, 0xc0, 0x8c, 0xd0, 0xf8, 0x47, 0x32, 0x72, 0x35, 0x3e, 0xbb,
0x2f, 0x1e, 0x15, 0xbd, 0x87, 0xf9, 0xb4, 0x03, 0x55, 0x2c, 0x24, 0xe1, 0x04, 0x10, 0xfc, 0x08,
0x81, 0xc2, 0x05, 0x10, 0x1f, 0xd6, 0xe2, 0xab, 0x0c, 0xab, 0xf1, 0x6f, 0x72, 0x50, 0xde, 0xf7,
0x66, 0xfb, 0x0e, 0xde, 0x7f, 0xe0, 0xdb, 0x44, 0xf9, 0xa8, 0x16, 0x58, 0x92, 0xc7, 0x05, 0xbd,
0xe0, 0x16, 0x63, 0xa6, 0x98, 0xd7, 0x88, 0x8b, 0x79, 0x9f, 0xc3, 0x2d, 0xee, 0x02, 0xf4, 0xbd,
0x99, 0xe7, 0xb3, 0xad, 0x6a, 0x4f, 0x50, 0xdc, 0xf3, 0xdc, 0xf0, 0x5c, 0xf2, 0xce, 0x9b, 0xa7,
0x94, 0x1e, 0x69, 0x14, 0x87, 0x8a, 0x80, 0xdf, 0x60, 0x9e, 0x84, 0x17, 0x16, 0x6a, 0xe8, 0x42,
0x1e, 0x45, 0x8e, 0xba, 0xc4, 0x10, 0x1d, 0x0e, 0xe7, 0x12, 0xa9, 0xf1, 0x29, 0x54, 0x95, 0xb1,
0x87, 0xbc, 0x0b, 0xd5, 0x73, 0x6f, 0x26, 0x2c, 0x42, 0xb9, 0xd8, 0x4d, 0x4f, 0xd1, 0x6b, 0xb3,
0x72, 0x8e, 0x3f, 0x02, 0xe3, 0x0f, 0xcb, 0x50, 0xee, 0xba, 0x17, 0x9e, 0x33, 0xe2, 0xb1, 0xaf,
0x53, 0x3a, 0xf5, 0xe4, 0x43, 0x20, 0xec, 0x37, 0x0f, 0xdd, 0x8a, 0xde, 0xf1, 0x2a, 0x88, 0xd0,
0x2d, 0xf5, 0x82, 0xd7, 0x1a, 0x2c, 0xf8, 0xfa, 0x43, 0x5c, 0x25, 0x9f, 0xdf, 0x18, 0x50, 0xe7,
0x65, 0x49, 0x7b, 0x5e, 0x85, 0x95, 0x85, 0x61, 0x89, 0x7c, 0xc8, 0xf0, 0x16, 0x72, 0x95, 0x43,
0xf8, 0x80, 0xbd, 0x06, 0x65, 0x71, 0xb1, 0x12, 0xaf, 0x79, 0x61, 0x88, 0xbf, 0x00, 0xf1, 0xd5,
0xe0, 0x53, 0x74, 0xe1, 0x2a, 0x41, 0xb6, 0x60, 0xd6, 0x25, 0x70, 0x97, 0xad, 0xb5, 0x3b, 0x50,
0x43, 0x7a, 0x24, 0xa9, 0x88, 0x90, 0x51, 0x0e, 0xe2, 0x04, 0x19, 0xef, 0xd9, 0x55, 0x33, 0xdf,
0xb3, 0xe3, 0xc1, 0xcd, 0x8a, 0xcb, 0x62, 0x17, 0x01, 0x5f, 0x31, 0xd3, 0xe0, 0xf2, 0x91, 0x48,
0x61, 0x53, 0xc1, 0x0b, 0xfa, 0xd2, 0xa6, 0xf2, 0x26, 0x34, 0x4e, 0xed, 0xc9, 0xe4, 0xc4, 0x1e,
0x3d, 0x43, 0x53, 0x40, 0x1d, 0xad, 0x9f, 0x12, 0xc8, 0x6d, 0x01, 0x77, 0xa0, 0xa6, 0xcd, 0x32,
0x8f, 0x07, 0x2d, 0x9a, 0x10, 0xcd, 0x6f, 0xd2, 0xc2, 0xb7, 0xf8, 0x0a, 0x16, 0x3e, 0x2d, 0x2e,
0x76, 0x29, 0x1e, 0x17, 0x7b, 0x8b, 0x73, 0x53, 0x11, 0x91, 0xd8, 0xc4, 0x27, 0xb3, 0xec, 0xf1,
0x98, 0x47, 0x24, 0x72, 0x43, 0x16, 0x0e, 0x1e, 0xe2, 0x97, 0x51, 0x97, 0x40, 0x18, 0x92, 0xdc,
0x46, 0x33, 0xf5, 0xcc, 0x76, 0xc6, 0xfc, 0x9a, 0x06, 0x5a, 0x0f, 0xca, 0xf6, 0x34, 0x3c, 0xb2,
0x9d, 0x31, 0xb9, 0x0b, 0x75, 0x89, 0xe6, 0xa7, 0xe3, 0x0a, 0x8e, 0xbf, 0x40, 0x0f, 0xf0, 0xf9,
0x09, 0x45, 0x31, 0x55, 0x37, 0xec, 0xcd, 0x9a, 0x20, 0xe1, 0xeb, 0xe0, 0x03, 0x1e, 0xe5, 0x13,
0x52, 0x7e, 0x87, 0x7e, 0xf1, 0xe1, 0x2d, 0x15, 0x7c, 0xc0, 0x57, 0xa9, 0xfc, 0x8f, 0xce, 0x31,
0xa4, 0x64, 0xc2, 0x1d, 0xfa, 0xe8, 0xd6, 0x63, 0xf2, 0xaf, 0x20, 0xe5, 0x3e, 0x3a, 0x24, 0x20,
0x9f, 0x6a, 0xfa, 0x6b, 0x8b, 0x13, 0xbf, 0x96, 0x28, 0xff, 0xba, 0x6b, 0x6c, 0xb7, 0x01, 0x9c,
0x80, 0x9d, 0x32, 0x01, 0x75, 0xc7, 0xfc, 0x2a, 0x7c, 0xc5, 0xac, 0x3a, 0xc1, 0x53, 0x04, 0x7c,
0xbb, 0x8a, 0x6d, 0x1b, 0xea, 0x7a, 0x37, 0x49, 0x05, 0x8a, 0xfd, 0xa3, 0x4e, 0xaf, 0x79, 0x83,
0xd4, 0xa0, 0x3c, 0xe8, 0x0c, 0x87, 0x07, 0xdc, 0xd3, 0x57, 0x87, 0x8a, 0xba, 0xe8, 0x9a, 0x67,
0xa9, 0xf6, 0xce, 0x4e, 0xe7, 0x68, 0xd8, 0xd9, 0x6d, 0x16, 0x7e, 0x54, 0xac, 0xe4, 0x9b, 0x05,
0xe3, 0x8f, 0x0a, 0x50, 0xd3, 0x46, 0xe1, 0xc5, 0xcc, 0xf8, 0x36, 0x00, 0xd7, 0x24, 0xa3, 0x80,
0xd5, 0xa2, 0x59, 0x65, 0x10, 0x9c, 0x7c, 0xdd, 0x47, 0x81, 0x6f, 0x91, 0x28, 0x1f, 0xc5, 0x9b,
0xd0, 0xc0, 0xd7, 0x42, 0x74, 0x7f, 0x6d, 0xc9, 0xac, 0x23, 0x50, 0xb0, 0x6a, 0x7e, 0x6d, 0x9e,
0x13, 0xf1, 0x0b, 0x89, 0xe2, 0x39, 0x23, 0x04, 0xf1, 0x2b, 0x89, 0xfc, 0x3e, 0x69, 0xe0, 0x4d,
0x2e, 0x28, 0x52, 0xa0, 0x44, 0x58, 0x13, 0xb0, 0xa1, 0x78, 0x92, 0x40, 0xf0, 0x43, 0xed, 0xde,
0x76, 0xc9, 0xac, 0x23, 0x50, 0x54, 0xf4, 0x3d, 0xb9, 0x80, 0x30, 0x7a, 0x65, 0x23, 0xbd, 0x1a,
0x62, 0x8b, 0xe7, 0x20, 0x65, 0x46, 0xac, 0xf2, 0x85, 0xf1, 0x9d, 0x74, 0xbe, 0x97, 0x9b, 0x13,
0xc9, 0xbb, 0x40, 0xa6, 0xb3, 0x99, 0x95, 0x61, 0xe0, 0x2b, 0x9a, 0x4b, 0xd3, 0xd9, 0x6c, 0xa8,
0xd9, 0xbf, 0xbe, 0x05, 0xdb, 0xe3, 0xd7, 0x40, 0xda, 0x6c, 0x03, 0xf3, 0x26, 0x2a, 0x55, 0x2c,
0x62, 0xcb, 0x39, 0x9d, 0x2d, 0x67, 0x70, 0xbf, 0x7c, 0x26, 0xf7, 0x7b, 0x11, 0x9f, 0x30, 0xf6,
0xa0, 0x76, 0xa4, 0x3d, 0x9a, 0x78, 0x97, 0x9d, 0x10, 0xf2, 0xb9, 0x44, 0x3c, 0x3b, 0xd0, 0xa6,
0xe8, 0x8b, 0x57, 0x12, 0xb5, 0xd6, 0xe4, 0xb5, 0xd6, 0x18, 0x7f, 0x27, 0x87, 0x8f, 0x4c, 0xa9,
0xc6, 0x47, 0xef, 0x34, 0x4a, 0xf7, 0x5b, 0xf4, 0xbc, 0x42, 0x4d, 0xba, 0xdd, 0xc4, 0xcb, 0x08,
0xbc, 0x69, 0x96, 0x77, 0x7a, 0x1a, 0x50, 0x19, 0xe3, 0x51, 0xe3, 0xb0, 0x3e, 0x07, 0x49, 0xe1,
0x9b, 0x49, 0xf8, 0x0e, 0x96, 0x1f, 0x88, 0xc0, 0x0e, 0x26, 0x7c, 0x1f, 0xda, 0x97, 0xa2, 0xd6,
0x80, 0x89, 0x20, 0xc2, 0x3f, 0x20, 0xaf, 0x17, 0xab, 0xb4, 0xf1, 0x37, 0xc5, 0x0b, 0x10, 0xc9,
0xf1, 0xbd, 0x0f, 0x15, 0x55, 0x6a, 0xfc, 0x84, 0x95, 0x94, 0x0a, 0xcf, 0xce, 0x71, 0x6e, 0x0c,
0x89, 0xb5, 0x18, 0x37, 0x17, 0xf7, 0xf1, 0x74, 0xb5, 0x56, 0xbf, 0x07, 0xe4, 0xd4, 0xf1, 0x93,
0xc4, 0xb8, 0xd9, 0x9a, 0x1c, 0xa3, 0x51, 0x1b, 0xc7, 0xb0, 0x22, 0xb9, 0x84, 0xa6, 0x11, 0xc4,
0x27, 0x2f, 0xf7, 0x12, 0x26, 0x9f, 0x4f, 0x31, 0x79, 0xe3, 0x37, 0x4a, 0x50, 0x96, 0x0f, 0x90,
0x66, 0x3d, 0x9a, 0x59, 0x8d, 0x3f, 0x9a, 0xd9, 0x8a, 0x3d, 0xa5, 0xc6, 0xa7, 0x5e, 0x9c, 0xf7,
0xef, 0x24, 0x8f, 0x6c, 0xcd, 0x57, 0x11, 0x3b, 0xb6, 0x85, 0xaf, 0xa2, 0x14, 0xf7, 0x55, 0x64,
0x3d, 0x24, 0x8a, 0xa2, 0x67, 0xea, 0x21, 0xd1, 0x5b, 0x80, 0x72, 0x84, 0x16, 0xdc, 0x56, 0xe1,
0x00, 0x71, 0x45, 0x5e, 0x13, 0x3b, 0x2a, 0x49, 0xb1, 0xe3, 0x95, 0x45, 0x82, 0x8f, 0x60, 0x01,
0x5f, 0x93, 0x11, 0xd7, 0xa5, 0xe5, 0xc1, 0x21, 0xc6, 0x4a, 0xfe, 0xc7, 0x0b, 0x11, 0xa6, 0xa0,
0xd5, 0x5f, 0xe5, 0xab, 0xc5, 0x5e, 0xe5, 0xd3, 0x7d, 0x28, 0xf5, 0xb8, 0x0f, 0xe5, 0x1e, 0x34,
0xd5, 0xc0, 0x71, 0x8b, 0xa4, 0x1b, 0x88, 0xbb, 0x96, 0x8b, 0x12, 0xce, 0xb8, 0x61, 0x2f, 0x88,
0x0e, 0xbe, 0xc5, 0xd8, 0xc1, 0xc7, 0x78, 0x55, 0x3b, 0x0c, 0xe9, 0x74, 0x16, 0xca, 0x83, 0x4f,
0x7b, 0xbb, 0x15, 0x67, 0x1e, 0x2f, 0x83, 0xc8, 0xe9, 0xc5, 0xd5, 0xb1, 0x0d, 0x8b, 0xa7, 0xb6,
0x33, 0x99, 0xfb, 0xd4, 0xf2, 0xa9, 0x1d, 0x78, 0x2e, 0xdf, 0xfc, 0xd1, 0x19, 0x2c, 0xba, 0xb8,
0x87, 0x34, 0x26, 0x27, 0x31, 0x1b, 0xa7, 0x7a, 0x92, 0x5f, 0xa9, 0xd2, 0x47, 0x82, 0x1d, 0x59,
0xe2, 0xd6, 0x35, 0xc6, 0xaa, 0x74, 0x7b, 0xd6, 0xde, 0x41, 0xf7, 0xc9, 0xfe, 0xb0, 0x99, 0x63,
0xc9, 0xc1, 0xf1, 0xce, 0x4e, 0xa7, 0xb3, 0xcb, 0x8f, 0x30, 0x80, 0x85, 0xbd, 0x76, 0xf7, 0x40,
0x1c, 0x60, 0xc5, 0x66, 0xc9, 0xf8, 0x67, 0x79, 0xa8, 0x69, 0xbd, 0x21, 0x8f, 0xd4, 0x24, 0xe0,
0x33, 0x0d, 0xb7, 0xd3, 0x3d, 0xde, 0x92, 0x1c, 0x5e, 0x9b, 0x05, 0xf5, 0x4a, 0x6b, 0xfe, 0xda,
0x57, 0x5a, 0xc9, 0xdb, 0xb0, 0x64, 0x63, 0x09, 0x6a, 0xd0, 0x85, 0x71, 0x5f, 0x80, 0xc5, 0x98,
0xbf, 0x2d, 0x9e, 0x8c, 0x10, 0xc7, 0x14, 0xa3, 0x2b, 0xca, 0xa0, 0x4d, 0x75, 0x52, 0xf1, 0xb9,
0x29, 0x8b, 0x91, 0x11, 0xce, 0x78, 0x75, 0xe0, 0x8b, 0xf1, 0x92, 0x68, 0xbc, 0x67, 0xa9, 0xad,
0xf0, 0xba, 0xa9, 0xd2, 0xc6, 0xc7, 0x00, 0x51, 0x7f, 0xe2, 0xc3, 0x77, 0x23, 0x3e, 0x7c, 0x39,
0x6d, 0xf8, 0xf2, 0xc6, 0x3f, 0x14, 0xac, 0x4b, 0xcc, 0x85, 0x32, 0xf5, 0x7d, 0x0f, 0xa4, 0xf1,
0xd1, 0xe2, 0x41, 0xde, 0xb3, 0x09, 0x0d, 0xe5, 0x55, 0xd1, 0x65, 0x81, 0xe9, 0x2a, 0x44, 0x8a,
0xd5, 0xe6, 0xd3, 0xac, 0xf6, 0x0d, 0xa8, 0xf3, 0x37, 0xc8, 0x44, 0x45, 0x82, 0x5d, 0xd5, 0xa6,
0xf6, 0xa5, 0xac, 0x3b, 0xc6, 0x63, 0x8b, 0x09, 0x1e, 0xfb, 0xb7, 0x72, 0xf8, 0x60, 0x4d, 0xd4,
0xd0, 0x88, 0xc9, 0xaa, 0x32, 0xe3, 0x4c, 0x56, 0x90, 0x9a, 0x0a, 0x7f, 0x0d, 0xe3, 0xcc, 0x67,
0x33, 0xce, 0x6c, 0x96, 0x5c, 0xc8, 0x64, 0xc9, 0xc6, 0x26, 0xb4, 0x76, 0x29, 0x1b, 0x8a, 0xf6,
0x64, 0x92, 0x18, 0x4b, 0xe3, 0x16, 0xdc, 0xcc, 0xc0, 0x09, 0xab, 0xcd, 0x6f, 0xe6, 0x60, 0xad,
0x8d, 0xef, 0x54, 0x7c, 0x6b, 0x77, 0x39, 0x3f, 0x83, 0x9b, 0x2a, 0x62, 0x5b, 0xbb, 0x22, 0xa6,
0x3f, 0x32, 0x24, 0x83, 0xbd, 0xb5, 0x7b, 0x0a, 0xec, 0xcc, 0x34, 0x5a, 0xb0, 0x9e, 0x6c, 0x8d,
0x68, 0xe8, 0x1e, 0x2c, 0xef, 0xd2, 0x93, 0xf9, 0xd9, 0x01, 0xbd, 0x88, 0xda, 0x48, 0xa0, 0x18,
0x9c, 0x7b, 0xcf, 0xc5, 0xc2, 0xe0, 0xbf, 0x79, 0x48, 0x27, 0xa3, 0xb1, 0x82, 0x19, 0x1d, 0x49,
0xab, 0x3f, 0x87, 0x0c, 0x66, 0x74, 0x64, 0x3c, 0x02, 0xa2, 0x97, 0x23, 0x66, 0x91, 0xa9, 0x64,
0xf3, 0x13, 0x2b, 0xb8, 0x0a, 0x42, 0x3a, 0x95, 0xd7, 0x1f, 0x21, 0x98, 0x9f, 0x0c, 0x10, 0x62,
0xbc, 0x03, 0xf5, 0x23, 0xfb, 0xca, 0xa4, 0x5f, 0x8b, 0x5b, 0x86, 0x1b, 0x50, 0x9e, 0xd9, 0x57,
0x8c, 0x17, 0x2b, 0x07, 0x20, 0x47, 0x1b, 0xff, 0xb8, 0x08, 0x0b, 0x48, 0x49, 0xee, 0xe2, 0xfb,
0xe9, 0x8e, 0xcb, 0x79, 0xa1, 0x3c, 0x95, 0x34, 0x50, 0xea, 0xe0, 0xca, 0xa7, 0x0f, 0x2e, 0x61,
0xad, 0x94, 0x8f, 0xa0, 0x49, 0x57, 0x8d, 0x3b, 0x9f, 0xca, 0x97, 0xcf, 0xe2, 0xef, 0x3c, 0x14,
0xa3, 0x77, 0xf7, 0xf1, 0x8e, 0x7b, 0xdc, 0x99, 0x1e, 0x29, 0x7e, 0xd8, 0x3a, 0x79, 0x1e, 0x8b,
0x33, 0x4b, 0x07, 0x65, 0x6a, 0x97, 0x65, 0x79, 0x75, 0x36, 0xae, 0x5d, 0xa6, 0xb4, 0xc8, 0xca,
0xcb, 0xb5, 0x48, 0x34, 0x63, 0xbe, 0x40, 0x8b, 0x84, 0x57, 0xd0, 0x22, 0x5f, 0xc1, 0x91, 0x7d,
0x13, 0x2a, 0x5c, 0xc8, 0xd2, 0x8e, 0x30, 0x26, 0x5c, 0xb1, 0x23, 0xec, 0x13, 0x4d, 0xcf, 0xc2,
0x28, 0x1a, 0xed, 0x0c, 0x31, 0xe9, 0xd7, 0x3f, 0x1f, 0x07, 0xe1, 0x57, 0x50, 0x16, 0x50, 0xb6,
0xa0, 0x5d, 0x7b, 0x2a, 0x9f, 0xd3, 0xe4, 0xbf, 0xd9, 0xb0, 0xf1, 0xc7, 0xef, 0xbe, 0x9e, 0x3b,
0x3e, 0x1d, 0xcb, 0x27, 0xb8, 0x1c, 0xbe, 0xbf, 0x19, 0x84, 0x75, 0x90, 0xe9, 0x7c, 0xae, 0xf7,
0xdc, 0x15, 0x7c, 0xab, 0xec, 0x04, 0x4f, 0x59, 0xd2, 0x20, 0xd0, 0xe4, 0x8f, 0xef, 0xce, 0x3c,
0x5f, 0x4a, 0x08, 0xc6, 0xef, 0xe6, 0xa0, 0x29, 0x76, 0x97, 0xc2, 0xe9, 0x2a, 0x57, 0xe9, 0xba,
0xa0, 0x8f, 0x17, 0x3f, 0xa8, 0x65, 0x40, 0x83, 0x5b, 0x9a, 0x94, 0xb8, 0x80, 0x96, 0xb2, 0x1a,
0x03, 0xee, 0x09, 0x91, 0xe1, 0x75, 0xa8, 0xc9, 0x80, 0xf3, 0xa9, 0x33, 0x91, 0x9f, 0xd8, 0xc0,
0x88, 0xf3, 0x43, 0x67, 0x22, 0xa5, 0x0d, 0xdf, 0x16, 0x57, 0xb9, 0x73, 0x5c, 0xda, 0x30, 0xed,
0x90, 0x1a, 0xff, 0x34, 0x07, 0xcb, 0x5a, 0x57, 0xc4, 0xbe, 0xfd, 0x3e, 0xd4, 0xd5, 0xab, 0xd7,
0x54, 0x89, 0xb9, 0x1b, 0x71, 0x1e, 0x15, 0x65, 0xab, 0x8d, 0x14, 0x24, 0x60, 0x8d, 0x19, 0xdb,
0x57, 0x18, 0x15, 0x3d, 0x9f, 0x4a, 0x4d, 0x72, 0x6c, 0x5f, 0xed, 0x51, 0x3a, 0x98, 0x4f, 0xc9,
0x5d, 0xa8, 0x3f, 0xa7, 0xf4, 0x99, 0x22, 0x40, 0xd6, 0x0b, 0x0c, 0x26, 0x28, 0x0c, 0x68, 0x4c,
0x3d, 0x37, 0x3c, 0x57, 0x24, 0x42, 0xc4, 0xe7, 0x40, 0xa4, 0x31, 0xfe, 0x20, 0x0f, 0x2b, 0x68,
0xcf, 0x14, 0x76, 0x64, 0xc1, 0xba, 0x5a, 0xb0, 0x80, 0xa6, 0x5d, 0x64, 0x5e, 0xfb, 0x37, 0x4c,
0x91, 0x26, 0x1f, 0xbd, 0xa2, 0x0d, 0x56, 0xde, 0x16, 0xbf, 0x66, 0xf8, 0x0b, 0xe9, 0xe1, 0xbf,
0x7e, 0x78, 0xb3, 0xbc, 0xca, 0xa5, 0x2c, 0xaf, 0xf2, 0xab, 0xf8, 0x72, 0x53, 0xf7, 0x9a, 0xcb,
0xe9, 0xd7, 0x3b, 0x1f, 0xc1, 0x46, 0x8c, 0x86, 0x73, 0x6b, 0xe7, 0xd4, 0xa1, 0xf2, 0x7d, 0xa0,
0x55, 0x8d, 0x7a, 0x20, 0x71, 0xdb, 0x65, 0x28, 0x05, 0x23, 0x6f, 0x46, 0x8d, 0x75, 0x58, 0x8d,
0x8f, 0xaa, 0x38, 0x26, 0x7e, 0x3b, 0x07, 0x2d, 0x11, 0x03, 0xe4, 0xb8, 0x67, 0xfb, 0x4e, 0x10,
0x7a, 0xbe, 0x7a, 0x1d, 0xfa, 0x36, 0x00, 0x7e, 0xee, 0x83, 0x2b, 0xee, 0xe2, 0x45, 0x1c, 0x0e,
0xe1, 0x6a, 0xfb, 0x4d, 0xa8, 0x50, 0x77, 0x8c, 0x48, 0x5c, 0x0d, 0x65, 0xea, 0x8e, 0xa5, 0xd2,
0x9f, 0x3a, 0x86, 0x1b, 0x71, 0x01, 0x43, 0xbc, 0xed, 0xc0, 0x46, 0x87, 0x5e, 0x70, 0x71, 0xa0,
0xa8, 0xde, 0x76, 0x38, 0xb4, 0x2f, 0x79, 0x44, 0x6d, 0x60, 0xfc, 0xd5, 0x3c, 0x2c, 0x45, 0xed,
0xc3, 0xd7, 0x6d, 0x5e, 0xfc, 0x4e, 0xcf, 0x5d, 0xb1, 0x1c, 0x1c, 0xa6, 0x2c, 0x69, 0x56, 0xde,
0x0a, 0x6e, 0xce, 0xae, 0x4b, 0x0c, 0xa8, 0x49, 0x0a, 0x6f, 0x1e, 0x6a, 0x2f, 0x8e, 0x56, 0x91,
0xa4, 0x3f, 0x0f, 0x99, 0x76, 0xcb, 0xd4, 0x7c, 0xc7, 0x15, 0xfa, 0x65, 0xc9, 0x9e, 0x86, 0x5d,
0xfe, 0x4d, 0x19, 0x06, 0x66, 0xd9, 0x70, 0x22, 0x19, 0x15, 0xa3, 0x6f, 0xa2, 0xb2, 0x83, 0x33,
0xc7, 0x15, 0x1d, 0x5d, 0x13, 0xc0, 0x67, 0xf0, 0x95, 0x26, 0xf0, 0x3a, 0xd4, 0xb0, 0xf0, 0xe8,
0x1a, 0x3b, 0x7f, 0xfe, 0x2b, 0xec, 0xba, 0x1c, 0x2f, 0x2c, 0x6e, 0xde, 0x3c, 0x66, 0x67, 0x00,
0xac, 0x8a, 0x87, 0xd8, 0xfc, 0x66, 0x0e, 0x6e, 0x66, 0x4c, 0x9b, 0xd8, 0xe5, 0x3b, 0xb0, 0x7c,
0xaa, 0x90, 0x72, 0x74, 0x71, 0xab, 0xaf, 0x4b, 0xb6, 0x1a, 0x1f, 0x53, 0xb3, 0x79, 0x1a, 0x07,
0x44, 0x1a, 0x2e, 0xce, 0x60, 0xec, 0x91, 0x04, 0x2e, 0x4e, 0xe1, 0x34, 0xa2, 0x72, 0x79, 0x04,
0x9b, 0x9d, 0x4b, 0xc6, 0x31, 0x54, 0x58, 0xee, 0xe8, 0xd9, 0x5c, 0x7a, 0xbe, 0x12, 0xd6, 0xfc,
0xdc, 0x2b, 0x59, 0xf3, 0xc7, 0x78, 0xcd, 0x59, 0x95, 0xf5, 0xd3, 0x14, 0xc2, 0x0f, 0x50, 0x96,
0xe7, 0x84, 0x17, 0x21, 0x5f, 0x4b, 0x60, 0x20, 0x2c, 0xd4, 0x08, 0x60, 0xe9, 0x70, 0x3e, 0x09,
0x9d, 0x1d, 0x05, 0x22, 0x1f, 0x89, 0x3c, 0xbc, 0x1e, 0x39, 0x6a, 0x99, 0x15, 0x81, 0xaa, 0x88,
0x0f, 0xd6, 0x94, 0x15, 0x64, 0xa5, 0xeb, 0x5b, 0x9a, 0xc6, 0x6b, 0x30, 0x6e, 0xc2, 0x46, 0x94,
0xc2, 0x61, 0x93, 0x47, 0xcd, 0xdf, 0xce, 0x61, 0xf8, 0x3e, 0xe2, 0x06, 0xae, 0x3d, 0x0b, 0xce,
0xbd, 0x90, 0x74, 0x60, 0x25, 0x70, 0xdc, 0xb3, 0x09, 0xd5, 0x8b, 0x0f, 0xc4, 0x20, 0xac, 0xc5,
0xdb, 0x86, 0x59, 0x03, 0x73, 0x19, 0x73, 0x44, 0xa5, 0x05, 0x64, 0xfb, 0xba, 0x46, 0x46, 0xcb,
0x22, 0x31, 0x1a, 0xe9, 0xc6, 0x77, 0x61, 0x31, 0x5e, 0x11, 0xf9, 0x44, 0xbc, 0x0e, 0x10, 0xb5,
0xaa, 0x90, 0xb8, 0x1b, 0x1d, 0x2d, 0x88, 0x5a, 0x34, 0xf6, 0x81, 0xf1, 0x97, 0x73, 0xd0, 0x32,
0x29, 0x5b, 0xb9, 0x5a, 0x2b, 0xe5, 0x9a, 0xf9, 0x7e, 0xaa, 0xd4, 0xeb, 0xfb, 0x2a, 0x1f, 0x1d,
0x90, 0x2d, 0x7a, 0xef, 0xda, 0xc9, 0xd8, 0xbf, 0x91, 0xea, 0xd1, 0x76, 0x05, 0x16, 0x90, 0xc4,
0xd8, 0x80, 0x35, 0xd1, 0x1e, 0xd9, 0x96, 0xc8, 0x55, 0x1b, 0xab, 0x31, 0xe6, 0xaa, 0xdd, 0x84,
0x16, 0xde, 0xf3, 0xd5, 0x3b, 0x21, 0x32, 0xee, 0x02, 0x39, 0xb4, 0x47, 0xb6, 0xef, 0x79, 0xee,
0x11, 0xf5, 0x45, 0x30, 0x34, 0x97, 0x30, 0xb9, 0x27, 0x53, 0x8a, 0xc2, 0x98, 0x92, 0xef, 0x2c,
0x7b, 0xae, 0x8c, 0xfd, 0xc2, 0x94, 0xe1, 0xc3, 0xca, 0xb6, 0xfd, 0x8c, 0xca, 0x92, 0xe4, 0x10,
0x3d, 0x86, 0xda, 0x4c, 0x15, 0x2a, 0xc7, 0x5d, 0x3e, 0x96, 0x92, 0xae, 0xd6, 0xd4, 0xa9, 0x19,
0x0b, 0xf2, 0x3d, 0x2f, 0xe4, 0x0f, 0x13, 0x48, 0x67, 0x98, 0x59, 0x65, 0xa0, 0xa7, 0xf4, 0xaa,
0x3b, 0x36, 0x1e, 0xc2, 0x6a, 0xbc, 0x4e, 0xc1, 0x5a, 0x36, 0xa1, 0x32, 0x15, 0x30, 0xd1, 0x7a,
0x95, 0x66, 0xca, 0x08, 0x53, 0xf9, 0x64, 0x9e, 0xee, 0xae, 0x52, 0xa9, 0x1e, 0xc3, 0x46, 0x0a,
0x23, 0x0a, 0xbc, 0x0b, 0x75, 0xad, 0x21, 0xd8, 0x8d, 0x22, 0x13, 0x59, 0x45, 0x4b, 0x02, 0xe3,
0x33, 0xd8, 0x40, 0x7d, 0x2c, 0xca, 0x2e, 0x87, 0x20, 0xd1, 0x8b, 0x5c, 0xb2, 0x17, 0x1f, 0x49,
0x35, 0x4f, 0xcf, 0x1a, 0x5d, 0x15, 0x18, 0x73, 0x9c, 0x0c, 0xdf, 0x91, 0x49, 0xe3, 0x18, 0xd6,
0xd3, 0xc3, 0xc7, 0xda, 0xff, 0x33, 0x0d, 0xb9, 0x1c, 0x9e, 0x08, 0xad, 0x86, 0xe7, 0xbf, 0xe6,
0x70, 0x7c, 0x62, 0x28, 0xd1, 0xcc, 0x31, 0x90, 0x29, 0x0d, 0xcf, 0xbd, 0xb1, 0x95, 0xae, 0xf9,
0x91, 0x8a, 0x1e, 0xca, 0xcc, 0xbb, 0x75, 0xc8, 0x33, 0x6a, 0x18, 0x11, 0xc7, 0x3e, 0x4d, 0xc2,
0x37, 0x47, 0xb0, 0x9e, 0x4d, 0x9c, 0x11, 0x73, 0xf3, 0x61, 0x5c, 0x50, 0xbf, 0x7d, 0x6d, 0xf7,
0x59, 0xb3, 0x74, 0xb9, 0xfd, 0xb7, 0x2a, 0x50, 0x16, 0x56, 0x12, 0xb2, 0x05, 0xc5, 0x91, 0x8c,
0xdf, 0x8c, 0x1e, 0xa2, 0x13, 0x58, 0xf9, 0x7f, 0x87, 0x47, 0x71, 0x32, 0x3a, 0xf2, 0x18, 0x16,
0xe3, 0x21, 0x0c, 0x89, 0x47, 0x2a, 0xe2, 0xb1, 0x07, 0x8d, 0x51, 0xc2, 0x59, 0x5d, 0x8d, 0x84,
0x2b, 0x94, 0x39, 0x2b, 0xe7, 0x9a, 0xf4, 0xe5, 0xb9, 0x4c, 0x5f, 0x0b, 0xce, 0x6d, 0xeb, 0xe1,
0xa3, 0x8f, 0xc5, 0x2b, 0x15, 0x35, 0x0e, 0x1c, 0x9c, 0xdb, 0x0f, 0x1f, 0x7d, 0x9c, 0xd4, 0xc4,
0xc4, 0x1b, 0x15, 0x9a, 0x26, 0xb6, 0x0a, 0x25, 0x7c, 0x8c, 0x1a, 0x03, 0xf1, 0x30, 0x41, 0x1e,
0xc0, 0xaa, 0x34, 0xbc, 0x89, 0x2b, 0x13, 0x78, 0x8a, 0x56, 0xf0, 0x96, 0xaa, 0xc0, 0x0d, 0x38,
0x0a, 0x4d, 0x75, 0xeb, 0xb0, 0x70, 0x1e, 0xbd, 0x2e, 0xde, 0x30, 0x45, 0xca, 0xf8, 0x83, 0x12,
0xd4, 0xb4, 0x41, 0x21, 0x75, 0xa8, 0x98, 0x9d, 0x41, 0xc7, 0xfc, 0xa2, 0xb3, 0xdb, 0xbc, 0x41,
0xee, 0xc1, 0x5b, 0xdd, 0xde, 0x4e, 0xdf, 0x34, 0x3b, 0x3b, 0x43, 0xab, 0x6f, 0x5a, 0xf2, 0x39,
0xc4, 0xa3, 0xf6, 0x57, 0x87, 0x9d, 0xde, 0xd0, 0xda, 0xed, 0x0c, 0xdb, 0xdd, 0x83, 0x41, 0x33,
0x47, 0x5e, 0x83, 0x56, 0x44, 0x29, 0xd1, 0xed, 0xc3, 0xfe, 0x71, 0x6f, 0xd8, 0xcc, 0x93, 0x3b,
0x70, 0x6b, 0xaf, 0xdb, 0x6b, 0x1f, 0x58, 0x11, 0xcd, 0xce, 0xc1, 0xf0, 0x0b, 0xab, 0xf3, 0x8b,
0x47, 0x5d, 0xf3, 0xab, 0x66, 0x21, 0x8b, 0x60, 0x7f, 0x78, 0xb0, 0x23, 0x4b, 0x28, 0x92, 0x9b,
0xb0, 0x86, 0x04, 0x98, 0xc5, 0x1a, 0xf6, 0xfb, 0xd6, 0xa0, 0xdf, 0xef, 0x35, 0x4b, 0x64, 0x19,
0x1a, 0xdd, 0xde, 0x17, 0xed, 0x83, 0xee, 0xae, 0x65, 0x76, 0xda, 0x07, 0x87, 0xcd, 0x05, 0xb2,
0x02, 0x4b, 0x49, 0xba, 0x32, 0x2b, 0x42, 0xd2, 0xf5, 0x7b, 0xdd, 0x7e, 0xcf, 0xfa, 0xa2, 0x63,
0x0e, 0xba, 0xfd, 0x5e, 0xb3, 0x42, 0xd6, 0x81, 0xc4, 0x51, 0xfb, 0x87, 0xed, 0x9d, 0x66, 0x95,
0xac, 0xc1, 0x72, 0x1c, 0xfe, 0xb4, 0xf3, 0x55, 0x13, 0x48, 0x0b, 0x56, 0xb1, 0x61, 0xd6, 0x76,
0xe7, 0xa0, 0xff, 0xa5, 0x75, 0xd8, 0xed, 0x75, 0x0f, 0x8f, 0x0f, 0x9b, 0x35, 0xfe, 0xa6, 0x6c,
0xa7, 0x63, 0x75, 0x7b, 0x83, 0xe3, 0xbd, 0xbd, 0xee, 0x4e, 0xb7, 0xd3, 0x1b, 0x36, 0xeb, 0x58,
0x73, 0x56, 0xc7, 0x1b, 0x2c, 0x83, 0xb8, 0x57, 0x65, 0xed, 0x76, 0x07, 0xed, 0xed, 0x83, 0xce,
0x6e, 0x73, 0x91, 0xdc, 0x86, 0x9b, 0xc3, 0xce, 0xe1, 0x51, 0xdf, 0x6c, 0x9b, 0x5f, 0xc9, 0x7b,
0x57, 0xd6, 0x5e, 0xbb, 0x7b, 0x70, 0x6c, 0x76, 0x9a, 0x4b, 0xe4, 0x0d, 0xb8, 0x6d, 0x76, 0x7e,
0x7c, 0xdc, 0x35, 0x3b, 0xbb, 0x56, 0xaf, 0xbf, 0xdb, 0xb1, 0xf6, 0x3a, 0xed, 0xe1, 0xb1, 0xd9,
0xb1, 0x0e, 0xbb, 0x83, 0x41, 0xb7, 0xf7, 0xa4, 0xd9, 0x24, 0x6f, 0xc1, 0x5d, 0x45, 0xa2, 0x0a,
0x48, 0x50, 0x2d, 0xb3, 0xfe, 0xc9, 0x29, 0xed, 0x75, 0x7e, 0x71, 0x68, 0x1d, 0x75, 0x3a, 0x66,
0x93, 0x90, 0x4d, 0x58, 0x8f, 0xaa, 0xc7, 0x0a, 0x44, 0xdd, 0x2b, 0x0c, 0x77, 0xd4, 0x31, 0x0f,
0xdb, 0x3d, 0x36, 0xc1, 0x31, 0xdc, 0x2a, 0x6b, 0x76, 0x84, 0x4b, 0x36, 0x7b, 0x8d, 0x10, 0x58,
0xd4, 0x66, 0x65, 0xaf, 0x6d, 0x36, 0xd7, 0xc9, 0x12, 0xd4, 0x0e, 0x8f, 0x8e, 0xac, 0x61, 0xf7,
0xb0, 0xd3, 0x3f, 0x1e, 0x36, 0x37, 0xc8, 0x1a, 0x34, 0xbb, 0xbd, 0x61, 0xc7, 0x64, 0x73, 0x2d,
0xb3, 0xfe, 0xb7, 0x32, 0x59, 0x85, 0x25, 0xd9, 0x52, 0x09, 0xfd, 0xe3, 0x32, 0xd9, 0x00, 0x72,
0xdc, 0x33, 0x3b, 0xed, 0x5d, 0x36, 0x70, 0x0a, 0xf1, 0xdf, 0xcb, 0xc2, 0x9d, 0xf9, 0xbb, 0x05,
0x25, 0xec, 0x45, 0xf1, 0x41, 0xf1, 0x4f, 0x6e, 0xd4, 0xb5, 0x4f, 0x65, 0xbc, 0xec, 0xc3, 0x59,
0x9a, 0x6a, 0x5e, 0x48, 0xa9, 0xe6, 0x29, 0xdb, 0x4f, 0x43, 0xd7, 0x1d, 0xde, 0x84, 0xc6, 0x14,
0x3f, 0xbf, 0x21, 0xde, 0x96, 0x07, 0x11, 0x2c, 0x87, 0x40, 0x7c, 0x58, 0x3e, 0xf5, 0xe5, 0xa8,
0x52, 0xfa, 0xcb, 0x51, 0x59, 0xfa, 0xe1, 0x42, 0x96, 0x7e, 0x78, 0x1f, 0x96, 0x91, 0x35, 0x39,
0xae, 0x33, 0x95, 0x56, 0x17, 0xd4, 0x22, 0x96, 0x38, 0x8b, 0x42, 0xb8, 0x54, 0x47, 0xa5, 0xca,
0x2a, 0x58, 0x48, 0x59, 0x68, 0xab, 0x31, 0x4d, 0x15, 0x39, 0x87, 0xd2, 0x54, 0x55, 0x0d, 0xf6,
0x65, 0x54, 0x43, 0x4d, 0xab, 0x01, 0xe1, 0xbc, 0x86, 0xfb, 0xb0, 0x4c, 0x2f, 0x43, 0xdf, 0xb6,
0xbc, 0x99, 0xfd, 0xf5, 0x9c, 0xc7, 0x5b, 0xd8, 0xdc, 0x06, 0x54, 0x37, 0x97, 0x38, 0xa2, 0xcf,
0xe1, 0xbb, 0x76, 0x68, 0x1b, 0xbf, 0x02, 0xa0, 0x4e, 0xd5, 0x31, 0x63, 0x80, 0xae, 0x27, 0xaf,
0xdd, 0xd5, 0x4d, 0x4c, 0xf0, 0x79, 0x0c, 0x3d, 0xdf, 0x3e, 0xa3, 0x5d, 0xf9, 0xd2, 0x4b, 0x04,
0x20, 0xb7, 0xa0, 0xe0, 0xcd, 0x64, 0x28, 0x59, 0x55, 0x3e, 0x96, 0x3c, 0x33, 0x19, 0xd4, 0xf8,
0x18, 0xf2, 0xfd, 0xd9, 0xb5, 0xa2, 0x52, 0x0b, 0xca, 0xf2, 0x5b, 0x91, 0x79, 0x1e, 0x3e, 0x26,
0x93, 0xf7, 0xff, 0x2c, 0xd4, 0xb4, 0x2f, 0xc6, 0x90, 0x0d, 0x58, 0xf9, 0xb2, 0x3b, 0xec, 0x75,
0x06, 0x03, 0xeb, 0xe8, 0x78, 0xfb, 0x69, 0xe7, 0x2b, 0x6b, 0xbf, 0x3d, 0xd8, 0x6f, 0xde, 0x60,
0xbc, 0xa4, 0xd7, 0x19, 0x0c, 0x3b, 0xbb, 0x31, 0x78, 0x8e, 0xbc, 0x0e, 0x9b, 0xc7, 0xbd, 0xe3,
0x41, 0x67, 0xd7, 0xca, 0xca, 0x97, 0x67, 0x9b, 0x47, 0xe0, 0x33, 0xb2, 0x17, 0xee, 0xff, 0x2a,
0x2c, 0xc6, 0x5f, 0x46, 0x20, 0x00, 0x0b, 0x07, 0x9d, 0x27, 0xed, 0x9d, 0xaf, 0xf0, 0x31, 0xec,
0xc1, 0xb0, 0x3d, 0xec, 0xee, 0x58, 0xe2, 0xf1, 0x6b, 0xc6, 0xa8, 0x72, 0xa4, 0x06, 0xe5, 0x76,
0x6f, 0x67, 0xbf, 0x6f, 0x0e, 0x9a, 0x79, 0xf2, 0x1a, 0x6c, 0xc8, 0x2d, 0xb4, 0xd3, 0x3f, 0x3c,
0xec, 0x0e, 0x39, 0x8f, 0x1e, 0x7e, 0x75, 0xc4, 0x76, 0xcc, 0x7d, 0x1b, 0xaa, 0xd1, 0xbb, 0xdd,
0x9c, 0xef, 0x75, 0x87, 0xdd, 0xf6, 0x30, 0x62, 0xfa, 0xcd, 0x1b, 0x8c, 0xad, 0x46, 0x60, 0xfe,
0xf8, 0x76, 0x33, 0x87, 0x97, 0x47, 0x25, 0x10, 0x6b, 0x6f, 0xe6, 0xd9, 0x5e, 0x8f, 0xa0, 0xdb,
0xfd, 0x21, 0xeb, 0xc2, 0xaf, 0xc1, 0x62, 0xfc, 0x79, 0x6c, 0xd2, 0x84, 0x3a, 0xab, 0x5f, 0xab,
0x02, 0x60, 0x01, 0x5b, 0xdc, 0xcc, 0x21, 0x63, 0xdf, 0xe9, 0x1f, 0x76, 0x7b, 0x4f, 0xf8, 0x69,
0xd0, 0xcc, 0x33, 0x50, 0xff, 0x78, 0xf8, 0xa4, 0xaf, 0x40, 0x05, 0x96, 0x03, 0xbb, 0xd3, 0x2c,
0xde, 0xff, 0x1a, 0x96, 0x53, 0x0f, 0x69, 0xb3, 0x56, 0xf7, 0x8f, 0x87, 0x3b, 0xfd, 0x43, 0xbd,
0x9e, 0x1a, 0x94, 0x77, 0x0e, 0xda, 0xdd, 0x43, 0xee, 0x08, 0x69, 0x40, 0xf5, 0xb8, 0x27, 0x93,
0xf9, 0xf8, 0x13, 0xe0, 0x05, 0xc6, 0xa2, 0xf6, 0xba, 0xe6, 0x60, 0x68, 0x0d, 0x86, 0xed, 0x27,
0x9d, 0x66, 0x91, 0xe5, 0x95, 0xfc, 0xaa, 0x74, 0xff, 0x33, 0x58, 0x8c, 0xc7, 0x3d, 0xc7, 0x1d,
0x58, 0x9b, 0xb0, 0xbe, 0xdd, 0x19, 0x7e, 0xd9, 0xe9, 0xf4, 0xf8, 0x94, 0xef, 0x74, 0x7a, 0x43,
0xb3, 0x7d, 0xd0, 0x1d, 0x7e, 0xd5, 0xcc, 0xdd, 0x7f, 0x0c, 0xcd, 0x64, 0x90, 0x41, 0x2c, 0x2a,
0xe3, 0x45, 0xe1, 0x1b, 0xf7, 0xff, 0x53, 0x0e, 0x56, 0xb3, 0xfc, 0x6b, 0x6c, 0x61, 0x0a, 0x46,
0xc8, 0x8e, 0xc3, 0x41, 0xbf, 0x67, 0xf5, 0xfa, 0xfc, 0x51, 0xdd, 0x4d, 0x58, 0x4f, 0x20, 0x64,
0x2f, 0x72, 0xe4, 0x16, 0x6c, 0xa4, 0x32, 0x59, 0x66, 0xff, 0x98, 0xcf, 0x65, 0x0b, 0x56, 0x13,
0xc8, 0x8e, 0x69, 0xf6, 0xcd, 0x66, 0x81, 0xbc, 0x07, 0xf7, 0x12, 0x98, 0xb4, 0x10, 0x20, 0x65,
0x84, 0x22, 0x79, 0x07, 0xde, 0x4c, 0x51, 0x47, 0xe7, 0xa4, 0xb5, 0xdd, 0x3e, 0x60, 0xdd, 0x6b,
0x96, 0xee, 0xff, 0x83, 0x02, 0x40, 0x74, 0xb1, 0x90, 0xd5, 0xbf, 0xdb, 0x1e, 0xb6, 0x0f, 0xfa,
0x6c, 0xcf, 0x98, 0xfd, 0x21, 0x2b, 0xdd, 0xec, 0xfc, 0xb8, 0x79, 0x23, 0x13, 0xd3, 0x3f, 0x62,
0x1d, 0xda, 0x80, 0x15, 0x5c, 0x7f, 0x07, 0xac, 0x1b, 0x6c, 0xb9, 0xf0, 0xf7, 0x99, 0xb9, 0xa4,
0x71, 0x7c, 0xb4, 0x67, 0xf6, 0x7b, 0x43, 0x6b, 0xb0, 0x7f, 0x3c, 0xdc, 0xe5, 0xaf, 0x3b, 0xef,
0x98, 0xdd, 0x23, 0x2c, 0xb3, 0xf8, 0x22, 0x02, 0x56, 0x74, 0x89, 0x6d, 0xf0, 0x27, 0xfd, 0xc1,
0xa0, 0x7b, 0x64, 0xfd, 0xf8, 0xb8, 0x63, 0x76, 0x3b, 0x03, 0x9e, 0x71, 0x21, 0x03, 0xce, 0xe8,
0xcb, 0x6c, 0xcd, 0x0e, 0x0f, 0xbe, 0x10, 0x02, 0x04, 0x23, 0xad, 0xc4, 0x41, 0x8c, 0xaa, 0xca,
0x66, 0x87, 0x9d, 0xc0, 0x19, 0x25, 0xc3, 0x35, 0x38, 0x96, 0xaf, 0xc6, 0x64, 0x8b, 0xd4, 0xce,
0xe7, 0xd9, 0xea, 0xd9, 0x28, 0x96, 0x8b, 0x8b, 0x1d, 0x4a, 0x48, 0xdb, 0xdd, 0x35, 0x79, 0x86,
0xc5, 0x14, 0x94, 0xd1, 0x2e, 0xb1, 0x45, 0xc8, 0x8e, 0x68, 0x46, 0xd2, 0x94, 0x09, 0x86, 0x59,
0x7e, 0xf8, 0x2f, 0xdf, 0x80, 0xaa, 0xba, 0x60, 0x40, 0x7e, 0x04, 0x8d, 0xd8, 0x8d, 0x6f, 0x22,
0x4d, 0xf8, 0x59, 0x17, 0xc4, 0x37, 0x5f, 0xcb, 0x46, 0x0a, 0xe5, 0xe4, 0x50, 0xb3, 0x06, 0x60,
0x61, 0xaf, 0x25, 0x35, 0xf4, 0x58, 0x69, 0xb7, 0xaf, 0xc1, 0x8a, 0xe2, 0x9e, 0xf2, 0xa7, 0xa2,
0xf5, 0x0f, 0x0f, 0x93, 0xdb, 0xd1, 0xbb, 0xbd, 0x19, 0x1f, 0x24, 0xde, 0xbc, 0x99, 0xfe, 0x44,
0xb0, 0xfc, 0xa6, 0xf0, 0x2e, 0xd4, 0xb4, 0xef, 0xe9, 0x91, 0x9b, 0xd7, 0x7e, 0xfb, 0x6f, 0x73,
0x33, 0x0b, 0x25, 0x9a, 0xf4, 0x39, 0x54, 0xd5, 0xb7, 0xd5, 0xc8, 0x86, 0xf6, 0x5d, 0x3c, 0xfd,
0x0b, 0x71, 0x9b, 0xad, 0x34, 0x42, 0xe4, 0xdf, 0x85, 0x9a, 0xf6, 0x89, 0x34, 0xd5, 0x8a, 0xf4,
0x67, 0xd8, 0x54, 0x2b, 0xb2, 0xbe, 0xa8, 0x76, 0x00, 0x6b, 0xc2, 0xe6, 0x70, 0x42, 0xbf, 0xc9,
0xf0, 0x64, 0x7c, 0x41, 0xf9, 0x41, 0x8e, 0x3c, 0x86, 0x8a, 0xfc, 0x18, 0x1e, 0x59, 0xcf, 0xfe,
0xd4, 0xdf, 0xe6, 0x46, 0x0a, 0x2e, 0x9a, 0xd2, 0x06, 0x88, 0x3e, 0xbe, 0x46, 0x64, 0xc7, 0x53,
0x1f, 0x73, 0x53, 0x33, 0x93, 0xf1, 0xa5, 0xb6, 0x5d, 0xa8, 0x69, 0xdf, 0x59, 0x53, 0x63, 0x92,
0xfe, 0x46, 0x9b, 0x1a, 0x93, 0xac, 0xcf, 0xb2, 0xfd, 0x08, 0x1a, 0xb1, 0x0f, 0xa6, 0xa9, 0x75,
0x9c, 0xf5, 0x39, 0x36, 0xb5, 0x8e, 0xb3, 0xbf, 0xb1, 0xb6, 0x0b, 0x35, 0xed, 0xf3, 0x66, 0xaa,
0x45, 0xe9, 0x2f, 0xa9, 0xa9, 0x16, 0x65, 0x7c, 0x0d, 0x8d, 0xed, 0x86, 0xf8, 0xb7, 0xcd, 0xd4,
0x6e, 0xc8, 0xfc, 0x48, 0x9a, 0xda, 0x0d, 0xd9, 0x1f, 0x44, 0x63, 0x4b, 0x4f, 0xbd, 0x11, 0x4f,
0x36, 0x62, 0xaa, 0x7e, 0xf4, 0xd8, 0xbc, 0x5a, 0x7a, 0xe9, 0xe7, 0xe4, 0x9f, 0xc0, 0x8a, 0x5a,
0x34, 0xea, 0x85, 0xf7, 0x40, 0xb5, 0x29, 0xf3, 0x1d, 0xf9, 0xcd, 0x66, 0x12, 0xfb, 0x20, 0x47,
0x3e, 0x85, 0xb2, 0x78, 0x36, 0x9b, 0xac, 0x25, 0x9f, 0xd1, 0xc6, 0x46, 0xac, 0x67, 0xbf, 0xae,
0x4d, 0x8e, 0xf8, 0x86, 0xd6, 0xdf, 0xb5, 0xd6, 0x57, 0x6c, 0xc6, 0x53, 0xd8, 0x9b, 0xaf, 0x5f,
0x87, 0x8e, 0x4a, 0x4c, 0xbe, 0xc5, 0x7e, 0xfb, 0xba, 0x97, 0x58, 0xe2, 0x25, 0x5e, 0xf7, 0x64,
0xdc, 0x13, 0xa8, 0xeb, 0x5f, 0xd6, 0x21, 0xfa, 0x3e, 0x4c, 0x96, 0x75, 0x2b, 0x13, 0x27, 0x0a,
0xfa, 0x02, 0xd6, 0xd5, 0x78, 0xeb, 0xcf, 0x82, 0x04, 0xe4, 0x4e, 0xc6, 0x63, 0x21, 0xb1, 0x51,
0xbf, 0x79, 0xed, 0x6b, 0x22, 0x0f, 0x72, 0x9c, 0xc9, 0xc6, 0x3e, 0x86, 0x11, 0x31, 0xd9, 0xac,
0x6f, 0x80, 0x44, 0x4c, 0x36, 0xfb, 0x0b, 0x1a, 0x6d, 0x58, 0xd2, 0x9e, 0x35, 0x19, 0x5c, 0xb9,
0x23, 0xb5, 0xde, 0xd3, 0x0f, 0x0e, 0x6f, 0x66, 0x59, 0xbe, 0xc9, 0x0e, 0xd4, 0xf4, 0x97, 0x51,
0x5e, 0x90, 0x7d, 0x43, 0x43, 0xe9, 0x6f, 0xca, 0x3e, 0xc8, 0x91, 0x03, 0x68, 0x26, 0xdf, 0x31,
0x54, 0x5b, 0x38, 0xeb, 0xed, 0xc7, 0xcd, 0x04, 0x32, 0xf6, 0xfa, 0x21, 0x5b, 0x17, 0xb1, 0x2f,
0xf5, 0x7a, 0x7e, 0xf2, 0x28, 0x8a, 0x7f, 0xc1, 0x57, 0x95, 0x96, 0xf5, 0xed, 0xe6, 0x7b, 0xb9,
0x07, 0x39, 0xb2, 0x07, 0xf5, 0xd8, 0x33, 0x5e, 0xb1, 0xbb, 0x2e, 0x89, 0x6e, 0xb6, 0x74, 0x5c,
0xa2, 0x9f, 0x87, 0xb0, 0x18, 0x0f, 0xd1, 0x50, 0x0d, 0xcb, 0x8c, 0x23, 0x51, 0xd3, 0x97, 0x1d,
0xd7, 0x41, 0x7e, 0x80, 0xdf, 0xa1, 0x97, 0xa1, 0x7c, 0x24, 0xfd, 0xdd, 0x72, 0x35, 0x67, 0xfa,
0x57, 0xbe, 0x8d, 0xc2, 0x5f, 0xcc, 0xe7, 0x78, 0xbf, 0xbe, 0x8f, 0x5f, 0x81, 0x95, 0xd1, 0x5c,
0x6c, 0xfe, 0x5f, 0xb5, 0x10, 0xb2, 0x87, 0x95, 0x8b, 0x6f, 0x70, 0x47, 0x9c, 0x3b, 0xf5, 0x5d,
0xee, 0x97, 0xb4, 0xa1, 0x8d, 0x6d, 0x10, 0x79, 0x62, 0x6b, 0xf0, 0x15, 0xcb, 0x22, 0x9f, 0x00,
0x44, 0x21, 0xb2, 0x24, 0x11, 0xa8, 0xa9, 0x36, 0x54, 0x46, 0x14, 0x6d, 0x07, 0xf7, 0xbb, 0x8a,
0x14, 0xd5, 0x8f, 0xe4, 0x78, 0xd0, 0x6a, 0xec, 0x48, 0x4e, 0x16, 0xf3, 0x21, 0x34, 0x0e, 0x3c,
0xef, 0xd9, 0x7c, 0xa6, 0xee, 0x59, 0xc4, 0xc3, 0x98, 0xf6, 0xed, 0xe0, 0x7c, 0x33, 0xd1, 0x2c,
0xd2, 0x86, 0x65, 0xc5, 0x22, 0xa2, 0x50, 0xd5, 0x38, 0x51, 0x8c, 0x31, 0x24, 0x0a, 0x78, 0x90,
0x23, 0x0f, 0xa1, 0xbe, 0x4b, 0x47, 0xfc, 0x99, 0x0d, 0x1e, 0x34, 0xb3, 0x12, 0x0b, 0xc0, 0xc0,
0x68, 0x9b, 0xcd, 0x46, 0x0c, 0x28, 0x59, 0x5c, 0x14, 0xb8, 0xa5, 0x9f, 0x19, 0xf1, 0xe8, 0xa7,
0x18, 0x8b, 0x4b, 0x05, 0x6f, 0x7d, 0x01, 0xcb, 0xa9, 0xd0, 0x28, 0xc5, 0xdd, 0xae, 0x0b, 0xa8,
0xda, 0xbc, 0x7b, 0x3d, 0x81, 0x28, 0xf7, 0x87, 0xd0, 0xc0, 0x27, 0x86, 0x4f, 0x28, 0x5e, 0x93,
0x4d, 0xbc, 0x31, 0xa5, 0xdf, 0xc1, 0x4d, 0xb2, 0x24, 0xcc, 0xf0, 0x84, 0x7f, 0x78, 0x44, 0xbb,
0x84, 0xaa, 0xe6, 0x35, 0x7d, 0x31, 0x56, 0xcd, 0x6b, 0xd6, 0x7d, 0xd7, 0xcf, 0xa0, 0xf6, 0x84,
0x86, 0xf2, 0x5a, 0xa7, 0x92, 0x8f, 0x12, 0xf7, 0x3c, 0x37, 0x33, 0x2e, 0xe3, 0x92, 0x8f, 0x79,
0x56, 0xf5, 0x44, 0xc1, 0xba, 0x56, 0x8b, 0x9e, 0x75, 0x29, 0x01, 0x67, 0xd2, 0x87, 0xf6, 0x50,
0x89, 0x6a, 0x78, 0xfa, 0x61, 0x1a, 0xd5, 0xf0, 0xac, 0x77, 0x4d, 0x7e, 0x80, 0x23, 0xa0, 0x5d,
0x24, 0x8d, 0x44, 0xb0, 0xe4, 0x9d, 0x53, 0xd5, 0x7c, 0x9d, 0xfc, 0x11, 0xc0, 0x20, 0xf4, 0x66,
0xbb, 0x36, 0x9d, 0x7a, 0x6e, 0xc4, 0x13, 0xa2, 0x2b, 0x8c, 0xd1, 0x46, 0xd4, 0xee, 0x31, 0x92,
0x2f, 0x35, 0xd9, 0x34, 0x36, 0x25, 0x72, 0xda, 0xaf, 0xbd, 0xe5, 0xa8, 0xba, 0x93, 0x71, 0xd3,
0x91, 0x33, 0x09, 0x88, 0x22, 0xcf, 0x94, 0xa4, 0x99, 0x0a, 0x6a, 0x53, 0x7b, 0x3d, 0x23, 0x4c,
0xed, 0x73, 0xa8, 0x46, 0x21, 0x3b, 0x1b, 0xd1, 0xab, 0x49, 0xb1, 0x00, 0x1f, 0xc5, 0xbd, 0xd3,
0xe1, 0x32, 0x3d, 0x58, 0xc1, 0xe6, 0xa8, 0xe3, 0x8f, 0x5f, 0xb4, 0x53, 0xdf, 0xcd, 0x49, 0xc7,
0xa9, 0xa8, 0xfd, 0x93, 0x15, 0x6d, 0xc1, 0xf6, 0x4f, 0xca, 0x6b, 0xaf, 0xf6, 0xcf, 0x75, 0x61,
0x18, 0x6a, 0xff, 0x5c, 0xef, 0xf0, 0xef, 0xc1, 0x4a, 0x86, 0xff, 0x9d, 0xbc, 0x21, 0x15, 0x9b,
0x6b, 0x7d, 0xf3, 0x9b, 0x99, 0x7e, 0x5a, 0x32, 0x84, 0x0d, 0xcc, 0xd3, 0x9e, 0x4c, 0x12, 0xee,
0xde, 0xd7, 0xb5, 0x0c, 0x19, 0x2e, 0xec, 0x98, 0x28, 0x93, 0x70, 0x63, 0xf7, 0xa0, 0x99, 0xf4,
0x94, 0x92, 0xeb, 0xc9, 0x37, 0xef, 0xc4, 0x44, 0xf6, 0xb4, 0x77, 0x95, 0x7c, 0xa1, 0xfc, 0xb5,
0x89, 0x36, 0xde, 0x89, 0xbe, 0xd6, 0x96, 0xe9, 0x5d, 0x56, 0xda, 0x40, 0xa6, 0xbb, 0x97, 0xfc,
0x22, 0x6c, 0x24, 0x57, 0xb4, 0x2c, 0xf9, 0x6e, 0xd6, 0x70, 0x5d, 0x2b, 0xca, 0xc5, 0x3b, 0xf4,
0x20, 0xc7, 0x18, 0xb1, 0xee, 0x55, 0x55, 0x0b, 0x29, 0xc3, 0xbd, 0xab, 0x16, 0x52, 0xa6, 0x1b,
0xf6, 0x08, 0x96, 0x12, 0x0e, 0x55, 0x25, 0x06, 0x67, 0xbb, 0x60, 0x95, 0x18, 0x7c, 0x9d, 0x1f,
0x76, 0x00, 0xcd, 0xa4, 0xab, 0x54, 0xcd, 0xf5, 0x35, 0xee, 0xd7, 0xcd, 0x3b, 0xd7, 0xe2, 0xe3,
0xcd, 0xd4, 0x9c, 0x8a, 0xb1, 0x66, 0xa6, 0x5d, 0xa1, 0xb1, 0x66, 0x66, 0xb8, 0x34, 0xb7, 0xdf,
0xf9, 0xa5, 0xef, 0x9c, 0x39, 0xe1, 0xf9, 0xfc, 0x64, 0x6b, 0xe4, 0x4d, 0xdf, 0x9f, 0x48, 0xab,
0x86, 0xb8, 0x77, 0xfe, 0xfe, 0xc4, 0x1d, 0xbf, 0xcf, 0x0b, 0x38, 0x59, 0x98, 0xf9, 0x5e, 0xe8,
0x7d, 0xf8, 0xff, 0x02, 0x00, 0x00, 0xff, 0xff, 0x2f, 0xed, 0xbd, 0x5e, 0x11, 0x8b, 0x00, 0x00,
}
// Reference imports to suppress errors if they are not otherwise used.
@ -13331,6 +13561,10 @@ type LightningClient interface {
//DeleteMacaroonID deletes the specified macaroon ID and invalidates all
//macaroons derived from that ID.
DeleteMacaroonID(ctx context.Context, in *DeleteMacaroonIDRequest, opts ...grpc.CallOption) (*DeleteMacaroonIDResponse, error)
// lncli: `listpermissions`
//ListPermissions lists all RPC method URIs and their required macaroon
//permissions to access them.
ListPermissions(ctx context.Context, in *ListPermissionsRequest, opts ...grpc.CallOption) (*ListPermissionsResponse, error)
}
type lightningClient struct {
@ -14115,6 +14349,15 @@ func (c *lightningClient) DeleteMacaroonID(ctx context.Context, in *DeleteMacaro
return out, nil
}
func (c *lightningClient) ListPermissions(ctx context.Context, in *ListPermissionsRequest, opts ...grpc.CallOption) (*ListPermissionsResponse, error) {
out := new(ListPermissionsResponse)
err := c.cc.Invoke(ctx, "/lnrpc.Lightning/ListPermissions", in, out, opts...)
if err != nil {
return nil, err
}
return out, nil
}
// LightningServer is the server API for Lightning service.
type LightningServer interface {
// lncli: `walletbalance`
@ -14463,6 +14706,10 @@ type LightningServer interface {
//DeleteMacaroonID deletes the specified macaroon ID and invalidates all
//macaroons derived from that ID.
DeleteMacaroonID(context.Context, *DeleteMacaroonIDRequest) (*DeleteMacaroonIDResponse, error)
// lncli: `listpermissions`
//ListPermissions lists all RPC method URIs and their required macaroon
//permissions to access them.
ListPermissions(context.Context, *ListPermissionsRequest) (*ListPermissionsResponse, error)
}
// UnimplementedLightningServer can be embedded to have forward compatible implementations.
@ -14643,6 +14890,9 @@ func (*UnimplementedLightningServer) ListMacaroonIDs(ctx context.Context, req *L
func (*UnimplementedLightningServer) DeleteMacaroonID(ctx context.Context, req *DeleteMacaroonIDRequest) (*DeleteMacaroonIDResponse, error) {
return nil, status.Errorf(codes.Unimplemented, "method DeleteMacaroonID not implemented")
}
func (*UnimplementedLightningServer) ListPermissions(ctx context.Context, req *ListPermissionsRequest) (*ListPermissionsResponse, error) {
return nil, status.Errorf(codes.Unimplemented, "method ListPermissions not implemented")
}
func RegisterLightningServer(s *grpc.Server, srv LightningServer) {
s.RegisterService(&_Lightning_serviceDesc, srv)
@ -15740,6 +15990,24 @@ func _Lightning_DeleteMacaroonID_Handler(srv interface{}, ctx context.Context, d
return interceptor(ctx, in, info, handler)
}
func _Lightning_ListPermissions_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
in := new(ListPermissionsRequest)
if err := dec(in); err != nil {
return nil, err
}
if interceptor == nil {
return srv.(LightningServer).ListPermissions(ctx, in)
}
info := &grpc.UnaryServerInfo{
Server: srv,
FullMethod: "/lnrpc.Lightning/ListPermissions",
}
handler := func(ctx context.Context, req interface{}) (interface{}, error) {
return srv.(LightningServer).ListPermissions(ctx, req.(*ListPermissionsRequest))
}
return interceptor(ctx, in, info, handler)
}
var _Lightning_serviceDesc = grpc.ServiceDesc{
ServiceName: "lnrpc.Lightning",
HandlerType: (*LightningServer)(nil),
@ -15932,6 +16200,10 @@ var _Lightning_serviceDesc = grpc.ServiceDesc{
MethodName: "DeleteMacaroonID",
Handler: _Lightning_DeleteMacaroonID_Handler,
},
{
MethodName: "ListPermissions",
Handler: _Lightning_ListPermissions_Handler,
},
},
Streams: []grpc.StreamDesc{
{

@ -1985,6 +1985,24 @@ func local_request_Lightning_DeleteMacaroonID_0(ctx context.Context, marshaler r
}
func request_Lightning_ListPermissions_0(ctx context.Context, marshaler runtime.Marshaler, client LightningClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {
var protoReq ListPermissionsRequest
var metadata runtime.ServerMetadata
msg, err := client.ListPermissions(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD))
return msg, metadata, err
}
func local_request_Lightning_ListPermissions_0(ctx context.Context, marshaler runtime.Marshaler, server LightningServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {
var protoReq ListPermissionsRequest
var metadata runtime.ServerMetadata
msg, err := server.ListPermissions(ctx, &protoReq)
return msg, metadata, err
}
// RegisterLightningHandlerServer registers the http handlers for service Lightning to "mux".
// UnaryRPC :call LightningServer directly.
// StreamingRPC :currently unsupported pending https://github.com/grpc/grpc-go/issues/906.
@ -2986,6 +3004,26 @@ func RegisterLightningHandlerServer(ctx context.Context, mux *runtime.ServeMux,
})
mux.Handle("GET", pattern_Lightning_ListPermissions_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {
ctx, cancel := context.WithCancel(req.Context())
defer cancel()
inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)
rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req)
if err != nil {
runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
return
}
resp, md, err := local_request_Lightning_ListPermissions_0(rctx, inboundMarshaler, server, req, pathParams)
ctx = runtime.NewServerMetadataContext(ctx, md)
if err != nil {
runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
return
}
forward_Lightning_ListPermissions_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)
})
return nil
}
@ -4127,6 +4165,26 @@ func RegisterLightningHandlerClient(ctx context.Context, mux *runtime.ServeMux,
})
mux.Handle("GET", pattern_Lightning_ListPermissions_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {
ctx, cancel := context.WithCancel(req.Context())
defer cancel()
inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)
rctx, err := runtime.AnnotateContext(ctx, mux, req)
if err != nil {
runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
return
}
resp, md, err := request_Lightning_ListPermissions_0(rctx, inboundMarshaler, client, req, pathParams)
ctx = runtime.NewServerMetadataContext(ctx, md)
if err != nil {
runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
return
}
forward_Lightning_ListPermissions_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)
})
return nil
}
@ -4240,6 +4298,8 @@ var (
pattern_Lightning_ListMacaroonIDs_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2}, []string{"v1", "macaroon", "ids"}, "", runtime.AssumeColonVerbOpt(true)))
pattern_Lightning_DeleteMacaroonID_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 1, 0, 4, 1, 5, 2}, []string{"v1", "macaroon", "root_key_id"}, "", runtime.AssumeColonVerbOpt(true)))
pattern_Lightning_ListPermissions_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2}, []string{"v1", "macaroon", "permissions"}, "", runtime.AssumeColonVerbOpt(true)))
)
var (
@ -4352,4 +4412,6 @@ var (
forward_Lightning_ListMacaroonIDs_0 = runtime.ForwardResponseMessage
forward_Lightning_DeleteMacaroonID_0 = runtime.ForwardResponseMessage
forward_Lightning_ListPermissions_0 = runtime.ForwardResponseMessage
)

@ -506,6 +506,13 @@ service Lightning {
*/
rpc DeleteMacaroonID (DeleteMacaroonIDRequest)
returns (DeleteMacaroonIDResponse);
/* lncli: `listpermissions`
ListPermissions lists all RPC method URIs and their required macaroon
permissions to access them.
*/
rpc ListPermissions (ListPermissionsRequest)
returns (ListPermissionsResponse);
}
message Utxo {
@ -3375,6 +3382,21 @@ message DeleteMacaroonIDResponse {
bool deleted = 1;
}
message MacaroonPermissionList {
// A list of macaroon permissions.
repeated MacaroonPermission permissions = 1;
}
message ListPermissionsRequest {
}
message ListPermissionsResponse {
/*
A map between all RPC method URIs and their required macaroon permissions to
access them.
*/
map<string, MacaroonPermissionList> method_permissions = 1;
}
message Failure {
enum FailureCode {
/*
@ -3537,3 +3559,14 @@ message ChannelUpdate {
*/
bytes extra_opaque_data = 12;
}
message MacaroonId {
bytes nonce = 1;
bytes storageId = 2;
repeated Op ops = 3;
}
message Op {
string entity = 1;
repeated string actions = 2;
}

@ -1456,6 +1456,29 @@
]
}
},
"/v1/macaroon/permissions": {
"get": {
"summary": "lncli: `listpermissions`\nListPermissions lists all RPC method URIs and their required macaroon\npermissions to access them.",
"operationId": "ListPermissions",
"responses": {
"200": {
"description": "A successful response.",
"schema": {
"$ref": "#/definitions/lnrpcListPermissionsResponse"
}
},
"default": {
"description": "An unexpected error response",
"schema": {
"$ref": "#/definitions/runtimeError"
}
}
},
"tags": [
"Lightning"
]
}
},
"/v1/macaroon/{root_key_id}": {
"delete": {
"summary": "lncli: `deletemacaroonid`\nDeleteMacaroonID deletes the specified macaroon ID and invalidates all\nmacaroons derived from that ID.",
@ -4220,6 +4243,18 @@
}
}
},
"lnrpcListPermissionsResponse": {
"type": "object",
"properties": {
"method_permissions": {
"type": "object",
"additionalProperties": {
"$ref": "#/definitions/lnrpcMacaroonPermissionList"
},
"description": "A map between all RPC method URIs and their required macaroon permissions to\naccess them."
}
}
},
"lnrpcListUnspentResponse": {
"type": "object",
"properties": {
@ -4260,6 +4295,18 @@
}
}
},
"lnrpcMacaroonPermissionList": {
"type": "object",
"properties": {
"permissions": {
"type": "array",
"items": {
"$ref": "#/definitions/lnrpcMacaroonPermission"
},
"description": "A list of macaroon permissions."
}
}
},
"lnrpcMultiChanBackup": {
"type": "object",
"properties": {

@ -0,0 +1,516 @@
// +build rpctest
package itest
import (
"context"
"encoding/hex"
"sort"
"strconv"
"testing"
"github.com/lightningnetwork/lnd/lnrpc"
"github.com/lightningnetwork/lnd/lntest"
"github.com/lightningnetwork/lnd/macaroons"
"github.com/stretchr/testify/assert"
"github.com/stretchr/testify/require"
"gopkg.in/macaroon.v2"
)
// testMacaroonAuthentication makes sure that if macaroon authentication is
// enabled on the gRPC interface, no requests with missing or invalid
// macaroons are allowed. Further, the specific access rights (read/write,
// entity based) and first-party caveats are tested as well.
func testMacaroonAuthentication(net *lntest.NetworkHarness, t *harnessTest) {
var (
infoReq = &lnrpc.GetInfoRequest{}
newAddrReq = &lnrpc.NewAddressRequest{
Type: AddrTypeWitnessPubkeyHash,
}
testNode = net.Alice
)
testCases := []struct {
name string
run func(ctxt context.Context, t *testing.T)
}{{
// First test: Make sure we get an error if we use no macaroons
// but try to connect to a node that has macaroon authentication
// enabled.
name: "no macaroon",
run: func(ctxt context.Context, t *testing.T) {
conn, err := testNode.ConnectRPC(false)
require.NoError(t, err)
defer func() { _ = conn.Close() }()
client := lnrpc.NewLightningClient(conn)
_, err = client.GetInfo(ctxt, infoReq)
require.Error(t, err)
require.Contains(t, err.Error(), "expected 1 macaroon")
},
}, {
// Second test: Ensure that an invalid macaroon also triggers an
// error.
name: "invalid macaroon",
run: func(ctxt context.Context, t *testing.T) {
invalidMac, _ := macaroon.New(
[]byte("dummy_root_key"), []byte("0"), "itest",
macaroon.LatestVersion,
)
cleanup, client := macaroonClient(
t, testNode, invalidMac,
)
defer cleanup()
_, err := client.GetInfo(ctxt, infoReq)
require.Error(t, err)
require.Contains(t, err.Error(), "cannot get macaroon")
},
}, {
// Third test: Try to access a write method with read-only
// macaroon.
name: "read only macaroon",
run: func(ctxt context.Context, t *testing.T) {
readonlyMac, err := testNode.ReadMacaroon(
testNode.ReadMacPath(), defaultTimeout,
)
require.NoError(t, err)
cleanup, client := macaroonClient(
t, testNode, readonlyMac,
)
defer cleanup()
_, err = client.NewAddress(ctxt, newAddrReq)
require.Error(t, err)
require.Contains(t, err.Error(), "permission denied")
},
}, {
// Fourth test: Check first-party caveat with timeout that
// expired 30 seconds ago.
name: "expired macaroon",
run: func(ctxt context.Context, t *testing.T) {
readonlyMac, err := testNode.ReadMacaroon(
testNode.ReadMacPath(), defaultTimeout,
)
require.NoError(t, err)
timeoutMac, err := macaroons.AddConstraints(
readonlyMac, macaroons.TimeoutConstraint(-30),
)
require.NoError(t, err)
cleanup, client := macaroonClient(
t, testNode, timeoutMac,
)
defer cleanup()
_, err = client.GetInfo(ctxt, infoReq)
require.Error(t, err)
require.Contains(t, err.Error(), "macaroon has expired")
},
}, {
// Fifth test: Check first-party caveat with invalid IP address.
name: "invalid IP macaroon",
run: func(ctxt context.Context, t *testing.T) {
readonlyMac, err := testNode.ReadMacaroon(
testNode.ReadMacPath(), defaultTimeout,
)
require.NoError(t, err)
invalidIpAddrMac, err := macaroons.AddConstraints(
readonlyMac, macaroons.IPLockConstraint(
"1.1.1.1",
),
)
require.NoError(t, err)
cleanup, client := macaroonClient(
t, testNode, invalidIpAddrMac,
)
defer cleanup()
_, err = client.GetInfo(ctxt, infoReq)
require.Error(t, err)
require.Contains(t, err.Error(), "different IP address")
},
}, {
// Sixth test: Make sure that if we do everything correct and
// send the admin macaroon with first-party caveats that we can
// satisfy, we get a correct answer.
name: "correct macaroon",
run: func(ctxt context.Context, t *testing.T) {
adminMac, err := testNode.ReadMacaroon(
testNode.AdminMacPath(), defaultTimeout,
)
require.NoError(t, err)
adminMac, err = macaroons.AddConstraints(
adminMac, macaroons.TimeoutConstraint(30),
macaroons.IPLockConstraint("127.0.0.1"),
)
require.NoError(t, err)
cleanup, client := macaroonClient(t, testNode, adminMac)
defer cleanup()
res, err := client.NewAddress(ctxt, newAddrReq)
require.NoError(t, err, "get new address")
assert.Contains(t, res.Address, "bcrt1")
},
}, {
// Seventh test: Bake a macaroon that can only access exactly
// two RPCs and make sure it works as expected.
name: "custom URI permissions",
run: func(ctxt context.Context, t *testing.T) {
entity := macaroons.PermissionEntityCustomURI
req := &lnrpc.BakeMacaroonRequest{
Permissions: []*lnrpc.MacaroonPermission{{
Entity: entity,
Action: "/lnrpc.Lightning/GetInfo",
}, {
Entity: entity,
Action: "/lnrpc.Lightning/List" +
"Permissions",
}},
}
bakeRes, err := testNode.BakeMacaroon(ctxt, req)
require.NoError(t, err)
// Create a connection that uses the custom macaroon.
customMacBytes, err := hex.DecodeString(
bakeRes.Macaroon,
)
require.NoError(t, err)
customMac := &macaroon.Macaroon{}
err = customMac.UnmarshalBinary(customMacBytes)
require.NoError(t, err)
cleanup, client := macaroonClient(
t, testNode, customMac,
)
defer cleanup()
// Call GetInfo which should succeed.
_, err = client.GetInfo(ctxt, infoReq)
require.NoError(t, err)
// Call ListPermissions which should also succeed.
permReq := &lnrpc.ListPermissionsRequest{}
permRes, err := client.ListPermissions(ctxt, permReq)
require.NoError(t, err)
require.Greater(
t, len(permRes.MethodPermissions), 10,
"permissions",
)
// Try NewAddress which should be denied.
_, err = client.NewAddress(ctxt, newAddrReq)
require.Error(t, err)
require.Contains(t, err.Error(), "permission denied")
},
}}
for _, tc := range testCases {
tc := tc
t.t.Run(tc.name, func(t *testing.T) {
t.Parallel()
ctxt, cancel := context.WithTimeout(
context.Background(), defaultTimeout,
)
defer cancel()
tc.run(ctxt, t)
})
}
}
// testBakeMacaroon checks that when creating macaroons, the permissions param
// in the request must be set correctly, and the baked macaroon has the intended
// permissions.
func testBakeMacaroon(net *lntest.NetworkHarness, t *harnessTest) {
var testNode = net.Alice
testCases := []struct {
name string
run func(ctxt context.Context, t *testing.T,
adminClient lnrpc.LightningClient)
}{{
// First test: when the permission list is empty in the request,
// an error should be returned.
name: "no permission list",
run: func(ctxt context.Context, t *testing.T,
adminClient lnrpc.LightningClient) {
req := &lnrpc.BakeMacaroonRequest{}
_, err := adminClient.BakeMacaroon(ctxt, req)
require.Error(t, err)
assert.Contains(
t, err.Error(), "permission list cannot be "+
"empty",
)
},
}, {
// Second test: when the action in the permission list is not
// valid, an error should be returned.
name: "invalid permission list",
run: func(ctxt context.Context, t *testing.T,
adminClient lnrpc.LightningClient) {
req := &lnrpc.BakeMacaroonRequest{
Permissions: []*lnrpc.MacaroonPermission{{
Entity: "macaroon",
Action: "invalid123",
}},
}
_, err := adminClient.BakeMacaroon(ctxt, req)
require.Error(t, err)
assert.Contains(
t, err.Error(), "invalid permission action",
)
},
}, {
// Third test: when the entity in the permission list is not
// valid, an error should be returned.
name: "invalid permission entity",
run: func(ctxt context.Context, t *testing.T,
adminClient lnrpc.LightningClient) {
req := &lnrpc.BakeMacaroonRequest{
Permissions: []*lnrpc.MacaroonPermission{{
Entity: "invalid123",
Action: "read",
}},
}
_, err := adminClient.BakeMacaroon(ctxt, req)
require.Error(t, err)
assert.Contains(
t, err.Error(), "invalid permission entity",
)
},
}, {
// Fourth test: check that when no root key ID is specified, the
// default root keyID is used.
name: "default root key ID",
run: func(ctxt context.Context, t *testing.T,
adminClient lnrpc.LightningClient) {
req := &lnrpc.BakeMacaroonRequest{
Permissions: []*lnrpc.MacaroonPermission{{
Entity: "macaroon",
Action: "read",
}},
}
_, err := adminClient.BakeMacaroon(ctxt, req)
require.NoError(t, err)
listReq := &lnrpc.ListMacaroonIDsRequest{}
resp, err := adminClient.ListMacaroonIDs(ctxt, listReq)
require.NoError(t, err)
require.Equal(t, resp.RootKeyIds[0], uint64(0))
},
}, {
// Fifth test: create a macaroon use a non-default root key ID.
name: "custom root key ID",
run: func(ctxt context.Context, t *testing.T,
adminClient lnrpc.LightningClient) {
rootKeyID := uint64(4200)
req := &lnrpc.BakeMacaroonRequest{
RootKeyId: rootKeyID,
Permissions: []*lnrpc.MacaroonPermission{{
Entity: "macaroon",
Action: "read",
}},
}
_, err := adminClient.BakeMacaroon(ctxt, req)
require.NoError(t, err)
listReq := &lnrpc.ListMacaroonIDsRequest{}
resp, err := adminClient.ListMacaroonIDs(ctxt, listReq)
require.NoError(t, err)
// the ListMacaroonIDs should give a list of two IDs,
// the default ID 0, and the newly created ID. The
// returned response is sorted to guarantee the order so
// that we can compare them one by one.
sort.Slice(resp.RootKeyIds, func(i, j int) bool {
return resp.RootKeyIds[i] < resp.RootKeyIds[j]
})
require.Equal(t, resp.RootKeyIds[0], uint64(0))
require.Equal(t, resp.RootKeyIds[1], rootKeyID)
},
}, {
// Sixth test: check the baked macaroon has the intended
// permissions. It should succeed in reading, and fail to write
// a macaroon.
name: "custom macaroon permissions",
run: func(ctxt context.Context, t *testing.T,
adminClient lnrpc.LightningClient) {
rootKeyID := uint64(4200)
req := &lnrpc.BakeMacaroonRequest{
RootKeyId: rootKeyID,
Permissions: []*lnrpc.MacaroonPermission{{
Entity: "macaroon",
Action: "read",
}},
}
bakeResp, err := adminClient.BakeMacaroon(ctxt, req)
require.NoError(t, err)
newMac, err := readMacaroonFromHex(bakeResp.Macaroon)
require.NoError(t, err)
cleanup, readOnlyClient := macaroonClient(
t, testNode, newMac,
)
defer cleanup()
// BakeMacaroon requires a write permission, so this
// call should return an error.
_, err = readOnlyClient.BakeMacaroon(ctxt, req)
require.Error(t, err)
require.Contains(t, err.Error(), "permission denied")
// ListMacaroon requires a read permission, so this call
// should succeed.
listReq := &lnrpc.ListMacaroonIDsRequest{}
_, err = readOnlyClient.ListMacaroonIDs(ctxt, listReq)
require.NoError(t, err)
// Current macaroon can only work on entity macaroon, so
// a GetInfo request will fail.
infoReq := &lnrpc.GetInfoRequest{}
_, err = readOnlyClient.GetInfo(ctxt, infoReq)
require.Error(t, err)
require.Contains(t, err.Error(), "permission denied")
},
}}
for _, tc := range testCases {
tc := tc
t.t.Run(tc.name, func(t *testing.T) {
t.Parallel()
ctxt, cancel := context.WithTimeout(
context.Background(), defaultTimeout,
)
defer cancel()
adminMac, err := testNode.ReadMacaroon(
testNode.AdminMacPath(), defaultTimeout,
)
require.NoError(t, err)
cleanup, client := macaroonClient(t, testNode, adminMac)
defer cleanup()
tc.run(ctxt, t, client)
})
}
}
// testDeleteMacaroonID checks that when deleting a macaroon ID, it removes the
// specified ID and invalidates all macaroons derived from the key with that ID.
// Also, it checks deleting the reserved marcaroon ID, DefaultRootKeyID or is
// forbidden.
func testDeleteMacaroonID(net *lntest.NetworkHarness, t *harnessTest) {
var (
ctxb = context.Background()
testNode = net.Alice
)
ctxt, cancel := context.WithTimeout(ctxb, defaultTimeout)
defer cancel()
// Use admin macaroon to create a connection.
adminMac, err := testNode.ReadMacaroon(
testNode.AdminMacPath(), defaultTimeout,
)
require.NoError(t.t, err)
cleanup, client := macaroonClient(t.t, testNode, adminMac)
defer cleanup()
// Record the number of macaroon IDs before creation.
listReq := &lnrpc.ListMacaroonIDsRequest{}
listResp, err := client.ListMacaroonIDs(ctxt, listReq)
require.NoError(t.t, err)
numMacIDs := len(listResp.RootKeyIds)
// Create macaroons for testing.
rootKeyIDs := []uint64{1, 2, 3}
macList := make([]string, 0, len(rootKeyIDs))
for _, id := range rootKeyIDs {
req := &lnrpc.BakeMacaroonRequest{
RootKeyId: id,
Permissions: []*lnrpc.MacaroonPermission{{
Entity: "macaroon",
Action: "read",
}},
}
resp, err := client.BakeMacaroon(ctxt, req)
require.NoError(t.t, err)
macList = append(macList, resp.Macaroon)
}
// Check that the creation is successful.
listReq = &lnrpc.ListMacaroonIDsRequest{}
listResp, err = client.ListMacaroonIDs(ctxt, listReq)
require.NoError(t.t, err)
// The number of macaroon IDs should be increased by len(rootKeyIDs).
require.Equal(t.t, numMacIDs+len(rootKeyIDs), len(listResp.RootKeyIds))
// First test: check deleting the DefaultRootKeyID returns an error.
defaultID, _ := strconv.ParseUint(
string(macaroons.DefaultRootKeyID), 10, 64,
)
req := &lnrpc.DeleteMacaroonIDRequest{
RootKeyId: defaultID,
}
_, err = client.DeleteMacaroonID(ctxt, req)
require.Error(t.t, err)
require.Contains(
t.t, err.Error(), macaroons.ErrDeletionForbidden.Error(),
)
// Second test: check deleting the customized ID returns success.
req = &lnrpc.DeleteMacaroonIDRequest{
RootKeyId: rootKeyIDs[0],
}
resp, err := client.DeleteMacaroonID(ctxt, req)
require.NoError(t.t, err)
require.True(t.t, resp.Deleted)
// Check that the deletion is successful.
listReq = &lnrpc.ListMacaroonIDsRequest{}
listResp, err = client.ListMacaroonIDs(ctxt, listReq)
require.NoError(t.t, err)
// The number of macaroon IDs should be decreased by 1.
require.Equal(t.t, numMacIDs+len(rootKeyIDs)-1, len(listResp.RootKeyIds))
// Check that the deleted macaroon can no longer access macaroon:read.
deletedMac, err := readMacaroonFromHex(macList[0])
require.NoError(t.t, err)
cleanup, client = macaroonClient(t.t, testNode, deletedMac)
defer cleanup()
// Because the macaroon is deleted, it will be treated as an invalid one.
listReq = &lnrpc.ListMacaroonIDsRequest{}
_, err = client.ListMacaroonIDs(ctxt, listReq)
require.Error(t.t, err)
require.Contains(t.t, err.Error(), "cannot get macaroon")
}
// readMacaroonFromHex loads a macaroon from a hex string.
func readMacaroonFromHex(macHex string) (*macaroon.Macaroon, error) {
macBytes, err := hex.DecodeString(macHex)
if err != nil {
return nil, err
}
mac := &macaroon.Macaroon{}
if err := mac.UnmarshalBinary(macBytes); err != nil {
return nil, err
}
return mac, nil
}
func macaroonClient(t *testing.T, testNode *lntest.HarnessNode,
mac *macaroon.Macaroon) (func(), lnrpc.LightningClient) {
conn, err := testNode.ConnectRPCWithMacaroon(mac)
require.NoError(t, err, "connect to alice")
cleanup := func() {
err := conn.Close()
require.NoError(t, err, "close")
}
return cleanup, lnrpc.NewLightningClient(conn)
}

@ -208,7 +208,7 @@
<time> [ERR] RPCS: WS: error closing upgraded conn: write tcp4 <ip>-><ip>: write: connection reset by peer
<time> [ERR] NTFN: chain notifier shutting down
<time> [ERR] NTFN: Failed getting UTXO: get utxo request cancelled
<time> [ERR] RPCS: [/lnrpc.Lightning/BakeMacaroon]: invalid permission action. supported actions are [read write generate], supported entities are [onchain offchain address message peers info invoices signer macaroon]
<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]
<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]
<time> [ERR] RPCS: [/lnrpc.Lightning/BakeMacaroon]: invalid permission action. 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/DeleteMacaroonID]: the specified ID cannot be deleted

@ -1,476 +0,0 @@
// +build rpctest
package itest
import (
"context"
"encoding/hex"
"sort"
"strconv"
"strings"
"github.com/lightningnetwork/lnd/lnrpc"
"github.com/lightningnetwork/lnd/lntest"
"github.com/lightningnetwork/lnd/macaroons"
"gopkg.in/macaroon.v2"
)
// errContains is a helper function that returns true if a string is contained
// in the message of an error.
func errContains(err error, str string) bool {
return strings.Contains(err.Error(), str)
}
// testMacaroonAuthentication makes sure that if macaroon authentication is
// enabled on the gRPC interface, no requests with missing or invalid
// macaroons are allowed. Further, the specific access rights (read/write,
// entity based) and first-party caveats are tested as well.
func testMacaroonAuthentication(net *lntest.NetworkHarness, t *harnessTest) {
var (
ctxb = context.Background()
infoReq = &lnrpc.GetInfoRequest{}
newAddrReq = &lnrpc.NewAddressRequest{
Type: AddrTypeWitnessPubkeyHash,
}
testNode = net.Alice
)
// First test: Make sure we get an error if we use no macaroons but try
// to connect to a node that has macaroon authentication enabled.
conn, err := testNode.ConnectRPC(false)
if err != nil {
t.Fatalf("unable to connect to alice: %v", err)
}
defer conn.Close()
ctxt, cancel := context.WithTimeout(ctxb, defaultTimeout)
defer cancel()
noMacConnection := lnrpc.NewLightningClient(conn)
_, err = noMacConnection.GetInfo(ctxt, infoReq)
if err == nil || !errContains(err, "expected 1 macaroon") {
t.Fatalf("expected to get an error when connecting without " +
"macaroons")
}
// Second test: Ensure that an invalid macaroon also triggers an error.
invalidMac, _ := macaroon.New(
[]byte("dummy_root_key"), []byte("0"), "itest",
macaroon.LatestVersion,
)
conn, err = testNode.ConnectRPCWithMacaroon(invalidMac)
if err != nil {
t.Fatalf("unable to connect to alice: %v", err)
}
defer conn.Close()
ctxt, cancel = context.WithTimeout(ctxb, defaultTimeout)
defer cancel()
invalidMacConnection := lnrpc.NewLightningClient(conn)
_, err = invalidMacConnection.GetInfo(ctxt, infoReq)
if err == nil || !errContains(err, "cannot get macaroon") {
t.Fatalf("expected to get an error when connecting with an " +
"invalid macaroon")
}
// Third test: Try to access a write method with read-only macaroon.
readonlyMac, err := testNode.ReadMacaroon(
testNode.ReadMacPath(), defaultTimeout,
)
if err != nil {
t.Fatalf("unable to read readonly.macaroon from node: %v", err)
}
conn, err = testNode.ConnectRPCWithMacaroon(readonlyMac)
if err != nil {
t.Fatalf("unable to connect to alice: %v", err)
}
defer conn.Close()
ctxt, cancel = context.WithTimeout(ctxb, defaultTimeout)
defer cancel()
readonlyMacConnection := lnrpc.NewLightningClient(conn)
_, err = readonlyMacConnection.NewAddress(ctxt, newAddrReq)
if err == nil || !errContains(err, "permission denied") {
t.Fatalf("expected to get an error when connecting to " +
"write method with read-only macaroon")
}
// Fourth test: Check first-party caveat with timeout that expired
// 30 seconds ago.
timeoutMac, err := macaroons.AddConstraints(
readonlyMac, macaroons.TimeoutConstraint(-30),
)
if err != nil {
t.Fatalf("unable to add constraint to readonly macaroon: %v",
err)
}
conn, err = testNode.ConnectRPCWithMacaroon(timeoutMac)
if err != nil {
t.Fatalf("unable to connect to alice: %v", err)
}
defer conn.Close()
ctxt, cancel = context.WithTimeout(ctxb, defaultTimeout)
defer cancel()
timeoutMacConnection := lnrpc.NewLightningClient(conn)
_, err = timeoutMacConnection.GetInfo(ctxt, infoReq)
if err == nil || !errContains(err, "macaroon has expired") {
t.Fatalf("expected to get an error when connecting with an " +
"invalid macaroon")
}
// Fifth test: Check first-party caveat with invalid IP address.
invalidIpAddrMac, err := macaroons.AddConstraints(
readonlyMac, macaroons.IPLockConstraint("1.1.1.1"),
)
if err != nil {
t.Fatalf("unable to add constraint to readonly macaroon: %v",
err)
}
conn, err = testNode.ConnectRPCWithMacaroon(invalidIpAddrMac)
if err != nil {
t.Fatalf("unable to connect to alice: %v", err)
}
defer conn.Close()
ctxt, cancel = context.WithTimeout(ctxb, defaultTimeout)
defer cancel()
invalidIpAddrMacConnection := lnrpc.NewLightningClient(conn)
_, err = invalidIpAddrMacConnection.GetInfo(ctxt, infoReq)
if err == nil || !errContains(err, "different IP address") {
t.Fatalf("expected to get an error when connecting with an " +
"invalid macaroon")
}
// Sixth test: Make sure that if we do everything correct and send
// the admin macaroon with first-party caveats that we can satisfy,
// we get a correct answer.
adminMac, err := testNode.ReadMacaroon(
testNode.AdminMacPath(), defaultTimeout,
)
if err != nil {
t.Fatalf("unable to read admin.macaroon from node: %v", err)
}
adminMac, err = macaroons.AddConstraints(
adminMac, macaroons.TimeoutConstraint(30),
macaroons.IPLockConstraint("127.0.0.1"),
)
if err != nil {
t.Fatalf("unable to add constraints to admin macaroon: %v", err)
}
conn, err = testNode.ConnectRPCWithMacaroon(adminMac)
if err != nil {
t.Fatalf("unable to connect to alice: %v", err)
}
defer conn.Close()
ctxt, cancel = context.WithTimeout(ctxb, defaultTimeout)
defer cancel()
adminMacConnection := lnrpc.NewLightningClient(conn)
res, err := adminMacConnection.NewAddress(ctxt, newAddrReq)
if err != nil {
t.Fatalf("unable to get new address with valid macaroon: %v",
err)
}
if !strings.HasPrefix(res.Address, "bcrt1") {
t.Fatalf("returned address was not a regtest address")
}
}
// testBakeMacaroon checks that when creating macaroons, the permissions param
// in the request must be set correctly, and the baked macaroon has the intended
// permissions.
func testBakeMacaroon(net *lntest.NetworkHarness, t *harnessTest) {
var (
ctxb = context.Background()
req = &lnrpc.BakeMacaroonRequest{}
testNode = net.Alice
)
// First test: when the permission list is empty in the request, an error
// should be returned.
adminMac, err := testNode.ReadMacaroon(
testNode.AdminMacPath(), defaultTimeout,
)
if err != nil {
t.Fatalf("unable to read admin.macaroon from node: %v", err)
}
conn, err := testNode.ConnectRPCWithMacaroon(adminMac)
if err != nil {
t.Fatalf("unable to connect to alice: %v", err)
}
defer conn.Close()
ctxt, cancel := context.WithTimeout(ctxb, defaultTimeout)
defer cancel()
adminMacConnection := lnrpc.NewLightningClient(conn)
_, err = adminMacConnection.BakeMacaroon(ctxt, req)
if err == nil || !errContains(err, "permission list cannot be empty") {
t.Fatalf("expected an error, got %v", err)
}
// Second test: when the action in the permission list is not valid,
// an error should be returned.
req = &lnrpc.BakeMacaroonRequest{
Permissions: []*lnrpc.MacaroonPermission{
{
Entity: "macaroon",
Action: "invalid123",
},
},
}
_, err = adminMacConnection.BakeMacaroon(ctxt, req)
if err == nil || !errContains(err, "invalid permission action") {
t.Fatalf("expected an error, got %v", err)
}
// Third test: when the entity in the permission list is not valid,
// an error should be returned.
req = &lnrpc.BakeMacaroonRequest{
Permissions: []*lnrpc.MacaroonPermission{
{
Entity: "invalid123",
Action: "read",
},
},
}
_, err = adminMacConnection.BakeMacaroon(ctxt, req)
if err == nil || !errContains(err, "invalid permission entity") {
t.Fatalf("expected an error, got %v", err)
}
// Fourth test: check that when no root key ID is specified, the default
// root key ID is used.
req = &lnrpc.BakeMacaroonRequest{
Permissions: []*lnrpc.MacaroonPermission{
{
Entity: "macaroon",
Action: "read",
},
},
}
_, err = adminMacConnection.BakeMacaroon(ctxt, req)
if err != nil {
t.Fatalf("expected no error, got %v", err)
}
listReq := &lnrpc.ListMacaroonIDsRequest{}
resp, err := adminMacConnection.ListMacaroonIDs(ctxt, listReq)
if err != nil {
t.Fatalf("expected no error, got %v", err)
}
if resp.RootKeyIds[0] != 0 {
t.Fatalf("expected ID to be 0, found: %v", resp.RootKeyIds)
}
// Fifth test: create a macaroon use a non-default root key ID.
rootKeyID := uint64(4200)
req = &lnrpc.BakeMacaroonRequest{
RootKeyId: rootKeyID,
Permissions: []*lnrpc.MacaroonPermission{
{
Entity: "macaroon",
Action: "read",
},
},
}
bakeResp, err := adminMacConnection.BakeMacaroon(ctxt, req)
if err != nil {
t.Fatalf("expected no error, got %v", err)
}
listReq = &lnrpc.ListMacaroonIDsRequest{}
resp, err = adminMacConnection.ListMacaroonIDs(ctxt, listReq)
if err != nil {
t.Fatalf("expected no error, got %v", err)
}
// the ListMacaroonIDs should give a list of two IDs, the default ID 0, and
// the newly created ID. The returned response is sorted to guarantee the
// order so that we can compare them one by one.
sort.Slice(resp.RootKeyIds, func(i, j int) bool {
return resp.RootKeyIds[i] < resp.RootKeyIds[j]
})
if resp.RootKeyIds[0] != 0 {
t.Fatalf("expected ID to be %v, found: %v", 0, resp.RootKeyIds[0])
}
if resp.RootKeyIds[1] != rootKeyID {
t.Fatalf(
"expected ID to be %v, found: %v",
rootKeyID, resp.RootKeyIds[1],
)
}
// Sixth test: check the baked macaroon has the intended permissions. It
// should succeed in reading, and fail to write a macaroon.
newMac, err := readMacaroonFromHex(bakeResp.Macaroon)
if err != nil {
t.Fatalf("failed to load macaroon from bytes, error: %v", err)
}
conn, err = testNode.ConnectRPCWithMacaroon(newMac)
if err != nil {
t.Fatalf("unable to connect to alice: %v", err)
}
defer conn.Close()
ctxt, cancel = context.WithTimeout(ctxb, defaultTimeout)
defer cancel()
newMacConnection := lnrpc.NewLightningClient(conn)
// BakeMacaroon requires a write permission, so this call should return an
// error.
_, err = newMacConnection.BakeMacaroon(ctxt, req)
if err == nil || !errContains(err, "permission denied") {
t.Fatalf("expected an error, got %v", err)
}
// ListMacaroon requires a read permission, so this call should succeed.
listReq = &lnrpc.ListMacaroonIDsRequest{}
resp, err = newMacConnection.ListMacaroonIDs(ctxt, listReq)
if err != nil {
t.Fatalf("expected no error, got %v", err)
}
// Current macaroon can only work on entity macaroon, so a GetInfo request
// will fail.
infoReq := &lnrpc.GetInfoRequest{}
_, err = newMacConnection.GetInfo(ctxt, infoReq)
if err == nil || !errContains(err, "permission denied") {
t.Fatalf("expected error not returned, got %v", err)
}
}
// testDeleteMacaroonID checks that when deleting a macaroon ID, it removes the
// specified ID and invalidates all macaroons derived from the key with that ID.
// Also, it checks deleting the reserved marcaroon ID, DefaultRootKeyID or is
// forbidden.
func testDeleteMacaroonID(net *lntest.NetworkHarness, t *harnessTest) {
var (
ctxb = context.Background()
testNode = net.Alice
)
// Use admin macaroon to create a connection.
adminMac, err := testNode.ReadMacaroon(
testNode.AdminMacPath(), defaultTimeout,
)
if err != nil {
t.Fatalf("unable to read admin.macaroon from node: %v", err)
}
conn, err := testNode.ConnectRPCWithMacaroon(adminMac)
if err != nil {
t.Fatalf("unable to connect to alice: %v", err)
}
defer conn.Close()
ctxt, cancel := context.WithTimeout(ctxb, defaultTimeout)
defer cancel()
adminMacConnection := lnrpc.NewLightningClient(conn)
// Record the number of macaroon IDs before creation.
listReq := &lnrpc.ListMacaroonIDsRequest{}
listResp, err := adminMacConnection.ListMacaroonIDs(ctxt, listReq)
if err != nil {
t.Fatalf("expected no error, got %v", err)
}
numMacIDs := len(listResp.RootKeyIds)
// Create macaroons for testing.
rootKeyIDs := []uint64{1, 2, 3}
macList := []string{}
for _, id := range rootKeyIDs {
req := &lnrpc.BakeMacaroonRequest{
RootKeyId: id,
Permissions: []*lnrpc.MacaroonPermission{
{
Entity: "macaroon",
Action: "read",
},
},
}
resp, err := adminMacConnection.BakeMacaroon(ctxt, req)
if err != nil {
t.Fatalf("expected no error, got %v", err)
}
macList = append(macList, resp.Macaroon)
}
// Check that the creation is successful.
listReq = &lnrpc.ListMacaroonIDsRequest{}
listResp, err = adminMacConnection.ListMacaroonIDs(ctxt, listReq)
if err != nil {
t.Fatalf("expected no error, got %v", err)
}
// The number of macaroon IDs should be increased by len(rootKeyIDs)
if len(listResp.RootKeyIds) != numMacIDs+len(rootKeyIDs) {
t.Fatalf(
"expected to have %v ids, found: %v",
numMacIDs+len(rootKeyIDs), len(listResp.RootKeyIds),
)
}
// First test: check deleting the DefaultRootKeyID returns an error.
defaultID, _ := strconv.ParseUint(
string(macaroons.DefaultRootKeyID), 10, 64,
)
req := &lnrpc.DeleteMacaroonIDRequest{
RootKeyId: defaultID,
}
_, err = adminMacConnection.DeleteMacaroonID(ctxt, req)
if err == nil || !errContains(err, macaroons.ErrDeletionForbidden.Error()) {
t.Fatalf("expected an error, got %v", err)
}
// Second test: check deleting the customized ID returns success.
req = &lnrpc.DeleteMacaroonIDRequest{
RootKeyId: rootKeyIDs[0],
}
resp, err := adminMacConnection.DeleteMacaroonID(ctxt, req)
if err != nil {
t.Fatalf("expected no error, got %v", err)
}
if resp.Deleted != true {
t.Fatalf("expected the ID to be deleted")
}
// Check that the deletion is successful.
listReq = &lnrpc.ListMacaroonIDsRequest{}
listResp, err = adminMacConnection.ListMacaroonIDs(ctxt, listReq)
if err != nil {
t.Fatalf("expected no error, got %v", err)
}
// The number of macaroon IDs should be decreased by 1.
if len(listResp.RootKeyIds) != numMacIDs+len(rootKeyIDs)-1 {
t.Fatalf(
"expected to have %v ids, found: %v",
numMacIDs+len(rootKeyIDs)-1, len(listResp.RootKeyIds),
)
}
// Check that the deleted macaroon can no longer access macaroon:read.
deletedMac, err := readMacaroonFromHex(macList[0])
if err != nil {
t.Fatalf("failed to load macaroon from bytes, error: %v", err)
}
conn, err = testNode.ConnectRPCWithMacaroon(deletedMac)
if err != nil {
t.Fatalf("unable to connect to alice: %v", err)
}
defer conn.Close()
ctxt, cancel = context.WithTimeout(ctxb, defaultTimeout)
defer cancel()
deletedMacConnection := lnrpc.NewLightningClient(conn)
// Because the macaroon is deleted, it will be treated as an invalid one.
listReq = &lnrpc.ListMacaroonIDsRequest{}
_, err = deletedMacConnection.ListMacaroonIDs(ctxt, listReq)
if err == nil || !errContains(err, "cannot get macaroon") {
t.Fatalf("expected error not returned, got %v", err)
}
}
// readMacaroonFromHex loads a macaroon from a hex string.
func readMacaroonFromHex(macHex string) (*macaroon.Macaroon, error) {
macBytes, err := hex.DecodeString(macHex)
if err != nil {
return nil, err
}
mac := &macaroon.Macaroon{}
if err := mac.UnmarshalBinary(macBytes); err != nil {
return nil, err
}
return mac, nil
}

@ -100,8 +100,18 @@ key `0` would be created with the following command:
`lncli bakemacaroon peers:read peers:write`
A full and up-to-date list of available entity/action pairs can be found by
looking at the `rpcserver.go` in the root folder of the project.
For even more fine-grained permission control, it is also possible to specify
single RPC method URIs that are allowed to be accessed by a macaroon. This can
be achieved by passing `uri:<methodURI>` pairs to `bakemacaroon`, for example:
`lncli bakemacaroon uri:/lnrpc.Lightning/GetInfo uri:/verrpc.Versioner/GetVersion`
The macaroon created by this call would only be allowed to call the `GetInfo` and
`GetVersion` methods instead of all methods that have similar permissions (like
`info:read` for example).
A full list of available entity/action pairs and RPC method URIs can be queried
by using the `lncli listpermissions` command.
### Upgrading from v0.8.0-beta or earlier

@ -27,6 +27,15 @@ var (
// ErrDeletionForbidden is used when attempting to delete the
// DefaultRootKeyID or the encryptedKeyID.
ErrDeletionForbidden = fmt.Errorf("the specified ID cannot be deleted")
// PermissionEntityCustomURI is a special entity name for a permission
// that does not describe an entity:action pair but instead specifies a
// specific URI that needs to be granted access to. This can be used for
// more fine-grained permissions where a macaroon only grants access to
// certain methods instead of a whole list of methods that define the
// same entity:action pairs. For example: uri:/lnrpc.Lightning/GetInfo
// only gives access to the GetInfo call.
PermissionEntityCustomURI = "uri"
)
// Service encapsulates bakery.Bakery and adds a Close() method that zeroes the
@ -118,12 +127,15 @@ func (svc *Service) UnaryServerInterceptor(
info *grpc.UnaryServerInfo,
handler grpc.UnaryHandler) (interface{}, error) {
if _, ok := permissionMap[info.FullMethod]; !ok {
uriPermissions, ok := permissionMap[info.FullMethod]
if !ok {
return nil, fmt.Errorf("%s: unknown permissions "+
"required for method", info.FullMethod)
}
err := svc.ValidateMacaroon(ctx, permissionMap[info.FullMethod])
err := svc.ValidateMacaroon(
ctx, uriPermissions, info.FullMethod,
)
if err != nil {
return nil, err
}
@ -140,13 +152,14 @@ func (svc *Service) StreamServerInterceptor(
return func(srv interface{}, ss grpc.ServerStream,
info *grpc.StreamServerInfo, handler grpc.StreamHandler) error {
if _, ok := permissionMap[info.FullMethod]; !ok {
uriPermissions, ok := permissionMap[info.FullMethod]
if !ok {
return fmt.Errorf("%s: unknown permissions required "+
"for method", info.FullMethod)
}
err := svc.ValidateMacaroon(
ss.Context(), permissionMap[info.FullMethod],
ss.Context(), uriPermissions, info.FullMethod,
)
if err != nil {
return err
@ -161,7 +174,7 @@ func (svc *Service) StreamServerInterceptor(
// expect a macaroon to be encoded as request metadata using the key
// "macaroon".
func (svc *Service) ValidateMacaroon(ctx context.Context,
requiredPermissions []bakery.Op) error {
requiredPermissions []bakery.Op, fullMethod string) error {
// Get macaroon bytes from context and unmarshal into macaroon.
md, ok := metadata.FromIncomingContext(ctx)
@ -190,6 +203,20 @@ func (svc *Service) ValidateMacaroon(ctx context.Context,
// the expiration time and IP address and return the result.
authChecker := svc.Checker.Auth(macaroon.Slice{mac})
_, err = authChecker.Allow(ctx, requiredPermissions...)
// If the macaroon contains broad permissions and checks out, we're
// done.
if err == nil {
return nil
}
// To also allow the special permission of "uri:<FullMethod>" to be a
// valid permission, we need to check it manually in case there is no
// broader scope permission defined.
_, err = authChecker.Allow(ctx, bakery.Op{
Entity: PermissionEntityCustomURI,
Action: fullMethod,
})
return err
}

@ -21,6 +21,10 @@ var (
Entity: "testEntity",
Action: "read",
}
testOperationURI = bakery.Op{
Entity: macaroons.PermissionEntityCustomURI,
Action: "SomeMethod",
}
defaultPw = []byte("hello")
)
@ -125,6 +129,7 @@ func TestValidateMacaroon(t *testing.T) {
// Then, create a new macaroon that we can serialize.
macaroon, err := service.NewMacaroon(
context.TODO(), macaroons.DefaultRootKeyID, testOperation,
testOperationURI,
)
if err != nil {
t.Fatalf("Error creating macaroon from service: %v", err)
@ -142,7 +147,18 @@ func TestValidateMacaroon(t *testing.T) {
mockContext := metadata.NewIncomingContext(context.Background(), md)
// Finally, validate the macaroon against the required permissions.
err = service.ValidateMacaroon(mockContext, []bakery.Op{testOperation})
err = service.ValidateMacaroon(
mockContext, []bakery.Op{testOperation}, "FooMethod",
)
if err != nil {
t.Fatalf("Error validating the macaroon: %v", err)
}
// If the macaroon has the method specific URI permission, the list of
// required entity/action pairs is irrelevant.
err = service.ValidateMacaroon(
mockContext, []bakery.Op{{Entity: "irrelevant"}}, "SomeMethod",
)
if err != nil {
t.Fatalf("Error validating the macaroon: %v", err)
}

@ -193,6 +193,7 @@ var (
validEntities = []string{
"onchain", "offchain", "address", "message",
"peers", "info", "invoices", "signer", "macaroon",
macaroons.PermissionEntityCustomURI,
}
// If the --no-macaroons flag is used to start lnd, the macaroon service
@ -452,6 +453,10 @@ func mainRPCServerPermissions() map[string][]bakery.Op {
Entity: "macaroon",
Action: "write",
}},
"/lnrpc.Lightning/ListPermissions": {{
Entity: "info",
Action: "read",
}},
"/lnrpc.Lightning/SubscribePeerEvents": {{
Entity: "peers",
Action: "read",
@ -525,6 +530,10 @@ type rpcServer struct {
// selfNode is our own pubkey.
selfNode route.Vertex
// allPermissions is a map of all registered gRPC URIs (including
// internal and external subservers) to the permissions they require.
allPermissions map[string][]bakery.Op
}
// A compile time check to ensure that rpcServer fully implements the
@ -732,6 +741,7 @@ func newRPCServer(cfg *Config, s *server, macService *macaroons.Service,
quit: make(chan struct{}, 1),
macService: macService,
selfNode: selfNode.PubKeyBytes,
allPermissions: permissions,
}
lnrpc.RegisterLightningServer(grpcServer, rootRPCServer)
@ -6452,15 +6462,27 @@ func (r *rpcServer) BakeMacaroon(ctx context.Context,
// the bakery.
requestedPermissions := make([]bakery.Op, len(req.Permissions))
for idx, op := range req.Permissions {
if !stringInSlice(op.Action, validActions) {
return nil, fmt.Errorf("invalid permission action. %s",
helpMsg)
}
if !stringInSlice(op.Entity, validEntities) {
return nil, fmt.Errorf("invalid permission entity. %s",
helpMsg)
}
// Either we have the special entity "uri" which specifies a
// full gRPC URI or we have one of the pre-defined actions.
if op.Entity == macaroons.PermissionEntityCustomURI {
_, ok := r.allPermissions[op.Action]
if !ok {
return nil, fmt.Errorf("invalid permission " +
"action, must be an existing URI in " +
"the format /package.Service/" +
"MethodName")
}
} else if !stringInSlice(op.Action, validActions) {
return nil, fmt.Errorf("invalid permission action. %s",
helpMsg)
}
requestedPermissions[idx] = bakery.Op{
Entity: op.Entity,
Action: op.Action,
@ -6554,6 +6576,33 @@ func (r *rpcServer) DeleteMacaroonID(ctx context.Context,
}, nil
}
// ListPermissions lists all RPC method URIs and their required macaroon
// permissions to access them.
func (r *rpcServer) ListPermissions(_ context.Context,
_ *lnrpc.ListPermissionsRequest) (*lnrpc.ListPermissionsResponse,
error) {
rpcsLog.Debugf("[listpermissions]")
permissionMap := make(map[string]*lnrpc.MacaroonPermissionList)
for uri, perms := range r.allPermissions {
rpcPerms := make([]*lnrpc.MacaroonPermission, len(perms))
for idx, perm := range perms {
rpcPerms[idx] = &lnrpc.MacaroonPermission{
Entity: perm.Entity,
Action: perm.Action,
}
}
permissionMap[uri] = &lnrpc.MacaroonPermissionList{
Permissions: rpcPerms,
}
}
return &lnrpc.ListPermissionsResponse{
MethodPermissions: permissionMap,
}, nil
}
// FundingStateStep is an advanced funding related call that allows the caller
// to either execute some preparatory steps for a funding workflow, or manually
// progress a funding workflow. The primary way a funding flow is identified is