diff options
author | Unknwon <joe2010xtmf@163.com> | 2014-07-26 00:24:27 -0400 |
---|---|---|
committer | Unknwon <joe2010xtmf@163.com> | 2014-07-26 00:24:27 -0400 |
commit | 8dd07c0ddd99ae626a1ec8c06f75f27fed51269f (patch) | |
tree | 261d3c9911dabc58c1ac54e4e36b3dee24d2032b /modules | |
parent | 0a739cf9ac901f54484c34bba8322418dedb09b0 (diff) | |
download | gitea-8dd07c0ddd99ae626a1ec8c06f75f27fed51269f.tar.gz gitea-8dd07c0ddd99ae626a1ec8c06f75f27fed51269f.zip |
New UI merge in progress
Diffstat (limited to 'modules')
53 files changed, 3576 insertions, 5264 deletions
diff --git a/modules/auth/admin.go b/modules/auth/admin.go index 69161f908a..38f3292b88 100644 --- a/modules/auth/admin.go +++ b/modules/auth/admin.go @@ -5,12 +5,9 @@ package auth import ( - "net/http" - "reflect" + "github.com/Unknwon/macaron" + "github.com/macaron-contrib/i18n" - "github.com/go-martini/martini" - - "github.com/gogits/gogs/modules/base" "github.com/gogits/gogs/modules/middleware/binding" ) @@ -25,17 +22,6 @@ type AdminEditUserForm struct { LoginType int `form:"login_type"` } -func (f *AdminEditUserForm) Name(field string) string { - names := map[string]string{ - "Email": "E-mail address", - "Website": "Website", - "Location": "Location", - "Avatar": "Gravatar Email", - } - return names[field] -} - -func (f *AdminEditUserForm) Validate(errors *binding.Errors, req *http.Request, context martini.Context) { - data := context.Get(reflect.TypeOf(base.TmplData{})).Interface().(base.TmplData) - validate(errors, data, f) +func (f *AdminEditUserForm) Validate(ctx *macaron.Context, errs *binding.Errors, l i18n.Locale) { + validate(errs, ctx.Data, f, l) } diff --git a/modules/auth/apiv1/miscellaneous.go b/modules/auth/apiv1/miscellaneous.go index 726a080147..30515eb861 100644 --- a/modules/auth/apiv1/miscellaneous.go +++ b/modules/auth/apiv1/miscellaneous.go @@ -5,13 +5,12 @@ package apiv1 import ( - "net/http" "reflect" - "github.com/go-martini/martini" + "github.com/Unknwon/macaron" + "github.com/macaron-contrib/i18n" "github.com/gogits/gogs/modules/auth" - "github.com/gogits/gogs/modules/base" "github.com/gogits/gogs/modules/log" "github.com/gogits/gogs/modules/middleware/binding" ) @@ -22,17 +21,16 @@ type MarkdownForm struct { Context string `form:"context"` } -func (f *MarkdownForm) Validate(errs *binding.Errors, req *http.Request, ctx martini.Context) { - data := ctx.Get(reflect.TypeOf(base.TmplData{})).Interface().(base.TmplData) - validateApiReq(errs, data, f) +func (f *MarkdownForm) Validate(ctx *macaron.Context, errs *binding.Errors, l i18n.Locale) { + validateApiReq(errs, ctx.Data, f, l) } -func validateApiReq(errs *binding.Errors, data base.TmplData, f interface{}) { +func validateApiReq(errs *binding.Errors, data map[string]interface{}, f interface{}, l i18n.Locale) { if errs.Count() == 0 { return } else if len(errs.Overall) > 0 { for _, err := range errs.Overall { - log.Error("%s: %v", reflect.TypeOf(f), err) + log.Error(4, "%s: %v", reflect.TypeOf(f), err) } return } diff --git a/modules/auth/auth.go b/modules/auth/auth.go index e9b215101b..2236de4761 100644 --- a/modules/auth/auth.go +++ b/modules/auth/auth.go @@ -7,49 +7,152 @@ package auth import ( "net/http" "reflect" + "strings" - "github.com/go-martini/martini" + "github.com/macaron-contrib/i18n" + "github.com/macaron-contrib/session" - "github.com/gogits/gogs/modules/base" + "github.com/gogits/gogs/models" + "github.com/gogits/gogs/modules/log" "github.com/gogits/gogs/modules/middleware/binding" + "github.com/gogits/gogs/modules/setting" ) -type AuthenticationForm struct { - Id int64 `form:"id"` - Type int `form:"type"` - AuthName string `form:"name" binding:"Required;MaxSize(50)"` - Domain string `form:"domain"` - Host string `form:"host"` - Port int `form:"port"` - UseSSL bool `form:"usessl"` - BaseDN string `form:"base_dn"` - Attributes string `form:"attributes"` - Filter string `form:"filter"` - MsAdSA string `form:"ms_ad_sa"` - IsActived bool `form:"is_actived"` - SmtpAuth string `form:"smtpauth"` - SmtpHost string `form:"smtphost"` - SmtpPort int `form:"smtpport"` - Tls bool `form:"tls"` - AllowAutoRegister bool `form:"allowautoregister"` +// SignedInId returns the id of signed in user. +func SignedInId(header http.Header, sess session.Store) int64 { + if !models.HasEngine { + return 0 + } + + if setting.Service.EnableReverseProxyAuth { + webAuthUser := header.Get(setting.ReverseProxyAuthUser) + if len(webAuthUser) > 0 { + u, err := models.GetUserByName(webAuthUser) + if err != nil { + if err != models.ErrUserNotExist { + log.Error(4, "GetUserByName: %v", err) + } + return 0 + } + return u.Id + } + } + + uid := sess.Get("uid") + if uid == nil { + return 0 + } + if id, ok := uid.(int64); ok { + if _, err := models.GetUserById(id); err != nil { + if err != models.ErrUserNotExist { + log.Error(4, "GetUserById: %v", err) + } + return 0 + } + return id + } + return 0 } -func (f *AuthenticationForm) Name(field string) string { - names := map[string]string{ - "AuthName": "Authentication's name", - "Domain": "Domain name", - "Host": "Host address", - "Port": "Port Number", - "UseSSL": "Use SSL", - "BaseDN": "Base DN", - "Attributes": "Search attributes", - "Filter": "Search filter", - "MsAdSA": "Ms Ad SA", - } - return names[field] +// SignedInUser returns the user object of signed user. +func SignedInUser(header http.Header, sess session.Store) *models.User { + uid := SignedInId(header, sess) + if uid <= 0 { + return nil + } + + u, err := models.GetUserById(uid) + if err != nil { + log.Error(4, "GetUserById: %v", err) + return nil + } + return u } -func (f *AuthenticationForm) Validate(errors *binding.Errors, req *http.Request, context martini.Context) { - data := context.Get(reflect.TypeOf(base.TmplData{})).Interface().(base.TmplData) - validate(errors, data, f) +// AssignForm assign form values back to the template data. +func AssignForm(form interface{}, data map[string]interface{}) { + typ := reflect.TypeOf(form) + val := reflect.ValueOf(form) + + if typ.Kind() == reflect.Ptr { + typ = typ.Elem() + val = val.Elem() + } + + for i := 0; i < typ.NumField(); i++ { + field := typ.Field(i) + + fieldName := field.Tag.Get("form") + // Allow ignored fields in the struct + if fieldName == "-" { + continue + } + + data[fieldName] = val.Field(i).Interface() + } +} + +func GetMinMaxSize(field reflect.StructField) string { + for _, rule := range strings.Split(field.Tag.Get("binding"), ";") { + if strings.HasPrefix(rule, "MinSize(") || strings.HasPrefix(rule, "MaxSize(") { + return rule[8 : len(rule)-1] + } + } + return "" +} + +func validate(errs *binding.Errors, data map[string]interface{}, f interface{}, l i18n.Locale) { + if errs.Count() == 0 { + return + } else if len(errs.Overall) > 0 { + for _, err := range errs.Overall { + log.Error(4, "%s: %v", reflect.TypeOf(f), err) + } + return + } + + data["HasError"] = true + AssignForm(f, data) + + typ := reflect.TypeOf(f) + val := reflect.ValueOf(f) + + if typ.Kind() == reflect.Ptr { + typ = typ.Elem() + val = val.Elem() + } + + for i := 0; i < typ.NumField(); i++ { + field := typ.Field(i) + + fieldName := field.Tag.Get("form") + // Allow ignored fields in the struct + if fieldName == "-" { + continue + } + + if err, ok := errs.Fields[field.Name]; ok { + data["Err_"+field.Name] = true + trName := l.Tr("form." + field.Name) + switch err { + case binding.BindingRequireError: + data["ErrorMsg"] = trName + l.Tr("form.require_error") + case binding.BindingAlphaDashError: + data["ErrorMsg"] = trName + l.Tr("form.alpha_dash_error") + case binding.BindingAlphaDashDotError: + data["ErrorMsg"] = trName + l.Tr("form.alpha_dash_dot_error") + case binding.BindingMinSizeError: + data["ErrorMsg"] = trName + l.Tr("form.min_size_error", GetMinMaxSize(field)) + case binding.BindingMaxSizeError: + data["ErrorMsg"] = trName + l.Tr("form.max_size_error", GetMinMaxSize(field)) + case binding.BindingEmailError: + data["ErrorMsg"] = trName + l.Tr("form.email_error") + case binding.BindingUrlError: + data["ErrorMsg"] = trName + l.Tr("form.url_error") + default: + data["ErrorMsg"] = l.Tr("form.unknown_error") + " " + err + } + return + } + } } diff --git a/modules/auth/auth_form.go b/modules/auth/auth_form.go new file mode 100644 index 0000000000..cb9da5dff4 --- /dev/null +++ b/modules/auth/auth_form.go @@ -0,0 +1,36 @@ +// Copyright 2014 The Gogs Authors. All rights reserved. +// Use of this source code is governed by a MIT-style +// license that can be found in the LICENSE file. + +package auth + +import ( + "github.com/Unknwon/macaron" + "github.com/macaron-contrib/i18n" + + "github.com/gogits/gogs/modules/middleware/binding" +) + +type AuthenticationForm struct { + Id int64 `form:"id"` + Type int `form:"type"` + AuthName string `form:"name" binding:"Required;MaxSize(50)"` + Domain string `form:"domain"` + Host string `form:"host"` + Port int `form:"port"` + UseSSL bool `form:"usessl"` + BaseDN string `form:"base_dn"` + Attributes string `form:"attributes"` + Filter string `form:"filter"` + MsAdSA string `form:"ms_ad_sa"` + IsActived bool `form:"is_actived"` + SmtpAuth string `form:"smtpauth"` + SmtpHost string `form:"smtphost"` + SmtpPort int `form:"smtpport"` + Tls bool `form:"tls"` + AllowAutoRegister bool `form:"allowautoregister"` +} + +func (f *AuthenticationForm) Validate(ctx *macaron.Context, errs *binding.Errors, l i18n.Locale) { + validate(errs, ctx.Data, f, l) +} diff --git a/modules/auth/ldap/ldap.go b/modules/auth/ldap/ldap.go index e944a90a1e..e27e5133ed 100644 --- a/modules/auth/ldap/ldap.go +++ b/modules/auth/ldap/ldap.go @@ -55,7 +55,7 @@ func LoginUser(name, passwd string) (a string, r bool) { func (ls Ldapsource) SearchEntry(name, passwd string) (string, bool) { l, err := ldapDial(ls) if err != nil { - log.Error("LDAP Connect error, %s:%v", ls.Host, err) + log.Error(4, "LDAP Connect error, %s:%v", ls.Host, err) ls.Enabled = false return "", false } diff --git a/modules/auth/org.go b/modules/auth/org.go index e243627ef2..c45d83a711 100644 --- a/modules/auth/org.go +++ b/modules/auth/org.go @@ -5,12 +5,9 @@ package auth import ( - "net/http" - "reflect" + "github.com/Unknwon/macaron" + "github.com/macaron-contrib/i18n" - "github.com/go-martini/martini" - - "github.com/gogits/gogs/modules/base" "github.com/gogits/gogs/modules/middleware/binding" ) @@ -26,17 +23,8 @@ type CreateOrgForm struct { Email string `form:"email" binding:"Required;Email;MaxSize(50)"` } -func (f *CreateOrgForm) Name(field string) string { - names := map[string]string{ - "OrgName": "Organization name", - "Email": "E-mail address", - } - return names[field] -} - -func (f *CreateOrgForm) Validate(errs *binding.Errors, req *http.Request, ctx martini.Context) { - data := ctx.Get(reflect.TypeOf(base.TmplData{})).Interface().(base.TmplData) - validate(errs, data, f) +func (f *CreateOrgForm) Validate(ctx *macaron.Context, errs *binding.Errors, l i18n.Locale) { + validate(errs, ctx.Data, f, l) } type OrgSettingForm struct { @@ -47,20 +35,8 @@ type OrgSettingForm struct { Location string `form:"location" binding:"MaxSize(50)"` } -func (f *OrgSettingForm) Name(field string) string { - names := map[string]string{ - "DisplayName": "Display name", - "Email": "E-mail address", - "Description": "Description", - "Website": "Website address", - "Location": "Location", - } - return names[field] -} - -func (f *OrgSettingForm) Validate(errors *binding.Errors, req *http.Request, context martini.Context) { - data := context.Get(reflect.TypeOf(base.TmplData{})).Interface().(base.TmplData) - validate(errors, data, f) +func (f *OrgSettingForm) Validate(ctx *macaron.Context, errs *binding.Errors, l i18n.Locale) { + validate(errs, ctx.Data, f, l) } // ___________ @@ -76,15 +52,6 @@ type CreateTeamForm struct { Permission string `form:"permission"` } -func (f *CreateTeamForm) Name(field string) string { - names := map[string]string{ - "TeamName": "Team name", - "Description": "Team description", - } - return names[field] -} - -func (f *CreateTeamForm) Validate(errs *binding.Errors, req *http.Request, ctx martini.Context) { - data := ctx.Get(reflect.TypeOf(base.TmplData{})).Interface().(base.TmplData) - validate(errs, data, f) +func (f *CreateTeamForm) Validate(ctx *macaron.Context, errs *binding.Errors, l i18n.Locale) { + validate(errs, ctx.Data, f, l) } diff --git a/modules/auth/publickey.go b/modules/auth/publickey.go deleted file mode 100644 index b828c92b57..0000000000 --- a/modules/auth/publickey.go +++ /dev/null @@ -1,33 +0,0 @@ -// Copyright 2014 The Gogs Authors. All rights reserved. -// Use of this source code is governed by a MIT-style -// license that can be found in the LICENSE file. - -package auth - -import ( - "net/http" - "reflect" - - "github.com/go-martini/martini" - - "github.com/gogits/gogs/modules/base" - "github.com/gogits/gogs/modules/middleware/binding" -) - -type AddSSHKeyForm struct { - KeyName string `form:"keyname" binding:"Required"` - KeyContent string `form:"key_content" binding:"Required"` -} - -func (f *AddSSHKeyForm) Name(field string) string { - names := map[string]string{ - "KeyName": "SSH key name", - "KeyContent": "SSH key content", - } - return names[field] -} - -func (f *AddSSHKeyForm) Validate(errors *binding.Errors, req *http.Request, context martini.Context) { - data := context.Get(reflect.TypeOf(base.TmplData{})).Interface().(base.TmplData) - validate(errors, data, f) -} diff --git a/modules/auth/publickey_form.go b/modules/auth/publickey_form.go new file mode 100644 index 0000000000..4618a7ea36 --- /dev/null +++ b/modules/auth/publickey_form.go @@ -0,0 +1,21 @@ +// Copyright 2014 The Gogs Authors. All rights reserved. +// Use of this source code is governed by a MIT-style +// license that can be found in the LICENSE file. + +package auth + +import ( + "github.com/Unknwon/macaron" + "github.com/macaron-contrib/i18n" + + "github.com/gogits/gogs/modules/middleware/binding" +) + +type AddSSHKeyForm struct { + SSHTitle string `form:"title" binding:"Required"` + Content string `form:"content" binding:"Required"` +} + +func (f *AddSSHKeyForm) Validate(ctx *macaron.Context, errs *binding.Errors, l i18n.Locale) { + validate(errs, ctx.Data, f, l) +} diff --git a/modules/auth/repo.go b/modules/auth/repo.go deleted file mode 100644 index d3d215322a..0000000000 --- a/modules/auth/repo.go +++ /dev/null @@ -1,252 +0,0 @@ -// Copyright 2014 The Gogs Authors. All rights reserved. -// Use of this source code is governed by a MIT-style -// license that can be found in the LICENSE file. - -package auth - -import ( - "net/http" - "reflect" - - "github.com/go-martini/martini" - - "github.com/gogits/gogs/modules/base" - "github.com/gogits/gogs/modules/middleware/binding" -) - -// __________ .__ __ -// \______ \ ____ ______ ____ _____|__|/ |_ ___________ ___.__. -// | _// __ \\____ \ / _ \/ ___/ \ __\/ _ \_ __ < | | -// | | \ ___/| |_> > <_> )___ \| || | ( <_> ) | \/\___ | -// |____|_ /\___ > __/ \____/____ >__||__| \____/|__| / ____| -// \/ \/|__| \/ \/ - -type CreateRepoForm struct { - Uid int64 `form:"uid" binding:"Required"` - RepoName string `form:"repo" binding:"Required;AlphaDash;MaxSize(100)"` - Private bool `form:"private"` - Description string `form:"desc" binding:"MaxSize(255)"` - Language string `form:"language"` - License string `form:"license"` - InitReadme bool `form:"initReadme"` -} - -func (f *CreateRepoForm) Name(field string) string { - names := map[string]string{ - "RepoName": "Repository name", - "Description": "Description", - } - return names[field] -} - -func (f *CreateRepoForm) Validate(errors *binding.Errors, req *http.Request, context martini.Context) { - data := context.Get(reflect.TypeOf(base.TmplData{})).Interface().(base.TmplData) - validate(errors, data, f) -} - -type MigrateRepoForm struct { - Url string `form:"url" binding:"Url"` - AuthUserName string `form:"auth_username"` - AuthPasswd string `form:"auth_password"` - Uid int64 `form:"uid" binding:"Required"` - RepoName string `form:"repo" binding:"Required;AlphaDash;MaxSize(100)"` - Mirror bool `form:"mirror"` - Private bool `form:"private"` - Description string `form:"desc" binding:"MaxSize(255)"` -} - -func (f *MigrateRepoForm) Name(field string) string { - names := map[string]string{ - "Url": "Migration URL", - "RepoName": "Repository name", - "Description": "Description", - } - return names[field] -} - -func (f *MigrateRepoForm) Validate(errors *binding.Errors, req *http.Request, context martini.Context) { - data := context.Get(reflect.TypeOf(base.TmplData{})).Interface().(base.TmplData) - validate(errors, data, f) -} - -type RepoSettingForm struct { - RepoName string `form:"name" binding:"Required;AlphaDash;MaxSize(100)"` - Description string `form:"desc" binding:"MaxSize(255)"` - Website string `form:"site" binding:"Url;MaxSize(100)"` - Branch string `form:"branch"` - Interval int `form:"interval"` - Private bool `form:"private"` - GoGet bool `form:"goget"` -} - -func (f *RepoSettingForm) Name(field string) string { - names := map[string]string{ - "RepoName": "Repository name", - "Description": "Description", - "Website": "Website address", - } - return names[field] -} - -func (f *RepoSettingForm) Validate(errors *binding.Errors, req *http.Request, context martini.Context) { - data := context.Get(reflect.TypeOf(base.TmplData{})).Interface().(base.TmplData) - validate(errors, data, f) -} - -// __ __ ___. .__ .__ __ -// / \ / \ ____\_ |__ | |__ | |__ ____ | | __ -// \ \/\/ // __ \| __ \| | \| | \ / _ \| |/ / -// \ /\ ___/| \_\ \ Y \ Y ( <_> ) < -// \__/\ / \___ >___ /___| /___| /\____/|__|_ \ -// \/ \/ \/ \/ \/ \/ - -type NewWebhookForm struct { - Url string `form:"url" binding:"Required;Url"` - ContentType string `form:"content_type" binding:"Required"` - Secret string `form:"secret""` - PushOnly bool `form:"push_only"` - Active bool `form:"active"` -} - -func (f *NewWebhookForm) Name(field string) string { - names := map[string]string{ - "Url": "Payload URL", - "ContentType": "Content type", - } - return names[field] -} - -func (f *NewWebhookForm) Validate(errors *binding.Errors, req *http.Request, context martini.Context) { - data := context.Get(reflect.TypeOf(base.TmplData{})).Interface().(base.TmplData) - validate(errors, data, f) -} - -// .___ -// | | ______ ________ __ ____ -// | |/ ___// ___/ | \_/ __ \ -// | |\___ \ \___ \| | /\ ___/ -// |___/____ >____ >____/ \___ > -// \/ \/ \/ - -type CreateIssueForm struct { - IssueName string `form:"title" binding:"Required;MaxSize(50)"` - MilestoneId int64 `form:"milestoneid"` - AssigneeId int64 `form:"assigneeid"` - Labels string `form:"labels"` - Content string `form:"content"` -} - -func (f *CreateIssueForm) Name(field string) string { - names := map[string]string{ - "IssueName": "Issue name", - } - return names[field] -} - -func (f *CreateIssueForm) Validate(errors *binding.Errors, req *http.Request, context martini.Context) { - data := context.Get(reflect.TypeOf(base.TmplData{})).Interface().(base.TmplData) - validate(errors, data, f) -} - -// _____ .__.__ __ -// / \ |__| | ____ _______/ |_ ____ ____ ____ -// / \ / \| | | _/ __ \ / ___/\ __\/ _ \ / \_/ __ \ -// / Y \ | |_\ ___/ \___ \ | | ( <_> ) | \ ___/ -// \____|__ /__|____/\___ >____ > |__| \____/|___| /\___ > -// \/ \/ \/ \/ \/ - -type CreateMilestoneForm struct { - Title string `form:"title" binding:"Required;MaxSize(50)"` - Content string `form:"content"` - Deadline string `form:"due_date"` -} - -func (f *CreateMilestoneForm) Name(field string) string { - names := map[string]string{ - "Title": "Milestone name", - } - return names[field] -} - -func (f *CreateMilestoneForm) Validate(errors *binding.Errors, req *http.Request, context martini.Context) { - data := context.Get(reflect.TypeOf(base.TmplData{})).Interface().(base.TmplData) - validate(errors, data, f) -} - -// .____ ___. .__ -// | | _____ \_ |__ ____ | | -// | | \__ \ | __ \_/ __ \| | -// | |___ / __ \| \_\ \ ___/| |__ -// |_______ (____ /___ /\___ >____/ -// \/ \/ \/ \/ - -type CreateLabelForm struct { - Title string `form:"title" binding:"Required;MaxSize(50)"` - Color string `form:"color" binding:"Required;Size(7)"` -} - -func (f *CreateLabelForm) Name(field string) string { - names := map[string]string{ - "Title": "Label name", - "Color": "Label color", - } - return names[field] -} - -func (f *CreateLabelForm) Validate(errors *binding.Errors, req *http.Request, context martini.Context) { - data := context.Get(reflect.TypeOf(base.TmplData{})).Interface().(base.TmplData) - validate(errors, data, f) -} - -// __________ .__ -// \______ \ ____ | | ____ _____ ______ ____ -// | _// __ \| | _/ __ \\__ \ / ___// __ \ -// | | \ ___/| |_\ ___/ / __ \_\___ \\ ___/ -// |____|_ /\___ >____/\___ >____ /____ >\___ > -// \/ \/ \/ \/ \/ \/ - -type NewReleaseForm struct { - TagName string `form:"tag_name" binding:"Required"` - Target string `form:"tag_target" binding:"Required"` - Title string `form:"title" binding:"Required"` - Content string `form:"content" binding:"Required"` - Draft string `form:"draft"` - Prerelease bool `form:"prerelease"` -} - -func (f *NewReleaseForm) Name(field string) string { - names := map[string]string{ - "TagName": "Tag name", - "Target": "Target", - "Title": "Release title", - "Content": "Release content", - } - return names[field] -} - -func (f *NewReleaseForm) Validate(errors *binding.Errors, req *http.Request, context martini.Context) { - data := context.Get(reflect.TypeOf(base.TmplData{})).Interface().(base.TmplData) - validate(errors, data, f) -} - -type EditReleaseForm struct { - Target string `form:"tag_target" binding:"Required"` - Title string `form:"title" binding:"Required"` - Content string `form:"content" binding:"Required"` - Draft string `form:"draft"` - Prerelease bool `form:"prerelease"` -} - -func (f *EditReleaseForm) Name(field string) string { - names := map[string]string{ - "Target": "Target", - "Title": "Release title", - "Content": "Release content", - } - return names[field] -} - -func (f *EditReleaseForm) Validate(errors *binding.Errors, req *http.Request, context martini.Context) { - data := context.Get(reflect.TypeOf(base.TmplData{})).Interface().(base.TmplData) - validate(errors, data, f) -} diff --git a/modules/auth/repo_form.go b/modules/auth/repo_form.go new file mode 100644 index 0000000000..11efb24d1c --- /dev/null +++ b/modules/auth/repo_form.go @@ -0,0 +1,165 @@ +// Copyright 2014 The Gogs Authors. All rights reserved. +// Use of this source code is governed by a MIT-style +// license that can be found in the LICENSE file. + +package auth + +import ( + "github.com/Unknwon/macaron" + "github.com/macaron-contrib/i18n" + + "github.com/gogits/gogs/modules/middleware/binding" +) + +// _______________________________________ _________.______________________ _______________.___. +// \______ \_ _____/\______ \_____ \ / _____/| \__ ___/\_____ \\______ \__ | | +// | _/| __)_ | ___// | \ \_____ \ | | | | / | \| _// | | +// | | \| \ | | / | \/ \| | | | / | \ | \\____ | +// |____|_ /_______ / |____| \_______ /_______ /|___| |____| \_______ /____|_ // ______| +// \/ \/ \/ \/ \/ \/ \/ + +type CreateRepoForm struct { + Uid int64 `form:"uid" binding:"Required"` + RepoName string `form:"repo_name" binding:"Required;AlphaDash;MaxSize(100)"` + Private bool `form:"private"` + Description string `form:"desc" binding:"MaxSize(255)"` + Gitignore string `form:"gitignore"` + License string `form:"license"` + InitReadme bool `form:"init_readme"` +} + +func (f *CreateRepoForm) Validate(ctx *macaron.Context, errs *binding.Errors, l i18n.Locale) { + validate(errs, ctx.Data, f, l) +} + +type MigrateRepoForm struct { + Url string `form:"url" binding:"Url"` + AuthUserName string `form:"auth_username"` + AuthPasswd string `form:"auth_password"` + Uid int64 `form:"uid" binding:"Required"` + RepoName string `form:"repo" binding:"Required;AlphaDash;MaxSize(100)"` + Mirror bool `form:"mirror"` + Private bool `form:"private"` + Description string `form:"desc" binding:"MaxSize(255)"` +} + +func (f *MigrateRepoForm) Validate(ctx *macaron.Context, errs *binding.Errors, l i18n.Locale) { + validate(errs, ctx.Data, f, l) +} + +type RepoSettingForm struct { + RepoName string `form:"name" binding:"Required;AlphaDash;MaxSize(100)"` + Description string `form:"desc" binding:"MaxSize(255)"` + Website string `form:"site" binding:"Url;MaxSize(100)"` + Branch string `form:"branch"` + Interval int `form:"interval"` + Private bool `form:"private"` + GoGet bool `form:"goget"` +} + +func (f *RepoSettingForm) Validate(ctx *macaron.Context, errs *binding.Errors, l i18n.Locale) { + validate(errs, ctx.Data, f, l) +} + +// __ __ ___. .__ .__ __ +// / \ / \ ____\_ |__ | |__ | |__ ____ | | __ +// \ \/\/ // __ \| __ \| | \| | \ / _ \| |/ / +// \ /\ ___/| \_\ \ Y \ Y ( <_> ) < +// \__/\ / \___ >___ /___| /___| /\____/|__|_ \ +// \/ \/ \/ \/ \/ \/ + +type NewWebhookForm struct { + Url string `form:"url" binding:"Required;Url"` + ContentType string `form:"content_type" binding:"Required"` + Secret string `form:"secret""` + PushOnly bool `form:"push_only"` + Active bool `form:"active"` +} + +func (f *NewWebhookForm) Validate(ctx *macaron.Context, errs *binding.Errors, l i18n.Locale) { + validate(errs, ctx.Data, f, l) +} + +// .___ +// | | ______ ________ __ ____ +// | |/ ___// ___/ | \_/ __ \ +// | |\___ \ \___ \| | /\ ___/ +// |___/____ >____ >____/ \___ > +// \/ \/ \/ + +type CreateIssueForm struct { + IssueName string `form:"title" binding:"Required;MaxSize(50)"` + MilestoneId int64 `form:"milestoneid"` + AssigneeId int64 `form:"assigneeid"` + Labels string `form:"labels"` + Content string `form:"content"` +} + +func (f *CreateIssueForm) Validate(ctx *macaron.Context, errs *binding.Errors, l i18n.Locale) { + validate(errs, ctx.Data, f, l) +} + +// _____ .__.__ __ +// / \ |__| | ____ _______/ |_ ____ ____ ____ +// / \ / \| | | _/ __ \ / ___/\ __\/ _ \ / \_/ __ \ +// / Y \ | |_\ ___/ \___ \ | | ( <_> ) | \ ___/ +// \____|__ /__|____/\___ >____ > |__| \____/|___| /\___ > +// \/ \/ \/ \/ \/ + +type CreateMilestoneForm struct { + Title string `form:"title" binding:"Required;MaxSize(50)"` + Content string `form:"content"` + Deadline string `form:"due_date"` +} + +func (f *CreateMilestoneForm) Validate(ctx *macaron.Context, errs *binding.Errors, l i18n.Locale) { + validate(errs, ctx.Data, f, l) +} + +// .____ ___. .__ +// | | _____ \_ |__ ____ | | +// | | \__ \ | __ \_/ __ \| | +// | |___ / __ \| \_\ \ ___/| |__ +// |_______ (____ /___ /\___ >____/ +// \/ \/ \/ \/ + +type CreateLabelForm struct { + Title string `form:"title" binding:"Required;MaxSize(50)"` + Color string `form:"color" binding:"Required;Size(7)"` +} + +func (f *CreateLabelForm) Validate(ctx *macaron.Context, errs *binding.Errors, l i18n.Locale) { + validate(errs, ctx.Data, f, l) +} + +// __________ .__ +// \______ \ ____ | | ____ _____ ______ ____ +// | _// __ \| | _/ __ \\__ \ / ___// __ \ +// | | \ ___/| |_\ ___/ / __ \_\___ \\ ___/ +// |____|_ /\___ >____/\___ >____ /____ >\___ > +// \/ \/ \/ \/ \/ \/ + +type NewReleaseForm struct { + TagName string `form:"tag_name" binding:"Required"` + Target string `form:"tag_target" binding:"Required"` + Title string `form:"title" binding:"Required"` + Content string `form:"content" binding:"Required"` + Draft string `form:"draft"` + Prerelease bool `form:"prerelease"` +} + +func (f *NewReleaseForm) Validate(ctx *macaron.Context, errs *binding.Errors, l i18n.Locale) { + validate(errs, ctx.Data, f, l) +} + +type EditReleaseForm struct { + Target string `form:"tag_target" binding:"Required"` + Title string `form:"title" binding:"Required"` + Content string `form:"content" binding:"Required"` + Draft string `form:"draft"` + Prerelease bool `form:"prerelease"` +} + +func (f *EditReleaseForm) Validate(ctx *macaron.Context, errs *binding.Errors, l i18n.Locale) { + validate(errs, ctx.Data, f, l) +} diff --git a/modules/auth/user.go b/modules/auth/user.go deleted file mode 100644 index dfb969e816..0000000000 --- a/modules/auth/user.go +++ /dev/null @@ -1,299 +0,0 @@ -// Copyright 2014 The Gogs Authors. All rights reserved. -// Use of this source code is governed by a MIT-style -// license that can be found in the LICENSE file. - -package auth - -import ( - "net/http" - "reflect" - "strings" - - "github.com/go-martini/martini" - - "github.com/gogits/session" - - "github.com/gogits/gogs/models" - "github.com/gogits/gogs/modules/base" - "github.com/gogits/gogs/modules/log" - "github.com/gogits/gogs/modules/middleware/binding" - "github.com/gogits/gogs/modules/setting" -) - -// Web form interface. -type Form interface { - Name(field string) string -} - -type RegisterForm struct { - UserName string `form:"username" binding:"Required;AlphaDashDot;MaxSize(30)"` - Email string `form:"email" binding:"Required;Email;MaxSize(50)"` - Password string `form:"passwd" binding:"Required;MinSize(6);MaxSize(30)"` - RetypePasswd string `form:"retypepasswd"` - LoginType string `form:"logintype"` - LoginName string `form:"loginname"` -} - -func (f *RegisterForm) Name(field string) string { - names := map[string]string{ - "UserName": "Username", - "Email": "E-mail address", - "Password": "Password", - "RetypePasswd": "Re-type password", - } - return names[field] -} - -func (f *RegisterForm) Validate(errs *binding.Errors, req *http.Request, ctx martini.Context) { - data := ctx.Get(reflect.TypeOf(base.TmplData{})).Interface().(base.TmplData) - validate(errs, data, f) -} - -type LogInForm struct { - UserName string `form:"username" binding:"Required;MaxSize(35)"` - Password string `form:"passwd" binding:"Required;MinSize(6);MaxSize(30)"` - Remember bool `form:"remember"` -} - -func (f *LogInForm) Name(field string) string { - names := map[string]string{ - "UserName": "Username", - "Password": "Password", - } - return names[field] -} - -func (f *LogInForm) Validate(errs *binding.Errors, req *http.Request, ctx martini.Context) { - data := ctx.Get(reflect.TypeOf(base.TmplData{})).Interface().(base.TmplData) - validate(errs, data, f) -} - -func GetMinMaxSize(field reflect.StructField) string { - for _, rule := range strings.Split(field.Tag.Get("binding"), ";") { - if strings.HasPrefix(rule, "MinSize(") || strings.HasPrefix(rule, "MaxSize(") { - return rule[8 : len(rule)-1] - } - } - return "" -} - -func validate(errs *binding.Errors, data base.TmplData, f Form) { - if errs.Count() == 0 { - return - } else if len(errs.Overall) > 0 { - for _, err := range errs.Overall { - log.Error("%s: %v", reflect.TypeOf(f), err) - } - return - } - - data["HasError"] = true - AssignForm(f, data) - - typ := reflect.TypeOf(f) - val := reflect.ValueOf(f) - - if typ.Kind() == reflect.Ptr { - typ = typ.Elem() - val = val.Elem() - } - - for i := 0; i < typ.NumField(); i++ { - field := typ.Field(i) - - fieldName := field.Tag.Get("form") - // Allow ignored fields in the struct - if fieldName == "-" { - continue - } - - if err, ok := errs.Fields[field.Name]; ok { - data["Err_"+field.Name] = true - switch err { - case binding.BindingRequireError: - data["ErrorMsg"] = f.Name(field.Name) + " cannot be empty" - case binding.BindingAlphaDashError: - data["ErrorMsg"] = f.Name(field.Name) + " must be valid alpha or numeric or dash(-_) characters" - case binding.BindingAlphaDashDotError: - data["ErrorMsg"] = f.Name(field.Name) + " must be valid alpha or numeric or dash(-_) or dot characters" - case binding.BindingMinSizeError: - data["ErrorMsg"] = f.Name(field.Name) + " must contain at least " + GetMinMaxSize(field) + " characters" - case binding.BindingMaxSizeError: - data["ErrorMsg"] = f.Name(field.Name) + " must contain at most " + GetMinMaxSize(field) + " characters" - case binding.BindingEmailError: - data["ErrorMsg"] = f.Name(field.Name) + " is not a valid e-mail address" - case binding.BindingUrlError: - data["ErrorMsg"] = f.Name(field.Name) + " is not a valid URL" - default: - data["ErrorMsg"] = "Unknown error: " + err - } - return - } - } -} - -// AssignForm assign form values back to the template data. -func AssignForm(form interface{}, data base.TmplData) { - typ := reflect.TypeOf(form) - val := reflect.ValueOf(form) - - if typ.Kind() == reflect.Ptr { - typ = typ.Elem() - val = val.Elem() - } - - for i := 0; i < typ.NumField(); i++ { - field := typ.Field(i) - - fieldName := field.Tag.Get("form") - // Allow ignored fields in the struct - if fieldName == "-" { - continue - } - - data[fieldName] = val.Field(i).Interface() - } -} - -type InstallForm struct { - Database string `form:"database" binding:"Required"` - Host string `form:"host"` - User string `form:"user"` - Passwd string `form:"passwd"` - DatabaseName string `form:"database_name"` - SslMode string `form:"ssl_mode"` - DatabasePath string `form:"database_path"` - RepoRootPath string `form:"repo_path"` - RunUser string `form:"run_user"` - Domain string `form:"domain"` - AppUrl string `form:"app_url"` - AdminName string `form:"admin_name" binding:"Required;AlphaDashDot;MaxSize(30)"` - AdminPasswd string `form:"admin_pwd" binding:"Required;MinSize(6);MaxSize(30)"` - AdminEmail string `form:"admin_email" binding:"Required;Email;MaxSize(50)"` - SmtpHost string `form:"smtp_host"` - SmtpEmail string `form:"mailer_user"` - SmtpPasswd string `form:"mailer_pwd"` - RegisterConfirm string `form:"register_confirm"` - MailNotify string `form:"mail_notify"` -} - -func (f *InstallForm) Name(field string) string { - names := map[string]string{ - "Database": "Database name", - "AdminName": "Admin user name", - "AdminPasswd": "Admin password", - "AdminEmail": "Admin e-maill address", - } - return names[field] -} - -func (f *InstallForm) Validate(errors *binding.Errors, req *http.Request, context martini.Context) { - data := context.Get(reflect.TypeOf(base.TmplData{})).Interface().(base.TmplData) - validate(errors, data, f) -} - -// SignedInId returns the id of signed in user. -func SignedInId(header http.Header, sess session.SessionStore) int64 { - if !models.HasEngine { - return 0 - } - - if setting.Service.EnableReverseProxyAuth { - webAuthUser := header.Get(setting.ReverseProxyAuthUser) - if len(webAuthUser) > 0 { - u, err := models.GetUserByName(webAuthUser) - if err != nil { - if err != models.ErrUserNotExist { - log.Error("auth.user.SignedInId(GetUserByName): %v", err) - } - return 0 - } - return u.Id - } - } - - uid := sess.Get("userId") - if uid == nil { - return 0 - } - if id, ok := uid.(int64); ok { - if _, err := models.GetUserById(id); err != nil { - if err != models.ErrUserNotExist { - log.Error("auth.user.SignedInId(GetUserById): %v", err) - } - return 0 - } - return id - } - return 0 -} - -// SignedInUser returns the user object of signed user. -func SignedInUser(header http.Header, sess session.SessionStore) *models.User { - uid := SignedInId(header, sess) - if uid <= 0 { - return nil - } - - u, err := models.GetUserById(uid) - if err != nil { - log.Error("user.SignedInUser: %v", err) - return nil - } - return u -} - -// IsSignedIn check if any user has signed in. -func IsSignedIn(header http.Header, sess session.SessionStore) bool { - return SignedInId(header, sess) > 0 -} - -type FeedsForm struct { - UserId int64 `form:"userid" binding:"Required"` - Page int64 `form:"p"` -} - -type UpdateProfileForm struct { - UserName string `form:"username" binding:"Required;AlphaDash;MaxSize(30)"` - FullName string `form:"fullname" binding:"MaxSize(40)"` - Email string `form:"email" binding:"Required;Email;MaxSize(50)"` - Website string `form:"website" binding:"Url;MaxSize(50)"` - Location string `form:"location" binding:"MaxSize(50)"` - Avatar string `form:"avatar" binding:"Required;Email;MaxSize(50)"` -} - -func (f *UpdateProfileForm) Name(field string) string { - names := map[string]string{ - "UserName": "Username", - "Email": "E-mail address", - "Website": "Website address", - "Location": "Location", - "Avatar": "Gravatar Email", - } - return names[field] -} - -func (f *UpdateProfileForm) Validate(errs *binding.Errors, req *http.Request, ctx martini.Context) { - data := ctx.Get(reflect.TypeOf(base.TmplData{})).Interface().(base.TmplData) - validate(errs, data, f) -} - -type UpdatePasswdForm struct { - OldPasswd string `form:"oldpasswd" binding:"Required;MinSize(6);MaxSize(30)"` - NewPasswd string `form:"newpasswd" binding:"Required;MinSize(6);MaxSize(30)"` - RetypePasswd string `form:"retypepasswd"` -} - -func (f *UpdatePasswdForm) Name(field string) string { - names := map[string]string{ - "OldPasswd": "Old password", - "NewPasswd": "New password", - "RetypePasswd": "Re-type password", - } - return names[field] -} - -func (f *UpdatePasswdForm) Validate(errs *binding.Errors, req *http.Request, ctx martini.Context) { - data := ctx.Get(reflect.TypeOf(base.TmplData{})).Interface().(base.TmplData) - validate(errs, data, f) -} diff --git a/modules/auth/user_form.go b/modules/auth/user_form.go new file mode 100644 index 0000000000..30080e859b --- /dev/null +++ b/modules/auth/user_form.go @@ -0,0 +1,98 @@ +// Copyright 2014 The Gogs Authors. All rights reserved. +// Use of this source code is governed by a MIT-style +// license that can be found in the LICENSE file. + +package auth + +import ( + "github.com/Unknwon/macaron" + "github.com/macaron-contrib/i18n" + + "github.com/gogits/gogs/modules/middleware/binding" +) + +type InstallForm struct { + Database string `form:"database" binding:"Required"` + Host string `form:"host"` + User string `form:"user"` + Passwd string `form:"passwd"` + DatabaseName string `form:"database_name"` + SslMode string `form:"ssl_mode"` + DatabasePath string `form:"database_path"` + RepoRootPath string `form:"repo_path"` + RunUser string `form:"run_user"` + Domain string `form:"domain"` + AppUrl string `form:"app_url"` + AdminName string `form:"admin_name" binding:"Required;AlphaDashDot;MaxSize(30)"` + AdminPasswd string `form:"admin_pwd" binding:"Required;MinSize(6);MaxSize(30)"` + AdminEmail string `form:"admin_email" binding:"Required;Email;MaxSize(50)"` + SmtpHost string `form:"smtp_host"` + SmtpEmail string `form:"mailer_user"` + SmtpPasswd string `form:"mailer_pwd"` + RegisterConfirm string `form:"register_confirm"` + MailNotify string `form:"mail_notify"` +} + +func (f *InstallForm) Validate(ctx *macaron.Context, errs *binding.Errors, l i18n.Locale) { + validate(errs, ctx.Data, f, l) +} + +// _____ ____ _________________ ___ +// / _ \ | | \__ ___/ | \ +// / /_\ \| | / | | / ~ \ +// / | \ | / | | \ Y / +// \____|__ /______/ |____| \___|_ / +// \/ \/ + +type RegisterForm struct { + UserName string `form:"uname" binding:"Required;AlphaDashDot;MaxSize(35)"` + Email string `form:"email" binding:"Required;Email;MaxSize(50)"` + Password string `form:"password" binding:"Required;MinSize(6);MaxSize(30)"` + Retype string `form:"retype"` + LoginType string `form:"logintype"` + LoginName string `form:"loginname"` +} + +func (f *RegisterForm) Validate(ctx *macaron.Context, errs *binding.Errors, l i18n.Locale) { + validate(errs, ctx.Data, f, l) +} + +type SignInForm struct { + UserName string `form:"uname" binding:"Required;MaxSize(35)"` + Password string `form:"password" binding:"Required;MinSize(6);MaxSize(30)"` + Remember bool `form:"remember"` +} + +func (f *SignInForm) Validate(ctx *macaron.Context, errs *binding.Errors, l i18n.Locale) { + validate(errs, ctx.Data, f, l) +} + +// __________________________________________.___ _______ ________ _________ +// / _____/\_ _____/\__ ___/\__ ___/| |\ \ / _____/ / _____/ +// \_____ \ | __)_ | | | | | |/ | \/ \ ___ \_____ \ +// / \ | \ | | | | | / | \ \_\ \/ \ +// /_______ //_______ / |____| |____| |___\____|__ /\______ /_______ / +// \/ \/ \/ \/ \/ + +type UpdateProfileForm struct { + UserName string `form:"uname" binding:"Required;MaxSize(35)"` + FullName string `form:"fullname" binding:"MaxSize(40)"` + Email string `form:"email" binding:"Required;Email;MaxSize(50)"` + Website string `form:"website" binding:"Url;MaxSize(50)"` + Location string `form:"location" binding:"MaxSize(50)"` + Avatar string `form:"avatar" binding:"Required;Email;MaxSize(50)"` +} + +func (f *UpdateProfileForm) Validate(ctx *macaron.Context, errs *binding.Errors, l i18n.Locale) { + validate(errs, ctx.Data, f, l) +} + +type ChangePasswordForm struct { + OldPassword string `form:"old_password" binding:"Required;MinSize(6);MaxSize(30)"` + Password string `form:"password" binding:"Required;MinSize(6);MaxSize(30)"` + Retype string `form:"retype"` +} + +func (f *ChangePasswordForm) Validate(ctx *macaron.Context, errs *binding.Errors, l i18n.Locale) { + validate(errs, ctx.Data, f, l) +} diff --git a/modules/base/base.go b/modules/base/base.go index 570600c3d4..cb51478292 100644 --- a/modules/base/base.go +++ b/modules/base/base.go @@ -5,9 +5,7 @@ package base type ( - // Type TmplData represents data in the templates. - TmplData map[string]interface{} - TplName string + TplName string ApiJsonErr struct { Message string `json:"message"` diff --git a/modules/base/template.go b/modules/base/template.go index 8df8d82498..7589fdaafb 100644 --- a/modules/base/template.go +++ b/modules/base/template.go @@ -51,7 +51,7 @@ var mailDomains = map[string]string{ var TemplateFuncs template.FuncMap = map[string]interface{}{ "GoVer": func() string { - return runtime.Version() + return strings.Title(runtime.Version()) }, "AppName": func() string { return setting.AppName @@ -69,7 +69,8 @@ var TemplateFuncs template.FuncMap = map[string]interface{}{ return fmt.Sprint(time.Since(startTime).Nanoseconds()/1e6) + "ms" }, "AvatarLink": AvatarLink, - "str2html": Str2html, + "str2html": Str2html, // TODO: Legacy + "Str2html": Str2html, "TimeSince": TimeSince, "FileSize": FileSize, "Subtract": Subtract, @@ -98,10 +99,14 @@ var TemplateFuncs template.FuncMap = map[string]interface{}{ "DiffTypeToStr": DiffTypeToStr, "DiffLineTypeToStr": DiffLineTypeToStr, "ShortSha": ShortSha, - "Oauth2Icon": Oauth2Icon, - "Oauth2Name": Oauth2Name, + "Md5": EncodeMd5, + "ActionContent2Commits": ActionContent2Commits, + "Oauth2Icon": Oauth2Icon, + "Oauth2Name": Oauth2Name, + "CreateCaptcha": func() string { return "" }, } +// TODO: Legacy type Actioner interface { GetOpType() int GetActUserName() string @@ -117,11 +122,11 @@ type Actioner interface { func ActionIcon(opType int) string { switch opType { case 1: // Create repository. - return "plus-circle" + return "repo" case 5, 9: // Commit repository. - return "arrow-circle-o-right" + return "git-commit" case 6: // Create issue. - return "exclamation-circle" + return "issue-opened" case 8: // Transfer repository. return "share" case 10: // Comment issue. @@ -131,6 +136,7 @@ func ActionIcon(opType int) string { } } +// TODO: Legacy const ( TPL_CREATE_REPO = `<a href="/user/%s">%s</a> created repository <a href="/%s">%s</a>` TPL_COMMIT_REPO = `<a href="/user/%s">%s</a> pushed to <a href="/%s/src/%s">%s</a> at <a href="/%s">%s</a>%s` @@ -155,6 +161,15 @@ type PushCommits struct { Commits []*PushCommit } +func ActionContent2Commits(act Actioner) *PushCommits { + var push *PushCommits + if err := json.Unmarshal([]byte(act.GetContent()), &push); err != nil { + return nil + } + return push +} + +// TODO: Legacy // ActionDesc accepts int that represents action operation type // and returns the description. func ActionDesc(act Actioner) string { diff --git a/modules/base/tool.go b/modules/base/tool.go index 9635f13e0f..830c37f697 100644 --- a/modules/base/tool.go +++ b/modules/base/tool.go @@ -13,10 +13,13 @@ import ( "fmt" "hash" "math" - "strconv" + r "math/rand" "strings" "time" + "github.com/Unknwon/com" + "github.com/Unknwon/i18n" + "github.com/gogits/gogs/modules/setting" ) @@ -42,6 +45,33 @@ func GetRandomString(n int, alphabets ...byte) string { return string(bytes) } +// RandomCreateBytes generate random []byte by specify chars. +func RandomCreateBytes(n int, alphabets ...byte) []byte { + const alphanum = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz" + var bytes = make([]byte, n) + var randby bool + if num, err := rand.Read(bytes); num != n || err != nil { + r.Seed(time.Now().UnixNano()) + randby = true + } + for i, b := range bytes { + if len(alphabets) == 0 { + if randby { + bytes[i] = alphanum[r.Intn(len(alphanum))] + } else { + bytes[i] = alphanum[b%byte(len(alphanum))] + } + } else { + if randby { + bytes[i] = alphabets[r.Intn(len(alphabets))] + } else { + bytes[i] = alphabets[b%byte(len(alphabets))] + } + } + } + return bytes +} + // http://code.google.com/p/go/source/browse/pbkdf2/pbkdf2.go?repo=crypto func PBKDF2(password, salt []byte, iter, keyLen int, h func() hash.Hash) []byte { prf := hmac.New(h, password) @@ -89,7 +119,7 @@ func VerifyTimeLimitCode(data string, minutes int, code string) bool { // split code start := code[:12] lives := code[12:18] - if d, err := StrTo(lives).Int(); err == nil { + if d, err := com.StrTo(lives).Int(); err == nil { minutes = d } @@ -133,7 +163,7 @@ func CreateTimeLimitCode(data string, minutes int, startInf interface{}) string // create sha1 encode string sh := sha1.New() - sh.Write([]byte(data + setting.SecretKey + startStr + endStr + ToStr(minutes))) + sh.Write([]byte(data + setting.SecretKey + startStr + endStr + com.ToStr(minutes))) encoded := hex.EncodeToString(sh.Sum(nil)) code := fmt.Sprintf("%s%06d%s", startStr, minutes, encoded) @@ -240,53 +270,53 @@ func TimeSincePro(then time.Time) string { } // TimeSince calculates the time interval and generate user-friendly string. -func TimeSince(then time.Time) string { +func TimeSince(then time.Time, lang string) string { now := time.Now() - lbl := "ago" + lbl := i18n.Tr(lang, "tool.ago") diff := now.Unix() - then.Unix() if then.After(now) { - lbl = "from now" + lbl = i18n.Tr(lang, "tool.from_now") diff = then.Unix() - now.Unix() } switch { case diff <= 0: - return "now" + return i18n.Tr(lang, "tool.now") case diff <= 2: - return fmt.Sprintf("1 second %s", lbl) + return i18n.Tr(lang, "tool.1s", lbl) case diff < 1*Minute: - return fmt.Sprintf("%d seconds %s", diff, lbl) + return i18n.Tr(lang, "tool.seconds", diff, lbl) case diff < 2*Minute: - return fmt.Sprintf("1 minute %s", lbl) + return i18n.Tr(lang, "tool.1m", lbl) case diff < 1*Hour: - return fmt.Sprintf("%d minutes %s", diff/Minute, lbl) + return i18n.Tr(lang, "tool.minutes", diff/Minute, lbl) case diff < 2*Hour: - return fmt.Sprintf("1 hour %s", lbl) + return i18n.Tr(lang, "tool.1h", lbl) case diff < 1*Day: - return fmt.Sprintf("%d hours %s", diff/Hour, lbl) + return i18n.Tr(lang, "tool.hours", diff/Hour, lbl) case diff < 2*Day: - return fmt.Sprintf("1 day %s", lbl) + return i18n.Tr(lang, "tool.1d", lbl) case diff < 1*Week: - return fmt.Sprintf("%d days %s", diff/Day, lbl) + return i18n.Tr(lang, "tool.days", diff/Day, lbl) case diff < 2*Week: - return fmt.Sprintf("1 week %s", lbl) + return i18n.Tr(lang, "tool.1w", lbl) case diff < 1*Month: - return fmt.Sprintf("%d weeks %s", diff/Week, lbl) + return i18n.Tr(lang, "tool.weeks", diff/Week, lbl) case diff < 2*Month: - return fmt.Sprintf("1 month %s", lbl) + return i18n.Tr(lang, "tool.1mon", lbl) case diff < 1*Year: - return fmt.Sprintf("%d months %s", diff/Month, lbl) + return i18n.Tr(lang, "tool.months", diff/Month, lbl) case diff < 2*Year: - return fmt.Sprintf("1 year %s", lbl) + return i18n.Tr(lang, "tool.1y", lbl) default: - return fmt.Sprintf("%d years %s", diff/Year, lbl) + return i18n.Tr(lang, "tool.years", diff/Year, lbl) } } @@ -439,88 +469,3 @@ func DateFormat(t time.Time, format string) string { format = replacer.Replace(format) return t.Format(format) } - -// convert string to specify type - -type StrTo string - -func (f StrTo) Exist() bool { - return string(f) != string(0x1E) -} - -func (f StrTo) Int() (int, error) { - v, err := strconv.ParseInt(f.String(), 10, 32) - return int(v), err -} - -func (f StrTo) Int64() (int64, error) { - v, err := strconv.ParseInt(f.String(), 10, 64) - return int64(v), err -} - -func (f StrTo) MustInt() int { - v, _ := f.Int() - return v -} - -func (f StrTo) MustInt64() int64 { - v, _ := f.Int64() - return v -} - -func (f StrTo) String() string { - if f.Exist() { - return string(f) - } - return "" -} - -// convert any type to string -func ToStr(value interface{}, args ...int) (s string) { - switch v := value.(type) { - case bool: - s = strconv.FormatBool(v) - case float32: - s = strconv.FormatFloat(float64(v), 'f', argInt(args).Get(0, -1), argInt(args).Get(1, 32)) - case float64: - s = strconv.FormatFloat(v, 'f', argInt(args).Get(0, -1), argInt(args).Get(1, 64)) - case int: - s = strconv.FormatInt(int64(v), argInt(args).Get(0, 10)) - case int8: - s = strconv.FormatInt(int64(v), argInt(args).Get(0, 10)) - case int16: - s = strconv.FormatInt(int64(v), argInt(args).Get(0, 10)) - case int32: - s = strconv.FormatInt(int64(v), argInt(args).Get(0, 10)) - case int64: - s = strconv.FormatInt(v, argInt(args).Get(0, 10)) - case uint: - s = strconv.FormatUint(uint64(v), argInt(args).Get(0, 10)) - case uint8: - s = strconv.FormatUint(uint64(v), argInt(args).Get(0, 10)) - case uint16: - s = strconv.FormatUint(uint64(v), argInt(args).Get(0, 10)) - case uint32: - s = strconv.FormatUint(uint64(v), argInt(args).Get(0, 10)) - case uint64: - s = strconv.FormatUint(v, argInt(args).Get(0, 10)) - case string: - s = v - case []byte: - s = string(v) - default: - s = fmt.Sprintf("%v", v) - } - return s -} - -type argInt []int - -func (a argInt) Get(i int, args ...int) (r int) { - if i >= 0 && i < len(a) { - r = a[i] - } else if len(args) > 0 { - r = args[0] - } - return -} diff --git a/modules/bin/conf.go b/modules/bin/conf.go deleted file mode 100644 index fa0822d732..0000000000 --- a/modules/bin/conf.go +++ /dev/null @@ -1,3623 +0,0 @@ -package bin - -import ( - "bytes" - "compress/gzip" - "fmt" - "io" - "strings" -) - -func bindata_read(data []byte, name string) ([]byte, error) { - gz, err := gzip.NewReader(bytes.NewBuffer(data)) - if err != nil { - return nil, fmt.Errorf("Read %q: %v", name, err) - } - - var buf bytes.Buffer - _, err = io.Copy(&buf, gz) - gz.Close() - - if err != nil { - return nil, fmt.Errorf("Read %q: %v", name, err) - } - - return buf.Bytes(), nil -} - -func conf_app_ini() ([]byte, error) { - return bindata_read([]byte{ - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x09, 0x6e, 0x88, 0x00, 0xff, 0xb4, 0x59, - 0xeb, 0x72, 0xdb, 0xc8, 0x95, 0xfe, 0x8f, 0xa7, 0x68, 0x73, 0x67, 0x76, - 0xec, 0x2d, 0x89, 0xa4, 0xe4, 0xb5, 0xec, 0x91, 0xc7, 0xb5, 0xa6, 0x48, - 0x50, 0xc2, 0x9a, 0x17, 0x0d, 0x00, 0xc9, 0xa3, 0xb8, 0x54, 0x28, 0x08, - 0x68, 0x92, 0x1d, 0x01, 0x68, 0x08, 0xdd, 0x14, 0xc5, 0xfc, 0xcb, 0x2b, - 0xa4, 0xf2, 0x34, 0x79, 0x9e, 0xfc, 0xc8, 0x63, 0xe4, 0x3b, 0x0d, 0x80, - 0x02, 0x65, 0x8e, 0xc6, 0xb9, 0x55, 0x52, 0x16, 0xd1, 0xdd, 0xe7, 0xf4, - 0xb9, 0x7c, 0xe7, 0xd6, 0xf3, 0x9e, 0xf5, 0xf2, 0x9c, 0x65, 0x61, 0xca, - 0x99, 0x5e, 0x84, 0x9a, 0xa9, 0x85, 0x5c, 0x29, 0x26, 0x33, 0xc6, 0xef, - 0x79, 0xb1, 0x66, 0x79, 0x38, 0xc7, 0x86, 0xd0, 0x09, 0xb7, 0x7a, 0xe7, - 0xe7, 0xc1, 0xa4, 0x37, 0xb6, 0xd9, 0x07, 0x76, 0x2a, 0xe7, 0xea, 0x18, - 0xff, 0xb2, 0x53, 0xa1, 0x99, 0xc7, 0x8b, 0x7b, 0x11, 0x95, 0xfb, 0xa3, - 0xe9, 0xe9, 0x14, 0xfb, 0x22, 0x9d, 0x77, 0x66, 0x21, 0x56, 0x65, 0xd6, - 0xce, 0xb3, 0xb9, 0xf5, 0x9e, 0xf5, 0x17, 0x61, 0x06, 0x4e, 0x38, 0x2e, - 0x66, 0x6c, 0x2d, 0x97, 0xac, 0x58, 0x66, 0x2c, 0x91, 0x51, 0x98, 0x24, - 0x6b, 0xcb, 0xbd, 0x98, 0x04, 0x17, 0x9e, 0xed, 0x82, 0x72, 0x2e, 0x34, - 0x4e, 0xdb, 0x42, 0x2f, 0x78, 0xc1, 0x5a, 0x31, 0xbf, 0x6f, 0xed, 0xb1, - 0x56, 0x5e, 0xc8, 0xb8, 0xc5, 0x24, 0x16, 0x34, 0x57, 0x1a, 0x2b, 0x31, - 0x9f, 0x85, 0xcb, 0x04, 0xbc, 0x54, 0x79, 0xc6, 0x70, 0x18, 0x4f, 0x07, - 0x24, 0x1b, 0xbe, 0x2d, 0xeb, 0x4b, 0xc1, 0x73, 0xa9, 0x84, 0x96, 0xc5, - 0xfa, 0xda, 0x72, 0xa7, 0x53, 0x1f, 0x1b, 0x96, 0xd7, 0x77, 0x9d, 0x73, - 0x3f, 0xf0, 0xaf, 0xce, 0xe9, 0xdc, 0x4d, 0xa8, 0x16, 0x38, 0xa8, 0x20, - 0x3d, 0x2f, 0xae, 0xad, 0x73, 0x77, 0xea, 0x4f, 0xfb, 0xd3, 0x11, 0x76, - 0x16, 0x5a, 0xe7, 0xd6, 0x60, 0x3a, 0xee, 0x39, 0x13, 0x7c, 0x19, 0x21, - 0x17, 0x52, 0x69, 0xc3, 0x27, 0xb8, 0x70, 0xe9, 0xc8, 0xf7, 0x2f, 0xeb, - 0xf3, 0xaf, 0xd4, 0x71, 0xa7, 0xf3, 0xfd, 0xcb, 0xf2, 0x38, 0x3e, 0xbe, - 0x7f, 0x79, 0xe6, 0xfb, 0xe7, 0xc1, 0xf9, 0xd4, 0xf5, 0x5f, 0xa9, 0x8e, - 0x65, 0x3e, 0x7a, 0x83, 0x01, 0xe9, 0x66, 0x6d, 0x76, 0xf0, 0xf1, 0xba, - 0xdb, 0xed, 0x5a, 0x9e, 0x77, 0x56, 0x7f, 0x1f, 0x1e, 0x42, 0xef, 0x81, - 0x50, 0xe1, 0x4d, 0xc2, 0x59, 0x7f, 0x30, 0x21, 0xfb, 0x67, 0x4c, 0x64, - 0xb5, 0xf6, 0xa9, 0x8c, 0xb9, 0x35, 0x1d, 0x0e, 0x47, 0xce, 0xc4, 0xae, - 0x55, 0x9d, 0x85, 0x89, 0xe2, 0xd6, 0xc0, 0xf1, 0x7a, 0x27, 0x23, 0x3b, - 0x70, 0xa7, 0x17, 0xbe, 0xed, 0x92, 0x0b, 0x36, 0x5b, 0xef, 0xd9, 0x29, - 0xcf, 0x78, 0x11, 0x6a, 0xce, 0x94, 0xe6, 0xb9, 0x3a, 0xc6, 0xca, 0x77, - 0x2c, 0x8a, 0xe1, 0x56, 0xbd, 0xe8, 0x68, 0xd9, 0x99, 0xc3, 0x91, 0x9d, - 0x68, 0xa9, 0xb4, 0x4c, 0x3b, 0xa4, 0xb6, 0x32, 0x07, 0xe6, 0xd2, 0xb8, - 0xe7, 0xbb, 0xd3, 0x29, 0xa9, 0xdc, 0x51, 0x45, 0xd4, 0xc9, 0x6f, 0xe7, - 0x9d, 0xa8, 0x58, 0xe7, 0xa0, 0xd1, 0x89, 0xea, 0xcc, 0x2b, 0xb6, 0x41, - 0xc4, 0x0b, 0xdd, 0xc6, 0xf9, 0xfd, 0x28, 0xfc, 0xa0, 0x8b, 0x25, 0x67, - 0xfb, 0xf1, 0x12, 0x1b, 0x42, 0x66, 0x1f, 0xde, 0xbd, 0x3d, 0xea, 0x2e, - 0xba, 0x69, 0x57, 0xb1, 0x7d, 0x32, 0xdf, 0x87, 0x74, 0x4d, 0x7f, 0xda, - 0xfc, 0x21, 0x4c, 0xf3, 0x84, 0xb7, 0x23, 0x99, 0x5a, 0x7d, 0xdb, 0xf5, - 0x83, 0xa1, 0x33, 0x22, 0x65, 0x9a, 0x52, 0x74, 0x0c, 0xdb, 0x9c, 0xa7, - 0xd6, 0x27, 0xfb, 0x6a, 0xe7, 0x81, 0x5b, 0xbe, 0x36, 0xfb, 0xef, 0xd9, - 0x45, 0x9e, 0x03, 0x2a, 0x09, 0xcc, 0x95, 0x30, 0x39, 0x63, 0x9a, 0x83, - 0x3b, 0x29, 0x1c, 0x66, 0x31, 0x94, 0x86, 0x28, 0x11, 0x9b, 0x09, 0xd8, - 0x94, 0x54, 0xc6, 0xf1, 0x06, 0x74, 0x80, 0x31, 0xb3, 0xca, 0x56, 0x00, - 0x1b, 0x37, 0xa0, 0xa6, 0x65, 0xfe, 0xc0, 0xa3, 0xa5, 0xe6, 0xb1, 0xe5, - 0xf9, 0x3d, 0xdf, 0xe9, 0x07, 0xc6, 0xed, 0xe7, 0x3d, 0xff, 0x8c, 0x5c, - 0x68, 0x7d, 0x89, 0x43, 0x1d, 0x02, 0x3b, 0xfc, 0xba, 0x81, 0xd3, 0x74, - 0xad, 0xee, 0x12, 0x83, 0x54, 0x68, 0x38, 0x2f, 0xb8, 0x2a, 0xd1, 0x8a, - 0x45, 0xa1, 0xf9, 0x6b, 0x6c, 0x08, 0xfd, 0x83, 0x22, 0xd8, 0x17, 0x2c, - 0x5a, 0x48, 0x0a, 0x96, 0xc1, 0x49, 0x8d, 0x43, 0x43, 0x6b, 0x9d, 0x4d, - 0x3d, 0x42, 0xc1, 0xc1, 0xe1, 0xdb, 0x76, 0x17, 0xff, 0x3b, 0x38, 0x7e, - 0xfd, 0xba, 0x7b, 0x64, 0x55, 0xe1, 0x46, 0x5e, 0xb2, 0xaa, 0x00, 0x29, - 0xa4, 0xd4, 0xd6, 0x79, 0xcf, 0xf3, 0x3e, 0x0f, 0xd8, 0x07, 0x88, 0x30, - 0xa4, 0x8b, 0x1a, 0xd7, 0x66, 0xc9, 0x7a, 0x8f, 0xf1, 0x3a, 0x7e, 0x4a, - 0x3c, 0x91, 0x64, 0x05, 0xbf, 0x5b, 0x8a, 0x82, 0x97, 0x82, 0x01, 0xf1, - 0x62, 0xb6, 0xde, 0x9f, 0x2d, 0x93, 0xa4, 0x05, 0x10, 0x8e, 0x36, 0xb1, - 0x53, 0x9e, 0xaf, 0xd9, 0xd6, 0xf2, 0x1b, 0xae, 0x56, 0x65, 0x02, 0xd2, - 0xdf, 0xe0, 0xa6, 0x1d, 0xdf, 0xc0, 0x1c, 0x61, 0x9c, 0x8a, 0xec, 0xda, - 0x04, 0x52, 0xb4, 0x2c, 0x84, 0x46, 0xbc, 0x39, 0x13, 0x58, 0x6e, 0x34, - 0x02, 0x12, 0xfb, 0x9f, 0x1a, 0x50, 0x7c, 0xf1, 0xa2, 0x7f, 0xd6, 0x9b, - 0x9c, 0xda, 0xcc, 0x3f, 0x73, 0x3c, 0xe6, 0x4f, 0xd9, 0x27, 0xdb, 0x3e, - 0x67, 0x57, 0xd3, 0x0b, 0x97, 0x19, 0xdd, 0x06, 0x3d, 0xbf, 0xc7, 0xbc, - 0xde, 0xd0, 0x7e, 0xf1, 0xc2, 0xf2, 0xec, 0xbe, 0x6b, 0xfb, 0x01, 0xbc, - 0x0f, 0x06, 0x2f, 0xfe, 0xeb, 0xe3, 0x70, 0x60, 0x7f, 0x76, 0xf1, 0xff, - 0xff, 0xfe, 0x9f, 0x97, 0xe0, 0xd4, 0x5b, 0x6a, 0xb9, 0x9f, 0xc8, 0x39, - 0xa2, 0xa3, 0xe0, 0x29, 0x4f, 0x6f, 0xa0, 0x6b, 0x1c, 0xae, 0x95, 0x05, - 0xec, 0x3b, 0x93, 0xc0, 0xb5, 0xc7, 0xf6, 0xf8, 0x04, 0xa1, 0x30, 0xe8, - 0x5d, 0x79, 0xa0, 0x7f, 0x6b, 0xf5, 0xa7, 0xd3, 0x4f, 0x8e, 0x6d, 0x72, - 0x4c, 0xc3, 0xa4, 0x41, 0xb8, 0xe2, 0x4a, 0xa6, 0xbc, 0xde, 0xde, 0xd0, - 0x35, 0xcf, 0x88, 0x2c, 0x2a, 0x78, 0x2c, 0x4a, 0xab, 0xb8, 0x94, 0x14, - 0x15, 0x50, 0x53, 0xc8, 0x87, 0x35, 0x0b, 0x97, 0xb0, 0x72, 0x06, 0x80, - 0x19, 0xbc, 0xb3, 0x05, 0x0f, 0x63, 0x08, 0x62, 0x52, 0x29, 0x80, 0xb8, - 0x54, 0xd5, 0x87, 0xe5, 0xda, 0x97, 0xb6, 0xeb, 0xd9, 0x01, 0x52, 0xc6, - 0x2f, 0x57, 0x41, 0xef, 0xc2, 0x3f, 0xb3, 0x27, 0x00, 0x16, 0xc0, 0x35, - 0xdd, 0xe4, 0xbd, 0x5f, 0xf6, 0x3f, 0xdb, 0x27, 0xb4, 0xb5, 0x4f, 0x0b, - 0x55, 0x5e, 0x02, 0x50, 0xae, 0xad, 0x5e, 0xdf, 0x77, 0x2e, 0xed, 0xa0, - 0x0f, 0x0f, 0x05, 0x23, 0xfa, 0x35, 0x76, 0x26, 0x08, 0x74, 0x52, 0xec, - 0xe0, 0x5d, 0x17, 0xcc, 0x3d, 0x9b, 0xe0, 0x49, 0x80, 0xf8, 0xd5, 0x43, - 0x88, 0x12, 0x23, 0x0d, 0xe7, 0x31, 0xd3, 0x92, 0x21, 0x2d, 0xcf, 0x44, - 0x91, 0x32, 0xbe, 0x9f, 0x86, 0x22, 0x61, 0x33, 0xf8, 0xba, 0xe0, 0x73, - 0xa1, 0x74, 0x19, 0xb9, 0xe0, 0x79, 0xea, 0x78, 0x94, 0x4b, 0x6c, 0x24, - 0xb5, 0x11, 0xb8, 0x4e, 0x86, 0x8e, 0x3b, 0x6e, 0xb8, 0x72, 0x20, 0xb9, - 0x62, 0x99, 0xd4, 0x0c, 0xe9, 0x5b, 0xae, 0x2a, 0x62, 0x5c, 0x40, 0x31, - 0x67, 0x00, 0xc1, 0x60, 0x34, 0x13, 0x84, 0x51, 0x24, 0x97, 0x99, 0x2e, - 0x01, 0xb4, 0x49, 0x54, 0x86, 0xbd, 0x6b, 0xf4, 0x6f, 0x30, 0x35, 0x22, - 0xa6, 0x08, 0x72, 0xa6, 0xc4, 0xdc, 0xa4, 0x3e, 0x88, 0x7a, 0x2f, 0xf8, - 0x0a, 0x6c, 0xd7, 0x7a, 0x21, 0xb2, 0x79, 0x1b, 0x92, 0xfd, 0x7c, 0xe1, - 0xb8, 0x76, 0xe0, 0x39, 0xa7, 0x13, 0x78, 0xfa, 0xd2, 0xb1, 0x3f, 0x37, - 0x38, 0xf4, 0xc3, 0x08, 0x21, 0x1d, 0xde, 0x03, 0xa1, 0x90, 0x45, 0xb1, - 0x5c, 0x44, 0x7a, 0x59, 0x70, 0xcb, 0x9e, 0x98, 0x7b, 0xfb, 0xbd, 0xfe, - 0x99, 0x1d, 0xf4, 0x2e, 0x81, 0x33, 0xb7, 0x41, 0x35, 0x26, 0x1b, 0x40, - 0x19, 0x31, 0xab, 0x3c, 0x59, 0x9f, 0x9f, 0x4c, 0x7d, 0x67, 0x78, 0x15, - 0x90, 0x0d, 0x9a, 0xc7, 0x25, 0x72, 0x45, 0xcc, 0x35, 0xa8, 0x8e, 0x4d, - 0xa9, 0xa0, 0x02, 0x80, 0xb2, 0xb5, 0x58, 0xde, 0x50, 0x4e, 0xa3, 0xd0, - 0x10, 0x5a, 0x95, 0x99, 0x55, 0x28, 0xb5, 0xe4, 0xaa, 0x73, 0x70, 0xf4, - 0xa6, 0xe6, 0xf9, 0x1c, 0x16, 0x36, 0x97, 0x58, 0x5f, 0x56, 0xfc, 0x66, - 0x21, 0xe5, 0x2d, 0xe5, 0x98, 0x7e, 0x01, 0x6c, 0xe9, 0x50, 0xdd, 0xc2, - 0x22, 0xb0, 0xf1, 0x7d, 0x98, 0x90, 0x69, 0x60, 0x63, 0xe4, 0x28, 0x65, - 0xf9, 0x3d, 0xef, 0x53, 0xe0, 0x4c, 0xe0, 0xac, 0xcb, 0x1e, 0x49, 0x79, - 0x40, 0xde, 0xe1, 0x89, 0x00, 0x4e, 0x51, 0xb6, 0x53, 0x2e, 0x97, 0x9a, - 0x8e, 0x23, 0x38, 0x65, 0x16, 0x2b, 0x6b, 0x60, 0x13, 0x3a, 0xdc, 0xc0, - 0x77, 0xc6, 0x36, 0xca, 0x05, 0x08, 0xde, 0xe0, 0x36, 0x42, 0x01, 0xd5, - 0xc0, 0x52, 0xc6, 0x41, 0x43, 0xd9, 0x93, 0xe5, 0x6c, 0x66, 0xb2, 0x6b, - 0x36, 0x47, 0x9e, 0x04, 0xaa, 0x23, 0xd4, 0xf1, 0x8c, 0x27, 0x7b, 0xec, - 0x96, 0xf3, 0x9c, 0xca, 0x39, 0xcc, 0x2c, 0x4c, 0x36, 0xad, 0xea, 0x7a, - 0x2c, 0xb3, 0x1f, 0x34, 0xbb, 0xcd, 0x00, 0x8b, 0x15, 0xf5, 0x13, 0x66, - 0xb3, 0x8d, 0x80, 0x9e, 0x0c, 0x82, 0x93, 0x8b, 0xe1, 0x90, 0x2a, 0x94, - 0x4d, 0xaa, 0x1e, 0x10, 0x2c, 0x27, 0x14, 0x2c, 0xc8, 0x3a, 0x48, 0xd9, - 0x6b, 0x60, 0x93, 0x14, 0x23, 0x6f, 0x94, 0x0d, 0x87, 0x77, 0x71, 0xf2, - 0xff, 0x76, 0xdf, 0x37, 0xe5, 0xb6, 0x6e, 0x3e, 0x5e, 0xa9, 0xda, 0x63, - 0x65, 0xe1, 0xa6, 0x12, 0x97, 0x1a, 0x57, 0xa8, 0x54, 0xe7, 0xed, 0x39, - 0xfd, 0x26, 0x37, 0x1c, 0xbf, 0x79, 0xf7, 0x16, 0x7b, 0x3f, 0xff, 0x5c, - 0x6d, 0xdc, 0xdd, 0x99, 0xd5, 0xc3, 0x37, 0x75, 0xa6, 0xad, 0xd9, 0xcc, - 0x0a, 0x99, 0x02, 0xb3, 0x31, 0xb2, 0xa7, 0xb2, 0x86, 0xee, 0x74, 0xfc, - 0xb8, 0x07, 0xc5, 0x37, 0x41, 0x6c, 0xa0, 0x9d, 0x87, 0x4a, 0xad, 0x64, - 0x11, 0xd7, 0xb9, 0x78, 0x93, 0x87, 0xa9, 0x2e, 0x48, 0x4a, 0x07, 0x5f, - 0xdb, 0xb0, 0xda, 0x68, 0x97, 0x08, 0xf9, 0x7a, 0xbf, 0x3f, 0x72, 0x80, - 0x80, 0xc0, 0x31, 0x5c, 0xaa, 0x8f, 0x32, 0xfb, 0x95, 0x2d, 0xcb, 0xf4, - 0xdc, 0x44, 0x71, 0x0d, 0xb4, 0x30, 0x17, 0xed, 0x06, 0xd8, 0x48, 0x3e, - 0x8b, 0x50, 0x54, 0xf5, 0x25, 0x3b, 0xf0, 0x68, 0xf2, 0x64, 0xc7, 0x08, - 0xd1, 0xa1, 0x7f, 0x64, 0x21, 0xfe, 0xc0, 0x2d, 0x7f, 0xfa, 0xc9, 0x9e, - 0x7c, 0x23, 0x51, 0x14, 0xc1, 0x36, 0x81, 0x96, 0xb7, 0x3c, 0xb3, 0x4c, - 0x4b, 0xa1, 0x59, 0x94, 0x08, 0x64, 0x3e, 0x26, 0xe2, 0xb2, 0xcc, 0x72, - 0x84, 0xbb, 0x36, 0xa6, 0xc4, 0x7e, 0xcd, 0x0e, 0x88, 0x53, 0x12, 0x85, - 0x3e, 0xa6, 0xd2, 0x2c, 0x51, 0xa4, 0x15, 0x1a, 0x05, 0x39, 0x2f, 0x4b, - 0x7f, 0x07, 0x29, 0xf4, 0xf7, 0x3c, 0xd2, 0x1b, 0xf3, 0x98, 0x9d, 0x7f, - 0xd9, 0x3c, 0xab, 0xd5, 0xaa, 0x62, 0x05, 0x43, 0x29, 0x73, 0x91, 0xd1, - 0x81, 0xec, 0x24, 0xb2, 0x99, 0x6c, 0x73, 0x83, 0xaf, 0x6f, 0x3e, 0x0e, - 0x29, 0xa9, 0x79, 0xd8, 0x65, 0xe2, 0x2a, 0xb5, 0x6d, 0x29, 0x25, 0x4b, - 0x93, 0x1d, 0x1a, 0x2e, 0x3b, 0x6d, 0xfc, 0x2c, 0x55, 0x65, 0xe2, 0xca, - 0x24, 0x77, 0x77, 0xff, 0xb4, 0x39, 0x90, 0x96, 0x0d, 0xf8, 0xd9, 0x5f, - 0xff, 0xf2, 0xa7, 0xbf, 0xfd, 0xf1, 0xcf, 0x54, 0x32, 0x77, 0x60, 0xa4, - 0x08, 0xf3, 0x45, 0x15, 0x18, 0x95, 0x04, 0xed, 0x6e, 0x03, 0x22, 0xef, - 0xd9, 0x4e, 0x90, 0xec, 0xa4, 0x2a, 0x25, 0x07, 0x05, 0xcf, 0x22, 0x02, - 0xc6, 0x8a, 0x8b, 0x1b, 0xb9, 0xcb, 0x6a, 0xc0, 0x41, 0xd6, 0xd6, 0x35, - 0x7d, 0x34, 0x17, 0xfb, 0x37, 0x35, 0xd0, 0x0e, 0x7f, 0x03, 0x9e, 0xcf, - 0x93, 0x6e, 0x81, 0xb4, 0xb2, 0xa0, 0x5e, 0x09, 0xad, 0x77, 0x25, 0xb6, - 0x7f, 0xc0, 0x8c, 0xbb, 0x3c, 0x8f, 0x18, 0xac, 0x58, 0x3f, 0x5a, 0xe1, - 0x37, 0x84, 0xff, 0x15, 0x9a, 0x5d, 0x52, 0x1b, 0xdb, 0xfd, 0x27, 0x64, - 0x36, 0x8c, 0x1b, 0x7e, 0xfb, 0x06, 0x91, 0xbf, 0x26, 0xd9, 0x96, 0x38, - 0xa2, 0x8a, 0xbb, 0xd5, 0x09, 0xf3, 0x14, 0x33, 0x57, 0xd9, 0x70, 0x22, - 0xaf, 0xe3, 0x87, 0x2c, 0x57, 0xcd, 0xc9, 0x27, 0xa3, 0x5b, 0x75, 0xd8, - 0xea, 0x0d, 0x7a, 0xe7, 0xbe, 0xc9, 0xa8, 0xe5, 0x4a, 0xdd, 0x7f, 0x56, - 0xfb, 0x55, 0x53, 0x7b, 0xda, 0xdf, 0xaa, 0x80, 0x55, 0x49, 0xdb, 0xe2, - 0x78, 0xd4, 0xb5, 0x1a, 0xb5, 0xf0, 0xa8, 0x5b, 0x33, 0x2a, 0x65, 0x31, - 0xb9, 0xaa, 0x29, 0x0b, 0x18, 0x64, 0xc8, 0x41, 0xa6, 0x79, 0x43, 0x07, - 0xbd, 0x29, 0x03, 0xef, 0x99, 0x21, 0x38, 0x66, 0xad, 0xe3, 0xa3, 0xee, - 0xeb, 0x1f, 0x5b, 0x58, 0xa8, 0xa9, 0xb0, 0xf6, 0xd8, 0xa3, 0x1f, 0x1c, - 0x1c, 0x1e, 0x1c, 0xb4, 0xaa, 0x8a, 0x62, 0x7a, 0x36, 0xa5, 0xc0, 0x6c, - 0xb7, 0x3d, 0x28, 0x8f, 0x3c, 0xda, 0xa5, 0x34, 0x4b, 0x35, 0x36, 0xec, - 0xb2, 0x09, 0x1a, 0x84, 0x4b, 0x67, 0x60, 0x8c, 0x62, 0x32, 0xd0, 0x7b, - 0x76, 0x5e, 0xc8, 0x7b, 0x41, 0x1d, 0xa6, 0x69, 0xdf, 0xe6, 0x4c, 0xe6, - 0x24, 0xb9, 0x2a, 0x85, 0x03, 0xcd, 0xb1, 0xe9, 0xc8, 0x16, 0xe1, 0x3d, - 0x15, 0xab, 0x75, 0x7d, 0x6a, 0xcd, 0x69, 0xa0, 0x26, 0x16, 0xa8, 0x84, - 0xa5, 0x7c, 0x8f, 0xf3, 0x10, 0x26, 0x85, 0xf6, 0xbc, 0x8d, 0x39, 0x81, - 0x7a, 0xfa, 0x6a, 0x57, 0xb5, 0x1e, 0xf5, 0xaf, 0x78, 0x24, 0xe2, 0x96, - 0x97, 0x4b, 0x55, 0xd5, 0x35, 0x96, 0xda, 0x63, 0xb9, 0x94, 0x89, 0x07, - 0xf8, 0xec, 0x6d, 0x2a, 0x63, 0xcd, 0xf0, 0xd1, 0x46, 0x47, 0xaf, 0xdf, - 0xfe, 0xb8, 0x77, 0xd0, 0xed, 0xee, 0x85, 0x18, 0xc6, 0x1e, 0x04, 0x37, - 0xc6, 0x24, 0xbd, 0x8f, 0xd1, 0x5f, 0xef, 0xe3, 0xef, 0x7e, 0x5c, 0x50, - 0xb7, 0xd2, 0x31, 0x8b, 0x2c, 0x56, 0x59, 0x7d, 0x2b, 0xda, 0x51, 0xf4, - 0x7c, 0x35, 0x47, 0x9a, 0x7b, 0x8e, 0xeb, 0x6b, 0x3e, 0xd6, 0xc2, 0x06, - 0xda, 0xcc, 0x37, 0x1b, 0x6b, 0x95, 0xbd, 0xea, 0x69, 0x3d, 0xa6, 0xd4, - 0x2a, 0xe1, 0x4e, 0xaf, 0xd2, 0x3d, 0x42, 0x5b, 0x25, 0x78, 0xd9, 0x98, - 0x57, 0x7d, 0x7f, 0xd5, 0xee, 0x8b, 0x80, 0xf4, 0x0c, 0xca, 0xfe, 0x0d, - 0x14, 0x4e, 0xd9, 0xd0, 0xa0, 0x16, 0x6c, 0x0c, 0x07, 0xd8, 0x99, 0xe8, - 0xa8, 0x10, 0xd9, 0xf0, 0x5b, 0x15, 0xa3, 0x25, 0x43, 0x84, 0xe5, 0x85, - 0x6b, 0x37, 0xda, 0x28, 0x3b, 0x33, 0x63, 0xbd, 0xa2, 0xca, 0x69, 0xee, - 0xdf, 0xa2, 0xa5, 0xb9, 0xb9, 0xee, 0x0f, 0xa9, 0x99, 0x2f, 0xb9, 0x80, - 0xdc, 0x6c, 0x3c, 0x8a, 0x8e, 0x00, 0xa0, 0x96, 0x6e, 0x13, 0x05, 0x5b, - 0x4c, 0xde, 0x1d, 0xfd, 0x6f, 0xb7, 0x6b, 0x9d, 0xf6, 0x37, 0xcd, 0xa0, - 0xe9, 0xf1, 0xc0, 0xa4, 0xdc, 0x78, 0xe4, 0x92, 0x88, 0x19, 0x37, 0x7c, - 0x76, 0x90, 0x7b, 0xb6, 0xe7, 0xd1, 0x50, 0x32, 0x72, 0x86, 0xf6, 0x53, - 0xfa, 0x8d, 0x0d, 0x62, 0x60, 0x4c, 0x2d, 0xd8, 0x6c, 0x99, 0x45, 0x7b, - 0x1b, 0x9c, 0xab, 0x45, 0x78, 0x40, 0xe8, 0xc6, 0xdf, 0xc3, 0x37, 0x47, - 0x15, 0xbc, 0xe3, 0x37, 0xad, 0xe6, 0x1d, 0x74, 0x66, 0x73, 0x85, 0x33, - 0x08, 0xce, 0x7a, 0xde, 0xd9, 0xf0, 0x62, 0xd2, 0xc7, 0x25, 0x66, 0xeb, - 0x51, 0x46, 0x73, 0x01, 0x46, 0xfc, 0x2d, 0x11, 0xc9, 0x11, 0x05, 0x42, - 0x18, 0xfd, 0x5a, 0x09, 0x8d, 0xa7, 0xbc, 0xcc, 0xb4, 0x88, 0x30, 0xac, - 0xda, 0x7e, 0x0a, 0x43, 0x9f, 0x46, 0xfc, 0x24, 0x8c, 0x38, 0xcd, 0x12, - 0xd5, 0xba, 0x81, 0xc6, 0xe3, 0x8c, 0x5c, 0x22, 0xba, 0x94, 0xf8, 0x4e, - 0x64, 0x62, 0xf9, 0x24, 0x20, 0xab, 0x7d, 0x5c, 0xe6, 0x5e, 0x3a, 0x7d, - 0xb2, 0x48, 0xd5, 0x79, 0xd6, 0xe3, 0xcc, 0xa9, 0xfb, 0x64, 0xa4, 0xb0, - 0xbe, 0xa0, 0x7d, 0x2a, 0x9f, 0x9d, 0xaa, 0x77, 0x83, 0x46, 0x42, 0xa8, - 0xba, 0xa2, 0x66, 0x46, 0xa0, 0x34, 0x64, 0x6c, 0x87, 0x46, 0xb5, 0x94, - 0xa3, 0x7e, 0x63, 0x78, 0x22, 0x4a, 0x4d, 0x5b, 0x0e, 0x4b, 0x80, 0x52, - 0x9a, 0x86, 0xa4, 0x98, 0xe2, 0x79, 0x68, 0x1e, 0x79, 0x52, 0x9c, 0x14, - 0x39, 0x90, 0x46, 0xaf, 0x45, 0xaa, 0x0e, 0x9d, 0x8a, 0x6c, 0xcf, 0xc4, - 0x7d, 0xcb, 0xaa, 0x66, 0xfd, 0x6a, 0xf5, 0xdf, 0xd9, 0xe4, 0x3f, 0xe9, - 0xef, 0xbb, 0x06, 0x37, 0xb5, 0xe2, 0x7e, 0x01, 0x37, 0x90, 0x9a, 0x03, - 0x7e, 0xb3, 0x9c, 0xd3, 0x0f, 0x07, 0x1d, 0x16, 0xfd, 0xfd, 0x1c, 0x16, - 0x46, 0x7f, 0xbb, 0x28, 0x64, 0x41, 0x3f, 0xfa, 0x85, 0xa0, 0xa9, 0xfa, - 0x69, 0x6a, 0x2c, 0x39, 0x58, 0x23, 0x8c, 0x50, 0x94, 0xde, 0xcd, 0xa7, - 0x55, 0xa7, 0xf8, 0xda, 0x36, 0x46, 0xf5, 0x72, 0xde, 0x24, 0x37, 0xb4, - 0xab, 0xf5, 0xeb, 0x0d, 0xd9, 0x86, 0xc2, 0x58, 0xe3, 0xe9, 0x71, 0x5a, - 0x6c, 0x9c, 0xa5, 0xa7, 0xa7, 0x3a, 0x3f, 0x60, 0xbb, 0x7c, 0xf7, 0xc0, - 0x0f, 0x03, 0x2d, 0x7a, 0x2b, 0x32, 0x81, 0xad, 0xe8, 0x29, 0x40, 0xa6, - 0xf0, 0x40, 0x4c, 0xa7, 0x58, 0x21, 0x35, 0x7e, 0xbf, 0x54, 0xa8, 0xf7, - 0x91, 0x31, 0xe8, 0x4c, 0xd2, 0x9c, 0x0c, 0xc8, 0xd6, 0x49, 0xfb, 0xd5, - 0xd7, 0x09, 0x60, 0x34, 0x3d, 0x0d, 0xdc, 0xa9, 0xdf, 0xf3, 0x1b, 0x91, - 0x3f, 0x0e, 0x1f, 0x10, 0xaf, 0x19, 0xd2, 0xd5, 0xd2, 0x3c, 0x72, 0x80, - 0x95, 0x02, 0x17, 0x38, 0x98, 0xe4, 0xdc, 0xe2, 0x61, 0xcc, 0x0d, 0x83, - 0x8f, 0x7b, 0xbf, 0x04, 0xf4, 0x46, 0xe8, 0xd5, 0x2e, 0x30, 0x4e, 0x20, - 0x46, 0x0a, 0x99, 0x1a, 0x81, 0x26, 0x66, 0xfa, 0x39, 0x3e, 0x87, 0xef, - 0x50, 0x4e, 0xc2, 0x0c, 0x0c, 0xd9, 0x4f, 0x3f, 0xe1, 0x6b, 0x8f, 0x21, - 0x9e, 0xc7, 0x27, 0x86, 0xaf, 0xe7, 0xfc, 0x0e, 0x19, 0xea, 0xcc, 0x19, - 0x9a, 0x07, 0xcb, 0x77, 0x26, 0x60, 0xe7, 0x29, 0xf5, 0x7b, 0xa4, 0x75, - 0x8c, 0xce, 0x7a, 0xfd, 0xb5, 0x5e, 0x03, 0x8c, 0xcf, 0x57, 0x5f, 0x69, - 0x66, 0x3f, 0xe4, 0x02, 0x15, 0xc5, 0x3c, 0xdb, 0x90, 0x38, 0xc4, 0x80, - 0x64, 0x79, 0x19, 0xf3, 0x84, 0xd3, 0xc3, 0xc1, 0x8c, 0xde, 0x13, 0x52, - 0x88, 0x4d, 0x27, 0xb6, 0xcd, 0xf5, 0xd6, 0x08, 0xb3, 0x79, 0xdc, 0x69, - 0x20, 0x20, 0xdb, 0xe5, 0xfe, 0xac, 0xe1, 0x4f, 0x7a, 0xc2, 0xa9, 0xaa, - 0x7e, 0x59, 0xf2, 0xe9, 0xed, 0xa3, 0x7c, 0xe9, 0xae, 0x0c, 0x92, 0x22, - 0x05, 0x85, 0x73, 0xbe, 0x23, 0xb9, 0xbb, 0x36, 0x8a, 0xcb, 0x04, 0x03, - 0x69, 0x80, 0x94, 0x33, 0xf6, 0x9a, 0xaf, 0xac, 0x3e, 0xe8, 0x11, 0x87, - 0xc5, 0x86, 0xf7, 0x6a, 0xc1, 0xb3, 0x66, 0x7b, 0x01, 0x26, 0x09, 0xae, - 0x7b, 0x8e, 0x6b, 0xb3, 0x5c, 0x54, 0x21, 0xa3, 0xa3, 0x9c, 0xc2, 0x61, - 0x99, 0x89, 0x87, 0x32, 0x2f, 0x2c, 0xe3, 0xfc, 0x49, 0x4c, 0xd0, 0x91, - 0xe6, 0xdb, 0x35, 0xbe, 0xc1, 0xe0, 0xac, 0xd9, 0xcd, 0xd4, 0xaf, 0xcf, - 0x9b, 0x57, 0x3d, 0x93, 0x66, 0x9e, 0xd8, 0x89, 0x16, 0xb7, 0xec, 0xf4, - 0xdc, 0x64, 0xbe, 0x2d, 0xc2, 0x40, 0x84, 0xf3, 0x0c, 0x17, 0x8a, 0xa8, - 0x36, 0x5e, 0x39, 0x54, 0x9b, 0x34, 0xd9, 0x6a, 0x4c, 0xf1, 0xcf, 0x1e, - 0x7c, 0x32, 0xd6, 0x6f, 0x4f, 0xe9, 0xdf, 0x3e, 0x89, 0x97, 0x1e, 0xe6, - 0xd4, 0x51, 0x20, 0xff, 0x45, 0x61, 0xc6, 0x6e, 0x48, 0x4d, 0x4e, 0xe6, - 0x43, 0x93, 0xc4, 0xab, 0x9c, 0xf8, 0xa5, 0x75, 0xf0, 0xb1, 0xf1, 0x10, - 0xdd, 0xda, 0x6b, 0x1d, 0x6e, 0x7d, 0x5f, 0x93, 0x5f, 0x6c, 0x7a, 0x2a, - 0xf1, 0x9a, 0xa6, 0xdb, 0xe4, 0xe5, 0xa7, 0xe6, 0x7b, 0x7c, 0x14, 0x6e, - 0x98, 0x70, 0xfb, 0x75, 0x98, 0x6d, 0x3d, 0xd4, 0x5a, 0x03, 0x97, 0xb8, - 0x97, 0x07, 0x4f, 0x40, 0x19, 0xd3, 0x7f, 0x73, 0x79, 0x90, 0x45, 0x5a, - 0x4a, 0x78, 0x6c, 0x1e, 0x7a, 0x8f, 0xe9, 0x9f, 0x8f, 0x9b, 0xff, 0x02, - 0x61, 0xd2, 0xcf, 0xff, 0x21, 0x3b, 0x17, 0xe8, 0x24, 0x3e, 0x2c, 0xf5, - 0xec, 0x9d, 0x45, 0xe0, 0x21, 0x26, 0x7f, 0x0f, 0x00, 0x00, 0xff, 0xff, - 0xc9, 0x2e, 0x07, 0x65, 0xc7, 0x19, 0x00, 0x00, - }, - "conf/app.ini", - ) -} - -func conf_content_git_bare_zip() ([]byte, error) { - return bindata_read([]byte{ - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x09, 0x6e, 0x88, 0x00, 0xff, 0xac, 0x7a, - 0x05, 0x54, 0x94, 0x5d, 0xd7, 0xf6, 0xd0, 0x48, 0x77, 0xc7, 0xd0, 0xdd, - 0x29, 0x48, 0x89, 0x74, 0x77, 0x77, 0xf7, 0x00, 0x33, 0xc4, 0x10, 0x82, - 0xa4, 0xe0, 0x48, 0x0e, 0x12, 0xd2, 0x21, 0xdd, 0x20, 0x22, 0x8d, 0x80, - 0x80, 0x34, 0x4a, 0x87, 0x84, 0xa8, 0xa4, 0x80, 0xa0, 0xe4, 0x8f, 0xbf, - 0x8f, 0xef, 0x07, 0xfe, 0x8f, 0xcf, 0xf7, 0xae, 0xf7, 0xfd, 0xc7, 0xb5, - 0xd7, 0x5e, 0x67, 0xad, 0x7d, 0x5f, 0xd7, 0x76, 0xdf, 0xe7, 0x9c, 0x7d, - 0xee, 0x73, 0xa1, 0xa9, 0x82, 0x84, 0x4c, 0x04, 0x00, 0x00, 0xd0, 0x01, - 0xc9, 0xba, 0x9e, 0xf7, 0x90, 0x6a, 0x72, 0xdd, 0x6d, 0xaf, 0x46, 0x61, - 0x57, 0x86, 0x7a, 0x65, 0x36, 0x1e, 0xee, 0xf6, 0x4e, 0x0e, 0x72, 0x8f, - 0xf8, 0x70, 0x42, 0x80, 0x58, 0x00, 0x07, 0xbf, 0x08, 0x8d, 0x3d, 0x24, - 0x77, 0x79, 0x05, 0x5a, 0x4b, 0x2a, 0xcd, 0x18, 0x61, 0x44, 0x21, 0x37, - 0xa1, 0xf7, 0xc7, 0x2b, 0x6b, 0x7e, 0x2f, 0x06, 0x87, 0x28, 0xf9, 0x38, - 0xdf, 0xf1, 0x9a, 0x32, 0x16, 0xbf, 0x62, 0xc2, 0x63, 0x79, 0x86, 0x5b, - 0x0d, 0x5c, 0x2f, 0x72, 0x31, 0x76, 0x41, 0x94, 0x57, 0x5c, 0xcb, 0xd5, - 0x06, 0x69, 0x75, 0xa4, 0xbf, 0xfd, 0xa2, 0x30, 0xe0, 0x8b, 0xc2, 0xc6, - 0x66, 0x2d, 0xb9, 0x3e, 0xd5, 0xb4, 0xd1, 0xbc, 0xf0, 0xf4, 0x6c, 0x2c, - 0x94, 0x06, 0x3a, 0x9e, 0x5b, 0xd9, 0x36, 0x9a, 0xf4, 0xb8, 0x58, 0xe7, - 0x71, 0x4f, 0xdb, 0xcd, 0x3c, 0x44, 0x62, 0xd1, 0x68, 0xa5, 0xae, 0x46, - 0x4a, 0x57, 0x86, 0x79, 0x65, 0xb6, 0x76, 0xde, 0x36, 0x5e, 0x4e, 0x20, - 0xb0, 0x93, 0x87, 0x3b, 0xe6, 0xd0, 0xa0, 0xca, 0x1b, 0x35, 0x35, 0x2d, - 0x56, 0x65, 0xae, 0xd7, 0x3c, 0xc3, 0x9c, 0xfd, 0x3c, 0xa5, 0xf5, 0xfa, - 0x8a, 0x6a, 0xfd, 0x9c, 0x5a, 0xac, 0xfd, 0xaf, 0x39, 0xf5, 0x15, 0x07, - 0xdf, 0x28, 0xe9, 0x69, 0x6a, 0x28, 0x71, 0xa9, 0x73, 0x0f, 0x70, 0xb2, - 0xf6, 0xbf, 0x19, 0xd1, 0x31, 0x60, 0xed, 0x37, 0x00, 0x7c, 0x02, 0x0c, - 0x3c, 0xa3, 0x77, 0x1a, 0x5f, 0x45, 0x04, 0xdc, 0xe4, 0xe1, 0x70, 0xf2, - 0x7e, 0x46, 0x7e, 0x35, 0x22, 0xbd, 0x32, 0xe4, 0x2b, 0x53, 0x94, 0x93, - 0xb9, 0xc7, 0xa1, 0xac, 0x56, 0xa7, 0xcd, 0xaa, 0xac, 0xc6, 0xf1, 0x6e, - 0x44, 0x51, 0x4d, 0x95, 0xed, 0xdd, 0x88, 0x1a, 0x27, 0xb7, 0x12, 0xd7, - 0xca, 0xcf, 0x47, 0x31, 0x00, 0x3f, 0x7e, 0x3f, 0x1e, 0x05, 0x5c, 0xfb, - 0xfd, 0x28, 0x95, 0xa3, 0x87, 0x87, 0x8b, 0x37, 0xcf, 0x4d, 0x78, 0xcb, - 0xe3, 0x04, 0x43, 0x0c, 0x04, 0x00, 0xe0, 0xd5, 0x95, 0x51, 0xfe, 0x2b, - 0xc6, 0x0a, 0x04, 0x72, 0xf5, 0x07, 0x59, 0x81, 0x6d, 0x1c, 0xb9, 0xdc, - 0xbc, 0x1d, 0xb8, 0xbd, 0xad, 0xdc, 0x40, 0xae, 0x76, 0x41, 0xf1, 0x12, - 0x1a, 0xdd, 0xd2, 0x58, 0x91, 0x0e, 0x3b, 0x06, 0xa9, 0xf5, 0x9f, 0x11, - 0x95, 0x5e, 0x0d, 0xe8, 0x32, 0x32, 0x4e, 0x12, 0x43, 0x14, 0xa6, 0x26, - 0xfb, 0x8d, 0x5e, 0xf0, 0x64, 0x52, 0x37, 0xa0, 0x7c, 0x59, 0x7a, 0xe1, - 0x72, 0x6b, 0xfb, 0x95, 0x73, 0x6b, 0x70, 0xd6, 0x94, 0xf9, 0xfc, 0x73, - 0xf1, 0x7d, 0x2e, 0xca, 0x06, 0x4d, 0x4c, 0xbf, 0x2f, 0x21, 0x0a, 0xdb, - 0x79, 0x72, 0xbc, 0x74, 0x8f, 0x3a, 0xcc, 0xf2, 0x58, 0x81, 0x08, 0x62, - 0x61, 0x0b, 0xe8, 0xd6, 0x78, 0xcd, 0xcb, 0x54, 0xb7, 0xa6, 0x79, 0x43, - 0x64, 0xed, 0x25, 0x80, 0xd1, 0x34, 0x63, 0xdd, 0x3b, 0xc9, 0xb7, 0xc4, - 0xe4, 0x03, 0x62, 0x8c, 0xc5, 0x90, 0x82, 0x30, 0x70, 0xc0, 0xcc, 0xef, - 0xd4, 0x93, 0x32, 0xbb, 0x87, 0x8c, 0xea, 0x85, 0xea, 0x3a, 0xc3, 0xfb, - 0x77, 0xea, 0x84, 0x18, 0x70, 0x19, 0x51, 0x03, 0xf7, 0xbe, 0xb2, 0x14, - 0x01, 0x38, 0x8d, 0x99, 0x51, 0x17, 0x30, 0x99, 0x81, 0x1f, 0x1e, 0x9e, - 0xc5, 0x7b, 0x92, 0x2a, 0x60, 0xf0, 0x25, 0x90, 0x9c, 0x95, 0x49, 0x4b, - 0x10, 0x3d, 0x38, 0xea, 0x2a, 0xe4, 0x56, 0x89, 0x16, 0x71, 0xa3, 0x6c, - 0xa2, 0x78, 0x88, 0xd9, 0x35, 0x0b, 0xea, 0x08, 0x7a, 0xb8, 0x22, 0xc9, - 0xb3, 0x48, 0x25, 0x4c, 0x18, 0x50, 0xeb, 0x3d, 0x43, 0xb5, 0x0f, 0x7d, - 0x92, 0x4d, 0x1f, 0xf9, 0x4d, 0xd5, 0x3f, 0x3c, 0x59, 0x61, 0xc7, 0x57, - 0x3b, 0x0f, 0x45, 0xcf, 0xac, 0xaa, 0x8a, 0x1a, 0x57, 0x2f, 0x5f, 0x17, - 0x09, 0x49, 0x69, 0xa8, 0xc8, 0x3e, 0x99, 0x8d, 0x5d, 0x86, 0xa4, 0x38, - 0x4e, 0x93, 0x6b, 0x49, 0x78, 0x2e, 0x6e, 0x6a, 0x28, 0xc0, 0xc4, 0x71, - 0xde, 0x7c, 0x7e, 0x83, 0xc9, 0xb0, 0x62, 0x92, 0x9a, 0xa6, 0xe6, 0x54, - 0xa4, 0xfe, 0x0c, 0x0a, 0x2d, 0x4e, 0xd9, 0xfc, 0x6c, 0x22, 0x51, 0x46, - 0x7b, 0xb3, 0x84, 0x9f, 0xbe, 0x0d, 0xe0, 0x1d, 0x5f, 0x95, 0x2f, 0x04, - 0xe9, 0xe7, 0x5b, 0xfa, 0x59, 0x42, 0x1b, 0x0f, 0x37, 0x37, 0x27, 0xf0, - 0xf5, 0xf2, 0x25, 0x5a, 0x78, 0x4c, 0xf0, 0x12, 0xf5, 0x64, 0x67, 0x68, - 0x78, 0x2a, 0x72, 0x8c, 0xeb, 0xab, 0xe5, 0xef, 0x47, 0xd7, 0x2b, 0x87, - 0xd1, 0x4f, 0x63, 0x26, 0x19, 0x1e, 0xdf, 0xfb, 0xb4, 0xc6, 0x2c, 0xf2, - 0xb0, 0xe1, 0xd5, 0xb0, 0x6b, 0xd4, 0x97, 0x67, 0x81, 0xbe, 0x95, 0xd4, - 0xa5, 0xc4, 0xcc, 0x5f, 0x08, 0xe4, 0xa6, 0x8e, 0x2f, 0x86, 0x25, 0xfa, - 0x68, 0xda, 0x5f, 0xe3, 0x68, 0xdb, 0x35, 0x3e, 0xee, 0x1d, 0x23, 0x7b, - 0x82, 0x71, 0xa8, 0x56, 0x6f, 0x26, 0x5b, 0xdc, 0xd0, 0x16, 0x35, 0x04, - 0xdb, 0xa2, 0x7a, 0x2a, 0x6f, 0xae, 0x13, 0x8c, 0x6b, 0x40, 0xe8, 0xb5, - 0xd0, 0x38, 0x9e, 0x3b, 0x46, 0x6c, 0x5c, 0xab, 0xaf, 0x5b, 0xbf, 0xd6, - 0xff, 0x3c, 0xcf, 0xa9, 0xb8, 0xe3, 0xbd, 0xf8, 0x4a, 0x8c, 0x46, 0x54, - 0x11, 0x59, 0xdc, 0xf8, 0xdb, 0xd1, 0x18, 0xa0, 0xea, 0xdb, 0xe7, 0x05, - 0xf3, 0xf4, 0xbc, 0xc9, 0x8e, 0xb7, 0x9a, 0xb1, 0x2e, 0x0b, 0x5d, 0xa3, - 0x11, 0x2a, 0x49, 0x70, 0x1a, 0xaa, 0x37, 0x28, 0x58, 0x24, 0xab, 0x2b, - 0x34, 0x28, 0xdf, 0x36, 0x7b, 0x60, 0x2c, 0x26, 0xc6, 0x21, 0x99, 0x3a, - 0xc1, 0x2f, 0x80, 0xf9, 0xe4, 0x56, 0x99, 0xa0, 0xd6, 0x08, 0x56, 0x6a, - 0x72, 0x45, 0x97, 0x80, 0x12, 0x76, 0x74, 0x94, 0x31, 0x88, 0xbc, 0xaf, - 0x3c, 0x86, 0x02, 0x0b, 0xa3, 0xed, 0x2d, 0x0d, 0xbc, 0x01, 0x23, 0x8f, - 0x11, 0xb1, 0x05, 0x7f, 0xbb, 0x22, 0xac, 0xd9, 0x8d, 0xf4, 0xc4, 0x34, - 0xb5, 0x7c, 0xda, 0x19, 0xda, 0xe7, 0xda, 0x9d, 0x61, 0x23, 0x4f, 0xb0, - 0x24, 0x53, 0xe8, 0x7a, 0xb8, 0x44, 0xd8, 0x3c, 0x97, 0xf1, 0xcc, 0x86, - 0xea, 0xb2, 0x6a, 0x42, 0x72, 0x2d, 0xc5, 0x74, 0x03, 0xcb, 0x14, 0x7a, - 0x90, 0xe8, 0xdd, 0xdc, 0x88, 0x79, 0x18, 0xb2, 0x5a, 0xf4, 0xda, 0xba, - 0xf8, 0x50, 0x42, 0x91, 0x6a, 0x8a, 0x77, 0x09, 0xe5, 0x10, 0x42, 0x29, - 0x8d, 0xd8, 0xd8, 0xb5, 0xcd, 0x52, 0xd8, 0xfa, 0xe6, 0x15, 0x89, 0xc9, - 0xda, 0xbe, 0x6c, 0xd1, 0x08, 0xcf, 0x66, 0xe0, 0xb0, 0x27, 0x66, 0x4a, - 0x91, 0x77, 0xc8, 0x10, 0xc5, 0xa3, 0xdc, 0xb2, 0xa8, 0x52, 0x4c, 0xc0, - 0x1f, 0x42, 0x8c, 0x0a, 0x8e, 0xff, 0x8c, 0x05, 0xe9, 0xd2, 0x3c, 0xa9, - 0xc7, 0xab, 0x53, 0xaf, 0xab, 0x10, 0x46, 0x56, 0x9f, 0xc0, 0x46, 0x00, - 0x89, 0x76, 0x7e, 0x18, 0xfa, 0x9a, 0x11, 0xdb, 0x3f, 0xb9, 0x74, 0x64, - 0x60, 0xb5, 0x77, 0xe1, 0x1c, 0xe0, 0xeb, 0xff, 0xf2, 0x1c, 0x74, 0xfe, - 0x69, 0xc7, 0xf9, 0x60, 0x67, 0x95, 0x44, 0xc1, 0x70, 0x47, 0x83, 0x98, - 0x20, 0x63, 0xdb, 0x77, 0x62, 0x3d, 0xb0, 0x35, 0x83, 0x6b, 0x23, 0x69, - 0x8b, 0x87, 0xb2, 0xaa, 0xc6, 0xc4, 0xce, 0x8c, 0xdf, 0xc6, 0xb4, 0x87, - 0x03, 0x18, 0x54, 0x1d, 0x7d, 0x4c, 0x28, 0xdf, 0x17, 0xcd, 0x52, 0x46, - 0xd6, 0xc7, 0xc0, 0x5a, 0x75, 0xbb, 0x34, 0xb7, 0xd1, 0x3c, 0xaa, 0x76, - 0xc4, 0x79, 0x53, 0x22, 0xcb, 0xdc, 0x85, 0x9b, 0xaa, 0x5d, 0x33, 0x36, - 0x6f, 0x97, 0x22, 0xed, 0x34, 0x36, 0x38, 0x2b, 0x65, 0x3d, 0x9a, 0xda, - 0x28, 0x4a, 0xb4, 0x17, 0xc5, 0xa6, 0x48, 0x86, 0x6f, 0xe6, 0xb2, 0x4e, - 0x73, 0x5f, 0x41, 0x94, 0xa2, 0xd3, 0x79, 0x75, 0x5a, 0xa1, 0x6a, 0x0d, - 0x69, 0xfc, 0x6c, 0x2d, 0x3a, 0xde, 0xf6, 0x74, 0x84, 0x2c, 0x28, 0xad, - 0xea, 0x4c, 0x84, 0x23, 0xd1, 0x68, 0xfa, 0xc0, 0x41, 0x10, 0xa3, 0xac, - 0xd2, 0xa2, 0xad, 0xeb, 0xc3, 0x65, 0xc0, 0xa3, 0xae, 0x53, 0x33, 0xb9, - 0xf6, 0xbc, 0xa5, 0x9b, 0x73, 0x05, 0x35, 0xcc, 0xb5, 0x0f, 0x7a, 0x35, - 0xca, 0xb9, 0x32, 0xb2, 0x7f, 0xcd, 0x15, 0x90, 0x87, 0x37, 0x98, 0xeb, - 0xe7, 0x84, 0xf9, 0x6b, 0xb2, 0x70, 0x3d, 0x92, 0x21, 0xe8, 0x02, 0xe2, - 0x21, 0xef, 0xb6, 0x58, 0x63, 0x19, 0xa8, 0xed, 0x2c, 0x9e, 0x85, 0xb0, - 0x48, 0x55, 0xd3, 0xc5, 0x6a, 0x22, 0xaa, 0xd8, 0x29, 0xe9, 0x65, 0xf1, - 0x3c, 0x34, 0x7f, 0xe9, 0x30, 0x6b, 0x5e, 0x74, 0x3b, 0x45, 0x29, 0xac, - 0xa6, 0x77, 0x45, 0xab, 0x43, 0x7c, 0x3d, 0x9d, 0x4c, 0x66, 0x0d, 0x09, - 0xe2, 0x52, 0x8e, 0xcd, 0xa5, 0x29, 0xab, 0x2b, 0xaa, 0xfc, 0x90, 0x34, - 0xde, 0xa3, 0xe5, 0x41, 0x4e, 0x86, 0x77, 0xf9, 0xe7, 0xe7, 0x93, 0x55, - 0xea, 0x5e, 0x8f, 0x37, 0xd8, 0x27, 0xba, 0x56, 0xd3, 0x02, 0x6e, 0x35, - 0x8d, 0xce, 0xbb, 0x70, 0x81, 0x3d, 0x19, 0xab, 0x0c, 0xc5, 0x07, 0xee, - 0xaf, 0xac, 0xbe, 0x47, 0x96, 0x25, 0x76, 0x7b, 0x6e, 0x61, 0x4d, 0x06, - 0x7b, 0xb1, 0xca, 0x16, 0xa4, 0xb9, 0xf8, 0x01, 0xf3, 0x66, 0xbe, 0x41, - 0x65, 0xdc, 0xdb, 0x7a, 0x57, 0x73, 0x9b, 0x15, 0x11, 0x00, 0x20, 0xbf, - 0x99, 0xaf, 0x97, 0x9d, 0x8d, 0x9d, 0x93, 0x8f, 0xdd, 0x5f, 0x09, 0xdb, - 0x69, 0x0d, 0x7a, 0x75, 0xf1, 0x62, 0xb5, 0x6c, 0x70, 0xe8, 0x36, 0x09, - 0xa7, 0xde, 0x41, 0x57, 0x8a, 0xb2, 0x2a, 0x7a, 0x32, 0x7c, 0xb8, 0x48, - 0xab, 0xe9, 0x9a, 0xe6, 0x07, 0xf4, 0xe9, 0xf5, 0x61, 0x3d, 0x3f, 0x65, - 0x8f, 0x94, 0xa5, 0x15, 0x51, 0x29, 0x33, 0xf3, 0x37, 0xd8, 0x64, 0x19, - 0xa3, 0xe4, 0xe8, 0x8a, 0xaf, 0xa8, 0x13, 0x6a, 0x31, 0xce, 0xa1, 0x7c, - 0x3c, 0x11, 0x61, 0x09, 0xda, 0xc1, 0x92, 0x81, 0x0a, 0xc8, 0x8d, 0x0e, - 0xcb, 0x52, 0xa1, 0xeb, 0x27, 0x61, 0xf2, 0x1d, 0x33, 0xf6, 0x9b, 0x3a, - 0xa1, 0x80, 0x99, 0x28, 0x45, 0x1e, 0x7e, 0xfb, 0x42, 0x1b, 0x04, 0x52, - 0x03, 0x48, 0x99, 0x48, 0x53, 0xf7, 0x77, 0x23, 0xbd, 0x61, 0x49, 0x76, - 0x20, 0xe3, 0x05, 0x28, 0x2b, 0xe9, 0x30, 0xa2, 0xa0, 0xab, 0xc4, 0xc1, - 0x47, 0x4b, 0xeb, 0x07, 0x09, 0x07, 0xd3, 0x3e, 0x9e, 0x19, 0x50, 0x6c, - 0x3d, 0xe4, 0x7c, 0x93, 0x74, 0x97, 0x66, 0x11, 0xd0, 0xc2, 0xf2, 0xfe, - 0x96, 0xac, 0x61, 0xd3, 0x85, 0x60, 0xdc, 0x19, 0x1c, 0xd0, 0xcb, 0x3f, - 0xf5, 0xf2, 0xfb, 0x2b, 0x1f, 0xe0, 0xbd, 0x1e, 0x88, 0xf3, 0x98, 0xb5, - 0xd5, 0x1a, 0x0d, 0xd5, 0xbc, 0x9c, 0x7f, 0x33, 0xcd, 0x7b, 0xcb, 0x4f, - 0x07, 0x17, 0x7b, 0x05, 0x5c, 0x8f, 0xc1, 0xb6, 0xdf, 0x60, 0x30, 0x49, - 0x44, 0x3f, 0xa3, 0x22, 0xfc, 0x4d, 0x33, 0x3d, 0x12, 0x18, 0xfb, 0x49, - 0xcc, 0xe7, 0xc7, 0x47, 0xcd, 0x63, 0x66, 0x26, 0x53, 0x11, 0xbd, 0x66, - 0x13, 0x6f, 0x61, 0xda, 0xda, 0x42, 0x86, 0xee, 0xb9, 0x4e, 0x5f, 0x69, - 0x02, 0xcc, 0x08, 0x57, 0xed, 0x66, 0xdc, 0x8f, 0xdd, 0xe6, 0x3e, 0x99, - 0xcd, 0x0c, 0xba, 0x99, 0x25, 0xe8, 0xea, 0x8d, 0xed, 0x8a, 0x2f, 0x90, - 0x08, 0xcd, 0x8d, 0xcb, 0x60, 0x85, 0xb3, 0x47, 0xe3, 0x23, 0x39, 0x24, - 0xae, 0x60, 0xde, 0x03, 0x66, 0xc2, 0x16, 0x0f, 0xad, 0x6f, 0x49, 0x46, - 0x27, 0xdf, 0xbe, 0xab, 0x78, 0xdf, 0x1f, 0x95, 0xdb, 0x9e, 0x63, 0xa1, - 0x69, 0x5a, 0x35, 0x98, 0x73, 0x81, 0xde, 0xf4, 0x51, 0x21, 0x13, 0xaf, - 0xfe, 0x5e, 0xbd, 0x5f, 0x93, 0x89, 0x50, 0x60, 0xdb, 0xc7, 0x8b, 0x79, - 0x9b, 0x24, 0xbb, 0x4d, 0xec, 0xe8, 0xdb, 0x7e, 0x92, 0xc2, 0x50, 0x82, - 0x01, 0x25, 0x4f, 0x7e, 0xbe, 0x27, 0x8f, 0x63, 0x97, 0x06, 0xef, 0x13, - 0x78, 0x53, 0x8c, 0x99, 0xd6, 0x7a, 0xdc, 0x7c, 0x17, 0xe9, 0x58, 0xc7, - 0x1d, 0x31, 0x57, 0xa3, 0xd6, 0xff, 0x77, 0xee, 0x40, 0x40, 0xb6, 0x56, - 0xe0, 0x5f, 0xaf, 0x82, 0x6b, 0x48, 0x8b, 0xe0, 0x01, 0x2f, 0x16, 0xf2, - 0xe8, 0x65, 0x96, 0x75, 0x84, 0x45, 0xa8, 0x80, 0x1f, 0x1a, 0x0f, 0x1e, - 0x10, 0x8e, 0x33, 0x0e, 0x4e, 0x5c, 0x5e, 0xde, 0xae, 0xf8, 0xb8, 0xb1, - 0x33, 0xdc, 0xe2, 0xc6, 0xd3, 0x9d, 0xba, 0x6f, 0xa9, 0xe2, 0x28, 0x1b, - 0x6b, 0x82, 0x4a, 0x5b, 0x0f, 0x67, 0xb1, 0xc1, 0x37, 0xb2, 0x4a, 0x2a, - 0x5a, 0x01, 0xc9, 0x68, 0x71, 0x17, 0x60, 0xdd, 0xcd, 0x75, 0x5a, 0x27, - 0x17, 0x8a, 0x65, 0x22, 0x0d, 0x62, 0x88, 0xb1, 0x16, 0x89, 0x6c, 0x31, - 0xe4, 0xe0, 0xdf, 0x9d, 0x43, 0x37, 0x18, 0xd0, 0xbf, 0xb7, 0x70, 0xa2, - 0xd3, 0x86, 0x29, 0x3a, 0x61, 0x68, 0x65, 0x91, 0x98, 0x79, 0xd2, 0x40, - 0x91, 0xd6, 0x78, 0x9f, 0x70, 0xc2, 0x97, 0x50, 0x10, 0xfe, 0xd5, 0x9d, - 0x47, 0xe0, 0xb6, 0x48, 0x10, 0x7a, 0xe0, 0x5e, 0xb8, 0x82, 0xd7, 0x59, - 0xe9, 0xb0, 0xe1, 0xa6, 0xda, 0x13, 0xaf, 0xe4, 0x3d, 0x84, 0x9b, 0xf9, - 0x53, 0x31, 0x99, 0xdc, 0x3e, 0xbf, 0x1a, 0x3d, 0xbe, 0xd1, 0x6a, 0x40, - 0x5e, 0x76, 0x5c, 0xff, 0xd3, 0x6e, 0x7e, 0xed, 0x95, 0x71, 0x7c, 0x1a, - 0xdd, 0xbc, 0x78, 0x11, 0x0e, 0x67, 0x1c, 0x34, 0x4e, 0x6f, 0x51, 0xc6, - 0xa3, 0xe1, 0xb7, 0x7e, 0xb6, 0x1a, 0x75, 0x68, 0x89, 0x06, 0x2c, 0x28, - 0x25, 0x28, 0x97, 0x2d, 0xfa, 0xf2, 0xb1, 0x8e, 0x71, 0x4d, 0x4d, 0xdb, - 0xcb, 0xd3, 0xb6, 0x80, 0xd8, 0xb9, 0xa2, 0xf5, 0x51, 0x5b, 0x07, 0x12, - 0xfb, 0xd0, 0x0d, 0x40, 0x7a, 0x79, 0x1c, 0x52, 0xe7, 0x43, 0xaa, 0xf8, - 0x97, 0xaf, 0xb4, 0x72, 0x1f, 0xe0, 0x2a, 0xcf, 0x67, 0x83, 0xc0, 0xfa, - 0x9d, 0xe4, 0x8d, 0xf0, 0x2f, 0x4f, 0x9f, 0x87, 0xab, 0xb7, 0x38, 0xe8, - 0xcd, 0x12, 0x4b, 0x07, 0x3c, 0x80, 0x79, 0x8a, 0xca, 0x95, 0x65, 0xca, - 0x66, 0xbf, 0xea, 0x26, 0xb1, 0xdf, 0xe6, 0xc2, 0xdd, 0x4b, 0xae, 0x5b, - 0x98, 0x38, 0x29, 0x9f, 0x6d, 0x2e, 0xeb, 0xee, 0x17, 0xdd, 0x8a, 0x79, - 0x42, 0xac, 0xa0, 0x1f, 0x05, 0xcc, 0xbd, 0x28, 0x60, 0x7c, 0xed, 0x0c, - 0xe1, 0xac, 0x34, 0x67, 0x23, 0x76, 0xa2, 0xb9, 0xbd, 0x85, 0x59, 0x49, - 0x45, 0xaa, 0x90, 0x98, 0x3a, 0xcd, 0x6e, 0x56, 0xb2, 0x4c, 0x23, 0xd0, - 0x89, 0x3a, 0x74, 0x60, 0x63, 0xc4, 0x74, 0x77, 0xe1, 0x6b, 0x6b, 0xac, - 0xae, 0x74, 0x67, 0x63, 0x61, 0x56, 0xf3, 0xb8, 0xf5, 0xd1, 0x12, 0x03, - 0xfc, 0xb5, 0x45, 0x62, 0xd6, 0x46, 0x5a, 0x4e, 0xcc, 0xc3, 0xcf, 0xed, - 0xcc, 0x6f, 0x67, 0x53, 0x85, 0x8e, 0xca, 0x21, 0x3e, 0x10, 0x66, 0xea, - 0x7c, 0xad, 0x81, 0x18, 0xe8, 0xdd, 0x86, 0xc0, 0x05, 0xd7, 0x25, 0x0b, - 0x61, 0x8f, 0x21, 0xd5, 0xc1, 0xa1, 0xc0, 0x6f, 0x65, 0xe5, 0xd5, 0xc6, - 0x69, 0x94, 0xe9, 0xc5, 0xa7, 0xbe, 0x4e, 0xdf, 0xbf, 0x82, 0x0c, 0xb8, - 0xb2, 0x4b, 0x3d, 0x0e, 0x1c, 0x83, 0x7f, 0xeb, 0xff, 0xdb, 0xb4, 0xa0, - 0x99, 0xac, 0xab, 0xce, 0x52, 0x8c, 0x7a, 0xbd, 0xbb, 0xfc, 0xa8, 0xda, - 0x8d, 0x0d, 0x23, 0x48, 0xd7, 0xcc, 0x63, 0x4e, 0x1e, 0x2f, 0x50, 0xf8, - 0x7e, 0x8f, 0xbc, 0xf0, 0x16, 0x19, 0x1e, 0x9b, 0x91, 0x26, 0xd6, 0x5c, - 0x04, 0x36, 0xba, 0x7b, 0x08, 0x32, 0xef, 0x49, 0x3c, 0xc5, 0x47, 0x59, - 0x0a, 0x22, 0x85, 0xc5, 0x2c, 0x3f, 0x21, 0xff, 0xbe, 0x79, 0x6a, 0x26, - 0x0e, 0xf4, 0x93, 0x39, 0x01, 0xdf, 0x02, 0x5b, 0x51, 0xae, 0x93, 0xde, - 0xb8, 0xf3, 0xd4, 0x99, 0xcc, 0x99, 0x55, 0x91, 0x3a, 0xed, 0x8c, 0xb4, - 0xaa, 0xba, 0xd5, 0xad, 0x54, 0xfd, 0xc8, 0x6f, 0x46, 0xf5, 0x66, 0xdd, - 0xba, 0x26, 0xa7, 0xf7, 0xda, 0xbc, 0x9a, 0x31, 0x89, 0x38, 0xdd, 0xa6, - 0x9d, 0x1a, 0xf2, 0xdd, 0xb8, 0x10, 0x9d, 0x34, 0xf2, 0xea, 0x83, 0x4e, - 0xcc, 0xf9, 0xf5, 0x1a, 0xdd, 0x20, 0xe8, 0x9c, 0x98, 0xba, 0x4d, 0xa4, - 0x6a, 0xdd, 0x89, 0x03, 0xd4, 0x6a, 0xef, 0xc4, 0x1e, 0x5d, 0x32, 0xd7, - 0xbf, 0xcd, 0x65, 0xb6, 0x51, 0x6a, 0x82, 0x2c, 0xd5, 0xde, 0x6a, 0x03, - 0x42, 0xcb, 0x8f, 0xcd, 0x9c, 0xe7, 0x44, 0x08, 0xfa, 0xcf, 0x1e, 0x25, - 0xf3, 0x4d, 0xae, 0x2d, 0x4d, 0x1b, 0xed, 0xcb, 0x84, 0xd3, 0x9c, 0xeb, - 0x5a, 0x46, 0xf5, 0xb6, 0x4d, 0xd9, 0xab, 0x75, 0xc5, 0x7f, 0x14, 0x73, - 0x10, 0x7f, 0x26, 0x67, 0xe9, 0x3c, 0x13, 0x50, 0x63, 0x3f, 0x8e, 0x21, - 0x64, 0x8d, 0x12, 0x8a, 0x8a, 0xff, 0x14, 0xb7, 0x31, 0x5f, 0x73, 0x97, - 0x8e, 0xe4, 0xe1, 0x6a, 0x3e, 0x93, 0x70, 0x1e, 0x72, 0x8f, 0x66, 0x98, - 0xd2, 0x3d, 0x5e, 0xa6, 0x28, 0x8d, 0xed, 0x6f, 0x72, 0x9f, 0xbe, 0x8d, - 0x8c, 0x17, 0x78, 0x3f, 0x8d, 0x43, 0x8e, 0xe1, 0x9c, 0x88, 0xa1, 0x67, - 0xe8, 0xcb, 0x68, 0x21, 0x1c, 0x16, 0x58, 0xff, 0x2e, 0x9a, 0x8c, 0xbb, - 0x6b, 0xd0, 0x3e, 0xbe, 0xa0, 0xba, 0x6f, 0x6f, 0x7f, 0x52, 0x94, 0xdb, - 0xb3, 0xf0, 0x49, 0x2e, 0xb2, 0x91, 0x59, 0x9c, 0xc0, 0x25, 0x17, 0x86, - 0xfb, 0x9c, 0x8f, 0x71, 0xb5, 0xd7, 0xdb, 0x07, 0xac, 0x4a, 0x0b, 0xc3, - 0x31, 0x16, 0x64, 0x28, 0xa5, 0x4c, 0x34, 0x66, 0xa3, 0x60, 0x60, 0x10, - 0x71, 0x7f, 0x59, 0x9d, 0xbf, 0x9c, 0xda, 0x9f, 0x72, 0xdf, 0x9b, 0xd8, - 0xfc, 0x33, 0xe7, 0x60, 0x59, 0x8f, 0xb8, 0x91, 0x19, 0x37, 0xa9, 0x9e, - 0x7f, 0xff, 0x7a, 0x43, 0xaa, 0xc5, 0xf0, 0xf7, 0x85, 0x5a, 0x5d, 0x83, - 0xfd, 0x7d, 0xa8, 0x27, 0xa4, 0x50, 0xf9, 0xc3, 0xfa, 0xd7, 0xc0, 0x34, - 0xb6, 0xcc, 0xd0, 0x4d, 0x05, 0x39, 0xf1, 0xb9, 0x67, 0xa1, 0xf7, 0xe4, - 0xa7, 0x61, 0x0b, 0x45, 0x33, 0x18, 0x16, 0x4e, 0x99, 0xa9, 0xf2, 0x8b, - 0x59, 0x77, 0xa2, 0x42, 0xcf, 0xe4, 0x2d, 0x8b, 0xd6, 0x79, 0x43, 0x96, - 0xa1, 0xdc, 0xb5, 0xc9, 0xe1, 0x4f, 0x93, 0xbd, 0x02, 0xf6, 0x7d, 0x0c, - 0xcb, 0xb4, 0xa0, 0x99, 0xf6, 0x1b, 0xb1, 0x06, 0x08, 0x1b, 0x35, 0xdb, - 0x2c, 0x29, 0xb3, 0x08, 0x22, 0x32, 0x8c, 0x0b, 0x39, 0x84, 0xb4, 0x8c, - 0xe2, 0x06, 0xb6, 0x67, 0x6f, 0x88, 0xcd, 0xe6, 0x33, 0xb9, 0xad, 0xe7, - 0x5b, 0xeb, 0x16, 0x75, 0xa6, 0xa2, 0x73, 0xca, 0x5d, 0x6e, 0x51, 0xc2, - 0x5c, 0x6b, 0xc4, 0x84, 0xf9, 0xdf, 0x2f, 0x18, 0x72, 0x5d, 0x62, 0xee, - 0xf2, 0x44, 0xaf, 0x63, 0x83, 0xc3, 0xe9, 0xc9, 0xc0, 0x2a, 0x03, 0x33, - 0x24, 0xc6, 0xaa, 0x2b, 0xf1, 0x89, 0x3a, 0x3e, 0xa6, 0x2d, 0xab, 0xc3, - 0x50, 0xea, 0xf2, 0x39, 0xe2, 0x43, 0x34, 0x59, 0x4b, 0x33, 0x1b, 0x88, - 0x62, 0x7b, 0x72, 0xf1, 0x4a, 0x98, 0xa2, 0x47, 0x31, 0x12, 0x5f, 0x5a, - 0x7c, 0xb1, 0xb8, 0x55, 0x0e, 0x33, 0xeb, 0x08, 0xc2, 0xe0, 0x5e, 0x76, - 0x20, 0x0b, 0xfb, 0xc7, 0x62, 0x12, 0x1c, 0xa7, 0xf8, 0x3c, 0xc0, 0xdd, - 0x9c, 0xc3, 0x30, 0xd3, 0x30, 0x77, 0x46, 0x79, 0x94, 0x87, 0x81, 0x45, - 0xfd, 0xfd, 0x65, 0xa1, 0xaa, 0x1f, 0x87, 0xb8, 0xd4, 0x56, 0x58, 0x59, - 0x0e, 0x23, 0xd4, 0x35, 0xf2, 0x01, 0xc1, 0x75, 0xa1, 0xb8, 0x15, 0x25, - 0x51, 0x29, 0xe5, 0x79, 0x04, 0xf0, 0x6c, 0x51, 0x1f, 0x70, 0xa3, 0x02, - 0x24, 0xf4, 0x7b, 0x9c, 0x66, 0x35, 0xe9, 0x74, 0x81, 0x7d, 0x9f, 0x0e, - 0xb4, 0xac, 0x3b, 0x2d, 0x4e, 0x8e, 0xfe, 0xfe, 0xde, 0xe9, 0xac, 0xcd, - 0xa4, 0x97, 0x72, 0x2a, 0x10, 0xf2, 0x2e, 0x34, 0xd4, 0x1d, 0x9c, 0x1c, - 0x57, 0xb8, 0xe4, 0x16, 0xe6, 0x06, 0x6d, 0x4e, 0xcd, 0xf6, 0x4f, 0xff, - 0xba, 0xc8, 0x54, 0x86, 0xe6, 0x2b, 0xc9, 0x54, 0xa5, 0x06, 0xaf, 0x4f, - 0x6d, 0x0a, 0xda, 0x8e, 0x58, 0x95, 0x00, 0xf8, 0x89, 0x48, 0xe3, 0x0b, - 0x51, 0x45, 0xa2, 0xb2, 0xe6, 0x77, 0x44, 0xd5, 0x2b, 0xe5, 0x26, 0xb6, - 0x9a, 0x53, 0xa6, 0xaa, 0xe3, 0x8c, 0xc6, 0x6c, 0xa1, 0x77, 0x86, 0xa2, - 0x1a, 0x31, 0xd2, 0x6d, 0xf8, 0x33, 0x95, 0x52, 0x20, 0xf8, 0xd3, 0xf8, - 0xc2, 0x4d, 0x26, 0xb6, 0xf6, 0xa8, 0x2e, 0xd7, 0x0d, 0x81, 0x91, 0xbe, - 0x2f, 0xf3, 0xce, 0x28, 0x33, 0xb7, 0x88, 0x2f, 0x25, 0xc4, 0xe9, 0xa1, - 0x4d, 0x97, 0x2e, 0x5f, 0xf7, 0x40, 0x01, 0xb4, 0x4a, 0x1b, 0x89, 0xc3, - 0x92, 0x3a, 0x17, 0x23, 0x4f, 0xa4, 0x36, 0x1c, 0x0e, 0x33, 0x1b, 0x89, - 0xd7, 0xdf, 0xfa, 0x53, 0xad, 0x06, 0x82, 0x89, 0x0d, 0x84, 0xb6, 0xbe, - 0x2f, 0xde, 0xde, 0x74, 0x77, 0x8c, 0x98, 0x98, 0xc0, 0x51, 0xc0, 0x28, - 0xeb, 0x9b, 0x36, 0xdf, 0x8c, 0xa0, 0x8f, 0xb6, 0xe6, 0x67, 0xdc, 0xd6, - 0xa1, 0xcd, 0x9f, 0xe4, 0x30, 0xac, 0x20, 0xf0, 0x3c, 0xc1, 0xa3, 0x39, - 0x5a, 0x84, 0x9a, 0xc6, 0x1b, 0x04, 0xcf, 0x18, 0x1f, 0x0b, 0xce, 0x6c, - 0x14, 0xc8, 0xf9, 0xba, 0xae, 0x7a, 0xd6, 0x47, 0x72, 0xe6, 0x34, 0x85, - 0xf9, 0x9c, 0xb7, 0x8b, 0x15, 0x4c, 0x88, 0x72, 0x22, 0xdf, 0x82, 0x36, - 0xa5, 0x7b, 0xe5, 0x9f, 0x2f, 0x9a, 0x45, 0x25, 0x75, 0x23, 0x0d, 0xe7, - 0x7d, 0x7b, 0xd1, 0xfb, 0x71, 0x91, 0x05, 0x69, 0xa2, 0xa8, 0x9b, 0x72, - 0x69, 0xa5, 0xa8, 0x00, 0x76, 0x37, 0xce, 0x23, 0x21, 0x6c, 0x7e, 0x0a, - 0xb9, 0x04, 0xc9, 0xd8, 0x35, 0x07, 0xfa, 0xa0, 0x1e, 0xcf, 0xef, 0x40, - 0xc7, 0x28, 0xef, 0xf2, 0x39, 0x68, 0xff, 0x5c, 0x45, 0xbd, 0xa5, 0x9f, - 0x94, 0xe7, 0x98, 0x71, 0xfc, 0x43, 0xb8, 0xb5, 0x89, 0xcb, 0x96, 0xe4, - 0xf7, 0x07, 0xab, 0xec, 0x67, 0xe0, 0x3d, 0xcd, 0x3c, 0x5b, 0xf8, 0x03, - 0x09, 0xfa, 0x37, 0xdd, 0x04, 0x81, 0xfc, 0x30, 0x82, 0x66, 0xf2, 0x91, - 0x0e, 0x73, 0xfe, 0x17, 0xc2, 0x89, 0xd9, 0xf9, 0x20, 0x82, 0x8f, 0x61, - 0x21, 0x38, 0x18, 0xfd, 0x07, 0x5b, 0x68, 0x37, 0x97, 0x34, 0xe7, 0x12, - 0xf7, 0x93, 0x19, 0x34, 0x00, 0xc0, 0x80, 0xf0, 0xf7, 0x25, 0xed, 0x65, - 0x67, 0x6d, 0xe5, 0xfd, 0x6b, 0x1f, 0x2f, 0x34, 0x74, 0xf1, 0x9e, 0xeb, - 0x25, 0x3e, 0x7f, 0x73, 0x4e, 0x2c, 0x42, 0x64, 0x92, 0xc0, 0x4d, 0x4b, - 0x20, 0x05, 0x36, 0x76, 0xb1, 0x8d, 0xe3, 0x74, 0x20, 0x60, 0x71, 0xe3, - 0x5f, 0x75, 0x4e, 0xff, 0x34, 0x5d, 0x5b, 0x8f, 0x4c, 0xca, 0x48, 0x0f, - 0x88, 0xdd, 0xe1, 0x56, 0x15, 0x48, 0xb9, 0x08, 0x18, 0x59, 0x30, 0xc3, - 0xc3, 0x93, 0x13, 0xcf, 0x4c, 0x11, 0x48, 0xde, 0x6b, 0xda, 0x0d, 0xd8, - 0xb1, 0xf1, 0x3f, 0x1c, 0x72, 0x4d, 0x80, 0x0b, 0xbc, 0x24, 0x51, 0x58, - 0x89, 0xe6, 0x86, 0x34, 0x08, 0xcd, 0x38, 0x6f, 0x3b, 0xa6, 0x3e, 0x72, - 0x0c, 0xf6, 0xda, 0xdf, 0xe0, 0xbb, 0x3c, 0xc7, 0x3c, 0xd7, 0x7c, 0x92, - 0x56, 0xa4, 0x72, 0x62, 0x4e, 0x52, 0x3b, 0x99, 0x75, 0xe4, 0x5c, 0x51, - 0x6c, 0x41, 0x2e, 0xc4, 0xe7, 0x4c, 0x57, 0xf1, 0x79, 0xc2, 0x78, 0x53, - 0x7c, 0x80, 0x33, 0xad, 0xb9, 0xc0, 0xc2, 0x65, 0xd3, 0x31, 0x57, 0xdb, - 0x4d, 0xba, 0x7e, 0x80, 0x4a, 0xe8, 0xde, 0x3b, 0xa5, 0x55, 0x4e, 0x2e, - 0x88, 0x7e, 0x25, 0x90, 0xb1, 0xfb, 0x6b, 0x15, 0x94, 0x8f, 0xd9, 0x88, - 0x9b, 0x2d, 0x81, 0x49, 0x66, 0x59, 0x41, 0x4f, 0xcc, 0x2b, 0x3e, 0xeb, - 0x63, 0xde, 0xf2, 0x46, 0xc9, 0x18, 0x8a, 0x0a, 0x57, 0xa7, 0x6c, 0x2c, - 0x57, 0x89, 0x46, 0xda, 0xea, 0xa0, 0xda, 0x07, 0x4b, 0x61, 0x78, 0xf3, - 0xd3, 0xb3, 0xa2, 0x47, 0xf6, 0x33, 0x95, 0x8d, 0x13, 0x99, 0x10, 0x98, - 0xcc, 0xc3, 0x37, 0xde, 0x0d, 0x87, 0x6b, 0xe6, 0xee, 0xa5, 0x07, 0xa6, - 0x1e, 0x86, 0x77, 0x99, 0x60, 0x9c, 0xc9, 0x3a, 0xbd, 0x92, 0xc7, 0xa6, - 0x61, 0x3a, 0xe9, 0xaa, 0x77, 0xd4, 0xcc, 0x8c, 0x1c, 0x92, 0x39, 0xcf, - 0x60, 0x7a, 0xcc, 0x3a, 0x29, 0xc2, 0xe3, 0x0f, 0xa6, 0xe6, 0x4b, 0x2c, - 0xc7, 0x93, 0xc9, 0x3f, 0x60, 0x77, 0x77, 0xbd, 0xe6, 0x37, 0xea, 0x76, - 0x48, 0xa1, 0x6c, 0x31, 0x1b, 0xd7, 0xa4, 0xd4, 0x96, 0x5b, 0x6f, 0xac, - 0x37, 0x2a, 0xe3, 0xbf, 0xf3, 0xe1, 0x78, 0xf1, 0xe5, 0x2c, 0xd9, 0x91, - 0x20, 0xef, 0x63, 0x8a, 0x3a, 0xab, 0x2a, 0xb8, 0x1c, 0x5c, 0x76, 0xd3, - 0xd8, 0x83, 0xf3, 0xe9, 0x74, 0xfc, 0x84, 0x9b, 0x29, 0x18, 0xce, 0x94, - 0x80, 0xc6, 0xfc, 0xa2, 0x01, 0xcc, 0x88, 0x6f, 0x9b, 0xd6, 0x3d, 0xbb, - 0x4e, 0x42, 0x8f, 0x61, 0xa7, 0xaf, 0x89, 0x9d, 0xb5, 0xaa, 0x1d, 0xe4, - 0xd5, 0x07, 0xb3, 0x93, 0x8c, 0xe1, 0x58, 0x37, 0xed, 0xeb, 0xe0, 0xdb, - 0x52, 0xb3, 0x75, 0x4b, 0x93, 0x8a, 0x64, 0xf4, 0x8e, 0xaf, 0x19, 0x83, - 0xb4, 0x21, 0x27, 0x54, 0x78, 0x2b, 0x18, 0xf5, 0xed, 0x15, 0x47, 0x96, - 0x42, 0x13, 0x1c, 0x7c, 0xb0, 0x25, 0x78, 0xa7, 0x9d, 0xea, 0x32, 0x31, - 0xf0, 0xb3, 0x33, 0xeb, 0xf4, 0x3b, 0x57, 0xc2, 0x56, 0x0e, 0x2e, 0x96, - 0xeb, 0x79, 0x6a, 0x93, 0x9f, 0x22, 0x32, 0x9f, 0x84, 0xe5, 0x4b, 0x66, - 0x4e, 0x98, 0x02, 0x91, 0x0b, 0x3f, 0xfa, 0xfb, 0x0e, 0x9f, 0xca, 0x17, - 0xfa, 0x34, 0x46, 0xda, 0x8a, 0x53, 0xbe, 0x39, 0xbd, 0xbb, 0xae, 0x2f, - 0xb4, 0xeb, 0x4e, 0x2e, 0xe1, 0x63, 0xc2, 0x09, 0xce, 0x62, 0xea, 0x30, - 0x56, 0x5e, 0xba, 0x1f, 0xf0, 0xe5, 0x24, 0x65, 0x67, 0x57, 0x2e, 0x2e, - 0x54, 0x9a, 0x05, 0x8c, 0x1a, 0x46, 0x0c, 0x44, 0x61, 0xac, 0x6e, 0x50, - 0x7c, 0x56, 0xc2, 0x31, 0x45, 0xd1, 0xaa, 0xab, 0xce, 0xec, 0xca, 0xe1, - 0x1d, 0x23, 0x48, 0x48, 0x1f, 0x0a, 0xe1, 0xed, 0x71, 0xf9, 0x18, 0x26, - 0x07, 0xc6, 0xf2, 0xfb, 0xee, 0x75, 0xe4, 0xca, 0x08, 0x75, 0x70, 0x78, - 0x70, 0x19, 0x64, 0x16, 0x11, 0x49, 0x8a, 0x1a, 0x6d, 0xe3, 0x6c, 0x67, - 0x47, 0x8f, 0xf7, 0x32, 0x3b, 0x9e, 0x77, 0xd4, 0x4b, 0x3b, 0x45, 0xf9, - 0x03, 0xb6, 0xa6, 0x92, 0xe4, 0xc0, 0x82, 0x4d, 0x4e, 0x88, 0xda, 0x93, - 0xb3, 0x2c, 0xb0, 0x72, 0x44, 0x7d, 0xbc, 0x14, 0x13, 0xd4, 0x26, 0x01, - 0xfb, 0xe4, 0xbb, 0xc2, 0xb0, 0x1d, 0xf0, 0xd5, 0xb9, 0xca, 0xbb, 0x2f, - 0xc6, 0xa7, 0xf3, 0x65, 0xac, 0x04, 0xb7, 0xfb, 0xbd, 0x2d, 0x48, 0x49, - 0x76, 0x83, 0x3a, 0x00, 0x94, 0xb4, 0xe5, 0xfd, 0xed, 0x26, 0x52, 0xbb, - 0xbb, 0x9f, 0x04, 0xee, 0x28, 0xbf, 0x4b, 0x37, 0x3f, 0xf3, 0x54, 0x3f, - 0xcf, 0xd6, 0xe4, 0x17, 0xca, 0x20, 0xe0, 0x8c, 0xb1, 0x1d, 0xdb, 0xd0, - 0xf9, 0xd2, 0x91, 0x6e, 0x29, 0x3b, 0x9a, 0xf0, 0xae, 0x3c, 0x0f, 0xc5, - 0xa0, 0x7a, 0xbf, 0x50, 0x5a, 0xda, 0xbd, 0x76, 0x9f, 0x79, 0x3e, 0xd2, - 0x15, 0xa1, 0x94, 0x10, 0xd8, 0x99, 0x2b, 0x08, 0x30, 0xd9, 0x68, 0xdc, - 0x68, 0xd6, 0x45, 0x0f, 0xcf, 0xc3, 0x0d, 0x75, 0x75, 0x18, 0xdf, 0xc6, - 0x21, 0x4d, 0x5a, 0xda, 0xdb, 0x4b, 0x28, 0x0f, 0x0e, 0x57, 0x74, 0xf1, - 0xb0, 0x5c, 0x89, 0x91, 0x74, 0x7d, 0x43, 0xfe, 0xe0, 0xb3, 0x61, 0x8b, - 0x56, 0xc4, 0xc5, 0xeb, 0xce, 0xf4, 0x9d, 0x96, 0x87, 0xe4, 0xaa, 0x77, - 0xaa, 0x25, 0xa6, 0xbf, 0x50, 0xec, 0x55, 0x05, 0x95, 0xc9, 0x54, 0x02, - 0x1b, 0xee, 0xa5, 0xe5, 0xf2, 0xbc, 0x28, 0xe9, 0x53, 0xec, 0xf3, 0x4d, - 0xce, 0xfa, 0xe4, 0x68, 0x13, 0xd2, 0x7e, 0x0f, 0xaa, 0x5d, 0x9b, 0xde, - 0xd8, 0xfc, 0xc1, 0xb1, 0xce, 0xb0, 0xb7, 0xf7, 0x6e, 0x43, 0x53, 0x58, - 0x70, 0xee, 0x60, 0x60, 0x40, 0x37, 0x96, 0xc8, 0xb3, 0x80, 0xce, 0x99, - 0x9e, 0x15, 0xd9, 0xa4, 0xec, 0xce, 0x0d, 0xc3, 0xbb, 0xb8, 0x60, 0xdc, - 0xb1, 0xde, 0x05, 0x9f, 0xe9, 0x0d, 0x0b, 0x4b, 0x0f, 0x29, 0xb4, 0xe9, - 0xb9, 0xd2, 0xcd, 0xe9, 0xce, 0xaf, 0x53, 0x41, 0xbc, 0x1e, 0xf4, 0xd4, - 0xdd, 0x4b, 0x25, 0x2f, 0x33, 0x1b, 0xdf, 0xbd, 0xce, 0x39, 0xd2, 0x3f, - 0xc4, 0xb1, 0xab, 0x94, 0xd1, 0x8c, 0xf7, 0xe5, 0x85, 0xa8, 0xa1, 0x95, - 0x94, 0x3d, 0x9c, 0x48, 0x2a, 0x04, 0xb3, 0x27, 0x2b, 0x24, 0x1d, 0x2e, - 0x5e, 0x26, 0x57, 0x9b, 0x3b, 0x92, 0xd7, 0x98, 0xca, 0xe1, 0xde, 0xc2, - 0xd2, 0xc8, 0xb3, 0xda, 0xfa, 0xb8, 0xfb, 0xa0, 0x8e, 0xb0, 0x83, 0x24, - 0xa7, 0xd5, 0xc8, 0x0d, 0x96, 0x9d, 0x00, 0xe7, 0xbf, 0xad, 0x46, 0x44, - 0x2d, 0xab, 0x51, 0x03, 0x5b, 0x7f, 0x60, 0x88, 0xc3, 0xbd, 0x18, 0x7c, - 0x3c, 0xe2, 0xcb, 0x32, 0xe5, 0xf0, 0xc5, 0xdf, 0xca, 0x80, 0xea, 0xbd, - 0x03, 0x76, 0x0f, 0x85, 0x4d, 0x98, 0x02, 0xf9, 0x48, 0x73, 0xef, 0x29, - 0x89, 0xaa, 0xb9, 0xdd, 0x04, 0x71, 0x56, 0x3b, 0xcf, 0xa9, 0xd6, 0x9b, - 0x3d, 0x5c, 0xea, 0x09, 0x05, 0x3c, 0xc3, 0xd7, 0x31, 0x83, 0xcf, 0xa7, - 0x32, 0x82, 0xc8, 0xda, 0xc4, 0xd3, 0xce, 0xf4, 0xd4, 0xc7, 0x37, 0xa5, - 0x60, 0x8e, 0xbd, 0x87, 0xad, 0x74, 0xcc, 0x53, 0xdf, 0x31, 0xc5, 0xa8, - 0xbf, 0x2c, 0x20, 0xcd, 0xb0, 0x8f, 0xcc, 0x83, 0x8e, 0xda, 0x9e, 0xc2, - 0xf2, 0xfd, 0x9f, 0x4d, 0x5d, 0x10, 0xf7, 0x92, 0xd6, 0xc0, 0xd8, 0x0d, - 0x50, 0xb0, 0x7d, 0xe9, 0x8f, 0x6d, 0x71, 0x9e, 0x8d, 0xc8, 0x87, 0x01, - 0x9b, 0x8e, 0xb9, 0x15, 0x69, 0xde, 0xb4, 0xde, 0x47, 0xb3, 0x1b, 0xa9, - 0x52, 0xc8, 0x07, 0xa2, 0xa5, 0x92, 0x05, 0xaf, 0xce, 0xc5, 0x17, 0xca, - 0xf4, 0x5d, 0x8c, 0x98, 0xbf, 0x5f, 0x43, 0xc9, 0x3b, 0xc4, 0x53, 0x92, - 0xe0, 0xea, 0x2b, 0x7d, 0xb1, 0xab, 0x87, 0x5a, 0x52, 0x70, 0xdf, 0xb4, - 0xf5, 0xe2, 0x68, 0xdb, 0x84, 0xb6, 0xc7, 0x52, 0xba, 0x8a, 0xfb, 0x89, - 0xa3, 0xed, 0x76, 0x18, 0xda, 0x97, 0xf0, 0x66, 0x0d, 0xd8, 0x83, 0x89, - 0x4d, 0xb2, 0xbb, 0x1a, 0x91, 0xbb, 0x9e, 0x73, 0x97, 0x27, 0x66, 0x49, - 0x27, 0x1a, 0xa7, 0x6a, 0x13, 0xdf, 0x9a, 0x4e, 0x18, 0xe2, 0x5f, 0x8d, - 0x5d, 0x7e, 0xc7, 0xcf, 0x13, 0x1f, 0x3f, 0x97, 0xb7, 0xb6, 0x2b, 0xd5, - 0x6f, 0x10, 0x54, 0x09, 0x00, 0xa5, 0x57, 0x31, 0x19, 0x4f, 0xdd, 0xcd, - 0x0d, 0x99, 0xa5, 0xdb, 0x74, 0xf0, 0x15, 0xe0, 0xe3, 0x7d, 0x3a, 0xb8, - 0x9e, 0x8c, 0x92, 0x0f, 0xae, 0x7e, 0x5c, 0x60, 0x4a, 0x39, 0x3e, 0xdb, - 0xbc, 0xec, 0x49, 0xa5, 0xbc, 0xfa, 0x02, 0xef, 0xf0, 0x51, 0x30, 0x37, - 0x61, 0x83, 0x94, 0xaf, 0x5f, 0x68, 0x8d, 0x8c, 0xa5, 0x94, 0x98, 0xe4, - 0xa2, 0xd9, 0xf7, 0xbc, 0x15, 0x77, 0x96, 0x51, 0x0d, 0x7a, 0x79, 0x7c, - 0xfb, 0x21, 0x6f, 0xc5, 0x4a, 0x46, 0xe1, 0xd0, 0xdc, 0x81, 0xa6, 0x33, - 0xc7, 0x34, 0x72, 0xb8, 0xa8, 0xa0, 0x15, 0x80, 0x9d, 0x23, 0x43, 0xdc, - 0x95, 0xcf, 0x62, 0xfc, 0xe5, 0xe6, 0xec, 0x2d, 0x6b, 0x40, 0x4d, 0xcb, - 0x34, 0x44, 0x68, 0xeb, 0x91, 0xd5, 0x5b, 0x4d, 0xb4, 0x13, 0x26, 0xaf, - 0xcf, 0x93, 0x5e, 0x9f, 0x4d, 0xb8, 0x8e, 0x67, 0xb4, 0x23, 0xd2, 0x8d, - 0x26, 0xc9, 0xd3, 0xef, 0x8a, 0xf3, 0x09, 0x2c, 0xc6, 0x02, 0xa7, 0xab, - 0x89, 0xdf, 0x54, 0x15, 0xf4, 0x0b, 0xec, 0xcc, 0x48, 0xe7, 0xb5, 0xe8, - 0x90, 0x9c, 0x32, 0xa5, 0x8a, 0x68, 0x70, 0x2a, 0x6b, 0xc2, 0x46, 0x3b, - 0x54, 0x98, 0xfa, 0x7a, 0x3c, 0x44, 0xcd, 0x43, 0xb2, 0x2b, 0xd2, 0x48, - 0x87, 0x9f, 0xc0, 0x3c, 0x79, 0x7b, 0x9e, 0x4d, 0x1c, 0xd3, 0xa8, 0x1a, - 0x39, 0xf0, 0xd3, 0x86, 0x6b, 0x33, 0x0d, 0x18, 0x3b, 0x35, 0xb6, 0xc9, - 0xc8, 0xe1, 0x62, 0xbc, 0x7b, 0x43, 0x8a, 0xb1, 0x0a, 0xe8, 0xed, 0x78, - 0x25, 0x5e, 0xc8, 0x7e, 0xf4, 0x4a, 0xd0, 0x85, 0x70, 0xe6, 0x51, 0x28, - 0x7e, 0xd7, 0x11, 0x66, 0x73, 0x11, 0xad, 0x90, 0x99, 0x45, 0x50, 0x9c, - 0x5c, 0x3c, 0x03, 0x19, 0xa2, 0x6f, 0x6d, 0xca, 0x7a, 0x0c, 0x42, 0x7e, - 0x98, 0x4a, 0x79, 0x8d, 0xcc, 0x98, 0x68, 0x38, 0x7c, 0x9b, 0xdb, 0xda, - 0x11, 0x69, 0x11, 0x49, 0x06, 0xf9, 0xb1, 0x9a, 0xaa, 0xbe, 0xa7, 0xd4, - 0xd7, 0x9c, 0xae, 0x95, 0x0a, 0x49, 0xff, 0xe8, 0xc7, 0xa1, 0x52, 0x75, - 0xaa, 0x87, 0xfc, 0xdc, 0x64, 0xb0, 0x59, 0xb2, 0x3a, 0x82, 0xcd, 0xda, - 0x65, 0xac, 0x62, 0x56, 0x21, 0xf0, 0x5a, 0x3c, 0xcf, 0xbd, 0x55, 0x1b, - 0xe6, 0x03, 0xde, 0xf8, 0x5d, 0xbf, 0x0b, 0x7a, 0x16, 0xbb, 0xf4, 0x0a, - 0x67, 0x06, 0x52, 0x69, 0x29, 0xf3, 0x98, 0x4e, 0x5f, 0x8f, 0x4a, 0x77, - 0xf3, 0x76, 0x7f, 0x71, 0x4c, 0x0f, 0x4b, 0x8e, 0xd3, 0x44, 0x23, 0xd7, - 0x89, 0x95, 0x27, 0xd5, 0x39, 0xb2, 0xda, 0x48, 0x9b, 0x35, 0xb8, 0x72, - 0xd3, 0xf2, 0x22, 0xe3, 0x55, 0xed, 0x60, 0x83, 0xcf, 0xd8, 0xcb, 0x12, - 0x77, 0xa8, 0xc7, 0xc0, 0x62, 0x4c, 0xf5, 0x09, 0x12, 0x05, 0x9e, 0xed, - 0x5f, 0xad, 0xd6, 0xe8, 0x3f, 0x83, 0x67, 0x2d, 0x79, 0xb5, 0xbf, 0xf1, - 0x10, 0x8d, 0xc6, 0xc8, 0x36, 0x5a, 0xdc, 0x0f, 0x04, 0x7c, 0x59, 0x77, - 0x30, 0x33, 0xb3, 0x1b, 0xa4, 0x0e, 0x14, 0xd3, 0x27, 0xeb, 0xdf, 0x3b, - 0x7e, 0xa3, 0x54, 0x29, 0x6d, 0x61, 0x30, 0x74, 0x9b, 0x25, 0x12, 0xe3, - 0x0b, 0x56, 0x1f, 0x79, 0xdf, 0x93, 0x85, 0x3c, 0x9c, 0x53, 0x04, 0x8c, - 0x8c, 0xa3, 0xd2, 0xc1, 0xaa, 0x84, 0xb8, 0x21, 0xe9, 0x10, 0x72, 0xe1, - 0x0e, 0x7d, 0xef, 0x94, 0x65, 0xb6, 0x12, 0xa4, 0x26, 0xc5, 0x22, 0xb6, - 0xf8, 0xe1, 0x34, 0xcc, 0x72, 0xf8, 0xf8, 0x23, 0xfa, 0x3c, 0x03, 0xc5, - 0xc8, 0x0f, 0x9f, 0x31, 0xc9, 0x67, 0x20, 0xf1, 0xea, 0xc0, 0x56, 0x80, - 0x70, 0xe1, 0x2d, 0x56, 0x31, 0x0c, 0xf6, 0x69, 0x0f, 0x0e, 0x6b, 0xd1, - 0x4b, 0x63, 0xdd, 0x20, 0xe9, 0x63, 0xdf, 0x2a, 0x33, 0x37, 0xbf, 0x4e, - 0x83, 0xc0, 0x61, 0x2b, 0xb3, 0xad, 0x7b, 0xac, 0x96, 0x29, 0xaa, 0x87, - 0xbe, 0x38, 0xf8, 0x1d, 0x8f, 0x5b, 0x91, 0xa1, 0x07, 0xdb, 0x7e, 0x1e, - 0xde, 0xfb, 0xf3, 0x68, 0x18, 0x94, 0x7d, 0x65, 0x95, 0x71, 0xd2, 0xef, - 0x7c, 0x44, 0xe4, 0xf2, 0xd1, 0xe8, 0x28, 0xdb, 0x18, 0xd3, 0x73, 0x28, - 0xe1, 0xa7, 0x5d, 0x1f, 0x10, 0x67, 0x2a, 0xfa, 0xf7, 0x72, 0x12, 0x87, - 0xa3, 0xa6, 0x45, 0x04, 0x88, 0x48, 0x0c, 0x92, 0x1c, 0x3c, 0x02, 0xe8, - 0x7c, 0x9a, 0xcb, 0x27, 0xdc, 0xc7, 0x67, 0xfd, 0xbe, 0xd6, 0xac, 0xf5, - 0xf2, 0xd5, 0x7a, 0x4e, 0x3c, 0x1a, 0x78, 0xe1, 0x0f, 0x26, 0xc2, 0xae, - 0x61, 0x2f, 0xb7, 0xb3, 0x9b, 0x63, 0x60, 0x39, 0x69, 0xdf, 0xef, 0x11, - 0xb8, 0xbb, 0x03, 0xaa, 0x8c, 0xe9, 0xe3, 0x6b, 0xc1, 0x10, 0xc5, 0xaa, - 0x28, 0xc2, 0x2e, 0xfc, 0x96, 0xe1, 0xd5, 0x97, 0xe2, 0x95, 0x45, 0x3a, - 0x1e, 0x91, 0x17, 0x4d, 0x8c, 0xb1, 0x75, 0x0c, 0x5d, 0x1e, 0x4b, 0xea, - 0x5f, 0xf3, 0x6d, 0xc7, 0x3f, 0xcc, 0xb2, 0x21, 0x39, 0x7e, 0xf5, 0xe1, - 0x32, 0xc9, 0xa5, 0x68, 0x05, 0x8d, 0xe0, 0xe9, 0x99, 0xd9, 0x68, 0x8f, - 0x4c, 0xde, 0xcc, 0x62, 0x1d, 0x92, 0x60, 0xe6, 0xb3, 0x33, 0x35, 0xa0, - 0xdb, 0x71, 0xa1, 0x81, 0x06, 0x9b, 0x43, 0xa6, 0xc7, 0xa9, 0xff, 0x65, - 0x78, 0xb5, 0xca, 0xf3, 0x3d, 0x66, 0x73, 0xc9, 0xbc, 0x47, 0x60, 0x81, - 0x93, 0xe6, 0xd7, 0x69, 0x71, 0x27, 0xf7, 0x09, 0x3b, 0x84, 0xe3, 0x87, - 0x52, 0x80, 0xaf, 0x7a, 0xc8, 0xb8, 0x41, 0x11, 0x16, 0x27, 0x3a, 0x8b, - 0xab, 0xcc, 0x04, 0xc6, 0xdf, 0x23, 0xaa, 0x48, 0x5d, 0x53, 0x92, 0xed, - 0xb3, 0x47, 0xd7, 0x6c, 0x94, 0xf6, 0x79, 0xd0, 0x6b, 0xbc, 0x46, 0x45, - 0x66, 0xb3, 0xd6, 0xfc, 0xcd, 0xfd, 0xb3, 0x04, 0x39, 0x82, 0x7a, 0xf6, - 0x27, 0xbd, 0x2d, 0x8a, 0x9b, 0x5f, 0xcf, 0x61, 0xb9, 0x09, 0x33, 0xf9, - 0xd8, 0x1c, 0xc5, 0x7a, 0x7c, 0x77, 0x20, 0xb3, 0xa0, 0xcf, 0x35, 0x10, - 0x49, 0x9a, 0xdc, 0x7c, 0x71, 0xa8, 0xfd, 0x02, 0x69, 0xeb, 0x58, 0x3e, - 0x92, 0x42, 0xdf, 0xcd, 0xbd, 0xc7, 0xb9, 0x6a, 0x33, 0x12, 0xfb, 0x8c, - 0x7f, 0x60, 0xee, 0x3c, 0x30, 0x84, 0x81, 0xf9, 0x12, 0x0a, 0xc2, 0x17, - 0xcb, 0x62, 0xaf, 0xa9, 0xa4, 0x7c, 0xa1, 0xbd, 0xf2, 0x96, 0xb0, 0xc7, - 0xe0, 0x4e, 0x4e, 0x6c, 0xa9, 0xbc, 0x94, 0xf4, 0xa6, 0x3d, 0x1e, 0xed, - 0x9d, 0xe1, 0x40, 0xf4, 0xb1, 0xc3, 0x76, 0x3a, 0xaa, 0xa2, 0x68, 0x5a, - 0x0d, 0x7c, 0x75, 0xba, 0x68, 0xb1, 0x63, 0x14, 0xdd, 0xa3, 0xd4, 0x59, - 0xf8, 0xcb, 0x55, 0xe0, 0x11, 0x09, 0xb3, 0xc7, 0xc2, 0x26, 0x85, 0xc0, - 0x7d, 0x67, 0xd5, 0x3b, 0xa1, 0x1a, 0xdd, 0xae, 0x30, 0xe5, 0xae, 0xe9, - 0xe3, 0xf6, 0x0f, 0x82, 0x6a, 0xcb, 0x83, 0x15, 0x7b, 0x52, 0x37, 0x4f, - 0x03, 0xa4, 0x88, 0xad, 0x6d, 0x4f, 0xae, 0x3e, 0xaf, 0xa7, 0x90, 0x01, - 0x00, 0xda, 0xeb, 0xa7, 0x01, 0x90, 0xd5, 0xbf, 0x0e, 0xf9, 0xd7, 0xae, - 0x91, 0x20, 0x3a, 0x66, 0xde, 0x13, 0xbc, 0x78, 0x81, 0xcc, 0xed, 0x2b, - 0xf1, 0x02, 0x6a, 0x52, 0x9c, 0x19, 0x5d, 0x26, 0xe2, 0xdb, 0xaa, 0x6c, - 0x58, 0x87, 0x11, 0xc3, 0xa3, 0x7b, 0x29, 0x4e, 0x65, 0xd3, 0x0e, 0x26, - 0xba, 0x09, 0xa6, 0x4a, 0x45, 0xc9, 0xfd, 0x71, 0x1b, 0x8c, 0xb7, 0xe9, - 0xa8, 0x81, 0x49, 0x68, 0xeb, 0xc9, 0x0b, 0x73, 0x73, 0x12, 0x76, 0x55, - 0x83, 0x85, 0x93, 0x85, 0x9b, 0xcc, 0x33, 0x8c, 0x61, 0x98, 0xd8, 0xdf, - 0x74, 0xca, 0xa1, 0x11, 0xa3, 0xe4, 0x07, 0x80, 0xca, 0xda, 0xda, 0xe3, - 0x65, 0xec, 0x43, 0x92, 0x00, 0x2b, 0xfc, 0xc0, 0x28, 0xcd, 0xb4, 0xb7, - 0xca, 0x50, 0xcd, 0xa2, 0x08, 0x62, 0x31, 0x16, 0x63, 0x4e, 0xf4, 0x00, - 0xb6, 0xe4, 0x2e, 0x8a, 0x94, 0x91, 0x0e, 0xe3, 0x66, 0xb5, 0xfb, 0xd6, - 0x7b, 0x8c, 0x41, 0xa4, 0x5a, 0xc6, 0xe5, 0x78, 0xaa, 0x84, 0x23, 0x30, - 0xdd, 0x50, 0x65, 0xbf, 0x8f, 0xe1, 0x98, 0xc4, 0x5d, 0x71, 0xe5, 0x0c, - 0x36, 0x38, 0x30, 0xad, 0x81, 0x3b, 0x4c, 0xbd, 0x21, 0x25, 0x7c, 0x25, - 0x09, 0xf2, 0x1e, 0x8e, 0x04, 0xe1, 0xd5, 0x0c, 0x8e, 0x1f, 0x3a, 0xd2, - 0x3a, 0xf5, 0x0d, 0x01, 0x6f, 0x5e, 0x0a, 0x22, 0xbd, 0x3d, 0xe9, 0x3c, - 0xea, 0xa5, 0x53, 0x24, 0x65, 0xee, 0x4c, 0x6f, 0x3e, 0xc3, 0xa4, 0xd6, - 0xc3, 0xdf, 0x67, 0x4f, 0x50, 0x40, 0xa2, 0xa0, 0x83, 0xab, 0x08, 0xa0, - 0x8f, 0xca, 0x1f, 0x58, 0x38, 0x62, 0x8b, 0xf2, 0x9c, 0x2d, 0x7b, 0x3d, - 0xd8, 0x99, 0x96, 0xd9, 0xb2, 0x76, 0x2a, 0xef, 0x6b, 0x8e, 0x36, 0x1f, - 0x2e, 0x81, 0x93, 0x0c, 0x8a, 0xb2, 0x2e, 0xa0, 0x34, 0x53, 0x71, 0xca, - 0x53, 0x5a, 0x33, 0xa5, 0x59, 0x86, 0xc0, 0x16, 0xf7, 0xef, 0xbd, 0x32, - 0xa8, 0xb4, 0xeb, 0x61, 0xe4, 0x75, 0x05, 0x01, 0x21, 0x85, 0xa8, 0xfc, - 0x21, 0x21, 0x24, 0x9e, 0x49, 0x09, 0x94, 0x7d, 0xae, 0x05, 0x90, 0x7e, - 0xd0, 0xe4, 0x62, 0x28, 0xf9, 0x99, 0x23, 0xdb, 0x4b, 0xc1, 0x66, 0xad, - 0xda, 0xfd, 0x9d, 0x70, 0x84, 0x86, 0xbd, 0x4e, 0x51, 0x99, 0x83, 0x59, - 0x1f, 0x86, 0x80, 0x49, 0x65, 0x4e, 0x1c, 0x8e, 0xfc, 0xcd, 0x05, 0x7d, - 0xb2, 0xe2, 0x13, 0xba, 0x3c, 0xeb, 0xa2, 0x06, 0x57, 0x8a, 0xe5, 0x3b, - 0x8f, 0x3a, 0x92, 0xd0, 0x3a, 0xb8, 0x18, 0x5a, 0x26, 0x05, 0x15, 0x00, - 0xae, 0x13, 0xa7, 0x92, 0xf1, 0x05, 0x4c, 0xc2, 0xf6, 0xf3, 0x69, 0xd1, - 0x1a, 0x64, 0xc2, 0xe3, 0xa8, 0x65, 0x61, 0x6e, 0x36, 0x47, 0x05, 0x12, - 0xe1, 0x30, 0x38, 0xd9, 0x5d, 0xfd, 0xc9, 0xa1, 0x9c, 0x89, 0x3a, 0x5e, - 0xc3, 0x38, 0x36, 0xc4, 0xe1, 0x12, 0x01, 0x27, 0x41, 0xe1, 0x73, 0x9f, - 0xb8, 0x30, 0x10, 0xf5, 0xbb, 0xb9, 0x6d, 0xcf, 0xfb, 0xbd, 0x74, 0xb1, - 0x6e, 0xad, 0x0b, 0xf6, 0x5a, 0x53, 0x44, 0xb8, 0xf3, 0xaf, 0xf5, 0x6d, - 0x86, 0xd4, 0x26, 0x40, 0xb3, 0xec, 0x4c, 0x10, 0xac, 0xe5, 0x88, 0xbd, - 0x26, 0x38, 0x7c, 0xf4, 0xde, 0x6a, 0x8b, 0x6e, 0x0c, 0x51, 0x0f, 0x3c, - 0xd7, 0x90, 0x8e, 0xe9, 0xae, 0x85, 0x8a, 0x67, 0x89, 0x03, 0xbd, 0x2b, - 0x8c, 0x6e, 0xd0, 0x99, 0x88, 0xc8, 0x90, 0x49, 0x51, 0x24, 0xa3, 0x6d, - 0xe8, 0xd9, 0x2e, 0xd9, 0x6d, 0xfe, 0x50, 0x5b, 0x70, 0xb0, 0x34, 0x4b, - 0x88, 0x17, 0x48, 0x58, 0xb2, 0x81, 0xa6, 0x02, 0x91, 0x3b, 0xb6, 0xd0, - 0x0f, 0xa0, 0x8e, 0x68, 0x5f, 0xd9, 0xc2, 0x25, 0xc0, 0xea, 0x9d, 0x23, - 0x8b, 0x6a, 0x94, 0x06, 0x07, 0x52, 0xb2, 0x7a, 0x3c, 0x7f, 0x0f, 0xd7, - 0x24, 0x92, 0x5e, 0xd7, 0x81, 0x46, 0xac, 0x1d, 0x3e, 0x4a, 0xa7, 0x12, - 0x10, 0x95, 0xc0, 0x16, 0x4f, 0xac, 0x92, 0x18, 0x0f, 0xef, 0x8a, 0x92, - 0x9c, 0xb9, 0x7f, 0x1a, 0x1f, 0x56, 0xe7, 0xa7, 0x96, 0xad, 0x88, 0xe8, - 0x9a, 0x4b, 0x4e, 0x04, 0x6a, 0x4f, 0x72, 0x61, 0x62, 0xe7, 0x3f, 0xa8, - 0x0a, 0xd9, 0x65, 0x99, 0x29, 0x2b, 0x88, 0x4e, 0xde, 0xde, 0xee, 0x14, - 0xdc, 0x99, 0x1b, 0xc3, 0x7f, 0x9a, 0xd9, 0x99, 0x41, 0xcd, 0x07, 0x88, - 0x42, 0x7b, 0x1f, 0xa2, 0xae, 0x2b, 0x33, 0x3b, 0xf4, 0xf5, 0xb4, 0xee, - 0x53, 0xf0, 0xf2, 0x25, 0x1d, 0x67, 0x60, 0x73, 0xfa, 0x92, 0x59, 0x60, - 0xc6, 0xfd, 0xb6, 0x0b, 0xa8, 0xef, 0xd7, 0xf7, 0xab, 0x4f, 0x6e, 0x97, - 0x3b, 0xad, 0x16, 0xa7, 0x3d, 0x46, 0xe5, 0x3c, 0x8a, 0xed, 0x3e, 0xe8, - 0x91, 0xf1, 0x14, 0xe5, 0xb2, 0xb0, 0x05, 0x23, 0xc6, 0xae, 0xd6, 0x66, - 0x47, 0x8c, 0x19, 0x43, 0x99, 0x3a, 0x68, 0xa9, 0xab, 0xe7, 0xd8, 0xb4, - 0xea, 0x26, 0xfd, 0x5a, 0x51, 0xcb, 0xc5, 0xa0, 0xf7, 0x4a, 0x7c, 0x82, - 0x69, 0x06, 0x93, 0x7e, 0xbb, 0xe6, 0x22, 0xd6, 0x6e, 0xa9, 0xf0, 0xb9, - 0x9a, 0xcf, 0x94, 0x38, 0x00, 0x00, 0xe1, 0xbf, 0xe6, 0xf4, 0x8d, 0x5b, - 0x8a, 0x0a, 0x03, 0x2d, 0x8f, 0x39, 0x61, 0xbc, 0xe0, 0xc6, 0xe0, 0x1e, - 0x3d, 0xe1, 0x95, 0xd9, 0xea, 0x75, 0xc6, 0x00, 0x95, 0x74, 0x2c, 0xb3, - 0x07, 0xd8, 0x41, 0x64, 0x9a, 0xae, 0xfd, 0x13, 0x9a, 0xc8, 0xf5, 0xaa, - 0x46, 0xa6, 0xb6, 0xe3, 0x84, 0x9f, 0x9a, 0x3e, 0xbf, 0xbb, 0x6c, 0x8b, - 0x2b, 0xb0, 0x55, 0xa9, 0x75, 0x61, 0x51, 0x7c, 0x04, 0xc8, 0x55, 0x5a, - 0x5c, 0xf0, 0xf5, 0x5d, 0x5a, 0x18, 0x5b, 0xf0, 0x4d, 0x2a, 0x89, 0x27, - 0xcc, 0x44, 0x5d, 0xc8, 0x51, 0xa1, 0x65, 0xfa, 0x52, 0xe5, 0x5a, 0xf3, - 0x46, 0xb4, 0x50, 0x59, 0x22, 0xf1, 0xb1, 0x77, 0x8d, 0xa0, 0x2d, 0x91, - 0x9a, 0x00, 0xb1, 0x94, 0xb3, 0xb1, 0x12, 0x73, 0x21, 0xff, 0x9b, 0x3d, - 0x72, 0x72, 0xe1, 0xa9, 0xe4, 0x35, 0x67, 0x19, 0x53, 0x8a, 0x2c, 0xcc, - 0xdb, 0x71, 0x39, 0x2b, 0x91, 0x76, 0xe4, 0x38, 0xcf, 0x50, 0x22, 0xbc, - 0xad, 0x58, 0x37, 0xf8, 0x48, 0x35, 0x02, 0x5b, 0x6c, 0xbf, 0xd8, 0x28, - 0xba, 0x58, 0x69, 0x5b, 0x7f, 0x0f, 0x6c, 0x08, 0x89, 0x6e, 0xeb, 0x70, - 0xa2, 0x9f, 0x79, 0x90, 0xa4, 0x3e, 0x33, 0x63, 0x68, 0x27, 0xd0, 0x1e, - 0x1f, 0xb8, 0x3d, 0x3a, 0xcf, 0xe6, 0x68, 0xaf, 0x13, 0xc2, 0x57, 0x32, - 0x8a, 0x33, 0x86, 0x4e, 0xaf, 0xde, 0xb5, 0xcd, 0xd8, 0x95, 0xc5, 0x86, - 0x61, 0x30, 0x48, 0x0e, 0x8c, 0x48, 0x20, 0x7c, 0xa9, 0xc5, 0x8f, 0xef, - 0xcd, 0xd9, 0xbb, 0x13, 0x16, 0x01, 0x9f, 0xc4, 0x0f, 0x29, 0x81, 0x0c, - 0x21, 0x50, 0xe1, 0x2d, 0x18, 0x49, 0xe8, 0x14, 0xf2, 0x0f, 0x33, 0x3a, - 0xb9, 0x0b, 0x56, 0xe8, 0xb8, 0x6b, 0x67, 0xed, 0x36, 0x37, 0x93, 0x18, - 0xc9, 0xeb, 0xa8, 0xab, 0xe3, 0x0a, 0x47, 0x84, 0x3b, 0x99, 0x42, 0xa0, - 0x5e, 0x6d, 0xba, 0xc6, 0x64, 0x70, 0x52, 0xfc, 0x31, 0x1e, 0x94, 0x21, - 0xbf, 0x2e, 0xfd, 0xb4, 0x9a, 0x0d, 0x94, 0x0a, 0xf8, 0x16, 0x65, 0xb4, - 0xbc, 0x1a, 0xa7, 0x40, 0x96, 0x67, 0x77, 0xee, 0x29, 0x3a, 0x81, 0x2f, - 0xee, 0xfb, 0x73, 0xfc, 0x47, 0x06, 0xa1, 0x86, 0xc5, 0x69, 0x8a, 0x31, - 0xab, 0xc0, 0xd4, 0x06, 0x75, 0x4c, 0x7d, 0xc3, 0x39, 0x75, 0xc5, 0x0e, - 0x51, 0x95, 0x78, 0xff, 0x18, 0xef, 0xe1, 0x47, 0x9a, 0xfc, 0xa5, 0xe4, - 0x90, 0xcf, 0xd2, 0x21, 0x61, 0x6d, 0x1a, 0xde, 0xcc, 0xab, 0x87, 0x2f, - 0x76, 0x4e, 0xe7, 0xce, 0xb8, 0x64, 0x79, 0x57, 0x6b, 0x41, 0x1f, 0xb3, - 0xd1, 0x98, 0x36, 0x30, 0xed, 0xfc, 0xf4, 0x93, 0x69, 0x76, 0xbb, 0x91, - 0x61, 0x79, 0x6b, 0x29, 0x51, 0x10, 0x00, 0xc1, 0x9b, 0xe5, 0xaa, 0xc3, - 0xae, 0xc4, 0xa9, 0x24, 0x12, 0x2c, 0x73, 0xce, 0xd4, 0xa7, 0x5a, 0xcc, - 0x8c, 0xb8, 0x03, 0x14, 0x2f, 0x30, 0x02, 0x1c, 0xac, 0x42, 0x28, 0xfa, - 0xbf, 0x13, 0xbe, 0xdb, 0xb0, 0x0a, 0xe1, 0xff, 0xb2, 0x99, 0xdd, 0xa5, - 0xbc, 0xa7, 0x91, 0x02, 0x42, 0x02, 0xb3, 0xc5, 0xd1, 0x22, 0x25, 0x8c, - 0x5a, 0x08, 0x5e, 0xc8, 0x5b, 0xed, 0x3e, 0xd7, 0xf0, 0xc5, 0x7d, 0x9e, - 0x7d, 0x81, 0xfe, 0x69, 0xb0, 0x50, 0x8e, 0x31, 0x0c, 0x27, 0x4e, 0x27, - 0x79, 0xa8, 0x22, 0x56, 0xa1, 0x2d, 0x91, 0x46, 0xc5, 0x68, 0xbb, 0xb2, - 0x80, 0x6b, 0xaf, 0x09, 0x95, 0x01, 0xe3, 0xd3, 0xc9, 0x5a, 0x0b, 0x41, - 0xc1, 0xb1, 0xa6, 0x79, 0x31, 0x71, 0x45, 0x9a, 0x20, 0xc3, 0xf3, 0x98, - 0xb7, 0x03, 0xef, 0x76, 0x9d, 0x5f, 0xdc, 0xf3, 0x53, 0x0e, 0x1b, 0x4e, - 0x7d, 0xbb, 0x44, 0x54, 0xb4, 0xc8, 0x16, 0x14, 0x62, 0x32, 0x75, 0xd8, - 0x79, 0x1a, 0x16, 0xe1, 0xfb, 0x01, 0xaa, 0xb9, 0x70, 0x86, 0xf1, 0xf9, - 0x29, 0xca, 0x43, 0x74, 0x67, 0xf7, 0xe4, 0x04, 0x74, 0xa7, 0xf2, 0xb3, - 0xc8, 0x27, 0x57, 0x07, 0x30, 0x65, 0x9f, 0xf9, 0x96, 0x29, 0xd7, 0x61, - 0x1e, 0x1c, 0xc3, 0x05, 0x21, 0xe3, 0xf5, 0x4e, 0x48, 0xa2, 0xcf, 0x6a, - 0xd3, 0xe7, 0xd6, 0xe7, 0x15, 0x5c, 0x3e, 0xcf, 0x9a, 0x1c, 0x4b, 0xf6, - 0xc3, 0x68, 0x04, 0xd0, 0x7d, 0xa6, 0x83, 0x55, 0x9b, 0x83, 0x7d, 0xf1, - 0xea, 0x6f, 0x41, 0xa5, 0x9b, 0x83, 0x1a, 0xac, 0x28, 0x7b, 0x4e, 0xef, - 0x74, 0x37, 0x19, 0x62, 0xb8, 0x8b, 0x75, 0xf3, 0x75, 0x0e, 0xf5, 0x84, - 0x62, 0x3f, 0x65, 0xa0, 0x65, 0x62, 0x67, 0x29, 0xe9, 0x80, 0x68, 0xb0, - 0x0b, 0x46, 0x59, 0xa6, 0x95, 0xb5, 0xfb, 0xbb, 0x6e, 0x91, 0x08, 0x3a, - 0x4f, 0x6e, 0xa7, 0xea, 0x5c, 0x6e, 0x65, 0x5f, 0xa4, 0xe4, 0x26, 0xcd, - 0x9e, 0x83, 0xf0, 0x5e, 0xa9, 0x7a, 0x53, 0xbd, 0x43, 0x96, 0x25, 0xd2, - 0xc3, 0x5b, 0x54, 0x19, 0x0c, 0x33, 0xaa, 0xa8, 0xed, 0xa2, 0x3b, 0x57, - 0xa0, 0xbb, 0x37, 0x90, 0x8c, 0x1b, 0x25, 0x7b, 0xb2, 0xd5, 0xf3, 0x99, - 0xec, 0xec, 0x95, 0x62, 0xda, 0x51, 0x50, 0xc8, 0xcb, 0x7d, 0x77, 0xfb, - 0x76, 0x6f, 0x7f, 0x72, 0xd0, 0xd0, 0x0a, 0x36, 0xda, 0x53, 0xf1, 0x22, - 0x43, 0x2f, 0x18, 0x75, 0x7c, 0x8d, 0x6d, 0x5a, 0xc5, 0xbc, 0x4e, 0x60, - 0x1e, 0x6b, 0xed, 0xa5, 0xfc, 0x47, 0x48, 0xd0, 0x64, 0x2d, 0x07, 0xc5, - 0x7b, 0xf9, 0xa2, 0x38, 0x96, 0x46, 0xe9, 0x66, 0xd6, 0x6f, 0xbd, 0xde, - 0x10, 0xe2, 0x2c, 0xc9, 0x03, 0x42, 0xe8, 0xac, 0x07, 0x5b, 0x50, 0x44, - 0x83, 0x9e, 0x16, 0xc3, 0x73, 0x29, 0x68, 0xf5, 0x68, 0x65, 0x4b, 0x45, - 0x88, 0x43, 0xba, 0x08, 0xee, 0xc0, 0x24, 0x9f, 0x80, 0x4f, 0x65, 0x9c, - 0x5a, 0xc4, 0xfd, 0x65, 0x3f, 0x73, 0xf9, 0xa6, 0xd2, 0x72, 0x2d, 0xbb, - 0xd1, 0x5b, 0x2f, 0x2d, 0x7d, 0x41, 0x45, 0x2c, 0x3e, 0xfb, 0xaa, 0x91, - 0x0c, 0xbb, 0x54, 0x79, 0xf3, 0x9f, 0xac, 0x25, 0x1f, 0x53, 0x22, 0x11, - 0x64, 0x88, 0xe9, 0xbd, 0xf0, 0x2f, 0xa6, 0xd0, 0xdf, 0x5d, 0xf2, 0x7a, - 0xbb, 0xed, 0x0e, 0x09, 0xec, 0x6b, 0x18, 0x6f, 0xf0, 0xa9, 0x08, 0x3f, - 0xc4, 0x31, 0x4f, 0x0f, 0xec, 0x71, 0x51, 0xf7, 0x71, 0xbe, 0xd5, 0x2a, - 0xab, 0xe1, 0x6c, 0x42, 0xad, 0x55, 0x65, 0x05, 0xb1, 0x3d, 0x78, 0x70, - 0xf0, 0xc1, 0xb5, 0xc3, 0x1c, 0xc6, 0x21, 0xb9, 0x04, 0x19, 0x3a, 0x8e, - 0xbe, 0xbb, 0x84, 0x3a, 0x30, 0x2c, 0x0a, 0xa6, 0x44, 0x15, 0x86, 0x09, - 0x05, 0x7d, 0x12, 0xa7, 0x79, 0x59, 0x63, 0x02, 0x11, 0xcf, 0x30, 0xc2, - 0xf3, 0xea, 0xff, 0x10, 0x82, 0xe7, 0x06, 0x81, 0x6f, 0x7d, 0x02, 0x96, - 0x52, 0x0f, 0xe6, 0xca, 0xcf, 0x07, 0x42, 0x03, 0xe7, 0x95, 0x8d, 0xbf, - 0x45, 0xbf, 0x95, 0xad, 0x29, 0x69, 0xcf, 0x0f, 0x6d, 0xaa, 0x60, 0xce, - 0xa3, 0x1d, 0xe0, 0xd9, 0xfb, 0x06, 0x54, 0x36, 0xe8, 0x24, 0xb1, 0x16, - 0xaf, 0x82, 0x24, 0x67, 0x58, 0x7b, 0xe4, 0x14, 0x24, 0x11, 0xee, 0x8f, - 0xb4, 0xb2, 0xdc, 0xf9, 0xea, 0x15, 0x5e, 0xb7, 0x42, 0x64, 0x46, 0x58, - 0x7a, 0xe2, 0x44, 0x6f, 0x90, 0x1a, 0xb7, 0x31, 0xc5, 0xf2, 0xee, 0x24, - 0x6b, 0xb2, 0x0b, 0x16, 0xcc, 0x34, 0x1e, 0xc5, 0xf1, 0xd1, 0xa6, 0x0e, - 0x31, 0x4e, 0x2b, 0x17, 0xf6, 0xf8, 0xc8, 0x76, 0xcb, 0x17, 0x6d, 0x15, - 0x85, 0x4f, 0x34, 0xbd, 0x94, 0x88, 0x64, 0x8e, 0x8a, 0x87, 0x16, 0x25, - 0x03, 0x5d, 0x17, 0xc9, 0xc1, 0x04, 0x96, 0xa3, 0x3c, 0xed, 0xe2, 0x6b, - 0xee, 0xfb, 0x5e, 0xfa, 0xc2, 0xbd, 0x74, 0x0a, 0x89, 0x83, 0xab, 0x45, - 0x32, 0x82, 0xf8, 0x44, 0x42, 0xd5, 0x45, 0xbc, 0x46, 0xc0, 0xce, 0xbc, - 0xeb, 0xf9, 0xf3, 0xae, 0x4d, 0x0b, 0xed, 0x6d, 0xbf, 0x0c, 0x2a, 0x29, - 0xc2, 0xc6, 0x91, 0xd2, 0x73, 0xc4, 0xd3, 0x18, 0x27, 0x85, 0x1d, 0xae, - 0x40, 0x37, 0xa7, 0x20, 0xf8, 0x84, 0x6c, 0xdc, 0x71, 0x3e, 0x27, 0x10, - 0x09, 0xde, 0xa8, 0xb3, 0x4a, 0x5c, 0xc8, 0xf5, 0x80, 0x4a, 0x36, 0xaf, - 0xed, 0xb2, 0xae, 0xd5, 0xc4, 0x45, 0x7d, 0xa7, 0x0f, 0x46, 0xd9, 0x44, - 0xfa, 0xf1, 0x7e, 0x9c, 0x76, 0x45, 0x21, 0xa5, 0x62, 0x01, 0xc1, 0x7e, - 0x7b, 0xa0, 0xab, 0xce, 0xdd, 0xe4, 0x46, 0xb9, 0x28, 0x42, 0xdf, 0xfc, - 0x99, 0x61, 0x89, 0x66, 0xec, 0xa6, 0x77, 0x05, 0xa7, 0x7a, 0x8a, 0xb9, - 0x3a, 0x2d, 0x66, 0x0b, 0x11, 0x13, 0xcb, 0xf7, 0xff, 0x2c, 0x90, 0xa1, - 0x5c, 0x99, 0x93, 0xbb, 0xbd, 0xc7, 0x6f, 0xfa, 0x98, 0xaf, 0xc4, 0x10, - 0x5d, 0xc5, 0xd5, 0x68, 0xef, 0xca, 0xb0, 0x7e, 0x85, 0xd8, 0xf9, 0xd9, - 0xb8, 0x42, 0x6c, 0xed, 0xb8, 0x60, 0x32, 0x18, 0x5d, 0xbc, 0x44, 0xf7, - 0x8e, 0xb3, 0xac, 0xaf, 0x8e, 0x05, 0xd3, 0x3e, 0x3c, 0x4d, 0x04, 0xa6, - 0xfe, 0x48, 0x9e, 0xf8, 0x73, 0xd9, 0xc2, 0x89, 0x6b, 0x4f, 0xd6, 0xa2, - 0xa6, 0x61, 0x0e, 0x22, 0xf0, 0x9d, 0xc8, 0xbe, 0x96, 0x34, 0x8c, 0x7c, - 0xfc, 0xe9, 0x69, 0x47, 0x1b, 0xb6, 0x3c, 0x27, 0x43, 0x66, 0x0c, 0x97, - 0x1c, 0x0d, 0x8f, 0x09, 0x69, 0x18, 0xce, 0x16, 0xb7, 0x9b, 0x13, 0xa4, - 0xd7, 0x65, 0x47, 0xb8, 0xa5, 0x0c, 0x24, 0xd2, 0x46, 0xc6, 0xcf, 0x26, - 0x43, 0x44, 0x8c, 0x3c, 0xf3, 0x3a, 0xbc, 0xb9, 0x34, 0x17, 0x31, 0xd7, - 0x61, 0xe3, 0xb5, 0x8a, 0xab, 0xca, 0x41, 0x2f, 0x02, 0x86, 0xf7, 0xb2, - 0xc8, 0x57, 0xc4, 0x3e, 0xad, 0x2d, 0xc4, 0x55, 0x4f, 0x09, 0xe2, 0xcc, - 0x9c, 0x19, 0xe3, 0xe1, 0xde, 0xb8, 0xd7, 0x4f, 0xb7, 0x42, 0x48, 0xe1, - 0x47, 0xaf, 0xef, 0x00, 0x13, 0x43, 0x20, 0x46, 0xd3, 0xe6, 0x7c, 0x1c, - 0xf8, 0x18, 0x92, 0xd6, 0xd9, 0x67, 0x47, 0xd5, 0xea, 0xa2, 0x64, 0xb0, - 0x08, 0xc2, 0x5a, 0x63, 0x04, 0x06, 0xb9, 0x93, 0x83, 0xee, 0x17, 0xaf, - 0xfb, 0x8e, 0x3a, 0x3f, 0xbf, 0x88, 0xdc, 0xdd, 0x41, 0xfb, 0xf3, 0xff, - 0x1c, 0xfd, 0xca, 0x3c, 0xac, 0x9d, 0xed, 0x6c, 0xc0, 0x3f, 0xc5, 0xc1, - 0xbf, 0x8f, 0xc2, 0xbe, 0x16, 0xf5, 0xaf, 0x3a, 0xfd, 0xef, 0xa1, 0x20, - 0x2b, 0x1b, 0x97, 0x7f, 0x08, 0xfd, 0x51, 0x75, 0x2f, 0x3b, 0xfb, 0x7f, - 0x22, 0xc6, 0xfc, 0x15, 0xe2, 0x68, 0x67, 0x65, 0xfb, 0x4f, 0x81, 0x18, - 0xbf, 0x02, 0xc1, 0x56, 0x0e, 0x3f, 0xe2, 0x10, 0x10, 0xa5, 0x00, 0x7f, - 0xd2, 0x8d, 0x19, 0xff, 0x7a, 0x06, 0xf8, 0x97, 0xff, 0xa9, 0x22, 0x63, - 0xfc, 0x35, 0x46, 0x00, 0x90, 0x01, 0xa4, 0xc6, 0x80, 0xea, 0x3b, 0x32, - 0x23, 0x08, 0xbf, 0xfc, 0x30, 0xf6, 0x4f, 0xff, 0x3b, 0xee, 0x4d, 0x1d, - 0xf8, 0x3a, 0x6e, 0x34, 0xe0, 0x86, 0x2a, 0x7c, 0x1d, 0xdc, 0x4c, 0x99, - 0xf6, 0xff, 0x82, 0xfd, 0xee, 0x7f, 0x07, 0xbf, 0x29, 0xfe, 0x5e, 0x07, - 0xff, 0x31, 0x1f, 0x7f, 0x48, 0xc1, 0xd7, 0x51, 0x9f, 0x7f, 0xf8, 0x89, - 0xf2, 0xbb, 0xff, 0x89, 0xfa, 0x27, 0x5d, 0xf8, 0x17, 0x2a, 0xde, 0x95, - 0x71, 0x20, 0xfc, 0xea, 0xd5, 0xd7, 0x71, 0x73, 0xdb, 0x7f, 0xe2, 0xfc, - 0xf2, 0x7f, 0xca, 0xf6, 0xa6, 0x96, 0x7c, 0x3d, 0x5b, 0x0d, 0x84, 0x7f, - 0x54, 0x96, 0xaf, 0x93, 0x79, 0x7b, 0xfe, 0x7b, 0xa5, 0xb9, 0xa9, 0xba, - 0x5e, 0x27, 0x4b, 0x44, 0xfc, 0xa3, 0x06, 0xfb, 0x77, 0x44, 0xbf, 0xfb, - 0xdf, 0x89, 0x6e, 0x4a, 0x76, 0xd7, 0x89, 0xda, 0x90, 0xff, 0x2c, 0xe0, - 0xfd, 0x27, 0x4c, 0x37, 0xc5, 0xb6, 0xeb, 0x4c, 0xee, 0x28, 0xff, 0x20, - 0xbd, 0x5d, 0xa7, 0x8a, 0x49, 0xfd, 0xf7, 0xa8, 0x6e, 0x6a, 0x49, 0xd7, - 0xa9, 0x4e, 0x50, 0xff, 0xac, 0x2c, 0xfd, 0x1d, 0xd3, 0xef, 0xfe, 0x77, - 0xa6, 0x9b, 0xaa, 0xcf, 0x75, 0xa6, 0x66, 0xb4, 0x7f, 0xd4, 0x80, 0xfe, - 0x13, 0xb2, 0x9b, 0x62, 0xc9, 0x8d, 0xf5, 0x82, 0xfe, 0x47, 0xe9, 0xe4, - 0x3f, 0x21, 0xba, 0x79, 0x85, 0x7b, 0x9d, 0xa8, 0x1b, 0xeb, 0x8f, 0x17, - 0xba, 0x7f, 0xb7, 0xa6, 0xfe, 0x37, 0xa2, 0x9b, 0x5f, 0x87, 0xd7, 0x89, - 0xc6, 0x88, 0xfe, 0xd7, 0x6f, 0xc5, 0x7f, 0x5a, 0xc4, 0xbf, 0xfc, 0xef, - 0x84, 0x37, 0x8f, 0xee, 0xd7, 0x09, 0x0b, 0x49, 0xff, 0xf6, 0x20, 0xff, - 0xef, 0x93, 0xfc, 0xa9, 0x05, 0x5c, 0xdf, 0x81, 0x54, 0xa9, 0xfe, 0xea, - 0xb1, 0xff, 0x49, 0xee, 0x37, 0x9b, 0xf5, 0xf5, 0xdc, 0x3d, 0xa8, 0x6e, - 0xb6, 0xee, 0xff, 0x36, 0x69, 0xf4, 0x1b, 0x49, 0xcb, 0x53, 0xff, 0x4f, - 0xc3, 0xbb, 0x8e, 0xac, 0xff, 0xed, 0x67, 0xcf, 0xf8, 0xdd, 0xff, 0x13, - 0x32, 0xf6, 0x0d, 0x64, 0x57, 0xea, 0xdf, 0xba, 0xee, 0xff, 0x5f, 0xf8, - 0x27, 0xd4, 0xbf, 0x75, 0xea, 0xff, 0x16, 0xfe, 0xe6, 0xcb, 0xec, 0xa2, - 0xfe, 0xab, 0x23, 0x5f, 0x87, 0x95, 0x67, 0xf8, 0x59, 0xde, 0xdf, 0xfd, - 0x3f, 0xc1, 0x62, 0xde, 0x80, 0x5d, 0xa7, 0xbe, 0x71, 0x22, 0xf8, 0x6f, - 0xc1, 0x31, 0x6e, 0x80, 0xe3, 0xd0, 0x5c, 0x3f, 0x45, 0xfc, 0x7b, 0xd8, - 0x28, 0x3f, 0xfe, 0xba, 0x0a, 0x40, 0x72, 0xf5, 0xcf, 0xf9, 0x6a, 0x9b, - 0x11, 0xa6, 0xf9, 0x31, 0xfa, 0x3f, 0x01, 0x00, 0x00, 0xff, 0xff, 0x01, - 0x81, 0x55, 0x99, 0xb6, 0x26, 0x00, 0x00, - }, - "conf/content/git-bare.zip", - ) -} - -func conf_etc_supervisord_conf() ([]byte, error) { - return bindata_read([]byte{ - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x09, 0x6e, 0x88, 0x00, 0xff, 0x8c, 0x94, - 0xc1, 0x6e, 0xdb, 0x30, 0x0c, 0x86, 0xcf, 0xd3, 0x53, 0xf0, 0xb0, 0x63, - 0x1a, 0x77, 0xc5, 0x76, 0x49, 0xe1, 0xcb, 0x30, 0x60, 0x97, 0x0d, 0x01, - 0x8a, 0xed, 0x54, 0x04, 0x86, 0x6c, 0xd1, 0xb6, 0x10, 0x4b, 0x32, 0x28, - 0xaa, 0x6b, 0x76, 0xd8, 0xb3, 0x8f, 0x72, 0xdc, 0x35, 0xc1, 0x92, 0x26, - 0x39, 0xc4, 0xb1, 0xf2, 0xf3, 0x23, 0x4d, 0xf2, 0xf7, 0x63, 0xf2, 0xf6, - 0xb9, 0xea, 0x99, 0xc7, 0x2a, 0x22, 0x3d, 0x21, 0x6d, 0x54, 0x6b, 0x07, - 0x2c, 0x0b, 0x76, 0x63, 0x11, 0xd3, 0x28, 0x67, 0x36, 0x06, 0x5a, 0xc6, - 0xd0, 0x6c, 0xe1, 0xf4, 0xe7, 0x1e, 0x46, 0xcd, 0x3d, 0x70, 0x80, 0x5d, - 0x48, 0x04, 0x59, 0x89, 0x0c, 0x99, 0xa2, 0xd4, 0xe3, 0x2b, 0xc2, 0x6c, - 0xd4, 0x10, 0xba, 0x09, 0x2e, 0xd7, 0x03, 0xb6, 0x59, 0xca, 0xfd, 0x69, - 0xf0, 0x81, 0x08, 0xb2, 0x68, 0x82, 0xce, 0x94, 0xca, 0xe9, 0xe7, 0x7a, - 0xc7, 0x18, 0xcb, 0x4f, 0xb7, 0xdf, 0x3f, 0x9f, 0xa9, 0x6d, 0x8f, 0x11, - 0xa5, 0x75, 0xc9, 0x41, 0xb4, 0xbf, 0x11, 0x42, 0x0b, 0x33, 0x01, 0x6a, - 0x6c, 0x03, 0x21, 0x50, 0x60, 0xcd, 0x36, 0xf8, 0x7f, 0xe4, 0x5a, 0x37, - 0xdb, 0x34, 0xc6, 0xf2, 0xc3, 0xed, 0x1b, 0xd8, 0x89, 0xec, 0x93, 0xab, - 0x91, 0x32, 0x33, 0xc7, 0xa0, 0x81, 0x34, 0xbe, 0xd0, 0x63, 0xc6, 0x0d, - 0xf8, 0x84, 0x43, 0xf9, 0x4b, 0x93, 0x7f, 0x9b, 0x34, 0xe3, 0xac, 0x6f, - 0xc3, 0x02, 0x0c, 0xd6, 0xa9, 0x5b, 0x40, 0x8e, 0x5a, 0x00, 0x93, 0x6e, - 0x50, 0x8d, 0xd6, 0x9c, 0x1a, 0x8b, 0x59, 0xca, 0x1f, 0x67, 0x66, 0xb2, - 0x8f, 0x90, 0x6a, 0x9a, 0xfd, 0xc3, 0xf9, 0x60, 0x34, 0xba, 0xe0, 0xcb, - 0x56, 0x0f, 0x11, 0xaf, 0xa9, 0x86, 0x92, 0x3f, 0x9a, 0x80, 0x8e, 0xa0, - 0x61, 0x0f, 0x51, 0x4e, 0x4a, 0x35, 0xb9, 0x43, 0x77, 0x1f, 0xaf, 0x78, - 0xb2, 0xe3, 0x56, 0x45, 0xd6, 0xc4, 0xd2, 0xa8, 0xa9, 0x3e, 0x83, 0xb1, - 0x21, 0x3b, 0x72, 0xa0, 0x98, 0xa1, 0x23, 0x85, 0x26, 0x96, 0x77, 0xb7, - 0x17, 0x3a, 0xff, 0x3f, 0x34, 0x07, 0x62, 0x8c, 0x47, 0xbc, 0x24, 0x2b, - 0x5d, 0x52, 0x08, 0x7c, 0x55, 0x89, 0x99, 0x67, 0xb0, 0xd5, 0x69, 0x60, - 0xc8, 0x91, 0xaa, 0xe9, 0xed, 0x60, 0x64, 0x88, 0xc6, 0x52, 0x5e, 0x59, - 0xd9, 0x66, 0x1a, 0x1b, 0xeb, 0x19, 0xa9, 0x95, 0x99, 0xac, 0x5e, 0x5b, - 0xb3, 0x51, 0x07, 0x4e, 0x39, 0xd4, 0x54, 0xf2, 0x25, 0x95, 0xec, 0xa0, - 0x84, 0x33, 0x8a, 0x95, 0xd3, 0xdb, 0xbc, 0xca, 0xd6, 0x57, 0x87, 0xc7, - 0x47, 0xce, 0x69, 0x78, 0x90, 0x0c, 0x93, 0x3b, 0x13, 0x0d, 0x65, 0x76, - 0xec, 0xaa, 0x28, 0x2e, 0x38, 0xf4, 0x3e, 0x3f, 0x83, 0xcc, 0x6b, 0x56, - 0xc3, 0xcf, 0x87, 0x6f, 0x00, 0xb2, 0xee, 0xf3, 0xd1, 0x6c, 0x53, 0xc9, - 0x23, 0x8d, 0xeb, 0x48, 0xbb, 0x55, 0x17, 0xba, 0xb8, 0x51, 0x4d, 0x70, - 0x4e, 0x7b, 0x23, 0x05, 0x17, 0xb9, 0x71, 0xc5, 0x97, 0xbc, 0xc0, 0x41, - 0x92, 0x14, 0x5d, 0xc8, 0x36, 0x2f, 0x22, 0x35, 0x45, 0x67, 0xb9, 0x4f, - 0xf5, 0x52, 0xb4, 0x72, 0x2a, 0x37, 0x31, 0x5f, 0x62, 0x31, 0xcd, 0x75, - 0x19, 0xfb, 0x77, 0xf7, 0xd0, 0xa3, 0xf8, 0xca, 0xa5, 0xc8, 0xe2, 0x31, - 0xe0, 0x5e, 0x3c, 0x86, 0x7a, 0x00, 0xa9, 0x7e, 0x01, 0x5e, 0xc6, 0xf1, - 0x07, 0xa4, 0x90, 0xf7, 0x5f, 0xd7, 0x0f, 0xeb, 0xf5, 0x0f, 0x18, 0xec, - 0x16, 0x95, 0x4e, 0x1c, 0xa6, 0x78, 0xc9, 0xcc, 0x94, 0x50, 0x45, 0x36, - 0x21, 0x71, 0xf5, 0x62, 0xd5, 0x12, 0x8e, 0x5f, 0x1a, 0x37, 0x39, 0xe3, - 0x8d, 0x88, 0x90, 0x28, 0xbf, 0x3f, 0xd4, 0xfe, 0xe7, 0x05, 0xbd, 0x28, - 0xc2, 0x24, 0xff, 0x1b, 0x00, 0x00, 0xff, 0xff, 0xbc, 0x75, 0xb0, 0x31, - 0xf7, 0x04, 0x00, 0x00, - }, - "conf/etc/supervisord.conf", - ) -} - -func conf_gitignore_android() ([]byte, error) { - return bindata_read([]byte{ - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x09, 0x6e, 0x88, 0x00, 0xff, 0x44, 0x8e, - 0xcd, 0x4a, 0x05, 0x31, 0x0c, 0x85, 0xf7, 0x7d, 0x8a, 0xc0, 0xdd, 0xa8, - 0xc8, 0xcc, 0x3b, 0x88, 0x3f, 0x20, 0x0a, 0xae, 0xdc, 0x4a, 0xa6, 0xcd, - 0xf4, 0x86, 0x09, 0x6d, 0x48, 0x3b, 0x17, 0x7d, 0x7b, 0xdb, 0x32, 0xdc, - 0xbb, 0x09, 0x9c, 0x7e, 0x1f, 0x3d, 0xe7, 0x04, 0x4f, 0x3b, 0x4b, 0x05, - 0x54, 0x15, 0xf6, 0x58, 0x39, 0x27, 0x58, 0x59, 0xa8, 0xb8, 0x87, 0x09, - 0x75, 0x1b, 0xf7, 0xc7, 0xb9, 0x13, 0xbc, 0xf6, 0x47, 0x58, 0xb3, 0x41, - 0x3d, 0x13, 0x3c, 0xa3, 0x5c, 0x78, 0x83, 0xef, 0xcf, 0x26, 0x04, 0xfa, - 0xed, 0xc2, 0x3b, 0x5e, 0x10, 0xbc, 0x60, 0x29, 0xd7, 0x0f, 0x46, 0xea, - 0xec, 0x8d, 0x12, 0x19, 0x56, 0x0a, 0x07, 0x5a, 0x38, 0xcd, 0x2e, 0x52, - 0x3b, 0x1d, 0x1a, 0x06, 0xa1, 0x83, 0x4c, 0x71, 0xa4, 0xd9, 0x2d, 0x6d, - 0x56, 0x18, 0xfc, 0x23, 0x7b, 0x14, 0xf0, 0x39, 0xad, 0x1c, 0x77, 0xbb, - 0x4d, 0x84, 0xbb, 0x12, 0x36, 0x50, 0xac, 0xe7, 0x47, 0xa0, 0xea, 0xef, - 0x9d, 0x74, 0x71, 0x52, 0xcb, 0x4a, 0x56, 0x99, 0x46, 0xf3, 0x97, 0xe5, - 0xb8, 0xa3, 0xb5, 0xe2, 0x2c, 0x81, 0x0c, 0xe2, 0x75, 0xc9, 0xf2, 0x07, - 0x2f, 0x5e, 0x58, 0x0b, 0x39, 0x3d, 0xa4, 0xf9, 0x3f, 0x00, 0x00, 0xff, - 0xff, 0x00, 0x96, 0x67, 0x2c, 0x0e, 0x01, 0x00, 0x00, - }, - "conf/gitignore/Android", - ) -} - -func conf_gitignore_c() ([]byte, error) { - return bindata_read([]byte{ - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x09, 0x6e, 0x88, 0x00, 0xff, 0x24, 0x8d, - 0x3d, 0x0e, 0xc2, 0x30, 0x0c, 0x85, 0xf7, 0x9c, 0xc2, 0x52, 0x17, 0xe8, - 0x90, 0x53, 0xc0, 0x16, 0x89, 0x81, 0x81, 0x39, 0x3f, 0x46, 0x18, 0xa2, - 0xba, 0x8a, 0x53, 0x51, 0x6e, 0x8f, 0x9d, 0x0e, 0xfe, 0x86, 0x4f, 0x7e, - 0xef, 0x4d, 0x70, 0x4b, 0x6f, 0xcc, 0x1d, 0x9e, 0x54, 0x51, 0xdc, 0xec, - 0x59, 0xef, 0xc3, 0xce, 0x4d, 0x10, 0x28, 0xb5, 0xd8, 0x68, 0xd8, 0x4a, - 0x49, 0x19, 0x4d, 0xdf, 0x5f, 0xb1, 0x61, 0x01, 0x1e, 0x31, 0x81, 0x13, - 0x2d, 0xd9, 0xc3, 0x83, 0x96, 0xc2, 0x5f, 0x81, 0x4b, 0x08, 0x72, 0xd6, - 0xcf, 0x52, 0xab, 0x52, 0x78, 0xc0, 0xcf, 0x66, 0x7e, 0xd6, 0xa1, 0xf9, - 0xeb, 0x8e, 0x79, 0xeb, 0x31, 0x1d, 0x73, 0xb8, 0xa3, 0x8d, 0x6e, 0xdd, - 0xea, 0xd7, 0xf5, 0x1f, 0x00, 0x00, 0xff, 0xff, 0xca, 0x54, 0xa9, 0x22, - 0x8f, 0x00, 0x00, 0x00, - }, - "conf/gitignore/C", - ) -} - -func conf_gitignore_c_sharp() ([]byte, error) { - return bindata_read([]byte{ - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x09, 0x6e, 0x88, 0x00, 0xff, 0x6c, 0x54, - 0x4d, 0x6f, 0xe3, 0x36, 0x10, 0xbd, 0xf3, 0x57, 0x0c, 0xe0, 0xa2, 0xed, - 0x6a, 0x13, 0x09, 0x28, 0x8a, 0x5e, 0x7a, 0x4a, 0x9c, 0xdd, 0x24, 0xc0, - 0x36, 0x09, 0x6c, 0x6f, 0xb7, 0x80, 0x61, 0x18, 0x14, 0x39, 0x96, 0x18, - 0x53, 0x24, 0xcb, 0x8f, 0xc4, 0xee, 0xa1, 0xbf, 0xbd, 0x43, 0x4a, 0x6e, - 0xb2, 0xbb, 0xb9, 0x3c, 0x51, 0xc3, 0x99, 0xe1, 0xf0, 0xcd, 0xf0, 0xcd, - 0xe0, 0x32, 0x29, 0x2d, 0xe1, 0xa3, 0xd5, 0x12, 0x7d, 0x80, 0x9f, 0x8f, - 0x36, 0x81, 0xe0, 0x06, 0xf6, 0x88, 0x0e, 0x5a, 0x65, 0x40, 0xed, 0x80, - 0x6c, 0x3f, 0x49, 0xd0, 0x6a, 0x8f, 0x67, 0x10, 0x2d, 0x84, 0x68, 0x3d, - 0x82, 0xd4, 0x3a, 0x00, 0x37, 0x12, 0x9c, 0x6c, 0xc3, 0x3b, 0xb6, 0xbe, - 0x6c, 0x37, 0xca, 0x34, 0x6c, 0x7d, 0x6f, 0x37, 0xed, 0x63, 0xc3, 0xd8, - 0x0c, 0x86, 0x10, 0x31, 0x44, 0x28, 0xe0, 0x31, 0x24, 0x1d, 0x03, 0x5b, - 0xd1, 0xcf, 0x62, 0x5a, 0xb3, 0xd9, 0x0c, 0x6e, 0x3b, 0x93, 0x93, 0xfd, - 0xa9, 0x42, 0xe2, 0x1a, 0x96, 0x31, 0x49, 0x65, 0x29, 0x62, 0x70, 0xd6, - 0x73, 0x7f, 0x84, 0x9d, 0xd2, 0x18, 0xce, 0xa0, 0x2d, 0x35, 0x4e, 0x39, - 0xce, 0xf2, 0xa9, 0x39, 0xb6, 0x6c, 0x42, 0x87, 0x06, 0x3d, 0x8f, 0x28, - 0xa1, 0x3d, 0x82, 0xb3, 0x2e, 0x69, 0xee, 0xbf, 0xc9, 0xc7, 0xa5, 0x3c, - 0xb7, 0x26, 0xd4, 0xb9, 0xa8, 0xcf, 0x01, 0xfd, 0x79, 0x70, 0x28, 0xd4, - 0x4e, 0x89, 0x31, 0x05, 0xab, 0xea, 0x90, 0x2c, 0x61, 0xa2, 0xbd, 0xfc, - 0xa3, 0x4d, 0x2d, 0xad, 0x08, 0x91, 0xb2, 0xe6, 0x2a, 0x27, 0x8a, 0x4e, - 0x57, 0x58, 0x5f, 0xc9, 0x0d, 0xb6, 0xa9, 0xa3, 0xbb, 0x2e, 0xfc, 0x06, - 0x35, 0xf2, 0x80, 0x0d, 0x3b, 0xfc, 0xf6, 0x6b, 0xc3, 0xaa, 0xad, 0xaa, - 0x05, 0xa1, 0xcb, 0x58, 0x2b, 0xbd, 0x27, 0x1c, 0x30, 0x72, 0xfa, 0xd8, - 0xf6, 0x91, 0xd0, 0x89, 0x3e, 0xa3, 0x6c, 0x33, 0x76, 0xa2, 0xa0, 0x24, - 0xf4, 0xc1, 0xe5, 0x83, 0xdb, 0x7c, 0x7c, 0xd4, 0x6d, 0x41, 0x55, 0x30, - 0xfb, 0xc7, 0x21, 0xef, 0x6a, 0xdb, 0x11, 0x3e, 0x05, 0x17, 0x84, 0x28, - 0x8b, 0x90, 0x17, 0x75, 0xe1, 0xa6, 0x94, 0x39, 0x5d, 0x7a, 0xfe, 0xfe, - 0x3d, 0x75, 0x50, 0xf4, 0x38, 0xdd, 0x4e, 0xd1, 0xa1, 0x54, 0x5a, 0xcd, - 0x5d, 0xbe, 0xa9, 0x11, 0x39, 0xbb, 0x75, 0x68, 0x82, 0xdc, 0xe5, 0x33, - 0x09, 0x5f, 0x62, 0x27, 0xc2, 0x9c, 0xb7, 0x39, 0x36, 0x57, 0xe3, 0x02, - 0x86, 0x30, 0x9e, 0x3b, 0xe2, 0x21, 0xbb, 0x5f, 0x27, 0x25, 0xb9, 0x11, - 0x08, 0x17, 0x29, 0xda, 0x81, 0x47, 0x65, 0x0d, 0xac, 0xac, 0xd5, 0x7b, - 0x15, 0xc9, 0xab, 0x73, 0xcb, 0xcc, 0x5d, 0x76, 0x5c, 0xe0, 0xb2, 0xe7, - 0xde, 0xa1, 0x07, 0x45, 0xd3, 0x02, 0xf5, 0xdd, 0x87, 0x15, 0x08, 0x2b, - 0x95, 0xe9, 0x4a, 0x57, 0x94, 0x61, 0xdb, 0xff, 0x5d, 0xaa, 0x1c, 0x70, - 0x37, 0xf7, 0xc9, 0x14, 0x96, 0x8c, 0x28, 0xab, 0x8a, 0xd5, 0xd5, 0xb4, - 0x22, 0x0a, 0x04, 0xd7, 0xf5, 0x61, 0xd0, 0xd9, 0xf3, 0xd6, 0x50, 0x87, - 0x68, 0x08, 0x7b, 0x85, 0xd4, 0x1d, 0x9b, 0xa2, 0x4b, 0x11, 0x76, 0x65, - 0x8e, 0x81, 0xad, 0x3f, 0xe0, 0xe6, 0xe0, 0x7c, 0xae, 0x9d, 0x5c, 0xaf, - 0xac, 0x78, 0xf0, 0xf6, 0x11, 0x45, 0x1c, 0xcb, 0xa0, 0xee, 0xa6, 0x01, - 0x4d, 0x1c, 0x0b, 0x9f, 0x26, 0xc8, 0xfa, 0x53, 0x49, 0x2f, 0xee, 0x4d, - 0x61, 0xb7, 0x47, 0xed, 0x9a, 0xd7, 0xd6, 0x9b, 0x6c, 0xa8, 0xea, 0x9b, - 0xc3, 0xea, 0x4d, 0xeb, 0xfc, 0x0d, 0x6b, 0xdf, 0x8b, 0x37, 0xad, 0xfb, - 0x37, 0xad, 0xee, 0x3b, 0xeb, 0x4d, 0x1c, 0xf4, 0x2f, 0xdf, 0x59, 0xfb, - 0x38, 0x72, 0x31, 0xd7, 0x4a, 0xec, 0xcf, 0xef, 0x73, 0x47, 0xa4, 0xf2, - 0xb4, 0x6d, 0xfd, 0x91, 0xb9, 0xd4, 0x6a, 0x15, 0xfa, 0xbc, 0xff, 0x30, - 0x2e, 0xe1, 0x0b, 0xb6, 0x70, 0x5f, 0x98, 0x22, 0x82, 0x27, 0xe3, 0x89, - 0xcf, 0xbb, 0x74, 0x8d, 0x11, 0x1e, 0xb8, 0xd8, 0xf3, 0x8e, 0xde, 0xd5, - 0xd5, 0x4b, 0x9e, 0xc9, 0x94, 0x9d, 0xbe, 0x28, 0x23, 0xed, 0x73, 0x80, - 0x8b, 0x7f, 0x12, 0x3d, 0xdb, 0xf1, 0x61, 0x4c, 0x09, 0x45, 0x38, 0x50, - 0xd2, 0x42, 0x58, 0x2d, 0x82, 0xc4, 0xdd, 0x6b, 0xff, 0x65, 0xd1, 0x0c, - 0xee, 0x1c, 0x4c, 0xd9, 0x5e, 0xd5, 0x79, 0xe1, 0xdc, 0xe9, 0xd4, 0xa2, - 0x1b, 0xf7, 0xb1, 0x27, 0x29, 0x9a, 0x14, 0x65, 0x12, 0x14, 0x16, 0xfe, - 0xd6, 0x5f, 0x89, 0xc7, 0x7a, 0x15, 0x37, 0xf4, 0x5b, 0x9e, 0x60, 0xb6, - 0x54, 0x74, 0xf6, 0x3c, 0x4f, 0x3d, 0x23, 0x2e, 0xa8, 0xb5, 0x97, 0x39, - 0x74, 0x19, 0x36, 0xf1, 0xa8, 0x71, 0x3d, 0x17, 0x1b, 0xeb, 0xea, 0x8a, - 0xfd, 0xfb, 0x43, 0x76, 0x93, 0xed, 0x20, 0x35, 0xbb, 0x3e, 0xe9, 0xc6, - 0x76, 0x6e, 0x25, 0xc2, 0x8c, 0x7a, 0x4f, 0x1a, 0xb2, 0xa3, 0x29, 0x58, - 0xdc, 0x5e, 0x34, 0x4b, 0xa5, 0x9f, 0xd0, 0x6b, 0xd5, 0xf5, 0x31, 0xbf, - 0x86, 0xcc, 0xf8, 0x28, 0x05, 0x54, 0x68, 0x72, 0xf0, 0x23, 0xa9, 0x01, - 0x49, 0x54, 0x9c, 0x34, 0x68, 0xe7, 0xed, 0x40, 0x63, 0x6d, 0x28, 0x24, - 0x96, 0xd1, 0x36, 0x40, 0x73, 0x78, 0x0a, 0x2c, 0x4e, 0x59, 0x38, 0x39, - 0x18, 0x7c, 0xa6, 0x57, 0xf5, 0xed, 0x73, 0xa3, 0xb0, 0x40, 0x83, 0x58, - 0x9f, 0xb2, 0x8f, 0x49, 0x39, 0x11, 0x66, 0x6c, 0xa4, 0x18, 0xa4, 0xca, - 0x48, 0x04, 0x51, 0x70, 0x52, 0x28, 0x78, 0x46, 0xe8, 0xf9, 0x13, 0x42, - 0xa7, 0x22, 0xfc, 0x7e, 0xfe, 0x8e, 0x6d, 0x3f, 0xbb, 0xce, 0x73, 0x89, - 0x8b, 0x52, 0xd1, 0xf6, 0x63, 0x0e, 0x6e, 0xd8, 0x98, 0xaa, 0x6a, 0xd8, - 0xb4, 0xfb, 0xc9, 0x76, 0x55, 0xfd, 0xd7, 0x1f, 0x9f, 0xfe, 0x0b, 0x00, - 0x00, 0xff, 0xff, 0xfe, 0xac, 0xdb, 0x69, 0xf1, 0x05, 0x00, 0x00, - }, - "conf/gitignore/C Sharp", - ) -} - -func conf_gitignore_c_() ([]byte, error) { - return bindata_read([]byte{ - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x09, 0x6e, 0x88, 0x00, 0xff, 0x52, 0x56, - 0x70, 0xce, 0xcf, 0x2d, 0xc8, 0xcc, 0x49, 0x4d, 0x51, 0xf0, 0x4f, 0xca, - 0x4a, 0x4d, 0x2e, 0x51, 0x48, 0x03, 0x72, 0x8a, 0xb9, 0xb4, 0xf4, 0x8a, - 0x73, 0xf2, 0x81, 0x24, 0x98, 0xc8, 0xe7, 0xe2, 0x42, 0x52, 0xe7, 0x52, - 0x99, 0x97, 0x98, 0x9b, 0x99, 0xac, 0x90, 0x93, 0x99, 0x54, 0x94, 0x58, - 0x94, 0x09, 0x51, 0x0c, 0x52, 0x96, 0x52, 0x09, 0x14, 0x42, 0x51, 0x1a, - 0x5c, 0x92, 0x58, 0x82, 0xa6, 0x32, 0x27, 0x31, 0x13, 0x4c, 0x02, 0x89, - 0x44, 0x2e, 0x40, 0x00, 0x00, 0x00, 0xff, 0xff, 0xa4, 0xe6, 0x21, 0x26, - 0x7e, 0x00, 0x00, 0x00, - }, - "conf/gitignore/C++", - ) -} - -func conf_gitignore_google_go() ([]byte, error) { - return bindata_read([]byte{ - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x09, 0x6e, 0x88, 0x00, 0xff, 0x3c, 0x8e, - 0x41, 0x4b, 0xc4, 0x30, 0x10, 0x85, 0xef, 0xf3, 0x2b, 0x06, 0xf6, 0xa2, - 0x45, 0x22, 0x0a, 0x8a, 0x57, 0x51, 0xbc, 0x7a, 0xd8, 0xa3, 0x48, 0x49, - 0xd3, 0x69, 0x77, 0x96, 0x36, 0x13, 0x33, 0x53, 0xe9, 0xfe, 0x7b, 0xa7, - 0xae, 0xee, 0xe1, 0xf1, 0xde, 0x4b, 0x5e, 0x3e, 0xb2, 0xc3, 0x17, 0x99, - 0x0b, 0x4f, 0xd4, 0xe3, 0x7b, 0x77, 0xa4, 0x64, 0x38, 0x78, 0xd1, 0x1b, - 0xdc, 0x5b, 0x34, 0x4e, 0x18, 0x73, 0x8f, 0xaf, 0xa7, 0x1c, 0x67, 0xcf, - 0x13, 0x77, 0x8a, 0x57, 0xfb, 0x43, 0xac, 0x97, 0xb5, 0x5e, 0x43, 0x13, - 0xc4, 0x15, 0x5d, 0x2a, 0x00, 0x3b, 0x7c, 0x93, 0xa9, 0xa7, 0xaa, 0xd0, - 0x4a, 0x77, 0x84, 0xd6, 0x48, 0x6d, 0x3b, 0x7d, 0xae, 0xe9, 0xc0, 0xe6, - 0x2f, 0x96, 0x4a, 0xa8, 0x85, 0x12, 0x0f, 0x4e, 0xa4, 0xd5, 0x28, 0x2b, - 0x4b, 0xd6, 0xdb, 0x52, 0x69, 0xe0, 0x95, 0xd4, 0x39, 0x1f, 0x0f, 0x8f, - 0x4f, 0xdf, 0x5f, 0x9f, 0xf0, 0xe7, 0x41, 0x16, 0x47, 0x34, 0x21, 0x8d, - 0x72, 0x17, 0x46, 0x39, 0xa7, 0xfb, 0x90, 0xa0, 0x75, 0x6f, 0x7b, 0x1a, - 0x96, 0xfc, 0x5f, 0x46, 0xb1, 0x53, 0x21, 0xdd, 0x56, 0xbf, 0x9d, 0xd6, - 0x22, 0xd5, 0x42, 0x03, 0xe7, 0x8f, 0xcc, 0x91, 0xf3, 0x76, 0xe7, 0x08, - 0x5a, 0xe9, 0x27, 0x00, 0x00, 0xff, 0xff, 0x3c, 0xab, 0x59, 0x6f, 0xfb, - 0x00, 0x00, 0x00, - }, - "conf/gitignore/Google Go", - ) -} - -func conf_gitignore_java() ([]byte, error) { - return bindata_read([]byte{ - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x09, 0x6e, 0x88, 0x00, 0xff, 0x1c, 0xcb, - 0xb1, 0x6a, 0xc3, 0x30, 0x10, 0xc6, 0xf1, 0x5d, 0x4f, 0x71, 0xe0, 0xa5, - 0x35, 0x45, 0x82, 0x8e, 0xdd, 0xdb, 0xc1, 0x60, 0xe8, 0xd0, 0xdd, 0x5c, - 0xe5, 0x8b, 0x25, 0xe7, 0xe4, 0x13, 0x3a, 0xc5, 0xca, 0xe3, 0x47, 0xc9, - 0xf2, 0x1f, 0x3e, 0x7e, 0xdf, 0x68, 0x3d, 0xa3, 0xaa, 0x31, 0x03, 0xcc, - 0xf2, 0x1f, 0x99, 0xe0, 0x4f, 0x84, 0x15, 0x2e, 0x52, 0x60, 0xc2, 0x13, - 0xe1, 0x6d, 0xfa, 0x9c, 0xbf, 0xdf, 0x8d, 0x4d, 0x75, 0xb7, 0x35, 0x65, - 0xf7, 0x94, 0xbf, 0xe8, 0xaf, 0xb8, 0x11, 0xfc, 0x74, 0xaf, 0x30, 0x98, - 0xd1, 0xee, 0x58, 0x7a, 0xdb, 0xab, 0xd4, 0xdb, 0xd1, 0x19, 0x4b, 0xbd, - 0x21, 0x43, 0x42, 0x1f, 0xe2, 0x41, 0xe0, 0x0b, 0x6a, 0x00, 0x96, 0x4d, - 0x3f, 0x40, 0x89, 0x20, 0xd4, 0x9a, 0xbf, 0x9c, 0x6b, 0xad, 0xf5, 0xf7, - 0x89, 0xd6, 0x4b, 0x72, 0x74, 0xb8, 0x55, 0xda, 0xc1, 0x82, 0xab, 0x0b, - 0xc4, 0xd9, 0x51, 0x29, 0x52, 0x96, 0x20, 0x55, 0xb3, 0x54, 0x7b, 0x4f, - 0x6c, 0x82, 0x2e, 0x7d, 0x5c, 0x72, 0x5c, 0xc7, 0x47, 0x00, 0x00, 0x00, - 0xff, 0xff, 0xe7, 0xd6, 0xf7, 0xa4, 0xbc, 0x00, 0x00, 0x00, - }, - "conf/gitignore/Java", - ) -} - -func conf_gitignore_objective_c() ([]byte, error) { - return bindata_read([]byte{ - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x09, 0x6e, 0x88, 0x00, 0xff, 0x44, 0x90, - 0xb1, 0x4e, 0xc4, 0x30, 0x10, 0x44, 0xfb, 0xfb, 0x8a, 0x91, 0xd2, 0xe2, - 0xa4, 0xbf, 0x86, 0x82, 0x86, 0x92, 0x8e, 0xda, 0xb2, 0xf7, 0x9c, 0x45, - 0x89, 0x37, 0x5a, 0xaf, 0x41, 0xf7, 0xf7, 0xac, 0x13, 0x09, 0x9a, 0x28, - 0xd2, 0x8c, 0xe7, 0x3d, 0x7b, 0xc2, 0x9b, 0x24, 0x89, 0x1f, 0x92, 0xdb, - 0x6d, 0xba, 0x4d, 0xf8, 0x24, 0x28, 0x25, 0xd9, 0x77, 0xaa, 0x19, 0xb1, - 0x44, 0xae, 0xcd, 0x10, 0x73, 0xe6, 0x5a, 0x60, 0x2b, 0x61, 0x14, 0x91, - 0xd9, 0x3b, 0x26, 0xfa, 0x84, 0x09, 0x9e, 0xd2, 0x15, 0x73, 0x61, 0xe3, - 0x52, 0x45, 0x69, 0xc6, 0xbb, 0xfc, 0xd0, 0x37, 0xa9, 0x8f, 0x79, 0x84, - 0xb6, 0x4a, 0xdf, 0x32, 0xbe, 0x7a, 0x2e, 0x84, 0x87, 0xe8, 0xd9, 0x6f, - 0xb4, 0x3d, 0x5e, 0xce, 0xbd, 0x43, 0xa5, 0x21, 0x3a, 0x2b, 0x49, 0xf5, - 0x1f, 0x25, 0x38, 0xd9, 0x58, 0x2a, 0x39, 0xde, 0xee, 0x3e, 0xb2, 0x9a, - 0x1d, 0xf7, 0x65, 0x29, 0x9d, 0x33, 0xb5, 0x39, 0x0d, 0xdb, 0xc3, 0x25, - 0x66, 0xd1, 0xb2, 0xf4, 0xe6, 0x5e, 0xd7, 0x37, 0xfc, 0x27, 0xab, 0xed, - 0xdb, 0x74, 0x71, 0x03, 0x87, 0x4b, 0x2b, 0x38, 0x2c, 0x8c, 0x34, 0xfc, - 0xc9, 0x07, 0xae, 0xa1, 0xb9, 0x4c, 0x22, 0x3f, 0x5b, 0x4d, 0x65, 0x7b, - 0x3d, 0x9f, 0x60, 0x5c, 0x71, 0xf9, 0x0d, 0x00, 0x00, 0xff, 0xff, 0xa9, - 0x17, 0x4f, 0x2a, 0x18, 0x01, 0x00, 0x00, - }, - "conf/gitignore/Objective-C", - ) -} - -func conf_gitignore_python() ([]byte, error) { - return bindata_read([]byte{ - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x09, 0x6e, 0x88, 0x00, 0xff, 0x34, 0x8f, - 0xb1, 0x4e, 0xc4, 0x30, 0x0c, 0x86, 0x77, 0x3f, 0x45, 0x24, 0xb6, 0x93, - 0xce, 0x2c, 0x88, 0x17, 0x80, 0x85, 0x01, 0x89, 0x01, 0x26, 0x84, 0xaa, - 0x34, 0xf1, 0x95, 0x40, 0x1a, 0x47, 0xb6, 0xa9, 0xda, 0xb7, 0x27, 0xe9, - 0xf5, 0x86, 0x44, 0xf6, 0xf7, 0xff, 0x89, 0x7f, 0x9f, 0xb0, 0x6e, 0x9f, - 0x81, 0xe3, 0x17, 0xc0, 0x9d, 0x7b, 0x72, 0xb4, 0x1a, 0x15, 0x4d, 0x5c, - 0x14, 0x4e, 0xa8, 0xdc, 0xe1, 0x9b, 0x0f, 0xbf, 0x7e, 0xa2, 0x0e, 0x68, - 0x9a, 0xae, 0xf7, 0x39, 0x95, 0x0b, 0x43, 0x4c, 0x6a, 0x30, 0xfe, 0xa5, - 0x1c, 0xa1, 0x31, 0x85, 0xea, 0xc5, 0x14, 0xc6, 0x54, 0x60, 0xf1, 0x02, - 0xba, 0xcb, 0x91, 0x16, 0xca, 0x5c, 0xcf, 0xbb, 0x01, 0x53, 0x51, 0xf3, - 0x39, 0x53, 0xc4, 0x70, 0x99, 0x20, 0xa7, 0xb1, 0x9f, 0xc7, 0x07, 0x18, - 0x86, 0xba, 0x05, 0x1f, 0xbe, 0x69, 0x18, 0xfa, 0xc8, 0x97, 0xc3, 0x26, - 0x2e, 0x73, 0xff, 0x37, 0xd5, 0x73, 0x2b, 0xd0, 0x56, 0xeb, 0xea, 0x47, - 0x49, 0xe6, 0x8c, 0xd4, 0xdc, 0xbd, 0x0b, 0xbc, 0x90, 0xb4, 0x74, 0x4e, - 0xa8, 0x72, 0x9f, 0x8e, 0x37, 0x02, 0x68, 0xbc, 0x42, 0x61, 0xa5, 0x6e, - 0x55, 0x5c, 0xe7, 0xdc, 0x1f, 0xbf, 0x8b, 0x2f, 0x9a, 0xbd, 0x1d, 0x2b, - 0xce, 0xfb, 0x8a, 0xaf, 0xe2, 0x9e, 0xaf, 0x39, 0x49, 0x00, 0x67, 0xc1, - 0x78, 0xeb, 0xf6, 0x9c, 0x58, 0x85, 0x7f, 0x28, 0x58, 0x2b, 0xb6, 0xa6, - 0x1c, 0xdd, 0x7f, 0x00, 0x00, 0x00, 0xff, 0xff, 0x02, 0xf0, 0xe2, 0xc0, - 0x3a, 0x01, 0x00, 0x00, - }, - "conf/gitignore/Python", - ) -} - -func conf_gitignore_ruby() ([]byte, error) { - return bindata_read([]byte{ - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x09, 0x6e, 0x88, 0x00, 0xff, 0x2c, 0x8c, - 0xbd, 0xaa, 0xc3, 0x30, 0x0c, 0x46, 0x77, 0x3d, 0x45, 0xe0, 0x6e, 0x19, - 0xec, 0x67, 0xb8, 0x50, 0x0a, 0x5d, 0xbb, 0x75, 0x0a, 0xb2, 0xac, 0x18, - 0x53, 0xff, 0x21, 0xa9, 0x85, 0xbe, 0x7d, 0x4d, 0xd2, 0xe1, 0x20, 0xf1, - 0x71, 0x38, 0xab, 0x4b, 0x5c, 0x61, 0x75, 0x12, 0x08, 0x5c, 0x78, 0xb5, - 0x58, 0x18, 0x1c, 0xf5, 0xb6, 0xe7, 0x04, 0xd4, 0xdf, 0x2c, 0x98, 0x18, - 0x6e, 0x4d, 0x0d, 0x4b, 0xe1, 0x78, 0xcd, 0x85, 0x15, 0x4a, 0x0e, 0xfe, - 0x54, 0xc5, 0x57, 0x6c, 0x30, 0x9e, 0x09, 0x24, 0x76, 0x02, 0x1d, 0x4c, - 0x5e, 0x78, 0x74, 0x31, 0x05, 0x63, 0x35, 0x6f, 0x75, 0x9c, 0xcf, 0x2c, - 0x69, 0xee, 0x6d, 0x3b, 0x86, 0x09, 0xfc, 0x2d, 0x8f, 0xff, 0xfb, 0x65, - 0x41, 0xb1, 0xbc, 0x23, 0x4d, 0xdf, 0x7d, 0xf0, 0x88, 0x6c, 0xbf, 0x3b, - 0xf1, 0xdf, 0x00, 0x00, 0x00, 0xff, 0xff, 0xb1, 0xca, 0xf7, 0x91, 0x9e, - 0x00, 0x00, 0x00, - }, - "conf/gitignore/Ruby", - ) -} - -func conf_license_affero_gpl() ([]byte, error) { - return bindata_read([]byte{ - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x09, 0x6e, 0x88, 0x00, 0xff, 0xc4, 0xbd, - 0x5b, 0x73, 0xdb, 0x46, 0x96, 0x38, 0xfe, 0xde, 0x9f, 0xa2, 0x8b, 0x2f, - 0x91, 0xaa, 0x68, 0x25, 0x4e, 0x66, 0x92, 0x9d, 0x64, 0x2a, 0x55, 0xb4, - 0x44, 0xc7, 0xac, 0x91, 0x25, 0xad, 0x24, 0xc7, 0xe3, 0x47, 0x90, 0x68, - 0x8a, 0x58, 0x83, 0x00, 0x17, 0x0d, 0x48, 0xe6, 0x7e, 0xfa, 0xff, 0xb9, - 0xf6, 0x05, 0x24, 0xed, 0xfc, 0xe7, 0xe5, 0x97, 0xda, 0xad, 0xb1, 0x24, - 0xa0, 0xfb, 0xf4, 0xe9, 0x73, 0xbf, 0xe1, 0x8f, 0x9b, 0x0f, 0x76, 0xf6, - 0xf6, 0xed, 0xfc, 0xfe, 0xd6, 0xfe, 0x31, 0xbf, 0x99, 0xdf, 0xcf, 0xae, - 0xed, 0xdd, 0x87, 0x37, 0xd7, 0x8b, 0x4b, 0x0b, 0xff, 0x3f, 0xbf, 0x79, - 0x98, 0x1b, 0x7b, 0xfc, 0xbf, 0x3f, 0x5d, 0xe7, 0xab, 0xb6, 0xb1, 0x3f, - 0x4d, 0xed, 0xeb, 0x7f, 0xd8, 0x9b, 0xf6, 0xd9, 0x6d, 0x97, 0xae, 0xb3, - 0x3f, 0xfe, 0xf0, 0xc3, 0x2f, 0xc6, 0xd8, 0xcb, 0x76, 0xb7, 0xef, 0xaa, - 0xa7, 0x4d, 0x6f, 0xcf, 0x2e, 0xcf, 0xe9, 0x97, 0xf6, 0x6d, 0xe7, 0x9c, - 0x7d, 0x68, 0xd7, 0xfd, 0x4b, 0xd1, 0x39, 0xfb, 0xb6, 0x1d, 0x9a, 0xb2, - 0xe8, 0x61, 0x85, 0xa9, 0x5d, 0x34, 0xab, 0x0b, 0xfb, 0xcf, 0x4d, 0xdf, - 0xef, 0x7e, 0xfd, 0xfe, 0xfb, 0xb5, 0x5f, 0x5f, 0xb4, 0xdd, 0xd3, 0xf7, - 0xbf, 0x1b, 0x3b, 0x7f, 0x76, 0xdd, 0xbe, 0x6d, 0x9c, 0xad, 0xbc, 0xdd, - 0xb9, 0x6e, 0x5b, 0xf5, 0xbd, 0x2b, 0x6d, 0xdf, 0xda, 0x15, 0xac, 0x6e, - 0x8b, 0xa6, 0xb4, 0x65, 0xe5, 0xfb, 0xae, 0x5a, 0x0e, 0xbd, 0xb3, 0xf0, - 0xec, 0x12, 0xd6, 0xdb, 0xe2, 0x1f, 0x2b, 0xe7, 0x8d, 0x6d, 0xd7, 0xb6, - 0xdf, 0xc0, 0x9b, 0x75, 0xb5, 0x72, 0x8d, 0x77, 0xb6, 0x6c, 0x57, 0xc3, - 0xd6, 0x35, 0xfd, 0xd4, 0xc2, 0xf3, 0x76, 0xb5, 0x29, 0x9a, 0xa7, 0xaa, - 0x79, 0xb2, 0x55, 0x8f, 0xcb, 0x37, 0x6d, 0x6f, 0x8b, 0xba, 0x6e, 0x5f, - 0x5c, 0x79, 0x61, 0x4e, 0x1d, 0x99, 0xfe, 0xbb, 0xeb, 0x5c, 0xb1, 0x5d, - 0xd6, 0x0e, 0x9f, 0x7a, 0xdc, 0x38, 0x4b, 0x08, 0x5c, 0xaf, 0x5d, 0xd7, - 0xda, 0x3f, 0x5c, 0xe3, 0xba, 0xa2, 0xb6, 0x77, 0xc3, 0x12, 0x36, 0xb5, - 0xd7, 0xb2, 0x31, 0x2c, 0x5f, 0xd8, 0x35, 0x9c, 0x7e, 0x4a, 0x80, 0xd7, - 0x6e, 0xdd, 0x07, 0xa0, 0xd6, 0x6d, 0x67, 0xbc, 0xe2, 0x04, 0x4f, 0xd4, - 0xf6, 0x1b, 0xc0, 0xe2, 0xe7, 0xaa, 0x29, 0x3d, 0x9e, 0xe0, 0xa5, 0xed, - 0x3e, 0xfb, 0xa9, 0xf5, 0x3b, 0xb7, 0xaa, 0xd6, 0xd5, 0x0a, 0x40, 0xdc, - 0xdb, 0xd2, 0xf9, 0xea, 0xa9, 0x61, 0x4c, 0xc0, 0x22, 0x43, 0xe7, 0xcc, - 0xaa, 0x6d, 0x01, 0x41, 0x84, 0x4e, 0xfb, 0x52, 0xf5, 0x1b, 0x38, 0xb9, - 0x83, 0xcd, 0xb6, 0xdb, 0xa1, 0xa9, 0xfa, 0xbd, 0xad, 0x1a, 0xfe, 0x45, - 0x01, 0x3b, 0xc2, 0xa2, 0x8d, 0xeb, 0x71, 0x5d, 0xeb, 0x5d, 0x07, 0x58, - 0xb3, 0xba, 0xff, 0x85, 0x1e, 0x49, 0x80, 0xf3, 0x08, 0x9d, 0xdd, 0xb6, - 0xbe, 0xb7, 0x47, 0x40, 0xdc, 0x75, 0xc5, 0xaa, 0x47, 0x88, 0x18, 0x46, - 0x8b, 0x7f, 0x55, 0xc8, 0x0c, 0x40, 0xd6, 0x17, 0x9f, 0xe1, 0xf1, 0x97, - 0x62, 0x6f, 0xf7, 0xed, 0xd0, 0xd1, 0xf9, 0xcb, 0x76, 0x8b, 0x30, 0xfb, - 0x8d, 0xae, 0x44, 0x97, 0xe0, 0x08, 0x36, 0x5a, 0xe4, 0xc2, 0xda, 0x37, - 0x7b, 0x80, 0xbb, 0xe9, 0xbb, 0xc2, 0xf7, 0x53, 0x83, 0x2f, 0x1e, 0x47, - 0x2a, 0xef, 0x57, 0x35, 0xbd, 0x6b, 0x4a, 0xc6, 0xc4, 0xd3, 0x50, 0x74, - 0x05, 0xfc, 0xec, 0xc6, 0xfb, 0x99, 0x83, 0xfd, 0x00, 0x8b, 0x48, 0x2e, - 0x48, 0xbe, 0x84, 0xe4, 0x02, 0x0e, 0xd3, 0x3e, 0x75, 0xc5, 0xf6, 0xd5, - 0x2b, 0x58, 0x68, 0x8b, 0x80, 0x23, 0x56, 0x91, 0x34, 0x3a, 0xb7, 0x2d, - 0x2a, 0x78, 0x0a, 0x97, 0x8b, 0x17, 0x85, 0x78, 0xc1, 0x45, 0xaa, 0xde, - 0xdb, 0x01, 0xb0, 0xe8, 0x09, 0x75, 0x1f, 0x37, 0x0e, 0xb0, 0xef, 0xf0, - 0xb2, 0x8a, 0xcf, 0xb8, 0x2e, 0xbe, 0x14, 0x50, 0x37, 0xc5, 0x3f, 0xe1, - 0xcb, 0x9d, 0x03, 0x62, 0xe9, 0x90, 0xf4, 0x60, 0x33, 0x01, 0x73, 0x8a, - 0x04, 0x68, 0x76, 0x1d, 0x1c, 0x0e, 0x70, 0x70, 0xfb, 0x8d, 0x63, 0xa7, - 0x04, 0x10, 0xa1, 0xed, 0x37, 0x45, 0x8f, 0x67, 0x37, 0x9b, 0xe2, 0x99, - 0x71, 0x9a, 0xe0, 0x3c, 0x61, 0x14, 0xe6, 0x8f, 0x03, 0xf8, 0xec, 0x99, - 0x60, 0xa8, 0x7b, 0x62, 0xb2, 0x84, 0x15, 0xb6, 0xb6, 0x5a, 0xe3, 0x92, - 0x40, 0x53, 0x7e, 0x73, 0x3e, 0x0d, 0x5b, 0xc0, 0x19, 0x56, 0xae, 0x7a, - 0xc6, 0x97, 0x87, 0x6e, 0x85, 0x4b, 0x96, 0x40, 0x58, 0x1d, 0x10, 0x58, - 0x63, 0x9f, 0x5c, 0x4f, 0x3c, 0x45, 0x2f, 0x9a, 0x17, 0xb8, 0x12, 0xf8, - 0x31, 0x79, 0x15, 0x9f, 0x49, 0xee, 0x3d, 0x6c, 0x0f, 0xaf, 0x03, 0x2a, - 0x2d, 0xc0, 0xb6, 0x62, 0xe8, 0x70, 0x91, 0x06, 0x68, 0xf5, 0xc5, 0x10, - 0x9c, 0x72, 0x45, 0xc0, 0x0c, 0x08, 0x67, 0x58, 0xee, 0x73, 0xd3, 0xbe, - 0x84, 0x75, 0xcb, 0x16, 0xd7, 0xf4, 0xb8, 0x32, 0xe0, 0x97, 0x6f, 0xe5, - 0xca, 0x3d, 0xbb, 0x1a, 0xb9, 0xc3, 0xf3, 0x4b, 0xb8, 0xc9, 0xd7, 0xe8, - 0x0a, 0xf6, 0xe9, 0xdd, 0xaa, 0x67, 0x2a, 0x22, 0x11, 0xe6, 0x0d, 0xb3, - 0xd4, 0x0b, 0x90, 0x6e, 0xef, 0x76, 0xfe, 0x57, 0x7b, 0xf6, 0xfa, 0xdc, - 0x16, 0x1e, 0x2e, 0xbe, 0x27, 0x8e, 0x66, 0x41, 0xd7, 0x36, 0xd9, 0x81, - 0x18, 0xce, 0xb3, 0x1f, 0xcf, 0xe1, 0x2c, 0x70, 0xe1, 0x06, 0x61, 0x24, - 0x79, 0xa4, 0x62, 0xe1, 0x65, 0x53, 0xad, 0x36, 0xf6, 0x09, 0xd0, 0xe8, - 0xe9, 0x00, 0xb5, 0x7b, 0x02, 0x70, 0x48, 0xce, 0x79, 0x92, 0xac, 0x22, - 0xe8, 0xa6, 0xc9, 0xe5, 0x19, 0x58, 0xf3, 0x7b, 0x62, 0xca, 0xb2, 0x5a, - 0xef, 0xb3, 0xfd, 0xe8, 0xb0, 0x33, 0xe0, 0x69, 0x60, 0x9f, 0xb2, 0xe8, - 0xf6, 0x76, 0x09, 0x07, 0x5c, 0x03, 0x12, 0x01, 0x95, 0x25, 0x90, 0x5c, - 0x53, 0x22, 0xc9, 0x21, 0xd5, 0x12, 0xc5, 0x7e, 0x17, 0xa8, 0xa3, 0x62, - 0xc4, 0x98, 0x6a, 0x0b, 0x47, 0x07, 0x29, 0x0e, 0x22, 0xd2, 0x03, 0x59, - 0x95, 0xc8, 0x5e, 0xf0, 0x7c, 0xef, 0xba, 0xa6, 0x60, 0xf9, 0x1a, 0x18, - 0x06, 0xf7, 0x95, 0xfb, 0x98, 0xe2, 0x4d, 0xc3, 0xcf, 0x7b, 0xa3, 0x34, - 0xf1, 0x52, 0x01, 0x7d, 0xee, 0x40, 0x4a, 0x96, 0xb8, 0x13, 0x48, 0x5b, - 0x80, 0x68, 0x0b, 0xa4, 0xff, 0x5c, 0x54, 0x75, 0x01, 0x82, 0x93, 0xb8, - 0x87, 0x65, 0x48, 0x99, 0xdc, 0x4d, 0x6b, 0xaa, 0x66, 0xd5, 0x76, 0xbb, - 0x16, 0xc4, 0x18, 0x32, 0xc1, 0xfb, 0xa2, 0xd9, 0xa7, 0x0f, 0x1c, 0xd0, - 0x2b, 0xfe, 0xff, 0xc6, 0x15, 0x1d, 0x88, 0x00, 0x60, 0x05, 0x40, 0x8c, - 0x71, 0xb0, 0xc0, 0xd0, 0x15, 0x4f, 0xf0, 0xe3, 0x92, 0x91, 0xd3, 0x39, - 0x3f, 0xd4, 0x3d, 0x1e, 0x3c, 0x91, 0x90, 0xb0, 0xf8, 0x3b, 0x10, 0xf4, - 0x70, 0xa0, 0xe9, 0x48, 0x32, 0x46, 0x0e, 0x07, 0xc8, 0x4b, 0xbc, 0xd1, - 0x5c, 0x54, 0xfa, 0x29, 0x5f, 0x21, 0x2f, 0x0b, 0x48, 0xda, 0xdb, 0x35, - 0x9c, 0x8a, 0x6f, 0x0a, 0xcf, 0xb8, 0x6c, 0x87, 0xfe, 0xc2, 0xa8, 0x5a, - 0x38, 0xa1, 0x0f, 0x58, 0x95, 0x21, 0x8e, 0x3f, 0xd3, 0x95, 0xf0, 0x6d, - 0x56, 0xb0, 0xa1, 0xe0, 0x98, 0x0e, 0x53, 0xbb, 0x9e, 0x00, 0x27, 0x5c, - 0xf3, 0x02, 0xc5, 0x0a, 0x58, 0xc3, 0x23, 0x63, 0xe0, 0x33, 0x2a, 0xbe, - 0x91, 0x38, 0x61, 0x5b, 0x8b, 0x07, 0x02, 0xc8, 0x6a, 0x57, 0x78, 0xd6, - 0x6b, 0xde, 0xa4, 0xec, 0xd9, 0xb7, 0xc9, 0x52, 0x17, 0xff, 0xbf, 0xb4, - 0x57, 0x90, 0x37, 0x99, 0x1a, 0x82, 0x1b, 0x63, 0xed, 0x43, 0xe4, 0x43, - 0xa8, 0xf4, 0x03, 0x50, 0x34, 0xe2, 0x92, 0x10, 0xe5, 0xe2, 0xc1, 0x52, - 0x40, 0x98, 0x1e, 0x7c, 0x24, 0x08, 0x23, 0xa0, 0x05, 0x7d, 0x05, 0x17, - 0xb4, 0x40, 0xd1, 0xfb, 0xbf, 0x43, 0x05, 0x98, 0xa6, 0xbf, 0xf1, 0xe5, - 0x21, 0xe1, 0xa0, 0xb8, 0x1e, 0x29, 0x30, 0x80, 0x04, 0x49, 0xb7, 0x2a, - 0x55, 0xa4, 0x24, 0x42, 0x69, 0x9d, 0x03, 0xa2, 0x18, 0xee, 0x86, 0xa6, - 0x11, 0xec, 0x76, 0x8a, 0x1b, 0x43, 0x8c, 0xc1, 0xaf, 0x80, 0xa0, 0xe0, - 0xc5, 0x2f, 0x08, 0x4f, 0x20, 0xb3, 0x5b, 0x64, 0x69, 0xb9, 0x88, 0x81, - 0xf5, 0xe8, 0xe1, 0xcd, 0x4d, 0xe1, 0x66, 0x4c, 0x21, 0x8f, 0x01, 0x8e, - 0xf8, 0xc6, 0x2a, 0xa4, 0x7a, 0x5e, 0x6e, 0x2a, 0x0c, 0x7f, 0x78, 0xab, - 0x82, 0x04, 0x06, 0xde, 0x7c, 0x0d, 0x78, 0xe6, 0xf4, 0xc6, 0xb6, 0x75, - 0x09, 0x87, 0x17, 0x65, 0x0d, 0xb6, 0x05, 0xdc, 0x0a, 0xea, 0x04, 0x78, - 0xe3, 0xeb, 0x37, 0x8a, 0xd4, 0x45, 0x7b, 0xfb, 0x0d, 0x73, 0x0a, 0x3f, - 0x0e, 0x0a, 0xaa, 0xf0, 0x99, 0x6e, 0x01, 0xc8, 0xda, 0xed, 0x0e, 0x9f, - 0xb3, 0xbe, 0xda, 0xc2, 0x65, 0x75, 0xf6, 0xa9, 0x2d, 0x6a, 0x4f, 0x38, - 0x01, 0xba, 0xa8, 0x3c, 0x9c, 0x15, 0x60, 0x83, 0xb7, 0x41, 0x68, 0x44, - 0x48, 0xc8, 0x98, 0x0a, 0xa8, 0x96, 0x53, 0x28, 0x4c, 0x77, 0xd7, 0x6c, - 0x80, 0xc9, 0xcf, 0x9b, 0xc2, 0x1b, 0x26, 0x5a, 0x64, 0x62, 0x14, 0xf7, - 0xa7, 0x5f, 0x14, 0x91, 0xa9, 0xfc, 0x03, 0xaf, 0xd1, 0x8e, 0x78, 0x8f, - 0x60, 0x4c, 0x3a, 0x54, 0x59, 0xd1, 0xde, 0x0b, 0x24, 0x0e, 0xa2, 0x68, - 0x55, 0xa1, 0x4e, 0x80, 0xd7, 0x3c, 0x9b, 0x01, 0x20, 0x21, 0xab, 0x9e, - 0x84, 0x19, 0xca, 0x22, 0x14, 0xb2, 0xb0, 0x46, 0x22, 0x67, 0x95, 0x07, - 0x19, 0xf3, 0x2b, 0xb6, 0xab, 0xd6, 0x2d, 0xda, 0x87, 0xa7, 0xad, 0xc3, - 0xc7, 0xf9, 0xfd, 0xfb, 0x07, 0x3b, 0xbb, 0xb9, 0xb2, 0x97, 0xb7, 0x37, - 0x57, 0x8b, 0xc7, 0xc5, 0xed, 0xcd, 0x03, 0x3e, 0xfc, 0xc3, 0x05, 0xe8, - 0xa0, 0x75, 0xd5, 0xf0, 0x8e, 0xf4, 0xfe, 0xe4, 0x31, 0x51, 0x04, 0x13, - 0xb6, 0x08, 0x88, 0x02, 0xf4, 0xe8, 0x3f, 0xe9, 0xe1, 0xbf, 0xc9, 0x9f, - 0xbc, 0x5e, 0x30, 0xb7, 0x27, 0x20, 0xb1, 0x3d, 0x58, 0x05, 0xae, 0x80, - 0xc3, 0x05, 0xdd, 0xf4, 0xaa, 0xae, 0xc0, 0x4a, 0xa8, 0x8b, 0x17, 0xd1, - 0x81, 0xc5, 0x6e, 0x47, 0x0c, 0x3c, 0xb2, 0x36, 0x8d, 0x5a, 0x9b, 0xc8, - 0xc6, 0x40, 0x0b, 0xde, 0x6d, 0x2b, 0xc4, 0xd5, 0xb0, 0x42, 0xce, 0xdb, - 0x16, 0xfe, 0x73, 0x00, 0xdf, 0x81, 0x1d, 0x4c, 0xf2, 0x3f, 0x85, 0x1e, - 0x25, 0x76, 0xd8, 0x93, 0x44, 0x3d, 0x71, 0xa9, 0x5c, 0x48, 0xc9, 0x97, - 0x44, 0x12, 0xd4, 0x28, 0xf4, 0xd6, 0xce, 0x0b, 0xd8, 0x4c, 0x1e, 0x61, - 0x5b, 0xb9, 0x2c, 0x81, 0xeb, 0x89, 0x1c, 0xbc, 0x9d, 0x80, 0x66, 0x9c, - 0xc0, 0x53, 0x13, 0x79, 0xc1, 0xf9, 0x09, 0xdd, 0xcc, 0x04, 0x2f, 0x15, - 0x6c, 0x05, 0xd0, 0x55, 0x13, 0x92, 0xc3, 0x4b, 0x54, 0x57, 0x65, 0x05, - 0x42, 0x60, 0x00, 0x0c, 0xa0, 0x35, 0x01, 0x4e, 0x44, 0xd1, 0x54, 0xff, - 0x57, 0x44, 0xb4, 0x3f, 0xb6, 0x76, 0xc2, 0x9a, 0x13, 0x16, 0x61, 0xd8, - 0x18, 0x51, 0xea, 0x52, 0xac, 0x3b, 0xd0, 0x87, 0x68, 0xdb, 0x95, 0xc5, - 0x8e, 0xfc, 0x01, 0xfc, 0x61, 0x07, 0x2a, 0x46, 0xaf, 0x03, 0xdf, 0x31, - 0xa8, 0x16, 0x41, 0xee, 0xfb, 0x0d, 0x09, 0x12, 0x92, 0x52, 0xac, 0x61, - 0xd4, 0x12, 0x88, 0x3a, 0x7c, 0x2a, 0x18, 0x06, 0xac, 0xb3, 0xa2, 0x11, - 0x99, 0x8f, 0xc2, 0xa3, 0x31, 0xee, 0x0b, 0x98, 0xd0, 0xf4, 0x1e, 0x4b, - 0x99, 0x44, 0x5d, 0x11, 0x70, 0x80, 0x0c, 0x61, 0xea, 0x42, 0x00, 0x4f, - 0xa4, 0xc0, 0x44, 0x60, 0x32, 0xa0, 0x02, 0xeb, 0x0a, 0xf5, 0x00, 0xbe, - 0x82, 0xc0, 0xf3, 0xbf, 0x26, 0xcb, 0x82, 0x75, 0xd8, 0x84, 0x36, 0x4e, - 0x9f, 0x12, 0x53, 0x61, 0xb2, 0x02, 0x75, 0xdf, 0xc1, 0x33, 0xf8, 0xbb, - 0x89, 0xa0, 0xc2, 0x55, 0x02, 0x30, 0xe8, 0xc0, 0x26, 0xec, 0x29, 0x97, - 0x9d, 0x2c, 0x4f, 0xab, 0x1b, 0xb1, 0x79, 0xe4, 0xcf, 0x01, 0xc9, 0x20, - 0x8d, 0x77, 0xc5, 0x13, 0xe8, 0xf1, 0x43, 0x3c, 0x97, 0x44, 0x26, 0x64, - 0x9f, 0xb1, 0xa7, 0x02, 0xda, 0x8c, 0xf5, 0x87, 0xe8, 0x31, 0x93, 0x62, - 0xef, 0xa5, 0x1d, 0xea, 0x92, 0x6d, 0x5c, 0x34, 0x91, 0x4a, 0xd0, 0x07, - 0xab, 0x1e, 0x48, 0x17, 0xe0, 0x50, 0x43, 0xa7, 0x82, 0x1f, 0xeb, 0x4a, - 0x0d, 0x0b, 0xb8, 0x9c, 0x35, 0xde, 0x06, 0x99, 0x31, 0x42, 0x70, 0x48, - 0xed, 0xc0, 0xc4, 0xf8, 0x44, 0xbc, 0x23, 0x60, 0x86, 0xa9, 0x75, 0x5f, - 0x56, 0x0e, 0x2e, 0xda, 0x7d, 0x71, 0xab, 0xa1, 0x17, 0x67, 0x10, 0x59, - 0xdf, 0xa0, 0xdc, 0x03, 0x73, 0x0b, 0x89, 0x48, 0x6c, 0x2d, 0xd6, 0xd4, - 0x60, 0xa1, 0x3f, 0x17, 0x6c, 0x43, 0xe3, 0x9d, 0xdd, 0xc9, 0x39, 0x91, - 0x10, 0xc0, 0x7a, 0xa9, 0x07, 0x90, 0x9e, 0x41, 0x9c, 0x98, 0x4c, 0x9c, - 0x9c, 0xd1, 0x61, 0xdb, 0xa8, 0xae, 0x53, 0xd9, 0x02, 0xa6, 0xb5, 0x1a, - 0x03, 0xc1, 0x4a, 0x12, 0x9d, 0xc4, 0x4a, 0x82, 0x8d, 0x49, 0xd4, 0xb0, - 0x68, 0x66, 0x80, 0x95, 0x03, 0x1e, 0x12, 0x19, 0xf1, 0x74, 0x59, 0xe8, - 0x88, 0x3d, 0x83, 0x78, 0x41, 0xa5, 0xea, 0xc1, 0xcd, 0xa8, 0xeb, 0x70, - 0x13, 0x80, 0xa3, 0x67, 0x37, 0x26, 0x77, 0xe4, 0x53, 0xe4, 0x79, 0xa4, - 0xa0, 0x5d, 0x72, 0x04, 0x92, 0x0d, 0xae, 0xc1, 0xed, 0x65, 0x69, 0x83, - 0xc4, 0x8f, 0xeb, 0xaa, 0xa7, 0xd1, 0x76, 0xc1, 0xf6, 0x67, 0x3f, 0x02, - 0x2d, 0x35, 0x27, 0xae, 0x18, 0x79, 0x84, 0xea, 0x81, 0x16, 0x64, 0x67, - 0xc2, 0x9a, 0x5d, 0x3b, 0x3c, 0x6d, 0x40, 0x51, 0x04, 0x9c, 0x8a, 0xf6, - 0xe6, 0x1b, 0x07, 0x65, 0x61, 0xc1, 0xdb, 0x6b, 0xfc, 0xda, 0x89, 0x72, - 0x67, 0x9b, 0x57, 0x7c, 0x72, 0x86, 0x1f, 0x30, 0xa3, 0x4a, 0x2f, 0xec, - 0xf3, 0xec, 0x78, 0x03, 0xfa, 0xc5, 0xba, 0x00, 0x85, 0x0f, 0xf8, 0xde, - 0xd5, 0xc5, 0x1e, 0x84, 0xc6, 0x6c, 0x87, 0xc7, 0xea, 0x2a, 0xbc, 0xaa, - 0x6b, 0x32, 0xab, 0x6f, 0x5a, 0xf0, 0x55, 0x41, 0x78, 0xa8, 0xad, 0xe1, - 0xbe, 0xf4, 0x48, 0x20, 0x74, 0x62, 0x72, 0x34, 0xe4, 0xf2, 0x0a, 0xde, - 0xb1, 0x41, 0xc9, 0x42, 0x38, 0x87, 0x85, 0xb6, 0x55, 0x03, 0x3f, 0x01, - 0x99, 0x3d, 0x57, 0xa4, 0xca, 0xcd, 0xda, 0x15, 0x7d, 0xf0, 0xb8, 0xd0, - 0x17, 0x08, 0x3b, 0x03, 0x97, 0x17, 0xc9, 0xde, 0x91, 0xdc, 0x1a, 0xda, - 0x3f, 0xf8, 0x04, 0xa6, 0x87, 0x4b, 0x62, 0x2b, 0x40, 0xb0, 0x54, 0xf4, - 0x62, 0x8b, 0xd0, 0xc1, 0x41, 0x15, 0x77, 0xe8, 0xcd, 0xee, 0x49, 0x41, - 0xa9, 0xe4, 0xb1, 0x67, 0x42, 0xb0, 0x42, 0x1b, 0xe9, 0x21, 0xe4, 0x85, - 0x4a, 0x5c, 0x44, 0xb1, 0x87, 0x4a, 0x75, 0xda, 0x54, 0xc0, 0x7a, 0x12, - 0x96, 0x8c, 0x55, 0x5a, 0x83, 0xd6, 0x8d, 0x82, 0x59, 0xd5, 0x0a, 0x43, - 0xba, 0x01, 0xdf, 0x0a, 0xb5, 0x52, 0x05, 0x5a, 0x99, 0x2f, 0x26, 0x44, - 0x55, 0xa2, 0x00, 0x5f, 0xac, 0xd1, 0x55, 0x4c, 0xee, 0x01, 0x14, 0xae, - 0x27, 0x27, 0xa2, 0x80, 0x6d, 0x3d, 0xc9, 0x4e, 0x3a, 0x24, 0xda, 0x77, - 0x05, 0x69, 0x1a, 0xb8, 0xe9, 0x1d, 0x89, 0xe5, 0xa8, 0x6b, 0x0a, 0x03, - 0x1c, 0x3b, 0x4c, 0xd9, 0x17, 0x67, 0x8c, 0xc3, 0xc5, 0xa0, 0x07, 0xca, - 0x22, 0x86, 0x56, 0xda, 0x3a, 0xd7, 0x7b, 0xde, 0x7f, 0xd5, 0xc1, 0x5f, - 0x3b, 0xb5, 0x86, 0x5e, 0x5f, 0xd8, 0x07, 0xb6, 0xfa, 0x2e, 0xc1, 0x70, - 0x0a, 0xaa, 0x7f, 0x92, 0x98, 0x82, 0x13, 0xf6, 0xda, 0x33, 0x71, 0xc4, - 0xd6, 0x01, 0xba, 0xe3, 0x20, 0xe3, 0xe0, 0xcf, 0xdb, 0x4c, 0xce, 0x53, - 0xf4, 0x83, 0xd9, 0x32, 0x65, 0x56, 0x62, 0x86, 0xaa, 0x47, 0xa5, 0x74, - 0xbb, 0xfc, 0x1f, 0x47, 0x12, 0x1c, 0x97, 0x8f, 0xbc, 0xd5, 0xb4, 0xcd, - 0x2b, 0xb1, 0xe3, 0x74, 0xd1, 0x22, 0x13, 0xbc, 0x0f, 0x7d, 0x81, 0xa2, - 0xab, 0xb4, 0x0b, 0x45, 0x5a, 0x7c, 0x3d, 0x41, 0x24, 0xf3, 0x23, 0x0b, - 0xe4, 0x8a, 0xfe, 0x06, 0xae, 0x64, 0xb5, 0xaa, 0x8a, 0xda, 0x78, 0x5d, - 0xa1, 0x44, 0xd3, 0x82, 0xcd, 0xb8, 0x02, 0x59, 0xb3, 0x7d, 0x02, 0x9d, - 0x87, 0x16, 0xb7, 0x3c, 0xe0, 0xed, 0xb2, 0x2d, 0x81, 0x9f, 0xda, 0x43, - 0x67, 0x27, 0x6c, 0xe4, 0xd5, 0xb0, 0x67, 0x2c, 0xe0, 0x1d, 0x20, 0xdb, - 0xaf, 0x06, 0xb4, 0xf8, 0xc4, 0xcf, 0xdb, 0x22, 0x1a, 0x6a, 0x70, 0xdb, - 0x07, 0xf0, 0xaf, 0xd0, 0xcc, 0x75, 0xe2, 0x35, 0x7a, 0x72, 0xf8, 0x80, - 0x3b, 0xc8, 0x65, 0x2a, 0xb6, 0x2d, 0x3c, 0x97, 0xb8, 0x6d, 0x78, 0x6c, - 0x92, 0xac, 0x22, 0x5e, 0x74, 0x89, 0x78, 0x47, 0x0f, 0x7b, 0x8f, 0xf7, - 0x7c, 0x5d, 0x2d, 0xbb, 0x02, 0x85, 0xda, 0x84, 0xb5, 0xa3, 0x48, 0xe5, - 0x68, 0x46, 0x08, 0x8f, 0x06, 0xf5, 0x21, 0xba, 0xd5, 0x04, 0xdd, 0x4a, - 0x4f, 0x21, 0x29, 0x81, 0x9d, 0xd8, 0xd6, 0x4e, 0x28, 0xff, 0xac, 0x38, - 0x47, 0xe4, 0xc9, 0xdb, 0xa5, 0x22, 0xa1, 0x81, 0x8b, 0x01, 0xb9, 0x20, - 0xf7, 0x03, 0x72, 0x6e, 0xf5, 0xb9, 0x78, 0x62, 0x21, 0xff, 0xbe, 0xf8, - 0x1f, 0x40, 0xc2, 0x25, 0x88, 0xab, 0xb6, 0x09, 0xf1, 0x42, 0x36, 0x3d, - 0x45, 0x2a, 0x45, 0x93, 0x00, 0x36, 0xa0, 0xc7, 0x4d, 0xf2, 0x38, 0xf1, - 0xf8, 0xf2, 0x9c, 0x2d, 0x7e, 0xa0, 0xf6, 0x86, 0x6d, 0x2d, 0x16, 0xac, - 0xea, 0x3b, 0x04, 0x80, 0x25, 0x5c, 0x07, 0xa8, 0x3c, 0xd8, 0x17, 0x59, - 0x1f, 0x48, 0x0d, 0x4c, 0x70, 0x56, 0x67, 0x85, 0x3d, 0x24, 0x1c, 0xba, - 0x30, 0x06, 0x0e, 0x2c, 0x8a, 0xf0, 0xac, 0xe8, 0x24, 0x7f, 0xa0, 0x50, - 0xd4, 0xeb, 0x20, 0x5d, 0x12, 0xfd, 0x24, 0xc4, 0x03, 0x50, 0xf4, 0xcc, - 0x4c, 0x46, 0x50, 0x4c, 0x84, 0x6c, 0x90, 0xe5, 0x5a, 0xd8, 0xf4, 0x0b, - 0xc0, 0x25, 0xa4, 0x0a, 0xcc, 0x81, 0x8f, 0xa2, 0xad, 0x06, 0x82, 0x07, - 0x90, 0xb9, 0xd2, 0x97, 0xcc, 0xd9, 0x67, 0xd7, 0x35, 0xae, 0x46, 0x11, - 0xdf, 0x94, 0x20, 0x44, 0x3c, 0xdd, 0x31, 0xa3, 0x06, 0xcc, 0x53, 0xd0, - 0x78, 0x8a, 0x03, 0x75, 0x29, 0xc5, 0xc3, 0xc3, 0x1b, 0xe0, 0x87, 0xcd, - 0x59, 0x85, 0x64, 0xb0, 0x3f, 0x47, 0x8d, 0xcc, 0x07, 0x64, 0xc1, 0x9d, - 0x53, 0x05, 0x38, 0x72, 0x7e, 0xca, 0x76, 0x09, 0x6e, 0x5f, 0xd5, 0xae, - 0x63, 0x4a, 0x64, 0xa7, 0x10, 0x6c, 0xd7, 0x18, 0x5f, 0xe4, 0xe7, 0x80, - 0x8b, 0x22, 0xdb, 0x32, 0xb7, 0x81, 0x10, 0xe8, 0xe3, 0x7b, 0xb8, 0x26, - 0x32, 0x78, 0xa0, 0xd0, 0xcb, 0x16, 0x04, 0x84, 0xdf, 0xb5, 0x1c, 0x42, - 0x61, 0x41, 0x93, 0x89, 0x93, 0x2a, 0x5f, 0x93, 0x88, 0x4a, 0x90, 0x54, - 0xd7, 0x66, 0xec, 0x93, 0x36, 0xce, 0x69, 0xcc, 0x92, 0x4c, 0xfa, 0xde, - 0x21, 0x8e, 0x81, 0x61, 0xeb, 0x5a, 0x88, 0x67, 0xcd, 0x70, 0xc6, 0xb3, - 0x92, 0x98, 0x3e, 0x27, 0xc0, 0xc8, 0x1b, 0x4e, 0x36, 0xa3, 0x68, 0x58, - 0x9b, 0x46, 0x84, 0xf8, 0xa8, 0x4c, 0xf0, 0x84, 0x4f, 0x90, 0x95, 0xbb, - 0x9e, 0x42, 0x2c, 0x14, 0x5a, 0x6d, 0x6b, 0x78, 0xac, 0x45, 0x47, 0x30, - 0xd8, 0x0d, 0x59, 0x48, 0xa4, 0x07, 0x23, 0xcd, 0x31, 0xa1, 0x2b, 0xcf, - 0xe9, 0xb2, 0xdf, 0x79, 0x33, 0x66, 0x57, 0x42, 0x2a, 0x1f, 0xa4, 0x7e, - 0xb5, 0x1b, 0xba, 0x1d, 0xae, 0xdc, 0xb7, 0x2d, 0x1b, 0xe1, 0xf2, 0x07, - 0x74, 0x85, 0x63, 0xfc, 0x07, 0x63, 0xa9, 0x1a, 0xce, 0x53, 0xda, 0xd5, - 0x98, 0x4b, 0x62, 0x74, 0x02, 0x56, 0x81, 0x26, 0x10, 0x99, 0xec, 0xa9, - 0xe7, 0x20, 0x23, 0x57, 0x9a, 0xf8, 0x72, 0xce, 0x96, 0x0c, 0x2d, 0x9c, - 0xea, 0x2d, 0x12, 0xe8, 0x97, 0x02, 0xd9, 0x62, 0x6a, 0x8f, 0xdd, 0xa3, - 0x09, 0xaa, 0x3f, 0x31, 0x24, 0x82, 0xbb, 0x66, 0xd7, 0x55, 0x4d, 0x56, - 0x95, 0x6f, 0x57, 0xa8, 0xd1, 0x4b, 0x66, 0x57, 0xb9, 0x4d, 0xfe, 0xa3, - 0xc4, 0x4a, 0x05, 0xed, 0x1c, 0x9c, 0x74, 0x63, 0xe6, 0xe2, 0xa0, 0x77, - 0x09, 0x6a, 0x4c, 0xd0, 0xc6, 0xe9, 0x8b, 0x7d, 0x53, 0x6c, 0x39, 0x9c, - 0x62, 0xea, 0xaa, 0xf9, 0x8c, 0x72, 0x7b, 0x58, 0x06, 0xd4, 0xa8, 0x55, - 0x10, 0xbc, 0x81, 0x93, 0x69, 0x00, 0x89, 0x95, 0x4c, 0x8d, 0xaa, 0xd3, - 0x25, 0x06, 0xfd, 0xfb, 0x6a, 0x8b, 0x56, 0x48, 0x59, 0xf4, 0x85, 0x06, - 0x57, 0xc4, 0x97, 0x25, 0xaf, 0x97, 0x49, 0x61, 0x0d, 0x4e, 0x2d, 0x78, - 0x4f, 0xfd, 0x8b, 0x73, 0x0d, 0x23, 0xd9, 0xa4, 0x30, 0x24, 0x01, 0x7f, - 0xc0, 0xae, 0xcf, 0xd0, 0xab, 0x0c, 0x72, 0x0c, 0xaf, 0x44, 0xe5, 0x19, - 0x0d, 0x05, 0xb3, 0x5f, 0xc3, 0xb0, 0x9d, 0x37, 0x18, 0xb4, 0xed, 0x9c, - 0xb2, 0x81, 0x2d, 0x86, 0xbe, 0x05, 0x90, 0xe5, 0x80, 0xec, 0x8d, 0x1d, - 0xee, 0x9d, 0x6d, 0x67, 0x78, 0xbb, 0xaf, 0xc3, 0x92, 0xb3, 0xea, 0x58, - 0xee, 0x85, 0x08, 0xa8, 0x2f, 0xb6, 0xc9, 0xc9, 0x7e, 0xbc, 0xb0, 0x6f, - 0x0a, 0x0f, 0x92, 0xe9, 0x2e, 0x38, 0x24, 0xec, 0x46, 0xce, 0xc0, 0x2f, - 0xe4, 0xc0, 0xb0, 0x7d, 0xa2, 0x94, 0x43, 0x79, 0xc4, 0x80, 0x22, 0xa2, - 0xd4, 0x3f, 0xab, 0x11, 0x87, 0x21, 0x08, 0xd4, 0x36, 0x07, 0x41, 0xe3, - 0x3b, 0x0d, 0xa6, 0x22, 0xba, 0x29, 0xb3, 0x01, 0xa7, 0x78, 0x6e, 0xd9, - 0x69, 0x51, 0x5b, 0x8e, 0xe9, 0xaa, 0x47, 0x32, 0x34, 0x49, 0x08, 0x03, - 0x1f, 0xdf, 0xba, 0x5e, 0x83, 0x32, 0xba, 0xbf, 0xfb, 0x82, 0x5e, 0x4f, - 0x85, 0x76, 0x6b, 0x01, 0x56, 0x03, 0xc6, 0x3e, 0x28, 0xa4, 0x3d, 0x34, - 0x75, 0xb5, 0xad, 0x70, 0x8d, 0x3c, 0xd4, 0xac, 0xb2, 0xe5, 0xd0, 0xeb, - 0x13, 0xe7, 0x14, 0x9c, 0x16, 0xb0, 0xdf, 0xf9, 0x56, 0x34, 0x7c, 0x86, - 0x9e, 0x52, 0xf4, 0x21, 0xc9, 0x61, 0x95, 0x9f, 0x29, 0x00, 0x9b, 0x80, - 0x43, 0x5a, 0x90, 0x43, 0xc5, 0xb2, 0x12, 0x87, 0xc2, 0x1a, 0x0a, 0x54, - 0x92, 0x6a, 0x41, 0x95, 0x07, 0xff, 0xf0, 0x7d, 0xd5, 0x83, 0x9f, 0xc0, - 0xb6, 0x78, 0x5c, 0x7c, 0x7c, 0x3e, 0x50, 0xd8, 0x4d, 0xfb, 0x02, 0xce, - 0xf1, 0x13, 0xc7, 0xcf, 0x3b, 0x23, 0x77, 0x82, 0x81, 0xe2, 0xa2, 0xe2, - 0x6c, 0x42, 0x88, 0x34, 0x23, 0x7f, 0x3c, 0x17, 0x35, 0xeb, 0x67, 0x1f, - 0x51, 0xba, 0xdc, 0xe7, 0x3e, 0x21, 0x5d, 0xf0, 0x27, 0x70, 0x35, 0xd1, - 0x4c, 0x46, 0x8f, 0x67, 0x4a, 0x88, 0x11, 0x4f, 0x80, 0x9d, 0xda, 0x0c, - 0x2c, 0x1f, 0x53, 0x11, 0xe0, 0xda, 0x62, 0x16, 0x87, 0x8d, 0xeb, 0xe0, - 0xcf, 0xa6, 0xd1, 0x26, 0x50, 0x7d, 0x35, 0xda, 0x47, 0x85, 0xdc, 0x85, - 0x66, 0x01, 0x09, 0xc6, 0x17, 0x0c, 0x52, 0x49, 0xbe, 0x09, 0x63, 0x0c, - 0x40, 0x34, 0x94, 0x0d, 0x52, 0x68, 0xc4, 0x68, 0x1f, 0x6d, 0x2e, 0x31, - 0x1c, 0x1f, 0x68, 0xcc, 0xb7, 0x48, 0x32, 0x2c, 0x87, 0x0d, 0xe0, 0x62, - 0x53, 0x3c, 0x4b, 0xa0, 0x73, 0xcb, 0x2e, 0x5c, 0x6e, 0xcb, 0x82, 0x47, - 0x51, 0x0f, 0x1e, 0x2e, 0xa2, 0x66, 0x5f, 0x03, 0xe0, 0x22, 0x89, 0xae, - 0x01, 0x55, 0x4a, 0xe2, 0xa0, 0xcc, 0x03, 0xc9, 0x58, 0xd5, 0x2c, 0x79, - 0xf1, 0xb9, 0x18, 0x40, 0x45, 0xb1, 0x2c, 0x81, 0xa3, 0x84, 0x52, 0x35, - 0xdb, 0x83, 0x01, 0xc4, 0x3d, 0xe1, 0xc2, 0x28, 0x07, 0xf8, 0xb1, 0x13, - 0x81, 0x4c, 0x19, 0x1c, 0x3d, 0x0a, 0xbb, 0xa0, 0xdc, 0xea, 0x2a, 0xb6, - 0xcf, 0x44, 0x43, 0x30, 0x86, 0x8d, 0x38, 0x85, 0x24, 0xba, 0xc2, 0xcd, - 0x11, 0x6d, 0x90, 0xde, 0xd9, 0x0c, 0x21, 0xae, 0x9e, 0x01, 0x39, 0xba, - 0x34, 0x23, 0x47, 0xb5, 0xdb, 0xc1, 0xa3, 0xba, 0xc3, 0x9b, 0x49, 0x31, - 0x01, 0x2c, 0x41, 0x17, 0xb4, 0x74, 0x9b, 0xa2, 0x5e, 0x4f, 0x85, 0xbf, - 0xe9, 0x57, 0x1c, 0x83, 0xa8, 0x30, 0xce, 0xcb, 0xa1, 0x44, 0x04, 0x65, - 0x4a, 0x8c, 0x4c, 0x67, 0xa3, 0xa3, 0x03, 0x22, 0x36, 0xd5, 0x92, 0x42, - 0x1b, 0x80, 0x76, 0x62, 0x19, 0x75, 0xf0, 0x39, 0x46, 0xc6, 0x19, 0x38, - 0x43, 0x2b, 0x86, 0x63, 0xb8, 0x32, 0x1e, 0x1c, 0x28, 0xc7, 0x4b, 0x40, - 0xbb, 0xa2, 0xb0, 0x3e, 0xdf, 0xd7, 0xa6, 0xda, 0xb1, 0x0a, 0x82, 0x37, - 0x89, 0x56, 0x2f, 0x03, 0xde, 0x24, 0xd8, 0x01, 0xeb, 0x33, 0xc9, 0xaf, - 0xaa, 0x6e, 0x35, 0x6c, 0xd1, 0x0f, 0x40, 0x0b, 0x3f, 0x4b, 0xa1, 0x23, - 0x8d, 0xa0, 0xc5, 0x2e, 0x41, 0x53, 0x97, 0xd1, 0x28, 0x09, 0x18, 0x38, - 0x39, 0x06, 0x3b, 0xad, 0x7d, 0x20, 0x73, 0x51, 0xa2, 0xac, 0x79, 0xa2, - 0xfc, 0x37, 0x8c, 0xc1, 0x90, 0x3a, 0x79, 0xfd, 0x83, 0x41, 0xd2, 0xa2, - 0xd4, 0x04, 0xa0, 0x1c, 0x33, 0x78, 0xbe, 0xe8, 0xf6, 0x04, 0xe0, 0x4f, - 0x17, 0x28, 0x47, 0x30, 0xa5, 0x86, 0x2b, 0x7c, 0xe0, 0xdc, 0x13, 0x3b, - 0xe5, 0xf7, 0xcc, 0xb0, 0x6f, 0x11, 0x3d, 0x33, 0xd0, 0x56, 0xaf, 0x2e, - 0x09, 0xe4, 0x67, 0x34, 0x27, 0x61, 0xd5, 0x6b, 0x61, 0xc7, 0x9b, 0x36, - 0xbb, 0x3c, 0x54, 0xa5, 0x40, 0x22, 0x4b, 0xd4, 0xd3, 0x60, 0xeb, 0x96, - 0x41, 0xed, 0xa3, 0xc5, 0xb4, 0x5e, 0x3b, 0x8e, 0x0d, 0xc0, 0x86, 0x9b, - 0xa6, 0xad, 0xdb, 0x27, 0x54, 0x26, 0xe0, 0x5b, 0x16, 0x94, 0xa9, 0x88, - 0x38, 0x4a, 0x82, 0x42, 0xc0, 0xf6, 0x76, 0x3d, 0xd4, 0xa0, 0xcd, 0x6b, - 0xa2, 0x1b, 0x38, 0xf0, 0x93, 0x70, 0x87, 0x3c, 0x8f, 0xce, 0x10, 0x18, - 0x61, 0xaf, 0x5f, 0xab, 0x0a, 0xfa, 0xb8, 0xb8, 0xbb, 0x4d, 0x04, 0x47, - 0xdf, 0xb9, 0x02, 0x7c, 0xf5, 0xa2, 0x04, 0xb7, 0x96, 0xf3, 0x46, 0x3f, - 0xfe, 0x60, 0xaf, 0x00, 0x0d, 0x54, 0x12, 0xf1, 0xfa, 0x1f, 0xff, 0xf8, - 0x19, 0x79, 0xca, 0x68, 0x10, 0x9d, 0x02, 0xb1, 0x4a, 0x22, 0x4a, 0xaa, - 0x0e, 0x83, 0x45, 0x8c, 0xa4, 0x55, 0x86, 0x06, 0xd8, 0x12, 0xb5, 0xba, - 0x9e, 0x21, 0xc9, 0x35, 0x33, 0x83, 0x91, 0x54, 0xc8, 0x65, 0xe5, 0x94, - 0x93, 0xb6, 0x05, 0x22, 0x02, 0x0f, 0x2b, 0xa9, 0x45, 0xb8, 0x34, 0xf2, - 0x28, 0x80, 0xf8, 0x97, 0x15, 0xe8, 0x90, 0xf1, 0x36, 0x19, 0xce, 0xac, - 0xee, 0x67, 0xf3, 0x90, 0x09, 0xe7, 0x78, 0xd2, 0x57, 0xd1, 0x07, 0x64, - 0xc4, 0xb3, 0x40, 0x05, 0xb3, 0xb5, 0x5b, 0x55, 0x44, 0x30, 0x22, 0x92, - 0x8f, 0xa8, 0x47, 0x22, 0x62, 0xd4, 0xd4, 0x68, 0xc8, 0x82, 0x65, 0x3a, - 0x66, 0x51, 0x56, 0x85, 0x1c, 0xf4, 0xf3, 0xab, 0xba, 0xa8, 0xb6, 0x74, - 0x12, 0xca, 0xf8, 0xf7, 0xa2, 0xb2, 0x48, 0x91, 0xd9, 0x58, 0xf9, 0x00, - 0x28, 0xce, 0x22, 0xf6, 0xa9, 0x9b, 0x45, 0x7e, 0x21, 0xdb, 0xe4, 0xf0, - 0x6b, 0xd7, 0xa0, 0x74, 0x25, 0x27, 0x12, 0x44, 0x3a, 0x1a, 0xdf, 0xa9, - 0x89, 0x4b, 0xb6, 0xc9, 0x94, 0xd9, 0x9d, 0xa4, 0x6a, 0xd5, 0x31, 0x95, - 0x01, 0xd7, 0x7e, 0x27, 0xc8, 0x94, 0x93, 0x05, 0x6c, 0x1e, 0x5c, 0x9a, - 0x39, 0x8e, 0x4d, 0xba, 0xbd, 0xbf, 0x5d, 0x24, 0x7c, 0xfb, 0xa7, 0x16, - 0xae, 0x5c, 0x72, 0x40, 0x2d, 0xd5, 0x40, 0x72, 0xbb, 0xa3, 0xda, 0x16, - 0x3d, 0x98, 0xe8, 0xe7, 0xef, 0x7c, 0x66, 0xd2, 0xb0, 0x72, 0x09, 0xe9, - 0xd8, 0x8a, 0x53, 0x73, 0x88, 0x3c, 0x60, 0x96, 0x6a, 0xd8, 0x1e, 0x17, - 0xd3, 0x8d, 0xdf, 0x81, 0xc3, 0xdf, 0x0e, 0xbe, 0xa6, 0xca, 0x1a, 0x93, - 0x84, 0xb1, 0xe0, 0x37, 0x92, 0x2e, 0x42, 0xca, 0x76, 0x18, 0xaf, 0x97, - 0x02, 0x9c, 0xaf, 0x06, 0xbb, 0x7e, 0x33, 0x9f, 0x9d, 0xdb, 0xe1, 0x8d, - 0x61, 0x94, 0x1b, 0x59, 0x96, 0x7f, 0xcf, 0x22, 0x26, 0x18, 0x82, 0xb9, - 0xd1, 0x84, 0xe6, 0x4f, 0xb3, 0x37, 0x18, 0x41, 0x51, 0xf3, 0xe4, 0x39, - 0xa4, 0x6e, 0x4a, 0xf1, 0xdf, 0x31, 0x2f, 0xd5, 0xa9, 0x29, 0x2e, 0x22, - 0xe8, 0x97, 0x98, 0xd4, 0x60, 0x52, 0x2a, 0xbf, 0x02, 0x80, 0xe0, 0xaf, - 0x58, 0x82, 0xe7, 0xba, 0xe2, 0x54, 0x1e, 0xa0, 0x47, 0x63, 0x6e, 0xbf, - 0x11, 0x18, 0x4f, 0xc4, 0x3c, 0xe0, 0xbe, 0xc5, 0x4c, 0xc3, 0x89, 0x18, - 0x18, 0x3c, 0xd5, 0x6a, 0x34, 0x7b, 0x1c, 0x0d, 0x0f, 0x17, 0xc9, 0x75, - 0x15, 0xb8, 0x0d, 0x55, 0x79, 0x20, 0x5d, 0x35, 0xad, 0xfc, 0x1b, 0x95, - 0x51, 0x44, 0x6b, 0x7a, 0x29, 0x68, 0x48, 0x18, 0x65, 0x04, 0x5c, 0x87, - 0x6a, 0x09, 0x80, 0x07, 0x77, 0xbb, 0x16, 0x85, 0x5e, 0x17, 0x03, 0x85, - 0x52, 0xb7, 0xc0, 0x99, 0x2a, 0x34, 0x77, 0xd7, 0x8e, 0xad, 0xe2, 0xbf, - 0xa7, 0xc4, 0xf6, 0x5e, 0x6d, 0x3b, 0xb1, 0x8c, 0xa5, 0x8a, 0xeb, 0x28, - 0xd5, 0xa5, 0x91, 0xfe, 0x03, 0x43, 0x55, 0xac, 0x8d, 0x71, 0x60, 0x2c, - 0xf8, 0xdc, 0x95, 0x58, 0x8a, 0xd9, 0x4b, 0x12, 0x7b, 0xd1, 0xa0, 0x58, - 0x4a, 0xb5, 0x2a, 0x22, 0x9c, 0x09, 0x26, 0x82, 0x5e, 0xed, 0xdf, 0x8e, - 0x51, 0xac, 0xa4, 0xb9, 0x9c, 0xa4, 0x69, 0xd6, 0x52, 0xf8, 0x11, 0x15, - 0xd9, 0xaf, 0x9c, 0xa8, 0x2b, 0xce, 0xc9, 0x78, 0xe5, 0xa8, 0x1f, 0x2a, - 0xfb, 0x15, 0x20, 0x6c, 0x9f, 0x04, 0x19, 0x8f, 0x12, 0x25, 0xa1, 0x5b, - 0x50, 0x45, 0xcb, 0x54, 0x12, 0xd7, 0x01, 0xaa, 0xe0, 0x20, 0x11, 0xe6, - 0x2c, 0x9f, 0xb1, 0xb8, 0xa5, 0xc4, 0x72, 0x05, 0xde, 0x6b, 0xf9, 0x1f, - 0xed, 0x45, 0x05, 0x68, 0xf4, 0x7e, 0xc8, 0x83, 0x1e, 0x73, 0x27, 0x98, - 0x33, 0x52, 0x4d, 0xcd, 0xfc, 0xc0, 0xcf, 0x0a, 0xae, 0x68, 0x99, 0x5f, - 0xd4, 0x54, 0x16, 0xaf, 0x90, 0x62, 0x47, 0x72, 0x1a, 0x2f, 0x65, 0x11, - 0xf1, 0x0f, 0xe8, 0x10, 0x29, 0xa2, 0xf1, 0x02, 0x71, 0x85, 0xc9, 0x09, - 0xc6, 0x99, 0xc8, 0x41, 0x57, 0xe7, 0x4c, 0x2b, 0x78, 0x46, 0xb5, 0x61, - 0x49, 0x45, 0x80, 0xf0, 0xeb, 0x82, 0x27, 0x9c, 0x44, 0xe2, 0x92, 0xcc, - 0x1f, 0xbe, 0xaf, 0x87, 0xe2, 0x9c, 0x21, 0xc6, 0x12, 0xe1, 0x39, 0xcb, - 0x65, 0x01, 0xb0, 0x2b, 0xf0, 0x45, 0xeb, 0xbd, 0xf3, 0x9a, 0x05, 0x2e, - 0x62, 0x8e, 0x6c, 0xb4, 0xc0, 0x0b, 0xe8, 0x6c, 0x8e, 0x9b, 0x63, 0x7e, - 0x9e, 0x45, 0xc0, 0x34, 0xe5, 0xc7, 0x91, 0xaa, 0x0f, 0xd2, 0x82, 0x69, - 0xa3, 0x64, 0x54, 0x82, 0x78, 0x26, 0xa2, 0x9b, 0xaa, 0xf4, 0x20, 0xa8, - 0x53, 0xf5, 0x21, 0x8e, 0x99, 0x94, 0x7c, 0x91, 0x37, 0x3a, 0x95, 0x2b, - 0x7b, 0x2a, 0xba, 0xb2, 0xc6, 0x04, 0x3e, 0xda, 0xda, 0x18, 0x2f, 0xdf, - 0x20, 0xeb, 0x60, 0x08, 0x9e, 0x42, 0x8a, 0xae, 0x1c, 0x3b, 0x2e, 0x5c, - 0x00, 0xd0, 0x30, 0xa6, 0x73, 0x1f, 0x2c, 0xc5, 0xa5, 0x7a, 0xab, 0xd1, - 0xa0, 0x7b, 0x29, 0xf6, 0x1c, 0x8b, 0x4c, 0x22, 0x34, 0x4c, 0x9c, 0x0d, - 0xb8, 0x36, 0x15, 0x12, 0x22, 0x6b, 0xe7, 0x64, 0x51, 0xa9, 0xdf, 0xa2, - 0x92, 0x30, 0xef, 0x00, 0x70, 0x96, 0xe7, 0xa2, 0x1c, 0x4a, 0x0d, 0x73, - 0x59, 0x5b, 0x9e, 0xdb, 0x45, 0xa2, 0x2e, 0x37, 0x85, 0xff, 0x4a, 0xaa, - 0x05, 0x30, 0x45, 0xf2, 0x8a, 0xad, 0x67, 0x4e, 0x7e, 0xd0, 0x2a, 0x27, - 0x13, 0x2f, 0xbf, 0x21, 0x6e, 0x24, 0xbe, 0x94, 0x29, 0xaf, 0xf1, 0x4e, - 0x72, 0xa0, 0x10, 0x99, 0x26, 0x16, 0x61, 0xcf, 0x4a, 0x77, 0x3a, 0xbd, - 0x0b, 0xeb, 0x6c, 0x5a, 0x82, 0x4e, 0x11, 0x62, 0x10, 0xe4, 0xf8, 0x90, - 0x2d, 0x4e, 0xb6, 0xbe, 0xc4, 0xe1, 0x39, 0x60, 0x18, 0x6c, 0x85, 0xdc, - 0x86, 0x62, 0xfa, 0x61, 0xcc, 0x2b, 0xe6, 0x24, 0x0b, 0x57, 0xba, 0x1d, - 0x96, 0x1d, 0x36, 0xbd, 0x26, 0xcc, 0xf3, 0x30, 0x14, 0xd7, 0x1e, 0x81, - 0xd5, 0xde, 0x70, 0x9a, 0x88, 0x0c, 0xa7, 0xac, 0x76, 0x2a, 0x33, 0x74, - 0x48, 0xbe, 0xe7, 0x2b, 0x00, 0x60, 0x4b, 0x8a, 0xea, 0x6b, 0x86, 0x54, - 0xc3, 0x3a, 0x6c, 0x6e, 0x6c, 0x31, 0xb3, 0x82, 0xfa, 0x24, 0x44, 0xe7, - 0xa7, 0xe8, 0x30, 0xa2, 0xb3, 0x8b, 0xa9, 0xe9, 0xe7, 0xb6, 0x1e, 0xb6, - 0x52, 0xa0, 0xe2, 0xfb, 0x16, 0x0b, 0xa2, 0xf0, 0x6f, 0x59, 0x3a, 0x52, - 0x4d, 0x81, 0x24, 0xc5, 0xdc, 0x98, 0x49, 0xf1, 0xf4, 0x84, 0x04, 0x8d, - 0x79, 0xdb, 0x4a, 0x21, 0x8d, 0x28, 0xa2, 0xc3, 0xf7, 0x3e, 0x2b, 0xaa, - 0x52, 0x95, 0x2f, 0x90, 0x1b, 0x0d, 0xa1, 0xb2, 0x69, 0x46, 0x4a, 0x96, - 0xcb, 0x5b, 0x00, 0x80, 0xcc, 0x70, 0x6a, 0x0f, 0xd6, 0xff, 0x4e, 0x6a, - 0x29, 0xcd, 0xd2, 0x81, 0x48, 0x40, 0x94, 0x48, 0xf4, 0x2b, 0xe6, 0xf5, - 0xc5, 0xe9, 0x65, 0x47, 0x06, 0x53, 0x4f, 0x0d, 0xb9, 0x6c, 0xc7, 0xae, - 0x8f, 0xb2, 0xf4, 0xf0, 0x7f, 0x7a, 0xa2, 0x18, 0xd3, 0x5c, 0x15, 0x03, - 0x57, 0x08, 0xfa, 0x4c, 0x0e, 0xa5, 0xd6, 0x43, 0xcc, 0x7d, 0x46, 0x5b, - 0x41, 0x17, 0x22, 0xda, 0xf9, 0x39, 0xd5, 0xa9, 0x37, 0x60, 0xac, 0x88, - 0x3a, 0x7d, 0x0b, 0x97, 0x73, 0x42, 0x97, 0xe6, 0x81, 0x92, 0x23, 0x01, - 0xe3, 0xa0, 0x01, 0x59, 0x18, 0x99, 0xa8, 0x01, 0x3d, 0x48, 0x66, 0x44, - 0xfe, 0xdf, 0x4f, 0x2a, 0xc2, 0x24, 0xa1, 0xb7, 0x05, 0xc6, 0x04, 0xda, - 0x79, 0x85, 0x05, 0x78, 0x24, 0xf3, 0x8e, 0x46, 0xc4, 0x46, 0x9b, 0x8d, - 0x4d, 0x1a, 0xa6, 0xa7, 0xc6, 0x45, 0xc5, 0x0a, 0xc2, 0x27, 0x51, 0xa9, - 0x97, 0x61, 0xbf, 0x51, 0x30, 0x9d, 0x0c, 0x03, 0x70, 0x7b, 0x40, 0xdb, - 0x90, 0xad, 0x46, 0x09, 0xbd, 0xcd, 0xde, 0x93, 0x0d, 0xcc, 0xb6, 0x01, - 0xcb, 0xac, 0xb3, 0x18, 0x9f, 0x4e, 0x9e, 0x38, 0x42, 0xa3, 0xe7, 0x53, - 0xa9, 0x43, 0x2a, 0x9a, 0x2a, 0x14, 0xf6, 0xd1, 0x12, 0xc7, 0x43, 0x7d, - 0xd5, 0x17, 0xb6, 0x56, 0x0a, 0x5b, 0x0e, 0x1d, 0xc7, 0xcf, 0x74, 0x75, - 0x5e, 0x90, 0x35, 0x18, 0x48, 0xae, 0x76, 0xcb, 0xd5, 0x03, 0x44, 0xb3, - 0x14, 0xa3, 0xd5, 0xea, 0x3f, 0x92, 0x3f, 0x5c, 0xa4, 0x1a, 0x55, 0xfb, - 0xff, 0xd3, 0x33, 0x17, 0x2c, 0xd4, 0x3a, 0xf4, 0xdf, 0x1b, 0xb6, 0x02, - 0xa7, 0x96, 0xa4, 0x3e, 0x5b, 0x7b, 0xa0, 0x87, 0xc1, 0x74, 0x40, 0x7e, - 0xc1, 0x1a, 0xc9, 0xbd, 0x2b, 0x3a, 0x0e, 0xdd, 0x26, 0x8f, 0xb0, 0xe6, - 0x4c, 0xe2, 0x4f, 0x6a, 0x4c, 0xee, 0x58, 0x5b, 0x11, 0xb1, 0x77, 0x82, - 0x99, 0xc4, 0xc8, 0xe4, 0xc0, 0x12, 0x07, 0x35, 0xc2, 0x51, 0xc0, 0x9c, - 0xc0, 0xf4, 0x0e, 0xe6, 0x30, 0xc4, 0xc9, 0x54, 0x2d, 0x2e, 0xaa, 0x5b, - 0xeb, 0xf6, 0x12, 0x4c, 0x49, 0x26, 0x93, 0x8a, 0x67, 0xf9, 0x12, 0x82, - 0x31, 0xfd, 0xb5, 0xb8, 0x2d, 0x6b, 0xf8, 0xf4, 0x72, 0x02, 0x05, 0x08, - 0x44, 0x62, 0x47, 0x9d, 0x0c, 0x3e, 0x4e, 0x8f, 0xd3, 0x03, 0x1f, 0x84, - 0x10, 0xfe, 0xd7, 0xe9, 0x61, 0xaa, 0x19, 0x52, 0xb2, 0xdc, 0x45, 0x8b, - 0x6f, 0x5b, 0xae, 0x06, 0x90, 0xa8, 0x11, 0xb0, 0x9e, 0x6f, 0x1b, 0x29, - 0x38, 0xe1, 0x04, 0xb8, 0xee, 0x89, 0xbe, 0x54, 0x9a, 0xd3, 0x10, 0x7b, - 0x26, 0x46, 0xbf, 0x82, 0x59, 0x4c, 0x54, 0x85, 0xe5, 0xc3, 0xb1, 0x3e, - 0x50, 0xdc, 0x83, 0xaf, 0x51, 0x3f, 0x9a, 0xdc, 0x07, 0xf5, 0x91, 0x05, - 0x5a, 0x9e, 0xe2, 0x82, 0x44, 0x0b, 0x4e, 0xe8, 0x39, 0x91, 0xae, 0xb9, - 0x77, 0x99, 0x5e, 0x9d, 0x54, 0x74, 0x24, 0x17, 0x76, 0x48, 0x8f, 0x08, - 0x61, 0x5a, 0x86, 0x79, 0x0c, 0xc0, 0xd4, 0x86, 0xd3, 0xd2, 0x62, 0x72, - 0x52, 0xbd, 0x06, 0x95, 0x38, 0x50, 0xdc, 0xae, 0x56, 0x85, 0x27, 0xcb, - 0x8c, 0xdd, 0x51, 0x4c, 0xa9, 0x63, 0x06, 0x03, 0x03, 0x0b, 0xf8, 0x3b, - 0xb2, 0xc7, 0x68, 0x15, 0x8d, 0x2b, 0x27, 0x55, 0xe9, 0xe5, 0x71, 0xf0, - 0x59, 0x87, 0x06, 0xe6, 0x09, 0x7e, 0x24, 0x9f, 0x84, 0x9f, 0x58, 0xaa, - 0x81, 0xf8, 0xf3, 0x32, 0xda, 0x45, 0x27, 0x18, 0x7f, 0x29, 0xde, 0x18, - 0xb1, 0x33, 0xdf, 0x91, 0xa0, 0x9f, 0x33, 0x33, 0x14, 0xa7, 0x27, 0x2a, - 0xad, 0x31, 0xa9, 0x74, 0xf6, 0x84, 0x51, 0x0a, 0x62, 0x31, 0xa6, 0x20, - 0xbe, 0x8f, 0x73, 0x36, 0x2d, 0x19, 0x83, 0x31, 0x4a, 0x9d, 0x57, 0x85, - 0x9e, 0xbe, 0x70, 0xf1, 0xa8, 0x38, 0x73, 0x51, 0x20, 0x90, 0x54, 0x6e, - 0x13, 0x7f, 0xc9, 0x9b, 0x13, 0x05, 0xd0, 0x2a, 0xeb, 0xa1, 0xe3, 0xe8, - 0x20, 0x53, 0x03, 0x2b, 0xaa, 0x60, 0x27, 0x89, 0x63, 0x60, 0x13, 0x9f, - 0xf7, 0x2f, 0xd1, 0xdd, 0xc8, 0x03, 0x4e, 0xd0, 0x44, 0x05, 0x22, 0x9c, - 0x78, 0x26, 0x48, 0xc4, 0xc3, 0xd0, 0x25, 0x73, 0x51, 0xea, 0x0f, 0x68, - 0x77, 0x7a, 0x92, 0x94, 0x98, 0xf1, 0xb8, 0xf2, 0x8f, 0xd9, 0x3b, 0x14, - 0xa2, 0x0a, 0xd9, 0x9f, 0x71, 0x64, 0x88, 0xe5, 0x01, 0xc9, 0x3b, 0x44, - 0x7b, 0x8c, 0xe6, 0xec, 0xcf, 0x69, 0x0d, 0x2e, 0xf6, 0x65, 0x61, 0xe7, - 0xd3, 0x2b, 0x90, 0x42, 0xae, 0x24, 0xf2, 0x9d, 0xe8, 0x5f, 0x76, 0xc8, - 0xd1, 0x45, 0xaa, 0xd8, 0xeb, 0x5a, 0x81, 0x00, 0x4e, 0xa2, 0xc3, 0x60, - 0x6b, 0x80, 0xdd, 0x17, 0x0c, 0x8a, 0xe4, 0x94, 0xbe, 0xa0, 0x55, 0x5f, - 0xb4, 0xf2, 0x78, 0x5d, 0x71, 0xca, 0xf0, 0x24, 0x76, 0x01, 0x85, 0xf7, - 0x99, 0x9b, 0xf1, 0x12, 0xcb, 0x93, 0xc1, 0xac, 0xf6, 0x54, 0x12, 0x73, - 0xfa, 0xf5, 0xa9, 0xf0, 0x06, 0x42, 0xab, 0xc1, 0xcd, 0xb4, 0x79, 0x68, - 0xec, 0x85, 0xe6, 0x85, 0xfa, 0xa0, 0x2a, 0x54, 0x65, 0xc4, 0xbc, 0xb5, - 0x47, 0x4a, 0xe6, 0x6c, 0xb3, 0xcf, 0xbc, 0x49, 0x2f, 0x5c, 0xe3, 0x4e, - 0x72, 0xcd, 0x40, 0x71, 0xc1, 0x9d, 0x73, 0xdd, 0xab, 0xbe, 0x7d, 0x85, - 0xff, 0xcb, 0xe5, 0x5f, 0xa1, 0xe4, 0x4f, 0x31, 0x4c, 0xeb, 0x20, 0xe4, - 0x55, 0xc3, 0xf1, 0x02, 0x4e, 0x04, 0x3a, 0x2a, 0x2a, 0x61, 0xdc, 0x1d, - 0xc9, 0x84, 0xe7, 0xb9, 0x41, 0x5c, 0x42, 0x28, 0x34, 0x8b, 0x05, 0x76, - 0x58, 0x85, 0xce, 0xd2, 0x76, 0x4d, 0x0a, 0x43, 0xae, 0x49, 0xb2, 0xd5, - 0xa1, 0x32, 0x3b, 0x70, 0x8d, 0x84, 0x6f, 0xc4, 0xd7, 0x4e, 0xc4, 0x44, - 0x19, 0xda, 0x2e, 0xd0, 0x43, 0x20, 0xed, 0x02, 0x64, 0x94, 0x04, 0x1f, - 0x13, 0x00, 0xd1, 0x4f, 0xc0, 0x24, 0x45, 0x1a, 0xf6, 0xa8, 0x24, 0x03, - 0x83, 0x07, 0x0e, 0xf1, 0x92, 0xe3, 0x2c, 0x86, 0xcc, 0x91, 0x25, 0xdf, - 0x41, 0x0a, 0x06, 0xc6, 0x5d, 0x86, 0x44, 0x76, 0x99, 0x67, 0x53, 0x0e, - 0x44, 0x61, 0x52, 0x86, 0x84, 0xc1, 0x78, 0xf4, 0xc3, 0x50, 0x87, 0x4e, - 0x08, 0x94, 0x44, 0x43, 0x53, 0xed, 0xa0, 0x1f, 0xb6, 0xec, 0x64, 0xd0, - 0x23, 0xea, 0xe8, 0x84, 0x4a, 0x27, 0xd3, 0x63, 0x13, 0x1d, 0x9d, 0x1a, - 0xae, 0x85, 0x1c, 0x69, 0xf4, 0xcc, 0x1c, 0xf0, 0x56, 0x5a, 0x30, 0x83, - 0x95, 0x36, 0xa9, 0x5e, 0xd5, 0x87, 0x41, 0x97, 0x16, 0x5b, 0xd0, 0xb8, - 0x53, 0xd3, 0x22, 0x21, 0xc3, 0xdf, 0xc1, 0xef, 0x2e, 0x35, 0x79, 0xe5, - 0xa3, 0x06, 0xd4, 0xcc, 0x71, 0x48, 0x79, 0x93, 0x72, 0xae, 0x79, 0xb5, - 0xd8, 0x36, 0x42, 0xb1, 0x68, 0x0c, 0x1f, 0x80, 0x30, 0xc0, 0x2a, 0x48, - 0x2c, 0x1b, 0x44, 0x27, 0x01, 0xde, 0x43, 0x2b, 0xb7, 0x6a, 0x84, 0xef, - 0xe8, 0x90, 0x45, 0xb0, 0x1e, 0x2a, 0x29, 0xfb, 0xcb, 0x0e, 0x3b, 0x35, - 0x65, 0x3b, 0x2c, 0xfb, 0xf5, 0x50, 0x73, 0x43, 0x43, 0xcc, 0x3a, 0xc0, - 0xd5, 0xb4, 0xf5, 0x33, 0xe3, 0x79, 0x5d, 0x3c, 0x73, 0x4f, 0x02, 0x59, - 0x1e, 0x05, 0x09, 0xd4, 0xb7, 0xa3, 0x0a, 0x2a, 0xa3, 0xfb, 0x04, 0xf5, - 0x44, 0xb5, 0x5a, 0x49, 0x89, 0x15, 0xba, 0x3d, 0x53, 0x3b, 0xc9, 0x10, - 0x95, 0xd5, 0x55, 0x9b, 0x7e, 0xbf, 0x23, 0x5b, 0xb1, 0xe5, 0x2a, 0x3a, - 0x20, 0xaf, 0x50, 0x46, 0x04, 0x44, 0xba, 0xaa, 0x0b, 0x16, 0x0c, 0x0a, - 0xfb, 0x28, 0x2c, 0xa1, 0x79, 0xe3, 0x81, 0x9c, 0x0a, 0x92, 0xc5, 0xf9, - 0xe6, 0x96, 0x0f, 0x41, 0x0c, 0x52, 0x50, 0xbb, 0x60, 0x2c, 0xb8, 0x19, - 0x3d, 0x6a, 0xc0, 0x4d, 0x1f, 0x14, 0x4a, 0xbe, 0x22, 0xf7, 0x05, 0x83, - 0xf8, 0xa4, 0xd9, 0x88, 0x9c, 0x77, 0x9c, 0x09, 0x00, 0xc0, 0xa9, 0xff, - 0x87, 0xab, 0xec, 0x08, 0x30, 0xac, 0x30, 0x0a, 0x66, 0xe4, 0x51, 0xb4, - 0x8f, 0x20, 0xd7, 0xcb, 0x4a, 0xd6, 0xa0, 0x80, 0x01, 0xb2, 0x60, 0x5f, - 0x50, 0xd5, 0x91, 0x89, 0x76, 0x01, 0x2a, 0xf5, 0x72, 0x40, 0x6b, 0x9a, - 0x51, 0x85, 0x51, 0xe4, 0xb0, 0x01, 0x83, 0x3b, 0x34, 0xb4, 0x34, 0xd9, - 0x02, 0xf8, 0x1b, 0xd8, 0x4f, 0xca, 0x15, 0x29, 0x03, 0x41, 0xd6, 0x04, - 0xd2, 0x18, 0x05, 0x35, 0x39, 0x6c, 0xe6, 0xa4, 0x80, 0x31, 0x69, 0x7c, - 0xa2, 0xb3, 0x50, 0x25, 0xfc, 0x82, 0xeb, 0x76, 0xd8, 0x41, 0x5e, 0x90, - 0xa4, 0xa2, 0x7f, 0x6b, 0x79, 0x50, 0xca, 0x62, 0x49, 0x85, 0xe0, 0x16, - 0x8e, 0xd5, 0x96, 0x7e, 0x8a, 0xb4, 0xb1, 0x72, 0x25, 0x26, 0x06, 0xa6, - 0x58, 0xfd, 0xb0, 0x69, 0x3b, 0xa9, 0x58, 0xb7, 0x9f, 0xdd, 0x9e, 0xd1, - 0xcb, 0x82, 0xaf, 0x8a, 0x6b, 0xab, 0xc0, 0x25, 0x14, 0x4b, 0xe1, 0x10, - 0x05, 0x11, 0xb8, 0x5e, 0xe8, 0xb0, 0x61, 0xc4, 0x1f, 0x89, 0x6e, 0x68, - 0x3d, 0x5e, 0x06, 0x20, 0x4a, 0x20, 0x73, 0xa4, 0x1f, 0x89, 0xba, 0xf1, - 0xfc, 0x69, 0x8b, 0xce, 0x65, 0xe0, 0x61, 0x54, 0xc8, 0xf8, 0x01, 0x4b, - 0x15, 0xdd, 0x58, 0xcd, 0x48, 0xb2, 0xb1, 0xaf, 0x9a, 0x01, 0x85, 0xc1, - 0xd0, 0x90, 0x1c, 0x15, 0xc3, 0xb7, 0x4f, 0x9b, 0x5d, 0x58, 0x68, 0x19, - 0x95, 0x92, 0xd8, 0x0a, 0xd8, 0x72, 0xe9, 0x22, 0x5c, 0x18, 0xa6, 0x59, - 0x58, 0x0c, 0x70, 0xa8, 0x88, 0xcf, 0xc5, 0xa5, 0x39, 0x94, 0xda, 0x5c, - 0x3a, 0x72, 0xf3, 0xf3, 0x7c, 0x10, 0x52, 0xce, 0x12, 0xcb, 0x5c, 0xb0, - 0xbb, 0x8d, 0xee, 0x6f, 0xb1, 0xce, 0x92, 0x68, 0xcd, 0x81, 0xa8, 0x4c, - 0x43, 0xb1, 0x2a, 0xf4, 0xc5, 0xe3, 0xc3, 0xed, 0x38, 0xad, 0x97, 0x56, - 0xe5, 0xac, 0xa5, 0x8f, 0x91, 0xdd, 0xc0, 0x14, 0xbb, 0xb1, 0x36, 0x28, - 0xb1, 0xf6, 0x57, 0xab, 0x01, 0x3d, 0x35, 0x6f, 0x42, 0x12, 0x93, 0xd5, - 0x61, 0xa1, 0x5b, 0x25, 0x9c, 0x28, 0x15, 0x23, 0xeb, 0x34, 0x3a, 0x8a, - 0x4b, 0x46, 0xda, 0x34, 0xd9, 0x6d, 0x62, 0x59, 0x8b, 0x54, 0x56, 0x27, - 0x3a, 0x2e, 0x98, 0x76, 0x52, 0x5f, 0xb5, 0x73, 0xfd, 0x80, 0x3d, 0xc2, - 0x6a, 0x97, 0x1a, 0xf6, 0xa0, 0xa9, 0x54, 0xe5, 0xec, 0x68, 0x78, 0x33, - 0x87, 0xd0, 0x93, 0x72, 0x84, 0x9f, 0xc0, 0x12, 0xfe, 0x3f, 0x29, 0x38, - 0x76, 0xe6, 0xa8, 0x0a, 0xe3, 0x73, 0xe7, 0xf1, 0x6d, 0x45, 0x2a, 0x85, - 0x12, 0x97, 0x2e, 0xf5, 0x7b, 0x8d, 0x34, 0xf1, 0x9d, 0xe2, 0x31, 0xec, - 0x16, 0x1e, 0x24, 0x81, 0x94, 0x46, 0xb4, 0x43, 0xa4, 0x87, 0x62, 0x3a, - 0xa6, 0xc2, 0x86, 0x67, 0x56, 0x6c, 0x78, 0xd7, 0x4d, 0xcb, 0x09, 0xe0, - 0xc4, 0x0e, 0x84, 0xb7, 0x7b, 0xea, 0xf2, 0xe5, 0xa4, 0x10, 0x1a, 0x7b, - 0xfb, 0x94, 0xb7, 0x46, 0x34, 0x29, 0x9d, 0x65, 0x6c, 0x79, 0x67, 0x18, - 0xa7, 0xc2, 0xbd, 0x50, 0x6e, 0x96, 0x06, 0x53, 0x0d, 0xd1, 0x9d, 0x2c, - 0xc8, 0xba, 0xe3, 0xfe, 0xf6, 0xfd, 0x79, 0x28, 0x5b, 0x4a, 0xe1, 0x4f, - 0xfc, 0xa8, 0x53, 0x47, 0x3f, 0xac, 0xd0, 0x2b, 0xcc, 0x68, 0x09, 0xe5, - 0xb2, 0x74, 0x39, 0x75, 0xe9, 0xd1, 0x76, 0xa4, 0x72, 0x74, 0xcd, 0x1e, - 0x11, 0x41, 0x0f, 0x3b, 0x0c, 0x21, 0x73, 0x6d, 0x84, 0xe4, 0x7e, 0x88, - 0x67, 0x23, 0xdb, 0x04, 0x3c, 0x74, 0xc9, 0x51, 0x42, 0xab, 0xa5, 0xd0, - 0xd5, 0x54, 0x48, 0xc9, 0x1c, 0xa0, 0x27, 0x50, 0x73, 0xf5, 0xad, 0x45, - 0x51, 0x51, 0x04, 0x07, 0xa8, 0x30, 0xea, 0x13, 0x88, 0xb9, 0x5f, 0x3a, - 0x0a, 0x8b, 0xbc, 0x6c, 0x5c, 0x73, 0x90, 0x84, 0x42, 0x41, 0xe5, 0xea, - 0x75, 0x28, 0xa4, 0xd0, 0x74, 0x66, 0x89, 0xb2, 0xcc, 0x71, 0x31, 0x14, - 0x69, 0x2b, 0x12, 0xf7, 0x31, 0x75, 0xcc, 0xd2, 0x47, 0x37, 0x02, 0x58, - 0x9e, 0xab, 0xb6, 0x46, 0x74, 0xf0, 0xe1, 0x86, 0x9a, 0x4b, 0xf6, 0x50, - 0x60, 0xf7, 0xed, 0x0a, 0xab, 0x1b, 0xd7, 0xa2, 0x8c, 0x63, 0x55, 0x5d, - 0xb1, 0xea, 0x5a, 0xef, 0xd3, 0x85, 0xa4, 0x44, 0xe3, 0x2b, 0xbc, 0xc0, - 0x52, 0xe1, 0xe4, 0x3d, 0xab, 0x35, 0x4c, 0x01, 0xb9, 0x34, 0xef, 0x79, - 0x94, 0x79, 0xb8, 0x33, 0x89, 0x5e, 0x0e, 0x31, 0x11, 0xed, 0x45, 0x34, - 0x3a, 0xff, 0x00, 0x30, 0x47, 0xad, 0xde, 0x92, 0x1f, 0xb1, 0xa3, 0x9a, - 0xe1, 0xd3, 0x05, 0xc3, 0x66, 0x5c, 0x38, 0x27, 0xbe, 0x2b, 0xed, 0xae, - 0x9e, 0x23, 0x08, 0x69, 0x92, 0x87, 0x68, 0x0a, 0x82, 0x55, 0xf2, 0x82, - 0x00, 0x03, 0xa2, 0x40, 0x9b, 0x11, 0x4d, 0x0c, 0x0d, 0xa6, 0x45, 0x28, - 0xf1, 0x8e, 0x01, 0x4a, 0x29, 0x7e, 0x10, 0x4f, 0x8b, 0xb0, 0xf5, 0xcb, - 0x85, 0x9d, 0xc5, 0xbc, 0xcc, 0xa3, 0xd3, 0x80, 0xea, 0x24, 0xf9, 0x6d, - 0x4c, 0x70, 0x60, 0x3b, 0x58, 0xe7, 0xd2, 0xd2, 0x1b, 0xa4, 0x71, 0xa9, - 0x97, 0x3e, 0x08, 0x6f, 0x6a, 0xdb, 0x19, 0xd2, 0xac, 0xd4, 0xe3, 0x70, - 0x47, 0x05, 0xf7, 0x02, 0x52, 0xbd, 0x61, 0xe3, 0xb8, 0xe9, 0xa7, 0x73, - 0xaa, 0xf6, 0x62, 0xca, 0xed, 0xc2, 0x1c, 0x07, 0x82, 0x77, 0x2e, 0x24, - 0x03, 0x25, 0xb9, 0x26, 0x2d, 0x9b, 0xe0, 0x9c, 0x98, 0xa6, 0x3b, 0xc8, - 0x8c, 0x04, 0x69, 0xc0, 0x35, 0x23, 0xdc, 0xe4, 0x86, 0x75, 0x62, 0xec, - 0xb3, 0x83, 0xd9, 0xcc, 0xcd, 0x34, 0x69, 0xb1, 0x7a, 0x1a, 0xc8, 0xca, - 0x6a, 0x31, 0x8c, 0xaa, 0x54, 0x4e, 0x38, 0x71, 0xac, 0xef, 0xa0, 0xe7, - 0x09, 0xab, 0xda, 0x48, 0xd3, 0x15, 0x47, 0x61, 0x37, 0x1c, 0xf9, 0xd6, - 0x2a, 0xf5, 0xb4, 0x86, 0x36, 0xe4, 0x6d, 0x39, 0xfc, 0x87, 0x7f, 0x11, - 0x0e, 0x24, 0x53, 0x3e, 0xe6, 0x93, 0x8c, 0x0a, 0xf4, 0x56, 0xdb, 0x9b, - 0x79, 0x6d, 0x4e, 0x57, 0x1d, 0xc1, 0x82, 0x8e, 0x55, 0x78, 0x42, 0x93, - 0x84, 0xdb, 0x17, 0xcc, 0x41, 0x79, 0x08, 0x16, 0xcf, 0xb1, 0x02, 0xd2, - 0x63, 0x1f, 0x3f, 0xc1, 0xc9, 0x82, 0x18, 0x0e, 0x56, 0x1d, 0x2b, 0x8d, - 0xc1, 0x63, 0x14, 0xd2, 0xe3, 0xcf, 0xad, 0x28, 0x20, 0x3e, 0xb7, 0xad, - 0x94, 0xcb, 0x1c, 0xdf, 0x46, 0xf3, 0xd9, 0x45, 0x2f, 0x2d, 0x4a, 0x28, - 0xe6, 0x28, 0xe0, 0x83, 0x49, 0x7d, 0x46, 0x9b, 0xa1, 0xb4, 0xc4, 0xd9, - 0x09, 0x2a, 0x11, 0xe4, 0x69, 0xd4, 0x2c, 0xd6, 0xed, 0x4a, 0xbe, 0xa8, - 0x7d, 0x11, 0x30, 0xe0, 0x3d, 0x74, 0xe2, 0xc0, 0x8f, 0x42, 0x9f, 0x9d, - 0xfd, 0x8f, 0x17, 0x3d, 0xe0, 0xa8, 0xd2, 0xfb, 0xe2, 0x3c, 0x26, 0x1b, - 0x28, 0xc4, 0x62, 0x4e, 0x80, 0x8f, 0x72, 0x42, 0x84, 0xe2, 0x54, 0x72, - 0xc7, 0x12, 0x17, 0x21, 0x8f, 0x29, 0xcf, 0x49, 0xe5, 0x75, 0x77, 0x94, - 0x3e, 0xd4, 0xf9, 0x0e, 0x14, 0xef, 0x3d, 0x5a, 0xf7, 0x11, 0x77, 0x93, - 0xba, 0xad, 0x1e, 0xaf, 0x91, 0x3a, 0x51, 0xb4, 0xf4, 0x4d, 0x67, 0x87, - 0xb4, 0xd8, 0x4b, 0xa5, 0x72, 0x37, 0x25, 0x70, 0x6e, 0xba, 0x91, 0x22, - 0x38, 0xac, 0x63, 0x01, 0x48, 0x8f, 0x00, 0x18, 0x6e, 0x91, 0xba, 0x04, - 0xc4, 0x70, 0x8e, 0xca, 0x28, 0xc2, 0xb4, 0xa1, 0x2e, 0x69, 0x2a, 0xb6, - 0xa3, 0xab, 0xd3, 0xb5, 0xcf, 0xbf, 0x2a, 0x28, 0xf2, 0x32, 0x25, 0xfa, - 0x53, 0x4c, 0x7e, 0x5c, 0x49, 0x41, 0x12, 0x79, 0x93, 0x5a, 0x7e, 0x81, - 0xf9, 0x2d, 0xcc, 0x79, 0x51, 0x9b, 0x4c, 0xa5, 0x46, 0x44, 0x88, 0x49, - 0x69, 0x39, 0xb3, 0x06, 0x6a, 0xc6, 0x45, 0x0e, 0xde, 0xbe, 0xfe, 0x3b, - 0x09, 0xd3, 0xd7, 0x3f, 0x8f, 0x61, 0xf8, 0x0d, 0x6d, 0x4c, 0x4d, 0x42, - 0xdc, 0x87, 0x76, 0x53, 0x72, 0x5b, 0xba, 0xe7, 0xa0, 0xbe, 0x62, 0x0b, - 0x4f, 0x12, 0x7e, 0xe6, 0x94, 0x5b, 0x28, 0x7b, 0xe1, 0xd4, 0x28, 0xa3, - 0x0b, 0xe8, 0x3f, 0xa4, 0x1d, 0x7c, 0x70, 0x07, 0x62, 0xfd, 0x61, 0xa7, - 0xb1, 0xc5, 0x83, 0x6c, 0x2b, 0x2d, 0x22, 0x19, 0x57, 0xcd, 0xc9, 0x32, - 0xea, 0x39, 0x3d, 0x87, 0x96, 0x47, 0xc1, 0xce, 0x76, 0xd5, 0x47, 0xe8, - 0x57, 0xe7, 0xc8, 0xfe, 0xa1, 0xe6, 0x0d, 0x28, 0x25, 0xf8, 0x5e, 0x99, - 0x0e, 0x86, 0x9b, 0x7c, 0xaa, 0x9a, 0xe0, 0xdc, 0x46, 0x9a, 0x15, 0xf0, - 0x63, 0xc7, 0x2d, 0xff, 0xfd, 0x98, 0xb3, 0x43, 0xfe, 0x5d, 0x38, 0xcb, - 0x12, 0xfb, 0x6e, 0xbb, 0xcf, 0x24, 0x4f, 0x65, 0x89, 0x80, 0xa1, 0x17, - 0x6a, 0xdb, 0xf3, 0x49, 0xf4, 0x30, 0x84, 0x61, 0x18, 0x90, 0x22, 0xcc, - 0x8a, 0x89, 0x47, 0x29, 0xcf, 0xe1, 0x72, 0xe4, 0xb2, 0xf1, 0xc9, 0x81, - 0x27, 0xf9, 0x88, 0xaa, 0xc4, 0x8b, 0xd7, 0x18, 0x06, 0x8d, 0xdb, 0x29, - 0xb6, 0xfc, 0x0f, 0x4e, 0xef, 0xb7, 0xdd, 0xe8, 0x26, 0x82, 0x8f, 0xae, - 0x00, 0xc7, 0x8d, 0xdc, 0x39, 0x96, 0x11, 0xd6, 0x8c, 0x4c, 0x4c, 0xb6, - 0x20, 0xb1, 0x8d, 0xaa, 0xea, 0x3a, 0x70, 0x66, 0xf0, 0x78, 0x5c, 0xc7, - 0x28, 0xee, 0x07, 0xa5, 0x11, 0xb6, 0x42, 0x6b, 0xf8, 0x04, 0x43, 0x31, - 0x8d, 0x8f, 0xb3, 0x73, 0x29, 0x96, 0x20, 0xe1, 0xc7, 0xc7, 0x7d, 0xd7, - 0x29, 0xa5, 0x61, 0xc2, 0x7b, 0xdb, 0x64, 0x65, 0x75, 0xf1, 0x24, 0x54, - 0x17, 0x91, 0x1e, 0xa3, 0x90, 0x04, 0x51, 0x40, 0xfe, 0x3e, 0xaf, 0xf1, - 0x40, 0xe9, 0xec, 0xb3, 0xe3, 0xda, 0x33, 0xed, 0xb2, 0x1d, 0x5d, 0xa3, - 0x54, 0xde, 0x9c, 0x33, 0x17, 0xf2, 0x58, 0x20, 0x8a, 0x3e, 0x60, 0x43, - 0xc6, 0xb0, 0x15, 0xb5, 0x4d, 0xe0, 0x24, 0x56, 0xfb, 0xc8, 0x18, 0x5d, - 0x2b, 0xae, 0x9b, 0x7d, 0xfa, 0x9c, 0x68, 0x4e, 0x2e, 0x19, 0x3a, 0xba, - 0x6e, 0x68, 0x36, 0x06, 0x03, 0xa9, 0xa5, 0x0a, 0x76, 0x09, 0x17, 0xe3, - 0x0f, 0x47, 0x11, 0x10, 0xba, 0x03, 0x58, 0xca, 0x8d, 0x8a, 0xd8, 0xc6, - 0xd5, 0x26, 0xa4, 0xb3, 0x31, 0x3c, 0x01, 0xf6, 0x1d, 0xca, 0xb5, 0x89, - 0x84, 0xe6, 0x4d, 0x28, 0x05, 0x25, 0xf3, 0x06, 0xcf, 0x2e, 0x9c, 0x88, - 0xf1, 0x03, 0xcd, 0x11, 0x85, 0xca, 0xdb, 0x18, 0x60, 0x57, 0xe5, 0x9a, - 0x17, 0x00, 0x96, 0x54, 0xbb, 0x24, 0x4e, 0x8f, 0x6a, 0xf7, 0x8a, 0x4b, - 0xed, 0xd9, 0xeb, 0x29, 0x44, 0x40, 0x1c, 0x2b, 0x4b, 0x4a, 0x14, 0xb4, - 0x3d, 0x55, 0xf3, 0x56, 0xb0, 0xb3, 0xa8, 0x06, 0x67, 0x61, 0x8f, 0x1c, - 0x24, 0x0a, 0x6c, 0xd1, 0xb3, 0x7c, 0x01, 0x8e, 0xba, 0xce, 0xd0, 0x36, - 0x39, 0x18, 0xd3, 0x15, 0xe0, 0x33, 0x61, 0x41, 0x9b, 0x2c, 0x48, 0x96, - 0xc5, 0xb1, 0x49, 0x10, 0xdc, 0xda, 0x92, 0xd5, 0x44, 0xa7, 0xa6, 0x5f, - 0xa2, 0xff, 0x8f, 0x29, 0x96, 0x48, 0x94, 0xf9, 0xc9, 0x93, 0xa4, 0x7c, - 0xda, 0x4f, 0x9b, 0x0c, 0x15, 0xcb, 0x33, 0xf3, 0xf8, 0xc6, 0x31, 0xa8, - 0xd1, 0x6f, 0xa3, 0x1a, 0x76, 0x3f, 0x00, 0xe3, 0x3d, 0x4b, 0xc1, 0xce, - 0x29, 0xf8, 0xd3, 0x18, 0x05, 0x81, 0xcb, 0x66, 0xee, 0x01, 0xd0, 0x5f, - 0xf1, 0x0d, 0xe8, 0xbc, 0x86, 0x4c, 0x74, 0xb2, 0x0e, 0x42, 0x11, 0x5e, - 0x28, 0x60, 0x4b, 0x9b, 0x99, 0xa6, 0x54, 0x32, 0x02, 0x28, 0xa0, 0x1b, - 0x90, 0xa0, 0xc2, 0x01, 0xe1, 0xe6, 0x33, 0x24, 0x98, 0x21, 0xe4, 0x75, - 0x72, 0x1d, 0x85, 0x9c, 0x30, 0xb3, 0xb8, 0x22, 0x8a, 0x32, 0x07, 0xc9, - 0x8e, 0xcc, 0x50, 0x0e, 0x36, 0xfe, 0xec, 0xa0, 0x20, 0x2b, 0xe1, 0x9f, - 0x76, 0xcc, 0x51, 0x53, 0x35, 0xa8, 0xa4, 0x64, 0x5d, 0x12, 0xc3, 0xb1, - 0xe5, 0x36, 0x29, 0x78, 0x52, 0x9b, 0x2b, 0xcc, 0x28, 0x41, 0xd9, 0xd7, - 0xab, 0x01, 0x1e, 0x9d, 0x80, 0xdf, 0x0c, 0xc7, 0x00, 0x90, 0x44, 0xd3, - 0xbc, 0x86, 0x1c, 0x57, 0xe2, 0x08, 0xa0, 0x34, 0x08, 0xde, 0xff, 0xba, - 0x20, 0x07, 0xa5, 0x6a, 0x38, 0x1e, 0x91, 0xd6, 0x7d, 0x50, 0x3f, 0x5a, - 0xe8, 0x18, 0x89, 0x23, 0x9b, 0x46, 0x37, 0x27, 0x0d, 0xdd, 0x04, 0x03, - 0x2a, 0x43, 0x0f, 0xc6, 0x74, 0xa0, 0xa4, 0xc3, 0x32, 0x40, 0xf4, 0x8b, - 0xd1, 0x40, 0x85, 0xb3, 0x80, 0x98, 0x4a, 0xfa, 0x46, 0xd8, 0xc9, 0x0f, - 0xbb, 0x19, 0xd9, 0x8d, 0x87, 0xdb, 0x3d, 0xb7, 0x95, 0xf8, 0x99, 0x54, - 0x2f, 0x97, 0x77, 0x59, 0xf5, 0x72, 0x00, 0x97, 0x4e, 0xbc, 0x4a, 0xe7, - 0xa9, 0x28, 0xc7, 0xa7, 0xd5, 0x0b, 0x24, 0x4a, 0xfa, 0x64, 0xe8, 0xcb, - 0x61, 0x2b, 0x94, 0xe3, 0x08, 0x0b, 0x06, 0xb6, 0x0a, 0xf8, 0xdb, 0x6e, - 0x93, 0x89, 0xad, 0xd7, 0x1c, 0xfa, 0x78, 0x97, 0x14, 0x85, 0x91, 0xf1, - 0x8e, 0xf5, 0x8f, 0x3c, 0x9f, 0x8d, 0xdc, 0xef, 0xa3, 0x26, 0x62, 0x2f, - 0x96, 0x70, 0x67, 0xc2, 0x14, 0x3d, 0xce, 0xbb, 0x26, 0xa1, 0xea, 0xb1, - 0x01, 0x68, 0x29, 0x46, 0x44, 0xf1, 0x05, 0x76, 0x80, 0xcf, 0x4d, 0x30, - 0x42, 0x39, 0xa1, 0x2c, 0x91, 0x61, 0x0a, 0xa8, 0x81, 0xb3, 0x52, 0x1f, - 0xb5, 0x23, 0xb3, 0xae, 0xaa, 0xa6, 0x34, 0xeb, 0xaa, 0xc9, 0x91, 0x98, - 0x37, 0xf6, 0xc4, 0x5e, 0x60, 0xa4, 0xda, 0x82, 0xc7, 0x08, 0x4c, 0x63, - 0x6d, 0x95, 0x2c, 0x6e, 0x64, 0x71, 0x9c, 0x25, 0x45, 0xec, 0x8d, 0x0c, - 0xb4, 0x96, 0x9c, 0x25, 0x3f, 0x1b, 0xd1, 0x01, 0xe2, 0x88, 0x86, 0x40, - 0x24, 0x36, 0x0c, 0xc5, 0x95, 0x71, 0x7a, 0x1c, 0x37, 0x0c, 0xff, 0xfc, - 0x83, 0x2d, 0xc9, 0xaa, 0x59, 0xf7, 0x72, 0x13, 0xd4, 0x8f, 0x11, 0x48, - 0xf4, 0x3d, 0xf8, 0xb6, 0x2d, 0x61, 0x3d, 0x6b, 0x42, 0xfa, 0x4b, 0x48, - 0x34, 0x09, 0x12, 0x93, 0x33, 0x1d, 0x1c, 0x49, 0xdf, 0xa0, 0x93, 0x54, - 0xce, 0x27, 0x67, 0x31, 0xdf, 0x3e, 0x8b, 0x8c, 0xd9, 0xaa, 0xd8, 0x4e, - 0x58, 0x57, 0x1d, 0x56, 0xb6, 0x54, 0x5b, 0x17, 0x9c, 0x91, 0xa8, 0xdc, - 0x44, 0xd6, 0xc0, 0xd2, 0x27, 0x29, 0x46, 0xfb, 0x69, 0xd9, 0x3e, 0x3d, - 0x8f, 0x7e, 0x9c, 0x19, 0x83, 0x1b, 0x9b, 0x0e, 0x56, 0x83, 0x24, 0x18, - 0xe3, 0xaa, 0x01, 0xbf, 0x3f, 0xa5, 0xf8, 0x35, 0x52, 0xf1, 0x01, 0xe0, - 0xec, 0x82, 0xe3, 0xcc, 0x40, 0x71, 0x70, 0x2f, 0xca, 0x07, 0xfc, 0xeb, - 0x01, 0x8f, 0xe5, 0x81, 0x9c, 0x10, 0xd6, 0x8b, 0x5c, 0x89, 0x18, 0x0b, - 0x4c, 0x86, 0xc1, 0x5f, 0x99, 0xc8, 0x81, 0xd6, 0x14, 0xf9, 0x65, 0x01, - 0x15, 0x5a, 0xbe, 0x11, 0x36, 0xa0, 0x83, 0xe2, 0x69, 0x0e, 0xb9, 0xf9, - 0x42, 0xf5, 0x4a, 0x78, 0x98, 0xd6, 0xa2, 0x88, 0x5c, 0xd8, 0xbb, 0x94, - 0xd2, 0x8b, 0x3e, 0xbd, 0xea, 0x84, 0x02, 0xa6, 0x49, 0xdb, 0x9b, 0xfd, - 0x5f, 0xb0, 0x9f, 0xc8, 0x2f, 0x6d, 0xc3, 0x84, 0x10, 0x1c, 0xe6, 0x94, - 0xcd, 0x92, 0xd4, 0xaa, 0x04, 0x13, 0xb4, 0x6c, 0x56, 0xbd, 0x8c, 0xd6, - 0x0c, 0xe2, 0xec, 0x1f, 0x17, 0x14, 0xfd, 0xdb, 0x51, 0xeb, 0x12, 0x7a, - 0x1a, 0x62, 0x8c, 0x4a, 0xfa, 0xf0, 0x1d, 0x77, 0xb4, 0x8d, 0xda, 0x25, - 0xb4, 0x76, 0x32, 0x4d, 0x8e, 0x14, 0x2b, 0x1e, 0x97, 0x31, 0xea, 0x35, - 0x03, 0x45, 0xc9, 0xe5, 0x2a, 0x0a, 0x28, 0x08, 0x4c, 0xea, 0xf2, 0xcb, - 0x2a, 0x92, 0x62, 0xf7, 0xe3, 0xac, 0x59, 0x81, 0xdc, 0x2c, 0xb8, 0x94, - 0x3b, 0x4c, 0x4b, 0x39, 0x2c, 0x39, 0xa4, 0x68, 0x3e, 0x99, 0xcc, 0x92, - 0x85, 0x28, 0x34, 0xc5, 0x05, 0x30, 0x69, 0xa7, 0xc1, 0x37, 0x12, 0xe0, - 0x26, 0x01, 0x4b, 0xe0, 0xc1, 0xe1, 0x4d, 0x24, 0xe4, 0x03, 0x75, 0x68, - 0xd8, 0xa0, 0x08, 0x58, 0x4a, 0x1a, 0xb8, 0xd1, 0xbc, 0xa0, 0x6c, 0x69, - 0x36, 0x7a, 0x28, 0x2d, 0x40, 0x46, 0x49, 0xcd, 0x1c, 0x99, 0x97, 0x1f, - 0x1f, 0xd3, 0x20, 0x5c, 0x73, 0x3e, 0x6a, 0xc3, 0x74, 0xd2, 0x89, 0xcd, - 0x9e, 0x23, 0x0f, 0xdc, 0x49, 0x78, 0x5f, 0x84, 0xb9, 0x74, 0xeb, 0x1d, - 0xb9, 0x84, 0x7c, 0xa8, 0x1a, 0x06, 0xe3, 0xc2, 0x8c, 0x1d, 0x6e, 0x3d, - 0x64, 0x24, 0x1f, 0x34, 0x98, 0x4e, 0xa5, 0x20, 0x80, 0xec, 0x0a, 0x51, - 0x58, 0x11, 0x07, 0x07, 0x7c, 0xcf, 0xe3, 0x86, 0xa4, 0xdc, 0x17, 0x2d, - 0xe5, 0x99, 0x6a, 0x3e, 0x79, 0x44, 0x8c, 0xe9, 0xab, 0xf6, 0x05, 0x28, - 0x1a, 0xe7, 0xba, 0x02, 0xa1, 0x69, 0xe1, 0x0b, 0xbd, 0x44, 0xc3, 0xa9, - 0x82, 0xe4, 0x39, 0xd1, 0x6b, 0x95, 0x67, 0x55, 0x32, 0xed, 0xaa, 0x72, - 0xca, 0x27, 0x06, 0xee, 0xa1, 0x7f, 0x19, 0x9c, 0x89, 0xa9, 0x34, 0xe2, - 0x4e, 0x83, 0xb5, 0xc0, 0x11, 0x67, 0xb9, 0x15, 0x1e, 0xf4, 0x42, 0x7b, - 0xfa, 0x81, 0x53, 0x11, 0x64, 0x7f, 0x65, 0x88, 0xcd, 0x79, 0x01, 0xc3, - 0xce, 0x32, 0xb4, 0x06, 0x53, 0x13, 0xda, 0xf6, 0xc4, 0x7d, 0x99, 0x15, - 0x61, 0x6d, 0x99, 0xe6, 0x42, 0x48, 0xb2, 0x04, 0x1b, 0x32, 0x9d, 0x31, - 0x36, 0x6b, 0xec, 0x04, 0xa3, 0x78, 0xe8, 0x3c, 0xc5, 0xfc, 0xcf, 0x84, - 0x2d, 0xfe, 0x34, 0x23, 0x14, 0x72, 0x4e, 0xbc, 0x0f, 0xb7, 0x6a, 0xf2, - 0xc0, 0xab, 0x74, 0x24, 0x17, 0x9b, 0x60, 0x31, 0x8f, 0x8b, 0xec, 0x52, - 0x93, 0x07, 0xe6, 0xb8, 0xea, 0x16, 0x5c, 0x46, 0x7d, 0x86, 0x2a, 0xd4, - 0xd8, 0xf0, 0x38, 0x5c, 0x63, 0xeb, 0xba, 0x27, 0xa6, 0x9c, 0x74, 0xde, - 0x17, 0xc9, 0xb7, 0x53, 0xec, 0xca, 0x53, 0x6f, 0xb8, 0x8e, 0x59, 0xab, - 0xb6, 0x1a, 0x7b, 0x78, 0x3a, 0x29, 0x73, 0xe7, 0x24, 0x11, 0xa1, 0x1a, - 0x94, 0x46, 0x7a, 0x56, 0x14, 0xc2, 0xc9, 0x15, 0xa7, 0xe2, 0x83, 0x2b, - 0x4d, 0xb0, 0x38, 0x37, 0x3c, 0x80, 0x75, 0x3b, 0xc8, 0xa2, 0x51, 0x9e, - 0x6b, 0xbf, 0x01, 0xe7, 0x5a, 0x38, 0xd9, 0xbe, 0xff, 0x0e, 0x9b, 0x03, - 0x5d, 0x49, 0x5d, 0x94, 0x1c, 0x86, 0xa1, 0x24, 0x27, 0x78, 0x11, 0x20, - 0xa4, 0x4b, 0x76, 0x10, 0x86, 0xba, 0x34, 0x14, 0x89, 0x8b, 0xe6, 0x16, - 0xa6, 0x45, 0xab, 0x76, 0xa0, 0xf6, 0x04, 0xb6, 0xb8, 0xc0, 0x7c, 0xae, - 0x07, 0x84, 0x4b, 0xba, 0x14, 0xc7, 0x7d, 0x15, 0x27, 0x13, 0x75, 0xe9, - 0x11, 0x02, 0xb9, 0x9e, 0x80, 0x09, 0xcd, 0x19, 0x33, 0xfe, 0x3b, 0x15, - 0xf5, 0xf7, 0xa3, 0x91, 0xb0, 0xd2, 0xf2, 0x17, 0x54, 0xbd, 0x5b, 0xaf, - 0xb1, 0xe4, 0xea, 0xc0, 0x6c, 0x16, 0x7f, 0x1b, 0x25, 0xcf, 0x11, 0x17, - 0xca, 0x6b, 0xe6, 0x4d, 0xda, 0x0c, 0x43, 0xee, 0x73, 0xd4, 0x92, 0x8f, - 0x2a, 0x9f, 0xfa, 0xde, 0x4f, 0x19, 0xd2, 0xd9, 0x68, 0x08, 0x71, 0x0a, - 0x4d, 0xba, 0x7f, 0xe4, 0x58, 0x1c, 0xdd, 0xdc, 0xb5, 0xfb, 0xa2, 0x96, - 0x4c, 0x59, 0x9b, 0x94, 0xd0, 0x71, 0xf7, 0x56, 0x84, 0x65, 0x0c, 0xc7, - 0xa9, 0xd9, 0x4a, 0xfb, 0xf4, 0xc4, 0x38, 0x6d, 0x02, 0x39, 0x1c, 0xcb, - 0xcc, 0x98, 0x5e, 0x4d, 0x56, 0x2c, 0x4c, 0x89, 0xa5, 0x57, 0xdc, 0x06, - 0xc9, 0xf7, 0x4f, 0x15, 0xa9, 0xf4, 0x33, 0x25, 0x7d, 0xb0, 0xa5, 0x74, - 0xc0, 0x50, 0x09, 0xa6, 0xcf, 0x9e, 0xd4, 0x89, 0x37, 0x89, 0xa1, 0x2e, - 0x0f, 0x47, 0x81, 0x5d, 0xc6, 0x2c, 0xc8, 0x94, 0xb5, 0x12, 0x88, 0x15, - 0xae, 0x9a, 0x99, 0xc6, 0xca, 0x46, 0x1a, 0x50, 0x5d, 0xd4, 0xcc, 0x8a, - 0x88, 0x99, 0x2e, 0x44, 0xbd, 0xd2, 0xa1, 0x70, 0xb8, 0x4f, 0x2c, 0x7c, - 0x92, 0xae, 0x92, 0xd7, 0xaf, 0x2f, 0xec, 0x1d, 0xed, 0xee, 0xe3, 0xc8, - 0xb9, 0x86, 0xa3, 0x8e, 0x6d, 0x37, 0xd1, 0xc2, 0x9b, 0x91, 0xc9, 0x88, - 0x3c, 0x15, 0x22, 0xba, 0xd4, 0x13, 0x70, 0xc4, 0x8d, 0x1f, 0x29, 0xe9, - 0x64, 0x30, 0x5d, 0x36, 0x2d, 0x46, 0xff, 0x0c, 0x3b, 0x51, 0x1b, 0x1b, - 0x2b, 0x1e, 0x23, 0xfc, 0x36, 0xf8, 0x38, 0x9b, 0x30, 0x36, 0x42, 0x68, - 0x89, 0x82, 0x80, 0x09, 0xdc, 0x98, 0x42, 0x1d, 0xc6, 0xef, 0x85, 0x1e, - 0x92, 0xec, 0xc9, 0x38, 0x0c, 0x27, 0x45, 0xbb, 0x64, 0xa9, 0x50, 0xbe, - 0x65, 0xbf, 0x36, 0xa0, 0x78, 0x5c, 0x99, 0x4c, 0xe3, 0xa8, 0xd3, 0x10, - 0x76, 0x58, 0x78, 0x1a, 0x8b, 0x96, 0x6a, 0xcc, 0x9a, 0xe1, 0x5c, 0x51, - 0x31, 0x72, 0xe0, 0x76, 0x50, 0x91, 0xb2, 0xa9, 0xaf, 0xbf, 0x9d, 0xaa, - 0xa6, 0xc0, 0xe1, 0x79, 0x94, 0x16, 0x4c, 0x6e, 0x9c, 0x0c, 0x6e, 0x30, - 0xe6, 0x1a, 0x34, 0x77, 0x43, 0x4b, 0xb8, 0x39, 0x2c, 0x99, 0x5e, 0x8f, - 0x89, 0x83, 0xc2, 0x85, 0xdc, 0x23, 0x2d, 0x69, 0xb1, 0x31, 0x52, 0xa6, - 0x06, 0xa3, 0x32, 0x62, 0x10, 0x6a, 0x66, 0x9a, 0x8f, 0x7a, 0x12, 0x24, - 0x4a, 0x3c, 0xd1, 0x00, 0xb0, 0x91, 0xa1, 0xa4, 0xbc, 0x7f, 0xac, 0xa5, - 0xf7, 0xc8, 0xde, 0xcc, 0xd1, 0x26, 0x0d, 0xbc, 0xd2, 0x81, 0xe2, 0x30, - 0x97, 0xa9, 0x5c, 0x64, 0x5b, 0x4f, 0xe2, 0xc0, 0xb7, 0x58, 0x58, 0xa1, - 0xe1, 0x55, 0x23, 0x57, 0xe4, 0xb5, 0xf3, 0x9d, 0x9a, 0xd2, 0x68, 0xdc, - 0x11, 0x22, 0x8d, 0x43, 0x76, 0x9e, 0x1e, 0x09, 0x05, 0xaf, 0x59, 0xa8, - 0x80, 0x52, 0x0d, 0x23, 0xed, 0x39, 0xe7, 0xf6, 0xce, 0x08, 0x75, 0x62, - 0x84, 0x15, 0x14, 0xd7, 0x08, 0xe3, 0x07, 0x70, 0xea, 0x61, 0x57, 0x97, - 0x38, 0x55, 0x2b, 0x48, 0x9d, 0x57, 0x3c, 0x33, 0x27, 0x73, 0xb9, 0x13, - 0xd1, 0x9f, 0x13, 0xe1, 0x09, 0x1a, 0x44, 0xe3, 0xc2, 0xf0, 0x48, 0x0b, - 0xaa, 0xcb, 0xc2, 0xbb, 0x14, 0x46, 0xe7, 0x6a, 0x77, 0xe2, 0x72, 0x66, - 0xf1, 0x38, 0xf6, 0x85, 0xa7, 0x52, 0x7c, 0xc5, 0x24, 0xe1, 0xdd, 0xe5, - 0xe0, 0xa7, 0x08, 0x83, 0x03, 0x59, 0xda, 0xfd, 0x89, 0x95, 0xde, 0x2c, - 0x44, 0x68, 0xb0, 0xb7, 0xaa, 0x2b, 0x8a, 0x3e, 0x4d, 0xf2, 0x43, 0xb2, - 0x90, 0x68, 0xf6, 0x1a, 0x1e, 0x31, 0xf0, 0xa8, 0x93, 0xe8, 0x14, 0xa7, - 0xdf, 0xab, 0x9e, 0xe3, 0x6f, 0xd2, 0x5f, 0x86, 0xc5, 0x01, 0xad, 0xb8, - 0x2f, 0x3c, 0x89, 0x96, 0x2a, 0x90, 0x68, 0x98, 0x06, 0x79, 0xb7, 0x94, - 0x38, 0x3d, 0x0b, 0x63, 0xe7, 0x1a, 0x5d, 0xf9, 0xc0, 0x16, 0xa6, 0xf1, - 0xf6, 0xf1, 0x1d, 0xde, 0xef, 0xd9, 0x35, 0x05, 0x37, 0x72, 0xd2, 0x64, - 0xf9, 0x41, 0xe2, 0xfe, 0xfc, 0x44, 0x3a, 0x7b, 0xf2, 0xfc, 0x82, 0x07, - 0x30, 0xd2, 0x3d, 0x4f, 0xa4, 0xf8, 0x7c, 0x14, 0x34, 0xe1, 0xe2, 0x06, - 0xb6, 0x2e, 0xc2, 0x80, 0x4c, 0x19, 0xe8, 0xce, 0xb5, 0xea, 0x27, 0x4e, - 0x7b, 0x70, 0x2e, 0x25, 0x8d, 0xb4, 0x99, 0x9d, 0xd6, 0x3d, 0x56, 0xe5, - 0x34, 0x32, 0x5f, 0x71, 0x8c, 0x0a, 0x40, 0x4d, 0x5d, 0x81, 0x35, 0xdb, - 0xe0, 0xcd, 0x01, 0xa8, 0xdc, 0xa5, 0x76, 0xb2, 0x38, 0x35, 0x35, 0x18, - 0x74, 0x48, 0x44, 0x5e, 0x46, 0x4c, 0x29, 0x00, 0x13, 0x46, 0x9a, 0xd3, - 0x28, 0x6f, 0xac, 0x9b, 0xd4, 0xbe, 0xe8, 0xf2, 0x9b, 0x2d, 0x49, 0x56, - 0x6b, 0xdb, 0x0b, 0x13, 0xe7, 0x2b, 0x87, 0x4d, 0x46, 0x2d, 0x0f, 0x41, - 0x49, 0x53, 0x95, 0x41, 0x3e, 0x89, 0x99, 0x43, 0x0c, 0xa6, 0x0f, 0x09, - 0x55, 0x0c, 0x8e, 0x26, 0xa5, 0xaf, 0xda, 0x20, 0x76, 0xe2, 0xac, 0x70, - 0x06, 0x8c, 0x39, 0xb6, 0x26, 0x6c, 0x1e, 0x0b, 0x55, 0x31, 0x19, 0xf8, - 0xc4, 0x8e, 0x87, 0xc3, 0x59, 0xa1, 0xec, 0xa3, 0x50, 0x41, 0x8a, 0xa0, - 0x28, 0x99, 0xca, 0x8e, 0x46, 0xcb, 0x88, 0x20, 0xd8, 0x49, 0xae, 0x7c, - 0x1a, 0x85, 0x09, 0x93, 0xcb, 0xce, 0x7e, 0x0a, 0x3b, 0x4c, 0x53, 0x89, - 0x64, 0xfe, 0x82, 0x44, 0x3a, 0x2c, 0x23, 0xa0, 0x12, 0x82, 0x52, 0x28, - 0x85, 0x98, 0xa2, 0x4e, 0xdd, 0xa6, 0xe0, 0x11, 0xc5, 0x56, 0x00, 0x9c, - 0x78, 0xf8, 0xaf, 0x31, 0xb1, 0xe8, 0xe0, 0xc2, 0x10, 0x99, 0x91, 0x4c, - 0x4a, 0x18, 0xce, 0x63, 0x79, 0xba, 0x2b, 0x2a, 0x06, 0x0d, 0x01, 0x8c, - 0x48, 0xcb, 0xca, 0x14, 0x94, 0xa4, 0x64, 0xd9, 0x1c, 0x84, 0xb7, 0xd9, - 0xe6, 0xe9, 0xd8, 0xfe, 0xd2, 0x98, 0x0b, 0x03, 0xc6, 0x8d, 0x83, 0xc7, - 0x7a, 0x2b, 0x4d, 0xfe, 0x26, 0x6b, 0x9f, 0xe0, 0xb0, 0xa6, 0xa5, 0x1e, - 0x15, 0xb6, 0x73, 0x82, 0x9a, 0xe1, 0x12, 0x6e, 0xb6, 0x59, 0x34, 0x29, - 0x6a, 0x64, 0x01, 0x1b, 0x7a, 0xee, 0x24, 0xee, 0x82, 0x96, 0x2c, 0x93, - 0x43, 0x5d, 0xb9, 0x67, 0x17, 0x8b, 0x30, 0x84, 0xeb, 0x70, 0x5e, 0x78, - 0xe7, 0x87, 0x82, 0x0b, 0xb2, 0xd8, 0x6c, 0x86, 0x63, 0x36, 0x2e, 0x1b, - 0x93, 0x8a, 0xca, 0xb5, 0xce, 0x8b, 0xea, 0x40, 0x8f, 0xc9, 0x45, 0xb3, - 0x6c, 0x4b, 0xa6, 0x01, 0xa4, 0x0e, 0x32, 0xf9, 0x6e, 0x58, 0x41, 0x3a, - 0xa8, 0xaf, 0x05, 0x4f, 0x88, 0x27, 0x3c, 0x3d, 0x70, 0x9d, 0xa9, 0x7d, - 0x9d, 0xf2, 0x87, 0xc7, 0xe4, 0x10, 0x99, 0x05, 0x69, 0x75, 0xb0, 0xf3, - 0xe2, 0xbc, 0x1e, 0x1b, 0xa0, 0x13, 0x0c, 0xb4, 0x30, 0x5a, 0x48, 0xab, - 0x7d, 0x03, 0x6c, 0xaa, 0x30, 0x4c, 0x48, 0x68, 0xe0, 0x59, 0x75, 0xda, - 0x5f, 0xea, 0x29, 0x1d, 0x78, 0xd3, 0xcd, 0x11, 0x2a, 0xa1, 0xef, 0x27, - 0x30, 0xf8, 0xa8, 0x11, 0xb2, 0x10, 0x36, 0x93, 0xb2, 0x84, 0x7c, 0x70, - 0x38, 0x57, 0xec, 0x5e, 0xc9, 0xb7, 0x60, 0xc3, 0x8f, 0x02, 0xe1, 0x94, - 0xa9, 0x0e, 0xa3, 0x0d, 0xc4, 0x60, 0x9d, 0x8d, 0x11, 0x03, 0x5b, 0x4d, - 0x70, 0xfe, 0x48, 0x57, 0x91, 0x4a, 0x69, 0xbb, 0x3d, 0x75, 0xc6, 0x1e, - 0x1b, 0x91, 0xc7, 0x79, 0x3a, 0x1e, 0xf6, 0x07, 0xa7, 0x4b, 0xaa, 0x87, - 0xb8, 0x32, 0x7c, 0x1a, 0x26, 0xbe, 0xf8, 0xb1, 0xfb, 0xc2, 0xb6, 0xb5, - 0x8f, 0x43, 0xbd, 0xe2, 0xbc, 0x05, 0xb6, 0x0c, 0xa2, 0xa3, 0x33, 0x2a, - 0x4f, 0x0a, 0xd6, 0x4b, 0x2c, 0x41, 0xca, 0xcb, 0x51, 0x4f, 0x7b, 0x21, - 0x17, 0xb9, 0xd3, 0x35, 0x56, 0x0e, 0x8c, 0x2a, 0x89, 0xe4, 0x90, 0xf1, - 0x1a, 0xdd, 0x60, 0x54, 0x4c, 0x91, 0x3c, 0x43, 0x12, 0x30, 0x29, 0xa8, - 0x94, 0x5c, 0xa0, 0x91, 0x5c, 0xd3, 0x12, 0x2d, 0x48, 0x29, 0x22, 0x8d, - 0xed, 0x8e, 0x14, 0x27, 0xd3, 0x8f, 0x65, 0x30, 0x80, 0xb1, 0xe4, 0x84, - 0xd4, 0xe0, 0xae, 0xd8, 0x6f, 0xa9, 0xce, 0xa9, 0x8d, 0x09, 0x05, 0xd9, - 0x21, 0x9b, 0x4a, 0x21, 0xa3, 0x69, 0x34, 0xbe, 0x2a, 0x43, 0x02, 0xf7, - 0x5c, 0x98, 0x2f, 0x62, 0x65, 0x34, 0xa3, 0x2f, 0xdd, 0x6f, 0xbc, 0x36, - 0xdb, 0x66, 0x53, 0x1d, 0x69, 0x1e, 0x44, 0x75, 0x0c, 0xbc, 0xb2, 0x24, - 0xd1, 0x38, 0xdd, 0x01, 0x77, 0x68, 0xe0, 0x75, 0x4a, 0x6d, 0x49, 0x29, - 0xf9, 0x8c, 0x05, 0x3e, 0x4d, 0x27, 0x3d, 0x94, 0x0a, 0x79, 0x27, 0x5e, - 0x26, 0xd2, 0x42, 0x11, 0xad, 0x14, 0xef, 0x9c, 0x71, 0xfd, 0x5c, 0xe5, - 0xe4, 0xa3, 0x1d, 0xe2, 0xaf, 0xb7, 0x5e, 0x27, 0x34, 0x9f, 0xb3, 0xf2, - 0xc0, 0x24, 0x04, 0xc0, 0x41, 0x2d, 0x8e, 0x5c, 0xe2, 0xd9, 0x94, 0xc7, - 0xb6, 0x0e, 0x2c, 0x2a, 0x75, 0xee, 0x5e, 0x4c, 0x0f, 0x6d, 0xd3, 0xf6, - 0x2a, 0x13, 0x29, 0x3b, 0x7b, 0x84, 0x81, 0x25, 0x91, 0x82, 0xb0, 0x39, - 0x8a, 0x11, 0x94, 0x3c, 0xd3, 0x41, 0x08, 0x34, 0x8a, 0x35, 0x13, 0x1a, - 0x4b, 0x73, 0x9c, 0xe0, 0x67, 0x08, 0x84, 0x6e, 0xa7, 0x31, 0xea, 0xfe, - 0xe3, 0x7f, 0xd9, 0xf7, 0x45, 0x07, 0xb7, 0x85, 0x1f, 0x93, 0xd2, 0xfa, - 0xa2, 0x4d, 0xa5, 0xa3, 0x65, 0x93, 0xb0, 0x5f, 0xe8, 0xd4, 0xa0, 0x61, - 0x72, 0xdd, 0x10, 0x72, 0x7c, 0xe2, 0x4e, 0x27, 0xa5, 0x3a, 0xe4, 0x20, - 0x63, 0x01, 0x24, 0x56, 0x1e, 0x84, 0x69, 0x6c, 0xf1, 0xf3, 0x24, 0xeb, - 0x10, 0xa6, 0xc9, 0xe6, 0x8a, 0x4b, 0x61, 0x0a, 0xc8, 0xb6, 0x60, 0x22, - 0x2f, 0x5d, 0x5e, 0x39, 0x19, 0xc2, 0xee, 0x69, 0xa6, 0x53, 0x0f, 0x2a, - 0x83, 0xad, 0x5e, 0xff, 0x78, 0x81, 0xc3, 0xad, 0x1e, 0x06, 0xb0, 0x32, - 0xe8, 0x51, 0xb8, 0xef, 0x5b, 0x5c, 0xd1, 0x7f, 0x47, 0x5f, 0xcb, 0x2a, - 0xdb, 0xad, 0xda, 0x6f, 0xa3, 0x79, 0x7f, 0x1c, 0xa2, 0x28, 0x65, 0x4e, - 0x99, 0x3d, 0x53, 0xff, 0x90, 0xc6, 0xd9, 0x0d, 0x34, 0x19, 0x86, 0xd3, - 0x19, 0x89, 0xfd, 0x18, 0x81, 0x3d, 0xb7, 0x52, 0xc5, 0x86, 0x85, 0x0f, - 0x65, 0xb5, 0x0a, 0x65, 0xf9, 0xba, 0xc5, 0xb1, 0x94, 0xdb, 0x5e, 0xe7, - 0xdb, 0x01, 0x22, 0x51, 0xdd, 0xe2, 0xbe, 0x21, 0x36, 0x74, 0xfa, 0xdd, - 0x8b, 0x68, 0x7e, 0x82, 0xb1, 0x92, 0x08, 0x9a, 0x5c, 0xc5, 0xfb, 0x56, - 0xc6, 0x1b, 0x68, 0x6b, 0x99, 0xaf, 0xb6, 0x43, 0xdd, 0x17, 0x8d, 0xe3, - 0x91, 0x44, 0x5c, 0xa9, 0x77, 0x30, 0x99, 0x2b, 0x0b, 0x09, 0xe8, 0x88, - 0x14, 0xed, 0x14, 0xc3, 0x48, 0x05, 0x1d, 0x3d, 0xbe, 0x26, 0xea, 0xe5, - 0x20, 0x2e, 0x9f, 0x86, 0x7f, 0x04, 0x40, 0x90, 0xf1, 0x05, 0x0d, 0x3f, - 0x19, 0x87, 0x8a, 0x54, 0x26, 0x22, 0x6a, 0x29, 0x80, 0x17, 0x73, 0xe2, - 0xda, 0x5d, 0x47, 0x39, 0x77, 0xb2, 0x75, 0xc1, 0xa3, 0xc7, 0x11, 0x2a, - 0xea, 0xc7, 0x91, 0x09, 0x14, 0x5a, 0x30, 0x83, 0xc5, 0x93, 0xf0, 0x2c, - 0xbc, 0x05, 0x02, 0x66, 0x9b, 0xa8, 0x7c, 0x33, 0x2a, 0xc5, 0x94, 0x2e, - 0x15, 0xf9, 0xb2, 0x16, 0xc7, 0x02, 0x03, 0xda, 0x96, 0x2d, 0xd9, 0x7f, - 0x6d, 0xf6, 0xbd, 0x8b, 0x0c, 0x4b, 0xc1, 0x05, 0xa7, 0x44, 0xc3, 0xba, - 0x43, 0x26, 0xe6, 0xea, 0x4c, 0xad, 0x51, 0xcb, 0x9b, 0xc7, 0xd2, 0x69, - 0x46, 0xaf, 0x7f, 0xba, 0xb0, 0xf7, 0x6e, 0xdb, 0xc2, 0x09, 0x6f, 0xc4, - 0xde, 0x5e, 0xc4, 0xb9, 0xef, 0xbf, 0x61, 0xb5, 0x77, 0xb4, 0x40, 0x4f, - 0x7f, 0x01, 0xe7, 0x3f, 0xaf, 0x0e, 0x14, 0xdc, 0xc7, 0x12, 0x48, 0x13, - 0x10, 0x43, 0x14, 0x72, 0xd0, 0xb9, 0xc2, 0x85, 0x0f, 0xc9, 0x0c, 0x77, - 0xf6, 0x77, 0xc3, 0x67, 0x90, 0x4c, 0x18, 0x3d, 0x92, 0x7c, 0x8f, 0xa0, - 0xa3, 0x23, 0xd6, 0xb1, 0x9b, 0xf6, 0x70, 0x78, 0x3d, 0xd5, 0x1d, 0xd2, - 0x96, 0xb2, 0x93, 0x09, 0x1d, 0xa4, 0xe4, 0xbb, 0x25, 0xe3, 0xf0, 0xcf, - 0xa9, 0xaf, 0x84, 0xfe, 0xc8, 0x5f, 0x63, 0x4b, 0x32, 0x3c, 0x07, 0x4e, - 0x86, 0x89, 0x0e, 0x55, 0xba, 0xba, 0x18, 0x7a, 0x1a, 0x05, 0xcf, 0xbe, - 0x18, 0x73, 0xb4, 0x39, 0xf6, 0xdb, 0x8d, 0xe0, 0xd1, 0x9f, 0x22, 0xd3, - 0x2f, 0x0c, 0x14, 0x0f, 0x23, 0x00, 0x0a, 0xd0, 0x56, 0x61, 0x60, 0x9a, - 0xf4, 0xc0, 0x16, 0x61, 0xec, 0x47, 0xe8, 0x55, 0x97, 0xaf, 0x4f, 0xc9, - 0x90, 0x9b, 0xa3, 0xc0, 0xb0, 0x40, 0x4e, 0x67, 0x09, 0x9f, 0xee, 0xf6, - 0x97, 0x2c, 0xad, 0x4d, 0x5a, 0xf9, 0xc3, 0x47, 0x51, 0xb4, 0x7b, 0xed, - 0x2b, 0xdf, 0x56, 0xd2, 0x22, 0xa4, 0xe4, 0x5b, 0x52, 0x65, 0x66, 0x85, - 0x73, 0x85, 0x88, 0x46, 0x20, 0x42, 0xec, 0xe1, 0x3f, 0x27, 0xc9, 0xe0, - 0xf8, 0x8c, 0x47, 0xf9, 0x34, 0x9f, 0x45, 0x73, 0xe2, 0x28, 0x97, 0x83, - 0x3c, 0x9a, 0x5a, 0x4d, 0xd9, 0x17, 0x52, 0xa4, 0x8e, 0xfa, 0xe8, 0x57, - 0x60, 0x4e, 0x7d, 0x9e, 0x89, 0xfb, 0x1d, 0xd9, 0x89, 0x30, 0x71, 0x70, - 0x4c, 0x1c, 0x46, 0x9c, 0x4e, 0x07, 0x19, 0x7d, 0x61, 0x44, 0x9a, 0xb7, - 0x8e, 0xd7, 0xc8, 0x53, 0xad, 0x48, 0xda, 0x45, 0x92, 0x8d, 0x48, 0xa1, - 0x4a, 0xb2, 0xd0, 0xe3, 0x79, 0x60, 0x05, 0x18, 0x2d, 0xfc, 0x8e, 0x67, - 0x0d, 0xad, 0x1f, 0x34, 0xa8, 0x21, 0x0c, 0xb8, 0x21, 0x7b, 0x9d, 0x7a, - 0x93, 0xd3, 0x8a, 0x2b, 0xe5, 0xaa, 0xbf, 0x80, 0x02, 0x96, 0x4c, 0x7f, - 0x43, 0xc9, 0x04, 0x77, 0x04, 0xaf, 0xff, 0x99, 0x7d, 0xa9, 0x6c, 0x14, - 0x88, 0xc3, 0xf3, 0x9e, 0xfa, 0x12, 0x25, 0xd7, 0x50, 0xcb, 0xa8, 0xbb, - 0x4e, 0x56, 0x93, 0x2f, 0xae, 0x25, 0x1f, 0x26, 0x92, 0x08, 0xdf, 0x5f, - 0xf9, 0x78, 0x16, 0x0b, 0x76, 0xcc, 0x1f, 0x22, 0xda, 0xe0, 0x7f, 0x69, - 0xa2, 0x26, 0xa0, 0x21, 0x5d, 0xce, 0x10, 0x12, 0x30, 0xa6, 0x20, 0xf3, - 0x21, 0x71, 0x24, 0xd7, 0xae, 0xea, 0xaa, 0xd0, 0x3e, 0x2e, 0x65, 0xb2, - 0xf1, 0x2b, 0x53, 0x88, 0x5d, 0x04, 0x96, 0xab, 0x56, 0xf1, 0x85, 0x12, - 0x5b, 0x98, 0xf0, 0x4b, 0x64, 0x46, 0xbe, 0x9f, 0x43, 0x5b, 0x00, 0xdd, - 0x82, 0xdd, 0xb1, 0x15, 0x1b, 0x0e, 0x34, 0x5d, 0xd7, 0x24, 0x89, 0x4d, - 0xa5, 0x33, 0x40, 0x11, 0x8f, 0xe2, 0x25, 0x6b, 0x15, 0xa9, 0x63, 0x00, - 0x0c, 0x20, 0x91, 0xe8, 0x13, 0xcd, 0x80, 0x93, 0x2c, 0x43, 0xa9, 0xa1, - 0x09, 0xdd, 0x0c, 0x52, 0x74, 0xac, 0xee, 0x47, 0xa8, 0x59, 0xe7, 0x17, - 0xf2, 0x16, 0xc2, 0xe3, 0x28, 0x33, 0x23, 0x94, 0x4d, 0x44, 0x0a, 0x60, - 0xf3, 0x4d, 0x8c, 0xb6, 0xb3, 0x15, 0x25, 0xa6, 0x58, 0x1f, 0xb9, 0x8e, - 0xa0, 0xe1, 0x0a, 0x7e, 0x12, 0x53, 0x49, 0x6c, 0xf1, 0xc4, 0x17, 0x9f, - 0x24, 0xd0, 0xa3, 0x85, 0x7c, 0x0a, 0xa8, 0x09, 0x80, 0xf2, 0x67, 0x48, - 0xc6, 0x10, 0xd8, 0xec, 0x8b, 0x59, 0xfd, 0x98, 0x8a, 0x4c, 0xa4, 0xa2, - 0xc3, 0x82, 0xcc, 0xe0, 0x2b, 0x32, 0xba, 0xf6, 0xc9, 0xc7, 0xb1, 0x78, - 0x7b, 0x75, 0x31, 0xbe, 0x49, 0x50, 0xb1, 0x7a, 0x71, 0xb5, 0x69, 0x35, - 0x49, 0xa6, 0x6b, 0x51, 0xf8, 0x33, 0x80, 0x69, 0x8e, 0x81, 0x99, 0x10, - 0xbb, 0x5a, 0x96, 0x29, 0xa0, 0x07, 0xd7, 0x09, 0xf4, 0xf3, 0x65, 0xcf, - 0x9f, 0x56, 0x84, 0xbf, 0x94, 0xfa, 0xd1, 0xc2, 0xf5, 0x80, 0x83, 0xad, - 0xcc, 0xf8, 0x93, 0x80, 0xdf, 0xe6, 0x07, 0x5c, 0x49, 0xda, 0x47, 0xb4, - 0xab, 0x04, 0x77, 0xf8, 0xce, 0x4b, 0x48, 0x2f, 0x2f, 0x3e, 0xcc, 0x53, - 0xfb, 0x11, 0x69, 0x69, 0xe1, 0x51, 0x92, 0x29, 0x52, 0xa3, 0x8b, 0x31, - 0x43, 0xab, 0xeb, 0x1b, 0x1a, 0x79, 0x4a, 0x8d, 0x99, 0x6b, 0xba, 0x5e, - 0x35, 0xfa, 0xc3, 0x59, 0x10, 0xb9, 0x4f, 0x12, 0xb9, 0x4b, 0x6b, 0x76, - 0xdb, 0x2e, 0xd6, 0x88, 0x9b, 0xb4, 0xfb, 0x24, 0xa9, 0x62, 0x03, 0xe5, - 0x9a, 0xbe, 0x91, 0x98, 0xab, 0x23, 0xa3, 0x1d, 0x7b, 0xe7, 0xa5, 0x0c, - 0xbf, 0x3d, 0x52, 0x67, 0x45, 0xf6, 0xa9, 0x7c, 0x64, 0x50, 0x2d, 0x01, - 0x3a, 0x96, 0x94, 0x81, 0x33, 0x99, 0x83, 0x0d, 0x9d, 0x91, 0x28, 0x0b, - 0xc2, 0xbf, 0x5f, 0x84, 0x06, 0x05, 0x26, 0xac, 0x8f, 0xd2, 0xa2, 0xc0, - 0xe2, 0xef, 0xdd, 0xfc, 0x7e, 0x6e, 0x17, 0x0f, 0xf6, 0xe6, 0xd6, 0x7e, - 0x9c, 0xdd, 0xdf, 0xcf, 0x6e, 0x1e, 0x3f, 0xd9, 0xb7, 0xb7, 0xf7, 0xf8, - 0x07, 0x7b, 0x77, 0x7f, 0xfb, 0xc7, 0xfd, 0xec, 0xfd, 0xd4, 0x3e, 0xde, - 0xd2, 0xcf, 0xf3, 0x7f, 0x3f, 0xce, 0x6f, 0x1e, 0xed, 0xdd, 0xfc, 0xfe, - 0xfd, 0xe2, 0xf1, 0x71, 0x7e, 0x65, 0xdf, 0x7c, 0x32, 0xb3, 0xbb, 0xbb, - 0xeb, 0xc5, 0xe5, 0xec, 0xcd, 0xf5, 0xdc, 0x5e, 0xcf, 0x3e, 0xe2, 0xf7, - 0xbb, 0xfe, 0x7d, 0x39, 0xbf, 0x7b, 0xb4, 0x1f, 0xdf, 0xcd, 0x6f, 0xec, - 0x2d, 0x2e, 0xff, 0x71, 0xf1, 0x30, 0xb7, 0x0f, 0x8f, 0x33, 0x7c, 0x61, - 0x71, 0x63, 0x3f, 0xde, 0x2f, 0x1e, 0x17, 0x37, 0x7f, 0xd0, 0x82, 0x97, - 0xb7, 0x77, 0x9f, 0xee, 0x17, 0x7f, 0xbc, 0x7b, 0x34, 0xef, 0x6e, 0xaf, - 0xaf, 0xe6, 0xf7, 0xf4, 0xb9, 0xb4, 0xef, 0x61, 0x77, 0x7a, 0xd1, 0xde, - 0xcd, 0xee, 0x1f, 0x17, 0xf3, 0x07, 0x84, 0xe3, 0xcf, 0xc5, 0xd5, 0x3c, - 0x85, 0xc9, 0x4e, 0x66, 0x0f, 0x00, 0xf6, 0xc4, 0x7e, 0x5c, 0x3c, 0xbe, - 0xbb, 0xfd, 0xf0, 0x18, 0x80, 0x37, 0xb7, 0x6f, 0x61, 0x91, 0x4f, 0xf6, - 0x5f, 0x8b, 0x9b, 0xab, 0xa9, 0x9d, 0x2f, 0x68, 0xa1, 0xf9, 0xbf, 0xef, - 0xee, 0xe7, 0x0f, 0x0f, 0x00, 0x00, 0xac, 0xbd, 0x78, 0x0f, 0x10, 0xcf, - 0xe1, 0x8f, 0x8b, 0x9b, 0xcb, 0xeb, 0x0f, 0x57, 0x00, 0xcb, 0xd4, 0xbe, - 0x81, 0x15, 0x6e, 0x6e, 0x1f, 0xed, 0xf5, 0x02, 0x4e, 0x06, 0x8f, 0x3d, - 0xde, 0x4e, 0x0d, 0xee, 0x26, 0xcf, 0xea, 0xea, 0x08, 0x0c, 0xac, 0xff, - 0x7e, 0x7e, 0x7f, 0xf9, 0x0e, 0x7e, 0x9c, 0xbd, 0x59, 0x5c, 0x2f, 0x00, - 0x5f, 0xf8, 0x8d, 0xb7, 0xb7, 0x8b, 0xc7, 0x1b, 0xd8, 0x82, 0x70, 0x37, - 0x63, 0xc8, 0x2f, 0x3f, 0x5c, 0xcf, 0xee, 0xcd, 0xdd, 0x87, 0xfb, 0xbb, - 0xdb, 0x87, 0xf9, 0x85, 0x65, 0x14, 0xc2, 0x22, 0x80, 0xf0, 0xfb, 0xc5, - 0xc3, 0xbf, 0x2c, 0x9c, 0x40, 0x10, 0xfb, 0xdf, 0x1f, 0x66, 0x61, 0x21, - 0xc0, 0x2e, 0xac, 0xf1, 0x7e, 0x76, 0x73, 0x39, 0xc7, 0xbd, 0x92, 0x33, - 0x1b, 0xb8, 0x26, 0x3c, 0xae, 0xfd, 0x74, 0xfb, 0x01, 0xf5, 0x06, 0x9c, - 0xfb, 0xfa, 0x2a, 0x43, 0x0a, 0x22, 0x6a, 0x6e, 0xaf, 0xe6, 0x6f, 0xe7, - 0x97, 0x8f, 0x8b, 0x3f, 0xe7, 0x53, 0x7c, 0x12, 0xb6, 0x79, 0xf8, 0xf0, - 0x7e, 0x2e, 0xf8, 0x7e, 0x78, 0x84, 0x45, 0xcd, 0xec, 0xfa, 0xda, 0xde, - 0xcc, 0x2f, 0x01, 0xde, 0xd9, 0xfd, 0x27, 0xfb, 0x30, 0xbf, 0xff, 0x73, - 0x71, 0x49, 0x78, 0xb8, 0x9f, 0xdf, 0xcd, 0x16, 0xf7, 0x88, 0xa5, 0xcb, - 0xdb, 0xfb, 0x7b, 0x5c, 0xe5, 0xf6, 0x86, 0xc9, 0xe8, 0xe7, 0x0b, 0x6e, - 0x71, 0x08, 0x69, 0xb7, 0x6b, 0xad, 0x9d, 0x67, 0xc1, 0x71, 0x83, 0x14, - 0x34, 0xff, 0x13, 0xe9, 0xe3, 0xc3, 0xcd, 0x35, 0x62, 0xe2, 0x7e, 0xfe, - 0xdf, 0x1f, 0xe0, 0xac, 0x48, 0x25, 0x36, 0xa7, 0x12, 0x5c, 0x7f, 0xf6, - 0xc7, 0xfd, 0x9c, 0x10, 0x9d, 0xd0, 0x84, 0xf9, 0xb8, 0x00, 0xc0, 0xf0, - 0xf6, 0x02, 0x61, 0x58, 0x26, 0x8c, 0x29, 0xbd, 0x02, 0x7f, 0x88, 0x84, - 0xf1, 0x09, 0x48, 0xec, 0xd6, 0xbe, 0xbf, 0xbd, 0x5a, 0xbc, 0xc5, 0x6b, - 0x11, 0xc2, 0xb9, 0xbc, 0xbd, 0xf9, 0x73, 0xfe, 0xe9, 0xc1, 0xa4, 0x58, - 0x01, 0x3c, 0x47, 0x92, 0x9d, 0xbd, 0xb9, 0x45, 0xc4, 0xbc, 0x01, 0x40, - 0x16, 0x04, 0x0f, 0x40, 0x80, 0x58, 0xc2, 0x7b, 0xbb, 0x9a, 0xbd, 0x9f, - 0xfd, 0x31, 0x7f, 0x48, 0x28, 0x03, 0xf7, 0x34, 0xf2, 0x1d, 0xec, 0xa9, - 0x7d, 0xb8, 0x9b, 0x5f, 0x2e, 0xf0, 0x1f, 0xf0, 0x77, 0xa0, 0x47, 0x20, - 0x80, 0x6b, 0x46, 0xd5, 0xcd, 0x03, 0x9c, 0x15, 0xaf, 0x16, 0x7e, 0x21, - 0x8b, 0xd8, 0x19, 0xdc, 0x31, 0xae, 0x80, 0xc4, 0xc9, 0xf7, 0x68, 0x3e, - 0x00, 0x23, 0x20, 0x01, 0xde, 0x28, 0xe1, 0xc0, 0xde, 0xf8, 0xbb, 0x14, - 0xd8, 0xb3, 0xb8, 0xf7, 0x21, 0x51, 0xda, 0xeb, 0xdb, 0x07, 0xa4, 0x40, - 0x73, 0x35, 0x7b, 0x9c, 0x59, 0x82, 0x18, 0xfe, 0xf7, 0xcd, 0x1c, 0x9f, - 0xbe, 0x9f, 0xdf, 0x00, 0xa2, 0x88, 0xc7, 0x66, 0x97, 0x97, 0x1f, 0xee, - 0x81, 0xdf, 0xf0, 0x09, 0x7c, 0x03, 0xa0, 0x79, 0xf8, 0x00, 0x1c, 0xb8, - 0xb8, 0xe1, 0xdb, 0xc0, 0xf3, 0x12, 0x8b, 0x2f, 0xee, 0xaf, 0x8c, 0x32, - 0x19, 0xd1, 0xed, 0xdb, 0xd9, 0xe2, 0xfa, 0xc3, 0xfd, 0x98, 0xf0, 0x70, - 0xe7, 0x5b, 0x40, 0x21, 0x2e, 0x49, 0x04, 0x98, 0xdc, 0x04, 0x3f, 0xf1, - 0x70, 0x3e, 0x35, 0x78, 0xf9, 0x76, 0xf1, 0x16, 0xb6, 0xba, 0x7c, 0x27, - 0xd7, 0x66, 0x33, 0x56, 0xfe, 0x64, 0xdf, 0xc1, 0x55, 0xbc, 0x99, 0xc3, - 0x63, 0xb3, 0xab, 0x3f, 0x17, 0xc4, 0x8e, 0xb2, 0x0f, 0x00, 0xb9, 0x10, - 0x9c, 0xc0, 0xe9, 0x68, 0x05, 0xc1, 0x23, 0x53, 0xdf, 0x2f, 0x17, 0xec, - 0x58, 0xe2, 0x87, 0x59, 0x02, 0x05, 0x3e, 0x1c, 0xb4, 0x4a, 0xa5, 0x3a, - 0xac, 0xcc, 0x84, 0x5e, 0xe8, 0xcb, 0xc2, 0x07, 0xeb, 0x8c, 0x90, 0x63, - 0x13, 0x48, 0x18, 0x35, 0xc3, 0xf5, 0xde, 0x12, 0xa0, 0x58, 0x3a, 0xb1, - 0x86, 0xea, 0x16, 0x47, 0x6e, 0x70, 0x0b, 0x15, 0xcf, 0xb7, 0x96, 0x2a, - 0x7b, 0x91, 0xc2, 0x3d, 0x35, 0xed, 0x71, 0xa1, 0xba, 0x41, 0x73, 0xd1, - 0xbd, 0xb0, 0x77, 0x34, 0x90, 0x1b, 0x48, 0x4e, 0x0f, 0xdb, 0xcc, 0xb2, - 0x52, 0xf1, 0x22, 0x91, 0x23, 0x1c, 0x0a, 0xb6, 0xaa, 0x5b, 0xee, 0x47, - 0xc6, 0xf6, 0xaa, 0x2f, 0xf4, 0xa5, 0x0e, 0x6f, 0x30, 0xb2, 0xba, 0xf4, - 0x6d, 0x8d, 0x53, 0x1c, 0x68, 0x7c, 0x37, 0x1b, 0x23, 0x68, 0x88, 0x57, - 0xcf, 0x55, 0x9d, 0xc0, 0x7e, 0x24, 0x72, 0x97, 0xb9, 0xc3, 0x5a, 0xce, - 0x9c, 0x75, 0xa8, 0xc5, 0xf6, 0x96, 0x1c, 0x11, 0xb1, 0xe9, 0x9e, 0xf3, - 0xf0, 0x07, 0x45, 0x90, 0xb8, 0x1d, 0x5c, 0xc5, 0xd0, 0x8d, 0x87, 0x0b, - 0x1f, 0xf9, 0x0f, 0xe8, 0x92, 0xee, 0xf9, 0xc4, 0xe7, 0x30, 0xe3, 0x7f, - 0xef, 0xf8, 0xeb, 0x62, 0x33, 0x42, 0x11, 0x17, 0x15, 0x3e, 0x6a, 0x83, - 0xc3, 0x27, 0x54, 0x79, 0x37, 0x60, 0xc1, 0x0a, 0x00, 0x3e, 0xc9, 0x63, - 0xca, 0xd7, 0xa5, 0x6c, 0xa1, 0x26, 0x6e, 0xfc, 0x74, 0x06, 0x8f, 0x3d, - 0xa7, 0x4f, 0x87, 0x49, 0x9e, 0x4e, 0xce, 0xf1, 0x44, 0xdd, 0xb6, 0x1e, - 0x34, 0x77, 0x2b, 0x59, 0xc0, 0xc1, 0x8f, 0x3a, 0x9c, 0xa7, 0x92, 0x9f, - 0xf3, 0x3d, 0x4f, 0xd2, 0xc2, 0xf2, 0xd1, 0x0d, 0xe5, 0x75, 0x42, 0x31, - 0xb2, 0x64, 0x67, 0xab, 0xde, 0xe4, 0x9f, 0x22, 0x66, 0xab, 0xc8, 0xe9, - 0xe7, 0xea, 0xf9, 0xab, 0x26, 0xc9, 0x27, 0xb7, 0x93, 0x6f, 0x8f, 0x87, - 0x2c, 0xa7, 0x4f, 0x1b, 0x1f, 0x1e, 0xa5, 0x52, 0x71, 0x8a, 0xa5, 0xfd, - 0x85, 0x84, 0xa4, 0xa3, 0x31, 0xab, 0x0d, 0x7c, 0xc1, 0x1d, 0xd0, 0xca, - 0xd4, 0x05, 0x79, 0x53, 0xbe, 0x58, 0xe3, 0xd1, 0x10, 0xe2, 0xf0, 0xf6, - 0x56, 0x1f, 0x06, 0x8b, 0x8a, 0x7b, 0x7e, 0xa8, 0x94, 0x2d, 0x69, 0xf6, - 0xe0, 0xaf, 0x06, 0x61, 0xea, 0x53, 0x87, 0xe6, 0xd7, 0x7b, 0x43, 0xf6, - 0x97, 0xc4, 0xd4, 0x93, 0xd9, 0x9a, 0xf9, 0x68, 0x6c, 0x5a, 0x89, 0x96, - 0xf0, 0x1b, 0x8a, 0x26, 0x91, 0x25, 0xae, 0x33, 0x08, 0xc9, 0x35, 0x9a, - 0xac, 0xe2, 0x17, 0x49, 0x6b, 0xf6, 0x7f, 0xf1, 0x2b, 0x96, 0xbb, 0x96, - 0x02, 0x23, 0x1c, 0xe5, 0xd2, 0x19, 0x4e, 0xeb, 0x21, 0x4c, 0x18, 0xc6, - 0xd3, 0xac, 0xd1, 0x44, 0x15, 0xe2, 0xfa, 0x27, 0xa2, 0x93, 0xde, 0xd7, - 0x49, 0x83, 0xc9, 0xf9, 0xbf, 0xf3, 0xd4, 0xd4, 0x26, 0x4b, 0x2f, 0xbb, - 0xca, 0xad, 0x31, 0x8f, 0x57, 0x58, 0x1d, 0x91, 0x25, 0x69, 0x9a, 0x8b, - 0xdf, 0x65, 0x36, 0x96, 0x5a, 0x59, 0x67, 0x97, 0xe7, 0xf6, 0x9f, 0x38, - 0x23, 0xf1, 0x77, 0xd8, 0x81, 0x96, 0x68, 0xb5, 0x89, 0xf4, 0x77, 0xde, - 0x97, 0x62, 0x19, 0xbb, 0x58, 0x3c, 0x94, 0x5d, 0xf7, 0xaf, 0xe1, 0x7b, - 0xe3, 0xd9, 0x25, 0x57, 0xbd, 0xcd, 0xbe, 0xce, 0x2d, 0xdd, 0x6b, 0xc7, - 0xf3, 0xda, 0x7f, 0xc5, 0x58, 0x2e, 0x7c, 0x62, 0xcd, 0x53, 0xff, 0xe7, - 0xd7, 0x2d, 0xfa, 0xa9, 0xfa, 0x36, 0x07, 0xf1, 0x83, 0x58, 0xd4, 0xc3, - 0xbd, 0x70, 0x67, 0x79, 0xef, 0xf3, 0xf9, 0xa1, 0xbb, 0x73, 0x71, 0x1c, - 0x0f, 0xf1, 0xb8, 0xe1, 0x43, 0x6a, 0x1b, 0xcc, 0x75, 0x69, 0xc7, 0x98, - 0x7a, 0xb2, 0xc0, 0x5c, 0x70, 0xab, 0x3c, 0x22, 0x19, 0x7d, 0x55, 0xb5, - 0xda, 0x50, 0x91, 0xa8, 0xe5, 0xf6, 0x5b, 0xfa, 0xe5, 0x6a, 0x5e, 0x4b, - 0x23, 0xf1, 0x51, 0x66, 0x71, 0x0f, 0xe0, 0xd8, 0x00, 0x03, 0x1c, 0x9f, - 0xb2, 0xbf, 0x6c, 0xb4, 0xbf, 0x1e, 0x1c, 0xbb, 0x87, 0xb8, 0xc2, 0x5f, - 0x70, 0xd5, 0x35, 0xad, 0xc6, 0x9e, 0xb4, 0x4e, 0x32, 0xc3, 0x1c, 0x59, - 0x4a, 0xe5, 0xa1, 0xda, 0x3e, 0xaf, 0xf6, 0xfc, 0xe6, 0xfa, 0x32, 0xf2, - 0x30, 0x19, 0x93, 0x17, 0x31, 0xcb, 0x1e, 0x23, 0x70, 0x00, 0x16, 0xe5, - 0x38, 0xfb, 0xcf, 0x4d, 0xdf, 0xef, 0x7e, 0xfd, 0xfe, 0xfb, 0x97, 0x97, - 0x97, 0x8b, 0xa7, 0x66, 0xb8, 0x68, 0xbb, 0xa7, 0xef, 0xb5, 0x12, 0xe9, - 0xfb, 0xdf, 0x01, 0xae, 0x19, 0x56, 0x95, 0x62, 0x3f, 0x58, 0x3a, 0x75, - 0x07, 0xe7, 0xdb, 0xb0, 0x40, 0xa5, 0xd4, 0x0c, 0x7f, 0xc1, 0x9e, 0x3e, - 0xc7, 0x80, 0x21, 0xe8, 0xae, 0x6d, 0x70, 0xa0, 0x19, 0x7e, 0xc6, 0xa6, - 0xd8, 0x61, 0x51, 0x15, 0x1c, 0x31, 0xa9, 0x0d, 0x49, 0x66, 0x5d, 0xae, - 0x8a, 0xf8, 0x91, 0x4d, 0x06, 0x95, 0x3f, 0x8b, 0xfd, 0x95, 0xa0, 0xa8, - 0x09, 0x5f, 0xf4, 0xdc, 0x47, 0x6c, 0xf1, 0x80, 0x76, 0x2e, 0x66, 0x49, - 0x86, 0xcc, 0x89, 0xce, 0x65, 0xcd, 0x14, 0xc6, 0xe5, 0xf0, 0x07, 0xe0, - 0xb9, 0x4e, 0x54, 0xbf, 0x66, 0x70, 0x3c, 0xee, 0xde, 0xa5, 0xe4, 0x08, - 0x6b, 0xb8, 0xa5, 0x26, 0x58, 0x98, 0x05, 0xf0, 0x6b, 0x42, 0xf1, 0x4b, - 0x5e, 0x1c, 0x1c, 0xd7, 0xb9, 0xd1, 0x85, 0x9d, 0xe8, 0xc7, 0xdb, 0x28, - 0x3c, 0xc7, 0x9d, 0x7c, 0xae, 0x28, 0x7d, 0x80, 0x81, 0x73, 0x9b, 0x20, - 0xf7, 0x9f, 0x9d, 0x09, 0xd9, 0xb7, 0x32, 0x14, 0xac, 0xf3, 0xc7, 0x96, - 0xf8, 0x63, 0x01, 0x7b, 0x9f, 0xc4, 0xdf, 0x65, 0x94, 0xaa, 0x0c, 0xdc, - 0xa3, 0x6f, 0x7b, 0x05, 0x67, 0x91, 0xf4, 0x39, 0x19, 0x2e, 0xca, 0x1e, - 0x4b, 0xd7, 0xf7, 0x52, 0x75, 0x15, 0xfb, 0x8e, 0xf5, 0x93, 0x5b, 0xbf, - 0x11, 0x11, 0x84, 0x96, 0x88, 0x9f, 0xd4, 0x79, 0x0d, 0x89, 0xdd, 0xc3, - 0x81, 0x7b, 0x9f, 0x46, 0x68, 0x47, 0x44, 0x12, 0xae, 0x1c, 0xa0, 0xae, - 0xdd, 0x63, 0x5d, 0x8b, 0x44, 0xce, 0xe3, 0xb7, 0x30, 0xf4, 0xbb, 0x8e, - 0xae, 0x3b, 0xa7, 0xca, 0x3e, 0xf4, 0x2f, 0x81, 0x63, 0xf9, 0xa3, 0x7b, - 0x94, 0xfb, 0xc4, 0x39, 0x58, 0x3c, 0x07, 0x4e, 0x05, 0x67, 0xb4, 0xb1, - 0x26, 0xb1, 0x98, 0x23, 0x0c, 0xf7, 0xc7, 0x39, 0x3b, 0xe1, 0xcb, 0x2f, - 0x6f, 0x43, 0x65, 0x45, 0x4e, 0xa3, 0x48, 0xf7, 0xd9, 0xc7, 0x45, 0xd9, - 0x42, 0xc2, 0x5f, 0x88, 0x57, 0x1b, 0xd8, 0x89, 0x3e, 0x15, 0x0e, 0xb8, - 0x30, 0xdf, 0x60, 0x88, 0xff, 0x2f, 0x00, 0x00, 0xff, 0xff, 0x0c, 0xd2, - 0xa8, 0x4c, 0xc3, 0x86, 0x00, 0x00, - }, - "conf/license/Affero GPL", - ) -} - -func conf_license_apache_v2_license() ([]byte, error) { - return bindata_read([]byte{ - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x09, 0x6e, 0x88, 0x00, 0xff, 0xdc, 0x5a, - 0xdf, 0x73, 0x1b, 0x47, 0x72, 0x7e, 0xf7, 0x5f, 0x31, 0x41, 0x55, 0x2a, - 0x64, 0xd5, 0x0a, 0xd2, 0x39, 0x77, 0x49, 0x4e, 0x7e, 0xa2, 0x45, 0xea, - 0x8c, 0x44, 0x06, 0x55, 0x04, 0x15, 0xc5, 0x8f, 0x83, 0xdd, 0x59, 0x60, - 0xa2, 0xc5, 0x0e, 0x3c, 0xb3, 0x4b, 0x10, 0x71, 0xf9, 0x7f, 0xcf, 0xd7, - 0x3d, 0x3f, 0x17, 0x00, 0x65, 0xa5, 0xf2, 0x76, 0x2c, 0xd7, 0x9d, 0x00, - 0xec, 0xf4, 0xf4, 0xf4, 0x8f, 0xaf, 0xbf, 0xee, 0xd9, 0x9b, 0xbd, 0xac, - 0xb7, 0x4a, 0x7c, 0xd0, 0xb5, 0xea, 0x9d, 0xfa, 0x4e, 0xbc, 0xfc, 0xf7, - 0x9f, 0xca, 0x3a, 0x6d, 0x7a, 0xf1, 0xfd, 0xfc, 0x4d, 0x25, 0xfe, 0x5d, - 0xf6, 0xa3, 0xb4, 0x47, 0xf1, 0xfd, 0x9b, 0x37, 0x7f, 0x7e, 0x71, 0xd1, - 0x76, 0x18, 0xf6, 0x6f, 0x5f, 0xbf, 0x3e, 0x1c, 0x0e, 0x73, 0xc9, 0xdb, - 0xcc, 0x8d, 0xdd, 0xbc, 0xee, 0xfc, 0x56, 0xee, 0xf5, 0x77, 0xb4, 0xf0, - 0xf1, 0xee, 0xe1, 0xe7, 0x95, 0xb8, 0x59, 0xde, 0x8a, 0x77, 0xf7, 0xcb, - 0xdb, 0xc5, 0xe3, 0xe2, 0x7e, 0xb9, 0x12, 0xef, 0xef, 0x1f, 0xc4, 0xa7, - 0xd5, 0x5d, 0x25, 0x1e, 0xee, 0x3e, 0x3e, 0xdc, 0xdf, 0x7e, 0x7a, 0x47, - 0x5f, 0x57, 0xfc, 0xd4, 0xed, 0x62, 0xf5, 0xf8, 0xb0, 0xf8, 0xf1, 0x13, - 0x7d, 0xc3, 0x02, 0xfe, 0x34, 0x17, 0xb7, 0xaa, 0xd5, 0xbd, 0x1e, 0xa0, - 0x9c, 0x9b, 0x7f, 0x17, 0xb4, 0x99, 0x85, 0x13, 0xcd, 0x84, 0xdb, 0xca, - 0xae, 0x13, 0x3b, 0x25, 0x7b, 0x31, 0xe0, 0xa4, 0x83, 0xb2, 0x3b, 0x27, - 0x64, 0xdf, 0x88, 0xda, 0xf4, 0x8d, 0x5f, 0x25, 0x5a, 0x63, 0xc5, 0xe8, - 0x54, 0x25, 0xac, 0xda, 0x5b, 0xd3, 0x8c, 0x35, 0x7d, 0x5d, 0x05, 0x51, - 0xf4, 0x6c, 0xa3, 0xdd, 0x60, 0xf5, 0x7a, 0xa4, 0xef, 0x85, 0x74, 0xa2, - 0xa1, 0x2d, 0x55, 0x23, 0xd6, 0x47, 0xb1, 0x52, 0xb5, 0x17, 0xf2, 0x27, - 0xc8, 0xb7, 0x66, 0xdc, 0x6c, 0xc5, 0x5f, 0x85, 0x69, 0xf1, 0x41, 0xe3, - 0x39, 0x53, 0x8f, 0x3b, 0xd5, 0x0f, 0xa7, 0x7a, 0x19, 0x7b, 0xa6, 0x58, - 0x6d, 0xf6, 0x47, 0xab, 0x37, 0xdb, 0x41, 0x98, 0x43, 0xaf, 0xac, 0x80, - 0x4a, 0x58, 0xa8, 0x87, 0xa3, 0x90, 0xe3, 0xb0, 0x35, 0x56, 0xff, 0x0f, - 0xef, 0x17, 0xe4, 0x5c, 0x5a, 0x31, 0x6c, 0xe5, 0x20, 0xb0, 0xe9, 0xc6, - 0x4a, 0x2c, 0xec, 0x37, 0xfc, 0x50, 0xb0, 0x43, 0xa1, 0x80, 0xda, 0xc8, - 0x4e, 0xdc, 0xb1, 0xe8, 0x33, 0x25, 0xc6, 0x9e, 0x0e, 0xc8, 0xda, 0x2b, - 0x21, 0x6b, 0x96, 0x12, 0xb5, 0x80, 0x19, 0xf0, 0x6c, 0x10, 0x63, 0xf0, - 0x40, 0x50, 0x50, 0x2b, 0xe7, 0xb7, 0x86, 0x41, 0x07, 0x6b, 0xba, 0x4a, - 0x48, 0xab, 0xe2, 0x87, 0x8e, 0x95, 0xae, 0xe8, 0x34, 0xf4, 0xed, 0xd8, - 0x37, 0x58, 0x56, 0x9b, 0xdd, 0xce, 0xf4, 0x41, 0x52, 0x78, 0x50, 0x1c, - 0xf4, 0xb0, 0xf5, 0x72, 0xfc, 0x86, 0x73, 0xf1, 0xde, 0x58, 0xd6, 0x63, - 0x3f, 0xda, 0xbd, 0x41, 0xc4, 0x64, 0xab, 0x26, 0x87, 0x47, 0x1f, 0xcd, - 0x82, 0x94, 0x19, 0x1f, 0xc5, 0x89, 0x2b, 0x7d, 0xed, 0x97, 0x9a, 0x83, - 0xb2, 0x15, 0xdc, 0x67, 0xe1, 0x25, 0x52, 0x42, 0xf7, 0xfe, 0xdf, 0x95, - 0x18, 0x8c, 0xa8, 0x25, 0x9c, 0x4e, 0xcf, 0x05, 0x29, 0xfe, 0x27, 0xb6, - 0x80, 0x15, 0x3b, 0xd9, 0xcb, 0x8d, 0x22, 0xe7, 0xd1, 0xbe, 0x6e, 0xac, - 0xb7, 0x41, 0xb1, 0x4a, 0x1c, 0xb6, 0x8a, 0x8f, 0x0f, 0xef, 0xf3, 0xbe, - 0x92, 0x65, 0x97, 0x96, 0x39, 0x68, 0x8a, 0x26, 0x48, 0xb9, 0xd2, 0xd0, - 0x84, 0xdd, 0xe3, 0xb6, 0x7a, 0x4f, 0x92, 0x5a, 0xdd, 0xc2, 0x9a, 0x7b, - 0x65, 0x6b, 0x12, 0x7d, 0xf5, 0x97, 0x37, 0xff, 0x78, 0xcd, 0xdb, 0x19, - 0x98, 0xc7, 0x1b, 0x3e, 0x0a, 0x1a, 0x07, 0x37, 0xc0, 0xea, 0xe4, 0x03, - 0xb8, 0xc9, 0x2a, 0x17, 0x25, 0x42, 0xe4, 0x5a, 0xf5, 0x30, 0x42, 0xad, - 0xe1, 0xca, 0x89, 0xf4, 0x42, 0xcf, 0xec, 0xf2, 0x5f, 0xcc, 0x38, 0x13, - 0x57, 0x58, 0x4b, 0xff, 0xb2, 0xb3, 0xeb, 0xd2, 0xeb, 0xf8, 0x8f, 0x6c, - 0xf2, 0xa4, 0x9b, 0x91, 0x64, 0x59, 0x51, 0xc6, 0x47, 0x10, 0xa0, 0x9e, - 0xa1, 0xad, 0x76, 0xa4, 0x08, 0xf4, 0xde, 0x69, 0xe7, 0x38, 0xe0, 0x39, - 0xce, 0x7c, 0x12, 0xb0, 0x5b, 0xce, 0x42, 0x6d, 0x85, 0xdd, 0x6a, 0xa4, - 0x20, 0xd2, 0x6b, 0x77, 0x1a, 0x69, 0x7b, 0xab, 0x5a, 0x65, 0x2d, 0x96, - 0xf3, 0xaf, 0x2d, 0x5b, 0xfc, 0x0b, 0x6d, 0xb1, 0x33, 0x8d, 0xc6, 0xd1, - 0x24, 0x67, 0x55, 0x74, 0xb0, 0xee, 0xeb, 0x6e, 0x64, 0x53, 0x20, 0x09, - 0x45, 0x6f, 0x06, 0xd1, 0xe9, 0x9d, 0xa6, 0xdd, 0xe1, 0x47, 0x67, 0xda, - 0xe1, 0x40, 0xe1, 0xe5, 0x78, 0x43, 0x38, 0xa5, 0x81, 0xf5, 0x63, 0xee, - 0xb1, 0xa0, 0x20, 0xc6, 0x3f, 0x50, 0xc5, 0xfc, 0x6f, 0xf5, 0x66, 0xb4, - 0xfc, 0x3b, 0xdc, 0xd2, 0xa9, 0x02, 0x3e, 0xee, 0xd7, 0xff, 0x8d, 0x50, - 0x38, 0x57, 0x5d, 0xf6, 0x47, 0xff, 0x1d, 0xdc, 0x31, 0x76, 0x9c, 0x1f, - 0xad, 0x35, 0x3b, 0xfc, 0x58, 0x6f, 0x65, 0x0f, 0xad, 0x63, 0x82, 0x20, - 0x2a, 0x7a, 0x47, 0x4f, 0xca, 0x18, 0x50, 0xfc, 0x4d, 0x17, 0x3e, 0xb6, - 0x42, 0x0a, 0x6f, 0x1e, 0x16, 0x57, 0x4d, 0x0f, 0x18, 0x64, 0x9c, 0x1c, - 0x13, 0x69, 0xb3, 0xd7, 0x94, 0x50, 0x86, 0x95, 0x0b, 0xc7, 0xdc, 0x20, - 0x12, 0x70, 0x06, 0x7c, 0x3d, 0x39, 0x70, 0x89, 0x5e, 0x38, 0xe9, 0x93, - 0x47, 0x6f, 0x47, 0x72, 0x7c, 0xee, 0xee, 0x54, 0xa3, 0xa5, 0x18, 0x8e, - 0xfb, 0xf2, 0xd8, 0x9f, 0x8d, 0xfd, 0x72, 0x06, 0x0a, 0x07, 0x7c, 0xc9, - 0x1a, 0x33, 0x0e, 0x51, 0xa4, 0xe5, 0x14, 0xd0, 0x7d, 0x3c, 0x46, 0x4a, - 0x00, 0x6f, 0xba, 0x70, 0xac, 0x9d, 0x6c, 0x00, 0x24, 0x4f, 0x52, 0x77, - 0x72, 0xdd, 0xc5, 0xfc, 0x2f, 0x70, 0xa9, 0x22, 0x34, 0xa5, 0x00, 0xac, - 0x65, 0x08, 0x25, 0x99, 0x70, 0x21, 0xa2, 0x1b, 0xcc, 0x80, 0x87, 0x13, - 0xbc, 0x79, 0x4b, 0xe1, 0x61, 0xcd, 0x66, 0x95, 0xc3, 0x40, 0xb5, 0x85, - 0x2d, 0x14, 0xb5, 0x0d, 0x22, 0xae, 0x70, 0x00, 0xf5, 0x2c, 0x77, 0x7b, - 0xec, 0x8c, 0x85, 0x80, 0x76, 0x84, 0xb9, 0x5f, 0x48, 0x4f, 0xde, 0xec, - 0xf7, 0x0a, 0x3b, 0x3f, 0x23, 0x99, 0x3a, 0x73, 0xb8, 0xce, 0x56, 0xb8, - 0x55, 0x56, 0x3f, 0xc1, 0x8a, 0x4f, 0x4a, 0x90, 0x41, 0xdc, 0xec, 0x34, - 0x02, 0x68, 0x8f, 0xcb, 0x36, 0x08, 0xa7, 0x0f, 0x92, 0xbc, 0x0d, 0xa2, - 0xe2, 0x6b, 0xe9, 0xc8, 0x79, 0x3d, 0xa7, 0x62, 0x43, 0x7b, 0x50, 0xf4, - 0x23, 0x7a, 0x3c, 0x56, 0xd1, 0x56, 0xec, 0x2e, 0xca, 0x85, 0xc3, 0x56, - 0xd7, 0xdb, 0x02, 0x0c, 0xe0, 0xac, 0x01, 0x35, 0x00, 0x99, 0x69, 0xd5, - 0x93, 0x66, 0x57, 0x52, 0x14, 0xc3, 0x34, 0x21, 0x4f, 0x84, 0x82, 0x85, - 0x8d, 0x8d, 0x9f, 0x20, 0x22, 0xb8, 0xb9, 0xcc, 0xa6, 0x20, 0x8c, 0xaa, - 0x9c, 0x72, 0x88, 0x14, 0xb6, 0xbe, 0xc4, 0x66, 0xa6, 0xe3, 0xa4, 0xc0, - 0x32, 0xbd, 0xd1, 0x3d, 0x76, 0x39, 0xf7, 0xf9, 0x39, 0x1e, 0x47, 0x9c, - 0x6a, 0x27, 0xe9, 0x5f, 0x89, 0x53, 0xf3, 0x05, 0xeb, 0x51, 0x34, 0x07, - 0xdf, 0xb1, 0xf8, 0x50, 0x35, 0xac, 0xda, 0x49, 0x9d, 0xf2, 0x53, 0xed, - 0xa5, 0xe5, 0x48, 0x21, 0xbb, 0xf0, 0x31, 0x76, 0xca, 0xaa, 0xee, 0x88, - 0x3c, 0xe8, 0xbf, 0xb0, 0xe1, 0xd6, 0x88, 0x16, 0x8a, 0x93, 0x5e, 0xee, - 0xd4, 0x75, 0x74, 0xba, 0x06, 0x10, 0xd9, 0x56, 0xd6, 0x5c, 0x24, 0xaa, - 0xa2, 0x46, 0x26, 0xa3, 0x9e, 0x29, 0x45, 0xd6, 0x51, 0xa6, 0xcd, 0x5e, - 0x7f, 0x47, 0x50, 0x1e, 0x6a, 0xfc, 0x45, 0x8f, 0x9f, 0xe6, 0x40, 0x4a, - 0xd9, 0x62, 0xbf, 0x64, 0xc0, 0x90, 0x70, 0xb1, 0x96, 0x26, 0x3d, 0x48, - 0xd8, 0xc4, 0x27, 0x1c, 0xc3, 0x4d, 0x60, 0x22, 0x51, 0x92, 0xf1, 0xb6, - 0xe1, 0x55, 0xf8, 0xfd, 0x25, 0xe5, 0xab, 0x22, 0x29, 0x06, 0x42, 0x7d, - 0x83, 0xad, 0xbb, 0x08, 0xdb, 0x6e, 0x5c, 0x03, 0x3b, 0x02, 0x78, 0x44, - 0xde, 0xc1, 0xd1, 0xc5, 0x9a, 0xb3, 0x7a, 0x21, 0x15, 0x78, 0x23, 0xc6, - 0xf1, 0x33, 0x5a, 0x11, 0xbd, 0xcc, 0xe5, 0xee, 0xab, 0xd5, 0xa2, 0x24, - 0x2a, 0x84, 0xca, 0xbc, 0x3d, 0xc5, 0xfb, 0x5a, 0xc1, 0x98, 0x2d, 0x4c, - 0xf1, 0x32, 0x79, 0xf9, 0xb6, 0x6a, 0x2f, 0x66, 0xe9, 0x4c, 0xb3, 0x20, - 0xcb, 0xd7, 0xfb, 0x04, 0xcb, 0x58, 0xa4, 0x3a, 0x24, 0xa0, 0x35, 0x00, - 0xe3, 0x8a, 0xbc, 0xb0, 0x96, 0x1d, 0xc7, 0xd1, 0xc1, 0xd2, 0xba, 0x9e, - 0xc9, 0xc7, 0xd8, 0x07, 0xeb, 0x0b, 0xca, 0x82, 0xd2, 0xe8, 0x2a, 0x1b, - 0x8a, 0xec, 0x34, 0xb8, 0x9c, 0x2c, 0x6c, 0x7f, 0x57, 0x7d, 0xb5, 0x14, - 0x25, 0xec, 0x2a, 0xf7, 0xc0, 0x7f, 0x59, 0x27, 0x20, 0xa2, 0xee, 0x68, - 0x71, 0x07, 0x4a, 0x09, 0x69, 0x45, 0xc9, 0x4a, 0x54, 0xc8, 0x1d, 0xdd, - 0xa0, 0x76, 0xae, 0x84, 0x70, 0xd4, 0xdc, 0x51, 0x51, 0x09, 0xa9, 0xb9, - 0x46, 0x86, 0x27, 0xbc, 0xfb, 0xa9, 0xf2, 0x79, 0xb6, 0x92, 0xb8, 0x56, - 0x69, 0xf4, 0xaa, 0x80, 0x91, 0x49, 0x14, 0x14, 0xd6, 0x26, 0xbb, 0x81, - 0xe3, 0xd6, 0xa3, 0xe3, 0x2a, 0xcf, 0x3b, 0xee, 0x18, 0x2f, 0x03, 0x8d, - 0xfc, 0xcc, 0x88, 0x97, 0x4b, 0x93, 0x7a, 0x8e, 0x46, 0x98, 0x9e, 0x35, - 0xc6, 0x23, 0x8e, 0xe2, 0xf6, 0xba, 0x1e, 0xcd, 0xe8, 0x90, 0xbc, 0x3b, - 0x69, 0xbf, 0x10, 0xf4, 0xd9, 0xcc, 0x8e, 0x22, 0xe5, 0x52, 0x4e, 0x6f, - 0x7a, 0xc6, 0x7e, 0x84, 0x22, 0xf9, 0x88, 0x0d, 0x7b, 0x31, 0x12, 0x09, - 0xac, 0x66, 0x4b, 0xd8, 0x5b, 0x8a, 0x32, 0x57, 0xe7, 0xb3, 0xf3, 0x14, - 0x3e, 0xe1, 0xd7, 0xe9, 0xd8, 0x31, 0x03, 0xff, 0x90, 0xf2, 0x94, 0x06, - 0x24, 0x7c, 0xdc, 0x9d, 0x6c, 0x2a, 0xb6, 0x50, 0x66, 0xad, 0x10, 0x4f, - 0xa0, 0x8c, 0x8a, 0x91, 0x1c, 0x4a, 0x97, 0xfb, 0xe4, 0x24, 0x74, 0xea, - 0xd7, 0x11, 0xf1, 0xd3, 0xd1, 0xb6, 0xb5, 0x81, 0xbd, 0x7d, 0xb9, 0x26, - 0xc2, 0x5b, 0xa4, 0x9f, 0x07, 0xa2, 0xef, 0xe7, 0xe2, 0x6f, 0x44, 0xab, - 0x68, 0xdb, 0x77, 0xe9, 0xf8, 0x91, 0x59, 0x89, 0xd5, 0xe8, 0x8b, 0x6b, - 0x88, 0xd5, 0x8b, 0xcd, 0x4c, 0x91, 0x66, 0x25, 0x2a, 0x2b, 0x54, 0x49, - 0x51, 0x18, 0x48, 0x10, 0x84, 0x40, 0x67, 0x66, 0x71, 0xcc, 0x0b, 0x40, - 0x0e, 0x71, 0x4a, 0x30, 0xbc, 0xbd, 0x1a, 0x60, 0x99, 0x18, 0x7e, 0x80, - 0xbe, 0xae, 0x39, 0x68, 0xe2, 0x1a, 0xbd, 0xe9, 0x5f, 0xb1, 0xe7, 0x1d, - 0x4e, 0x4c, 0x1f, 0x5f, 0x81, 0xf5, 0xd8, 0x0d, 0x35, 0x4e, 0xe6, 0x28, - 0xbb, 0xe1, 0xf8, 0xaa, 0xb5, 0x0a, 0x9f, 0x34, 0x88, 0xdd, 0x93, 0xa9, - 0x09, 0xc8, 0xcf, 0xaa, 0x79, 0xe8, 0xff, 0x68, 0xc3, 0xd8, 0x6d, 0x61, - 0x05, 0x72, 0x6c, 0x4f, 0x71, 0x7c, 0x86, 0x74, 0x19, 0xce, 0xf7, 0xe3, - 0x1a, 0x6b, 0x61, 0x45, 0x04, 0xea, 0xbe, 0x93, 0x08, 0xf4, 0xf4, 0x0d, - 0x74, 0xf6, 0xa5, 0xd6, 0xf1, 0x37, 0x81, 0x58, 0x94, 0x7d, 0x5b, 0x49, - 0xf3, 0x13, 0x16, 0x33, 0x59, 0x3e, 0xdb, 0xf1, 0x42, 0x39, 0x67, 0x6c, - 0xf1, 0x0e, 0xfa, 0xe7, 0xc2, 0x41, 0x1f, 0x25, 0x81, 0xee, 0xdf, 0x81, - 0x77, 0xae, 0xb0, 0x4c, 0xed, 0x07, 0x4a, 0x30, 0xb4, 0x1c, 0x43, 0xa4, - 0x48, 0x50, 0xd0, 0xf9, 0x86, 0xe8, 0x5a, 0xec, 0xfd, 0x59, 0x0b, 0xef, - 0x81, 0xae, 0x43, 0xd8, 0x56, 0x3e, 0x29, 0x66, 0x79, 0x51, 0x21, 0xee, - 0xa3, 0x4d, 0xdb, 0x12, 0xcf, 0x43, 0x11, 0x50, 0x1d, 0xe0, 0xd7, 0xff, - 0x2f, 0x10, 0xc5, 0xd8, 0xc1, 0x3b, 0x26, 0xe1, 0x40, 0x20, 0xca, 0x81, - 0x15, 0x32, 0xcc, 0xc4, 0x93, 0x91, 0x09, 0xbc, 0x8f, 0xe2, 0xae, 0x72, - 0xbf, 0xef, 0xa8, 0xdd, 0x34, 0x3d, 0x9c, 0xce, 0x56, 0x26, 0xec, 0x0a, - 0xaa, 0xd5, 0x9d, 0xd4, 0xb0, 0xb7, 0x7f, 0xb6, 0x38, 0x1c, 0xac, 0xc8, - 0x42, 0x4a, 0xeb, 0x26, 0xdc, 0xec, 0x91, 0xbd, 0xce, 0x49, 0xab, 0x39, - 0x3b, 0x5b, 0x0b, 0xf4, 0x89, 0x1d, 0x8d, 0xd2, 0xb1, 0xf6, 0x95, 0x89, - 0x7f, 0xe5, 0xae, 0xd1, 0x06, 0x9b, 0x5e, 0x85, 0x8a, 0x08, 0xf8, 0x03, - 0x23, 0x49, 0xac, 0x9e, 0x97, 0x9d, 0x2e, 0x88, 0x07, 0xf2, 0x1d, 0x6e, - 0xa8, 0xb6, 0x50, 0xdf, 0x93, 0xbc, 0xa9, 0x72, 0x61, 0x8b, 0x03, 0xb9, - 0x22, 0xd6, 0xba, 0xb9, 0x58, 0xb4, 0xe4, 0xff, 0xd4, 0x0b, 0x39, 0x20, - 0x15, 0xc5, 0x74, 0x72, 0xca, 0xa0, 0x37, 0x5e, 0x05, 0xb9, 0x91, 0xf4, - 0x33, 0x83, 0x5c, 0x68, 0xdc, 0xaf, 0x72, 0xc1, 0x4a, 0xdc, 0xda, 0x1a, - 0xe7, 0x5e, 0xb1, 0xc1, 0xe8, 0x18, 0xb5, 0x19, 0x89, 0x3f, 0xf9, 0xcf, - 0xf0, 0xbc, 0x14, 0x9d, 0x3c, 0xb8, 0x51, 0x0f, 0x74, 0xd4, 0x4e, 0x6d, - 0x7c, 0x11, 0x80, 0xc5, 0xa2, 0xf2, 0x99, 0x13, 0x9c, 0xa0, 0xe2, 0xd7, - 0x00, 0x8e, 0x6b, 0x82, 0x57, 0xdc, 0x85, 0x56, 0x3b, 0xcb, 0xa9, 0xb3, - 0x73, 0x8e, 0xf1, 0x58, 0xd1, 0x1f, 0x3b, 0x66, 0xaa, 0x10, 0xe3, 0xa9, - 0xd8, 0x34, 0x12, 0x23, 0x65, 0x8a, 0xcd, 0x68, 0xc8, 0x94, 0xd8, 0x68, - 0xe4, 0x1c, 0x0b, 0x25, 0x2f, 0xb2, 0x2a, 0x5f, 0x1d, 0x28, 0x45, 0xc9, - 0x7b, 0x31, 0x56, 0xa4, 0x8b, 0x84, 0xad, 0xc1, 0x97, 0x31, 0xf8, 0x92, - 0x75, 0x21, 0x8d, 0xfa, 0xc4, 0xc6, 0x43, 0xc1, 0x9f, 0xe7, 0xe2, 0x41, - 0x95, 0x93, 0xa1, 0x39, 0x6f, 0xbd, 0x93, 0xc7, 0x8c, 0x6c, 0xa7, 0x28, - 0x04, 0x1c, 0xd4, 0x91, 0xdb, 0x4c, 0xf0, 0xe8, 0x2b, 0x2c, 0x8f, 0x5d, - 0x42, 0xb4, 0x11, 0x9b, 0x8d, 0x00, 0x39, 0x8e, 0x23, 0x62, 0x34, 0xf8, - 0x7f, 0x93, 0x2a, 0xf2, 0xb4, 0x6d, 0xf6, 0x25, 0xfc, 0x05, 0x24, 0xab, - 0x72, 0x2b, 0xc4, 0x06, 0xc9, 0xa1, 0xb5, 0x53, 0xca, 0x7b, 0xb9, 0x35, - 0x1d, 0x7a, 0x22, 0x5f, 0xdf, 0x23, 0x76, 0xbd, 0xfd, 0x2e, 0xf5, 0x55, - 0xd7, 0xfe, 0xa4, 0x23, 0x22, 0x6d, 0x43, 0xfa, 0x92, 0x7a, 0xbe, 0xdf, - 0x80, 0x5b, 0x35, 0x8e, 0x48, 0xa0, 0x55, 0x52, 0xdf, 0xd4, 0x1d, 0xd2, - 0xdf, 0xd9, 0x41, 0x25, 0xd7, 0x87, 0xd3, 0x4e, 0xe2, 0x07, 0x2e, 0xa3, - 0x71, 0xcf, 0x75, 0xb1, 0xa7, 0x1f, 0xdc, 0x64, 0x2a, 0x4d, 0x7d, 0x14, - 0xf5, 0xef, 0x7e, 0xa8, 0x63, 0x29, 0x84, 0xd0, 0x3e, 0xe8, 0x9e, 0xe2, - 0xc4, 0x77, 0x8f, 0xae, 0xd8, 0x9e, 0x20, 0x2e, 0x85, 0x34, 0xc9, 0xa4, - 0xd6, 0x7d, 0xc3, 0xc6, 0x50, 0x5e, 0xce, 0x74, 0xe7, 0xba, 0xd8, 0xd9, - 0xaa, 0x01, 0x09, 0x56, 0x45, 0xde, 0x5c, 0xb4, 0xf0, 0xdc, 0x1d, 0x40, - 0xa3, 0xd3, 0xc3, 0x15, 0x1b, 0xa7, 0x0d, 0x73, 0x40, 0x54, 0x94, 0x61, - 0xb9, 0x3a, 0x56, 0x21, 0xba, 0x2b, 0x82, 0xc5, 0x46, 0x11, 0x6f, 0xaa, - 0x0a, 0x32, 0xc1, 0x21, 0x3a, 0xe4, 0x74, 0x0b, 0x67, 0xf3, 0x23, 0x88, - 0x0b, 0xfa, 0x9c, 0x42, 0x2a, 0xfd, 0x65, 0xe6, 0xe6, 0xd1, 0x33, 0xca, - 0x60, 0xe5, 0x1a, 0xc3, 0x84, 0x16, 0x55, 0x86, 0x8e, 0x49, 0xe6, 0xf4, - 0x19, 0x67, 0x87, 0x5c, 0xb8, 0xfc, 0x49, 0xce, 0x4b, 0xf5, 0xd4, 0x68, - 0xcd, 0x35, 0x81, 0x56, 0xf2, 0x7f, 0x68, 0xfc, 0xc8, 0xd5, 0xb3, 0xe5, - 0xfd, 0xe3, 0xe2, 0xdd, 0xdd, 0x0c, 0xc9, 0xf7, 0x3c, 0xb0, 0xbd, 0x29, - 0xed, 0xc2, 0x1e, 0x44, 0xb9, 0x8b, 0x7d, 0xca, 0xec, 0x2a, 0x20, 0xe0, - 0x42, 0xa6, 0x9c, 0x59, 0x96, 0xfd, 0x55, 0x88, 0x8a, 0xad, 0xa7, 0x84, - 0x0f, 0x65, 0xc3, 0x3d, 0x66, 0x0e, 0x3a, 0x75, 0xd1, 0xac, 0x04, 0x4a, - 0x92, 0xe6, 0xbc, 0x85, 0x98, 0x00, 0x6a, 0x8c, 0x0c, 0xfe, 0x20, 0x7c, - 0x84, 0xea, 0x5b, 0xec, 0x5a, 0x88, 0xb9, 0x6c, 0xe1, 0x8b, 0x76, 0xe5, - 0x60, 0x83, 0x8c, 0x4e, 0x49, 0x47, 0xed, 0x54, 0x39, 0xa5, 0x0f, 0x4b, - 0x72, 0xb6, 0x82, 0x18, 0x61, 0xd3, 0xb7, 0x51, 0x4d, 0x19, 0x75, 0xcc, - 0xb6, 0xce, 0x16, 0x9a, 0x44, 0x95, 0xfb, 0xaa, 0x0e, 0x3f, 0x94, 0x60, - 0x3e, 0x09, 0xb2, 0x32, 0xaf, 0xa7, 0x03, 0x28, 0xa1, 0xdb, 0x8c, 0x33, - 0x54, 0x32, 0x37, 0xb9, 0x02, 0x9e, 0xcb, 0x37, 0xb6, 0x3a, 0xb7, 0xb2, - 0x8c, 0x5c, 0xaf, 0x98, 0x72, 0x85, 0xde, 0xe0, 0x82, 0x95, 0xda, 0x93, - 0x4c, 0x61, 0x02, 0x81, 0x0e, 0xd0, 0x3b, 0x0b, 0x02, 0x6d, 0xf3, 0x8a, - 0x0e, 0x79, 0x4c, 0xbe, 0xe9, 0x69, 0x3e, 0x87, 0x86, 0x99, 0x88, 0x85, - 0x92, 0x68, 0x42, 0x1f, 0xb7, 0xbe, 0x0b, 0x23, 0xfc, 0x3a, 0x37, 0x73, - 0xe1, 0x6f, 0x26, 0x0f, 0xbe, 0x95, 0x4e, 0x43, 0x3e, 0xf4, 0x10, 0xb9, - 0x79, 0x25, 0x86, 0x32, 0x55, 0x27, 0xe4, 0x16, 0x23, 0xd6, 0x71, 0x32, - 0x9b, 0x4f, 0x65, 0x43, 0x36, 0x0d, 0xfd, 0xdb, 0x52, 0xbf, 0x53, 0x46, - 0x64, 0x21, 0x25, 0xaa, 0x1e, 0x2c, 0xf4, 0x2d, 0x99, 0x50, 0x79, 0xeb, - 0x3b, 0x38, 0xa2, 0x3c, 0x13, 0xf7, 0x53, 0x34, 0xde, 0x68, 0x1a, 0xd5, - 0x37, 0xe3, 0x2e, 0xd2, 0xd6, 0x49, 0xc4, 0x44, 0x60, 0xf1, 0xfd, 0x5f, - 0x74, 0xe7, 0x29, 0xa6, 0xb1, 0x81, 0xe3, 0x10, 0x03, 0x66, 0xb8, 0x98, - 0x4c, 0x3c, 0xad, 0x42, 0xcf, 0xe4, 0x79, 0x80, 0x1d, 0x4f, 0xe3, 0xcf, - 0x1b, 0xe6, 0xa5, 0x7b, 0x8b, 0x8b, 0x26, 0xca, 0x5d, 0x05, 0xd3, 0x56, - 0x1e, 0xd6, 0x7b, 0x02, 0x70, 0x32, 0xf8, 0x2a, 0x5c, 0x41, 0x42, 0xc2, - 0x39, 0x4a, 0x95, 0x69, 0x24, 0xa7, 0x89, 0xb5, 0x4e, 0x58, 0xee, 0x05, - 0x06, 0x9f, 0x47, 0x7b, 0x17, 0xae, 0x8c, 0xbc, 0x98, 0xe2, 0xae, 0xc8, - 0xb4, 0x17, 0xb4, 0xa9, 0x72, 0xda, 0xb4, 0xdc, 0x2c, 0x1e, 0x5f, 0x68, - 0x45, 0xca, 0xe9, 0x5c, 0x4a, 0x25, 0x96, 0x47, 0x5b, 0x17, 0xd3, 0xbc, - 0xac, 0xc0, 0xd9, 0x6d, 0xd5, 0xa4, 0x0a, 0x27, 0xd6, 0x4d, 0xb3, 0x64, - 0xa6, 0xd2, 0x14, 0x47, 0x93, 0xb1, 0x4c, 0xea, 0x54, 0x4e, 0x3a, 0x81, - 0x89, 0x43, 0xfe, 0xc2, 0xcd, 0x4e, 0xb8, 0x09, 0xf0, 0xbd, 0x6a, 0x66, - 0x81, 0x6e, 0x2e, 0x3e, 0xf5, 0xa8, 0xa2, 0x8e, 0x9d, 0xa6, 0x9e, 0xb1, - 0x51, 0xad, 0xa9, 0xfd, 0x65, 0x89, 0xc5, 0x05, 0x49, 0x9a, 0x6f, 0x1c, - 0x4f, 0x59, 0x64, 0x31, 0xcc, 0x2a, 0xc6, 0x58, 0x2f, 0x8e, 0xae, 0x32, - 0xd3, 0xa7, 0x1d, 0x4f, 0x07, 0x39, 0x9e, 0xea, 0xad, 0xcb, 0xe9, 0xf3, - 0xff, 0xa5, 0x35, 0x0b, 0x34, 0x8b, 0xd5, 0x2c, 0x02, 0xc6, 0x8b, 0xf0, - 0xd4, 0xb5, 0x89, 0xb7, 0x8f, 0x7e, 0xfd, 0xd2, 0x0c, 0xb4, 0x28, 0xdd, - 0xde, 0x70, 0x7d, 0x59, 0x1b, 0xdf, 0x94, 0x51, 0xda, 0x6e, 0xb8, 0xbd, - 0xa3, 0x32, 0xc2, 0xaa, 0xb9, 0x11, 0xe5, 0xc0, 0xa9, 0x46, 0xf9, 0x8b, - 0x20, 0x4a, 0x83, 0xc2, 0x25, 0x61, 0x23, 0xcf, 0x2e, 0xfc, 0x80, 0x14, - 0x56, 0x4c, 0x2d, 0xd1, 0x06, 0x3d, 0x1d, 0x07, 0xfe, 0x31, 0x64, 0x08, - 0x77, 0x64, 0xea, 0x59, 0xd5, 0x05, 0xc4, 0x33, 0xf0, 0x26, 0x83, 0x58, - 0xb5, 0x91, 0xd6, 0xdf, 0x2b, 0x9d, 0xf6, 0x1e, 0xe1, 0x2e, 0xe0, 0x5f, - 0x00, 0x85, 0x91, 0x80, 0x38, 0x82, 0xc5, 0x82, 0x47, 0x37, 0x86, 0x91, - 0x73, 0xf0, 0x94, 0xbb, 0xb8, 0x11, 0x22, 0xc3, 0x87, 0x0b, 0x35, 0x4f, - 0x5f, 0xe2, 0x35, 0x86, 0xdc, 0xd1, 0xdc, 0x2c, 0x31, 0x1a, 0x9a, 0x7a, - 0x29, 0xfb, 0x44, 0x33, 0xfd, 0xf0, 0x11, 0x3a, 0x85, 0x18, 0xf6, 0x0f, - 0xc7, 0xa0, 0x8d, 0x1a, 0x57, 0x79, 0xea, 0x14, 0xda, 0x54, 0xab, 0x7e, - 0x1d, 0x75, 0xb8, 0x3d, 0xa2, 0x82, 0xee, 0xe0, 0x13, 0x2a, 0xe9, 0xec, - 0x52, 0x14, 0x7e, 0xb3, 0xa3, 0xeb, 0x69, 0xd2, 0x06, 0x56, 0x06, 0xef, - 0xa8, 0x71, 0xc0, 0xe0, 0x8a, 0xd4, 0x74, 0xd0, 0xa4, 0xf6, 0x6c, 0x3e, - 0x1b, 0xb3, 0x29, 0xfa, 0x2d, 0x54, 0x83, 0x0b, 0x25, 0xc0, 0x5b, 0xea, - 0x5f, 0xe7, 0xe2, 0x56, 0x3b, 0x6e, 0x9d, 0xe8, 0xd2, 0xb6, 0x15, 0x9f, - 0xc1, 0x3f, 0x61, 0x97, 0x63, 0x4a, 0x82, 0xa4, 0xea, 0xfa, 0xe8, 0x1b, - 0x58, 0xee, 0xbc, 0xa9, 0xc5, 0xca, 0x30, 0xc0, 0x5e, 0xe4, 0xe6, 0x25, - 0x4f, 0xc1, 0xaa, 0xec, 0xb0, 0x90, 0xfb, 0x2e, 0xab, 0x7a, 0x45, 0xba, - 0xd2, 0xd0, 0xe0, 0xb4, 0x45, 0x2d, 0x9f, 0xa6, 0xf1, 0xe5, 0xc4, 0xb9, - 0xd7, 0x34, 0xd7, 0x02, 0xe4, 0xcf, 0x6e, 0x56, 0x62, 0xb1, 0x9a, 0x89, - 0x1f, 0x6f, 0x56, 0x8b, 0x55, 0x34, 0xee, 0xe7, 0xc5, 0xe3, 0x4f, 0xf7, - 0x9f, 0x1e, 0xc5, 0xe7, 0x9b, 0x87, 0x87, 0x9b, 0xe5, 0xe3, 0xe2, 0x6e, - 0x25, 0xee, 0x1f, 0xca, 0x6b, 0xf9, 0xfb, 0xf7, 0xe2, 0x66, 0xf9, 0x8b, - 0xf8, 0x8f, 0xc5, 0xf2, 0x16, 0x74, 0x47, 0xfb, 0x1b, 0xe0, 0x67, 0x9a, - 0x8e, 0xba, 0x7c, 0x12, 0xcd, 0xb8, 0xd2, 0x14, 0x63, 0xd2, 0x9c, 0x41, - 0x3c, 0x27, 0x95, 0x11, 0xa7, 0x8e, 0x68, 0x72, 0xd9, 0x54, 0xdc, 0x10, - 0xd9, 0x73, 0x88, 0x85, 0x31, 0x1f, 0x17, 0x8f, 0x1f, 0xee, 0x2a, 0x58, - 0x7d, 0xf9, 0x6a, 0xb1, 0x7c, 0xff, 0xb0, 0x58, 0xfe, 0xed, 0xee, 0xe7, - 0xbb, 0xe5, 0x63, 0x25, 0x7e, 0xbe, 0x7b, 0x78, 0xf7, 0x13, 0xb4, 0xbc, - 0xf9, 0x71, 0xf1, 0x61, 0xf1, 0xf8, 0x0b, 0x87, 0xd0, 0xfb, 0xc5, 0xe3, - 0xf2, 0x6e, 0xe5, 0x5f, 0x1f, 0xb8, 0x09, 0x32, 0x3e, 0xde, 0x3c, 0xc0, - 0x61, 0x9f, 0x3e, 0xdc, 0x3c, 0x88, 0x8f, 0x9f, 0x1e, 0x3e, 0xde, 0xaf, - 0xee, 0x7c, 0xb5, 0xf5, 0xb7, 0x85, 0x1d, 0xdd, 0x2c, 0x40, 0xff, 0x3d, - 0x36, 0xd5, 0x7c, 0xeb, 0xc0, 0x37, 0x33, 0xbe, 0x2b, 0x9c, 0x86, 0x0b, - 0x3c, 0x67, 0xcd, 0xde, 0x6a, 0xa2, 0xe7, 0x7c, 0xe0, 0x16, 0xd1, 0x45, - 0x8f, 0x70, 0xfc, 0x65, 0xc4, 0x2d, 0xe6, 0xa5, 0x7e, 0xda, 0xe8, 0x1c, - 0x38, 0x11, 0x1d, 0x37, 0xc2, 0xb5, 0x76, 0x8c, 0xec, 0xce, 0xd4, 0x3a, - 0xb5, 0xc9, 0x1e, 0xd4, 0xc3, 0x3d, 0x2b, 0x4f, 0x63, 0xcb, 0x8b, 0xd6, - 0xf3, 0x66, 0xd6, 0xc7, 0xde, 0xbf, 0xcd, 0xf1, 0x39, 0x9a, 0x94, 0x16, - 0x7d, 0xd0, 0x72, 0xad, 0x3b, 0xbe, 0x3c, 0x5f, 0x50, 0xe5, 0x15, 0xa0, - 0x3f, 0xfd, 0xc0, 0x7a, 0x78, 0x19, 0xf8, 0xaa, 0xe3, 0x61, 0x27, 0x74, - 0x44, 0xa7, 0x5d, 0x8c, 0x5a, 0xe2, 0x4d, 0x16, 0x02, 0x68, 0x28, 0x47, - 0x06, 0xbd, 0xda, 0x74, 0x1a, 0xec, 0xab, 0x56, 0xd7, 0x55, 0xba, 0xed, - 0xae, 0x26, 0xa3, 0xdc, 0x34, 0xf9, 0xf9, 0xc3, 0x78, 0xbf, 0xf2, 0x44, - 0x81, 0x66, 0xfa, 0x9d, 0x5e, 0x33, 0xa1, 0x63, 0xe5, 0x36, 0x34, 0x8f, - 0x48, 0xf7, 0x16, 0x71, 0xcb, 0x81, 0xde, 0x40, 0x70, 0x7c, 0x3b, 0x7e, - 0x39, 0x3f, 0x3c, 0x7a, 0x4e, 0xca, 0x07, 0x0d, 0x65, 0xa2, 0xcb, 0x3a, - 0xcd, 0x1b, 0x87, 0x89, 0x00, 0xbb, 0x56, 0xee, 0xe4, 0x66, 0x3a, 0xc3, - 0xa7, 0xd5, 0xf1, 0x95, 0x80, 0xfc, 0x72, 0x80, 0xdb, 0x2b, 0xba, 0x5b, - 0x2f, 0x6e, 0x9f, 0x91, 0x50, 0x20, 0xb6, 0xfe, 0x2a, 0x81, 0x08, 0x8c, - 0x9f, 0xe9, 0xd2, 0x85, 0x5c, 0x10, 0x1a, 0x11, 0x9a, 0x66, 0x6e, 0xd0, - 0x9b, 0xc6, 0xd5, 0xd6, 0xdf, 0x99, 0x53, 0x15, 0x4f, 0xb5, 0x9a, 0x6e, - 0x8d, 0x4f, 0x1b, 0x5d, 0xb6, 0xe6, 0x98, 0x30, 0x66, 0xf4, 0xdf, 0xe8, - 0x3e, 0x38, 0xb3, 0xc0, 0xd5, 0x72, 0x62, 0x70, 0xf5, 0xd5, 0x3b, 0xf1, - 0xa8, 0x15, 0x1d, 0xbb, 0x33, 0x3e, 0x60, 0x37, 0xc6, 0x34, 0x07, 0xdd, - 0x95, 0xb3, 0xc3, 0x2f, 0x28, 0xca, 0x66, 0xbf, 0x97, 0x34, 0x25, 0x24, - 0x4e, 0x30, 0x92, 0xe2, 0xad, 0xd4, 0xdd, 0x68, 0x7d, 0x35, 0x92, 0x5d, - 0x3b, 0xf6, 0x99, 0xdc, 0x70, 0x11, 0xbc, 0xf0, 0x26, 0x08, 0xdd, 0x02, - 0x50, 0xf0, 0x96, 0xf6, 0xf0, 0x1b, 0x2b, 0x87, 0xc0, 0xa1, 0x38, 0x24, - 0x82, 0x7e, 0x3a, 0x88, 0x0b, 0x32, 0xd2, 0x30, 0x5d, 0x36, 0x4f, 0x9a, - 0x2f, 0x49, 0xdb, 0xf0, 0xfa, 0x06, 0x32, 0x20, 0x18, 0x21, 0xbe, 0xdc, - 0x10, 0xc4, 0xfb, 0x0c, 0xf8, 0xeb, 0x5c, 0xdc, 0xd4, 0x54, 0x13, 0xc8, - 0x0a, 0x11, 0x79, 0x69, 0xe7, 0x9b, 0x5c, 0xa8, 0x8b, 0xa4, 0xf8, 0xbc, - 0x25, 0xea, 0x3e, 0x4d, 0xd7, 0xd3, 0xcb, 0xc2, 0xaf, 0x5e, 0xb7, 0x45, - 0x16, 0x5a, 0x6f, 0x8d, 0xf1, 0x53, 0x50, 0x9e, 0x74, 0x4e, 0x2e, 0xdb, - 0x79, 0xe6, 0x0a, 0xde, 0xd6, 0x2a, 0xc6, 0x13, 0x40, 0x1d, 0x6b, 0x28, - 0xfb, 0x5a, 0xf9, 0x43, 0xec, 0xfd, 0x18, 0x34, 0xa0, 0xdf, 0x91, 0xe3, - 0x4e, 0xed, 0x7a, 0x7a, 0xb5, 0x24, 0x0f, 0xc4, 0xbc, 0x59, 0xbb, 0xa8, - 0xbb, 0x30, 0xeb, 0x2e, 0x4c, 0xa1, 0x98, 0xb7, 0xbc, 0x26, 0xd8, 0x21, - 0xe6, 0xeb, 0xaf, 0x5a, 0x70, 0x1e, 0xca, 0x97, 0xd0, 0x5f, 0x69, 0x37, - 0xb9, 0xee, 0x41, 0x83, 0xf1, 0x93, 0x39, 0x50, 0x27, 0xe4, 0x5b, 0xc9, - 0x64, 0x30, 0xb6, 0x67, 0x21, 0x38, 0x9f, 0x8f, 0xdf, 0x68, 0xe9, 0xbb, - 0xe2, 0x36, 0x24, 0x71, 0xee, 0x70, 0x2d, 0xc2, 0x43, 0xdc, 0xf0, 0x35, - 0x01, 0x69, 0x86, 0x51, 0xd6, 0x97, 0x99, 0x4e, 0xbe, 0x45, 0xc9, 0x88, - 0x9e, 0x27, 0x45, 0x45, 0x18, 0x84, 0x99, 0x30, 0xf5, 0x4c, 0xba, 0xf5, - 0xf8, 0x4c, 0x09, 0xef, 0xf3, 0x9d, 0x6d, 0xd3, 0x26, 0xdb, 0x34, 0xaa, - 0x45, 0xbb, 0xe2, 0x57, 0x80, 0x19, 0x37, 0x17, 0x46, 0xe7, 0xd2, 0xee, - 0x18, 0x89, 0x22, 0xb9, 0x4e, 0x56, 0xcc, 0xe9, 0x3c, 0x5a, 0x9b, 0x6f, - 0xcb, 0xc2, 0xe4, 0x18, 0x98, 0x8c, 0xae, 0x9c, 0x9a, 0x55, 0x3f, 0x44, - 0xad, 0xce, 0xe7, 0xc6, 0xeb, 0x63, 0x20, 0x1b, 0xf9, 0x40, 0x47, 0xb2, - 0x40, 0xb6, 0x69, 0x22, 0xf3, 0x87, 0x22, 0x1a, 0x0b, 0xda, 0x98, 0x74, - 0xf1, 0x01, 0x7c, 0xb7, 0xbc, 0xa5, 0xba, 0x7a, 0xe9, 0x35, 0x38, 0xfe, - 0xfd, 0xe6, 0xe3, 0x47, 0x3c, 0xb2, 0xf8, 0xaf, 0xb7, 0xe4, 0x42, 0x9e, - 0x16, 0x00, 0x51, 0x8f, 0xe1, 0xf5, 0x85, 0xf2, 0xd5, 0x3d, 0xfa, 0x8d, - 0x55, 0x39, 0xa4, 0xbb, 0x24, 0xfc, 0x3d, 0x7e, 0xe3, 0x82, 0x2a, 0xbc, - 0x46, 0x31, 0x9d, 0x26, 0x44, 0x5a, 0x6d, 0x90, 0x35, 0x16, 0x6d, 0xf8, - 0x10, 0xa7, 0x1a, 0x55, 0xee, 0xe4, 0x5b, 0xad, 0xba, 0xc6, 0x09, 0x14, - 0x08, 0x24, 0xbb, 0x07, 0xfd, 0x35, 0xdd, 0x52, 0x2a, 0x44, 0xe6, 0xec, - 0xb7, 0xdf, 0x67, 0xb9, 0x49, 0xa1, 0xc9, 0x44, 0xa8, 0x76, 0xc7, 0x18, - 0x4c, 0x8c, 0xaa, 0xa1, 0xeb, 0x2b, 0x3a, 0xe9, 0xb9, 0xb8, 0xba, 0x35, - 0xfd, 0x3f, 0xa5, 0xf7, 0x05, 0x8a, 0x1c, 0x8d, 0xc2, 0xff, 0xe1, 0x5a, - 0x70, 0xb7, 0xce, 0x6d, 0xaa, 0x03, 0xbd, 0x40, 0x24, 0x80, 0xe2, 0x27, - 0x3d, 0x42, 0x77, 0x50, 0x94, 0xed, 0xe2, 0x6e, 0x96, 0x72, 0xc5, 0x1d, - 0x81, 0xe7, 0xcf, 0xe9, 0x22, 0x94, 0x9b, 0x7a, 0xaf, 0x00, 0x70, 0x02, - 0x0b, 0x3b, 0x47, 0x17, 0x54, 0xfe, 0xe9, 0x30, 0x27, 0x8d, 0x28, 0xce, - 0xcf, 0xfa, 0xb8, 0x41, 0x94, 0x11, 0x63, 0xf5, 0x6d, 0x17, 0xd3, 0xcc, - 0x7d, 0x2c, 0xc6, 0xf1, 0x6a, 0x75, 0xad, 0xf2, 0x2b, 0x2b, 0x7c, 0x43, - 0x1a, 0x35, 0x71, 0xb4, 0x70, 0x06, 0xe5, 0x78, 0x70, 0x4d, 0x18, 0x3c, - 0xa3, 0x5a, 0x31, 0xbd, 0xf9, 0x0c, 0x2f, 0xbf, 0x90, 0x9a, 0x08, 0x3c, - 0x9d, 0xee, 0xe3, 0x83, 0xe5, 0xe2, 0xbd, 0x6b, 0x1a, 0xcf, 0xe4, 0x21, - 0x87, 0xb4, 0xf5, 0x96, 0x6e, 0xac, 0x7d, 0x30, 0xe4, 0xcb, 0xc4, 0xdf, - 0x8e, 0xf8, 0xfb, 0x5d, 0xfc, 0xc6, 0x7a, 0x43, 0xcf, 0x93, 0x5b, 0xd6, - 0xdf, 0xf9, 0xf1, 0x10, 0x24, 0x4d, 0xd1, 0x33, 0x4d, 0xc3, 0xa7, 0x2a, - 0x5f, 0x08, 0x15, 0x57, 0xf4, 0x40, 0x7a, 0xe7, 0xf2, 0xfa, 0x07, 0x12, - 0x11, 0xfb, 0x11, 0x02, 0x02, 0x5f, 0xbe, 0xc2, 0xf8, 0x3c, 0xd2, 0x78, - 0xdd, 0x87, 0x36, 0x94, 0xa1, 0x31, 0x45, 0x54, 0xa2, 0x38, 0x22, 0x77, - 0xfd, 0x66, 0xcd, 0xd3, 0x32, 0x39, 0x19, 0xd9, 0xc5, 0x40, 0x96, 0x43, - 0x0c, 0xf7, 0x3f, 0x7a, 0xe5, 0xf4, 0x03, 0xb8, 0xfb, 0x72, 0x75, 0xf7, - 0x0a, 0x2a, 0xf3, 0x92, 0x6f, 0x61, 0xe8, 0x2f, 0x71, 0x8f, 0xf0, 0xce, - 0x19, 0x89, 0x29, 0x46, 0x6a, 0xe7, 0x6f, 0x38, 0xd1, 0xa5, 0x41, 0xf9, - 0xc0, 0x4b, 0x0c, 0xfc, 0xff, 0x49, 0xbf, 0x23, 0xf1, 0x66, 0xb3, 0xad, - 0x94, 0x9a, 0xa8, 0x10, 0x83, 0x9c, 0x69, 0x0d, 0x62, 0x06, 0x47, 0xeb, - 0x37, 0x23, 0x02, 0x0e, 0x94, 0x00, 0x65, 0xa1, 0x3f, 0x7d, 0xb3, 0x2f, - 0x4c, 0x4b, 0x32, 0x5f, 0x77, 0xe7, 0xe7, 0x9a, 0xff, 0x6f, 0x00, 0x00, - 0x00, 0xff, 0xff, 0xa8, 0x76, 0x8d, 0x12, 0x3b, 0x2c, 0x00, 0x00, - }, - "conf/license/Apache v2 License", - ) -} - -func conf_license_artistic_license_2_0() ([]byte, error) { - return bindata_read([]byte{ - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x09, 0x6e, 0x88, 0x00, 0xff, 0x8c, 0x59, - 0x5b, 0x73, 0xe2, 0x48, 0xb2, 0x7e, 0xaf, 0x5f, 0x51, 0xd1, 0x2f, 0x63, - 0x47, 0xd0, 0x3e, 0xd3, 0x33, 0x73, 0xce, 0xd9, 0x9d, 0x37, 0xda, 0xe0, - 0xb6, 0x62, 0x31, 0xb0, 0x80, 0xdb, 0xe3, 0xc7, 0x42, 0x2a, 0x41, 0xad, - 0x85, 0x8a, 0xad, 0x92, 0x4c, 0xb3, 0xbf, 0x7e, 0xf3, 0x52, 0xa5, 0x0b, - 0xc8, 0x3b, 0x3b, 0x11, 0xd3, 0x61, 0x74, 0xc9, 0xca, 0xeb, 0x97, 0x5f, - 0xa6, 0x36, 0x7b, 0x2d, 0xc7, 0xae, 0x32, 0xbe, 0x32, 0xa9, 0x9c, 0x99, - 0x54, 0x97, 0x5e, 0xcb, 0x5f, 0xee, 0x7e, 0x16, 0x42, 0xb6, 0xff, 0xdd, - 0xdb, 0xe3, 0xd9, 0x99, 0xdd, 0xbe, 0x92, 0x37, 0xe9, 0xad, 0xfc, 0xe5, - 0xe7, 0x2f, 0xbf, 0x85, 0xdb, 0xd3, 0x77, 0xed, 0xce, 0xb6, 0xd4, 0xd2, - 0x78, 0x79, 0xd4, 0xee, 0x60, 0xaa, 0x4a, 0x67, 0xb2, 0xb2, 0x32, 0x85, - 0x37, 0xa4, 0x2a, 0x33, 0x99, 0x81, 0x64, 0x67, 0xb6, 0x75, 0xa5, 0x25, - 0x3c, 0xbb, 0x55, 0x95, 0x39, 0xe0, 0x4d, 0xa3, 0x7d, 0x38, 0xc0, 0xe6, - 0xb2, 0xda, 0xc3, 0xeb, 0x45, 0x38, 0x3b, 0xb3, 0x69, 0x7d, 0xd0, 0x65, - 0x35, 0x92, 0xf0, 0x92, 0x4c, 0xf7, 0xaa, 0xdc, 0x99, 0x72, 0x27, 0x4d, - 0x85, 0x67, 0x94, 0xb6, 0x92, 0xaa, 0x28, 0xec, 0x49, 0x67, 0x77, 0x42, - 0x2c, 0x9d, 0x56, 0x87, 0x6d, 0xa1, 0x85, 0xd8, 0x74, 0x25, 0x68, 0x5f, - 0xa9, 0x6d, 0x61, 0xfc, 0x5e, 0x7b, 0x10, 0xad, 0x65, 0x05, 0x8a, 0x79, - 0x59, 0x97, 0x99, 0x76, 0xf2, 0xb4, 0x37, 0xe9, 0x5e, 0x2a, 0xb9, 0x33, - 0xef, 0xba, 0x94, 0xb9, 0xd3, 0x5a, 0x7a, 0x9b, 0x57, 0x27, 0xe5, 0xb4, - 0x58, 0xaa, 0xf4, 0x4d, 0xed, 0xb4, 0x3c, 0xa8, 0xb3, 0xdc, 0x6a, 0xd6, - 0x32, 0x1b, 0xc9, 0x83, 0xcd, 0x4c, 0x4e, 0x7f, 0xb5, 0xb6, 0xc0, 0x0f, - 0x30, 0xee, 0x7f, 0xac, 0x93, 0x4e, 0x77, 0xae, 0xde, 0x09, 0x74, 0xa7, - 0x29, 0x2b, 0xd0, 0x1f, 0xd5, 0xad, 0xf6, 0xaa, 0x22, 0x15, 0x5a, 0x07, - 0x3e, 0xda, 0x02, 0xf5, 0x38, 0x28, 0x78, 0x0a, 0xfe, 0xf7, 0x70, 0xfc, - 0x41, 0x4b, 0x15, 0x22, 0x20, 0x52, 0x5b, 0x56, 0xce, 0x16, 0xd2, 0x82, - 0xb3, 0xe8, 0xcd, 0x4c, 0xbf, 0xeb, 0xc2, 0x1e, 0xd1, 0x23, 0xec, 0x2a, - 0x90, 0x18, 0x15, 0x05, 0x63, 0x0a, 0xd0, 0xbf, 0x32, 0x45, 0x21, 0xdf, - 0xb4, 0x3e, 0xa2, 0x9f, 0xe0, 0x9d, 0xc6, 0x10, 0xf5, 0xae, 0x4c, 0x01, - 0xae, 0x80, 0xbf, 0xbc, 0xb4, 0x47, 0x30, 0xd8, 0xdb, 0xda, 0xa5, 0x9a, - 0x02, 0xd3, 0xb3, 0x1d, 0x9c, 0xf9, 0x6a, 0x6b, 0x50, 0x03, 0xee, 0x15, - 0x27, 0x75, 0xbe, 0x88, 0xe6, 0x41, 0xbd, 0xa1, 0x8e, 0x0e, 0x62, 0xa1, - 0x51, 0x13, 0x0f, 0x47, 0xdb, 0xa2, 0x38, 0x4b, 0x5b, 0x57, 0xde, 0x64, - 0x3a, 0x06, 0x51, 0x34, 0x41, 0x34, 0x4e, 0xa7, 0x15, 0x3c, 0x70, 0x32, - 0xd5, 0x7e, 0xd8, 0x03, 0xf0, 0x4a, 0x0c, 0x43, 0xd0, 0xf7, 0x4e, 0xca, - 0x24, 0x27, 0x03, 0x38, 0x62, 0xd7, 0x99, 0x41, 0xf1, 0x67, 0xcd, 0x48, - 0x68, 0x5e, 0x83, 0xe5, 0x35, 0xdc, 0x22, 0xb7, 0x9c, 0xc1, 0x82, 0xa3, - 0xb3, 0x47, 0x8b, 0x17, 0xac, 0x20, 0xa5, 0x49, 0x86, 0x8e, 0x27, 0x8c, - 0xe8, 0x19, 0xbf, 0xb7, 0x75, 0x91, 0x49, 0x74, 0xb5, 0x4a, 0x3f, 0x88, - 0x0f, 0x7a, 0xc8, 0x6b, 0xfd, 0x26, 0x14, 0xd8, 0x92, 0xe7, 0xda, 0xa1, - 0xff, 0x59, 0x11, 0xf4, 0x72, 0xc7, 0x17, 0xe0, 0xba, 0x89, 0xce, 0x4d, - 0x69, 0x2a, 0x63, 0x4b, 0xcf, 0x75, 0xf1, 0xe9, 0x52, 0xde, 0x27, 0x79, - 0xd0, 0xaa, 0xe4, 0x74, 0x34, 0x65, 0x66, 0xde, 0x4d, 0x56, 0xab, 0xe2, - 0xc6, 0xdf, 0x4a, 0x48, 0x21, 0xeb, 0x76, 0xaa, 0x34, 0xff, 0x52, 0x28, - 0x00, 0x2e, 0x91, 0x84, 0x52, 0x1d, 0xc0, 0xf5, 0xa6, 0xa4, 0x37, 0xd2, - 0x46, 0x1a, 0xd8, 0x0f, 0x3a, 0xc8, 0xdc, 0x72, 0x72, 0xc0, 0xf1, 0xe0, - 0xe8, 0xc6, 0x7f, 0xcd, 0xe1, 0x25, 0x27, 0xa4, 0x6d, 0xce, 0x55, 0xe5, - 0x59, 0x1e, 0x21, 0xc9, 0xce, 0xec, 0xa9, 0x3d, 0xe4, 0x43, 0x1a, 0x9f, - 0xd2, 0xe8, 0x0a, 0x8c, 0x21, 0x68, 0x02, 0x42, 0x1d, 0x09, 0x39, 0x28, - 0x88, 0x81, 0x51, 0x05, 0x46, 0xbf, 0xe7, 0x40, 0x50, 0x49, 0xa5, 0xa9, - 0x75, 0x99, 0x2a, 0x41, 0x91, 0x0f, 0xc3, 0xfb, 0x13, 0x97, 0x37, 0x84, - 0x23, 0xd5, 0x59, 0xed, 0xb4, 0x8f, 0xca, 0x41, 0x9a, 0x7d, 0x22, 0xef, - 0x7e, 0x82, 0x50, 0xf4, 0xf5, 0xd3, 0xce, 0xdb, 0x12, 0x33, 0x4b, 0x9e, - 0x28, 0x40, 0x85, 0x79, 0xd3, 0x11, 0x4b, 0x46, 0xf4, 0x76, 0x5b, 0x6a, - 0x23, 0x54, 0x97, 0x2a, 0xf3, 0xdc, 0xd5, 0x2f, 0x9e, 0x12, 0x7e, 0x76, - 0xdd, 0x9e, 0x42, 0xc2, 0x42, 0x4e, 0x82, 0x8f, 0x31, 0x29, 0x72, 0xa8, - 0x1c, 0xdf, 0x2d, 0x68, 0xb9, 0x25, 0x41, 0xa2, 0x0f, 0x77, 0x6c, 0xcc, - 0x88, 0x91, 0x0c, 0x1c, 0xf2, 0x0e, 0x41, 0x7a, 0xd7, 0xbe, 0xa9, 0xc4, - 0x8e, 0xd0, 0x80, 0x07, 0x36, 0x27, 0x11, 0xd5, 0x1e, 0xb3, 0x90, 0x4e, - 0xb9, 0x93, 0xe3, 0x7e, 0x9e, 0x13, 0xc0, 0x80, 0xfb, 0x3d, 0x9c, 0x8e, - 0x92, 0xb4, 0x41, 0xb7, 0x93, 0x92, 0xeb, 0x0a, 0xc4, 0x28, 0x97, 0x91, - 0x8c, 0xef, 0xe0, 0x10, 0x90, 0x4c, 0xa6, 0x2a, 0xf9, 0x14, 0x60, 0x28, - 0x5e, 0x8e, 0xa6, 0x4e, 0x1a, 0x1b, 0xa2, 0xb5, 0xe0, 0x74, 0xc8, 0x2f, - 0x4a, 0x53, 0xc6, 0xe1, 0x7e, 0x11, 0x90, 0xe7, 0xd4, 0x1b, 0x83, 0x2a, - 0xc9, 0x80, 0x80, 0x6a, 0xef, 0x0d, 0x02, 0x05, 0xb8, 0x1b, 0x62, 0x81, - 0x88, 0xae, 0x0b, 0xcf, 0x5e, 0x8e, 0x49, 0xa8, 0xbc, 0xe6, 0xa2, 0x4d, - 0xed, 0xe1, 0x88, 0x01, 0xb3, 0x9c, 0x2a, 0xdd, 0xf4, 0x1d, 0xa1, 0x00, - 0xca, 0x22, 0xdf, 0xc5, 0x06, 0x0c, 0x75, 0xe7, 0xb5, 0xde, 0x2b, 0x57, - 0x76, 0xc0, 0xfd, 0x07, 0xad, 0xbb, 0x99, 0x91, 0xeb, 0x4e, 0x85, 0x43, - 0x47, 0x70, 0x3b, 0x2e, 0x81, 0xe6, 0x15, 0xb0, 0x25, 0x78, 0x1d, 0xe0, - 0xa2, 0x63, 0x66, 0xeb, 0x09, 0x5f, 0x1f, 0x8f, 0xd6, 0x55, 0xa1, 0x72, - 0x3a, 0x4f, 0x91, 0xc1, 0x6d, 0xde, 0x53, 0x91, 0x20, 0x10, 0x55, 0x00, - 0x37, 0x9a, 0x1b, 0x0e, 0x2a, 0xd2, 0xa9, 0x7d, 0xd0, 0xa6, 0xc9, 0xe6, - 0x18, 0xaf, 0x18, 0x94, 0x4f, 0xd0, 0x0f, 0x72, 0x34, 0xbe, 0x5f, 0x36, - 0xd2, 0xe4, 0xd8, 0xc0, 0xb0, 0xec, 0x50, 0xe0, 0x56, 0xeb, 0x92, 0xab, - 0xac, 0x69, 0x2d, 0xa0, 0x16, 0xde, 0xc5, 0x3b, 0xcd, 0x55, 0x69, 0x4b, - 0x40, 0x50, 0x70, 0x3f, 0x01, 0xb2, 0xfe, 0x71, 0x04, 0x1d, 0x0c, 0x82, - 0xaa, 0xd3, 0xff, 0xac, 0xa1, 0xc9, 0x69, 0x4e, 0x13, 0x4e, 0xdc, 0xab, - 0xa4, 0x8d, 0x2a, 0x5e, 0xe6, 0x4d, 0xb7, 0x26, 0xda, 0xaa, 0x6e, 0xf4, - 0x23, 0x0d, 0xa8, 0xeb, 0x86, 0x26, 0x47, 0x52, 0x7c, 0x0d, 0x5d, 0x93, - 0xaf, 0x02, 0xf6, 0x03, 0x1a, 0x92, 0x1d, 0x43, 0x2a, 0x5d, 0xa9, 0x43, - 0xef, 0xf7, 0x55, 0x5a, 0xc0, 0x0d, 0x53, 0x02, 0xb8, 0x04, 0xbe, 0xd1, - 0xaa, 0x04, 0x81, 0xb9, 0x22, 0x23, 0xa0, 0xd4, 0xa4, 0x53, 0xa7, 0x08, - 0x39, 0x21, 0xd8, 0x6d, 0xbd, 0x44, 0xe3, 0xae, 0xf0, 0x1e, 0xbc, 0x67, - 0xa0, 0x5d, 0xa5, 0xb5, 0x23, 0x04, 0x7f, 0x8f, 0x8f, 0x41, 0x45, 0x31, - 0x42, 0x81, 0xd9, 0xa1, 0xdf, 0x37, 0x6e, 0x07, 0x0b, 0xb0, 0x8d, 0x2f, - 0xb5, 0x2b, 0xe4, 0x83, 0x05, 0xde, 0x40, 0x79, 0x1a, 0xeb, 0x20, 0xaf, - 0xab, 0xda, 0x35, 0x40, 0xb3, 0xa6, 0x86, 0xfa, 0x09, 0xf3, 0xea, 0xd0, - 0x71, 0x6c, 0xe8, 0xb3, 0x88, 0xab, 0xa3, 0x86, 0xd1, 0xb0, 0x18, 0xbe, - 0xd5, 0xba, 0x16, 0x80, 0x20, 0x37, 0xbb, 0xda, 0xf1, 0x5d, 0xc6, 0xa5, - 0x88, 0xef, 0x57, 0xc0, 0x7e, 0x38, 0xc2, 0xfd, 0xec, 0xea, 0xb8, 0x34, - 0xdc, 0x00, 0xd5, 0x2b, 0xcd, 0x87, 0xda, 0xed, 0x3f, 0x00, 0x98, 0x82, - 0x06, 0x5b, 0xf0, 0xb6, 0x0b, 0x18, 0x8a, 0xa6, 0x63, 0x15, 0x12, 0xe6, - 0x90, 0x1c, 0x40, 0xe7, 0xba, 0xa8, 0x28, 0xb5, 0x9d, 0x45, 0xb1, 0x18, - 0x68, 0x93, 0x22, 0xf8, 0x43, 0x97, 0xf3, 0xf8, 0x0c, 0x2b, 0x17, 0x0a, - 0x9e, 0xae, 0x16, 0xaa, 0xea, 0xf8, 0x9b, 0xdd, 0x40, 0xe2, 0x40, 0x59, - 0xb1, 0xc4, 0x16, 0xed, 0xc9, 0xd3, 0x68, 0xca, 0xb3, 0x67, 0xca, 0xc1, - 0xa9, 0x98, 0xf2, 0x9b, 0x2f, 0x10, 0x47, 0x80, 0x88, 0x4e, 0x11, 0xdb, - 0x52, 0x88, 0x9b, 0x2f, 0xb7, 0x52, 0x46, 0x2a, 0xd2, 0xe3, 0x20, 0xdc, - 0xe6, 0x07, 0x42, 0x8e, 0x92, 0x53, 0x60, 0x82, 0x15, 0x1f, 0x02, 0xcf, - 0x89, 0xcb, 0x9c, 0x67, 0x8f, 0x52, 0x93, 0xa9, 0x1d, 0xf1, 0x83, 0x53, - 0x38, 0x1d, 0x6c, 0x87, 0xd3, 0x53, 0xc6, 0x2e, 0x86, 0x0b, 0x3c, 0x0e, - 0xc0, 0x46, 0x20, 0xd8, 0x04, 0xca, 0xd1, 0xe6, 0x1f, 0xa9, 0x30, 0x00, - 0xc5, 0x1d, 0x93, 0xf9, 0xb0, 0x55, 0xcb, 0x0b, 0xbb, 0x7e, 0xba, 0x50, - 0x1e, 0x0c, 0xfe, 0x25, 0x18, 0x8c, 0x59, 0x38, 0xf9, 0x90, 0x2c, 0x0f, - 0x38, 0x3a, 0x5c, 0x12, 0xc3, 0x35, 0xd0, 0x81, 0x38, 0x6c, 0xd9, 0x60, - 0x3a, 0x10, 0x0a, 0x53, 0x1f, 0x06, 0x2d, 0x17, 0xa1, 0x05, 0xed, 0x30, - 0x0b, 0x3d, 0xa6, 0x08, 0xf9, 0x4b, 0x5e, 0x60, 0xf2, 0x85, 0x87, 0x08, - 0x8e, 0xb3, 0x1a, 0x31, 0x00, 0x9c, 0x2f, 0x80, 0x97, 0x47, 0x2d, 0x6d, - 0x2c, 0xf0, 0x4b, 0xe6, 0xe2, 0x29, 0x44, 0xca, 0x7b, 0x9b, 0x1a, 0x85, - 0x81, 0x05, 0x27, 0xa5, 0x85, 0x32, 0x07, 0x50, 0x1d, 0x50, 0x77, 0x4c, - 0x5e, 0x77, 0x74, 0xd5, 0x69, 0x0e, 0x0a, 0x41, 0xcf, 0xa5, 0x37, 0xd0, - 0x59, 0xd4, 0xc6, 0xce, 0x14, 0x1f, 0x53, 0xa6, 0x45, 0x0d, 0xad, 0x46, - 0x89, 0x58, 0x22, 0x5d, 0x0f, 0x75, 0xca, 0xe8, 0xe6, 0xd7, 0x8e, 0xb7, - 0xd5, 0xf1, 0x58, 0x9c, 0xc9, 0x35, 0xdb, 0x1a, 0x72, 0xdf, 0xfc, 0xd0, - 0x1e, 0x2c, 0x84, 0x2e, 0xa1, 0xb6, 0xa6, 0x30, 0xc0, 0x95, 0x02, 0xe0, - 0x71, 0xfb, 0xe7, 0x1e, 0x71, 0xe8, 0xa4, 0x30, 0xaa, 0x91, 0x75, 0x59, - 0x36, 0x95, 0xcf, 0x20, 0x16, 0x4b, 0x42, 0x94, 0xa6, 0xd0, 0x1a, 0x86, - 0x7e, 0x42, 0xea, 0xce, 0x04, 0x9e, 0x26, 0x8e, 0x12, 0x3b, 0xa6, 0x23, - 0xff, 0x5e, 0x27, 0xcb, 0x28, 0x38, 0x8f, 0x5c, 0x22, 0x4e, 0xe1, 0x25, - 0x5f, 0x73, 0xa5, 0x87, 0x8e, 0x73, 0x89, 0xad, 0x98, 0x9b, 0x93, 0x8b, - 0x4c, 0xbc, 0x2e, 0x8f, 0x0b, 0x86, 0x00, 0x67, 0x70, 0xa2, 0x81, 0xc7, - 0x7e, 0x1b, 0xce, 0x4f, 0x8a, 0xd3, 0xa5, 0xa0, 0xf6, 0x45, 0x79, 0xd3, - 0x4b, 0x29, 0xf1, 0x71, 0x4a, 0xa1, 0x4d, 0x44, 0x23, 0xe1, 0x42, 0xcc, - 0x4d, 0x25, 0x87, 0xe2, 0x78, 0x55, 0xd6, 0xb7, 0x03, 0xf9, 0x98, 0x16, - 0x5a, 0x39, 0x08, 0x6b, 0x04, 0x5d, 0xb9, 0xb7, 0x27, 0x04, 0x79, 0x66, - 0xf1, 0x5e, 0x34, 0x31, 0xba, 0xf6, 0x2e, 0x67, 0x11, 0x84, 0x87, 0x47, - 0x4f, 0x4c, 0xac, 0xc2, 0x00, 0x00, 0x11, 0xfe, 0xb4, 0x30, 0x8e, 0xf1, - 0xc3, 0xa4, 0x29, 0x6d, 0xf9, 0xd9, 0x47, 0x21, 0x39, 0xe0, 0x0f, 0xd2, - 0xdc, 0x11, 0x34, 0x45, 0x9d, 0xd6, 0x38, 0x80, 0xe2, 0x0f, 0x26, 0xa9, - 0x75, 0x11, 0x93, 0x68, 0x10, 0x61, 0x40, 0x73, 0x50, 0x1a, 0xb8, 0xe0, - 0x62, 0x3e, 0x8d, 0x91, 0xc8, 0x2d, 0x4e, 0xb9, 0x70, 0xd4, 0xef, 0x8c, - 0xfd, 0x37, 0xea, 0x56, 0xf2, 0x18, 0x36, 0x04, 0x40, 0x9d, 0x1c, 0x0c, - 0x69, 0x70, 0x99, 0x81, 0xa2, 0x19, 0xb5, 0x87, 0x2c, 0xe7, 0xd9, 0x78, - 0x28, 0x7d, 0xa0, 0xfe, 0x6c, 0x33, 0xc6, 0x0e, 0x92, 0x63, 0x4a, 0x8c, - 0x58, 0x80, 0x94, 0x15, 0xfd, 0x1a, 0x09, 0x6d, 0x73, 0x88, 0xd9, 0x86, - 0xbe, 0x76, 0xb3, 0x05, 0xdb, 0xe0, 0x30, 0xf0, 0x1f, 0x1f, 0x05, 0x63, - 0x71, 0x05, 0x68, 0xd2, 0x74, 0x98, 0xe1, 0x5c, 0x8b, 0xfc, 0x2c, 0x0c, - 0x1a, 0x30, 0x27, 0x97, 0x3c, 0xcc, 0x41, 0x07, 0x70, 0x51, 0x06, 0x76, - 0x35, 0x9c, 0xd2, 0xeb, 0xb2, 0x0c, 0xd3, 0xf1, 0x95, 0xf9, 0x77, 0x32, - 0x61, 0x36, 0xa6, 0xb2, 0xcc, 0x04, 0x12, 0x3b, 0xe4, 0xe3, 0x43, 0xed, - 0x91, 0xba, 0x29, 0xcc, 0x62, 0x1c, 0xcf, 0x82, 0xae, 0xbe, 0x1d, 0x10, - 0x49, 0x4a, 0x93, 0x60, 0xf4, 0xcc, 0x07, 0x2e, 0x8f, 0x96, 0xa7, 0x60, - 0x39, 0xed, 0x33, 0x22, 0xeb, 0xc6, 0xe9, 0x07, 0x46, 0x67, 0x4d, 0x53, - 0x46, 0x9f, 0xbe, 0x5f, 0x29, 0x04, 0x33, 0x2e, 0x8f, 0x6a, 0x21, 0x2b, - 0xae, 0x7b, 0xc3, 0x9f, 0x24, 0x0a, 0x13, 0x75, 0x12, 0x42, 0x19, 0x10, - 0x94, 0x32, 0xb7, 0x72, 0x30, 0x17, 0xb0, 0xff, 0x87, 0x27, 0xf0, 0x11, - 0xd5, 0x0c, 0xe6, 0xe4, 0x08, 0x6e, 0xd6, 0xcc, 0x47, 0xc2, 0x0d, 0x3a, - 0x04, 0xf7, 0x0c, 0xc5, 0xb9, 0x33, 0xc4, 0x85, 0xa9, 0x0d, 0xcb, 0xa1, - 0xbb, 0x3c, 0x19, 0xd6, 0xb7, 0xf6, 0x31, 0x6c, 0x1e, 0xdc, 0x49, 0xef, - 0xb7, 0x4c, 0x9c, 0xd7, 0x04, 0x74, 0x3a, 0x63, 0x79, 0x48, 0x7e, 0xf2, - 0x5a, 0xb3, 0x7b, 0x89, 0xca, 0xd0, 0xcb, 0xc1, 0xb7, 0x4c, 0x6d, 0x89, - 0xb5, 0xc2, 0x00, 0xdd, 0x59, 0xd4, 0xfc, 0x07, 0x1f, 0xf6, 0x67, 0x32, - 0x6a, 0x09, 0x39, 0x75, 0x8f, 0x93, 0x75, 0x6f, 0x9e, 0xc7, 0x43, 0x04, - 0x2c, 0x8c, 0xbf, 0xc1, 0xf5, 0x95, 0xe6, 0xfe, 0xc0, 0x0e, 0xe0, 0x0c, - 0x6b, 0xbc, 0x4f, 0x55, 0xa1, 0xaa, 0xc6, 0x85, 0x38, 0x54, 0x30, 0xe7, - 0x71, 0x76, 0x6f, 0xb6, 0x04, 0x3a, 0xdb, 0x2e, 0x3b, 0x0a, 0xdc, 0xeb, - 0x21, 0x3e, 0xd7, 0x6e, 0xc1, 0xae, 0xe0, 0xbd, 0xc1, 0xce, 0x07, 0xdb, - 0xac, 0x51, 0x06, 0xa8, 0x87, 0xbd, 0xae, 0x29, 0xdf, 0x20, 0x70, 0xeb, - 0x0b, 0x68, 0x01, 0xff, 0x3b, 0xdc, 0x02, 0x7a, 0x18, 0xfd, 0xe1, 0x39, - 0x51, 0xa4, 0x68, 0x45, 0x0e, 0xf1, 0x88, 0x88, 0x20, 0x48, 0x65, 0x0b, - 0x5d, 0x69, 0x2a, 0x60, 0x57, 0xa7, 0x0c, 0x22, 0x20, 0x06, 0x71, 0x1c, - 0x32, 0x7e, 0xa7, 0x7b, 0x81, 0xfa, 0xa8, 0xbe, 0xa4, 0x5c, 0x23, 0x6f, - 0xe8, 0x09, 0x09, 0x05, 0x2c, 0xde, 0x55, 0x61, 0x32, 0x19, 0x02, 0x0e, - 0xa4, 0xa2, 0x1d, 0x51, 0xbb, 0x94, 0xad, 0xd9, 0x46, 0xf9, 0xbe, 0x2e, - 0x23, 0x7c, 0x13, 0xc2, 0x2e, 0xe8, 0x4d, 0x5e, 0xc1, 0x9d, 0x03, 0x61, - 0x4d, 0x95, 0x73, 0x67, 0x82, 0x1c, 0x70, 0x21, 0x11, 0x97, 0xae, 0x44, - 0x4c, 0x89, 0x14, 0xb7, 0x7d, 0xa6, 0x24, 0x15, 0x68, 0x1b, 0x25, 0x48, - 0xab, 0xe0, 0x0f, 0x59, 0xea, 0xd3, 0x95, 0xe1, 0x99, 0x3e, 0x50, 0xb2, - 0xc1, 0x04, 0xad, 0x71, 0x06, 0xcf, 0x6b, 0x47, 0x9d, 0xb5, 0xa7, 0xac, - 0x48, 0xf2, 0xb8, 0xff, 0x22, 0x41, 0x6c, 0x63, 0x5f, 0x54, 0x14, 0xd0, - 0x23, 0xa6, 0x18, 0x1d, 0x4a, 0x46, 0x03, 0x83, 0xaf, 0xc8, 0x70, 0xd2, - 0x54, 0x39, 0x14, 0x16, 0x49, 0x0b, 0xfa, 0x2a, 0x5c, 0x11, 0xb6, 0x35, - 0xd2, 0x93, 0x8a, 0x77, 0x1a, 0x7b, 0xe0, 0x6e, 0xd9, 0xe5, 0xcd, 0x90, - 0x18, 0x39, 0xf0, 0x00, 0x1e, 0x38, 0x82, 0x8f, 0xa9, 0x77, 0xf8, 0xa6, - 0xe5, 0xb4, 0xfb, 0x3d, 0xa4, 0x67, 0xff, 0x37, 0x9c, 0x69, 0xd7, 0xdb, - 0x0f, 0x2c, 0xa0, 0x3e, 0x47, 0xf8, 0xef, 0xd2, 0x8c, 0xd2, 0x2b, 0xac, - 0x25, 0xd7, 0x61, 0x73, 0xf3, 0x1b, 0xff, 0x04, 0x1c, 0x38, 0x32, 0x91, - 0x12, 0xd7, 0x09, 0x36, 0x44, 0xf9, 0xc7, 0xbb, 0x9d, 0xd3, 0x3b, 0x55, - 0x85, 0x1e, 0x33, 0x33, 0xe5, 0x5b, 0x04, 0xab, 0x40, 0xa4, 0xc0, 0xa2, - 0xff, 0xef, 0x12, 0xce, 0xf0, 0x82, 0xee, 0x91, 0xad, 0x9b, 0x81, 0xfd, - 0x4f, 0xcb, 0xe5, 0xdd, 0x00, 0xeb, 0x61, 0xba, 0x44, 0x2f, 0x1d, 0x59, - 0x08, 0xf3, 0xea, 0x8b, 0x31, 0xa5, 0xa5, 0x9b, 0xf1, 0x60, 0x94, 0x38, - 0x40, 0xe1, 0x39, 0x58, 0x61, 0xb1, 0xa2, 0xfa, 0xab, 0x8e, 0x38, 0x8b, - 0x8a, 0x76, 0x49, 0x7b, 0x41, 0xe1, 0x7c, 0x7f, 0x56, 0x63, 0x68, 0xec, - 0xaf, 0x4b, 0x48, 0x08, 0x13, 0x68, 0x0c, 0x00, 0x34, 0x3a, 0xdc, 0x21, - 0x07, 0x66, 0xd0, 0x55, 0xae, 0x27, 0xe9, 0x8e, 0x48, 0xf3, 0xe0, 0x2e, - 0x58, 0xf4, 0xf0, 0xbe, 0x0e, 0xf3, 0xe5, 0x25, 0x10, 0xf6, 0x3c, 0x3a, - 0x04, 0x77, 0x42, 0xf9, 0x08, 0x3c, 0xd9, 0x80, 0x3a, 0x98, 0x91, 0x7f, - 0xb9, 0x1d, 0x1e, 0x47, 0x81, 0x59, 0xbc, 0xb5, 0x02, 0xf1, 0xf4, 0xcb, - 0xd8, 0x31, 0x98, 0x0a, 0x8e, 0x13, 0xf5, 0x08, 0xda, 0x8e, 0xe9, 0xc3, - 0x36, 0xf0, 0xfb, 0xee, 0x7c, 0x26, 0x0b, 0x74, 0x3e, 0x3f, 0xd7, 0x94, - 0x8a, 0x3d, 0xf1, 0xf2, 0x0f, 0x32, 0x72, 0x5b, 0x9b, 0x22, 0x93, 0x44, - 0x37, 0x3f, 0xab, 0x02, 0x99, 0x02, 0xcf, 0xf4, 0x78, 0x3b, 0x0e, 0xfd, - 0x71, 0xbb, 0x41, 0xde, 0x42, 0x07, 0x35, 0x1c, 0x8c, 0xd8, 0x66, 0x44, - 0xd8, 0xde, 0x7e, 0xe4, 0xc3, 0xb4, 0x19, 0x9e, 0x13, 0x3b, 0xc9, 0xd3, - 0x3c, 0xd8, 0xec, 0xc9, 0xf4, 0x0f, 0x1a, 0xad, 0x55, 0xd8, 0xfe, 0xd3, - 0x77, 0x10, 0x97, 0xab, 0x54, 0x5f, 0x6c, 0xc3, 0xb0, 0x76, 0x92, 0x4a, - 0x43, 0x54, 0x37, 0xd4, 0xba, 0xc1, 0xb5, 0x73, 0x78, 0xfd, 0xbe, 0x9d, - 0x7e, 0x96, 0xca, 0x55, 0xbc, 0x6b, 0xbc, 0x0c, 0x19, 0x44, 0xe4, 0xaf, - 0xb7, 0xf2, 0x85, 0x3a, 0xee, 0xcd, 0x9f, 0x10, 0xf6, 0xc0, 0xbc, 0x79, - 0x97, 0x9f, 0x3a, 0x73, 0xac, 0xfc, 0x2d, 0xbb, 0x02, 0xc6, 0x4d, 0xe4, - 0x24, 0xfa, 0x47, 0xa5, 0x19, 0x59, 0x89, 0x43, 0xd5, 0xfe, 0xfa, 0x7b, - 0x01, 0xd7, 0xc6, 0x28, 0x6c, 0xb5, 0x0e, 0x5e, 0x17, 0xef, 0xc8, 0xe5, - 0x53, 0x85, 0x6b, 0x86, 0x6e, 0x10, 0xc1, 0xc4, 0xed, 0x10, 0x50, 0x61, - 0x1b, 0x29, 0x3b, 0xd4, 0x92, 0xba, 0x02, 0x33, 0x06, 0xc5, 0x6b, 0x34, - 0xd1, 0x19, 0xfb, 0x70, 0xfd, 0x78, 0x35, 0x8d, 0x01, 0xab, 0xd2, 0x45, - 0x1e, 0xa6, 0xbf, 0xb0, 0x7a, 0xeb, 0x4f, 0x7d, 0xc3, 0x1f, 0x4c, 0xd0, - 0xcf, 0xdf, 0x74, 0xa9, 0x1d, 0x50, 0xb8, 0x25, 0x06, 0x8e, 0x73, 0x5e, - 0xdc, 0x7c, 0xf9, 0x19, 0x40, 0x69, 0x0c, 0x98, 0x5c, 0x23, 0xc1, 0xef, - 0xd2, 0xf5, 0x51, 0xff, 0x9b, 0xdd, 0x70, 0x1d, 0x0d, 0xac, 0x57, 0xe0, - 0xd0, 0x1d, 0x7e, 0xb2, 0x2a, 0xe3, 0x02, 0x70, 0x60, 0x91, 0x77, 0x27, - 0xbf, 0x9e, 0x99, 0xcf, 0x8d, 0x78, 0x8c, 0x3e, 0x07, 0xe0, 0xcc, 0x3a, - 0x6b, 0xdc, 0xeb, 0xaf, 0x35, 0xb8, 0x9c, 0x3e, 0x56, 0x7d, 0xc3, 0xe4, - 0x84, 0xc2, 0x22, 0x5a, 0xfd, 0xcf, 0xa3, 0x9e, 0x24, 0x7d, 0xb5, 0xde, - 0xec, 0x00, 0x5d, 0x47, 0xa2, 0xe8, 0xf4, 0x9e, 0x2f, 0xb8, 0x7a, 0x4a, - 0x3e, 0x9a, 0x36, 0x9a, 0xdd, 0x68, 0x8f, 0xe7, 0xb5, 0xf1, 0x16, 0xcd, - 0x98, 0x80, 0x9c, 0x0f, 0x7c, 0x80, 0xdf, 0xf5, 0xb0, 0x4e, 0x6d, 0x00, - 0x77, 0x55, 0xa2, 0xe4, 0x51, 0xc3, 0x15, 0x4a, 0x18, 0x58, 0xb0, 0x91, - 0x43, 0x86, 0xfa, 0x48, 0x44, 0x33, 0x81, 0x00, 0xd1, 0x99, 0x84, 0x86, - 0x75, 0xa1, 0x26, 0x86, 0x6b, 0x90, 0xe6, 0xf3, 0x4b, 0x78, 0x9f, 0xbf, - 0xcd, 0xd9, 0x5c, 0x5c, 0xf6, 0xd5, 0x2f, 0xb8, 0x65, 0xda, 0xf4, 0x3f, - 0xa6, 0x85, 0xaa, 0x85, 0x01, 0xbd, 0xe4, 0x3e, 0x40, 0x82, 0x68, 0xb2, - 0x0b, 0xeb, 0x36, 0x6c, 0xdb, 0x95, 0x53, 0x48, 0x40, 0xdc, 0xdb, 0x48, - 0xc0, 0x58, 0xf5, 0x8e, 0x5f, 0x9f, 0xe8, 0x17, 0xdf, 0xc0, 0x19, 0x87, - 0x3c, 0x5f, 0xd8, 0x9d, 0x8d, 0xa9, 0x32, 0xb0, 0x89, 0xbe, 0xf9, 0xf2, - 0xeb, 0xa5, 0x02, 0x01, 0x8e, 0x78, 0x60, 0xc0, 0x59, 0x5a, 0xff, 0x80, - 0x0b, 0x1e, 0x7c, 0x3b, 0xc2, 0xfa, 0x28, 0xb2, 0x13, 0xd4, 0xc4, 0x48, - 0x20, 0x7b, 0xfe, 0x6c, 0xf3, 0xcf, 0xa1, 0x3b, 0x1d, 0x55, 0xd5, 0x7e, - 0x89, 0xd3, 0xf1, 0xdb, 0xe4, 0x08, 0xc2, 0xf3, 0xce, 0x74, 0x7b, 0xc4, - 0x49, 0x6d, 0x71, 0x24, 0xc3, 0xdb, 0x50, 0x3a, 0x05, 0xaa, 0x0e, 0xff, - 0x4a, 0x73, 0xa0, 0x6f, 0x00, 0xcd, 0x36, 0xe7, 0x64, 0x50, 0x04, 0xed, - 0x38, 0x75, 0x6f, 0xe1, 0x7a, 0x49, 0x08, 0x88, 0xef, 0x85, 0xa3, 0x69, - 0x5d, 0x15, 0xcd, 0x20, 0x2e, 0xff, 0xc1, 0x02, 0x3e, 0x0c, 0x26, 0x14, - 0x6a, 0xfc, 0xbe, 0xa2, 0x9c, 0x81, 0x31, 0xc0, 0x94, 0xb9, 0x33, 0xb8, - 0x5c, 0x8f, 0xaf, 0x35, 0x7d, 0x35, 0x30, 0x38, 0x64, 0x57, 0xa6, 0xc2, - 0x14, 0x6e, 0x6c, 0xad, 0x0c, 0xf7, 0x23, 0xd1, 0x22, 0x1e, 0xce, 0x86, - 0xce, 0x7a, 0xff, 0x99, 0xd4, 0x21, 0x6e, 0x67, 0x6b, 0xc4, 0x5b, 0xfa, - 0x7d, 0x0b, 0x5d, 0x0c, 0x3f, 0x2e, 0x57, 0x9d, 0x0f, 0x7f, 0x30, 0x30, - 0x68, 0xfc, 0x92, 0x2e, 0x1a, 0x1e, 0x17, 0x8d, 0x45, 0xfc, 0xe1, 0x23, - 0x7d, 0x84, 0x6e, 0x92, 0xd7, 0x7c, 0x45, 0x3c, 0x07, 0x55, 0x1a, 0xe5, - 0xf9, 0xfb, 0x3c, 0xb2, 0xbd, 0x0f, 0x76, 0xf6, 0xe0, 0x32, 0xfe, 0xd2, - 0x8a, 0x4b, 0x41, 0x04, 0x27, 0x68, 0x56, 0x60, 0x91, 0xa5, 0x16, 0x0b, - 0x2c, 0xb3, 0x0a, 0xf9, 0x4d, 0x68, 0xd8, 0x1a, 0x88, 0x38, 0x82, 0x1b, - 0xf0, 0x8c, 0x52, 0x06, 0x37, 0x4f, 0x93, 0x66, 0x3f, 0x88, 0xd9, 0xf5, - 0x42, 0xdf, 0x5d, 0xab, 0xf3, 0xef, 0x62, 0xf3, 0x38, 0x95, 0xcb, 0xf1, - 0xfd, 0xdf, 0xc6, 0xdf, 0xa6, 0x32, 0x59, 0xcb, 0xe5, 0x6a, 0xf1, 0x3d, - 0x99, 0x4c, 0x27, 0xf2, 0xeb, 0xab, 0xc4, 0x5b, 0xf7, 0x8b, 0xe5, 0xeb, - 0x2a, 0xf9, 0xf6, 0xb8, 0x91, 0x8f, 0x8b, 0xd9, 0x64, 0xba, 0x92, 0xe3, - 0xf9, 0x04, 0x2e, 0xce, 0x37, 0xab, 0xe4, 0xeb, 0xf3, 0x66, 0xb1, 0x5a, - 0xcb, 0x4f, 0xe3, 0xb5, 0x48, 0xd6, 0x3f, 0xd1, 0x8d, 0x97, 0x64, 0xf3, - 0xb8, 0x78, 0xde, 0xc0, 0xdf, 0xaf, 0x72, 0xfa, 0xc7, 0x72, 0x35, 0x5d, - 0xaf, 0xe5, 0x62, 0x25, 0x93, 0xa7, 0xe5, 0x2c, 0x01, 0x99, 0x2f, 0xe3, - 0xd5, 0x6a, 0x3c, 0xdf, 0x24, 0xd3, 0xf5, 0x1d, 0x09, 0x0f, 0xd7, 0x45, - 0x7b, 0x5d, 0x2e, 0x1e, 0xe4, 0xd3, 0x74, 0x75, 0xff, 0x08, 0x3f, 0xc7, - 0x5f, 0x93, 0x59, 0xb2, 0x79, 0x1d, 0xc9, 0x87, 0x64, 0x33, 0x47, 0x49, - 0x0f, 0x20, 0x6a, 0x0c, 0xca, 0xae, 0x36, 0xc9, 0xfd, 0xf3, 0x6c, 0xbc, - 0x92, 0xcb, 0xe7, 0xd5, 0x72, 0xb1, 0x9e, 0x8e, 0xe0, 0x0c, 0x31, 0x5f, - 0xcc, 0x3f, 0x27, 0xf3, 0x87, 0x55, 0x32, 0xff, 0x36, 0x7d, 0x9a, 0xce, - 0x41, 0x87, 0xd5, 0x54, 0x4e, 0x92, 0xf5, 0xfd, 0x6c, 0x9c, 0x3c, 0xc1, - 0xd9, 0x9b, 0x05, 0x1d, 0x39, 0xfd, 0x63, 0x83, 0x37, 0x97, 0xd3, 0xd5, - 0x53, 0xb2, 0xd9, 0xb0, 0x9d, 0xaf, 0x8b, 0xe7, 0x95, 0x9c, 0x2d, 0xee, - 0xc7, 0x33, 0x31, 0x1b, 0xbf, 0xdc, 0xc9, 0xe7, 0xf9, 0x0c, 0x8f, 0x5b, - 0x4d, 0xff, 0xfe, 0x9c, 0xac, 0xf8, 0x11, 0xb8, 0x3e, 0x92, 0xf3, 0xc5, - 0xb5, 0x3b, 0x40, 0xa5, 0x8e, 0x37, 0xc0, 0x01, 0xb3, 0x99, 0xf8, 0x3a, - 0x95, 0xb3, 0x64, 0xfc, 0x75, 0x36, 0x65, 0x8d, 0xc1, 0x17, 0x13, 0x90, - 0x73, 0xbf, 0x19, 0xc9, 0x64, 0xde, 0xfe, 0x75, 0x0f, 0x6e, 0x06, 0x23, - 0x67, 0xa3, 0x20, 0x63, 0x0d, 0xc7, 0xc1, 0x85, 0x04, 0xb4, 0x98, 0x8c, - 0x9f, 0x20, 0x1c, 0x6b, 0x30, 0x21, 0x59, 0x83, 0x3d, 0xf0, 0x30, 0x49, - 0x79, 0x19, 0xbf, 0x4a, 0xf4, 0x2e, 0xf8, 0x08, 0x4d, 0x79, 0x5e, 0x4f, - 0xe3, 0x9f, 0x21, 0x80, 0x23, 0x39, 0xfd, 0x3e, 0x9d, 0xcb, 0xe4, 0x41, - 0x8c, 0x27, 0xdf, 0x93, 0x35, 0xa8, 0x1e, 0xef, 0x2f, 0xd6, 0xeb, 0x84, - 0xdd, 0x89, 0x97, 0xd6, 0xcf, 0xf7, 0x8f, 0x92, 0x0f, 0xb9, 0xfb, 0x77, - 0x00, 0x00, 0x00, 0xff, 0xff, 0xaf, 0x26, 0x8b, 0xf2, 0xb7, 0x22, 0x00, - 0x00, - }, - "conf/license/Artistic License 2.0", - ) -} - -func conf_license_bsd_3_clause_license() ([]byte, error) { - return bindata_read([]byte{ - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x09, 0x6e, 0x88, 0x00, 0xff, 0x94, 0x52, - 0xcd, 0x6e, 0xe3, 0x36, 0x10, 0xbe, 0xeb, 0x29, 0x06, 0x7b, 0xda, 0x14, - 0x42, 0xfa, 0x83, 0x9e, 0xda, 0x13, 0x2d, 0x31, 0x36, 0x01, 0x59, 0x52, - 0x49, 0x2a, 0x5e, 0x1f, 0x15, 0x89, 0x4e, 0x08, 0x58, 0x62, 0x40, 0xd1, - 0x09, 0xd2, 0xa2, 0xef, 0xde, 0x8f, 0xb4, 0x83, 0x78, 0xdb, 0x45, 0x8b, - 0x5e, 0x6c, 0x8a, 0xc3, 0xf9, 0xfe, 0x66, 0x0a, 0xf7, 0xfc, 0xe6, 0xed, - 0xe3, 0x53, 0xa0, 0xcf, 0xc3, 0x0d, 0xfd, 0xf4, 0xc3, 0x8f, 0x3f, 0x67, - 0xec, 0x78, 0xa4, 0x74, 0xb5, 0x90, 0x37, 0x8b, 0xf1, 0x2f, 0x66, 0xbc, - 0xcd, 0x32, 0x69, 0x46, 0xbb, 0x04, 0x6f, 0x1f, 0x4e, 0xc1, 0xba, 0x99, - 0xfa, 0x79, 0xa4, 0xd3, 0x62, 0xc8, 0xce, 0xb4, 0xb8, 0x93, 0x1f, 0x4c, - 0xba, 0x79, 0xb0, 0x73, 0xef, 0xdf, 0xe8, 0xe0, 0xfc, 0xb4, 0xe4, 0xf4, - 0x6a, 0xc3, 0x13, 0x39, 0x9f, 0xfe, 0xdd, 0x29, 0x64, 0x93, 0x1b, 0xed, - 0xc1, 0x0e, 0x7d, 0x04, 0xc8, 0xa9, 0xf7, 0x86, 0x9e, 0x8d, 0x9f, 0x6c, - 0x08, 0x66, 0xa4, 0x67, 0xef, 0x5e, 0xec, 0x88, 0x43, 0x78, 0xea, 0x03, - 0x7e, 0x0c, 0x40, 0x8e, 0x47, 0xf7, 0x6a, 0xe7, 0x47, 0x1a, 0xdc, 0x3c, - 0xda, 0xd8, 0xb4, 0xa4, 0xa6, 0xc9, 0x84, 0x5f, 0xb2, 0xec, 0x3b, 0xfa, - 0x5a, 0xd1, 0x42, 0xee, 0xf0, 0x2e, 0x65, 0x70, 0x23, 0x9e, 0x9d, 0x96, - 0x00, 0x03, 0xa1, 0x87, 0xc4, 0x88, 0xd7, 0x3f, 0xb8, 0x97, 0x58, 0x7a, - 0xf7, 0x3b, 0xbb, 0x60, 0x07, 0x93, 0xa3, 0x66, 0x97, 0x8c, 0xe8, 0x08, - 0xac, 0x08, 0x71, 0x4d, 0x36, 0x8f, 0x7f, 0x53, 0x02, 0xc2, 0xe1, 0xd8, - 0xdb, 0xc9, 0xf8, 0xdb, 0x6f, 0x29, 0x00, 0xd3, 0x55, 0x02, 0xef, 0x0a, - 0x60, 0x6d, 0x3c, 0x41, 0xd5, 0xbf, 0x88, 0x00, 0x7f, 0x94, 0xf1, 0x7f, - 0x45, 0xd0, 0xc5, 0xda, 0xe8, 0x86, 0xd3, 0x64, 0xe6, 0x90, 0x92, 0x05, - 0x16, 0x7a, 0xbe, 0x47, 0xee, 0x0e, 0x35, 0x4f, 0x53, 0x1f, 0x8c, 0xb7, - 0xfd, 0x71, 0xf9, 0xc8, 0x38, 0x0d, 0x26, 0x35, 0x5e, 0xc9, 0x4f, 0x8e, - 0x6a, 0x63, 0x53, 0x53, 0x2c, 0xce, 0xfd, 0x64, 0xa2, 0x98, 0x78, 0xfe, - 0xc3, 0xf9, 0xc7, 0x7e, 0xb6, 0xbf, 0x27, 0x86, 0x3f, 0x21, 0xfb, 0xe3, - 0x49, 0x0a, 0xde, 0x86, 0x98, 0x21, 0x64, 0x9f, 0xe1, 0x9c, 0x5f, 0xc0, - 0xfb, 0x46, 0x0f, 0x26, 0x2e, 0x09, 0x0c, 0x38, 0x32, 0xf3, 0x88, 0x5b, - 0x13, 0xf7, 0x01, 0x3a, 0x26, 0x17, 0x0c, 0x9d, 0x83, 0xc1, 0x9a, 0x8d, - 0x10, 0x88, 0x2d, 0xa3, 0x03, 0x0a, 0xef, 0x51, 0x2c, 0xee, 0x10, 0x5e, - 0xe3, 0xb8, 0x2f, 0xdb, 0x43, 0xcb, 0xb3, 0x19, 0xe2, 0xfa, 0xa0, 0xcd, - 0xc6, 0xa5, 0xf2, 0x71, 0x71, 0xe6, 0xf3, 0x0a, 0x2d, 0xcb, 0xd9, 0x80, - 0xde, 0x08, 0x45, 0xaa, 0xb9, 0xd3, 0x3b, 0x26, 0x39, 0xe1, 0xdc, 0xca, - 0xe6, 0x5e, 0x94, 0xbc, 0xa4, 0xd5, 0x9e, 0xf4, 0x86, 0x53, 0xd1, 0xb4, - 0x7b, 0x29, 0xd6, 0x1b, 0x4d, 0x9b, 0xa6, 0x2a, 0xb9, 0x54, 0xc4, 0xea, - 0x12, 0xb7, 0xb5, 0x96, 0x62, 0xd5, 0xe9, 0x06, 0x17, 0x9f, 0x98, 0x42, - 0xe7, 0xa7, 0x2c, 0x16, 0x58, 0xbd, 0x27, 0xfe, 0xa5, 0x95, 0x5c, 0x29, - 0x6a, 0x24, 0x89, 0x6d, 0x5b, 0x09, 0x80, 0x01, 0x5d, 0xb2, 0x5a, 0x0b, - 0xae, 0x72, 0x12, 0x75, 0x51, 0x75, 0xa5, 0xa8, 0xd7, 0x39, 0x01, 0x80, - 0xea, 0x46, 0x53, 0x25, 0xb6, 0x42, 0xe3, 0x99, 0x6e, 0xf2, 0x48, 0x9a, - 0xfd, 0xb3, 0x8d, 0x9a, 0x3b, 0xda, 0x72, 0x59, 0x6c, 0xf0, 0xc9, 0x56, - 0xa2, 0x12, 0x7a, 0x9f, 0x84, 0xdc, 0x09, 0x5d, 0x47, 0xae, 0x3b, 0x90, - 0x31, 0x6a, 0x99, 0xd4, 0xa2, 0xe8, 0x2a, 0x26, 0xa9, 0xed, 0x64, 0xdb, - 0x28, 0x4e, 0xb0, 0x95, 0x95, 0x42, 0x15, 0x15, 0x13, 0x5b, 0x5e, 0xde, - 0x82, 0x1d, 0x8c, 0xc4, 0xef, 0x79, 0xad, 0x49, 0x6d, 0x58, 0x55, 0x7d, - 0xd3, 0x65, 0xd4, 0xfe, 0x95, 0xc7, 0x15, 0x87, 0x48, 0xb6, 0xaa, 0x78, - 0x96, 0x98, 0xe0, 0xb2, 0x14, 0x92, 0x17, 0x3a, 0xda, 0xf9, 0x38, 0x15, - 0x48, 0x0e, 0xfa, 0xaa, 0x9c, 0x54, 0xcb, 0x0b, 0x11, 0x0f, 0xfc, 0x0b, - 0x87, 0x19, 0x26, 0xf7, 0xf9, 0x05, 0x53, 0xf1, 0xdf, 0x3a, 0x3c, 0x42, - 0x31, 0x2b, 0xd9, 0x96, 0xad, 0xe1, 0xed, 0xf3, 0x7f, 0x44, 0x82, 0x99, - 0x14, 0x9d, 0xe4, 0xdb, 0xa8, 0x19, 0x39, 0xa8, 0x6e, 0xa5, 0xb4, 0xd0, - 0x9d, 0xe6, 0xb4, 0x6e, 0x9a, 0x32, 0x06, 0x9d, 0x29, 0x2e, 0xef, 0x45, - 0xc1, 0xd5, 0xaf, 0x54, 0x35, 0x2a, 0xa5, 0xd5, 0x29, 0x9e, 0x53, 0xc9, - 0x34, 0x4b, 0xc4, 0x80, 0x40, 0x54, 0x28, 0xe3, 0xbc, 0xea, 0x94, 0x48, - 0xa1, 0x89, 0x5a, 0x73, 0x29, 0xbb, 0x56, 0x8b, 0xa6, 0xbe, 0x81, 0xf3, - 0x1d, 0x62, 0x91, 0x59, 0xc1, 0xd0, 0x5a, 0xa6, 0x74, 0x9b, 0x3a, 0x59, - 0x45, 0x42, 0x8d, 0xdc, 0x47, 0xd0, 0x98, 0x41, 0x0a, 0x3f, 0xa7, 0xdd, - 0x86, 0xe3, 0x5e, 0xc6, 0x40, 0x53, 0x52, 0x2c, 0x46, 0xa0, 0x90, 0x58, - 0xa1, 0xaf, 0x9e, 0x65, 0xe0, 0x43, 0x80, 0xfa, 0xca, 0x23, 0xd5, 0x7c, - 0x5d, 0x89, 0x35, 0xaf, 0x0b, 0x1e, 0xd5, 0x34, 0x11, 0x65, 0x27, 0x14, - 0xbf, 0xc1, 0xac, 0x84, 0x8a, 0x0f, 0xc4, 0x99, 0x76, 0xc7, 0xc0, 0xd9, - 0x25, 0xcb, 0x71, 0x46, 0x50, 0x95, 0xa5, 0xe3, 0xd5, 0xc6, 0xe6, 0x69, - 0x92, 0x24, 0xee, 0x88, 0x95, 0xf7, 0x22, 0xca, 0xbe, 0x3c, 0xc6, 0xec, - 0x95, 0xb8, 0xec, 0x49, 0x8a, 0xac, 0xd8, 0xd0, 0x39, 0xee, 0xdb, 0xbf, - 0x02, 0x00, 0x00, 0xff, 0xff, 0x84, 0xcd, 0xba, 0x22, 0xc1, 0x05, 0x00, - 0x00, - }, - "conf/license/BSD (3-Clause) License", - ) -} - -func conf_license_gpl_v2() ([]byte, error) { - return bindata_read([]byte{ - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x09, 0x6e, 0x88, 0x00, 0xff, 0x9c, 0x7c, - 0x6d, 0x73, 0xdb, 0xc8, 0x91, 0xff, 0xfb, 0xf9, 0x14, 0x53, 0x7a, 0x63, - 0xa9, 0x8a, 0xa6, 0xd7, 0xce, 0x3f, 0xf9, 0x67, 0x57, 0x57, 0x57, 0x45, - 0x49, 0x94, 0xc5, 0x44, 0xa6, 0x14, 0x92, 0xb2, 0xa3, 0x77, 0x01, 0xc9, - 0xa1, 0x88, 0x18, 0x04, 0x78, 0x18, 0x40, 0x5a, 0x56, 0x2a, 0xdf, 0xfd, - 0xfa, 0xd7, 0xdd, 0x03, 0x0c, 0xf8, 0xe0, 0xdd, 0x4b, 0xea, 0xf6, 0x76, - 0x4d, 0x00, 0x33, 0x3d, 0xfd, 0xf8, 0xeb, 0x87, 0xf1, 0xe7, 0xf1, 0x93, - 0xfd, 0x3c, 0x1c, 0x0f, 0x27, 0x83, 0x7b, 0xfb, 0xf8, 0x74, 0x75, 0x3f, - 0xba, 0xb6, 0xf4, 0xcf, 0x70, 0x3c, 0x1d, 0x1a, 0x7b, 0xfc, 0x7f, 0x5f, - 0x5d, 0xe9, 0xd3, 0x22, 0xb7, 0x9f, 0x7a, 0xf6, 0x2f, 0x75, 0xee, 0xec, - 0xc7, 0x9f, 0x7f, 0xfe, 0x68, 0x8c, 0xbd, 0x2e, 0xb6, 0xbb, 0x32, 0x7d, - 0x59, 0x57, 0xf6, 0xfc, 0xfa, 0x82, 0x7e, 0xfc, 0xf3, 0xcf, 0x3d, 0x7e, - 0x64, 0x6f, 0x4b, 0xe7, 0xec, 0xb4, 0x58, 0x55, 0x6f, 0x49, 0xe9, 0xec, - 0x6d, 0x51, 0xe7, 0xcb, 0xa4, 0xa2, 0x05, 0x7a, 0x76, 0x94, 0x2f, 0xfa, - 0x3d, 0xfb, 0x5f, 0xeb, 0xaa, 0xda, 0xfe, 0xf2, 0xe1, 0xc3, 0xca, 0xaf, - 0xfa, 0x45, 0xf9, 0xf2, 0xe1, 0xbf, 0x8d, 0xfd, 0x23, 0xbe, 0x4a, 0xf2, - 0xef, 0x59, 0x9a, 0xdb, 0x69, 0x45, 0xdf, 0x57, 0x3d, 0x7b, 0x9b, 0xae, - 0xaa, 0xb5, 0xbd, 0xcd, 0x8a, 0xa2, 0xec, 0xd9, 0xab, 0xc2, 0x57, 0x58, - 0xe1, 0xcb, 0xc0, 0xfe, 0xf4, 0xe9, 0xe3, 0xc7, 0x9f, 0xde, 0x7f, 0xfc, - 0xc3, 0x4f, 0x1f, 0xed, 0xd3, 0x74, 0x60, 0xec, 0xf0, 0xd5, 0x95, 0xbb, - 0x82, 0xe8, 0x4a, 0xbd, 0xdd, 0xba, 0x72, 0x93, 0x56, 0x95, 0x5b, 0xda, - 0xaa, 0xb0, 0x0b, 0x22, 0xd0, 0x26, 0xf9, 0xd2, 0x2e, 0x53, 0x5f, 0x95, - 0xe9, 0xbc, 0xae, 0x9c, 0xa5, 0x77, 0xe7, 0x44, 0xcc, 0x06, 0x0f, 0x53, - 0xe7, 0x8d, 0x2d, 0x56, 0xb6, 0x5a, 0xd3, 0x97, 0x59, 0xba, 0x70, 0xb9, - 0x77, 0x76, 0x59, 0x2c, 0xea, 0x8d, 0xcb, 0x69, 0x7f, 0x7a, 0xdf, 0x2e, - 0xd6, 0x49, 0xfe, 0x92, 0xe6, 0x2f, 0x36, 0xad, 0xb0, 0x7c, 0x5e, 0x54, - 0x36, 0xc9, 0xb2, 0xe2, 0xcd, 0x2d, 0xfb, 0xe6, 0x14, 0xbb, 0xf8, 0x7f, - 0x8f, 0xa5, 0x4b, 0x36, 0xf3, 0xcc, 0xe1, 0xad, 0xd9, 0xda, 0x85, 0xe5, - 0xbd, 0x5d, 0x15, 0xa5, 0xdd, 0xd0, 0x61, 0xac, 0x0f, 0x0c, 0xc2, 0x3f, - 0x4b, 0xe7, 0xd3, 0x97, 0x5c, 0xc8, 0xae, 0x92, 0xef, 0xf4, 0xe3, 0x5b, - 0xb2, 0xb3, 0xbb, 0xa2, 0x2e, 0xcd, 0x8a, 0xb8, 0xb1, 0x2c, 0x36, 0x78, - 0xe2, 0xd7, 0xfc, 0x3e, 0x9d, 0x88, 0xe9, 0xa2, 0x13, 0x57, 0x7d, 0x6b, - 0xaf, 0x76, 0x74, 0x98, 0xbc, 0x2a, 0x13, 0x4f, 0x44, 0x57, 0xb4, 0x17, - 0x4b, 0xd8, 0xe5, 0xae, 0x4c, 0x32, 0xfb, 0x58, 0xcf, 0x69, 0x6b, 0x73, - 0xaf, 0xa7, 0xa3, 0x33, 0xa4, 0x79, 0xe5, 0xf2, 0xa5, 0x6c, 0xf5, 0x52, - 0x27, 0xc4, 0xf5, 0x8a, 0xc4, 0x85, 0xad, 0xec, 0x8f, 0xb6, 0xc2, 0x33, - 0x13, 0x68, 0x7e, 0xff, 0x9e, 0x5e, 0xd9, 0x80, 0x4e, 0x5f, 0xd3, 0x6b, - 0xd8, 0xb4, 0x39, 0x0e, 0x6d, 0x81, 0x77, 0xf9, 0xa0, 0xc4, 0x2b, 0xa2, - 0xd1, 0xdb, 0xda, 0x93, 0x0a, 0xf5, 0xc1, 0x89, 0xd4, 0x9b, 0x2e, 0x69, - 0x36, 0x90, 0x96, 0x6c, 0xb7, 0x19, 0x49, 0x04, 0x9b, 0x33, 0x7f, 0x58, - 0x30, 0xae, 0xab, 0x4c, 0xa6, 0x55, 0xa6, 0x77, 0x3e, 0xe2, 0x60, 0xce, - 0xa7, 0x49, 0xf2, 0x9d, 0x2d, 0xe8, 0x9b, 0xd2, 0x6e, 0xcb, 0xe2, 0xa5, - 0x4c, 0x36, 0xf6, 0x6d, 0x5d, 0x60, 0xe5, 0xba, 0x5a, 0x17, 0xa5, 0x27, - 0x2e, 0x6d, 0x48, 0x39, 0xe8, 0x4d, 0x53, 0x7b, 0x91, 0x29, 0x91, 0x74, - 0x3e, 0x2d, 0x36, 0x4e, 0x3f, 0x3b, 0xa5, 0xb8, 0x9d, 0xc3, 0x2d, 0x0a, - 0xd2, 0x21, 0x62, 0xdf, 0x7c, 0x67, 0x02, 0xb3, 0xef, 0x9d, 0xa7, 0x03, - 0xda, 0x13, 0x07, 0x4b, 0x73, 0x5f, 0xb9, 0x64, 0xd9, 0xbf, 0xb0, 0xf6, - 0xb9, 0xa8, 0xed, 0x22, 0xc9, 0xf9, 0xac, 0x3b, 0x2b, 0xb4, 0x30, 0xe7, - 0x95, 0x60, 0x4f, 0x02, 0x2c, 0x0a, 0x56, 0xad, 0x6f, 0x6b, 0x97, 0xdb, - 0x37, 0xe2, 0xeb, 0xd6, 0x25, 0xdf, 0xc1, 0x0c, 0x66, 0x6a, 0x20, 0xa4, - 0x87, 0x47, 0x20, 0xa8, 0x74, 0x2b, 0x57, 0x96, 0x38, 0x0d, 0x31, 0x40, - 0xe5, 0xd7, 0x83, 0x9e, 0x9a, 0x6d, 0x49, 0xfb, 0xd3, 0x01, 0x1f, 0xea, - 0x53, 0x94, 0xf9, 0x03, 0xd5, 0x8b, 0x45, 0x9a, 0x54, 0x50, 0x0a, 0xb3, - 0x4e, 0x5e, 0x45, 0xc0, 0x91, 0x72, 0x44, 0xf6, 0x24, 0x66, 0x74, 0x40, - 0x9f, 0x3d, 0x57, 0xd5, 0x29, 0x5f, 0x58, 0x13, 0x0c, 0xdb, 0x18, 0x31, - 0xe9, 0x95, 0xb6, 0xb6, 0xe9, 0x0a, 0x4b, 0xdb, 0xb7, 0xd4, 0xaf, 0x2f, - 0x7a, 0xcd, 0x56, 0x74, 0x96, 0x85, 0x4b, 0x5f, 0xb1, 0x48, 0x5d, 0x2e, - 0xb0, 0xf4, 0x92, 0x04, 0x53, 0x32, 0xc3, 0x5e, 0x1c, 0xd9, 0x5f, 0x65, - 0xc2, 0x87, 0xa4, 0xb3, 0xf4, 0xc7, 0xe8, 0x53, 0xbc, 0xa3, 0x8a, 0xda, - 0x51, 0x46, 0xfa, 0x9c, 0x74, 0xcf, 0x12, 0x8d, 0x0b, 0xa1, 0x12, 0x8b, - 0xe4, 0x36, 0x77, 0x6f, 0x42, 0x6f, 0xe0, 0xfb, 0xa5, 0xe8, 0x50, 0x58, - 0xee, 0x7b, 0x5e, 0xbc, 0x35, 0xeb, 0x2e, 0x0b, 0xac, 0xe9, 0xb1, 0x32, - 0xf1, 0xd9, 0xb3, 0x74, 0x66, 0x05, 0x3e, 0xad, 0xdc, 0xa2, 0x12, 0xcb, - 0x61, 0x3f, 0xe8, 0x59, 0x2a, 0xb9, 0x8b, 0x78, 0x59, 0x3a, 0x70, 0x6a, - 0x01, 0x25, 0xf2, 0xb2, 0x3c, 0x31, 0x63, 0x9e, 0x2e, 0x0d, 0xe9, 0x2a, - 0x5c, 0x16, 0x98, 0xe9, 0x72, 0xb6, 0x74, 0xdd, 0x44, 0x56, 0x02, 0xe1, - 0xd0, 0x68, 0xff, 0x5d, 0x1e, 0x15, 0x90, 0x4a, 0x09, 0xbb, 0x2d, 0xf9, - 0x80, 0xf2, 0x56, 0xdf, 0xcc, 0xe4, 0x9b, 0xce, 0x2e, 0x64, 0xd1, 0x3e, - 0x4b, 0x2a, 0x5e, 0x7c, 0xe1, 0xca, 0x2a, 0xa1, 0x03, 0xd3, 0x1b, 0x5b, - 0x7a, 0x98, 0xce, 0xd3, 0x2c, 0xad, 0x52, 0x75, 0x43, 0x58, 0x59, 0x38, - 0x6a, 0x8e, 0x4a, 0x34, 0xe6, 0x64, 0x0f, 0x14, 0x29, 0xfb, 0x37, 0xc5, - 0x32, 0x5d, 0x41, 0x7d, 0x99, 0x15, 0xb7, 0xf4, 0xc0, 0xfd, 0x9a, 0x6c, - 0xb6, 0x19, 0xbd, 0xa4, 0x6f, 0x1c, 0x5d, 0xce, 0xd7, 0x8b, 0xb5, 0x4d, - 0x02, 0xcb, 0x89, 0x57, 0x6b, 0x07, 0xab, 0x33, 0xf4, 0xa7, 0x2a, 0xe5, - 0x13, 0xb3, 0xcb, 0xb0, 0x2b, 0x47, 0x0b, 0xf1, 0x3e, 0x35, 0xb9, 0x81, - 0x97, 0x54, 0xf5, 0x8f, 0xb4, 0x23, 0xa5, 0xa5, 0x72, 0x62, 0x0e, 0xdc, - 0x4a, 0xcb, 0x05, 0xe6, 0x2b, 0xcc, 0xc8, 0x42, 0x57, 0xfb, 0x62, 0x65, - 0xfc, 0xed, 0x9e, 0x3a, 0xd3, 0x27, 0x3b, 0x36, 0xb0, 0x5e, 0xa3, 0x6a, - 0x91, 0x7a, 0xd1, 0x53, 0x13, 0x69, 0x1e, 0xad, 0x33, 0x20, 0x95, 0x68, - 0xe8, 0xf0, 0x6b, 0x52, 0x09, 0x7a, 0x67, 0x13, 0x94, 0x81, 0x22, 0x0d, - 0x5c, 0x10, 0xaf, 0x2a, 0x0a, 0x43, 0xff, 0x95, 0x96, 0x26, 0x88, 0x06, - 0x36, 0xec, 0x8e, 0x69, 0x09, 0xe9, 0x3d, 0xc5, 0xb5, 0xea, 0x8d, 0x64, - 0x5a, 0xb9, 0xad, 0xff, 0xc5, 0x9e, 0x7f, 0xbc, 0xe0, 0x58, 0x25, 0xc1, - 0xb4, 0xcb, 0x75, 0x52, 0x4b, 0x73, 0xfe, 0xe9, 0x82, 0xf8, 0x47, 0x76, - 0xae, 0x6a, 0x12, 0x45, 0xab, 0xb7, 0x75, 0x4a, 0x4c, 0x05, 0x8f, 0x3c, - 0x3f, 0xcc, 0xdc, 0x0b, 0x99, 0x39, 0x47, 0x41, 0xcf, 0x31, 0x5b, 0xc3, - 0x60, 0x2f, 0x96, 0x30, 0xad, 0xf9, 0x81, 0xa3, 0x10, 0x8b, 0x31, 0xde, - 0x8f, 0xa9, 0x1e, 0x64, 0x9e, 0x38, 0x04, 0x59, 0xb8, 0x04, 0x12, 0x63, - 0xef, 0x49, 0xee, 0x56, 0x8f, 0x82, 0x55, 0x61, 0x2c, 0x74, 0x20, 0x51, - 0x78, 0xb6, 0xc6, 0xa0, 0xf0, 0xaa, 0x70, 0x86, 0x19, 0xee, 0x42, 0x64, - 0xae, 0xa1, 0xb8, 0xbe, 0xa2, 0xcf, 0x7c, 0x23, 0x0a, 0xf1, 0xa6, 0x79, - 0x41, 0xdf, 0x97, 0x08, 0x42, 0x3b, 0xde, 0x92, 0x4f, 0xd7, 0x89, 0x35, - 0x24, 0x88, 0xd1, 0xea, 0x20, 0xc4, 0x30, 0xf1, 0x29, 0xbb, 0x61, 0xfa, - 0x7d, 0xe3, 0xb0, 0x8b, 0xcb, 0xbc, 0xc4, 0x82, 0x6d, 0x42, 0xfe, 0x98, - 0x28, 0xcc, 0x41, 0x9f, 0x51, 0x6f, 0xe1, 0x63, 0x0d, 0x22, 0x72, 0x55, - 0x64, 0x44, 0xcc, 0x5b, 0x50, 0x0e, 0x56, 0xa0, 0x10, 0xe7, 0xb1, 0x63, - 0x41, 0x22, 0x49, 0xf3, 0x24, 0xeb, 0xd1, 0x1e, 0x72, 0x24, 0xc4, 0x18, - 0x62, 0x04, 0x45, 0xf6, 0x0d, 0x87, 0xd2, 0xb2, 0x58, 0xd6, 0x0b, 0x21, - 0x83, 0x63, 0x08, 0xa4, 0x4b, 0xda, 0x89, 0x05, 0xc8, 0x35, 0x67, 0x10, - 0x3d, 0xa4, 0x10, 0xad, 0x65, 0x34, 0x1c, 0xbd, 0xa3, 0x17, 0xb6, 0x75, - 0xc5, 0x01, 0x46, 0xd4, 0xe5, 0x16, 0x8f, 0xb3, 0x5d, 0x8f, 0x37, 0x89, - 0xdd, 0x13, 0x48, 0xaa, 0xd6, 0x84, 0x28, 0x28, 0x72, 0xd3, 0x5e, 0x14, - 0xed, 0xc1, 0xcb, 0x8a, 0x42, 0x08, 0x9f, 0x5e, 0x63, 0xe3, 0x16, 0x8f, - 0x2b, 0x84, 0x59, 0xd2, 0x3b, 0xf8, 0x56, 0xf6, 0x20, 0xaf, 0x45, 0xba, - 0xe4, 0xfd, 0x97, 0xf0, 0x8e, 0xa5, 0x9c, 0x98, 0xe2, 0x57, 0x50, 0x07, - 0x04, 0x46, 0x32, 0xce, 0x44, 0x98, 0xde, 0x04, 0x4e, 0x1c, 0x22, 0xcd, - 0x97, 0xe9, 0x6b, 0xba, 0xac, 0x41, 0x94, 0x2d, 0xe6, 0xec, 0x48, 0x64, - 0x93, 0x06, 0xce, 0x90, 0xc5, 0xe7, 0xd6, 0x91, 0x6e, 0x2e, 0xd8, 0xda, - 0x38, 0x0e, 0xad, 0xdb, 0x65, 0xe8, 0xdf, 0x14, 0x86, 0x5c, 0x95, 0x94, - 0xbb, 0xbe, 0x3a, 0x4d, 0xd2, 0x09, 0xa8, 0x0b, 0x89, 0x99, 0x95, 0x87, - 0x39, 0xbe, 0x49, 0x96, 0xc0, 0x32, 0x76, 0x91, 0xb9, 0x44, 0x29, 0x24, - 0x16, 0xe8, 0x81, 0xc4, 0xfc, 0xe6, 0x0d, 0x84, 0x5a, 0x8a, 0x6a, 0xaa, - 0x6a, 0xbd, 0x53, 0xb4, 0x01, 0x2f, 0x4f, 0x3f, 0x83, 0xef, 0xcd, 0x7b, - 0x09, 0x83, 0xb5, 0x7e, 0x80, 0x60, 0x5b, 0xc8, 0xbf, 0xb1, 0x5c, 0x8e, - 0x4f, 0x05, 0x9d, 0x50, 0xbc, 0x26, 0xd6, 0x84, 0xa1, 0xd0, 0x09, 0x7a, - 0xad, 0xfb, 0x52, 0x5d, 0x37, 0xa2, 0x6d, 0x0b, 0x01, 0x03, 0xab, 0x02, - 0x08, 0xf0, 0x04, 0xfe, 0xfb, 0x31, 0xba, 0x9e, 0x0d, 0x27, 0x5f, 0xa6, - 0x76, 0x30, 0xbe, 0xb1, 0xd7, 0x0f, 0xe3, 0x9b, 0xd1, 0x6c, 0xf4, 0x30, - 0x9e, 0xda, 0xdb, 0x87, 0x09, 0xfd, 0xf1, 0xf1, 0x79, 0x34, 0xfe, 0xdc, - 0xb3, 0x37, 0xa3, 0xe9, 0x6c, 0x32, 0xba, 0x7a, 0xc2, 0x23, 0x7e, 0xf1, - 0xcb, 0xc3, 0xcd, 0xe8, 0x76, 0x74, 0x3d, 0xc0, 0x0f, 0xd8, 0xf2, 0xa7, - 0x3e, 0xa3, 0xa8, 0x63, 0xb0, 0x49, 0x75, 0x93, 0x39, 0x4f, 0xc7, 0x11, - 0x4c, 0xf3, 0x56, 0x94, 0xdf, 0xd5, 0x4d, 0x00, 0x25, 0x92, 0x0c, 0xbd, - 0x49, 0xc0, 0x27, 0x04, 0xe2, 0x6d, 0x96, 0xa8, 0xf2, 0x42, 0x43, 0x5a, - 0x1f, 0xb4, 0x2e, 0x32, 0x44, 0x1a, 0x9f, 0xec, 0x14, 0xfb, 0x6e, 0x08, - 0x8d, 0x92, 0x08, 0x5a, 0x27, 0xb2, 0x34, 0x75, 0x13, 0x8c, 0x84, 0xa1, - 0x01, 0x48, 0x1f, 0xc7, 0x1a, 0x7d, 0x91, 0xc1, 0xd9, 0xa3, 0xd0, 0x77, - 0x46, 0xf0, 0xda, 0x11, 0x17, 0x7b, 0x86, 0x01, 0x4c, 0x43, 0x3e, 0xc7, - 0x88, 0xe8, 0x0c, 0xa0, 0x9e, 0x9d, 0x20, 0x29, 0xe8, 0x19, 0x1f, 0x65, - 0x9e, 0x88, 0x69, 0xf3, 0xce, 0x61, 0x35, 0xb3, 0x71, 0x14, 0xf4, 0xac, - 0x4b, 0xf9, 0xc8, 0xd1, 0x13, 0xac, 0x81, 0x75, 0x89, 0xd4, 0xf4, 0x95, - 0xc4, 0x47, 0xca, 0xc6, 0xab, 0x08, 0xf1, 0xed, 0x81, 0xb3, 0xe4, 0xed, - 0x17, 0x31, 0xf0, 0x94, 0x69, 0xa1, 0x93, 0xd3, 0xb6, 0xf2, 0xae, 0xb2, - 0x4d, 0x75, 0xbb, 0xb3, 0xb2, 0xdd, 0x16, 0x25, 0xeb, 0x04, 0x23, 0x8b, - 0x9e, 0x51, 0x02, 0x9a, 0x24, 0x03, 0x27, 0x80, 0xb3, 0x8f, 0xf5, 0xc7, - 0x07, 0xff, 0xdb, 0x04, 0xea, 0x25, 0x1c, 0x09, 0xce, 0xcf, 0x12, 0x33, - 0x19, 0x19, 0x6a, 0x9d, 0xbc, 0x80, 0x65, 0xe7, 0x77, 0xe4, 0x26, 0xc9, - 0x2b, 0xac, 0x88, 0xc5, 0xbd, 0xe6, 0x03, 0x6c, 0xc8, 0x40, 0x7e, 0x91, - 0xd5, 0x00, 0xf2, 0xd8, 0xa2, 0xa8, 0xa1, 0xf8, 0x04, 0x6f, 0xf5, 0x71, - 0x6e, 0x82, 0x64, 0xec, 0x59, 0xbc, 0xfb, 0x19, 0x60, 0xe8, 0x10, 0x7e, - 0x5d, 0xcd, 0x84, 0xfd, 0x5d, 0xb2, 0x5c, 0x96, 0x8e, 0x7d, 0x66, 0xe2, - 0xed, 0x19, 0x05, 0x92, 0x33, 0x52, 0xef, 0x01, 0xf9, 0xfa, 0x57, 0x41, - 0x0b, 0x85, 0xf2, 0x15, 0x28, 0xeb, 0x94, 0x91, 0x74, 0x0e, 0xc9, 0xc8, - 0x12, 0x28, 0xb4, 0x45, 0xcb, 0xa2, 0x1d, 0xaa, 0x0e, 0x97, 0xe2, 0x6f, - 0x19, 0xa2, 0xd5, 0x95, 0x4f, 0xd9, 0xfe, 0x29, 0x9c, 0xd2, 0xea, 0x41, - 0x55, 0x12, 0xb8, 0xce, 0x95, 0x29, 0xeb, 0xfc, 0x80, 0xf5, 0xea, 0xa1, - 0x03, 0xec, 0x71, 0xcb, 0x9e, 0xc2, 0x37, 0x5e, 0x8d, 0x9c, 0x2a, 0xf9, - 0x84, 0x62, 0x13, 0x7f, 0x62, 0x22, 0xe0, 0x5e, 0xe4, 0xc0, 0xde, 0x2b, - 0xde, 0x10, 0xb2, 0xe5, 0x80, 0xc0, 0x3e, 0x35, 0xad, 0x38, 0x3c, 0xda, - 0x03, 0x45, 0x33, 0x61, 0xe7, 0x73, 0xf2, 0x89, 0x6e, 0x0b, 0x1c, 0x96, - 0x73, 0x86, 0x42, 0xee, 0x0b, 0xc4, 0xcd, 0x1d, 0x81, 0x75, 0xf6, 0x62, - 0x74, 0xce, 0x23, 0x14, 0x5f, 0xf4, 0xcd, 0x37, 0x41, 0x3b, 0xb6, 0x51, - 0xb2, 0xb2, 0x06, 0xf6, 0xc6, 0x5a, 0x1e, 0xbb, 0x84, 0x20, 0xd4, 0x1c, - 0x72, 0x59, 0x38, 0x09, 0x0b, 0x1f, 0xfb, 0x82, 0x68, 0x92, 0xdd, 0xef, - 0xc9, 0x68, 0x03, 0x70, 0xd3, 0x65, 0xde, 0xf9, 0x18, 0xd4, 0x40, 0xbc, - 0x31, 0xd2, 0x06, 0x86, 0x4e, 0x73, 0xb6, 0x90, 0x0d, 0x85, 0x84, 0x9a, - 0x50, 0x19, 0x19, 0x1f, 0xf9, 0x7c, 0xd7, 0x82, 0x61, 0x03, 0xd6, 0x6c, - 0xd3, 0x45, 0x5d, 0xd4, 0x3e, 0x93, 0xdd, 0xc9, 0xe7, 0xb0, 0x63, 0x27, - 0xdd, 0xa5, 0x5f, 0xb6, 0x30, 0x74, 0x8a, 0x36, 0x74, 0x08, 0x06, 0x0c, - 0x4a, 0x64, 0xfc, 0x96, 0x69, 0x2d, 0x4d, 0x3d, 0x8f, 0x1e, 0x62, 0x91, - 0x25, 0xe9, 0x86, 0xb8, 0x42, 0x44, 0x07, 0x18, 0x70, 0x69, 0xbf, 0x3b, - 0xb7, 0x85, 0x49, 0x40, 0x03, 0x14, 0xea, 0x19, 0xf9, 0xcc, 0x87, 0xf0, - 0x05, 0x30, 0x84, 0x54, 0xb9, 0xe3, 0x09, 0x25, 0x0b, 0xc4, 0xe1, 0x93, - 0xb9, 0x77, 0x39, 0xed, 0x82, 0xc0, 0x46, 0x67, 0x6b, 0x96, 0x36, 0x78, - 0x87, 0x11, 0x65, 0x9b, 0x2b, 0x46, 0xa8, 0xa0, 0xcb, 0x3a, 0x52, 0x04, - 0x3e, 0x4a, 0x70, 0x6c, 0xba, 0x8f, 0x49, 0xb2, 0x82, 0xa4, 0x2b, 0x20, - 0xae, 0x7d, 0x9b, 0x44, 0xd5, 0x48, 0x49, 0xd2, 0x1e, 0x46, 0xb2, 0x0a, - 0x6a, 0xc8, 0xd5, 0xae, 0x77, 0x9e, 0x8c, 0x23, 0x53, 0xbd, 0x16, 0x63, - 0x0e, 0xb9, 0x9b, 0xec, 0x24, 0x68, 0x6f, 0xa7, 0xab, 0x24, 0x0a, 0x1a, - 0x8b, 0xad, 0x7a, 0x18, 0x9c, 0xb9, 0xc1, 0x4a, 0x11, 0x18, 0x43, 0x04, - 0xfe, 0x35, 0x64, 0xe9, 0x01, 0x41, 0xb3, 0xe6, 0x7c, 0x6a, 0x35, 0x47, - 0xc1, 0x1e, 0xaf, 0x28, 0xa7, 0x2a, 0x8f, 0x2b, 0x4c, 0xf0, 0x98, 0xea, - 0xd9, 0x8c, 0x78, 0x36, 0x7a, 0xa3, 0xe6, 0x20, 0xb9, 0x11, 0x72, 0x4f, - 0xba, 0xe2, 0x9e, 0x06, 0x56, 0xd1, 0xd3, 0x18, 0x75, 0xb2, 0x6b, 0xef, - 0x3a, 0x42, 0x75, 0xf0, 0xf6, 0x48, 0x28, 0x99, 0xea, 0xe1, 0x3e, 0x9a, - 0x64, 0x4e, 0x76, 0x7b, 0x44, 0x2f, 0x49, 0x35, 0x08, 0x7d, 0x6f, 0x9c, - 0x13, 0x25, 0x91, 0x53, 0x78, 0x17, 0x05, 0xf5, 0x5f, 0x24, 0x44, 0x27, - 0x17, 0x6d, 0x46, 0xb0, 0x48, 0x6a, 0x2f, 0xe9, 0x44, 0x03, 0x20, 0x57, - 0x69, 0x26, 0xe1, 0x73, 0x41, 0xbc, 0x65, 0xc6, 0xd2, 0x19, 0x61, 0xde, - 0xaa, 0x72, 0xbc, 0x86, 0x87, 0x5f, 0x65, 0x9b, 0x0e, 0x09, 0x27, 0xf3, - 0x5b, 0x7c, 0x8e, 0xac, 0x10, 0x3c, 0xd0, 0x12, 0xa9, 0x97, 0x2a, 0x9e, - 0xbc, 0xa5, 0x50, 0x61, 0x7e, 0x40, 0x07, 0xeb, 0x26, 0x18, 0xd0, 0x2c, - 0x1b, 0xf1, 0x8b, 0x98, 0xa3, 0x96, 0xa5, 0x79, 0x2e, 0xf9, 0x74, 0x2c, - 0xf3, 0x46, 0xc1, 0x99, 0x9f, 0x32, 0x1a, 0x2b, 0xab, 0x26, 0xac, 0xf3, - 0x6f, 0x5e, 0x42, 0x1d, 0xce, 0xb5, 0xe7, 0x02, 0x55, 0xb0, 0xbc, 0x06, - 0x7f, 0xc7, 0x18, 0xbc, 0x58, 0x21, 0x23, 0xea, 0xc0, 0x2b, 0xf2, 0x11, - 0x89, 0xee, 0x92, 0x80, 0x0b, 0x41, 0x9f, 0x11, 0xa2, 0xd8, 0x1a, 0xd3, - 0x72, 0xd9, 0xac, 0x02, 0x05, 0x3a, 0x85, 0x04, 0x42, 0xe8, 0x97, 0xe3, - 0x2f, 0x2e, 0x02, 0x8e, 0x6f, 0x58, 0x1f, 0x02, 0x7d, 0x4e, 0x7a, 0xc5, - 0x20, 0x93, 0x20, 0xee, 0x52, 0xea, 0x34, 0x9c, 0x2a, 0xa0, 0x54, 0x55, - 0x26, 0x08, 0x43, 0xe4, 0x67, 0xf4, 0xf0, 0xe4, 0x68, 0xc9, 0xc1, 0x46, - 0x09, 0xa2, 0xb0, 0x12, 0x3a, 0xca, 0x0f, 0x49, 0x52, 0x25, 0x42, 0x6a, - 0xf0, 0xc2, 0xb0, 0x08, 0xa8, 0x1e, 0x7f, 0x1e, 0x2d, 0xc8, 0x88, 0x31, - 0xcd, 0x95, 0x20, 0xd4, 0x9b, 0xca, 0x25, 0x45, 0xda, 0x12, 0xde, 0x82, - 0xb3, 0x44, 0xa2, 0x2e, 0x85, 0x93, 0x2f, 0x21, 0x14, 0x02, 0x4a, 0x50, - 0x68, 0xd1, 0xa7, 0x3c, 0x2f, 0x6a, 0xf2, 0x2e, 0xa8, 0x12, 0x6a, 0x10, - 0x66, 0xa3, 0xe8, 0x78, 0x3c, 0x7b, 0xd4, 0xe3, 0x25, 0xbc, 0x80, 0xfe, - 0x70, 0x3a, 0x11, 0x3a, 0x07, 0xc0, 0xa5, 0x64, 0xa6, 0x17, 0x10, 0x58, - 0xa3, 0x1f, 0x6a, 0x05, 0x42, 0x47, 0xf3, 0xc1, 0x45, 0x5b, 0xbd, 0xe0, - 0x4a, 0x1b, 0x5b, 0x7c, 0x84, 0xf1, 0x45, 0xe3, 0x03, 0xb7, 0x59, 0x5c, - 0xbc, 0xc2, 0xbe, 0xc1, 0x68, 0x18, 0x75, 0x59, 0x16, 0xe2, 0x17, 0x96, - 0xb3, 0x9c, 0xf9, 0x16, 0xf6, 0x35, 0x75, 0x6f, 0x7b, 0x3e, 0x91, 0x57, - 0x69, 0x11, 0xde, 0xf9, 0xf0, 0xd7, 0x85, 0x63, 0x77, 0xf5, 0x0b, 0x02, - 0x6c, 0x27, 0x64, 0x57, 0xde, 0x65, 0xab, 0x50, 0x7f, 0x0c, 0x32, 0x20, - 0xda, 0x78, 0x09, 0xc4, 0x3a, 0x0e, 0xe9, 0x8d, 0x26, 0x08, 0xf3, 0xa5, - 0x64, 0x90, 0x77, 0x58, 0xde, 0x13, 0x27, 0xd6, 0xf1, 0x40, 0xe1, 0x34, - 0x87, 0x08, 0xe1, 0x7f, 0xea, 0xb4, 0x94, 0x7a, 0x8c, 0xac, 0xb8, 0xb7, - 0x58, 0xff, 0xc2, 0x34, 0x35, 0x14, 0x7e, 0x75, 0x23, 0x05, 0x06, 0xae, - 0xcf, 0x69, 0x30, 0x69, 0xd4, 0x95, 0xb7, 0x6c, 0xad, 0x83, 0x13, 0x53, - 0x93, 0x02, 0x0a, 0xd0, 0xf3, 0x84, 0x52, 0x42, 0xeb, 0x9d, 0x16, 0x61, - 0x98, 0x3f, 0x48, 0x2d, 0xf9, 0x13, 0xc1, 0x42, 0x27, 0x2d, 0xb3, 0xc7, - 0x61, 0x09, 0x75, 0x88, 0x39, 0xe8, 0x48, 0x7c, 0x91, 0xd3, 0x6a, 0x5c, - 0xd5, 0x05, 0x32, 0x2a, 0x19, 0x20, 0xb6, 0xb0, 0x03, 0x2f, 0x7b, 0x47, - 0xc6, 0x07, 0x35, 0xc3, 0x06, 0x5e, 0xe1, 0xde, 0x86, 0x58, 0xfc, 0x8a, - 0x9c, 0xac, 0x82, 0x21, 0xc4, 0x26, 0x28, 0x82, 0x05, 0xe0, 0x61, 0x0b, - 0xed, 0xa1, 0xa6, 0xc5, 0xb5, 0xec, 0xf6, 0x9c, 0x05, 0x45, 0xb6, 0x86, - 0x7c, 0xb6, 0xa4, 0x3d, 0x7f, 0xc4, 0xb5, 0x8f, 0xc4, 0xef, 0x6d, 0x8d, - 0xfa, 0x73, 0x5d, 0x35, 0x1f, 0x98, 0x3d, 0x9d, 0xf3, 0xc9, 0x26, 0xe2, - 0x0a, 0x7d, 0xcd, 0x9e, 0x87, 0xf3, 0x4d, 0xf1, 0x30, 0x92, 0x99, 0xa4, - 0xbe, 0x13, 0x53, 0xcc, 0x7e, 0x4c, 0x61, 0xbf, 0x1a, 0xe3, 0x4d, 0x8d, - 0x59, 0xb2, 0x46, 0x48, 0x10, 0xf5, 0xab, 0xe0, 0x84, 0x4c, 0x97, 0x03, - 0x52, 0x0b, 0x6e, 0x4b, 0x23, 0x92, 0xf3, 0x09, 0x06, 0x08, 0x58, 0x98, - 0x52, 0x88, 0x5f, 0x51, 0x1d, 0x57, 0xd1, 0x1b, 0x88, 0xb6, 0xd4, 0x6d, - 0x02, 0xc6, 0xac, 0x39, 0x58, 0x48, 0x69, 0x84, 0x7e, 0xe0, 0x44, 0x54, - 0x8e, 0x55, 0xba, 0x97, 0xa4, 0x5c, 0x52, 0x2c, 0x60, 0xf9, 0xd3, 0x47, - 0xf6, 0x0d, 0x51, 0x5a, 0x0a, 0x65, 0x33, 0xfa, 0xb0, 0x17, 0xb5, 0x11, - 0x40, 0x29, 0x97, 0xe2, 0xab, 0xc6, 0x5f, 0x2a, 0x9f, 0x38, 0x16, 0x01, - 0x17, 0x45, 0xb5, 0x40, 0xc6, 0xa9, 0xbe, 0x32, 0x71, 0x19, 0x89, 0x5e, - 0x93, 0xe4, 0xae, 0x44, 0xc7, 0x83, 0x40, 0x00, 0x13, 0x2b, 0x45, 0x01, - 0x7a, 0xef, 0xd2, 0x92, 0x94, 0xd6, 0x9c, 0x37, 0xb4, 0x5b, 0x71, 0x76, - 0x63, 0xdc, 0xaf, 0xae, 0x94, 0x54, 0x38, 0x14, 0xd1, 0xa4, 0x4e, 0x84, - 0x72, 0x46, 0x76, 0x94, 0xd9, 0x51, 0xfe, 0x54, 0x94, 0x84, 0xe6, 0x32, - 0x54, 0x36, 0x42, 0x36, 0xe5, 0x8f, 0x22, 0x01, 0x3a, 0xf3, 0x28, 0x47, - 0x66, 0x91, 0x4a, 0xef, 0x67, 0x03, 0x47, 0x97, 0xbc, 0xbc, 0x80, 0x4b, - 0x61, 0x59, 0x4d, 0x79, 0xe4, 0x1c, 0xe0, 0xca, 0xb1, 0x85, 0xcc, 0x3e, - 0xd4, 0x62, 0xff, 0xc8, 0x3f, 0xfe, 0x00, 0x88, 0x5c, 0xe0, 0xcf, 0x89, - 0x7d, 0x2d, 0xb2, 0x1a, 0xf5, 0xfd, 0x15, 0x25, 0xbd, 0xbe, 0x2a, 0x4a, - 0xca, 0xab, 0xd4, 0xa5, 0xb7, 0xe7, 0x13, 0xe8, 0xdb, 0x3a, 0xa1, 0x79, - 0x19, 0xdc, 0x5f, 0x44, 0x9d, 0x78, 0x4d, 0xd6, 0x69, 0x24, 0x29, 0x47, - 0x83, 0xdc, 0x1f, 0x7e, 0x8c, 0xd4, 0xf7, 0x8f, 0xb0, 0x4f, 0x3d, 0x32, - 0x48, 0x89, 0xa5, 0x01, 0xfd, 0x7c, 0xba, 0x40, 0x88, 0x2a, 0xe6, 0xff, - 0x44, 0x7d, 0x25, 0xd4, 0xc3, 0x49, 0x7a, 0x8b, 0xba, 0x62, 0x7f, 0x03, - 0x40, 0x76, 0x24, 0xfc, 0x9a, 0x69, 0xb0, 0xb8, 0x8f, 0x4c, 0xc3, 0x27, - 0xcb, 0x20, 0xea, 0x14, 0x86, 0x22, 0x67, 0x80, 0xf2, 0x99, 0xda, 0x94, - 0x94, 0x37, 0x88, 0x03, 0x2d, 0x7c, 0x1a, 0x2c, 0x28, 0x24, 0x6f, 0x81, - 0x56, 0x48, 0x7f, 0x1b, 0x69, 0xe0, 0xb7, 0xcc, 0x71, 0xa8, 0x2b, 0xa5, - 0xbe, 0xcc, 0x71, 0x70, 0x43, 0x96, 0x41, 0x00, 0xea, 0x3d, 0x62, 0x39, - 0x88, 0x14, 0xfc, 0xd4, 0xe6, 0x20, 0x3d, 0xb5, 0xf9, 0x60, 0xb5, 0x51, - 0x4d, 0xe1, 0x07, 0x40, 0x50, 0x42, 0x4d, 0xf7, 0x38, 0x2c, 0x60, 0x15, - 0xde, 0x82, 0x56, 0x2b, 0x36, 0x49, 0x99, 0x92, 0xfe, 0xd7, 0xa1, 0x48, - 0xd4, 0x16, 0x0c, 0x11, 0x73, 0x04, 0x8c, 0x5d, 0x12, 0x0b, 0x7b, 0x0d, - 0x20, 0x3b, 0x3c, 0x59, 0xd2, 0xd8, 0x13, 0x23, 0xee, 0x9e, 0x7d, 0x4d, - 0xb2, 0x54, 0x96, 0x23, 0x9e, 0x65, 0xe4, 0x9d, 0x2b, 0xae, 0xc5, 0xc9, - 0xb9, 0x76, 0x2e, 0x29, 0xb9, 0x69, 0xd3, 0x66, 0x15, 0x8c, 0x8f, 0xd8, - 0x21, 0xec, 0x7a, 0x8a, 0xc7, 0x15, 0x40, 0xe5, 0xe8, 0x6c, 0x49, 0x31, - 0x3a, 0x97, 0xde, 0x1e, 0xe3, 0x22, 0x6d, 0x76, 0x85, 0x04, 0x01, 0xc1, - 0xcf, 0x95, 0x01, 0x6a, 0x2b, 0xe3, 0x62, 0x7d, 0xed, 0x71, 0x10, 0x16, - 0xde, 0xf3, 0x0a, 0xfb, 0x1c, 0x8f, 0x42, 0xf4, 0xbe, 0x70, 0x3a, 0x72, - 0x60, 0xdc, 0x27, 0xf1, 0xf7, 0xf7, 0xc9, 0xe0, 0x34, 0xff, 0xe5, 0x24, - 0xff, 0x81, 0x0c, 0x16, 0xa7, 0xb4, 0x2b, 0xcd, 0xc1, 0x02, 0xf1, 0x14, - 0x51, 0xca, 0xca, 0xf0, 0x54, 0x03, 0x33, 0x0b, 0x48, 0x42, 0xff, 0x5e, - 0x4f, 0xea, 0xc4, 0x91, 0x01, 0x51, 0xb8, 0x78, 0x96, 0x64, 0x44, 0x4b, - 0x2e, 0xfe, 0x4c, 0x51, 0x8c, 0xb6, 0x75, 0xa5, 0x3a, 0xb0, 0xe2, 0x52, - 0x62, 0x0e, 0x20, 0x0a, 0x4f, 0x49, 0x59, 0xdb, 0x41, 0xb5, 0x23, 0x54, - 0x11, 0x10, 0xf4, 0xf0, 0x7d, 0x43, 0x5f, 0x0c, 0xb5, 0x7e, 0xdb, 0x78, - 0xf9, 0xbc, 0x0d, 0x3e, 0x4d, 0x1a, 0xad, 0x43, 0x56, 0x4e, 0x7c, 0x29, - 0xa5, 0xba, 0x63, 0xa7, 0xf5, 0x3c, 0x44, 0x87, 0xb9, 0x70, 0x5f, 0x91, - 0x4b, 0xa7, 0x59, 0xb6, 0x6a, 0x9d, 0x8a, 0x14, 0xc4, 0x84, 0x16, 0x6e, - 0x11, 0x8a, 0x38, 0x36, 0x4d, 0xe4, 0xc4, 0x4b, 0x68, 0xcc, 0x69, 0xd5, - 0xb6, 0x9b, 0x98, 0x11, 0x3f, 0xb9, 0x39, 0x7a, 0xcb, 0x39, 0x43, 0x4c, - 0xb4, 0x14, 0xe4, 0x1a, 0xd3, 0x97, 0xdd, 0x0d, 0xef, 0x2e, 0x5b, 0x86, - 0xde, 0xcc, 0x01, 0x5d, 0xf4, 0x3b, 0x6d, 0x52, 0x23, 0x55, 0x4a, 0xdb, - 0xa4, 0x85, 0x12, 0xbb, 0xac, 0xf6, 0x9c, 0x98, 0x24, 0xde, 0x17, 0x8b, - 0x34, 0xd4, 0xc3, 0xc8, 0x04, 0x12, 0x28, 0xbe, 0x5b, 0xa5, 0x79, 0x2a, - 0x75, 0x57, 0xa4, 0x59, 0xfa, 0xbe, 0xf8, 0xe1, 0x32, 0xdd, 0x4a, 0x73, - 0x19, 0x01, 0xdb, 0x84, 0xf8, 0x05, 0xe2, 0x52, 0x2d, 0x93, 0x31, 0xec, - 0x41, 0xb5, 0x3c, 0xcb, 0x92, 0x18, 0x38, 0xb4, 0x27, 0xa2, 0x53, 0xde, - 0x91, 0xe0, 0x5f, 0xc1, 0x74, 0x60, 0x3b, 0xe3, 0xb7, 0x8e, 0x25, 0xee, - 0x02, 0x96, 0xed, 0x1d, 0x9c, 0x27, 0x36, 0x17, 0x6e, 0xf7, 0x21, 0x6a, - 0x68, 0x39, 0x0e, 0x9d, 0x3d, 0x6e, 0x14, 0x36, 0x95, 0x9e, 0x06, 0xd3, - 0xc6, 0x9f, 0x9d, 0x23, 0x6b, 0x97, 0x6a, 0xa1, 0xae, 0x4c, 0x3c, 0x9a, - 0x73, 0x02, 0x62, 0x20, 0xa7, 0x8b, 0xd6, 0x12, 0x36, 0xc9, 0x3f, 0x19, - 0x01, 0x6c, 0x48, 0xa3, 0x19, 0x9d, 0x9e, 0xcb, 0x09, 0x41, 0xf1, 0x77, - 0x52, 0x63, 0x97, 0x09, 0x34, 0xf1, 0x70, 0xe3, 0x17, 0x7a, 0x42, 0x43, - 0x31, 0xaa, 0x94, 0x9c, 0xd5, 0xef, 0x7c, 0x45, 0xd0, 0x8d, 0x6b, 0x4c, - 0x70, 0xbc, 0xdd, 0xf3, 0x23, 0x51, 0x22, 0xae, 0xd6, 0x39, 0xe3, 0x16, - 0xa6, 0xb9, 0xd9, 0xca, 0x28, 0x6a, 0x4f, 0xd4, 0x42, 0xb9, 0xce, 0xdc, - 0xe5, 0x1e, 0x05, 0xf9, 0xd5, 0x01, 0x5a, 0x88, 0x56, 0x07, 0xc4, 0x8a, - 0x2c, 0x00, 0x9d, 0x1b, 0x2d, 0x93, 0xb1, 0xa2, 0x13, 0x7d, 0x86, 0x56, - 0xe7, 0xad, 0x75, 0x60, 0x83, 0xd1, 0x71, 0xa2, 0x6d, 0x69, 0xd6, 0x06, - 0xae, 0x52, 0x2b, 0xaa, 0x0d, 0x5f, 0x59, 0xc0, 0x75, 0x72, 0xcd, 0xa0, - 0x72, 0x6f, 0x81, 0x03, 0xed, 0x0b, 0x70, 0x9b, 0xc1, 0x28, 0x2f, 0x46, - 0x0f, 0x6a, 0xc6, 0xf9, 0xde, 0x1c, 0x83, 0x95, 0x1d, 0x2f, 0x89, 0x86, - 0x05, 0xf0, 0x71, 0xfd, 0xb2, 0x8e, 0x7c, 0x7b, 0xaa, 0xdd, 0x73, 0xa9, - 0x71, 0x6e, 0xb6, 0x94, 0x33, 0x45, 0x43, 0x27, 0xd1, 0x22, 0x7b, 0xd5, - 0xa2, 0x88, 0x19, 0x0c, 0x19, 0xfe, 0x5f, 0x0b, 0x19, 0xa0, 0x44, 0x52, - 0x06, 0x92, 0x62, 0x0d, 0x65, 0x7f, 0x5c, 0x42, 0x17, 0xf8, 0x1a, 0x83, - 0x96, 0x0e, 0x94, 0x30, 0xa2, 0xa8, 0x50, 0x5e, 0xf7, 0xeb, 0x16, 0x65, - 0x5c, 0x4e, 0x9f, 0x34, 0xd2, 0x07, 0x6f, 0x1e, 0x21, 0x15, 0x34, 0x36, - 0x51, 0x5e, 0x22, 0xa5, 0xd8, 0x56, 0x86, 0x21, 0xce, 0x1b, 0x83, 0xc1, - 0xe2, 0xe4, 0xf6, 0xa7, 0x77, 0x87, 0xfb, 0x44, 0x8b, 0x49, 0x54, 0x90, - 0xdb, 0x46, 0x49, 0x8d, 0x28, 0x50, 0x69, 0x2c, 0x43, 0x10, 0x49, 0x21, - 0xc7, 0x4e, 0x0b, 0xf4, 0x08, 0x59, 0xa6, 0x31, 0xc3, 0xc0, 0x5f, 0x20, - 0x68, 0xee, 0x0f, 0x35, 0xbe, 0x55, 0x2a, 0x56, 0xcc, 0x8c, 0xd0, 0x71, - 0x67, 0xe9, 0x22, 0x40, 0x04, 0x80, 0x16, 0x55, 0x04, 0x9b, 0x56, 0x5c, - 0x18, 0x62, 0x48, 0xcb, 0x76, 0x10, 0xa7, 0x21, 0x8c, 0x2d, 0x87, 0xa5, - 0x84, 0xec, 0x06, 0xae, 0x38, 0x10, 0x40, 0xe9, 0x20, 0x7a, 0x5e, 0xf4, - 0x7f, 0xab, 0x3a, 0x13, 0xc7, 0x92, 0xa5, 0x09, 0xa5, 0x8e, 0x2c, 0xba, - 0x3f, 0x8a, 0xe8, 0x42, 0x76, 0x17, 0xe7, 0x9a, 0xd0, 0xc8, 0x6d, 0xb5, - 0x97, 0x82, 0xf9, 0x14, 0x25, 0xc9, 0xd0, 0xa7, 0x66, 0xcd, 0xd1, 0xc9, - 0x0b, 0xf6, 0xb5, 0xcd, 0xf1, 0x81, 0x89, 0x59, 0xc3, 0xd1, 0xce, 0x7c, - 0x41, 0x82, 0x2f, 0x45, 0xdb, 0x6e, 0x57, 0x57, 0x0b, 0x7a, 0xe4, 0xc1, - 0x4f, 0x08, 0x06, 0xd5, 0xa0, 0xca, 0xef, 0x77, 0x3e, 0x64, 0x0a, 0x07, - 0x09, 0x6f, 0x12, 0x92, 0xb2, 0x92, 0xfb, 0x75, 0xeb, 0x74, 0x9e, 0x56, - 0x52, 0xa8, 0xcf, 0x92, 0xb7, 0xa6, 0x91, 0xaf, 0x79, 0xe2, 0xe1, 0x79, - 0x64, 0x1d, 0x8a, 0x2d, 0x05, 0xda, 0xd4, 0xf3, 0x9d, 0xf4, 0xc8, 0xb8, - 0x5a, 0xd1, 0xc1, 0xd7, 0x7b, 0xa5, 0xfb, 0x73, 0x2d, 0x2f, 0x9e, 0x2c, - 0xb1, 0x5f, 0x48, 0x69, 0x07, 0xbd, 0xc7, 0x45, 0xa3, 0x35, 0xb2, 0x7f, - 0xa2, 0x25, 0xdd, 0x8e, 0x8c, 0x2b, 0xc6, 0xaf, 0xe8, 0x58, 0xa3, 0xde, - 0x18, 0x06, 0x8e, 0xfe, 0x2f, 0x3d, 0x3e, 0xa1, 0xb8, 0x21, 0xdf, 0xec, - 0x31, 0x71, 0x2f, 0xc3, 0xd1, 0xa9, 0x87, 0x3f, 0xf5, 0xa5, 0x8b, 0x52, - 0xa5, 0x1b, 0xa7, 0xf8, 0xe4, 0x47, 0x48, 0xff, 0x37, 0x4e, 0x5c, 0xc5, - 0xf3, 0x0d, 0x7b, 0x06, 0xa4, 0xca, 0x8f, 0x0c, 0x39, 0x58, 0x63, 0xf0, - 0x68, 0x26, 0xf4, 0x94, 0xf5, 0x89, 0x0c, 0x8d, 0x88, 0x11, 0x77, 0x2b, - 0x89, 0x51, 0xaf, 0x3f, 0xd0, 0x45, 0xd6, 0xcd, 0xae, 0xa8, 0x42, 0x67, - 0xdb, 0x9d, 0xe8, 0x8b, 0x86, 0x69, 0x0a, 0x75, 0x4f, 0x29, 0x05, 0x06, - 0xad, 0x5b, 0xae, 0xea, 0x92, 0xbb, 0x55, 0x9d, 0xd9, 0x13, 0x4d, 0xc1, - 0xda, 0x92, 0xfa, 0x3b, 0xdb, 0xe4, 0x9a, 0xea, 0x5b, 0xd5, 0x01, 0xb0, - 0x5e, 0x13, 0x2b, 0xd6, 0xdc, 0xe0, 0xea, 0x9b, 0xae, 0x25, 0xe9, 0xb0, - 0x8a, 0x80, 0x24, 0x4a, 0x6c, 0xe9, 0xff, 0x2f, 0x20, 0xa7, 0xd6, 0x02, - 0xb5, 0xa1, 0x14, 0x79, 0x63, 0x3e, 0xc7, 0x5e, 0x42, 0xf6, 0xff, 0xfb, - 0x76, 0xb4, 0x92, 0xb8, 0xce, 0xd5, 0x14, 0x32, 0xd1, 0xa6, 0x2f, 0x80, - 0x18, 0x40, 0x49, 0xfb, 0x3f, 0xeb, 0xe5, 0x0b, 0x57, 0xf2, 0x04, 0xa3, - 0x44, 0xc9, 0xa9, 0xb4, 0x9f, 0x0d, 0x01, 0x51, 0x04, 0x1c, 0x17, 0x5e, - 0x5a, 0xa9, 0x3c, 0x43, 0xf7, 0x00, 0xe5, 0x1a, 0x7b, 0x2e, 0x8d, 0xe7, - 0x4d, 0xaa, 0xa3, 0x87, 0xda, 0xba, 0x26, 0x73, 0xad, 0x9d, 0xbf, 0xe8, - 0x99, 0x48, 0x0b, 0x19, 0x0b, 0x33, 0x1f, 0x59, 0x11, 0xa0, 0x3b, 0xe7, - 0x3a, 0x0a, 0x83, 0x43, 0x09, 0x55, 0x04, 0xfc, 0x18, 0x90, 0x50, 0xb6, - 0x1c, 0x36, 0x6e, 0x3d, 0xf5, 0x45, 0x08, 0xd3, 0x18, 0xfa, 0x23, 0x33, - 0xa9, 0x14, 0xe8, 0x37, 0x5b, 0xec, 0xd9, 0x48, 0x4f, 0x9a, 0x6d, 0x62, - 0xcb, 0x08, 0x17, 0x28, 0x7d, 0x62, 0xdf, 0x26, 0x32, 0x9e, 0xfe, 0x56, - 0xa6, 0x2f, 0x74, 0x14, 0x0a, 0x9f, 0xc7, 0x15, 0xfd, 0x42, 0xc1, 0xb8, - 0xc7, 0x00, 0x0f, 0xa9, 0x97, 0x4f, 0x37, 0x75, 0x46, 0x66, 0xea, 0xa4, - 0x55, 0x24, 0xed, 0x0b, 0x8a, 0x21, 0x2f, 0x0a, 0x2b, 0x5b, 0xaf, 0x6f, - 0xe2, 0xa6, 0x4d, 0x34, 0xb7, 0xe7, 0x48, 0x96, 0x5c, 0x7c, 0x8f, 0x3e, - 0xd3, 0xc8, 0x7f, 0x20, 0x44, 0x20, 0xef, 0xa0, 0x98, 0x27, 0x6c, 0x4f, - 0x27, 0x00, 0x0e, 0x87, 0x94, 0x92, 0x20, 0xdd, 0x66, 0x90, 0xa6, 0xa8, - 0x33, 0xc1, 0x71, 0x32, 0x42, 0x6a, 0xcb, 0x62, 0x47, 0x59, 0xc2, 0xee, - 0x3d, 0x4f, 0x17, 0x44, 0xc6, 0x1d, 0xc1, 0x84, 0xb0, 0x0b, 0x39, 0x3f, - 0x41, 0xbd, 0x05, 0x4f, 0xe4, 0x14, 0x4d, 0x7b, 0x4d, 0x1b, 0x2c, 0x4b, - 0x0a, 0x0b, 0x0b, 0x4c, 0x6b, 0x70, 0xd1, 0xbe, 0xf9, 0x13, 0x65, 0x91, - 0x0c, 0x2a, 0xe8, 0x1c, 0x72, 0x44, 0xf6, 0x3c, 0x9c, 0x57, 0xe8, 0xf0, - 0x27, 0x94, 0x81, 0xa8, 0x0a, 0xec, 0x9d, 0x13, 0x93, 0x80, 0x9d, 0xa5, - 0x0e, 0x15, 0xc7, 0x39, 0x7e, 0x6d, 0x0e, 0x67, 0x88, 0x7e, 0x7a, 0x89, - 0xa0, 0xd5, 0x54, 0x83, 0x58, 0xc8, 0x3f, 0x20, 0x5f, 0x20, 0x5c, 0xd4, - 0xf2, 0x39, 0xa8, 0x47, 0xd1, 0x7f, 0xae, 0x5d, 0x06, 0x20, 0x2d, 0xb9, - 0x30, 0x86, 0xea, 0x72, 0x31, 0x4a, 0xc7, 0x20, 0x4f, 0x42, 0x2f, 0x2f, - 0x01, 0x63, 0x5c, 0xd4, 0x59, 0x42, 0x9e, 0x36, 0x2d, 0x17, 0xf5, 0xc6, - 0xb3, 0xd7, 0x16, 0x0f, 0x37, 0x4f, 0xb2, 0xd6, 0x85, 0xbb, 0x78, 0xf9, - 0x68, 0x26, 0xd5, 0x48, 0x4d, 0x32, 0x74, 0x53, 0xc2, 0x4b, 0x51, 0x53, - 0x62, 0x6f, 0x86, 0x55, 0x67, 0x29, 0x73, 0x51, 0x21, 0x13, 0x6f, 0x8b, - 0xfe, 0xe9, 0xa8, 0x53, 0x71, 0xdb, 0xd6, 0x25, 0x7b, 0xb0, 0x23, 0x25, - 0x37, 0x92, 0x4c, 0xad, 0xf1, 0x99, 0xff, 0x24, 0x56, 0x1f, 0x0d, 0xa2, - 0xf8, 0x76, 0xa8, 0x02, 0x65, 0x7e, 0x52, 0xd5, 0x9d, 0x16, 0xcf, 0xb8, - 0x5a, 0x17, 0x66, 0xf6, 0xb4, 0x54, 0x27, 0x75, 0x83, 0xb4, 0xda, 0x69, - 0x2f, 0xc8, 0x70, 0x2d, 0x5b, 0xde, 0xbc, 0xec, 0x6e, 0xbe, 0x4e, 0x34, - 0xa1, 0xc1, 0xe9, 0x22, 0x0a, 0x43, 0x8f, 0x4f, 0x87, 0x6a, 0x70, 0xe8, - 0x97, 0x52, 0x57, 0xac, 0x74, 0x22, 0xb3, 0xcd, 0xaf, 0x3b, 0x22, 0x16, - 0xcc, 0xdf, 0x6b, 0xca, 0xab, 0x26, 0x85, 0xea, 0xc3, 0x93, 0x48, 0x88, - 0xdf, 0xca, 0x70, 0x46, 0xd0, 0xfe, 0x2d, 0x17, 0xe4, 0xc1, 0x30, 0x6b, - 0xbf, 0xb0, 0x1c, 0x5d, 0x41, 0xef, 0xb7, 0xd3, 0x39, 0xe6, 0x05, 0x53, - 0x1d, 0x64, 0xd6, 0xe2, 0x75, 0x74, 0x9b, 0x26, 0x13, 0x7f, 0x43, 0x03, - 0xbf, 0xe4, 0x0e, 0x24, 0x06, 0xfd, 0x0e, 0x48, 0x72, 0x4b, 0x13, 0xb4, - 0x9d, 0x5d, 0x97, 0xa6, 0x24, 0x3c, 0x98, 0xa8, 0xfe, 0xbc, 0xc8, 0xa5, - 0xde, 0xed, 0xd9, 0x71, 0xf2, 0x54, 0xcb, 0x22, 0x4a, 0xd9, 0x12, 0x02, - 0x4b, 0xfc, 0xd1, 0xa5, 0xd6, 0x50, 0xeb, 0x6d, 0xd3, 0xec, 0xe5, 0x79, - 0xaa, 0x0f, 0xcb, 0x22, 0x17, 0x01, 0x2c, 0x29, 0xfa, 0x2c, 0x79, 0xc8, - 0x94, 0xa7, 0xae, 0xac, 0x5f, 0xb3, 0xce, 0x00, 0x0c, 0x72, 0x78, 0xef, - 0xd4, 0x0a, 0x1a, 0x5a, 0x03, 0x7d, 0xad, 0x33, 0x52, 0x22, 0x65, 0xf8, - 0xa4, 0x99, 0x96, 0x50, 0x37, 0xa8, 0x91, 0x50, 0x1c, 0xf1, 0xba, 0x48, - 0x19, 0x13, 0xce, 0xf6, 0xac, 0x26, 0x56, 0x53, 0x9e, 0x8e, 0x03, 0xa1, - 0xd8, 0x05, 0xc5, 0x7d, 0x9e, 0x75, 0x7a, 0xd3, 0x1c, 0x71, 0x4e, 0x6c, - 0x70, 0xaf, 0x62, 0x00, 0x73, 0x77, 0x18, 0xad, 0x24, 0xaa, 0xfa, 0xea, - 0x68, 0xd9, 0xf1, 0xcf, 0xfd, 0xd0, 0x59, 0xdb, 0xaf, 0x52, 0x7c, 0xd0, - 0xf9, 0xd7, 0x3d, 0x87, 0x95, 0xfa, 0x68, 0x76, 0x02, 0xcd, 0x83, 0x30, - 0x26, 0xca, 0x69, 0x51, 0x09, 0x9f, 0xa5, 0xb9, 0x29, 0x54, 0xa5, 0x55, - 0xfe, 0xf9, 0xae, 0x6d, 0x6b, 0xc5, 0x59, 0xba, 0xb8, 0xe8, 0x16, 0x8d, - 0x1c, 0x0c, 0x12, 0xc1, 0x29, 0x72, 0xe2, 0xe5, 0x3b, 0x74, 0x1c, 0x66, - 0x01, 0xec, 0xd0, 0x93, 0xe5, 0x52, 0xaa, 0x0e, 0xd0, 0x01, 0x92, 0xf6, - 0x8b, 0xc3, 0xeb, 0xdb, 0x35, 0xb7, 0xcf, 0x3b, 0x47, 0x8c, 0x26, 0x5e, - 0x28, 0xac, 0x49, 0x23, 0xce, 0x88, 0x1f, 0x6e, 0x8e, 0xd2, 0x93, 0x21, - 0xcd, 0xa4, 0xea, 0x7e, 0xda, 0xb9, 0x2c, 0x20, 0xc5, 0x9c, 0x9c, 0x31, - 0xc0, 0x86, 0x32, 0x01, 0xd3, 0x32, 0x42, 0x3c, 0x47, 0xed, 0x75, 0x03, - 0xb7, 0x44, 0x44, 0xcc, 0xa5, 0x33, 0xb5, 0x48, 0x24, 0xb8, 0x46, 0xae, - 0x98, 0x30, 0x7e, 0x41, 0x06, 0x8c, 0x06, 0x89, 0x67, 0x7f, 0x1e, 0x91, - 0x48, 0x66, 0x4e, 0x4a, 0x19, 0xca, 0x8b, 0xda, 0x7b, 0x9c, 0x17, 0xcb, - 0x83, 0x11, 0x03, 0x96, 0xea, 0xcf, 0x7d, 0x1e, 0x83, 0x39, 0x39, 0x93, - 0x0e, 0x4e, 0x85, 0xd1, 0x8b, 0xd2, 0xbd, 0xa6, 0xdc, 0xba, 0x15, 0x91, - 0x63, 0xbc, 0xf9, 0x55, 0x2e, 0x6d, 0x78, 0xa3, 0xb2, 0x3f, 0x31, 0x9c, - 0x2e, 0x10, 0x00, 0x20, 0x16, 0xd6, 0x44, 0xff, 0xa6, 0xe3, 0x4d, 0x71, - 0xb6, 0x78, 0x0d, 0xb6, 0x1d, 0xe8, 0x25, 0x05, 0xf8, 0x14, 0xbe, 0x9d, - 0x68, 0xf7, 0xdb, 0xb4, 0xe4, 0x01, 0xf6, 0x50, 0x64, 0xf2, 0xb0, 0x5b, - 0xfd, 0x42, 0x2e, 0x4f, 0x80, 0x42, 0x82, 0x9d, 0x98, 0x5b, 0xa0, 0x0f, - 0x96, 0x8e, 0x54, 0x2c, 0x63, 0x0f, 0x2f, 0xd3, 0x46, 0xbc, 0x45, 0x33, - 0x4b, 0x29, 0x4d, 0x0e, 0x52, 0x44, 0x1e, 0x86, 0x64, 0x6c, 0xad, 0x8b, - 0x41, 0x54, 0xa8, 0xae, 0xa2, 0xda, 0x08, 0x11, 0x92, 0x8c, 0x6b, 0x3a, - 0x34, 0xdc, 0x62, 0x78, 0x23, 0xaf, 0x37, 0x73, 0x57, 0xb6, 0x93, 0xa2, - 0x21, 0x35, 0xe6, 0x5a, 0xce, 0x8a, 0x73, 0xf5, 0xbd, 0x77, 0x0f, 0xf2, - 0x08, 0xf1, 0x94, 0xd1, 0x34, 0x9d, 0x06, 0xda, 0x33, 0xf8, 0x6e, 0x4c, - 0x69, 0x95, 0x61, 0x85, 0xb3, 0x5e, 0x9b, 0xc4, 0x71, 0xc4, 0x0e, 0x03, - 0x1a, 0x6d, 0xe9, 0x3c, 0x2a, 0x9f, 0x76, 0xf1, 0x74, 0x98, 0x10, 0x0b, - 0xfd, 0xc1, 0x40, 0x54, 0x51, 0x86, 0x91, 0x81, 0xce, 0x56, 0x41, 0xc0, - 0xed, 0x8c, 0x1e, 0xd4, 0xc1, 0x1c, 0x51, 0x87, 0x83, 0xb3, 0xb7, 0xed, - 0x0c, 0x61, 0xc2, 0xee, 0x18, 0x0b, 0xf6, 0x5a, 0x64, 0xbb, 0x66, 0x80, - 0xa5, 0x08, 0x30, 0x3f, 0x7c, 0x82, 0xd4, 0xf4, 0x38, 0x35, 0xc7, 0x2e, - 0x67, 0xc8, 0xdc, 0xd2, 0x4f, 0xfd, 0x80, 0x1d, 0xc3, 0x34, 0x6a, 0x64, - 0x1d, 0x0c, 0x15, 0x0e, 0x86, 0x4f, 0x78, 0x10, 0x4e, 0xdc, 0x6f, 0x3c, - 0x8f, 0xea, 0xb5, 0x7b, 0xd7, 0xb1, 0xe0, 0x3d, 0x4c, 0x2d, 0x9a, 0xc6, - 0x0d, 0x62, 0x98, 0x98, 0xeb, 0x86, 0x07, 0xa3, 0xd3, 0xf4, 0x40, 0xef, - 0x6d, 0x22, 0xad, 0xc8, 0xb0, 0x09, 0x02, 0x4d, 0x37, 0x32, 0x76, 0x73, - 0xbf, 0xc1, 0xf9, 0xbd, 0xed, 0x4e, 0xd9, 0xeb, 0x25, 0x5f, 0xe6, 0x28, - 0x36, 0x0e, 0x46, 0xe6, 0x0d, 0x87, 0x83, 0xa6, 0xc4, 0xe8, 0x9b, 0xd9, - 0x67, 0xbd, 0xb0, 0x81, 0x18, 0xc6, 0x7c, 0xe7, 0x12, 0x06, 0x59, 0x1e, - 0xa9, 0xfc, 0xb2, 0xa5, 0x05, 0xc3, 0xe3, 0x2f, 0x45, 0x92, 0xb1, 0x75, - 0xb3, 0xed, 0x95, 0xaf, 0x41, 0xed, 0x04, 0x15, 0x90, 0xcb, 0xa9, 0x65, - 0xb0, 0x97, 0xbe, 0x6f, 0x6b, 0x00, 0xfc, 0x53, 0xb8, 0xea, 0xd3, 0xb9, - 0x40, 0x23, 0x2b, 0x15, 0x9b, 0xa2, 0x49, 0xd9, 0x71, 0x05, 0x48, 0x06, - 0x1b, 0x96, 0xe4, 0x60, 0x34, 0x8c, 0x34, 0x9f, 0xbc, 0x88, 0x3f, 0xc9, - 0x76, 0xbf, 0x71, 0x11, 0x6a, 0xfc, 0x60, 0xbf, 0x0d, 0x26, 0x93, 0xc1, - 0x78, 0xf6, 0xcc, 0x4a, 0xf1, 0xb1, 0x6f, 0xaf, 0x86, 0xd7, 0x83, 0xa7, - 0xe9, 0xd0, 0xce, 0xee, 0x86, 0xf6, 0x71, 0xf2, 0xf0, 0x79, 0x32, 0xf8, - 0x62, 0x47, 0xd3, 0x30, 0x27, 0x7b, 0x63, 0x6f, 0x27, 0xc3, 0xa1, 0x7d, - 0xb8, 0xb5, 0xd7, 0x77, 0x83, 0xc9, 0xe7, 0x61, 0x0f, 0xef, 0x4d, 0x86, - 0x78, 0x23, 0x5e, 0x0b, 0x53, 0xb3, 0xd1, 0x02, 0xf4, 0xd6, 0x03, 0xff, - 0x79, 0xf8, 0xf7, 0xd9, 0x70, 0x3c, 0xb3, 0x8f, 0xc3, 0xc9, 0x97, 0xd1, - 0x6c, 0x46, 0xab, 0x5d, 0x3d, 0xdb, 0xc1, 0xe3, 0x23, 0x2d, 0x3e, 0xb8, - 0xba, 0x1f, 0xda, 0xfb, 0xc1, 0x37, 0x62, 0xf1, 0xf0, 0xef, 0xd7, 0xc3, - 0xc7, 0x99, 0xfd, 0x76, 0x37, 0x1c, 0x9b, 0x07, 0x2c, 0xff, 0x6d, 0x44, - 0xf4, 0x4c, 0x67, 0x03, 0x7c, 0x30, 0x1a, 0xdb, 0x6f, 0x93, 0xd1, 0x6c, - 0x34, 0xfe, 0xcc, 0x0b, 0x62, 0x34, 0x77, 0x32, 0xfa, 0x7c, 0x37, 0xb3, - 0x77, 0x0f, 0xf7, 0x37, 0xc3, 0x09, 0xcf, 0xef, 0x7e, 0xa0, 0xdd, 0xf9, - 0x43, 0xfb, 0x38, 0x98, 0xcc, 0x46, 0xc3, 0xa9, 0x21, 0x3a, 0xbe, 0x8e, - 0x6e, 0xba, 0x87, 0x3a, 0x1b, 0x4c, 0x89, 0xec, 0x33, 0xfb, 0x6d, 0x34, - 0xbb, 0x7b, 0x78, 0x9a, 0x35, 0xc4, 0xe3, 0x70, 0x83, 0xf1, 0xb3, 0xfd, - 0xeb, 0x68, 0x7c, 0xd3, 0xb3, 0xc3, 0x11, 0x2f, 0x34, 0xfc, 0xfb, 0xe3, - 0x64, 0x38, 0xa5, 0xf3, 0x1b, 0x5a, 0x7b, 0xf4, 0x85, 0x28, 0x1e, 0xd2, - 0xc3, 0xd1, 0xf8, 0xfa, 0xfe, 0xe9, 0x86, 0x47, 0x83, 0xaf, 0x68, 0x85, - 0xf1, 0xc3, 0x8c, 0xf8, 0x44, 0x27, 0x23, 0x3a, 0x67, 0x0f, 0xcc, 0x9a, - 0xf0, 0x6e, 0x58, 0x9d, 0x88, 0xa1, 0xf5, 0xcd, 0x97, 0xe1, 0x84, 0xf8, - 0x37, 0x9e, 0x0d, 0xae, 0x46, 0xf7, 0x23, 0xda, 0x12, 0xb3, 0xc4, 0xb7, - 0xa3, 0xd9, 0x98, 0xb6, 0xe0, 0x89, 0xe3, 0x81, 0x50, 0x7e, 0xfd, 0x74, - 0x3f, 0xa0, 0x43, 0x3c, 0x4d, 0x1e, 0x1f, 0xa6, 0x43, 0xd4, 0x74, 0xc0, - 0x42, 0x5a, 0x84, 0x18, 0x3e, 0x19, 0x4d, 0xff, 0x6a, 0x07, 0x53, 0xa3, - 0x8c, 0xfd, 0xdb, 0xd3, 0xa0, 0x59, 0x88, 0xb8, 0x4b, 0x6b, 0x7c, 0x19, - 0x8c, 0xaf, 0x59, 0x50, 0x7b, 0x82, 0xc4, 0x71, 0xed, 0xf3, 0xc3, 0x13, - 0x42, 0x09, 0x9d, 0xfb, 0xfe, 0x06, 0x2f, 0x98, 0xf0, 0x02, 0x18, 0x35, - 0xb4, 0x37, 0xc3, 0xdb, 0xe1, 0xf5, 0x6c, 0xf4, 0x95, 0xc4, 0x4b, 0x6f, - 0xd2, 0x36, 0xd3, 0xa7, 0x2f, 0x43, 0xe5, 0xf7, 0x74, 0xc6, 0x0c, 0xba, - 0xbf, 0xb7, 0xe3, 0xe1, 0x35, 0xd1, 0x3b, 0x98, 0x3c, 0xdb, 0xe9, 0x70, - 0xf2, 0x75, 0x74, 0x0d, 0x3e, 0x98, 0xc9, 0xf0, 0x71, 0x30, 0x22, 0xf6, - 0x63, 0x6a, 0x7a, 0x32, 0xc1, 0x2a, 0x0f, 0x63, 0x71, 0x38, 0x9f, 0xfa, - 0x10, 0x1e, 0x69, 0xc9, 0xf0, 0x2b, 0x74, 0xe0, 0x69, 0x7c, 0x8f, 0xd3, - 0x4e, 0x86, 0x7f, 0x7b, 0xa2, 0xf3, 0x1c, 0xd1, 0x04, 0xac, 0x31, 0xf8, - 0x4c, 0xda, 0x06, 0x66, 0x46, 0x72, 0x37, 0xdf, 0x46, 0xb4, 0x39, 0x24, - 0xb4, 0x2f, 0xfc, 0x1e, 0x7f, 0x42, 0x0f, 0x5a, 0xe1, 0x3f, 0x93, 0x1a, - 0x3d, 0xd8, 0x2f, 0x83, 0x67, 0x19, 0xd5, 0x7e, 0x56, 0xf5, 0x20, 0x32, - 0x9b, 0x59, 0xee, 0xae, 0x56, 0x90, 0x52, 0xb4, 0xda, 0x39, 0xb8, 0x7a, - 0x00, 0x0f, 0xae, 0x88, 0x9e, 0x11, 0x93, 0x45, 0x84, 0x80, 0x21, 0x10, - 0xd1, 0xcd, 0xe0, 0xcb, 0xe0, 0xf3, 0x70, 0xda, 0x33, 0x8d, 0x12, 0xf0, - 0xd6, 0x3a, 0x5e, 0xde, 0xb3, 0xd3, 0xc7, 0xe1, 0xf5, 0x08, 0xff, 0x41, - 0xcf, 0x49, 0xf5, 0x48, 0xd6, 0xf7, 0xc2, 0x15, 0xb2, 0xa2, 0xbf, 0x3d, - 0x41, 0x8a, 0xf4, 0x83, 0x2e, 0x62, 0x07, 0x24, 0x4e, 0x1c, 0x0d, 0x7a, - 0xa8, 0x22, 0x83, 0x0d, 0x42, 0xd7, 0xc6, 0x41, 0x47, 0x68, 0xef, 0x7d, - 0xbb, 0x3c, 0x6f, 0xf7, 0xde, 0xd3, 0x3f, 0xe8, 0xc5, 0xfd, 0xc3, 0x14, - 0xca, 0x46, 0x9b, 0xcc, 0x06, 0x96, 0x29, 0xa6, 0x7f, 0x5f, 0x0d, 0xf1, - 0xf6, 0x64, 0x38, 0x26, 0x7e, 0xb1, 0x39, 0x0d, 0xae, 0xaf, 0x9f, 0x26, - 0x64, 0x5a, 0x78, 0x03, 0x5f, 0x10, 0x35, 0xd3, 0x27, 0x32, 0xb6, 0xd1, - 0x98, 0x85, 0x62, 0x70, 0x5e, 0xb6, 0xe6, 0xd1, 0xe4, 0x26, 0xd8, 0x13, - 0xf3, 0xd9, 0xde, 0x0e, 0x46, 0xf7, 0x4f, 0x93, 0x03, 0x1d, 0xa3, 0x9d, - 0x1f, 0x88, 0x85, 0x58, 0x92, 0x75, 0xad, 0x11, 0x48, 0x50, 0xb2, 0xe9, - 0x45, 0x8f, 0x75, 0xc0, 0x8e, 0x6e, 0x69, 0xab, 0xeb, 0x3b, 0x95, 0x9e, - 0xed, 0x58, 0xed, 0xb3, 0xbd, 0x23, 0x51, 0x5c, 0x0d, 0xe9, 0xb5, 0xc1, - 0xcd, 0xd7, 0x11, 0x3c, 0x8f, 0xec, 0x63, 0xc8, 0x16, 0xa6, 0x23, 0xe5, - 0xc9, 0x83, 0xae, 0xa0, 0x7c, 0x3c, 0xe5, 0xed, 0xe8, 0xb4, 0xfc, 0xf5, - 0x91, 0x01, 0xff, 0xee, 0x17, 0x77, 0x32, 0x4c, 0x35, 0xe0, 0xac, 0x55, - 0x2a, 0xb1, 0x33, 0x06, 0x0a, 0xf4, 0xe3, 0x33, 0x3c, 0xf3, 0x98, 0x50, - 0x91, 0x86, 0x43, 0x8f, 0x4f, 0x35, 0x84, 0x2e, 0x29, 0x02, 0x67, 0xc5, - 0x96, 0xa2, 0xb8, 0xc2, 0xa6, 0x76, 0xda, 0x32, 0xba, 0x12, 0xa7, 0xb3, - 0x7c, 0x1a, 0x55, 0x5f, 0xf8, 0xca, 0x88, 0xaf, 0x0c, 0xe5, 0x2a, 0x52, - 0x4e, 0xab, 0x7d, 0x13, 0xa8, 0x24, 0x05, 0xd4, 0xcc, 0x1c, 0xa9, 0x05, - 0x8a, 0x0e, 0x5c, 0xbb, 0x5e, 0x23, 0x15, 0x11, 0x74, 0x24, 0xd3, 0xf0, - 0x1c, 0xac, 0xd2, 0xca, 0x74, 0x83, 0x86, 0x04, 0xcb, 0xe6, 0x8e, 0x0f, - 0xe6, 0x97, 0x3a, 0x45, 0xd0, 0xe8, 0xf2, 0x68, 0xd3, 0x53, 0x0e, 0x65, - 0xc6, 0x70, 0x89, 0x2e, 0x94, 0x6e, 0xab, 0x2a, 0xd1, 0xce, 0x54, 0x8b, - 0xa1, 0x9a, 0x91, 0xdf, 0x22, 0xee, 0xa9, 0x02, 0xe8, 0x70, 0xca, 0xe4, - 0x93, 0x15, 0x8e, 0x06, 0x8a, 0x9b, 0xaf, 0x37, 0xe1, 0x65, 0x9e, 0x02, - 0xe4, 0x56, 0x14, 0x9e, 0x68, 0x2b, 0x06, 0x0d, 0xc4, 0xe6, 0x7a, 0xa9, - 0x5c, 0x5a, 0x91, 0xc9, 0x42, 0x42, 0x12, 0xaf, 0x6e, 0xa7, 0xad, 0x2d, - 0x42, 0xf9, 0x5e, 0xf1, 0x5c, 0x3b, 0x92, 0xcc, 0x93, 0x3e, 0x58, 0x8a, - 0xd7, 0xf0, 0x6b, 0x2e, 0xb8, 0x30, 0x02, 0x0c, 0x43, 0x01, 0x0c, 0xf6, - 0xcf, 0x1a, 0xdc, 0x70, 0x46, 0xc0, 0x3f, 0xd7, 0xf2, 0x96, 0xdd, 0x16, - 0x9c, 0x2a, 0xf1, 0xc4, 0x0e, 0xcf, 0xfb, 0xf1, 0x41, 0x6b, 0x69, 0x4e, - 0xf0, 0x85, 0x48, 0x00, 0x00, 0x62, 0x92, 0x6a, 0xd7, 0xbf, 0x96, 0x4e, - 0x9a, 0x9b, 0x44, 0xc7, 0xbf, 0xf9, 0x97, 0xee, 0x5d, 0xeb, 0x7f, 0x61, - 0xec, 0xe0, 0xdf, 0xf4, 0x1e, 0xd6, 0xc8, 0x93, 0x8d, 0xfb, 0xb7, 0x7c, - 0xc7, 0xf9, 0x67, 0x74, 0x67, 0xa8, 0x23, 0xaf, 0xcb, 0xe6, 0x42, 0x63, - 0x47, 0x4a, 0x02, 0x73, 0xdb, 0xfb, 0x60, 0x32, 0x27, 0x59, 0x1d, 0x1f, - 0xea, 0x3c, 0x76, 0xb7, 0xb8, 0x9d, 0xbf, 0xf6, 0x1d, 0x80, 0xd8, 0xcc, - 0xe4, 0x9d, 0x46, 0x44, 0xed, 0x75, 0x09, 0xb9, 0x5f, 0x1e, 0x36, 0xb9, - 0x6f, 0x9b, 0x5e, 0xbc, 0xca, 0x79, 0x77, 0x16, 0xfa, 0xe2, 0x10, 0x28, - 0xf7, 0x8f, 0x33, 0x20, 0xee, 0xb8, 0x6a, 0xbe, 0xb5, 0xc6, 0xf0, 0x8e, - 0xb4, 0x66, 0xab, 0x06, 0x5d, 0x91, 0x59, 0x10, 0x2b, 0x7b, 0x32, 0x15, - 0x42, 0x99, 0x4b, 0x08, 0xd8, 0x70, 0x2c, 0x21, 0x68, 0x5f, 0x36, 0xf7, - 0x2c, 0xb4, 0x23, 0xc8, 0x65, 0xdc, 0x8c, 0x07, 0x03, 0xc3, 0xe0, 0x26, - 0x21, 0x6a, 0x2c, 0xb1, 0x1f, 0x7b, 0x89, 0xb9, 0xbf, 0x23, 0xf4, 0x4e, - 0x1d, 0x2b, 0x06, 0xaf, 0xf0, 0x03, 0x36, 0xcb, 0x05, 0x72, 0xbe, 0xb8, - 0x8b, 0x84, 0xca, 0xeb, 0xd1, 0x51, 0x40, 0x8f, 0xf5, 0xb2, 0x9d, 0x97, - 0xe8, 0x8c, 0x83, 0xfc, 0x48, 0x7e, 0xe8, 0x81, 0xc9, 0x94, 0xad, 0x74, - 0x2b, 0x5b, 0x5e, 0x5e, 0x22, 0x71, 0x25, 0x5d, 0xfd, 0x9d, 0x58, 0x57, - 0x2f, 0xfa, 0xf3, 0x5a, 0xff, 0xf9, 0xcd, 0x7e, 0x5c, 0x41, 0xc1, 0x78, - 0x12, 0xca, 0x01, 0xf1, 0x34, 0x08, 0x2a, 0x66, 0xe2, 0x44, 0x79, 0x88, - 0x40, 0x2e, 0x57, 0x02, 0x19, 0x3b, 0x0c, 0xa5, 0x95, 0x45, 0x4e, 0x67, - 0x92, 0x5b, 0x80, 0x04, 0xf4, 0xc9, 0x77, 0xa5, 0x99, 0x94, 0x38, 0x3b, - 0x83, 0x19, 0x9d, 0x39, 0xd4, 0x5e, 0xf0, 0x70, 0xe1, 0xfa, 0x48, 0x02, - 0x56, 0x96, 0xcd, 0xe8, 0x6e, 0x96, 0x7e, 0x17, 0x7f, 0x68, 0x78, 0xce, - 0x91, 0xde, 0x63, 0xff, 0xe2, 0xe5, 0xee, 0x44, 0x67, 0xa2, 0x95, 0x8c, - 0xc8, 0xe9, 0xe0, 0xd4, 0xe7, 0x9c, 0xd0, 0xf4, 0xab, 0xc0, 0xf8, 0xa0, - 0xe2, 0x7f, 0xfa, 0xb9, 0xb7, 0x67, 0xcb, 0x30, 0x65, 0x0b, 0x1b, 0x66, - 0xb0, 0x2e, 0xb9, 0xca, 0xfe, 0xd7, 0x0b, 0x4a, 0x1b, 0xf4, 0xda, 0xe8, - 0xe0, 0x6a, 0xfa, 0x70, 0x4f, 0x88, 0xe2, 0xfe, 0x39, 0x46, 0xc3, 0x97, - 0xac, 0x15, 0xaa, 0x10, 0xb6, 0xda, 0x91, 0x8a, 0xff, 0x83, 0x2f, 0xac, - 0xbe, 0xbd, 0xeb, 0xb7, 0x86, 0xb1, 0xef, 0x11, 0xda, 0xe8, 0xc1, 0xee, - 0xdc, 0x65, 0xd8, 0x07, 0x7c, 0xdd, 0x73, 0x10, 0xbc, 0x82, 0xde, 0x98, - 0x6a, 0x0a, 0x45, 0x21, 0xf7, 0xba, 0x8c, 0xb7, 0x5b, 0xbc, 0x8b, 0x09, - 0xe9, 0xcb, 0x84, 0xca, 0x7a, 0xb7, 0x45, 0x46, 0xc7, 0xfd, 0xac, 0x76, - 0xb6, 0x3b, 0xd0, 0xc7, 0x34, 0x34, 0x5f, 0xab, 0x06, 0x87, 0xcb, 0xb6, - 0x9d, 0x3b, 0x24, 0x9d, 0x84, 0xf1, 0xe4, 0x2d, 0xb3, 0x87, 0x15, 0xb7, - 0x50, 0xb4, 0xeb, 0xd1, 0xee, 0xc7, 0x2d, 0x62, 0x8f, 0x6a, 0xe6, 0x0e, - 0x95, 0x0c, 0xf4, 0xd6, 0xb8, 0xf3, 0x4b, 0x09, 0x19, 0x97, 0x12, 0xa2, - 0x2b, 0x4e, 0x47, 0x49, 0xd3, 0x1b, 0x4b, 0x52, 0x91, 0x67, 0x0f, 0x30, - 0x77, 0x66, 0x53, 0xd0, 0x92, 0xef, 0x17, 0x44, 0xc1, 0x77, 0xae, 0x60, - 0x6c, 0x5c, 0x5e, 0x13, 0xc3, 0xdc, 0xc6, 0xbf, 0x7f, 0x8f, 0xd2, 0x1e, - 0x67, 0xcd, 0xbe, 0x4e, 0xa5, 0x83, 0xdb, 0x5c, 0xf3, 0xd7, 0xbb, 0x22, - 0x7a, 0x58, 0x9e, 0xc1, 0xc3, 0x0d, 0x64, 0x7e, 0xc5, 0x91, 0x4f, 0x29, - 0x76, 0xf4, 0xd9, 0x79, 0xb8, 0xec, 0xde, 0x4c, 0x1d, 0xeb, 0xd7, 0x1b, - 0x57, 0x5e, 0x58, 0xb9, 0xbe, 0x5d, 0x1a, 0x8f, 0x5c, 0x3d, 0x93, 0x9e, - 0x46, 0x2e, 0x73, 0xeb, 0x68, 0x2a, 0xe3, 0xba, 0x5c, 0x5b, 0x85, 0x6b, - 0x2f, 0xda, 0x9c, 0xb5, 0xf7, 0x51, 0x02, 0x82, 0x48, 0x57, 0x26, 0xc7, - 0xed, 0x78, 0x2f, 0x97, 0x34, 0xef, 0x74, 0x1e, 0x3d, 0xc1, 0xb8, 0xc4, - 0x36, 0xa3, 0xb0, 0xc1, 0xc3, 0x52, 0xfc, 0x0d, 0xd4, 0x54, 0x6e, 0x55, - 0x3c, 0x17, 0xbb, 0x62, 0xb9, 0xcb, 0x5d, 0xf8, 0x2b, 0x3d, 0x10, 0xd5, - 0xe6, 0xbb, 0x66, 0x23, 0x19, 0x03, 0x6a, 0x09, 0x60, 0x0b, 0x01, 0xc6, - 0x50, 0x27, 0xac, 0x9b, 0xd3, 0x42, 0xff, 0x88, 0xf4, 0xfc, 0x1d, 0x1a, - 0x61, 0x3c, 0x1a, 0x48, 0xd6, 0xe8, 0xe5, 0x16, 0xaf, 0xb7, 0x3a, 0x90, - 0x82, 0x79, 0x17, 0x7f, 0xd1, 0x54, 0xcf, 0x68, 0xb3, 0xbf, 0x80, 0x1a, - 0x7b, 0x97, 0x2c, 0xbe, 0xbb, 0x92, 0x9d, 0xe0, 0xbf, 0x64, 0x62, 0x04, - 0xf7, 0xbd, 0x49, 0x4b, 0x66, 0x3b, 0xb2, 0x34, 0x8a, 0x9f, 0x3d, 0xfb, - 0x91, 0xd0, 0x56, 0x99, 0x66, 0xfc, 0x57, 0x94, 0x00, 0x76, 0xc8, 0x83, - 0x1e, 0xfe, 0x8e, 0x0e, 0x9f, 0x86, 0x9b, 0x5c, 0x5f, 0x49, 0x83, 0xb4, - 0x82, 0x7b, 0xc2, 0x3f, 0x36, 0x05, 0x15, 0xed, 0x10, 0xb5, 0xc5, 0x0c, - 0xe8, 0x4f, 0x2c, 0x5f, 0x2e, 0x63, 0x98, 0xe8, 0xf2, 0x6b, 0xf3, 0xf7, - 0x0c, 0x34, 0xed, 0xb4, 0x32, 0x76, 0x45, 0x09, 0x9a, 0xb1, 0x65, 0x81, - 0x5e, 0x34, 0x9c, 0xcd, 0xbc, 0xa4, 0x4f, 0x9a, 0x6a, 0x8c, 0x09, 0x63, - 0xe0, 0x7c, 0x0f, 0x13, 0x8e, 0x5f, 0xa2, 0x15, 0xb7, 0x19, 0x85, 0x12, - 0xf2, 0xad, 0x3c, 0xc4, 0x15, 0xef, 0x18, 0x55, 0xd0, 0x7d, 0x33, 0x7e, - 0x62, 0x74, 0xf1, 0x50, 0x2d, 0x12, 0xa7, 0xf0, 0x16, 0xa6, 0x41, 0xc3, - 0x4d, 0xee, 0x25, 0x41, 0xb2, 0x70, 0x4f, 0xe6, 0xf0, 0xef, 0xb7, 0x30, - 0xc7, 0xff, 0x7e, 0x8b, 0x83, 0x22, 0xe6, 0xff, 0x06, 0x00, 0x00, 0xff, - 0xff, 0x82, 0x4d, 0xf9, 0x2b, 0x69, 0x46, 0x00, 0x00, - }, - "conf/license/GPL v2", - ) -} - -func conf_license_mit_license() ([]byte, error) { - return bindata_read([]byte{ - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x09, 0x6e, 0x88, 0x00, 0xff, 0x5c, 0x52, - 0xcf, 0x8e, 0xda, 0x3c, 0x10, 0xbf, 0xfb, 0x29, 0x46, 0x9c, 0x76, 0xa5, - 0x68, 0xbf, 0xaf, 0x55, 0x4f, 0xbd, 0x99, 0xc4, 0x2c, 0x56, 0x43, 0x1c, - 0x39, 0x66, 0x29, 0xc7, 0x90, 0x18, 0xe2, 0x2a, 0xc4, 0x28, 0x76, 0x8a, - 0xf6, 0xed, 0x3b, 0x13, 0xd8, 0xdd, 0x6e, 0x25, 0x24, 0x34, 0xe3, 0xf9, - 0xfd, 0x9b, 0x89, 0xe9, 0x2c, 0x6c, 0xa4, 0x81, 0xdc, 0x35, 0x76, 0x08, - 0x16, 0x1e, 0xb0, 0x78, 0x64, 0x2c, 0xf5, 0x97, 0xd7, 0xd1, 0x9d, 0xba, - 0x08, 0x0f, 0xcd, 0x23, 0x7c, 0xfd, 0xff, 0xcb, 0x37, 0xc6, 0x4a, 0x3b, - 0x9e, 0x5d, 0x08, 0xce, 0x0f, 0xe0, 0x02, 0x74, 0x76, 0xb4, 0x87, 0x57, - 0x38, 0x8d, 0xf5, 0x10, 0x6d, 0x9b, 0xc0, 0x71, 0xb4, 0x16, 0xfc, 0x11, - 0x9a, 0xae, 0x1e, 0x4f, 0x36, 0x81, 0xe8, 0xa1, 0x1e, 0x5e, 0xe1, 0x62, - 0xc7, 0x80, 0x00, 0x7f, 0x88, 0xb5, 0x1b, 0xdc, 0x70, 0x82, 0x1a, 0x1a, - 0xe4, 0x66, 0x38, 0x19, 0x3b, 0xa4, 0x09, 0xfe, 0x18, 0xaf, 0xf5, 0x68, - 0x71, 0xb8, 0x85, 0x3a, 0x04, 0xdf, 0xb8, 0x1a, 0xf9, 0xa0, 0xf5, 0xcd, - 0x74, 0xb6, 0x43, 0xac, 0x23, 0xe9, 0x1d, 0x5d, 0x6f, 0x03, 0x3c, 0x44, - 0x34, 0xbb, 0xa8, 0xee, 0x88, 0xc5, 0xe3, 0x2c, 0xd2, 0xda, 0xba, 0x67, - 0x6e, 0x00, 0x7a, 0x7b, 0x7b, 0x82, 0xab, 0x8b, 0x9d, 0x9f, 0x22, 0x8c, - 0x36, 0xc4, 0xd1, 0x35, 0xc4, 0x91, 0x80, 0x1b, 0x9a, 0x7e, 0x6a, 0xc9, - 0xc3, 0xdb, 0x73, 0xef, 0xce, 0xee, 0xae, 0x40, 0xf0, 0x39, 0x70, 0x60, - 0x48, 0x3a, 0x05, 0x4c, 0x40, 0x3e, 0x13, 0x38, 0xfb, 0xd6, 0x1d, 0xe9, - 0xdf, 0xce, 0xb1, 0x2e, 0xd3, 0xa1, 0x77, 0xa1, 0x4b, 0xa0, 0x75, 0x44, - 0x7d, 0x98, 0x22, 0x36, 0x03, 0x35, 0xe7, 0xfd, 0x25, 0x94, 0xe3, 0x3f, - 0x3f, 0x42, 0xb0, 0x7d, 0xcf, 0x90, 0xc1, 0xa1, 0xef, 0x39, 0xeb, 0x87, - 0xbb, 0x79, 0x86, 0xac, 0x5f, 0x68, 0xa1, 0xf1, 0xbe, 0xa2, 0x40, 0x9d, - 0x6b, 0xe7, 0xcf, 0x9f, 0x93, 0xb8, 0xc0, 0x8e, 0xd3, 0x38, 0xa0, 0xa4, - 0x9d, 0x31, 0xad, 0xc7, 0x95, 0xcd, 0x8a, 0xbf, 0x6c, 0x13, 0xa9, 0x43, - 0xe3, 0x47, 0xdf, 0xf7, 0xfe, 0x4a, 0xd1, 0x1a, 0x3f, 0xb4, 0x8e, 0x12, - 0x85, 0xef, 0x8c, 0xd1, 0x71, 0xeb, 0x83, 0xff, 0x6d, 0xe7, 0x2c, 0xb7, - 0x7b, 0x0e, 0x3e, 0xa2, 0xd5, 0x9b, 0x05, 0x3a, 0xc0, 0xe5, 0xe3, 0xaa, - 0xf7, 0xa7, 0xd0, 0xd5, 0x7d, 0x0f, 0x07, 0x7b, 0x5f, 0x18, 0xea, 0xe2, - 0x7a, 0xeb, 0xbf, 0xe2, 0x8c, 0x24, 0x1f, 0x22, 0x1e, 0xde, 0xd5, 0x3d, - 0x5c, 0xfc, 0x38, 0xeb, 0xfd, 0x1b, 0xf3, 0x09, 0xf5, 0xd7, 0x02, 0x2a, - 0xb5, 0x32, 0x3b, 0xae, 0x05, 0xc8, 0x0a, 0x4a, 0xad, 0x5e, 0x64, 0x26, - 0x32, 0x58, 0xf0, 0x0a, 0xeb, 0x45, 0x02, 0x3b, 0x69, 0xd6, 0x6a, 0x6b, - 0x00, 0x27, 0x34, 0x2f, 0xcc, 0x1e, 0xd4, 0x0a, 0x78, 0xb1, 0x87, 0x1f, - 0xb2, 0xc8, 0x12, 0x10, 0x3f, 0x4b, 0x2d, 0xaa, 0x0a, 0x94, 0x66, 0x72, - 0x53, 0xe6, 0x52, 0x60, 0x4f, 0x16, 0x69, 0xbe, 0xcd, 0x64, 0xf1, 0x0c, - 0x4b, 0xc4, 0x15, 0x0a, 0x3f, 0x5d, 0x89, 0xdf, 0x2c, 0x92, 0x1a, 0x05, - 0x24, 0x78, 0xa7, 0x92, 0xa2, 0x22, 0xb2, 0x8d, 0xd0, 0xe9, 0x1a, 0x4b, - 0xbe, 0x94, 0xb9, 0x34, 0xfb, 0x84, 0xad, 0xa4, 0x29, 0x88, 0x73, 0xa5, - 0x34, 0x70, 0x28, 0xb9, 0x36, 0x32, 0xdd, 0xe6, 0x5c, 0x43, 0xb9, 0xd5, - 0xa5, 0xaa, 0x04, 0xca, 0x67, 0x48, 0x5b, 0xc8, 0x62, 0xa5, 0x51, 0x45, - 0x6c, 0x44, 0x61, 0x9e, 0x50, 0x15, 0x7b, 0x20, 0x5e, 0xb0, 0x80, 0x6a, - 0xcd, 0xf3, 0x9c, 0xa4, 0x18, 0xdf, 0xa2, 0x7b, 0x4d, 0xfe, 0x20, 0x55, - 0xe5, 0x5e, 0xcb, 0xe7, 0xb5, 0x81, 0xb5, 0xca, 0x33, 0x81, 0xcd, 0xa5, - 0x40, 0x67, 0x7c, 0x99, 0x8b, 0x9b, 0x14, 0x86, 0x4a, 0x73, 0x2e, 0x37, - 0x09, 0x64, 0x7c, 0xc3, 0x9f, 0xc5, 0x8c, 0x52, 0xc8, 0xa2, 0x19, 0x8d, - 0xdd, 0xdc, 0xc1, 0x6e, 0x2d, 0xa8, 0x45, 0x7a, 0x1c, 0x7f, 0xa9, 0x91, - 0xaa, 0xa0, 0x18, 0xa9, 0x2a, 0x8c, 0xc6, 0x32, 0xc1, 0x94, 0xda, 0xbc, - 0x43, 0x77, 0xb2, 0x12, 0x09, 0x70, 0x2d, 0x2b, 0x5a, 0xc8, 0x4a, 0xab, - 0x4d, 0xc2, 0x68, 0x9d, 0x88, 0x50, 0x33, 0x09, 0xe2, 0x0a, 0x71, 0x63, - 0xa1, 0x55, 0xc3, 0xa7, 0x8b, 0xe0, 0x08, 0xd5, 0xdb, 0x4a, 0xbc, 0x13, - 0x42, 0x26, 0x78, 0x8e, 0x5c, 0x15, 0x81, 0x29, 0xe2, 0xdb, 0xf0, 0xd3, - 0x9f, 0x00, 0x00, 0x00, 0xff, 0xff, 0x49, 0x86, 0xab, 0x31, 0x29, 0x04, - 0x00, 0x00, - }, - "conf/license/MIT License", - ) -} - -func conf_mysql_sql() ([]byte, error) { - return bindata_read([]byte{ - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x09, 0x6e, 0x88, 0x00, 0xff, 0x72, 0x09, - 0xf2, 0x0f, 0x50, 0x70, 0x71, 0x0c, 0x71, 0x74, 0x72, 0x0c, 0x76, 0x55, - 0xf0, 0x74, 0x53, 0x70, 0x8d, 0xf0, 0x0c, 0x0e, 0x09, 0x56, 0x48, 0xcf, - 0x4f, 0x2f, 0xb6, 0xe6, 0x72, 0x0e, 0x72, 0x75, 0x0c, 0x71, 0x45, 0x91, - 0xf7, 0xf3, 0x0f, 0x41, 0x56, 0xa3, 0xe0, 0xec, 0xe1, 0x18, 0xe4, 0xe8, - 0x1c, 0xe2, 0x1a, 0xa4, 0x10, 0xec, 0x1a, 0xa2, 0x50, 0x5a, 0x92, 0x66, - 0xa1, 0xe0, 0xec, 0xef, 0xe3, 0x03, 0xd2, 0x06, 0xe2, 0xc4, 0xa7, 0xa7, - 0xe6, 0xa5, 0x16, 0x25, 0xe6, 0xc4, 0x27, 0x67, 0x5a, 0x73, 0x01, 0x02, - 0x00, 0x00, 0xff, 0xff, 0xcd, 0xf5, 0x53, 0x80, 0x6d, 0x00, 0x00, 0x00, - }, - "conf/mysql.sql", - ) -} - -func conf_supervisor_ini() ([]byte, error) { - return bindata_read([]byte{ - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x09, 0x6e, 0x88, 0x00, 0xff, 0x6c, 0xcd, - 0xb1, 0x0a, 0xc2, 0x30, 0x10, 0xc6, 0xf1, 0xfd, 0x9e, 0x22, 0x74, 0xb7, - 0xd9, 0x85, 0x8c, 0x82, 0x8b, 0xf8, 0x00, 0x22, 0x12, 0xda, 0x33, 0x0d, - 0x34, 0x39, 0xf9, 0x72, 0x29, 0xf8, 0xf6, 0xa6, 0x19, 0x5c, 0x74, 0xfd, - 0xfe, 0xbf, 0xe3, 0x6e, 0x2f, 0x48, 0x80, 0x4f, 0xc7, 0x20, 0xa1, 0xdc, - 0xa9, 0x16, 0x86, 0x0b, 0x51, 0x69, 0x92, 0x94, 0x7c, 0x9e, 0x8d, 0x33, - 0x76, 0x91, 0xc4, 0xb6, 0x6d, 0x76, 0x27, 0xb6, 0xa8, 0x87, 0x8e, 0x65, - 0xa1, 0x39, 0x82, 0x27, 0x15, 0xbc, 0x7f, 0x0c, 0xf9, 0xaa, 0xd2, 0x5d, - 0x4b, 0x8a, 0xca, 0x54, 0x74, 0x96, 0xaa, 0x8f, 0x55, 0xc2, 0x33, 0xae, - 0xbc, 0x1f, 0x6c, 0x1e, 0xdd, 0x8e, 0x6d, 0xdb, 0x33, 0x03, 0xff, 0xf2, - 0xa1, 0xed, 0x82, 0x8e, 0x38, 0x6f, 0x11, 0x92, 0x13, 0x67, 0x75, 0xe7, - 0xeb, 0xe5, 0xe4, 0x86, 0xef, 0xd7, 0xc1, 0x18, 0xfa, 0x04, 0x00, 0x00, - 0xff, 0xff, 0x61, 0x60, 0x15, 0x6f, 0xc9, 0x00, 0x00, 0x00, - }, - "conf/supervisor.ini", - ) -} - -// Asset loads and returns the asset for the given name. -// It returns an error if the asset could not be found or -// could not be loaded. -func Asset(name string) ([]byte, error) { - cannonicalName := strings.Replace(name, "\\", "/", -1) - if f, ok := _bindata[cannonicalName]; ok { - return f() - } - return nil, fmt.Errorf("Asset %s not found", name) -} - -// AssetNames returns the names of the assets. -func AssetNames() []string { - names := make([]string, 0, len(_bindata)) - for name := range _bindata { - names = append(names, name) - } - return names -} - -// _bindata is a table, holding each asset generator, mapped to its name. -var _bindata = map[string]func() ([]byte, error){ - "conf/app.ini": conf_app_ini, - "conf/content/git-bare.zip": conf_content_git_bare_zip, - "conf/etc/supervisord.conf": conf_etc_supervisord_conf, - "conf/gitignore/Android": conf_gitignore_android, - "conf/gitignore/C": conf_gitignore_c, - "conf/gitignore/C Sharp": conf_gitignore_c_sharp, - "conf/gitignore/C++": conf_gitignore_c_, - "conf/gitignore/Google Go": conf_gitignore_google_go, - "conf/gitignore/Java": conf_gitignore_java, - "conf/gitignore/Objective-C": conf_gitignore_objective_c, - "conf/gitignore/Python": conf_gitignore_python, - "conf/gitignore/Ruby": conf_gitignore_ruby, - "conf/license/Affero GPL": conf_license_affero_gpl, - "conf/license/Apache v2 License": conf_license_apache_v2_license, - "conf/license/Artistic License 2.0": conf_license_artistic_license_2_0, - "conf/license/BSD (3-Clause) License": conf_license_bsd_3_clause_license, - "conf/license/GPL v2": conf_license_gpl_v2, - "conf/license/MIT License": conf_license_mit_license, - "conf/mysql.sql": conf_mysql_sql, - "conf/supervisor.ini": conf_supervisor_ini, -} diff --git a/modules/captcha/captcha.go b/modules/captcha/captcha.go new file mode 100644 index 0000000000..e43e09dc59 --- /dev/null +++ b/modules/captcha/captcha.go @@ -0,0 +1,201 @@ +// Copyright 2014 The Gogs Authors. All rights reserved. +// Use of this source code is governed by a MIT-style +// license that can be found in the LICENSE file. + +// Package captcha a middleware that provides captcha service for Macaron. +package captcha + +import ( + "fmt" + "html/template" + "net/http" + "path" + "strings" + + "github.com/Unknwon/macaron" + + "github.com/gogits/cache" + + "github.com/gogits/gogs/modules/base" + "github.com/gogits/gogs/modules/log" +) + +var ( + defaultChars = []byte{0, 1, 2, 3, 4, 5, 6, 7, 8, 9} +) + +const ( + // default captcha attributes + challengeNums = 6 + expiration = 600 + fieldIdName = "captcha_id" + fieldCaptchaName = "captcha" + cachePrefix = "captcha_" + defaultURLPrefix = "/captcha/" +) + +// Captcha struct +type Captcha struct { + store cache.Cache + + // url prefix for captcha image + URLPrefix string + + // specify captcha id input field name + FieldIdName string + // specify captcha result input field name + FieldCaptchaName string + + // captcha image width and height + StdWidth int + StdHeight int + + // captcha chars nums + ChallengeNums int + + // captcha expiration seconds + Expiration int64 + + // cache key prefix + CachePrefix string +} + +// generate key string +func (c *Captcha) key(id string) string { + return c.CachePrefix + id +} + +// generate rand chars with default chars +func (c *Captcha) genRandChars() []byte { + return base.RandomCreateBytes(c.ChallengeNums, defaultChars...) +} + +// beego filter handler for serve captcha image +func (c *Captcha) Handler(ctx *macaron.Context) { + var chars []byte + + id := path.Base(ctx.Req.RequestURI) + if i := strings.Index(id, "."); i != -1 { + id = id[:i] + } + + key := c.key(id) + + if v, ok := c.store.Get(key).([]byte); ok { + chars = v + } else { + ctx.Status(404) + ctx.Write([]byte("captcha not found")) + return + } + + // reload captcha + if len(ctx.Query("reload")) > 0 { + chars = c.genRandChars() + if err := c.store.Put(key, chars, c.Expiration); err != nil { + ctx.Status(500) + ctx.Write([]byte("captcha reload error")) + log.Error(4, "Reload Create Captcha Error: %v", err) + return + } + } + + img := NewImage(chars, c.StdWidth, c.StdHeight) + if _, err := img.WriteTo(ctx.RW()); err != nil { + log.Error(4, "Write Captcha Image Error: %v", err) + } +} + +// tempalte func for output html +func (c *Captcha) CreateCaptchaHtml() template.HTML { + value, err := c.CreateCaptcha() + if err != nil { + log.Error(4, "Create Captcha Error: %v", err) + return "" + } + + // create html + return template.HTML(fmt.Sprintf(`<input type="hidden" name="%s" value="%s">`+ + `<a class="captcha" href="javascript:">`+ + `<img onclick="this.src=('%s%s.png?reload='+(new Date()).getTime())" class="captcha-img" src="%s%s.png">`+ + `</a>`, c.FieldIdName, value, c.URLPrefix, value, c.URLPrefix, value)) +} + +// create a new captcha id +func (c *Captcha) CreateCaptcha() (string, error) { + // generate captcha id + id := string(base.RandomCreateBytes(15)) + + // get the captcha chars + chars := c.genRandChars() + + // save to store + if err := c.store.Put(c.key(id), chars, c.Expiration); err != nil { + return "", err + } + + return id, nil +} + +// verify from a request +func (c *Captcha) VerifyReq(req *http.Request) bool { + req.ParseForm() + return c.Verify(req.Form.Get(c.FieldIdName), req.Form.Get(c.FieldCaptchaName)) +} + +// direct verify id and challenge string +func (c *Captcha) Verify(id string, challenge string) (success bool) { + if len(challenge) == 0 || len(id) == 0 { + return + } + + var chars []byte + + key := c.key(id) + + if v, ok := c.store.Get(key).([]byte); ok && len(v) == len(challenge) { + chars = v + } else { + return + } + + defer func() { + // finally remove it + c.store.Delete(key) + }() + + // verify challenge + for i, c := range chars { + if c != challenge[i]-48 { + return + } + } + + return true +} + +// create a new captcha.Captcha +func NewCaptcha(urlPrefix string, store cache.Cache) *Captcha { + cpt := &Captcha{} + cpt.store = store + cpt.FieldIdName = fieldIdName + cpt.FieldCaptchaName = fieldCaptchaName + cpt.ChallengeNums = challengeNums + cpt.Expiration = expiration + cpt.CachePrefix = cachePrefix + cpt.StdWidth = stdWidth + cpt.StdHeight = stdHeight + + if len(urlPrefix) == 0 { + urlPrefix = defaultURLPrefix + } + + if urlPrefix[len(urlPrefix)-1] != '/' { + urlPrefix += "/" + } + + cpt.URLPrefix = urlPrefix + + base.TemplateFuncs["CreateCaptcha"] = cpt.CreateCaptchaHtml + return cpt +} diff --git a/modules/captcha/image.go b/modules/captcha/image.go new file mode 100644 index 0000000000..c9972ba2c3 --- /dev/null +++ b/modules/captcha/image.go @@ -0,0 +1,487 @@ +// Copyright 2014 The Gogs Authors. All rights reserved. +// Use of this source code is governed by a MIT-style +// license that can be found in the LICENSE file. + +package captcha + +import ( + "bytes" + "image" + "image/color" + "image/png" + "io" + "math" +) + +const ( + fontWidth = 11 + fontHeight = 18 + blackChar = 1 + + // Standard width and height of a captcha image. + stdWidth = 240 + stdHeight = 80 + // Maximum absolute skew factor of a single digit. + maxSkew = 0.7 + // Number of background circles. + circleCount = 20 +) + +var font = [][]byte{ + { // 0 + 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 1, 1, 1, 1, 1, 1, 1, 0, 0, + 0, 1, 1, 1, 0, 0, 0, 1, 1, 1, 0, + 0, 1, 1, 0, 0, 0, 0, 0, 1, 1, 0, + 1, 1, 1, 0, 0, 0, 0, 0, 1, 1, 0, + 1, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, + 1, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, + 1, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, + 1, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, + 1, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, + 1, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, + 1, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, + 1, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, + 1, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, + 0, 1, 1, 0, 0, 0, 0, 0, 1, 1, 0, + 0, 1, 1, 1, 0, 0, 0, 1, 1, 1, 0, + 0, 0, 1, 1, 1, 1, 1, 1, 1, 0, 0, + 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, + }, + { // 1 + 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, + 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, + 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, + 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, + 0, 0, 1, 1, 0, 1, 1, 0, 0, 0, 0, + 0, 0, 1, 0, 0, 1, 1, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, + 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + }, + { // 2 + 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, + 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, + 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 0, + 0, 1, 0, 0, 0, 0, 0, 0, 1, 1, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, + 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, + 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, + 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, + 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, + 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, + 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, + 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + }, + { // 3 + 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, + 1, 1, 0, 0, 0, 0, 0, 1, 1, 1, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, + 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, + 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, + 0, 0, 1, 1, 1, 1, 1, 1, 1, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, + 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, + 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, + 0, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, + }, + { // 4 + 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, + 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, + 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, + 0, 0, 0, 0, 0, 1, 0, 1, 1, 0, 0, + 0, 0, 0, 0, 1, 1, 0, 1, 1, 0, 0, + 0, 0, 0, 1, 1, 0, 0, 1, 1, 0, 0, + 0, 0, 0, 1, 1, 0, 0, 1, 1, 0, 0, + 0, 0, 1, 1, 0, 0, 0, 1, 1, 0, 0, + 0, 1, 1, 0, 0, 0, 0, 1, 1, 0, 0, + 0, 1, 1, 0, 0, 0, 0, 1, 1, 0, 0, + 1, 1, 0, 0, 0, 0, 0, 1, 1, 0, 0, + 1, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, + }, + { // 5 + 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, + 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, + 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, + 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, + 1, 1, 0, 0, 0, 0, 0, 1, 1, 1, 0, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, + 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + }, + { // 6 + 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, + 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 0, + 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, + 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 1, 1, 0, 0, 1, 1, 1, 1, 0, 0, 0, + 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 0, + 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 0, + 1, 1, 1, 0, 0, 0, 0, 0, 1, 1, 1, + 1, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, + 1, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, + 1, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, + 1, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, + 0, 1, 1, 0, 0, 0, 0, 0, 1, 1, 1, + 0, 1, 1, 1, 0, 0, 0, 1, 1, 1, 0, + 0, 0, 1, 1, 1, 1, 1, 1, 1, 0, 0, + 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, + }, + { // 7 + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 0, 0, 0, 0, 0, 0, 1, 1, + 1, 1, 0, 0, 0, 0, 0, 0, 1, 1, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, + 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, + 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, + 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, + 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, + 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, + 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, + 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, + 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, + }, + { // 8 + 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, + 0, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, + 0, 1, 1, 0, 0, 0, 0, 0, 0, 1, 1, + 0, 1, 1, 0, 0, 0, 0, 0, 0, 1, 1, + 0, 1, 1, 0, 0, 0, 0, 0, 0, 1, 1, + 0, 0, 1, 1, 0, 0, 0, 0, 1, 1, 0, + 0, 0, 1, 1, 1, 1, 1, 1, 1, 0, 0, + 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 1, 1, 1, 0, 1, 1, 1, 0, 0, + 0, 1, 1, 1, 0, 0, 0, 1, 1, 1, 0, + 1, 1, 1, 0, 0, 0, 0, 0, 1, 1, 1, + 1, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, + 1, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, + 1, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, + 1, 1, 1, 0, 0, 0, 0, 0, 1, 1, 0, + 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, + 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, + }, + { // 9 + 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, + 0, 1, 1, 0, 0, 0, 0, 1, 1, 1, 0, + 1, 1, 0, 0, 0, 0, 0, 0, 1, 1, 0, + 1, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, + 1, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, + 1, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, + 1, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, + 0, 1, 1, 0, 0, 0, 0, 1, 1, 1, 1, + 0, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, + 0, 0, 0, 1, 1, 1, 1, 0, 0, 1, 1, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, + 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, + 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, + 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, + 0, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, + }, +} + +type Image struct { + *image.Paletted + numWidth int + numHeight int + dotSize int +} + +var prng = &siprng{} + +// randIntn returns a pseudorandom non-negative int in range [0, n). +func randIntn(n int) int { + return prng.Intn(n) +} + +// randInt returns a pseudorandom int in range [from, to]. +func randInt(from, to int) int { + return prng.Intn(to+1-from) + from +} + +// randFloat returns a pseudorandom float64 in range [from, to]. +func randFloat(from, to float64) float64 { + return (to-from)*prng.Float64() + from +} + +func randomPalette() color.Palette { + p := make([]color.Color, circleCount+1) + // Transparent color. + p[0] = color.RGBA{0xFF, 0xFF, 0xFF, 0x00} + // Primary color. + prim := color.RGBA{ + uint8(randIntn(129)), + uint8(randIntn(129)), + uint8(randIntn(129)), + 0xFF, + } + p[1] = prim + // Circle colors. + for i := 2; i <= circleCount; i++ { + p[i] = randomBrightness(prim, 255) + } + return p +} + +// NewImage returns a new captcha image of the given width and height with the +// given digits, where each digit must be in range 0-9. +func NewImage(digits []byte, width, height int) *Image { + m := new(Image) + m.Paletted = image.NewPaletted(image.Rect(0, 0, width, height), randomPalette()) + m.calculateSizes(width, height, len(digits)) + // Randomly position captcha inside the image. + maxx := width - (m.numWidth+m.dotSize)*len(digits) - m.dotSize + maxy := height - m.numHeight - m.dotSize*2 + var border int + if width > height { + border = height / 5 + } else { + border = width / 5 + } + x := randInt(border, maxx-border) + y := randInt(border, maxy-border) + // Draw digits. + for _, n := range digits { + m.drawDigit(font[n], x, y) + x += m.numWidth + m.dotSize + } + // Draw strike-through line. + m.strikeThrough() + // Apply wave distortion. + m.distort(randFloat(5, 10), randFloat(100, 200)) + // Fill image with random circles. + m.fillWithCircles(circleCount, m.dotSize) + return m +} + +// encodedPNG encodes an image to PNG and returns +// the result as a byte slice. +func (m *Image) encodedPNG() []byte { + var buf bytes.Buffer + if err := png.Encode(&buf, m.Paletted); err != nil { + panic(err.Error()) + } + return buf.Bytes() +} + +// WriteTo writes captcha image in PNG format into the given writer. +func (m *Image) WriteTo(w io.Writer) (int64, error) { + n, err := w.Write(m.encodedPNG()) + return int64(n), err +} + +func (m *Image) calculateSizes(width, height, ncount int) { + // Goal: fit all digits inside the image. + var border int + if width > height { + border = height / 4 + } else { + border = width / 4 + } + // Convert everything to floats for calculations. + w := float64(width - border*2) + h := float64(height - border*2) + // fw takes into account 1-dot spacing between digits. + fw := float64(fontWidth + 1) + fh := float64(fontHeight) + nc := float64(ncount) + // Calculate the width of a single digit taking into account only the + // width of the image. + nw := w / nc + // Calculate the height of a digit from this width. + nh := nw * fh / fw + // Digit too high? + if nh > h { + // Fit digits based on height. + nh = h + nw = fw / fh * nh + } + // Calculate dot size. + m.dotSize = int(nh / fh) + // Save everything, making the actual width smaller by 1 dot to account + // for spacing between digits. + m.numWidth = int(nw) - m.dotSize + m.numHeight = int(nh) +} + +func (m *Image) drawHorizLine(fromX, toX, y int, colorIdx uint8) { + for x := fromX; x <= toX; x++ { + m.SetColorIndex(x, y, colorIdx) + } +} + +func (m *Image) drawCircle(x, y, radius int, colorIdx uint8) { + f := 1 - radius + dfx := 1 + dfy := -2 * radius + xo := 0 + yo := radius + + m.SetColorIndex(x, y+radius, colorIdx) + m.SetColorIndex(x, y-radius, colorIdx) + m.drawHorizLine(x-radius, x+radius, y, colorIdx) + + for xo < yo { + if f >= 0 { + yo-- + dfy += 2 + f += dfy + } + xo++ + dfx += 2 + f += dfx + m.drawHorizLine(x-xo, x+xo, y+yo, colorIdx) + m.drawHorizLine(x-xo, x+xo, y-yo, colorIdx) + m.drawHorizLine(x-yo, x+yo, y+xo, colorIdx) + m.drawHorizLine(x-yo, x+yo, y-xo, colorIdx) + } +} + +func (m *Image) fillWithCircles(n, maxradius int) { + maxx := m.Bounds().Max.X + maxy := m.Bounds().Max.Y + for i := 0; i < n; i++ { + colorIdx := uint8(randInt(1, circleCount-1)) + r := randInt(1, maxradius) + m.drawCircle(randInt(r, maxx-r), randInt(r, maxy-r), r, colorIdx) + } +} + +func (m *Image) strikeThrough() { + maxx := m.Bounds().Max.X + maxy := m.Bounds().Max.Y + y := randInt(maxy/3, maxy-maxy/3) + amplitude := randFloat(5, 20) + period := randFloat(80, 180) + dx := 2.0 * math.Pi / period + for x := 0; x < maxx; x++ { + xo := amplitude * math.Cos(float64(y)*dx) + yo := amplitude * math.Sin(float64(x)*dx) + for yn := 0; yn < m.dotSize; yn++ { + r := randInt(0, m.dotSize) + m.drawCircle(x+int(xo), y+int(yo)+(yn*m.dotSize), r/2, 1) + } + } +} + +func (m *Image) drawDigit(digit []byte, x, y int) { + skf := randFloat(-maxSkew, maxSkew) + xs := float64(x) + r := m.dotSize / 2 + y += randInt(-r, r) + for yo := 0; yo < fontHeight; yo++ { + for xo := 0; xo < fontWidth; xo++ { + if digit[yo*fontWidth+xo] != blackChar { + continue + } + m.drawCircle(x+xo*m.dotSize, y+yo*m.dotSize, r, 1) + } + xs += skf + x = int(xs) + } +} + +func (m *Image) distort(amplude float64, period float64) { + w := m.Bounds().Max.X + h := m.Bounds().Max.Y + + oldm := m.Paletted + newm := image.NewPaletted(image.Rect(0, 0, w, h), oldm.Palette) + + dx := 2.0 * math.Pi / period + for x := 0; x < w; x++ { + for y := 0; y < h; y++ { + xo := amplude * math.Sin(float64(y)*dx) + yo := amplude * math.Cos(float64(x)*dx) + newm.SetColorIndex(x, y, oldm.ColorIndexAt(x+int(xo), y+int(yo))) + } + } + m.Paletted = newm +} + +func randomBrightness(c color.RGBA, max uint8) color.RGBA { + minc := min3(c.R, c.G, c.B) + maxc := max3(c.R, c.G, c.B) + if maxc > max { + return c + } + n := randIntn(int(max-maxc)) - int(minc) + return color.RGBA{ + uint8(int(c.R) + n), + uint8(int(c.G) + n), + uint8(int(c.B) + n), + uint8(c.A), + } +} + +func min3(x, y, z uint8) (m uint8) { + m = x + if y < m { + m = y + } + if z < m { + m = z + } + return +} + +func max3(x, y, z uint8) (m uint8) { + m = x + if y > m { + m = y + } + if z > m { + m = z + } + return +} diff --git a/modules/captcha/image_test.go b/modules/captcha/image_test.go new file mode 100644 index 0000000000..30b3ea4ae3 --- /dev/null +++ b/modules/captcha/image_test.go @@ -0,0 +1,42 @@ +// Copyright 2014 The Gogs Authors. All rights reserved. +// Use of this source code is governed by a MIT-style +// license that can be found in the LICENSE file. + +package captcha + +import ( + "testing" + + "github.com/astaxie/beego/utils" +) + +type byteCounter struct { + n int64 +} + +func (bc *byteCounter) Write(b []byte) (int, error) { + bc.n += int64(len(b)) + return len(b), nil +} + +func BenchmarkNewImage(b *testing.B) { + b.StopTimer() + d := utils.RandomCreateBytes(challengeNums, defaultChars...) + b.StartTimer() + for i := 0; i < b.N; i++ { + NewImage(d, stdWidth, stdHeight) + } +} + +func BenchmarkImageWriteTo(b *testing.B) { + b.StopTimer() + d := utils.RandomCreateBytes(challengeNums, defaultChars...) + b.StartTimer() + counter := &byteCounter{} + for i := 0; i < b.N; i++ { + img := NewImage(d, stdWidth, stdHeight) + img.WriteTo(counter) + b.SetBytes(counter.n) + counter.n = 0 + } +} diff --git a/modules/captcha/siprng.go b/modules/captcha/siprng.go new file mode 100644 index 0000000000..c059b9f7bf --- /dev/null +++ b/modules/captcha/siprng.go @@ -0,0 +1,267 @@ +// Copyright 2014 The Gogs Authors. All rights reserved. +// Use of this source code is governed by a MIT-style +// license that can be found in the LICENSE file. + +package captcha + +import ( + "crypto/rand" + "encoding/binary" + "io" + "sync" +) + +// siprng is PRNG based on SipHash-2-4. +type siprng struct { + mu sync.Mutex + k0, k1, ctr uint64 +} + +// siphash implements SipHash-2-4, accepting a uint64 as a message. +func siphash(k0, k1, m uint64) uint64 { + // Initialization. + v0 := k0 ^ 0x736f6d6570736575 + v1 := k1 ^ 0x646f72616e646f6d + v2 := k0 ^ 0x6c7967656e657261 + v3 := k1 ^ 0x7465646279746573 + t := uint64(8) << 56 + + // Compression. + v3 ^= m + + // Round 1. + v0 += v1 + v1 = v1<<13 | v1>>(64-13) + v1 ^= v0 + v0 = v0<<32 | v0>>(64-32) + + v2 += v3 + v3 = v3<<16 | v3>>(64-16) + v3 ^= v2 + + v0 += v3 + v3 = v3<<21 | v3>>(64-21) + v3 ^= v0 + + v2 += v1 + v1 = v1<<17 | v1>>(64-17) + v1 ^= v2 + v2 = v2<<32 | v2>>(64-32) + + // Round 2. + v0 += v1 + v1 = v1<<13 | v1>>(64-13) + v1 ^= v0 + v0 = v0<<32 | v0>>(64-32) + + v2 += v3 + v3 = v3<<16 | v3>>(64-16) + v3 ^= v2 + + v0 += v3 + v3 = v3<<21 | v3>>(64-21) + v3 ^= v0 + + v2 += v1 + v1 = v1<<17 | v1>>(64-17) + v1 ^= v2 + v2 = v2<<32 | v2>>(64-32) + + v0 ^= m + + // Compress last block. + v3 ^= t + + // Round 1. + v0 += v1 + v1 = v1<<13 | v1>>(64-13) + v1 ^= v0 + v0 = v0<<32 | v0>>(64-32) + + v2 += v3 + v3 = v3<<16 | v3>>(64-16) + v3 ^= v2 + + v0 += v3 + v3 = v3<<21 | v3>>(64-21) + v3 ^= v0 + + v2 += v1 + v1 = v1<<17 | v1>>(64-17) + v1 ^= v2 + v2 = v2<<32 | v2>>(64-32) + + // Round 2. + v0 += v1 + v1 = v1<<13 | v1>>(64-13) + v1 ^= v0 + v0 = v0<<32 | v0>>(64-32) + + v2 += v3 + v3 = v3<<16 | v3>>(64-16) + v3 ^= v2 + + v0 += v3 + v3 = v3<<21 | v3>>(64-21) + v3 ^= v0 + + v2 += v1 + v1 = v1<<17 | v1>>(64-17) + v1 ^= v2 + v2 = v2<<32 | v2>>(64-32) + + v0 ^= t + + // Finalization. + v2 ^= 0xff + + // Round 1. + v0 += v1 + v1 = v1<<13 | v1>>(64-13) + v1 ^= v0 + v0 = v0<<32 | v0>>(64-32) + + v2 += v3 + v3 = v3<<16 | v3>>(64-16) + v3 ^= v2 + + v0 += v3 + v3 = v3<<21 | v3>>(64-21) + v3 ^= v0 + + v2 += v1 + v1 = v1<<17 | v1>>(64-17) + v1 ^= v2 + v2 = v2<<32 | v2>>(64-32) + + // Round 2. + v0 += v1 + v1 = v1<<13 | v1>>(64-13) + v1 ^= v0 + v0 = v0<<32 | v0>>(64-32) + + v2 += v3 + v3 = v3<<16 | v3>>(64-16) + v3 ^= v2 + + v0 += v3 + v3 = v3<<21 | v3>>(64-21) + v3 ^= v0 + + v2 += v1 + v1 = v1<<17 | v1>>(64-17) + v1 ^= v2 + v2 = v2<<32 | v2>>(64-32) + + // Round 3. + v0 += v1 + v1 = v1<<13 | v1>>(64-13) + v1 ^= v0 + v0 = v0<<32 | v0>>(64-32) + + v2 += v3 + v3 = v3<<16 | v3>>(64-16) + v3 ^= v2 + + v0 += v3 + v3 = v3<<21 | v3>>(64-21) + v3 ^= v0 + + v2 += v1 + v1 = v1<<17 | v1>>(64-17) + v1 ^= v2 + v2 = v2<<32 | v2>>(64-32) + + // Round 4. + v0 += v1 + v1 = v1<<13 | v1>>(64-13) + v1 ^= v0 + v0 = v0<<32 | v0>>(64-32) + + v2 += v3 + v3 = v3<<16 | v3>>(64-16) + v3 ^= v2 + + v0 += v3 + v3 = v3<<21 | v3>>(64-21) + v3 ^= v0 + + v2 += v1 + v1 = v1<<17 | v1>>(64-17) + v1 ^= v2 + v2 = v2<<32 | v2>>(64-32) + + return v0 ^ v1 ^ v2 ^ v3 +} + +// rekey sets a new PRNG key, which is read from crypto/rand. +func (p *siprng) rekey() { + var k [16]byte + if _, err := io.ReadFull(rand.Reader, k[:]); err != nil { + panic(err.Error()) + } + p.k0 = binary.LittleEndian.Uint64(k[0:8]) + p.k1 = binary.LittleEndian.Uint64(k[8:16]) + p.ctr = 1 +} + +// Uint64 returns a new pseudorandom uint64. +// It rekeys PRNG on the first call and every 64 MB of generated data. +func (p *siprng) Uint64() uint64 { + p.mu.Lock() + if p.ctr == 0 || p.ctr > 8*1024*1024 { + p.rekey() + } + v := siphash(p.k0, p.k1, p.ctr) + p.ctr++ + p.mu.Unlock() + return v +} + +func (p *siprng) Int63() int64 { + return int64(p.Uint64() & 0x7fffffffffffffff) +} + +func (p *siprng) Uint32() uint32 { + return uint32(p.Uint64()) +} + +func (p *siprng) Int31() int32 { + return int32(p.Uint32() & 0x7fffffff) +} + +func (p *siprng) Intn(n int) int { + if n <= 0 { + panic("invalid argument to Intn") + } + if n <= 1<<31-1 { + return int(p.Int31n(int32(n))) + } + return int(p.Int63n(int64(n))) +} + +func (p *siprng) Int63n(n int64) int64 { + if n <= 0 { + panic("invalid argument to Int63n") + } + max := int64((1 << 63) - 1 - (1<<63)%uint64(n)) + v := p.Int63() + for v > max { + v = p.Int63() + } + return v % n +} + +func (p *siprng) Int31n(n int32) int32 { + if n <= 0 { + panic("invalid argument to Int31n") + } + max := int32((1 << 31) - 1 - (1<<31)%uint32(n)) + v := p.Int31() + for v > max { + v = p.Int31() + } + return v % n +} + +func (p *siprng) Float64() float64 { return float64(p.Int63()) / (1 << 63) } diff --git a/modules/captcha/siprng_test.go b/modules/captcha/siprng_test.go new file mode 100644 index 0000000000..3b10fe58bf --- /dev/null +++ b/modules/captcha/siprng_test.go @@ -0,0 +1,23 @@ +// Copyright 2014 The Gogs Authors. All rights reserved. +// Use of this source code is governed by a MIT-style +// license that can be found in the LICENSE file. + +package captcha + +import "testing" + +func TestSiphash(t *testing.T) { + good := uint64(0xe849e8bb6ffe2567) + cur := siphash(0, 0, 0) + if cur != good { + t.Fatalf("siphash: expected %x, got %x", good, cur) + } +} + +func BenchmarkSiprng(b *testing.B) { + b.SetBytes(8) + p := &siprng{} + for i := 0; i < b.N; i++ { + p.Uint64() + } +} diff --git a/modules/git/blob.go b/modules/git/blob.go new file mode 100644 index 0000000000..3ce462a3c2 --- /dev/null +++ b/modules/git/blob.go @@ -0,0 +1,26 @@ +// Copyright 2014 The Gogs Authors. All rights reserved. +// Use of this source code is governed by a MIT-style +// license that can be found in the LICENSE file. + +package git + +import ( + "bytes" + "errors" + "io" + + "github.com/Unknwon/com" +) + +type Blob struct { + repo *Repository + *TreeEntry +} + +func (b *Blob) Data() (io.Reader, error) { + stdout, stderr, err := com.ExecCmdDirBytes(b.repo.Path, "git", "show", b.Id.String()) + if err != nil { + return nil, errors.New(string(stderr)) + } + return bytes.NewBuffer(stdout), nil +} diff --git a/modules/git/commit.go b/modules/git/commit.go new file mode 100644 index 0000000000..f61f2927b9 --- /dev/null +++ b/modules/git/commit.go @@ -0,0 +1,78 @@ +// Copyright 2014 The Gogs Authors. All rights reserved. +// Use of this source code is governed by a MIT-style +// license that can be found in the LICENSE file. + +package git + +import ( + "container/list" + "strings" +) + +// Commit represents a git commit. +type Commit struct { + Tree + Id sha1 // The id of this commit object + Author *Signature + Committer *Signature + CommitMessage string + + parents []sha1 // sha1 strings +} + +// Return the commit message. Same as retrieving CommitMessage directly. +func (c *Commit) Message() string { + return c.CommitMessage +} + +func (c *Commit) Summary() string { + return strings.Split(c.CommitMessage, "\n")[0] +} + +// Return oid of the parent number n (0-based index). Return nil if no such parent exists. +func (c *Commit) ParentId(n int) (id sha1, err error) { + if n >= len(c.parents) { + err = IdNotExist + return + } + return c.parents[n], nil +} + +// Return parent number n (0-based index) +func (c *Commit) Parent(n int) (*Commit, error) { + id, err := c.ParentId(n) + if err != nil { + return nil, err + } + parent, err := c.repo.getCommit(id) + if err != nil { + return nil, err + } + return parent, nil +} + +// Return the number of parents of the commit. 0 if this is the +// root commit, otherwise 1,2,... +func (c *Commit) ParentCount() int { + return len(c.parents) +} + +func (c *Commit) CommitsBefore() (*list.List, error) { + return c.repo.getCommitsBefore(c.Id) +} + +func (c *Commit) CommitsBeforeUntil(commitId string) (*list.List, error) { + ec, err := c.repo.GetCommit(commitId) + if err != nil { + return nil, err + } + return c.repo.CommitsBetween(c, ec) +} + +func (c *Commit) CommitsCount() (int, error) { + return c.repo.commitsCount(c.Id) +} + +func (c *Commit) GetCommitOfRelPath(relPath string) (*Commit, error) { + return c.repo.getCommitOfRelPath(c.Id, relPath) +} diff --git a/modules/git/commit_archive.go b/modules/git/commit_archive.go new file mode 100644 index 0000000000..23b4b058dd --- /dev/null +++ b/modules/git/commit_archive.go @@ -0,0 +1,36 @@ +// Copyright 2014 The Gogs Authors. All rights reserved. +// Use of this source code is governed by a MIT-style +// license that can be found in the LICENSE file. + +package git + +import ( + "fmt" + + "github.com/Unknwon/com" +) + +type ArchiveType int + +const ( + ZIP ArchiveType = iota + 1 + TARGZ +) + +func (c *Commit) CreateArchive(path string, archiveType ArchiveType) error { + var format string + switch archiveType { + case ZIP: + format = "zip" + case TARGZ: + format = "tar.gz" + default: + return fmt.Errorf("unknown format: %v", archiveType) + } + + _, stderr, err := com.ExecCmdDir(c.repo.Path, "git", "archive", "--format="+format, "-o", path, c.Id.String()) + if err != nil { + return fmt.Errorf("%s", stderr) + } + return nil +} diff --git a/modules/git/repo.go b/modules/git/repo.go new file mode 100644 index 0000000000..14ac39a3ed --- /dev/null +++ b/modules/git/repo.go @@ -0,0 +1,27 @@ +// Copyright 2014 The Gogs Authors. All rights reserved. +// Use of this source code is governed by a MIT-style +// license that can be found in the LICENSE file. + +package git + +import ( + "path/filepath" +) + +// Repository represents a Git repository. +type Repository struct { + Path string + + commitCache map[sha1]*Commit + tagCache map[sha1]*Tag +} + +// OpenRepository opens the repository at the given path. +func OpenRepository(repoPath string) (*Repository, error) { + repoPath, err := filepath.Abs(repoPath) + if err != nil { + return nil, err + } + + return &Repository{Path: repoPath}, nil +} diff --git a/modules/git/repo_branch.go b/modules/git/repo_branch.go new file mode 100644 index 0000000000..726019c1b1 --- /dev/null +++ b/modules/git/repo_branch.go @@ -0,0 +1,38 @@ +// Copyright 2014 The Gogs Authors. All rights reserved. +// Use of this source code is governed by a MIT-style +// license that can be found in the LICENSE file. + +package git + +import ( + "errors" + "strings" + + "github.com/Unknwon/com" +) + +func IsBranchExist(repoPath, branchName string) bool { + _, _, err := com.ExecCmdDir(repoPath, "git", "show-ref", "--verify", "refs/heads/"+branchName) + return err == nil +} + +func (repo *Repository) IsBranchExist(branchName string) bool { + return IsBranchExist(repo.Path, branchName) +} + +func (repo *Repository) GetBranches() ([]string, error) { + stdout, stderr, err := com.ExecCmdDir(repo.Path, "git", "show-ref", "--heads") + if err != nil { + return nil, errors.New(stderr) + } + infos := strings.Split(stdout, "\n") + branches := make([]string, len(infos)-1) + for i, info := range infos[:len(infos)-1] { + parts := strings.Split(info, " ") + if len(parts) != 2 { + continue // NOTE: I should believe git will not give me wrong string. + } + branches[i] = strings.TrimPrefix(parts[1], "refs/heads/") + } + return branches, nil +} diff --git a/modules/git/repo_commit.go b/modules/git/repo_commit.go new file mode 100644 index 0000000000..b1ea5a29a5 --- /dev/null +++ b/modules/git/repo_commit.go @@ -0,0 +1,234 @@ +// Copyright 2014 The Gogs Authors. All rights reserved. +// Use of this source code is governed by a MIT-style +// license that can be found in the LICENSE file. + +package git + +import ( + "bytes" + "container/list" + "errors" + "strings" + "sync" + + "github.com/Unknwon/com" +) + +func (repo *Repository) getCommitIdOfRef(refpath string) (string, error) { + stdout, stderr, err := com.ExecCmdDir(repo.Path, "git", "show-ref", "--verify", refpath) + if err != nil { + return "", errors.New(stderr) + } + return strings.Split(stdout, " ")[0], nil +} + +func (repo *Repository) GetCommitIdOfBranch(branchName string) (string, error) { + return repo.getCommitIdOfRef("refs/heads/" + branchName) +} + +// get branch's last commit or a special commit by id string +func (repo *Repository) GetCommitOfBranch(branchName string) (*Commit, error) { + commitId, err := repo.GetCommitIdOfBranch(branchName) + if err != nil { + return nil, err + } + + return repo.GetCommit(commitId) +} + +// Parse commit information from the (uncompressed) raw +// data from the commit object. +// \n\n separate headers from message +func parseCommitData(data []byte) (*Commit, error) { + commit := new(Commit) + commit.parents = make([]sha1, 0, 1) + // we now have the contents of the commit object. Let's investigate... + nextline := 0 +l: + for { + eol := bytes.IndexByte(data[nextline:], '\n') + switch { + case eol > 0: + line := data[nextline : nextline+eol] + spacepos := bytes.IndexByte(line, ' ') + reftype := line[:spacepos] + switch string(reftype) { + case "tree": + id, err := NewIdFromString(string(line[spacepos+1:])) + if err != nil { + return nil, err + } + commit.Tree.Id = id + case "parent": + // A commit can have one or more parents + oid, err := NewIdFromString(string(line[spacepos+1:])) + if err != nil { + return nil, err + } + commit.parents = append(commit.parents, oid) + case "author": + sig, err := newSignatureFromCommitline(line[spacepos+1:]) + if err != nil { + return nil, err + } + commit.Author = sig + case "committer": + sig, err := newSignatureFromCommitline(line[spacepos+1:]) + if err != nil { + return nil, err + } + commit.Committer = sig + } + nextline += eol + 1 + case eol == 0: + commit.CommitMessage = string(data[nextline+1:]) + break l + default: + break l + } + } + return commit, nil +} + +func (repo *Repository) getCommit(id sha1) (*Commit, error) { + if repo.commitCache != nil { + if c, ok := repo.commitCache[id]; ok { + return c, nil + } + } else { + repo.commitCache = make(map[sha1]*Commit, 10) + } + + data, bytErr, err := com.ExecCmdDirBytes(repo.Path, "git", "cat-file", "-p", id.String()) + if err != nil { + return nil, errors.New(string(bytErr)) + } + + commit, err := parseCommitData(data) + if err != nil { + return nil, err + } + commit.repo = repo + commit.Id = id + + repo.commitCache[id] = commit + return commit, nil +} + +// Find the commit object in the repository. +func (repo *Repository) GetCommit(commitId string) (*Commit, error) { + id, err := NewIdFromString(commitId) + if err != nil { + return nil, err + } + + return repo.getCommit(id) +} + +func (repo *Repository) commitsCount(id sha1) (int, error) { + stdout, stderr, err := com.ExecCmdDir(repo.Path, "git", "rev-list", "--count", id.String()) + if err != nil { + return 0, errors.New(stderr) + } + return com.StrTo(strings.TrimSpace(stdout)).Int() +} + +// used only for single tree, (] +func (repo *Repository) CommitsBetween(last *Commit, before *Commit) (*list.List, error) { + l := list.New() + if last == nil || last.ParentCount() == 0 { + return l, nil + } + + var err error + cur := last + for { + if cur.Id.Equal(before.Id) { + break + } + l.PushBack(cur) + if cur.ParentCount() == 0 { + break + } + cur, err = cur.Parent(0) + if err != nil { + return nil, err + } + } + return l, nil +} + +func (repo *Repository) commitsBefore(lock *sync.Mutex, l *list.List, parent *list.Element, id sha1, limit int) error { + commit, err := repo.getCommit(id) + if err != nil { + return err + } + + var e *list.Element + if parent == nil { + e = l.PushBack(commit) + } else { + var in = parent + for { + if in == nil { + break + } else if in.Value.(*Commit).Id.Equal(commit.Id) { + return nil + } else { + if in.Next() == nil { + break + } + if in.Value.(*Commit).Committer.When.Equal(commit.Committer.When) { + break + } + + if in.Value.(*Commit).Committer.When.After(commit.Committer.When) && + in.Next().Value.(*Commit).Committer.When.Before(commit.Committer.When) { + break + } + } + in = in.Next() + } + + e = l.InsertAfter(commit, in) + } + + var pr = parent + if commit.ParentCount() > 1 { + pr = e + } + + for i := 0; i < commit.ParentCount(); i++ { + id, err := commit.ParentId(i) + if err != nil { + return err + } + err = repo.commitsBefore(lock, l, pr, id, 0) + if err != nil { + return err + } + } + + return nil +} + +func (repo *Repository) getCommitsBefore(id sha1) (*list.List, error) { + l := list.New() + lock := new(sync.Mutex) + err := repo.commitsBefore(lock, l, nil, id, 0) + return l, err +} + +func (repo *Repository) getCommitOfRelPath(id sha1, relPath string) (*Commit, error) { + stdout, _, err := com.ExecCmdDir(repo.Path, "git", "log", "-1", prettyLogFormat, id.String(), "--", relPath) + if err != nil { + return nil, err + } + + id, err = NewIdFromString(string(stdout)) + if err != nil { + return nil, err + } + + return repo.getCommit(id) +} diff --git a/modules/git/repo_object.go b/modules/git/repo_object.go new file mode 100644 index 0000000000..da79f2c731 --- /dev/null +++ b/modules/git/repo_object.go @@ -0,0 +1,14 @@ +// Copyright 2014 The Gogs Authors. All rights reserved. +// Use of this source code is governed by a MIT-style +// license that can be found in the LICENSE file. + +package git + +type ObjectType string + +const ( + COMMIT ObjectType = "commit" + TREE ObjectType = "tree" + BLOB ObjectType = "blob" + TAG ObjectType = "tag" +) diff --git a/modules/git/repo_tag.go b/modules/git/repo_tag.go new file mode 100644 index 0000000000..cefbe783ab --- /dev/null +++ b/modules/git/repo_tag.go @@ -0,0 +1,96 @@ +// Copyright 2014 The Gogs Authors. All rights reserved. +// Use of this source code is governed by a MIT-style +// license that can be found in the LICENSE file. + +package git + +import ( + "errors" + "strings" + + "github.com/Unknwon/com" +) + +func IsTagExist(repoPath, tagName string) bool { + _, _, err := com.ExecCmdDir(repoPath, "git", "show-ref", "--verify", "refs/tags/"+tagName) + return err == nil +} + +func (repo *Repository) IsTagExist(tagName string) bool { + return IsTagExist(repo.Path, tagName) +} + +// GetTags returns all tags of given repository. +func (repo *Repository) GetTags() ([]string, error) { + stdout, stderr, err := com.ExecCmdDir(repo.Path, "git", "tag", "-l") + if err != nil { + return nil, errors.New(stderr) + } + tags := strings.Split(stdout, "\n") + return tags[:len(tags)-1], nil +} + +func (repo *Repository) getTag(id sha1) (*Tag, error) { + if repo.tagCache != nil { + if t, ok := repo.tagCache[id]; ok { + return t, nil + } + } else { + repo.tagCache = make(map[sha1]*Tag, 10) + } + + // Get tag type. + tp, stderr, err := com.ExecCmdDir(repo.Path, "git", "cat-file", "-t", id.String()) + if err != nil { + return nil, errors.New(stderr) + } + + // Tag is a commit. + if ObjectType(tp) == COMMIT { + tag := &Tag{ + Id: id, + Object: id, + Type: string(COMMIT), + repo: repo, + } + repo.tagCache[id] = tag + return tag, nil + } + + // Tag with message. + data, bytErr, err := com.ExecCmdDirBytes(repo.Path, "git", "cat-file", "-p", id.String()) + if err != nil { + return nil, errors.New(string(bytErr)) + } + + tag, err := parseTagData(data) + if err != nil { + return nil, err + } + + tag.Id = id + tag.repo = repo + + repo.tagCache[id] = tag + return tag, nil +} + +// GetTag returns a Git tag by given name. +func (repo *Repository) GetTag(tagName string) (*Tag, error) { + stdout, stderr, err := com.ExecCmdDir(repo.Path, "git", "show-ref", "--tags", tagName) + if err != nil { + return nil, errors.New(stderr) + } + + id, err := NewIdFromString(strings.Split(stdout, " ")[0]) + if err != nil { + return nil, err + } + + tag, err := repo.getTag(id) + if err != nil { + return nil, err + } + tag.Name = tagName + return tag, nil +} diff --git a/modules/git/repo_tree.go b/modules/git/repo_tree.go new file mode 100644 index 0000000000..da394c3605 --- /dev/null +++ b/modules/git/repo_tree.go @@ -0,0 +1,32 @@ +// Copyright 2014 The Gogs Authors. All rights reserved. +// Use of this source code is governed by a MIT-style +// license that can be found in the LICENSE file. + +package git + +import ( + "fmt" + + "github.com/Unknwon/com" +) + +// Find the tree object in the repository. +func (repo *Repository) GetTree(idStr string) (*Tree, error) { + id, err := NewIdFromString(idStr) + if err != nil { + return nil, err + } + return repo.getTree(id) +} + +func (repo *Repository) getTree(id sha1) (*Tree, error) { + treePath := filepathFromSHA1(repo.Path, id.String()) + if !com.IsFile(treePath) { + _, _, err := com.ExecCmdDir(repo.Path, "git", "ls-tree", id.String()) + if err != nil { + return nil, fmt.Errorf("repo.getTree: %v", ErrNotExist) + } + } + + return NewTree(repo, id), nil +} diff --git a/modules/git/sha1.go b/modules/git/sha1.go new file mode 100644 index 0000000000..5c57e89b6a --- /dev/null +++ b/modules/git/sha1.go @@ -0,0 +1,87 @@ +// Copyright 2014 The Gogs Authors. All rights reserved. +// Use of this source code is governed by a MIT-style +// license that can be found in the LICENSE file. + +package git + +import ( + "encoding/hex" + "errors" + "fmt" + "strings" +) + +var ( + IdNotExist = errors.New("sha1 id not exist") +) + +type sha1 [20]byte + +// Return true if s has the same sha1 as caller. +// Support 40-length-string, []byte, sha1 +func (id sha1) Equal(s2 interface{}) bool { + switch v := s2.(type) { + case string: + if len(v) != 40 { + return false + } + return v == id.String() + case []byte: + if len(v) != 20 { + return false + } + for i, v := range v { + if id[i] != v { + return false + } + } + case sha1: + for i, v := range v { + if id[i] != v { + return false + } + } + default: + return false + } + return true +} + +// Return string (hex) representation of the Oid +func (s sha1) String() string { + result := make([]byte, 0, 40) + hexvalues := []byte("0123456789abcdef") + for i := 0; i < 20; i++ { + result = append(result, hexvalues[s[i]>>4]) + result = append(result, hexvalues[s[i]&0xf]) + } + return string(result) +} + +// Create a new sha1 from a 20 byte slice. +func NewId(b []byte) (sha1, error) { + var id sha1 + if len(b) != 20 { + return id, errors.New("Length must be 20") + } + + for i := 0; i < 20; i++ { + id[i] = b[i] + } + return id, nil +} + +// Create a new sha1 from a Sha1 string of length 40. +func NewIdFromString(s string) (sha1, error) { + s = strings.TrimSpace(s) + var id sha1 + if len(s) != 40 { + return id, fmt.Errorf("Length must be 40") + } + b, err := hex.DecodeString(s) + if err != nil { + return id, err + } + + return NewId(b) +} diff --git a/modules/git/signature.go b/modules/git/signature.go new file mode 100644 index 0000000000..20f647d266 --- /dev/null +++ b/modules/git/signature.go @@ -0,0 +1,40 @@ +// Copyright 2014 The Gogs Authors. All rights reserved. +// Use of this source code is governed by a MIT-style +// license that can be found in the LICENSE file. + +package git + +import ( + "bytes" + "strconv" + "time" +) + +// Author and Committer information +type Signature struct { + Email string + Name string + When time.Time +} + +// Helper to get a signature from the commit line, which looks like this: +// author Patrick Gundlach <gundlach@speedata.de> 1378823654 +0200 +// but without the "author " at the beginning (this method should) +// be used for author and committer. +// +// FIXME: include timezone! +func newSignatureFromCommitline(line []byte) (*Signature, error) { + sig := new(Signature) + emailstart := bytes.IndexByte(line, '<') + sig.Name = string(line[:emailstart-1]) + emailstop := bytes.IndexByte(line, '>') + sig.Email = string(line[emailstart+1 : emailstop]) + timestop := bytes.IndexByte(line[emailstop+2:], ' ') + timestring := string(line[emailstop+2 : emailstop+2+timestop]) + seconds, err := strconv.ParseInt(timestring, 10, 64) + if err != nil { + return nil, err + } + sig.When = time.Unix(seconds, 0) + return sig, nil +} diff --git a/modules/git/tag.go b/modules/git/tag.go new file mode 100644 index 0000000000..7fbbcb1cbf --- /dev/null +++ b/modules/git/tag.go @@ -0,0 +1,67 @@ +// Copyright 2014 The Gogs Authors. All rights reserved. +// Use of this source code is governed by a MIT-style +// license that can be found in the LICENSE file. + +package git + +import ( + "bytes" +) + +// Tag represents a Git tag. +type Tag struct { + Name string + Id sha1 + repo *Repository + Object sha1 // The id of this commit object + Type string + Tagger *Signature + TagMessage string +} + +func (tag *Tag) Commit() (*Commit, error) { + return tag.repo.getCommit(tag.Object) +} + +// Parse commit information from the (uncompressed) raw +// data from the commit object. +// \n\n separate headers from message +func parseTagData(data []byte) (*Tag, error) { + tag := new(Tag) + // we now have the contents of the commit object. Let's investigate... + nextline := 0 +l: + for { + eol := bytes.IndexByte(data[nextline:], '\n') + switch { + case eol > 0: + line := data[nextline : nextline+eol] + spacepos := bytes.IndexByte(line, ' ') + reftype := line[:spacepos] + switch string(reftype) { + case "object": + id, err := NewIdFromString(string(line[spacepos+1:])) + if err != nil { + return nil, err + } + tag.Object = id + case "type": + // A commit can have one or more parents + tag.Type = string(line[spacepos+1:]) + case "tagger": + sig, err := newSignatureFromCommitline(line[spacepos+1:]) + if err != nil { + return nil, err + } + tag.Tagger = sig + } + nextline += eol + 1 + case eol == 0: + tag.TagMessage = string(data[nextline+1:]) + break l + default: + break l + } + } + return tag, nil +} diff --git a/modules/git/tree.go b/modules/git/tree.go new file mode 100644 index 0000000000..03152c34ac --- /dev/null +++ b/modules/git/tree.go @@ -0,0 +1,124 @@ +// Copyright 2014 The Gogs Authors. All rights reserved. +// Use of this source code is governed by a MIT-style +// license that can be found in the LICENSE file. + +package git + +import ( + "bytes" + "errors" + "strings" + + "github.com/Unknwon/com" +) + +var ( + ErrNotExist = errors.New("error not exist") +) + +// A tree is a flat directory listing. +type Tree struct { + Id sha1 + repo *Repository + + // parent tree + ptree *Tree + + entries Entries + entriesParsed bool +} + +// Parse tree information from the (uncompressed) raw +// data from the tree object. +func parseTreeData(tree *Tree, data []byte) ([]*TreeEntry, error) { + entries := make([]*TreeEntry, 0, 10) + l := len(data) + pos := 0 + for pos < l { + entry := new(TreeEntry) + entry.ptree = tree + step := 6 + switch string(data[pos : pos+step]) { + case "100644": + entry.mode = ModeBlob + entry.Type = BLOB + case "100755": + entry.mode = ModeExec + entry.Type = BLOB + case "120000": + entry.mode = ModeSymlink + entry.Type = BLOB + case "160000": + entry.mode = ModeCommit + entry.Type = COMMIT + case "040000": + entry.mode = ModeTree + entry.Type = TREE + default: + return nil, errors.New("unknown type: " + string(data[pos:pos+step])) + } + pos += step + 6 // Skip string type of entry type. + + step = 40 + id, err := NewIdFromString(string(data[pos : pos+step])) + if err != nil { + return nil, err + } + entry.Id = id + pos += step + 1 // Skip half of sha1. + + step = bytes.IndexByte(data[pos:], '\n') + entry.name = string(data[pos : pos+step]) + pos += step + 1 + entries = append(entries, entry) + } + return entries, nil +} + +func (t *Tree) SubTree(rpath string) (*Tree, error) { + if len(rpath) == 0 { + return t, nil + } + + paths := strings.Split(rpath, "/") + var err error + var g = t + var p = t + var te *TreeEntry + for _, name := range paths { + te, err = p.GetTreeEntryByPath(name) + if err != nil { + return nil, err + } + + g, err = t.repo.getTree(te.Id) + if err != nil { + return nil, err + } + g.ptree = p + p = g + } + return g, nil +} + +func (t *Tree) ListEntries(relpath string) (Entries, error) { + if t.entriesParsed { + return t.entries, nil + } + t.entriesParsed = true + + stdout, _, err := com.ExecCmdDirBytes(t.repo.Path, + "git", "ls-tree", t.Id.String()) + if err != nil { + return nil, err + } + t.entries, err = parseTreeData(t, stdout) + return t.entries, err +} + +func NewTree(repo *Repository, id sha1) *Tree { + tree := new(Tree) + tree.Id = id + tree.repo = repo + return tree +} diff --git a/modules/git/tree_blob.go b/modules/git/tree_blob.go new file mode 100644 index 0000000000..debc722bc9 --- /dev/null +++ b/modules/git/tree_blob.go @@ -0,0 +1,46 @@ +// Copyright 2014 The Gogs Authors. All rights reserved. +// Use of this source code is governed by a MIT-style +// license that can be found in the LICENSE file. + +package git + +import ( + "fmt" + "path" + "strings" +) + +func (t *Tree) GetTreeEntryByPath(relpath string) (*TreeEntry, error) { + if len(relpath) == 0 { + return &TreeEntry{ + Id: t.Id, + Type: TREE, + mode: ModeTree, + }, nil + // return nil, fmt.Errorf("GetTreeEntryByPath(empty relpath): %v", ErrNotExist) + } + + relpath = path.Clean(relpath) + parts := strings.Split(relpath, "/") + var err error + tree := t + for i, name := range parts { + if i == len(parts)-1 { + entries, err := tree.ListEntries(path.Dir(relpath)) + if err != nil { + return nil, err + } + for _, v := range entries { + if v.name == name { + return v, nil + } + } + } else { + tree, err = tree.SubTree(name) + if err != nil { + return nil, err + } + } + } + return nil, fmt.Errorf("GetTreeEntryByPath: %v", ErrNotExist) +} diff --git a/modules/git/tree_entry.go b/modules/git/tree_entry.go new file mode 100644 index 0000000000..e842f2332a --- /dev/null +++ b/modules/git/tree_entry.go @@ -0,0 +1,109 @@ +// Copyright 2014 The Gogs Authors. All rights reserved. +// Use of this source code is governed by a MIT-style +// license that can be found in the LICENSE file. + +package git + +import ( + "sort" + "strings" + + "github.com/Unknwon/com" +) + +type EntryMode int + +// There are only a few file modes in Git. They look like unix file modes, but they can only be +// one of these. +const ( + ModeBlob EntryMode = 0100644 + ModeExec EntryMode = 0100755 + ModeSymlink EntryMode = 0120000 + ModeCommit EntryMode = 0160000 + ModeTree EntryMode = 0040000 +) + +type TreeEntry struct { + Id sha1 + Type ObjectType + + mode EntryMode + name string + + ptree *Tree + + commited bool + + size int64 + sized bool +} + +func (te *TreeEntry) Name() string { + return te.name +} + +func (te *TreeEntry) Size() int64 { + if te.IsDir() { + return 0 + } + + if te.sized { + return te.size + } + + stdout, _, err := com.ExecCmdDir(te.ptree.repo.Path, "git", "cat-file", "-s", te.Id.String()) + if err != nil { + return 0 + } + + te.sized = true + te.size = com.StrTo(strings.TrimSpace(stdout)).MustInt64() + return te.size +} + +func (te *TreeEntry) IsDir() bool { + return te.mode == ModeTree +} + +func (te *TreeEntry) EntryMode() EntryMode { + return te.mode +} + +func (te *TreeEntry) Blob() *Blob { + return &Blob{ + repo: te.ptree.repo, + TreeEntry: te, + } +} + +type Entries []*TreeEntry + +var sorter = []func(t1, t2 *TreeEntry) bool{ + func(t1, t2 *TreeEntry) bool { + return t1.IsDir() && !t2.IsDir() + }, + func(t1, t2 *TreeEntry) bool { + return t1.name < t2.name + }, +} + +func (bs Entries) Len() int { return len(bs) } +func (bs Entries) Swap(i, j int) { bs[i], bs[j] = bs[j], bs[i] } +func (bs Entries) Less(i, j int) bool { + t1, t2 := bs[i], bs[j] + var k int + for k = 0; k < len(sorter)-1; k++ { + sort := sorter[k] + switch { + case sort(t1, t2): + return true + case sort(t2, t1): + return false + } + } + return sorter[k](t1, t2) +} + +func (bs Entries) Sort() { + sort.Sort(bs) +} diff --git a/modules/git/utils.go b/modules/git/utils.go new file mode 100644 index 0000000000..3c0c60f235 --- /dev/null +++ b/modules/git/utils.go @@ -0,0 +1,27 @@ +// Copyright 2014 The Gogs Authors. All rights reserved. +// Use of this source code is governed by a MIT-style +// license that can be found in the LICENSE file. + +package git + +import ( + "path/filepath" + "strings" +) + +const prettyLogFormat = `--pretty=format:%H` + +func RefEndName(refStr string) string { + index := strings.LastIndex(refStr, "/") + if index != -1 { + return refStr[index+1:] + } + return refStr +} + +// If the object is stored in its own file (i.e not in a pack file), +// this function returns the full path to the object file. +// It does not test if the file exists. +func filepathFromSHA1(rootdir, sha1 string) string { + return filepath.Join(rootdir, "objects", sha1[:2], sha1[2:]) +} diff --git a/modules/git/version.go b/modules/git/version.go new file mode 100644 index 0000000000..683e859b47 --- /dev/null +++ b/modules/git/version.go @@ -0,0 +1,43 @@ +// Copyright 2014 The Gogs Authors. All rights reserved. +// Use of this source code is governed by a MIT-style +// license that can be found in the LICENSE file. + +package git + +import ( + "errors" + "strings" + + "github.com/Unknwon/com" +) + +// Version represents version of Git. +type Version struct { + Major, Minor, Patch int +} + +// GetVersion returns current Git version installed. +func GetVersion() (Version, error) { + stdout, stderr, err := com.ExecCmd("git", "version") + if err != nil { + return Version{}, errors.New(stderr) + } + + infos := strings.Split(stdout, " ") + if len(infos) < 3 { + return Version{}, errors.New("not enough output") + } + + v := Version{} + for i, s := range strings.Split(strings.TrimSpace(infos[2]), ".") { + switch i { + case 0: + v.Major, _ = com.StrTo(s).Int() + case 1: + v.Minor, _ = com.StrTo(s).Int() + case 2: + v.Patch, _ = com.StrTo(s).Int() + } + } + return v, nil +} diff --git a/modules/log/console.go b/modules/log/console.go new file mode 100644 index 0000000000..92d6c2a406 --- /dev/null +++ b/modules/log/console.go @@ -0,0 +1,73 @@ +// Copyright 2014 The Gogs Authors. All rights reserved. +// Use of this source code is governed by a MIT-style +// license that can be found in the LICENSE file. + +package log + +import ( + "encoding/json" + "log" + "os" + "runtime" +) + +type Brush func(string) string + +func NewBrush(color string) Brush { + pre := "\033[" + reset := "\033[0m" + return func(text string) string { + return pre + color + "m" + text + reset + } +} + +var colors = []Brush{ + NewBrush("1;36"), // Trace cyan + NewBrush("1;34"), // Debug blue + NewBrush("1;32"), // Info green + NewBrush("1;33"), // Warn yellow + NewBrush("1;31"), // Error red + NewBrush("1;35"), // Critical purple + NewBrush("1;31"), // Fatal red +} + +// ConsoleWriter implements LoggerInterface and writes messages to terminal. +type ConsoleWriter struct { + lg *log.Logger + Level int `json:"level"` +} + +// create ConsoleWriter returning as LoggerInterface. +func NewConsole() LoggerInterface { + return &ConsoleWriter{ + lg: log.New(os.Stdout, "", log.Ldate|log.Ltime), + Level: TRACE, + } +} + +func (cw *ConsoleWriter) Init(config string) error { + return json.Unmarshal([]byte(config), cw) +} + +func (cw *ConsoleWriter) WriteMsg(msg string, skip, level int) error { + if cw.Level > level { + return nil + } + if runtime.GOOS == "windows" { + cw.lg.Println(msg) + } else { + cw.lg.Println(colors[level](msg)) + } + return nil +} + +func (_ *ConsoleWriter) Destroy() { +} + +func (_ *ConsoleWriter) Flush() { + +} + +func init() { + Register("console", NewConsole) +} diff --git a/modules/log/file.go b/modules/log/file.go new file mode 100644 index 0000000000..cce5352969 --- /dev/null +++ b/modules/log/file.go @@ -0,0 +1,237 @@ +// Copyright 2014 The Gogs Authors. All rights reserved. +// Use of this source code is governed by a MIT-style +// license that can be found in the LICENSE file. + +package log + +import ( + "encoding/json" + "errors" + "fmt" + "io/ioutil" + "log" + "os" + "path/filepath" + "strings" + "sync" + "time" +) + +// FileLogWriter implements LoggerInterface. +// It writes messages by lines limit, file size limit, or time frequency. +type FileLogWriter struct { + *log.Logger + mw *MuxWriter + // The opened file + Filename string `json:"filename"` + + Maxlines int `json:"maxlines"` + maxlines_curlines int + + // Rotate at size + Maxsize int `json:"maxsize"` + maxsize_cursize int + + // Rotate daily + Daily bool `json:"daily"` + Maxdays int64 `json:"maxdays` + daily_opendate int + + Rotate bool `json:"rotate"` + + startLock sync.Mutex // Only one log can write to the file + + Level int `json:"level"` +} + +// an *os.File writer with locker. +type MuxWriter struct { + sync.Mutex + fd *os.File +} + +// write to os.File. +func (l *MuxWriter) Write(b []byte) (int, error) { + l.Lock() + defer l.Unlock() + return l.fd.Write(b) +} + +// set os.File in writer. +func (l *MuxWriter) SetFd(fd *os.File) { + if l.fd != nil { + l.fd.Close() + } + l.fd = fd +} + +// create a FileLogWriter returning as LoggerInterface. +func NewFileWriter() LoggerInterface { + w := &FileLogWriter{ + Filename: "", + Maxlines: 1000000, + Maxsize: 1 << 28, //256 MB + Daily: true, + Maxdays: 7, + Rotate: true, + Level: TRACE, + } + // use MuxWriter instead direct use os.File for lock write when rotate + w.mw = new(MuxWriter) + // set MuxWriter as Logger's io.Writer + w.Logger = log.New(w.mw, "", log.Ldate|log.Ltime) + return w +} + +// Init file logger with json config. +// config like: +// { +// "filename":"log/gogs.log", +// "maxlines":10000, +// "maxsize":1<<30, +// "daily":true, +// "maxdays":15, +// "rotate":true +// } +func (w *FileLogWriter) Init(config string) error { + if err := json.Unmarshal([]byte(config), w); err != nil { + return err + } + if len(w.Filename) == 0 { + return errors.New("config must have filename") + } + return w.StartLogger() +} + +// start file logger. create log file and set to locker-inside file writer. +func (w *FileLogWriter) StartLogger() error { + fd, err := w.createLogFile() + if err != nil { + return err + } + w.mw.SetFd(fd) + if err = w.initFd(); err != nil { + return err + } + return nil +} + +func (w *FileLogWriter) docheck(size int) { + w.startLock.Lock() + defer w.startLock.Unlock() + if w.Rotate && ((w.Maxlines > 0 && w.maxlines_curlines >= w.Maxlines) || + (w.Maxsize > 0 && w.maxsize_cursize >= w.Maxsize) || + (w.Daily && time.Now().Day() != w.daily_opendate)) { + if err := w.DoRotate(); err != nil { + fmt.Fprintf(os.Stderr, "FileLogWriter(%q): %s\n", w.Filename, err) + return + } + } + w.maxlines_curlines++ + w.maxsize_cursize += size +} + +// write logger message into file. +func (w *FileLogWriter) WriteMsg(msg string, skip, level int) error { + if level < w.Level { + return nil + } + n := 24 + len(msg) // 24 stand for the length "2013/06/23 21:00:22 [T] " + w.docheck(n) + w.Logger.Println(msg) + return nil +} + +func (w *FileLogWriter) createLogFile() (*os.File, error) { + // Open the log file + return os.OpenFile(w.Filename, os.O_WRONLY|os.O_APPEND|os.O_CREATE, 0660) +} + +func (w *FileLogWriter) initFd() error { + fd := w.mw.fd + finfo, err := fd.Stat() + if err != nil { + return fmt.Errorf("get stat: %s\n", err) + } + w.maxsize_cursize = int(finfo.Size()) + w.daily_opendate = time.Now().Day() + if finfo.Size() > 0 { + content, err := ioutil.ReadFile(w.Filename) + if err != nil { + return err + } + w.maxlines_curlines = len(strings.Split(string(content), "\n")) + } else { + w.maxlines_curlines = 0 + } + return nil +} + +// DoRotate means it need to write file in new file. +// new file name like xx.log.2013-01-01.2 +func (w *FileLogWriter) DoRotate() error { + _, err := os.Lstat(w.Filename) + if err == nil { // file exists + // Find the next available number + num := 1 + fname := "" + for ; err == nil && num <= 999; num++ { + fname = w.Filename + fmt.Sprintf(".%s.%03d", time.Now().Format("2006-01-02"), num) + _, err = os.Lstat(fname) + } + // return error if the last file checked still existed + if err == nil { + return fmt.Errorf("rotate: cannot find free log number to rename %s\n", w.Filename) + } + + // block Logger's io.Writer + w.mw.Lock() + defer w.mw.Unlock() + + fd := w.mw.fd + fd.Close() + + // close fd before rename + // Rename the file to its newfound home + if err = os.Rename(w.Filename, fname); err != nil { + return fmt.Errorf("Rotate: %s\n", err) + } + + // re-start logger + if err = w.StartLogger(); err != nil { + return fmt.Errorf("Rotate StartLogger: %s\n", err) + } + + go w.deleteOldLog() + } + + return nil +} + +func (w *FileLogWriter) deleteOldLog() { + dir := filepath.Dir(w.Filename) + filepath.Walk(dir, func(path string, info os.FileInfo, err error) error { + if !info.IsDir() && info.ModTime().Unix() < (time.Now().Unix()-60*60*24*w.Maxdays) { + if strings.HasPrefix(filepath.Base(path), filepath.Base(w.Filename)) { + os.Remove(path) + } + } + return nil + }) +} + +// destroy file logger, close file writer. +func (w *FileLogWriter) Destroy() { + w.mw.fd.Close() +} + +// flush file logger. +// there are no buffering messages in file logger in memory. +// flush file means sync file from disk. +func (w *FileLogWriter) Flush() { + w.mw.fd.Sync() +} + +func init() { + Register("file", NewFileWriter) +} diff --git a/modules/log/log.go b/modules/log/log.go index 24f0442d1e..6ca6b5b0b1 100644 --- a/modules/log/log.go +++ b/modules/log/log.go @@ -2,32 +2,29 @@ // Use of this source code is governed by a MIT-style // license that can be found in the LICENSE file. -// Package log is a wrapper of logs for short calling name. package log import ( "fmt" "os" "path" - - "github.com/gogits/logs" + "path/filepath" + "runtime" + "strings" + "sync" ) var ( - loggers []*logs.BeeLogger - GitLogger *logs.BeeLogger + loggers []*Logger + GitLogger *Logger ) -func init() { - NewLogger(0, "console", `{"level": 0}`) -} - func NewLogger(bufLen int64, mode, config string) { - logger := logs.NewLogger(bufLen) + logger := newLogger(bufLen) isExist := false for _, l := range loggers { - if l.Adapter == mode { + if l.adapter == mode { isExist = true l = logger } @@ -35,15 +32,14 @@ func NewLogger(bufLen int64, mode, config string) { if !isExist { loggers = append(loggers, logger) } - logger.SetLogFuncCallDepth(3) if err := logger.SetLogger(mode, config); err != nil { - Fatal("Fail to set logger(%s): %v", mode, err) + Fatal(1, "Fail to set logger(%s): %v", mode, err) } } func NewGitLogger(logPath string) { os.MkdirAll(path.Dir(logPath), os.ModePerm) - GitLogger = logs.NewLogger(0) + GitLogger = newLogger(0) GitLogger.SetLogger("file", fmt.Sprintf(`{"level":0,"filename":"%s","rotate":false}`, logPath)) } @@ -65,28 +61,237 @@ func Info(format string, v ...interface{}) { } } -func Error(format string, v ...interface{}) { +func Warn(format string, v ...interface{}) { for _, logger := range loggers { - logger.Error(format, v...) + logger.Warn(format, v...) } } -func Warn(format string, v ...interface{}) { +func Error(skip int, format string, v ...interface{}) { for _, logger := range loggers { - logger.Warn(format, v...) + logger.Error(skip, format, v...) } } -func Critical(format string, v ...interface{}) { +func Critical(skip int, format string, v ...interface{}) { for _, logger := range loggers { - logger.Critical(format, v...) + logger.Critical(skip, format, v...) } } -func Fatal(format string, v ...interface{}) { - Error(format, v...) +func Fatal(skip int, format string, v ...interface{}) { + Error(skip, format, v...) for _, l := range loggers { l.Close() } - os.Exit(2) + os.Exit(1) +} + +// .___ _______________________________________________________ _________ ___________ +// | |\ \__ ___/\_ _____/\______ \_ _____/ _ \ \_ ___ \\_ _____/ +// | |/ | \| | | __)_ | _/| __)/ /_\ \/ \ \/ | __)_ +// | / | \ | | \ | | \| \/ | \ \____| \ +// |___\____|__ /____| /_______ / |____|_ /\___ /\____|__ /\______ /_______ / +// \/ \/ \/ \/ \/ \/ \/ + +type LogLevel int + +const ( + TRACE = iota + DEBUG + INFO + WARN + ERROR + CRITICAL + FATAL +) + +// LoggerInterface represents behaviors of a logger provider. +type LoggerInterface interface { + Init(config string) error + WriteMsg(msg string, skip, level int) error + Destroy() + Flush() +} + +type loggerType func() LoggerInterface + +var adapters = make(map[string]loggerType) + +// Register registers given logger provider to adapters. +func Register(name string, log loggerType) { + if log == nil { + panic("log: register provider is nil") + } + if _, dup := adapters[name]; dup { + panic("log: register called twice for provider \"" + name + "\"") + } + adapters[name] = log +} + +type logMsg struct { + skip, level int + msg string +} + +// Logger is default logger in beego application. +// it can contain several providers and log message into all providers. +type Logger struct { + adapter string + lock sync.Mutex + level int + msg chan *logMsg + outputs map[string]LoggerInterface + quit chan bool +} + +// newLogger initializes and returns a new logger. +func newLogger(buffer int64) *Logger { + l := &Logger{ + msg: make(chan *logMsg, buffer), + outputs: make(map[string]LoggerInterface), + quit: make(chan bool), + } + go l.StartLogger() + return l +} + +// SetLogger sets new logger instanse with given logger adapter and config. +func (l *Logger) SetLogger(adapter string, config string) error { + l.lock.Lock() + defer l.lock.Unlock() + if log, ok := adapters[adapter]; ok { + lg := log() + if err := lg.Init(config); err != nil { + return err + } + l.outputs[adapter] = lg + l.adapter = adapter + } else { + panic("log: unknown adapter \"" + adapter + "\" (forgotten Register?)") + } + return nil +} + +// DelLogger removes a logger adapter instance. +func (l *Logger) DelLogger(adapter string) error { + l.lock.Lock() + defer l.lock.Unlock() + if lg, ok := l.outputs[adapter]; ok { + lg.Destroy() + delete(l.outputs, adapter) + } else { + panic("log: unknown adapter \"" + adapter + "\" (forgotten Register?)") + } + return nil +} + +func (l *Logger) writerMsg(skip, level int, msg string) error { + if l.level > level { + return nil + } + lm := &logMsg{ + skip: skip, + level: level, + } + + // Only error information needs locate position for debugging. + if lm.level >= ERROR { + pc, file, line, ok := runtime.Caller(skip) + if ok { + // Get caller function name. + fn := runtime.FuncForPC(pc) + var fnName string + if fn == nil { + fnName = "?()" + } else { + fnName = strings.TrimLeft(filepath.Ext(fn.Name()), ".") + "()" + } + + lm.msg = fmt.Sprintf("[%s:%d %s] %s", filepath.Base(file), line, fnName, msg) + } else { + lm.msg = msg + } + } else { + lm.msg = msg + } + l.msg <- lm + return nil +} + +// StartLogger starts logger chan reading. +func (l *Logger) StartLogger() { + for { + select { + case bm := <-l.msg: + for _, l := range l.outputs { + l.WriteMsg(bm.msg, bm.skip, bm.level) + } + case <-l.quit: + return + } + } +} + +// Flush flushs all chan data. +func (l *Logger) Flush() { + for _, l := range l.outputs { + l.Flush() + } +} + +// Close closes logger, flush all chan data and destroy all adapter instances. +func (l *Logger) Close() { + l.quit <- true + for { + if len(l.msg) > 0 { + bm := <-l.msg + for _, l := range l.outputs { + l.WriteMsg(bm.msg, bm.skip, bm.level) + } + } else { + break + } + } + for _, l := range l.outputs { + l.Flush() + l.Destroy() + } +} + +func (l *Logger) Trace(format string, v ...interface{}) { + msg := fmt.Sprintf("[T] "+format, v...) + l.writerMsg(0, TRACE, msg) +} + +func (l *Logger) Debug(format string, v ...interface{}) { + msg := fmt.Sprintf("[D] "+format, v...) + l.writerMsg(0, DEBUG, msg) +} + +func (l *Logger) Info(format string, v ...interface{}) { + msg := fmt.Sprintf("[I] "+format, v...) + l.writerMsg(0, INFO, msg) +} + +func (l *Logger) Warn(format string, v ...interface{}) { + msg := fmt.Sprintf("[W] "+format, v...) + l.writerMsg(0, WARN, msg) +} + +func (l *Logger) Error(skip int, format string, v ...interface{}) { + msg := fmt.Sprintf("[E] "+format, v...) + l.writerMsg(skip, ERROR, msg) +} + +func (l *Logger) Critical(skip int, format string, v ...interface{}) { + msg := fmt.Sprintf("[C] "+format, v...) + l.writerMsg(skip, CRITICAL, msg) +} + +func (l *Logger) Fatal(skip int, format string, v ...interface{}) { + msg := fmt.Sprintf("[F] "+format, v...) + l.writerMsg(skip, FATAL, msg) + l.Close() + os.Exit(1) } diff --git a/modules/mailer/mail.go b/modules/mailer/mail.go index 62e15cd7fe..5a662b9010 100644 --- a/modules/mailer/mail.go +++ b/modules/mailer/mail.go @@ -10,10 +10,12 @@ import ( "fmt" "path" + "github.com/Unknwon/com" + "github.com/Unknwon/macaron" + "github.com/gogits/gogs/models" "github.com/gogits/gogs/modules/base" "github.com/gogits/gogs/modules/log" - "github.com/gogits/gogs/modules/middleware" "github.com/gogits/gogs/modules/setting" ) @@ -55,7 +57,7 @@ func GetMailTmplData(u *models.User) map[interface{}]interface{} { // create a time limit code for user active func CreateUserActiveCode(u *models.User, startInf interface{}) string { minutes := setting.Service.ActiveCodeLives - data := base.ToStr(u.Id) + u.Email + u.LowerName + u.Passwd + u.Rands + data := com.ToStr(u.Id) + u.Email + u.LowerName + u.Passwd + u.Rands code := base.CreateTimeLimitCode(data, minutes, startInf) // add tail hex username @@ -64,7 +66,7 @@ func CreateUserActiveCode(u *models.User, startInf interface{}) string { } // Send user register mail with active code -func SendRegisterMail(r *middleware.Render, u *models.User) { +func SendRegisterMail(r macaron.Render, u *models.User) { code := CreateUserActiveCode(u, nil) subject := "Register success, Welcome" @@ -72,7 +74,7 @@ func SendRegisterMail(r *middleware.Render, u *models.User) { data["Code"] = code body, err := r.HTMLString(string(AUTH_REGISTER_SUCCESS), data) if err != nil { - log.Error("mail.SendRegisterMail(fail to render): %v", err) + log.Error(4, "mail.SendRegisterMail(fail to render): %v", err) return } @@ -83,7 +85,7 @@ func SendRegisterMail(r *middleware.Render, u *models.User) { } // Send email verify active email. -func SendActiveMail(r *middleware.Render, u *models.User) { +func SendActiveMail(r macaron.Render, u *models.User) { code := CreateUserActiveCode(u, nil) subject := "Verify your e-mail address" @@ -92,7 +94,7 @@ func SendActiveMail(r *middleware.Render, u *models.User) { data["Code"] = code body, err := r.HTMLString(string(AUTH_ACTIVE), data) if err != nil { - log.Error("mail.SendActiveMail(fail to render): %v", err) + log.Error(4, "mail.SendActiveMail(fail to render): %v", err) return } @@ -103,7 +105,7 @@ func SendActiveMail(r *middleware.Render, u *models.User) { } // Send reset password email. -func SendResetPasswdMail(r *middleware.Render, u *models.User) { +func SendResetPasswdMail(r macaron.Render, u *models.User) { code := CreateUserActiveCode(u, nil) subject := "Reset your password" @@ -112,7 +114,7 @@ func SendResetPasswdMail(r *middleware.Render, u *models.User) { data["Code"] = code body, err := r.HTMLString(string(AUTH_RESET_PASSWORD), data) if err != nil { - log.Error("mail.SendResetPasswdMail(fail to render): %v", err) + log.Error(4, "mail.SendResetPasswdMail(fail to render): %v", err) return } @@ -157,7 +159,7 @@ func SendIssueNotifyMail(u, owner *models.User, repo *models.Repository, issue * } // SendIssueMentionMail sends mail notification for who are mentioned in issue. -func SendIssueMentionMail(r *middleware.Render, u, owner *models.User, +func SendIssueMentionMail(r macaron.Render, u, owner *models.User, repo *models.Repository, issue *models.Issue, tos []string) error { if len(tos) == 0 { @@ -182,7 +184,7 @@ func SendIssueMentionMail(r *middleware.Render, u, owner *models.User, } // SendCollaboratorMail sends mail notification to new collaborator. -func SendCollaboratorMail(r *middleware.Render, u, owner *models.User, +func SendCollaboratorMail(r macaron.Render, u, owner *models.User, repo *models.Repository) error { subject := fmt.Sprintf("%s added you to %s", owner.Name, repo.Name) diff --git a/modules/mailer/mailer.go b/modules/mailer/mailer.go index d398de60cf..92cdfc7d6a 100644 --- a/modules/mailer/mailer.go +++ b/modules/mailer/mailer.go @@ -56,7 +56,7 @@ func processMailQueue() { if len(msg.Info) > 0 { info = ", info: " + msg.Info } - log.Error(fmt.Sprintf("Async sent email %d succeed, not send emails: %s%s err: %s", num, tos, info, err)) + log.Error(4, fmt.Sprintf("Async sent email %d succeed, not send emails: %s%s err: %s", num, tos, info, err)) } else { log.Trace(fmt.Sprintf("Async sent email %d succeed, sent emails: %s%s", num, tos, info)) } diff --git a/modules/middleware/auth.go b/modules/middleware/auth.go index 214dda23b9..741337da0b 100644 --- a/modules/middleware/auth.go +++ b/modules/middleware/auth.go @@ -8,7 +8,7 @@ import ( "net/url" "strings" - "github.com/go-martini/martini" + "github.com/Unknwon/macaron" "github.com/gogits/gogs/modules/setting" ) @@ -20,7 +20,7 @@ type ToggleOptions struct { DisableCsrf bool } -func Toggle(options *ToggleOptions) martini.Handler { +func Toggle(options *ToggleOptions) macaron.Handler { return func(ctx *Context) { // Cannot view any page before installation. if !setting.InstallLock { @@ -49,7 +49,7 @@ func Toggle(options *ToggleOptions) martini.Handler { ctx.Redirect("/user/login") return } else if !ctx.User.IsActive && setting.Service.RegisterEmailConfirm { - ctx.Data["Title"] = "Activate Your Account" + // ctx.Data["Title"] = "Activate Your Account" ctx.HTML(200, "user/activate") return } diff --git a/modules/middleware/binding/binding.go b/modules/middleware/binding/binding.go index bf8ab52b2b..4103f5543f 100644 --- a/modules/middleware/binding/binding.go +++ b/modules/middleware/binding/binding.go @@ -16,7 +16,8 @@ import ( "strings" "unicode/utf8" - "github.com/go-martini/martini" + "github.com/Unknwon/macaron" + "github.com/macaron-contrib/i18n" ) /* @@ -37,44 +38,44 @@ import ( // your own error handling, use Form or Json middleware directly. // An interface pointer can be added as a second argument in order // to map the struct to a specific interface. -func Bind(obj interface{}, ifacePtr ...interface{}) martini.Handler { - return func(context martini.Context, req *http.Request) { - contentType := req.Header.Get("Content-Type") +func Bind(obj interface{}, ifacePtr ...interface{}) macaron.Handler { + return func(ctx *macaron.Context) { + contentType := ctx.Req.Header.Get("Content-Type") if strings.Contains(contentType, "form-urlencoded") { - context.Invoke(Form(obj, ifacePtr...)) + ctx.Invoke(Form(obj, ifacePtr...)) } else if strings.Contains(contentType, "multipart/form-data") { - context.Invoke(MultipartForm(obj, ifacePtr...)) + ctx.Invoke(MultipartForm(obj, ifacePtr...)) } else if strings.Contains(contentType, "json") { - context.Invoke(Json(obj, ifacePtr...)) + ctx.Invoke(Json(obj, ifacePtr...)) } else { - context.Invoke(Json(obj, ifacePtr...)) - if getErrors(context).Count() > 0 { - context.Invoke(Form(obj, ifacePtr...)) + ctx.Invoke(Json(obj, ifacePtr...)) + if getErrors(ctx).Count() > 0 { + ctx.Invoke(Form(obj, ifacePtr...)) } } - context.Invoke(ErrorHandler) + ctx.Invoke(ErrorHandler) } } // BindIgnErr will do the exactly same thing as Bind but without any // error handling, which user has freedom to deal with them. // This allows user take advantages of validation. -func BindIgnErr(obj interface{}, ifacePtr ...interface{}) martini.Handler { - return func(context martini.Context, req *http.Request) { +func BindIgnErr(obj interface{}, ifacePtr ...interface{}) macaron.Handler { + return func(ctx *macaron.Context, req *http.Request) { contentType := req.Header.Get("Content-Type") if strings.Contains(contentType, "form-urlencoded") { - context.Invoke(Form(obj, ifacePtr...)) + ctx.Invoke(Form(obj, ifacePtr...)) } else if strings.Contains(contentType, "multipart/form-data") { - context.Invoke(MultipartForm(obj, ifacePtr...)) + ctx.Invoke(MultipartForm(obj, ifacePtr...)) } else if strings.Contains(contentType, "json") { - context.Invoke(Json(obj, ifacePtr...)) + ctx.Invoke(Json(obj, ifacePtr...)) } else { - context.Invoke(Json(obj, ifacePtr...)) - if getErrors(context).Count() > 0 { - context.Invoke(Form(obj, ifacePtr...)) + ctx.Invoke(Json(obj, ifacePtr...)) + if getErrors(ctx).Count() > 0 { + ctx.Invoke(Form(obj, ifacePtr...)) } } } @@ -89,12 +90,12 @@ func BindIgnErr(obj interface{}, ifacePtr ...interface{}) martini.Handler { // keys, for example: key=val1&key=val2&key=val3 // An interface pointer can be added as a second argument in order // to map the struct to a specific interface. -func Form(formStruct interface{}, ifacePtr ...interface{}) martini.Handler { - return func(context martini.Context, req *http.Request) { +func Form(formStruct interface{}, ifacePtr ...interface{}) macaron.Handler { + return func(ctx *macaron.Context) { ensureNotPointer(formStruct) formStruct := reflect.New(reflect.TypeOf(formStruct)) errors := newErrors() - parseErr := req.ParseForm() + parseErr := ctx.Req.ParseForm() // Format validation of the request body or the URL would add considerable overhead, // and ParseForm does not complain when URL encoding is off. @@ -104,14 +105,14 @@ func Form(formStruct interface{}, ifacePtr ...interface{}) martini.Handler { errors.Overall[BindingDeserializationError] = parseErr.Error() } - mapForm(formStruct, req.Form, errors) + mapForm(formStruct, ctx.Req.Form, errors) - validateAndMap(formStruct, context, errors, ifacePtr...) + validateAndMap(formStruct, ctx, errors, ifacePtr...) } } -func MultipartForm(formStruct interface{}, ifacePtr ...interface{}) martini.Handler { - return func(context martini.Context, req *http.Request) { +func MultipartForm(formStruct interface{}, ifacePtr ...interface{}) macaron.Handler { + return func(ctx *macaron.Context) { ensureNotPointer(formStruct) formStruct := reflect.New(reflect.TypeOf(formStruct)) errors := newErrors() @@ -119,7 +120,7 @@ func MultipartForm(formStruct interface{}, ifacePtr ...interface{}) martini.Hand // Workaround for multipart forms returning nil instead of an error // when content is not multipart // https://code.google.com/p/go/issues/detail?id=6334 - multipartReader, err := req.MultipartReader() + multipartReader, err := ctx.Req.MultipartReader() if err != nil { errors.Overall[BindingDeserializationError] = err.Error() } else { @@ -129,12 +130,12 @@ func MultipartForm(formStruct interface{}, ifacePtr ...interface{}) martini.Hand errors.Overall[BindingDeserializationError] = parseErr.Error() } - req.MultipartForm = form + ctx.Req.MultipartForm = form } - mapForm(formStruct, req.MultipartForm.Value, errors) + mapForm(formStruct, ctx.Req.MultipartForm.Value, errors) - validateAndMap(formStruct, context, errors, ifacePtr...) + validateAndMap(formStruct, ctx, errors, ifacePtr...) } } @@ -143,21 +144,21 @@ func MultipartForm(formStruct interface{}, ifacePtr ...interface{}) martini.Hand // validated, but no error handling is actually performed here. // An interface pointer can be added as a second argument in order // to map the struct to a specific interface. -func Json(jsonStruct interface{}, ifacePtr ...interface{}) martini.Handler { - return func(context martini.Context, req *http.Request) { +func Json(jsonStruct interface{}, ifacePtr ...interface{}) macaron.Handler { + return func(ctx *macaron.Context) { ensureNotPointer(jsonStruct) jsonStruct := reflect.New(reflect.TypeOf(jsonStruct)) errors := newErrors() - if req.Body != nil { - defer req.Body.Close() + if ctx.Req.Body != nil { + defer ctx.Req.Body.Close() } - if err := json.NewDecoder(req.Body).Decode(jsonStruct.Interface()); err != nil && err != io.EOF { + if err := json.NewDecoder(ctx.Req.Body).Decode(jsonStruct.Interface()); err != nil && err != io.EOF { errors.Overall[BindingDeserializationError] = err.Error() } - validateAndMap(jsonStruct, context, errors, ifacePtr...) + validateAndMap(jsonStruct, ctx, errors, ifacePtr...) } } @@ -165,15 +166,15 @@ func Json(jsonStruct interface{}, ifacePtr ...interface{}) martini.Handler { // passed in is a Validator, then the user-defined Validate method // is executed, and its errors are mapped to the context. This middleware // performs no error handling: it merely detects them and maps them. -func Validate(obj interface{}) martini.Handler { - return func(context martini.Context, req *http.Request) { +func Validate(obj interface{}) macaron.Handler { + return func(ctx *macaron.Context, l i18n.Locale) { errors := newErrors() validateStruct(errors, obj) if validator, ok := obj.(Validator); ok { - validator.Validate(errors, req, context) + validator.Validate(ctx, errors, l) } - context.Map(*errors) + ctx.Map(*errors) } } @@ -387,9 +388,7 @@ func setWithProperType(valueKind reflect.Kind, val string, structField reflect.V } } -// Don't pass in pointers to bind to. Can lead to bugs. See: -// https://github.com/codegangsta/martini-contrib/issues/40 -// https://github.com/codegangsta/martini-contrib/pull/34#issuecomment-29683659 +// Don't pass in pointers to bind to. Can lead to bugs. func ensureNotPointer(obj interface{}) { if reflect.TypeOf(obj).Kind() == reflect.Ptr { panic("Pointers are not accepted as binding models") @@ -399,13 +398,13 @@ func ensureNotPointer(obj interface{}) { // Performs validation and combines errors from validation // with errors from deserialization, then maps both the // resulting struct and the errors to the context. -func validateAndMap(obj reflect.Value, context martini.Context, errors *Errors, ifacePtr ...interface{}) { - context.Invoke(Validate(obj.Interface())) - errors.Combine(getErrors(context)) - context.Map(*errors) - context.Map(obj.Elem().Interface()) +func validateAndMap(obj reflect.Value, ctx *macaron.Context, errors *Errors, ifacePtr ...interface{}) { + ctx.Invoke(Validate(obj.Interface())) + errors.Combine(getErrors(ctx)) + ctx.Map(*errors) + ctx.Map(obj.Elem().Interface()) if len(ifacePtr) > 0 { - context.MapTo(obj.Elem().Interface(), ifacePtr[0]) + ctx.MapTo(obj.Elem().Interface(), ifacePtr[0]) } } @@ -413,8 +412,8 @@ func newErrors() *Errors { return &Errors{make(map[string]string), make(map[string]string)} } -func getErrors(context martini.Context) Errors { - return context.Get(reflect.TypeOf(Errors{})).Interface().(Errors) +func getErrors(ctx *macaron.Context) Errors { + return ctx.GetVal(reflect.TypeOf(Errors{})).Interface().(Errors) } type ( @@ -422,7 +421,7 @@ type ( // validation before the request even gets to your application. // The Validate method will be executed during the validation phase. Validator interface { - Validate(*Errors, *http.Request, martini.Context) + Validate(*macaron.Context, *Errors, i18n.Locale) } ) diff --git a/modules/middleware/context.go b/modules/middleware/context.go index 90cfb1bb04..463d9ba980 100644 --- a/modules/middleware/context.go +++ b/modules/middleware/context.go @@ -5,42 +5,33 @@ package middleware import ( - "crypto/hmac" - "crypto/sha1" - "encoding/base64" "fmt" "html/template" "io" "net/http" - "net/url" - "path/filepath" - "strconv" + "path" "strings" "time" - "github.com/go-martini/martini" - - "github.com/gogits/cache" - "github.com/gogits/git" - "github.com/gogits/session" + "github.com/Unknwon/macaron" + "github.com/macaron-contrib/i18n" + "github.com/macaron-contrib/session" "github.com/gogits/gogs/models" "github.com/gogits/gogs/modules/auth" "github.com/gogits/gogs/modules/base" + "github.com/gogits/gogs/modules/git" "github.com/gogits/gogs/modules/log" "github.com/gogits/gogs/modules/setting" ) // Context represents context of a request. type Context struct { - *Render - c martini.Context - p martini.Params - Req *http.Request - Res http.ResponseWriter - Flash *Flash - Session session.SessionStore - Cache cache.Cache + *macaron.Context + i18n.Locale + Flash *session.Flash + Session session.Store + User *models.User IsSigned bool @@ -68,7 +59,8 @@ type Context struct { HTTPS string Git string } - Mirror *models.Mirror + CommitsCount int + Mirror *models.Mirror } } @@ -107,12 +99,12 @@ func (ctx *Context) HasError() bool { } // HTML calls render.HTML underlying but reduce one argument. -func (ctx *Context) HTML(status int, name base.TplName, htmlOpt ...HTMLOptions) { - ctx.Render.HTML(status, string(name), ctx.Data, htmlOpt...) +func (ctx *Context) HTML(status int, name base.TplName) { + ctx.Render.HTML(status, string(name), ctx.Data) } // RenderWithErr used for page has form validation but need to prompt error to users. -func (ctx *Context) RenderWithErr(msg string, tpl base.TplName, form auth.Form) { +func (ctx *Context) RenderWithErr(msg string, tpl base.TplName, form interface{}) { if form != nil { auth.AssignForm(form, ctx.Data) } @@ -124,8 +116,8 @@ func (ctx *Context) RenderWithErr(msg string, tpl base.TplName, form auth.Form) // Handle handles and logs error by given status. func (ctx *Context) Handle(status int, title string, err error) { if err != nil { - log.Error("%s: %v", title, err) - if martini.Dev != martini.Prod { + log.Error(4, "%s: %v", title, err) + if macaron.Env != macaron.PROD { ctx.Data["ErrorMsg"] = err } } @@ -139,106 +131,6 @@ func (ctx *Context) Handle(status int, title string, err error) { ctx.HTML(status, base.TplName(fmt.Sprintf("status/%d", status))) } -func (ctx *Context) GetCookie(name string) string { - cookie, err := ctx.Req.Cookie(name) - if err != nil { - return "" - } - return cookie.Value -} - -func (ctx *Context) SetCookie(name string, value string, others ...interface{}) { - cookie := http.Cookie{} - cookie.Name = name - cookie.Value = value - - if len(others) > 0 { - switch v := others[0].(type) { - case int: - cookie.MaxAge = v - case int64: - cookie.MaxAge = int(v) - case int32: - cookie.MaxAge = int(v) - } - } - - // default "/" - if len(others) > 1 { - if v, ok := others[1].(string); ok && len(v) > 0 { - cookie.Path = v - } - } else { - cookie.Path = "/" - } - - // default empty - if len(others) > 2 { - if v, ok := others[2].(string); ok && len(v) > 0 { - cookie.Domain = v - } - } - - // default empty - if len(others) > 3 { - switch v := others[3].(type) { - case bool: - cookie.Secure = v - default: - if others[3] != nil { - cookie.Secure = true - } - } - } - - // default false. for session cookie default true - if len(others) > 4 { - if v, ok := others[4].(bool); ok && v { - cookie.HttpOnly = true - } - } - - ctx.Res.Header().Add("Set-Cookie", cookie.String()) -} - -// Get secure cookie from request by a given key. -func (ctx *Context) GetSecureCookie(Secret, key string) (string, bool) { - val := ctx.GetCookie(key) - if val == "" { - return "", false - } - - parts := strings.SplitN(val, "|", 3) - - if len(parts) != 3 { - return "", false - } - - vs := parts[0] - timestamp := parts[1] - sig := parts[2] - - h := hmac.New(sha1.New, []byte(Secret)) - fmt.Fprintf(h, "%s%s", vs, timestamp) - - if fmt.Sprintf("%02x", h.Sum(nil)) != sig { - return "", false - } - res, _ := base64.URLEncoding.DecodeString(vs) - return string(res), true -} - -// Set Secure cookie for response. -func (ctx *Context) SetSecureCookie(Secret, name, value string, others ...interface{}) { - vs := base64.URLEncoding.EncodeToString([]byte(value)) - timestamp := strconv.FormatInt(time.Now().UnixNano(), 10) - h := hmac.New(sha1.New, []byte(Secret)) - fmt.Fprintf(h, "%s%s", vs, timestamp) - sig := fmt.Sprintf("%02x", h.Sum(nil)) - cookie := strings.Join([]string{vs, timestamp, sig}, "|") - ctx.SetCookie(name, cookie, others...) -} - func (ctx *Context) CsrfToken() string { if len(ctx.csrfToken) > 0 { return ctx.csrfToken @@ -271,16 +163,16 @@ func (ctx *Context) ServeFile(file string, names ...string) { if len(names) > 0 { name = names[0] } else { - name = filepath.Base(file) + name = path.Base(file) } - ctx.Res.Header().Set("Content-Description", "File Transfer") - ctx.Res.Header().Set("Content-Type", "application/octet-stream") - ctx.Res.Header().Set("Content-Disposition", "attachment; filename="+name) - ctx.Res.Header().Set("Content-Transfer-Encoding", "binary") - ctx.Res.Header().Set("Expires", "0") - ctx.Res.Header().Set("Cache-Control", "must-revalidate") - ctx.Res.Header().Set("Pragma", "public") - http.ServeFile(ctx.Res, ctx.Req, file) + ctx.Resp.Header().Set("Content-Description", "File Transfer") + ctx.Resp.Header().Set("Content-Type", "application/octet-stream") + ctx.Resp.Header().Set("Content-Disposition", "attachment; filename="+name) + ctx.Resp.Header().Set("Content-Transfer-Encoding", "binary") + ctx.Resp.Header().Set("Expires", "0") + ctx.Resp.Header().Set("Cache-Control", "must-revalidate") + ctx.Resp.Header().Set("Pragma", "public") + http.ServeFile(ctx.Resp, ctx.Req, file) } func (ctx *Context) ServeContent(name string, r io.ReadSeeker, params ...interface{}) { @@ -291,87 +183,52 @@ func (ctx *Context) ServeContent(name string, r io.ReadSeeker, params ...interfa modtime = v } } - ctx.Res.Header().Set("Content-Description", "File Transfer") - ctx.Res.Header().Set("Content-Type", "application/octet-stream") - ctx.Res.Header().Set("Content-Disposition", "attachment; filename="+name) - ctx.Res.Header().Set("Content-Transfer-Encoding", "binary") - ctx.Res.Header().Set("Expires", "0") - ctx.Res.Header().Set("Cache-Control", "must-revalidate") - ctx.Res.Header().Set("Pragma", "public") - http.ServeContent(ctx.Res, ctx.Req, name, modtime, r) -} - -type Flash struct { - url.Values - ErrorMsg, SuccessMsg string -} - -func (f *Flash) Error(msg string) { - f.Set("error", msg) - f.ErrorMsg = msg + ctx.Resp.Header().Set("Content-Description", "File Transfer") + ctx.Resp.Header().Set("Content-Type", "application/octet-stream") + ctx.Resp.Header().Set("Content-Disposition", "attachment; filename="+name) + ctx.Resp.Header().Set("Content-Transfer-Encoding", "binary") + ctx.Resp.Header().Set("Expires", "0") + ctx.Resp.Header().Set("Cache-Control", "must-revalidate") + ctx.Resp.Header().Set("Pragma", "public") + http.ServeContent(ctx.Resp, ctx.Req, name, modtime, r) } -func (f *Flash) Success(msg string) { - f.Set("success", msg) - f.SuccessMsg = msg -} - -// InitContext initializes a classic context for a request. -func InitContext() martini.Handler { - return func(res http.ResponseWriter, r *http.Request, c martini.Context, rd *Render) { +// Contexter initializes a classic context for a request. +func Contexter() macaron.Handler { + return func(c *macaron.Context, l i18n.Locale, sess session.Store, f *session.Flash) { ctx := &Context{ - c: c, - // p: p, - Req: r, - Res: res, - Cache: setting.Cache, - Render: rd, + Context: c, + Locale: l, + Flash: f, + Session: sess, } - ctx.Data["PageStartTime"] = time.Now() - - // start session - ctx.Session = setting.SessionManager.SessionStart(res, r) + // Cache: setting.Cache, - // Get flash. - values, err := url.ParseQuery(ctx.GetCookie("gogs_flash")) - if err != nil { - log.Error("InitContext.ParseQuery(flash): %v", err) - } else if len(values) > 0 { - ctx.Flash = &Flash{Values: values} - ctx.Flash.ErrorMsg = ctx.Flash.Get("error") - ctx.Flash.SuccessMsg = ctx.Flash.Get("success") - ctx.Data["Flash"] = ctx.Flash - ctx.SetCookie("gogs_flash", "", -1) + // Compute current URL for real-time change language. + link := ctx.Req.RequestURI + i := strings.Index(link, "?") + if i > -1 { + link = link[:i] } - ctx.Flash = &Flash{Values: url.Values{}} + ctx.Data["Link"] = link - rw := res.(martini.ResponseWriter) - rw.Before(func(martini.ResponseWriter) { - ctx.Session.SessionRelease(res) - - if flash := ctx.Flash.Encode(); len(flash) > 0 { - ctx.SetCookie("gogs_flash", flash, 0) - } - }) + ctx.Data["PageStartTime"] = time.Now() // Get user from session if logined. - user := auth.SignedInUser(ctx.req.Header, ctx.Session) - ctx.User = user - ctx.IsSigned = user != nil - - ctx.Data["IsSigned"] = ctx.IsSigned - - if user != nil { - ctx.Data["SignedUser"] = user - ctx.Data["SignedUserId"] = user.Id - ctx.Data["SignedUserName"] = user.Name + ctx.User = auth.SignedInUser(ctx.Req.Header, ctx.Session) + if ctx.User != nil { + ctx.IsSigned = true + ctx.Data["IsSigned"] = ctx.IsSigned + ctx.Data["SignedUser"] = ctx.User + ctx.Data["SignedUserId"] = ctx.User.Id + ctx.Data["SignedUserName"] = ctx.User.Name ctx.Data["IsAdmin"] = ctx.User.IsAdmin } // If request sends files, parse them here otherwise the Query() can't be parsed and the CsrfToken will be invalid. - if r.Method == "POST" && strings.Contains(r.Header.Get("Content-Type"), "multipart/form-data") { - if err = ctx.Req.ParseMultipartForm(setting.AttachmentMaxSize << 20); err != nil && !strings.Contains(err.Error(), "EOF") { // 32MB max size - ctx.Handle(500, "issue.Comment(ctx.Req.ParseMultipartForm)", err) + if ctx.Req.Method == "POST" && strings.Contains(ctx.Req.Header.Get("Content-Type"), "multipart/form-data") { + if err := ctx.Req.ParseMultipartForm(setting.AttachmentMaxSize << 20); err != nil && !strings.Contains(err.Error(), "EOF") { // 32MB max size + ctx.Handle(500, "ParseMultipartForm", err) return } } @@ -381,7 +238,5 @@ func InitContext() martini.Handler { ctx.Data["CsrfTokenHtml"] = template.HTML(`<input type="hidden" name="_csrf" value="` + ctx.csrfToken + `">`) c.Map(ctx) - - c.Next() } } diff --git a/modules/middleware/logger.go b/modules/middleware/logger.go deleted file mode 100644 index f918281a04..0000000000 --- a/modules/middleware/logger.go +++ /dev/null @@ -1,52 +0,0 @@ -// Copyright 2014 The Gogs Authors. All rights reserved. -// Use of this source code is governed by a MIT-style -// license that can be found in the LICENSE file. - -package middleware - -import ( - "fmt" - "log" - "net/http" - "runtime" - "time" - - "github.com/go-martini/martini" - - "github.com/gogits/gogs/modules/setting" -) - -var isWindows bool - -func init() { - isWindows = runtime.GOOS == "windows" -} - -func Logger() martini.Handler { - return func(res http.ResponseWriter, req *http.Request, ctx martini.Context, log *log.Logger) { - if setting.DisableRouterLog { - return - } - - start := time.Now() - log.Printf("Started %s %s", req.Method, req.URL.Path) - - rw := res.(martini.ResponseWriter) - ctx.Next() - - content := fmt.Sprintf("Completed %v %s in %v", rw.Status(), http.StatusText(rw.Status()), time.Since(start)) - if !isWindows { - switch rw.Status() { - case 200: - content = fmt.Sprintf("\033[1;32m%s\033[0m", content) - case 304: - content = fmt.Sprintf("\033[1;33m%s\033[0m", content) - case 404: - content = fmt.Sprintf("\033[1;31m%s\033[0m", content) - case 500: - content = fmt.Sprintf("\033[1;36m%s\033[0m", content) - } - } - log.Println(content) - } -} diff --git a/modules/middleware/render.go b/modules/middleware/render.go deleted file mode 100644 index b5a0d697ae..0000000000 --- a/modules/middleware/render.go +++ /dev/null @@ -1,281 +0,0 @@ -// Copyright 2014 The Gogs Authors. All rights reserved. -// Use of this source code is governed by a MIT-style -// license that can be found in the LICENSE file. - -// foked from https://github.com/martini-contrib/render/blob/master/render.go -package middleware - -import ( - "bytes" - "encoding/json" - "fmt" - "html/template" - "io" - "io/ioutil" - "net/http" - "os" - "path/filepath" - "time" - - "github.com/go-martini/martini" - - "github.com/gogits/gogs/modules/base" -) - -const ( - ContentType = "Content-Type" - ContentLength = "Content-Length" - ContentJSON = "application/json" - ContentHTML = "text/html" - ContentXHTML = "application/xhtml+xml" - defaultCharset = "UTF-8" -) - -var helperFuncs = template.FuncMap{ - "yield": func() (string, error) { - return "", fmt.Errorf("yield called with no layout defined") - }, -} - -type Delims struct { - Left string - Right string -} - -type RenderOptions struct { - Directory string - Layout string - Extensions []string - Funcs []template.FuncMap - Delims Delims - Charset string - IndentJSON bool - HTMLContentType string -} - -type HTMLOptions struct { - Layout string -} - -func Renderer(options ...RenderOptions) martini.Handler { - opt := prepareOptions(options) - cs := prepareCharset(opt.Charset) - t := compile(opt) - return func(res http.ResponseWriter, req *http.Request, c martini.Context) { - var tc *template.Template - if martini.Env == martini.Dev { - - tc = compile(opt) - } else { - - tc, _ = t.Clone() - } - - rd := &Render{res, req, tc, opt, cs, base.TmplData{}, time.Time{}} - - rd.Data["TmplLoadTimes"] = func() string { - if rd.startTime.IsZero() { - return "" - } - return fmt.Sprint(time.Since(rd.startTime).Nanoseconds()/1e6) + "ms" - } - - c.Map(rd.Data) - c.Map(rd) - } -} - -func prepareCharset(charset string) string { - if len(charset) != 0 { - return "; charset=" + charset - } - - return "; charset=" + defaultCharset -} - -func prepareOptions(options []RenderOptions) RenderOptions { - var opt RenderOptions - if len(options) > 0 { - opt = options[0] - } - - if len(opt.Directory) == 0 { - opt.Directory = "templates" - } - if len(opt.Extensions) == 0 { - opt.Extensions = []string{".tmpl"} - } - if len(opt.HTMLContentType) == 0 { - opt.HTMLContentType = ContentHTML - } - - return opt -} - -func compile(options RenderOptions) *template.Template { - dir := options.Directory - t := template.New(dir) - t.Delims(options.Delims.Left, options.Delims.Right) - - template.Must(t.Parse("Martini")) - - filepath.Walk(dir, func(path string, info os.FileInfo, err error) error { - r, err := filepath.Rel(dir, path) - if err != nil { - return err - } - - ext := filepath.Ext(r) - for _, extension := range options.Extensions { - if ext == extension { - - buf, err := ioutil.ReadFile(path) - if err != nil { - panic(err) - } - - name := (r[0 : len(r)-len(ext)]) - tmpl := t.New(filepath.ToSlash(name)) - - for _, funcs := range options.Funcs { - tmpl = tmpl.Funcs(funcs) - } - - template.Must(tmpl.Funcs(helperFuncs).Parse(string(buf))) - break - } - } - - return nil - }) - - return t -} - -type Render struct { - http.ResponseWriter - req *http.Request - t *template.Template - opt RenderOptions - compiledCharset string - - Data base.TmplData - - startTime time.Time -} - -func (r *Render) JSON(status int, v interface{}) { - var result []byte - var err error - if r.opt.IndentJSON { - result, err = json.MarshalIndent(v, "", " ") - } else { - result, err = json.Marshal(v) - } - if err != nil { - http.Error(r, err.Error(), 500) - return - } - - r.Header().Set(ContentType, ContentJSON+r.compiledCharset) - r.WriteHeader(status) - r.Write(result) -} - -func (r *Render) JSONString(v interface{}) (string, error) { - var result []byte - var err error - if r.opt.IndentJSON { - result, err = json.MarshalIndent(v, "", " ") - } else { - result, err = json.Marshal(v) - } - if err != nil { - return "", err - } - return string(result), nil -} - -func (r *Render) renderBytes(name string, binding interface{}, htmlOpt ...HTMLOptions) (*bytes.Buffer, error) { - opt := r.prepareHTMLOptions(htmlOpt) - - if len(opt.Layout) > 0 { - r.addYield(name, binding) - name = opt.Layout - } - - out, err := r.execute(name, binding) - if err != nil { - return nil, err - } - - return out, nil -} - -func (r *Render) HTML(status int, name string, binding interface{}, htmlOpt ...HTMLOptions) { - r.startTime = time.Now() - - out, err := r.renderBytes(name, binding, htmlOpt...) - if err != nil { - http.Error(r, err.Error(), http.StatusInternalServerError) - return - } - - r.Header().Set(ContentType, r.opt.HTMLContentType+r.compiledCharset) - r.WriteHeader(status) - io.Copy(r, out) -} - -func (r *Render) HTMLString(name string, binding interface{}, htmlOpt ...HTMLOptions) (string, error) { - if out, err := r.renderBytes(name, binding, htmlOpt...); err != nil { - return "", err - } else { - return out.String(), nil - } -} - -func (r *Render) Error(status int, message ...string) { - r.WriteHeader(status) - if len(message) > 0 { - r.Write([]byte(message[0])) - } -} - -func (r *Render) Redirect(location string, status ...int) { - code := http.StatusFound - if len(status) == 1 { - code = status[0] - } - - http.Redirect(r, r.req, location, code) -} - -func (r *Render) Template() *template.Template { - return r.t -} - -func (r *Render) execute(name string, binding interface{}) (*bytes.Buffer, error) { - buf := new(bytes.Buffer) - return buf, r.t.ExecuteTemplate(buf, name, binding) -} - -func (r *Render) addYield(name string, binding interface{}) { - funcs := template.FuncMap{ - "yield": func() (template.HTML, error) { - buf, err := r.execute(name, binding) - - return template.HTML(buf.String()), err - }, - } - r.t.Funcs(funcs) -} - -func (r *Render) prepareHTMLOptions(htmlOpt []HTMLOptions) HTMLOptions { - if len(htmlOpt) > 0 { - return htmlOpt[0] - } - - return HTMLOptions{ - Layout: r.opt.Layout, - } -} diff --git a/modules/middleware/repo.go b/modules/middleware/repo.go index c6febffb2e..c3d26c2837 100644 --- a/modules/middleware/repo.go +++ b/modules/middleware/repo.go @@ -10,20 +10,19 @@ import ( "net/url" "strings" - "github.com/go-martini/martini" - - "github.com/gogits/git" + "github.com/Unknwon/macaron" "github.com/gogits/gogs/models" + "github.com/gogits/gogs/modules/git" "github.com/gogits/gogs/modules/log" "github.com/gogits/gogs/modules/setting" ) -func RepoAssignment(redirect bool, args ...bool) martini.Handler { - return func(ctx *Context, params martini.Params) { - // valid brachname +func RepoAssignment(redirect bool, args ...bool) macaron.Handler { + return func(ctx *Context) { + // To valid brach name. var validBranch bool - // display bare quick start if it is a bare repo + // To display bare quick start if it is a bare repo. var displayBare bool if len(args) >= 1 { @@ -35,51 +34,53 @@ func RepoAssignment(redirect bool, args ...bool) martini.Handler { } var ( - user *models.User - err error + u *models.User + err error ) - userName := params["username"] - repoName := params["reponame"] - refName := params["branchname"] + userName := ctx.Params(":username") + repoName := ctx.Params(":reponame") + refName := ctx.Params(":branchname") + if len(refName) == 0 { + refName = ctx.Params(":path") + } - // TODO: need more advanced onwership and access level check. // Collaborators who have write access can be seen as owners. if ctx.IsSigned { ctx.Repo.IsOwner, err = models.HasAccess(ctx.User.Name, userName+"/"+repoName, models.WRITABLE) if err != nil { - ctx.Handle(500, "RepoAssignment(HasAccess)", err) + ctx.Handle(500, "HasAccess", err) return } ctx.Repo.IsTrueOwner = ctx.User.LowerName == strings.ToLower(userName) } if !ctx.Repo.IsTrueOwner { - user, err = models.GetUserByName(userName) + u, err = models.GetUserByName(userName) if err != nil { if err == models.ErrUserNotExist { - ctx.Handle(404, "RepoAssignment(GetUserByName)", err) + ctx.Handle(404, "GetUserByName", err) return } else if redirect { ctx.Redirect("/") return } - ctx.Handle(500, "RepoAssignment(GetUserByName)", err) + ctx.Handle(500, "GetUserByName", err) return } } else { - user = ctx.User + u = ctx.User } - if user == nil { + if u == nil { if redirect { ctx.Redirect("/") return } - ctx.Handle(403, "RepoAssignment", errors.New("invliad user account for single repository")) + ctx.Handle(404, "RepoAssignment", errors.New("invliad user account for single repository")) return } - ctx.Repo.Owner = user + ctx.Repo.Owner = u // Organization owner team members are true owners as well. if ctx.IsSigned && ctx.Repo.Owner.IsOrganization() && ctx.Repo.Owner.IsOrgOwner(ctx.User.Id) { @@ -87,16 +88,19 @@ func RepoAssignment(redirect bool, args ...bool) martini.Handler { } // get repository - repo, err := models.GetRepositoryByName(user.Id, repoName) + repo, err := models.GetRepositoryByName(u.Id, repoName) if err != nil { if err == models.ErrRepoNotExist { - ctx.Handle(404, "RepoAssignment", err) + ctx.Handle(404, "GetRepositoryByName", err) return } else if redirect { ctx.Redirect("/") return } - ctx.Handle(500, "RepoAssignment", err) + ctx.Handle(500, "GetRepositoryByName", err) + return + } else if err = repo.GetOwner(); err != nil { + ctx.Handle(500, "GetOwner", err) return } @@ -108,16 +112,16 @@ func RepoAssignment(redirect bool, args ...bool) martini.Handler { // Check access. if repo.IsPrivate && !ctx.Repo.IsOwner { if ctx.User == nil { - ctx.Handle(404, "RepoAssignment(HasAccess)", nil) + ctx.Handle(404, "HasAccess", nil) return } hasAccess, err := models.HasAccess(ctx.User.Name, ctx.Repo.Owner.Name+"/"+repo.Name, models.READABLE) if err != nil { - ctx.Handle(500, "RepoAssignment(HasAccess)", err) + ctx.Handle(500, "HasAccess", err) return } else if !hasAccess { - ctx.Handle(404, "RepoAssignment(HasAccess)", nil) + ctx.Handle(404, "HasAccess", nil) return } } @@ -127,7 +131,7 @@ func RepoAssignment(redirect bool, args ...bool) martini.Handler { if repo.IsMirror { ctx.Repo.Mirror, err = models.GetMirror(repo.Id) if err != nil { - ctx.Handle(500, "RepoAssignment(GetMirror)", err) + ctx.Handle(500, "GetMirror", err) return } ctx.Data["MirrorInterval"] = ctx.Repo.Mirror.Interval @@ -144,34 +148,33 @@ func RepoAssignment(redirect bool, args ...bool) martini.Handler { return } ctx.Repo.GitRepo = gitRepo - ctx.Repo.RepoLink = "/" + user.Name + "/" + repo.Name + ctx.Repo.RepoLink = "/" + u.Name + "/" + repo.Name tags, err := ctx.Repo.GitRepo.GetTags() if err != nil { - ctx.Handle(500, "RepoAssignment(GetTags))", err) + ctx.Handle(500, "GetTags", err) return } ctx.Repo.Repository.NumTags = len(tags) - ctx.Data["Title"] = user.Name + "/" + repo.Name + ctx.Data["Title"] = u.Name + "/" + repo.Name ctx.Data["Repository"] = repo - ctx.Data["Owner"] = user + ctx.Data["Owner"] = ctx.Repo.Repository.Owner ctx.Data["RepoLink"] = ctx.Repo.RepoLink ctx.Data["IsRepositoryOwner"] = ctx.Repo.IsOwner ctx.Data["IsRepositoryTrueOwner"] = ctx.Repo.IsTrueOwner - ctx.Data["BranchName"] = "" if setting.SshPort != 22 { - ctx.Repo.CloneLink.SSH = fmt.Sprintf("ssh://%s@%s/%s/%s.git", setting.RunUser, setting.Domain, user.LowerName, repo.LowerName) + ctx.Repo.CloneLink.SSH = fmt.Sprintf("ssh://%s@%s/%s/%s.git", setting.RunUser, setting.Domain, u.LowerName, repo.LowerName) } else { - ctx.Repo.CloneLink.SSH = fmt.Sprintf("%s@%s:%s/%s.git", setting.RunUser, setting.Domain, user.LowerName, repo.LowerName) + ctx.Repo.CloneLink.SSH = fmt.Sprintf("%s@%s:%s/%s.git", setting.RunUser, setting.Domain, u.LowerName, repo.LowerName) } - ctx.Repo.CloneLink.HTTPS = fmt.Sprintf("%s%s/%s.git", setting.AppUrl, user.LowerName, repo.LowerName) + ctx.Repo.CloneLink.HTTPS = fmt.Sprintf("%s%s/%s.git", setting.AppUrl, u.LowerName, repo.LowerName) ctx.Data["CloneLink"] = ctx.Repo.CloneLink if ctx.Repo.Repository.IsGoget { - ctx.Data["GoGetLink"] = fmt.Sprintf("%s%s/%s", setting.AppUrl, user.LowerName, repo.LowerName) - ctx.Data["GoGetImport"] = fmt.Sprintf("%s/%s/%s", setting.Domain, user.LowerName, repo.LowerName) + ctx.Data["GoGetLink"] = fmt.Sprintf("%s%s/%s", setting.AppUrl, u.LowerName, repo.LowerName) + ctx.Data["GoGetImport"] = fmt.Sprintf("%s/%s/%s", setting.Domain, u.LowerName, repo.LowerName) } // when repo is bare, not valid branch @@ -211,7 +214,7 @@ func RepoAssignment(redirect bool, args ...bool) martini.Handler { return } } else { - ctx.Handle(404, "RepoAssignment invalid repo", nil) + ctx.Handle(404, "RepoAssignment invalid repo", errors.New("branch or tag not exist")) return } @@ -222,7 +225,7 @@ func RepoAssignment(redirect bool, args ...bool) martini.Handler { } else { brs, err := gitRepo.GetBranches() if err != nil { - ctx.Handle(500, "RepoAssignment(GetBranches))", err) + ctx.Handle(500, "GetBranches", err) return } refName = brs[0] @@ -233,6 +236,13 @@ func RepoAssignment(redirect bool, args ...bool) martini.Handler { ctx.Data["IsBranch"] = ctx.Repo.IsBranch ctx.Data["IsCommit"] = ctx.Repo.IsCommit + + ctx.Repo.CommitsCount, err = ctx.Repo.Commit.CommitsCount() + if err != nil { + ctx.Handle(500, "CommitsCount", err) + return + } + ctx.Data["CommitsCount"] = ctx.Repo.CommitsCount } log.Debug("displayBare: %v; IsBare: %v", displayBare, ctx.Repo.Repository.IsBare) @@ -240,7 +250,7 @@ func RepoAssignment(redirect bool, args ...bool) martini.Handler { // repo is bare and display enable if displayBare && ctx.Repo.Repository.IsBare { log.Debug("Bare repository: %s", ctx.Repo.RepoLink) - ctx.HTML(200, "repo/single_bare") + ctx.HTML(200, "repo/bare") return } @@ -251,9 +261,10 @@ func RepoAssignment(redirect bool, args ...bool) martini.Handler { ctx.Data["TagName"] = ctx.Repo.TagName brs, err := ctx.Repo.GitRepo.GetBranches() if err != nil { - log.Error("RepoAssignment(GetBranches): %v", err) + log.Error(4, "GetBranches: %v", err) } ctx.Data["Branches"] = brs + ctx.Data["BrancheCount"] = len(brs) // If not branch selected, try default one. // If default branch doesn't exists, fall back to some other branch. @@ -267,11 +278,11 @@ func RepoAssignment(redirect bool, args ...bool) martini.Handler { ctx.Data["BranchName"] = ctx.Repo.BranchName ctx.Data["CommitId"] = ctx.Repo.CommitId - ctx.Data["IsRepositoryWatching"] = ctx.Repo.IsWatching + ctx.Data["IsWatchingRepo"] = ctx.Repo.IsWatching } } -func RequireTrueOwner() martini.Handler { +func RequireTrueOwner() macaron.Handler { return func(ctx *Context) { if !ctx.Repo.IsTrueOwner { if !ctx.IsSigned { diff --git a/modules/middleware/static.go b/modules/middleware/static.go deleted file mode 100644 index 35f03f721a..0000000000 --- a/modules/middleware/static.go +++ /dev/null @@ -1,127 +0,0 @@ -// Copyright 2013 The Martini Authors. All rights reserved. -// Copyright 2014 The Gogs Authors. All rights reserved. -// Use of this source code is governed by a MIT-style -// license that can be found in the LICENSE file. - -package middleware - -import ( - "log" - "net/http" - "path" - "runtime" - "strings" - - "github.com/go-martini/martini" - - "github.com/gogits/gogs/modules/setting" -) - -// StaticOptions is a struct for specifying configuration options for the martini.Static middleware. -type StaticOptions struct { - // Prefix is the optional prefix used to serve the static directory content - Prefix string - // SkipLogging will disable [Static] log messages when a static file is served. - SkipLogging bool - // IndexFile defines which file to serve as index if it exists. - IndexFile string - // Expires defines which user-defined function to use for producing a HTTP Expires Header - // https://developers.google.com/speed/docs/insights/LeverageBrowserCaching - Expires func() string -} - -func prepareStaticOptions(options []StaticOptions) StaticOptions { - var opt StaticOptions - if len(options) > 0 { - opt = options[0] - } - - // Defaults - if len(opt.IndexFile) == 0 { - opt.IndexFile = "index.html" - } - // Normalize the prefix if provided - if opt.Prefix != "" { - // Ensure we have a leading '/' - if opt.Prefix[0] != '/' { - opt.Prefix = "/" + opt.Prefix - } - // Remove any trailing '/' - opt.Prefix = strings.TrimRight(opt.Prefix, "/") - } - return opt -} - -// Static returns a middleware handler that serves static files in the given directory. -func Static(directory string, staticOpt ...StaticOptions) martini.Handler { - if runtime.GOOS == "windows" { - if len(directory) < 2 || directory[1] != ':' { - directory = path.Join(setting.StaticRootPath, directory) - } - } else if !path.IsAbs(directory) { - directory = path.Join(setting.StaticRootPath, directory) - } - - dir := http.Dir(directory) - opt := prepareStaticOptions(staticOpt) - - return func(res http.ResponseWriter, req *http.Request, log *log.Logger) { - if req.Method != "GET" && req.Method != "HEAD" { - return - } - file := req.URL.Path - // if we have a prefix, filter requests by stripping the prefix - if opt.Prefix != "" { - if !strings.HasPrefix(file, opt.Prefix) { - return - } - file = file[len(opt.Prefix):] - if file != "" && file[0] != '/' { - return - } - } - f, err := dir.Open(file) - if err != nil { - // discard the error? - return - } - defer f.Close() - - fi, err := f.Stat() - if err != nil { - return - } - - // try to serve index file - if fi.IsDir() { - // redirect if missing trailing slash - if !strings.HasSuffix(req.URL.Path, "/") { - http.Redirect(res, req, req.URL.Path+"/", http.StatusFound) - return - } - - file = path.Join(file, opt.IndexFile) - f, err = dir.Open(file) - if err != nil { - return - } - defer f.Close() - - fi, err = f.Stat() - if err != nil || fi.IsDir() { - return - } - } - - if !opt.SkipLogging { - log.Println("[Static] Serving " + file) - } - - // Add an Expires header to the static content - if opt.Expires != nil { - res.Header().Set("Expires", opt.Expires()) - } - - http.ServeContent(res, req, file, fi.ModTime(), f) - } -} diff --git a/modules/process/manager.go b/modules/process/manager.go index ce8ab7b4b2..68c33315d0 100644 --- a/modules/process/manager.go +++ b/modules/process/manager.go @@ -78,7 +78,7 @@ func ExecDir(timeout time.Duration, dir, desc, cmdName string, args ...string) ( select { case <-time.After(timeout): if errKill := Kill(pid); errKill != nil { - log.Error("Exec(%d:%s): %v", pid, desc, errKill) + log.Error(4, "Exec(%d:%s): %v", pid, desc, errKill) } <-done return "", ErrExecTimeout.Error(), ErrExecTimeout diff --git a/modules/setting/setting.go b/modules/setting/setting.go index 48b17f95cf..dbd01051bf 100644 --- a/modules/setting/setting.go +++ b/modules/setting/setting.go @@ -14,12 +14,12 @@ import ( "github.com/Unknwon/com" "github.com/Unknwon/goconfig" + "github.com/macaron-contrib/session" "github.com/gogits/cache" - "github.com/gogits/session" - "github.com/gogits/gogs/modules/bin" "github.com/gogits/gogs/modules/log" + // "github.com/gogits/gogs-ng/modules/ssh" ) type Scheme string @@ -45,6 +45,7 @@ var ( DisableRouterLog bool CertFile, KeyFile string StaticRootPath string + EnableGzip bool // Security settings. InstallLock bool @@ -89,15 +90,22 @@ var ( // Session settings. SessionProvider string SessionConfig *session.Config - SessionManager *session.Manager // Global setting objects. - Cfg *goconfig.ConfigFile - CustomPath string // Custom directory path. - ProdMode bool - RunUser string + Cfg *goconfig.ConfigFile + ConfRootPath string + CustomPath string // Custom directory path. + ProdMode bool + RunUser string + + // I18n settings. + Langs, Names []string ) +func init() { + log.NewLogger(0, "console", `{"level": 0}`) +} + func ExecPath() (string, error) { file, err := exec.LookPath(os.Args[0]) if err != nil { @@ -121,16 +129,13 @@ func WorkDir() (string, error) { func NewConfigContext() { workDir, err := WorkDir() if err != nil { - log.Fatal("Fail to get work directory: %v", err) + log.Fatal(4, "Fail to get work directory: %v", err) } + ConfRootPath = path.Join(workDir, "conf") - data, err := bin.Asset("conf/app.ini") + Cfg, err = goconfig.LoadConfigFile(path.Join(workDir, "conf/app.ini")) if err != nil { - log.Fatal("Fail to read 'conf/app.ini': %v", err) - } - Cfg, err = goconfig.LoadFromData(data) - if err != nil { - log.Fatal("Fail to parse 'conf/app.ini': %v", err) + log.Fatal(4, "Fail to parse 'conf/app.ini': %v", err) } CustomPath = os.Getenv("GOGS_CUSTOM") @@ -141,10 +146,10 @@ func NewConfigContext() { cfgPath := path.Join(CustomPath, "conf/app.ini") if com.IsFile(cfgPath) { if err = Cfg.AppendFiles(cfgPath); err != nil { - log.Fatal("Fail to load custom 'conf/app.ini': %v", err) + log.Fatal(4, "Fail to load custom 'conf/app.ini': %v", err) } } else { - log.Warn("No custom 'conf/app.ini' found") + log.Warn("No custom 'conf/app.ini' found, please go to '/install'") } AppName = Cfg.MustValue("", "APP_NAME", "Gogs: Go Git Service") @@ -165,6 +170,7 @@ func NewConfigContext() { DisableRouterLog = Cfg.MustBool("server", "DISABLE_ROUTER_LOG") StaticRootPath = Cfg.MustValue("server", "STATIC_ROOT_PATH", workDir) LogRootPath = Cfg.MustValue("log", "ROOT_PATH", path.Join(workDir, "log")) + EnableGzip = Cfg.MustBool("server", "ENABLE_GZIP") InstallLock = Cfg.MustBool("security", "INSTALL_LOCK") SecretKey = Cfg.MustValue("security", "SECRET_KEY") @@ -173,14 +179,14 @@ func NewConfigContext() { CookieRememberName = Cfg.MustValue("security", "COOKIE_REMEMBER_NAME") ReverseProxyAuthUser = Cfg.MustValue("security", "REVERSE_PROXY_AUTHENTICATION_USER", "X-WEBAUTH-USER") - AttachmentPath = Cfg.MustValue("attachment", "PATH", "files/attachments") - AttachmentAllowedTypes = Cfg.MustValue("attachment", "ALLOWED_TYPES", "*/*") + AttachmentPath = Cfg.MustValue("attachment", "PATH", "data/attachments") + AttachmentAllowedTypes = Cfg.MustValue("attachment", "ALLOWED_TYPES", "image/jpeg|image/png") AttachmentMaxSize = Cfg.MustInt64("attachment", "MAX_SIZE", 32) AttachmentMaxFiles = Cfg.MustInt("attachment", "MAX_FILES", 10) AttachmentEnabled = Cfg.MustBool("attachment", "ENABLE", true) if err = os.MkdirAll(AttachmentPath, os.ModePerm); err != nil { - log.Fatal("Could not create directory %s: %s", AttachmentPath, err) + log.Fatal(4, "Could not create directory %s: %s", AttachmentPath, err) } RunUser = Cfg.MustValue("", "RUN_USER") @@ -190,13 +196,13 @@ func NewConfigContext() { } // Does not check run user when the install lock is off. if InstallLock && RunUser != curUser { - log.Fatal("Expect user(%s) but current user is: %s", RunUser, curUser) + log.Fatal(4, "Expect user(%s) but current user is: %s", RunUser, curUser) } // Determine and create root git reposiroty path. homeDir, err := com.HomeDir() if err != nil { - log.Fatal("Fail to get home directory: %v", err) + log.Fatal(4, "Fail to get home directory: %v", err) } RepoRootPath = Cfg.MustValue("repository", "ROOT", filepath.Join(homeDir, "gogs-repositories")) if !filepath.IsAbs(RepoRootPath) { @@ -206,13 +212,16 @@ func NewConfigContext() { } if err = os.MkdirAll(RepoRootPath, os.ModePerm); err != nil { - log.Fatal("Fail to create repository root path(%s): %v", RepoRootPath, err) + log.Fatal(4, "Fail to create repository root path(%s): %v", RepoRootPath, err) } ScriptType = Cfg.MustValue("repository", "SCRIPT_TYPE", "bash") PictureService = Cfg.MustValueRange("picture", "SERVICE", "server", []string{"server"}) DisableGravatar = Cfg.MustBool("picture", "DISABLE_GRAVATAR") + + Langs = Cfg.MustValueArray("i18n", "LANGS", ",") + Names = Cfg.MustValueArray("i18n", "NAMES", ",") } var Service struct { @@ -255,7 +264,7 @@ func newLogService() { mode = strings.TrimSpace(mode) modeSec := "log." + mode if _, err := Cfg.GetSection(modeSec); err != nil { - log.Fatal("Unknown log mode: %s", mode) + log.Fatal(4, "Unknown log mode: %s", mode) } // Log level. @@ -263,7 +272,7 @@ func newLogService() { []string{"Trace", "Debug", "Info", "Warn", "Error", "Critical"}) level, ok := logLevels[levelName] if !ok { - log.Fatal("Unknown log level: %s", levelName) + log.Fatal(4, "Unknown log level: %s", levelName) } // Generate log configuration. @@ -318,15 +327,15 @@ func newCacheService() { case "memory": CacheConfig = fmt.Sprintf(`{"interval":%d}`, Cfg.MustInt("cache", "INTERVAL", 60)) case "redis", "memcache": - CacheConfig = fmt.Sprintf(`{"conn":"%s"}`, Cfg.MustValue("cache", "HOST")) + CacheConfig = fmt.Sprintf(`{"conn":"%s"}`, strings.Trim(Cfg.MustValue("cache", "HOST"), "\" ")) default: - log.Fatal("Unknown cache adapter: %s", CacheAdapter) + log.Fatal(4, "Unknown cache adapter: %s", CacheAdapter) } var err error Cache, err = cache.NewCache(CacheAdapter, CacheConfig) if err != nil { - log.Fatal("Init cache system failed, adapter: %s, config: %s, %v\n", + log.Fatal(4, "Init cache system failed, adapter: %s, config: %s, %v\n", CacheAdapter, CacheConfig, err) } @@ -338,12 +347,12 @@ func newSessionService() { []string{"memory", "file", "redis", "mysql"}) SessionConfig = new(session.Config) - SessionConfig.ProviderConfig = Cfg.MustValue("session", "PROVIDER_CONFIG") + SessionConfig.ProviderConfig = strings.Trim(Cfg.MustValue("session", "PROVIDER_CONFIG"), "\" ") SessionConfig.CookieName = Cfg.MustValue("session", "COOKIE_NAME", "i_like_gogits") - SessionConfig.CookieSecure = Cfg.MustBool("session", "COOKIE_SECURE") + SessionConfig.Secure = Cfg.MustBool("session", "COOKIE_SECURE") SessionConfig.EnableSetCookie = Cfg.MustBool("session", "ENABLE_SET_COOKIE", true) - SessionConfig.GcIntervalTime = Cfg.MustInt64("session", "GC_INTERVAL_TIME", 86400) - SessionConfig.SessionLifeTime = Cfg.MustInt64("session", "SESSION_LIFE_TIME", 86400) + SessionConfig.Gclifetime = Cfg.MustInt64("session", "GC_INTERVAL_TIME", 86400) + SessionConfig.Maxlifetime = Cfg.MustInt64("session", "SESSION_LIFE_TIME", 86400) SessionConfig.SessionIDHashFunc = Cfg.MustValueRange("session", "SESSION_ID_HASHFUNC", "sha1", []string{"sha1", "sha256", "md5"}) SessionConfig.SessionIDHashKey = Cfg.MustValue("session", "SESSION_ID_HASHKEY") @@ -352,14 +361,6 @@ func newSessionService() { os.MkdirAll(path.Dir(SessionConfig.ProviderConfig), os.ModePerm) } - var err error - SessionManager, err = session.NewManager(SessionProvider, *SessionConfig) - if err != nil { - log.Fatal("Init session system failed, provider: %s, %v", - SessionProvider, err) - } - go SessionManager.GC() - log.Info("Session Service Enabled") } @@ -441,4 +442,5 @@ func NewServices() { newRegisterMailService() newNotifyMailService() newWebhookService() + // ssh.Listen("2022") } diff --git a/modules/ssh/ssh.go b/modules/ssh/ssh.go new file mode 100644 index 0000000000..78ad678dc5 --- /dev/null +++ b/modules/ssh/ssh.go @@ -0,0 +1,119 @@ +// Copyright 2014 The Gogs Authors. All rights reserved. +// Use of this source code is governed by a MIT-style +// license that can be found in the LICENSE file. + +// Prototype, git client looks like do not recognize req.Reply. +package ssh + +import ( + "fmt" + "io/ioutil" + "net" + "os" + "os/exec" + "strings" + + "code.google.com/p/go.crypto/ssh" + + "github.com/Unknwon/com" + + "github.com/gogits/gogs-ng/modules/log" +) + +func handleServerConn(keyId string, chans <-chan ssh.NewChannel) { + for newChan := range chans { + if newChan.ChannelType() != "session" { + newChan.Reject(ssh.UnknownChannelType, "unknown channel type") + continue + } + channel, requests, err := newChan.Accept() + if err != nil { + log.Error(3, "Could not accept channel: %v", err) + continue + } + + go func(in <-chan *ssh.Request) { + defer channel.Close() + for req := range in { + ok, payload := false, strings.TrimLeft(string(req.Payload), "\x00") + fmt.Println("Request:", req.Type, req.WantReply, payload) + switch req.Type { + case "env": + args := strings.Split(strings.Replace(payload, "\x00", "", -1), "\v") + if len(args) != 2 { + break + } + args[0] = strings.TrimLeft(args[0], "\x04") + _, _, err := com.ExecCmdBytes("env", args[0]+"="+args[1]) + if err != nil { + log.Error(3, "env: %v", err) + channel.Stderr().Write([]byte(err.Error())) + break + } + ok = true + case "exec": + os.Setenv("SSH_ORIGINAL_COMMAND", strings.TrimLeft(payload, "'(")) + log.Info("Payload: %v", strings.TrimLeft(payload, "'(")) + cmd := exec.Command("/Users/jiahuachen/Applications/Go/src/github.com/gogits/gogs-ng/gogs-ng", "serv", "key-"+keyId) + cmd.Stdout = channel + cmd.Stdin = channel + cmd.Stderr = channel.Stderr() + if err := cmd.Run(); err != nil { + log.Error(3, "exec: %v", err) + } else { + ok = true + } + } + fmt.Println("Done:", ok) + req.Reply(ok, nil) // BUG: Git on Mac seems not know this reply and hang? + } + fmt.Println("Done!!!") + }(requests) + } +} + +func listen(config *ssh.ServerConfig, port string) { + listener, err := net.Listen("tcp", "0.0.0.0:"+port) + if err != nil { + panic(err) + } + for { + // Once a ServerConfig has been configured, connections can be accepted. + conn, err := listener.Accept() + if err != nil { + log.Error(3, "Fail to accept incoming connection: %v", err) + continue + } + // Before use, a handshake must be performed on the incoming net.Conn. + sConn, chans, reqs, err := ssh.NewServerConn(conn, config) + if err != nil { + log.Error(3, "Fail to handshake: %v", err) + continue + } + // The incoming Request channel must be serviced. + go ssh.DiscardRequests(reqs) + go handleServerConn(sConn.Permissions.Extensions["key-id"], chans) + } +} + +// Listen starts a SSH server listens on given port. +func Listen(port string) { + config := &ssh.ServerConfig{ + PublicKeyCallback: func(conn ssh.ConnMetadata, key ssh.PublicKey) (*ssh.Permissions, error) { + // keyCache[string(ssh.MarshalAuthorizedKey(key))] = 2 + return &ssh.Permissions{Extensions: map[string]string{"key-id": "2"}}, nil + }, + } + + privateBytes, err := ioutil.ReadFile("/Users/jiahuachen/.ssh/id_rsa") + if err != nil { + panic("failed to load private key") + } + private, err := ssh.ParsePrivateKey(privateBytes) + if err != nil { + panic("failed to parse private key") + } + config.AddHostKey(private) + + go listen(config, port) +} |