github.com/coreos/mantle@v0.13.0/update/metadata/update_metadata.pb.go (about)

     1  // Code generated by protoc-gen-go.
     2  // source: update_metadata.proto
     3  // DO NOT EDIT!
     4  
     5  /*
     6  Package metadata is a generated protocol buffer package.
     7  
     8  It is generated from these files:
     9  	update_metadata.proto
    10  
    11  It has these top-level messages:
    12  	InstallOperation
    13  	Extent
    14  	Signatures
    15  	InstallInfo
    16  	InstallProcedure
    17  	DeltaArchiveManifest
    18  */
    19  package metadata
    20  
    21  import proto "github.com/golang/protobuf/proto"
    22  import fmt "fmt"
    23  import math "math"
    24  
    25  // Reference imports to suppress errors if they are not otherwise used.
    26  var _ = proto.Marshal
    27  var _ = fmt.Errorf
    28  var _ = math.Inf
    29  
    30  // This is a compile-time assertion to ensure that this generated file
    31  // is compatible with the proto package it is being compiled against.
    32  const _ = proto.ProtoPackageIsVersion1
    33  
    34  type InstallOperation_Type int32
    35  
    36  const (
    37  	InstallOperation_REPLACE    InstallOperation_Type = 0
    38  	InstallOperation_REPLACE_BZ InstallOperation_Type = 1
    39  	InstallOperation_MOVE       InstallOperation_Type = 2
    40  	InstallOperation_BSDIFF     InstallOperation_Type = 3
    41  )
    42  
    43  var InstallOperation_Type_name = map[int32]string{
    44  	0: "REPLACE",
    45  	1: "REPLACE_BZ",
    46  	2: "MOVE",
    47  	3: "BSDIFF",
    48  }
    49  var InstallOperation_Type_value = map[string]int32{
    50  	"REPLACE":    0,
    51  	"REPLACE_BZ": 1,
    52  	"MOVE":       2,
    53  	"BSDIFF":     3,
    54  }
    55  
    56  func (x InstallOperation_Type) Enum() *InstallOperation_Type {
    57  	p := new(InstallOperation_Type)
    58  	*p = x
    59  	return p
    60  }
    61  func (x InstallOperation_Type) String() string {
    62  	return proto.EnumName(InstallOperation_Type_name, int32(x))
    63  }
    64  func (x *InstallOperation_Type) UnmarshalJSON(data []byte) error {
    65  	value, err := proto.UnmarshalJSONEnum(InstallOperation_Type_value, data, "InstallOperation_Type")
    66  	if err != nil {
    67  		return err
    68  	}
    69  	*x = InstallOperation_Type(value)
    70  	return nil
    71  }
    72  func (InstallOperation_Type) EnumDescriptor() ([]byte, []int) { return fileDescriptor0, []int{0, 0} }
    73  
    74  type InstallProcedure_Type int32
    75  
    76  const (
    77  	InstallProcedure_KERNEL InstallProcedure_Type = 0
    78  )
    79  
    80  var InstallProcedure_Type_name = map[int32]string{
    81  	0: "KERNEL",
    82  }
    83  var InstallProcedure_Type_value = map[string]int32{
    84  	"KERNEL": 0,
    85  }
    86  
    87  func (x InstallProcedure_Type) Enum() *InstallProcedure_Type {
    88  	p := new(InstallProcedure_Type)
    89  	*p = x
    90  	return p
    91  }
    92  func (x InstallProcedure_Type) String() string {
    93  	return proto.EnumName(InstallProcedure_Type_name, int32(x))
    94  }
    95  func (x *InstallProcedure_Type) UnmarshalJSON(data []byte) error {
    96  	value, err := proto.UnmarshalJSONEnum(InstallProcedure_Type_value, data, "InstallProcedure_Type")
    97  	if err != nil {
    98  		return err
    99  	}
   100  	*x = InstallProcedure_Type(value)
   101  	return nil
   102  }
   103  func (InstallProcedure_Type) EnumDescriptor() ([]byte, []int) { return fileDescriptor0, []int{4, 0} }
   104  
   105  // The client will perform each InstallOperation in order, beginning even
   106  // before the entire delta file is downloaded (but after at least the
   107  // protobuf is downloaded). The types of operations are explained:
   108  // - REPLACE: Replace the dst_extents on the drive with the attached data,
   109  //   zero padding out to block size.
   110  // - REPLACE_BZ: bzip2-uncompress the attached data and write it into
   111  //   dst_extents on the drive, zero padding to block size.
   112  // - MOVE: Copy the data in src_extents to dst_extents. Extents may overlap,
   113  //   so it may be desirable to read all src_extents data into memory before
   114  //   writing it out.
   115  // - BSDIFF: Read src_length bytes from src_extents into memory, perform
   116  //   bspatch with attached data, write new data to dst_extents, zero padding
   117  //   to block size.
   118  type InstallOperation struct {
   119  	Type *InstallOperation_Type `protobuf:"varint,1,req,name=type,enum=chromeos_update_engine.InstallOperation_Type" json:"type,omitempty"`
   120  	// The offset into the delta file (after the protobuf)
   121  	// where the data (if any) is stored
   122  	DataOffset *uint32 `protobuf:"varint,2,opt,name=data_offset" json:"data_offset,omitempty"`
   123  	// The length of the data in the delta file
   124  	DataLength *uint32 `protobuf:"varint,3,opt,name=data_length" json:"data_length,omitempty"`
   125  	// Ordered list of extents that are read from (if any) and written to.
   126  	SrcExtents []*Extent `protobuf:"bytes,4,rep,name=src_extents" json:"src_extents,omitempty"`
   127  	// Byte length of src, not necessarily block aligned. It's only used for
   128  	// BSDIFF, because we need to pass that external program the number
   129  	// of bytes to read from the blocks we pass it.
   130  	SrcLength  *uint64   `protobuf:"varint,5,opt,name=src_length" json:"src_length,omitempty"`
   131  	DstExtents []*Extent `protobuf:"bytes,6,rep,name=dst_extents" json:"dst_extents,omitempty"`
   132  	// byte length of dst, not necessarily block aligned. It's only used for
   133  	// BSDIFF, because we need to fill in the rest of the last block
   134  	// that bsdiff writes with '\0' bytes.
   135  	DstLength *uint64 `protobuf:"varint,7,opt,name=dst_length" json:"dst_length,omitempty"`
   136  	// Optional SHA 256 hash of the blob associated with this operation.
   137  	// This is used as a primary validation for http-based downloads and
   138  	// as a defense-in-depth validation for https-based downloads. If
   139  	// the operation doesn't refer to any blob, this field will have
   140  	// zero bytes.
   141  	DataSha256Hash   []byte `protobuf:"bytes,8,opt,name=data_sha256_hash" json:"data_sha256_hash,omitempty"`
   142  	XXX_unrecognized []byte `json:"-"`
   143  }
   144  
   145  func (m *InstallOperation) Reset()                    { *m = InstallOperation{} }
   146  func (m *InstallOperation) String() string            { return proto.CompactTextString(m) }
   147  func (*InstallOperation) ProtoMessage()               {}
   148  func (*InstallOperation) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{0} }
   149  
   150  func (m *InstallOperation) GetType() InstallOperation_Type {
   151  	if m != nil && m.Type != nil {
   152  		return *m.Type
   153  	}
   154  	return InstallOperation_REPLACE
   155  }
   156  
   157  func (m *InstallOperation) GetDataOffset() uint32 {
   158  	if m != nil && m.DataOffset != nil {
   159  		return *m.DataOffset
   160  	}
   161  	return 0
   162  }
   163  
   164  func (m *InstallOperation) GetDataLength() uint32 {
   165  	if m != nil && m.DataLength != nil {
   166  		return *m.DataLength
   167  	}
   168  	return 0
   169  }
   170  
   171  func (m *InstallOperation) GetSrcExtents() []*Extent {
   172  	if m != nil {
   173  		return m.SrcExtents
   174  	}
   175  	return nil
   176  }
   177  
   178  func (m *InstallOperation) GetSrcLength() uint64 {
   179  	if m != nil && m.SrcLength != nil {
   180  		return *m.SrcLength
   181  	}
   182  	return 0
   183  }
   184  
   185  func (m *InstallOperation) GetDstExtents() []*Extent {
   186  	if m != nil {
   187  		return m.DstExtents
   188  	}
   189  	return nil
   190  }
   191  
   192  func (m *InstallOperation) GetDstLength() uint64 {
   193  	if m != nil && m.DstLength != nil {
   194  		return *m.DstLength
   195  	}
   196  	return 0
   197  }
   198  
   199  func (m *InstallOperation) GetDataSha256Hash() []byte {
   200  	if m != nil {
   201  		return m.DataSha256Hash
   202  	}
   203  	return nil
   204  }
   205  
   206  // Data is packed into blocks on disk, always starting from the beginning
   207  // of the block. If a file's data is too large for one block, it overflows
   208  // into another block, which may or may not be the following block on the
   209  // physical partition. An ordered list of extents is another
   210  // representation of an ordered list of blocks. For example, a file stored
   211  // in blocks 9, 10, 11, 2, 18, 12 (in that order) would be stored in
   212  // extents { {9, 3}, {2, 1}, {18, 1}, {12, 1} } (in that order).
   213  // In general, files are stored sequentially on disk, so it's more efficient
   214  // to use extents to encode the block lists (this is effectively
   215  // run-length encoding).
   216  // A sentinel value (UINT64_MAX) as the start block denotes a sparse-hole
   217  // in a file whose block-length is specified by num_blocks.
   218  type Extent struct {
   219  	StartBlock       *uint64 `protobuf:"varint,1,opt,name=start_block" json:"start_block,omitempty"`
   220  	NumBlocks        *uint64 `protobuf:"varint,2,opt,name=num_blocks" json:"num_blocks,omitempty"`
   221  	XXX_unrecognized []byte  `json:"-"`
   222  }
   223  
   224  func (m *Extent) Reset()                    { *m = Extent{} }
   225  func (m *Extent) String() string            { return proto.CompactTextString(m) }
   226  func (*Extent) ProtoMessage()               {}
   227  func (*Extent) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{1} }
   228  
   229  func (m *Extent) GetStartBlock() uint64 {
   230  	if m != nil && m.StartBlock != nil {
   231  		return *m.StartBlock
   232  	}
   233  	return 0
   234  }
   235  
   236  func (m *Extent) GetNumBlocks() uint64 {
   237  	if m != nil && m.NumBlocks != nil {
   238  		return *m.NumBlocks
   239  	}
   240  	return 0
   241  }
   242  
   243  // Signatures: Updates may be signed by the OS vendor. The client verifies
   244  // an update's signature by hashing the entire download. The section of the
   245  // download that contains the signature is at the end of the file, so when
   246  // signing a file, only the part up to the signature part is signed.
   247  // Then, the client looks inside the download's Signatures message for a
   248  // Signature message that it knows how to handle. Generally, a client will
   249  // only know how to handle one type of signature, but an update may contain
   250  // many signatures to support many different types of client. Then client
   251  // selects a Signature message and uses that, along with a known public key,
   252  // to verify the download. The public key is expected to be part of the
   253  // client.
   254  type Signatures struct {
   255  	Signatures       []*Signatures_Signature `protobuf:"bytes,1,rep,name=signatures" json:"signatures,omitempty"`
   256  	XXX_unrecognized []byte                  `json:"-"`
   257  }
   258  
   259  func (m *Signatures) Reset()                    { *m = Signatures{} }
   260  func (m *Signatures) String() string            { return proto.CompactTextString(m) }
   261  func (*Signatures) ProtoMessage()               {}
   262  func (*Signatures) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{2} }
   263  
   264  func (m *Signatures) GetSignatures() []*Signatures_Signature {
   265  	if m != nil {
   266  		return m.Signatures
   267  	}
   268  	return nil
   269  }
   270  
   271  type Signatures_Signature struct {
   272  	Version          *uint32 `protobuf:"varint,1,opt,name=version" json:"version,omitempty"`
   273  	Data             []byte  `protobuf:"bytes,2,opt,name=data" json:"data,omitempty"`
   274  	XXX_unrecognized []byte  `json:"-"`
   275  }
   276  
   277  func (m *Signatures_Signature) Reset()                    { *m = Signatures_Signature{} }
   278  func (m *Signatures_Signature) String() string            { return proto.CompactTextString(m) }
   279  func (*Signatures_Signature) ProtoMessage()               {}
   280  func (*Signatures_Signature) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{2, 0} }
   281  
   282  func (m *Signatures_Signature) GetVersion() uint32 {
   283  	if m != nil && m.Version != nil {
   284  		return *m.Version
   285  	}
   286  	return 0
   287  }
   288  
   289  func (m *Signatures_Signature) GetData() []byte {
   290  	if m != nil {
   291  		return m.Data
   292  	}
   293  	return nil
   294  }
   295  
   296  type InstallInfo struct {
   297  	Size             *uint64 `protobuf:"varint,1,opt,name=size" json:"size,omitempty"`
   298  	Hash             []byte  `protobuf:"bytes,2,opt,name=hash" json:"hash,omitempty"`
   299  	XXX_unrecognized []byte  `json:"-"`
   300  }
   301  
   302  func (m *InstallInfo) Reset()                    { *m = InstallInfo{} }
   303  func (m *InstallInfo) String() string            { return proto.CompactTextString(m) }
   304  func (*InstallInfo) ProtoMessage()               {}
   305  func (*InstallInfo) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{3} }
   306  
   307  func (m *InstallInfo) GetSize() uint64 {
   308  	if m != nil && m.Size != nil {
   309  		return *m.Size
   310  	}
   311  	return 0
   312  }
   313  
   314  func (m *InstallInfo) GetHash() []byte {
   315  	if m != nil {
   316  		return m.Hash
   317  	}
   318  	return nil
   319  }
   320  
   321  // InstallProcedure defines the update procedure for a single file or block
   322  // device (except for /usr which is in DeltaArchiveManifest).
   323  type InstallProcedure struct {
   324  	Type             *InstallProcedure_Type `protobuf:"varint,1,req,name=type,enum=chromeos_update_engine.InstallProcedure_Type" json:"type,omitempty"`
   325  	Operations       []*InstallOperation    `protobuf:"bytes,2,rep,name=operations" json:"operations,omitempty"`
   326  	OldInfo          *InstallInfo           `protobuf:"bytes,3,opt,name=old_info" json:"old_info,omitempty"`
   327  	NewInfo          *InstallInfo           `protobuf:"bytes,4,opt,name=new_info" json:"new_info,omitempty"`
   328  	XXX_unrecognized []byte                 `json:"-"`
   329  }
   330  
   331  func (m *InstallProcedure) Reset()                    { *m = InstallProcedure{} }
   332  func (m *InstallProcedure) String() string            { return proto.CompactTextString(m) }
   333  func (*InstallProcedure) ProtoMessage()               {}
   334  func (*InstallProcedure) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{4} }
   335  
   336  func (m *InstallProcedure) GetType() InstallProcedure_Type {
   337  	if m != nil && m.Type != nil {
   338  		return *m.Type
   339  	}
   340  	return InstallProcedure_KERNEL
   341  }
   342  
   343  func (m *InstallProcedure) GetOperations() []*InstallOperation {
   344  	if m != nil {
   345  		return m.Operations
   346  	}
   347  	return nil
   348  }
   349  
   350  func (m *InstallProcedure) GetOldInfo() *InstallInfo {
   351  	if m != nil {
   352  		return m.OldInfo
   353  	}
   354  	return nil
   355  }
   356  
   357  func (m *InstallProcedure) GetNewInfo() *InstallInfo {
   358  	if m != nil {
   359  		return m.NewInfo
   360  	}
   361  	return nil
   362  }
   363  
   364  type DeltaArchiveManifest struct {
   365  	// The update procedure for the main partition (USR-A or USR-B). Once
   366  	// complete it should match the hash specified in new_partition_info.
   367  	PartitionOperations []*InstallOperation `protobuf:"bytes,1,rep,name=partition_operations" json:"partition_operations,omitempty"`
   368  	// This field is maintained for compatibility with older update_engine
   369  	// clients. In the ChromeOS days it covered the kernel partition but in
   370  	// CoreOS it has only been used to insert a dummy operation to account for
   371  	// the signatures tacked onto the end of the payload. The code was not smart
   372  	// enough to stop passing data to the filesystem writer code after the
   373  	// signatures_offset had been reached, instead using the magic punch-hole
   374  	// value to skip over the extra data. Since CoreOS versions of update_engine
   375  	// only partially removed support kernel partitions passing anything other
   376  	// than dummy operations will trigger broken code paths but omitting the
   377  	// dummy operations will fail when the filesystem writer receives unexpected
   378  	// data. Therefore to work with old versions it strictly *must* look like:
   379  	//
   380  	//   noop_operations: {
   381  	//     type: REPLACE
   382  	//     data_offset: signatures_offset
   383  	//     data_length: signatures_size
   384  	//     dst_extents: {
   385  	//       start_block: UINT64_MAX
   386  	//       num_blocks: (signature_size + block_size - 1) / block_size
   387  	//     }
   388  	//   }
   389  	//
   390  	NoopOperations []*InstallOperation `protobuf:"bytes,2,rep,name=noop_operations" json:"noop_operations,omitempty"`
   391  	// (At time of writing) usually 4096
   392  	BlockSize *uint32 `protobuf:"varint,3,opt,name=block_size,def=4096" json:"block_size,omitempty"`
   393  	// If signatures are present, the offset into the blobs, generally
   394  	// tacked onto the end of the file, and the length. We use an offset
   395  	// rather than a bool to allow for more flexibility in future file formats.
   396  	// If either is absent, it means signatures aren't supported in this
   397  	// file.
   398  	SignaturesOffset *uint64 `protobuf:"varint,4,opt,name=signatures_offset" json:"signatures_offset,omitempty"`
   399  	SignaturesSize   *uint64 `protobuf:"varint,5,opt,name=signatures_size" json:"signatures_size,omitempty"`
   400  	// Partition data that can be used to validate the update.
   401  	OldPartitionInfo *InstallInfo `protobuf:"bytes,8,opt,name=old_partition_info" json:"old_partition_info,omitempty"`
   402  	NewPartitionInfo *InstallInfo `protobuf:"bytes,9,opt,name=new_partition_info" json:"new_partition_info,omitempty"`
   403  	// In addition to the partition update, process updates for additional
   404  	// files, such as kernels. Versions of update_engine that can interpret
   405  	// this list *MUST* ignore noop_operations and properly account for the
   406  	// signature data at the end of the payload.
   407  	Procedures       []*InstallProcedure `protobuf:"bytes,10,rep,name=procedures" json:"procedures,omitempty"`
   408  	XXX_unrecognized []byte              `json:"-"`
   409  }
   410  
   411  func (m *DeltaArchiveManifest) Reset()                    { *m = DeltaArchiveManifest{} }
   412  func (m *DeltaArchiveManifest) String() string            { return proto.CompactTextString(m) }
   413  func (*DeltaArchiveManifest) ProtoMessage()               {}
   414  func (*DeltaArchiveManifest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{5} }
   415  
   416  const Default_DeltaArchiveManifest_BlockSize uint32 = 4096
   417  
   418  func (m *DeltaArchiveManifest) GetPartitionOperations() []*InstallOperation {
   419  	if m != nil {
   420  		return m.PartitionOperations
   421  	}
   422  	return nil
   423  }
   424  
   425  func (m *DeltaArchiveManifest) GetNoopOperations() []*InstallOperation {
   426  	if m != nil {
   427  		return m.NoopOperations
   428  	}
   429  	return nil
   430  }
   431  
   432  func (m *DeltaArchiveManifest) GetBlockSize() uint32 {
   433  	if m != nil && m.BlockSize != nil {
   434  		return *m.BlockSize
   435  	}
   436  	return Default_DeltaArchiveManifest_BlockSize
   437  }
   438  
   439  func (m *DeltaArchiveManifest) GetSignaturesOffset() uint64 {
   440  	if m != nil && m.SignaturesOffset != nil {
   441  		return *m.SignaturesOffset
   442  	}
   443  	return 0
   444  }
   445  
   446  func (m *DeltaArchiveManifest) GetSignaturesSize() uint64 {
   447  	if m != nil && m.SignaturesSize != nil {
   448  		return *m.SignaturesSize
   449  	}
   450  	return 0
   451  }
   452  
   453  func (m *DeltaArchiveManifest) GetOldPartitionInfo() *InstallInfo {
   454  	if m != nil {
   455  		return m.OldPartitionInfo
   456  	}
   457  	return nil
   458  }
   459  
   460  func (m *DeltaArchiveManifest) GetNewPartitionInfo() *InstallInfo {
   461  	if m != nil {
   462  		return m.NewPartitionInfo
   463  	}
   464  	return nil
   465  }
   466  
   467  func (m *DeltaArchiveManifest) GetProcedures() []*InstallProcedure {
   468  	if m != nil {
   469  		return m.Procedures
   470  	}
   471  	return nil
   472  }
   473  
   474  func init() {
   475  	proto.RegisterType((*InstallOperation)(nil), "chromeos_update_engine.InstallOperation")
   476  	proto.RegisterType((*Extent)(nil), "chromeos_update_engine.Extent")
   477  	proto.RegisterType((*Signatures)(nil), "chromeos_update_engine.Signatures")
   478  	proto.RegisterType((*Signatures_Signature)(nil), "chromeos_update_engine.Signatures.Signature")
   479  	proto.RegisterType((*InstallInfo)(nil), "chromeos_update_engine.InstallInfo")
   480  	proto.RegisterType((*InstallProcedure)(nil), "chromeos_update_engine.InstallProcedure")
   481  	proto.RegisterType((*DeltaArchiveManifest)(nil), "chromeos_update_engine.DeltaArchiveManifest")
   482  	proto.RegisterEnum("chromeos_update_engine.InstallOperation_Type", InstallOperation_Type_name, InstallOperation_Type_value)
   483  	proto.RegisterEnum("chromeos_update_engine.InstallProcedure_Type", InstallProcedure_Type_name, InstallProcedure_Type_value)
   484  }
   485  
   486  var fileDescriptor0 = []byte{
   487  	// 560 bytes of a gzipped FileDescriptorProto
   488  	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x09, 0x6e, 0x88, 0x02, 0xff, 0xa4, 0x53, 0x5d, 0x6f, 0xd3, 0x30,
   489  	0x14, 0x5d, 0xdb, 0xd0, 0x76, 0x37, 0xdd, 0x1a, 0xcc, 0x80, 0xc0, 0x03, 0xaa, 0xc2, 0x4b, 0x41,
   490  	0x50, 0x41, 0x61, 0x93, 0x06, 0x48, 0xd0, 0xb1, 0x54, 0xaa, 0xd8, 0xd8, 0xb4, 0x21, 0x1e, 0x78,
   491  	0xb1, 0x42, 0xeb, 0x2e, 0x11, 0xa9, 0x1d, 0xc5, 0xee, 0x80, 0xfd, 0x09, 0x7e, 0x0a, 0x7f, 0x89,
   492  	0x9f, 0xc2, 0xb5, 0x9b, 0x26, 0xd3, 0xc4, 0x44, 0xa6, 0xbd, 0xf9, 0xeb, 0x9c, 0x7b, 0xcf, 0xb9,
   493  	0xc7, 0x70, 0x7b, 0x9e, 0x4c, 0x02, 0xc5, 0xe8, 0x8c, 0xa9, 0x00, 0x17, 0x41, 0x2f, 0x49, 0x85,
   494  	0x12, 0xe4, 0xce, 0x38, 0x4c, 0xc5, 0x8c, 0x09, 0x49, 0xb3, 0x7b, 0xc6, 0x4f, 0x22, 0xce, 0xbc,
   495  	0x3f, 0x55, 0x70, 0x46, 0x5c, 0xaa, 0x20, 0x8e, 0x0f, 0x12, 0x96, 0x06, 0x2a, 0x12, 0x9c, 0xbc,
   496  	0x06, 0x4b, 0xfd, 0x4c, 0x98, 0x5b, 0xe9, 0x54, 0xbb, 0xeb, 0xfd, 0xa7, 0xbd, 0x7f, 0x63, 0x7b,
   497  	0x17, 0x71, 0xbd, 0x4f, 0x08, 0x22, 0xb7, 0xc0, 0xd6, 0x75, 0xa9, 0x98, 0x4e, 0x25, 0x53, 0x6e,
   498  	0xb5, 0x53, 0xe9, 0xae, 0xe5, 0x87, 0x31, 0x42, 0x55, 0xe8, 0xd6, 0xcc, 0xe1, 0x0b, 0xb0, 0x65,
   499  	0x3a, 0xa6, 0xec, 0x87, 0x62, 0x5c, 0x49, 0xd7, 0xea, 0xd4, 0xba, 0x76, 0xff, 0xc1, 0x65, 0xd5,
   500  	0x7c, 0xf3, 0x8c, 0x10, 0x00, 0x0d, 0xca, 0x88, 0x6e, 0x20, 0x91, 0xa5, 0x89, 0x26, 0x52, 0xe5,
   501  	0x44, 0xf5, 0xb2, 0x44, 0x1a, 0x94, 0x11, 0x35, 0x0c, 0x91, 0x0b, 0x8e, 0x69, 0x53, 0x86, 0x41,
   502  	0x7f, 0x73, 0x8b, 0x86, 0x81, 0x0c, 0xdd, 0x26, 0xde, 0xb4, 0xbc, 0x6d, 0xb0, 0x8c, 0x3a, 0x1b,
   503  	0x1a, 0x47, 0xfe, 0xe1, 0xde, 0xe0, 0xbd, 0xef, 0xac, 0x90, 0x75, 0x80, 0x6c, 0x43, 0x77, 0xbe,
   504  	0x38, 0x15, 0xd2, 0x04, 0x6b, 0xff, 0xe0, 0xb3, 0xef, 0x54, 0x91, 0xbb, 0xbe, 0x73, 0xbc, 0x3b,
   505  	0x1a, 0x0e, 0x9d, 0x9a, 0xf7, 0x1c, 0xea, 0x59, 0x49, 0x74, 0x01, 0x1d, 0x4b, 0x15, 0xfd, 0x1a,
   506  	0x8b, 0xf1, 0x37, 0xb4, 0x57, 0xd7, 0xc4, 0xb7, 0x7c, 0x3e, 0x5b, 0x1c, 0x49, 0x63, 0x97, 0xe5,
   507  	0x9d, 0x01, 0x1c, 0x47, 0x27, 0x3c, 0x50, 0xf3, 0x94, 0x49, 0xf2, 0x0e, 0x25, 0xe7, 0x3b, 0x44,
   508  	0x69, 0x75, 0x4f, 0x2e, 0x53, 0x57, 0xe0, 0x8a, 0xe5, 0xfd, 0xc7, 0xb0, 0x9a, 0x6f, 0x48, 0x1b,
   509  	0x1a, 0xa7, 0x2c, 0x95, 0x38, 0x30, 0xd3, 0xc1, 0x1a, 0x69, 0x81, 0xa5, 0x55, 0x9b, 0xda, 0x2d,
   510  	0xef, 0x11, 0xd8, 0xd9, 0x60, 0x47, 0x7c, 0x2a, 0xf4, 0xa5, 0x8c, 0xce, 0x58, 0xd6, 0x2c, 0xee,
   511  	0x8c, 0x29, 0x8b, 0xa7, 0xbf, 0x8a, 0xf0, 0x1c, 0xa6, 0x62, 0xcc, 0x26, 0x9a, 0xfe, 0x6a, 0xe1,
   512  	0xc9, 0x71, 0x8b, 0xf0, 0xbc, 0x01, 0x10, 0xcb, 0x38, 0x69, 0x33, 0xb4, 0xd4, 0x6e, 0xd9, 0xfc,
   513  	0x91, 0x4d, 0x68, 0x8a, 0x78, 0x42, 0x23, 0xec, 0xdb, 0x44, 0xcc, 0xee, 0x3f, 0xfc, 0x0f, 0xd6,
   514  	0x48, 0x44, 0x18, 0x67, 0xdf, 0x17, 0x30, 0xab, 0x34, 0xcc, 0x23, 0x59, 0x24, 0x70, 0xd6, 0x1f,
   515  	0xfc, 0xa3, 0x8f, 0xfe, 0x9e, 0xb3, 0xe2, 0xfd, 0xae, 0xc1, 0xc6, 0x2e, 0x8b, 0x55, 0x30, 0x48,
   516  	0xc7, 0x61, 0x74, 0xca, 0xf6, 0x03, 0x1e, 0x4d, 0x99, 0x54, 0x64, 0x08, 0x1b, 0x09, 0x4e, 0x3e,
   517  	0xd2, 0x7d, 0xd2, 0x73, 0x12, 0x2b, 0x57, 0x94, 0x38, 0x80, 0x36, 0x17, 0x22, 0xa1, 0xd7, 0x70,
   518  	0xc9, 0x05, 0x30, 0x61, 0xa3, 0x66, 0xae, 0xe6, 0x2b, 0xbe, 0xb2, 0x5e, 0x3e, 0xdb, 0xde, 0x22,
   519  	0xf7, 0xe0, 0x66, 0x11, 0xb4, 0xe5, 0x07, 0xb6, 0xcc, 0xe0, 0xef, 0x42, 0xfb, 0xdc, 0x95, 0x41,
   520  	0x2e, 0xfe, 0xde, 0x5b, 0x20, 0xda, 0xf3, 0x42, 0x9c, 0xb1, 0xb1, 0x59, 0xde, 0x7d, 0x24, 0xd0,
   521  	0xee, 0x5f, 0x20, 0x58, 0x2d, 0x4f, 0x80, 0x99, 0x49, 0x96, 0x29, 0x92, 0x2e, 0x94, 0x72, 0x23,
   522  	0x8f, 0xdd, 0xdf, 0x00, 0x00, 0x00, 0xff, 0xff, 0x53, 0xd4, 0x06, 0x13, 0x30, 0x05, 0x00, 0x00,
   523  }