Merge pull request #976 from bergwolf/synctime

factory: set guest time after resuming
This commit is contained in:
fli
2018-12-12 18:25:18 +08:00
committed by GitHub
13 changed files with 539 additions and 453 deletions

4
Gopkg.lock generated
View File

@@ -245,7 +245,7 @@
revision = "737f03de595e216116264cc74a58e5f2a1df789a"
[[projects]]
digest = "1:e96806ae1b041a36386249b22ef9eaf5af1788c0f86f686c6296e5a9caf53df8"
digest = "1:bc6ec5ed69614cb8304b6b6532a4df381ebf5a57c4fc065cd593f54e9ff7e7a7"
name = "github.com/kata-containers/agent"
packages = [
"pkg/types",
@@ -253,7 +253,7 @@
"protocols/grpc",
]
pruneopts = "NUT"
revision = "dd8f32c7a2e6e7effed9d12bac97e7d48473e684"
revision = "100dbc569d0673744cc66accfbb61a0229c5b0ad"
[[projects]]
digest = "1:04054595e5c5a35d1553a7f3464d18577caf597445d643992998643df56d4afd"

View File

@@ -56,7 +56,7 @@
[[constraint]]
name = "github.com/kata-containers/agent"
revision = "dd8f32c7a2e6e7effed9d12bac97e7d48473e684"
revision = "100dbc569d0673744cc66accfbb61a0229c5b0ad"
[[constraint]]
name = "github.com/containerd/cri-containerd"

View File

@@ -94,6 +94,11 @@ type Interface struct {
// Here, bridgeAddr is the address at which the bridge is attached on the root bus,
// while deviceAddr is the address at which the network device is attached on the bridge.
PciAddr string `protobuf:"bytes,6,opt,name=pciAddr,proto3" json:"pciAddr,omitempty"`
// Type defines the type of interface described by this structure.
// The expected values are the one that are defined by the netlink
// library, regarding each type of link. Here is a non exhaustive
// list: "veth", "macvtap", "vlan", "macvlan", "tap", ...
Type string `protobuf:"bytes,7,opt,name=type,proto3" json:"type,omitempty"`
}
func (m *Interface) Reset() { *m = Interface{} }
@@ -143,6 +148,13 @@ func (m *Interface) GetPciAddr() string {
return ""
}
func (m *Interface) GetType() string {
if m != nil {
return m.Type
}
return ""
}
type Route struct {
Dest string `protobuf:"bytes,1,opt,name=dest,proto3" json:"dest,omitempty"`
Gateway string `protobuf:"bytes,2,opt,name=gateway,proto3" json:"gateway,omitempty"`
@@ -288,6 +300,12 @@ func (m *Interface) MarshalTo(dAtA []byte) (int, error) {
i = encodeVarintTypes(dAtA, i, uint64(len(m.PciAddr)))
i += copy(dAtA[i:], m.PciAddr)
}
if len(m.Type) > 0 {
dAtA[i] = 0x3a
i++
i = encodeVarintTypes(dAtA, i, uint64(len(m.Type)))
i += copy(dAtA[i:], m.Type)
}
return i, nil
}
@@ -392,6 +410,10 @@ func (m *Interface) Size() (n int) {
if l > 0 {
n += 1 + l + sovTypes(uint64(l))
}
l = len(m.Type)
if l > 0 {
n += 1 + l + sovTypes(uint64(l))
}
return n
}
@@ -755,6 +777,35 @@ func (m *Interface) Unmarshal(dAtA []byte) error {
}
m.PciAddr = string(dAtA[iNdEx:postIndex])
iNdEx = postIndex
case 7:
if wireType != 2 {
return fmt.Errorf("proto: wrong wireType = %d for field Type", wireType)
}
var stringLen uint64
for shift := uint(0); ; shift += 7 {
if shift >= 64 {
return ErrIntOverflowTypes
}
if iNdEx >= l {
return io.ErrUnexpectedEOF
}
b := dAtA[iNdEx]
iNdEx++
stringLen |= (uint64(b) & 0x7F) << shift
if b < 0x80 {
break
}
}
intStringLen := int(stringLen)
if intStringLen < 0 {
return ErrInvalidLengthTypes
}
postIndex := iNdEx + intStringLen
if postIndex > l {
return io.ErrUnexpectedEOF
}
m.Type = string(dAtA[iNdEx:postIndex])
iNdEx = postIndex
default:
iNdEx = preIndex
skippy, err := skipTypes(dAtA[iNdEx:])
@@ -1069,25 +1120,26 @@ var (
func init() { proto.RegisterFile("pkg/types/types.proto", fileDescriptorTypes) }
var fileDescriptorTypes = []byte{
// 315 bytes of a gzipped FileDescriptorProto
0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x54, 0x91, 0xcf, 0x4e, 0xc2, 0x40,
0x10, 0xc6, 0x5d, 0x4a, 0xab, 0x1d, 0xfc, 0xd3, 0x6c, 0x94, 0x6c, 0x3c, 0x90, 0x86, 0x8b, 0x8d,
0x07, 0x4c, 0xd0, 0x78, 0xd7, 0x83, 0x09, 0x37, 0xb2, 0x6f, 0xb0, 0xb4, 0x03, 0x12, 0x2c, 0x6d,
0xba, 0x0b, 0x84, 0xf8, 0x50, 0xbe, 0x86, 0x47, 0x1f, 0xc1, 0xf0, 0x24, 0x66, 0x67, 0x17, 0x82,
0x97, 0x76, 0x7e, 0x3b, 0xf3, 0x75, 0xbe, 0xaf, 0x0b, 0x37, 0xf5, 0x62, 0xf6, 0x60, 0xb6, 0x35,
0x6a, 0xf7, 0x1c, 0xd4, 0x4d, 0x65, 0x2a, 0x1e, 0x12, 0xf4, 0x27, 0x10, 0x8f, 0xc6, 0x2f, 0x45,
0xd1, 0xa0, 0xd6, 0xfc, 0x0e, 0xa2, 0xa9, 0x2a, 0xe7, 0x1f, 0x5b, 0xc1, 0x52, 0x96, 0x5d, 0x0e,
0xaf, 0x06, 0x4e, 0x31, 0x1a, 0xbf, 0xd1, 0xb1, 0xf4, 0x6d, 0x2e, 0xe0, 0x54, 0x39, 0x8d, 0x68,
0xa5, 0x2c, 0x8b, 0xe5, 0x1e, 0x39, 0x87, 0x76, 0xa9, 0xf4, 0x42, 0x04, 0x74, 0x4c, 0x75, 0xff,
0x8b, 0x41, 0x3c, 0x5a, 0x1a, 0x6c, 0xa6, 0x2a, 0x47, 0xde, 0x85, 0xa8, 0xc0, 0xf5, 0x3c, 0x47,
0x5a, 0x12, 0x4b, 0x4f, 0x56, 0xb9, 0x54, 0x25, 0xfa, 0x0f, 0x52, 0xcd, 0x87, 0xd0, 0x39, 0xb8,
0x43, 0x2d, 0x82, 0x34, 0xc8, 0x3a, 0xc3, 0xe4, 0xe0, 0xca, 0x77, 0xe4, 0xf1, 0x10, 0x4f, 0x20,
0x28, 0xcd, 0x4a, 0xb4, 0x53, 0x96, 0xb5, 0xa5, 0x2d, 0xed, 0xc6, 0xf7, 0x8d, 0x1d, 0x10, 0xa1,
0xdb, 0xe8, 0xc8, 0xa6, 0xa8, 0xf3, 0x39, 0x35, 0x22, 0x97, 0xc2, 0x63, 0xff, 0x13, 0x42, 0x59,
0xad, 0x0c, 0x99, 0x2a, 0x50, 0x1b, 0x6f, 0x95, 0x6a, 0x2b, 0x9b, 0x29, 0x83, 0x1b, 0xb5, 0xdd,
0x87, 0xf7, 0x78, 0x14, 0x2d, 0xf8, 0x17, 0xad, 0x0b, 0x91, 0xae, 0x56, 0x4d, 0x8e, 0xe4, 0x2a,
0x96, 0x9e, 0xf8, 0x35, 0x84, 0x3a, 0xaf, 0x6a, 0x24, 0x5f, 0x17, 0xd2, 0xc1, 0xfd, 0x2d, 0x9c,
0xed, 0x7f, 0x38, 0x8f, 0xa0, 0xb5, 0x7e, 0x4a, 0x4e, 0xe8, 0xfd, 0x9c, 0xb0, 0xd7, 0xf3, 0xef,
0x5d, 0x8f, 0xfd, 0xec, 0x7a, 0xec, 0x77, 0xd7, 0x63, 0x93, 0x88, 0xae, 0xf2, 0xf1, 0x2f, 0x00,
0x00, 0xff, 0xff, 0x91, 0x8a, 0xea, 0xe6, 0xe3, 0x01, 0x00, 0x00,
// 325 bytes of a gzipped FileDescriptorProto
0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x54, 0x91, 0x4f, 0x6e, 0xf2, 0x30,
0x10, 0xc5, 0x3f, 0x13, 0x12, 0xbe, 0x0c, 0xfd, 0x13, 0x59, 0x2d, 0xb2, 0xba, 0x40, 0x11, 0x9b,
0x46, 0x5d, 0x50, 0x89, 0x56, 0xdd, 0xb7, 0x8b, 0x4a, 0xec, 0x90, 0x6f, 0x60, 0x92, 0x81, 0x22,
0x1a, 0x12, 0xc5, 0x06, 0x84, 0x7a, 0xbc, 0x6e, 0xba, 0xec, 0x11, 0x2a, 0x4e, 0x52, 0x79, 0x6c,
0x10, 0xdd, 0x24, 0xef, 0x79, 0x3c, 0x9e, 0xdf, 0xb3, 0xe1, 0xba, 0x5e, 0xce, 0xef, 0xcd, 0xae,
0x46, 0xed, 0xbe, 0xc3, 0xba, 0xa9, 0x4c, 0xc5, 0x43, 0x32, 0x83, 0x29, 0xc4, 0xe3, 0xc9, 0x73,
0x51, 0x34, 0xa8, 0x35, 0xbf, 0x85, 0x68, 0xa6, 0xca, 0xc5, 0xfb, 0x4e, 0xb0, 0x94, 0x65, 0x17,
0xa3, 0xcb, 0xa1, 0xeb, 0x18, 0x4f, 0x5e, 0x69, 0x59, 0xfa, 0x32, 0x17, 0xd0, 0x51, 0xae, 0x47,
0xb4, 0x52, 0x96, 0xc5, 0xf2, 0x60, 0x39, 0x87, 0x76, 0xa9, 0xf4, 0x52, 0x04, 0xb4, 0x4c, 0x7a,
0xf0, 0xc9, 0x20, 0x1e, 0xaf, 0x0c, 0x36, 0x33, 0x95, 0x23, 0xef, 0x41, 0x54, 0xe0, 0x66, 0x91,
0x23, 0x0d, 0x89, 0xa5, 0x77, 0xb6, 0x73, 0xa5, 0x4a, 0xf4, 0x07, 0x92, 0xe6, 0x23, 0xe8, 0x1e,
0xe9, 0x50, 0x8b, 0x20, 0x0d, 0xb2, 0xee, 0x28, 0x39, 0x52, 0xf9, 0x8a, 0x3c, 0xdd, 0xc4, 0x13,
0x08, 0x4a, 0xb3, 0x16, 0xed, 0x94, 0x65, 0x6d, 0x69, 0xa5, 0x9d, 0xf8, 0xb6, 0xb5, 0x1b, 0x44,
0xe8, 0x26, 0x3a, 0x67, 0x53, 0xd4, 0xf9, 0x82, 0x0a, 0x91, 0x4b, 0xe1, 0xad, 0x65, 0xb1, 0x33,
0x44, 0xc7, 0xb1, 0x58, 0x3d, 0xf8, 0x80, 0x50, 0x56, 0x6b, 0x43, 0xa0, 0x05, 0x6a, 0xe3, 0xf1,
0x49, 0xdb, 0xa3, 0xe6, 0xca, 0xe0, 0x56, 0xed, 0x0e, 0x17, 0xe2, 0xed, 0x49, 0xdc, 0xe0, 0x4f,
0xdc, 0x1e, 0x44, 0xba, 0x5a, 0x37, 0x39, 0x12, 0x69, 0x2c, 0xbd, 0xe3, 0x57, 0x10, 0xea, 0xbc,
0xaa, 0x91, 0x58, 0xcf, 0xa5, 0x33, 0x77, 0x37, 0xf0, 0xff, 0xf0, 0x08, 0x3c, 0x82, 0xd6, 0xe6,
0x31, 0xf9, 0x47, 0xff, 0xa7, 0x84, 0xbd, 0x9c, 0x7d, 0xed, 0xfb, 0xec, 0x7b, 0xdf, 0x67, 0x3f,
0xfb, 0x3e, 0x9b, 0x46, 0xf4, 0xbc, 0x0f, 0xbf, 0x01, 0x00, 0x00, 0xff, 0xff, 0x13, 0xcc, 0x1c,
0xcc, 0xf7, 0x01, 0x00, 0x00,
}

View File

@@ -55,6 +55,7 @@
AgentDetails
GuestDetailsRequest
GuestDetailsResponse
SetGuestDateTimeRequest
Storage
Device
StringUser
@@ -1390,6 +1391,32 @@ func (m *GuestDetailsResponse) GetAgentDetails() *AgentDetails {
return nil
}
type SetGuestDateTimeRequest struct {
// Sec the second since the Epoch.
Sec int64 `protobuf:"varint,1,opt,name=Sec,proto3" json:"Sec,omitempty"`
// Usec the microseconds portion of time since the Epoch.
Usec int64 `protobuf:"varint,2,opt,name=Usec,proto3" json:"Usec,omitempty"`
}
func (m *SetGuestDateTimeRequest) Reset() { *m = SetGuestDateTimeRequest{} }
func (m *SetGuestDateTimeRequest) String() string { return proto.CompactTextString(m) }
func (*SetGuestDateTimeRequest) ProtoMessage() {}
func (*SetGuestDateTimeRequest) Descriptor() ([]byte, []int) { return fileDescriptorAgent, []int{45} }
func (m *SetGuestDateTimeRequest) GetSec() int64 {
if m != nil {
return m.Sec
}
return 0
}
func (m *SetGuestDateTimeRequest) GetUsec() int64 {
if m != nil {
return m.Usec
}
return 0
}
// Storage represents both the rootfs of the container, and any volume that
// could have been defined through the Mount list of the OCI specification.
type Storage struct {
@@ -1423,7 +1450,7 @@ type Storage struct {
func (m *Storage) Reset() { *m = Storage{} }
func (m *Storage) String() string { return proto.CompactTextString(m) }
func (*Storage) ProtoMessage() {}
func (*Storage) Descriptor() ([]byte, []int) { return fileDescriptorAgent, []int{45} }
func (*Storage) Descriptor() ([]byte, []int) { return fileDescriptorAgent, []int{46} }
func (m *Storage) GetDriver() string {
if m != nil {
@@ -1506,7 +1533,7 @@ type Device struct {
func (m *Device) Reset() { *m = Device{} }
func (m *Device) String() string { return proto.CompactTextString(m) }
func (*Device) ProtoMessage() {}
func (*Device) Descriptor() ([]byte, []int) { return fileDescriptorAgent, []int{46} }
func (*Device) Descriptor() ([]byte, []int) { return fileDescriptorAgent, []int{47} }
func (m *Device) GetId() string {
if m != nil {
@@ -1552,7 +1579,7 @@ type StringUser struct {
func (m *StringUser) Reset() { *m = StringUser{} }
func (m *StringUser) String() string { return proto.CompactTextString(m) }
func (*StringUser) ProtoMessage() {}
func (*StringUser) Descriptor() ([]byte, []int) { return fileDescriptorAgent, []int{47} }
func (*StringUser) Descriptor() ([]byte, []int) { return fileDescriptorAgent, []int{48} }
func (m *StringUser) GetUid() string {
if m != nil {
@@ -1621,6 +1648,7 @@ func init() {
proto.RegisterType((*AgentDetails)(nil), "grpc.AgentDetails")
proto.RegisterType((*GuestDetailsRequest)(nil), "grpc.GuestDetailsRequest")
proto.RegisterType((*GuestDetailsResponse)(nil), "grpc.GuestDetailsResponse")
proto.RegisterType((*SetGuestDateTimeRequest)(nil), "grpc.SetGuestDateTimeRequest")
proto.RegisterType((*Storage)(nil), "grpc.Storage")
proto.RegisterType((*Device)(nil), "grpc.Device")
proto.RegisterType((*StringUser)(nil), "grpc.StringUser")
@@ -1674,6 +1702,7 @@ type AgentServiceClient interface {
OnlineCPUMem(ctx context.Context, in *OnlineCPUMemRequest, opts ...grpc1.CallOption) (*google_protobuf2.Empty, error)
ReseedRandomDev(ctx context.Context, in *ReseedRandomDevRequest, opts ...grpc1.CallOption) (*google_protobuf2.Empty, error)
GetGuestDetails(ctx context.Context, in *GuestDetailsRequest, opts ...grpc1.CallOption) (*GuestDetailsResponse, error)
SetGuestDateTime(ctx context.Context, in *SetGuestDateTimeRequest, opts ...grpc1.CallOption) (*google_protobuf2.Empty, error)
}
type agentServiceClient struct {
@@ -1927,6 +1956,15 @@ func (c *agentServiceClient) GetGuestDetails(ctx context.Context, in *GuestDetai
return out, nil
}
func (c *agentServiceClient) SetGuestDateTime(ctx context.Context, in *SetGuestDateTimeRequest, opts ...grpc1.CallOption) (*google_protobuf2.Empty, error) {
out := new(google_protobuf2.Empty)
err := grpc1.Invoke(ctx, "/grpc.AgentService/SetGuestDateTime", in, out, c.cc, opts...)
if err != nil {
return nil, err
}
return out, nil
}
// Server API for AgentService service
type AgentServiceServer interface {
@@ -1967,6 +2005,7 @@ type AgentServiceServer interface {
OnlineCPUMem(context.Context, *OnlineCPUMemRequest) (*google_protobuf2.Empty, error)
ReseedRandomDev(context.Context, *ReseedRandomDevRequest) (*google_protobuf2.Empty, error)
GetGuestDetails(context.Context, *GuestDetailsRequest) (*GuestDetailsResponse, error)
SetGuestDateTime(context.Context, *SetGuestDateTimeRequest) (*google_protobuf2.Empty, error)
}
func RegisterAgentServiceServer(s *grpc1.Server, srv AgentServiceServer) {
@@ -2459,6 +2498,24 @@ func _AgentService_GetGuestDetails_Handler(srv interface{}, ctx context.Context,
return interceptor(ctx, in, info, handler)
}
func _AgentService_SetGuestDateTime_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc1.UnaryServerInterceptor) (interface{}, error) {
in := new(SetGuestDateTimeRequest)
if err := dec(in); err != nil {
return nil, err
}
if interceptor == nil {
return srv.(AgentServiceServer).SetGuestDateTime(ctx, in)
}
info := &grpc1.UnaryServerInfo{
Server: srv,
FullMethod: "/grpc.AgentService/SetGuestDateTime",
}
handler := func(ctx context.Context, req interface{}) (interface{}, error) {
return srv.(AgentServiceServer).SetGuestDateTime(ctx, req.(*SetGuestDateTimeRequest))
}
return interceptor(ctx, in, info, handler)
}
var _AgentService_serviceDesc = grpc1.ServiceDesc{
ServiceName: "grpc.AgentService",
HandlerType: (*AgentServiceServer)(nil),
@@ -2571,6 +2628,10 @@ var _AgentService_serviceDesc = grpc1.ServiceDesc{
MethodName: "GetGuestDetails",
Handler: _AgentService_GetGuestDetails_Handler,
},
{
MethodName: "SetGuestDateTime",
Handler: _AgentService_SetGuestDateTime_Handler,
},
},
Streams: []grpc1.StreamDesc{},
Metadata: "agent.proto",
@@ -4281,6 +4342,34 @@ func (m *GuestDetailsResponse) MarshalTo(dAtA []byte) (int, error) {
return i, nil
}
func (m *SetGuestDateTimeRequest) Marshal() (dAtA []byte, err error) {
size := m.Size()
dAtA = make([]byte, size)
n, err := m.MarshalTo(dAtA)
if err != nil {
return nil, err
}
return dAtA[:n], nil
}
func (m *SetGuestDateTimeRequest) MarshalTo(dAtA []byte) (int, error) {
var i int
_ = i
var l int
_ = l
if m.Sec != 0 {
dAtA[i] = 0x8
i++
i = encodeVarintAgent(dAtA, i, uint64(m.Sec))
}
if m.Usec != 0 {
dAtA[i] = 0x10
i++
i = encodeVarintAgent(dAtA, i, uint64(m.Usec))
}
return i, nil
}
func (m *Storage) Marshal() (dAtA []byte, err error) {
size := m.Size()
dAtA = make([]byte, size)
@@ -5184,6 +5273,18 @@ func (m *GuestDetailsResponse) Size() (n int) {
return n
}
func (m *SetGuestDateTimeRequest) Size() (n int) {
var l int
_ = l
if m.Sec != 0 {
n += 1 + sovAgent(uint64(m.Sec))
}
if m.Usec != 0 {
n += 1 + sovAgent(uint64(m.Usec))
}
return n
}
func (m *Storage) Size() (n int) {
var l int
_ = l
@@ -10657,6 +10758,94 @@ func (m *GuestDetailsResponse) Unmarshal(dAtA []byte) error {
}
return nil
}
func (m *SetGuestDateTimeRequest) Unmarshal(dAtA []byte) error {
l := len(dAtA)
iNdEx := 0
for iNdEx < l {
preIndex := iNdEx
var wire uint64
for shift := uint(0); ; shift += 7 {
if shift >= 64 {
return ErrIntOverflowAgent
}
if iNdEx >= l {
return io.ErrUnexpectedEOF
}
b := dAtA[iNdEx]
iNdEx++
wire |= (uint64(b) & 0x7F) << shift
if b < 0x80 {
break
}
}
fieldNum := int32(wire >> 3)
wireType := int(wire & 0x7)
if wireType == 4 {
return fmt.Errorf("proto: SetGuestDateTimeRequest: wiretype end group for non-group")
}
if fieldNum <= 0 {
return fmt.Errorf("proto: SetGuestDateTimeRequest: illegal tag %d (wire type %d)", fieldNum, wire)
}
switch fieldNum {
case 1:
if wireType != 0 {
return fmt.Errorf("proto: wrong wireType = %d for field Sec", wireType)
}
m.Sec = 0
for shift := uint(0); ; shift += 7 {
if shift >= 64 {
return ErrIntOverflowAgent
}
if iNdEx >= l {
return io.ErrUnexpectedEOF
}
b := dAtA[iNdEx]
iNdEx++
m.Sec |= (int64(b) & 0x7F) << shift
if b < 0x80 {
break
}
}
case 2:
if wireType != 0 {
return fmt.Errorf("proto: wrong wireType = %d for field Usec", wireType)
}
m.Usec = 0
for shift := uint(0); ; shift += 7 {
if shift >= 64 {
return ErrIntOverflowAgent
}
if iNdEx >= l {
return io.ErrUnexpectedEOF
}
b := dAtA[iNdEx]
iNdEx++
m.Usec |= (int64(b) & 0x7F) << shift
if b < 0x80 {
break
}
}
default:
iNdEx = preIndex
skippy, err := skipAgent(dAtA[iNdEx:])
if err != nil {
return err
}
if skippy < 0 {
return ErrInvalidLengthAgent
}
if (iNdEx + skippy) > l {
return io.ErrUnexpectedEOF
}
iNdEx += skippy
}
}
if iNdEx > l {
return io.ErrUnexpectedEOF
}
return nil
}
func (m *Storage) Unmarshal(dAtA []byte) error {
l := len(dAtA)
iNdEx := 0
@@ -11321,158 +11510,161 @@ var (
func init() { proto.RegisterFile("agent.proto", fileDescriptorAgent) }
var fileDescriptorAgent = []byte{
// 2442 bytes of a gzipped FileDescriptorProto
0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xc4, 0x58, 0x49, 0x6f, 0x1c, 0xc7,
0x15, 0xc6, 0x2c, 0x5c, 0xe6, 0xcd, 0xc6, 0x29, 0x52, 0xd4, 0x78, 0xe4, 0x28, 0x74, 0xcb, 0x91,
0xe8, 0x38, 0x1e, 0xc6, 0x94, 0x11, 0x1b, 0x12, 0x1c, 0x41, 0x5c, 0x40, 0x32, 0xb6, 0x22, 0xa6,
0x29, 0x42, 0x01, 0x82, 0xa0, 0xd1, 0xec, 0x2e, 0xcd, 0x94, 0x39, 0xdd, 0xd5, 0xee, 0xaa, 0xa6,
0x38, 0x0e, 0x10, 0xe4, 0x94, 0x7f, 0x91, 0x3f, 0x10, 0xe4, 0x96, 0x6b, 0x8e, 0x39, 0xf8, 0x98,
0x7b, 0x80, 0x20, 0xd0, 0x4f, 0xc8, 0x2f, 0x08, 0x6a, 0xeb, 0x65, 0x16, 0xca, 0xa1, 0x09, 0xe4,
0xd2, 0xe8, 0xf7, 0xea, 0xd5, 0xf7, 0x96, 0xaa, 0x7a, 0xf5, 0xea, 0x41, 0xdd, 0x1d, 0xe0, 0x90,
0xf7, 0xa3, 0x98, 0x72, 0x8a, 0xaa, 0x83, 0x38, 0xf2, 0x7a, 0x35, 0xea, 0x11, 0xc5, 0xe8, 0xfd,
0x6c, 0x40, 0xf8, 0x30, 0x39, 0xeb, 0x7b, 0x34, 0xd8, 0x3a, 0x77, 0xb9, 0xfb, 0x91, 0x47, 0x43,
0xee, 0x92, 0x10, 0xc7, 0x6c, 0x4b, 0x4e, 0xdc, 0x8a, 0xce, 0x07, 0x5b, 0x7c, 0x1c, 0x61, 0xa6,
0xbe, 0x7a, 0xde, 0x9d, 0x01, 0xa5, 0x83, 0x11, 0xde, 0x92, 0xd4, 0x59, 0xf2, 0x6a, 0x0b, 0x07,
0x11, 0x1f, 0xab, 0x41, 0xeb, 0x4f, 0x65, 0x58, 0xdf, 0x8d, 0xb1, 0xcb, 0xf1, 0xae, 0x41, 0xb3,
0xf1, 0xd7, 0x09, 0x66, 0x1c, 0xbd, 0x07, 0x8d, 0x54, 0x83, 0x43, 0xfc, 0x6e, 0x69, 0xa3, 0xb4,
0x59, 0xb3, 0xeb, 0x29, 0xef, 0xc8, 0x47, 0xb7, 0x61, 0x09, 0x5f, 0x62, 0x4f, 0x8c, 0x96, 0xe5,
0xe8, 0xa2, 0x20, 0x8f, 0x7c, 0xf4, 0x31, 0xd4, 0x19, 0x8f, 0x49, 0x38, 0x70, 0x12, 0x86, 0xe3,
0x6e, 0x65, 0xa3, 0xb4, 0x59, 0xdf, 0x5e, 0xe9, 0x0b, 0x97, 0xfa, 0x27, 0x72, 0xe0, 0x94, 0xe1,
0xd8, 0x06, 0x96, 0xfe, 0xa3, 0xfb, 0xb0, 0xe4, 0xe3, 0x0b, 0xe2, 0x61, 0xd6, 0xad, 0x6e, 0x54,
0x36, 0xeb, 0xdb, 0x0d, 0x25, 0xbe, 0x27, 0x99, 0xb6, 0x19, 0x44, 0x1f, 0xc0, 0x32, 0xe3, 0x34,
0x76, 0x07, 0x98, 0x75, 0x17, 0xa4, 0x60, 0xd3, 0xe0, 0x4a, 0xae, 0x9d, 0x0e, 0xa3, 0x77, 0xa1,
0xf2, 0x7c, 0xf7, 0xa8, 0xbb, 0x28, 0xb5, 0x83, 0x96, 0x8a, 0xb0, 0x67, 0x0b, 0x36, 0xba, 0x07,
0x4d, 0xe6, 0x86, 0xfe, 0x19, 0xbd, 0x74, 0x22, 0xe2, 0x87, 0xac, 0xbb, 0xb4, 0x51, 0xda, 0x5c,
0xb6, 0x1b, 0x9a, 0x79, 0x2c, 0x78, 0xd6, 0x23, 0xb8, 0x75, 0xc2, 0xdd, 0x98, 0x5f, 0x23, 0x3a,
0xd6, 0x29, 0xac, 0xdb, 0x38, 0xa0, 0x17, 0xd7, 0x0a, 0x6d, 0x17, 0x96, 0x38, 0x09, 0x30, 0x4d,
0xb8, 0x0c, 0x6d, 0xd3, 0x36, 0xa4, 0xf5, 0x97, 0x12, 0xa0, 0xfd, 0x4b, 0xec, 0x1d, 0xc7, 0xd4,
0xc3, 0x8c, 0xfd, 0x9f, 0x96, 0xeb, 0x01, 0x2c, 0x45, 0xca, 0x80, 0x6e, 0x55, 0x8a, 0xeb, 0x55,
0x30, 0x56, 0x99, 0x51, 0xeb, 0x2b, 0x58, 0x3b, 0x21, 0x83, 0xd0, 0x1d, 0xdd, 0xa0, 0xbd, 0xeb,
0xb0, 0xc8, 0x24, 0xa6, 0x34, 0xb5, 0x69, 0x6b, 0xca, 0x3a, 0x06, 0xf4, 0xd2, 0x25, 0xfc, 0xe6,
0x34, 0x59, 0x1f, 0xc1, 0x6a, 0x01, 0x91, 0x45, 0x34, 0x64, 0x58, 0x1a, 0xc0, 0x5d, 0x9e, 0x30,
0x09, 0xb6, 0x60, 0x6b, 0xca, 0xc2, 0xb0, 0xf6, 0x25, 0x61, 0x46, 0x1c, 0xff, 0x2f, 0x26, 0xac,
0xc3, 0xe2, 0x2b, 0x1a, 0x07, 0x2e, 0x37, 0x16, 0x28, 0x0a, 0x21, 0xa8, 0xba, 0xf1, 0x80, 0x75,
0x2b, 0x1b, 0x95, 0xcd, 0x9a, 0x2d, 0xff, 0xc5, 0xae, 0x9c, 0x50, 0xa3, 0xed, 0x7a, 0x0f, 0x1a,
0x3a, 0xee, 0xce, 0x88, 0x30, 0x2e, 0xf5, 0x34, 0xec, 0xba, 0xe6, 0x89, 0x39, 0x16, 0x85, 0xf5,
0xd3, 0xc8, 0xbf, 0xe6, 0x81, 0xdf, 0x86, 0x5a, 0x8c, 0x19, 0x4d, 0x62, 0x71, 0x4c, 0xcb, 0x72,
0xdd, 0xd7, 0xd4, 0xba, 0x7f, 0x49, 0xc2, 0xe4, 0xd2, 0x36, 0x63, 0x76, 0x26, 0xa6, 0x8f, 0x10,
0x67, 0xd7, 0x39, 0x42, 0x8f, 0xe0, 0xd6, 0xb1, 0x9b, 0xb0, 0xeb, 0xd8, 0x6a, 0x3d, 0x16, 0xc7,
0x8f, 0x25, 0xc1, 0xb5, 0x26, 0xff, 0xb9, 0x04, 0xcb, 0xbb, 0x51, 0x72, 0xca, 0xdc, 0x01, 0x46,
0x3f, 0x84, 0x3a, 0xa7, 0xdc, 0x1d, 0x39, 0x89, 0x20, 0xa5, 0x78, 0xd5, 0x06, 0xc9, 0x52, 0x02,
0x22, 0xec, 0x38, 0xf6, 0xa2, 0x44, 0x4b, 0x94, 0x37, 0x2a, 0x9b, 0x55, 0xbb, 0xae, 0x78, 0x4a,
0xa4, 0x0f, 0xab, 0x72, 0xcc, 0x21, 0xa1, 0x73, 0x8e, 0xe3, 0x10, 0x8f, 0x02, 0xea, 0x63, 0xb9,
0x7f, 0xab, 0x76, 0x47, 0x0e, 0x1d, 0x85, 0x5f, 0xa4, 0x03, 0xe8, 0xc7, 0xd0, 0x49, 0xe5, 0xc5,
0xa1, 0x94, 0xd2, 0x55, 0x29, 0xdd, 0xd6, 0xd2, 0xa7, 0x9a, 0x6d, 0xfd, 0x1e, 0x5a, 0x2f, 0x86,
0x31, 0xe5, 0x7c, 0x44, 0xc2, 0xc1, 0x9e, 0xcb, 0x5d, 0x91, 0x3d, 0x22, 0x1c, 0x13, 0xea, 0x33,
0x6d, 0xad, 0x21, 0xd1, 0x87, 0xd0, 0xe1, 0x4a, 0x16, 0xfb, 0x8e, 0x91, 0x29, 0x4b, 0x99, 0x95,
0x74, 0xe0, 0x58, 0x0b, 0xff, 0x08, 0x5a, 0x99, 0xb0, 0xc8, 0x3f, 0xda, 0xde, 0x66, 0xca, 0x7d,
0x41, 0x02, 0x6c, 0x5d, 0xc8, 0x58, 0xc9, 0x45, 0x46, 0x1f, 0x42, 0x2d, 0x8b, 0x43, 0x49, 0xee,
0x90, 0x96, 0xda, 0x21, 0x26, 0x9c, 0xf6, 0x72, 0x1a, 0x94, 0xcf, 0xa1, 0xcd, 0x53, 0xc3, 0x1d,
0xdf, 0xe5, 0x6e, 0x71, 0x53, 0x15, 0xbd, 0xb2, 0x5b, 0xbc, 0x40, 0x5b, 0x8f, 0xa1, 0x76, 0x4c,
0x7c, 0xa6, 0x14, 0x77, 0x61, 0xc9, 0x4b, 0xe2, 0x18, 0x87, 0xdc, 0xb8, 0xac, 0x49, 0xb4, 0x06,
0x0b, 0x23, 0x12, 0x10, 0xae, 0xdd, 0x54, 0x84, 0x45, 0x01, 0x9e, 0xe1, 0x80, 0xc6, 0x63, 0x19,
0xb0, 0x35, 0x58, 0xc8, 0x2f, 0xae, 0x22, 0xd0, 0x1d, 0xa8, 0x05, 0xee, 0x65, 0xba, 0xa8, 0x62,
0x64, 0x39, 0x70, 0x2f, 0x95, 0xf1, 0x5d, 0x58, 0x7a, 0xe5, 0x92, 0x91, 0x17, 0x72, 0x1d, 0x15,
0x43, 0x66, 0x0a, 0xab, 0x79, 0x85, 0x7f, 0x2f, 0x43, 0x5d, 0x69, 0x54, 0x06, 0xaf, 0xc1, 0x82,
0xe7, 0x7a, 0xc3, 0x54, 0xa5, 0x24, 0xd0, 0x7d, 0x63, 0x48, 0x39, 0x9f, 0x84, 0x33, 0x4b, 0x8d,
0x69, 0x5b, 0x00, 0xec, 0xb5, 0x1b, 0x69, 0xdb, 0x2a, 0x73, 0x84, 0x6b, 0x42, 0x46, 0x99, 0xfb,
0x10, 0x1a, 0x6a, 0xdf, 0xe9, 0x29, 0xd5, 0x39, 0x53, 0xea, 0x4a, 0x4a, 0x4d, 0xba, 0x07, 0xcd,
0x84, 0x61, 0x67, 0x48, 0x70, 0xec, 0xc6, 0xde, 0x70, 0xdc, 0x5d, 0x50, 0x77, 0x64, 0xc2, 0xf0,
0xa1, 0xe1, 0xa1, 0x6d, 0x58, 0x10, 0xe9, 0x8f, 0x75, 0x17, 0xe5, 0x75, 0xfc, 0x6e, 0x1e, 0x52,
0xba, 0xda, 0x97, 0xdf, 0xfd, 0x90, 0xc7, 0x63, 0x5b, 0x89, 0xf6, 0x3e, 0x03, 0xc8, 0x98, 0x68,
0x05, 0x2a, 0xe7, 0x78, 0xac, 0xcf, 0xa1, 0xf8, 0x15, 0xc1, 0xb9, 0x70, 0x47, 0x89, 0x89, 0xba,
0x22, 0x1e, 0x95, 0x3f, 0x2b, 0x59, 0x1e, 0xb4, 0x77, 0x46, 0xe7, 0x84, 0xe6, 0xa6, 0xaf, 0xc1,
0x42, 0xe0, 0x7e, 0x45, 0x63, 0x13, 0x49, 0x49, 0x48, 0x2e, 0x09, 0x69, 0x6c, 0x20, 0x24, 0x81,
0x5a, 0x50, 0xa6, 0x91, 0x8c, 0x57, 0xcd, 0x2e, 0xd3, 0x28, 0x53, 0x54, 0xcd, 0x29, 0xb2, 0xfe,
0x55, 0x05, 0xc8, 0xb4, 0x20, 0x1b, 0x7a, 0x84, 0x3a, 0x0c, 0xc7, 0xa2, 0x04, 0x71, 0xce, 0xc6,
0x1c, 0x33, 0x27, 0xc6, 0x5e, 0x12, 0x33, 0x72, 0x21, 0xd6, 0x4f, 0xb8, 0x7d, 0x4b, 0xb9, 0x3d,
0x61, 0x9b, 0x7d, 0x9b, 0xd0, 0x13, 0x35, 0x6f, 0x47, 0x4c, 0xb3, 0xcd, 0x2c, 0x74, 0x04, 0xb7,
0x32, 0x4c, 0x3f, 0x07, 0x57, 0xbe, 0x0a, 0x6e, 0x35, 0x85, 0xf3, 0x33, 0xa8, 0x7d, 0x58, 0x25,
0xd4, 0xf9, 0x3a, 0xc1, 0x49, 0x01, 0xa8, 0x72, 0x15, 0x50, 0x87, 0xd0, 0x5f, 0xc9, 0x09, 0x19,
0xcc, 0x31, 0xbc, 0x93, 0xf3, 0x52, 0x1c, 0xf7, 0x1c, 0x58, 0xf5, 0x2a, 0xb0, 0xf5, 0xd4, 0x2a,
0x91, 0x0f, 0x32, 0xc4, 0x5f, 0xc0, 0x3a, 0xa1, 0xce, 0x6b, 0x97, 0xf0, 0x49, 0xb8, 0x85, 0xb7,
0x38, 0x29, 0x2e, 0xdd, 0x22, 0x96, 0x72, 0x32, 0xc0, 0xf1, 0xa0, 0xe0, 0xe4, 0xe2, 0x5b, 0x9c,
0x7c, 0x26, 0x27, 0x64, 0x30, 0x4f, 0xa1, 0x43, 0xe8, 0xa4, 0x35, 0x4b, 0x57, 0x81, 0xb4, 0x09,
0x2d, 0x5a, 0xb2, 0x03, 0x1d, 0x86, 0x3d, 0x4e, 0xe3, 0xfc, 0x26, 0x58, 0xbe, 0x0a, 0x62, 0x45,
0xcb, 0xa7, 0x18, 0xd6, 0x6f, 0xa0, 0x71, 0x98, 0x0c, 0x30, 0x1f, 0x9d, 0xa5, 0xc9, 0xe0, 0xc6,
0xf2, 0x8f, 0xf5, 0x9f, 0x32, 0xd4, 0x77, 0x07, 0x31, 0x4d, 0xa2, 0x42, 0x4e, 0x56, 0x87, 0x74,
0x32, 0x27, 0x4b, 0x11, 0x99, 0x93, 0x95, 0xf0, 0x27, 0xd0, 0x08, 0xe4, 0xd1, 0xd5, 0xf2, 0x2a,
0x0f, 0x75, 0xa6, 0x0e, 0xb5, 0x5d, 0x0f, 0x72, 0xc9, 0xac, 0x0f, 0x10, 0x11, 0x9f, 0xe9, 0x39,
0x2a, 0x1d, 0xb5, 0x75, 0x45, 0x68, 0x52, 0xb4, 0x5d, 0x8b, 0xd2, 0x6c, 0xfd, 0x31, 0xd4, 0xcf,
0x44, 0x90, 0xf4, 0x84, 0x42, 0x32, 0xca, 0xa2, 0x67, 0xc3, 0x59, 0x76, 0x08, 0x0f, 0xa1, 0x39,
0x54, 0x21, 0xd3, 0x93, 0xd4, 0x1e, 0xba, 0xa7, 0x3d, 0xc9, 0xfc, 0xed, 0xe7, 0x23, 0xab, 0x16,
0xa0, 0x31, 0xcc, 0xb1, 0x7a, 0x27, 0xd0, 0x99, 0x12, 0x99, 0x91, 0x83, 0x36, 0xf3, 0x39, 0xa8,
0xbe, 0x8d, 0x94, 0xa2, 0xfc, 0xcc, 0x7c, 0x5e, 0xfa, 0x25, 0xac, 0x4f, 0x96, 0x39, 0xba, 0x28,
0xfb, 0x04, 0x1a, 0x9e, 0xb4, 0xae, 0xb0, 0x02, 0x9d, 0x29, 0xbb, 0xed, 0xba, 0x97, 0x11, 0x96,
0x0f, 0xe8, 0x65, 0x4c, 0x38, 0x3e, 0xe1, 0x31, 0x76, 0x83, 0x9b, 0xa8, 0x9a, 0x11, 0x54, 0xe5,
0x15, 0x5b, 0x91, 0x45, 0xa1, 0xfc, 0xb7, 0x1e, 0xc0, 0x6a, 0x41, 0x8b, 0x36, 0x79, 0x05, 0x2a,
0x23, 0x1c, 0x4a, 0xf4, 0xa6, 0x2d, 0x7e, 0x2d, 0x17, 0x3a, 0x36, 0x76, 0xfd, 0x9b, 0xb3, 0x46,
0xab, 0xa8, 0x64, 0x2a, 0x36, 0x01, 0xe5, 0x55, 0x68, 0x53, 0x8c, 0xd5, 0xa5, 0x9c, 0xd5, 0xcf,
0xa1, 0xb3, 0x3b, 0xa2, 0x0c, 0x9f, 0x70, 0x9f, 0x84, 0x37, 0x51, 0xe6, 0xff, 0x0e, 0x56, 0x5f,
0xf0, 0xf1, 0x4b, 0x01, 0xc6, 0xc8, 0x37, 0xf8, 0x86, 0xfc, 0x8b, 0xe9, 0x6b, 0xe3, 0x5f, 0x4c,
0x5f, 0x8b, 0x0a, 0xdf, 0xa3, 0xa3, 0x24, 0x08, 0xe5, 0x76, 0x6f, 0xda, 0x9a, 0xb2, 0xfe, 0x59,
0x82, 0x35, 0xf5, 0x06, 0x3f, 0x51, 0x4f, 0x4f, 0xa3, 0xbe, 0x07, 0xcb, 0x43, 0xca, 0x78, 0xe8,
0x06, 0x58, 0xab, 0x4e, 0x69, 0x01, 0x2f, 0xde, 0xac, 0x65, 0xf9, 0x2a, 0x10, 0xbf, 0x85, 0x87,
0x71, 0xe5, 0xea, 0x87, 0xf1, 0xd4, 0xd3, 0xb7, 0x3a, 0xfd, 0xf4, 0x45, 0x3f, 0x00, 0x30, 0x42,
0xc4, 0x97, 0x17, 0x7f, 0xcd, 0xae, 0x69, 0xce, 0x91, 0x8f, 0xee, 0x43, 0x7b, 0x20, 0xac, 0x74,
0x86, 0x94, 0x9e, 0x3b, 0x91, 0xcb, 0x87, 0xf2, 0xa1, 0x5d, 0xb3, 0x9b, 0x92, 0x7d, 0x48, 0xe9,
0xf9, 0xb1, 0xcb, 0x87, 0xd6, 0x6d, 0xb8, 0xb5, 0x87, 0x19, 0x8f, 0xe9, 0xb8, 0xe8, 0x9d, 0xf5,
0x73, 0x80, 0xa3, 0x90, 0xe3, 0xf8, 0x95, 0x2b, 0x9e, 0xf5, 0x3f, 0xcd, 0x53, 0xfa, 0x4a, 0x5d,
0xe9, 0xab, 0x3e, 0x46, 0x3a, 0x60, 0xe7, 0x64, 0xac, 0x3e, 0x2c, 0xda, 0x34, 0xe1, 0x98, 0xa1,
0xf7, 0xcd, 0x9f, 0x9e, 0xd7, 0xd0, 0xf3, 0x24, 0xd3, 0xd6, 0x63, 0xd6, 0xa1, 0x79, 0xf8, 0x64,
0x70, 0x3a, 0xce, 0x7d, 0xa8, 0x11, 0xc3, 0xd3, 0xa7, 0x73, 0x5a, 0x75, 0x26, 0x62, 0xed, 0xc3,
0xea, 0x53, 0xdf, 0xff, 0xde, 0x30, 0x87, 0xa6, 0x3f, 0xf0, 0xbd, 0x91, 0x1e, 0xc3, 0xaa, 0x72,
0x4d, 0xb9, 0x6a, 0x60, 0xde, 0x87, 0xc5, 0xd8, 0xc4, 0xa5, 0x94, 0x75, 0x54, 0xb4, 0x90, 0x1e,
0x13, 0x0b, 0x24, 0x1e, 0x86, 0x59, 0x64, 0xcd, 0x02, 0xad, 0x42, 0x47, 0x0c, 0x14, 0x30, 0xad,
0xdf, 0xc2, 0xea, 0xf3, 0x70, 0x44, 0x42, 0xbc, 0x7b, 0x7c, 0xfa, 0x0c, 0xa7, 0x99, 0x00, 0x41,
0x55, 0x5c, 0xf3, 0x52, 0xd1, 0xb2, 0x2d, 0xff, 0xc5, 0xd1, 0x08, 0xcf, 0x1c, 0x2f, 0x4a, 0x98,
0x6e, 0x61, 0x2c, 0x86, 0x67, 0xbb, 0x51, 0xc2, 0xd0, 0x3b, 0x20, 0xae, 0x1b, 0x87, 0x86, 0xa3,
0xb1, 0x3c, 0x1f, 0xcb, 0xf6, 0x92, 0x17, 0x25, 0xcf, 0xc3, 0xd1, 0xd8, 0xfa, 0x89, 0x7c, 0xb4,
0x61, 0xec, 0xdb, 0x6e, 0xe8, 0xd3, 0x60, 0x0f, 0x5f, 0xe4, 0x34, 0xa4, 0x0f, 0x04, 0x93, 0x07,
0xbe, 0x2d, 0x41, 0xe3, 0xe9, 0x00, 0x87, 0x7c, 0x0f, 0x73, 0x97, 0x8c, 0xe4, 0x23, 0xe0, 0x02,
0xc7, 0x8c, 0xd0, 0x50, 0x1f, 0x18, 0x43, 0x8a, 0x37, 0x1c, 0x09, 0x09, 0x77, 0x7c, 0x17, 0x07,
0x34, 0x94, 0x28, 0xcb, 0x36, 0x08, 0xd6, 0x9e, 0xe4, 0xa0, 0x07, 0xd0, 0x56, 0x2d, 0x26, 0x67,
0xe8, 0x86, 0xfe, 0x08, 0xc7, 0xe6, 0xc9, 0xdd, 0x52, 0xec, 0x43, 0xcd, 0x45, 0x1f, 0xc0, 0x8a,
0x3e, 0x48, 0x99, 0x64, 0x55, 0x4a, 0xb6, 0x35, 0xbf, 0x20, 0x9a, 0x44, 0x11, 0x8d, 0x39, 0x73,
0x18, 0xf6, 0x3c, 0x1a, 0x44, 0xba, 0x82, 0x6e, 0x1b, 0xfe, 0x89, 0x62, 0x8b, 0x25, 0x3c, 0x10,
0x7e, 0x6a, 0x4f, 0xb2, 0x25, 0x6c, 0x05, 0x38, 0x70, 0xce, 0x46, 0xd4, 0x3b, 0x77, 0x44, 0x6a,
0xd2, 0x11, 0x16, 0x77, 0xf4, 0x8e, 0x60, 0x9e, 0x90, 0x6f, 0xb0, 0xf5, 0x87, 0x12, 0xac, 0x15,
0x67, 0xeb, 0xe4, 0xb9, 0x05, 0x6b, 0xc5, 0xe9, 0xaa, 0x78, 0xd5, 0x55, 0x46, 0x27, 0x0f, 0x22,
0xcb, 0x53, 0xf4, 0x29, 0x34, 0x65, 0x2f, 0xd1, 0xf1, 0x15, 0x52, 0xf1, 0xee, 0xcb, 0xc7, 0xda,
0x6e, 0xb8, 0x39, 0xca, 0xfa, 0x6b, 0x09, 0x96, 0x74, 0xa2, 0x11, 0x89, 0xce, 0x8f, 0xc9, 0x05,
0x8e, 0xf5, 0x22, 0x68, 0x4a, 0x3c, 0x27, 0xd5, 0x9f, 0x43, 0x23, 0x4e, 0x68, 0x9a, 0xbe, 0x9a,
0x8a, 0xfb, 0x5c, 0x31, 0x65, 0x73, 0x45, 0xf6, 0x0e, 0x74, 0x99, 0xae, 0x29, 0xd9, 0x21, 0x61,
0xe2, 0x14, 0xc8, 0x74, 0x55, 0xb3, 0x35, 0x25, 0x16, 0xdd, 0xe0, 0x2d, 0x48, 0x3c, 0x43, 0x8a,
0x45, 0x0f, 0x68, 0x12, 0x72, 0x27, 0xa2, 0x24, 0xe4, 0x3a, 0x3f, 0x81, 0x64, 0x1d, 0x0b, 0x8e,
0xf5, 0xc7, 0x12, 0x2c, 0xaa, 0x06, 0xa3, 0x78, 0x18, 0xa4, 0x19, 0xbe, 0x4c, 0xe4, 0x6d, 0x29,
0x75, 0xa9, 0xac, 0x2e, 0xff, 0xc5, 0x8e, 0xbe, 0x08, 0x54, 0xae, 0xd3, 0xa6, 0x5d, 0x04, 0x22,
0xc9, 0x09, 0xcf, 0xb2, 0x8b, 0x42, 0x8e, 0x2b, 0x13, 0x9b, 0x29, 0x57, 0x8a, 0xcd, 0xb5, 0xd4,
0xfa, 0xb5, 0x78, 0x0f, 0xa5, 0xcd, 0xb5, 0x15, 0xa8, 0x24, 0xa9, 0x31, 0xe2, 0x57, 0x70, 0x06,
0xe9, 0x15, 0x23, 0x7e, 0xd1, 0x7d, 0x68, 0xb9, 0xbe, 0x4f, 0xc4, 0x74, 0x77, 0x74, 0x40, 0xfc,
0x74, 0xbb, 0x16, 0xb9, 0xdb, 0x7f, 0x6b, 0xe9, 0x33, 0xa2, 0x2b, 0x74, 0x74, 0x00, 0xed, 0x89,
0x8e, 0x2f, 0xd2, 0x4f, 0xb6, 0xd9, 0x8d, 0xe0, 0xde, 0x7a, 0x5f, 0x75, 0x90, 0xfb, 0xa6, 0x83,
0xdc, 0xdf, 0x0f, 0x22, 0x3e, 0x46, 0xfb, 0xd0, 0x2a, 0xf6, 0x46, 0xd1, 0x1d, 0x73, 0xe1, 0xcc,
0xe8, 0x98, 0xce, 0x85, 0x39, 0x80, 0xf6, 0x44, 0x9b, 0xd4, 0xd8, 0x33, 0xbb, 0x7b, 0x3a, 0x17,
0xe8, 0x09, 0xd4, 0x73, 0x7d, 0x51, 0xd4, 0x55, 0x20, 0xd3, 0xad, 0xd2, 0xb9, 0x00, 0xbb, 0xd0,
0x2c, 0xb4, 0x2a, 0x51, 0x4f, 0xfb, 0x33, 0xa3, 0x7f, 0x39, 0x17, 0x64, 0x07, 0xea, 0xb9, 0x8e,
0xa1, 0xb1, 0x62, 0xba, 0x2d, 0xd9, 0x7b, 0x67, 0xc6, 0x88, 0x3e, 0xb6, 0x87, 0xd0, 0x2c, 0xf4,
0xf7, 0x8c, 0x21, 0xb3, 0x7a, 0x8b, 0xbd, 0x3b, 0x33, 0xc7, 0x34, 0xd2, 0x01, 0xb4, 0x27, 0xba,
0x7d, 0x26, 0xb8, 0xb3, 0x9b, 0x80, 0x73, 0xdd, 0xfa, 0x42, 0x2e, 0x76, 0xae, 0xbc, 0xcd, 0x2d,
0xf6, 0x74, 0x6f, 0xaf, 0xf7, 0xee, 0xec, 0x41, 0x6d, 0xd5, 0x3e, 0xb4, 0x8a, 0x6d, 0x3d, 0x03,
0x36, 0xb3, 0xd9, 0x77, 0xf5, 0xce, 0x29, 0x74, 0xf8, 0xb2, 0x9d, 0x33, 0xab, 0xf1, 0x37, 0x17,
0xe8, 0x29, 0x80, 0xae, 0x82, 0x7d, 0x12, 0xa6, 0x4b, 0x36, 0x55, 0x7d, 0xa7, 0x4b, 0x36, 0xa3,
0x62, 0x7e, 0x02, 0xa0, 0x8a, 0x57, 0x9f, 0x26, 0x1c, 0xdd, 0x36, 0x66, 0x4c, 0x54, 0xcc, 0xbd,
0xee, 0xf4, 0xc0, 0x14, 0x00, 0x8e, 0xe3, 0xeb, 0x00, 0x7c, 0x0e, 0x90, 0x15, 0xc5, 0x06, 0x60,
0xaa, 0x4c, 0xbe, 0x22, 0x06, 0x8d, 0x7c, 0x09, 0x8c, 0xb4, 0xaf, 0x33, 0xca, 0xe2, 0xb9, 0x10,
0x8f, 0xa1, 0x91, 0xaf, 0x8b, 0x0c, 0xc4, 0x8c, 0x5a, 0xa9, 0x37, 0x55, 0xce, 0xa0, 0xa7, 0x66,
0xa7, 0x66, 0xac, 0xc2, 0x4e, 0xfd, 0x6e, 0x10, 0x13, 0x05, 0x55, 0x31, 0x93, 0x7c, 0x07, 0x88,
0x4f, 0xa1, 0x91, 0xaf, 0xa4, 0x8c, 0x0b, 0x33, 0xaa, 0xab, 0x5e, 0xa1, 0x9a, 0x42, 0x4f, 0xa0,
0x55, 0xac, 0xa2, 0x50, 0xee, 0x5c, 0x4e, 0xd5, 0x56, 0x3d, 0xfd, 0xd4, 0xcd, 0x89, 0x3f, 0x04,
0xc8, 0xaa, 0x2d, 0xb3, 0x7c, 0x53, 0xf5, 0xd7, 0x84, 0xd6, 0x5d, 0x68, 0x16, 0x5e, 0x0e, 0x26,
0x51, 0xcc, 0x7a, 0x4e, 0x5c, 0x95, 0xc7, 0x8b, 0x15, 0xba, 0x31, 0x7d, 0x66, 0xdd, 0x7e, 0xd5,
0x06, 0xca, 0x57, 0x86, 0x26, 0x74, 0x33, 0xaa, 0xc5, 0xb7, 0x1c, 0xe8, 0x7c, 0xf5, 0x97, 0x3b,
0xd0, 0x33, 0x8a, 0xc2, 0xb9, 0x40, 0x87, 0xd0, 0x3e, 0xc0, 0x3c, 0x5f, 0x12, 0x19, 0x73, 0x66,
0x14, 0x59, 0xbd, 0xde, 0xac, 0x21, 0x75, 0xaa, 0x76, 0x1a, 0xdf, 0xbe, 0xb9, 0x5b, 0xfa, 0xc7,
0x9b, 0xbb, 0xa5, 0x7f, 0xbf, 0xb9, 0x5b, 0x3a, 0x5b, 0x94, 0x7a, 0x1e, 0xfe, 0x37, 0x00, 0x00,
0xff, 0xff, 0x5e, 0x1c, 0x23, 0x7f, 0xaa, 0x1d, 0x00, 0x00,
// 2493 bytes of a gzipped FileDescriptorProto
0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xc4, 0x58, 0x5b, 0x6f, 0x1b, 0xc7,
0xf5, 0x07, 0x2f, 0xba, 0xf0, 0x90, 0x14, 0xc5, 0x91, 0x2c, 0x33, 0x74, 0xe2, 0xbf, 0xb2, 0xce,
0xdf, 0x56, 0x9a, 0x86, 0x6a, 0xe4, 0xa0, 0x09, 0x6c, 0xa4, 0x86, 0x75, 0x81, 0xa4, 0x26, 0xae,
0xd5, 0xa5, 0x05, 0x17, 0x28, 0x8a, 0xc5, 0x6a, 0x77, 0x4c, 0x4e, 0xc4, 0xdd, 0xd9, 0xec, 0xcc,
0xca, 0x62, 0x0a, 0x14, 0x7d, 0x6a, 0x3f, 0x45, 0xbf, 0x40, 0xd1, 0xb7, 0x7e, 0x85, 0x3e, 0xe4,
0xb1, 0xef, 0x05, 0x8a, 0xc2, 0x1f, 0xa1, 0x9f, 0xa0, 0x98, 0xdb, 0x5e, 0x78, 0x91, 0x53, 0x45,
0x40, 0x5f, 0x16, 0x7b, 0xce, 0x9c, 0xf9, 0x9d, 0xcb, 0xcc, 0x9c, 0x39, 0x73, 0xa0, 0xee, 0x0e,
0x70, 0xc8, 0x7b, 0x51, 0x4c, 0x39, 0x45, 0xd5, 0x41, 0x1c, 0x79, 0xdd, 0x1a, 0xf5, 0x88, 0x62,
0x74, 0x7f, 0x3a, 0x20, 0x7c, 0x98, 0x9c, 0xf5, 0x3c, 0x1a, 0x6c, 0x9f, 0xbb, 0xdc, 0xfd, 0xd8,
0xa3, 0x21, 0x77, 0x49, 0x88, 0x63, 0xb6, 0x2d, 0x27, 0x6e, 0x47, 0xe7, 0x83, 0x6d, 0x3e, 0x8e,
0x30, 0x53, 0x5f, 0x3d, 0xef, 0xce, 0x80, 0xd2, 0xc1, 0x08, 0x6f, 0x4b, 0xea, 0x2c, 0x79, 0xb5,
0x8d, 0x83, 0x88, 0x8f, 0xd5, 0xa0, 0xf5, 0xa7, 0x32, 0x6c, 0xec, 0xc5, 0xd8, 0xe5, 0x78, 0xcf,
0xa0, 0xd9, 0xf8, 0x9b, 0x04, 0x33, 0x8e, 0xde, 0x87, 0x46, 0xaa, 0xc1, 0x21, 0x7e, 0xa7, 0xb4,
0x59, 0xda, 0xaa, 0xd9, 0xf5, 0x94, 0x77, 0xec, 0xa3, 0xdb, 0xb0, 0x84, 0x2f, 0xb1, 0x27, 0x46,
0xcb, 0x72, 0x74, 0x51, 0x90, 0xc7, 0x3e, 0xfa, 0x04, 0xea, 0x8c, 0xc7, 0x24, 0x1c, 0x38, 0x09,
0xc3, 0x71, 0xa7, 0xb2, 0x59, 0xda, 0xaa, 0xef, 0xac, 0xf6, 0x84, 0x4b, 0xbd, 0xbe, 0x1c, 0x38,
0x65, 0x38, 0xb6, 0x81, 0xa5, 0xff, 0xe8, 0x3e, 0x2c, 0xf9, 0xf8, 0x82, 0x78, 0x98, 0x75, 0xaa,
0x9b, 0x95, 0xad, 0xfa, 0x4e, 0x43, 0x89, 0xef, 0x4b, 0xa6, 0x6d, 0x06, 0xd1, 0x87, 0xb0, 0xcc,
0x38, 0x8d, 0xdd, 0x01, 0x66, 0x9d, 0x05, 0x29, 0xd8, 0x34, 0xb8, 0x92, 0x6b, 0xa7, 0xc3, 0xe8,
0x5d, 0xa8, 0x3c, 0xdf, 0x3b, 0xee, 0x2c, 0x4a, 0xed, 0xa0, 0xa5, 0x22, 0xec, 0xd9, 0x82, 0x8d,
0xee, 0x41, 0x93, 0xb9, 0xa1, 0x7f, 0x46, 0x2f, 0x9d, 0x88, 0xf8, 0x21, 0xeb, 0x2c, 0x6d, 0x96,
0xb6, 0x96, 0xed, 0x86, 0x66, 0x9e, 0x08, 0x9e, 0xf5, 0x08, 0x6e, 0xf5, 0xb9, 0x1b, 0xf3, 0x6b,
0x44, 0xc7, 0x3a, 0x85, 0x0d, 0x1b, 0x07, 0xf4, 0xe2, 0x5a, 0xa1, 0xed, 0xc0, 0x12, 0x27, 0x01,
0xa6, 0x09, 0x97, 0xa1, 0x6d, 0xda, 0x86, 0xb4, 0xfe, 0x52, 0x02, 0x74, 0x70, 0x89, 0xbd, 0x93,
0x98, 0x7a, 0x98, 0xb1, 0xff, 0xd1, 0x72, 0x3d, 0x80, 0xa5, 0x48, 0x19, 0xd0, 0xa9, 0x4a, 0x71,
0xbd, 0x0a, 0xc6, 0x2a, 0x33, 0x6a, 0x7d, 0x0d, 0xeb, 0x7d, 0x32, 0x08, 0xdd, 0xd1, 0x0d, 0xda,
0xbb, 0x01, 0x8b, 0x4c, 0x62, 0x4a, 0x53, 0x9b, 0xb6, 0xa6, 0xac, 0x13, 0x40, 0x2f, 0x5d, 0xc2,
0x6f, 0x4e, 0x93, 0xf5, 0x31, 0xac, 0x15, 0x10, 0x59, 0x44, 0x43, 0x86, 0xa5, 0x01, 0xdc, 0xe5,
0x09, 0x93, 0x60, 0x0b, 0xb6, 0xa6, 0x2c, 0x0c, 0xeb, 0x5f, 0x11, 0x66, 0xc4, 0xf1, 0x7f, 0x63,
0xc2, 0x06, 0x2c, 0xbe, 0xa2, 0x71, 0xe0, 0x72, 0x63, 0x81, 0xa2, 0x10, 0x82, 0xaa, 0x1b, 0x0f,
0x58, 0xa7, 0xb2, 0x59, 0xd9, 0xaa, 0xd9, 0xf2, 0x5f, 0xec, 0xca, 0x09, 0x35, 0xda, 0xae, 0xf7,
0xa1, 0xa1, 0xe3, 0xee, 0x8c, 0x08, 0xe3, 0x52, 0x4f, 0xc3, 0xae, 0x6b, 0x9e, 0x98, 0x63, 0x51,
0xd8, 0x38, 0x8d, 0xfc, 0x6b, 0x1e, 0xf8, 0x1d, 0xa8, 0xc5, 0x98, 0xd1, 0x24, 0x16, 0xc7, 0xb4,
0x2c, 0xd7, 0x7d, 0x5d, 0xad, 0xfb, 0x57, 0x24, 0x4c, 0x2e, 0x6d, 0x33, 0x66, 0x67, 0x62, 0xfa,
0x08, 0x71, 0x76, 0x9d, 0x23, 0xf4, 0x08, 0x6e, 0x9d, 0xb8, 0x09, 0xbb, 0x8e, 0xad, 0xd6, 0x63,
0x71, 0xfc, 0x58, 0x12, 0x5c, 0x6b, 0xf2, 0x9f, 0x4b, 0xb0, 0xbc, 0x17, 0x25, 0xa7, 0xcc, 0x1d,
0x60, 0xf4, 0x7f, 0x50, 0xe7, 0x94, 0xbb, 0x23, 0x27, 0x11, 0xa4, 0x14, 0xaf, 0xda, 0x20, 0x59,
0x4a, 0x40, 0x84, 0x1d, 0xc7, 0x5e, 0x94, 0x68, 0x89, 0xf2, 0x66, 0x65, 0xab, 0x6a, 0xd7, 0x15,
0x4f, 0x89, 0xf4, 0x60, 0x4d, 0x8e, 0x39, 0x24, 0x74, 0xce, 0x71, 0x1c, 0xe2, 0x51, 0x40, 0x7d,
0x2c, 0xf7, 0x6f, 0xd5, 0x6e, 0xcb, 0xa1, 0xe3, 0xf0, 0xcb, 0x74, 0x00, 0xfd, 0x08, 0xda, 0xa9,
0xbc, 0x38, 0x94, 0x52, 0xba, 0x2a, 0xa5, 0x5b, 0x5a, 0xfa, 0x54, 0xb3, 0xad, 0xdf, 0xc1, 0xca,
0x8b, 0x61, 0x4c, 0x39, 0x1f, 0x91, 0x70, 0xb0, 0xef, 0x72, 0x57, 0x64, 0x8f, 0x08, 0xc7, 0x84,
0xfa, 0x4c, 0x5b, 0x6b, 0x48, 0xf4, 0x11, 0xb4, 0xb9, 0x92, 0xc5, 0xbe, 0x63, 0x64, 0xca, 0x52,
0x66, 0x35, 0x1d, 0x38, 0xd1, 0xc2, 0xff, 0x0f, 0x2b, 0x99, 0xb0, 0xc8, 0x3f, 0xda, 0xde, 0x66,
0xca, 0x7d, 0x41, 0x02, 0x6c, 0x5d, 0xc8, 0x58, 0xc9, 0x45, 0x46, 0x1f, 0x41, 0x2d, 0x8b, 0x43,
0x49, 0xee, 0x90, 0x15, 0xb5, 0x43, 0x4c, 0x38, 0xed, 0xe5, 0x34, 0x28, 0x5f, 0x40, 0x8b, 0xa7,
0x86, 0x3b, 0xbe, 0xcb, 0xdd, 0xe2, 0xa6, 0x2a, 0x7a, 0x65, 0xaf, 0xf0, 0x02, 0x6d, 0x3d, 0x86,
0xda, 0x09, 0xf1, 0x99, 0x52, 0xdc, 0x81, 0x25, 0x2f, 0x89, 0x63, 0x1c, 0x72, 0xe3, 0xb2, 0x26,
0xd1, 0x3a, 0x2c, 0x8c, 0x48, 0x40, 0xb8, 0x76, 0x53, 0x11, 0x16, 0x05, 0x78, 0x86, 0x03, 0x1a,
0x8f, 0x65, 0xc0, 0xd6, 0x61, 0x21, 0xbf, 0xb8, 0x8a, 0x40, 0x77, 0xa0, 0x16, 0xb8, 0x97, 0xe9,
0xa2, 0x8a, 0x91, 0xe5, 0xc0, 0xbd, 0x54, 0xc6, 0x77, 0x60, 0xe9, 0x95, 0x4b, 0x46, 0x5e, 0xc8,
0x75, 0x54, 0x0c, 0x99, 0x29, 0xac, 0xe6, 0x15, 0xfe, 0xad, 0x0c, 0x75, 0xa5, 0x51, 0x19, 0xbc,
0x0e, 0x0b, 0x9e, 0xeb, 0x0d, 0x53, 0x95, 0x92, 0x40, 0xf7, 0x8d, 0x21, 0xe5, 0x7c, 0x12, 0xce,
0x2c, 0x35, 0xa6, 0x6d, 0x03, 0xb0, 0xd7, 0x6e, 0xa4, 0x6d, 0xab, 0xcc, 0x11, 0xae, 0x09, 0x19,
0x65, 0xee, 0x43, 0x68, 0xa8, 0x7d, 0xa7, 0xa7, 0x54, 0xe7, 0x4c, 0xa9, 0x2b, 0x29, 0x35, 0xe9,
0x1e, 0x34, 0x13, 0x86, 0x9d, 0x21, 0xc1, 0xb1, 0x1b, 0x7b, 0xc3, 0x71, 0x67, 0x41, 0xdd, 0x91,
0x09, 0xc3, 0x47, 0x86, 0x87, 0x76, 0x60, 0x41, 0xa4, 0x3f, 0xd6, 0x59, 0x94, 0xd7, 0xf1, 0xbb,
0x79, 0x48, 0xe9, 0x6a, 0x4f, 0x7e, 0x0f, 0x42, 0x1e, 0x8f, 0x6d, 0x25, 0xda, 0xfd, 0x1c, 0x20,
0x63, 0xa2, 0x55, 0xa8, 0x9c, 0xe3, 0xb1, 0x3e, 0x87, 0xe2, 0x57, 0x04, 0xe7, 0xc2, 0x1d, 0x25,
0x26, 0xea, 0x8a, 0x78, 0x54, 0xfe, 0xbc, 0x64, 0x79, 0xd0, 0xda, 0x1d, 0x9d, 0x13, 0x9a, 0x9b,
0xbe, 0x0e, 0x0b, 0x81, 0xfb, 0x35, 0x8d, 0x4d, 0x24, 0x25, 0x21, 0xb9, 0x24, 0xa4, 0xb1, 0x81,
0x90, 0x04, 0x5a, 0x81, 0x32, 0x8d, 0x64, 0xbc, 0x6a, 0x76, 0x99, 0x46, 0x99, 0xa2, 0x6a, 0x4e,
0x91, 0xf5, 0xcf, 0x2a, 0x40, 0xa6, 0x05, 0xd9, 0xd0, 0x25, 0xd4, 0x61, 0x38, 0x16, 0x25, 0x88,
0x73, 0x36, 0xe6, 0x98, 0x39, 0x31, 0xf6, 0x92, 0x98, 0x91, 0x0b, 0xb1, 0x7e, 0xc2, 0xed, 0x5b,
0xca, 0xed, 0x09, 0xdb, 0xec, 0xdb, 0x84, 0xf6, 0xd5, 0xbc, 0x5d, 0x31, 0xcd, 0x36, 0xb3, 0xd0,
0x31, 0xdc, 0xca, 0x30, 0xfd, 0x1c, 0x5c, 0xf9, 0x2a, 0xb8, 0xb5, 0x14, 0xce, 0xcf, 0xa0, 0x0e,
0x60, 0x8d, 0x50, 0xe7, 0x9b, 0x04, 0x27, 0x05, 0xa0, 0xca, 0x55, 0x40, 0x6d, 0x42, 0x7f, 0x29,
0x27, 0x64, 0x30, 0x27, 0xf0, 0x4e, 0xce, 0x4b, 0x71, 0xdc, 0x73, 0x60, 0xd5, 0xab, 0xc0, 0x36,
0x52, 0xab, 0x44, 0x3e, 0xc8, 0x10, 0x7f, 0x0e, 0x1b, 0x84, 0x3a, 0xaf, 0x5d, 0xc2, 0x27, 0xe1,
0x16, 0xde, 0xe2, 0xa4, 0xb8, 0x74, 0x8b, 0x58, 0xca, 0xc9, 0x00, 0xc7, 0x83, 0x82, 0x93, 0x8b,
0x6f, 0x71, 0xf2, 0x99, 0x9c, 0x90, 0xc1, 0x3c, 0x85, 0x36, 0xa1, 0x93, 0xd6, 0x2c, 0x5d, 0x05,
0xd2, 0x22, 0xb4, 0x68, 0xc9, 0x2e, 0xb4, 0x19, 0xf6, 0x38, 0x8d, 0xf3, 0x9b, 0x60, 0xf9, 0x2a,
0x88, 0x55, 0x2d, 0x9f, 0x62, 0x58, 0xbf, 0x86, 0xc6, 0x51, 0x32, 0xc0, 0x7c, 0x74, 0x96, 0x26,
0x83, 0x1b, 0xcb, 0x3f, 0xd6, 0xbf, 0xcb, 0x50, 0xdf, 0x1b, 0xc4, 0x34, 0x89, 0x0a, 0x39, 0x59,
0x1d, 0xd2, 0xc9, 0x9c, 0x2c, 0x45, 0x64, 0x4e, 0x56, 0xc2, 0x9f, 0x42, 0x23, 0x90, 0x47, 0x57,
0xcb, 0xab, 0x3c, 0xd4, 0x9e, 0x3a, 0xd4, 0x76, 0x3d, 0xc8, 0x25, 0xb3, 0x1e, 0x40, 0x44, 0x7c,
0xa6, 0xe7, 0xa8, 0x74, 0xd4, 0xd2, 0x15, 0xa1, 0x49, 0xd1, 0x76, 0x2d, 0x4a, 0xb3, 0xf5, 0x27,
0x50, 0x3f, 0x13, 0x41, 0xd2, 0x13, 0x0a, 0xc9, 0x28, 0x8b, 0x9e, 0x0d, 0x67, 0xd9, 0x21, 0x3c,
0x82, 0xe6, 0x50, 0x85, 0x4c, 0x4f, 0x52, 0x7b, 0xe8, 0x9e, 0xf6, 0x24, 0xf3, 0xb7, 0x97, 0x8f,
0xac, 0x5a, 0x80, 0xc6, 0x30, 0xc7, 0xea, 0xf6, 0xa1, 0x3d, 0x25, 0x32, 0x23, 0x07, 0x6d, 0xe5,
0x73, 0x50, 0x7d, 0x07, 0x29, 0x45, 0xf9, 0x99, 0xf9, 0xbc, 0xf4, 0x0b, 0xd8, 0x98, 0x2c, 0x73,
0x74, 0x51, 0xf6, 0x29, 0x34, 0x3c, 0x69, 0x5d, 0x61, 0x05, 0xda, 0x53, 0x76, 0xdb, 0x75, 0x2f,
0x23, 0x2c, 0x1f, 0xd0, 0xcb, 0x98, 0x70, 0xdc, 0xe7, 0x31, 0x76, 0x83, 0x9b, 0xa8, 0x9a, 0x11,
0x54, 0xe5, 0x15, 0x5b, 0x91, 0x45, 0xa1, 0xfc, 0xb7, 0x1e, 0xc0, 0x5a, 0x41, 0x8b, 0x36, 0x79,
0x15, 0x2a, 0x23, 0x1c, 0x4a, 0xf4, 0xa6, 0x2d, 0x7e, 0x2d, 0x17, 0xda, 0x36, 0x76, 0xfd, 0x9b,
0xb3, 0x46, 0xab, 0xa8, 0x64, 0x2a, 0xb6, 0x00, 0xe5, 0x55, 0x68, 0x53, 0x8c, 0xd5, 0xa5, 0x9c,
0xd5, 0xcf, 0xa1, 0xbd, 0x37, 0xa2, 0x0c, 0xf7, 0xb9, 0x4f, 0xc2, 0x9b, 0x28, 0xf3, 0x7f, 0x0b,
0x6b, 0x2f, 0xf8, 0xf8, 0xa5, 0x00, 0x63, 0xe4, 0x5b, 0x7c, 0x43, 0xfe, 0xc5, 0xf4, 0xb5, 0xf1,
0x2f, 0xa6, 0xaf, 0x45, 0x85, 0xef, 0xd1, 0x51, 0x12, 0x84, 0x72, 0xbb, 0x37, 0x6d, 0x4d, 0x59,
0xff, 0x28, 0xc1, 0xba, 0x7a, 0x83, 0xf7, 0xd5, 0xd3, 0xd3, 0xa8, 0xef, 0xc2, 0xf2, 0x90, 0x32,
0x1e, 0xba, 0x01, 0xd6, 0xaa, 0x53, 0x5a, 0xc0, 0x8b, 0x37, 0x6b, 0x59, 0xbe, 0x0a, 0xc4, 0x6f,
0xe1, 0x61, 0x5c, 0xb9, 0xfa, 0x61, 0x3c, 0xf5, 0xf4, 0xad, 0x4e, 0x3f, 0x7d, 0xd1, 0x7b, 0x00,
0x46, 0x88, 0xf8, 0xf2, 0xe2, 0xaf, 0xd9, 0x35, 0xcd, 0x39, 0xf6, 0xd1, 0x7d, 0x68, 0x0d, 0x84,
0x95, 0xce, 0x90, 0xd2, 0x73, 0x27, 0x72, 0xf9, 0x50, 0x3e, 0xb4, 0x6b, 0x76, 0x53, 0xb2, 0x8f,
0x28, 0x3d, 0x3f, 0x71, 0xf9, 0xd0, 0xba, 0x0d, 0xb7, 0xf6, 0x31, 0xe3, 0x31, 0x1d, 0x17, 0xbd,
0xb3, 0x7e, 0x06, 0x70, 0x1c, 0x72, 0x1c, 0xbf, 0x72, 0xc5, 0xb3, 0xfe, 0x27, 0x79, 0x4a, 0x5f,
0xa9, 0xab, 0x3d, 0xd5, 0xc7, 0x48, 0x07, 0xec, 0x9c, 0x8c, 0xd5, 0x83, 0x45, 0x9b, 0x26, 0x1c,
0x33, 0xf4, 0x81, 0xf9, 0xd3, 0xf3, 0x1a, 0x7a, 0x9e, 0x64, 0xda, 0x7a, 0xcc, 0x3a, 0x32, 0x0f,
0x9f, 0x0c, 0x4e, 0xc7, 0xb9, 0x07, 0x35, 0x62, 0x78, 0xfa, 0x74, 0x4e, 0xab, 0xce, 0x44, 0xac,
0x03, 0x58, 0x7b, 0xea, 0xfb, 0x3f, 0x18, 0xe6, 0xc8, 0xf4, 0x07, 0x7e, 0x30, 0xd2, 0x63, 0x58,
0x53, 0xae, 0x29, 0x57, 0x0d, 0xcc, 0x07, 0xb0, 0x18, 0x9b, 0xb8, 0x94, 0xb2, 0x8e, 0x8a, 0x16,
0xd2, 0x63, 0x62, 0x81, 0xc4, 0xc3, 0x30, 0x8b, 0xac, 0x59, 0xa0, 0x35, 0x68, 0x8b, 0x81, 0x02,
0xa6, 0xf5, 0x1b, 0x58, 0x7b, 0x1e, 0x8e, 0x48, 0x88, 0xf7, 0x4e, 0x4e, 0x9f, 0xe1, 0x34, 0x13,
0x20, 0xa8, 0x8a, 0x6b, 0x5e, 0x2a, 0x5a, 0xb6, 0xe5, 0xbf, 0x38, 0x1a, 0xe1, 0x99, 0xe3, 0x45,
0x09, 0xd3, 0x2d, 0x8c, 0xc5, 0xf0, 0x6c, 0x2f, 0x4a, 0x18, 0x7a, 0x07, 0xc4, 0x75, 0xe3, 0xd0,
0x70, 0x34, 0x96, 0xe7, 0x63, 0xd9, 0x5e, 0xf2, 0xa2, 0xe4, 0x79, 0x38, 0x1a, 0x5b, 0x3f, 0x96,
0x8f, 0x36, 0x8c, 0x7d, 0xdb, 0x0d, 0x7d, 0x1a, 0xec, 0xe3, 0x8b, 0x9c, 0x86, 0xf4, 0x81, 0x60,
0xf2, 0xc0, 0x77, 0x25, 0x68, 0x3c, 0x1d, 0xe0, 0x90, 0xef, 0x63, 0xee, 0x92, 0x91, 0x7c, 0x04,
0x5c, 0xe0, 0x98, 0x11, 0x1a, 0xea, 0x03, 0x63, 0x48, 0xf1, 0x86, 0x23, 0x21, 0xe1, 0x8e, 0xef,
0xe2, 0x80, 0x86, 0x12, 0x65, 0xd9, 0x06, 0xc1, 0xda, 0x97, 0x1c, 0xf4, 0x00, 0x5a, 0xaa, 0xc5,
0xe4, 0x0c, 0xdd, 0xd0, 0x1f, 0xe1, 0xd8, 0x3c, 0xb9, 0x57, 0x14, 0xfb, 0x48, 0x73, 0xd1, 0x87,
0xb0, 0xaa, 0x0f, 0x52, 0x26, 0x59, 0x95, 0x92, 0x2d, 0xcd, 0x2f, 0x88, 0x26, 0x51, 0x44, 0x63,
0xce, 0x1c, 0x86, 0x3d, 0x8f, 0x06, 0x91, 0xae, 0xa0, 0x5b, 0x86, 0xdf, 0x57, 0x6c, 0xb1, 0x84,
0x87, 0xc2, 0x4f, 0xed, 0x49, 0xb6, 0x84, 0x2b, 0x01, 0x0e, 0x9c, 0xb3, 0x11, 0xf5, 0xce, 0x1d,
0x91, 0x9a, 0x74, 0x84, 0xc5, 0x1d, 0xbd, 0x2b, 0x98, 0x7d, 0xf2, 0x2d, 0xb6, 0x7e, 0x5f, 0x82,
0xf5, 0xe2, 0x6c, 0x9d, 0x3c, 0xb7, 0x61, 0xbd, 0x38, 0x5d, 0x15, 0xaf, 0xba, 0xca, 0x68, 0xe7,
0x41, 0x64, 0x79, 0x8a, 0x3e, 0x83, 0xa6, 0xec, 0x25, 0x3a, 0xbe, 0x42, 0x2a, 0xde, 0x7d, 0xf9,
0x58, 0xdb, 0x0d, 0x37, 0x47, 0x59, 0x4f, 0xe0, 0x76, 0x1f, 0x73, 0x65, 0x84, 0xcb, 0x75, 0x1d,
0xa8, 0x7c, 0x58, 0x85, 0x4a, 0x1f, 0x7b, 0x52, 0x67, 0xc5, 0x16, 0xbf, 0x62, 0x2d, 0x4f, 0x19,
0xf6, 0x24, 0x78, 0xc5, 0x96, 0xff, 0xd6, 0x5f, 0x4b, 0xb0, 0xa4, 0x33, 0x95, 0xc8, 0x94, 0x7e,
0x4c, 0x2e, 0x70, 0xac, 0x57, 0x51, 0x53, 0xe2, 0x3d, 0xaa, 0xfe, 0x1c, 0x1a, 0x71, 0x42, 0xd3,
0xfc, 0xd7, 0x54, 0xdc, 0xe7, 0x8a, 0x29, 0xbb, 0x33, 0xb2, 0xf9, 0xa0, 0xeb, 0x7c, 0x4d, 0xc9,
0x16, 0x0b, 0x13, 0xc7, 0x48, 0xe6, 0xbb, 0x9a, 0xad, 0x29, 0xb1, 0x6b, 0x0c, 0xde, 0x82, 0xc4,
0x33, 0xa4, 0xd8, 0x35, 0x01, 0x4d, 0x42, 0xee, 0x44, 0x94, 0x84, 0x5c, 0x27, 0x38, 0x90, 0xac,
0x13, 0xc1, 0xb1, 0xfe, 0x50, 0x82, 0x45, 0xd5, 0xa1, 0x14, 0x2f, 0x8b, 0xf4, 0x8a, 0x28, 0x13,
0x79, 0xdd, 0x4a, 0x5d, 0xea, 0x5a, 0x90, 0xff, 0xe2, 0x48, 0x5c, 0x04, 0x2a, 0x59, 0x6a, 0xd3,
0x2e, 0x02, 0x91, 0x25, 0x85, 0x67, 0xd9, 0x4d, 0x23, 0xc7, 0x95, 0x89, 0xcd, 0x94, 0x2b, 0xc5,
0xe6, 0x5a, 0x6a, 0xfd, 0x4a, 0x3c, 0xa8, 0xd2, 0xee, 0xdc, 0x2a, 0x54, 0x92, 0xd4, 0x18, 0xf1,
0x2b, 0x38, 0x83, 0xf4, 0x8e, 0x12, 0xbf, 0xe8, 0x3e, 0xac, 0xb8, 0xbe, 0x4f, 0xc4, 0x74, 0x77,
0x74, 0x48, 0xfc, 0x74, 0xbf, 0x17, 0xb9, 0x3b, 0x7f, 0x6c, 0xe9, 0x43, 0xa6, 0x4b, 0x7c, 0x74,
0x08, 0xad, 0x89, 0x96, 0x31, 0xd2, 0x6f, 0xbe, 0xd9, 0x9d, 0xe4, 0xee, 0x46, 0x4f, 0xb5, 0xa0,
0x7b, 0xa6, 0x05, 0xdd, 0x3b, 0x08, 0x22, 0x3e, 0x46, 0x07, 0xb0, 0x52, 0x6c, 0xae, 0xa2, 0x3b,
0xe6, 0xc6, 0x9a, 0xd1, 0x72, 0x9d, 0x0b, 0x73, 0x08, 0xad, 0x89, 0x3e, 0xab, 0xb1, 0x67, 0x76,
0xfb, 0x75, 0x2e, 0xd0, 0x13, 0xa8, 0xe7, 0x1a, 0xab, 0xa8, 0xa3, 0x40, 0xa6, 0x7b, 0xad, 0x73,
0x01, 0xf6, 0xa0, 0x59, 0xe8, 0x75, 0xa2, 0xae, 0xf6, 0x67, 0x46, 0x03, 0x74, 0x2e, 0xc8, 0x2e,
0xd4, 0x73, 0x2d, 0x47, 0x63, 0xc5, 0x74, 0x5f, 0xb3, 0xfb, 0xce, 0x8c, 0x11, 0x7d, 0xee, 0x8f,
0xa0, 0x59, 0x68, 0x10, 0x1a, 0x43, 0x66, 0x35, 0x27, 0xbb, 0x77, 0x66, 0x8e, 0x69, 0xa4, 0x43,
0x68, 0x4d, 0xb4, 0x0b, 0x4d, 0x70, 0x67, 0x77, 0x11, 0xe7, 0xba, 0xf5, 0xa5, 0x5c, 0xec, 0x5c,
0x7d, 0x9c, 0x5b, 0xec, 0xe9, 0xe6, 0x60, 0xf7, 0xdd, 0xd9, 0x83, 0xda, 0xaa, 0x03, 0x58, 0x29,
0xf6, 0x05, 0x0d, 0xd8, 0xcc, 0x6e, 0xe1, 0xd5, 0x3b, 0xa7, 0xd0, 0x22, 0xcc, 0x76, 0xce, 0xac,
0xce, 0xe1, 0x5c, 0xa0, 0xa7, 0x00, 0xba, 0x8c, 0xf6, 0x49, 0x98, 0x2e, 0xd9, 0x54, 0xf9, 0x9e,
0x2e, 0xd9, 0x8c, 0x92, 0xfb, 0x09, 0x80, 0xaa, 0x7e, 0x7d, 0x9a, 0x70, 0x74, 0xdb, 0x98, 0x31,
0x51, 0x72, 0x77, 0x3b, 0xd3, 0x03, 0x53, 0x00, 0x38, 0x8e, 0xaf, 0x03, 0xf0, 0x05, 0x40, 0x56,
0x55, 0x1b, 0x80, 0xa9, 0x3a, 0xfb, 0x8a, 0x18, 0x34, 0xf2, 0x35, 0x34, 0xd2, 0xbe, 0xce, 0xa8,
0xab, 0xe7, 0x42, 0x3c, 0x86, 0x46, 0xbe, 0xb0, 0x32, 0x10, 0x33, 0x8a, 0xad, 0xee, 0x54, 0x3d,
0x84, 0x9e, 0x9a, 0x9d, 0x9a, 0xb1, 0x0a, 0x3b, 0xf5, 0xfb, 0x41, 0x4c, 0x54, 0x64, 0xc5, 0x4c,
0xf2, 0x3d, 0x20, 0x3e, 0x83, 0x46, 0xbe, 0x14, 0x33, 0x2e, 0xcc, 0x28, 0xcf, 0xba, 0x85, 0x72,
0x0c, 0x3d, 0x81, 0x95, 0x62, 0x19, 0x86, 0x72, 0xe7, 0x72, 0xaa, 0x38, 0xeb, 0xea, 0xb7, 0x72,
0x4e, 0xfc, 0x21, 0x40, 0x56, 0xae, 0x99, 0xe5, 0x9b, 0x2a, 0xe0, 0x26, 0xb4, 0xee, 0x41, 0xb3,
0xf0, 0xf4, 0x30, 0x89, 0x62, 0xd6, 0x7b, 0xe4, 0xaa, 0x3c, 0x5e, 0x2c, 0xf1, 0x8d, 0xe9, 0x33,
0x0b, 0xff, 0xab, 0x36, 0x50, 0xbe, 0xb4, 0x34, 0xa1, 0x9b, 0x51, 0x6e, 0xbe, 0xe5, 0x40, 0xe7,
0xcb, 0xc7, 0xdc, 0x81, 0x9e, 0x51, 0x55, 0xce, 0x05, 0x3a, 0x82, 0xd6, 0xa1, 0x29, 0x67, 0x74,
0x6d, 0xa9, 0xcd, 0x99, 0x51, 0xa5, 0x75, 0xbb, 0xb3, 0x86, 0xf4, 0xa9, 0x3a, 0x86, 0xd5, 0xc9,
0xc2, 0x08, 0xbd, 0xa7, 0x93, 0xdb, 0xec, 0x82, 0x69, 0x9e, 0x51, 0xbb, 0x8d, 0xef, 0xde, 0xdc,
0x2d, 0xfd, 0xfd, 0xcd, 0xdd, 0xd2, 0xbf, 0xde, 0xdc, 0x2d, 0x9d, 0x2d, 0xca, 0xd1, 0x87, 0xff,
0x09, 0x00, 0x00, 0xff, 0xff, 0x0c, 0x58, 0x87, 0x08, 0x36, 0x1e, 0x00, 0x00,
}

View File

@@ -108,10 +108,7 @@ func init() {
}
func (this *CheckRequest) Equal(that interface{}) bool {
if that == nil {
if this == nil {
return true
}
return false
return this == nil
}
that1, ok := that.(*CheckRequest)
@@ -124,10 +121,7 @@ func (this *CheckRequest) Equal(that interface{}) bool {
}
}
if that1 == nil {
if this == nil {
return true
}
return false
return this == nil
} else if this == nil {
return false
}
@@ -138,10 +132,7 @@ func (this *CheckRequest) Equal(that interface{}) bool {
}
func (this *HealthCheckResponse) Equal(that interface{}) bool {
if that == nil {
if this == nil {
return true
}
return false
return this == nil
}
that1, ok := that.(*HealthCheckResponse)
@@ -154,10 +145,7 @@ func (this *HealthCheckResponse) Equal(that interface{}) bool {
}
}
if that1 == nil {
if this == nil {
return true
}
return false
return this == nil
} else if this == nil {
return false
}
@@ -168,10 +156,7 @@ func (this *HealthCheckResponse) Equal(that interface{}) bool {
}
func (this *VersionCheckResponse) Equal(that interface{}) bool {
if that == nil {
if this == nil {
return true
}
return false
return this == nil
}
that1, ok := that.(*VersionCheckResponse)
@@ -184,10 +169,7 @@ func (this *VersionCheckResponse) Equal(that interface{}) bool {
}
}
if that1 == nil {
if this == nil {
return true
}
return false
return this == nil
} else if this == nil {
return false
}

View File

@@ -1499,10 +1499,7 @@ func init() {
}
func (this *Spec) Equal(that interface{}) bool {
if that == nil {
if this == nil {
return true
}
return false
return this == nil
}
that1, ok := that.(*Spec)
@@ -1515,10 +1512,7 @@ func (this *Spec) Equal(that interface{}) bool {
}
}
if that1 == nil {
if this == nil {
return true
}
return false
return this == nil
} else if this == nil {
return false
}
@@ -1566,10 +1560,7 @@ func (this *Spec) Equal(that interface{}) bool {
}
func (this *Process) Equal(that interface{}) bool {
if that == nil {
if this == nil {
return true
}
return false
return this == nil
}
that1, ok := that.(*Process)
@@ -1582,10 +1573,7 @@ func (this *Process) Equal(that interface{}) bool {
}
}
if that1 == nil {
if this == nil {
return true
}
return false
return this == nil
} else if this == nil {
return false
}
@@ -1644,10 +1632,7 @@ func (this *Process) Equal(that interface{}) bool {
}
func (this *Box) Equal(that interface{}) bool {
if that == nil {
if this == nil {
return true
}
return false
return this == nil
}
that1, ok := that.(*Box)
@@ -1660,10 +1645,7 @@ func (this *Box) Equal(that interface{}) bool {
}
}
if that1 == nil {
if this == nil {
return true
}
return false
return this == nil
} else if this == nil {
return false
}
@@ -1677,10 +1659,7 @@ func (this *Box) Equal(that interface{}) bool {
}
func (this *User) Equal(that interface{}) bool {
if that == nil {
if this == nil {
return true
}
return false
return this == nil
}
that1, ok := that.(*User)
@@ -1693,10 +1672,7 @@ func (this *User) Equal(that interface{}) bool {
}
}
if that1 == nil {
if this == nil {
return true
}
return false
return this == nil
} else if this == nil {
return false
}
@@ -1721,10 +1697,7 @@ func (this *User) Equal(that interface{}) bool {
}
func (this *LinuxCapabilities) Equal(that interface{}) bool {
if that == nil {
if this == nil {
return true
}
return false
return this == nil
}
that1, ok := that.(*LinuxCapabilities)
@@ -1737,10 +1710,7 @@ func (this *LinuxCapabilities) Equal(that interface{}) bool {
}
}
if that1 == nil {
if this == nil {
return true
}
return false
return this == nil
} else if this == nil {
return false
}
@@ -1788,10 +1758,7 @@ func (this *LinuxCapabilities) Equal(that interface{}) bool {
}
func (this *POSIXRlimit) Equal(that interface{}) bool {
if that == nil {
if this == nil {
return true
}
return false
return this == nil
}
that1, ok := that.(*POSIXRlimit)
@@ -1804,10 +1771,7 @@ func (this *POSIXRlimit) Equal(that interface{}) bool {
}
}
if that1 == nil {
if this == nil {
return true
}
return false
return this == nil
} else if this == nil {
return false
}
@@ -1824,10 +1788,7 @@ func (this *POSIXRlimit) Equal(that interface{}) bool {
}
func (this *Mount) Equal(that interface{}) bool {
if that == nil {
if this == nil {
return true
}
return false
return this == nil
}
that1, ok := that.(*Mount)
@@ -1840,10 +1801,7 @@ func (this *Mount) Equal(that interface{}) bool {
}
}
if that1 == nil {
if this == nil {
return true
}
return false
return this == nil
} else if this == nil {
return false
}
@@ -1868,10 +1826,7 @@ func (this *Mount) Equal(that interface{}) bool {
}
func (this *Root) Equal(that interface{}) bool {
if that == nil {
if this == nil {
return true
}
return false
return this == nil
}
that1, ok := that.(*Root)
@@ -1884,10 +1839,7 @@ func (this *Root) Equal(that interface{}) bool {
}
}
if that1 == nil {
if this == nil {
return true
}
return false
return this == nil
} else if this == nil {
return false
}
@@ -1901,10 +1853,7 @@ func (this *Root) Equal(that interface{}) bool {
}
func (this *Hooks) Equal(that interface{}) bool {
if that == nil {
if this == nil {
return true
}
return false
return this == nil
}
that1, ok := that.(*Hooks)
@@ -1917,10 +1866,7 @@ func (this *Hooks) Equal(that interface{}) bool {
}
}
if that1 == nil {
if this == nil {
return true
}
return false
return this == nil
} else if this == nil {
return false
}
@@ -1952,10 +1898,7 @@ func (this *Hooks) Equal(that interface{}) bool {
}
func (this *Hook) Equal(that interface{}) bool {
if that == nil {
if this == nil {
return true
}
return false
return this == nil
}
that1, ok := that.(*Hook)
@@ -1968,10 +1911,7 @@ func (this *Hook) Equal(that interface{}) bool {
}
}
if that1 == nil {
if this == nil {
return true
}
return false
return this == nil
} else if this == nil {
return false
}
@@ -2001,10 +1941,7 @@ func (this *Hook) Equal(that interface{}) bool {
}
func (this *Linux) Equal(that interface{}) bool {
if that == nil {
if this == nil {
return true
}
return false
return this == nil
}
that1, ok := that.(*Linux)
@@ -2017,10 +1954,7 @@ func (this *Linux) Equal(that interface{}) bool {
}
}
if that1 == nil {
if this == nil {
return true
}
return false
return this == nil
} else if this == nil {
return false
}
@@ -2102,10 +2036,7 @@ func (this *Linux) Equal(that interface{}) bool {
}
func (this *Windows) Equal(that interface{}) bool {
if that == nil {
if this == nil {
return true
}
return false
return this == nil
}
that1, ok := that.(*Windows)
@@ -2118,10 +2049,7 @@ func (this *Windows) Equal(that interface{}) bool {
}
}
if that1 == nil {
if this == nil {
return true
}
return false
return this == nil
} else if this == nil {
return false
}
@@ -2132,10 +2060,7 @@ func (this *Windows) Equal(that interface{}) bool {
}
func (this *Solaris) Equal(that interface{}) bool {
if that == nil {
if this == nil {
return true
}
return false
return this == nil
}
that1, ok := that.(*Solaris)
@@ -2148,10 +2073,7 @@ func (this *Solaris) Equal(that interface{}) bool {
}
}
if that1 == nil {
if this == nil {
return true
}
return false
return this == nil
} else if this == nil {
return false
}
@@ -2162,10 +2084,7 @@ func (this *Solaris) Equal(that interface{}) bool {
}
func (this *LinuxIDMapping) Equal(that interface{}) bool {
if that == nil {
if this == nil {
return true
}
return false
return this == nil
}
that1, ok := that.(*LinuxIDMapping)
@@ -2178,10 +2097,7 @@ func (this *LinuxIDMapping) Equal(that interface{}) bool {
}
}
if that1 == nil {
if this == nil {
return true
}
return false
return this == nil
} else if this == nil {
return false
}
@@ -2198,10 +2114,7 @@ func (this *LinuxIDMapping) Equal(that interface{}) bool {
}
func (this *LinuxNamespace) Equal(that interface{}) bool {
if that == nil {
if this == nil {
return true
}
return false
return this == nil
}
that1, ok := that.(*LinuxNamespace)
@@ -2214,10 +2127,7 @@ func (this *LinuxNamespace) Equal(that interface{}) bool {
}
}
if that1 == nil {
if this == nil {
return true
}
return false
return this == nil
} else if this == nil {
return false
}
@@ -2231,10 +2141,7 @@ func (this *LinuxNamespace) Equal(that interface{}) bool {
}
func (this *LinuxDevice) Equal(that interface{}) bool {
if that == nil {
if this == nil {
return true
}
return false
return this == nil
}
that1, ok := that.(*LinuxDevice)
@@ -2247,10 +2154,7 @@ func (this *LinuxDevice) Equal(that interface{}) bool {
}
}
if that1 == nil {
if this == nil {
return true
}
return false
return this == nil
} else if this == nil {
return false
}
@@ -2279,10 +2183,7 @@ func (this *LinuxDevice) Equal(that interface{}) bool {
}
func (this *LinuxResources) Equal(that interface{}) bool {
if that == nil {
if this == nil {
return true
}
return false
return this == nil
}
that1, ok := that.(*LinuxResources)
@@ -2295,10 +2196,7 @@ func (this *LinuxResources) Equal(that interface{}) bool {
}
}
if that1 == nil {
if this == nil {
return true
}
return false
return this == nil
} else if this == nil {
return false
}
@@ -2337,10 +2235,7 @@ func (this *LinuxResources) Equal(that interface{}) bool {
}
func (this *LinuxMemory) Equal(that interface{}) bool {
if that == nil {
if this == nil {
return true
}
return false
return this == nil
}
that1, ok := that.(*LinuxMemory)
@@ -2353,10 +2248,7 @@ func (this *LinuxMemory) Equal(that interface{}) bool {
}
}
if that1 == nil {
if this == nil {
return true
}
return false
return this == nil
} else if this == nil {
return false
}
@@ -2385,10 +2277,7 @@ func (this *LinuxMemory) Equal(that interface{}) bool {
}
func (this *LinuxCPU) Equal(that interface{}) bool {
if that == nil {
if this == nil {
return true
}
return false
return this == nil
}
that1, ok := that.(*LinuxCPU)
@@ -2401,10 +2290,7 @@ func (this *LinuxCPU) Equal(that interface{}) bool {
}
}
if that1 == nil {
if this == nil {
return true
}
return false
return this == nil
} else if this == nil {
return false
}
@@ -2433,10 +2319,7 @@ func (this *LinuxCPU) Equal(that interface{}) bool {
}
func (this *LinuxWeightDevice) Equal(that interface{}) bool {
if that == nil {
if this == nil {
return true
}
return false
return this == nil
}
that1, ok := that.(*LinuxWeightDevice)
@@ -2449,10 +2332,7 @@ func (this *LinuxWeightDevice) Equal(that interface{}) bool {
}
}
if that1 == nil {
if this == nil {
return true
}
return false
return this == nil
} else if this == nil {
return false
}
@@ -2472,10 +2352,7 @@ func (this *LinuxWeightDevice) Equal(that interface{}) bool {
}
func (this *LinuxThrottleDevice) Equal(that interface{}) bool {
if that == nil {
if this == nil {
return true
}
return false
return this == nil
}
that1, ok := that.(*LinuxThrottleDevice)
@@ -2488,10 +2365,7 @@ func (this *LinuxThrottleDevice) Equal(that interface{}) bool {
}
}
if that1 == nil {
if this == nil {
return true
}
return false
return this == nil
} else if this == nil {
return false
}
@@ -2508,10 +2382,7 @@ func (this *LinuxThrottleDevice) Equal(that interface{}) bool {
}
func (this *LinuxBlockIO) Equal(that interface{}) bool {
if that == nil {
if this == nil {
return true
}
return false
return this == nil
}
that1, ok := that.(*LinuxBlockIO)
@@ -2524,10 +2395,7 @@ func (this *LinuxBlockIO) Equal(that interface{}) bool {
}
}
if that1 == nil {
if this == nil {
return true
}
return false
return this == nil
} else if this == nil {
return false
}
@@ -2581,10 +2449,7 @@ func (this *LinuxBlockIO) Equal(that interface{}) bool {
}
func (this *LinuxPids) Equal(that interface{}) bool {
if that == nil {
if this == nil {
return true
}
return false
return this == nil
}
that1, ok := that.(*LinuxPids)
@@ -2597,10 +2462,7 @@ func (this *LinuxPids) Equal(that interface{}) bool {
}
}
if that1 == nil {
if this == nil {
return true
}
return false
return this == nil
} else if this == nil {
return false
}
@@ -2611,10 +2473,7 @@ func (this *LinuxPids) Equal(that interface{}) bool {
}
func (this *LinuxDeviceCgroup) Equal(that interface{}) bool {
if that == nil {
if this == nil {
return true
}
return false
return this == nil
}
that1, ok := that.(*LinuxDeviceCgroup)
@@ -2627,10 +2486,7 @@ func (this *LinuxDeviceCgroup) Equal(that interface{}) bool {
}
}
if that1 == nil {
if this == nil {
return true
}
return false
return this == nil
} else if this == nil {
return false
}
@@ -2653,10 +2509,7 @@ func (this *LinuxDeviceCgroup) Equal(that interface{}) bool {
}
func (this *LinuxNetwork) Equal(that interface{}) bool {
if that == nil {
if this == nil {
return true
}
return false
return this == nil
}
that1, ok := that.(*LinuxNetwork)
@@ -2669,10 +2522,7 @@ func (this *LinuxNetwork) Equal(that interface{}) bool {
}
}
if that1 == nil {
if this == nil {
return true
}
return false
return this == nil
} else if this == nil {
return false
}
@@ -2691,10 +2541,7 @@ func (this *LinuxNetwork) Equal(that interface{}) bool {
}
func (this *LinuxHugepageLimit) Equal(that interface{}) bool {
if that == nil {
if this == nil {
return true
}
return false
return this == nil
}
that1, ok := that.(*LinuxHugepageLimit)
@@ -2707,10 +2554,7 @@ func (this *LinuxHugepageLimit) Equal(that interface{}) bool {
}
}
if that1 == nil {
if this == nil {
return true
}
return false
return this == nil
} else if this == nil {
return false
}
@@ -2724,10 +2568,7 @@ func (this *LinuxHugepageLimit) Equal(that interface{}) bool {
}
func (this *LinuxInterfacePriority) Equal(that interface{}) bool {
if that == nil {
if this == nil {
return true
}
return false
return this == nil
}
that1, ok := that.(*LinuxInterfacePriority)
@@ -2740,10 +2581,7 @@ func (this *LinuxInterfacePriority) Equal(that interface{}) bool {
}
}
if that1 == nil {
if this == nil {
return true
}
return false
return this == nil
} else if this == nil {
return false
}
@@ -2757,10 +2595,7 @@ func (this *LinuxInterfacePriority) Equal(that interface{}) bool {
}
func (this *LinuxSeccomp) Equal(that interface{}) bool {
if that == nil {
if this == nil {
return true
}
return false
return this == nil
}
that1, ok := that.(*LinuxSeccomp)
@@ -2773,10 +2608,7 @@ func (this *LinuxSeccomp) Equal(that interface{}) bool {
}
}
if that1 == nil {
if this == nil {
return true
}
return false
return this == nil
} else if this == nil {
return false
}
@@ -2803,10 +2635,7 @@ func (this *LinuxSeccomp) Equal(that interface{}) bool {
}
func (this *LinuxSeccompArg) Equal(that interface{}) bool {
if that == nil {
if this == nil {
return true
}
return false
return this == nil
}
that1, ok := that.(*LinuxSeccompArg)
@@ -2819,10 +2648,7 @@ func (this *LinuxSeccompArg) Equal(that interface{}) bool {
}
}
if that1 == nil {
if this == nil {
return true
}
return false
return this == nil
} else if this == nil {
return false
}
@@ -2842,10 +2668,7 @@ func (this *LinuxSeccompArg) Equal(that interface{}) bool {
}
func (this *LinuxSyscall) Equal(that interface{}) bool {
if that == nil {
if this == nil {
return true
}
return false
return this == nil
}
that1, ok := that.(*LinuxSyscall)
@@ -2858,10 +2681,7 @@ func (this *LinuxSyscall) Equal(that interface{}) bool {
}
}
if that1 == nil {
if this == nil {
return true
}
return false
return this == nil
} else if this == nil {
return false
}
@@ -2888,10 +2708,7 @@ func (this *LinuxSyscall) Equal(that interface{}) bool {
}
func (this *LinuxIntelRdt) Equal(that interface{}) bool {
if that == nil {
if this == nil {
return true
}
return false
return this == nil
}
that1, ok := that.(*LinuxIntelRdt)
@@ -2904,10 +2721,7 @@ func (this *LinuxIntelRdt) Equal(that interface{}) bool {
}
}
if that1 == nil {
if this == nil {
return true
}
return false
return this == nil
} else if this == nil {
return false
}

View File

@@ -8,6 +8,7 @@ package virtcontainers
import (
"fmt"
"syscall"
"time"
"github.com/kata-containers/agent/protocols/grpc"
"github.com/kata-containers/runtime/virtcontainers/pkg/types"
@@ -246,4 +247,7 @@ type agent interface {
// getGuestDetails will tell the agent to get some information of guest
getGuestDetails(*grpc.GuestDetailsRequest) (*grpc.GuestDetailsResponse, error)
// setGuestDateTime asks the agent to set guest time to the provided one
setGuestDateTime(time.Time) error
}

View File

@@ -248,6 +248,12 @@ func (f *factory) GetVM(ctx context.Context, config vc.VMConfig) (*vc.VM, error)
return nil, err
}
// sync guest time since we might have paused it for a long time.
err = vm.SyncTime()
if err != nil {
return nil, err
}
online := false
baseConfig := f.base.Config().HypervisorConfig
if baseConfig.NumVCPUs < hypervisorConfig.NumVCPUs {

View File

@@ -1000,3 +1000,8 @@ func (h *hyper) getGuestDetails(*grpc.GuestDetailsRequest) (*grpc.GuestDetailsRe
// hyperstart-agent does not support getGuestDetails
return nil, nil
}
func (h *hyper) setGuestDateTime(time.Time) error {
// hyperstart-agent does not support setGuestDateTime
return nil
}

View File

@@ -1490,6 +1490,9 @@ func (k *kataAgent) installReqFunc(c *kataclient.AgentClient) {
k.reqHandlers["grpc.GuestDetailsRequest"] = func(ctx context.Context, req interface{}, opts ...golangGrpc.CallOption) (interface{}, error) {
return k.client.GetGuestDetails(ctx, req.(*grpc.GuestDetailsRequest), opts...)
}
k.reqHandlers["grpc.SetGuestDateTimeRequest"] = func(ctx context.Context, req interface{}, opts ...golangGrpc.CallOption) (interface{}, error) {
return k.client.SetGuestDateTime(ctx, req.(*grpc.SetGuestDateTimeRequest), opts...)
}
}
func (k *kataAgent) sendReq(request interface{}) (interface{}, error) {
@@ -1563,6 +1566,15 @@ func (k *kataAgent) getGuestDetails(req *grpc.GuestDetailsRequest) (*grpc.GuestD
return resp.(*grpc.GuestDetailsResponse), nil
}
func (k *kataAgent) setGuestDateTime(tv time.Time) error {
_, err := k.sendReq(&grpc.SetGuestDateTimeRequest{
Sec: tv.Unix(),
Usec: int64(tv.Nanosecond() / 1e3),
})
return err
}
func (k *kataAgent) convertToKataAgentIPFamily(ipFamily int) aTypes.IPFamily {
switch ipFamily {
case netlink.FAMILY_V4:

View File

@@ -243,6 +243,10 @@ func (p *gRPCProxy) GetGuestDetails(ctx context.Context, req *pb.GuestDetailsReq
return &pb.GuestDetailsResponse{}, nil
}
func (p *gRPCProxy) SetGuestDateTime(ctx context.Context, req *pb.SetGuestDateTimeRequest) (*gpb.Empty, error) {
return &gpb.Empty{}, nil
}
func gRPCRegister(s *grpc.Server, srv interface{}) {
switch g := srv.(type) {
case *gRPCProxy:
@@ -262,6 +266,7 @@ var reqList = []interface{}{
&pb.CheckRequest{},
&pb.WaitProcessRequest{},
&pb.StatsContainerRequest{},
&pb.SetGuestDateTimeRequest{},
}
func TestKataAgentSendReq(t *testing.T) {

View File

@@ -7,6 +7,7 @@ package virtcontainers
import (
"syscall"
"time"
"github.com/kata-containers/agent/protocols/grpc"
"github.com/kata-containers/runtime/virtcontainers/pkg/types"
@@ -203,3 +204,8 @@ func (n *noopAgent) setProxy(sandbox *Sandbox, proxy proxy, pid int, url string)
func (n *noopAgent) getGuestDetails(*grpc.GuestDetailsRequest) (*grpc.GuestDetailsResponse, error) {
return nil, nil
}
// setGuestDateTime is the Noop agent guest time setter. It does nothing.
func (n *noopAgent) setGuestDateTime(time.Time) error {
return nil
}

View File

@@ -9,6 +9,7 @@ import (
"context"
"os"
"path/filepath"
"time"
"github.com/kata-containers/runtime/virtcontainers/pkg/uuid"
"github.com/sirupsen/logrus"
@@ -296,6 +297,13 @@ func (v *VM) ReseedRNG() error {
return v.agent.reseedRNG(data)
}
// SyncTime syncs guest time with host time.
func (v *VM) SyncTime() error {
now := time.Now()
v.logger().WithField("time", now).Infof("sync guest time")
return v.agent.setGuestDateTime(now)
}
func (v *VM) assignSandbox(s *Sandbox) error {
// add vm symlinks
// - link vm socket from sandbox dir (/run/vc/vm/sbid/<kata.sock>) to vm dir (/run/vc/vm/vmid/<kata.sock>)