From 1ad1c35318fdff7e0a2c3607cd4b3031bbb42151 Mon Sep 17 00:00:00 2001 From: MaMe82 Date: Wed, 7 Nov 2018 15:30:49 +0100 Subject: [PATCH] Webclient,proto,service: store,deploy,load of MasterTemplate --- proto/gopherjs/grpc.pb.gopherjs.go | 299 ++++++ proto/grpc.pb.go | 1040 +++++++++++++------- proto/grpc.proto | 34 +- service/SubSysTriggerAction.go | 14 +- service/rpc_server.go | 72 +- web_client/hvueCompUSBSettings.go | 8 +- web_client/hvueComponentsGeneric.go | 227 ++++- web_client/hvueComponentsTriggerActions.go | 4 +- web_client/jsDataHandling.go | 65 ++ web_client/mvuexGlobalState.go | 122 +++ web_client/rpcClient.go | 50 + 11 files changed, 1521 insertions(+), 414 deletions(-) diff --git a/proto/gopherjs/grpc.pb.gopherjs.go b/proto/gopherjs/grpc.pb.gopherjs.go index fe85a12..f9aafef 100644 --- a/proto/gopherjs/grpc.pb.gopherjs.go +++ b/proto/gopherjs/grpc.pb.gopherjs.go @@ -8,6 +8,8 @@ grpc.proto It has these top-level messages: + MasterTemplate + RequestMasterTemplateStorage BluetoothRequestSettingsStorage BluetoothSettings BluetoothAgentSettings @@ -198,6 +200,16 @@ const ( GPIONum_NUM_18 GPIONum = 17 GPIONum_NUM_19 GPIONum = 18 GPIONum_NUM_20 GPIONum = 19 + GPIONum_NUM_21 GPIONum = 20 + GPIONum_NUM_22 GPIONum = 21 + GPIONum_NUM_23 GPIONum = 22 + GPIONum_NUM_24 GPIONum = 23 + GPIONum_NUM_25 GPIONum = 24 + GPIONum_NUM_26 GPIONum = 25 + GPIONum_NUM_27 GPIONum = 26 + GPIONum_NUM_28 GPIONum = 27 + GPIONum_NUM_29 GPIONum = 28 + GPIONum_NUM_30 GPIONum = 29 ) var GPIONum_name = map[int]string{ @@ -221,6 +233,16 @@ var GPIONum_name = map[int]string{ 17: "NUM_18", 18: "NUM_19", 19: "NUM_20", + 20: "NUM_21", + 21: "NUM_22", + 22: "NUM_23", + 23: "NUM_24", + 24: "NUM_25", + 25: "NUM_26", + 26: "NUM_27", + 27: "NUM_28", + 28: "NUM_29", + 29: "NUM_30", } var GPIONum_value = map[string]int{ "NUM_1": 0, @@ -243,6 +265,16 @@ var GPIONum_value = map[string]int{ "NUM_18": 17, "NUM_19": 18, "NUM_20": 19, + "NUM_21": 20, + "NUM_22": 21, + "NUM_23": 22, + "NUM_24": 23, + "NUM_25": 24, + "NUM_26": 25, + "NUM_27": 26, + "NUM_28": 27, + "NUM_29": 28, + "NUM_30": 29, } func (x GPIONum) String() string { @@ -423,6 +455,212 @@ func (x EthernetInterfaceSettings_Mode) String() string { return EthernetInterfaceSettings_Mode_name[int(x)] } +// MasterTemplates +type MasterTemplate struct { + TemplateNameBluetooth string + TemplateNameUsb string + TemplateNameWifi string + TemplateNameTriggerActions string + TemplateNamesNetwork []string +} + +// GetTemplateNameBluetooth gets the TemplateNameBluetooth of the MasterTemplate. +func (m *MasterTemplate) GetTemplateNameBluetooth() (x string) { + if m == nil { + return x + } + return m.TemplateNameBluetooth +} + +// GetTemplateNameUsb gets the TemplateNameUsb of the MasterTemplate. +func (m *MasterTemplate) GetTemplateNameUsb() (x string) { + if m == nil { + return x + } + return m.TemplateNameUsb +} + +// GetTemplateNameWifi gets the TemplateNameWifi of the MasterTemplate. +func (m *MasterTemplate) GetTemplateNameWifi() (x string) { + if m == nil { + return x + } + return m.TemplateNameWifi +} + +// GetTemplateNameTriggerActions gets the TemplateNameTriggerActions of the MasterTemplate. +func (m *MasterTemplate) GetTemplateNameTriggerActions() (x string) { + if m == nil { + return x + } + return m.TemplateNameTriggerActions +} + +// GetTemplateNamesNetwork gets the TemplateNamesNetwork of the MasterTemplate. +func (m *MasterTemplate) GetTemplateNamesNetwork() (x []string) { + if m == nil { + return x + } + return m.TemplateNamesNetwork +} + +// MarshalToWriter marshals MasterTemplate to the provided writer. +func (m *MasterTemplate) MarshalToWriter(writer jspb.Writer) { + if m == nil { + return + } + + if len(m.TemplateNameBluetooth) > 0 { + writer.WriteString(1, m.TemplateNameBluetooth) + } + + if len(m.TemplateNameUsb) > 0 { + writer.WriteString(2, m.TemplateNameUsb) + } + + if len(m.TemplateNameWifi) > 0 { + writer.WriteString(3, m.TemplateNameWifi) + } + + if len(m.TemplateNameTriggerActions) > 0 { + writer.WriteString(4, m.TemplateNameTriggerActions) + } + + for _, val := range m.TemplateNamesNetwork { + writer.WriteString(5, val) + } + + return +} + +// Marshal marshals MasterTemplate to a slice of bytes. +func (m *MasterTemplate) Marshal() []byte { + writer := jspb.NewWriter() + m.MarshalToWriter(writer) + return writer.GetResult() +} + +// UnmarshalFromReader unmarshals a MasterTemplate from the provided reader. +func (m *MasterTemplate) UnmarshalFromReader(reader jspb.Reader) *MasterTemplate { + for reader.Next() { + if m == nil { + m = &MasterTemplate{} + } + + switch reader.GetFieldNumber() { + case 1: + m.TemplateNameBluetooth = reader.ReadString() + case 2: + m.TemplateNameUsb = reader.ReadString() + case 3: + m.TemplateNameWifi = reader.ReadString() + case 4: + m.TemplateNameTriggerActions = reader.ReadString() + case 5: + m.TemplateNamesNetwork = append(m.TemplateNamesNetwork, reader.ReadString()) + default: + reader.SkipField() + } + } + + return m +} + +// Unmarshal unmarshals a MasterTemplate from a slice of bytes. +func (m *MasterTemplate) Unmarshal(rawBytes []byte) (*MasterTemplate, error) { + reader := jspb.NewReader(rawBytes) + + m = m.UnmarshalFromReader(reader) + + if err := reader.Err(); err != nil { + return nil, err + } + + return m, nil +} + +type RequestMasterTemplateStorage struct { + TemplateName string + Template *MasterTemplate +} + +// GetTemplateName gets the TemplateName of the RequestMasterTemplateStorage. +func (m *RequestMasterTemplateStorage) GetTemplateName() (x string) { + if m == nil { + return x + } + return m.TemplateName +} + +// GetTemplate gets the Template of the RequestMasterTemplateStorage. +func (m *RequestMasterTemplateStorage) GetTemplate() (x *MasterTemplate) { + if m == nil { + return x + } + return m.Template +} + +// MarshalToWriter marshals RequestMasterTemplateStorage to the provided writer. +func (m *RequestMasterTemplateStorage) MarshalToWriter(writer jspb.Writer) { + if m == nil { + return + } + + if len(m.TemplateName) > 0 { + writer.WriteString(1, m.TemplateName) + } + + if m.Template != nil { + writer.WriteMessage(2, func() { + m.Template.MarshalToWriter(writer) + }) + } + + return +} + +// Marshal marshals RequestMasterTemplateStorage to a slice of bytes. +func (m *RequestMasterTemplateStorage) Marshal() []byte { + writer := jspb.NewWriter() + m.MarshalToWriter(writer) + return writer.GetResult() +} + +// UnmarshalFromReader unmarshals a RequestMasterTemplateStorage from the provided reader. +func (m *RequestMasterTemplateStorage) UnmarshalFromReader(reader jspb.Reader) *RequestMasterTemplateStorage { + for reader.Next() { + if m == nil { + m = &RequestMasterTemplateStorage{} + } + + switch reader.GetFieldNumber() { + case 1: + m.TemplateName = reader.ReadString() + case 2: + reader.ReadMessage(func() { + m.Template = m.Template.UnmarshalFromReader(reader) + }) + default: + reader.SkipField() + } + } + + return m +} + +// Unmarshal unmarshals a RequestMasterTemplateStorage from a slice of bytes. +func (m *RequestMasterTemplateStorage) Unmarshal(rawBytes []byte) (*RequestMasterTemplateStorage, error) { + reader := jspb.NewReader(rawBytes) + + m = m.UnmarshalFromReader(reader) + + if err := reader.Err(); err != nil { + return nil, err + } + + return m, nil +} + // Bluetooth type BluetoothRequestSettingsStorage struct { TemplateName string @@ -6391,6 +6629,13 @@ type P4WNP1Client interface { // TriggerAction for cli (trigger group send and wait for group receive) WaitTriggerGroupReceive(ctx context.Context, in *TriggerGroupReceive, opts ...grpcweb.CallOption) (*Empty, error) FireActionGroupSend(ctx context.Context, in *ActionGroupSend, opts ...grpcweb.CallOption) (*Empty, error) + // MasterTemplates + DeployMasterTemplate(ctx context.Context, in *MasterTemplate, opts ...grpcweb.CallOption) (*Empty, error) + StoreMasterTemplate(ctx context.Context, in *RequestMasterTemplateStorage, opts ...grpcweb.CallOption) (*Empty, error) + GetStoredMasterTemplate(ctx context.Context, in *StringMessage, opts ...grpcweb.CallOption) (*MasterTemplate, error) + DeployStoredMasterTemplate(ctx context.Context, in *StringMessage, opts ...grpcweb.CallOption) (*MasterTemplate, error) + DeleteStoredMasterTemplate(ctx context.Context, in *StringMessage, opts ...grpcweb.CallOption) (*Empty, error) + ListStoredMasterTemplate(ctx context.Context, in *Empty, opts ...grpcweb.CallOption) (*StringMessageArray, error) // DB backup&restore DBBackup(ctx context.Context, in *StringMessage, opts ...grpcweb.CallOption) (*Empty, error) DBRestore(ctx context.Context, in *StringMessage, opts ...grpcweb.CallOption) (*Empty, error) @@ -7027,6 +7272,60 @@ func (c *p4WNP1Client) FireActionGroupSend(ctx context.Context, in *ActionGroupS return new(Empty).Unmarshal(resp) } +func (c *p4WNP1Client) DeployMasterTemplate(ctx context.Context, in *MasterTemplate, opts ...grpcweb.CallOption) (*Empty, error) { + resp, err := c.client.RPCCall(ctx, "DeployMasterTemplate", in.Marshal(), opts...) + if err != nil { + return nil, err + } + + return new(Empty).Unmarshal(resp) +} + +func (c *p4WNP1Client) StoreMasterTemplate(ctx context.Context, in *RequestMasterTemplateStorage, opts ...grpcweb.CallOption) (*Empty, error) { + resp, err := c.client.RPCCall(ctx, "StoreMasterTemplate", in.Marshal(), opts...) + if err != nil { + return nil, err + } + + return new(Empty).Unmarshal(resp) +} + +func (c *p4WNP1Client) GetStoredMasterTemplate(ctx context.Context, in *StringMessage, opts ...grpcweb.CallOption) (*MasterTemplate, error) { + resp, err := c.client.RPCCall(ctx, "GetStoredMasterTemplate", in.Marshal(), opts...) + if err != nil { + return nil, err + } + + return new(MasterTemplate).Unmarshal(resp) +} + +func (c *p4WNP1Client) DeployStoredMasterTemplate(ctx context.Context, in *StringMessage, opts ...grpcweb.CallOption) (*MasterTemplate, error) { + resp, err := c.client.RPCCall(ctx, "DeployStoredMasterTemplate", in.Marshal(), opts...) + if err != nil { + return nil, err + } + + return new(MasterTemplate).Unmarshal(resp) +} + +func (c *p4WNP1Client) DeleteStoredMasterTemplate(ctx context.Context, in *StringMessage, opts ...grpcweb.CallOption) (*Empty, error) { + resp, err := c.client.RPCCall(ctx, "DeleteStoredMasterTemplate", in.Marshal(), opts...) + if err != nil { + return nil, err + } + + return new(Empty).Unmarshal(resp) +} + +func (c *p4WNP1Client) ListStoredMasterTemplate(ctx context.Context, in *Empty, opts ...grpcweb.CallOption) (*StringMessageArray, error) { + resp, err := c.client.RPCCall(ctx, "ListStoredMasterTemplate", in.Marshal(), opts...) + if err != nil { + return nil, err + } + + return new(StringMessageArray).Unmarshal(resp) +} + func (c *p4WNP1Client) DBBackup(ctx context.Context, in *StringMessage, opts ...grpcweb.CallOption) (*Empty, error) { resp, err := c.client.RPCCall(ctx, "DBBackup", in.Marshal(), opts...) if err != nil { diff --git a/proto/grpc.pb.go b/proto/grpc.pb.go index 22f33f4..d99f0fd 100644 --- a/proto/grpc.pb.go +++ b/proto/grpc.pb.go @@ -8,6 +8,8 @@ It is generated from these files: grpc.proto It has these top-level messages: + MasterTemplate + RequestMasterTemplateStorage BluetoothRequestSettingsStorage BluetoothSettings BluetoothAgentSettings @@ -210,6 +212,16 @@ const ( GPIONum_NUM_18 GPIONum = 17 GPIONum_NUM_19 GPIONum = 18 GPIONum_NUM_20 GPIONum = 19 + GPIONum_NUM_21 GPIONum = 20 + GPIONum_NUM_22 GPIONum = 21 + GPIONum_NUM_23 GPIONum = 22 + GPIONum_NUM_24 GPIONum = 23 + GPIONum_NUM_25 GPIONum = 24 + GPIONum_NUM_26 GPIONum = 25 + GPIONum_NUM_27 GPIONum = 26 + GPIONum_NUM_28 GPIONum = 27 + GPIONum_NUM_29 GPIONum = 28 + GPIONum_NUM_30 GPIONum = 29 ) var GPIONum_name = map[int32]string{ @@ -233,6 +245,16 @@ var GPIONum_name = map[int32]string{ 17: "NUM_18", 18: "NUM_19", 19: "NUM_20", + 20: "NUM_21", + 21: "NUM_22", + 22: "NUM_23", + 23: "NUM_24", + 24: "NUM_25", + 25: "NUM_26", + 26: "NUM_27", + 27: "NUM_28", + 28: "NUM_29", + 29: "NUM_30", } var GPIONum_value = map[string]int32{ "NUM_1": 0, @@ -255,6 +277,16 @@ var GPIONum_value = map[string]int32{ "NUM_18": 17, "NUM_19": 18, "NUM_20": 19, + "NUM_21": 20, + "NUM_22": 21, + "NUM_23": 22, + "NUM_24": 23, + "NUM_25": 24, + "NUM_26": 25, + "NUM_27": 26, + "NUM_28": 27, + "NUM_29": 28, + "NUM_30": 29, } func (x GPIONum) String() string { @@ -415,7 +447,7 @@ func (x ActionDeploySettingsTemplate_TemplateType) String() string { return proto.EnumName(ActionDeploySettingsTemplate_TemplateType_name, int32(x)) } func (ActionDeploySettingsTemplate_TemplateType) EnumDescriptor() ([]byte, []int) { - return fileDescriptor0, []int{20, 0} + return fileDescriptor0, []int{22, 0} } type EthernetInterfaceSettings_Mode int32 @@ -444,7 +476,80 @@ func (x EthernetInterfaceSettings_Mode) String() string { return proto.EnumName(EthernetInterfaceSettings_Mode_name, int32(x)) } func (EthernetInterfaceSettings_Mode) EnumDescriptor() ([]byte, []int) { - return fileDescriptor0, []int{52, 0} + return fileDescriptor0, []int{54, 0} +} + +// MasterTemplates +type MasterTemplate struct { + TemplateNameBluetooth string `protobuf:"bytes,1,opt,name=template_name_bluetooth,json=templateNameBluetooth" json:"template_name_bluetooth,omitempty"` + TemplateNameUsb string `protobuf:"bytes,2,opt,name=template_name_usb,json=templateNameUsb" json:"template_name_usb,omitempty"` + TemplateNameWifi string `protobuf:"bytes,3,opt,name=template_name_wifi,json=templateNameWifi" json:"template_name_wifi,omitempty"` + TemplateNameTriggerActions string `protobuf:"bytes,4,opt,name=template_name_trigger_actions,json=templateNameTriggerActions" json:"template_name_trigger_actions,omitempty"` + TemplateNamesNetwork []string `protobuf:"bytes,5,rep,name=template_names_network,json=templateNamesNetwork" json:"template_names_network,omitempty"` +} + +func (m *MasterTemplate) Reset() { *m = MasterTemplate{} } +func (m *MasterTemplate) String() string { return proto.CompactTextString(m) } +func (*MasterTemplate) ProtoMessage() {} +func (*MasterTemplate) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{0} } + +func (m *MasterTemplate) GetTemplateNameBluetooth() string { + if m != nil { + return m.TemplateNameBluetooth + } + return "" +} + +func (m *MasterTemplate) GetTemplateNameUsb() string { + if m != nil { + return m.TemplateNameUsb + } + return "" +} + +func (m *MasterTemplate) GetTemplateNameWifi() string { + if m != nil { + return m.TemplateNameWifi + } + return "" +} + +func (m *MasterTemplate) GetTemplateNameTriggerActions() string { + if m != nil { + return m.TemplateNameTriggerActions + } + return "" +} + +func (m *MasterTemplate) GetTemplateNamesNetwork() []string { + if m != nil { + return m.TemplateNamesNetwork + } + return nil +} + +type RequestMasterTemplateStorage struct { + TemplateName string `protobuf:"bytes,1,opt,name=TemplateName" json:"TemplateName,omitempty"` + Template *MasterTemplate `protobuf:"bytes,2,opt,name=template" json:"template,omitempty"` +} + +func (m *RequestMasterTemplateStorage) Reset() { *m = RequestMasterTemplateStorage{} } +func (m *RequestMasterTemplateStorage) String() string { return proto.CompactTextString(m) } +func (*RequestMasterTemplateStorage) ProtoMessage() {} +func (*RequestMasterTemplateStorage) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{1} } + +func (m *RequestMasterTemplateStorage) GetTemplateName() string { + if m != nil { + return m.TemplateName + } + return "" +} + +func (m *RequestMasterTemplateStorage) GetTemplate() *MasterTemplate { + if m != nil { + return m.Template + } + return nil } // Bluetooth @@ -456,7 +561,7 @@ type BluetoothRequestSettingsStorage struct { func (m *BluetoothRequestSettingsStorage) Reset() { *m = BluetoothRequestSettingsStorage{} } func (m *BluetoothRequestSettingsStorage) String() string { return proto.CompactTextString(m) } func (*BluetoothRequestSettingsStorage) ProtoMessage() {} -func (*BluetoothRequestSettingsStorage) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{0} } +func (*BluetoothRequestSettingsStorage) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{2} } func (m *BluetoothRequestSettingsStorage) GetTemplateName() string { if m != nil { @@ -480,7 +585,7 @@ type BluetoothSettings struct { func (m *BluetoothSettings) Reset() { *m = BluetoothSettings{} } func (m *BluetoothSettings) String() string { return proto.CompactTextString(m) } func (*BluetoothSettings) ProtoMessage() {} -func (*BluetoothSettings) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{1} } +func (*BluetoothSettings) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{3} } func (m *BluetoothSettings) GetCi() *BluetoothControllerInformation { if m != nil { @@ -503,7 +608,7 @@ type BluetoothAgentSettings struct { func (m *BluetoothAgentSettings) Reset() { *m = BluetoothAgentSettings{} } func (m *BluetoothAgentSettings) String() string { return proto.CompactTextString(m) } func (*BluetoothAgentSettings) ProtoMessage() {} -func (*BluetoothAgentSettings) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{2} } +func (*BluetoothAgentSettings) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{4} } func (m *BluetoothAgentSettings) GetPin() string { if m != nil { @@ -523,7 +628,7 @@ type BluetoothNetworkService struct { func (m *BluetoothNetworkService) Reset() { *m = BluetoothNetworkService{} } func (m *BluetoothNetworkService) String() string { return proto.CompactTextString(m) } func (*BluetoothNetworkService) ProtoMessage() {} -func (*BluetoothNetworkService) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{3} } +func (*BluetoothNetworkService) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{5} } func (m *BluetoothNetworkService) GetRegisterOrUnregister() bool { if m != nil { @@ -582,7 +687,7 @@ type BluetoothControllerSettings struct { func (m *BluetoothControllerSettings) Reset() { *m = BluetoothControllerSettings{} } func (m *BluetoothControllerSettings) String() string { return proto.CompactTextString(m) } func (*BluetoothControllerSettings) ProtoMessage() {} -func (*BluetoothControllerSettings) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{4} } +func (*BluetoothControllerSettings) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{6} } func (m *BluetoothControllerSettings) GetPowered() bool { if m != nil { @@ -714,7 +819,7 @@ type BluetoothControllerInformation struct { func (m *BluetoothControllerInformation) Reset() { *m = BluetoothControllerInformation{} } func (m *BluetoothControllerInformation) String() string { return proto.CompactTextString(m) } func (*BluetoothControllerInformation) ProtoMessage() {} -func (*BluetoothControllerInformation) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{5} } +func (*BluetoothControllerInformation) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{7} } func (m *BluetoothControllerInformation) GetAddress() []byte { if m != nil { @@ -809,7 +914,7 @@ type TriggerActionSet struct { func (m *TriggerActionSet) Reset() { *m = TriggerActionSet{} } func (m *TriggerActionSet) String() string { return proto.CompactTextString(m) } func (*TriggerActionSet) ProtoMessage() {} -func (*TriggerActionSet) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{6} } +func (*TriggerActionSet) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{8} } func (m *TriggerActionSet) GetTriggerActions() []*TriggerAction { if m != nil { @@ -855,7 +960,7 @@ type TriggerAction struct { func (m *TriggerAction) Reset() { *m = TriggerAction{} } func (m *TriggerAction) String() string { return proto.CompactTextString(m) } func (*TriggerAction) ProtoMessage() {} -func (*TriggerAction) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{7} } +func (*TriggerAction) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{9} } type isTriggerAction_Trigger interface { isTriggerAction_Trigger() @@ -1441,7 +1546,7 @@ type TriggerServiceStarted struct { func (m *TriggerServiceStarted) Reset() { *m = TriggerServiceStarted{} } func (m *TriggerServiceStarted) String() string { return proto.CompactTextString(m) } func (*TriggerServiceStarted) ProtoMessage() {} -func (*TriggerServiceStarted) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{8} } +func (*TriggerServiceStarted) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{10} } type TriggerUSBGadgetConnected struct { } @@ -1449,7 +1554,7 @@ type TriggerUSBGadgetConnected struct { func (m *TriggerUSBGadgetConnected) Reset() { *m = TriggerUSBGadgetConnected{} } func (m *TriggerUSBGadgetConnected) String() string { return proto.CompactTextString(m) } func (*TriggerUSBGadgetConnected) ProtoMessage() {} -func (*TriggerUSBGadgetConnected) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{9} } +func (*TriggerUSBGadgetConnected) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{11} } type TriggerUSBGadgetDisconnected struct { } @@ -1457,7 +1562,7 @@ type TriggerUSBGadgetDisconnected struct { func (m *TriggerUSBGadgetDisconnected) Reset() { *m = TriggerUSBGadgetDisconnected{} } func (m *TriggerUSBGadgetDisconnected) String() string { return proto.CompactTextString(m) } func (*TriggerUSBGadgetDisconnected) ProtoMessage() {} -func (*TriggerUSBGadgetDisconnected) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{10} } +func (*TriggerUSBGadgetDisconnected) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{12} } type TriggerWifiAPStarted struct { } @@ -1465,7 +1570,7 @@ type TriggerWifiAPStarted struct { func (m *TriggerWifiAPStarted) Reset() { *m = TriggerWifiAPStarted{} } func (m *TriggerWifiAPStarted) String() string { return proto.CompactTextString(m) } func (*TriggerWifiAPStarted) ProtoMessage() {} -func (*TriggerWifiAPStarted) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{11} } +func (*TriggerWifiAPStarted) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{13} } type TriggerWifiConnectedAsSta struct { } @@ -1473,7 +1578,7 @@ type TriggerWifiConnectedAsSta struct { func (m *TriggerWifiConnectedAsSta) Reset() { *m = TriggerWifiConnectedAsSta{} } func (m *TriggerWifiConnectedAsSta) String() string { return proto.CompactTextString(m) } func (*TriggerWifiConnectedAsSta) ProtoMessage() {} -func (*TriggerWifiConnectedAsSta) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{12} } +func (*TriggerWifiConnectedAsSta) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{14} } type TriggerSSHLogin struct { LoginUser string `protobuf:"bytes,1,opt,name=loginUser" json:"loginUser,omitempty"` @@ -1482,7 +1587,7 @@ type TriggerSSHLogin struct { func (m *TriggerSSHLogin) Reset() { *m = TriggerSSHLogin{} } func (m *TriggerSSHLogin) String() string { return proto.CompactTextString(m) } func (*TriggerSSHLogin) ProtoMessage() {} -func (*TriggerSSHLogin) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{13} } +func (*TriggerSSHLogin) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{15} } func (m *TriggerSSHLogin) GetLoginUser() string { if m != nil { @@ -1497,7 +1602,7 @@ type TriggerDHCPLeaseGranted struct { func (m *TriggerDHCPLeaseGranted) Reset() { *m = TriggerDHCPLeaseGranted{} } func (m *TriggerDHCPLeaseGranted) String() string { return proto.CompactTextString(m) } func (*TriggerDHCPLeaseGranted) ProtoMessage() {} -func (*TriggerDHCPLeaseGranted) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{14} } +func (*TriggerDHCPLeaseGranted) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{16} } type TriggerGroupReceive struct { GroupName string `protobuf:"bytes,1,opt,name=groupName" json:"groupName,omitempty"` @@ -1507,7 +1612,7 @@ type TriggerGroupReceive struct { func (m *TriggerGroupReceive) Reset() { *m = TriggerGroupReceive{} } func (m *TriggerGroupReceive) String() string { return proto.CompactTextString(m) } func (*TriggerGroupReceive) ProtoMessage() {} -func (*TriggerGroupReceive) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{15} } +func (*TriggerGroupReceive) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{17} } func (m *TriggerGroupReceive) GetGroupName() string { if m != nil { @@ -1532,7 +1637,7 @@ type TriggerGroupReceiveMulti struct { func (m *TriggerGroupReceiveMulti) Reset() { *m = TriggerGroupReceiveMulti{} } func (m *TriggerGroupReceiveMulti) String() string { return proto.CompactTextString(m) } func (*TriggerGroupReceiveMulti) ProtoMessage() {} -func (*TriggerGroupReceiveMulti) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{16} } +func (*TriggerGroupReceiveMulti) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{18} } func (m *TriggerGroupReceiveMulti) GetGroupName() string { if m != nil { @@ -1564,7 +1669,7 @@ type TriggerGPIOIn struct { func (m *TriggerGPIOIn) Reset() { *m = TriggerGPIOIn{} } func (m *TriggerGPIOIn) String() string { return proto.CompactTextString(m) } func (*TriggerGPIOIn) ProtoMessage() {} -func (*TriggerGPIOIn) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{17} } +func (*TriggerGPIOIn) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{19} } func (m *TriggerGPIOIn) GetGpioNum() GPIONum { if m != nil { @@ -1594,7 +1699,7 @@ type ActionStartBashScript struct { func (m *ActionStartBashScript) Reset() { *m = ActionStartBashScript{} } func (m *ActionStartBashScript) String() string { return proto.CompactTextString(m) } func (*ActionStartBashScript) ProtoMessage() {} -func (*ActionStartBashScript) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{18} } +func (*ActionStartBashScript) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{20} } func (m *ActionStartBashScript) GetScriptName() string { if m != nil { @@ -1610,7 +1715,7 @@ type ActionStartHIDScript struct { func (m *ActionStartHIDScript) Reset() { *m = ActionStartHIDScript{} } func (m *ActionStartHIDScript) String() string { return proto.CompactTextString(m) } func (*ActionStartHIDScript) ProtoMessage() {} -func (*ActionStartHIDScript) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{19} } +func (*ActionStartHIDScript) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{21} } func (m *ActionStartHIDScript) GetScriptName() string { if m != nil { @@ -1627,7 +1732,7 @@ type ActionDeploySettingsTemplate struct { func (m *ActionDeploySettingsTemplate) Reset() { *m = ActionDeploySettingsTemplate{} } func (m *ActionDeploySettingsTemplate) String() string { return proto.CompactTextString(m) } func (*ActionDeploySettingsTemplate) ProtoMessage() {} -func (*ActionDeploySettingsTemplate) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{20} } +func (*ActionDeploySettingsTemplate) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{22} } func (m *ActionDeploySettingsTemplate) GetTemplateName() string { if m != nil { @@ -1649,7 +1754,7 @@ type ActionLog struct { func (m *ActionLog) Reset() { *m = ActionLog{} } func (m *ActionLog) String() string { return proto.CompactTextString(m) } func (*ActionLog) ProtoMessage() {} -func (*ActionLog) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{21} } +func (*ActionLog) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{23} } type ActionGPIOOut struct { GpioNum GPIONum `protobuf:"varint,1,opt,name=gpioNum,enum=P4wnP1_grpc.GPIONum" json:"gpioNum,omitempty"` @@ -1659,7 +1764,7 @@ type ActionGPIOOut struct { func (m *ActionGPIOOut) Reset() { *m = ActionGPIOOut{} } func (m *ActionGPIOOut) String() string { return proto.CompactTextString(m) } func (*ActionGPIOOut) ProtoMessage() {} -func (*ActionGPIOOut) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{22} } +func (*ActionGPIOOut) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{24} } func (m *ActionGPIOOut) GetGpioNum() GPIONum { if m != nil { @@ -1683,7 +1788,7 @@ type ActionGroupSend struct { func (m *ActionGroupSend) Reset() { *m = ActionGroupSend{} } func (m *ActionGroupSend) String() string { return proto.CompactTextString(m) } func (*ActionGroupSend) ProtoMessage() {} -func (*ActionGroupSend) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{23} } +func (*ActionGroupSend) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{25} } func (m *ActionGroupSend) GetGroupName() string { if m != nil { @@ -1707,7 +1812,7 @@ type WifiRequestSettingsStorage struct { func (m *WifiRequestSettingsStorage) Reset() { *m = WifiRequestSettingsStorage{} } func (m *WifiRequestSettingsStorage) String() string { return proto.CompactTextString(m) } func (*WifiRequestSettingsStorage) ProtoMessage() {} -func (*WifiRequestSettingsStorage) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{24} } +func (*WifiRequestSettingsStorage) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{26} } func (m *WifiRequestSettingsStorage) GetTemplateName() string { if m != nil { @@ -1740,7 +1845,7 @@ type WiFiSettings struct { func (m *WiFiSettings) Reset() { *m = WiFiSettings{} } func (m *WiFiSettings) String() string { return proto.CompactTextString(m) } func (*WiFiSettings) ProtoMessage() {} -func (*WiFiSettings) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{25} } +func (*WiFiSettings) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{27} } func (m *WiFiSettings) GetName() string { if m != nil { @@ -1822,7 +1927,7 @@ type WiFiState struct { func (m *WiFiState) Reset() { *m = WiFiState{} } func (m *WiFiState) String() string { return proto.CompactTextString(m) } func (*WiFiState) ProtoMessage() {} -func (*WiFiState) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{26} } +func (*WiFiState) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{28} } func (m *WiFiState) GetMode() WiFiStateMode { if m != nil { @@ -1860,7 +1965,7 @@ type WiFiBSSCfg struct { func (m *WiFiBSSCfg) Reset() { *m = WiFiBSSCfg{} } func (m *WiFiBSSCfg) String() string { return proto.CompactTextString(m) } func (*WiFiBSSCfg) ProtoMessage() {} -func (*WiFiBSSCfg) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{27} } +func (*WiFiBSSCfg) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{29} } func (m *WiFiBSSCfg) GetSSID() string { if m != nil { @@ -1884,7 +1989,7 @@ type StringMessage struct { func (m *StringMessage) Reset() { *m = StringMessage{} } func (m *StringMessage) String() string { return proto.CompactTextString(m) } func (*StringMessage) ProtoMessage() {} -func (*StringMessage) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{28} } +func (*StringMessage) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{30} } func (m *StringMessage) GetMsg() string { if m != nil { @@ -1900,7 +2005,7 @@ type StringMessageArray struct { func (m *StringMessageArray) Reset() { *m = StringMessageArray{} } func (m *StringMessageArray) String() string { return proto.CompactTextString(m) } func (*StringMessageArray) ProtoMessage() {} -func (*StringMessageArray) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{29} } +func (*StringMessageArray) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{31} } func (m *StringMessageArray) GetMsgArray() []string { if m != nil { @@ -1917,7 +2022,7 @@ type EventRequest struct { func (m *EventRequest) Reset() { *m = EventRequest{} } func (m *EventRequest) String() string { return proto.CompactTextString(m) } func (*EventRequest) ProtoMessage() {} -func (*EventRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{30} } +func (*EventRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{32} } func (m *EventRequest) GetListenType() int64 { if m != nil { @@ -1937,7 +2042,7 @@ type EventValue struct { func (m *EventValue) Reset() { *m = EventValue{} } func (m *EventValue) String() string { return proto.CompactTextString(m) } func (*EventValue) ProtoMessage() {} -func (*EventValue) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{31} } +func (*EventValue) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{33} } type isEventValue_Val interface { isEventValue_Val() @@ -2076,7 +2181,7 @@ type Event struct { func (m *Event) Reset() { *m = Event{} } func (m *Event) String() string { return proto.CompactTextString(m) } func (*Event) ProtoMessage() {} -func (*Event) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{32} } +func (*Event) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{34} } func (m *Event) GetType() int64 { if m != nil { @@ -2102,7 +2207,7 @@ type TempDirOrFileRequest struct { func (m *TempDirOrFileRequest) Reset() { *m = TempDirOrFileRequest{} } func (m *TempDirOrFileRequest) String() string { return proto.CompactTextString(m) } func (*TempDirOrFileRequest) ProtoMessage() {} -func (*TempDirOrFileRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{33} } +func (*TempDirOrFileRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{35} } func (m *TempDirOrFileRequest) GetDir() string { if m != nil { @@ -2132,7 +2237,7 @@ type TempDirOrFileResponse struct { func (m *TempDirOrFileResponse) Reset() { *m = TempDirOrFileResponse{} } func (m *TempDirOrFileResponse) String() string { return proto.CompactTextString(m) } func (*TempDirOrFileResponse) ProtoMessage() {} -func (*TempDirOrFileResponse) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{34} } +func (*TempDirOrFileResponse) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{36} } func (m *TempDirOrFileResponse) GetResultPath() string { if m != nil { @@ -2151,7 +2256,7 @@ type ReadFileRequest struct { func (m *ReadFileRequest) Reset() { *m = ReadFileRequest{} } func (m *ReadFileRequest) String() string { return proto.CompactTextString(m) } func (*ReadFileRequest) ProtoMessage() {} -func (*ReadFileRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{35} } +func (*ReadFileRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{37} } func (m *ReadFileRequest) GetFolder() AccessibleFolder { if m != nil { @@ -2189,7 +2294,7 @@ type ReadFileResponse struct { func (m *ReadFileResponse) Reset() { *m = ReadFileResponse{} } func (m *ReadFileResponse) String() string { return proto.CompactTextString(m) } func (*ReadFileResponse) ProtoMessage() {} -func (*ReadFileResponse) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{36} } +func (*ReadFileResponse) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{38} } func (m *ReadFileResponse) GetReadCount() int64 { if m != nil { @@ -2216,7 +2321,7 @@ type WriteFileRequest struct { func (m *WriteFileRequest) Reset() { *m = WriteFileRequest{} } func (m *WriteFileRequest) String() string { return proto.CompactTextString(m) } func (*WriteFileRequest) ProtoMessage() {} -func (*WriteFileRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{37} } +func (*WriteFileRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{39} } func (m *WriteFileRequest) GetFolder() AccessibleFolder { if m != nil { @@ -2260,7 +2365,7 @@ type FileInfoRequest struct { func (m *FileInfoRequest) Reset() { *m = FileInfoRequest{} } func (m *FileInfoRequest) String() string { return proto.CompactTextString(m) } func (*FileInfoRequest) ProtoMessage() {} -func (*FileInfoRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{38} } +func (*FileInfoRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{40} } func (m *FileInfoRequest) GetPath() string { if m != nil { @@ -2280,7 +2385,7 @@ type FileInfoResponse struct { func (m *FileInfoResponse) Reset() { *m = FileInfoResponse{} } func (m *FileInfoResponse) String() string { return proto.CompactTextString(m) } func (*FileInfoResponse) ProtoMessage() {} -func (*FileInfoResponse) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{39} } +func (*FileInfoResponse) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{41} } func (m *FileInfoResponse) GetName() string { if m != nil { @@ -2326,7 +2431,7 @@ type HIDScriptRequest struct { func (m *HIDScriptRequest) Reset() { *m = HIDScriptRequest{} } func (m *HIDScriptRequest) String() string { return proto.CompactTextString(m) } func (*HIDScriptRequest) ProtoMessage() {} -func (*HIDScriptRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{40} } +func (*HIDScriptRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{42} } func (m *HIDScriptRequest) GetScriptPath() string { if m != nil { @@ -2349,7 +2454,7 @@ type HIDScriptJob struct { func (m *HIDScriptJob) Reset() { *m = HIDScriptJob{} } func (m *HIDScriptJob) String() string { return proto.CompactTextString(m) } func (*HIDScriptJob) ProtoMessage() {} -func (*HIDScriptJob) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{41} } +func (*HIDScriptJob) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{43} } func (m *HIDScriptJob) GetId() uint32 { if m != nil { @@ -2365,7 +2470,7 @@ type HIDScriptJobList struct { func (m *HIDScriptJobList) Reset() { *m = HIDScriptJobList{} } func (m *HIDScriptJobList) String() string { return proto.CompactTextString(m) } func (*HIDScriptJobList) ProtoMessage() {} -func (*HIDScriptJobList) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{42} } +func (*HIDScriptJobList) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{44} } func (m *HIDScriptJobList) GetIds() []uint32 { if m != nil { @@ -2383,7 +2488,7 @@ type HIDRunningJobStateResult struct { func (m *HIDRunningJobStateResult) Reset() { *m = HIDRunningJobStateResult{} } func (m *HIDRunningJobStateResult) String() string { return proto.CompactTextString(m) } func (*HIDRunningJobStateResult) ProtoMessage() {} -func (*HIDRunningJobStateResult) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{43} } +func (*HIDRunningJobStateResult) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{45} } func (m *HIDRunningJobStateResult) GetId() int64 { if m != nil { @@ -2415,7 +2520,7 @@ type HIDScriptResult struct { func (m *HIDScriptResult) Reset() { *m = HIDScriptResult{} } func (m *HIDScriptResult) String() string { return proto.CompactTextString(m) } func (*HIDScriptResult) ProtoMessage() {} -func (*HIDScriptResult) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{44} } +func (*HIDScriptResult) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{46} } func (m *HIDScriptResult) GetJob() *HIDScriptJob { if m != nil { @@ -2446,7 +2551,7 @@ type LEDSettings struct { func (m *LEDSettings) Reset() { *m = LEDSettings{} } func (m *LEDSettings) String() string { return proto.CompactTextString(m) } func (*LEDSettings) ProtoMessage() {} -func (*LEDSettings) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{45} } +func (*LEDSettings) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{47} } func (m *LEDSettings) GetBlinkCount() uint32 { if m != nil { @@ -2464,7 +2569,7 @@ type USBRequestSettingsStorage struct { func (m *USBRequestSettingsStorage) Reset() { *m = USBRequestSettingsStorage{} } func (m *USBRequestSettingsStorage) String() string { return proto.CompactTextString(m) } func (*USBRequestSettingsStorage) ProtoMessage() {} -func (*USBRequestSettingsStorage) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{46} } +func (*USBRequestSettingsStorage) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{48} } func (m *USBRequestSettingsStorage) GetTemplateName() string { if m != nil { @@ -2506,7 +2611,7 @@ type GadgetSettings struct { func (m *GadgetSettings) Reset() { *m = GadgetSettings{} } func (m *GadgetSettings) String() string { return proto.CompactTextString(m) } func (*GadgetSettings) ProtoMessage() {} -func (*GadgetSettings) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{47} } +func (*GadgetSettings) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{49} } func (m *GadgetSettings) GetEnabled() bool { if m != nil { @@ -2649,7 +2754,7 @@ type GadgetSettingsEthernet struct { func (m *GadgetSettingsEthernet) Reset() { *m = GadgetSettingsEthernet{} } func (m *GadgetSettingsEthernet) String() string { return proto.CompactTextString(m) } func (*GadgetSettingsEthernet) ProtoMessage() {} -func (*GadgetSettingsEthernet) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{48} } +func (*GadgetSettingsEthernet) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{50} } func (m *GadgetSettingsEthernet) GetHostAddr() string { if m != nil { @@ -2673,7 +2778,7 @@ type GadgetSettingsUMS struct { func (m *GadgetSettingsUMS) Reset() { *m = GadgetSettingsUMS{} } func (m *GadgetSettingsUMS) String() string { return proto.CompactTextString(m) } func (*GadgetSettingsUMS) ProtoMessage() {} -func (*GadgetSettingsUMS) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{49} } +func (*GadgetSettingsUMS) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{51} } func (m *GadgetSettingsUMS) GetCdrom() bool { if m != nil { @@ -2698,7 +2803,7 @@ type EthernetRequestSettingsStorage struct { func (m *EthernetRequestSettingsStorage) Reset() { *m = EthernetRequestSettingsStorage{} } func (m *EthernetRequestSettingsStorage) String() string { return proto.CompactTextString(m) } func (*EthernetRequestSettingsStorage) ProtoMessage() {} -func (*EthernetRequestSettingsStorage) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{50} } +func (*EthernetRequestSettingsStorage) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{52} } func (m *EthernetRequestSettingsStorage) GetTemplateName() string { if m != nil { @@ -2722,7 +2827,7 @@ func (m *DeployedEthernetInterfaceSettings) Reset() { *m = DeployedEther func (m *DeployedEthernetInterfaceSettings) String() string { return proto.CompactTextString(m) } func (*DeployedEthernetInterfaceSettings) ProtoMessage() {} func (*DeployedEthernetInterfaceSettings) Descriptor() ([]byte, []int) { - return fileDescriptor0, []int{51} + return fileDescriptor0, []int{53} } func (m *DeployedEthernetInterfaceSettings) GetList() []*EthernetInterfaceSettings { @@ -2745,7 +2850,7 @@ type EthernetInterfaceSettings struct { func (m *EthernetInterfaceSettings) Reset() { *m = EthernetInterfaceSettings{} } func (m *EthernetInterfaceSettings) String() string { return proto.CompactTextString(m) } func (*EthernetInterfaceSettings) ProtoMessage() {} -func (*EthernetInterfaceSettings) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{52} } +func (*EthernetInterfaceSettings) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{54} } func (m *EthernetInterfaceSettings) GetName() string { if m != nil { @@ -2813,7 +2918,7 @@ type DHCPServerSettings struct { func (m *DHCPServerSettings) Reset() { *m = DHCPServerSettings{} } func (m *DHCPServerSettings) String() string { return proto.CompactTextString(m) } func (*DHCPServerSettings) ProtoMessage() {} -func (*DHCPServerSettings) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{53} } +func (*DHCPServerSettings) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{55} } func (m *DHCPServerSettings) GetListenPort() uint32 { if m != nil { @@ -2888,7 +2993,7 @@ type DHCPServerRange struct { func (m *DHCPServerRange) Reset() { *m = DHCPServerRange{} } func (m *DHCPServerRange) String() string { return proto.CompactTextString(m) } func (*DHCPServerRange) ProtoMessage() {} -func (*DHCPServerRange) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{54} } +func (*DHCPServerRange) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{56} } func (m *DHCPServerRange) GetRangeLower() string { if m != nil { @@ -2920,7 +3025,7 @@ type DHCPServerStaticHost struct { func (m *DHCPServerStaticHost) Reset() { *m = DHCPServerStaticHost{} } func (m *DHCPServerStaticHost) String() string { return proto.CompactTextString(m) } func (*DHCPServerStaticHost) ProtoMessage() {} -func (*DHCPServerStaticHost) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{55} } +func (*DHCPServerStaticHost) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{57} } func (m *DHCPServerStaticHost) GetMac() string { if m != nil { @@ -2942,9 +3047,11 @@ type Empty struct { func (m *Empty) Reset() { *m = Empty{} } func (m *Empty) String() string { return proto.CompactTextString(m) } func (*Empty) ProtoMessage() {} -func (*Empty) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{56} } +func (*Empty) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{58} } func init() { + proto.RegisterType((*MasterTemplate)(nil), "P4wnP1_grpc.MasterTemplate") + proto.RegisterType((*RequestMasterTemplateStorage)(nil), "P4wnP1_grpc.RequestMasterTemplateStorage") proto.RegisterType((*BluetoothRequestSettingsStorage)(nil), "P4wnP1_grpc.BluetoothRequestSettingsStorage") proto.RegisterType((*BluetoothSettings)(nil), "P4wnP1_grpc.BluetoothSettings") proto.RegisterType((*BluetoothAgentSettings)(nil), "P4wnP1_grpc.BluetoothAgentSettings") @@ -3103,6 +3210,13 @@ type P4WNP1Client interface { // TriggerAction for cli (trigger group send and wait for group receive) WaitTriggerGroupReceive(ctx context.Context, in *TriggerGroupReceive, opts ...grpc.CallOption) (*Empty, error) FireActionGroupSend(ctx context.Context, in *ActionGroupSend, opts ...grpc.CallOption) (*Empty, error) + // MasterTemplates + DeployMasterTemplate(ctx context.Context, in *MasterTemplate, opts ...grpc.CallOption) (*Empty, error) + StoreMasterTemplate(ctx context.Context, in *RequestMasterTemplateStorage, opts ...grpc.CallOption) (*Empty, error) + GetStoredMasterTemplate(ctx context.Context, in *StringMessage, opts ...grpc.CallOption) (*MasterTemplate, error) + DeployStoredMasterTemplate(ctx context.Context, in *StringMessage, opts ...grpc.CallOption) (*MasterTemplate, error) + DeleteStoredMasterTemplate(ctx context.Context, in *StringMessage, opts ...grpc.CallOption) (*Empty, error) + ListStoredMasterTemplate(ctx context.Context, in *Empty, opts ...grpc.CallOption) (*StringMessageArray, error) // DB backup&restore DBBackup(ctx context.Context, in *StringMessage, opts ...grpc.CallOption) (*Empty, error) DBRestore(ctx context.Context, in *StringMessage, opts ...grpc.CallOption) (*Empty, error) @@ -3736,6 +3850,60 @@ func (c *p4WNP1Client) FireActionGroupSend(ctx context.Context, in *ActionGroupS return out, nil } +func (c *p4WNP1Client) DeployMasterTemplate(ctx context.Context, in *MasterTemplate, opts ...grpc.CallOption) (*Empty, error) { + out := new(Empty) + err := grpc.Invoke(ctx, "/P4wnP1_grpc.P4WNP1/DeployMasterTemplate", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *p4WNP1Client) StoreMasterTemplate(ctx context.Context, in *RequestMasterTemplateStorage, opts ...grpc.CallOption) (*Empty, error) { + out := new(Empty) + err := grpc.Invoke(ctx, "/P4wnP1_grpc.P4WNP1/StoreMasterTemplate", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *p4WNP1Client) GetStoredMasterTemplate(ctx context.Context, in *StringMessage, opts ...grpc.CallOption) (*MasterTemplate, error) { + out := new(MasterTemplate) + err := grpc.Invoke(ctx, "/P4wnP1_grpc.P4WNP1/GetStoredMasterTemplate", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *p4WNP1Client) DeployStoredMasterTemplate(ctx context.Context, in *StringMessage, opts ...grpc.CallOption) (*MasterTemplate, error) { + out := new(MasterTemplate) + err := grpc.Invoke(ctx, "/P4wnP1_grpc.P4WNP1/DeployStoredMasterTemplate", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *p4WNP1Client) DeleteStoredMasterTemplate(ctx context.Context, in *StringMessage, opts ...grpc.CallOption) (*Empty, error) { + out := new(Empty) + err := grpc.Invoke(ctx, "/P4wnP1_grpc.P4WNP1/DeleteStoredMasterTemplate", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *p4WNP1Client) ListStoredMasterTemplate(ctx context.Context, in *Empty, opts ...grpc.CallOption) (*StringMessageArray, error) { + out := new(StringMessageArray) + err := grpc.Invoke(ctx, "/P4wnP1_grpc.P4WNP1/ListStoredMasterTemplate", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + func (c *p4WNP1Client) DBBackup(ctx context.Context, in *StringMessage, opts ...grpc.CallOption) (*Empty, error) { out := new(Empty) err := grpc.Invoke(ctx, "/P4wnP1_grpc.P4WNP1/DBBackup", in, out, c.cc, opts...) @@ -3860,6 +4028,13 @@ type P4WNP1Server interface { // TriggerAction for cli (trigger group send and wait for group receive) WaitTriggerGroupReceive(context.Context, *TriggerGroupReceive) (*Empty, error) FireActionGroupSend(context.Context, *ActionGroupSend) (*Empty, error) + // MasterTemplates + DeployMasterTemplate(context.Context, *MasterTemplate) (*Empty, error) + StoreMasterTemplate(context.Context, *RequestMasterTemplateStorage) (*Empty, error) + GetStoredMasterTemplate(context.Context, *StringMessage) (*MasterTemplate, error) + DeployStoredMasterTemplate(context.Context, *StringMessage) (*MasterTemplate, error) + DeleteStoredMasterTemplate(context.Context, *StringMessage) (*Empty, error) + ListStoredMasterTemplate(context.Context, *Empty) (*StringMessageArray, error) // DB backup&restore DBBackup(context.Context, *StringMessage) (*Empty, error) DBRestore(context.Context, *StringMessage) (*Empty, error) @@ -5063,6 +5238,114 @@ func _P4WNP1_FireActionGroupSend_Handler(srv interface{}, ctx context.Context, d return interceptor(ctx, in, info, handler) } +func _P4WNP1_DeployMasterTemplate_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(MasterTemplate) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(P4WNP1Server).DeployMasterTemplate(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/P4wnP1_grpc.P4WNP1/DeployMasterTemplate", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(P4WNP1Server).DeployMasterTemplate(ctx, req.(*MasterTemplate)) + } + return interceptor(ctx, in, info, handler) +} + +func _P4WNP1_StoreMasterTemplate_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(RequestMasterTemplateStorage) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(P4WNP1Server).StoreMasterTemplate(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/P4wnP1_grpc.P4WNP1/StoreMasterTemplate", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(P4WNP1Server).StoreMasterTemplate(ctx, req.(*RequestMasterTemplateStorage)) + } + return interceptor(ctx, in, info, handler) +} + +func _P4WNP1_GetStoredMasterTemplate_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(StringMessage) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(P4WNP1Server).GetStoredMasterTemplate(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/P4wnP1_grpc.P4WNP1/GetStoredMasterTemplate", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(P4WNP1Server).GetStoredMasterTemplate(ctx, req.(*StringMessage)) + } + return interceptor(ctx, in, info, handler) +} + +func _P4WNP1_DeployStoredMasterTemplate_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(StringMessage) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(P4WNP1Server).DeployStoredMasterTemplate(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/P4wnP1_grpc.P4WNP1/DeployStoredMasterTemplate", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(P4WNP1Server).DeployStoredMasterTemplate(ctx, req.(*StringMessage)) + } + return interceptor(ctx, in, info, handler) +} + +func _P4WNP1_DeleteStoredMasterTemplate_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(StringMessage) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(P4WNP1Server).DeleteStoredMasterTemplate(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/P4wnP1_grpc.P4WNP1/DeleteStoredMasterTemplate", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(P4WNP1Server).DeleteStoredMasterTemplate(ctx, req.(*StringMessage)) + } + return interceptor(ctx, in, info, handler) +} + +func _P4WNP1_ListStoredMasterTemplate_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(Empty) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(P4WNP1Server).ListStoredMasterTemplate(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/P4wnP1_grpc.P4WNP1/ListStoredMasterTemplate", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(P4WNP1Server).ListStoredMasterTemplate(ctx, req.(*Empty)) + } + return interceptor(ctx, in, info, handler) +} + func _P4WNP1_DBBackup_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { in := new(StringMessage) if err := dec(in); err != nil { @@ -5417,6 +5700,30 @@ var _P4WNP1_serviceDesc = grpc.ServiceDesc{ MethodName: "FireActionGroupSend", Handler: _P4WNP1_FireActionGroupSend_Handler, }, + { + MethodName: "DeployMasterTemplate", + Handler: _P4WNP1_DeployMasterTemplate_Handler, + }, + { + MethodName: "StoreMasterTemplate", + Handler: _P4WNP1_StoreMasterTemplate_Handler, + }, + { + MethodName: "GetStoredMasterTemplate", + Handler: _P4WNP1_GetStoredMasterTemplate_Handler, + }, + { + MethodName: "DeployStoredMasterTemplate", + Handler: _P4WNP1_DeployStoredMasterTemplate_Handler, + }, + { + MethodName: "DeleteStoredMasterTemplate", + Handler: _P4WNP1_DeleteStoredMasterTemplate_Handler, + }, + { + MethodName: "ListStoredMasterTemplate", + Handler: _P4WNP1_ListStoredMasterTemplate_Handler, + }, { MethodName: "DBBackup", Handler: _P4WNP1_DBBackup_Handler, @@ -5451,304 +5758,319 @@ var _P4WNP1_serviceDesc = grpc.ServiceDesc{ func init() { proto.RegisterFile("grpc.proto", fileDescriptor0) } var fileDescriptor0 = []byte{ - // 4783 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xb4, 0x5b, 0x49, 0x73, 0x23, 0x47, - 0x76, 0xc6, 0xc2, 0x05, 0x78, 0x00, 0xc8, 0x62, 0x76, 0x93, 0x44, 0xb3, 0xf7, 0x9a, 0x96, 0xd4, - 0x43, 0x8d, 0x28, 0x89, 0x6a, 0xb5, 0x5a, 0x1a, 0xc9, 0x1a, 0x6c, 0x04, 0xd0, 0x0d, 0x02, 0x50, - 0x16, 0xd0, 0xd4, 0x2c, 0x76, 0x4d, 0xb1, 0x2a, 0x09, 0x96, 0x1a, 0xa8, 0x82, 0x6b, 0x21, 0x45, - 0x1f, 0x26, 0xc2, 0x13, 0xe1, 0x88, 0x39, 0xf8, 0xee, 0x5f, 0x61, 0xdf, 0x1c, 0xfe, 0x4d, 0xbe, - 0x4c, 0xcc, 0xc5, 0x17, 0x5f, 0xec, 0xc8, 0xcc, 0x5a, 0x81, 0x02, 0xc9, 0x66, 0x4b, 0xb7, 0xcc, - 0x97, 0x2f, 0xbf, 0xcc, 0x7c, 0x5b, 0xbe, 0x7c, 0x05, 0x00, 0x8c, 0xac, 0xa9, 0xba, 0x37, 0xb5, - 0x4c, 0xc7, 0x44, 0x85, 0xfe, 0xb3, 0x73, 0xa3, 0xff, 0xa9, 0x4c, 0x49, 0xe2, 0x3f, 0xa7, 0xe1, - 0x61, 0x75, 0xec, 0x12, 0xc7, 0x34, 0x9d, 0x53, 0x4c, 0xfe, 0xd1, 0x25, 0xb6, 0x23, 0x11, 0xc7, - 0xd1, 0x8d, 0x91, 0x2d, 0x39, 0xa6, 0xa5, 0x8c, 0x08, 0x12, 0xa1, 0x38, 0x20, 0x93, 0xe9, 0x58, - 0x71, 0x48, 0x57, 0x99, 0x90, 0x72, 0xfa, 0x51, 0xfa, 0x69, 0x1e, 0xc7, 0x68, 0xe8, 0x2b, 0xc8, - 0xd9, 0xde, 0xb4, 0x72, 0xe6, 0x51, 0xfa, 0x69, 0x61, 0xff, 0xc1, 0x5e, 0x64, 0x9d, 0xbd, 0x60, - 0x0d, 0x1f, 0x1c, 0x07, 0xfc, 0xe2, 0xbf, 0xa4, 0x61, 0x63, 0x6e, 0x1c, 0xfd, 0x1a, 0x32, 0xaa, - 0xce, 0xd6, 0x2a, 0xec, 0x7f, 0x98, 0x8c, 0x55, 0x33, 0x0d, 0xc7, 0x32, 0xc7, 0x63, 0x62, 0xb5, - 0x8d, 0x13, 0xd3, 0x9a, 0x28, 0x8e, 0x6e, 0x1a, 0x38, 0xa3, 0xea, 0xe8, 0x33, 0xc8, 0x28, 0xfe, - 0x46, 0x7e, 0x91, 0x3c, 0xb9, 0x32, 0x22, 0x46, 0x70, 0x54, 0x9c, 0x51, 0x6c, 0x71, 0x17, 0xb6, - 0x92, 0x47, 0x91, 0x00, 0xd9, 0xa9, 0x6e, 0x78, 0x07, 0xa7, 0x4d, 0xf1, 0x7f, 0xd3, 0xb0, 0x1d, - 0x30, 0x77, 0x89, 0x73, 0x6e, 0x5a, 0x6f, 0x24, 0x62, 0x9d, 0xe9, 0x2a, 0x41, 0xcf, 0x60, 0xcb, - 0x22, 0x23, 0xdd, 0x76, 0x88, 0x25, 0x9b, 0x96, 0xec, 0x1a, 0x7e, 0x8f, 0x01, 0xe4, 0xf0, 0x6d, - 0xbf, 0xdf, 0xb3, 0x86, 0xc1, 0x18, 0xda, 0x85, 0x0d, 0x9b, 0x58, 0x67, 0x7c, 0x8e, 0x6a, 0x1a, - 0x06, 0x51, 0x1d, 0x76, 0x82, 0x1c, 0x5e, 0xe7, 0x03, 0x3d, 0xab, 0xc6, 0xc9, 0xe8, 0x6b, 0x58, - 0x72, 0x2e, 0xa6, 0xa4, 0x9c, 0x7d, 0x94, 0x7e, 0xba, 0xb6, 0xff, 0x34, 0xf9, 0x80, 0xf1, 0x5d, - 0x0d, 0x2e, 0xa6, 0x04, 0xb3, 0x59, 0xe8, 0x01, 0x14, 0x26, 0x8a, 0x4a, 0x97, 0x31, 0xa8, 0x3a, - 0x97, 0xd8, 0xa9, 0xf2, 0x13, 0x45, 0xed, 0x59, 0x4c, 0x97, 0x0f, 0xa1, 0x70, 0x6c, 0xe9, 0xda, - 0x88, 0xf0, 0xf1, 0x65, 0x36, 0x0e, 0x9c, 0x44, 0x19, 0xc4, 0xff, 0x5e, 0x82, 0xbb, 0x09, 0x4a, - 0x08, 0xc4, 0x55, 0x86, 0xd5, 0xa9, 0x79, 0x4e, 0x2c, 0xa2, 0x79, 0x27, 0xf6, 0xbb, 0xe8, 0x11, - 0x14, 0xbc, 0xa3, 0x29, 0xc7, 0x63, 0xe2, 0x1d, 0x2f, 0x4a, 0x42, 0xbf, 0x04, 0xe1, 0x44, 0xb1, - 0x1d, 0x39, 0xca, 0x96, 0xe5, 0x52, 0xa0, 0xf4, 0x5a, 0x84, 0x55, 0x84, 0xa2, 0xa6, 0xdb, 0xaa, - 0x79, 0x46, 0x2c, 0xc6, 0xb6, 0xc4, 0xd8, 0x62, 0x34, 0xb4, 0x03, 0xb9, 0x63, 0xd3, 0xd0, 0xd8, - 0xf8, 0x32, 0x1b, 0x0f, 0xfa, 0x68, 0x0f, 0x6e, 0x8d, 0x75, 0xe3, 0x8d, 0x3c, 0x26, 0x67, 0x64, - 0x2c, 0xdb, 0x44, 0x75, 0x2d, 0xdd, 0xb9, 0x28, 0xaf, 0x30, 0xb6, 0x0d, 0x3a, 0xd4, 0xa1, 0x23, - 0x92, 0x37, 0x80, 0xf6, 0x61, 0x93, 0x31, 0x11, 0xd9, 0xd6, 0x27, 0xd3, 0x31, 0x91, 0xa7, 0x8a, - 0x6e, 0xe9, 0xc6, 0xa8, 0xbc, 0xca, 0x66, 0xdc, 0xe2, 0x83, 0x12, 0x1b, 0xeb, 0xf3, 0x21, 0xb4, - 0x09, 0x2b, 0xc7, 0x96, 0x4c, 0x34, 0xab, 0x9c, 0x63, 0x4c, 0xcb, 0xc7, 0x56, 0x43, 0xb3, 0xd0, - 0x7d, 0x80, 0x53, 0x7d, 0x74, 0x2a, 0xdb, 0x53, 0x42, 0xb4, 0x72, 0x9e, 0x0d, 0xe5, 0x29, 0x45, - 0xa2, 0x04, 0x3a, 0x3c, 0x36, 0xcf, 0x65, 0x62, 0x10, 0x6b, 0x74, 0x51, 0x06, 0x3e, 0x3c, 0x36, - 0xcf, 0x1b, 0x8c, 0x40, 0xa5, 0xa8, 0x68, 0x67, 0xc4, 0x72, 0x74, 0x9b, 0x2e, 0x5f, 0xe0, 0x52, - 0x8c, 0x90, 0xd0, 0x47, 0x80, 0xbc, 0xad, 0x7a, 0x72, 0xd4, 0x4d, 0xc3, 0x2e, 0x17, 0xf9, 0xc9, - 0xf8, 0x48, 0x2d, 0x1c, 0xa0, 0xeb, 0x69, 0xe4, 0xd8, 0x1d, 0xc9, 0x6f, 0xc8, 0x85, 0x5d, 0x2e, - 0xf1, 0xf5, 0x18, 0xe5, 0x15, 0xb9, 0xe0, 0xfa, 0xb4, 0xf4, 0x33, 0x45, 0xbd, 0x28, 0xaf, 0x79, - 0xfa, 0xe4, 0x5d, 0xf4, 0x25, 0x94, 0xd5, 0x40, 0xff, 0x74, 0xad, 0x13, 0x7d, 0xe4, 0x5a, 0xcc, - 0x0f, 0xcb, 0xeb, 0x8c, 0x75, 0x3b, 0x1c, 0xaf, 0x45, 0x87, 0xd1, 0x7b, 0xb0, 0x66, 0x3b, 0x8a, - 0xa3, 0xab, 0xb2, 0xa2, 0x69, 0x16, 0xb1, 0xed, 0xb2, 0xc0, 0x26, 0x94, 0x38, 0xb5, 0xc2, 0x89, - 0xe2, 0x5f, 0x97, 0xe0, 0xc1, 0xe5, 0x0e, 0x4f, 0xb7, 0xe7, 0x43, 0x50, 0x73, 0x2b, 0x62, 0xbf, - 0x8b, 0x3e, 0x84, 0x8d, 0x63, 0x7f, 0xae, 0x7c, 0x46, 0x2c, 0x9b, 0xee, 0x8b, 0x1a, 0x5d, 0x09, - 0x0b, 0xc1, 0xc0, 0x6b, 0x4e, 0xa7, 0xe6, 0x34, 0x51, 0x0c, 0xf7, 0x44, 0x51, 0x1d, 0xd7, 0x22, - 0x16, 0xb3, 0xba, 0x12, 0x8e, 0xd1, 0xd0, 0x11, 0x20, 0xdb, 0x9d, 0x4e, 0x4d, 0xcb, 0x21, 0x9a, - 0x1c, 0x04, 0xbc, 0x25, 0x16, 0x67, 0x9e, 0x5e, 0x15, 0xa4, 0x82, 0x60, 0xb3, 0x11, 0x60, 0x04, - 0x2e, 0x23, 0x81, 0xa0, 0xba, 0x96, 0x45, 0x0c, 0x27, 0x84, 0x5d, 0x7e, 0x4b, 0xd8, 0x75, 0x0f, - 0x21, 0x00, 0x7d, 0x1f, 0xd6, 0xd5, 0xb1, 0x62, 0xdb, 0xb2, 0x79, 0x22, 0x6b, 0x84, 0x46, 0x01, - 0x66, 0xdc, 0x45, 0x5c, 0x62, 0xe4, 0xde, 0x49, 0x9d, 0x11, 0x11, 0x82, 0x25, 0xe6, 0xe9, 0xab, - 0xcc, 0xd3, 0x59, 0x9b, 0x9a, 0x84, 0x7d, 0x6a, 0x5a, 0x0e, 0x8f, 0x01, 0x39, 0x1e, 0x23, 0x18, - 0x85, 0xc5, 0x88, 0xc7, 0x50, 0xd4, 0x6d, 0x59, 0x39, 0x53, 0xf4, 0x31, 0xf3, 0x2d, 0x6e, 0xc2, - 0x05, 0xdd, 0xae, 0xf8, 0x24, 0xf4, 0x6b, 0xd8, 0xb1, 0x79, 0xec, 0x91, 0x0d, 0x1e, 0x8a, 0x64, - 0x2f, 0xc0, 0x19, 0xca, 0xd4, 0x33, 0xea, 0x6d, 0x8f, 0x23, 0x12, 0xab, 0x88, 0xd5, 0x55, 0xa6, - 0xe8, 0x1b, 0xb8, 0xbb, 0x60, 0xf2, 0x54, 0x31, 0x5c, 0xcf, 0xe4, 0xcb, 0x49, 0xb3, 0xfb, 0x8a, - 0xe1, 0xa2, 0x2f, 0xe1, 0xce, 0x82, 0xe9, 0x23, 0xc3, 0x73, 0x83, 0xad, 0xa4, 0xc9, 0x4d, 0x43, - 0xfc, 0x01, 0x84, 0x81, 0xa5, 0x8f, 0x46, 0xc4, 0xaa, 0x30, 0xef, 0x90, 0x88, 0x83, 0xaa, 0xb0, - 0x16, 0xa3, 0x51, 0x43, 0xcb, 0x3e, 0x2d, 0xec, 0xef, 0xc4, 0x74, 0x13, 0x63, 0xc1, 0x33, 0x33, - 0xa8, 0x90, 0xd9, 0xed, 0x99, 0xe1, 0x42, 0x66, 0x81, 0xf4, 0xdf, 0x01, 0x4a, 0x31, 0x36, 0xb4, - 0x06, 0x19, 0x9d, 0x47, 0xcd, 0x12, 0xce, 0xe8, 0x1a, 0xb5, 0x6d, 0xd3, 0x20, 0xd2, 0xa9, 0xe9, - 0xdf, 0x05, 0x7e, 0x97, 0x46, 0x36, 0xdd, 0xa6, 0xb3, 0xce, 0xfc, 0x00, 0x19, 0xf4, 0xd1, 0x3d, - 0xc8, 0xeb, 0x93, 0x89, 0xeb, 0x44, 0xc2, 0x62, 0x48, 0x40, 0x1d, 0x58, 0xf3, 0xce, 0x2e, 0x39, - 0x0a, 0xb5, 0x42, 0xcf, 0xd2, 0xc4, 0xa4, 0xd3, 0x48, 0x31, 0xce, 0x56, 0x0a, 0xcf, 0xcc, 0x45, - 0xdf, 0x03, 0x72, 0xed, 0xe3, 0xa6, 0xa2, 0x8d, 0x88, 0x1f, 0x9d, 0x89, 0xc6, 0xec, 0xac, 0xb0, - 0xff, 0x7e, 0x12, 0xe2, 0x50, 0xaa, 0xce, 0x70, 0xb7, 0x52, 0x38, 0x01, 0x03, 0x29, 0xb0, 0x19, - 0x50, 0xeb, 0x34, 0xa8, 0xfb, 0xe0, 0xab, 0x0c, 0xfc, 0x97, 0x97, 0x82, 0x47, 0x27, 0xb4, 0x52, - 0x38, 0x19, 0x09, 0xb5, 0xa1, 0x74, 0xae, 0x9f, 0xe8, 0x95, 0xbe, 0x2f, 0x89, 0x1c, 0x83, 0x7e, - 0x9c, 0x04, 0x7d, 0x14, 0x65, 0x6c, 0xa5, 0x70, 0x7c, 0x26, 0x95, 0x03, 0x25, 0x04, 0xdb, 0xaf, - 0xd8, 0x92, 0xa3, 0x30, 0xbf, 0x58, 0x20, 0x87, 0xa3, 0x39, 0x6e, 0x2a, 0x87, 0x79, 0x0c, 0x96, - 0x5b, 0xd9, 0xa7, 0x1d, 0x73, 0xa4, 0x1b, 0xcc, 0x6d, 0x0a, 0xfb, 0xf7, 0x12, 0x35, 0x25, 0xb5, - 0x18, 0x4f, 0x2b, 0x85, 0x03, 0x7e, 0x84, 0x41, 0xd0, 0x4e, 0xd5, 0x69, 0x87, 0x28, 0x36, 0x69, - 0x5a, 0x8a, 0x41, 0xcf, 0x58, 0x60, 0x18, 0x4f, 0x92, 0x30, 0xea, 0xad, 0x5a, 0x3f, 0xca, 0xdb, - 0x4a, 0xe1, 0xb9, 0xf9, 0xe8, 0x00, 0x8a, 0x23, 0xcb, 0x74, 0xa7, 0x98, 0xa8, 0x84, 0x5a, 0x5f, - 0x91, 0xe1, 0x3d, 0x4a, 0xc2, 0x6b, 0x46, 0xf8, 0x5a, 0x29, 0x1c, 0x9b, 0x87, 0x86, 0xb0, 0x11, - 0xed, 0x1f, 0xba, 0x63, 0x47, 0x67, 0x97, 0x4f, 0x61, 0xff, 0xbd, 0xab, 0xc0, 0x18, 0x73, 0x2b, - 0x85, 0xe7, 0x11, 0xd0, 0x33, 0x58, 0x19, 0x4d, 0x75, 0xb3, 0x6d, 0xb0, 0xcb, 0x6a, 0x81, 0x93, - 0x36, 0xfb, 0xed, 0x5e, 0x9b, 0x8a, 0xca, 0xe3, 0x45, 0x75, 0x80, 0x63, 0xc5, 0x3e, 0x95, 0x54, - 0x4b, 0x9f, 0x3a, 0xec, 0xee, 0x9a, 0x75, 0x08, 0x2f, 0x1c, 0x50, 0x75, 0x57, 0x03, 0xce, 0x56, - 0x1a, 0x47, 0xe6, 0xa1, 0x0a, 0xe4, 0x4f, 0x75, 0xcd, 0x03, 0x11, 0x12, 0x6c, 0x29, 0x02, 0xd2, - 0x6a, 0xd7, 0x03, 0x8c, 0x70, 0x16, 0x52, 0x61, 0x4b, 0x23, 0xd3, 0xb1, 0x79, 0xe1, 0x87, 0x71, - 0x3f, 0xcf, 0x2e, 0x6f, 0x24, 0x98, 0x3d, 0xc7, 0xab, 0x27, 0x4e, 0x68, 0xa5, 0xf1, 0x02, 0x28, - 0xb4, 0x0b, 0xd9, 0xb1, 0x39, 0x2a, 0x23, 0x86, 0xb8, 0x95, 0x80, 0xd8, 0x31, 0x47, 0xad, 0x34, - 0xa6, 0x4c, 0xe8, 0x39, 0xac, 0x52, 0x19, 0xf5, 0x5c, 0xa7, 0x7c, 0x2b, 0x41, 0xa0, 0x9c, 0x9f, - 0xca, 0xb3, 0xe7, 0xd2, 0xa3, 0xf8, 0xcc, 0xe8, 0x6b, 0xc8, 0x33, 0xe5, 0x48, 0xc4, 0xd0, 0xca, - 0xb7, 0x13, 0xec, 0xd6, 0x9b, 0xe9, 0xf3, 0x50, 0x31, 0x04, 0x13, 0xaa, 0x79, 0x58, 0xf5, 0x54, - 0x55, 0xcd, 0xc1, 0x0a, 0x67, 0x15, 0xb7, 0x61, 0x33, 0x31, 0x2c, 0x89, 0x77, 0xe1, 0xce, 0xc2, - 0xe8, 0x22, 0x3e, 0x80, 0x7b, 0x97, 0x45, 0x07, 0x71, 0x0b, 0x6e, 0x27, 0xb9, 0x78, 0x04, 0x74, - 0xde, 0x55, 0xc5, 0x8f, 0x61, 0x7d, 0xc6, 0xef, 0x68, 0xd4, 0x1d, 0xd3, 0xc6, 0xd0, 0xf6, 0x52, - 0xfd, 0x3c, 0x0e, 0x09, 0xe2, 0x1d, 0xd8, 0x5e, 0xe0, 0x64, 0x62, 0x1b, 0x6e, 0x25, 0x98, 0x38, - 0xc5, 0x63, 0xf2, 0x88, 0x3c, 0xba, 0x42, 0x02, 0xba, 0x0d, 0xcb, 0x67, 0xca, 0xd8, 0xe5, 0x17, - 0xca, 0x32, 0xe6, 0x1d, 0xf1, 0x2f, 0x69, 0x28, 0x2f, 0x72, 0x97, 0x2b, 0x00, 0xb7, 0x60, 0x85, - 0x61, 0xd8, 0xe5, 0xec, 0xa3, 0xec, 0xd3, 0x65, 0xec, 0xf5, 0xd0, 0x73, 0xef, 0xb1, 0xb1, 0xc4, - 0x1e, 0x1b, 0x71, 0x9f, 0x98, 0x5b, 0x23, 0x7c, 0x66, 0x88, 0xff, 0x95, 0x0e, 0x2e, 0x37, 0xee, - 0x6d, 0x68, 0x8f, 0x5b, 0x52, 0xd7, 0x9d, 0xb0, 0xd5, 0xd7, 0xf6, 0x6f, 0xc7, 0xc1, 0xfa, 0xed, - 0x5e, 0xd7, 0x9d, 0x60, 0x9f, 0x09, 0x7d, 0x03, 0x30, 0x75, 0xc7, 0xe3, 0xe1, 0xb4, 0x6e, 0x9e, - 0xf3, 0xbc, 0x6d, 0x6d, 0xff, 0xfe, 0xdc, 0x94, 0xb6, 0xd1, 0x0f, 0x98, 0x70, 0x64, 0x02, 0xfa, - 0x02, 0x80, 0x3b, 0x77, 0x43, 0x1b, 0xf9, 0x6f, 0xa5, 0xed, 0x84, 0xe9, 0x74, 0x18, 0x47, 0x58, - 0xc5, 0x2f, 0x60, 0x33, 0xd1, 0xd9, 0xd1, 0x03, 0x00, 0x9b, 0xb5, 0x22, 0x12, 0x8c, 0x50, 0xc4, - 0xe7, 0x70, 0x3b, 0xc9, 0xc1, 0xaf, 0x9c, 0xf7, 0x3f, 0x69, 0xb8, 0x77, 0x99, 0x27, 0xd3, 0xdc, - 0xd4, 0x49, 0x78, 0x82, 0x47, 0x69, 0xe8, 0xa5, 0xa7, 0x27, 0x2e, 0xa7, 0xe7, 0xd7, 0x0e, 0x13, - 0x7b, 0x7e, 0x23, 0xa2, 0x3b, 0x12, 0x3e, 0xf9, 0x29, 0x15, 0x6d, 0x40, 0xe9, 0x60, 0xd8, 0xe9, - 0xc8, 0x52, 0x63, 0x30, 0x68, 0x77, 0x9b, 0x92, 0x90, 0x42, 0x05, 0x58, 0xed, 0x36, 0x06, 0x47, - 0x3d, 0xfc, 0x4a, 0x48, 0xa3, 0x1c, 0x2c, 0x1d, 0xb5, 0x0f, 0xda, 0x42, 0x06, 0xad, 0x42, 0x76, - 0x28, 0x55, 0x85, 0x2c, 0x2a, 0x41, 0xbe, 0xda, 0x19, 0x36, 0x06, 0xbd, 0xde, 0xa0, 0x25, 0x2c, - 0xa1, 0x5b, 0xb0, 0x3e, 0xc0, 0xed, 0x66, 0xb3, 0x81, 0xe5, 0x4a, 0x6d, 0xd0, 0xee, 0x75, 0x25, - 0x61, 0x59, 0x2c, 0x40, 0x3e, 0x08, 0x37, 0xe2, 0x14, 0x4a, 0xb1, 0x58, 0xf2, 0xd6, 0xe6, 0xf2, - 0x71, 0xd4, 0x23, 0xd6, 0xf6, 0xef, 0xcc, 0x71, 0xf7, 0x5c, 0xe7, 0x35, 0x65, 0xf0, 0x9d, 0xa5, - 0x01, 0xeb, 0x33, 0x31, 0xe8, 0x46, 0x3e, 0x77, 0x0e, 0x3b, 0x34, 0x40, 0xbc, 0x43, 0xf5, 0xe4, - 0xf3, 0xb9, 0xea, 0x49, 0x7c, 0xf3, 0x47, 0xfa, 0x81, 0x9e, 0x50, 0x38, 0xf9, 0xb7, 0x2c, 0x14, - 0xa3, 0x43, 0x41, 0x22, 0x9f, 0x8e, 0x24, 0xf2, 0x3b, 0x90, 0xd3, 0x74, 0x9b, 0x26, 0x7e, 0x9a, - 0x97, 0x42, 0x06, 0x7d, 0x6a, 0x97, 0x16, 0x19, 0xb9, 0x63, 0xc5, 0x31, 0xad, 0x0b, 0xe6, 0x21, - 0x79, 0x1c, 0xa1, 0xa0, 0x6f, 0xa1, 0x48, 0x73, 0x63, 0xdd, 0x18, 0xc9, 0x13, 0x53, 0xf3, 0x43, - 0xc0, 0xbd, 0xb9, 0xbd, 0x1d, 0x71, 0xa6, 0x43, 0x53, 0x23, 0xb8, 0x70, 0x1e, 0x76, 0xd0, 0x73, - 0xc8, 0x2b, 0xae, 0x73, 0xca, 0x67, 0x2f, 0x27, 0xa8, 0x85, 0xce, 0xae, 0xb8, 0xce, 0x29, 0x9b, - 0x9a, 0x53, 0xbc, 0x16, 0x4d, 0x7b, 0xd5, 0x53, 0xc5, 0x30, 0xc8, 0x98, 0x65, 0x92, 0x25, 0xec, - 0x77, 0xd1, 0x1e, 0xac, 0x28, 0x53, 0xb9, 0x2a, 0x49, 0x5e, 0x16, 0xb8, 0x3d, 0x07, 0x57, 0x95, - 0xa4, 0xda, 0xc9, 0x08, 0x2f, 0x2b, 0xd3, 0xaa, 0x24, 0xa1, 0x6f, 0xe9, 0x1b, 0x48, 0xa7, 0xef, - 0xaa, 0xaa, 0x24, 0xc9, 0x63, 0xdd, 0x76, 0xca, 0x39, 0x96, 0xbb, 0x2f, 0x9c, 0x58, 0xe2, 0xfc, - 0x55, 0x49, 0xea, 0xe8, 0xb6, 0x83, 0xee, 0xb2, 0x2b, 0x9d, 0xc8, 0xb6, 0xad, 0xfb, 0x2f, 0xf5, - 0x1c, 0x25, 0x48, 0xb6, 0xae, 0xd1, 0x98, 0x69, 0x90, 0x1f, 0x27, 0xa6, 0xe1, 0x3d, 0x9a, 0xbd, - 0x9e, 0xf8, 0x1f, 0x69, 0xc8, 0x33, 0xcd, 0x38, 0xd4, 0x7b, 0xf7, 0x60, 0x89, 0x09, 0x80, 0x5b, - 0xf1, 0xce, 0xbc, 0x6a, 0x29, 0x17, 0x93, 0x00, 0xe3, 0x8b, 0x9e, 0x3e, 0x13, 0x3f, 0x3d, 0x82, - 0x25, 0xb6, 0x0f, 0xae, 0x2a, 0xd6, 0x46, 0x35, 0x98, 0x7d, 0xf8, 0x79, 0x0f, 0xd2, 0x4b, 0x6c, - 0x68, 0x76, 0x86, 0xb8, 0x0f, 0x10, 0x8a, 0x80, 0x2e, 0x23, 0x49, 0xed, 0xba, 0x6f, 0x47, 0xb4, - 0x8d, 0x04, 0xc8, 0xf6, 0xa5, 0x57, 0xde, 0xf3, 0x85, 0x36, 0xc5, 0xc7, 0x50, 0x92, 0x1c, 0x8b, - 0xaa, 0x9a, 0xd8, 0x36, 0x35, 0x75, 0x01, 0xb2, 0x13, 0x7b, 0xe4, 0x97, 0xc9, 0x26, 0xf6, 0x48, - 0xfc, 0x04, 0x50, 0x8c, 0xa5, 0x62, 0x59, 0xca, 0x05, 0x35, 0xc9, 0x89, 0x3d, 0x62, 0x6d, 0xf6, - 0x90, 0xca, 0xe3, 0xa0, 0x2f, 0xee, 0x41, 0xb1, 0x71, 0x46, 0x0c, 0xc7, 0xf3, 0x26, 0x6a, 0xa2, - 0x54, 0x69, 0xc4, 0xa0, 0x71, 0x88, 0x41, 0x67, 0x71, 0x84, 0x22, 0x2a, 0x00, 0x8c, 0x9f, 0x39, - 0x36, 0xda, 0x81, 0x55, 0xc7, 0x66, 0x0b, 0xf2, 0x5d, 0xb4, 0x52, 0xd8, 0x27, 0xa0, 0x2d, 0x58, - 0x76, 0x8e, 0x4d, 0x93, 0xcb, 0x34, 0xd7, 0x4a, 0x61, 0xde, 0x45, 0x65, 0x58, 0x71, 0x74, 0xc3, - 0x79, 0xfe, 0x8c, 0x49, 0x35, 0x4b, 0x73, 0x42, 0xde, 0xaf, 0x2e, 0x43, 0xf6, 0x4c, 0x19, 0x8b, - 0x1d, 0x58, 0x66, 0x4b, 0x50, 0xb1, 0x38, 0xe1, 0x2e, 0x78, 0x31, 0xed, 0xe3, 0xe0, 0xd6, 0xcc, - 0x24, 0x98, 0x55, 0xb8, 0x35, 0xff, 0x3a, 0x15, 0xff, 0x08, 0xb7, 0xa9, 0xef, 0xd7, 0x75, 0xab, - 0x67, 0x1d, 0xe8, 0x63, 0xe2, 0x1f, 0x54, 0x80, 0xac, 0xa6, 0xfb, 0x79, 0x03, 0x6d, 0x52, 0xe3, - 0x9a, 0x5a, 0xe4, 0x44, 0xff, 0xd1, 0x13, 0xba, 0xd7, 0xa3, 0x22, 0x31, 0x8d, 0xf1, 0xc5, 0x81, - 0x39, 0xd6, 0xbc, 0x32, 0x45, 0x0e, 0x47, 0x28, 0xf4, 0xfa, 0x9a, 0x59, 0xc1, 0x9e, 0x9a, 0x86, - 0x4d, 0xb8, 0xbb, 0xdb, 0xee, 0xd8, 0xe9, 0x2b, 0xce, 0xa9, 0x7f, 0x0d, 0x85, 0x14, 0xf1, 0x5f, - 0xd3, 0xb0, 0x8e, 0x89, 0xa2, 0x45, 0xb7, 0xf5, 0x39, 0xac, 0x9c, 0xf0, 0x85, 0xd2, 0x09, 0xf7, - 0x6f, 0x45, 0x55, 0x89, 0x6d, 0xeb, 0xc7, 0x63, 0xc2, 0xd7, 0xc6, 0x1e, 0x33, 0x55, 0xf1, 0x89, - 0x3e, 0x26, 0x46, 0xf8, 0xe2, 0x0d, 0xfa, 0x34, 0x8a, 0xda, 0xf4, 0x7e, 0xe4, 0xf2, 0xc6, 0xbc, - 0x43, 0xcf, 0x3f, 0x26, 0x06, 0x33, 0xdd, 0x2c, 0xa6, 0x4d, 0xb1, 0x0e, 0x42, 0xb8, 0x1b, 0xef, - 0x08, 0xf7, 0x20, 0x6f, 0x11, 0x45, 0xab, 0x99, 0xae, 0xe1, 0x78, 0x7a, 0x08, 0x09, 0x54, 0x41, - 0x9a, 0xe2, 0x28, 0x6c, 0xc5, 0x22, 0x66, 0x6d, 0xf1, 0x3f, 0xd3, 0x20, 0x1c, 0x59, 0xba, 0x43, - 0x7e, 0xe6, 0x53, 0x6d, 0xd1, 0xc0, 0x34, 0xa5, 0xb9, 0x2e, 0xd7, 0x88, 0xd7, 0x63, 0x65, 0x25, - 0xd7, 0x76, 0xba, 0xa6, 0xd3, 0xf8, 0x91, 0x46, 0x1f, 0xaf, 0x4a, 0x19, 0xa5, 0x05, 0xfb, 0x5e, - 0x8e, 0xec, 0xfb, 0x3d, 0x58, 0xa7, 0x3b, 0x6e, 0x1b, 0x27, 0xa6, 0xbf, 0x6b, 0x04, 0x4b, 0xd3, - 0x50, 0x73, 0xac, 0x2d, 0xfe, 0x09, 0x84, 0x90, 0xcd, 0x13, 0x52, 0xd2, 0x35, 0x40, 0x23, 0x87, - 0xfe, 0x4f, 0x7c, 0xdb, 0x59, 0xcc, 0xda, 0x94, 0xc6, 0xe2, 0x12, 0xaf, 0x74, 0x05, 0xb1, 0x67, - 0x62, 0x6a, 0x03, 0xdd, 0x2b, 0x0c, 0x67, 0xb1, 0xdf, 0xa5, 0x6a, 0xd3, 0xed, 0xba, 0x6e, 0x79, - 0x75, 0x54, 0xde, 0x11, 0x7f, 0x07, 0x42, 0x90, 0xe7, 0x44, 0x7c, 0x96, 0x27, 0x37, 0x51, 0x3b, - 0x0b, 0x29, 0xe8, 0x7d, 0x58, 0x73, 0xf4, 0x09, 0x31, 0x5d, 0x47, 0x22, 0xaa, 0x69, 0x68, 0xb6, - 0x17, 0xe6, 0x66, 0xa8, 0xe2, 0x03, 0x28, 0x06, 0xd8, 0x2f, 0xcd, 0xe3, 0xd9, 0xe2, 0x88, 0xf8, - 0x24, 0xb2, 0xf6, 0x4b, 0xf3, 0x98, 0x85, 0x6b, 0x01, 0xb2, 0xba, 0xc6, 0xeb, 0x33, 0x25, 0x4c, - 0x9b, 0xe2, 0x6b, 0x28, 0xb7, 0xda, 0x75, 0xec, 0x1a, 0x86, 0x6e, 0x8c, 0x5e, 0x9a, 0xc7, 0x2c, - 0xda, 0x62, 0x66, 0xf5, 0x11, 0xc4, 0x2c, 0x2b, 0xb7, 0x20, 0x58, 0x3a, 0x9b, 0xb4, 0x35, 0x5f, - 0x4a, 0xb4, 0x4d, 0x15, 0x6b, 0x9b, 0xae, 0xa5, 0x12, 0x2f, 0xea, 0x7a, 0x3d, 0xf1, 0x4f, 0xb0, - 0x1e, 0x39, 0x39, 0x83, 0xfb, 0x10, 0xb2, 0x3f, 0x98, 0xc7, 0xde, 0x47, 0x8b, 0x78, 0xf8, 0x8d, - 0x6e, 0x14, 0x53, 0x2e, 0x2a, 0x25, 0xdd, 0x3e, 0xd0, 0x0d, 0xdd, 0x3e, 0x0d, 0xae, 0xe6, 0x08, - 0x25, 0xf4, 0xd6, 0x97, 0xb6, 0x69, 0x84, 0x97, 0xb3, 0x4f, 0x11, 0xf7, 0xa0, 0xd0, 0x69, 0xd4, - 0x83, 0xbb, 0xff, 0x21, 0x14, 0x8e, 0x59, 0x39, 0x5b, 0x0d, 0x7c, 0xa3, 0x84, 0x81, 0x91, 0x98, - 0x73, 0x88, 0x3f, 0xc2, 0x9d, 0xa1, 0x54, 0x7d, 0x87, 0x2c, 0xe5, 0x8b, 0xb9, 0x2c, 0xe5, 0x6e, - 0x3c, 0xc5, 0x62, 0x4f, 0xab, 0x84, 0x3c, 0xe5, 0xaf, 0xcb, 0xb0, 0x16, 0x1f, 0xa4, 0x66, 0x46, - 0x0c, 0x9e, 0x94, 0x78, 0x9f, 0x08, 0xbc, 0x2e, 0x55, 0xe0, 0x99, 0xae, 0xf9, 0xf7, 0xcc, 0x99, - 0xae, 0xf1, 0xaf, 0x2f, 0xfe, 0x9d, 0x47, 0x9b, 0x73, 0xa5, 0x5a, 0xfe, 0x09, 0x23, 0x5e, 0xaa, - 0x65, 0x45, 0x6b, 0x53, 0x73, 0x55, 0xc7, 0xfb, 0x82, 0xe1, 0x77, 0x99, 0x42, 0x89, 0xa5, 0x2b, - 0x3c, 0xb7, 0xa0, 0x0a, 0x65, 0x3d, 0xf4, 0x00, 0x0a, 0xae, 0x4d, 0xe4, 0x5a, 0xbd, 0x26, 0x37, - 0x6a, 0x87, 0x5e, 0x55, 0x3f, 0xef, 0xda, 0xa4, 0x56, 0xaf, 0x35, 0x6a, 0x87, 0x34, 0x13, 0xa0, - 0xe3, 0xb8, 0x5b, 0x6f, 0x4b, 0x5e, 0x39, 0x3f, 0xe7, 0xda, 0x84, 0xf5, 0xd1, 0x53, 0x10, 0xe8, - 0x60, 0xab, 0x5d, 0x97, 0x5f, 0x35, 0x7e, 0x5b, 0xed, 0x55, 0x70, 0xdd, 0xcb, 0x16, 0xd6, 0x5c, - 0x9b, 0xb4, 0xda, 0x75, 0x9f, 0x8a, 0x44, 0x28, 0xf9, 0x9c, 0x87, 0xbd, 0xa1, 0xd4, 0xf0, 0x4a, - 0xa1, 0x05, 0xce, 0xc6, 0x48, 0xfe, 0x56, 0x28, 0x0f, 0xae, 0x1c, 0x79, 0xe5, 0xce, 0x3c, 0xe7, - 0xc0, 0x95, 0x23, 0xb4, 0x0d, 0xab, 0x74, 0x7c, 0x78, 0x28, 0x79, 0xd5, 0xcc, 0x15, 0xd7, 0x26, - 0xc3, 0x43, 0x09, 0xdd, 0x07, 0xa0, 0x03, 0x52, 0x03, 0xb7, 0x2b, 0x1d, 0xbf, 0x92, 0xef, 0xda, - 0x84, 0x13, 0xd0, 0x4b, 0x58, 0xb3, 0x0c, 0x4d, 0xb7, 0xc3, 0x22, 0xf3, 0x5a, 0xc2, 0x37, 0xb2, - 0xb8, 0xae, 0x1a, 0xce, 0x29, 0xb1, 0x0c, 0xe2, 0xe0, 0x12, 0x9b, 0x1a, 0xa8, 0xf0, 0x10, 0x04, - 0x55, 0x53, 0x65, 0xa2, 0x4e, 0x42, 0xb4, 0xf5, 0xeb, 0xa3, 0xad, 0xa9, 0x9a, 0xda, 0x50, 0x27, - 0x01, 0x5c, 0x05, 0x8a, 0xee, 0x24, 0xb2, 0x31, 0x21, 0xe1, 0x2b, 0x62, 0x1c, 0x6a, 0x78, 0x28, - 0xe1, 0x82, 0x3b, 0x09, 0x77, 0xf4, 0x29, 0x6c, 0x6a, 0xe4, 0x4c, 0xa6, 0x71, 0x51, 0x3e, 0xd5, - 0x35, 0xf9, 0x0d, 0xb9, 0x38, 0x36, 0x15, 0x4b, 0x63, 0x75, 0x8e, 0x3c, 0x46, 0x1a, 0x39, 0xa3, - 0xf1, 0xa7, 0xa5, 0x6b, 0xaf, 0xbc, 0x11, 0xf4, 0x21, 0xa0, 0xd8, 0x94, 0x89, 0xe9, 0xda, 0x84, - 0xd5, 0x39, 0xf2, 0x78, 0x3d, 0xe4, 0x3f, 0xa4, 0x64, 0xf4, 0x01, 0x08, 0x31, 0x66, 0x4b, 0x39, - 0x67, 0x85, 0x8d, 0x3c, 0x2e, 0x85, 0xac, 0x58, 0x39, 0x17, 0xfb, 0xb0, 0x95, 0x7c, 0x6a, 0x96, - 0x4d, 0x9a, 0xb6, 0xc3, 0xbe, 0x79, 0x78, 0x4e, 0x96, 0xa3, 0x84, 0x8a, 0xa6, 0x59, 0xe8, 0x0e, - 0xe4, 0x28, 0x3e, 0x1b, 0xe3, 0xf6, 0xbf, 0xaa, 0x91, 0x33, 0x3a, 0x24, 0x7e, 0x03, 0x1b, 0x73, - 0x87, 0xa7, 0x11, 0x59, 0xd5, 0x2c, 0x73, 0xe2, 0xb9, 0x10, 0xef, 0xd0, 0x18, 0x46, 0x2f, 0x25, - 0xbf, 0xd0, 0x4c, 0xdb, 0xe2, 0x5f, 0xd2, 0xf0, 0x20, 0x90, 0xfc, 0xcd, 0x23, 0x40, 0x75, 0x2e, - 0x02, 0xc4, 0x2b, 0x9b, 0xfe, 0x12, 0x6d, 0xc3, 0x21, 0xd6, 0x89, 0xa2, 0x92, 0x84, 0x60, 0x20, - 0xc3, 0x63, 0xfe, 0x0e, 0x25, 0xda, 0x42, 0x76, 0xf4, 0x15, 0x2c, 0xb1, 0x54, 0x9d, 0x97, 0xd9, - 0xaf, 0xbb, 0x08, 0x9b, 0x23, 0xfe, 0x39, 0x0b, 0x77, 0x16, 0x23, 0x27, 0xdd, 0x8d, 0xdf, 0x7a, - 0xf7, 0x20, 0x7f, 0x37, 0x7e, 0x78, 0xbd, 0xd5, 0xf6, 0x22, 0x09, 0x3b, 0x0d, 0xe5, 0x53, 0xef, - 0x8b, 0xd5, 0x33, 0x3f, 0x54, 0x87, 0x14, 0x9a, 0x37, 0x18, 0xc4, 0x99, 0x28, 0xf6, 0x9b, 0x67, - 0x5e, 0xac, 0x0a, 0xfa, 0xd1, 0x48, 0xb8, 0x1c, 0x8f, 0x84, 0x3d, 0x40, 0xda, 0xa9, 0x3a, 0xe5, - 0x5f, 0x26, 0x82, 0xdc, 0x9e, 0x57, 0xd6, 0x1f, 0xc6, 0x36, 0x59, 0x6f, 0xd5, 0xfa, 0x71, 0x36, - 0x9c, 0x30, 0x15, 0x3d, 0x81, 0x92, 0xaf, 0x86, 0xb6, 0x31, 0xb4, 0x89, 0x17, 0xe2, 0xe2, 0x44, - 0xb1, 0x06, 0x4b, 0xec, 0x0d, 0x06, 0xb0, 0x72, 0x58, 0xe9, 0x0e, 0x2b, 0x1d, 0x21, 0x85, 0xd6, - 0xa1, 0x40, 0xd7, 0x90, 0x6b, 0x9d, 0x76, 0xa3, 0x3b, 0x10, 0xd2, 0x01, 0x41, 0x6a, 0xe0, 0xd7, - 0x0d, 0x2c, 0x64, 0xe8, 0x73, 0x7f, 0xd8, 0x3d, 0xac, 0x74, 0x2b, 0xcd, 0x46, 0x5d, 0xc8, 0x8a, - 0xff, 0x97, 0x05, 0x34, 0xbf, 0xab, 0x30, 0x9b, 0xef, 0x9b, 0x56, 0x70, 0x47, 0x85, 0x14, 0xf4, - 0x14, 0xd6, 0x79, 0x2f, 0x10, 0xb7, 0x67, 0xc6, 0xb3, 0x64, 0x56, 0x6c, 0x23, 0x8a, 0xcd, 0xb2, - 0x3a, 0x4f, 0xe2, 0x21, 0x01, 0xed, 0x82, 0x60, 0x98, 0x0e, 0x7d, 0x58, 0x9a, 0x96, 0xee, 0x28, - 0xec, 0x23, 0x09, 0x4f, 0xbc, 0xe6, 0xe8, 0x68, 0x0f, 0x90, 0x66, 0x76, 0x4d, 0xa7, 0xaa, 0x1b, - 0x5a, 0xb8, 0x2c, 0xd7, 0x45, 0xc2, 0x08, 0xcd, 0x5e, 0x54, 0x65, 0x3c, 0x3e, 0x56, 0xd4, 0x37, - 0x5e, 0xa1, 0x97, 0x5f, 0x23, 0x33, 0x54, 0xf4, 0x0c, 0x56, 0x2c, 0xc5, 0x18, 0x11, 0xbb, 0xbc, - 0xca, 0xac, 0xf8, 0xde, 0x02, 0x95, 0x61, 0xca, 0x84, 0x3d, 0x5e, 0x74, 0x00, 0xab, 0xe6, 0x94, - 0x7f, 0x63, 0xe2, 0xef, 0xd4, 0x5f, 0x5d, 0xa1, 0xe9, 0xbd, 0x1e, 0x67, 0x6f, 0x18, 0x8e, 0x75, - 0x81, 0xfd, 0xc9, 0xa8, 0x06, 0x05, 0xfe, 0x21, 0xb5, 0x65, 0xda, 0x8e, 0x5d, 0xce, 0x33, 0xac, - 0xc7, 0x8b, 0xb0, 0x02, 0x4e, 0x1c, 0x9d, 0xb5, 0xf3, 0x15, 0x14, 0xa3, 0xe8, 0xf4, 0x26, 0x7e, - 0x43, 0x2e, 0x3c, 0xbd, 0xd1, 0x66, 0xbc, 0x22, 0x92, 0xf7, 0x2a, 0x22, 0x5f, 0x65, 0x5e, 0xa4, - 0x45, 0x13, 0xd6, 0x67, 0xce, 0xc8, 0x32, 0x1a, 0xda, 0xe8, 0x98, 0xe7, 0x41, 0x85, 0x34, 0x42, - 0x09, 0xc6, 0x87, 0xd3, 0x29, 0xf1, 0x23, 0x60, 0x84, 0x12, 0xe8, 0x9c, 0x65, 0xa7, 0x51, 0x9d, - 0x53, 0x82, 0xf8, 0x02, 0x6e, 0x27, 0x9d, 0x88, 0xbd, 0x4a, 0x15, 0x35, 0x78, 0x95, 0x2a, 0x2a, - 0xcb, 0xfa, 0xa6, 0x1e, 0x7e, 0x46, 0x9f, 0x8a, 0xab, 0xb0, 0xdc, 0x98, 0x4c, 0x9d, 0x8b, 0xdd, - 0x17, 0x91, 0xdf, 0x35, 0xcc, 0xff, 0x7c, 0x02, 0xad, 0x42, 0xb6, 0x5b, 0xe9, 0x0b, 0x29, 0x94, - 0x83, 0xa5, 0x7e, 0xa5, 0x3b, 0x14, 0xd2, 0x68, 0x05, 0x32, 0xcd, 0xae, 0x90, 0xd9, 0x7d, 0x09, - 0x9b, 0x89, 0xb5, 0x50, 0x54, 0x84, 0x9c, 0xd4, 0xf8, 0x6e, 0xd8, 0xe8, 0xd6, 0x1a, 0x42, 0x8a, - 0x22, 0x54, 0xba, 0x75, 0x3e, 0xaf, 0x47, 0xdd, 0x06, 0xc1, 0x5a, 0xe3, 0xfb, 0x4a, 0x6d, 0x20, - 0x07, 0x4c, 0xd9, 0xdd, 0x8f, 0x40, 0x98, 0xad, 0x6b, 0x52, 0xfe, 0xa1, 0xb7, 0x72, 0xbd, 0x77, - 0xd4, 0x15, 0xd2, 0x14, 0xaa, 0x77, 0x70, 0x20, 0x64, 0x76, 0x3f, 0x06, 0x08, 0xeb, 0x98, 0xd4, - 0x6b, 0x71, 0x5b, 0x6a, 0x77, 0x9b, 0xbc, 0x44, 0x77, 0x50, 0xe9, 0x74, 0x68, 0x87, 0x95, 0xe8, - 0xaa, 0xbd, 0x41, 0x4b, 0xc8, 0xec, 0xfe, 0x2d, 0x0d, 0xab, 0x5e, 0xf1, 0x0c, 0xe5, 0x61, 0xb9, - 0x3b, 0x3c, 0x94, 0x3f, 0x15, 0x52, 0x7e, 0x73, 0x5f, 0x48, 0xfb, 0xcd, 0xcf, 0x84, 0x8c, 0xdf, - 0x7c, 0x26, 0x64, 0xfd, 0xe6, 0xe7, 0xc2, 0x92, 0xdf, 0x7c, 0x2e, 0x2c, 0xfb, 0xcd, 0x2f, 0x84, - 0x15, 0xbf, 0xf9, 0x42, 0x58, 0xf5, 0x9b, 0x5f, 0x0a, 0x39, 0xba, 0x23, 0xb6, 0xc4, 0x27, 0x42, - 0x3e, 0x68, 0x7f, 0x2a, 0x40, 0xd0, 0xde, 0x17, 0x0a, 0x41, 0xfb, 0x33, 0xa1, 0x18, 0xb4, 0x9f, - 0x09, 0xa5, 0xa0, 0xfd, 0xb9, 0xb0, 0x16, 0xb4, 0x9f, 0x0b, 0xeb, 0x41, 0xfb, 0x0b, 0x41, 0x08, - 0xda, 0x2f, 0x84, 0x8d, 0xa0, 0xfd, 0xa5, 0x80, 0xfc, 0xf6, 0xfe, 0x27, 0xc2, 0xad, 0xdd, 0x8f, - 0xa0, 0x18, 0x2d, 0x00, 0x52, 0xe1, 0x75, 0x7a, 0x47, 0x5c, 0x9e, 0xad, 0x76, 0xb3, 0x25, 0xa4, - 0x29, 0xfb, 0xa0, 0xd7, 0x6c, 0x76, 0x1a, 0x42, 0x66, 0xb7, 0x0e, 0xeb, 0x33, 0x65, 0x2d, 0x2a, - 0xcb, 0x61, 0xf7, 0x55, 0x97, 0xca, 0x3e, 0x45, 0xb5, 0x51, 0xe9, 0x73, 0x1d, 0x48, 0x83, 0x8a, - 0x90, 0x41, 0xb7, 0x60, 0x5d, 0x1a, 0x54, 0xe4, 0x83, 0x4a, 0xbb, 0xd3, 0x7b, 0xdd, 0xc0, 0x72, - 0xa5, 0x2f, 0x64, 0x77, 0xeb, 0x50, 0x8a, 0x55, 0x77, 0xd0, 0x26, 0x6c, 0x50, 0xae, 0x6e, 0x6f, - 0x20, 0xd7, 0x7a, 0xdd, 0x6e, 0xa3, 0x36, 0x68, 0xd4, 0xb9, 0xe0, 0x2b, 0x7d, 0x79, 0x48, 0x01, - 0x37, 0xa0, 0x44, 0x39, 0xc2, 0xd1, 0xcc, 0xee, 0xfb, 0xbc, 0xc6, 0xe7, 0x17, 0xc9, 0xa8, 0x41, - 0x1d, 0xf5, 0x2b, 0xfb, 0x72, 0x5f, 0x7a, 0xc5, 0xf7, 0xdf, 0xeb, 0x37, 0xba, 0x42, 0x7a, 0xf7, - 0xef, 0x40, 0x98, 0x7d, 0xb7, 0xd2, 0xfd, 0x0d, 0x0e, 0xa9, 0xd9, 0x08, 0x50, 0xac, 0x56, 0xa4, - 0x96, 0x2c, 0xd5, 0x70, 0xbb, 0x3f, 0x90, 0x78, 0x00, 0xa7, 0xd9, 0xa5, 0x4f, 0xc8, 0xec, 0xff, - 0x6d, 0x0f, 0x56, 0xfa, 0xcf, 0x8e, 0xba, 0xfd, 0x4f, 0xd1, 0x09, 0x3c, 0x6e, 0x12, 0xe7, 0x8a, - 0x5f, 0x5d, 0xa0, 0xf8, 0x35, 0x49, 0xfd, 0x67, 0xe7, 0x6d, 0x7e, 0xa7, 0x25, 0xa6, 0xd0, 0x9f, - 0xd3, 0xf0, 0x84, 0xe7, 0x02, 0x57, 0xac, 0xf5, 0x36, 0xb8, 0x6f, 0xbb, 0x89, 0xd7, 0x70, 0x27, - 0x7a, 0xd8, 0xf8, 0x0f, 0xbf, 0x92, 0x0e, 0x79, 0x9d, 0xdf, 0x93, 0x89, 0x29, 0xf4, 0x03, 0xdc, - 0x9b, 0x39, 0x5b, 0x1c, 0xfa, 0x3a, 0x30, 0xd7, 0x5d, 0xeb, 0x7b, 0xd8, 0x91, 0x22, 0x67, 0x98, - 0xf9, 0x3d, 0xda, 0x93, 0xeb, 0xfc, 0x3e, 0x6c, 0x27, 0xe1, 0xa8, 0x62, 0x0a, 0xfd, 0x1e, 0xb6, - 0x67, 0x4e, 0x11, 0xde, 0xe5, 0x97, 0xff, 0xc0, 0x6f, 0xe7, 0x8a, 0x71, 0x31, 0x85, 0xfe, 0x00, - 0x5b, 0x34, 0xfb, 0x24, 0xf3, 0xd8, 0xbf, 0x4a, 0x9e, 0x9b, 0x9c, 0xba, 0x2e, 0xd8, 0xfa, 0xef, - 0x60, 0xa7, 0x49, 0x1c, 0xb6, 0x80, 0x36, 0xbf, 0x42, 0xbc, 0x0a, 0x1b, 0x2b, 0x52, 0x5e, 0x63, - 0xe7, 0x7f, 0x0f, 0xf7, 0xbd, 0x8f, 0x29, 0x3f, 0x0b, 0xfc, 0x77, 0x14, 0x7e, 0x4c, 0x1c, 0x72, - 0x13, 0xf8, 0x64, 0x69, 0x60, 0x78, 0xc0, 0xc0, 0xfc, 0xdc, 0xfb, 0xa7, 0xc0, 0x1c, 0xc0, 0xdd, - 0x8e, 0x6e, 0x2f, 0x14, 0x71, 0x92, 0xf3, 0x3c, 0x5c, 0xbc, 0x08, 0xaf, 0xff, 0xa6, 0xd0, 0x21, - 0x94, 0x9b, 0xc4, 0xf1, 0xf7, 0x19, 0x7b, 0xf5, 0x24, 0x42, 0x5e, 0x56, 0x84, 0x10, 0x53, 0xa8, - 0x05, 0xb7, 0x38, 0xd6, 0x3b, 0x23, 0x1d, 0xc0, 0x46, 0x93, 0x38, 0x33, 0x85, 0x8c, 0x1b, 0xe0, - 0xf4, 0x60, 0x43, 0x9a, 0xc3, 0xb9, 0x6c, 0xce, 0x55, 0x80, 0xbf, 0x81, 0xb5, 0x26, 0x71, 0xa2, - 0xc5, 0xa0, 0xa4, 0x5d, 0x95, 0x63, 0xb4, 0x08, 0x37, 0x47, 0x90, 0xe2, 0x08, 0x0b, 0xb9, 0x17, - 0xd8, 0x42, 0x1d, 0x8a, 0x87, 0xa6, 0x6b, 0x38, 0xc3, 0x43, 0x89, 0x65, 0xe0, 0x57, 0x3c, 0xdc, - 0x17, 0xa0, 0xf4, 0x41, 0x60, 0xd6, 0x34, 0x94, 0xaa, 0xe1, 0xaf, 0xd8, 0x62, 0x9c, 0x0b, 0x4b, - 0x58, 0x0b, 0x10, 0xbf, 0x83, 0xdb, 0x41, 0x14, 0x88, 0xa2, 0x5e, 0x66, 0xed, 0x57, 0x88, 0x7b, - 0xe0, 0xc7, 0xc4, 0x9f, 0x14, 0xf5, 0x15, 0x45, 0x0d, 0x7d, 0xfe, 0xba, 0xa8, 0xc9, 0xa7, 0xee, - 0x40, 0x39, 0xe6, 0xed, 0xef, 0x86, 0xd6, 0x85, 0xcd, 0xd0, 0xcf, 0xa3, 0x50, 0x37, 0xf6, 0xf0, - 0x22, 0xaf, 0xc8, 0x7a, 0x2f, 0xa5, 0xfb, 0xc9, 0x95, 0x52, 0x4f, 0xcf, 0x3b, 0xf7, 0x16, 0x0d, - 0xdb, 0xee, 0xd8, 0x61, 0x70, 0xeb, 0x51, 0xb8, 0x97, 0xe6, 0xf1, 0x55, 0x88, 0x8b, 0x4b, 0xb3, - 0x2c, 0x52, 0x6e, 0xb6, 0xda, 0x75, 0x6a, 0x34, 0x41, 0xbd, 0x96, 0x57, 0x77, 0x17, 0xcf, 0xba, - 0x72, 0x8b, 0x0d, 0x40, 0xad, 0x76, 0xbd, 0xa6, 0x18, 0x2a, 0x19, 0x87, 0xbb, 0xbc, 0x04, 0x70, - 0x91, 0x22, 0xb6, 0xf9, 0xd6, 0xbc, 0x6a, 0x76, 0xc0, 0x9f, 0xac, 0x8a, 0xfb, 0x0b, 0xf1, 0xa9, - 0x3a, 0xc5, 0x14, 0xaa, 0xc2, 0x56, 0xb0, 0xad, 0xca, 0x78, 0x7c, 0x05, 0xdc, 0xa2, 0x0c, 0x61, - 0x33, 0xb6, 0x27, 0xbf, 0xc2, 0x7e, 0xd9, 0xe9, 0xde, 0x9b, 0x1d, 0x4a, 0xac, 0xce, 0xb3, 0x0d, - 0x16, 0x0e, 0xa4, 0xe0, 0xeb, 0xcd, 0x8c, 0x5a, 0x67, 0xbf, 0xea, 0x2c, 0xd8, 0xe0, 0x2b, 0x80, - 0x03, 0xc9, 0xff, 0x90, 0x84, 0xe2, 0x9a, 0x9a, 0xf9, 0xda, 0x35, 0x23, 0xb1, 0xd9, 0xaf, 0x4f, - 0x4c, 0x03, 0xa5, 0x03, 0xa9, 0x49, 0x1c, 0xff, 0x9b, 0xcb, 0x0c, 0xde, 0xcc, 0x17, 0x9b, 0x19, - 0xbc, 0xd9, 0x0f, 0x35, 0x62, 0x0a, 0xfd, 0x11, 0x36, 0x0f, 0xa4, 0x9a, 0x45, 0x14, 0x87, 0xc4, - 0xbe, 0xd9, 0xa1, 0x99, 0x9f, 0x20, 0x26, 0x7c, 0x31, 0xdc, 0x11, 0x2f, 0x63, 0x09, 0x56, 0xf8, - 0x0d, 0x14, 0xd8, 0x57, 0xc8, 0x0e, 0x2b, 0xa0, 0xcc, 0x68, 0x25, 0xfa, 0xa9, 0x75, 0x56, 0x7c, - 0x74, 0x48, 0x4c, 0x7d, 0x92, 0x46, 0x4d, 0x28, 0x34, 0xd4, 0xd3, 0xe0, 0x2b, 0xd4, 0x65, 0xf1, - 0xe3, 0x92, 0x31, 0x31, 0x85, 0xda, 0x80, 0x78, 0x40, 0x8a, 0xfd, 0x68, 0x61, 0xf1, 0x67, 0xea, - 0x9d, 0xad, 0xe4, 0x4f, 0xe5, 0x62, 0x0a, 0x7d, 0x0d, 0xc5, 0x26, 0x71, 0xc2, 0x4f, 0xec, 0x49, - 0xf6, 0xba, 0x78, 0xf6, 0x01, 0x6c, 0x71, 0x71, 0x04, 0xc4, 0xda, 0x29, 0x2f, 0xbf, 0xbc, 0x1d, - 0x0e, 0x86, 0x0d, 0x16, 0x14, 0x8f, 0xf4, 0x93, 0xf0, 0x3c, 0x1f, 0xcc, 0xb0, 0x2f, 0xfa, 0x65, - 0xc8, 0xc2, 0x2b, 0x70, 0x33, 0xb8, 0xb0, 0x62, 0xb8, 0x97, 0xc9, 0x7d, 0xb1, 0x0c, 0x19, 0x62, - 0x39, 0x7a, 0x5f, 0x5d, 0x1b, 0x74, 0xf1, 0xb9, 0x3b, 0x14, 0x31, 0xbc, 0xab, 0xae, 0x8d, 0x98, - 0x7c, 0xe2, 0x43, 0xb8, 0x13, 0xbb, 0xac, 0xde, 0x11, 0xae, 0xc7, 0x95, 0x9b, 0xb0, 0xb5, 0x1b, - 0x5e, 0x57, 0x32, 0x3c, 0xe4, 0x5b, 0x5b, 0x5c, 0x55, 0xbe, 0x66, 0x85, 0x7a, 0xc1, 0x8e, 0x4d, - 0xf8, 0xa0, 0x49, 0x9c, 0xca, 0x78, 0x7c, 0x75, 0x61, 0x3c, 0xe9, 0x08, 0x7b, 0xf1, 0xaa, 0xde, - 0x55, 0x18, 0x62, 0x0a, 0x8d, 0xe1, 0x49, 0x24, 0xc5, 0x5e, 0xbc, 0xda, 0x65, 0xc2, 0xbf, 0xe6, - 0x91, 0xc5, 0x14, 0x52, 0xbd, 0xa7, 0xc7, 0xe2, 0x75, 0x92, 0x4b, 0xee, 0x6f, 0xe5, 0x36, 0x3f, - 0x80, 0x18, 0xb8, 0xcd, 0xcf, 0x7d, 0xa0, 0xdf, 0xc2, 0x7b, 0x51, 0x87, 0xba, 0xd9, 0x72, 0xc9, - 0xc7, 0x60, 0xd0, 0xa1, 0x67, 0xfd, 0x94, 0xd0, 0x7f, 0x80, 0x5f, 0x84, 0x7e, 0xf1, 0x76, 0x16, - 0x76, 0x0d, 0x27, 0xc1, 0x70, 0x37, 0x62, 0x52, 0x73, 0xff, 0xa0, 0xb8, 0x3a, 0x3d, 0x99, 0x9d, - 0xc2, 0x1c, 0xcf, 0x7b, 0x65, 0xcf, 0x8e, 0x61, 0x32, 0x1d, 0x2b, 0xea, 0x6c, 0x3e, 0x30, 0xcb, - 0x75, 0xf5, 0x02, 0xbf, 0x87, 0x3b, 0xc9, 0x0b, 0x54, 0x34, 0xed, 0x9d, 0xc1, 0xff, 0xc1, 0x2f, - 0x00, 0xcd, 0xef, 0x7e, 0x62, 0x9e, 0xbd, 0xfb, 0xe6, 0x63, 0xaf, 0xef, 0xd9, 0xf1, 0x1b, 0xeb, - 0xb1, 0x03, 0x9b, 0x0c, 0x71, 0x4e, 0x83, 0x57, 0x6c, 0x37, 0xd9, 0xe6, 0x8e, 0xe1, 0x17, 0x51, - 0x4f, 0x59, 0xa4, 0xc7, 0xcb, 0x8c, 0xf9, 0x1a, 0x72, 0x7e, 0x78, 0xd9, 0x1a, 0x54, 0x95, 0xef, - 0x84, 0xdf, 0xa7, 0x7a, 0x0c, 0x5d, 0x72, 0x4e, 0x30, 0x6f, 0xef, 0x89, 0xdf, 0xc1, 0xf6, 0x91, - 0xa2, 0x3b, 0x49, 0xbf, 0xf9, 0xbe, 0xf2, 0x5f, 0x14, 0x0b, 0x20, 0xdb, 0x70, 0xeb, 0x40, 0xb7, - 0xc8, 0xdc, 0xcf, 0x59, 0x2f, 0xfb, 0xc1, 0xfd, 0x02, 0xa8, 0xaf, 0x21, 0x57, 0xaf, 0x56, 0x15, - 0xf5, 0x8d, 0x3b, 0xbd, 0xc1, 0xd9, 0xbe, 0x81, 0x7c, 0xbd, 0x8a, 0x89, 0x4d, 0x65, 0x75, 0xa3, - 0x5c, 0xe0, 0x76, 0x68, 0xd4, 0xc1, 0x9b, 0xe1, 0xc6, 0xd6, 0x1c, 0x7b, 0xb9, 0x86, 0x3f, 0xe4, - 0x7e, 0x07, 0xef, 0xb8, 0x15, 0xe2, 0xf9, 0x52, 0xba, 0x29, 0xda, 0xf1, 0x0a, 0xfb, 0x43, 0xf6, - 0x67, 0xff, 0x1f, 0x00, 0x00, 0xff, 0xff, 0x7e, 0x44, 0x6c, 0x24, 0x9e, 0x3d, 0x00, 0x00, + // 5022 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xb4, 0x5c, 0x49, 0x73, 0x23, 0x47, + 0x76, 0xc6, 0xc2, 0x05, 0x78, 0x20, 0xc8, 0x62, 0x36, 0x17, 0x34, 0x7b, 0xaf, 0x69, 0x69, 0x5a, + 0x94, 0x44, 0xa9, 0xd9, 0xad, 0xee, 0x96, 0x46, 0xb2, 0x06, 0x1b, 0x01, 0x74, 0x83, 0x00, 0x54, + 0x05, 0x34, 0x35, 0x8b, 0x5d, 0x53, 0xa8, 0x4a, 0x82, 0xa5, 0x06, 0xaa, 0xe0, 0x5a, 0x48, 0xd1, + 0x8e, 0x98, 0x08, 0x4f, 0x84, 0x23, 0xe6, 0xe0, 0xbb, 0x0f, 0xfe, 0x0d, 0xf6, 0xcd, 0xe1, 0x5f, + 0xe4, 0x08, 0xfb, 0x32, 0x37, 0x5f, 0x7c, 0xb1, 0x23, 0x33, 0x6b, 0x05, 0xaa, 0xb8, 0xb5, 0x74, + 0xcb, 0x7c, 0xf9, 0xf2, 0xcb, 0xe5, 0x2d, 0xf9, 0xf2, 0x65, 0x01, 0x00, 0x23, 0x73, 0xaa, 0xec, + 0x4d, 0x4d, 0xc3, 0x36, 0x50, 0xa1, 0xf7, 0xfc, 0x4c, 0xef, 0x3d, 0x95, 0x08, 0x89, 0xff, 0x97, + 0x0c, 0xac, 0x1e, 0xca, 0x96, 0x8d, 0xcd, 0x3e, 0x9e, 0x4c, 0xc7, 0xb2, 0x8d, 0xd1, 0x0b, 0xd8, + 0xb6, 0xdd, 0xb2, 0xa4, 0xcb, 0x13, 0x2c, 0x0d, 0xc7, 0x0e, 0xb6, 0x0d, 0xc3, 0x3e, 0x29, 0xa5, + 0x1f, 0xa6, 0x9f, 0xe4, 0x85, 0x4d, 0xaf, 0xb9, 0x23, 0x4f, 0x70, 0xc5, 0x6b, 0x44, 0xbb, 0xb0, + 0x1e, 0xed, 0xe7, 0x58, 0xc3, 0x52, 0x86, 0xf6, 0x58, 0x0b, 0xf7, 0x18, 0x58, 0x43, 0xf4, 0x09, + 0xa0, 0x28, 0xef, 0x99, 0x76, 0xac, 0x95, 0xb2, 0x94, 0x99, 0x0b, 0x33, 0x1f, 0x69, 0xc7, 0x1a, + 0x2a, 0xc3, 0xbd, 0x28, 0xb7, 0x6d, 0x6a, 0xa3, 0x11, 0x36, 0x25, 0x59, 0xb1, 0x35, 0x43, 0xb7, + 0x4a, 0x0b, 0xb4, 0xe3, 0x4e, 0xb8, 0x63, 0x9f, 0xb1, 0x94, 0x19, 0x07, 0x7a, 0x0e, 0x5b, 0x11, + 0x08, 0x4b, 0xd2, 0xb1, 0x7d, 0x66, 0x98, 0xef, 0x4a, 0x8b, 0x0f, 0xb3, 0x4f, 0xf2, 0xc2, 0x46, + 0xb8, 0xaf, 0xd5, 0x61, 0x6d, 0xfc, 0xdf, 0xc3, 0x5d, 0x01, 0xff, 0xad, 0x83, 0x2d, 0x3b, 0xba, + 0x47, 0xa2, 0x6d, 0x98, 0xf2, 0x08, 0x23, 0x1e, 0x56, 0xfa, 0xa1, 0x7e, 0xee, 0xfe, 0x44, 0x68, + 0xe8, 0x25, 0xe4, 0x3c, 0x6c, 0xba, 0x1b, 0x85, 0xfd, 0x3b, 0x7b, 0x21, 0x09, 0xec, 0x45, 0x91, + 0x05, 0x9f, 0x99, 0xff, 0x87, 0x34, 0x3c, 0xf0, 0x77, 0xd7, 0x9d, 0x86, 0x88, 0x6d, 0x5b, 0xd3, + 0x47, 0xd6, 0x75, 0x26, 0xf0, 0x15, 0xe4, 0x2c, 0xb7, 0x9b, 0x3b, 0x81, 0xfb, 0x91, 0x09, 0xf8, + 0x63, 0x78, 0xe0, 0x82, 0xcf, 0xcf, 0xff, 0x63, 0x1a, 0xd6, 0xe7, 0xda, 0xd1, 0xaf, 0x20, 0xa3, + 0x68, 0x74, 0xac, 0xc2, 0xfe, 0xc7, 0xf1, 0x58, 0x55, 0x43, 0xb7, 0x4d, 0x63, 0x3c, 0xc6, 0x66, + 0x4b, 0x3f, 0x36, 0xcc, 0x89, 0x4c, 0xc4, 0x20, 0x64, 0x14, 0x0d, 0x3d, 0x83, 0x8c, 0xec, 0x4d, + 0xe4, 0x17, 0xf1, 0x9d, 0xcb, 0x23, 0xac, 0xfb, 0x4b, 0x15, 0x32, 0xb2, 0xc5, 0xef, 0xc2, 0x56, + 0x7c, 0x2b, 0xe2, 0x20, 0x3b, 0xd5, 0x74, 0x77, 0xe1, 0xa4, 0xc8, 0xff, 0x6f, 0x1a, 0xb6, 0x7d, + 0x66, 0x57, 0x92, 0x22, 0x36, 0x4f, 0x35, 0x05, 0x13, 0x35, 0x30, 0xf1, 0x48, 0x23, 0x3b, 0x2e, + 0x19, 0xa6, 0xe4, 0xe8, 0x5e, 0x8d, 0x02, 0xe4, 0x84, 0x0d, 0xaf, 0xde, 0x35, 0x07, 0x7e, 0x1b, + 0xd1, 0x6c, 0x0b, 0x9b, 0xa7, 0xac, 0x8f, 0x62, 0xe8, 0x3a, 0x56, 0x6c, 0xba, 0x82, 0x9c, 0xb0, + 0xc6, 0x1a, 0xba, 0x66, 0x95, 0x91, 0xd1, 0xd7, 0xb0, 0x60, 0x9f, 0x4f, 0x31, 0xd5, 0xe5, 0xd5, + 0xfd, 0x27, 0xf1, 0x0b, 0x8c, 0xce, 0xaa, 0x7f, 0x3e, 0xc5, 0x02, 0xed, 0x85, 0xee, 0x43, 0x61, + 0x22, 0x2b, 0x64, 0x18, 0xa2, 0xa4, 0xae, 0x5e, 0xe7, 0x27, 0xb2, 0xd2, 0x35, 0xa9, 0x2c, 0x1f, + 0x40, 0x61, 0x68, 0x6a, 0xea, 0x88, 0x29, 0x71, 0x69, 0x91, 0xb6, 0x03, 0x23, 0x11, 0x06, 0xfe, + 0xbf, 0x17, 0xe0, 0x4e, 0x8c, 0x10, 0xfc, 0xed, 0x2a, 0xc1, 0xf2, 0xd4, 0x38, 0xc3, 0x26, 0x56, + 0xdd, 0x15, 0x7b, 0x55, 0xf4, 0x10, 0x0a, 0xee, 0xd2, 0xe4, 0xe1, 0x18, 0xbb, 0xcb, 0x0b, 0x93, + 0xd0, 0x47, 0xc0, 0x1d, 0xcb, 0x96, 0x2d, 0x85, 0xd9, 0xb2, 0x6c, 0x17, 0x08, 0xbd, 0x1a, 0x62, + 0xe5, 0x61, 0x45, 0xd5, 0x2c, 0xc5, 0x38, 0xc5, 0x26, 0x65, 0x5b, 0xa0, 0x6c, 0x11, 0x1a, 0xda, + 0x81, 0xdc, 0xd0, 0xd0, 0x55, 0xda, 0xbe, 0x48, 0xdb, 0xfd, 0x3a, 0xda, 0x83, 0x5b, 0x63, 0x4d, + 0x7f, 0x27, 0x8d, 0xf1, 0x29, 0x1e, 0x4b, 0x16, 0x56, 0x1c, 0x53, 0xb3, 0xcf, 0x4b, 0x4b, 0x94, + 0x6d, 0x9d, 0x34, 0xb5, 0x49, 0x8b, 0xe8, 0x36, 0xa0, 0x7d, 0xd8, 0xa4, 0x4c, 0x58, 0xb2, 0xb4, + 0xc9, 0x74, 0x8c, 0xa5, 0xa9, 0xac, 0x99, 0x9a, 0x3e, 0x2a, 0x2d, 0xd3, 0x1e, 0xb7, 0x58, 0xa3, + 0x48, 0xdb, 0x7a, 0xac, 0x09, 0x6d, 0xc2, 0xd2, 0xd0, 0x94, 0xb0, 0x6a, 0x96, 0x72, 0x94, 0x69, + 0x71, 0x68, 0xd6, 0x55, 0x13, 0xdd, 0x03, 0x38, 0xd1, 0x46, 0x27, 0x92, 0x35, 0xc5, 0x58, 0x2d, + 0xe5, 0x69, 0x53, 0x9e, 0x50, 0x44, 0x42, 0x20, 0xcd, 0x63, 0xe3, 0x4c, 0xc2, 0x3a, 0x36, 0x47, + 0xe7, 0x25, 0x60, 0xcd, 0x63, 0xe3, 0xac, 0x4e, 0x09, 0x64, 0x17, 0x65, 0xf5, 0x14, 0x9b, 0xb6, + 0x66, 0x91, 0xe1, 0x0b, 0x6c, 0x17, 0x43, 0x24, 0xf4, 0x29, 0x20, 0x77, 0xaa, 0xee, 0x3e, 0x52, + 0x0f, 0xb6, 0xc2, 0x56, 0xc6, 0x5a, 0xaa, 0x41, 0x03, 0x19, 0x4f, 0xc5, 0x43, 0x67, 0x24, 0xbd, + 0xc3, 0xe7, 0x56, 0xa9, 0xc8, 0xc6, 0xa3, 0x94, 0x37, 0xf8, 0x9c, 0xc9, 0xd3, 0xd4, 0x4e, 0x65, + 0xe5, 0xbc, 0xb4, 0xea, 0xca, 0x93, 0x55, 0xd1, 0x97, 0x50, 0x52, 0x7c, 0xf9, 0x93, 0xb1, 0x8e, + 0xb5, 0x91, 0x63, 0x52, 0x3b, 0x2c, 0xad, 0x51, 0xd6, 0xed, 0xa0, 0xbd, 0x1a, 0x6e, 0x46, 0x1f, + 0xc0, 0xaa, 0x65, 0xcb, 0xb6, 0xa6, 0x48, 0xb2, 0xaa, 0x9a, 0xd8, 0xb2, 0x4a, 0x1c, 0xed, 0x50, + 0x64, 0xd4, 0x32, 0x23, 0xf2, 0x7f, 0x59, 0x80, 0xfb, 0x17, 0x1b, 0x3c, 0x99, 0x9e, 0x07, 0x41, + 0xd4, 0x6d, 0x45, 0xf0, 0xaa, 0xe8, 0x63, 0x58, 0xf7, 0xcf, 0x15, 0xe9, 0x14, 0x9b, 0x16, 0x99, + 0x17, 0x51, 0xba, 0xa2, 0xc0, 0xf9, 0x0d, 0x6f, 0x19, 0x9d, 0xa8, 0xd3, 0x44, 0xd6, 0x9d, 0x63, + 0x59, 0xb1, 0x1d, 0x13, 0x9b, 0x54, 0xeb, 0x8a, 0x42, 0x84, 0x86, 0x8e, 0x00, 0x59, 0xce, 0x74, + 0x6a, 0x98, 0x36, 0x56, 0x25, 0xdf, 0xe1, 0x2d, 0x50, 0x3f, 0xf3, 0xe4, 0x32, 0x27, 0xe5, 0x3b, + 0x9b, 0x75, 0x1f, 0xc3, 0x37, 0x19, 0x11, 0x38, 0xc5, 0x31, 0x4d, 0xac, 0xdb, 0x01, 0xec, 0xe2, + 0x35, 0x61, 0xd7, 0x5c, 0x04, 0x1f, 0xf4, 0x43, 0x58, 0x53, 0xc6, 0xb2, 0x65, 0x49, 0xc6, 0xb1, + 0xa4, 0x62, 0xe2, 0x05, 0xa8, 0x72, 0xaf, 0x08, 0x45, 0x4a, 0xee, 0x1e, 0xd7, 0x28, 0x11, 0x21, + 0x58, 0xa0, 0x96, 0xbe, 0x4c, 0x2d, 0x9d, 0x96, 0x89, 0x4a, 0x58, 0x27, 0x86, 0x69, 0x33, 0x1f, + 0x90, 0x63, 0x3e, 0x82, 0x52, 0xa8, 0x8f, 0x78, 0x04, 0x2b, 0x9a, 0x25, 0xc9, 0xa7, 0xb2, 0x36, + 0xa6, 0xb6, 0xc5, 0x54, 0xb8, 0xa0, 0x59, 0x65, 0x8f, 0x84, 0x7e, 0x05, 0x3b, 0x16, 0xf3, 0x3d, + 0xde, 0x31, 0x28, 0xb9, 0x0e, 0x4e, 0x97, 0xa7, 0xae, 0x52, 0x6f, 0xbb, 0x1c, 0x21, 0x5f, 0x85, + 0xcd, 0x8e, 0x3c, 0x45, 0xdf, 0xc0, 0x9d, 0x84, 0xce, 0x53, 0x59, 0x77, 0x5c, 0x95, 0x2f, 0xc5, + 0xf5, 0xee, 0xc9, 0xba, 0x83, 0xbe, 0x84, 0xdb, 0x09, 0xdd, 0x47, 0xba, 0x6b, 0x06, 0x5b, 0x71, + 0x9d, 0x1b, 0x3a, 0xff, 0x03, 0x70, 0x91, 0x63, 0x5d, 0xc4, 0x36, 0xaa, 0xc0, 0x6a, 0xf4, 0xa8, + 0x2f, 0xa5, 0x1f, 0x66, 0x9f, 0x14, 0xf6, 0x77, 0x22, 0xb2, 0x89, 0xb0, 0x08, 0x33, 0x3d, 0xc8, + 0x26, 0xd3, 0xd3, 0x93, 0x05, 0x2b, 0xb4, 0xcc, 0xff, 0x2b, 0x40, 0x31, 0xc2, 0x86, 0x56, 0x21, + 0xa3, 0x31, 0xaf, 0x59, 0x14, 0x32, 0x9a, 0x4a, 0x74, 0xdb, 0xd0, 0xb1, 0x78, 0x62, 0x78, 0x67, + 0x81, 0x57, 0x25, 0x9e, 0x4d, 0xb3, 0x48, 0xaf, 0x53, 0xcf, 0x41, 0xfa, 0x75, 0x74, 0x17, 0xf2, + 0xda, 0x64, 0xe2, 0xd8, 0x21, 0xb7, 0x18, 0x10, 0x50, 0x1b, 0x56, 0xdd, 0xb5, 0x8b, 0xb6, 0x4c, + 0xb4, 0xd0, 0xd5, 0x34, 0x3e, 0x6e, 0x35, 0x62, 0x84, 0xb3, 0x99, 0x12, 0x66, 0xfa, 0xa2, 0xef, + 0x01, 0x39, 0xd6, 0xb0, 0x21, 0xab, 0x23, 0xec, 0x79, 0x67, 0xac, 0x52, 0x3d, 0x2b, 0xec, 0x7f, + 0x18, 0x87, 0x38, 0x10, 0x2b, 0x33, 0xdc, 0xcd, 0x94, 0x10, 0x83, 0x81, 0x64, 0xd8, 0xf4, 0xa9, + 0x35, 0xe2, 0xd4, 0x3d, 0xf0, 0x65, 0x0a, 0xfe, 0xd1, 0x85, 0xe0, 0xe1, 0x0e, 0xcd, 0x94, 0x10, + 0x8f, 0x84, 0x5a, 0x50, 0x24, 0x41, 0x61, 0xb9, 0xe7, 0xed, 0x44, 0x8e, 0x42, 0x3f, 0x8a, 0x83, + 0x3e, 0x0a, 0x33, 0x36, 0x53, 0x42, 0xb4, 0x27, 0xd9, 0x07, 0x42, 0xf0, 0xa7, 0x5f, 0xb6, 0x44, + 0x5b, 0xa6, 0x76, 0x91, 0xb0, 0x0f, 0x47, 0x73, 0xdc, 0x64, 0x1f, 0xe6, 0x31, 0x68, 0x6c, 0x65, + 0x9d, 0xb4, 0x8d, 0x91, 0xa6, 0x53, 0xb3, 0x29, 0xec, 0xdf, 0x8d, 0x95, 0x94, 0xd8, 0xa4, 0x3c, + 0xcd, 0x94, 0xe0, 0xf3, 0x23, 0x01, 0x38, 0xf5, 0x44, 0x99, 0xb6, 0xb1, 0x6c, 0xe1, 0x86, 0x29, + 0xeb, 0x64, 0x8d, 0x05, 0x8a, 0xf1, 0x38, 0x0e, 0xa3, 0xd6, 0xac, 0xf6, 0xc2, 0xbc, 0xcd, 0x94, + 0x30, 0xd7, 0x1f, 0x1d, 0xc0, 0xca, 0xc8, 0x34, 0x9c, 0xa9, 0x80, 0x15, 0x4c, 0xb4, 0x6f, 0x85, + 0xe2, 0x3d, 0x8c, 0xc3, 0x6b, 0x84, 0xf8, 0x9a, 0x29, 0x21, 0xd2, 0x0f, 0x0d, 0x60, 0x3d, 0x5c, + 0x3f, 0x74, 0xc6, 0xb6, 0x46, 0x0f, 0x9f, 0xc2, 0xfe, 0x07, 0x97, 0x81, 0x51, 0xe6, 0x66, 0x4a, + 0x98, 0x47, 0x40, 0xcf, 0x61, 0x69, 0x34, 0xd5, 0x8c, 0x96, 0x4e, 0x0f, 0xab, 0x04, 0x23, 0x6d, + 0xf4, 0x5a, 0xdd, 0x16, 0xd9, 0x2a, 0x97, 0x17, 0xd5, 0x00, 0x86, 0xb2, 0x75, 0x22, 0x2a, 0xa6, + 0x36, 0xb5, 0xe9, 0xd9, 0x35, 0x6b, 0x10, 0xae, 0x3b, 0x20, 0xe2, 0xae, 0xf8, 0x9c, 0xcd, 0xb4, + 0x10, 0xea, 0x87, 0xca, 0x90, 0x3f, 0xd1, 0x54, 0x17, 0x84, 0x8b, 0xd1, 0xa5, 0x10, 0x48, 0xb3, + 0x55, 0xf3, 0x31, 0x82, 0x5e, 0x48, 0x81, 0x2d, 0x15, 0x4f, 0xc7, 0xc6, 0xb9, 0xe7, 0xc6, 0xbd, + 0x38, 0xbb, 0xb4, 0x1e, 0xa3, 0xf6, 0x0c, 0xaf, 0x16, 0xdb, 0xa1, 0x99, 0x16, 0x12, 0xa0, 0xd0, + 0x2e, 0x64, 0xc7, 0xc6, 0xa8, 0x84, 0x28, 0xe2, 0x56, 0x0c, 0x62, 0xdb, 0x18, 0x35, 0xd3, 0x02, + 0x61, 0x42, 0x2f, 0x60, 0x99, 0xec, 0x51, 0xd7, 0xb1, 0x4b, 0xb7, 0x62, 0x36, 0x94, 0xf1, 0x93, + 0xfd, 0xec, 0x3a, 0x64, 0x29, 0x1e, 0x33, 0xfa, 0x1a, 0xf2, 0x54, 0x38, 0x22, 0xd6, 0xd5, 0xd2, + 0x46, 0x8c, 0xde, 0xba, 0x3d, 0x3d, 0x1e, 0xb2, 0x0d, 0x7e, 0x87, 0x4a, 0x1e, 0x96, 0x5d, 0x51, + 0x55, 0x72, 0xb0, 0xc4, 0x58, 0xf9, 0x6d, 0xd8, 0x8c, 0x75, 0x4b, 0xfc, 0x1d, 0xb8, 0x9d, 0xe8, + 0x5d, 0xf8, 0xfb, 0x70, 0xf7, 0x22, 0xef, 0xc0, 0x6f, 0xc1, 0x46, 0x9c, 0x89, 0x87, 0x40, 0xe7, + 0x4d, 0x95, 0xff, 0x0c, 0xd6, 0x66, 0xec, 0x8e, 0x78, 0xdd, 0x31, 0x29, 0x0c, 0x2c, 0x37, 0xd4, + 0xcf, 0x0b, 0x01, 0x81, 0xbf, 0x0d, 0xdb, 0x09, 0x46, 0xc6, 0xb7, 0xe0, 0x56, 0x8c, 0x8a, 0x13, + 0x3c, 0xba, 0x1f, 0xa1, 0x4b, 0x57, 0x40, 0x40, 0x1b, 0xb0, 0x78, 0x2a, 0x8f, 0x1d, 0x76, 0xa0, + 0x2c, 0x0a, 0xac, 0xc2, 0xff, 0x39, 0x0d, 0xa5, 0x24, 0x73, 0xb9, 0x04, 0x70, 0x0b, 0x96, 0x28, + 0x86, 0x55, 0xca, 0x3e, 0xcc, 0x3e, 0x59, 0x14, 0xdc, 0x1a, 0x7a, 0xe1, 0x5e, 0x36, 0x16, 0xe8, + 0x65, 0x23, 0x6a, 0x13, 0x73, 0x63, 0x04, 0xd7, 0x0c, 0xfe, 0x3f, 0xd2, 0xfe, 0xe1, 0xc6, 0xac, + 0x0d, 0xed, 0x31, 0x4d, 0xea, 0x38, 0x13, 0x3a, 0xfa, 0xea, 0xfe, 0x46, 0x14, 0xac, 0xd7, 0xea, + 0x76, 0x9c, 0x89, 0xe0, 0x31, 0xa1, 0x6f, 0x00, 0xa6, 0xce, 0x78, 0x3c, 0x98, 0xd6, 0x8c, 0x33, + 0x16, 0xb7, 0xad, 0xee, 0xdf, 0x9b, 0xeb, 0xd2, 0xd2, 0x7b, 0x3e, 0x93, 0x10, 0xea, 0x80, 0x5e, + 0x02, 0x30, 0xe3, 0xae, 0xab, 0x23, 0xef, 0xae, 0xb4, 0x1d, 0xd3, 0x9d, 0x34, 0x0b, 0x21, 0x56, + 0xfe, 0x25, 0x6c, 0xc6, 0x1a, 0x3b, 0xba, 0x0f, 0x60, 0xd1, 0x52, 0x68, 0x07, 0x43, 0x14, 0xfe, + 0x05, 0x6c, 0xc4, 0x19, 0xf8, 0xa5, 0xfd, 0xfe, 0x27, 0x0d, 0x77, 0x2f, 0xb2, 0x64, 0x12, 0x9b, + 0xda, 0x31, 0x57, 0xf0, 0x30, 0x0d, 0xbd, 0x76, 0xe5, 0xc4, 0xf6, 0xe9, 0xc5, 0x95, 0xdd, 0xc4, + 0x9e, 0x57, 0x08, 0xc9, 0x0e, 0x07, 0x57, 0x7e, 0x42, 0x45, 0xeb, 0x50, 0x3c, 0x18, 0xb4, 0xdb, + 0x92, 0x58, 0xef, 0xf7, 0x5b, 0x9d, 0x86, 0xc8, 0xa5, 0x50, 0x01, 0x96, 0x3b, 0xf5, 0xfe, 0x51, + 0x57, 0x78, 0xc3, 0xa5, 0x51, 0x0e, 0x16, 0x8e, 0x5a, 0x07, 0x2d, 0x2e, 0x83, 0x96, 0x21, 0x3b, + 0x10, 0x2b, 0x5c, 0x16, 0x15, 0x21, 0x5f, 0x69, 0x0f, 0xea, 0xfd, 0x6e, 0xb7, 0xdf, 0xe4, 0x16, + 0xd0, 0x2d, 0x58, 0xeb, 0x0b, 0xad, 0x46, 0xa3, 0x2e, 0x48, 0xe5, 0x6a, 0xbf, 0xd5, 0xed, 0x88, + 0xdc, 0x22, 0x5f, 0x80, 0xbc, 0xef, 0x6e, 0xf8, 0x29, 0x14, 0x23, 0xbe, 0xe4, 0xda, 0xea, 0xf2, + 0x59, 0xd8, 0x22, 0x56, 0xf7, 0x6f, 0xcf, 0x71, 0x77, 0x1d, 0xfb, 0x2d, 0x61, 0xf0, 0x8c, 0xa5, + 0x0e, 0x6b, 0x33, 0x3e, 0xe8, 0x46, 0x36, 0x77, 0x06, 0x3b, 0xc4, 0x41, 0xbc, 0x47, 0xf6, 0xe4, + 0x8b, 0xb9, 0xec, 0x49, 0x74, 0xf2, 0x47, 0xda, 0x81, 0x16, 0x93, 0x38, 0xf9, 0xe7, 0x2c, 0xac, + 0x84, 0x9b, 0xfc, 0x40, 0x3e, 0x1d, 0x0a, 0xe4, 0x77, 0x20, 0xa7, 0x6a, 0x16, 0x09, 0xfc, 0x54, + 0x37, 0x84, 0xf4, 0xeb, 0x44, 0x2f, 0x4d, 0x3c, 0x72, 0xc6, 0xb2, 0x6d, 0x98, 0xe7, 0x6e, 0x66, + 0x2c, 0x44, 0x41, 0xdf, 0xc2, 0x0a, 0x89, 0x8d, 0x35, 0x7d, 0x24, 0x4d, 0x0c, 0xd5, 0x73, 0x01, + 0x77, 0xe7, 0xe6, 0x76, 0xc4, 0x98, 0x0e, 0x0d, 0x15, 0x0b, 0x85, 0xb3, 0xa0, 0x82, 0x5e, 0x40, + 0x5e, 0x76, 0xec, 0x13, 0xd6, 0x7b, 0x31, 0x46, 0x2c, 0xa4, 0x77, 0xd9, 0xb1, 0x4f, 0x68, 0xd7, + 0x9c, 0xec, 0x96, 0x48, 0xd8, 0xab, 0x9c, 0xc8, 0xba, 0x8e, 0xc7, 0x34, 0x92, 0x2c, 0x0a, 0x5e, + 0x15, 0xed, 0xc1, 0x92, 0x3c, 0x95, 0x2a, 0xa2, 0xe8, 0x46, 0x81, 0xdb, 0x73, 0x70, 0x15, 0x51, + 0xac, 0x1e, 0x8f, 0x84, 0x45, 0x79, 0x5a, 0x11, 0x45, 0xf4, 0x2d, 0xb9, 0x03, 0x69, 0xe4, 0x5e, + 0x55, 0x11, 0x45, 0x69, 0xac, 0x59, 0x76, 0x29, 0x47, 0x63, 0xf7, 0xc4, 0x8e, 0x45, 0xc6, 0x5f, + 0x11, 0xc5, 0xb6, 0x66, 0xd9, 0xe8, 0x0e, 0x3d, 0xd2, 0xb1, 0x64, 0x59, 0x9a, 0x77, 0x53, 0xcf, + 0x11, 0x82, 0x68, 0x69, 0x2a, 0xf1, 0x99, 0x3a, 0xfe, 0x71, 0x62, 0xe8, 0xee, 0xa5, 0xd9, 0xad, + 0xf1, 0xff, 0x96, 0x86, 0x3c, 0x95, 0x8c, 0x4d, 0xac, 0x77, 0x0f, 0x16, 0xe8, 0x06, 0x30, 0x2d, + 0xde, 0x99, 0x17, 0x2d, 0xe1, 0xa2, 0x3b, 0x40, 0xf9, 0xc2, 0xab, 0xcf, 0x44, 0x57, 0x8f, 0x60, + 0x81, 0xce, 0x83, 0x89, 0x8a, 0x96, 0x51, 0x15, 0x66, 0x2f, 0x7e, 0xee, 0x85, 0xf4, 0x02, 0x1d, + 0x9a, 0xed, 0xc1, 0xef, 0x03, 0x04, 0x5b, 0x40, 0x86, 0x11, 0xc5, 0x56, 0xcd, 0xd3, 0x23, 0x52, + 0x46, 0x1c, 0x64, 0x7b, 0xe2, 0x1b, 0xf7, 0xfa, 0x42, 0x8a, 0xfc, 0x23, 0x28, 0x8a, 0xb6, 0x49, + 0x44, 0x8d, 0x2d, 0x8b, 0xa8, 0x3a, 0x07, 0xd9, 0x89, 0x35, 0xf2, 0xd2, 0x64, 0x13, 0x6b, 0xc4, + 0x7f, 0x0e, 0x28, 0xc2, 0x52, 0x36, 0x4d, 0xf9, 0x9c, 0xa8, 0xe4, 0xc4, 0x1a, 0xd1, 0x32, 0xbd, + 0x48, 0xe5, 0x05, 0xbf, 0xce, 0xef, 0xc1, 0x4a, 0xfd, 0x14, 0xeb, 0xb6, 0x6b, 0x4d, 0x44, 0x45, + 0x89, 0xd0, 0xb0, 0x4e, 0xfc, 0x10, 0x85, 0xce, 0x0a, 0x21, 0x0a, 0x2f, 0x03, 0x50, 0x7e, 0x6a, + 0xd8, 0x68, 0x07, 0x96, 0x6d, 0x8b, 0x0e, 0xc8, 0x66, 0xd1, 0x4c, 0x09, 0x1e, 0x01, 0x6d, 0xc1, + 0xa2, 0x3d, 0x34, 0x0c, 0xb6, 0xa7, 0xb9, 0x66, 0x4a, 0x60, 0x55, 0x54, 0x82, 0x25, 0x5b, 0xd3, + 0xed, 0x17, 0xcf, 0xe9, 0xae, 0x66, 0x49, 0x4c, 0xc8, 0xea, 0x95, 0x45, 0xc8, 0x9e, 0xca, 0x63, + 0xbe, 0x0d, 0x8b, 0x74, 0x08, 0xb2, 0x2d, 0x76, 0x30, 0x0b, 0x96, 0x4c, 0xfb, 0xcc, 0x3f, 0x35, + 0x33, 0x31, 0x6a, 0x15, 0x4c, 0xcd, 0x3b, 0x4e, 0xf9, 0x3f, 0xc0, 0x06, 0xb1, 0xfd, 0x9a, 0x66, + 0x76, 0xcd, 0x03, 0x6d, 0x8c, 0xbd, 0x85, 0x72, 0x90, 0x55, 0x35, 0x2f, 0x6e, 0x20, 0x45, 0xa2, + 0x5c, 0x53, 0x13, 0x1f, 0x6b, 0x3f, 0xba, 0x9b, 0xee, 0xd6, 0xc8, 0x96, 0x18, 0xfa, 0xf8, 0xfc, + 0xc0, 0x18, 0xab, 0x6e, 0x9a, 0x22, 0x27, 0x84, 0x28, 0xe4, 0xf8, 0x9a, 0x19, 0xc1, 0x9a, 0x1a, + 0xba, 0x85, 0x99, 0xb9, 0x5b, 0xce, 0xd8, 0xee, 0xc9, 0x7e, 0x9e, 0x3d, 0x44, 0xe1, 0xff, 0x29, + 0x0d, 0x6b, 0x02, 0x96, 0xd5, 0xf0, 0xb4, 0xbe, 0x80, 0xa5, 0x63, 0x36, 0x50, 0x3a, 0xe6, 0xfc, + 0x2d, 0x2b, 0x0a, 0xb6, 0x2c, 0x6d, 0x38, 0xc6, 0x6c, 0x6c, 0xc1, 0x65, 0x26, 0x22, 0x3e, 0xd6, + 0xc6, 0x58, 0x0f, 0x6e, 0xbc, 0x7e, 0x9d, 0x78, 0x51, 0x8b, 0x9c, 0x8f, 0x6c, 0xbf, 0x05, 0x56, + 0x21, 0xeb, 0x1f, 0x63, 0x9d, 0xaa, 0x6e, 0x56, 0x20, 0x45, 0xbe, 0x06, 0x5c, 0x30, 0x1b, 0x77, + 0x09, 0x77, 0x21, 0x6f, 0x62, 0x59, 0xad, 0x1a, 0x8e, 0x6e, 0xbb, 0x72, 0x08, 0x08, 0x44, 0x40, + 0xaa, 0x6c, 0xcb, 0x74, 0xc4, 0x15, 0x81, 0x96, 0xf9, 0x7f, 0x4f, 0x03, 0x77, 0x64, 0x6a, 0x36, + 0xfe, 0x99, 0x57, 0xb5, 0x45, 0x1c, 0xd3, 0x94, 0xc4, 0xba, 0x4c, 0x22, 0x6e, 0x8d, 0xa6, 0x95, + 0x1c, 0xcb, 0xee, 0x18, 0x76, 0xfd, 0x47, 0xe2, 0x7d, 0xdc, 0x2c, 0x65, 0x98, 0xe6, 0xcf, 0x7b, + 0x31, 0x34, 0xef, 0x0f, 0x60, 0x8d, 0xcc, 0xb8, 0xa5, 0x1f, 0x1b, 0xde, 0xac, 0x11, 0x2c, 0x4c, + 0x03, 0xc9, 0xd1, 0x32, 0xff, 0x47, 0xe0, 0x02, 0x36, 0x77, 0x93, 0xe2, 0x8e, 0x01, 0xe2, 0x39, + 0xb4, 0xbf, 0x63, 0xd3, 0xce, 0x0a, 0xb4, 0x4c, 0x68, 0xd4, 0x2f, 0xb1, 0x4c, 0x97, 0xef, 0x7b, + 0x26, 0x86, 0xda, 0xd7, 0xdc, 0xc4, 0x70, 0x56, 0xf0, 0xaa, 0x44, 0x6c, 0x9a, 0x55, 0xd3, 0x4c, + 0x37, 0x8f, 0xca, 0x2a, 0xfc, 0x6f, 0x81, 0xf3, 0xe3, 0x9c, 0x90, 0xcd, 0xb2, 0xe0, 0x26, 0xac, + 0x67, 0x01, 0x05, 0x7d, 0x08, 0xab, 0xb6, 0x36, 0xc1, 0x86, 0x63, 0x8b, 0x58, 0x31, 0x74, 0xd5, + 0x72, 0xdd, 0xdc, 0x0c, 0x95, 0xbf, 0x0f, 0x2b, 0x3e, 0xf6, 0x6b, 0x63, 0x38, 0x9b, 0x1c, 0xe1, + 0x1f, 0x87, 0xc6, 0x7e, 0x6d, 0x0c, 0xa9, 0xbb, 0xe6, 0x20, 0xab, 0xa9, 0x2c, 0x3f, 0x53, 0x14, + 0x48, 0x91, 0x7f, 0x0b, 0xa5, 0x66, 0xab, 0x26, 0x38, 0xba, 0xae, 0xe9, 0xa3, 0xd7, 0xc6, 0x90, + 0x7a, 0x5b, 0x81, 0x6a, 0x7d, 0x08, 0x31, 0x4b, 0xd3, 0x2d, 0x08, 0x16, 0x4e, 0x27, 0x2d, 0xd5, + 0xdb, 0x25, 0x52, 0x26, 0x82, 0xb5, 0x0c, 0xc7, 0x54, 0xb0, 0xeb, 0x75, 0xdd, 0x1a, 0xff, 0x47, + 0x58, 0x0b, 0xad, 0x9c, 0xc2, 0x7d, 0x0c, 0xd9, 0x1f, 0x8c, 0xa1, 0xfb, 0x68, 0x11, 0x75, 0xbf, + 0xe1, 0x89, 0x0a, 0x84, 0x8b, 0xec, 0x92, 0x66, 0x1d, 0x68, 0xba, 0x66, 0x9d, 0xf8, 0x47, 0x73, + 0x88, 0x12, 0x58, 0xeb, 0x6b, 0xcb, 0xd0, 0x83, 0xc3, 0xd9, 0xa3, 0xf0, 0x7b, 0x50, 0x68, 0xd7, + 0x6b, 0xfe, 0xd9, 0xff, 0x00, 0x0a, 0x43, 0x9a, 0xce, 0x56, 0x7c, 0xdb, 0x28, 0x0a, 0x40, 0x49, + 0xd4, 0x38, 0xf8, 0x1f, 0xe1, 0xf6, 0x40, 0xac, 0xbc, 0x47, 0x94, 0xf2, 0x72, 0x2e, 0x4a, 0x89, + 0x3e, 0x32, 0xb1, 0xab, 0x55, 0x4c, 0x9c, 0xf2, 0x97, 0x45, 0x58, 0x8d, 0x36, 0x12, 0x35, 0xc3, + 0x3a, 0x0b, 0x4a, 0xdc, 0x27, 0x02, 0xb7, 0x4a, 0x04, 0x78, 0xaa, 0xa9, 0xde, 0x39, 0x73, 0xaa, + 0xa9, 0xec, 0xf5, 0xc5, 0x3b, 0xf3, 0x48, 0x71, 0x2e, 0x55, 0xcb, 0x9e, 0x30, 0xa2, 0xa9, 0x5a, + 0x9a, 0xb4, 0x36, 0x54, 0x47, 0xb1, 0xdd, 0x17, 0x0c, 0xaf, 0x4a, 0x05, 0x8a, 0x4d, 0x4d, 0x66, + 0xb1, 0x05, 0x11, 0x28, 0xad, 0xa1, 0xfb, 0x50, 0x70, 0x2c, 0x2c, 0x55, 0x6b, 0x55, 0xa9, 0x5e, + 0x3d, 0x74, 0xb3, 0xfa, 0x79, 0xc7, 0xc2, 0xd5, 0x5a, 0xb5, 0x5e, 0x3d, 0x24, 0x91, 0x00, 0x69, + 0x17, 0x3a, 0xb5, 0x96, 0xe8, 0xa6, 0xf3, 0x73, 0x8e, 0x85, 0x69, 0x1d, 0x3d, 0x01, 0x8e, 0x34, + 0x36, 0x5b, 0x35, 0xe9, 0x4d, 0xfd, 0x37, 0x95, 0x6e, 0x59, 0xa8, 0xb9, 0xd1, 0xc2, 0xaa, 0x63, + 0xe1, 0x66, 0xab, 0xe6, 0x51, 0x11, 0x0f, 0x45, 0x8f, 0xf3, 0xb0, 0x3b, 0x10, 0xeb, 0x6e, 0x2a, + 0xb4, 0xc0, 0xd8, 0x28, 0xc9, 0x9b, 0x0a, 0xe1, 0x11, 0xca, 0x47, 0x6e, 0xba, 0x33, 0xcf, 0x38, + 0x84, 0xf2, 0x11, 0xda, 0x86, 0x65, 0xd2, 0x3e, 0x38, 0x14, 0xdd, 0x6c, 0xe6, 0x92, 0x63, 0xe1, + 0xc1, 0xa1, 0x88, 0xee, 0x01, 0x90, 0x06, 0xb1, 0x2e, 0xb4, 0xca, 0x6d, 0x2f, 0x93, 0xef, 0x58, + 0x98, 0x11, 0xd0, 0x6b, 0x58, 0x35, 0x75, 0x55, 0xb3, 0x82, 0x24, 0xf3, 0x6a, 0xcc, 0x1b, 0x59, + 0x54, 0x56, 0x75, 0xfb, 0x04, 0x9b, 0x3a, 0xb6, 0x85, 0x22, 0xed, 0xea, 0x8b, 0xf0, 0x10, 0x38, + 0x45, 0x55, 0x24, 0xac, 0x4c, 0x02, 0xb4, 0xb5, 0xab, 0xa3, 0xad, 0x2a, 0xaa, 0x52, 0x57, 0x26, + 0x3e, 0x5c, 0x19, 0x56, 0x9c, 0x49, 0x68, 0x62, 0x5c, 0xcc, 0x2b, 0x62, 0x14, 0x6a, 0x70, 0x28, + 0x0a, 0x05, 0x67, 0x12, 0xcc, 0xe8, 0x29, 0x6c, 0xaa, 0xf8, 0x54, 0x22, 0x7e, 0x51, 0x3a, 0xd1, + 0x54, 0xe9, 0x1d, 0x3e, 0x1f, 0x1a, 0xb2, 0xa9, 0xd2, 0x3c, 0x47, 0x5e, 0x40, 0x2a, 0x3e, 0x25, + 0xfe, 0xa7, 0xa9, 0xa9, 0x6f, 0xdc, 0x16, 0xf4, 0x31, 0xa0, 0x48, 0x97, 0x89, 0xe1, 0x58, 0x98, + 0xe6, 0x39, 0xf2, 0xc2, 0x5a, 0xc0, 0x7f, 0x48, 0xc8, 0xe8, 0x97, 0xc0, 0x45, 0x98, 0x4d, 0xf9, + 0x8c, 0x26, 0x36, 0xf2, 0x42, 0x31, 0x60, 0x15, 0xe4, 0x33, 0xbe, 0x07, 0x5b, 0xf1, 0xab, 0xa6, + 0xd1, 0xa4, 0x61, 0xd9, 0xf4, 0xcd, 0xc3, 0x35, 0xb2, 0x1c, 0x21, 0x94, 0x55, 0xd5, 0x44, 0xb7, + 0x21, 0x47, 0xf0, 0x69, 0x1b, 0xd3, 0xff, 0x65, 0x15, 0x9f, 0x92, 0x26, 0xfe, 0x1b, 0x58, 0x9f, + 0x5b, 0x3c, 0xf1, 0xc8, 0x8a, 0x6a, 0x1a, 0x13, 0xd7, 0x84, 0x58, 0x85, 0xf8, 0x30, 0x72, 0x28, + 0x79, 0x89, 0x66, 0x52, 0xe6, 0xff, 0x9c, 0x86, 0xfb, 0xfe, 0xce, 0xdf, 0xdc, 0x03, 0x54, 0xe6, + 0x3c, 0x40, 0x34, 0xb3, 0xe9, 0x0d, 0xd1, 0xd2, 0x6d, 0x6c, 0x1e, 0xcb, 0x0a, 0x8e, 0x71, 0x06, + 0x12, 0x3c, 0x62, 0xf7, 0x50, 0xac, 0x26, 0xb2, 0xa3, 0xaf, 0x60, 0x81, 0x86, 0xea, 0x2c, 0xcd, + 0x7e, 0xd5, 0x41, 0x68, 0x1f, 0xfe, 0x4f, 0x59, 0xb8, 0x9d, 0x8c, 0x1c, 0x77, 0x36, 0x7e, 0xeb, + 0x9e, 0x83, 0xec, 0xde, 0xf8, 0xf1, 0xd5, 0x46, 0xdb, 0x0b, 0x05, 0xec, 0xc4, 0x95, 0x4f, 0xdd, + 0x17, 0xab, 0xe7, 0x9e, 0xab, 0x0e, 0x28, 0x24, 0x6e, 0xd0, 0xb1, 0x3d, 0x91, 0xad, 0x77, 0xcf, + 0x5d, 0x5f, 0xe5, 0xd7, 0xc3, 0x9e, 0x70, 0x31, 0xea, 0x09, 0xbb, 0x80, 0xd4, 0x13, 0x65, 0xca, + 0x5e, 0x26, 0xfc, 0xd8, 0x9e, 0x65, 0xd6, 0x1f, 0x44, 0x26, 0x59, 0x6b, 0x56, 0x7b, 0x51, 0x36, + 0x21, 0xa6, 0x2b, 0x7a, 0x0c, 0x45, 0x4f, 0x0c, 0x2d, 0x7d, 0x60, 0x61, 0xd7, 0xc5, 0x45, 0x89, + 0x7c, 0x15, 0x16, 0xe8, 0x1d, 0x0c, 0x60, 0xe9, 0xb0, 0xdc, 0x19, 0x94, 0xdb, 0x5c, 0x0a, 0xad, + 0x41, 0x81, 0x8c, 0x21, 0x55, 0xdb, 0xad, 0x7a, 0xa7, 0xcf, 0xa5, 0x7d, 0x82, 0x58, 0x17, 0xde, + 0xd6, 0x05, 0x2e, 0x43, 0xae, 0xfb, 0x83, 0xce, 0x61, 0xb9, 0x53, 0x6e, 0xd4, 0x6b, 0x5c, 0x96, + 0xff, 0xbf, 0x2c, 0xa0, 0xf9, 0x59, 0x05, 0xd1, 0x7c, 0xcf, 0x30, 0xfd, 0x33, 0x2a, 0xa0, 0xa0, + 0x27, 0xb0, 0xc6, 0x6a, 0xfe, 0x76, 0x7b, 0x1f, 0x77, 0xcc, 0x90, 0x69, 0xb2, 0x0d, 0xcb, 0x16, + 0x8d, 0xea, 0xdc, 0x1d, 0x0f, 0x08, 0x68, 0x17, 0x38, 0xdd, 0xb0, 0xc9, 0xc5, 0xd2, 0x30, 0x35, + 0x5b, 0xa6, 0x8f, 0x24, 0x2c, 0xf0, 0x9a, 0xa3, 0xa3, 0x3d, 0x40, 0xaa, 0xd1, 0x31, 0xec, 0x8a, + 0xa6, 0xab, 0xc1, 0xb0, 0x4c, 0x16, 0x31, 0x2d, 0x24, 0x7a, 0x51, 0xe4, 0xf1, 0x78, 0x28, 0x2b, + 0xef, 0xdc, 0x44, 0x2f, 0x3b, 0x46, 0x66, 0xa8, 0xe8, 0x39, 0x2c, 0x99, 0xb2, 0x3e, 0xc2, 0x56, + 0x69, 0x99, 0x6a, 0xf1, 0xdd, 0x04, 0x91, 0x09, 0x84, 0x49, 0x70, 0x79, 0xd1, 0x01, 0x2c, 0x1b, + 0x53, 0xf6, 0xc6, 0xc4, 0xee, 0xa9, 0x9f, 0x5c, 0x22, 0xe9, 0xbd, 0x2e, 0x63, 0xaf, 0xeb, 0xb6, + 0x79, 0x2e, 0x78, 0x9d, 0x51, 0x15, 0x0a, 0xec, 0x21, 0xb5, 0x69, 0x58, 0xb6, 0x55, 0xca, 0x53, + 0xac, 0x47, 0x49, 0x58, 0x3e, 0xa7, 0x10, 0xee, 0xb5, 0xf3, 0x15, 0xac, 0x84, 0xd1, 0xc9, 0x49, + 0xfc, 0x0e, 0x9f, 0xbb, 0x72, 0x23, 0xc5, 0x68, 0x46, 0x24, 0xef, 0x66, 0x44, 0xbe, 0xca, 0xbc, + 0x4a, 0xf3, 0x06, 0xac, 0xcd, 0xac, 0x91, 0x46, 0x34, 0xa4, 0xd0, 0x36, 0xce, 0xfc, 0x0c, 0x69, + 0x88, 0xe2, 0xb7, 0x0f, 0xa6, 0x53, 0xec, 0x79, 0xc0, 0x10, 0xc5, 0x97, 0x39, 0x8d, 0x4e, 0xc3, + 0x32, 0x27, 0x04, 0xfe, 0x15, 0x6c, 0xc4, 0xad, 0x88, 0xde, 0x4a, 0x65, 0xc5, 0xbf, 0x95, 0xca, + 0x0a, 0x8d, 0xfa, 0xa6, 0x2e, 0x7e, 0x46, 0x9b, 0xf2, 0xcb, 0xb0, 0x58, 0x9f, 0x4c, 0xed, 0xf3, + 0xdd, 0x57, 0xa1, 0xef, 0x1a, 0xe6, 0x3f, 0x9f, 0x40, 0xcb, 0x90, 0xed, 0x94, 0x7b, 0x5c, 0x0a, + 0xe5, 0x60, 0xa1, 0x57, 0xee, 0x0c, 0xb8, 0x34, 0x5a, 0x82, 0x4c, 0xa3, 0xc3, 0x65, 0x76, 0x5f, + 0xc3, 0x66, 0x6c, 0x2e, 0x14, 0xad, 0x40, 0x4e, 0xac, 0x7f, 0x37, 0xa8, 0x77, 0xaa, 0x75, 0x2e, + 0x45, 0x10, 0xca, 0x9d, 0x1a, 0xeb, 0xd7, 0x25, 0x66, 0x83, 0x60, 0xb5, 0xfe, 0x7d, 0xb9, 0xda, + 0x97, 0x7c, 0xa6, 0xec, 0xee, 0xa7, 0xc0, 0xcd, 0xe6, 0x35, 0x09, 0xff, 0xc0, 0x1d, 0xb9, 0xd6, + 0x3d, 0xea, 0x70, 0x69, 0x02, 0xd5, 0x3d, 0x38, 0xe0, 0x32, 0xbb, 0x9f, 0x01, 0x04, 0x79, 0x4c, + 0x62, 0xb5, 0x42, 0x4b, 0x6c, 0x75, 0x1a, 0x2c, 0x45, 0x77, 0x50, 0x6e, 0xb7, 0x49, 0x85, 0xa6, + 0xe8, 0x2a, 0xdd, 0x7e, 0x93, 0xcb, 0xec, 0xfe, 0x57, 0x06, 0x96, 0xdd, 0xe4, 0x19, 0xca, 0xc3, + 0x62, 0x67, 0x70, 0x28, 0x3d, 0xe5, 0x52, 0x5e, 0x71, 0x9f, 0x4b, 0x7b, 0xc5, 0x67, 0x5c, 0xc6, + 0x2b, 0x3e, 0xe7, 0xb2, 0x5e, 0xf1, 0x0b, 0x6e, 0xc1, 0x2b, 0xbe, 0xe0, 0x16, 0xbd, 0xe2, 0x4b, + 0x6e, 0xc9, 0x2b, 0xbe, 0xe2, 0x96, 0xbd, 0xe2, 0x97, 0x5c, 0x8e, 0xcc, 0x88, 0x0e, 0xf1, 0x39, + 0x97, 0xf7, 0xcb, 0x4f, 0x39, 0xf0, 0xcb, 0xfb, 0x5c, 0xc1, 0x2f, 0x3f, 0xe3, 0x56, 0xfc, 0xf2, + 0x73, 0xae, 0xe8, 0x97, 0xbf, 0xe0, 0x56, 0xfd, 0xf2, 0x0b, 0x6e, 0xcd, 0x2f, 0xbf, 0xe4, 0x38, + 0xbf, 0xfc, 0x8a, 0x5b, 0xf7, 0xcb, 0x5f, 0x72, 0xc8, 0x2b, 0xef, 0x7f, 0xce, 0xdd, 0xf2, 0xcb, + 0x4f, 0xb9, 0x0d, 0xbf, 0xbc, 0xcf, 0x6d, 0xfa, 0xe5, 0x67, 0xdc, 0x96, 0x5f, 0x7e, 0xce, 0x6d, + 0xfb, 0xe5, 0x2f, 0xb8, 0x92, 0x5f, 0x7e, 0xc1, 0xdd, 0xf6, 0xcb, 0x2f, 0xb9, 0x1d, 0xbf, 0xfc, + 0x8a, 0xbb, 0xe3, 0x97, 0xbf, 0xe4, 0xee, 0x7a, 0xe5, 0x67, 0x9f, 0x73, 0xf7, 0x76, 0x3f, 0x85, + 0x95, 0x70, 0xe2, 0x91, 0x08, 0xad, 0xdd, 0x3d, 0x62, 0x72, 0x6c, 0xb6, 0x1a, 0x4d, 0x2e, 0x4d, + 0xd8, 0xfb, 0xdd, 0x46, 0xa3, 0x5d, 0xe7, 0x32, 0xbb, 0x35, 0x58, 0x9b, 0x49, 0xa7, 0x11, 0x19, + 0x0e, 0x3a, 0x6f, 0x3a, 0x44, 0xe6, 0x29, 0xa2, 0x05, 0xe5, 0x1e, 0x93, 0xbd, 0xd8, 0x2f, 0x73, + 0x19, 0x74, 0x0b, 0xd6, 0xc4, 0x7e, 0x59, 0x3a, 0x28, 0xb7, 0xda, 0xdd, 0xb7, 0x75, 0x41, 0x2a, + 0xf7, 0xb8, 0xec, 0x6e, 0x0d, 0x8a, 0x91, 0xac, 0x12, 0xda, 0x84, 0x75, 0xc2, 0xd5, 0xe9, 0xf6, + 0xa5, 0x6a, 0xb7, 0xd3, 0xa9, 0x57, 0xfb, 0xf5, 0x1a, 0x13, 0x78, 0xb9, 0x27, 0x0d, 0x08, 0xe0, + 0x3a, 0x14, 0x09, 0x47, 0xd0, 0x9a, 0xd9, 0xfd, 0x90, 0xe5, 0x16, 0xbd, 0xe4, 0x1c, 0x51, 0xe4, + 0xa3, 0x5e, 0x79, 0x5f, 0xea, 0x89, 0x6f, 0xd8, 0xfc, 0xbb, 0xbd, 0x7a, 0x87, 0x4b, 0xef, 0xfe, + 0x15, 0x70, 0xb3, 0xf7, 0x65, 0x32, 0xbf, 0xfe, 0x21, 0x51, 0x57, 0x0e, 0x56, 0x2a, 0x65, 0xb1, + 0x29, 0x89, 0x55, 0xa1, 0xd5, 0xeb, 0x8b, 0xec, 0xe0, 0x20, 0x51, 0xad, 0x47, 0xc8, 0xec, 0xff, + 0xe7, 0x3e, 0x2c, 0xf5, 0x9e, 0x1f, 0x75, 0x7a, 0x4f, 0xd1, 0x31, 0x3c, 0x6a, 0x60, 0xfb, 0x92, + 0xaf, 0x3d, 0x50, 0xf4, 0x78, 0x26, 0x76, 0xbb, 0x73, 0x9d, 0xef, 0xc3, 0xf8, 0x14, 0xfa, 0x53, + 0x1a, 0x1e, 0xb3, 0x18, 0xe4, 0x92, 0xb1, 0xae, 0x83, 0x7b, 0xdd, 0x49, 0xbc, 0x85, 0xdb, 0xe1, + 0xc5, 0x46, 0x3f, 0x38, 0x8b, 0x5b, 0xe4, 0x55, 0xbe, 0x63, 0xe3, 0x53, 0xe8, 0x07, 0xb8, 0x3b, + 0xb3, 0xb6, 0x28, 0xf4, 0x55, 0x60, 0xae, 0x3a, 0xd6, 0xf7, 0xb0, 0x23, 0x86, 0xd6, 0x30, 0xf3, + 0x1d, 0xdc, 0xe3, 0xab, 0x7c, 0x97, 0xb6, 0x13, 0xb3, 0x54, 0x3e, 0x85, 0x7e, 0x07, 0xdb, 0x33, + 0xab, 0x08, 0x62, 0x88, 0x8b, 0x3f, 0x2c, 0xdc, 0xb9, 0xa4, 0x9d, 0x4f, 0xa1, 0xdf, 0xc3, 0x16, + 0x89, 0x7a, 0xf1, 0x3c, 0xf6, 0x27, 0xf1, 0x7d, 0xe3, 0x43, 0xe6, 0x84, 0xa9, 0xff, 0x16, 0x76, + 0x1a, 0xd8, 0xa6, 0x03, 0xa8, 0xf3, 0x23, 0x44, 0xb3, 0xbf, 0x91, 0xe4, 0xe8, 0x15, 0x66, 0xfe, + 0xd7, 0x70, 0xcf, 0x7d, 0xc4, 0xf9, 0x59, 0xe0, 0xbf, 0x23, 0xf0, 0x63, 0xcc, 0xbe, 0x3d, 0xbd, + 0x2e, 0x7c, 0xfc, 0x6e, 0x08, 0x70, 0x9f, 0x82, 0x79, 0x31, 0xff, 0x4f, 0x81, 0xd9, 0x87, 0x3b, + 0x6d, 0xcd, 0x4a, 0xdc, 0xe2, 0x38, 0xe3, 0x79, 0x90, 0x3c, 0x08, 0xcb, 0x3b, 0xa7, 0xd0, 0x21, + 0x94, 0x1a, 0xd8, 0xf6, 0xe6, 0x19, 0xb9, 0x6d, 0xc5, 0x42, 0x5e, 0x94, 0xfc, 0xe0, 0x53, 0xa8, + 0x09, 0xb7, 0x18, 0xd6, 0x7b, 0x23, 0x1d, 0xc0, 0x7a, 0x03, 0xdb, 0x33, 0x09, 0x94, 0x1b, 0xe0, + 0x74, 0x61, 0x5d, 0x9c, 0xc3, 0xb9, 0xa8, 0xcf, 0x65, 0x80, 0xbf, 0x86, 0xd5, 0x06, 0xb6, 0xc3, + 0x49, 0xa8, 0xb8, 0x59, 0x95, 0x22, 0xb4, 0x10, 0x37, 0x43, 0x10, 0xa3, 0x08, 0x89, 0xdc, 0x09, + 0xba, 0x50, 0x83, 0x95, 0x43, 0xc3, 0xd1, 0xed, 0xc1, 0xa1, 0x48, 0x23, 0xff, 0x4b, 0x12, 0x06, + 0x09, 0x28, 0x3d, 0xe0, 0xa8, 0x36, 0x0d, 0xc4, 0x4a, 0xf0, 0xf5, 0x5c, 0x84, 0x33, 0x31, 0x75, + 0x96, 0x80, 0xf8, 0x1d, 0x6c, 0xf8, 0x5e, 0x20, 0x8c, 0x7a, 0x91, 0xb6, 0x5f, 0xb2, 0xdd, 0x7d, + 0xcf, 0x27, 0xfe, 0xa4, 0xa8, 0x6f, 0x08, 0x6a, 0x60, 0xf3, 0x57, 0x45, 0x8d, 0x5f, 0x75, 0x1b, + 0x4a, 0x11, 0x6b, 0x7f, 0x3f, 0xb4, 0x0e, 0x6c, 0x06, 0x76, 0x1e, 0x86, 0xba, 0xb1, 0x85, 0xaf, + 0xb0, 0x4c, 0xb0, 0x7b, 0x43, 0xbb, 0x17, 0x9f, 0xa1, 0x75, 0xe5, 0xbc, 0x73, 0x37, 0xa9, 0xd9, + 0x72, 0xc6, 0x36, 0x85, 0x5b, 0x0b, 0xc3, 0xbd, 0x36, 0x86, 0x97, 0x21, 0x26, 0xa7, 0x84, 0xa9, + 0xa7, 0xdc, 0x6c, 0xb6, 0x6a, 0x44, 0x69, 0xfc, 0x3c, 0x31, 0xcb, 0x2a, 0x27, 0xf7, 0xba, 0x74, + 0x8a, 0x75, 0x40, 0xcd, 0x56, 0xad, 0x2a, 0xeb, 0x0a, 0x1e, 0x07, 0xb3, 0xbc, 0x00, 0x30, 0x49, + 0x10, 0xdb, 0x6c, 0x6a, 0x6e, 0x16, 0xdd, 0xe7, 0x8f, 0x17, 0xc5, 0xbd, 0x44, 0x7c, 0x22, 0x4e, + 0x3e, 0x85, 0x2a, 0xb0, 0xe5, 0x4f, 0xab, 0x3c, 0x1e, 0x5f, 0x02, 0x97, 0x14, 0x21, 0x6c, 0x46, + 0xe6, 0xe4, 0x65, 0xf6, 0x2f, 0x5a, 0xdd, 0x07, 0xb3, 0x4d, 0xb1, 0xaf, 0x02, 0x74, 0x82, 0x85, + 0x03, 0xd1, 0x7f, 0x35, 0x9a, 0x11, 0xeb, 0xec, 0x6b, 0x52, 0xc2, 0x04, 0xdf, 0x00, 0x1c, 0x88, + 0xde, 0x03, 0x16, 0x8a, 0x4a, 0x6a, 0xe6, 0x95, 0x6d, 0x66, 0xc7, 0x66, 0x5f, 0xbd, 0xa8, 0x04, + 0x8a, 0x07, 0x62, 0x03, 0xdb, 0xde, 0x5b, 0xcf, 0x0c, 0xde, 0xcc, 0x4b, 0xd1, 0x0c, 0xde, 0xec, + 0x03, 0x11, 0x9f, 0x42, 0x7f, 0x80, 0xcd, 0x03, 0xb1, 0x6a, 0x62, 0xd9, 0xc6, 0x91, 0xb7, 0x42, + 0x34, 0xf3, 0xe9, 0x63, 0xcc, 0x4b, 0xe5, 0x0e, 0x7f, 0x11, 0x8b, 0x3f, 0xc2, 0xaf, 0xa1, 0x40, + 0x5f, 0x3f, 0xdb, 0x34, 0x71, 0x33, 0x23, 0x95, 0xf0, 0x13, 0xef, 0xec, 0xf6, 0x91, 0x26, 0x3e, + 0xf5, 0x79, 0x1a, 0x35, 0xa0, 0x50, 0x57, 0x4e, 0xfc, 0xd7, 0xaf, 0x8b, 0xfc, 0xc7, 0x05, 0x6d, + 0x7c, 0x0a, 0xb5, 0x00, 0x31, 0x87, 0x14, 0xf9, 0x58, 0x22, 0xf9, 0x79, 0x7c, 0x67, 0x2b, 0xfe, + 0x89, 0x9e, 0x4f, 0xa1, 0xaf, 0x61, 0xa5, 0x81, 0xed, 0xe0, 0x69, 0x3f, 0x4e, 0x5f, 0x93, 0x7b, + 0x1f, 0xc0, 0x16, 0xdb, 0x0e, 0x9f, 0x58, 0x3d, 0x61, 0x69, 0x9f, 0xeb, 0xe1, 0x08, 0xb0, 0x4e, + 0x9d, 0xe2, 0x91, 0x76, 0x1c, 0xac, 0xe7, 0x97, 0x33, 0xec, 0x49, 0x5f, 0xa4, 0x24, 0x1e, 0x81, + 0x9b, 0xfe, 0x81, 0x15, 0xc1, 0xbd, 0x68, 0xdf, 0x93, 0xf7, 0x90, 0x22, 0x96, 0xc2, 0xe7, 0xd5, + 0x95, 0x41, 0x93, 0xd7, 0xdd, 0x26, 0x88, 0xc1, 0x59, 0x75, 0x65, 0xc4, 0xf8, 0x15, 0x1f, 0xc2, + 0xed, 0xc8, 0x61, 0xf5, 0x9e, 0x70, 0x5d, 0x26, 0xdc, 0x98, 0xa9, 0xdd, 0xf0, 0xb8, 0x92, 0xe0, + 0x01, 0x9b, 0x5a, 0x72, 0x36, 0xfb, 0x8a, 0x99, 0xf1, 0x84, 0x19, 0x1b, 0xf0, 0xcb, 0x06, 0xb6, + 0xcb, 0xe3, 0xf1, 0xe5, 0x09, 0xf9, 0xb8, 0x25, 0xec, 0x45, 0xb3, 0x89, 0x97, 0x61, 0xf0, 0x29, + 0x34, 0x86, 0xc7, 0xa1, 0x10, 0x3b, 0x79, 0xb4, 0x8b, 0x36, 0xff, 0x8a, 0x4b, 0xe6, 0x53, 0x48, + 0x71, 0xaf, 0x1e, 0xc9, 0xe3, 0xc4, 0xa7, 0xfa, 0xaf, 0x65, 0x36, 0x3f, 0x00, 0xef, 0x9b, 0xcd, + 0xcf, 0xbd, 0xa0, 0xdf, 0xc0, 0x07, 0x61, 0x83, 0xba, 0xd9, 0x70, 0xf1, 0xcb, 0xa0, 0xd0, 0x81, + 0x65, 0xfd, 0x94, 0xd0, 0xbf, 0x87, 0x5f, 0x04, 0x76, 0x71, 0x3d, 0x0d, 0xbb, 0x82, 0x91, 0x08, + 0x70, 0x27, 0xa4, 0x52, 0x73, 0xbf, 0xdc, 0xb8, 0x3c, 0x3c, 0x99, 0xed, 0x42, 0x0d, 0xcf, 0xbd, + 0x65, 0xcf, 0xb6, 0x09, 0x78, 0x3a, 0x96, 0x95, 0xd9, 0x78, 0x60, 0x96, 0xeb, 0xf2, 0x01, 0x7e, + 0x07, 0xb7, 0xe3, 0x07, 0x28, 0xab, 0xea, 0x7b, 0x83, 0xff, 0x8d, 0x97, 0x00, 0x9a, 0x9f, 0xfd, + 0xc4, 0x38, 0x7d, 0xff, 0xc9, 0x47, 0x6e, 0xdf, 0xb3, 0xed, 0x37, 0x96, 0x63, 0x1b, 0x36, 0x29, + 0xe2, 0x9c, 0x04, 0x2f, 0x99, 0x6e, 0xbc, 0xce, 0x0d, 0xe1, 0x17, 0x61, 0x4b, 0x49, 0x92, 0xe3, + 0x45, 0xca, 0x7c, 0x85, 0x7d, 0x7e, 0x70, 0xd1, 0x18, 0x44, 0x94, 0xef, 0x85, 0xdf, 0x23, 0x72, + 0x0c, 0x4c, 0x72, 0x6e, 0x63, 0xae, 0x6f, 0x89, 0xdf, 0xc1, 0xf6, 0x91, 0xac, 0xd9, 0x71, 0xdf, + 0x9a, 0x5f, 0xfa, 0xeb, 0x8d, 0x04, 0xc8, 0x16, 0xdc, 0x3a, 0xd0, 0x4c, 0x3c, 0xf7, 0x19, 0xed, + 0x45, 0x1f, 0xfa, 0x27, 0x42, 0x6d, 0xb0, 0xfd, 0x9c, 0xf9, 0xa9, 0xf8, 0x45, 0xbf, 0x64, 0x4e, + 0x80, 0x7a, 0x0b, 0xb7, 0xe8, 0xa6, 0xcd, 0x20, 0x7d, 0x34, 0x13, 0x65, 0x27, 0xff, 0xe8, 0x3a, + 0x31, 0xf1, 0xb4, 0xed, 0x3b, 0xfb, 0x19, 0xec, 0xab, 0xdf, 0xc0, 0xa3, 0x1d, 0xf9, 0x14, 0x3a, + 0x82, 0x9d, 0xb0, 0x22, 0xfd, 0x74, 0xc0, 0x1d, 0x02, 0x1c, 0x68, 0xd0, 0x35, 0x80, 0x93, 0xf4, + 0xa7, 0x14, 0x58, 0xfe, 0x0c, 0xda, 0x0d, 0xcd, 0xfe, 0x6b, 0xc8, 0xd5, 0x2a, 0x15, 0x59, 0x79, + 0xe7, 0x4c, 0x6f, 0x30, 0xa1, 0x6f, 0x20, 0x5f, 0xab, 0x08, 0xd8, 0x22, 0x13, 0xba, 0x51, 0x00, + 0xb8, 0x11, 0xac, 0xc7, 0xbf, 0x28, 0xde, 0xd8, 0x85, 0x45, 0xd2, 0x15, 0xc1, 0xaf, 0x06, 0xde, + 0xc3, 0x25, 0xde, 0x0a, 0xf0, 0xbc, 0x5d, 0xba, 0x29, 0xda, 0x70, 0x89, 0xfe, 0x31, 0xc3, 0xb3, + 0xff, 0x0f, 0x00, 0x00, 0xff, 0xff, 0x96, 0xc4, 0xbb, 0x95, 0xa6, 0x41, 0x00, 0x00, } diff --git a/proto/grpc.proto b/proto/grpc.proto index 30f0868..ede83c7 100644 --- a/proto/grpc.proto +++ b/proto/grpc.proto @@ -100,6 +100,15 @@ service P4WNP1 { rpc FireActionGroupSend(ActionGroupSend) returns (Empty) {} + //MasterTemplates + rpc DeployMasterTemplate(MasterTemplate) returns (Empty) {} + + rpc StoreMasterTemplate(RequestMasterTemplateStorage) returns (Empty) {} + rpc GetStoredMasterTemplate(StringMessage) returns (MasterTemplate) {} + rpc DeployStoredMasterTemplate(StringMessage) returns (MasterTemplate) {} + rpc DeleteStoredMasterTemplate(StringMessage) returns (Empty) {} + rpc ListStoredMasterTemplate(Empty) returns (StringMessageArray) {} + // DB backup&restore rpc DBBackup(StringMessage) returns(Empty) {} @@ -110,6 +119,19 @@ service P4WNP1 { rpc ListStoredDBBackups(Empty) returns (StringMessageArray) {} } +/* MasterTemplates */ +message MasterTemplate { + string template_name_bluetooth = 1; + string template_name_usb = 2; + string template_name_wifi = 3; + string template_name_trigger_actions = 4; + repeated string template_names_network = 5; +} + +message RequestMasterTemplateStorage { + string TemplateName = 1; + MasterTemplate template = 2; +} /* Bluetooth */ @@ -118,8 +140,6 @@ message BluetoothRequestSettingsStorage { BluetoothSettings settings = 2; } - - message BluetoothSettings { BluetoothControllerInformation ci = 1; //Parts interpreted as settings: current_settings, name, service_network_server_nap, service_network_server_panu, service_network_server_gn BluetoothAgentSettings as = 2; @@ -272,6 +292,16 @@ enum GPIONum { NUM_18 = 17; NUM_19 = 18; NUM_20 = 19; + NUM_21 = 20; + NUM_22 = 21; + NUM_23 = 22; + NUM_24 = 23; + NUM_25 = 24; + NUM_26 = 25; + NUM_27 = 26; + NUM_28 = 27; + NUM_29 = 28; + NUM_30 = 29; } message TriggerGPIOIn { GPIONum gpioNum = 1; diff --git a/service/SubSysTriggerAction.go b/service/SubSysTriggerAction.go index 3a36c76..2af0a80 100644 --- a/service/SubSysTriggerAction.go +++ b/service/SubSysTriggerAction.go @@ -330,7 +330,12 @@ func (tam *TriggerActionManager) executeActionDeploySettingsTemplate(evt *pb.Eve switch action.Type { case pb.ActionDeploySettingsTemplate_FULL_SETTINGS: - // ToDo: Implement + _,err := tam.rootSvc.SubSysRPC.DeployStoredMasterTemplate(context.Background(), &pb.StringMessage{Msg: action.TemplateName}) + if err == nil { + fmt.Println("... stored settings deployed") + } else { + fmt.Println("... deploying stored settings failed: ", err.Error()) + } case pb.ActionDeploySettingsTemplate_NETWORK: _,err := tam.rootSvc.SubSysRPC.DeployStoredEthernetInterfaceSettings(context.Background(), &pb.StringMessage{Msg: action.TemplateName}) if err == nil { @@ -353,7 +358,12 @@ func (tam *TriggerActionManager) executeActionDeploySettingsTemplate(evt *pb.Eve fmt.Println("... deploying stored settings failed: ", err.Error()) } case pb.ActionDeploySettingsTemplate_BLUETOOTH: - // ToDo: Implement + _,err := tam.rootSvc.SubSysRPC.DeployStoredBluetoothSettings(context.Background(), &pb.StringMessage{Msg: action.TemplateName}) + if err == nil { + fmt.Println("... stored settings deployed") + } else { + fmt.Println("... deploying stored settings failed: ", err.Error()) + } case pb.ActionDeploySettingsTemplate_TRIGGER_ACTIONS: _,err := tam.rootSvc.SubSysRPC.DeployStoredTriggerActionSetReplace(context.Background(), &pb.StringMessage{Msg: action.TemplateName}) if err == nil { diff --git a/service/rpc_server.go b/service/rpc_server.go index 03d8bb7..24c38cb 100644 --- a/service/rpc_server.go +++ b/service/rpc_server.go @@ -34,6 +34,7 @@ const ( cSTORE_PREFIX_ETHERNET_INTERFACE_SETTINGS = "eis_" cSTORE_PREFIX_TRIGGER_ACTION_SET = "tas_" cSTORE_PREFIX_BLUETOOTH_SETTINGS = "bt_" + cSTORE_PREFIX_MASTER_TEMPLATE = "master_" ) @@ -50,6 +51,73 @@ type server struct { listenAddrWeb string } +func (s *server) DeployMasterTemplate(ctx context.Context, mt *pb.MasterTemplate) (e *pb.Empty, err error) { + e = &pb.Empty{} + + //ignore templates with name of length 0 + if len(mt.TemplateNameTriggerActions) > 0 { + _,err = s.DeployStoredTriggerActionSetReplace(ctx, &pb.StringMessage{Msg: mt.TemplateNameTriggerActions}) + if err != nil { return } + + } + + for _,nnw := range mt.TemplateNamesNetwork { + _,err = s.DeployStoredEthernetInterfaceSettings(ctx, &pb.StringMessage{Msg: nnw}) + if err != nil { return } + } + + if len(mt.TemplateNameBluetooth) > 0 { + _, err = s.DeployStoredBluetoothSettings(ctx, &pb.StringMessage{Msg: mt.TemplateNameBluetooth}) + if err != nil { return } + } + if len(mt.TemplateNameUsb) > 0 { + _, err = s.DeployStoredUSBSettings(ctx, &pb.StringMessage{Msg: mt.TemplateNameUsb}) + if err != nil { return } + } + if len(mt.TemplateNameWifi) > 0 { + _, err = s.DeployStoredWifiSettings(ctx, &pb.StringMessage{Msg: mt.TemplateNameWifi}) + if err != nil { return } + } + return +} + +func (s *server) StoreMasterTemplate(ctx context.Context, r *pb.RequestMasterTemplateStorage) (e *pb.Empty, err error) { + e = &pb.Empty{} + + defer s.rootSvc.SubSysEvent.Emit(ConstructEventNotifyStateChange(common_web.STATE_CHANGE_EVT_TYPE_STORED_GLOBAL_SETTINGS_LIST)) + err = s.rootSvc.SubSysDataStore.Put(cSTORE_PREFIX_MASTER_TEMPLATE + r.TemplateName, r.Template, true) + return + +} + +func (s *server) GetStoredMasterTemplate(ctx context.Context, templateName *pb.StringMessage) (result *pb.MasterTemplate, err error) { + result = &pb.MasterTemplate{} + err = s.rootSvc.SubSysDataStore.Get(cSTORE_PREFIX_MASTER_TEMPLATE + templateName.Msg, result) + return +} + +func (s *server) DeployStoredMasterTemplate(ctx context.Context, templateName *pb.StringMessage) (re *pb.MasterTemplate, err error) { + re,err = s.GetStoredMasterTemplate(ctx,templateName) + if err != nil { return } + _,err = s.DeployMasterTemplate(ctx, re) + return +} + +func (s *server) DeleteStoredMasterTemplate(ctx context.Context, templateName *pb.StringMessage) (e *pb.Empty, err error) { + defer s.rootSvc.SubSysEvent.Emit(ConstructEventNotifyStateChange(common_web.STATE_CHANGE_EVT_TYPE_STORED_GLOBAL_SETTINGS_LIST)) + e = &pb.Empty{} + err = s.rootSvc.SubSysDataStore.Delete(cSTORE_PREFIX_MASTER_TEMPLATE + templateName.Msg) + return +} + +func (s *server) ListStoredMasterTemplate(ctx context.Context, e *pb.Empty) (sa *pb.StringMessageArray, err error) { + sa = &pb.StringMessageArray{} + res,err := s.rootSvc.SubSysDataStore.KeysPrefix(cSTORE_PREFIX_MASTER_TEMPLATE, true) + if err != nil { return sa,err } + sa.MsgArray = res + return +} + func (s *server) WaitTriggerGroupReceive(rpcCtx context.Context, triggerGR *pb.TriggerGroupReceive) (e *pb.Empty, err error) { e = &pb.Empty{} triggerVal := triggerGR.Value @@ -414,7 +482,7 @@ func (s *server) Stop() error { } func (s *server) StoreDeployedWifiSettings(ctx context.Context, m *pb.StringMessage) (e *pb.Empty, err error) { - defer s.rootSvc.SubSysEvent.Emit(ConstructEventNotifyStateChange(common_web.STATE_CHANGE_EVT_TYPE_STORED_WIFI_SETTINGS_LIST)) + //defer s.rootSvc.SubSysEvent.Emit(ConstructEventNotifyStateChange(common_web.STATE_CHANGE_EVT_TYPE_STORED_WIFI_SETTINGS_LIST)) return s.StoreWifiSettings(ctx, &pb.WifiRequestSettingsStorage{ Settings: s.rootSvc.SubSysWifi.State.CurrentSettings, TemplateName: m.Msg, @@ -429,7 +497,7 @@ func (s *server) DeployStoredWifiSettings(ctx context.Context, m *pb.StringMessa } func (s *server) StoreWifiSettings(ctx context.Context, r *pb.WifiRequestSettingsStorage) (e *pb.Empty, err error) { - defer s.rootSvc.SubSysEvent.Emit(ConstructEventNotifyStateChange(common_web.STATE_CHANGE_EVT_TYPE_WIFI)) + defer s.rootSvc.SubSysEvent.Emit(ConstructEventNotifyStateChange(common_web.STATE_CHANGE_EVT_TYPE_STORED_WIFI_SETTINGS_LIST)) e = &pb.Empty{} err = s.rootSvc.SubSysDataStore.Put(cSTORE_PREFIX_WIFI_SETTINGS + r.TemplateName, r.Settings, true) return diff --git a/web_client/hvueCompUSBSettings.go b/web_client/hvueCompUSBSettings.go index 13cba23..119b43e 100644 --- a/web_client/hvueCompUSBSettings.go +++ b/web_client/hvueCompUSBSettings.go @@ -121,10 +121,10 @@ const (
-
-
-
-
+
+
+
+
diff --git a/web_client/hvueComponentsGeneric.go b/web_client/hvueComponentsGeneric.go index 61c7a17..4156378 100644 --- a/web_client/hvueComponentsGeneric.go +++ b/web_client/hvueComponentsGeneric.go @@ -8,26 +8,6 @@ import ( "strings" ) -type jsMasterTemplate struct { - *js.Object - TemplateNameBluetooth string `js:"TemplateNameBluetooth"` - TemplateNameUSB string `js:"TemplateNameUSB"` - TemplateNameWiFi string `js:"TemplateNameWiFi"` - TemplateNameTriggerActions string `js:"TemplateNameTriggerActions"` - TemplateNamesNetwork []string `js:"TemplateNamesNetwork"` -} - -func NewMasterTemplate() (res *jsMasterTemplate) { - res = &jsMasterTemplate{Object: O()} - res.TemplateNameBluetooth = "" - res.TemplateNameWiFi = "" - res.TemplateNameUSB = "" - res.TemplateNameTriggerActions = "" - res.TemplateNamesNetwork = []string{} - - return res -} - func InitComponentsGeneric() { hvue.NewComponent( @@ -48,7 +28,7 @@ func InitComponentsGeneric() { hvue.DataFunc(func(vm *hvue.VM) interface{} { data := &struct { *js.Object - MasterTemplate *jsMasterTemplate `js:"MasterTemplate"` + //MasterTemplate *jsMasterTemplate `js:"MasterTemplate"` ShowTemplateSelectBluetooth bool `js:"ShowTemplateSelectBluetooth"` ShowTemplateSelectWiFi bool `js:"ShowTemplateSelectWiFi"` @@ -56,17 +36,76 @@ func InitComponentsGeneric() { ShowTemplateSelectTriggerAction bool `js:"ShowTemplateSelectTriggerAction"` ShowTemplateSelectNetwork bool `js:"ShowTemplateSelectNetwork"` + ShowStoreModal bool `js:"showStoreModal"` + ShowLoadModal bool `js:"showLoadModal"` + ShowDeployStoredModal bool `js:"showDeployStoredModal"` + + }{Object: O()} - data.MasterTemplate = NewMasterTemplate() + //data.MasterTemplate = NewMasterTemplate() data.ShowTemplateSelectBluetooth = false data.ShowTemplateSelectWiFi = false data.ShowTemplateSelectUSB = false data.ShowTemplateSelectTriggerAction = false data.ShowTemplateSelectNetwork = false + data.ShowStoreModal = false + data.ShowLoadModal = false + data.ShowDeployStoredModal = false + + return data }), + hvue.PropObj("value", hvue.Required), + hvue.ComputedWithGetSet( + "MasterTemplate", + func(vm *hvue.VM) interface{} { + return vm.Get("value") + }, + func(vm *hvue.VM, newValue *js.Object) { + vm.Emit("input", newValue) + }, + ), + hvue.Method("deploy", + func(vm *hvue.VM, masterTemplate *jsMasterTemplate) { + vm.Get("$store").Call("dispatch", VUEX_ACTION_DEPLOY_MASTER_TEMPLATE, masterTemplate) + }), + + hvue.Method("store", + func(vm *hvue.VM, name *js.Object) { + sReq := NewRequestMasterTemplateStorage() + sReq.TemplateName = name.String() + sReq.Template = &jsMasterTemplate{ + Object: vm.Get("$store").Get("state").Get("CurrentMasterTemplate"), + } + println("Storing :", sReq) + vm.Get("$store").Call("dispatch", VUEX_ACTION_STORE_MASTER_TEMPLATE, sReq) + vm.Set("showStoreModal", false) + }), + hvue.Method("load", + func(vm *hvue.VM, name *js.Object) { + println("Loading :", name.String()) + vm.Get("$store").Call("dispatch", VUEX_ACTION_LOAD_MASTER_TEMPLATE, name) + }), + hvue.Method("deleteStored", + func(vm *hvue.VM, name *js.Object) { + println("Loading :", name.String()) + vm.Get("$store").Call("dispatch", VUEX_ACTION_DELETE_STORED_MASTER_TEMPLATE, name) + }), + hvue.Method("deployStored", + func(vm *hvue.VM, name *js.Object) { + println("Loading :", name.String()) + vm.Get("$store").Call("dispatch", VUEX_ACTION_DEPLOY_STORED_MASTER_TEMPLATE, name) + }), + hvue.Method("updateStoredSettingsList", + func(vm *hvue.VM) { + vm.Store.Call("dispatch", VUEX_ACTION_UPDATE_STORED_MASTER_TEMPLATE_LIST) + }), + hvue.Mounted(func(vm *hvue.VM) { + vm.Store.Call("dispatch", VUEX_ACTION_UPDATE_STORED_MASTER_TEMPLATE_LIST) + }), + ) hvue.NewComponent( "database", @@ -209,19 +248,19 @@ func InitComponentsGeneric() { const compGeneric = `
-
- +
+
-
+
-
+
-
+
@@ -249,43 +288,145 @@ const compMasterTemplate = ` Master Template - {{ $data }} + - + + + +
- - +
+
+
+
+
+
+ +
+
+ + + + + + + + + TriggerActions Template + + +
+
+ +
+
+
+
+
+
+
+ + + + + + USB Template + - +
+
+ +
+
+
+
+
- - + + + + + + WiFi Template + + +
+
+ +
+
+
+
+
+
+
+ + + + + + + Bluetooth Template + + +
+
+ +
+
+
+
+
+
+
+ + + + Networks templates + Only one template could be selected per interface. + - +
+
+ + +
+
+
+
+
- -
diff --git a/web_client/hvueComponentsTriggerActions.go b/web_client/hvueComponentsTriggerActions.go index 304f6c0..3e98f08 100644 --- a/web_client/hvueComponentsTriggerActions.go +++ b/web_client/hvueComponentsTriggerActions.go @@ -501,9 +501,9 @@ func InitComponentsTriggerActions() { aData := &jsActionDeploySettingsTemplate{Object: ta.ActionData} switch aData.Type { case TemplateTypeFullSettings: - //ToDo: Implement + return vm.Store.Get("state").Get("StoredMasterTemplateList") case TemplateTypeBluetooth: - //ToDo: Implement + return vm.Store.Get("state").Get("StoredBluetoothSettingsList") case TemplateTypeUSB: //return USB list return vm.Store.Get("state").Get("StoredUSBSettingsList") diff --git a/web_client/jsDataHandling.go b/web_client/jsDataHandling.go index 74343be..313f8fc 100644 --- a/web_client/jsDataHandling.go +++ b/web_client/jsDataHandling.go @@ -14,6 +14,71 @@ import ( var eNoLogEvent = errors.New("No log event") var eNoHidEvent = errors.New("No HID event") + +type jsMasterTemplate struct { + *js.Object + TemplateNameBluetooth string `js:"TemplateNameBluetooth"` + TemplateNameUSB string `js:"TemplateNameUSB"` + TemplateNameWiFi string `js:"TemplateNameWiFi"` + TemplateNameTriggerActions string `js:"TemplateNameTriggerActions"` + TemplateNamesNetwork []string `js:"TemplateNamesNetwork"` +} + +func (target *jsMasterTemplate) fromGo(src *pb.MasterTemplate) { + target.TemplateNamesNetwork = src.TemplateNamesNetwork + target.TemplateNameBluetooth = src.TemplateNameBluetooth + target.TemplateNameWiFi = src.TemplateNameWifi + target.TemplateNameUSB = src.TemplateNameUsb + target.TemplateNameTriggerActions = src.TemplateNameTriggerActions +} + +func (src *jsMasterTemplate) toGo() (target *pb.MasterTemplate) { + target = &pb.MasterTemplate{} + target.TemplateNamesNetwork = src.TemplateNamesNetwork + target.TemplateNameBluetooth = src.TemplateNameBluetooth + target.TemplateNameWifi = src.TemplateNameWiFi + target.TemplateNameUsb = src.TemplateNameUSB + target.TemplateNameTriggerActions = src.TemplateNameTriggerActions + return target +} + +func NewMasterTemplate() (res *jsMasterTemplate) { + res = &jsMasterTemplate{Object: O()} + res.TemplateNameBluetooth = "" + res.TemplateNameWiFi = "" + res.TemplateNameUSB = "" + res.TemplateNameTriggerActions = "" + res.TemplateNamesNetwork = []string{} + + return res +} + +type jsRequestMasterTemplateStorage struct { + *js.Object + TemplateName string `js:"TemplateName"` + Template *jsMasterTemplate `js:"Template"` +} + +func (rs *jsRequestMasterTemplateStorage) toGo() *pb.RequestMasterTemplateStorage { + return &pb.RequestMasterTemplateStorage{ + TemplateName: rs.TemplateName, + Template: rs.Template.toGo(), + } +} + +func (rs *jsRequestMasterTemplateStorage) fromGo(src *pb.RequestMasterTemplateStorage) { + rs.TemplateName = src.TemplateName + rs.Template = NewMasterTemplate() + rs.Template.fromGo(src.Template) +} + +func NewRequestMasterTemplateStorage() (res *jsRequestMasterTemplateStorage) { + res = &jsRequestMasterTemplateStorage{Object:O()} + res.Template = NewMasterTemplate() + res.TemplateName = "" + return res +} + type jsLoadHidScriptSourceMode int const ( HID_SCRIPT_SOURCE_LOAD_MODE_PREPEND jsLoadHidScriptSourceMode = iota diff --git a/web_client/mvuexGlobalState.go b/web_client/mvuexGlobalState.go index 5d098ec..01eeebc 100644 --- a/web_client/mvuexGlobalState.go +++ b/web_client/mvuexGlobalState.go @@ -111,6 +111,19 @@ const ( VUEX_MUTATION_SET_STORED_TRIGGER_ACTIONS_SETS_LIST = "setStoredTriggerActionSetsList" + //Master templates + VUEX_ACTION_DEPLOY_MASTER_TEMPLATE = "deployMasterTemplate" + VUEX_ACTION_UPDATE_STORED_MASTER_TEMPLATE_LIST = "updateStoredMasterTemplateList" + VUEX_ACTION_STORE_MASTER_TEMPLATE = "storeMasterTemplate" + VUEX_ACTION_LOAD_MASTER_TEMPLATE = "loadMasterTemplate" + VUEX_ACTION_DEPLOY_STORED_MASTER_TEMPLATE = "deployStoredMasterTemplate" + VUEX_ACTION_DELETE_STORED_MASTER_TEMPLATE = "deleteStoredMasterTemplate" + + VUEX_MUTATION_SET_CURRENT_MASTER_TEMPLATE = "setCurrentMasterTemplate" + VUEX_MUTATION_SET_STORED_MASTER_TEMPLATE_LIST = "setStoredMasterTemplateList" + + + //Bash scripts (used by TriggerActions) VUEX_ACTION_UPDATE_STORED_BASH_SCRIPTS_LIST = "updateStoredBashScriptsList" @@ -138,6 +151,7 @@ type GlobalState struct { WiFiState *jsWiFiState `js:"wifiState"` CurrentBluetoothControllerInformation *jsBluetoothControllerInformation `js:"CurrentBluetoothControllerInformation"` CurrentBluetoothAgentSettings *jsBluetoothAgentSettings `js:"CurrentBluetoothAgentSettings"` + CurrentMasterTemplate *jsMasterTemplate `js:"CurrentMasterTemplate"` StoredWifiSettingsList []string `js:"StoredWifiSettingsList"` StoredEthernetInterfaceSettingsList []string `js:"StoredEthernetInterfaceSettingsList"` @@ -146,6 +160,7 @@ type GlobalState struct { StoredHIDScriptsList []string `js:"StoredHIDScriptsList"` StoredUSBSettingsList []string `js:"StoredUSBSettingsList"` StoredBluetoothSettingsList []string `js:"StoredBluetoothSettingsList"` + StoredMasterTemplateList []string `js:"StoredMasterTemplateList"` ConnectRetryCount int `js:"ConnectRetryCount"` EventListenerRunning bool `js:"EventListenerRunning"` @@ -166,6 +181,7 @@ func createGlobalStateStruct() GlobalState { state.IsConnected = false state.IsModalEnabled = false state.FailedConnectionAttempts = 0 + state.CurrentMasterTemplate = NewMasterTemplate() state.StoredWifiSettingsList = []string{} state.StoredEthernetInterfaceSettingsList = []string{} @@ -174,6 +190,7 @@ func createGlobalStateStruct() GlobalState { state.StoredHIDScriptsList = []string{} state.StoredUSBSettingsList = []string{} state.StoredBluetoothSettingsList = []string{} + state.StoredMasterTemplateList = []string{} //Retrieve Interface settings state.InterfaceSettings = NewEthernetSettingsList() @@ -230,6 +247,8 @@ func processEvent(evt *pb.Event, store *mvuex.Store, state *GlobalState) { store.Dispatch(VUEX_ACTION_UPDATE_STORED_BLUETOOTH_SETTINGS_LIST) case common_web.STATE_CHANGE_EVT_TYPE_STORED_TRIGGER_ACTION_SETS_LIST: store.Dispatch(VUEX_ACTION_UPDATE_STORED_TRIGGER_ACTION_SETS_LIST) + case common_web.STATE_CHANGE_EVT_TYPE_STORED_GLOBAL_SETTINGS_LIST: + store.Dispatch(VUEX_ACTION_UPDATE_STORED_MASTER_TEMPLATE_LIST) } default: // events which aren't of type "notify state change" are processed by the EventProcessor @@ -258,6 +277,95 @@ func actionUpdateAllStates(store *mvuex.Store, context *mvuex.ActionContext, sta } +func actionDeployMasterTemplate(store *mvuex.Store, context *mvuex.ActionContext, state *GlobalState, mt *jsMasterTemplate) { + go func() { + println("Vuex dispatch " + VUEX_ACTION_DEPLOY_MASTER_TEMPLATE) + // convert to Go type + err := RpcClient.DeployMasterTemplate(defaultTimeoutMid, mt.toGo()) + if err != nil { + QuasarNotifyError("Error deploying stored master template", err.Error(), QUASAR_NOTIFICATION_POSITION_BOTTOM) + } + QuasarNotifySuccess("Master template deployed", "", QUASAR_NOTIFICATION_POSITION_TOP) + }() +} + +func actionUpdateStoredMasterTemplateList(store *mvuex.Store, context *mvuex.ActionContext, state *GlobalState) { + go func() { + println("Trying to fetch master template list") + //fetch deployed gadget settings + mtList, err := RpcClient.GetStoredMasterTemplateList(defaultTimeout) + if err != nil { + println("Couldn't retrieve MasterTemplate list") + return + } + + //commit to current + + context.Commit(VUEX_MUTATION_SET_STORED_MASTER_TEMPLATE_LIST, mtList) + }() + + return +} + +func actionStoreMasterTemplate(store *mvuex.Store, context *mvuex.ActionContext, state *GlobalState, req *jsRequestMasterTemplateStorage) { + go func() { + println("Vuex dispatch store MasterTemplate: ", req.TemplateName) + // convert to Go type + err := RpcClient.StoreMasterTemplate(defaultTimeout, req.toGo()) + if err != nil { + QuasarNotifyError("Error storing MasterTemplate", err.Error(), QUASAR_NOTIFICATION_POSITION_BOTTOM) + } + QuasarNotifySuccess("New MasterTemplate stored", "", QUASAR_NOTIFICATION_POSITION_TOP) + }() +} + +func actionLoadMasterTemplate(store *mvuex.Store, context *mvuex.ActionContext, state *GlobalState, settingsName *js.Object) { + go func() { + println("Vuex dispatch load MasterTemplate: ", settingsName.String()) + // convert to Go type + template, err := RpcClient.GetStoredMasterTemplate(defaultTimeout, &pb.StringMessage{Msg: settingsName.String()}) + if err != nil { + QuasarNotifyError("Error fetching stored MasterTemplate", err.Error(), QUASAR_NOTIFICATION_POSITION_BOTTOM) + } + + jsMT := NewMasterTemplate() + jsMT.fromGo(template) + context.Commit(VUEX_MUTATION_SET_CURRENT_MASTER_TEMPLATE, jsMT) + + QuasarNotifySuccess("New MasterTemplate loaded", "", QUASAR_NOTIFICATION_POSITION_TOP) + }() +} + +func actionDeployStoredMasterTemplate(store *mvuex.Store, context *mvuex.ActionContext, state *GlobalState, templateName *js.Object) { + go func() { + println("Vuex dispatch load MasterTemplate: ", templateName.String()) + // convert to Go type + goMT, err := RpcClient.DeployStoredMasterTemplate(defaultTimeoutMid, &pb.StringMessage{Msg: templateName.String()}) + if err != nil { + QuasarNotifyError("Error deploying stored MasterTemplate", err.Error(), QUASAR_NOTIFICATION_POSITION_BOTTOM) + } + QuasarNotifySuccess("New MasterTemplate deployed", "", QUASAR_NOTIFICATION_POSITION_TOP) + jsMT := NewMasterTemplate() + jsMT.fromGo(goMT) + context.Commit(VUEX_MUTATION_SET_CURRENT_MASTER_TEMPLATE, jsMT) + }() +} + +func actionDeleteStoredMasterTemplate(store *mvuex.Store, context *mvuex.ActionContext, state *GlobalState, templateName *js.Object) { + go func() { + println("Vuex dispatch delete MasterTemplate: ", templateName.String()) + // convert to Go type + err := RpcClient.DeleteStoredMasterTemplate(defaultTimeout, &pb.StringMessage{Msg: templateName.String()}) + if err != nil { + QuasarNotifyError("Error deleting stored MasterTemplate", err.Error(), QUASAR_NOTIFICATION_POSITION_BOTTOM) + } + QuasarNotifySuccess("MasterTemplate deleted", "", QUASAR_NOTIFICATION_POSITION_TOP) + actionUpdateStoredMasterTemplateList(store, context, state) + }() +} + + + func actionSendAndRunHIDScript(store *mvuex.Store, context *mvuex.ActionContext, state *GlobalState, scriptContent *js.Object) { go func() { strScriptContent := scriptContent.String() @@ -1250,6 +1358,20 @@ func initMVuex() *mvuex.Store { state.HidJobList.DeleteEntry(int64(id)) }), + mvuex.Mutation(VUEX_MUTATION_SET_CURRENT_MASTER_TEMPLATE, func(store *mvuex.Store, state *GlobalState, newMasterTemplate *jsMasterTemplate) { + hvue.Set(state,"CurrentMasterTemplate", newMasterTemplate) + }), + mvuex.Mutation(VUEX_MUTATION_SET_STORED_MASTER_TEMPLATE_LIST, func(store *mvuex.Store, state *GlobalState, mtList []interface{}) { + hvue.Set(state, "StoredMasterTemplateList", mtList) + }), + + + mvuex.Action(VUEX_ACTION_DEPLOY_MASTER_TEMPLATE, actionDeployMasterTemplate), + mvuex.Action(VUEX_ACTION_UPDATE_STORED_MASTER_TEMPLATE_LIST, actionUpdateStoredMasterTemplateList), + mvuex.Action(VUEX_ACTION_STORE_MASTER_TEMPLATE, actionStoreMasterTemplate), + mvuex.Action(VUEX_ACTION_LOAD_MASTER_TEMPLATE, actionLoadMasterTemplate), + mvuex.Action(VUEX_ACTION_DEPLOY_STORED_MASTER_TEMPLATE, actionDeployStoredMasterTemplate), + mvuex.Action(VUEX_ACTION_DELETE_STORED_MASTER_TEMPLATE, actionDeleteStoredMasterTemplate), mvuex.Action(VUEX_ACTION_UPDATE_ALL_STATES, actionUpdateAllStates), diff --git a/web_client/rpcClient.go b/web_client/rpcClient.go index 8515254..9aee68f 100644 --- a/web_client/rpcClient.go +++ b/web_client/rpcClient.go @@ -29,6 +29,56 @@ func NewRpcClient(addr string) Rpc { return rcl } +func (rpc *Rpc) DeployMasterTemplate(timeout time.Duration, mt *pb.MasterTemplate) (err error) { + ctx, cancel := context.WithTimeout(context.Background(), timeout) + defer cancel() + _,err = rpc.Client.DeployMasterTemplate(ctx,mt) + return +} + +func (rpc *Rpc) GetStoredMasterTemplateList(timeout time.Duration) (ws []string, err error) { + ctx, cancel := context.WithTimeout(context.Background(), timeout) + defer cancel() + + ma, err := rpc.Client.ListStoredMasterTemplate(ctx, &pb.Empty{}) + if err != nil { return ws, err } + return ma.MsgArray, err +} + +func (rpc *Rpc) StoreMasterTemplate(timeout time.Duration, req *pb.RequestMasterTemplateStorage) (err error) { + ctx, cancel := context.WithTimeout(context.Background(), timeout) + defer cancel() + + _, err = rpc.Client.StoreMasterTemplate(ctx, req) + + return +} + +func (rpc *Rpc) GetStoredMasterTemplate(timeout time.Duration, req *pb.StringMessage) (template *pb.MasterTemplate, err error) { + ctx, cancel := context.WithTimeout(context.Background(), timeout) + defer cancel() + + template, err = rpc.Client.GetStoredMasterTemplate(ctx, req) + + return +} + +func (rpc *Rpc) DeployStoredMasterTemplate(timeout time.Duration, req *pb.StringMessage) (state *pb.MasterTemplate, err error) { + ctx, cancel := context.WithTimeout(context.Background(), timeout) + defer cancel() + + state, err = rpc.Client.DeployStoredMasterTemplate(ctx, req) + + return +} + +func (rpc *Rpc) DeleteStoredMasterTemplate(timeout time.Duration, req *pb.StringMessage) (err error) { + ctx, cancel := context.WithTimeout(context.Background(), timeout) + defer cancel() + _, err = rpc.Client.DeleteStoredMasterTemplate(ctx, req) + return +} + func (rpc *Rpc) UploadContentToTempFile(timeout time.Duration, content []byte) (filename string, err error) { ctx, cancel := context.WithTimeout(context.Background(), timeout) defer cancel()