Commit 1d947d22 authored by Christian Pointner's avatar Christian Pointner
Browse files

added healthz endpoint

parent 7773a228
......@@ -241,3 +241,8 @@ func Middleware() gin.HandlerFunc {
c.Request = attachSessionToRequest(c.Request, s)
}
}
func Healthz() error {
// TODO: implement this!
return nil
}
......@@ -45,6 +45,7 @@ const (
WebUIPathPrefix = "/ui/"
WebAuthPrefix = "/auth/"
WebAPIv1Prefix = "/api/v1/"
HealthzEndpoint = "/healthz"
)
func apache2CombinedLogger(param gin.LogFormatterParams) string {
......@@ -91,6 +92,41 @@ func installLogger(r *gin.Engine, conf WebConfig) error {
return nil
}
type HealthStatus struct {
err error
}
func (s HealthStatus) String() string {
if s.err == nil {
return "OK"
}
return s.err.Error()
}
func (s HealthStatus) MarshalText() (data []byte, err error) {
data = []byte(s.String())
return
}
type Health struct {
Auth HealthStatus `json:"auth"`
Store HealthStatus `json:"store"`
Importer HealthStatus `json:"importer"`
}
func healthzHandler(c *gin.Context, st *store.Store, im *importer.Importer) {
h := Health{}
h.Auth.err = auth.Healthz()
h.Store.err = st.Healthz()
h.Importer.err = im.Healthz()
code := http.StatusOK
if h.Auth.err != nil || h.Store.err != nil || h.Importer.err != nil {
code = http.StatusServiceUnavailable
}
c.JSON(code, h)
}
func runWeb(ln net.Listener, st *store.Store, im *importer.Importer, conf WebConfig) error {
gin.SetMode(gin.ReleaseMode)
......@@ -122,6 +158,7 @@ func runWeb(ln net.Listener, st *store.Store, im *importer.Importer, conf WebCon
apiV1.InstallHTTPHandler(r.Group(WebAPIv1Prefix), st, im, infoLog, errLog, dbgLog)
auth.InstallHTTPHandler(r.Group(WebAuthPrefix))
r.GET(HealthzEndpoint, func(c *gin.Context) { healthzHandler(c, st, im) })
srv := &http.Server{
Handler: r,
......
......@@ -84,6 +84,11 @@ func (im *Importer) GetJob(show string, id uint64) (*Job, error) {
return im.jobs.GetJob(show, id)
}
func (im *Importer) Healthz() error {
// TODO: implement this!
return nil
}
// handle subscriptions to new jobs-of-show -> pass on to job inventory
func (im *Importer) deleteJob(show string, id uint64) error {
......
......@@ -131,6 +131,11 @@ func NewStore(cfg Config) (*Store, error) {
return st, nil
}
func (st *Store) Healthz() error {
// TODO: implement this!
return nil
}
func (st *Store) GetRevision() string {
return st.revision
}
......
......@@ -71,7 +71,7 @@ var Assets = func() http.FileSystem {
},
"/js": &vfsgen۰DirInfo{
name: "js",
modTime: time.Date(2019, 8, 14, 23, 51, 26, 418357071, time.UTC),
modTime: time.Date(2020, 1, 22, 16, 48, 51, 297235807, time.UTC),
},
"/js/bootstrap.bundle.min.js": &vfsgen۰CompressedFileInfo{
name: "bootstrap.bundle.min.js",
......@@ -103,7 +103,7 @@ var Assets = func() http.FileSystem {
},
"/js/main.js": &vfsgen۰CompressedFileInfo{
name: "main.js",
modTime: time.Date(2019, 8, 14, 23, 51, 26, 406357152, time.UTC),
modTime: time.Date(2020, 1, 22, 16, 48, 51, 297235807, time.UTC),
uncompressedSize: 26279,
 
compressedContent: []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xec\x3c\x6b\x73\xdb\x38\x92\xdf\xf5\x2b\x7a\xb4\xd9\x22\x35\x91\xa9\x24\xbb\x35\x57\x27\x45\xd9\xf3\x38\xf1\x8c\xaf\x3c\x8e\x2b\x76\x6e\x6b\x2a\x37\xe5\x82\x44\x48\xc2\x84\x02\xb4\x00\x68\x8f\x93\xf8\xbf\x5f\xa1\x41\x90\xe0\x4b\x0f\x5b\x79\xcc\xdd\xe5\x43\x12\x81\xdd\x8d\x7e\xa3\x9b\x6c\x72\xf0\x7d\x07\xbe\x07\xd0\x84\xbf\xef\x80\xfd\xff\xc9\x72\x25\xa4\x06\xc2\x63\x38\x4f\xc8\x6d\xc2\x94\x86\x97\x84\x2e\x05\x87\x99\x90\x40\x52\x2d\x24\x89\x99\x80\x95\x14\xbf\xd3\xa9\xb6\x78\x88\x7a\x24\x56\xb7\x92\xcd\x17\x1a\xc2\xa3\x1e\x3c\x7b\xf2\xf4\xdf\x0e\x9e\x3d\x79\xfa\xef\x70\xb4\x90\x4c\x69\x46\x38\x9c\x0b\xc6\x35\xa7\x12\x9e\xd3\x7f\xa5\x8c\x8b\x3f\xfe\x63\x41\x13\xc5\xf8\x7b\x16\x11\xfd\xc2\xd1\xb9\x5c\x30\x05\x33\x96\x50\x60\x0a\x56\x44\x6a\x10\x33\xe4\x31\x72\x10\xe6\x87\xb9\x38\x93\x94\x82\x12\x33\x7d\x43\x24\x1d\xc2\xad\x48\x61\x4a\x38\x48\x1a\x33\xa5\x25\x9b\xa4\x9a\x02\x43\x61\x06\x42\xc2\x52\xc4\x6c\x76\x8b\x04\x98\x86\x94\xc7\x54\x82\x5e\x50\xd0\x54\x2e\x15\xee\xb1\xa0\xf0\xd3\xd9\x5b\xf8\x89\x72\x2a\x49\x02\xe7\xe9\x24\x61\x53\x38\x65\x53\xca\x15\x05\xa2\x60\x65\x56\xd4\x82\xc6\x30\xb1\x84\x0c\xca\xb1\xe1\xe2\x22\xe3\x02\x8e\x45\xca\x63\xa2\x99\xe0\x7d\xa0\x4c\x2f\xa8\x84\x6b\x2a\x15\x13\x1c\xfe\xe6\x36\xc9\x28\xf6\x41\x48\xa4\x42\xf8\x2d\x24\x44\x17\xa0\x35\x49\x0b\x81\x62\x60\x1c\x89\x2c\xc4\x8a\x82\x5e\x10\x6d\xa4\xb9\x61\x49\x02\x13\x0a\xa9\xa2\xb3\x34\xe9\x23\xee\x24\xd5\xf0\xcf\x93\xcb\x9f\x5f\xbf\xbd\x84\xc3\xb3\x5f\xe1\x9f\x87\x6f\xde\x1c\x9e\x5d\xfe\x3a\x82\x1b\xa6\x17\x22\xd5\x40\xaf\xa9\xa5\xc5\x96\xab\x84\xd1\x18\x6e\x88\x94\x84\xeb\x5b\x10\x33\x24\xf1\xcb\xab\x37\x47\x3f\x1f\x9e\x5d\x1e\xfe\x78\x72\x7a\x72\xf9\x2b\x08\x09\xc7\x27\x97\x67\xaf\x2e\x2e\xe0\xf8\xf5\x1b\x38\x84\xf3\xc3\x37\x97\x27\x47\x6f\x4f\x0f\xdf\xc0\xf9\xdb\x37\xe7\xaf\x2f\x5e\x45\x00\x17\xd4\x30\x46\x91\xc2\x1a\x7d\xce\xd0\x26\x92\x42\x4c\x35\x61\x89\xca\x85\xfe\x55\xa4\xa0\x16\x22\x4d\x62\x58\x90\x6b\x0a\x92\x4e\x29\xbb\xa6\x31\x10\x98\x8a\xd5\xed\x66\x53\x59\xa5\x26\x82\xcf\x51\x54\xeb\x3c\x70\x32\x03\x2e\x74\x1f\x14\xa5\xf0\x7c\xa1\xf5\x6a\x38\x18\xdc\xdc\xdc\x44\x73\x9e\x46\x42\xce\x07\x89\x45\x56\x83\x17\x86\x93\x41\xa7\x13\xa4\x8a\x82\xd1\xfb\x54\x07\xa3\x4e\x67\xf0\xfd\xa6\x3f\x90\x6a\x96\x28\xd8\x08\x37\xe8\x74\xce\xd2\xe5\x84\xca\x68\x25\x85\x16\xfa\x76\x45\xa3\x15\x89\x61\x0c\xb3\x94\x4f\x8d\xef\x84\x8a\x7d\xa0\x3d\xf8\xd8\x01\xb8\x26\x12\x14\x8c\xe1\x42\x4b\xc6\xe7\xa1\x5e\x30\xd5\x1b\x75\x00\x6e\x16\x26\x44\x42\x15\x25\x94\xcf\xf5\x02\x9e\x03\x22\xc1\xa7\x4f\xf0\xac\xd7\x83\x8f\x06\xa7\xfb\xa4\x0b\x8f\x41\x8d\xee\x3a\x00\x92\xea\x54\x72\x50\xa3\xce\xdd\xa8\xd3\x71\x1b\x19\x2b\x2c\x89\xbe\x8a\x89\xa6\x9a\x2d\x69\x18\xdb\x5d\xd9\x2c\x7c\x3d\x31\x01\xee\xb1\xa8\x85\xe5\x21\x9a\x92\x24\x31\x80\xdf\x8d\xc7\x10\xbc\x13\x08\x07\x2f\x89\xa6\xbf\x05\x16\x3b\xdf\x2d\x38\x08\x0c\xaf\x77\x48\x11\xc2\x38\xa7\x11\xf6\x60\x6c\xb0\x4f\xf8\x35\x49\x58\x8c\xd8\x6b\x90\x8d\x12\x1c\x8b\x4a\x4b\x18\x83\x55\x60\x18\x47\x73\xaa\x0d\x72\xd8\xeb\x19\x1d\x86\xcf\x50\x39\x3e\xec\xe3\x31\x04\x51\x00\x8f\x4b\x28\xbf\x08\xae\x17\x61\x0f\x1e\xc3\xd3\x8d\x78\x88\x70\x9c\x26\xc9\xaf\x94\xc8\xb0\x11\x0e\xaa\xf4\x7f\x16\xa9\x54\xeb\x79\x1a\xd6\x78\x62\x3c\xd5\x74\x57\xac\x0b\x3a\x15\x3c\xae\x60\x65\x1a\xf4\x90\x47\x9d\xbb\x06\xab\xa7\x12\x53\x55\x68\x80\x72\xc3\x33\x75\x46\xce\xec\x52\xaf\x64\x0b\x34\xce\x60\x00\x0e\xcd\x64\x26\xc6\x81\x2b\x38\x78\x01\x33\x26\x95\x86\xa9\xe0\xd7\x54\x6a\xd0\x02\x96\xaa\x03\x60\xa8\x14\xd6\xfa\x85\xe8\x45\x34\x4b\x84\x90\x48\x1e\x06\xf0\xf4\x09\xfe\xe9\x21\xd7\xc6\xca\x8b\x75\xd0\x7f\xfb\xc1\x83\xc6\xb5\xbf\x8e\xdd\xa2\x23\xb0\x5c\x47\xe0\x87\x3a\xfa\x0f\x3e\xb2\xda\xc4\xab\xc7\x68\x33\xac\x05\xfe\xab\x05\x1e\x3c\xb5\x18\x85\x45\x16\xf0\x38\xb3\xe1\x32\x33\x57\xbe\xa0\xbc\x05\xf4\xbb\x85\x42\xa3\x6d\x91\x77\x96\x84\xf1\xad\xd2\x0e\x2a\xc8\x00\x8f\xed\x3f\x9f\x3e\xc1\xc7\xbb\xc6\xdc\x66\x8e\x4b\xda\x94\xcc\x06\x39\xb4\xa9\x06\x16\x27\x7c\x26\xa0\x44\xdf\xac\xc2\x18\x78\x9a\x24\xa3\x4e\xc7\x6c\x13\x1d\x3a\x40\x2f\xc3\x59\x77\x33\xe9\x2c\x7a\x64\xfe\x86\x31\x3c\x2a\xb2\x1b\xae\x53\x4e\x26\x09\xc5\xbc\x48\x12\x45\xf3\x75\x2d\xde\x53\x23\x42\xb7\x9b\x2f\x29\xaa\xf0\x8c\x1d\xa3\x3c\xd9\xe2\x84\x4c\xdf\x53\x1e\x1b\xd2\xef\x7e\x43\x2b\xb0\x59\x68\x52\x99\x98\x85\x17\xa6\x90\x99\x53\x9b\xc4\xba\xa6\x1a\x98\x31\x4e\xe3\xae\xcb\x41\x6c\x16\x66\x34\x33\xc8\xc8\xc8\x75\x85\x5b\x3b\x18\xeb\x08\x8e\x9b\x56\xf0\x51\x06\xcc\x66\xe1\xa3\xc8\x6c\x1f\x66\x54\x4c\x06\xec\x2a\xcc\x87\xdd\x82\x66\x45\xc8\x12\x89\xbb\x8e\xfb\xfb\xae\x63\x7c\xa3\xa4\x5d\x2f\x55\x33\xce\x74\x5d\xd9\xe8\xe1\x34\x99\x19\xaa\x0b\xa6\x50\x23\x8f\x22\xf2\x3b\xf9\x23\xb4\x9b\x2f\xa9\x5e\x88\x78\x08\xdd\x9f\x5e\x5d\x76\xfb\xb8\x94\xca\x64\x08\xdd\x81\x91\x66\xe0\xf4\x99\x5d\x8a\x89\x26\x66\xb7\x21\x74\x7f\x57\x82\x67\xab\x2a\x9d\x4e\xa9\x52\xc3\x62\x73\x03\x57\x88\x67\x18\xf0\x2c\xab\x65\x4a\x47\xfe\x25\xcf\x68\x06\xb1\x74\xed\x91\xd5\x8c\x64\xf3\x39\x95\x61\x90\xae\x62\x3c\x36\x3c\x05\x7b\xaa\xfb\xce\x38\x88\xaf\x56\x24\x31\xa3\x7a\xba\x08\x7b\x0d\x0a\xed\x45\x33\xc2\x92\x30\x67\xfb\xf7\x7f\xfd\xb1\x90\x7d\xd0\xf4\x0f\x7d\xa1\x89\x4e\x55\x1f\xa8\x94\x42\x7a\x1e\x82\xbf\x61\x5c\xde\x88\x24\x54\xea\xb0\x8b\x1b\x31\x3e\xb7\xf1\x90\x4b\x65\xf6\xa0\xf1\xd0\x24\x4a\x4e\x6d\x32\x5e\x49\x31\x49\xe8\xb2\x9b\x31\x75\x07\x34\x51\x34\x27\xc7\x66\x96\x93\x48\x21\x13\x46\xac\xbf\x3f\xf9\xbb\x2f\xd7\x56\x1b\x9a\x42\xc0\xb2\x5f\x16\x7d\x3b\xcd\x56\x8c\x96\x87\x23\x5e\x5b\x88\x1b\x55\xd6\xab\xd5\xe7\x68\x9d\x87\x72\x7a\x73\x55\x04\xed\xbd\x1d\xf5\xfc\xf5\x45\x93\xa7\x66\x94\x3d\x47\x1d\xc2\x7f\x5e\xbc\x3e\x8b\x6c\xb4\xb1\xd9\x6d\xf8\x31\xc8\x54\x14\x0c\x21\x10\x2c\x9e\x06\x77\xbd\x02\xfc\xf2\x7e\x7e\xed\x82\xd6\x5c\xb2\x3f\xf2\xab\x2d\xc9\x01\x13\x87\xc3\xcc\x8e\xd8\x8c\x58\xa1\x1e\x24\x97\xfd\xdc\x2d\x1e\x7c\x42\xe8\x41\x14\xdd\x35\x11\xf3\x39\x8d\x0f\x18\x2f\x07\x48\xdd\x92\x35\x77\xcc\x76\x4e\xc4\x9c\xf1\xb0\xf7\xd9\xa3\x68\x2a\x29\xd1\xc6\xa9\x39\xbd\xb1\x8e\xed\xb4\xb2\x73\x20\x6d\x4d\xb1\x1e\x2a\x25\xdb\xda\x53\xe7\xe1\x46\xb5\x07\xd5\xd6\x11\x88\xb6\x91\x54\x51\xbd\x43\x94\xa1\x2d\xfd\xf8\xba\x21\x4c\xf7\x21\x16\x9c\xb6\x47\x9a\x59\x4b\x65\x62\x44\x2d\x47\xd3\xc8\x9e\xa0\x86\x86\x33\x94\x85\x33\x7f\x3f\x86\xee\x3f\xcc\x95\x83\x99\x90\x07\xe8\x1e\xe3\xa7\x5d\x57\xbf\x6f\x75\xca\xa4\x32\xb1\xbf\x16\x94\xc4\x54\xaa\x21\x7c\x04\x23\x93\x90\xec\x03\xd6\x9b\x43\xe8\xfe\x48\x89\xa4\x12\x4d\xe4\xa5\xfa\xbb\x07\x1f\x48\xe5\x58\xdb\xf1\xd0\xd9\x43\x90\x7d\xa1\x63\xe8\xde\xc1\x53\x89\x80\x1d\x03\x60\x93\xff\xb7\xf9\x76\x44\x92\x1b\x72\xab\xc2\xca\xf1\x80\x42\x17\x3e\x8c\xa6\x17\x9c\xd6\xe2\xa2\x5a\x7e\x7a\x81\x81\x0e\xba\xdd\xc1\x83\x35\xb3\x88\x49\x82\x15\x6a\xf0\x17\x44\xfd\xc5\x2c\x04\xb6\xb4\xf7\xea\x8a\xa7\xfd\x2a\x45\xb0\xb8\x11\xfe\x1d\x06\x0b\x16\x67\xbe\x73\x67\x91\xed\x55\xc1\xc3\xc0\x68\x81\x47\x13\x65\x41\x83\x7e\x8d\x50\x56\x1e\x47\x33\xc6\xe3\x30\x60\x33\x49\x96\x34\xe8\x45\x44\x6b\x19\x06\x4a\x4e\x83\x7e\x60\xe3\xd5\x9c\x66\x03\x64\xf3\x1f\x99\xba\x0f\x58\x3c\xc6\x1e\xc3\xf7\x54\x16\xf7\x90\x8f\x12\x17\x86\xc1\x75\x4c\x54\x8b\xa8\xbb\x5e\x21\x45\x26\xa3\x11\x24\xd8\xac\x7f\x91\x3e\xa8\x44\x7d\xf9\xea\xf4\xd5\xe5\xab\x8d\x67\xff\x43\x72\xc9\x03\x8b\x80\xbd\x87\xc9\x03\x8f\x89\xa2\xcf\x43\xb0\x53\xa6\x74\xb9\x73\x43\xe4\x4a\xeb\x76\xe1\x20\x77\x6b\xdd\x1c\x29\xc3\xfd\x5d\x95\x96\xe7\x07\x59\xea\x2a\x68\x7b\xb9\x0d\x09\x25\x44\xe9\x2b\x07\x85\xff\x8e\x4a\x7b\x17\xaa\xc0\x8b\x25\xbf\x6b\xd8\x0f\x35\xd3\x22\x8b\xcf\x73\xf3\x16\x85\xb6\xef\xda\xb7\xa8\x9d\xb9\x2d\x9e\xed\x2a\x29\x5f\xc0\x4c\xf3\xdb\xb7\x65\x2b\x36\xb8\x7e\x3a\x40\xce\x77\x72\x78\xe3\x83\x7b\x73\x78\xa7\x38\xd3\x64\xdb\xe5\x99\x90\xa1\x11\xf8\x3d\xbd\x05\xc6\x6d\xfd\x2a\xa9\x4a\x13\xad\x6a\x1d\x19\x62\xbf\xf3\x41\xde\xbd\xa7\xb7\xbf\x45\x9c\x2c\xe9\x6f\x46\x27\xf4\x06\x72\x5d\x87\x35\xb8\x7b\xf4\x33\x7b\x3d\x67\x6d\x6b\x64\xae\x84\xdd\xdd\x8e\x53\x8b\xe4\x57\x9a\xb5\x93\xab\xc1\xbd\xb0\x71\x5a\x88\x9b\xd2\xdd\xe2\x85\xb8\xb9\x32\xfa\xda\x9f\xab\x35\x34\x56\x9e\xaf\x0d\xf0\xbe\xb2\xdb\xf5\xab\x39\x5e\x43\xd3\xf9\x8d\x58\xd5\xb6\xec\x92\xaa\x95\xe0\x8a\x62\xeb\xd9\x68\xe8\x72\x4a\xae\xa7\xe3\x86\x6c\xec\x1b\x9e\x71\xa5\xb7\xc8\xc6\xc6\x48\x30\x06\x03\x8d\xff\xcf\x2f\x60\x33\x84\x2d\xbd\x89\x32\xbc\x8f\x8e\x40\xd9\x7a\x41\xc1\x06\x50\x1d\x30\x5b\x2f\x00\x67\x2c\xa1\x45\x2e\xc0\xa5\x55\xf6\x20\xd1\x2d\x97\xbc\xfb\x4b\x9e\x05\xde\x5e\xd3\x44\x70\xea\xef\x85\x0b\x67\x5f\x3a\x84\xf2\x5d\xb1\x7d\xc2\x5f\x07\x33\x29\x96\xe3\xae\x2b\xd6\xbe\x5a\x7c\xb5\xdd\xd5\xf9\x46\x02\x6c\x63\xda\xf4\x8c\x1d\xd3\x84\xea\xcf\x6d\xed\xc6\x7a\xb4\x96\x32\xff\xdf\xa4\xfb\x31\x29\x4a\x71\xe5\x92\xcd\x97\x2e\xb5\xca\xb6\x34\xb1\x3b\x40\x56\xbe\x5e\x09\x56\x4e\xbb\xbb\x96\x60\x88\x1d\xad\x52\xb5\x08\xf3\x6a\xeb\x98\x25\x14\xef\x6c\xf4\xa1\x5e\x73\xed\x50\x74\x1d\x20\xf1\x3f\x67\xe9\x55\x73\x38\xff\x28\xfb\x06\x9c\x2e\x67\xe7\xeb\x39\x5e\xf5\x70\xdf\xdd\xf9\x72\x0a\x15\x07\x74\xf3\x47\x7b\x71\xc2\x7c\x93\x3f\xbd\x23\x92\x38\xc6\xbc\x77\x95\xae\x12\x51\x1e\x1a\x31\xcb\x5f\xb6\x03\xf8\x2c\x29\xb0\xe1\x51\x8d\x12\xa9\x9c\xd2\x83\x54\xb2\x60\x08\x94\x4f\x45\x4c\xdf\xbe\x39\x31\xd6\x35\x3a\x18\x0e\x06\x01\x3c\xc6\x99\x31\xe4\xa6\xf7\xb0\x27\x39\x46\x79\x33\xbf\xf1\xac\xa4\xc2\xdc\xef\x66\x91\xd2\x44\xea\xcc\x12\x56\xfd\xa3\x5a\x7f\x62\x4f\xa9\x6f\xf2\xc4\xdd\xbe\x4b\x59\xef\x89\x92\x55\xdd\xd0\xac\xfd\x1f\x70\x45\x27\xea\x1e\x1e\x1d\xfe\xef\xf1\x15\xd7\xd1\xe2\x0c\x67\xde\xd1\xe6\x91\x54\xbd\x71\xd1\x87\x6a\x17\x9b\x35\xbe\xe6\x9f\xbc\xc1\x63\xb1\x6b\x60\x59\xfc\x19\xdb\x57\x6b\x5d\xb7\x95\xfd\x95\x5f\x5c\x52\x4d\x8c\xe5\xdc\x65\xf7\xbb\xc0\x66\x1f\x0a\x5c\xf6\xa1\xc0\xcc\x27\xa6\xb2\x8b\xee\xb7\x97\xe6\x8d\x6a\xd6\xf6\x2c\x7b\xb9\x41\x5e\x0d\x9b\x42\xe1\x95\xe0\x29\xae\xb2\xf8\xab\x15\x17\x96\xb1\x7d\x45\x86\x7d\x22\xd6\xe6\xc7\x46\xf4\xff\xe6\x46\x84\x4a\xc8\x37\x20\x64\x13\xab\x7d\xcc\x5b\x7d\x78\xd6\xcb\x9f\xe8\xb4\x99\x93\xc6\xe5\x81\x1c\xe7\x3a\x3b\xcf\x3b\x1c\x5e\x1e\xfd\xfc\x6d\xd8\xb4\x96\x1b\x73\x99\xfe\x54\x76\x2f\x4c\xd7\x6c\x39\xff\x88\xdf\xb2\xd8\x7a\x40\x7d\xbf\x95\xed\x70\x95\xe1\xa4\xfe\x5e\xce\xb8\x8f\x81\x7b\x70\x1f\x0c\x21\x90\x29\xe7\x8c\xcf\x83\x87\x87\x6f\xbd\x2e\xfa\x0a\xf6\xdb\xd5\x72\x58\xfd\x25\xf6\xce\x2b\xbd\x81\xe3\x44\xdc\x64\x66\xd4\x44\xce\xa9\x1e\x3e\xc8\x6a\x96\x9b\x4c\x89\xd3\x45\xca\xdf\x5f\xb0\x0f\x74\x08\x4f\x9f\x3c\x81\xef\xe1\xe9\x93\x67\x7f\xb7\x97\x56\x92\x09\xc9\x34\xfb\x40\x8f\x99\x54\xfa\x90\xc7\xa7\x44\xe9\x23\x83\x30\xc4\x99\xb9\x87\xd8\xfd\xae\x97\x4d\x72\x7c\x67\x04\x8d\x54\xba\x32\xae\x54\x99\xbe\xf6\x2c\x78\xa5\xd8\x72\x95\xd0\xc2\x90\xc6\x8c\x88\x2a\x78\x18\x98\xd5\x0b\xeb\x0e\x41\xbf\xac\xe5\x3e\x2c\xa9\x52\x38\x66\x69\x69\x4f\x05\x57\x22\xc1\xc7\xbf\x15\x80\x51\xce\x57\x89\xf0\x2b\xbc\x91\xbb\x37\xb2\x24\x8e\xb1\x98\xcf\x25\xc1\xd5\xcc\x4f\x37\xf9\x50\xa6\x86\x87\x26\x81\xf3\xb7\xfb\x4b\x02\x25\x77\xba\x6f\x12\x98\x0a\xae\x29\xd7\x59\x90\x93\xd5\x2a\x61\x53\x44\x1c\x88\xa9\xa6\xfa\x40\x69\x49\xc9\xb2\x34\x4b\x87\x4a\xce\x1c\x55\x18\xcb\xbf\xb4\xcb\x24\x51\xf4\x21\x69\xc3\x37\xa4\xd7\x6a\x7d\x85\xb4\x61\x0f\x9f\x44\xcc\xd5\x3e\x8e\xed\x7d\x26\x7e\xc3\xd3\xe7\x68\x6d\xf6\x72\x7c\x7f\x1d\x03\xba\x8e\xc3\xdd\xe5\xa9\x74\x1d\xf9\x9b\x6c\xfb\xeb\x3c\x62\xaa\xa6\x92\xad\x4a\x35\x7d\xb1\xf4\x19\x1b\x14\xca\xb5\x64\x78\xab\x17\xaf\x67\x3f\xbd\xc2\xd3\x09\xfb\x6d\xf4\x12\xf9\x7d\xb7\x6f\xae\x9f\xc8\x39\xfb\x53\xf4\x14\x0d\x2f\x68\x5c\x33\x7a\x73\xdf\xf7\x33\xcc\xea\x7f\x31\x5a\x7d\xbc\x7c\x58\xbe\x54\xa4\x3d\x11\xd3\xc4\x8b\x13\xfc\x0d\x63\xfb\x8e\x48\x5e\x35\x55\xee\xf2\xd8\x87\xd0\x16\xb6\x87\x07\x7a\x36\x85\xd1\x30\x23\x87\xd6\x91\x94\xc7\x54\x5e\x31\x3e\x13\x61\xbd\xa1\xf2\x79\x2b\x0d\xf4\xe4\x48\x2d\x0e\x6e\xc7\xe6\xed\xec\x9e\x91\xdd\xda\x31\xc8\x5f\xe4\x99\x68\x9e\x5d\x9d\x68\x7e\x2a\xe6\x27\xfc\x75\xaa\x8b\xcb\xd5\x00\x61\x33\x08\xbf\x2b\x24\x73\x53\xf1\xb9\x24\x48\x3d\x5a\xe8\x65\x12\x76\x6f\x45\x0a\x44\x52\xb0\x93\xa0\xc0\x38\x10\x05\xcf\x27\x2f\x08\x17\xfc\x76\x29\x52\xf5\x7c\x30\x79\xe1\x6e\xbd\x4c\x34\x8f\x16\x2c\xce\xc7\x18\x6d\x1d\xe6\xca\x2d\x73\xd5\x78\x6f\xd8\xcb\xb9\xf0\x98\x58\x3f\x7c\xba\x0b\x6b\x79\x98\x96\x09\xa7\x8a\x4a\x17\xd4\x55\xa6\x4d\x70\x84\xdd\x53\x9c\xe8\xeb\xf6\xf2\x65\x49\x97\xe2\x9a\x1e\x25\x44\xa9\x30\x98\x68\x7e\xb0\x92\x6c\x49\xe4\x6d\xd0\x33\x65\x98\xb7\x1e\x13\x3e\xa7\x32\xf0\x28\x8a\xd9\x2c\x0c\xa6\x09\x9b\xbe\x0f\xac\xe7\xd8\xff\x37\x38\x4e\xe6\x3a\x96\x59\x3b\x54\x98\xc7\xb3\xf5\x21\xff\x86\x56\xa3\x06\x9e\x4f\x5e\x70\xa1\x8d\x50\x85\x32\x1a\xc5\x33\xcb\xed\xd2\x39\x29\x2a\xc2\xe5\x42\x3f\x58\x3a\xef\x8d\x89\x8a\x88\x5b\x8e\xf6\x99\xd5\x86\xa0\xbf\x28\x5f\xfa\x3a\x41\x8f\x0f\x7a\xbc\x6a\xbd\x4e\x87\x56\x3b\x81\x26\x32\xf6\x56\x65\x3d\x79\xf8\x32\xd6\x93\x47\xb5\x36\xb0\x94\x4d\x46\xc8\xe6\x48\xf2\xb8\xcc\x84\xce\x10\x0c\x84\x51\xec\x05\x4d\xe8\x34\x4b\x19\x8f\xc2\x40\x60\x0d\x10\xf4\x11\xac\x97\x79\x8a\x65\x0a\x0f\x66\xb2\x5a\x51\x1e\x87\x8f\xc2\xe0\xb9\x05\x7d\x11\xf4\xe1\xe3\x35\x49\x52\x3a\x0c\xae\xae\xb8\xe0\xf4\xea\x2a\xb0\x87\xce\x30\x98\x2e\x84\x50\x34\x8a\xa2\xe0\xce\x1e\x09\x33\x21\x01\x1f\xae\x61\x3c\xe2\xdb\xe0\x45\xb8\x9a\xc3\xd8\x29\x66\xe3\x66\x38\x88\x60\xb7\x31\xff\xcd\xe8\xdf\x39\x83\x67\xda\x99\xa4\x5a\x0b\xae\xc2\x82\xb5\x5e\x9b\xf5\x71\x47\xeb\xde\x0b\x13\x0e\xce\xbf\xed\x0f\xcf\x76\xf4\x9a\x72\xdd\x64\x40\xb7\x19\x02\x44\xb6\xe3\x8e\x90\xdb\x5d\x8d\x9a\x51\x2a\xd5\x7c\x68\x27\x1a\xe3\xfc\x5c\xf5\x3d\xe7\xf7\xf4\x56\x85\x35\x55\xba\xb7\xab\xc7\x63\x78\x02\x9f\x3e\x41\x89\x84\x59\xf5\xb4\x92\x8f\x69\x5b\xaf\x30\x6c\x05\xbd\x88\x2e\x57\xfa\xd6\x05\xac\xe9\xb9\xb1\xa2\x71\xef\x52\x7d\xfa\x64\x2b\x9c\xed\xde\x1e\x78\x14\x06\x56\x2c\xe4\xee\x0c\xe9\x97\x12\x51\xcc\x14\xd2\xcd\xc7\xc2\x4d\x11\x74\xa0\xc5\x7c\x9e\x18\xfd\x07\x4b\x37\xb6\xde\x70\xaf\xbf\x89\x78\x91\xcb\x3c\xca\x76\xc7\xc3\x1a\x7d\xaf\x8e\xaa\x52\x3b\x4a\x04\xa7\xf7\xa4\x57\xa6\xf4\x12\x6b\xd9\x36\x52\x7e\x6a\x6d\xc2\x3e\xb4\xfd\xff\x5e\x38\x39\x8c\x63\x57\x6b\xdf\x93\x9e\x7f\xc2\x77\x00\xbc\xe6\x23\x1b\x46\x7e\x57\x72\x37\x7c\xba\xee\x3c\xab\x3a\x18\x6b\xd6\xb0\xa9\xe9\x39\xa8\xfa\xfd\xd3\x7d\xba\x4f\xb3\x7d\xf7\x43\xad\xb0\xd2\xde\xe8\x79\x96\xba\x1f\xcd\x1a\xd1\xdc\x11\xdb\xe8\x6d\x7f\xcc\x57\xdf\x30\x29\xc8\xff\xe2\xc7\xab\x7d\xc9\xc2\xbe\xfd\xe1\xc1\x9c\xd9\xd7\x40\xb0\x4c\xc9\x9b\xaf\x5e\xf6\xd6\x99\x3b\xfb\x2d\xe8\x8f\x58\xea\xfa\x74\x1a\x04\xb2\x9b\x95\x90\x76\x2b\x59\x0c\x0f\xb6\xe5\xf4\xeb\x14\x4f\x84\xca\x7b\x22\xf5\x87\xcc\xed\x59\xbd\x36\x23\x5a\x39\xab\x0f\xb2\x1b\x7f\x4e\x21\x5e\x42\x2f\x1e\x38\xf7\x2a\xa7\xbb\xab\xab\xab\x65\x54\xbd\x84\x6a\x29\x9f\x76\x2c\x9d\xdc\xdd\x06\xea\x0c\xbe\x60\x71\x4c\xf9\x25\x5d\xae\x12\xa2\xa9\x02\xe4\xc8\xfd\x0c\x7a\x76\x5a\x35\xac\xb8\x5a\x19\xa6\xed\x48\xce\x96\xe8\x54\x1f\x67\x23\x62\x6e\xef\xcc\x03\x48\x54\x94\x30\xc7\xc5\xa8\x56\x81\x77\xee\x4d\xf8\xac\xc1\x3d\x2f\x4f\xd8\x18\xfc\x29\x91\xf1\x8f\x22\xbe\x75\xaf\xb9\x14\x88\x31\xbb\x8e\xcc\xd5\x83\x89\x88\x6f\x8b\xd7\xa8\x1c\x0b\xeb\x5d\xcc\x07\x2c\xd2\x2e\x99\x6a\x76\x5d\xb8\x6f\x99\xa7\xb2\xe6\x6a\xa0\xae\xc4\x6e\x78\xe2\xe4\x64\xc8\xda\x80\x28\x8a\x20\x11\x24\x66\x7c\x0e\x76\xe6\x2e\x8a\xa2\xae\x57\xb8\x56\x37\xde\x42\x92\x02\x78\xbd\x34\x56\xe2\x5d\x24\xa9\xdd\xe3\x58\x23\x4d\x31\xc8\x85\x12\x15\x6f\xa8\xb5\x95\xf4\xd9\x60\xdf\x86\x8a\xdc\x2a\xd3\xed\xbb\xb6\xc2\xaf\x8d\x6a\x6d\x20\x5d\x48\xb7\x15\xf9\xfb\x34\x10\x9d\x5a\x39\x87\xbd\xa3\x0b\x83\x6a\x35\xda\x9c\xb3\x6a\x53\xaa\xc6\xe9\x37\xf6\x18\x06\xcb\xef\xd8\xfc\x61\x24\xb7\xee\xa7\x37\xdc\xa5\x0f\xf9\xe0\xbf\x8f\x9f\x71\x62\xe5\x32\xbb\x5b\x31\x4a\x20\x5b\x8b\xd3\x38\x03\xb9\x5e\xa4\xf5\x12\x39\xff\x6f\x92\x2a\xdf\xec\x4b\x48\xf6\xc5\x0e\x17\xeb\x11\xf5\xd1\x98\x7b\xb4\xe1\x9b\xcf\x12\xdc\x6c\xd3\x61\x52\x01\xaa\x0c\x32\xb4\x9e\xc7\xcd\xb7\xdc\xb4\x29\x81\x6a\xa7\x45\x57\x1b\xfb\x74\xcb\x3d\x2c\x83\x31\x3c\x19\x01\x83\xe7\x7e\x1b\x6b\x9b\xae\x11\xb0\xc7\x8f\xfd\x1a\xc9\x30\xd9\x14\x0e\x15\xa7\x79\xc7\x7e\xf3\xbc\x05\x72\xb4\x92\xaf\x80\xe5\xd2\xf5\xc7\x39\x8c\x75\x16\x77\x53\xa5\xb4\xc5\xde\xad\xe2\x7e\x82\x96\x85\x5d\x46\xf5\x8d\xb7\x50\x7b\xe5\x60\x46\xf2\x27\x71\x83\xa3\xda\x97\x7e\x9b\xc0\x0f\xa5\xb6\x05\x72\x15\xc5\x3d\x18\x8a\x08\x42\xb4\xe2\x27\x93\x74\xb9\x16\xdd\x00\xb4\x61\x5f\x32\x9d\x34\x05\x56\x8e\xad\x0d\x40\x1b\xf6\xcb\x6c\x9e\xca\x11\xa8\x7d\xdf\xaa\x20\xe8\xd6\x7a\xbd\x96\x8a\xa9\x89\xfe\xab\x98\xe9\x4d\x95\x6f\xe9\x18\x89\x99\xbe\xb2\x65\xae\x77\x26\x35\x51\x3e\x15\x73\xb5\x15\x65\xff\x5c\x4f\xc4\x5c\x6d\x22\x9c\xf7\x27\xdb\x92\xf6\x4b\xf6\xda\x28\x53\x4b\xc2\xcc\xc5\x6c\x4e\x04\x7e\x53\xe3\xd4\xe8\xb5\x34\x2e\xa6\xcd\x72\x6b\x6b\x52\xa8\xdf\x7b\x5f\x3e\x6b\x82\xdc\xb5\x93\x97\x0d\x9e\x53\x7a\x12\x15\xe0\x84\x70\x39\x0e\xaa\x2c\xd8\x00\x80\x71\xcb\x26\x79\x7c\x5c\x93\x64\x5d\x78\x54\xc9\xa2\x67\x57\x64\xfb\x4b\xe9\xe2\x1a\x9a\xd6\xeb\x6b\x9c\x9a\x48\x6a\x23\xe9\xe2\xb0\x95\x4d\x0c\xc3\x2a\xc9\xd7\x72\x4e\x78\xf6\x04\xae\x8d\xb2\x0f\xb3\x66\x03\xe1\x81\xd5\xf6\x39\xb9\x78\x73\xd4\x46\xdf\x5c\x5b\x43\x97\x29\x39\x6d\xed\x73\x3c\x3f\xda\xb5\xf3\x2e\xa6\x3a\xdd\xbb\xf6\x15\x93\x1a\xe7\x2e\x39\x01\xb2\xd8\xab\xc0\xea\xcc\xce\x25\xd3\x36\x42\x92\xcc\x7c\x25\x8b\x35\x42\x8a\xb2\x55\x9a\x0c\xd1\x88\x67\x54\xe5\xc1\x1b\xc5\xfa\x70\x5e\xd4\x9b\x10\x2e\x1e\xfd\x8f\xaa\x1f\xa6\xa8\x58\xe8\x58\xc8\xa5\xbb\xb5\xa1\xd2\xc9\x32\xcf\x8a\xd9\x8f\x06\x15\xfb\x86\xc9\xdf\xca\x28\xdd\xa2\xcb\x06\x8e\xf2\x8f\x4a\x6d\xfc\x32\x46\xcb\x7d\xe4\x8a\x8d\x66\x62\x9a\xaa\xb0\x2e\x52\xc3\x57\x2a\xaa\xf3\x03\xd5\xda\xac\x5a\xa1\xee\xb5\x12\xc8\x37\xdd\x54\xa3\x35\x00\x36\x3c\xf7\xff\x46\x6a\x35\xc7\x6c\x5b\xb1\xbf\xa1\x66\xf3\xd1\xd7\xd5\x6d\x25\xb8\x86\xda\xed\xbc\xcc\xc6\xfe\xad\xb6\xa9\x86\xf3\x19\xb8\x47\x1d\xe7\xb6\xd9\xa1\x96\x73\x28\x2f\x8b\x79\x94\x06\x5c\x6f\x5a\x65\x1d\x91\x53\xb4\x6e\x03\x7e\x36\x78\x92\x99\x7f\x1d\x89\x23\x3b\xeb\x52\x2d\xcd\xdc\x07\x67\x3d\x9a\x6e\x2a\xa6\xad\x32\x1b\x0c\xe0\xf2\xf5\xcb\xd7\x43\xfc\x5e\x31\x5d\x52\xae\x8b\x89\x1f\x93\xc7\xd6\x2a\x63\x0f\xd5\x50\xc3\x10\xc6\x54\x70\x2d\x45\x92\x50\xd9\x38\x89\x91\x7f\x70\x15\x93\xce\x95\xfd\x62\x02\xbd\xb9\x62\x9c\xe9\x96\x3a\x29\xbb\x35\x5f\x29\x93\xb2\xd5\x33\xfb\x22\x7f\xed\x4e\x70\x76\xa9\x06\xbf\xf6\x86\x2f\x3e\x00\x18\xb9\x27\x0f\x19\x09\x54\xd0\x7b\x7a\x9b\xae\x9a\x14\xc4\x66\xa1\x0f\x8b\x47\x8a\xff\x88\xac\x7c\x17\xd8\x32\x60\xbc\x7e\xe5\xdd\x19\xef\xe3\xfc\x6a\xaf\xe9\x11\xd4\x3a\x24\x3c\x1e\x7a\xde\xa4\x4e\xfd\x94\xca\xd0\xdd\x21\xb5\xf6\x58\xf2\xb6\x7a\xc0\xa9\xb4\xf9\x50\xaa\xaa\xab\xdb\x75\xf7\xc2\xb7\xd3\x90\x07\xb5\xeb\x4d\x78\x95\x7f\x2b\xa4\x6e\xb4\xf2\x00\xc1\x3d\x0f\x5c\x9f\x6a\xe5\xb4\xbd\x6b\xf6\x7d\xcc\x8f\x9b\xbc\x1f\x1f\x26\x35\xf8\xff\x51\xfe\xb1\x84\x86\x08\xc8\x2f\x36\xe0\xac\x8d\x82\xec\xd1\x55\x1e\x07\x39\xa1\xad\x22\xa1\x80\xde\x10\x0b\x8e\x91\x1d\xa3\xa1\x1d\x6d\xcb\x78\x40\x02\x5b\x47\x44\xbe\xdd\x67\x8f\x89\xb2\xe2\xca\x51\xb1\x8d\xae\x4a\x70\x3b\x3f\x9e\xb2\xe7\x74\x83\x01\xf7\x16\x17\x05\xdd\x8d\x91\x81\x2f\x11\x92\x38\x5e\x17\x17\x78\x83\x25\x8e\xbd\xa8\x18\x0c\xf2\xbe\xea\x30\x8e\xdf\xbe\x39\x69\xea\xaa\xec\x95\x72\xb7\x7d\x18\xc7\xf6\x89\x4d\x0b\x82\x3f\xcd\xe2\xe1\xac\x6d\xd0\x0f\xe3\x38\x0b\xa1\xc1\xc0\x63\x69\x5d\x08\x0d\x06\x36\x8a\x3c\xe8\x96\x10\x42\x48\xf0\xf8\x68\xf7\x0b\x04\xf5\xc2\x68\x0b\xd4\x3c\x8e\x2c\xae\xfd\xcf\x5d\x2e\x4c\x93\x86\xb6\x08\x27\x24\xe6\x6d\xdb\x14\x4f\x08\x53\x0d\xa9\x62\xf3\x5d\xa3\xaa\xac\xf9\x3c\xaa\xb6\x55\xdd\x7d\x9d\xbd\xbc\xad\xe7\xec\x50\xf6\xb6\x96\x49\xa0\xf2\x6b\xd7\xee\x03\x46\xae\xe2\xdb\xda\x78\x15\xc0\x5d\x12\x42\x96\x12\x2a\xef\xd5\x87\x8f\x8a\xcf\x19\xbd\x7b\xe2\x7d\x65\xac\x96\x21\x4a\x01\x4d\x18\xf7\xc3\xd8\x7d\x0b\xdd\x75\x3f\x6e\x88\xd5\x6a\xa8\x3a\x89\x5b\x85\xc2\x1e\xc9\x00\xe5\x33\x1d\xaa\x3a\xf6\x71\x9a\xcf\xcd\x55\x27\xfc\xaa\x50\xf9\x80\x88\xf2\x0c\x5d\xad\x48\x47\xe5\x0b\xfe\x71\x5d\x5c\xaa\xe4\x2b\xa4\x86\x43\x4c\xee\xf7\x56\x1f\xad\xdf\xf6\xcf\xa0\xf3\x3f\x01\x00\x00\xff\xff\xd3\x70\xdd\x99\xa7\x66\x00\x00"),
......
Supports Markdown
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment