Merge pull request #32835 from yujuhong/docker_annotations

Automatic merge from submit-queue

dockershim: support annotations and filtering by sandbox ID
This commit is contained in:
Kubernetes Submit Queue 2016-09-16 14:17:03 -07:00 committed by GitHub
commit af3050dd15
10 changed files with 372 additions and 265 deletions

View File

@ -982,7 +982,10 @@ type PodSandbox struct {
// Creation timestamps of the sandbox
CreatedAt *int64 `protobuf:"varint,4,opt,name=created_at,json=createdAt" json:"created_at,omitempty"`
// The labels of the PodSandbox
Labels map[string]string `protobuf:"bytes,5,rep,name=labels" json:"labels,omitempty" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"`
Labels map[string]string `protobuf:"bytes,5,rep,name=labels" json:"labels,omitempty" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"`
// Annotations is an unstructured key value map that may be set by external
// tools to store and retrieve arbitrary metadata.
Annotations map[string]string `protobuf:"bytes,6,rep,name=annotations" json:"annotations,omitempty" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"`
XXX_unrecognized []byte `json:"-"`
}
@ -1026,6 +1029,13 @@ func (m *PodSandbox) GetLabels() map[string]string {
return nil
}
func (m *PodSandbox) GetAnnotations() map[string]string {
if m != nil {
return m.Annotations
}
return nil
}
type ListPodSandboxResponse struct {
// List of PodSandbox
Items []*PodSandbox `protobuf:"bytes,1,rep,name=items" json:"items,omitempty"`
@ -3117,183 +3127,184 @@ var _ImageService_serviceDesc = grpc.ServiceDesc{
}
var fileDescriptorApi = []byte{
// 2842 bytes of a gzipped FileDescriptorProto
// 2853 bytes of a gzipped FileDescriptorProto
0x1f, 0x8b, 0x08, 0x00, 0x00, 0x09, 0x6e, 0x88, 0x02, 0xff, 0xcc, 0x5a, 0xcd, 0x72, 0x1b, 0xc7,
0x11, 0x16, 0x00, 0x82, 0x04, 0x1a, 0x04, 0x08, 0x8e, 0x28, 0x12, 0x82, 0x64, 0x89, 0x5a, 0xdb,
0x89, 0x44, 0x5b, 0x2c, 0x85, 0x49, 0x49, 0x91, 0x6c, 0xcb, 0xa6, 0x49, 0x46, 0x45, 0x4b, 0xa2,
0x98, 0x85, 0xa4, 0x58, 0x27, 0xd4, 0x0a, 0x3b, 0x24, 0x57, 0x02, 0x76, 0xd7, 0xbb, 0x0b, 0x46,
0xcc, 0x35, 0x97, 0x1c, 0x72, 0xc9, 0x2d, 0x0f, 0xe0, 0xaa, 0x9c, 0x72, 0x49, 0x55, 0x2e, 0xb9,
0xe5, 0x9c, 0xca, 0x83, 0xe4, 0x09, 0x92, 0x63, 0x7a, 0x7e, 0x76, 0x76, 0xf6, 0x07, 0x34, 0x28,
0x57, 0xd9, 0xba, 0xed, 0x74, 0xf7, 0xcc, 0xf4, 0x74, 0xf7, 0xf4, 0xf4, 0x37, 0xb3, 0x50, 0xb7,
0x7c, 0x67, 0xdd, 0x0f, 0xbc, 0xc8, 0x23, 0x73, 0xc1, 0xd8, 0x8d, 0x9c, 0x11, 0x35, 0xd6, 0xa0,
0xf5, 0x9c, 0x06, 0xa1, 0xe3, 0xb9, 0x26, 0xfd, 0x66, 0x4c, 0xc3, 0x88, 0x74, 0x60, 0xee, 0x58,
0x50, 0x3a, 0xa5, 0xd5, 0xd2, 0xf5, 0xba, 0x19, 0x37, 0x8d, 0xbf, 0x94, 0x60, 0x41, 0x09, 0x87,
0xbe, 0xe7, 0x86, 0x74, 0xb2, 0x34, 0xb9, 0x06, 0xf3, 0x72, 0x92, 0xbe, 0x6b, 0x8d, 0x68, 0xa7,
0xcc, 0xd9, 0x0d, 0x49, 0xdb, 0x43, 0x12, 0xf9, 0x29, 0x2c, 0xc4, 0x22, 0xf1, 0x20, 0x15, 0x2e,
0xd5, 0x92, 0x64, 0x39, 0x1b, 0x59, 0x87, 0xf3, 0xb1, 0x20, 0xae, 0x41, 0x09, 0xcf, 0x70, 0xe1,
0x45, 0xc9, 0xda, 0xf4, 0x1d, 0x29, 0x6f, 0x6c, 0x42, 0x7d, 0x7b, 0xaf, 0xf7, 0xc4, 0x8f, 0x58,
0x67, 0x54, 0x31, 0xa4, 0x01, 0xeb, 0x83, 0x2a, 0x56, 0x98, 0x8a, 0xb2, 0x49, 0xba, 0x50, 0x0b,
0xa9, 0x15, 0x0c, 0x8e, 0x68, 0x88, 0xea, 0x31, 0x96, 0x6a, 0x1b, 0x7f, 0x2d, 0x41, 0x63, 0xdf,
0x0b, 0xa2, 0xc7, 0x96, 0xef, 0x3b, 0xee, 0x21, 0x21, 0x30, 0xc3, 0x97, 0x21, 0x56, 0xc9, 0xbf,
0xc9, 0x4d, 0xa8, 0x71, 0x73, 0x0e, 0xbc, 0x21, 0x5f, 0x5e, 0x6b, 0x63, 0x71, 0x5d, 0x2a, 0xb3,
0xbe, 0x2f, 0x19, 0xa6, 0x12, 0x21, 0x1f, 0x42, 0x6b, 0xe0, 0xb9, 0x91, 0xe5, 0xb8, 0x34, 0xe8,
0xfb, 0x38, 0x36, 0x5f, 0x6d, 0xd5, 0x6c, 0x2a, 0x2a, 0x9b, 0x90, 0x5c, 0x82, 0xfa, 0x91, 0x17,
0x46, 0x42, 0x62, 0x86, 0x4b, 0xd4, 0x18, 0x81, 0x33, 0x57, 0x60, 0x8e, 0x33, 0x1d, 0xbf, 0x53,
0xe5, 0x9a, 0xcc, 0xb2, 0xe6, 0xae, 0x6f, 0x7c, 0x5b, 0x82, 0xea, 0x63, 0x0f, 0x27, 0x2f, 0xd4,
0x34, 0x3d, 0xb5, 0x15, 0x1d, 0x49, 0x77, 0x68, 0x53, 0x23, 0x31, 0x99, 0x9a, 0x49, 0x08, 0x57,
0x88, 0xa9, 0x19, 0x13, 0xad, 0x15, 0x50, 0xcb, 0xf6, 0xdc, 0xe1, 0x09, 0x57, 0xab, 0x66, 0xaa,
0x36, 0xf3, 0x64, 0x48, 0x87, 0x8e, 0x3b, 0x7e, 0xd3, 0x0f, 0xe8, 0xd0, 0x7a, 0x49, 0x87, 0x5c,
0xbd, 0x9a, 0xd9, 0x92, 0x64, 0x53, 0x50, 0x8d, 0x57, 0xb0, 0xc0, 0x5c, 0x1f, 0xfa, 0xd6, 0x80,
0x4a, 0xff, 0x60, 0xa0, 0xf0, 0x49, 0x5d, 0x1a, 0xfd, 0xd6, 0x0b, 0x5e, 0x73, 0xbd, 0x6b, 0x66,
0x83, 0xd1, 0xf6, 0x04, 0x89, 0x5c, 0x84, 0x9a, 0xd0, 0xcb, 0xb1, 0xb9, 0xe2, 0x35, 0x93, 0x5b,
0x61, 0xdf, 0xb1, 0x15, 0xcb, 0xf1, 0x07, 0x5c, 0x63, 0xc9, 0xda, 0xf5, 0x07, 0xc6, 0xef, 0x4b,
0x70, 0xe1, 0x11, 0x9b, 0x7c, 0xdf, 0xb3, 0x7b, 0x96, 0x6b, 0xbf, 0xf4, 0xde, 0x6c, 0x79, 0xee,
0x81, 0x73, 0x48, 0xde, 0x87, 0xe6, 0xe0, 0x30, 0xf0, 0xc6, 0x3e, 0xae, 0x34, 0xa0, 0x6e, 0x24,
0x6d, 0x35, 0x2f, 0x88, 0xfb, 0x9c, 0x46, 0x76, 0x60, 0xd1, 0x8d, 0x55, 0xed, 0x7b, 0x5c, 0xd7,
0x90, 0xcf, 0xde, 0xd8, 0xe8, 0x28, 0x37, 0x67, 0x16, 0x63, 0xb6, 0xdd, 0x34, 0x21, 0x34, 0x02,
0x20, 0xc9, 0xfc, 0x8f, 0x69, 0x64, 0xd9, 0x56, 0x64, 0x15, 0x3a, 0xa9, 0x0d, 0x95, 0xb1, 0x5c,
0x60, 0xdd, 0x64, 0x9f, 0xe4, 0x32, 0xd4, 0xd5, 0x78, 0xd2, 0x1f, 0x09, 0x81, 0x05, 0xb6, 0x15,
0x45, 0x74, 0xe4, 0x8b, 0x30, 0x69, 0x9a, 0x71, 0xd3, 0xf8, 0xc7, 0x0c, 0xb4, 0x73, 0x8b, 0xbe,
0x03, 0xb5, 0x91, 0x9c, 0x9e, 0x4f, 0xdb, 0xd8, 0xb8, 0x94, 0x44, 0x6b, 0x4e, 0x43, 0x53, 0x09,
0x33, 0xc7, 0x33, 0x93, 0x6a, 0xbb, 0x58, 0xb5, 0x99, 0x25, 0x87, 0xde, 0x61, 0xdf, 0x76, 0x02,
0x3a, 0x88, 0xbc, 0xe0, 0x44, 0x6a, 0x39, 0x8f, 0xc4, 0xed, 0x98, 0x46, 0x7e, 0x0e, 0x0d, 0xdb,
0x0d, 0x95, 0x0d, 0x67, 0xf8, 0xe4, 0x44, 0x4d, 0xae, 0xb6, 0xaa, 0x09, 0x28, 0x26, 0xed, 0x46,
0xee, 0x42, 0x93, 0xed, 0x80, 0xfe, 0x48, 0x6c, 0xc0, 0x10, 0x03, 0xaa, 0x82, 0xdd, 0x96, 0x34,
0x9d, 0xd5, 0xee, 0x34, 0xe7, 0xfd, 0xa4, 0x11, 0x92, 0xcf, 0x60, 0x96, 0x47, 0x5b, 0xd8, 0x99,
0xe5, 0x7d, 0x3e, 0x2c, 0x58, 0xa7, 0x30, 0xca, 0xfa, 0x23, 0x2e, 0xb7, 0xe3, 0x46, 0xc1, 0x89,
0x29, 0x3b, 0x91, 0x47, 0xd0, 0xb0, 0x5c, 0xd7, 0x8b, 0x2c, 0xa1, 0xee, 0x1c, 0x1f, 0x63, 0x6d,
0xf2, 0x18, 0x9b, 0x89, 0xb0, 0x18, 0x48, 0xef, 0x4e, 0x7e, 0x01, 0x55, 0xbe, 0x03, 0x3a, 0x35,
0xbe, 0xec, 0x2b, 0x6a, 0x9c, 0xc2, 0xd0, 0x34, 0x85, 0x70, 0xf7, 0x2e, 0x34, 0x34, 0xd5, 0x58,
0x68, 0xbc, 0xa6, 0x27, 0x32, 0x5a, 0xd8, 0x27, 0x59, 0x82, 0xea, 0xb1, 0x35, 0x1c, 0xc7, 0x1e,
0x11, 0x8d, 0x7b, 0xe5, 0x5f, 0x96, 0xba, 0xf7, 0xa1, 0x9d, 0xd5, 0xe8, 0x2c, 0xfd, 0x8d, 0x5d,
0x58, 0x32, 0xc7, 0x6e, 0xa2, 0x58, 0x7c, 0x30, 0xfc, 0x0c, 0x66, 0x07, 0x5c, 0x47, 0x19, 0x3d,
0x17, 0x27, 0x5a, 0xc4, 0x94, 0x82, 0xc6, 0x67, 0x70, 0x21, 0x33, 0x94, 0x3c, 0x36, 0x3e, 0x80,
0x96, 0xef, 0xd9, 0xfd, 0x50, 0x90, 0xfb, 0x18, 0xf5, 0x72, 0x07, 0xfa, 0x4a, 0x76, 0xd7, 0x66,
0xdd, 0x7b, 0x91, 0xe7, 0xe7, 0x55, 0x99, 0xae, 0x7b, 0x07, 0x96, 0xb3, 0xdd, 0xc5, 0xf4, 0xc6,
0xe7, 0xb0, 0x62, 0xd2, 0x91, 0x77, 0x4c, 0xdf, 0x76, 0xe8, 0x2e, 0x74, 0xf2, 0x03, 0x24, 0x83,
0x27, 0xd4, 0x1e, 0xba, 0x61, 0x1c, 0x9e, 0x6d, 0xf0, 0x1b, 0xfa, 0x00, 0x32, 0x05, 0x8a, 0x71,
0x48, 0x0b, 0xca, 0x98, 0xf9, 0x45, 0x27, 0xfc, 0x32, 0x5e, 0x40, 0x7d, 0x4f, 0xcf, 0x07, 0x7a,
0x0e, 0xc5, 0x83, 0x4e, 0x36, 0xc9, 0x06, 0xcc, 0x4d, 0x9b, 0xc0, 0x62, 0x41, 0xe3, 0x61, 0x2e,
0x79, 0x4a, 0x1d, 0x36, 0x00, 0x54, 0x0e, 0x0a, 0x65, 0x2c, 0x90, 0xfc, 0x78, 0xa6, 0x26, 0x65,
0x7c, 0x9b, 0x4a, 0x48, 0xda, 0x62, 0x6c, 0xb5, 0x18, 0x3b, 0x95, 0xa0, 0xca, 0x67, 0x49, 0x50,
0xeb, 0x50, 0x0d, 0x71, 0x48, 0x91, 0x22, 0x5b, 0xda, 0xe2, 0x64, 0xaf, 0x2f, 0xc5, 0x94, 0xd4,
0x14, 0x62, 0xe4, 0x3d, 0x80, 0x01, 0x1e, 0x5d, 0x11, 0xb5, 0xfb, 0x96, 0xc8, 0x9d, 0x15, 0xb3,
0x2e, 0x29, 0x9b, 0x11, 0xb9, 0x97, 0xd8, 0xb1, 0xca, 0xd5, 0x58, 0x2d, 0x50, 0x23, 0xe5, 0x97,
0xc4, 0xd2, 0x6a, 0xb7, 0xcf, 0x9e, 0xbe, 0xdb, 0x65, 0x3f, 0x21, 0xac, 0x25, 0xac, 0xb9, 0x89,
0x09, 0x4b, 0xf4, 0x98, 0x26, 0x61, 0xd5, 0x26, 0x26, 0x2c, 0x39, 0xc6, 0xa9, 0x09, 0xeb, 0xc7,
0x4c, 0x3d, 0x8f, 0xa1, 0x93, 0xdf, 0x3a, 0x32, 0x65, 0x60, 0xfa, 0x09, 0x39, 0xe5, 0x94, 0xf4,
0x23, 0xbb, 0x48, 0x41, 0xe3, 0x3f, 0x25, 0x3d, 0xea, 0x7e, 0xe5, 0x0c, 0x23, 0x1a, 0xe4, 0xa2,
0x4e, 0x05, 0x4f, 0x79, 0xba, 0xe0, 0xe9, 0x41, 0x8b, 0x9b, 0xbd, 0x8f, 0x95, 0x0d, 0x3f, 0xdf,
0x30, 0xea, 0x98, 0xbd, 0x3f, 0x2e, 0xd0, 0x47, 0x4c, 0x29, 0x7c, 0xd6, 0x93, 0xe2, 0xc2, 0xe2,
0xcd, 0xa1, 0x4e, 0xeb, 0x7e, 0x01, 0x24, 0x2f, 0x74, 0x26, 0xd3, 0x7d, 0xc5, 0xb6, 0x2b, 0x2b,
0x12, 0x0b, 0xd2, 0xf6, 0x01, 0x57, 0xe3, 0x14, 0xbb, 0x09, 0x3d, 0x4d, 0x29, 0x68, 0xfc, 0xb9,
0x0c, 0x90, 0x30, 0xdf, 0xd9, 0x7d, 0x7a, 0x47, 0xed, 0x1a, 0x51, 0x1a, 0x5c, 0x2d, 0xd0, 0xa2,
0x68, 0xbf, 0x7c, 0x8f, 0x08, 0x37, 0xb6, 0x60, 0x39, 0x6b, 0x66, 0x19, 0x9f, 0x37, 0xa0, 0xea,
0x60, 0xf5, 0x25, 0x40, 0x46, 0x63, 0xe3, 0x7c, 0x81, 0x32, 0xa6, 0x90, 0x30, 0xae, 0x41, 0x7d,
0x77, 0x64, 0x1d, 0xd2, 0x9e, 0x4f, 0x07, 0x6c, 0x2e, 0x87, 0x35, 0xe4, 0xfc, 0xa2, 0x61, 0x6c,
0x40, 0xed, 0x21, 0x3d, 0x79, 0xce, 0xe6, 0x9d, 0x56, 0x3f, 0xe3, 0x5f, 0x25, 0x58, 0xe1, 0x69,
0x66, 0x2b, 0x2e, 0xea, 0x51, 0x39, 0x6f, 0x1c, 0x60, 0x02, 0xe6, 0xa6, 0xf4, 0xc7, 0x7d, 0x9f,
0x06, 0x8e, 0x27, 0x7c, 0xc9, 0x4c, 0xe9, 0x8f, 0xf7, 0x39, 0x81, 0x15, 0xfe, 0x8c, 0xfd, 0xcd,
0xd8, 0x93, 0x3e, 0xad, 0x98, 0x35, 0x24, 0xfc, 0x9a, 0xb5, 0xe3, 0xbe, 0xe1, 0x11, 0xd6, 0xc5,
0x21, 0xf7, 0x9d, 0xe8, 0xdb, 0xe3, 0x04, 0x0c, 0xb0, 0x0b, 0x23, 0x3c, 0x0b, 0x83, 0x93, 0xfe,
0xd0, 0x19, 0x39, 0x58, 0x89, 0xbb, 0xfd, 0x97, 0x27, 0x11, 0x0d, 0xa5, 0xc3, 0x88, 0x60, 0x3e,
0x62, 0xbc, 0x5d, 0xf7, 0x4b, 0xc6, 0x21, 0x06, 0x34, 0x3d, 0x6f, 0xd4, 0x0f, 0x07, 0x5e, 0x80,
0x88, 0xce, 0x7e, 0xc5, 0xf3, 0x6c, 0xc5, 0x6c, 0x20, 0xb1, 0xc7, 0x68, 0x9b, 0xf6, 0x2b, 0xc3,
0x82, 0x66, 0x6f, 0x87, 0x2f, 0x47, 0xe2, 0x04, 0x2c, 0x99, 0xc7, 0xa1, 0x0c, 0x63, 0x2c, 0x99,
0xd9, 0x37, 0xa3, 0x05, 0xde, 0x30, 0xb6, 0x03, 0xff, 0x66, 0xb4, 0xe8, 0xc4, 0x8f, 0xeb, 0x65,
0xfe, 0xcd, 0x0c, 0x36, 0xa4, 0xc7, 0x88, 0x4a, 0x04, 0x64, 0x14, 0x0d, 0xc3, 0x06, 0xd8, 0xb2,
0x7c, 0xeb, 0xa5, 0x33, 0x74, 0xa2, 0x13, 0x74, 0x60, 0xdb, 0xb2, 0xed, 0xfe, 0x20, 0xa6, 0x38,
0x34, 0x06, 0x8c, 0x0b, 0x48, 0xdf, 0xd2, 0xc8, 0xe4, 0x23, 0x58, 0xb4, 0x03, 0xcf, 0x4f, 0xcb,
0x0a, 0x04, 0xd9, 0x66, 0x0c, 0x5d, 0xd8, 0xf8, 0x5f, 0x09, 0x96, 0xd2, 0x6e, 0x91, 0x05, 0xf9,
0x7d, 0xa8, 0x07, 0xb1, 0x83, 0xe4, 0xe6, 0x5c, 0x4d, 0x9f, 0x17, 0x79, 0x47, 0x9a, 0x49, 0x17,
0x8c, 0xff, 0xf9, 0x8c, 0x02, 0xa5, 0x54, 0xe0, 0x25, 0x6b, 0x33, 0x53, 0x82, 0xe4, 0xf3, 0x04,
0xad, 0xc5, 0x65, 0x41, 0x85, 0xf7, 0x5d, 0x56, 0x7d, 0x53, 0xa6, 0x57, 0x28, 0x2e, 0xae, 0xcd,
0x7f, 0x22, 0x5d, 0x91, 0xad, 0xe4, 0x79, 0x9f, 0x67, 0xc8, 0x11, 0xee, 0x31, 0xbe, 0x86, 0xba,
0x22, 0xc5, 0xf0, 0x46, 0xc4, 0x1e, 0x87, 0x37, 0x48, 0x39, 0x94, 0x80, 0x07, 0x29, 0xf8, 0xc9,
0x70, 0x24, 0xda, 0xda, 0x61, 0xb3, 0x58, 0xc3, 0x3e, 0x52, 0x42, 0x9e, 0x5d, 0x2b, 0x66, 0x2b,
0x21, 0x3f, 0x40, 0x2a, 0x22, 0xfc, 0x45, 0x65, 0x9c, 0x53, 0x41, 0x95, 0x06, 0x92, 0xca, 0x69,
0x90, 0xf4, 0xdf, 0x2a, 0x2c, 0x64, 0x5d, 0x72, 0x3b, 0x87, 0x91, 0xba, 0x89, 0x39, 0xb3, 0xf3,
0x69, 0x99, 0xed, 0x7a, 0xbc, 0x89, 0xcb, 0x19, 0x8b, 0xa8, 0x7d, 0x2e, 0x37, 0x36, 0xd3, 0x67,
0xe0, 0x8d, 0x46, 0x98, 0x10, 0xf8, 0xca, 0xb0, 0x48, 0x93, 0x4d, 0xa6, 0xbd, 0x15, 0x1c, 0xb2,
0x6d, 0xc3, 0xc8, 0xfc, 0x9b, 0x5c, 0x85, 0x06, 0x2b, 0x2b, 0x10, 0xd5, 0x30, 0x88, 0x25, 0x21,
0x3f, 0x48, 0x12, 0x02, 0x2c, 0x04, 0xf6, 0x33, 0xd4, 0x3d, 0x8e, 0x81, 0x4e, 0x72, 0xfd, 0x10,
0x27, 0x0f, 0x93, 0xb3, 0xd1, 0x61, 0xb3, 0x23, 0x76, 0x39, 0x10, 0x17, 0x18, 0x2d, 0x25, 0xc8,
0xef, 0x0c, 0x4c, 0xc9, 0x25, 0x9f, 0xaa, 0x94, 0x2a, 0x8a, 0x88, 0x0f, 0xf2, 0xab, 0x3f, 0x05,
0x38, 0x3d, 0x4c, 0xd7, 0x21, 0x75, 0x3e, 0xc4, 0x8d, 0x89, 0x43, 0x9c, 0x8e, 0x9b, 0xae, 0x00,
0xf8, 0x81, 0x73, 0xec, 0x0c, 0xe9, 0x21, 0xb5, 0x3b, 0xc0, 0xa1, 0xbd, 0x46, 0xe1, 0x97, 0x47,
0xf2, 0xfa, 0xa1, 0x1f, 0x78, 0x5e, 0x74, 0x10, 0x76, 0x1a, 0xe2, 0xca, 0x21, 0x26, 0x9b, 0x9c,
0xca, 0x6e, 0x08, 0x18, 0x44, 0xe5, 0x77, 0x1a, 0xf3, 0xa2, 0x2e, 0xc6, 0x36, 0xbf, 0xd2, 0x58,
0x62, 0x07, 0x92, 0xed, 0xb8, 0x9d, 0x26, 0xef, 0x29, 0x1a, 0x2c, 0xdf, 0xf1, 0x8f, 0xbe, 0xe7,
0x22, 0xec, 0x6e, 0x71, 0x56, 0x9d, 0x53, 0x9e, 0x20, 0x81, 0x45, 0x6d, 0x14, 0x9d, 0x74, 0x16,
0x38, 0x9d, 0x7d, 0x22, 0xbe, 0x95, 0x45, 0x5f, 0x9b, 0x7b, 0xff, 0xbd, 0x09, 0x9b, 0xf8, 0x9d,
0x41, 0x78, 0x7f, 0x2b, 0xc1, 0xf2, 0x16, 0x3f, 0x46, 0xb5, 0x04, 0x73, 0x06, 0x84, 0x42, 0x6e,
0x29, 0x28, 0x98, 0x85, 0x13, 0xd9, 0xc5, 0x4a, 0x39, 0xf2, 0x05, 0xb4, 0xe2, 0x31, 0x65, 0xcf,
0xca, 0x77, 0x81, 0xc8, 0x66, 0xa8, 0x37, 0x8d, 0x4f, 0x61, 0x25, 0xa7, 0xb3, 0x3c, 0x7a, 0xaf,
0x61, 0x22, 0x54, 0xb7, 0x5b, 0x4a, 0xe5, 0x86, 0xa2, 0x21, 0xa6, 0xba, 0xc7, 0xa0, 0xa4, 0x15,
0x44, 0xb9, 0x05, 0x4f, 0xd1, 0x97, 0xe3, 0xc8, 0x74, 0x5f, 0x09, 0xf5, 0x7a, 0xb0, 0xc4, 0x10,
0xe6, 0x5b, 0x0c, 0xca, 0xf2, 0x00, 0x5b, 0xb6, 0x37, 0x8e, 0x64, 0xfe, 0x8b, 0x9b, 0xc6, 0x8a,
0x40, 0xbd, 0xf9, 0xd9, 0x3e, 0x81, 0x65, 0x01, 0x3a, 0xdf, 0x66, 0x11, 0x17, 0x63, 0xc8, 0x9b,
0x1f, 0xf7, 0x8f, 0x65, 0x2d, 0x11, 0x4e, 0xa8, 0x92, 0x6f, 0xa6, 0xab, 0xe4, 0x95, 0xbc, 0xc3,
0x53, 0x95, 0x5b, 0x3e, 0x8c, 0x2a, 0x05, 0x61, 0x64, 0xe6, 0x4a, 0xe9, 0x19, 0x9e, 0x32, 0x3e,
0xca, 0x8f, 0xfe, 0x03, 0x56, 0xd2, 0xbb, 0xa2, 0x92, 0x56, 0x53, 0x2b, 0xf4, 0x7e, 0x2b, 0x53,
0x49, 0x77, 0x26, 0xa9, 0xa9, 0x0a, 0xe9, 0x3f, 0xcc, 0x40, 0x5d, 0xf1, 0x72, 0x36, 0xcd, 0x1b,
0xa9, 0x5c, 0x60, 0x24, 0xfd, 0x48, 0xaa, 0xbc, 0xcd, 0x91, 0x34, 0xf3, 0x5d, 0x47, 0x12, 0x16,
0x7f, 0xfc, 0xa3, 0x1f, 0xd0, 0x03, 0x79, 0xc4, 0xd4, 0x38, 0xc1, 0xa4, 0x07, 0x89, 0xe3, 0x67,
0xa7, 0x72, 0x7c, 0xba, 0x64, 0x9f, 0xcb, 0x96, 0xec, 0xb7, 0x33, 0xe7, 0xcb, 0x95, 0xfc, 0x70,
0x85, 0x27, 0xcb, 0x4e, 0xd1, 0xc9, 0xf2, 0x7e, 0x41, 0xe7, 0x77, 0x16, 0xda, 0x3e, 0x12, 0xc0,
0x41, 0x8f, 0x2a, 0x99, 0xbd, 0x36, 0xd0, 0x64, 0x8a, 0x2a, 0xd1, 0x03, 0xc9, 0x2f, 0xcd, 0xd4,
0xa4, 0x58, 0x2a, 0x48, 0xd9, 0x3f, 0xb9, 0x62, 0x9a, 0x22, 0x15, 0xfc, 0x49, 0x2f, 0x7c, 0x26,
0xdc, 0xc5, 0xdc, 0xce, 0x61, 0xbc, 0xe9, 0xa2, 0xee, 0x66, 0x1a, 0xe2, 0x9d, 0x2d, 0x5c, 0x72,
0x08, 0x8f, 0x9f, 0xc4, 0x98, 0x79, 0x05, 0x5b, 0x80, 0x84, 0xba, 0xa4, 0x20, 0x1b, 0xab, 0xa3,
0x03, 0xc7, 0x75, 0xc2, 0x23, 0xc1, 0x9f, 0xe5, 0x7c, 0x88, 0x49, 0x9b, 0xfc, 0x29, 0x85, 0xbe,
0x41, 0x48, 0x32, 0xf0, 0x6c, 0xca, 0x83, 0xb1, 0x6a, 0xd6, 0x18, 0x61, 0x0b, 0xdb, 0xc9, 0x06,
0xa9, 0x9d, 0x69, 0x83, 0xd4, 0x33, 0x1b, 0x64, 0x19, 0x66, 0x51, 0xdf, 0xd0, 0x73, 0x79, 0x8d,
0x52, 0x37, 0x65, 0x4b, 0x2b, 0xa5, 0x1a, 0x93, 0x4a, 0xa9, 0x53, 0xae, 0x74, 0x32, 0xa5, 0xd4,
0xfc, 0xa4, 0x52, 0x6a, 0x9a, 0x1b, 0x1d, 0xad, 0xfa, 0x6b, 0x9e, 0x56, 0xfd, 0xfd, 0x98, 0xdb,
0xe3, 0x21, 0x9e, 0xee, 0xd9, 0x80, 0x96, 0xfb, 0xe3, 0x56, 0xe6, 0xe2, 0xa7, 0x33, 0xc9, 0x0a,
0xea, 0xde, 0xe7, 0x15, 0x34, 0x76, 0xde, 0xa0, 0xfb, 0xa6, 0x3f, 0x8d, 0x51, 0xd5, 0xc1, 0xc8,
0x96, 0x10, 0x8e, 0x7d, 0xc6, 0x55, 0x5e, 0x25, 0xa9, 0xf2, 0x54, 0xb1, 0xc8, 0xc2, 0x74, 0x5e,
0x16, 0x8b, 0xc6, 0x7d, 0x98, 0x17, 0x73, 0x49, 0x6d, 0x97, 0x99, 0xb6, 0x36, 0x3b, 0xd6, 0x4b,
0x5c, 0x4c, 0xb6, 0x24, 0x9d, 0x06, 0x01, 0x5f, 0xbb, 0xa0, 0x63, 0xcb, 0xb8, 0x03, 0x0d, 0x1e,
0x6f, 0xf2, 0xdc, 0xbd, 0xae, 0xdf, 0x06, 0x9c, 0x16, 0x94, 0x0c, 0x01, 0xb1, 0x84, 0xc2, 0xe9,
0x6a, 0xf7, 0x7f, 0x9c, 0x39, 0xa2, 0x96, 0xd2, 0xfd, 0x33, 0xc7, 0xd3, 0x6b, 0xa8, 0x72, 0x72,
0x6e, 0xf7, 0x5f, 0x62, 0xc8, 0xd4, 0xf7, 0xfa, 0x91, 0x75, 0xa8, 0x5e, 0x46, 0x19, 0xe1, 0x29,
0xb6, 0xf9, 0xc3, 0x2e, 0x63, 0xda, 0x0e, 0x4e, 0x1c, 0x85, 0x12, 0xc6, 0x34, 0x18, 0x6d, 0x5b,
0x90, 0x18, 0x94, 0x09, 0x9d, 0xdf, 0x89, 0xa3, 0x67, 0xc6, 0xe4, 0xdf, 0x58, 0xbf, 0x11, 0x5d,
0x5f, 0x69, 0x2e, 0x0c, 0x4d, 0xbe, 0x9c, 0x38, 0xf1, 0xb5, 0xd2, 0x0a, 0x9b, 0x92, 0x8b, 0x66,
0x26, 0xc2, 0x02, 0xa9, 0x64, 0x37, 0xbd, 0xb5, 0x3e, 0x81, 0xf3, 0xa9, 0xfe, 0xea, 0x1d, 0x22,
0x35, 0x40, 0x76, 0x76, 0xd9, 0xf9, 0xdf, 0x25, 0x80, 0xcd, 0x71, 0x74, 0x24, 0x41, 0x62, 0x17,
0x6a, 0x0c, 0xdd, 0x6a, 0x50, 0x53, 0xb5, 0x19, 0xcf, 0xb7, 0xc2, 0x10, 0x11, 0x5a, 0x7c, 0x9a,
0xab, 0x36, 0x07, 0x78, 0x63, 0xf5, 0xb0, 0xca, 0xbf, 0xd9, 0xc3, 0xac, 0x78, 0x8d, 0xee, 0x23,
0xc0, 0x45, 0x68, 0x1f, 0xca, 0x1b, 0x8a, 0xa6, 0xa0, 0x6e, 0x0a, 0x22, 0x13, 0x73, 0x6c, 0x8a,
0xaa, 0x45, 0x27, 0xfd, 0xc8, 0x7b, 0x4d, 0x5d, 0x79, 0x4e, 0x37, 0x63, 0xea, 0x53, 0x46, 0x64,
0x62, 0x01, 0x3d, 0x44, 0x2b, 0x07, 0xb1, 0xd8, 0xac, 0x10, 0x8b, 0xa9, 0x5c, 0x8c, 0x3d, 0xe4,
0xb7, 0xf7, 0xc7, 0xc3, 0xa1, 0x58, 0xe4, 0x59, 0x6d, 0x89, 0xc8, 0x4b, 0xac, 0x23, 0x7b, 0xdf,
0x90, 0x98, 0x48, 0x2e, 0xee, 0xfb, 0x17, 0xfd, 0xe7, 0x61, 0x51, 0x53, 0x54, 0xd6, 0xab, 0x18,
0x0b, 0xa2, 0x94, 0x7d, 0x3b, 0xfd, 0x8d, 0x0b, 0x70, 0x3e, 0xd5, 0x5f, 0x0c, 0xbb, 0x76, 0x19,
0x6a, 0xf1, 0xa3, 0x3d, 0x99, 0x83, 0xca, 0xd3, 0xad, 0xfd, 0xf6, 0x39, 0xf6, 0xf1, 0x6c, 0x7b,
0xbf, 0x5d, 0x5a, 0x5b, 0x83, 0x85, 0xcc, 0x2d, 0x25, 0xa9, 0x43, 0xd5, 0xdc, 0xd9, 0xdc, 0x7e,
0x81, 0x62, 0xf3, 0x50, 0xdb, 0x7b, 0xf2, 0x54, 0xb4, 0x4a, 0x6b, 0x5b, 0xd0, 0x4a, 0x1f, 0x77,
0xa4, 0x01, 0x73, 0x5b, 0xc8, 0x7d, 0xba, 0xb3, 0x8d, 0xc2, 0xd8, 0x30, 0x9f, 0xed, 0xed, 0xed,
0xee, 0x3d, 0x68, 0x97, 0x08, 0xc0, 0xec, 0xce, 0xd7, 0xbb, 0x8c, 0x51, 0x66, 0x8c, 0x67, 0x7b,
0x0f, 0xf7, 0x9e, 0xfc, 0x66, 0xaf, 0x5d, 0xd9, 0xf8, 0x67, 0x0d, 0x5a, 0xa6, 0x58, 0x42, 0x0f,
0x63, 0xc1, 0x41, 0xe4, 0x79, 0x1f, 0xe6, 0xe2, 0x3f, 0x22, 0x92, 0x83, 0x35, 0xfd, 0xfb, 0x46,
0xb7, 0x93, 0x67, 0x48, 0xb3, 0x9d, 0x23, 0xfb, 0xd0, 0x4c, 0x3d, 0xc7, 0x91, 0x04, 0xa9, 0x16,
0xbd, 0xf8, 0x75, 0xaf, 0x4c, 0x62, 0xab, 0x11, 0x7b, 0xd0, 0x4a, 0x3f, 0xb1, 0x91, 0xa4, 0x4f,
0xe1, 0xd3, 0x5d, 0xf7, 0xea, 0x44, 0xbe, 0x1a, 0xf4, 0x05, 0xb4, 0xb3, 0x8f, 0x6b, 0x24, 0xb9,
0x18, 0x9b, 0xf0, 0x70, 0xd7, 0xbd, 0x76, 0x8a, 0x84, 0x3e, 0x74, 0xee, 0x19, 0x6a, 0x75, 0xf2,
0x43, 0x42, 0x6e, 0xe8, 0x49, 0xaf, 0x13, 0xc2, 0x14, 0xe9, 0x9b, 0x61, 0xa2, 0x3f, 0xfe, 0x14,
0xdc, 0xcc, 0x6b, 0xa6, 0x28, 0xbe, 0x52, 0xc6, 0x41, 0x9f, 0x63, 0xa5, 0x96, 0x06, 0xbd, 0x24,
0xe9, 0x55, 0x0c, 0xe1, 0xbb, 0xab, 0x93, 0x05, 0xd2, 0x7e, 0xd3, 0x21, 0x6d, 0xca, 0x6f, 0x05,
0x38, 0x39, 0xe5, 0xb7, 0x42, 0x2c, 0xcc, 0xc3, 0x2b, 0x05, 0x5c, 0xb5, 0xf0, 0x2a, 0x42, 0xc9,
0xdd, 0x2b, 0x93, 0xd8, 0xfa, 0xf2, 0x33, 0xa0, 0x55, 0x5b, 0x7e, 0x31, 0x16, 0xee, 0xae, 0x4e,
0x16, 0xc8, 0xfa, 0x2a, 0x29, 0xc6, 0x33, 0xbe, 0xca, 0x61, 0xbf, 0x8c, 0xaf, 0xf2, 0x55, 0xbc,
0xf4, 0x55, 0xa6, 0xaa, 0xbe, 0x3a, 0xb1, 0x54, 0xc9, 0xfb, 0xaa, 0xb8, 0xfa, 0xc1, 0x71, 0xef,
0xc2, 0x0c, 0xab, 0x30, 0x48, 0x72, 0x96, 0x6b, 0xc5, 0x4d, 0xf7, 0x42, 0x86, 0x1a, 0x77, 0xbb,
0x5e, 0xba, 0x55, 0xda, 0xf8, 0x7b, 0x19, 0xe6, 0x45, 0xfa, 0x93, 0x19, 0xe4, 0x01, 0x40, 0x72,
0x08, 0x93, 0x6e, 0x6a, 0x51, 0xa9, 0x4a, 0xa2, 0x7b, 0xa9, 0x90, 0xa7, 0x94, 0xfa, 0x4a, 0x96,
0x2d, 0x72, 0xa1, 0x97, 0x32, 0xd9, 0x36, 0xb5, 0xc8, 0xcb, 0xc5, 0x4c, 0x35, 0xd6, 0x36, 0xd4,
0x55, 0x92, 0x27, 0xda, 0xd9, 0x90, 0x39, 0xa1, 0xba, 0xdd, 0x22, 0x96, 0xae, 0x91, 0x96, 0xd5,
0x35, 0x8d, 0xf2, 0x67, 0x85, 0xa6, 0x51, 0xc1, 0x41, 0x60, 0x9c, 0xfb, 0x7f, 0x00, 0x00, 0x00,
0xff, 0xff, 0x22, 0x65, 0x58, 0x85, 0x2a, 0x27, 0x00, 0x00,
0xf1, 0x17, 0x08, 0x82, 0x04, 0x1a, 0x04, 0x08, 0x8e, 0x28, 0x12, 0x82, 0x64, 0x89, 0x5a, 0x5b,
0xff, 0xbf, 0x44, 0x5b, 0x2c, 0x85, 0x49, 0x49, 0x91, 0x6c, 0xcb, 0xa6, 0x49, 0x5a, 0x45, 0x4b,
0xa2, 0x98, 0x85, 0xa4, 0x58, 0x27, 0xd4, 0x0a, 0x3b, 0x24, 0x57, 0x02, 0x76, 0xd7, 0xbb, 0x0b,
0x46, 0xc8, 0x35, 0x97, 0x1c, 0x72, 0xc9, 0x1b, 0xe4, 0xe0, 0xaa, 0x9c, 0x72, 0x49, 0x55, 0x2e,
0xb9, 0xe5, 0x9c, 0xca, 0x83, 0xe4, 0x09, 0x92, 0x63, 0x7a, 0x3e, 0x76, 0x76, 0xf6, 0x03, 0x34,
0xa8, 0x54, 0xc5, 0xba, 0xed, 0x74, 0xf7, 0xcc, 0xf4, 0x74, 0xf7, 0xf4, 0xf4, 0x6f, 0x66, 0xa1,
0x66, 0xf9, 0xce, 0x86, 0x1f, 0x78, 0x91, 0x47, 0xe6, 0x83, 0x91, 0x1b, 0x39, 0x43, 0x6a, 0xac,
0x43, 0xf3, 0x05, 0x0d, 0x42, 0xc7, 0x73, 0x4d, 0xfa, 0xdd, 0x88, 0x86, 0x11, 0x69, 0xc3, 0xfc,
0x89, 0xa0, 0xb4, 0x4b, 0x6b, 0xa5, 0x1b, 0x35, 0x33, 0x6e, 0x1a, 0x7f, 0x2c, 0xc1, 0xa2, 0x12,
0x0e, 0x7d, 0xcf, 0x0d, 0xe9, 0x64, 0x69, 0x72, 0x0d, 0x16, 0xe4, 0x24, 0x3d, 0xd7, 0x1a, 0xd2,
0xf6, 0x0c, 0x67, 0xd7, 0x25, 0x6d, 0x1f, 0x49, 0xe4, 0xff, 0x61, 0x31, 0x16, 0x89, 0x07, 0x29,
0x73, 0xa9, 0xa6, 0x24, 0xcb, 0xd9, 0xc8, 0x06, 0x9c, 0x8f, 0x05, 0x71, 0x0d, 0x4a, 0x78, 0x96,
0x0b, 0x2f, 0x49, 0xd6, 0x96, 0xef, 0x48, 0x79, 0x63, 0x0b, 0x6a, 0x3b, 0xfb, 0xdd, 0xa7, 0x7e,
0xc4, 0x3a, 0xa3, 0x8a, 0x21, 0x0d, 0x58, 0x1f, 0x54, 0xb1, 0xcc, 0x54, 0x94, 0x4d, 0xd2, 0x81,
0x6a, 0x48, 0xad, 0xa0, 0x7f, 0x4c, 0x43, 0x54, 0x8f, 0xb1, 0x54, 0xdb, 0xf8, 0x53, 0x09, 0xea,
0x07, 0x5e, 0x10, 0x3d, 0xb1, 0x7c, 0xdf, 0x71, 0x8f, 0x08, 0x81, 0x59, 0xbe, 0x0c, 0xb1, 0x4a,
0xfe, 0x4d, 0x6e, 0x41, 0x95, 0x9b, 0xb3, 0xef, 0x0d, 0xf8, 0xf2, 0x9a, 0x9b, 0x4b, 0x1b, 0x52,
0x99, 0x8d, 0x03, 0xc9, 0x30, 0x95, 0x08, 0xb9, 0x0e, 0xcd, 0xbe, 0xe7, 0x46, 0x96, 0xe3, 0xd2,
0xa0, 0xe7, 0xe3, 0xd8, 0x7c, 0xb5, 0x15, 0xb3, 0xa1, 0xa8, 0x6c, 0x42, 0x72, 0x09, 0x6a, 0xc7,
0x5e, 0x18, 0x09, 0x89, 0x59, 0x2e, 0x51, 0x65, 0x04, 0xce, 0x5c, 0x85, 0x79, 0xce, 0x74, 0xfc,
0x76, 0x85, 0x6b, 0x32, 0xc7, 0x9a, 0x7b, 0xbe, 0xf1, 0x7d, 0x09, 0x2a, 0x4f, 0x3c, 0x9c, 0xbc,
0x50, 0xd3, 0xf4, 0xd4, 0x56, 0x74, 0x2c, 0xdd, 0xa1, 0x4d, 0x8d, 0xc4, 0x64, 0x6a, 0x26, 0x21,
0x5c, 0x21, 0xa6, 0x66, 0x4c, 0xb4, 0x56, 0x40, 0x2d, 0xdb, 0x73, 0x07, 0x63, 0xae, 0x56, 0xd5,
0x54, 0x6d, 0xe6, 0xc9, 0x90, 0x0e, 0x1c, 0x77, 0xf4, 0xb6, 0x17, 0xd0, 0x81, 0xf5, 0x8a, 0x0e,
0xb8, 0x7a, 0x55, 0xb3, 0x29, 0xc9, 0xa6, 0xa0, 0x1a, 0xaf, 0x61, 0x91, 0xb9, 0x3e, 0xf4, 0xad,
0x3e, 0x95, 0xfe, 0xc1, 0x40, 0xe1, 0x93, 0xba, 0x34, 0xfa, 0x95, 0x17, 0xbc, 0xe1, 0x7a, 0x57,
0xcd, 0x3a, 0xa3, 0xed, 0x0b, 0x12, 0xb9, 0x08, 0x55, 0xa1, 0x97, 0x63, 0x73, 0xc5, 0xab, 0x26,
0xb7, 0xc2, 0x81, 0x63, 0x2b, 0x96, 0xe3, 0xf7, 0xb9, 0xc6, 0x92, 0xb5, 0xe7, 0xf7, 0x8d, 0xdf,
0x94, 0xe0, 0xc2, 0x63, 0x36, 0xf9, 0x81, 0x67, 0x77, 0x2d, 0xd7, 0x7e, 0xe5, 0xbd, 0xdd, 0xf6,
0xdc, 0x43, 0xe7, 0x88, 0x7c, 0x08, 0x8d, 0xfe, 0x51, 0xe0, 0x8d, 0x7c, 0x5c, 0x69, 0x40, 0xdd,
0x48, 0xda, 0x6a, 0x41, 0x10, 0x0f, 0x38, 0x8d, 0xec, 0xc2, 0x92, 0x1b, 0xab, 0xda, 0xf3, 0xb8,
0xae, 0x21, 0x9f, 0xbd, 0xbe, 0xd9, 0x56, 0x6e, 0xce, 0x2c, 0xc6, 0x6c, 0xb9, 0x69, 0x42, 0x68,
0x04, 0x40, 0x92, 0xf9, 0x9f, 0xd0, 0xc8, 0xb2, 0xad, 0xc8, 0x2a, 0x74, 0x52, 0x0b, 0xca, 0x23,
0xb9, 0xc0, 0x9a, 0xc9, 0x3e, 0xc9, 0x65, 0xa8, 0xa9, 0xf1, 0xa4, 0x3f, 0x12, 0x02, 0x0b, 0x6c,
0x2b, 0x8a, 0xe8, 0xd0, 0x17, 0x61, 0xd2, 0x30, 0xe3, 0xa6, 0xf1, 0xd7, 0x59, 0x68, 0xe5, 0x16,
0x7d, 0x17, 0xaa, 0x43, 0x39, 0x3d, 0x9f, 0xb6, 0xbe, 0x79, 0x29, 0x89, 0xd6, 0x9c, 0x86, 0xa6,
0x12, 0x66, 0x8e, 0x67, 0x26, 0xd5, 0x76, 0xb1, 0x6a, 0x33, 0x4b, 0x0e, 0xbc, 0xa3, 0x9e, 0xed,
0x04, 0xb4, 0x1f, 0x79, 0xc1, 0x58, 0x6a, 0xb9, 0x80, 0xc4, 0x9d, 0x98, 0x46, 0x7e, 0x0a, 0x75,
0xdb, 0x0d, 0x95, 0x0d, 0x67, 0xf9, 0xe4, 0x44, 0x4d, 0xae, 0xb6, 0xaa, 0x09, 0x28, 0x26, 0xed,
0x46, 0xee, 0x41, 0x83, 0xed, 0x80, 0xde, 0x50, 0x6c, 0xc0, 0x10, 0x03, 0xaa, 0x8c, 0xdd, 0x96,
0x35, 0x9d, 0xd5, 0xee, 0x34, 0x17, 0xfc, 0xa4, 0x11, 0x92, 0xcf, 0x61, 0x8e, 0x47, 0x5b, 0xd8,
0x9e, 0xe3, 0x7d, 0xae, 0x17, 0xac, 0x53, 0x18, 0x65, 0xe3, 0x31, 0x97, 0xdb, 0x75, 0xa3, 0x60,
0x6c, 0xca, 0x4e, 0xe4, 0x31, 0xd4, 0x2d, 0xd7, 0xf5, 0x22, 0x4b, 0xa8, 0x3b, 0xcf, 0xc7, 0x58,
0x9f, 0x3c, 0xc6, 0x56, 0x22, 0x2c, 0x06, 0xd2, 0xbb, 0x93, 0x9f, 0x41, 0x85, 0xef, 0x80, 0x76,
0x95, 0x2f, 0xfb, 0x8a, 0x1a, 0xa7, 0x30, 0x34, 0x4d, 0x21, 0xdc, 0xb9, 0x07, 0x75, 0x4d, 0x35,
0x16, 0x1a, 0x6f, 0xe8, 0x58, 0x46, 0x0b, 0xfb, 0x24, 0xcb, 0x50, 0x39, 0xb1, 0x06, 0xa3, 0xd8,
0x23, 0xa2, 0x71, 0x7f, 0xe6, 0xe7, 0xa5, 0xce, 0x03, 0x68, 0x65, 0x35, 0x3a, 0x4b, 0x7f, 0x63,
0x0f, 0x96, 0xcd, 0x91, 0x9b, 0x28, 0x16, 0x1f, 0x0c, 0x3f, 0x81, 0xb9, 0x3e, 0xd7, 0x51, 0x46,
0xcf, 0xc5, 0x89, 0x16, 0x31, 0xa5, 0xa0, 0xf1, 0x39, 0x5c, 0xc8, 0x0c, 0x25, 0x8f, 0x8d, 0x8f,
0xa0, 0xe9, 0x7b, 0x76, 0x2f, 0x14, 0xe4, 0x1e, 0x46, 0xbd, 0xdc, 0x81, 0xbe, 0x92, 0xdd, 0xb3,
0x59, 0xf7, 0x6e, 0xe4, 0xf9, 0x79, 0x55, 0xa6, 0xeb, 0xde, 0x86, 0x95, 0x6c, 0x77, 0x31, 0xbd,
0xf1, 0x05, 0xac, 0x9a, 0x74, 0xe8, 0x9d, 0xd0, 0x77, 0x1d, 0xba, 0x03, 0xed, 0xfc, 0x00, 0xc9,
0xe0, 0x09, 0xb5, 0x8b, 0x6e, 0x18, 0x85, 0x67, 0x1b, 0xfc, 0xa6, 0x3e, 0x80, 0x4c, 0x81, 0x62,
0x1c, 0xd2, 0x84, 0x19, 0xcc, 0xfc, 0xa2, 0x13, 0x7e, 0x19, 0x2f, 0xa1, 0xb6, 0xaf, 0xe7, 0x03,
0x3d, 0x87, 0xe2, 0x41, 0x27, 0x9b, 0x64, 0x13, 0xe6, 0xa7, 0x4d, 0x60, 0xb1, 0xa0, 0xf1, 0x28,
0x97, 0x3c, 0xa5, 0x0e, 0x9b, 0x00, 0x2a, 0x07, 0x85, 0x32, 0x16, 0x48, 0x7e, 0x3c, 0x53, 0x93,
0x32, 0xbe, 0x4f, 0x25, 0x24, 0x6d, 0x31, 0xb6, 0x5a, 0x8c, 0x9d, 0x4a, 0x50, 0x33, 0x67, 0x49,
0x50, 0x1b, 0x50, 0x09, 0x71, 0x48, 0x91, 0x22, 0x9b, 0xda, 0xe2, 0x64, 0xaf, 0xaf, 0xc4, 0x94,
0xd4, 0x14, 0x62, 0xe4, 0x03, 0x80, 0x3e, 0x1e, 0x5d, 0x11, 0xb5, 0x7b, 0x96, 0xc8, 0x9d, 0x65,
0xb3, 0x26, 0x29, 0x5b, 0x11, 0xb9, 0x9f, 0xd8, 0xb1, 0xc2, 0xd5, 0x58, 0x2b, 0x50, 0x23, 0xe5,
0x97, 0xc4, 0xd2, 0x6a, 0xb7, 0xcf, 0x9d, 0xbe, 0xdb, 0x65, 0x3f, 0x21, 0xac, 0x25, 0xac, 0xf9,
0x89, 0x09, 0x4b, 0xf4, 0x98, 0x26, 0x61, 0x55, 0x27, 0x26, 0x2c, 0x39, 0xc6, 0xa9, 0x09, 0xeb,
0xc7, 0x4c, 0x3d, 0x4f, 0xa0, 0x9d, 0xdf, 0x3a, 0x32, 0x65, 0x60, 0xfa, 0x09, 0x39, 0xe5, 0x94,
0xf4, 0x23, 0xbb, 0x48, 0x41, 0xe3, 0x9f, 0x25, 0x3d, 0xea, 0xbe, 0x76, 0x06, 0x11, 0x0d, 0x72,
0x51, 0xa7, 0x82, 0x67, 0x66, 0xba, 0xe0, 0xe9, 0x42, 0x93, 0x9b, 0xbd, 0x87, 0x95, 0x0d, 0x3f,
0xdf, 0x30, 0xea, 0x98, 0xbd, 0x3f, 0x29, 0xd0, 0x47, 0x4c, 0x29, 0x7c, 0xd6, 0x95, 0xe2, 0xc2,
0xe2, 0x8d, 0x81, 0x4e, 0xeb, 0x7c, 0x09, 0x24, 0x2f, 0x74, 0x26, 0xd3, 0x7d, 0xc3, 0xb6, 0x2b,
0x2b, 0x12, 0x0b, 0xd2, 0xf6, 0x21, 0x57, 0xe3, 0x14, 0xbb, 0x09, 0x3d, 0x4d, 0x29, 0x68, 0xfc,
0xa1, 0x0c, 0x90, 0x30, 0xdf, 0xdb, 0x7d, 0x7a, 0x57, 0xed, 0x1a, 0x51, 0x1a, 0x5c, 0x2d, 0xd0,
0xa2, 0x70, 0xbf, 0x7c, 0x9d, 0xde, 0x2f, 0xa2, 0x48, 0xf8, 0xa8, 0xa8, 0xf7, 0x7b, 0xbb, 0x53,
0xb6, 0x61, 0x25, 0xeb, 0x6e, 0xb9, 0x4f, 0x6e, 0x42, 0xc5, 0xc1, 0x2a, 0x50, 0x80, 0x9d, 0xfa,
0xe6, 0xf9, 0x82, 0x65, 0x99, 0x42, 0xc2, 0xb8, 0x06, 0xb5, 0xbd, 0xa1, 0x75, 0x44, 0xbb, 0x3e,
0xed, 0xb3, 0xb9, 0x1c, 0xd6, 0x90, 0xf3, 0x8b, 0x86, 0xb1, 0x09, 0xd5, 0x47, 0x74, 0xfc, 0x82,
0xcd, 0x3b, 0xad, 0x7e, 0xc6, 0xdf, 0x4b, 0xb0, 0xca, 0xd3, 0xdd, 0x76, 0x0c, 0x2e, 0x50, 0x39,
0x6f, 0x14, 0xe0, 0x41, 0xc0, 0x5d, 0xea, 0x8f, 0x7a, 0x3e, 0x0d, 0x1c, 0x4f, 0xc4, 0x14, 0x73,
0xa9, 0x3f, 0x3a, 0xe0, 0x04, 0x06, 0x40, 0x18, 0xfb, 0xbb, 0x91, 0x27, 0x63, 0xab, 0x6c, 0x56,
0x91, 0xf0, 0x0b, 0xd6, 0x8e, 0xfb, 0x86, 0xc7, 0x58, 0x9f, 0x87, 0x3c, 0x86, 0x44, 0xdf, 0x2e,
0x27, 0x60, 0xa0, 0x5f, 0x18, 0xe2, 0x99, 0x1c, 0x8c, 0x7b, 0x03, 0x67, 0xe8, 0x20, 0x22, 0x70,
0x7b, 0xaf, 0xc6, 0x11, 0x0d, 0x65, 0xe0, 0x10, 0xc1, 0x7c, 0xcc, 0x78, 0x7b, 0xee, 0x57, 0x8c,
0x43, 0x0c, 0x68, 0x78, 0xde, 0xb0, 0x17, 0xf6, 0xbd, 0x00, 0x91, 0xa5, 0xfd, 0x9a, 0xe7, 0xfb,
0xb2, 0x59, 0x47, 0x62, 0x97, 0xd1, 0xb6, 0xec, 0xd7, 0x86, 0x05, 0x8d, 0xee, 0x2e, 0x5f, 0x8e,
0xc4, 0x2b, 0x58, 0xba, 0x8f, 0x42, 0xb9, 0x9d, 0xb0, 0x74, 0x67, 0xdf, 0x8c, 0x16, 0x78, 0x83,
0xd8, 0x0e, 0xfc, 0x9b, 0xd1, 0xa2, 0xb1, 0x1f, 0xd7, 0xed, 0xfc, 0x9b, 0x19, 0x6c, 0x40, 0x4f,
0x10, 0x1d, 0x09, 0xe8, 0x2a, 0x1a, 0x86, 0x0d, 0xb0, 0x6d, 0xf9, 0xd6, 0x2b, 0x67, 0xe0, 0x44,
0x63, 0x74, 0x60, 0xcb, 0xb2, 0xed, 0x5e, 0x3f, 0xa6, 0x38, 0x34, 0x06, 0xae, 0x8b, 0x48, 0xdf,
0xd6, 0xc8, 0xe4, 0x63, 0x58, 0xb2, 0x03, 0xcf, 0x4f, 0xcb, 0x0a, 0x24, 0xdb, 0x62, 0x0c, 0x5d,
0xd8, 0xf8, 0x77, 0x09, 0x96, 0xd3, 0x6e, 0x91, 0xc0, 0xe0, 0x01, 0xd4, 0x82, 0xd8, 0x41, 0x32,
0x49, 0xac, 0xa5, 0xcf, 0xad, 0xbc, 0x23, 0xcd, 0xa4, 0x0b, 0xee, 0xc3, 0x85, 0x8c, 0x02, 0xa5,
0x54, 0xe0, 0x25, 0x6b, 0x33, 0x53, 0x82, 0xe4, 0x8b, 0x04, 0x35, 0xc6, 0xe5, 0x49, 0x99, 0xf7,
0x5d, 0x51, 0x7d, 0x53, 0xa6, 0x57, 0x68, 0x32, 0xc6, 0x08, 0xff, 0x27, 0x5d, 0x91, 0x45, 0x14,
0xbc, 0xcf, 0x73, 0xe4, 0x08, 0xf7, 0x18, 0xdf, 0x42, 0x4d, 0x91, 0x62, 0x98, 0x25, 0x62, 0x8f,
0xc3, 0x2c, 0xa4, 0x1c, 0x49, 0xe0, 0x85, 0x14, 0xfc, 0x64, 0x78, 0x16, 0x6d, 0xed, 0xb0, 0x59,
0xac, 0x41, 0x0f, 0x29, 0x21, 0xcf, 0xf2, 0x65, 0xb3, 0x99, 0x90, 0x1f, 0x22, 0xd5, 0xd8, 0x82,
0x25, 0x65, 0x9c, 0x53, 0xc1, 0x9d, 0x06, 0xd6, 0x66, 0xd2, 0x60, 0xed, 0x5f, 0x15, 0x58, 0xcc,
0xba, 0xe4, 0x4e, 0x0e, 0xab, 0x75, 0x12, 0x73, 0x66, 0xe7, 0xd3, 0x32, 0xec, 0x8d, 0x78, 0x13,
0xcf, 0x64, 0x2c, 0xa2, 0xf6, 0xb9, 0xdc, 0xd8, 0x4c, 0x9f, 0xbe, 0x37, 0x1c, 0x62, 0x42, 0xe0,
0x2b, 0xc3, 0x62, 0x51, 0x36, 0x99, 0xf6, 0x56, 0x70, 0xc4, 0xb6, 0x0d, 0x23, 0xf3, 0x6f, 0x72,
0x15, 0xea, 0xac, 0xbc, 0x41, 0x74, 0xc5, 0xa0, 0x9e, 0xbc, 0x7a, 0x00, 0x49, 0x42, 0xa0, 0x47,
0xae, 0xc3, 0x2c, 0x75, 0x4f, 0xe2, 0x5c, 0x9a, 0x5c, 0x83, 0xc4, 0xc9, 0xc3, 0xe4, 0x6c, 0x74,
0xd8, 0xdc, 0x90, 0x5d, 0x52, 0xc4, 0x85, 0x4e, 0x53, 0x09, 0xf2, 0xbb, 0x0b, 0x53, 0x72, 0xc9,
0x67, 0x2a, 0xb5, 0x57, 0x33, 0xc9, 0x39, 0x63, 0xa9, 0xc2, 0xfc, 0xfe, 0x28, 0x9d, 0xdf, 0x6b,
0x7c, 0x88, 0x9b, 0x13, 0x87, 0x38, 0x1d, 0xbf, 0x5d, 0x01, 0xf0, 0x03, 0xe7, 0xc4, 0x19, 0xd0,
0x23, 0x6a, 0xb7, 0x81, 0x5f, 0x31, 0x68, 0x14, 0x7e, 0x89, 0x25, 0xaf, 0x41, 0x7a, 0x81, 0xe7,
0x45, 0x87, 0x61, 0xbb, 0x2e, 0xae, 0x3e, 0x62, 0xb2, 0xc9, 0xa9, 0xec, 0xa6, 0x82, 0x41, 0x65,
0x7e, 0xb7, 0xb2, 0x20, 0xea, 0x73, 0x6c, 0xf3, 0xab, 0x95, 0x65, 0x76, 0x30, 0xda, 0x8e, 0xdb,
0x6e, 0xf0, 0x9e, 0xa2, 0xc1, 0xf2, 0x1d, 0xff, 0xe8, 0x79, 0x2e, 0xc2, 0xff, 0x26, 0x67, 0xd5,
0x38, 0xe5, 0x29, 0x12, 0x58, 0xd4, 0x46, 0xd1, 0xb8, 0xbd, 0xc8, 0xe9, 0xec, 0x13, 0x71, 0xb6,
0x2c, 0x3e, 0x5b, 0xdc, 0xfb, 0x1f, 0x4c, 0xd8, 0xc4, 0xef, 0x0d, 0xd2, 0xfc, 0x73, 0x09, 0x56,
0xb6, 0xf9, 0x71, 0xae, 0x25, 0x98, 0x33, 0x20, 0x25, 0x72, 0x5b, 0x41, 0xd2, 0x2c, 0xac, 0xc9,
0x2e, 0x56, 0xca, 0x91, 0x2f, 0xa1, 0x19, 0x8f, 0x29, 0x7b, 0x96, 0x7f, 0x08, 0xcc, 0x36, 0x42,
0xbd, 0x69, 0x7c, 0x06, 0xab, 0x39, 0x9d, 0xe5, 0xd1, 0x7b, 0x0d, 0x13, 0xa1, 0xba, 0x65, 0x53,
0x2a, 0xd7, 0x15, 0x0d, 0xb1, 0xdd, 0x7d, 0x06, 0x69, 0xad, 0x20, 0xca, 0x2d, 0x78, 0x8a, 0xbe,
0x1c, 0xcf, 0xa6, 0xfb, 0x4a, 0xc8, 0xd9, 0x85, 0x65, 0x86, 0x74, 0xdf, 0x61, 0x50, 0x96, 0x07,
0xd8, 0xb2, 0xbd, 0x51, 0x24, 0xf3, 0x5f, 0xdc, 0x34, 0x56, 0x05, 0xfa, 0xce, 0xcf, 0xf6, 0x29,
0xac, 0x08, 0xf0, 0xfb, 0x2e, 0x8b, 0xb8, 0x18, 0x43, 0xef, 0xfc, 0xb8, 0xbf, 0x9b, 0xd1, 0x12,
0xe1, 0x84, 0x6a, 0xfd, 0x56, 0xba, 0x5a, 0x5f, 0xcd, 0x3b, 0x3c, 0x55, 0x41, 0xe6, 0xc3, 0xa8,
0x5c, 0x10, 0x46, 0x66, 0xae, 0xa4, 0x9f, 0xe5, 0x29, 0xe3, 0xe3, 0xfc, 0xe8, 0xff, 0xc3, 0x8a,
0x7e, 0x4f, 0x54, 0xf4, 0x6a, 0x6a, 0x75, 0x8b, 0x70, 0x3b, 0x53, 0xd1, 0xb7, 0x27, 0xa9, 0xa9,
0x0a, 0xfa, 0xdf, 0xce, 0x42, 0x4d, 0xf1, 0x72, 0x36, 0xcd, 0x1b, 0x69, 0xa6, 0xc0, 0x48, 0xfa,
0x91, 0x54, 0x7e, 0x97, 0x23, 0x69, 0xf6, 0x87, 0x8e, 0x24, 0x2c, 0xfe, 0xf8, 0x47, 0x2f, 0xa0,
0x87, 0xf2, 0x88, 0xa9, 0x72, 0x82, 0x49, 0x0f, 0x13, 0xc7, 0xcf, 0x4d, 0xe5, 0xf8, 0x34, 0x74,
0x98, 0xcf, 0x42, 0x87, 0x3b, 0x99, 0xf3, 0xe5, 0x4a, 0x7e, 0xb8, 0xc2, 0x93, 0x65, 0xb7, 0xe8,
0x64, 0xf9, 0xb0, 0xa0, 0xf3, 0x7b, 0x0b, 0x1c, 0x1e, 0x0b, 0xe0, 0xa0, 0x47, 0x95, 0xcc, 0x5e,
0x9b, 0x68, 0x32, 0x45, 0x95, 0xe8, 0x81, 0xe4, 0x97, 0x66, 0x6a, 0x52, 0x2c, 0x15, 0xa4, 0xec,
0x9f, 0x5c, 0x75, 0x4d, 0x91, 0x0a, 0x7e, 0xaf, 0x17, 0x3e, 0x13, 0xee, 0x84, 0xee, 0xe4, 0xb0,
0xe6, 0x74, 0x51, 0x77, 0x2b, 0x0d, 0x35, 0xcf, 0x16, 0x2e, 0x39, 0xa4, 0xc9, 0x4f, 0x62, 0xcc,
0xbc, 0x82, 0x2d, 0x40, 0x42, 0x4d, 0x52, 0x90, 0x8d, 0xd5, 0xd1, 0xa1, 0xe3, 0x3a, 0xe1, 0xb1,
0xe0, 0xcf, 0x71, 0x3e, 0xc4, 0xa4, 0x2d, 0xfe, 0xa4, 0x43, 0xdf, 0x22, 0x24, 0xe9, 0x7b, 0x36,
0xe5, 0xc1, 0x58, 0x31, 0xab, 0x8c, 0xb0, 0x8d, 0xed, 0x64, 0x83, 0x54, 0xcf, 0xb4, 0x41, 0x6a,
0x99, 0x0d, 0xb2, 0x02, 0x73, 0xa8, 0x6f, 0xe8, 0xb9, 0xbc, 0x46, 0xa9, 0x99, 0xb2, 0xa5, 0x95,
0x52, 0xf5, 0x49, 0xa5, 0xd4, 0x29, 0x57, 0x4b, 0x99, 0x52, 0x6a, 0x61, 0x52, 0x29, 0x35, 0xcd,
0xcd, 0x92, 0x56, 0xfd, 0x35, 0x4e, 0xab, 0xfe, 0x7e, 0xcc, 0xed, 0xf1, 0x08, 0x4f, 0xf7, 0x6c,
0x40, 0xcb, 0xfd, 0x71, 0x3b, 0x73, 0x01, 0xd5, 0x9e, 0x64, 0x05, 0x75, 0xff, 0xf4, 0x1a, 0xea,
0xbb, 0x6f, 0xd1, 0x7d, 0xd3, 0x9f, 0xc6, 0xa8, 0x6a, 0x7f, 0x68, 0x4b, 0x08, 0xc7, 0x3e, 0xe3,
0x2a, 0xaf, 0x9c, 0x54, 0x79, 0xaa, 0x58, 0x64, 0x61, 0xba, 0x20, 0x8b, 0x45, 0xe3, 0x01, 0x2c,
0x88, 0xb9, 0xa4, 0xb6, 0x2b, 0x4c, 0x5b, 0x9b, 0x1d, 0xeb, 0x25, 0x2e, 0x26, 0x5b, 0x92, 0x4e,
0x83, 0x80, 0xaf, 0x5d, 0xd0, 0xb1, 0x65, 0xdc, 0x85, 0x3a, 0x8f, 0x37, 0x79, 0xee, 0xde, 0xd0,
0x6f, 0x03, 0x4e, 0x0b, 0x4a, 0x86, 0x80, 0x58, 0x42, 0xe1, 0x74, 0xb5, 0xfb, 0x3f, 0xc9, 0x1c,
0x51, 0xcb, 0xe9, 0xfe, 0x99, 0xe3, 0xe9, 0x0d, 0x54, 0x38, 0x39, 0xb7, 0xfb, 0x2f, 0x31, 0x64,
0xea, 0x7b, 0xbd, 0xc8, 0x3a, 0x52, 0x2f, 0xb4, 0x8c, 0xf0, 0x0c, 0xdb, 0xfc, 0x81, 0x99, 0x31,
0x6d, 0x07, 0x27, 0x8e, 0x42, 0x09, 0x63, 0xea, 0x8c, 0xb6, 0x23, 0x48, 0x0c, 0xca, 0x84, 0xce,
0xaf, 0xc5, 0xd1, 0x33, 0x6b, 0xf2, 0x6f, 0xac, 0xdf, 0x88, 0xae, 0xaf, 0x34, 0x17, 0x86, 0x26,
0x5f, 0x4e, 0x9c, 0xf8, 0x9a, 0x69, 0x85, 0x4d, 0xc9, 0x45, 0x33, 0x13, 0x61, 0x81, 0x54, 0xb2,
0x9b, 0xde, 0x5a, 0x9f, 0xc2, 0xf9, 0x54, 0x7f, 0xf5, 0x1e, 0x92, 0x1a, 0x20, 0x3b, 0xbb, 0xec,
0xfc, 0x8f, 0x12, 0xc0, 0xd6, 0x28, 0x3a, 0x96, 0x20, 0xb1, 0x03, 0x55, 0x86, 0x6e, 0x35, 0xa8,
0xa9, 0xda, 0x8c, 0xe7, 0x5b, 0x61, 0x88, 0x08, 0x2d, 0x3e, 0xcd, 0x55, 0x9b, 0x03, 0xbc, 0x91,
0x7a, 0xe0, 0xe5, 0xdf, 0xec, 0x81, 0x58, 0xbc, 0x8a, 0xf7, 0x10, 0xe0, 0x22, 0xb4, 0x0f, 0xe5,
0x0d, 0x45, 0x43, 0x50, 0xb7, 0x04, 0x91, 0x89, 0x39, 0x36, 0x45, 0xd5, 0xa2, 0x71, 0x2f, 0xf2,
0xde, 0x50, 0x57, 0x9e, 0xd3, 0x8d, 0x98, 0xfa, 0x8c, 0x11, 0x99, 0x58, 0x40, 0x8f, 0xd0, 0xca,
0x41, 0x2c, 0x36, 0x27, 0xc4, 0x62, 0x2a, 0x17, 0x63, 0x3f, 0x14, 0xb4, 0x0e, 0x46, 0x83, 0x81,
0x58, 0xe4, 0x59, 0x6d, 0x89, 0xc8, 0x4b, 0xac, 0x23, 0x7b, 0xdf, 0x90, 0x98, 0x48, 0x2e, 0xee,
0xbf, 0x2f, 0xfa, 0xcf, 0xc3, 0x92, 0xa6, 0xa8, 0xac, 0x57, 0x31, 0x16, 0x44, 0x29, 0xfb, 0x6e,
0xfa, 0x1b, 0x17, 0xe0, 0x7c, 0xaa, 0xbf, 0x18, 0x76, 0xfd, 0x32, 0x54, 0xe3, 0x9f, 0x07, 0xc8,
0x3c, 0x94, 0x9f, 0x6d, 0x1f, 0xb4, 0xce, 0xb1, 0x8f, 0xe7, 0x3b, 0x07, 0xad, 0xd2, 0xfa, 0x3a,
0x2c, 0x66, 0x6e, 0x4b, 0x49, 0x0d, 0x2a, 0xe6, 0xee, 0xd6, 0xce, 0x4b, 0x14, 0x5b, 0x80, 0xea,
0xfe, 0xd3, 0x67, 0xa2, 0x55, 0x5a, 0xdf, 0x86, 0x66, 0xfa, 0xb8, 0x23, 0x75, 0x98, 0xdf, 0x46,
0xee, 0xb3, 0xdd, 0x1d, 0x14, 0xc6, 0x86, 0xf9, 0x7c, 0x7f, 0x7f, 0x6f, 0xff, 0x61, 0xab, 0x44,
0x00, 0xe6, 0x76, 0xbf, 0xdd, 0x63, 0x8c, 0x19, 0xc6, 0x78, 0xbe, 0xff, 0x68, 0xff, 0xe9, 0x2f,
0xf7, 0x5b, 0xe5, 0xcd, 0xbf, 0x55, 0xa1, 0x69, 0x8a, 0x25, 0x74, 0x31, 0x16, 0x1c, 0x44, 0x9e,
0x0f, 0x60, 0x3e, 0xfe, 0x33, 0x23, 0x39, 0x58, 0xd3, 0xbf, 0x91, 0x74, 0xda, 0x79, 0x86, 0x34,
0xdb, 0x39, 0x72, 0x00, 0x8d, 0xd4, 0xb3, 0x20, 0x49, 0x90, 0x6a, 0xd1, 0xcb, 0x63, 0xe7, 0xca,
0x24, 0xb6, 0x1a, 0xb1, 0x0b, 0xcd, 0xf4, 0x53, 0x1f, 0x49, 0xfa, 0x14, 0x3e, 0x21, 0x76, 0xae,
0x4e, 0xe4, 0xab, 0x41, 0x5f, 0x42, 0x2b, 0xfb, 0xc8, 0x47, 0x92, 0x8b, 0xb1, 0x09, 0x0f, 0x88,
0x9d, 0x6b, 0xa7, 0x48, 0xe8, 0x43, 0xe7, 0x9e, 0xc3, 0xd6, 0x26, 0x3f, 0x68, 0xe4, 0x86, 0x9e,
0xf4, 0x4a, 0x22, 0x4c, 0x91, 0xbe, 0x19, 0x26, 0xfa, 0x23, 0x54, 0xc1, 0x0b, 0x81, 0x66, 0x8a,
0xe2, 0x2b, 0x65, 0x1c, 0xf4, 0x05, 0x56, 0x6a, 0x69, 0xd0, 0x4b, 0x92, 0x5e, 0xc5, 0x10, 0xbe,
0xb3, 0x36, 0x59, 0x20, 0xed, 0x37, 0x1d, 0xd2, 0xa6, 0xfc, 0x56, 0x80, 0x93, 0x53, 0x7e, 0x2b,
0xc4, 0xc2, 0x3c, 0xbc, 0x52, 0xc0, 0x55, 0x0b, 0xaf, 0x22, 0x94, 0xdc, 0xb9, 0x32, 0x89, 0xad,
0x2f, 0x3f, 0x03, 0x5a, 0xb5, 0xe5, 0x17, 0x63, 0xe1, 0xce, 0xda, 0x64, 0x81, 0xac, 0xaf, 0x92,
0x62, 0x3c, 0xe3, 0xab, 0x1c, 0xf6, 0xcb, 0xf8, 0x2a, 0x5f, 0xc5, 0x4b, 0x5f, 0x65, 0xaa, 0xea,
0xab, 0x13, 0x4b, 0x95, 0xbc, 0xaf, 0x8a, 0xab, 0x1f, 0x1c, 0xf7, 0x1e, 0xcc, 0xb2, 0x0a, 0x83,
0x24, 0x67, 0xb9, 0x56, 0xdc, 0x74, 0x2e, 0x64, 0xa8, 0x71, 0xb7, 0x1b, 0xa5, 0xdb, 0xa5, 0xcd,
0xbf, 0xcc, 0xc0, 0x82, 0x48, 0x7f, 0x32, 0x83, 0x3c, 0x04, 0x48, 0x0e, 0x61, 0xd2, 0x49, 0x2d,
0x2a, 0x55, 0x49, 0x74, 0x2e, 0x15, 0xf2, 0x94, 0x52, 0xdf, 0xc8, 0xb2, 0x45, 0x2e, 0xf4, 0x52,
0x26, 0xdb, 0xa6, 0x16, 0x79, 0xb9, 0x98, 0xa9, 0xc6, 0xda, 0x81, 0x9a, 0x4a, 0xf2, 0x44, 0x3b,
0x1b, 0x32, 0x27, 0x54, 0xa7, 0x53, 0xc4, 0xd2, 0x35, 0xd2, 0xb2, 0xba, 0xa6, 0x51, 0xfe, 0xac,
0xd0, 0x34, 0x2a, 0x38, 0x08, 0x8c, 0x73, 0xff, 0x09, 0x00, 0x00, 0xff, 0xff, 0xca, 0x77, 0xdb,
0x74, 0xb2, 0x27, 0x00, 0x00,
}

View File

@ -301,6 +301,9 @@ message PodSandbox {
optional int64 created_at = 4;
// The labels of the PodSandbox
map<string, string> labels = 5;
// Annotations is an unstructured key value map that may be set by external
// tools to store and retrieve arbitrary metadata.
map<string, string> annotations = 6;
}
message ListPodSandboxResponse {

View File

@ -55,14 +55,15 @@ func toRuntimeAPIContainer(c *dockertypes.Container) (*runtimeApi.Container, err
if err != nil {
return nil, err
}
labels, annotations := extractLabels(c.Labels)
return &runtimeApi.Container{
Id: &c.ID,
Metadata: metadata,
Image: &runtimeApi.ImageSpec{Image: &c.Image},
ImageRef: &c.ImageID,
State: &state,
// TODO: Extract annotations from labels.
Labels: c.Labels,
Id: &c.ID,
Metadata: metadata,
Image: &runtimeApi.ImageSpec{Image: &c.Image},
ImageRef: &c.ImageID,
State: &state,
Labels: labels,
Annotations: annotations,
}, nil
}
@ -113,11 +114,13 @@ func toRuntimeAPISandbox(c *dockertypes.Container) (*runtimeApi.PodSandbox, erro
if err != nil {
return nil, err
}
labels, annotations := extractLabels(c.Labels)
return &runtimeApi.PodSandbox{
Id: &c.ID,
Metadata: metadata,
State: &state,
CreatedAt: &c.Created,
Labels: c.Labels, // TODO: Need to disthinguish annotaions and labels.
Id: &c.ID,
Metadata: metadata,
State: &state,
CreatedAt: &c.Created,
Labels: labels,
Annotations: annotations,
}, nil
}

View File

@ -37,6 +37,8 @@ func (ds *dockerService) ListContainers(filter *runtimeApi.ContainerFilter) ([]*
opts.Filter = dockerfilters.NewArgs()
f := newDockerFilter(&opts.Filter)
// Add filter to get *only* (non-sandbox) containers.
f.AddLabel(containerTypeLabelKey, containerTypeLabelContainer)
if filter != nil {
if filter.Id != nil {
@ -46,7 +48,7 @@ func (ds *dockerService) ListContainers(filter *runtimeApi.ContainerFilter) ([]*
f.Add("status", toDockerContainerStatus(filter.GetState()))
}
if filter.PodSandboxId != nil {
// TODO: implement this after sandbox functions are implemented.
f.AddLabel(sandboxIDLabelKey, *filter.PodSandboxId)
}
if filter.LabelSelector != nil {
@ -54,8 +56,6 @@ func (ds *dockerService) ListContainers(filter *runtimeApi.ContainerFilter) ([]*
f.AddLabel(k, v)
}
}
// Filter out sandbox containers.
f.AddLabel(containerTypeLabelKey, containerTypeLabelContainer)
}
containers, err := ds.client.ListContainers(opts)
if err != nil {
@ -88,12 +88,11 @@ func (ds *dockerService) CreateContainer(podSandboxID string, config *runtimeApi
return "", fmt.Errorf("sandbox config is nil for container %q", config.Metadata.GetName())
}
// Merge annotations and labels because docker supports only labels.
// TODO: add a prefix to annotations so that we can distinguish labels and
// annotations when reading back them from the docker container.
labels := makeLabels(config.GetLabels(), config.GetAnnotations())
// Apply a the container type label.
labels[containerTypeLabelKey] = containerTypeLabelContainer
// Write the sandbox ID in the labels.
labels[sandboxIDLabelKey] = podSandboxID
image := ""
if iSpec := config.GetImage(); iSpec != nil {
@ -284,21 +283,21 @@ func (ds *dockerService) ContainerStatus(containerID string) (*runtimeApi.Contai
return nil, err
}
labels, annotations := extractLabels(r.Config.Labels)
return &runtimeApi.ContainerStatus{
Id: &r.ID,
Metadata: metadata,
Image: &runtimeApi.ImageSpec{Image: &r.Config.Image},
ImageRef: &r.Image,
Mounts: mounts,
ExitCode: &exitCode,
State: &state,
CreatedAt: &ct,
StartedAt: &st,
FinishedAt: &ft,
Reason: &reason,
// TODO: We write annotations as labels on the docker containers. All
// these annotations will be read back as labels. Need to fix this.
Labels: r.Config.Labels,
Id: &r.ID,
Metadata: metadata,
Image: &runtimeApi.ImageSpec{Image: &r.Config.Image},
ImageRef: &r.Image,
Mounts: mounts,
ExitCode: &exitCode,
State: &state,
CreatedAt: &ct,
StartedAt: &st,
FinishedAt: &ft,
Reason: &reason,
Labels: labels,
Annotations: annotations,
}, nil
}

View File

@ -27,13 +27,15 @@ import (
)
// A helper to create a basic config.
func makeContainerConfig(sConfig *runtimeApi.PodSandboxConfig, name, image string, attempt uint32) *runtimeApi.ContainerConfig {
func makeContainerConfig(sConfig *runtimeApi.PodSandboxConfig, name, image string, attempt uint32, labels, annotations map[string]string) *runtimeApi.ContainerConfig {
return &runtimeApi.ContainerConfig{
Metadata: &runtimeApi.ContainerMetadata{
Name: &name,
Attempt: &attempt,
},
Image: &runtimeApi.ImageSpec{Image: &image},
Image: &runtimeApi.ImageSpec{Image: &image},
Labels: labels,
Annotations: annotations,
}
}
@ -49,8 +51,10 @@ func TestListContainers(t *testing.T) {
for i := 0; i < 3; i++ {
s := makeSandboxConfig(fmt.Sprintf("%s%d", podName, i),
fmt.Sprintf("%s%d", namespace, i), fmt.Sprintf("%d", i), 0)
labels := map[string]string{"abc.xyz": fmt.Sprintf("label%d", i)}
annotations := map[string]string{"foo.bar.baz": fmt.Sprintf("annotaion%d", i)}
c := makeContainerConfig(s, fmt.Sprintf("%s%d", containerName, i),
fmt.Sprintf("%s:v%d", image, i), uint32(i))
fmt.Sprintf("%s:v%d", image, i), uint32(i), labels, annotations)
sConfigs = append(sConfigs, s)
configs = append(configs, c)
}
@ -69,12 +73,13 @@ func TestListContainers(t *testing.T) {
// Prepend to the expected list because ListContainers returns
// the most recent containers first.
expected = append([]*runtimeApi.Container{{
Metadata: configs[i].Metadata,
Id: &id,
State: &state,
Image: configs[i].Image,
ImageRef: &imageRef,
Labels: map[string]string{containerTypeLabelKey: containerTypeLabelContainer},
Metadata: configs[i].Metadata,
Id: &id,
State: &state,
Image: configs[i].Image,
ImageRef: &imageRef,
Labels: configs[i].Labels,
Annotations: configs[i].Annotations,
}}, expected...)
}
containers, err := ds.ListContainers(nil)
@ -88,7 +93,9 @@ func TestListContainers(t *testing.T) {
func TestContainerStatus(t *testing.T) {
ds, _, fClock := newTestDockerSevice()
sConfig := makeSandboxConfig("foo", "bar", "1", 0)
config := makeContainerConfig(sConfig, "pause", "iamimage", 0)
labels := map[string]string{"abc.xyz": "foo"}
annotations := map[string]string{"foo.bar.baz": "abc"}
config := makeContainerConfig(sConfig, "pause", "iamimage", 0, labels, annotations)
var defaultTime time.Time
dt := defaultTime.Unix()
@ -100,17 +107,18 @@ func TestContainerStatus(t *testing.T) {
reason := ""
expected := &runtimeApi.ContainerStatus{
State: &state,
CreatedAt: &ct,
StartedAt: &st,
FinishedAt: &ft,
Metadata: config.Metadata,
Image: config.Image,
ImageRef: &imageRef,
ExitCode: &exitCode,
Reason: &reason,
Mounts: []*runtimeApi.Mount{},
Labels: map[string]string{containerTypeLabelKey: containerTypeLabelContainer},
State: &state,
CreatedAt: &ct,
StartedAt: &st,
FinishedAt: &ft,
Metadata: config.Metadata,
Image: config.Image,
ImageRef: &imageRef,
ExitCode: &exitCode,
Reason: &reason,
Mounts: []*runtimeApi.Mount{},
Labels: config.Labels,
Annotations: config.Annotations,
}
// Create the container.

View File

@ -123,17 +123,16 @@ func (ds *dockerService) PodSandboxStatus(podSandboxID string) (*runtimeApi.PodS
return nil, err
}
labels, annotations := extractLabels(r.Config.Labels)
return &runtimeApi.PodSandboxStatus{
Id: &r.ID,
State: &state,
CreatedAt: &ct,
Metadata: metadata,
// TODO: We write annotations as labels on the docker containers. All
// these annotations will be read back as labels. Need to fix this.
// Also filter out labels only relevant to this shim.
Labels: r.Config.Labels,
Network: network,
Linux: &runtimeApi.LinuxPodSandboxStatus{Namespaces: &runtimeApi.Namespace{Network: &netNS}},
Id: &r.ID,
State: &state,
CreatedAt: &ct,
Metadata: metadata,
Labels: labels,
Annotations: annotations,
Network: network,
Linux: &runtimeApi.LinuxPodSandboxStatus{Namespaces: &runtimeApi.Namespace{Network: &netNS}},
}, nil
}
@ -145,6 +144,9 @@ func (ds *dockerService) ListPodSandbox(filter *runtimeApi.PodSandboxFilter) ([]
opts.Filter = dockerfilters.NewArgs()
f := newDockerFilter(&opts.Filter)
// Add filter to select only sandbox containers.
f.AddLabel(containerTypeLabelKey, containerTypeLabelSandbox)
if filter != nil {
if filter.Id != nil {
f.Add("id", filter.GetId())
@ -168,8 +170,6 @@ func (ds *dockerService) ListPodSandbox(filter *runtimeApi.PodSandboxFilter) ([]
f.AddLabel(k, v)
}
}
// Filter out sandbox containers.
f.AddLabel(containerTypeLabelKey, containerTypeLabelSandbox)
}
containers, err := ds.client.ListContainers(opts)
if err != nil {

View File

@ -29,6 +29,10 @@ import (
// A helper to create a basic config.
func makeSandboxConfig(name, namespace, uid string, attempt uint32) *runtimeApi.PodSandboxConfig {
return makeSandboxConfigWithLabelsAndAnnotations(name, namespace, uid, attempt, map[string]string{}, map[string]string{})
}
func makeSandboxConfigWithLabelsAndAnnotations(name, namespace, uid string, attempt uint32, labels, annotations map[string]string) *runtimeApi.PodSandboxConfig {
return &runtimeApi.PodSandboxConfig{
Metadata: &runtimeApi.PodSandboxMetadata{
Name: &name,
@ -36,6 +40,8 @@ func makeSandboxConfig(name, namespace, uid string, attempt uint32) *runtimeApi.
Uid: &uid,
Attempt: &attempt,
},
Labels: labels,
Annotations: annotations,
}
}
@ -46,8 +52,11 @@ func TestListSandboxes(t *testing.T) {
name, namespace := "foo", "bar"
configs := []*runtimeApi.PodSandboxConfig{}
for i := 0; i < 3; i++ {
c := makeSandboxConfig(fmt.Sprintf("%s%d", name, i),
fmt.Sprintf("%s%d", namespace, i), fmt.Sprintf("%d", i), 0)
c := makeSandboxConfigWithLabelsAndAnnotations(fmt.Sprintf("%s%d", name, i),
fmt.Sprintf("%s%d", namespace, i), fmt.Sprintf("%d", i), 0,
map[string]string{"label": fmt.Sprintf("foo%d", i)},
map[string]string{"annotation": fmt.Sprintf("bar%d", i)},
)
configs = append(configs, c)
}
@ -60,11 +69,12 @@ func TestListSandboxes(t *testing.T) {
// Prepend to the expected list because ListPodSandbox returns
// the most recent sandbox first.
expected = append([]*runtimeApi.PodSandbox{{
Metadata: configs[i].Metadata,
Id: &id,
State: &state,
Labels: map[string]string{containerTypeLabelKey: containerTypeLabelSandbox},
CreatedAt: &createdAt,
Metadata: configs[i].Metadata,
Id: &id,
State: &state,
CreatedAt: &createdAt,
Labels: configs[i].Labels,
Annotations: configs[i].Annotations,
}}, expected...)
}
sandboxes, err := ds.ListPodSandbox(nil)
@ -77,7 +87,9 @@ func TestListSandboxes(t *testing.T) {
// the status returned reflects the operations performed.
func TestSandboxStatus(t *testing.T) {
ds, _, fClock := newTestDockerSevice()
config := makeSandboxConfig("foo", "bar", "1", 0)
labels := map[string]string{"label": "foobar1"}
annotations := map[string]string{"annotation": "abc"}
config := makeSandboxConfigWithLabelsAndAnnotations("foo", "bar", "1", 0, labels, annotations)
// TODO: The following variables depend on the internal
// implementation of FakeDockerClient, and should be fixed.
@ -87,12 +99,13 @@ func TestSandboxStatus(t *testing.T) {
state := runtimeApi.PodSandBoxState_READY
ct := int64(0)
expected := &runtimeApi.PodSandboxStatus{
State: &state,
CreatedAt: &ct,
Metadata: config.Metadata,
Labels: map[string]string{containerTypeLabelKey: containerTypeLabelSandbox},
Network: &runtimeApi.PodSandboxNetworkStatus{Ip: &fakeIP},
Linux: &runtimeApi.LinuxPodSandboxStatus{Namespaces: &runtimeApi.Namespace{Network: &fakeNS}},
State: &state,
CreatedAt: &ct,
Metadata: config.Metadata,
Network: &runtimeApi.PodSandboxNetworkStatus{Ip: &fakeIP},
Linux: &runtimeApi.LinuxPodSandboxStatus{Namespaces: &runtimeApi.Namespace{Network: &fakeNS}},
Labels: labels,
Annotations: annotations,
}
// Create the sandbox.

View File

@ -47,8 +47,11 @@ const (
containerTypeLabelKey = "io.kubernetes.docker.type"
containerTypeLabelSandbox = "podsandbox"
containerTypeLabelContainer = "container"
sandboxIDLabelKey = "io.kubernetes.sandbox.id"
)
var internalLabelKeys []string = []string{containerTypeLabelKey, sandboxIDLabelKey}
func NewDockerService(client dockertools.DockerInterface) DockerLegacyService {
return &dockerService{
client: dockertools.NewInstrumentedDockerInterface(client),

View File

@ -30,6 +30,10 @@ import (
runtimeApi "k8s.io/kubernetes/pkg/kubelet/api/v1alpha1/runtime"
)
const (
annotationPrefix = "annotation."
)
// apiVersion implements kubecontainer.Version interface by implementing
// Compare() and String(). It uses the compare function of engine-api to
// compare docker apiversions.
@ -57,23 +61,52 @@ func generateEnvList(envs []*runtimeApi.KeyValue) (result []string) {
return
}
// Merge annotations and labels because docker supports only labels.
// TODO: Need to be able to distinguish annotations from labels; otherwise, we
// couldn't restore the information when reading the labels back from docker.
// makeLabels converts annotations to labels and merge them with the given
// labels. This is necessary because docker does not support annotations;
// we *fake* annotations using labels. Note that docker labels are not
// updatable.
func makeLabels(labels, annotations map[string]string) map[string]string {
merged := make(map[string]string)
for k, v := range labels {
merged[k] = v
}
for k, v := range annotations {
if _, ok := merged[k]; !ok {
// Don't overwrite the key if it already exists.
merged[k] = v
}
// Assume there won't be conflict.
merged[fmt.Sprintf("%s%s", annotationPrefix, k)] = v
}
return merged
}
// extractLabels converts raw docker labels to the CRI labels and annotations.
// It also filters out internal labels used by this shim.
func extractLabels(input map[string]string) (map[string]string, map[string]string) {
labels := make(map[string]string)
annotations := make(map[string]string)
for k, v := range input {
// Check if the key is used internally by the shim.
internal := false
for _, internalKey := range internalLabelKeys {
// TODO: containerTypeLabelKey is the only internal label the shim uses
// right now. Expand this to a list later.
if k == internalKey {
internal = true
break
}
}
if internal {
continue
}
// Check if the label should be treated as an annotation.
if strings.HasPrefix(k, annotationPrefix) {
annotations[strings.TrimPrefix(k, annotationPrefix)] = v
continue
}
labels[k] = v
}
return labels, annotations
}
// generateMountBindings converts the mount list to a list of strings that
// can be understood by docker.
// Each element in the string is in the form of:

View File

@ -0,0 +1,34 @@
/*
Copyright 2016 The Kubernetes Authors.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
*/
package dockershim
import (
"testing"
"github.com/stretchr/testify/assert"
)
func TestLabelsAndAnnotationsRoundTrip(t *testing.T) {
expectedLabels := map[string]string{"foo.123.abc": "baz", "bar.456.xyz": "qwe"}
expectedAnnotations := map[string]string{"uio.ert": "dfs", "jkl": "asd"}
// Merge labels and annotations into docker labels.
dockerLabels := makeLabels(expectedLabels, expectedAnnotations)
// Extract labels and annotations from docker labels.
actualLabels, actualAnnotations := extractLabels(dockerLabels)
assert.Equal(t, expectedLabels, actualLabels)
assert.Equal(t, expectedAnnotations, actualAnnotations)
}