func UpdatedAt(ch swarm.Chunk) (uint64, error) {
	d := ch.Data()
	if len(d) < 113 {
		return 0, fmt.Errorf("too short: %d", len(d))
	}
	return binary.BigEndian.Uint64(d[105:113]), nil
}
UpdatedAt extracts the time of feed other than update
package feeds
import (
	"context"
	"encoding/binary"
	"fmt"
	"time"
	"github.com/ethsana/sana/pkg/soc"
	"github.com/ethsana/sana/pkg/storage"
	"github.com/ethsana/sana/pkg/swarm"
)
type Lookup interface {
	At(ctx context.Context, at, after int64) (chunk swarm.Chunk, currentIndex, nextIndex Index, err error)
}
type Getter struct {
	getter storage.Getter
	*Feed
}
func NewGetter(getter storage.Getter, feed *Feed) *Getter {
	return &Getter{getter, feed}
}
func Latest(ctx context.Context, l Lookup, after int64) (swarm.Chunk, error) {
	c, _, _, err := l.At(ctx, time.Now().Unix(), after)
	return c, err
}
func (f *Getter) Get(ctx context.Context, i Index) (swarm.Chunk, error) {
	addr, err := f.Feed.Update(i).Address()
	if err != nil {
		return nil, err
	}
	return f.getter.Get(ctx, storage.ModeGetRequest, addr)
}
func FromChunk(ch swarm.Chunk) (uint64, []byte, error) {
	s, err := soc.FromChunk(ch)
	if err != nil {
		return 0, nil, err
	}
	cac := s.WrappedChunk()
	if len(cac.Data()) < 16 {
		return 0, nil, fmt.Errorf("feed update payload too short")
	}
	payload := cac.Data()[16:]
	at := binary.BigEndian.Uint64(cac.Data()[8:16])
	return at, payload, nil
}