rmon/main.go

766 lines
35 KiB
Go

package main
import (
"bytes"
"compress/gzip"
"fmt"
"html/template"
"io"
"log"
"net"
"net/http"
"os"
"sort"
"strconv"
"strings"
"sync"
"time"
"inet.af/netaddr"
"github.com/lemmi/closer"
"git.freifunk-franken.de/jkimmel/abbel/capture"
"git.freifunk-franken.de/jkimmel/abbel/tlv"
)
var (
startTime = time.Now()
)
type route struct {
Dst netaddr.IPPrefix
Counter uint
UnreachableDuration time.Duration
UnreachableSince time.Time
ReachableSince time.Time
Hostname string
}
func (r route) DurationUntilRounded(t time.Time) time.Duration {
return r.DurationUntil(t).Round(time.Second)
}
func (r route) DurationUntil(t time.Time) time.Duration {
ret := r.UnreachableDuration
if !r.UnreachableSince.IsZero() {
ret += t.Sub(r.UnreachableSince)
}
return ret
}
func (r route) Downtime(now time.Time) float64 {
return float64(r.DurationUntil(now)) / float64(now.Sub(startTime)) * 100
}
func (r route) Noise(now time.Time) bool {
return r.UnreachableSince.IsZero() &&
r.Counter <= uint(now.Sub(startTime).Hours())+10 &&
r.Downtime(now) < 0.5
}
func (r route) String() string {
now := time.Now()
return fmt.Sprintf("%44s %5d %2.3f%% %s", r.Dst, r.Counter, r.Downtime(now), r.DurationUntil(now))
}
type routeStats struct {
sync.Mutex
stats map[netaddr.IPPrefix]*route
}
func newRouteStats() *routeStats {
return &routeStats{
stats: make(map[netaddr.IPPrefix]*route),
}
}
func (rs *routeStats) add(prefix netaddr.IPPrefix) {
rs.Lock()
defer rs.Unlock()
r := rs.stats[prefix]
if r == nil {
r = &route{Dst: prefix}
go func(r *route, rs *routeStats) {
names, err := net.LookupAddr(r.Dst.IP().String())
if err != nil || len(names) == 0 {
return
}
if strings.HasSuffix(names[0], ".rdns.f3netze.de.") {
return
}
rs.Lock()
r.Hostname = strings.TrimRight(names[0], ".")
rs.Unlock()
}(r, rs)
}
if r.UnreachableSince.IsZero() {
r.UnreachableSince = time.Now()
r.ReachableSince = time.Time{}
r.Counter++
}
rs.stats[prefix] = r
}
func (rs *routeStats) del(prefix netaddr.IPPrefix) {
rs.Lock()
defer rs.Unlock()
r := rs.stats[prefix]
if r == nil {
return
}
if !r.UnreachableSince.IsZero() {
r.UnreachableDuration += time.Since(r.UnreachableSince)
r.UnreachableSince = time.Time{}
r.ReachableSince = time.Now()
}
rs.stats[prefix] = r
}
func (rs *routeStats) getAll() []route {
ret := make([]route, 0, len(rs.stats))
rs.Lock()
defer rs.Unlock()
for _, v := range rs.stats {
ret = append(ret, *v)
}
return ret
}
func (rs *routeStats) getLongest() []route {
ret := rs.getAll()
t := time.Now()
sort.Slice(ret, func(i, j int) bool {
id := ret[i].Downtime(t)
jd := ret[j].Downtime(t)
if ret[i].Counter != ret[j].Counter &&
(id == jd ||
(id < 0.5 && jd < 0.5)) {
return ret[i].Counter > ret[j].Counter
}
return id > jd
})
return ret
}
func monitor(done <-chan struct{}, rs *routeStats) error {
conn, err := capture.FromInterface("any")
if err != nil {
return err
}
go func() {
<-done
closer.Do(conn)
}()
buf := [4096]byte{}
var s tlv.PacketDecoder
for {
b, src, ifindex, err := conn.ReadFrom(buf[:])
if err != nil {
fmt.Println("Skipping packet:", err)
continue
}
s.Reset(b, src, ifindex)
for s.Scan() {
switch t := s.TLV().(type) {
case tlv.Update:
if t.Metric == 0xffff {
rs.add(t.Prefix)
} else {
rs.del(t.Prefix)
}
}
}
}
}
func render(w io.Writer, rs []route) error {
const tmplHTML = `<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>FFF Wall-of-not-so-reachable-networks</title>
<style>
html {
margin: 0 auto;
padding: 0;
font-size: 11pt;
}
body {
font-family: sans-serif;
text-align: center;
}
table {
border-spacing: 0;
margin: auto;
}
td, th {
padding: 0.1em 2em;
}
td {
text-align: right;
font-family: monospace;
}
.dst, .hostname {
text-align: left;
}
.unreachable {
color: darkred;
background-color: lightgray;
}
table tr.noise {
display: none;
}
tbody tr:nth-child(n+2):hover {
background-color: silver;
}
#showAll:checked ~ table tr.noise {
color: midnightblue;
display: table-row;
}
</style>
</head>
<body>
<h1>FFF Wall-of-not-so-reachable-networks</h1>
<table>
<tr><td> Start:</td><td>{{ .Start.Format "2006-01-02 15:04:05" }}</td></tr>
<tr><td>Update:</td><td>{{ .Now.Format "2006-01-02 15:04:05" }}</td></tr>
</table>
Show All <input id="showAll" type="checkbox">
<table>
<thead>
<tr>
<th>Net</th>
<th>Hostname</th>
<th colspan="3">Downtime</th>
</tr>
<tr>
<th></th>
<th></th>
<th>Counts</th>
<th>rel</th>
<th>abs</th>
</tr>
</thead>
<tbody>
<tr><td colspan="5"><hr/></td></tr>
{{- $now := .Now -}}
{{- range .R }}
<tr class="
{{- if not .UnreachableSince.IsZero }}unreachable{{end -}}
{{- if .Noise $now }} noise{{end -}}
">
<td class="dst">{{.Dst.String}}</td>
<td class="hostname">{{with .Hostname}}<a href="//{{.}}" target="_blank">{{.}}</a>{{end}}</td>
<td class="counter">{{.Counter}}</td>
<td class="downtime">{{.Downtime $now | printf "%.3f%%"}}</td>
<td class="duration">{{.DurationUntilRounded $now}}</td>
</tr>
{{- end}}
</tbody>
</table>
</body>
</html>
`
data := struct {
Now time.Time
Start time.Time
R []route
}{
time.Now(),
startTime,
rs,
}
t := template.Must(template.New("main").Parse(tmplHTML))
return t.Execute(w, data)
}
func compress(cw io.Writer, cr io.Reader, err error) error {
if err != nil {
return err
}
gzw, err := gzip.NewWriterLevel(cw, gzip.BestCompression)
if err != nil {
return err
}
if _, err = io.Copy(gzw, cr); err != nil {
return err
}
return gzw.Close()
}
func acceptGzip(h http.Header) bool {
for _, s := range strings.Split(h.Get("Accept-Encoding"), ",") {
if strings.TrimSpace(s) == "gzip" {
return true
}
}
return false
}
func cachedRender(rs *routeStats) http.HandlerFunc {
var m sync.Mutex
var timestamp time.Time
var content bytes.Buffer
var compressed bytes.Buffer
return func(w http.ResponseWriter, r *http.Request) {
if r.Method != http.MethodGet {
http.Error(w, http.StatusText(http.StatusMethodNotAllowed), http.StatusMethodNotAllowed)
return
}
if strings.TrimLeft(r.URL.Path, "/") == "favicon.ico" {
w.Header().Add("Cache-Control", "max-age=300")
w.Header().Set("Content-Length", strconv.FormatInt(int64(len(favico)), 10))
http.ServeContent(w, r, r.URL.Path, startTime, bytes.NewReader(favico))
return
}
if r.URL.Path != "/" {
http.NotFound(w, r)
return
}
var err error
m.Lock()
if time.Since(timestamp) > 5*time.Second {
content.Reset()
compressed.Reset()
err = render(&content, rs.getLongest())
err = compress(&compressed, bytes.NewReader(content.Bytes()), err)
timestamp = time.Now()
}
m.Unlock()
if err != nil {
fmt.Fprintln(os.Stderr, err)
fmt.Fprintln(w, err)
return
}
w.Header().Add("Cache-Control", "max-age=5")
w.Header().Add("Content-Type", "text/html; charset=utf-8")
c := content
if acceptGzip(r.Header) {
c = compressed
w.Header().Add("Content-Encoding", "gzip")
}
w.Header().Set("Content-Length", strconv.FormatInt(int64(c.Len()), 10))
http.ServeContent(w, r, "/", timestamp, bytes.NewReader(c.Bytes()))
}
}
func main() {
rs := newRouteStats()
done := make(chan struct{})
go monitor(done, rs)
log.Fatal(http.ListenAndServe(":8080", cachedRender(rs)))
}
var favico = []byte{
0x00, 0x00, 0x01, 0x00, 0x01, 0x00, 0x20, 0x22, 0x00, 0x00, 0x01, 0x00,
0x20, 0x00, 0xb0, 0x11, 0x00, 0x00, 0x16, 0x00, 0x00, 0x00, 0x28, 0x00,
0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x44, 0x00, 0x00, 0x00, 0x01, 0x00,
0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe1, 0xe1,
0xe1, 0x00, 0xe1, 0xe1, 0xe1, 0x00, 0xe1, 0xe1, 0xe1, 0x00, 0xe1, 0xe1,
0xe1, 0x00, 0xe1, 0xe1, 0xe1, 0x00, 0xe1, 0xe1, 0xe1, 0x00, 0xe1, 0xe1,
0xe1, 0x00, 0xe1, 0xe1, 0xe1, 0x00, 0xe1, 0xe1, 0xe1, 0x00, 0xe1, 0xe1,
0xe1, 0x00, 0xe1, 0xe1, 0xe1, 0x00, 0xe1, 0xe1, 0xe1, 0x00, 0xe1, 0xe1,
0xe1, 0x00, 0xe1, 0xe1, 0xe1, 0x00, 0xe1, 0xe1, 0xe1, 0x00, 0xe1, 0xe1,
0xe1, 0x00, 0xe1, 0xe1, 0xe1, 0x00, 0xe1, 0xe1, 0xe1, 0x00, 0xe1, 0xe1,
0xe1, 0x00, 0xe1, 0xe1, 0xe1, 0x00, 0xe1, 0xe1, 0xe1, 0x00, 0xe1, 0xe1,
0xe1, 0x00, 0xe1, 0xe1, 0xe1, 0x00, 0xe1, 0xe1, 0xe1, 0x00, 0xe1, 0xe1,
0xe1, 0x00, 0xe1, 0xe1, 0xe1, 0x00, 0xe1, 0xe1, 0xe1, 0x00, 0xe1, 0xe1,
0xe1, 0x00, 0xe1, 0xe1, 0xe1, 0x00, 0xe1, 0xe1, 0xe1, 0x00, 0xe1, 0xe1,
0xe1, 0x00, 0xe1, 0xe1, 0xe1, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe,
0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe,
0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe,
0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe,
0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe,
0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe,
0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe,
0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe,
0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe,
0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe,
0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe,
0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe,
0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe,
0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe,
0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe,
0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe,
0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe,
0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe,
0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe,
0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe,
0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe,
0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe,
0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe,
0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0x00, 0x00,
0x00, 0x00, 0x0a, 0x0a, 0x0a, 0x01, 0x01, 0x01, 0x01, 0x23, 0x01, 0x01,
0x01, 0x53, 0x01, 0x01, 0x01, 0x6f, 0x01, 0x01, 0x01, 0x7f, 0x01, 0x01,
0x01, 0x87, 0x01, 0x01, 0x01, 0x86, 0x01, 0x01, 0x01, 0x80, 0x01, 0x01,
0x01, 0x76, 0x01, 0x01, 0x01, 0x64, 0x01, 0x01, 0x01, 0x4e, 0x01, 0x01,
0x01, 0x2e, 0x01, 0x01, 0x01, 0x0d, 0x08, 0x08, 0x08, 0x02, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe,
0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe,
0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe,
0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe,
0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe,
0xfe, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x46, 0x01, 0x01,
0x01, 0xd0, 0x01, 0x01, 0x01, 0xed, 0x01, 0x01, 0x01, 0xb1, 0x01, 0x01,
0x01, 0x8e, 0x01, 0x01, 0x01, 0x7b, 0x01, 0x01, 0x01, 0x73, 0x01, 0x01,
0x01, 0x75, 0x01, 0x01, 0x01, 0x7c, 0x01, 0x01, 0x01, 0x8b, 0x01, 0x01,
0x01, 0xa2, 0x01, 0x01, 0x01, 0xc2, 0x01, 0x01, 0x01, 0xeb, 0x01, 0x01,
0x01, 0xfc, 0x01, 0x01, 0x01, 0xde, 0x01, 0x01, 0x01, 0xb0, 0x01, 0x01,
0x01, 0x74, 0x01, 0x01, 0x01, 0x2a, 0x0c, 0x0c, 0x0c, 0x01, 0x00, 0x00,
0x00, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe,
0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe,
0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe,
0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0x01, 0x01,
0x01, 0x48, 0x01, 0x01, 0x01, 0xf4, 0x01, 0x01, 0x01, 0x66, 0x02, 0x02,
0x02, 0x05, 0x00, 0x00, 0x00, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe,
0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe,
0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x1c, 0x01, 0x01,
0x01, 0x54, 0x01, 0x01, 0x01, 0x9e, 0x01, 0x01, 0x01, 0xed, 0x01, 0x01,
0x01, 0xff, 0x01, 0x01, 0x01, 0xcd, 0x01, 0x01, 0x01, 0x50, 0x11, 0x11,
0x11, 0x01, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe,
0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe,
0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe,
0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0x01, 0x01, 0x01, 0xc8, 0x01, 0x01,
0x01, 0x67, 0x00, 0x00, 0x00, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe,
0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe,
0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe,
0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe,
0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0x00, 0x00,
0x00, 0x00, 0x03, 0x03, 0x03, 0x08, 0x01, 0x01, 0x01, 0x5d, 0x01, 0x01,
0x01, 0xdb, 0x01, 0x01, 0x01, 0xff, 0x01, 0x01, 0x01, 0x88, 0x00, 0x00,
0x00, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe,
0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe,
0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe,
0xfe, 0x00, 0x01, 0x01, 0x01, 0xf6, 0x02, 0x02, 0x02, 0x0f, 0xfe, 0xfe,
0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe,
0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe,
0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe,
0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe,
0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe,
0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0x02, 0x02, 0x02, 0x09, 0x01, 0x01,
0x01, 0xa8, 0x01, 0x01, 0x01, 0xfe, 0x02, 0x02, 0x02, 0x19, 0xfe, 0xfe,
0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe,
0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe,
0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0x01, 0x01,
0x01, 0xf0, 0x01, 0x01, 0x01, 0x0c, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe,
0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe,
0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe,
0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe,
0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe,
0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe,
0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0x03, 0x03, 0x03, 0x07, 0x01, 0x01,
0x01, 0xe7, 0x02, 0x02, 0x02, 0x22, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe,
0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe,
0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe,
0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0x01, 0x01, 0x01, 0xbc, 0x01, 0x01,
0x01, 0x57, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe,
0xfe, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x10, 0x01, 0x01,
0x01, 0x35, 0x01, 0x01, 0x01, 0x46, 0x01, 0x01, 0x01, 0x3e, 0x01, 0x01,
0x01, 0x14, 0x1b, 0x1b, 0x1b, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x02, 0x02, 0x09, 0x02, 0x02,
0x02, 0x0a, 0x0e, 0x0e, 0x0e, 0x01, 0x00, 0x00, 0x00, 0x00, 0xfe, 0xfe,
0xfe, 0x00, 0x53, 0x53, 0x53, 0x00, 0x01, 0x01, 0x01, 0xbe, 0x04, 0x04,
0x04, 0x03, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe,
0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe,
0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe,
0xfe, 0x00, 0x01, 0x01, 0x01, 0x3f, 0x01, 0x01, 0x01, 0xe1, 0x01, 0x01,
0x01, 0x1e, 0x00, 0x00, 0x00, 0x00, 0x02, 0x02, 0x02, 0x12, 0x01, 0x01,
0x01, 0xa0, 0x01, 0x01, 0x01, 0xef, 0x01, 0x01, 0x01, 0xc2, 0x01, 0x01,
0x01, 0xac, 0x01, 0x01, 0x01, 0xba, 0x01, 0x01, 0x01, 0xdb, 0x01, 0x01,
0x01, 0xd2, 0x01, 0x01, 0x01, 0xa9, 0x01, 0x01, 0x01, 0xaa, 0x01, 0x01,
0x01, 0xd3, 0x01, 0x01, 0x01, 0xf3, 0x01, 0x01, 0x01, 0xf6, 0x01, 0x01,
0x01, 0xd3, 0x01, 0x01, 0x01, 0x5e, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01,
0x01, 0x5f, 0x01, 0x01, 0x01, 0x83, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe,
0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe,
0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe,
0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0x00, 0x00,
0x00, 0x00, 0x01, 0x01, 0x01, 0x55, 0x01, 0x01, 0x01, 0xdb, 0x01, 0x01,
0x01, 0x89, 0x01, 0x01, 0x01, 0xd9, 0x01, 0x01, 0x01, 0x81, 0x02, 0x02,
0x02, 0x11, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x21, 0x01, 0x01,
0x01, 0x92, 0x01, 0x01, 0x01, 0x8f, 0x01, 0x01, 0x01, 0x73, 0x01, 0x01,
0x01, 0x70, 0x01, 0x01, 0x01, 0x8f, 0x01, 0x01, 0x01, 0xe4, 0x01, 0x01,
0x01, 0xff, 0x01, 0x01, 0x01, 0xba, 0x01, 0x01, 0x01, 0xab, 0x04, 0x04,
0x04, 0x06, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe,
0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe,
0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe,
0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0x00, 0x00,
0x00, 0x00, 0x02, 0x02, 0x02, 0x0f, 0x01, 0x01, 0x01, 0x9a, 0x01, 0x01,
0x01, 0x6e, 0x00, 0x00, 0x00, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe,
0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe,
0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfe, 0xfe,
0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0x00, 0x00,
0x00, 0x00, 0x01, 0x01, 0x01, 0x12, 0x01, 0x01, 0x01, 0xec, 0x01, 0x01,
0x01, 0x74, 0x0e, 0x0e, 0x0e, 0x01, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe,
0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe,
0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe,
0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe,
0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe,
0xfe, 0x00, 0x01, 0x01, 0x01, 0x78, 0x01, 0x01, 0x01, 0x30, 0xfe, 0xfe,
0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe,
0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0x00, 0x00,
0x00, 0x00, 0x01, 0x01, 0x01, 0xcb, 0x01, 0x01, 0x01, 0x2a, 0xfe, 0xfe,
0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe,
0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe,
0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe,
0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe,
0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0x01, 0x01,
0x01, 0x38, 0x01, 0x01, 0x01, 0x80, 0x00, 0x00, 0x00, 0x00, 0xfe, 0xfe,
0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe,
0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0x01, 0x01, 0x01, 0x4f, 0x01, 0x01,
0x01, 0x75, 0x01, 0x01, 0x01, 0x96, 0x01, 0x01, 0x01, 0xa0, 0x01, 0x01,
0x01, 0x6f, 0x01, 0x01, 0x01, 0x5a, 0x01, 0x01, 0x01, 0x91, 0x01, 0x01,
0x01, 0xa0, 0x00, 0x00, 0x00, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe,
0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe,
0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe,
0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe,
0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe,
0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01,
0x01, 0x7d, 0x01, 0x01, 0x01, 0x93, 0x01, 0x01, 0x01, 0x33, 0x01, 0x01,
0x01, 0x18, 0x01, 0x01, 0x01, 0x21, 0x01, 0x01, 0x01, 0x3d, 0x01, 0x01,
0x01, 0x58, 0x01, 0x01, 0x01, 0x49, 0x03, 0x03, 0x03, 0x06, 0x00, 0x00,
0x00, 0x00, 0x01, 0x01, 0x01, 0x47, 0x01, 0x01, 0x01, 0xef, 0x01, 0x01,
0x01, 0xf6, 0x01, 0x01, 0x01, 0x34, 0x0c, 0x0c, 0x0c, 0x01, 0xfe, 0xfe,
0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe,
0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe,
0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe,
0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe,
0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe,
0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01,
0x01, 0x2b, 0x01, 0x01, 0x01, 0x79, 0x01, 0x01, 0x01, 0x8f, 0x01, 0x01,
0x01, 0x85, 0x01, 0x01, 0x01, 0x69, 0x01, 0x01, 0x01, 0x4f, 0x01, 0x01,
0x01, 0x69, 0x01, 0x01, 0x01, 0xb9, 0x01, 0x01, 0x01, 0x22, 0xfe, 0xfe,
0xfe, 0x00, 0x01, 0x01, 0x01, 0x49, 0x01, 0x01, 0x01, 0xff, 0x01, 0x01,
0x01, 0x37, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe,
0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe,
0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe,
0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe,
0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe,
0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe,
0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe,
0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe,
0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01,
0x01, 0x1d, 0x01, 0x01, 0x01, 0xbf, 0x01, 0x01, 0x01, 0x0d, 0x00, 0x00,
0x00, 0x00, 0x01, 0x01, 0x01, 0xd9, 0x01, 0x01, 0x01, 0x30, 0xfe, 0xfe,
0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe,
0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe,
0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe,
0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe,
0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe,
0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe,
0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe,
0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x14, 0x14, 0x14, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0x01, 0x01,
0x01, 0x75, 0x01, 0x01, 0x01, 0x46, 0x13, 0x13, 0x13, 0x01, 0x01, 0x01,
0x01, 0xc2, 0x02, 0x02, 0x02, 0x05, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe,
0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe,
0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe,
0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe,
0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe,
0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe,
0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe,
0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe,
0xfe, 0x00, 0x01, 0x01, 0x01, 0x92, 0x01, 0x01, 0x01, 0x12, 0x01, 0x01,
0x01, 0x56, 0x01, 0x01, 0x01, 0x39, 0x01, 0x01, 0x01, 0xae, 0x01, 0x01,
0x01, 0x22, 0x01, 0x01, 0x01, 0x84, 0x01, 0x01, 0x01, 0x5f, 0xfe, 0xfe,
0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe,
0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe,
0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe,
0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe,
0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe,
0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe,
0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe,
0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0x01, 0x01,
0x01, 0xbf, 0x01, 0x01, 0x01, 0x6a, 0x01, 0x01, 0x01, 0x10, 0x01, 0x01,
0x01, 0x8e, 0x01, 0x01, 0x01, 0xc1, 0x01, 0x01, 0x01, 0xaf, 0x01, 0x01,
0x01, 0x54, 0x00, 0x00, 0x00, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe,
0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe,
0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe,
0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe,
0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe,
0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe,
0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe,
0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe,
0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0x02, 0x02, 0x02, 0x0e, 0x01, 0x01,
0x01, 0xba, 0x01, 0x01, 0x01, 0x6f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe,
0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe,
0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe,
0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe,
0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe,
0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe,
0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe,
0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe,
0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0x03, 0x03,
0x03, 0x04, 0x01, 0x01, 0x01, 0x74, 0x01, 0x01, 0x01, 0xd9, 0x01, 0x01,
0x01, 0x3f, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0x01, 0x01,
0x01, 0x64, 0x03, 0x03, 0x03, 0x07, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe,
0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe,
0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe,
0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe,
0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe,
0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe,
0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe,
0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe,
0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0x01, 0x01, 0x01, 0x7c, 0x01, 0x01,
0x01, 0xac, 0x00, 0x00, 0x00, 0x17, 0x00, 0x00, 0x00, 0x00, 0xfe, 0xfe,
0xfe, 0x00, 0x23, 0x23, 0x23, 0x00, 0x01, 0x01, 0x01, 0xba, 0x01, 0x01,
0x01, 0x2e, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe,
0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe,
0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe,
0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe,
0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe,
0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe,
0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe,
0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe,
0xfe, 0x00, 0x01, 0x01, 0x01, 0x98, 0x01, 0x01, 0x01, 0x58, 0x01, 0x01,
0x01, 0x95, 0x01, 0x01, 0x01, 0x2e, 0xfe, 0xfe, 0xfe, 0x00, 0x01, 0x01,
0x01, 0x77, 0x01, 0x01, 0x01, 0xa4, 0x19, 0x19, 0x19, 0x00, 0xfe, 0xfe,
0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe,
0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe,
0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe,
0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe,
0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe,
0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe,
0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe,
0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0x01, 0x01,
0x01, 0x1c, 0x01, 0x01, 0x01, 0xa6, 0x01, 0x01, 0x01, 0xa7, 0x02, 0x02,
0x02, 0x0e, 0x02, 0x02, 0x02, 0x10, 0x01, 0x01, 0x01, 0xe2, 0x01, 0x01,
0x01, 0x0b, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe,
0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe,
0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe,
0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe,
0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe,
0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe,
0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe,
0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe,
0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0x02, 0x02,
0x02, 0x12, 0x01, 0x01, 0x01, 0xd8, 0x03, 0x03, 0x03, 0x04, 0xfe, 0xfe,
0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe,
0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe,
0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe,
0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe,
0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe,
0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe,
0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe,
0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe,
0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe,
0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01,
0x01, 0x5b, 0x01, 0x01, 0x01, 0x95, 0x01, 0x01, 0x01, 0x21, 0xfe, 0xfe,
0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe,
0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe,
0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe,
0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe,
0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe,
0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe,
0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe,
0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe,
0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe,
0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x06,
0x06, 0x02, 0x03, 0x03, 0x03, 0x04, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe,
0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe,
0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe,
0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe,
0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe,
0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe,
0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe,
0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe,
0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe,
0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe,
0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe,
0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe,
0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe,
0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe,
0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe,
0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe,
0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe,
0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe,
0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe,
0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe,
0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe,
0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe,
0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe,
0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe,
0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe,
0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe,
0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe,
0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe,
0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe,
0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe,
0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe,
0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe,
0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe,
0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe,
0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe,
0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe,
0xfe, 0x00, 0x0b, 0x0b, 0x0b, 0x00, 0x0b, 0x0b, 0x0b, 0x00, 0x0b, 0x0b,
0x0b, 0x00, 0x0b, 0x0b, 0x0b, 0x00, 0x0b, 0x0b, 0x0b, 0x00, 0x0b, 0x0b,
0x0b, 0x00, 0x0b, 0x0b, 0x0b, 0x00, 0x0b, 0x0b, 0x0b, 0x00, 0x0b, 0x0b,
0x0b, 0x00, 0x0b, 0x0b, 0x0b, 0x00, 0x0b, 0x0b, 0x0b, 0x00, 0x0b, 0x0b,
0x0b, 0x00, 0x0b, 0x0b, 0x0b, 0x00, 0x0b, 0x0b, 0x0b, 0x00, 0x0b, 0x0b,
0x0b, 0x00, 0x0b, 0x0b, 0x0b, 0x00, 0x0b, 0x0b, 0x0b, 0x00, 0x0b, 0x0b,
0x0b, 0x00, 0x0b, 0x0b, 0x0b, 0x00, 0x0b, 0x0b, 0x0b, 0x00, 0x0b, 0x0b,
0x0b, 0x00, 0x0b, 0x0b, 0x0b, 0x00, 0x0b, 0x0b, 0x0b, 0x00, 0x0b, 0x0b,
0x0b, 0x00, 0x0b, 0x0b, 0x0b, 0x00, 0x0b, 0x0b, 0x0b, 0x00, 0x0b, 0x0b,
0x0b, 0x00, 0x0b, 0x0b, 0x0b, 0x00, 0x0b, 0x0b, 0x0b, 0x00, 0x0b, 0x0b,
0x0b, 0x00, 0x0b, 0x0b, 0x0b, 0x00, 0x0b, 0x0b, 0x0b, 0x00, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xfe, 0x00, 0x07, 0xff, 0xfc, 0x00, 0x00, 0x7f, 0xf8, 0x7f,
0xe0, 0x1f, 0xf9, 0xff, 0xfc, 0x1f, 0xf9, 0xff, 0xff, 0x0f, 0xf9, 0xff,
0xff, 0x8f, 0xf9, 0xe0, 0xf1, 0xcf, 0xf8, 0x80, 0x00, 0x9f, 0xfc, 0x0f,
0x00, 0x1f, 0xfe, 0x3f, 0xfc, 0x3f, 0xff, 0x3f, 0xfe, 0x7f, 0xff, 0x3f,
0x00, 0xff, 0xff, 0x80, 0x20, 0xff, 0xff, 0xc0, 0x11, 0xff, 0xff, 0xff,
0x89, 0xff, 0xff, 0xff, 0xc1, 0xff, 0xff, 0xfc, 0x03, 0xff, 0xff, 0xfc,
0x07, 0xff, 0xff, 0xfc, 0x7f, 0xff, 0xff, 0xf8, 0x67, 0xff, 0xff, 0xf8,
0xe7, 0xff, 0xff, 0xf8, 0x4f, 0xff, 0xff, 0xf8, 0x0f, 0xff, 0xff, 0xff,
0x8f, 0xff, 0xff, 0xff, 0xc7, 0xff, 0xff, 0xff, 0xe7, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff,
}