diff --git a/bcs-services/bcs-bscp/cmd/api-server/service/bknotice.go b/bcs-services/bcs-bscp/cmd/api-server/service/bknotice.go
index 4c73c508f6..d7a1b66f94 100644
--- a/bcs-services/bcs-bscp/cmd/api-server/service/bknotice.go
+++ b/bcs-services/bcs-bscp/cmd/api-server/service/bknotice.go
@@ -18,7 +18,6 @@ import (
"net/http"
"github.com/TencentBlueKing/bk-bcs/bcs-services/bcs-bscp/pkg/cc"
- "github.com/TencentBlueKing/bk-bcs/bcs-services/bcs-bscp/pkg/config"
)
// bkNoticeService is http handler for bknotice service.
@@ -30,7 +29,7 @@ func (s *bkNoticeService) GetCurrentAnnouncements(w http.ResponseWriter, r *http
// Prepare the new request
proxyURL := fmt.Sprintf("%s/v1/announcement/get_current_announcements/?platform=%s",
- config.G.Base.AppCode, cc.ApiServer().BKNotice.Host)
+ cc.ApiServer().BKNotice.Host, cc.ApiServer().Esb.AppCode)
proxyReq, err := http.NewRequest("GET", proxyURL, nil)
if err != nil {
@@ -39,7 +38,7 @@ func (s *bkNoticeService) GetCurrentAnnouncements(w http.ResponseWriter, r *http
}
authHeader := fmt.Sprintf("{\"bk_app_code\": \"%s\", \"bk_app_secret\": \"%s\"}",
- config.G.Base.AppCode, config.G.Base.AppSecret)
+ cc.ApiServer().Esb.AppCode, cc.ApiServer().Esb.AppSecret)
proxyReq.Header.Set("X-Bkapi-Authorization", authHeader)
diff --git a/bcs-services/bcs-bscp/cmd/api-server/service/bknotice_test.go b/bcs-services/bcs-bscp/cmd/api-server/service/bknotice_test.go
new file mode 100644
index 0000000000..94ac320b4a
--- /dev/null
+++ b/bcs-services/bcs-bscp/cmd/api-server/service/bknotice_test.go
@@ -0,0 +1,130 @@
+/*
+ * Tencent is pleased to support the open source community by making Blueking Container Service available.
+ * Copyright (C) 2019 THL A29 Limited, a Tencent company. All rights reserved.
+ * Licensed under the MIT License (the "License"); you may not use this file except
+ * in compliance with the License. You may obtain a copy of the License at
+ * http://opensource.org/licenses/MIT
+ * Unless required by applicable law or agreed to in writing, software distributed under
+ * the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND,
+ * either express or implied. See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package service
+
+import (
+ "encoding/json"
+ "net/http"
+ "net/http/httptest"
+ "os"
+ "path"
+ "testing"
+ "text/template"
+
+ "github.com/TencentBlueKing/bk-bcs/bcs-services/bcs-bscp/cmd/api-server/options"
+ "github.com/TencentBlueKing/bk-bcs/bcs-services/bcs-bscp/pkg/cc"
+)
+
+// SysOpt is the system option
+var SysOpt *options.Option
+
+var configFileTmpl = `
+esb:
+ appCode: {{ .AppCode }}
+ appSecret: {{ .AppSecret }}
+bkNotice:
+ enable: true
+ host: {{ .BKNoticeHost }}
+repository:
+ # storageType: S3
+ storageType: BKREPO
+ bkRepo:
+ endpoints:
+ - http://example.bktencent.com
+ project: bscp
+ username: example
+ password: example
+ s3:
+ endpoint: ""
+ accessKeyID: ""
+ secretAccessKey: ""
+ useSSL: true
+ bucketName: bscp-example
+`
+
+type MockHttpClient struct {
+ DoFunc func(req *http.Request) (*http.Response, error)
+}
+
+func (m *MockHttpClient) Do(req *http.Request) (*http.Response, error) {
+ return m.DoFunc(req)
+}
+
+func TestGetCurrentAnnouncements(t *testing.T) {
+
+ tempDir := os.TempDir()
+ SysOpt.Sys.ConfigFiles = []string{path.Join(tempDir, "cc.yaml")}
+ file, err := os.OpenFile(path.Join(tempDir, "cc.yaml"), os.O_RDWR|os.O_CREATE, 0755)
+ if err != nil {
+ t.Errorf("open file failed, err: %s", err.Error())
+ }
+ defer file.Close()
+ tpl, err := template.New("cc.yaml").Parse(configFileTmpl)
+ if err != nil {
+ t.Errorf("parse template failed, err: %s", err.Error())
+ }
+ if e := tpl.Execute(file, map[string]string{
+ "AppCode": os.Getenv("APP_CODE"),
+ "AppSecret": os.Getenv("APP_SECRET"),
+ "BKNoticeHost": os.Getenv("BK_NOTICE_HOST"),
+ }); e != nil {
+ t.Errorf("execute template failed, err: %s", e.Error())
+ }
+
+ if e := cc.LoadSettings(SysOpt.Sys); e != nil {
+ t.Errorf("load settings from config files failed, err: %s", e.Error())
+ }
+
+ service, err := newBKNoticeService()
+ if err != nil {
+ t.Errorf("newBKNoticeService failed: %v", err)
+ }
+
+ recorder := httptest.NewRecorder()
+ // Mock 一个http请求
+ request, _ := http.NewRequest("GET", "/", nil)
+
+ // 调用API
+ service.GetCurrentAnnouncements(recorder, request)
+
+ // 检查状态码
+ if status := recorder.Code; status != http.StatusOK {
+ t.Errorf("handler returned wrong status code: got %v want %v", status, http.StatusOK)
+ }
+
+ // 检查响应体
+ type expectedResp struct {
+ Result bool `json:"result"`
+ Code int `json:"code"`
+ Data interface{} `json:"data"`
+ }
+ expected := &expectedResp{}
+ if err := json.Unmarshal(recorder.Body.Bytes(), expected); err != nil {
+ t.Errorf("handler returned response failed: %v", err)
+ }
+
+ if expected.Code != 0 {
+ t.Errorf("handler returned response failed, code: %v", expected.Code)
+ }
+
+ if !expected.Result {
+ t.Errorf("handler returned response failed, result: %v", expected.Result)
+ }
+}
+
+func init() {
+
+ SysOpt = options.InitOptions()
+
+ cc.InitService(cc.APIServerName)
+}
diff --git a/bcs-services/bcs-bscp/cmd/vault-server/vault/go.mod b/bcs-services/bcs-bscp/cmd/vault-server/vault/go.mod
index cf6d2678d2..e7b06e0475 100644
--- a/bcs-services/bcs-bscp/cmd/vault-server/vault/go.mod
+++ b/bcs-services/bcs-bscp/cmd/vault-server/vault/go.mod
@@ -4,6 +4,7 @@ go 1.20
// alias github.com/hashicorp/vault release commit
replace (
+ github.com/hashicorp/vault => github.com/ifooth/vault v0.0.0-20240122073913-369f84ba6ea4
github.com/hashicorp/vault/api => github.com/hashicorp/vault/api v1.9.3-0.20230721171514-bf23fe8636b0
github.com/hashicorp/vault/api/auth/approle => github.com/hashicorp/vault/api/auth/approle v0.4.2-0.20230721171514-bf23fe8636b0
github.com/hashicorp/vault/api/auth/kubernetes => github.com/hashicorp/vault/api/auth/kubernetes v0.4.2-0.20230721171514-bf23fe8636b0
diff --git a/bcs-services/bcs-bscp/cmd/vault-server/vault/go.sum b/bcs-services/bcs-bscp/cmd/vault-server/vault/go.sum
index 700e995a22..973398405d 100644
--- a/bcs-services/bcs-bscp/cmd/vault-server/vault/go.sum
+++ b/bcs-services/bcs-bscp/cmd/vault-server/vault/go.sum
@@ -1846,8 +1846,6 @@ github.com/hashicorp/raft-snapshot v1.0.4/go.mod h1:5sL9eUn72lH5DzsFIJ9jaysITbHk
github.com/hashicorp/serf v0.8.2/go.mod h1:6hOLApaqBFA1NXqRQAsxw9QxuDEvNxSQRwA/JwenrHc=
github.com/hashicorp/serf v0.10.1 h1:Z1H2J60yRKvfDYAOZLd2MU0ND4AH/WDz7xYHDWQsIPY=
github.com/hashicorp/serf v0.10.1/go.mod h1:yL2t6BqATOLGc5HF7qbFkTfXoPIY0WZdWHfEvMqbG+4=
-github.com/hashicorp/vault v1.14.1 h1:JBRe4N6g6iu3yWenhlMn9PwSNAQYIQQ6PTYnbccvyxM=
-github.com/hashicorp/vault v1.14.1/go.mod h1:VH1j4CD8lYPQ+XjmgpAF7gt0M2swsARFHndbDyDRgkU=
github.com/hashicorp/vault-plugin-auth-alicloud v0.15.0 h1:R2SVwOeVLG5DXzUx42UWhjfFqS0Z9+ncfebPu+gO9VA=
github.com/hashicorp/vault-plugin-auth-alicloud v0.15.0/go.mod h1:YQXpa2s4rGYKm3Oa/Nkgh5SuGVfHFNEIUwDDYWyhloE=
github.com/hashicorp/vault-plugin-auth-azure v0.15.1 h1:CknW0l2O70326KfepWeDuPszuNherhAtVNaSLRBsS4U=
@@ -1925,6 +1923,8 @@ github.com/huandu/xstrings v1.4.0/go.mod h1:y5/lhBue+AyNmUVz9RLU9xbLR0o4KIIExikq
github.com/iancoleman/strcase v0.2.0/go.mod h1:iwCmte+B7n89clKwxIoIXy/HfoL7AsD47ZCWhYzw7ho=
github.com/ianlancetaylor/demangle v0.0.0-20181102032728-5e5cf60278f6/go.mod h1:aSSvb/t6k1mPoxDqO4vJh6VOCGPwU4O0C2/Eqndh1Sc=
github.com/ianlancetaylor/demangle v0.0.0-20200824232613-28f6c0f3b639/go.mod h1:aSSvb/t6k1mPoxDqO4vJh6VOCGPwU4O0C2/Eqndh1Sc=
+github.com/ifooth/vault v0.0.0-20240122073913-369f84ba6ea4 h1:pYiY9fDylGGhyqDQ4KdAXvXXrWfP6kbGkJDnpg6CsSE=
+github.com/ifooth/vault v0.0.0-20240122073913-369f84ba6ea4/go.mod h1:VH1j4CD8lYPQ+XjmgpAF7gt0M2swsARFHndbDyDRgkU=
github.com/imdario/mergo v0.3.5/go.mod h1:2EnlNZ0deacrJVfApfmtdGgDfMuh/nq6Ok1EcJh5FfA=
github.com/imdario/mergo v0.3.6/go.mod h1:2EnlNZ0deacrJVfApfmtdGgDfMuh/nq6Ok1EcJh5FfA=
github.com/imdario/mergo v0.3.8/go.mod h1:2EnlNZ0deacrJVfApfmtdGgDfMuh/nq6Ok1EcJh5FfA=
diff --git a/bcs-services/bcs-bscp/pkg/cc/service.go b/bcs-services/bcs-bscp/pkg/cc/service.go
index 5a9063e569..f3f08a2d34 100644
--- a/bcs-services/bcs-bscp/pkg/cc/service.go
+++ b/bcs-services/bcs-bscp/pkg/cc/service.go
@@ -73,6 +73,7 @@ type ApiServerSetting struct {
Log LogOption `yaml:"log"`
Repo Repository `yaml:"repository"`
BKNotice BKNotice `yaml:"bkNotice"`
+ Esb Esb `yaml:"esb"`
FeatureFlags map[FeatureFlag]FeatureFlagOption `yaml:"featureFlags"`
}
diff --git a/bcs-services/bcs-bscp/pkg/components/bknotice/bknotice.go b/bcs-services/bcs-bscp/pkg/components/bknotice/bknotice.go
index 0f9e243ae0..671425090f 100644
--- a/bcs-services/bcs-bscp/pkg/components/bknotice/bknotice.go
+++ b/bcs-services/bcs-bscp/pkg/components/bknotice/bknotice.go
@@ -20,7 +20,6 @@ import (
"github.com/TencentBlueKing/bk-bcs/bcs-services/bcs-bscp/pkg/cc"
"github.com/TencentBlueKing/bk-bcs/bcs-services/bcs-bscp/pkg/components"
- "github.com/TencentBlueKing/bk-bcs/bcs-services/bcs-bscp/pkg/config"
)
type registerSystemResp struct {
@@ -34,7 +33,7 @@ func RegisterSystem(ctx context.Context) error {
url := fmt.Sprintf("%s/v1/register/", cc.ApiServer().BKNotice.Host)
authHeader := fmt.Sprintf("{\"bk_app_code\": \"%s\", \"bk_app_secret\": \"%s\"}",
- config.G.Base.AppCode, config.G.Base.AppSecret)
+ cc.ApiServer().Esb.AppCode, cc.ApiServer().Esb.AppSecret)
resp, err := components.GetClient().R().
SetContext(ctx).
diff --git a/bcs-services/bcs-bscp/pkg/dal/vault/vault_test.go b/bcs-services/bcs-bscp/pkg/dal/vault/vault_test.go
new file mode 100644
index 0000000000..61bf9ca3c4
--- /dev/null
+++ b/bcs-services/bcs-bscp/pkg/dal/vault/vault_test.go
@@ -0,0 +1,94 @@
+/*
+ * Tencent is pleased to support the open source community by making Blueking Container Service available.
+ * Copyright (C) 2019 THL A29 Limited, a Tencent company. All rights reserved.
+ * Licensed under the MIT License (the "License"); you may not use this file except
+ * in compliance with the License. You may obtain a copy of the License at
+ * http://opensource.org/licenses/MIT
+ * Unless required by applicable law or agreed to in writing, software distributed under
+ * the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND,
+ * either express or implied. See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package vault
+
+import (
+ "os"
+ "testing"
+
+ "github.com/TencentBlueKing/bk-bcs/bcs-services/bcs-bscp/pkg/cc"
+ "github.com/TencentBlueKing/bk-bcs/bcs-services/bcs-bscp/pkg/kit"
+ "github.com/TencentBlueKing/bk-bcs/bcs-services/bcs-bscp/pkg/types"
+)
+
+func initClient(t testing.TB) Set {
+ vaultToken := os.Getenv("VAULT_TOKEN")
+ vaultAddr := os.Getenv("VAULT_ADDR")
+ if vaultAddr == "" || vaultToken == "" {
+ t.Skipf("VAULT_ADDR or VAULT_TOKEN env is missing")
+ }
+
+ s, err := NewSet(cc.Vault{
+ Address: vaultAddr,
+ Token: vaultToken,
+ })
+ if err != nil {
+ t.Fatalf("new set err: %s", err)
+ }
+
+ return s
+}
+
+func TestGetKv(t *testing.T) {
+ s := initClient(t)
+ kt := kit.New()
+
+ opt := &types.GetLastKvOpt{
+ BizID: 2,
+ AppID: 1,
+ Key: "conf",
+ }
+
+ _, _, err := s.GetLastKv(kt, opt)
+ if err != nil {
+ t.Fatalf("GetLastKv err: %s", err)
+ }
+}
+
+func BenchmarkGetKv(b *testing.B) {
+ s := initClient(b)
+ kt := kit.New()
+
+ opt := &types.GetLastKvOpt{
+ BizID: 2,
+ AppID: 1,
+ Key: "conf",
+ }
+
+ for i := 0; i < b.N; i++ {
+ _, _, err := s.GetLastKv(kt, opt)
+ if err != nil {
+ b.Fatalf("GetLastKv err: %s", err)
+ }
+ }
+}
+
+func BenchmarkParallelGetKv(b *testing.B) {
+ s := initClient(b)
+ kt := kit.New()
+
+ opt := &types.GetLastKvOpt{
+ BizID: 2,
+ AppID: 1,
+ Key: "conf",
+ }
+
+ b.RunParallel(func(pb *testing.PB) {
+ for pb.Next() {
+ _, _, err := s.GetLastKv(kt, opt)
+ if err != nil {
+ b.Fatalf("GetLastKv err: %s", err)
+ }
+ }
+ })
+}
diff --git a/bcs-services/bcs-bscp/ui/src/assets/fonts/iconcool.eot b/bcs-services/bcs-bscp/ui/src/assets/fonts/iconcool.eot
index 97efba8d96..71b88ebae1 100644
Binary files a/bcs-services/bcs-bscp/ui/src/assets/fonts/iconcool.eot and b/bcs-services/bcs-bscp/ui/src/assets/fonts/iconcool.eot differ
diff --git a/bcs-services/bcs-bscp/ui/src/assets/fonts/iconcool.svg b/bcs-services/bcs-bscp/ui/src/assets/fonts/iconcool.svg
index d6f5a41a2a..e16e53150b 100644
--- a/bcs-services/bcs-bscp/ui/src/assets/fonts/iconcool.svg
+++ b/bcs-services/bcs-bscp/ui/src/assets/fonts/iconcool.svg
@@ -89,6 +89,12 @@
+
+
+
+
+
+
diff --git a/bcs-services/bcs-bscp/ui/src/assets/fonts/iconcool.ttf b/bcs-services/bcs-bscp/ui/src/assets/fonts/iconcool.ttf
index ca7a6c67df..c9d92583e0 100644
Binary files a/bcs-services/bcs-bscp/ui/src/assets/fonts/iconcool.ttf and b/bcs-services/bcs-bscp/ui/src/assets/fonts/iconcool.ttf differ
diff --git a/bcs-services/bcs-bscp/ui/src/assets/fonts/iconcool.woff b/bcs-services/bcs-bscp/ui/src/assets/fonts/iconcool.woff
index ac3fe35dad..6e0b3fc819 100644
Binary files a/bcs-services/bcs-bscp/ui/src/assets/fonts/iconcool.woff and b/bcs-services/bcs-bscp/ui/src/assets/fonts/iconcool.woff differ
diff --git a/bcs-services/bcs-bscp/ui/src/css/common.scss b/bcs-services/bcs-bscp/ui/src/css/common.scss
index 27532e4e14..4703571dea 100644
--- a/bcs-services/bcs-bscp/ui/src/css/common.scss
+++ b/bcs-services/bcs-bscp/ui/src/css/common.scss
@@ -29,4 +29,8 @@
.bk-textarea.is-focused:not(.is-readonly),
.bk-select.is-focus .bk-select-trigger .bk-input--default {
border-color: #3a84ff;
+}
+
+.info-box-style .bk-modal-content {
+ min-height: auto !important;
}
\ No newline at end of file
diff --git a/bcs-services/bcs-bscp/ui/src/css/font.css b/bcs-services/bcs-bscp/ui/src/css/font.css
index cb55013119..1a7366b1b2 100644
--- a/bcs-services/bcs-bscp/ui/src/css/font.css
+++ b/bcs-services/bcs-bscp/ui/src/css/font.css
@@ -30,67 +30,51 @@
.icon-help-fill:before {
content: "\e107";
}
-
.icon-help:before {
content: "\e106";
}
-
.icon-help-document-fill:before {
content: "\e105";
}
-
.icon-edit-small:before {
content: "\e104";
}
-
.icon-configuration-line:before {
content: "\e101";
}
-
.icon-time-2:before {
content: "\e102";
}
-
.icon-reduce:before {
content: "\e108";
}
-
.icon-add:before {
content: "\e109";
}
-
.icon-app-store:before {
content: "\e10a";
}
-
.icon-revoke:before {
content: "\e10b";
}
-
.icon-tags:before {
content: "\e10c";
}
-
.icon-block-shape:before {
content: "\e10d";
}
-
.icon-empty:before {
content: "\e10e";
}
-
.icon-folder:before {
content: "\e10f";
}
-
.icon-setting:before {
content: "\e110";
}
-
.icon-separator:before {
content: "\e111";
}
-
.icon-resources-fill:before {
content: "\e112";
}
@@ -103,3 +87,9 @@
.icon-resources:before {
content: "\e115";
}
+.icon-lang-en:before {
+ content: "\e116";
+}
+.icon-lang-cn:before {
+ content: "\e117";
+}
diff --git a/bcs-services/bcs-bscp/ui/src/utils/hooks/use-modal-close-confirmation.ts b/bcs-services/bcs-bscp/ui/src/utils/hooks/use-modal-close-confirmation.ts
index 892b3dd3b3..dcf9f413d6 100644
--- a/bcs-services/bcs-bscp/ui/src/utils/hooks/use-modal-close-confirmation.ts
+++ b/bcs-services/bcs-bscp/ui/src/utils/hooks/use-modal-close-confirmation.ts
@@ -5,6 +5,7 @@ const useModalCloseConfirmation = (title?: string, subTitle?: string) => new Pro
title: title || localT('确认离开当前页?'),
subTitle: subTitle || localT('离开会导致未保存信息丢失'),
confirmText: localT('离开'),
+ 'ext-cls': 'info-box-style',
onConfirm: () => {
resolve(true);
},
diff --git a/bcs-services/bcs-bscp/ui/src/views/space/credentials/index.vue b/bcs-services/bcs-bscp/ui/src/views/space/credentials/index.vue
index 7c87ecb91b..eede3fb596 100644
--- a/bcs-services/bcs-bscp/ui/src/views/space/credentials/index.vue
+++ b/bcs-services/bcs-bscp/ui/src/views/space/credentials/index.vue
@@ -507,6 +507,7 @@ const handelToggleEnable = async (credential: ICredentialItem) => {
InfoBox({
title: t('确定禁用此密钥'),
subTitle: t('禁用密钥后,使用此密钥的应用将无法正常使用 SDK/API 拉取配置'),
+ 'ext-cls': 'info-box-style',
confirmText: t('禁用'),
onConfirm: async () => {
const params = {
diff --git a/bcs-services/bcs-bscp/ui/src/views/space/scripts/list/create-script.vue b/bcs-services/bcs-bscp/ui/src/views/space/scripts/list/create-script.vue
index 5ade7f0ed1..b4d088b734 100644
--- a/bcs-services/bcs-bscp/ui/src/views/space/scripts/list/create-script.vue
+++ b/bcs-services/bcs-bscp/ui/src/views/space/scripts/list/create-script.vue
@@ -91,7 +91,12 @@ const formDataContent = ref({
});
const showContent = computed({
get: () => (formData.value.type === 'shell' ? formDataContent.value.shell : formDataContent.value.python),
- set: val => (formData.value.type === 'shell' ? formDataContent.value.shell = val : formDataContent.value.python = val),
+ set: (val) => {
+ if (!val.endsWith('\n')) {
+ val += '\n';
+ }
+ formData.value.type === 'shell' ? formDataContent.value.shell = val : formDataContent.value.python = val;
+ },
});
const rules = {
diff --git a/bcs-services/bcs-bscp/ui/src/views/space/scripts/version-manage/index.vue b/bcs-services/bcs-bscp/ui/src/views/space/scripts/version-manage/index.vue
index 18ce138c83..c3868b92c9 100644
--- a/bcs-services/bcs-bscp/ui/src/views/space/scripts/version-manage/index.vue
+++ b/bcs-services/bcs-bscp/ui/src/views/space/scripts/version-manage/index.vue
@@ -288,6 +288,7 @@ const handlePublishClick = (version: IScriptVersion) => {
InfoBox({
title: t('确定上线此版本?'),
subTitle: t('上线后,之前的线上版本将被置为「已下线」状态'),
+ 'ext-cls': 'info-box-style',
// infoType: 'warning',
confirmText: t('确定'),
onConfirm: async () => {
diff --git a/bcs-services/bcs-bscp/ui/src/views/space/scripts/version-manage/version-edit.vue b/bcs-services/bcs-bscp/ui/src/views/space/scripts/version-manage/version-edit.vue
index 1287744e73..052f38b583 100644
--- a/bcs-services/bcs-bscp/ui/src/views/space/scripts/version-manage/version-edit.vue
+++ b/bcs-services/bcs-bscp/ui/src/views/space/scripts/version-manage/version-edit.vue
@@ -107,6 +107,9 @@ const handleSubmit = async () => {
}
try {
pending.value = true;
+ if (!localVal.value.content.endsWith('\n')) {
+ localVal.value.content += '\n';
+ }
const { name, memo, content } = localVal.value;
const params = { name, memo, content };
if (localVal.value.id) {
diff --git a/bcs-services/bcs-bscp/ui/src/views/space/service/detail/components/modify-group-publish.vue b/bcs-services/bcs-bscp/ui/src/views/space/service/detail/components/modify-group-publish.vue
index 60ddcba4a5..552e292b41 100644
--- a/bcs-services/bcs-bscp/ui/src/views/space/service/detail/components/modify-group-publish.vue
+++ b/bcs-services/bcs-bscp/ui/src/views/space/service/detail/components/modify-group-publish.vue
@@ -78,7 +78,7 @@ import VersionLayout from '../config/components/version-layout.vue';
import ConfirmDialog from './publish-version/confirm-dialog.vue';
import SelectGroup from './publish-version/select-group/index.vue';
import VersionDiff from '../config/components/version-diff/index.vue';
-import { useRoute, useRouter } from 'vue-router';
+import { useRouter } from 'vue-router';
import { getConfigVersionList } from '../../../../../api/config';
import { IConfigVersion } from '../../../../../../types/config';
@@ -98,10 +98,7 @@ const props = defineProps<{
const emit = defineEmits(['confirm']);
-const route = useRoute();
const router = useRouter();
-const bkBizId = String(route.params.spaceId);
-const appId = Number(route.params.appId);
const versionList = ref([]);
const isSelectGroupPanelOpen = ref(false);
const isDiffSliderShow = ref(false);
@@ -111,6 +108,7 @@ const groups = ref([]);
const baseVersionId = ref(0);
const selectGroupRef = ref();
+
// 已上线分组
const releasedGroups = computed(() => versionData.value.status.released_groups.map(group => group.id));
@@ -140,7 +138,7 @@ const handleDiffOrPublish = () => {
// 获取所有对比基准版本
const getVersionList = async () => {
try {
- const res = await getConfigVersionList(bkBizId, appId, { start: 0, all: true });
+ const res = await getConfigVersionList(props.bkBizId, props.appId, { start: 0, all: true });
versionList.value = res.data.details.filter((item: IConfigVersion) => item.id !== versionData.value.id && item.status.publish_status === 'partial_released');
} catch (e) {
console.error(e);
@@ -200,12 +198,14 @@ const handleConfirm = (haveCredentials: boolean) => {
if (haveCredentials) {
InfoBox({
infoType: 'success',
+ 'ext-cls': 'info-box-style',
title: t('调整分组上线成功'),
dialogType: 'confirm',
});
} else {
InfoBox({
infoType: 'success',
+ 'ext-cls': 'info-box-style',
title: t('调整分组上线成功'),
confirmText: t('新增服务密钥'),
cancelText: t('稍后再说'),
diff --git a/bcs-services/bcs-bscp/ui/src/views/space/service/detail/components/publish-version/index.vue b/bcs-services/bcs-bscp/ui/src/views/space/service/detail/components/publish-version/index.vue
index ff5c9c409e..f2299eaeeb 100644
--- a/bcs-services/bcs-bscp/ui/src/views/space/service/detail/components/publish-version/index.vue
+++ b/bcs-services/bcs-bscp/ui/src/views/space/service/detail/components/publish-version/index.vue
@@ -183,6 +183,7 @@ const handleConfirm = (haveCredentials: boolean) => {
if (haveCredentials) {
InfoBox({
infoType: 'success',
+ 'ext-cls': 'info-box-style',
title: t('版本已上线'),
dialogType: 'confirm',
});
@@ -190,6 +191,7 @@ const handleConfirm = (haveCredentials: boolean) => {
InfoBox({
infoType: 'success',
title: t('版本已上线'),
+ 'ext-cls': 'info-box-style',
confirmText: t('新增服务密钥'),
cancelText: t('稍后再说'),
onConfirm: () => {
diff --git a/bcs-services/bcs-bscp/ui/src/views/space/service/detail/config/components/version-diff/aside-menu/configs-kv.vue b/bcs-services/bcs-bscp/ui/src/views/space/service/detail/config/components/version-diff/aside-menu/configs-kv.vue
index 334c3a239e..1ac0c04240 100644
--- a/bcs-services/bcs-bscp/ui/src/views/space/service/detail/config/components/version-diff/aside-menu/configs-kv.vue
+++ b/bcs-services/bcs-bscp/ui/src/views/space/service/detail/config/components/version-diff/aside-menu/configs-kv.vue
@@ -94,7 +94,7 @@ const baseVariables = ref([]);
// 汇总的配置文件列表,包含未修改、增加、删除、修改的所有配置文件
const aggregatedList = ref([]);
const groupedConfigListOnShow = ref([]);
-const isOnlyShowDiff = ref(false); // 只显示差异项
+const isOnlyShowDiff = ref(true); // 只显示差异项
const isOpenSearch = ref(false);
const searchStr = ref('');
const isSearchEmpty = ref(false);
@@ -162,11 +162,6 @@ onMounted(async () => {
aggregatedList.value.sort((a, b) => a.key.charCodeAt(0) - b.key.charCodeAt(0));
groupedConfigListOnShow.value = aggregatedList.value.slice();
setDefaultSelected();
- // 如果是上线版本 默认选中只差看差异项
- if (props.isPublish) {
- isOnlyShowDiff.value = true;
- handleSearch();
- }
});
// 获取当前版本和基准版本的所有配置文件列表(非模板配置和套餐下模板)
diff --git a/bcs-services/bcs-bscp/ui/src/views/space/service/detail/config/components/version-diff/aside-menu/configs.vue b/bcs-services/bcs-bscp/ui/src/views/space/service/detail/config/components/version-diff/aside-menu/configs.vue
index 6c666fbb48..fdaa509a59 100644
--- a/bcs-services/bcs-bscp/ui/src/views/space/service/detail/config/components/version-diff/aside-menu/configs.vue
+++ b/bcs-services/bcs-bscp/ui/src/views/space/service/detail/config/components/version-diff/aside-menu/configs.vue
@@ -156,7 +156,7 @@ const baseVariables = ref([]);
// 汇总的配置文件列表,包含未修改、增加、删除、修改的所有配置文件
const aggregatedList = ref([]);
const groupedConfigListOnShow = ref([]);
-const isOnlyShowDiff = ref(false); // 只显示差异项
+const isOnlyShowDiff = ref(true); // 只显示差异项
const isOpenSearch = ref(false);
const searchStr = ref('');
const isSearchEmpty = ref(false);
@@ -236,11 +236,6 @@ onMounted(async () => {
aggregatedList.value = calcDiff();
groupedConfigListOnShow.value = aggregatedList.value.slice();
setDefaultSelected();
- // 如果是上线版本 默认选中只差看差异项
- if (props.isPublish) {
- isOnlyShowDiff.value = true;
- handleSearch();
- }
});
// 判断版本是否为未命名版本
diff --git a/bcs-services/bcs-bscp/ui/src/views/space/service/detail/config/components/version-diff/index.vue b/bcs-services/bcs-bscp/ui/src/views/space/service/detail/config/components/version-diff/index.vue
index 2a1a60893a..c329a63498 100644
--- a/bcs-services/bcs-bscp/ui/src/views/space/service/detail/config/components/version-diff/index.vue
+++ b/bcs-services/bcs-bscp/ui/src/views/space/service/detail/config/components/version-diff/index.vue
@@ -92,8 +92,8 @@ const props = defineProps<{
const emits = defineEmits(['update:show', 'publish']);
const route = useRoute();
-const bkBizId = String(route.params.spaceId);
-const appId = Number(route.params.appId);
+const bkBizId = ref(String(route.params.spaceId));
+const appId = ref(Number(route.params.appId));
const versionList = ref([]);
const versionListLoading = ref(false);
const selectedBaseVersion = ref(); // 基准版本ID
@@ -125,6 +125,15 @@ watch(
},
);
+watch(
+ () => route.params.appId,
+ (val) => {
+ if (val) {
+ appId.value = Number(val);
+ }
+ },
+);
+
// 获取所有对比基准版本
const getVersionList = async () => {
try {
@@ -133,7 +142,7 @@ const getVersionList = async () => {
versionList.value = props.versionDiffList;
return;
}
- const res = await getConfigVersionList(bkBizId, appId, { start: 0, all: true });
+ const res = await getConfigVersionList(bkBizId.value, appId.value, { start: 0, all: true });
versionList.value = res.data.details.filter((item: IConfigVersion) => item.id !== props.currentVersion.id);
} catch (e) {
console.error(e);
diff --git a/bcs-services/bcs-bscp/ui/src/views/space/service/detail/config/config-list/config-table-list/config-form.vue b/bcs-services/bcs-bscp/ui/src/views/space/service/detail/config/config-list/config-table-list/config-form.vue
index ee343f7f0b..ec07c92296 100644
--- a/bcs-services/bcs-bscp/ui/src/views/space/service/detail/config/config-list/config-table-list/config-form.vue
+++ b/bcs-services/bcs-bscp/ui/src/views/space/service/detail/config/config-list/config-table-list/config-form.vue
@@ -321,6 +321,9 @@ const handleSelectPrivilege = (index: number, val: number[]) => {
};
const handleStringContentChange = (val: string) => {
+ if (!val.endsWith('\n')) {
+ val += '\n';
+ }
stringContent.value = val;
change();
};
diff --git a/bcs-services/bcs-bscp/ui/src/views/space/service/detail/config/config-list/config-table-list/tables/table-with-pagination.vue b/bcs-services/bcs-bscp/ui/src/views/space/service/detail/config/config-list/config-table-list/tables/table-with-pagination.vue
index b9c72092e2..88b5f814c6 100644
--- a/bcs-services/bcs-bscp/ui/src/views/space/service/detail/config/config-list/config-table-list/tables/table-with-pagination.vue
+++ b/bcs-services/bcs-bscp/ui/src/views/space/service/detail/config/config-list/config-table-list/tables/table-with-pagination.vue
@@ -164,6 +164,7 @@ const handleDel = (config: IConfigItem) => {
InfoBox({
title: `确认是否删除配置文件【${config.spec.name}】?`,
infoType: 'danger',
+ 'ext-cls': 'info-box-style',
headerAlign: 'center' as const,
footerAlign: 'center' as const,
onConfirm: async () => {
diff --git a/bcs-services/bcs-bscp/ui/src/views/space/service/list/components/edit-service.vue b/bcs-services/bcs-bscp/ui/src/views/space/service/list/components/edit-service.vue
index d006d2ecf0..3a04fab9b9 100644
--- a/bcs-services/bcs-bscp/ui/src/views/space/service/list/components/edit-service.vue
+++ b/bcs-services/bcs-bscp/ui/src/views/space/service/list/components/edit-service.vue
@@ -150,6 +150,7 @@ const handleEditConfirm = async () => {
if (res) {
InfoBox({
infoType: 'danger',
+ 'ext-cls': 'info-box-style',
title: `调整服务数据类型${serviceEditForm.value.data_type}失败`,
subTitle: `该服务下存在非${serviceEditForm.value.data_type}类型的配置项,如需修改,请先调整该服务下的所有配置项数据类型为${serviceEditForm.value.data_type}`,
dialogType: 'confirm',
diff --git a/bcs-services/bcs-bscp/ui/src/views/space/templates/list/space/selector.vue b/bcs-services/bcs-bscp/ui/src/views/space/templates/list/space/selector.vue
index c758aaef8a..7957930243 100644
--- a/bcs-services/bcs-bscp/ui/src/views/space/templates/list/space/selector.vue
+++ b/bcs-services/bcs-bscp/ui/src/views/space/templates/list/space/selector.vue
@@ -181,6 +181,7 @@ const handleDelete = async (space: ITemplateSpaceItem) => {
if (res.count > 0) {
InfoBox({
title: `${t('未能删除')}【${space.spec.name}】`,
+ 'ext-cls': 'info-box-style',
subTitle: t('请先确认删除此空间下所有配置文件'),
dialogType: 'confirm',
confirmText: t('我知道了'),
@@ -188,6 +189,7 @@ const handleDelete = async (space: ITemplateSpaceItem) => {
} else if (packageRes.count > 0) {
InfoBox({
title: `${t('未能删除')}【${space.spec.name}】`,
+ 'ext-cls': 'info-box-style',
subTitle: t('请先确认删除此空间下所有配置套餐'),
dialogType: 'confirm',
confirmText: t('我知道了'),
diff --git a/bcs-services/bcs-helm-manager/internal/actions/release/expend.go b/bcs-services/bcs-helm-manager/internal/actions/release/expend.go
new file mode 100644
index 0000000000..ebc51ae2ba
--- /dev/null
+++ b/bcs-services/bcs-helm-manager/internal/actions/release/expend.go
@@ -0,0 +1,162 @@
+/*
+ * Tencent is pleased to support the open source community by making Blueking Container Service available.
+ * Copyright (C) 2019 THL A29 Limited, a Tencent company. All rights reserved.
+ * Licensed under the MIT License (the "License"); you may not use this file except
+ * in compliance with the License. You may obtain a copy of the License at
+ * http://opensource.org/licenses/MIT
+ * Unless required by applicable law or agreed to in writing, software distributed under
+ * the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND,
+ * either express or implied. See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package release
+
+import (
+ "context"
+
+ "github.com/Tencent/bk-bcs/bcs-common/common/blog"
+ _struct "github.com/golang/protobuf/ptypes/struct"
+ corev1 "k8s.io/api/core/v1"
+ networkingv1 "k8s.io/api/networking/v1"
+ metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
+
+ "github.com/Tencent/bk-bcs/bcs-services/bcs-helm-manager/internal/common"
+ "github.com/Tencent/bk-bcs/bcs-services/bcs-helm-manager/internal/component"
+ "github.com/Tencent/bk-bcs/bcs-services/bcs-helm-manager/internal/release"
+ "github.com/Tencent/bk-bcs/bcs-services/bcs-helm-manager/internal/utils/contextx"
+ helmmanager "github.com/Tencent/bk-bcs/bcs-services/bcs-helm-manager/proto/bcs-helm-manager"
+)
+
+// NewGetReleaseExtendAction return a new GetGetReleaseExtendAction instance
+func NewGetReleaseExtendAction(releaseHandler release.Handler) *GetReleaseExtendAction {
+ return &GetReleaseExtendAction{
+ releaseHandler: releaseHandler,
+ }
+}
+
+// GetReleaseExtendAction provides the action to do get release expend
+type GetReleaseExtendAction struct {
+ ctx context.Context
+
+ releaseHandler release.Handler
+
+ req *helmmanager.GetReleaseDetailExtendReq
+ resp *helmmanager.CommonResp
+}
+
+// Handle the release expend getting process
+func (g *GetReleaseExtendAction) Handle(ctx context.Context,
+ req *helmmanager.GetReleaseDetailExtendReq, resp *helmmanager.CommonResp) error {
+ g.ctx = ctx
+ g.req = req
+ g.resp = resp
+
+ if err := g.req.Validate(); err != nil {
+ blog.Errorf("get release expend failed, invalid request, %s, param: %v", err.Error(), g.req)
+ g.setResp(common.ErrHelmManagerRequestParamInvalid, err.Error(), nil)
+ return nil
+ }
+
+ return g.getResource()
+}
+
+func (g *GetReleaseExtendAction) getResource() error {
+ projectCode := contextx.GetProjectCodeFromCtx(g.ctx)
+ clusterID := g.req.GetClusterID()
+ namespace := g.req.GetNamespace()
+ name := g.req.GetName()
+
+ labelSelector := "app.kubernetes.io/instance=" + name
+ // get k8s client set
+ clientSet, err := component.GetK8SClientByClusterID(clusterID)
+ if err != nil {
+ g.setResp(common.ErrHelmManagerGetActionFailed, err.Error(), nil)
+ return nil
+ }
+ servicesList, err := clientSet.CoreV1().Services(namespace).List(g.ctx,
+ metav1.ListOptions{LabelSelector: labelSelector})
+ if err != nil {
+ g.setResp(common.ErrHelmManagerGetActionFailed, err.Error(), nil)
+ return nil
+ }
+
+ ingressestList, err := clientSet.NetworkingV1().Ingresses(namespace).List(g.ctx,
+ metav1.ListOptions{LabelSelector: labelSelector})
+ if err != nil {
+ g.setResp(common.ErrHelmManagerGetActionFailed, err.Error(), nil)
+ return nil
+ }
+
+ secretsList, err := clientSet.CoreV1().Secrets(namespace).List(g.ctx,
+ metav1.ListOptions{LabelSelector: labelSelector})
+ if err != nil {
+ g.setResp(common.ErrHelmManagerGetActionFailed, err.Error(), nil)
+ return nil
+ }
+
+ rsp := map[string]interface{}{
+ "service": getService(servicesList),
+ "ingress": getIngress(ingressestList),
+ "secret": getSecret(secretsList),
+ }
+
+ result, err := common.MarshalInterfaceToValue(rsp)
+ if err != nil {
+ blog.Errorf("marshal rsp err, %s", err.Error())
+ g.setResp(common.ErrHelmManagerGetActionFailed, err.Error(), nil)
+ return nil
+ }
+
+ g.setResp(common.ErrHelmManagerSuccess, "ok", result)
+ blog.Infof("get release expend successfully, projectCode: %s, clusterID: %s, namespace: %s, name: %s",
+ projectCode, clusterID, namespace, name)
+ return nil
+}
+
+func getService(serviceList *corev1.ServiceList) []map[string]interface{} {
+ rsps := make([]map[string]interface{}, 0)
+ for _, v := range serviceList.Items {
+ rsp := map[string]interface{}{
+ "name": v.ObjectMeta.Name,
+ "clusterIPs": v.Spec.ClusterIPs,
+ "port": v.Spec.Ports,
+ }
+ rsps = append(rsps, rsp)
+ }
+ return rsps
+}
+
+func getIngress(ingressList *networkingv1.IngressList) []map[string]interface{} {
+ rsps := make([]map[string]interface{}, 0)
+ for _, v := range ingressList.Items {
+ rsp := map[string]interface{}{
+ "name": v.ObjectMeta.Name,
+ "rules": v.Spec.Rules,
+ }
+ rsps = append(rsps, rsp)
+ }
+ return rsps
+}
+
+func getSecret(secretList *corev1.SecretList) []map[string]interface{} {
+ rsps := make([]map[string]interface{}, 0)
+ for _, v := range secretList.Items {
+ rsp := map[string]interface{}{
+ "name": v.ObjectMeta.Name,
+ "data": v.Data,
+ }
+ rsps = append(rsps, rsp)
+ }
+ return rsps
+}
+
+func (g *GetReleaseExtendAction) setResp(err common.HelmManagerError, message string,
+ r *_struct.Struct) {
+ code := err.Int32()
+ msg := err.ErrorMessage(message)
+ g.resp.Code = &code
+ g.resp.Message = &msg
+ g.resp.Result = err.OK()
+ g.resp.Data = r
+}
diff --git a/bcs-services/bcs-helm-manager/internal/auth/preset.go b/bcs-services/bcs-helm-manager/internal/auth/preset.go
index 6af1ddf133..bf69539007 100644
--- a/bcs-services/bcs-helm-manager/internal/auth/preset.go
+++ b/bcs-services/bcs-helm-manager/internal/auth/preset.go
@@ -39,18 +39,19 @@ var ActionPermissions = map[string]string{
"HelmManager.GetChartRelease": project.CanViewProjectOperation,
// Release
- "HelmManager.ListReleaseV1": project.CanViewProjectOperation,
- "HelmManager.GetReleaseDetailV1": namespace.CanViewNamespaceScopedResourceOperation,
- "HelmManager.InstallReleaseV1": namespace.CanCreateNamespaceScopedResourceOperation,
- "HelmManager.UninstallReleaseV1": namespace.CanDeleteNamespaceScopedResourceOperation,
- "HelmManager.UpgradeReleaseV1": namespace.CanUpdateNamespaceScopedResourceOperation,
- "HelmManager.RollbackReleaseV1": namespace.CanUpdateNamespaceScopedResourceOperation,
- "HelmManager.ReleasePreview": project.CanViewProjectOperation,
- "HelmManager.GetReleaseHistory": namespace.CanViewNamespaceScopedResourceOperation,
- "HelmManager.GetReleaseManifest": namespace.CanViewNamespaceScopedResourceOperation,
- "HelmManager.GetReleaseStatus": project.CanViewProjectOperation,
- "HelmManager.GetReleasePods": project.CanViewProjectOperation,
- "HelmManager.ImportClusterRelease": project.CanViewProjectOperation,
+ "HelmManager.ListReleaseV1": project.CanViewProjectOperation,
+ "HelmManager.GetReleaseDetailV1": namespace.CanViewNamespaceScopedResourceOperation,
+ "HelmManager.InstallReleaseV1": namespace.CanCreateNamespaceScopedResourceOperation,
+ "HelmManager.UninstallReleaseV1": namespace.CanDeleteNamespaceScopedResourceOperation,
+ "HelmManager.UpgradeReleaseV1": namespace.CanUpdateNamespaceScopedResourceOperation,
+ "HelmManager.RollbackReleaseV1": namespace.CanUpdateNamespaceScopedResourceOperation,
+ "HelmManager.ReleasePreview": project.CanViewProjectOperation,
+ "HelmManager.GetReleaseHistory": namespace.CanViewNamespaceScopedResourceOperation,
+ "HelmManager.GetReleaseManifest": namespace.CanViewNamespaceScopedResourceOperation,
+ "HelmManager.GetReleaseStatus": project.CanViewProjectOperation,
+ "HelmManager.GetReleaseDetailExtend": project.CanViewProjectOperation,
+ "HelmManager.GetReleasePods": project.CanViewProjectOperation,
+ "HelmManager.ImportClusterRelease": project.CanViewProjectOperation,
// Addons
"ClusterAddons.ListAddons": project.CanViewProjectOperation,
diff --git a/bcs-services/bcs-helm-manager/internal/handler/release.go b/bcs-services/bcs-helm-manager/internal/handler/release.go
index 37bfb76d28..b6be11fd5e 100644
--- a/bcs-services/bcs-helm-manager/internal/handler/release.go
+++ b/bcs-services/bcs-helm-manager/internal/handler/release.go
@@ -109,6 +109,14 @@ func (hm *HelmManager) GetReleaseStatus(ctx context.Context,
return action.Handle(ctx, req, resp)
}
+// GetReleaseDetailExtend provide the actions to do get release detail extend
+func (hm *HelmManager) GetReleaseDetailExtend(
+ ctx context.Context, req *helmmanager.GetReleaseDetailExtendReq, resp *helmmanager.CommonResp) error {
+ defer recorder(ctx, "GetReleaseDetailExtend", req, resp)()
+ action := actionRelease.NewGetReleaseExtendAction(hm.releaseHandler)
+ return action.Handle(ctx, req, resp)
+}
+
// GetReleasePods provide the actions to do get release pods
func (hm *HelmManager) GetReleasePods(ctx context.Context,
req *helmmanager.GetReleasePodsReq, resp *helmmanager.CommonListResp) error {
diff --git a/bcs-services/bcs-helm-manager/proto/bcs-helm-manager/bcs-helm-manager.pb.go b/bcs-services/bcs-helm-manager/proto/bcs-helm-manager/bcs-helm-manager.pb.go
index 9af633076d..feb571277b 100644
--- a/bcs-services/bcs-helm-manager/proto/bcs-helm-manager/bcs-helm-manager.pb.go
+++ b/bcs-services/bcs-helm-manager/proto/bcs-helm-manager/bcs-helm-manager.pb.go
@@ -5226,6 +5226,69 @@ func (m *GetReleaseStatusReq) GetProjectCode() string {
return ""
}
+type GetReleaseDetailExtendReq struct {
+ Name *string `protobuf:"bytes,1,req,name=name" json:"name,omitempty"`
+ Namespace *string `protobuf:"bytes,2,req,name=namespace" json:"namespace,omitempty"`
+ ClusterID *string `protobuf:"bytes,3,req,name=clusterID" json:"clusterID,omitempty"`
+ ProjectCode *string `protobuf:"bytes,4,req,name=projectCode" json:"projectCode,omitempty"`
+ XXX_NoUnkeyedLiteral struct{} `json:"-"`
+ XXX_unrecognized []byte `json:"-"`
+ XXX_sizecache int32 `json:"-"`
+}
+
+func (m *GetReleaseDetailExtendReq) Reset() { *m = GetReleaseDetailExtendReq{} }
+func (m *GetReleaseDetailExtendReq) String() string { return proto.CompactTextString(m) }
+func (*GetReleaseDetailExtendReq) ProtoMessage() {}
+func (*GetReleaseDetailExtendReq) Descriptor() ([]byte, []int) {
+ return fileDescriptor_29783c92bc89288d, []int{67}
+}
+
+func (m *GetReleaseDetailExtendReq) XXX_Unmarshal(b []byte) error {
+ return xxx_messageInfo_GetReleaseDetailExtendReq.Unmarshal(m, b)
+}
+func (m *GetReleaseDetailExtendReq) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+ return xxx_messageInfo_GetReleaseDetailExtendReq.Marshal(b, m, deterministic)
+}
+func (m *GetReleaseDetailExtendReq) XXX_Merge(src proto.Message) {
+ xxx_messageInfo_GetReleaseDetailExtendReq.Merge(m, src)
+}
+func (m *GetReleaseDetailExtendReq) XXX_Size() int {
+ return xxx_messageInfo_GetReleaseDetailExtendReq.Size(m)
+}
+func (m *GetReleaseDetailExtendReq) XXX_DiscardUnknown() {
+ xxx_messageInfo_GetReleaseDetailExtendReq.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_GetReleaseDetailExtendReq proto.InternalMessageInfo
+
+func (m *GetReleaseDetailExtendReq) GetName() string {
+ if m != nil && m.Name != nil {
+ return *m.Name
+ }
+ return ""
+}
+
+func (m *GetReleaseDetailExtendReq) GetNamespace() string {
+ if m != nil && m.Namespace != nil {
+ return *m.Namespace
+ }
+ return ""
+}
+
+func (m *GetReleaseDetailExtendReq) GetClusterID() string {
+ if m != nil && m.ClusterID != nil {
+ return *m.ClusterID
+ }
+ return ""
+}
+
+func (m *GetReleaseDetailExtendReq) GetProjectCode() string {
+ if m != nil && m.ProjectCode != nil {
+ return *m.ProjectCode
+ }
+ return ""
+}
+
type GetReleasePodsReq struct {
Name *string `protobuf:"bytes,1,req,name=name" json:"name,omitempty"`
Namespace *string `protobuf:"bytes,2,req,name=namespace" json:"namespace,omitempty"`
@@ -5241,7 +5304,7 @@ func (m *GetReleasePodsReq) Reset() { *m = GetReleasePodsReq{} }
func (m *GetReleasePodsReq) String() string { return proto.CompactTextString(m) }
func (*GetReleasePodsReq) ProtoMessage() {}
func (*GetReleasePodsReq) Descriptor() ([]byte, []int) {
- return fileDescriptor_29783c92bc89288d, []int{67}
+ return fileDescriptor_29783c92bc89288d, []int{68}
}
func (m *GetReleasePodsReq) XXX_Unmarshal(b []byte) error {
@@ -5309,7 +5372,7 @@ func (m *ListAddonsReq) Reset() { *m = ListAddonsReq{} }
func (m *ListAddonsReq) String() string { return proto.CompactTextString(m) }
func (*ListAddonsReq) ProtoMessage() {}
func (*ListAddonsReq) Descriptor() ([]byte, []int) {
- return fileDescriptor_29783c92bc89288d, []int{68}
+ return fileDescriptor_29783c92bc89288d, []int{69}
}
func (m *ListAddonsReq) XXX_Unmarshal(b []byte) error {
@@ -5360,7 +5423,7 @@ func (m *ListAddonsResp) Reset() { *m = ListAddonsResp{} }
func (m *ListAddonsResp) String() string { return proto.CompactTextString(m) }
func (*ListAddonsResp) ProtoMessage() {}
func (*ListAddonsResp) Descriptor() ([]byte, []int) {
- return fileDescriptor_29783c92bc89288d, []int{69}
+ return fileDescriptor_29783c92bc89288d, []int{70}
}
func (m *ListAddonsResp) XXX_Unmarshal(b []byte) error {
@@ -5447,7 +5510,7 @@ func (m *Addons) Reset() { *m = Addons{} }
func (m *Addons) String() string { return proto.CompactTextString(m) }
func (*Addons) ProtoMessage() {}
func (*Addons) Descriptor() ([]byte, []int) {
- return fileDescriptor_29783c92bc89288d, []int{70}
+ return fileDescriptor_29783c92bc89288d, []int{71}
}
func (m *Addons) XXX_Unmarshal(b []byte) error {
@@ -5579,7 +5642,7 @@ func (m *GetAddonsDetailReq) Reset() { *m = GetAddonsDetailReq{} }
func (m *GetAddonsDetailReq) String() string { return proto.CompactTextString(m) }
func (*GetAddonsDetailReq) ProtoMessage() {}
func (*GetAddonsDetailReq) Descriptor() ([]byte, []int) {
- return fileDescriptor_29783c92bc89288d, []int{71}
+ return fileDescriptor_29783c92bc89288d, []int{72}
}
func (m *GetAddonsDetailReq) XXX_Unmarshal(b []byte) error {
@@ -5637,7 +5700,7 @@ func (m *GetAddonsDetailResp) Reset() { *m = GetAddonsDetailResp{} }
func (m *GetAddonsDetailResp) String() string { return proto.CompactTextString(m) }
func (*GetAddonsDetailResp) ProtoMessage() {}
func (*GetAddonsDetailResp) Descriptor() ([]byte, []int) {
- return fileDescriptor_29783c92bc89288d, []int{72}
+ return fileDescriptor_29783c92bc89288d, []int{73}
}
func (m *GetAddonsDetailResp) XXX_Unmarshal(b []byte) error {
@@ -5715,7 +5778,7 @@ func (m *InstallAddonsReq) Reset() { *m = InstallAddonsReq{} }
func (m *InstallAddonsReq) String() string { return proto.CompactTextString(m) }
func (*InstallAddonsReq) ProtoMessage() {}
func (*InstallAddonsReq) Descriptor() ([]byte, []int) {
- return fileDescriptor_29783c92bc89288d, []int{73}
+ return fileDescriptor_29783c92bc89288d, []int{74}
}
func (m *InstallAddonsReq) XXX_Unmarshal(b []byte) error {
@@ -5786,7 +5849,7 @@ func (m *InstallAddonsResp) Reset() { *m = InstallAddonsResp{} }
func (m *InstallAddonsResp) String() string { return proto.CompactTextString(m) }
func (*InstallAddonsResp) ProtoMessage() {}
func (*InstallAddonsResp) Descriptor() ([]byte, []int) {
- return fileDescriptor_29783c92bc89288d, []int{74}
+ return fileDescriptor_29783c92bc89288d, []int{75}
}
func (m *InstallAddonsResp) XXX_Unmarshal(b []byte) error {
@@ -5857,7 +5920,7 @@ func (m *UpgradeAddonsReq) Reset() { *m = UpgradeAddonsReq{} }
func (m *UpgradeAddonsReq) String() string { return proto.CompactTextString(m) }
func (*UpgradeAddonsReq) ProtoMessage() {}
func (*UpgradeAddonsReq) Descriptor() ([]byte, []int) {
- return fileDescriptor_29783c92bc89288d, []int{75}
+ return fileDescriptor_29783c92bc89288d, []int{76}
}
func (m *UpgradeAddonsReq) XXX_Unmarshal(b []byte) error {
@@ -5928,7 +5991,7 @@ func (m *UpgradeAddonsResp) Reset() { *m = UpgradeAddonsResp{} }
func (m *UpgradeAddonsResp) String() string { return proto.CompactTextString(m) }
func (*UpgradeAddonsResp) ProtoMessage() {}
func (*UpgradeAddonsResp) Descriptor() ([]byte, []int) {
- return fileDescriptor_29783c92bc89288d, []int{76}
+ return fileDescriptor_29783c92bc89288d, []int{77}
}
func (m *UpgradeAddonsResp) XXX_Unmarshal(b []byte) error {
@@ -5997,7 +6060,7 @@ func (m *StopAddonsReq) Reset() { *m = StopAddonsReq{} }
func (m *StopAddonsReq) String() string { return proto.CompactTextString(m) }
func (*StopAddonsReq) ProtoMessage() {}
func (*StopAddonsReq) Descriptor() ([]byte, []int) {
- return fileDescriptor_29783c92bc89288d, []int{77}
+ return fileDescriptor_29783c92bc89288d, []int{78}
}
func (m *StopAddonsReq) XXX_Unmarshal(b []byte) error {
@@ -6054,7 +6117,7 @@ func (m *StopAddonsResp) Reset() { *m = StopAddonsResp{} }
func (m *StopAddonsResp) String() string { return proto.CompactTextString(m) }
func (*StopAddonsResp) ProtoMessage() {}
func (*StopAddonsResp) Descriptor() ([]byte, []int) {
- return fileDescriptor_29783c92bc89288d, []int{78}
+ return fileDescriptor_29783c92bc89288d, []int{79}
}
func (m *StopAddonsResp) XXX_Unmarshal(b []byte) error {
@@ -6123,7 +6186,7 @@ func (m *UninstallAddonsReq) Reset() { *m = UninstallAddonsReq{} }
func (m *UninstallAddonsReq) String() string { return proto.CompactTextString(m) }
func (*UninstallAddonsReq) ProtoMessage() {}
func (*UninstallAddonsReq) Descriptor() ([]byte, []int) {
- return fileDescriptor_29783c92bc89288d, []int{79}
+ return fileDescriptor_29783c92bc89288d, []int{80}
}
func (m *UninstallAddonsReq) XXX_Unmarshal(b []byte) error {
@@ -6180,7 +6243,7 @@ func (m *UninstallAddonsResp) Reset() { *m = UninstallAddonsResp{} }
func (m *UninstallAddonsResp) String() string { return proto.CompactTextString(m) }
func (*UninstallAddonsResp) ProtoMessage() {}
func (*UninstallAddonsResp) Descriptor() ([]byte, []int) {
- return fileDescriptor_29783c92bc89288d, []int{80}
+ return fileDescriptor_29783c92bc89288d, []int{81}
}
func (m *UninstallAddonsResp) XXX_Unmarshal(b []byte) error {
@@ -6308,6 +6371,7 @@ func init() {
proto.RegisterType((*GetReleaseManifestResp)(nil), "helmmanager.GetReleaseManifestResp")
proto.RegisterMapType((map[string]*FileContent)(nil), "helmmanager.GetReleaseManifestResp.DataEntry")
proto.RegisterType((*GetReleaseStatusReq)(nil), "helmmanager.GetReleaseStatusReq")
+ proto.RegisterType((*GetReleaseDetailExtendReq)(nil), "helmmanager.GetReleaseDetailExtendReq")
proto.RegisterType((*GetReleasePodsReq)(nil), "helmmanager.GetReleasePodsReq")
proto.RegisterType((*ListAddonsReq)(nil), "helmmanager.ListAddonsReq")
proto.RegisterType((*ListAddonsResp)(nil), "helmmanager.ListAddonsResp")
@@ -6327,514 +6391,521 @@ func init() {
func init() { proto.RegisterFile("bcs-helm-manager.proto", fileDescriptor_29783c92bc89288d) }
var fileDescriptor_29783c92bc89288d = []byte{
- // 8112 bytes of a gzipped FileDescriptorProto
+ // 8223 bytes of a gzipped FileDescriptorProto
0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xec, 0x7d, 0x69, 0x70, 0x14, 0x47,
- 0xba, 0xe0, 0x56, 0xb7, 0x24, 0xa4, 0xd4, 0x49, 0x22, 0x81, 0xdc, 0x1c, 0x6e, 0xca, 0xc6, 0x86,
- 0x42, 0x07, 0x14, 0xf2, 0x81, 0x18, 0xdb, 0x94, 0x24, 0x06, 0x78, 0x60, 0x8c, 0xdb, 0xe3, 0x23,
- 0x78, 0xef, 0xad, 0x5f, 0x23, 0x15, 0xa2, 0x4d, 0x4b, 0xdd, 0xee, 0x6e, 0xc1, 0x32, 0x0e, 0xc7,
- 0x82, 0x8d, 0x40, 0x60, 0x09, 0xb1, 0x05, 0x36, 0x87, 0x64, 0x1e, 0xe2, 0xb0, 0xf1, 0x25, 0x01,
- 0xe3, 0x07, 0x42, 0x12, 0x10, 0x1b, 0x1b, 0xb1, 0xef, 0xbd, 0x8d, 0x89, 0x7d, 0x11, 0x3b, 0x31,
- 0xbb, 0x3b, 0x11, 0x33, 0x31, 0x11, 0xb3, 0xaa, 0x6a, 0x69, 0xf6, 0x60, 0x22, 0x76, 0x26, 0x26,
- 0x62, 0xf6, 0xcf, 0x46, 0x65, 0x66, 0x55, 0x65, 0x56, 0x55, 0xeb, 0xa2, 0x21, 0x24, 0xac, 0x3f,
- 0xa0, 0xfe, 0xf2, 0xa8, 0xcc, 0xef, 0xce, 0x2f, 0xbf, 0xcc, 0x04, 0xf3, 0x77, 0xd6, 0xc7, 0xcb,
- 0x77, 0xcb, 0xe1, 0xa6, 0xf2, 0xa6, 0x60, 0x73, 0xb0, 0x51, 0x8e, 0x55, 0x44, 0x63, 0x91, 0x44,
- 0x04, 0xe6, 0xea, 0x30, 0x02, 0xf2, 0x3d, 0xd1, 0x18, 0x89, 0x34, 0x86, 0xe5, 0xca, 0x60, 0x34,
- 0x54, 0xb9, 0x3b, 0x91, 0x88, 0xee, 0x8c, 0x34, 0xec, 0xc7, 0xf5, 0x7c, 0x8b, 0xa8, 0xa2, 0x60,
- 0x73, 0x73, 0x24, 0x11, 0x4c, 0x84, 0x22, 0xcd, 0x71, 0x5b, 0x29, 0xfa, 0xb5, 0xb3, 0x65, 0x57,
- 0x65, 0x3c, 0x11, 0x6b, 0xa9, 0x4f, 0x90, 0xd2, 0x32, 0xf4, 0x5f, 0x7d, 0x79, 0xa3, 0xdc, 0x5c,
- 0x1e, 0xdf, 0x17, 0x6c, 0x6c, 0x94, 0x63, 0x95, 0x91, 0x28, 0x6a, 0xef, 0xd2, 0xd7, 0x82, 0xbd,
- 0xc1, 0x70, 0xa8, 0x21, 0x98, 0x90, 0x2b, 0x8d, 0x3f, 0x70, 0x01, 0x7f, 0xd3, 0x0b, 0x40, 0x6d,
- 0xa4, 0xa9, 0x29, 0xd2, 0x1c, 0x90, 0xe3, 0x51, 0x58, 0x01, 0x32, 0xea, 0x23, 0x0d, 0x72, 0x29,
- 0xe7, 0xe7, 0x96, 0xe7, 0xd7, 0xf8, 0x14, 0x69, 0x81, 0x80, 0x00, 0x62, 0xe1, 0xc8, 0xbd, 0x53,
- 0x6a, 0xd7, 0xf9, 0xd1, 0x53, 0x67, 0x47, 0xfa, 0xfa, 0x92, 0x17, 0x0e, 0x06, 0x10, 0x18, 0x56,
- 0x83, 0x39, 0x4d, 0x72, 0x3c, 0x1e, 0x6c, 0x94, 0x4b, 0x3d, 0x7e, 0x6e, 0x79, 0x4e, 0x8d, 0x5f,
- 0x91, 0x16, 0x0b, 0x06, 0x4c, 0x84, 0x74, 0xab, 0xe1, 0x7b, 0x3d, 0xda, 0xc1, 0xbe, 0x80, 0x51,
- 0x08, 0x57, 0x83, 0xac, 0x98, 0x1c, 0x6f, 0x09, 0x27, 0x4a, 0xbd, 0x7e, 0x6e, 0x79, 0x76, 0xcd,
- 0x13, 0x8a, 0x34, 0x5f, 0x20, 0x20, 0x31, 0x0f, 0xb7, 0x4c, 0x0e, 0x9e, 0xd4, 0xce, 0x77, 0x07,
- 0x08, 0x14, 0xd6, 0x81, 0x8c, 0x86, 0x60, 0x22, 0x58, 0x9a, 0xe1, 0xe7, 0x96, 0xe7, 0x8a, 0x0b,
- 0x2a, 0x30, 0x86, 0x2a, 0x0c, 0x0c, 0x55, 0xbc, 0x81, 0x30, 0x54, 0xb3, 0x40, 0x91, 0x8a, 0x05,
- 0x54, 0xd3, 0xe8, 0x47, 0xfb, 0xf4, 0x9a, 0xd6, 0xd1, 0x1b, 0x40, 0x30, 0xf8, 0x02, 0xc8, 0x89,
- 0xc9, 0xef, 0xb7, 0xc8, 0xf1, 0xc4, 0xe6, 0xba, 0xd2, 0x4c, 0x34, 0x6c, 0xf4, 0x6d, 0x0b, 0x2a,
- 0x5a, 0x7f, 0x06, 0xac, 0x3f, 0x61, 0x08, 0x14, 0xee, 0x93, 0x77, 0xbe, 0x4b, 0xa1, 0xb7, 0x34,
- 0x0b, 0x8d, 0x64, 0x61, 0x05, 0x45, 0xf1, 0x8a, 0xb7, 0xe5, 0x9d, 0x92, 0x55, 0xa5, 0x86, 0x57,
- 0xa4, 0x27, 0x05, 0x7b, 0x43, 0x31, 0x4f, 0xfb, 0xfc, 0xe3, 0xd1, 0xb3, 0x27, 0x08, 0x52, 0xec,
- 0xc5, 0xd5, 0x4f, 0x2a, 0xd2, 0x22, 0xe0, 0x13, 0x28, 0xda, 0x88, 0x79, 0xa3, 0x07, 0xce, 0x25,
- 0x4f, 0x5d, 0xc5, 0x13, 0xe2, 0xff, 0xd1, 0x0b, 0x0a, 0x70, 0xe1, 0xd6, 0x50, 0x3c, 0x31, 0x13,
- 0x88, 0xb7, 0x91, 0x21, 0x9e, 0xcf, 0x41, 0x3c, 0x7d, 0x1e, 0x6f, 0x05, 0xc3, 0x2d, 0xf2, 0xe3,
- 0x40, 0xbf, 0x15, 0x8a, 0xf4, 0x0c, 0x78, 0x5a, 0xb0, 0x91, 0x48, 0x84, 0x98, 0x86, 0x6a, 0xdb,
- 0xe9, 0x91, 0x1e, 0x83, 0x92, 0x87, 0x38, 0x50, 0xc0, 0x7e, 0x12, 0x6e, 0x04, 0x99, 0x51, 0x39,
- 0xd6, 0x14, 0x47, 0xa4, 0x1c, 0x83, 0xd1, 0x4b, 0x15, 0xa9, 0x44, 0xc0, 0x55, 0x6d, 0x03, 0xc2,
- 0x40, 0x73, 0x18, 0x6c, 0xff, 0x22, 0xa4, 0xeb, 0x92, 0x61, 0xbc, 0x06, 0xf2, 0xa4, 0xbd, 0xc1,
- 0x50, 0x38, 0xb8, 0x33, 0x2c, 0x07, 0xe4, 0xf7, 0xab, 0x5f, 0x51, 0xa4, 0x1f, 0x81, 0x6a, 0x81,
- 0x01, 0x8a, 0x82, 0xf6, 0xf7, 0x57, 0x46, 0xfa, 0x2e, 0xd2, 0x3a, 0x4f, 0xeb, 0xee, 0x50, 0x8f,
- 0xf5, 0x68, 0x67, 0xfa, 0xd4, 0x13, 0x5f, 0xa8, 0x9d, 0x7d, 0xfa, 0xec, 0x3a, 0x3f, 0xd2, 0x3e,
- 0xbd, 0xc6, 0xff, 0x81, 0x03, 0xf9, 0x54, 0xe3, 0x69, 0xcf, 0xa0, 0xd5, 0xeb, 0x15, 0xe9, 0x25,
- 0xb0, 0x4e, 0x60, 0x07, 0x3d, 0xb1, 0x29, 0x13, 0x1c, 0xf6, 0xce, 0x01, 0xf3, 0x6a, 0x63, 0x72,
- 0x30, 0x21, 0x07, 0xe4, 0x68, 0x24, 0x1e, 0x4a, 0x44, 0x62, 0xfb, 0x03, 0xf2, 0xfb, 0x70, 0x33,
- 0xc8, 0x8d, 0xc6, 0x22, 0xef, 0xc9, 0xf5, 0x89, 0x5a, 0x63, 0xfe, 0x39, 0x35, 0xcf, 0x2a, 0xd2,
- 0x42, 0x81, 0x86, 0x8b, 0x79, 0xa3, 0x3d, 0xb7, 0x93, 0x5d, 0xbd, 0xc3, 0x83, 0x97, 0x92, 0x17,
- 0x0e, 0xfe, 0xa5, 0x26, 0x2b, 0x96, 0x51, 0xc4, 0x95, 0xfa, 0x03, 0x74, 0x1d, 0x58, 0x05, 0x32,
- 0x9a, 0x83, 0x4d, 0x14, 0x42, 0x8a, 0x05, 0x04, 0x10, 0xf3, 0x86, 0x07, 0x4f, 0xaa, 0x03, 0x27,
- 0xd5, 0x13, 0x1d, 0xc9, 0x2f, 0xaf, 0x59, 0x8d, 0x51, 0x21, 0x6c, 0x00, 0x19, 0x89, 0xfd, 0x51,
- 0x19, 0xe1, 0x22, 0xa7, 0x66, 0xbb, 0x22, 0xbd, 0x2a, 0x20, 0x80, 0xb8, 0x01, 0xb7, 0x4a, 0x5e,
- 0x1f, 0x54, 0xcf, 0x7f, 0x72, 0x7f, 0xa8, 0x7d, 0xd3, 0x86, 0xad, 0xaf, 0x2e, 0xdf, 0x24, 0x87,
- 0x9b, 0x30, 0x7c, 0x45, 0x99, 0x7f, 0xe3, 0x86, 0x6d, 0x1b, 0x02, 0x9b, 0x6b, 0x97, 0x63, 0xce,
- 0x1d, 0x1e, 0x68, 0x1f, 0xb9, 0xd7, 0xa5, 0xb6, 0xdd, 0xd4, 0x3e, 0x3b, 0x32, 0x3c, 0x78, 0x93,
- 0xd4, 0x0a, 0xa0, 0xce, 0xe0, 0x56, 0x90, 0x9d, 0x08, 0xee, 0x91, 0x23, 0x7b, 0xe5, 0x18, 0x92,
- 0xf2, 0xec, 0x9a, 0x55, 0x8a, 0x54, 0x2e, 0x98, 0x40, 0x71, 0x29, 0xc6, 0xd9, 0x70, 0xff, 0x80,
- 0x76, 0xfc, 0x4a, 0xb2, 0xb7, 0x47, 0xbd, 0x75, 0x43, 0xfd, 0xee, 0x8c, 0xda, 0x7d, 0x35, 0x79,
- 0xee, 0x10, 0xee, 0x2a, 0x60, 0x56, 0x86, 0xb5, 0x60, 0x4e, 0x4c, 0x8e, 0x46, 0xde, 0x0c, 0x6c,
- 0x25, 0x42, 0xae, 0x33, 0xb3, 0x60, 0xc0, 0xc4, 0x85, 0xb8, 0x0b, 0x32, 0x7e, 0xa3, 0xbd, 0xda,
- 0x7d, 0x4d, 0xfd, 0xfc, 0x40, 0xc0, 0xa8, 0x05, 0x6b, 0x41, 0x76, 0x4b, 0x5c, 0x8e, 0x21, 0x94,
- 0x65, 0x19, 0x68, 0x7f, 0x5a, 0x30, 0x81, 0x62, 0xa9, 0xad, 0x9b, 0xe4, 0xa9, 0xab, 0x5a, 0xdb,
- 0x2d, 0xf5, 0x44, 0x47, 0xc0, 0xac, 0x03, 0xd7, 0x83, 0xec, 0x68, 0x30, 0x1e, 0xdf, 0x17, 0x89,
- 0x35, 0x94, 0xce, 0x41, 0x9d, 0x3c, 0xad, 0x48, 0x4b, 0x05, 0x13, 0x28, 0x96, 0xd8, 0x3a, 0x51,
- 0xfb, 0x0e, 0xeb, 0x5c, 0x6c, 0x56, 0x80, 0xd5, 0x3a, 0x37, 0x36, 0x45, 0x12, 0x72, 0x69, 0x36,
- 0xc2, 0x0b, 0xd2, 0x29, 0x04, 0x24, 0x96, 0x98, 0x58, 0x19, 0xb9, 0xd7, 0x9d, 0xbc, 0xfa, 0x09,
- 0xc1, 0x04, 0x29, 0x86, 0xeb, 0x75, 0x75, 0xa7, 0xff, 0xa5, 0x63, 0x22, 0x07, 0x7d, 0x1e, 0x35,
- 0xb7, 0xa0, 0xba, 0x24, 0x58, 0x0d, 0x09, 0x0a, 0xac, 0x62, 0x18, 0x00, 0x05, 0xe4, 0x87, 0x81,
- 0x0a, 0x80, 0xba, 0x11, 0x14, 0xe9, 0x59, 0xc1, 0x56, 0x24, 0x96, 0xd0, 0x7d, 0x59, 0xd8, 0xb0,
- 0x55, 0x83, 0xaf, 0x19, 0x7d, 0x6e, 0x37, 0x30, 0x93, 0x6b, 0xa1, 0xd7, 0x56, 0x64, 0x1b, 0x1f,
- 0x46, 0x8e, 0xad, 0x0e, 0x5c, 0x0f, 0x72, 0x1b, 0x42, 0xf1, 0x68, 0x38, 0xb8, 0x7f, 0x9b, 0x3e,
- 0xc2, 0x3c, 0xd4, 0xdb, 0x12, 0x24, 0x23, 0x14, 0x5c, 0xcc, 0x53, 0xaf, 0x7f, 0x9a, 0xbc, 0x3c,
- 0x80, 0xd9, 0x3c, 0x40, 0x17, 0x55, 0xaf, 0x56, 0xa4, 0x0a, 0x50, 0x26, 0xb8, 0x49, 0xa0, 0x58,
- 0xa2, 0xb6, 0x75, 0xa9, 0x83, 0x03, 0x16, 0x85, 0xb0, 0x8e, 0xfa, 0xb5, 0x17, 0x14, 0x3b, 0xab,
- 0x4f, 0x7f, 0x5b, 0xfa, 0xaa, 0xcd, 0x11, 0xa2, 0xcd, 0x97, 0x35, 0x13, 0x3c, 0x08, 0x6c, 0x48,
- 0x09, 0x02, 0x4c, 0x41, 0x21, 0x83, 0x98, 0x39, 0x16, 0x55, 0x54, 0xa4, 0x4a, 0x50, 0x2e, 0xb8,
- 0x92, 0xcb, 0x41, 0x5e, 0xa2, 0x8f, 0x3f, 0xe7, 0x40, 0x09, 0xae, 0xbf, 0x5d, 0x8e, 0xc5, 0x23,
- 0xcd, 0xc1, 0xb0, 0xde, 0x2e, 0xbd, 0x1a, 0xb9, 0x7a, 0xad, 0x22, 0x3d, 0x0f, 0xaa, 0x04, 0xf7,
- 0x0f, 0x89, 0x0b, 0xc9, 0xc8, 0xfa, 0xbf, 0x1e, 0x1e, 0x70, 0xb0, 0x9f, 0xe6, 0x05, 0xf3, 0xdd,
- 0x9a, 0xcd, 0x32, 0xe0, 0x34, 0x64, 0xc0, 0x6a, 0x45, 0x7a, 0x01, 0x3c, 0x27, 0xa4, 0x20, 0x58,
- 0x0a, 0x42, 0x13, 0x46, 0xfc, 0x8d, 0x17, 0xcc, 0x7b, 0x33, 0xda, 0x30, 0xfd, 0x1c, 0x83, 0x95,
- 0x8c, 0x63, 0x80, 0x1d, 0x6f, 0xe4, 0x18, 0xe4, 0xd1, 0x8e, 0x01, 0xb1, 0xef, 0x96, 0x15, 0xcb,
- 0x78, 0x30, 0x2b, 0x96, 0x39, 0x15, 0x2b, 0x56, 0xe5, 0x30, 0xe5, 0xc8, 0xfd, 0xb5, 0x4c, 0x79,
- 0x8e, 0x9b, 0xed, 0x5e, 0xed, 0xb0, 0xdd, 0x25, 0x8a, 0x04, 0x29, 0xdb, 0x9d, 0x65, 0x37, 0xd6,
- 0xa6, 0x1d, 0x71, 0x21, 0x98, 0x58, 0xa2, 0x75, 0x7d, 0xaf, 0x7d, 0x76, 0xcd, 0xcd, 0x8e, 0x38,
- 0xab, 0x3f, 0x96, 0x62, 0x8c, 0x11, 0x30, 0xf3, 0xed, 0x88, 0x1b, 0xb9, 0x1c, 0xe4, 0x25, 0xe2,
- 0xfb, 0x1f, 0x38, 0x50, 0xb4, 0x51, 0x4e, 0x4c, 0x2f, 0xd9, 0xad, 0xae, 0x50, 0xa4, 0x95, 0x60,
- 0x85, 0xe0, 0x18, 0x99, 0x58, 0x82, 0x97, 0x2c, 0x76, 0x26, 0xfd, 0xaf, 0x5e, 0x30, 0xd7, 0x56,
- 0xf7, 0xf1, 0xe4, 0x50, 0x34, 0xfb, 0x99, 0xcb, 0xa1, 0x95, 0x8a, 0x54, 0x06, 0x04, 0xc1, 0x49,
- 0x2b, 0x07, 0x61, 0x09, 0x7b, 0xb6, 0x73, 0x60, 0x2e, 0x0e, 0x31, 0x3c, 0x1c, 0xfe, 0xac, 0x2e,
- 0x53, 0xa4, 0x15, 0xe0, 0x59, 0xc1, 0xf9, 0x11, 0x11, 0x8e, 0x1c, 0xbf, 0xa5, 0x76, 0x7e, 0x46,
- 0xd8, 0x14, 0x85, 0x35, 0xf8, 0x5f, 0x7a, 0x01, 0xb4, 0xd7, 0x9c, 0x49, 0xb1, 0x45, 0xef, 0x58,
- 0x8c, 0x46, 0xc7, 0xa6, 0xe8, 0x59, 0xcf, 0x20, 0xfe, 0x7a, 0x5e, 0x91, 0xd6, 0x80, 0xd5, 0x82,
- 0x0b, 0x8d, 0xc4, 0x85, 0x4e, 0x72, 0x5a, 0x6c, 0xf6, 0xcf, 0x1c, 0x98, 0x57, 0x27, 0x87, 0xe5,
- 0xe9, 0xe6, 0xc4, 0x98, 0x06, 0xdb, 0x65, 0x70, 0xba, 0xdb, 0x79, 0x61, 0xf4, 0xec, 0x65, 0xbb,
- 0x2e, 0xec, 0xf0, 0x82, 0x62, 0x67, 0xf5, 0xe9, 0xcf, 0xa5, 0x0c, 0x7f, 0x65, 0x3c, 0x18, 0x7f,
- 0x65, 0x3e, 0x64, 0x0b, 0xeb, 0x86, 0x5f, 0x07, 0x3d, 0x08, 0x6f, 0xfd, 0x6a, 0x0e, 0x00, 0x56,
- 0x4d, 0xb8, 0xde, 0x8d, 0xa5, 0x96, 0x8c, 0xcd, 0x52, 0x2c, 0x27, 0xad, 0x64, 0x38, 0x69, 0x41,
- 0x0a, 0x4e, 0x9a, 0x9a, 0x17, 0x6c, 0xc6, 0xa5, 0x32, 0x28, 0x8a, 0x1b, 0x71, 0x29, 0xa8, 0xde,
- 0x39, 0xa9, 0x1e, 0xed, 0x30, 0x27, 0xd8, 0x12, 0x0b, 0x5b, 0xe1, 0x28, 0xda, 0x87, 0xcd, 0x9c,
- 0x92, 0x0f, 0x9b, 0x35, 0x21, 0x1f, 0x96, 0x72, 0xd5, 0xe7, 0x3c, 0x98, 0xab, 0x9e, 0x3d, 0x15,
- 0x57, 0xfd, 0x75, 0x47, 0xc0, 0x29, 0xc7, 0x8a, 0xe0, 0xd9, 0x03, 0x4e, 0xc5, 0x74, 0x5f, 0xc6,
- 0x9c, 0x1d, 0xf1, 0xa6, 0xd7, 0x1d, 0xf1, 0x26, 0xe0, 0xe8, 0xd2, 0x8c, 0x37, 0x31, 0x5d, 0x1a,
- 0x38, 0x71, 0x44, 0x9c, 0xaa, 0x40, 0x76, 0x3d, 0x5a, 0xcb, 0xd5, 0xec, 0x27, 0xc1, 0x2b, 0x4c,
- 0x0c, 0x03, 0x28, 0xe6, 0xe0, 0x25, 0xdd, 0xc8, 0x81, 0xd6, 0x80, 0x09, 0x44, 0x24, 0x44, 0xae,
- 0x63, 0xcd, 0x7e, 0x12, 0xa4, 0x22, 0x24, 0x24, 0x40, 0x31, 0x07, 0xfb, 0x90, 0xa8, 0x95, 0x01,
- 0x84, 0x2f, 0x01, 0x80, 0x7b, 0xf8, 0x49, 0xa8, 0x49, 0x2e, 0xcd, 0x47, 0xed, 0x16, 0x2b, 0x92,
- 0x4f, 0xa0, 0xc0, 0x62, 0x1e, 0xfe, 0x9e, 0x76, 0xfa, 0xe6, 0xe8, 0xe9, 0xef, 0x03, 0x54, 0x89,
- 0xde, 0x1c, 0x77, 0x85, 0x9a, 0x17, 0x50, 0xcd, 0x2d, 0xb0, 0x98, 0x87, 0x3f, 0x6c, 0x34, 0xb7,
- 0x4a, 0xec, 0xb1, 0xb5, 0xc2, 0x49, 0xc7, 0xd6, 0x74, 0x7e, 0x8a, 0xb6, 0xec, 0x0c, 0x87, 0xea,
- 0x4b, 0x8b, 0x28, 0x7e, 0xc2, 0x20, 0x83, 0x9f, 0xf4, 0x7f, 0x5b, 0xbf, 0x55, 0x5b, 0xaf, 0x1b,
- 0xfc, 0x84, 0x8b, 0xf9, 0xff, 0xc6, 0x81, 0xfc, 0xda, 0xdd, 0xc1, 0x58, 0x42, 0x37, 0x38, 0x75,
- 0xba, 0x95, 0x5c, 0x06, 0x32, 0xa2, 0xba, 0xc6, 0xc4, 0x4a, 0x76, 0xae, 0x22, 0x15, 0x08, 0x08,
- 0x20, 0x66, 0x8d, 0xf6, 0xfc, 0x83, 0xf6, 0xe9, 0xb5, 0x00, 0xfa, 0xa5, 0x8b, 0x65, 0x3c, 0xf4,
- 0x53, 0x2c, 0xc3, 0xf9, 0x44, 0x2c, 0x75, 0x80, 0x98, 0xa7, 0xf5, 0x75, 0xe2, 0x9a, 0xa3, 0x47,
- 0x3a, 0x03, 0x08, 0x06, 0x97, 0x83, 0xcc, 0x44, 0x24, 0x11, 0x0c, 0x23, 0x21, 0xce, 0xaf, 0x81,
- 0x8a, 0x54, 0x28, 0x60, 0x88, 0x98, 0xa5, 0x1d, 0x18, 0xd4, 0x7b, 0xc5, 0x3f, 0xe1, 0x26, 0xc6,
- 0xd2, 0x43, 0x46, 0xff, 0xa1, 0x71, 0x4e, 0xd4, 0x9b, 0xe4, 0x7f, 0x93, 0x05, 0x32, 0x51, 0x0b,
- 0xf8, 0x3c, 0xc8, 0x21, 0xda, 0x67, 0x73, 0x1d, 0x51, 0x57, 0x88, 0x2d, 0x2c, 0xa8, 0x98, 0x8d,
- 0x95, 0x55, 0xa8, 0x21, 0x60, 0x01, 0x75, 0xc2, 0xc6, 0x4c, 0xb5, 0x47, 0x94, 0x15, 0x26, 0xac,
- 0x05, 0xb6, 0xa9, 0x2c, 0xaa, 0x64, 0x72, 0x8a, 0x6b, 0x19, 0xf0, 0xee, 0x91, 0xf7, 0x13, 0xa5,
- 0x35, 0x4f, 0x91, 0x8a, 0x04, 0xfd, 0xb7, 0x98, 0x53, 0xaf, 0xcf, 0xc0, 0xbf, 0x47, 0xde, 0x1f,
- 0xd0, 0x7f, 0x43, 0x81, 0x68, 0x4e, 0xac, 0x9f, 0xe6, 0x2b, 0xd2, 0x3c, 0xa2, 0x39, 0x73, 0x51,
- 0x45, 0x46, 0x71, 0x6e, 0x07, 0xf9, 0xe1, 0x60, 0x42, 0x8e, 0x27, 0xde, 0x92, 0x63, 0xf1, 0x50,
- 0xa4, 0x99, 0xa8, 0x27, 0x14, 0x58, 0x66, 0x4b, 0xc4, 0xf9, 0x5a, 0xf7, 0x01, 0xbc, 0x70, 0xc4,
- 0xdf, 0xdb, 0x8b, 0xe1, 0x01, 0xb6, 0x1a, 0x7c, 0x1b, 0x14, 0x61, 0x80, 0x14, 0x8d, 0x1a, 0x9d,
- 0xe2, 0x75, 0xfb, 0x4a, 0x45, 0x5a, 0x2e, 0x38, 0x0a, 0xc5, 0x62, 0xb3, 0xdf, 0x60, 0x34, 0x6a,
- 0xf6, 0xea, 0xa8, 0x07, 0x77, 0x80, 0xb9, 0x18, 0x56, 0x27, 0xc7, 0xeb, 0x63, 0x21, 0xb4, 0x55,
- 0x4e, 0xb4, 0x9b, 0xee, 0xde, 0x0a, 0xce, 0x52, 0xaa, 0xeb, 0x06, 0x0b, 0x1a, 0x70, 0x56, 0x64,
- 0x34, 0x49, 0xce, 0x94, 0x34, 0x09, 0x98, 0xa2, 0x26, 0xc9, 0x7d, 0x30, 0x4d, 0x92, 0x37, 0x05,
- 0x4d, 0x42, 0x1b, 0xe6, 0xfc, 0x71, 0x0d, 0xb3, 0xda, 0x79, 0x8b, 0x35, 0xcc, 0x02, 0xc8, 0x08,
- 0xd5, 0x47, 0x9a, 0x89, 0x12, 0xc3, 0xec, 0xa5, 0x03, 0x0c, 0xf6, 0xea, 0xba, 0xab, 0x5d, 0x38,
- 0x12, 0x40, 0x20, 0xfe, 0xf7, 0x1c, 0x28, 0x46, 0xf2, 0x45, 0x88, 0x38, 0x4d, 0x14, 0xc8, 0x4f,
- 0x18, 0x05, 0xf2, 0x84, 0x53, 0x81, 0x90, 0xe1, 0xd6, 0x2c, 0x53, 0x24, 0x9e, 0xe8, 0x11, 0x9f,
- 0xa9, 0x47, 0xd0, 0x34, 0x93, 0x47, 0xdb, 0xb4, 0xee, 0x6f, 0xe9, 0xa5, 0x03, 0xdf, 0x9e, 0x01,
- 0xf2, 0xe8, 0xd6, 0x70, 0x05, 0x11, 0x44, 0xce, 0x32, 0xf9, 0x58, 0x10, 0x01, 0x96, 0x20, 0x64,
- 0x27, 0xb1, 0x1c, 0x3e, 0x07, 0xe6, 0x10, 0xce, 0x27, 0x3a, 0x64, 0xa1, 0x22, 0x95, 0x0a, 0x06,
- 0x4c, 0xcc, 0x67, 0x45, 0xce, 0x80, 0xc3, 0x1a, 0x00, 0x82, 0x96, 0x98, 0x79, 0x2d, 0x53, 0x4f,
- 0x81, 0xc5, 0xb9, 0xb8, 0x31, 0x2d, 0x5d, 0x54, 0x31, 0xdc, 0x00, 0x72, 0x29, 0xe9, 0x20, 0xda,
- 0xe5, 0x29, 0x45, 0xf2, 0x0b, 0x34, 0xdc, 0xe8, 0x85, 0x16, 0x24, 0xba, 0x9c, 0x11, 0xa1, 0xcc,
- 0x29, 0x89, 0x50, 0xd6, 0x14, 0x45, 0x68, 0xce, 0x83, 0x89, 0x50, 0xf6, 0x64, 0x45, 0x68, 0x19,
- 0xf0, 0xb6, 0xc4, 0xc2, 0x44, 0x4f, 0x60, 0x35, 0xdc, 0x12, 0x0b, 0x1b, 0x6a, 0x58, 0x77, 0x17,
- 0xf5, 0xdf, 0xfc, 0xcf, 0xbd, 0x20, 0x17, 0xb1, 0x43, 0x9d, 0x9c, 0x08, 0x86, 0xc2, 0xa6, 0x5a,
- 0xe6, 0x26, 0xa0, 0x96, 0xd7, 0xd8, 0xd9, 0x01, 0xad, 0x11, 0x4c, 0x76, 0xc8, 0xa5, 0x58, 0xd0,
- 0x62, 0x86, 0x55, 0xba, 0xcb, 0x18, 0x6c, 0x68, 0x32, 0xac, 0x09, 0xc2, 0x24, 0x01, 0x91, 0x26,
- 0x23, 0x47, 0xbe, 0x1e, 0xb9, 0x77, 0x2d, 0x40, 0x80, 0xb0, 0x16, 0x80, 0xbd, 0xc1, 0x70, 0x8b,
- 0x1c, 0xff, 0x71, 0x28, 0x2c, 0x23, 0x69, 0x20, 0x94, 0xa7, 0xc0, 0x22, 0xc4, 0x7f, 0xe3, 0xfd,
- 0x62, 0xc2, 0xf0, 0x54, 0x39, 0x6c, 0x04, 0xd9, 0xf5, 0x91, 0xe6, 0x84, 0xdc, 0x9c, 0xd0, 0x57,
- 0x24, 0xba, 0x40, 0x3d, 0xe3, 0x14, 0x28, 0x8c, 0x83, 0x8a, 0x5a, 0x52, 0x71, 0x43, 0x73, 0x22,
- 0xb6, 0x1f, 0x7f, 0xca, 0x6c, 0x2c, 0x16, 0x63, 0x3c, 0xb4, 0xb7, 0x6a, 0x47, 0x0f, 0xa8, 0x27,
- 0xbe, 0xc1, 0x1f, 0x0c, 0x98, 0xe5, 0x06, 0xde, 0xb3, 0xc6, 0xc6, 0xbb, 0xef, 0x4d, 0x90, 0xcf,
- 0x7c, 0x06, 0x16, 0x61, 0xb3, 0x89, 0xf0, 0x8e, 0x2d, 0x64, 0x05, 0xc8, 0x44, 0x13, 0x40, 0xc8,
- 0xcd, 0x15, 0x4b, 0x99, 0xf1, 0xea, 0x93, 0x22, 0x1d, 0x04, 0x70, 0xb5, 0x6a, 0xcf, 0x8b, 0x1c,
- 0x7f, 0x9d, 0x03, 0xb9, 0x54, 0x11, 0x5c, 0xce, 0x90, 0xb3, 0x58, 0x91, 0xe6, 0x12, 0x72, 0xe6,
- 0x10, 0x4c, 0x9d, 0xe8, 0x20, 0xc4, 0xac, 0xd1, 0x75, 0x5d, 0x62, 0x37, 0xa1, 0x64, 0x85, 0x22,
- 0xad, 0x14, 0x10, 0x40, 0x7c, 0x0a, 0xd7, 0x4c, 0x76, 0xf5, 0xab, 0x7d, 0xb7, 0x8d, 0xc9, 0xab,
- 0xad, 0x57, 0xd4, 0xce, 0x4b, 0xfa, 0xc2, 0xea, 0x56, 0x9f, 0x7a, 0xf7, 0x50, 0x00, 0x55, 0x85,
- 0x55, 0x60, 0x0e, 0xc1, 0x03, 0x21, 0x2e, 0x5a, 0xd8, 0x1a, 0x30, 0x31, 0x8f, 0x7c, 0xf3, 0x70,
- 0xab, 0xda, 0x7b, 0x3b, 0x60, 0x80, 0x79, 0xcd, 0x03, 0x0a, 0x74, 0x95, 0x8b, 0xb5, 0xd2, 0x6a,
- 0x7d, 0xad, 0xff, 0x30, 0x14, 0xaf, 0x2d, 0x7e, 0xe0, 0xf5, 0x7b, 0xa6, 0x1c, 0x3f, 0x58, 0x0f,
- 0xb2, 0x75, 0xef, 0x08, 0x79, 0xb9, 0x19, 0xa8, 0x9f, 0xa7, 0x75, 0x45, 0x68, 0x02, 0xdd, 0xe3,
- 0x08, 0xeb, 0x03, 0x66, 0x05, 0xb8, 0x9e, 0xf1, 0x7e, 0x90, 0x67, 0x80, 0xe9, 0xb2, 0x14, 0xf3,
- 0x09, 0x6e, 0x79, 0x7f, 0xa8, 0x5d, 0x3b, 0xd5, 0xa7, 0xb5, 0x1f, 0xd4, 0xae, 0xf6, 0x24, 0x7f,
- 0x76, 0x4c, 0x3b, 0xd1, 0x9d, 0xfc, 0xfe, 0x22, 0x1b, 0x8d, 0xb0, 0x61, 0x4e, 0xf4, 0x69, 0x47,
- 0x6f, 0x8f, 0x1e, 0xe9, 0xc4, 0x66, 0x00, 0x0b, 0x20, 0xbd, 0x7d, 0x50, 0xc8, 0x54, 0x9f, 0xfe,
- 0x81, 0x88, 0x80, 0x2d, 0x9b, 0xcb, 0x21, 0xb2, 0x86, 0xad, 0xc6, 0x06, 0x05, 0x1b, 0xc1, 0x05,
- 0x36, 0x23, 0x78, 0xee, 0xd0, 0x4c, 0xdd, 0x3e, 0xb0, 0x93, 0xcb, 0x9d, 0xbc, 0x24, 0xb8, 0xf1,
- 0x99, 0x07, 0xcc, 0xdb, 0x28, 0x27, 0x28, 0x4d, 0x86, 0x85, 0xc9, 0x11, 0x38, 0x4b, 0x0f, 0xe3,
- 0x7b, 0xa6, 0xc4, 0xf8, 0xab, 0x09, 0xe3, 0x63, 0xf1, 0x5b, 0xec, 0x6e, 0x5f, 0xfe, 0x52, 0x93,
- 0x11, 0xf3, 0x14, 0x71, 0x84, 0xd3, 0x49, 0x8a, 0x98, 0xdb, 0xdc, 0xc4, 0xa7, 0x28, 0x4c, 0xa8,
- 0xed, 0xad, 0x23, 0x7d, 0x5f, 0x24, 0x07, 0x0f, 0x63, 0xa4, 0x5a, 0x7c, 0x3f, 0xec, 0x05, 0xc5,
- 0xce, 0xc6, 0x33, 0x2d, 0x95, 0xd1, 0x6d, 0x05, 0xf9, 0xa4, 0x22, 0x2d, 0x22, 0x4c, 0x5f, 0xec,
- 0x86, 0x83, 0x19, 0xc4, 0xf1, 0x24, 0x2d, 0xce, 0x95, 0x50, 0xe3, 0x90, 0x99, 0xf0, 0xbf, 0xea,
- 0x01, 0x25, 0x96, 0xbc, 0x60, 0x77, 0xe3, 0x07, 0x62, 0x4e, 0x56, 0x9b, 0xe6, 0x64, 0xc2, 0x52,
- 0xf5, 0xa2, 0x22, 0x3d, 0x07, 0xd6, 0x08, 0xee, 0x18, 0x33, 0xd6, 0x11, 0x94, 0x07, 0x67, 0x89,
- 0xd3, 0x9f, 0xbd, 0x60, 0xbe, 0x5b, 0xab, 0xe9, 0x2f, 0x50, 0xef, 0x32, 0x02, 0xb5, 0x34, 0xe5,
- 0x8a, 0xca, 0x34, 0x2a, 0xcb, 0x15, 0x69, 0x19, 0x91, 0xaf, 0xc5, 0x0e, 0xa3, 0x82, 0xf1, 0x32,
- 0xe3, 0x04, 0x8d, 0x24, 0x12, 0xa5, 0x20, 0xa1, 0x3b, 0xe5, 0x29, 0x09, 0xdb, 0x28, 0x1b, 0x0d,
- 0x1e, 0x23, 0x1b, 0xa3, 0x33, 0xa2, 0xb1, 0x94, 0xc1, 0x12, 0xe8, 0x4f, 0xb9, 0x94, 0x31, 0x1a,
- 0x1a, 0x85, 0xd5, 0xdb, 0x15, 0xe9, 0x55, 0xb0, 0x45, 0x70, 0xc7, 0x8c, 0x28, 0x62, 0x7c, 0x6a,
- 0xed, 0x47, 0xd4, 0xde, 0x73, 0x26, 0x42, 0xc7, 0x36, 0x58, 0x4a, 0x06, 0x98, 0xef, 0xd6, 0xdb,
- 0xf4, 0x97, 0xb0, 0x9d, 0x8c, 0x84, 0x95, 0xa6, 0x5a, 0x62, 0xd5, 0x54, 0x29, 0xd2, 0x6a, 0x22,
- 0x58, 0x2b, 0x26, 0x8c, 0xa0, 0x19, 0x24, 0x64, 0xaf, 0x2b, 0xd2, 0x36, 0xb0, 0x55, 0x48, 0x41,
- 0xc5, 0xc9, 0x31, 0x05, 0x11, 0xbe, 0x8f, 0x3c, 0xa0, 0x00, 0xef, 0x75, 0x21, 0x44, 0x3e, 0x0e,
- 0x9e, 0xdd, 0x2a, 0x45, 0x2a, 0x07, 0x2b, 0x05, 0xdb, 0xb4, 0xc4, 0x27, 0xf0, 0xe6, 0x9d, 0x1f,
- 0x01, 0xfc, 0x23, 0x7d, 0xb7, 0xb4, 0xeb, 0x1f, 0x11, 0xc9, 0x38, 0xe4, 0x05, 0x85, 0x4c, 0xed,
- 0xd9, 0xbd, 0xd4, 0x74, 0xb0, 0x2b, 0xc9, 0xf1, 0xb1, 0xa3, 0x56, 0x9c, 0xcf, 0x50, 0xc2, 0xe2,
- 0xc5, 0xff, 0xee, 0x01, 0x25, 0x54, 0x5d, 0xc2, 0xe2, 0x3f, 0x74, 0x43, 0x50, 0xab, 0x48, 0xeb,
- 0xc1, 0xcb, 0x82, 0x3b, 0x66, 0xc4, 0x65, 0x0c, 0x2e, 0x69, 0xd1, 0x67, 0x38, 0xfc, 0x8c, 0x17,
- 0xcc, 0x77, 0xeb, 0x60, 0x96, 0xd1, 0xd3, 0xc1, 0xe8, 0xeb, 0x14, 0xe9, 0x45, 0xf0, 0xbc, 0x90,
- 0x02, 0xc3, 0xe2, 0x22, 0x96, 0xdf, 0x6d, 0xee, 0xcf, 0x7f, 0xf6, 0x80, 0xa2, 0xba, 0xc8, 0xbe,
- 0xe6, 0x70, 0x24, 0xd8, 0xf0, 0xb8, 0xe8, 0xe0, 0x07, 0x62, 0xf8, 0x97, 0x15, 0x69, 0x1d, 0x58,
- 0x2b, 0x38, 0x90, 0x22, 0x2e, 0x1b, 0xee, 0xff, 0x64, 0xe4, 0xce, 0x9d, 0xf1, 0x78, 0xfd, 0xff,
- 0x79, 0x40, 0xc1, 0x9b, 0xd1, 0xb1, 0xd1, 0xc9, 0xa5, 0x09, 0x9d, 0xdc, 0x14, 0xd0, 0xb9, 0x0a,
- 0x64, 0xec, 0x0a, 0x85, 0x71, 0xa4, 0x3a, 0xaf, 0x66, 0x91, 0x22, 0x3d, 0x21, 0x20, 0x80, 0x38,
- 0x57, 0xff, 0xd7, 0x3f, 0xdc, 0x7f, 0x6c, 0x78, 0xe8, 0x02, 0x89, 0x00, 0xa3, 0x02, 0x3a, 0x24,
- 0x9e, 0x31, 0xe1, 0x90, 0x78, 0x15, 0xc8, 0xdc, 0x15, 0x89, 0xd5, 0xe3, 0x68, 0x60, 0x36, 0xde,
- 0xe7, 0xc2, 0x10, 0x11, 0x92, 0xe3, 0x5f, 0x43, 0x03, 0x6a, 0xdb, 0x4d, 0xfc, 0xbd, 0x00, 0x2e,
- 0x32, 0xc2, 0x22, 0x36, 0x04, 0x8a, 0xcb, 0x71, 0x2d, 0xc3, 0x78, 0x1e, 0xf9, 0x5a, 0xed, 0x3d,
- 0x37, 0x7c, 0xfb, 0xa8, 0x0b, 0xf6, 0x75, 0x5b, 0xca, 0x34, 0x9e, 0x55, 0x31, 0xe9, 0xb4, 0xa5,
- 0x36, 0xd4, 0x8a, 0xf3, 0x19, 0xc2, 0x58, 0x5a, 0xe5, 0x63, 0x2f, 0x80, 0x46, 0xd0, 0x23, 0x20,
- 0x87, 0xe5, 0x60, 0x5c, 0x9e, 0x76, 0x82, 0x60, 0xe9, 0x15, 0x6e, 0xa2, 0x7a, 0xa5, 0x01, 0x64,
- 0x13, 0xfe, 0x8e, 0x93, 0x3d, 0x9b, 0x4d, 0x8a, 0xb4, 0x41, 0x30, 0x81, 0xe2, 0x5a, 0x4a, 0x16,
- 0xca, 0xfc, 0xc3, 0xfd, 0x1d, 0xc3, 0x43, 0x17, 0x8c, 0xfd, 0xca, 0xb3, 0x38, 0x41, 0x50, 0x3b,
- 0x7a, 0x40, 0xeb, 0x3e, 0x6a, 0xaa, 0x61, 0x7f, 0x8c, 0xa0, 0xc7, 0xec, 0xa4, 0x7a, 0xa3, 0x22,
- 0xd5, 0x81, 0x1a, 0xc1, 0x05, 0x81, 0x62, 0x19, 0xee, 0xc3, 0x4f, 0x02, 0xea, 0xad, 0x3f, 0x1b,
- 0x39, 0x78, 0x8a, 0xea, 0x24, 0xce, 0x3a, 0x96, 0xff, 0xc3, 0x6b, 0x05, 0x4f, 0xcd, 0x4e, 0xa6,
- 0xbf, 0x40, 0xd4, 0x30, 0x7b, 0xc4, 0xc5, 0xb6, 0x74, 0x52, 0x34, 0x0d, 0xbc, 0xc3, 0x86, 0xd7,
- 0x5a, 0xf9, 0x64, 0xf2, 0x33, 0x6e, 0x3d, 0xb5, 0x41, 0x91, 0x6a, 0xc0, 0x7a, 0xc1, 0x8d, 0x44,
- 0xe2, 0x8a, 0xf1, 0x08, 0x6d, 0xc9, 0xda, 0x9f, 0xbc, 0x60, 0xc1, 0xe6, 0xa6, 0x68, 0x24, 0x96,
- 0xa8, 0x0d, 0xb7, 0xc4, 0x13, 0x72, 0xec, 0xe1, 0x08, 0xdc, 0x2b, 0x20, 0xa7, 0x1e, 0xf7, 0xbf,
- 0xb9, 0x8e, 0xb0, 0xc1, 0x52, 0x94, 0xa6, 0x63, 0x42, 0xc5, 0xec, 0xd1, 0xae, 0xc3, 0xc9, 0xbb,
- 0x97, 0x37, 0xd7, 0x59, 0xe2, 0x66, 0x95, 0xc2, 0xad, 0x20, 0x47, 0x17, 0xa2, 0x78, 0x34, 0x58,
- 0x6f, 0x08, 0x5d, 0x85, 0x22, 0xf1, 0x82, 0x05, 0x35, 0x33, 0x86, 0xba, 0x7a, 0xb5, 0x0b, 0x47,
- 0x4c, 0x30, 0xd5, 0x9b, 0x09, 0x83, 0xcf, 0x13, 0xe9, 0xcd, 0x30, 0x76, 0xde, 0x4b, 0x89, 0xf4,
- 0x16, 0xd9, 0xfb, 0x60, 0x45, 0x98, 0xd6, 0x1b, 0x99, 0x53, 0xd2, 0x1b, 0xeb, 0x01, 0xde, 0xf7,
- 0xdc, 0x66, 0x9d, 0xa6, 0x41, 0x9f, 0xb7, 0xa0, 0xae, 0x1a, 0xc4, 0x2a, 0xae, 0xae, 0x53, 0x24,
- 0x09, 0xbc, 0x22, 0xa4, 0xa2, 0x9a, 0xf8, 0xb4, 0xda, 0x37, 0xa4, 0x1e, 0x19, 0xf0, 0x13, 0xdc,
- 0xa5, 0x90, 0xee, 0x1e, 0x2f, 0x28, 0x75, 0xef, 0x61, 0xd6, 0xe6, 0xa5, 0x43, 0x3c, 0x6b, 0x14,
- 0xe9, 0x15, 0xf0, 0x92, 0x90, 0x12, 0xc7, 0xe2, 0xd2, 0x54, 0x64, 0xb2, 0x64, 0xf3, 0x77, 0x1c,
- 0x28, 0x24, 0x4d, 0xa6, 0x49, 0x02, 0xce, 0xeb, 0x13, 0x50, 0xae, 0xe8, 0x20, 0x32, 0x56, 0xae,
- 0x8b, 0xd8, 0x08, 0xb1, 0x31, 0x47, 0x26, 0xfb, 0xe6, 0xd8, 0x1c, 0x30, 0x87, 0x34, 0x85, 0x22,
- 0xb3, 0x37, 0x8f, 0xbc, 0x3e, 0x2c, 0x96, 0xf3, 0xd8, 0xf6, 0x74, 0xca, 0xc5, 0x7a, 0x5a, 0x31,
- 0x78, 0xa8, 0xa4, 0x59, 0x4b, 0x31, 0x40, 0xed, 0xe8, 0x01, 0x7c, 0xd6, 0xdd, 0x84, 0xd1, 0xca,
- 0xe0, 0x25, 0x5d, 0xa8, 0xf7, 0x86, 0xcc, 0x54, 0x9c, 0x7c, 0x5d, 0x35, 0x2d, 0x11, 0x4c, 0x20,
- 0x6e, 0x7f, 0xf9, 0xd0, 0xf0, 0xc0, 0x71, 0x33, 0xc6, 0x1d, 0x30, 0x4b, 0x61, 0x15, 0xc8, 0x8a,
- 0x27, 0x82, 0x89, 0x96, 0x38, 0x61, 0x45, 0xe4, 0x14, 0x13, 0x90, 0x58, 0x88, 0x93, 0x92, 0xf5,
- 0x76, 0xc7, 0x6e, 0x6a, 0x07, 0x0e, 0x06, 0x48, 0x01, 0x2c, 0x07, 0x99, 0x68, 0x4e, 0x44, 0x8d,
- 0x20, 0x0a, 0x61, 0x08, 0x9b, 0x57, 0x82, 0x61, 0x70, 0x13, 0x93, 0x30, 0x84, 0xf5, 0x06, 0x0a,
- 0xc5, 0xd3, 0x09, 0x43, 0x0b, 0xe8, 0x71, 0xa6, 0x4a, 0x1b, 0x62, 0x93, 0x68, 0xe6, 0x4c, 0x36,
- 0x89, 0x66, 0x03, 0xc8, 0xab, 0xa7, 0xd6, 0x88, 0x24, 0x0b, 0x07, 0x21, 0x8c, 0x29, 0x10, 0x0b,
- 0xd8, 0x4d, 0x81, 0x00, 0x53, 0xfa, 0x48, 0x13, 0xf7, 0xaa, 0x2c, 0xed, 0x94, 0x4b, 0xe5, 0x60,
- 0x18, 0xda, 0x29, 0x4f, 0x3b, 0x76, 0x65, 0xf4, 0xd4, 0x59, 0xed, 0x66, 0x1b, 0xa3, 0x97, 0x56,
- 0x82, 0x0c, 0x5d, 0x69, 0x93, 0x4c, 0x3d, 0x2c, 0x41, 0x3a, 0x40, 0xc4, 0x13, 0xf1, 0x93, 0x5c,
- 0x5b, 0x04, 0x83, 0x5b, 0x40, 0x41, 0x28, 0xd8, 0xb4, 0xcd, 0x60, 0xa9, 0xcd, 0x75, 0x24, 0x41,
- 0x0f, 0x65, 0xca, 0xd8, 0x8a, 0x44, 0xdb, 0xef, 0x80, 0xed, 0xb7, 0x3d, 0xd5, 0xaf, 0x60, 0xec,
- 0x54, 0xbf, 0xe4, 0xd0, 0x67, 0x8e, 0x1c, 0xfc, 0x17, 0x68, 0x6b, 0x5b, 0x48, 0x29, 0x48, 0xcb,
- 0xda, 0xe6, 0x60, 0x6b, 0xeb, 0xd7, 0x15, 0xa4, 0x09, 0xe5, 0x7b, 0xb3, 0x41, 0x3e, 0x11, 0x46,
- 0x92, 0xfd, 0x34, 0x2b, 0x92, 0x3f, 0x14, 0x91, 0xdc, 0x02, 0xb2, 0x70, 0x76, 0x58, 0x69, 0x0e,
- 0x5a, 0x9c, 0xac, 0x51, 0xa4, 0x55, 0x02, 0x01, 0x89, 0xcf, 0x60, 0xa4, 0x19, 0x18, 0x1e, 0xfd,
- 0xf8, 0x6a, 0xf2, 0xce, 0x0d, 0xed, 0xf4, 0xcd, 0xe4, 0xb9, 0x43, 0x74, 0x9a, 0x59, 0x80, 0xd4,
- 0x87, 0x35, 0x6c, 0x72, 0x22, 0xb0, 0xbc, 0x02, 0x26, 0x39, 0xb1, 0x80, 0xb0, 0x8f, 0x5f, 0xeb,
- 0xec, 0x1c, 0xb9, 0x77, 0x8d, 0xcd, 0x4c, 0xac, 0x04, 0x99, 0xcd, 0x91, 0x84, 0x1c, 0x27, 0x52,
- 0x8b, 0x38, 0x18, 0x43, 0x4c, 0xaf, 0xdd, 0x8f, 0x7e, 0x06, 0x30, 0x14, 0x6e, 0x00, 0x19, 0xc1,
- 0x58, 0x63, 0xbc, 0x34, 0x0f, 0x8d, 0x7f, 0xb5, 0x22, 0x55, 0x08, 0x08, 0x30, 0xd6, 0xe8, 0xfd,
- 0xba, 0x09, 0xf3, 0x63, 0xa7, 0x28, 0x80, 0x6a, 0x33, 0xba, 0x29, 0x7f, 0x4a, 0xba, 0xa9, 0x60,
- 0x2a, 0xba, 0xa9, 0x70, 0xf2, 0xba, 0xa9, 0x68, 0x22, 0xba, 0xe9, 0xaf, 0x41, 0x0e, 0x22, 0x0a,
- 0xca, 0x15, 0x9c, 0x8b, 0x5a, 0xbc, 0xa4, 0x48, 0xd5, 0x82, 0x05, 0x15, 0xcb, 0xd1, 0x9f, 0x7e,
- 0x4c, 0xc3, 0xfb, 0x43, 0xed, 0xfa, 0xba, 0xbc, 0xff, 0x80, 0xf6, 0x6d, 0x0f, 0x39, 0x95, 0x7b,
- 0xe7, 0x5e, 0xf2, 0x94, 0x2e, 0xab, 0x84, 0xc8, 0x56, 0x4b, 0xfe, 0xab, 0x0c, 0x50, 0x84, 0x8f,
- 0xb3, 0x21, 0x7a, 0xa4, 0x7d, 0xeb, 0xd3, 0xb6, 0x6e, 0xf0, 0x4c, 0x7a, 0xdd, 0x10, 0x74, 0xae,
- 0x1b, 0x6a, 0x15, 0x69, 0x3d, 0xad, 0x8b, 0xd6, 0xe0, 0x68, 0x9c, 0xfa, 0xef, 0xee, 0xe8, 0x02,
- 0xfe, 0xd5, 0xc0, 0xe8, 0xe9, 0xef, 0xb1, 0xdf, 0x72, 0x7f, 0xa8, 0x7d, 0x74, 0xf0, 0xcc, 0x48,
- 0xef, 0x65, 0xb5, 0xf5, 0xea, 0xe8, 0xc7, 0x57, 0xe9, 0x0a, 0xb4, 0xb2, 0x6a, 0xe5, 0x98, 0xd5,
- 0xc4, 0xfb, 0x8a, 0xd4, 0x4c, 0x74, 0xe4, 0x2e, 0xdc, 0xb3, 0xa1, 0x24, 0x49, 0x0e, 0x9b, 0xd9,
- 0x39, 0xc9, 0x64, 0xfb, 0xee, 0x92, 0xbe, 0xbc, 0xef, 0xb9, 0x3a, 0x72, 0xf7, 0xae, 0x3a, 0xd4,
- 0x79, 0x7f, 0xa8, 0x5d, 0xfd, 0xe2, 0x23, 0xff, 0xb3, 0xc1, 0x58, 0xf0, 0xaf, 0x83, 0xe5, 0x3f,
- 0xfd, 0xdb, 0x95, 0xcf, 0xfa, 0xd5, 0xce, 0xbe, 0xe1, 0xc1, 0x2b, 0x38, 0xd7, 0x4d, 0x6d, 0xbb,
- 0xe6, 0x6f, 0x0a, 0xb6, 0x34, 0x84, 0x43, 0xcd, 0xe5, 0xc1, 0x58, 0xb0, 0x7e, 0x77, 0x73, 0xa8,
- 0x81, 0xa8, 0x5d, 0xc3, 0x35, 0xcc, 0x9c, 0x98, 0x6b, 0x98, 0x35, 0x01, 0xd7, 0xb0, 0xfa, 0xaf,
- 0x14, 0x69, 0x23, 0xd8, 0x20, 0x38, 0x68, 0x2c, 0xae, 0xa6, 0xf7, 0xeb, 0x30, 0x05, 0xec, 0x6e,
- 0x9e, 0x7d, 0x0f, 0xf7, 0xe3, 0x0c, 0xe3, 0xb4, 0xac, 0xd9, 0xcf, 0x4c, 0x4b, 0x90, 0x58, 0xe4,
- 0xe6, 0xf1, 0x9a, 0xb9, 0x11, 0xe5, 0x8a, 0x24, 0x10, 0xcf, 0x97, 0x1f, 0x1f, 0x31, 0x24, 0xd6,
- 0xb0, 0x3b, 0x9d, 0x6b, 0x12, 0xe6, 0xd2, 0xb6, 0x82, 0x7d, 0xec, 0xe5, 0x66, 0xcc, 0xb2, 0x29,
- 0x6b, 0xe2, 0xcb, 0xa6, 0xea, 0x2d, 0x8a, 0xb4, 0x09, 0xfc, 0x58, 0x70, 0x12, 0x6f, 0x52, 0x5c,
- 0x40, 0x16, 0x35, 0xff, 0x13, 0x67, 0x4c, 0x30, 0x5e, 0xc6, 0xf4, 0x53, 0x1b, 0xb6, 0x70, 0x83,
- 0x27, 0x5d, 0xe1, 0x06, 0xcf, 0x64, 0xc2, 0x0d, 0x46, 0x06, 0x98, 0x3b, 0xbe, 0x44, 0x9e, 0x46,
- 0x7e, 0x0a, 0x99, 0xfb, 0x3f, 0x5e, 0x94, 0x37, 0xe1, 0x68, 0x3d, 0xfd, 0x05, 0x6f, 0xdb, 0x18,
- 0x79, 0xae, 0xcc, 0x74, 0x88, 0x53, 0x8a, 0xc4, 0x6e, 0x9e, 0x0b, 0x32, 0x66, 0x50, 0x4c, 0x4f,
- 0x52, 0xa4, 0x97, 0xc1, 0x8f, 0x84, 0x14, 0x14, 0x1b, 0x9b, 0xe0, 0x44, 0xbc, 0xee, 0x66, 0x81,
- 0x79, 0x9b, 0x9b, 0xe3, 0x89, 0x60, 0x38, 0x3c, 0xb6, 0x4d, 0x9e, 0x7a, 0x2c, 0x6f, 0x93, 0x33,
- 0x96, 0x27, 0xe8, 0xce, 0x26, 0x25, 0x5c, 0x73, 0x4d, 0xf7, 0x7e, 0x4c, 0x29, 0xdb, 0xec, 0x34,
- 0xce, 0x2b, 0xc7, 0x5f, 0x28, 0xb8, 0x8a, 0xd8, 0x5a, 0xc6, 0x06, 0x2f, 0x1b, 0x7b, 0x9d, 0xc2,
- 0x06, 0xf5, 0xb6, 0x31, 0x47, 0x01, 0x33, 0xad, 0xd8, 0x22, 0x7d, 0x14, 0x10, 0x27, 0x93, 0xea,
- 0x83, 0xb9, 0x7e, 0xde, 0x3c, 0x93, 0x68, 0x8d, 0x84, 0x3e, 0x1b, 0x58, 0x65, 0xac, 0x23, 0xb2,
- 0x8c, 0x35, 0x93, 0xeb, 0x3a, 0xc2, 0x18, 0x04, 0x59, 0x4e, 0x50, 0xbb, 0x8e, 0x73, 0x0c, 0xf1,
- 0x9a, 0xe0, 0xae, 0x23, 0x7c, 0xdd, 0x74, 0xdd, 0xb3, 0x91, 0xeb, 0xbb, 0x56, 0x91, 0x9e, 0x37,
- 0x5d, 0xf7, 0x32, 0xe6, 0x1c, 0x08, 0x3a, 0x69, 0x50, 0xe6, 0x1f, 0xb9, 0x79, 0x6c, 0xf4, 0xf3,
- 0x0b, 0xea, 0x89, 0xe3, 0xc3, 0x43, 0x67, 0xd4, 0xd6, 0xb6, 0xe4, 0xc0, 0x97, 0x3a, 0xe4, 0x9b,
- 0x33, 0xa6, 0x03, 0x5f, 0x41, 0x7c, 0x69, 0xbc, 0x16, 0xc0, 0xda, 0x01, 0xf9, 0xd2, 0x85, 0xa3,
- 0x17, 0x3f, 0x57, 0x2f, 0x7f, 0x66, 0xaa, 0x18, 0xe2, 0x34, 0x33, 0x5e, 0x26, 0x48, 0xaf, 0x97,
- 0xa9, 0xfb, 0xd6, 0x91, 0xa8, 0x1c, 0x0b, 0x26, 0x22, 0x31, 0xe6, 0xc0, 0xb0, 0x01, 0x14, 0x73,
- 0xb4, 0x93, 0x1d, 0xc3, 0x77, 0xba, 0x91, 0x6f, 0x6d, 0x00, 0xab, 0xab, 0x14, 0x69, 0x35, 0xa8,
- 0x14, 0xdc, 0xc4, 0x41, 0x2c, 0x55, 0x7b, 0x8f, 0x8e, 0x5c, 0x6a, 0x35, 0x3d, 0x33, 0x4b, 0x63,
- 0x9e, 0xf0, 0x82, 0x62, 0x67, 0x8b, 0xd9, 0xa0, 0x68, 0x3a, 0xf4, 0xdb, 0x73, 0x8a, 0x24, 0x82,
- 0x55, 0x82, 0x2b, 0x7e, 0xdd, 0x48, 0x42, 0x74, 0xda, 0xef, 0x3d, 0xa0, 0xe4, 0xcd, 0xe6, 0xd0,
- 0xac, 0x56, 0x9b, 0x84, 0x56, 0x33, 0x2e, 0x1b, 0x71, 0x47, 0x9c, 0x58, 0xaa, 0x76, 0xf4, 0x8f,
- 0xdc, 0xb9, 0xe3, 0xc2, 0xff, 0xa7, 0xbc, 0x60, 0xbe, 0x5b, 0x9b, 0x59, 0x09, 0x48, 0x87, 0x04,
- 0xbc, 0xa0, 0x48, 0x55, 0x40, 0x14, 0x52, 0x60, 0xd8, 0x8d, 0x2c, 0x44, 0x06, 0x7a, 0xb2, 0xc0,
- 0xbc, 0x37, 0xa3, 0x8d, 0xb1, 0x60, 0x83, 0x3c, 0x2b, 0x01, 0x13, 0xb3, 0xeb, 0x1b, 0x5c, 0xec,
- 0xfa, 0xb2, 0x09, 0xd9, 0x75, 0xc6, 0x9c, 0x97, 0xb3, 0xe6, 0x7c, 0xbc, 0xb0, 0xe0, 0x1a, 0xbb,
- 0x1d, 0x9f, 0x48, 0xbe, 0xcb, 0x16, 0x9b, 0x01, 0x67, 0x63, 0x6f, 0xb4, 0x01, 0xff, 0x61, 0x99,
- 0x6e, 0x17, 0x8e, 0xd7, 0x65, 0xe4, 0x48, 0x72, 0xe0, 0xcb, 0x14, 0xa6, 0xdb, 0xd9, 0x62, 0x56,
- 0x71, 0xa5, 0xd3, 0x74, 0xbb, 0xe1, 0xd7, 0x8d, 0x24, 0x44, 0x6d, 0x7d, 0xeb, 0x05, 0xc5, 0x81,
- 0x48, 0x38, 0xbc, 0x33, 0x58, 0xbf, 0x67, 0x56, 0x6f, 0x4d, 0x4c, 0x6f, 0xd5, 0x50, 0x9b, 0x1f,
- 0x38, 0x96, 0xf7, 0x8c, 0x22, 0x3d, 0x45, 0x6d, 0x7e, 0x2c, 0x18, 0xf9, 0xe2, 0xa0, 0xda, 0x75,
- 0x5e, 0x1b, 0x3c, 0xa7, 0xb6, 0x5d, 0x4b, 0x9e, 0x3b, 0x64, 0x14, 0x58, 0x3b, 0x20, 0x26, 0xb9,
- 0xdc, 0x70, 0x2f, 0x96, 0xe2, 0xc6, 0x2e, 0x12, 0xa4, 0x78, 0x41, 0x89, 0x4b, 0x93, 0x59, 0x11,
- 0x4a, 0xe3, 0xf5, 0x6f, 0xee, 0x08, 0x76, 0x23, 0x0a, 0x91, 0xa1, 0xff, 0x92, 0x05, 0xe6, 0x92,
- 0xba, 0xdb, 0x75, 0x02, 0xcb, 0xfb, 0x66, 0x05, 0x68, 0xd6, 0xf0, 0xa7, 0xc1, 0xf0, 0xff, 0x47,
- 0x8e, 0xd2, 0x34, 0x00, 0x09, 0xf6, 0x57, 0x9c, 0x22, 0x5d, 0xe1, 0x28, 0x5d, 0x73, 0x86, 0x33,
- 0x18, 0xd2, 0x00, 0xf9, 0x8d, 0x04, 0x45, 0xf5, 0x8b, 0x8f, 0xb4, 0xf3, 0xdd, 0x06, 0x78, 0xb8,
- 0x7f, 0x60, 0x55, 0x99, 0x5f, 0x6d, 0x3b, 0xab, 0xf6, 0xdd, 0xd6, 0xfa, 0x4e, 0xe1, 0x1d, 0x37,
- 0xad, 0xff, 0x86, 0xf6, 0xf7, 0x27, 0xb1, 0xac, 0xaa, 0x4a, 0xbb, 0x7a, 0xeb, 0x06, 0xde, 0x7b,
- 0xd3, 0x5d, 0x05, 0x7c, 0xc5, 0x0f, 0xd3, 0xd7, 0x70, 0x7f, 0x87, 0xad, 0x1b, 0xba, 0x96, 0xaa,
- 0xb4, 0xd3, 0x79, 0xd3, 0x94, 0xb6, 0x23, 0x27, 0xff, 0x9d, 0x52, 0x22, 0x2e, 0x30, 0x46, 0x3f,
- 0x7a, 0xf1, 0xd0, 0xc8, 0x97, 0x6d, 0x96, 0xa6, 0xfb, 0xa5, 0x17, 0x40, 0x7b, 0xf5, 0xe9, 0xaf,
- 0xe6, 0x36, 0x31, 0x41, 0xd1, 0x85, 0x6e, 0x41, 0x51, 0x32, 0x9b, 0xc7, 0xe1, 0x2d, 0x17, 0x72,
- 0xe4, 0xdf, 0x85, 0x4e, 0x2e, 0x74, 0x25, 0xca, 0x52, 0xcb, 0x04, 0x05, 0x6c, 0x7d, 0x38, 0xc0,
- 0x81, 0xdc, 0x66, 0x79, 0x9f, 0x71, 0xb9, 0x48, 0x29, 0x87, 0x92, 0x97, 0xca, 0xc6, 0x40, 0x5e,
- 0xc5, 0x36, 0xab, 0x3a, 0xbe, 0xf2, 0xe4, 0x3d, 0x45, 0x6a, 0x14, 0xe8, 0x5e, 0xc4, 0x77, 0x4c,
- 0xbe, 0x34, 0x55, 0x76, 0x53, 0xb0, 0x39, 0xb4, 0x4b, 0x8e, 0x27, 0xfc, 0x38, 0xca, 0x76, 0x7f,
- 0xa8, 0x5d, 0xbb, 0x70, 0x5b, 0xeb, 0xe8, 0x1d, 0xf9, 0x87, 0x43, 0xda, 0xc0, 0x09, 0x7c, 0x25,
- 0x98, 0xda, 0x76, 0x38, 0x79, 0x7d, 0xf0, 0xfe, 0x50, 0xfb, 0xe8, 0xa9, 0x5e, 0xed, 0xc2, 0x10,
- 0xda, 0xf0, 0x3b, 0xf7, 0xc1, 0x96, 0x50, 0x73, 0xc3, 0x87, 0x95, 0x1f, 0xe8, 0xda, 0xeb, 0xc3,
- 0x00, 0xfd, 0x19, 0x34, 0xf8, 0x48, 0xb8, 0xc1, 0x1c, 0xbc, 0x67, 0xfc, 0xc1, 0xbf, 0x66, 0x55,
- 0xa7, 0x07, 0x4f, 0xf5, 0x22, 0xbe, 0xa3, 0x9d, 0xfe, 0xf2, 0x21, 0x0d, 0x9e, 0xfa, 0x0c, 0x0c,
- 0x00, 0x60, 0xcd, 0x85, 0xd8, 0x03, 0x9d, 0xa8, 0x02, 0x05, 0x16, 0x97, 0x8e, 0x8b, 0xc8, 0x00,
- 0x55, 0x5d, 0xef, 0xd3, 0xfa, 0x04, 0xb1, 0x0e, 0xb8, 0x4f, 0x0b, 0x2c, 0x2e, 0x1d, 0x77, 0x7e,
- 0x01, 0xaa, 0xba, 0xef, 0x1d, 0x50, 0x64, 0xa7, 0x78, 0x7a, 0x6e, 0x9f, 0xd1, 0x7b, 0xb6, 0x93,
- 0x23, 0x4d, 0xf7, 0xda, 0x74, 0xe1, 0x2b, 0x1c, 0x08, 0xed, 0x37, 0x85, 0xe2, 0xc6, 0xad, 0xb0,
- 0x6b, 0xcd, 0x8c, 0x1d, 0xcf, 0x64, 0x0d, 0xe7, 0x66, 0x36, 0x71, 0xc7, 0xf3, 0x00, 0xe6, 0x9b,
- 0xf1, 0x29, 0xf0, 0x06, 0xda, 0x94, 0x7d, 0x0a, 0xc6, 0xd1, 0xc9, 0x78, 0x80, 0x6d, 0xc1, 0xd5,
- 0x20, 0x6b, 0x57, 0x28, 0x9c, 0x90, 0x63, 0xb4, 0xc6, 0x23, 0x20, 0x31, 0x0f, 0xa7, 0x03, 0x8d,
- 0xdc, 0x3b, 0xa2, 0x0d, 0x5e, 0x0e, 0x10, 0xa8, 0xe9, 0x48, 0xbb, 0xa1, 0x5a, 0x2c, 0x35, 0x98,
- 0x6b, 0x37, 0x86, 0x59, 0xe6, 0xe5, 0xb7, 0x5e, 0x7a, 0x97, 0xd3, 0x6c, 0x32, 0xfd, 0x2d, 0xcc,
- 0x16, 0x26, 0xc3, 0xd3, 0xd5, 0xc2, 0x90, 0xd9, 0x90, 0xb1, 0x23, 0x0b, 0x53, 0x68, 0x43, 0xc4,
- 0xcc, 0xbb, 0x94, 0xd9, 0x9d, 0x5a, 0x6e, 0x14, 0x26, 0x86, 0xe6, 0x13, 0xcb, 0xd0, 0x90, 0x06,
- 0x70, 0x1d, 0xe5, 0x4e, 0x61, 0xf2, 0xa2, 0xdb, 0x48, 0x2c, 0x67, 0xaa, 0xc8, 0xee, 0x4b, 0x51,
- 0x39, 0x6b, 0xa9, 0xef, 0xcd, 0x35, 0x73, 0x9d, 0xac, 0x6b, 0xe7, 0x5e, 0x71, 0xfa, 0xd9, 0x28,
- 0xdf, 0x8b, 0x12, 0xd4, 0xb9, 0x74, 0x33, 0x97, 0x04, 0x3b, 0x3a, 0xe5, 0x2c, 0x63, 0xb2, 0x29,
- 0x67, 0xb6, 0xf4, 0xae, 0xcc, 0xa9, 0xa4, 0x77, 0xad, 0x31, 0x93, 0xf4, 0xb2, 0xac, 0x9b, 0xf3,
- 0x8c, 0x24, 0x3d, 0xb3, 0xa5, 0x2d, 0x47, 0xaf, 0xd2, 0xf0, 0xc9, 0x29, 0x17, 0x9b, 0xf8, 0xe4,
- 0x66, 0x4e, 0x18, 0xfa, 0x69, 0x78, 0xe5, 0xb5, 0xae, 0xc9, 0x71, 0x88, 0x2e, 0x6c, 0x72, 0x1c,
- 0x49, 0x9d, 0x72, 0x4d, 0x8d, 0xab, 0x65, 0x52, 0xfd, 0x72, 0xac, 0xd4, 0x4e, 0x3a, 0xd5, 0x0f,
- 0x1a, 0xdf, 0xb7, 0x60, 0x4c, 0x96, 0xdf, 0x1a, 0xd3, 0xd5, 0x07, 0xd4, 0x7c, 0x89, 0xab, 0x6f,
- 0xce, 0x17, 0xff, 0x36, 0x5c, 0xfa, 0x6a, 0x7d, 0xe5, 0x0f, 0x96, 0x0a, 0x36, 0x4e, 0x73, 0xc8,
- 0x1b, 0xff, 0x35, 0xa3, 0x6f, 0x5e, 0x25, 0xb6, 0x6e, 0xd6, 0x1c, 0x8c, 0x69, 0x0e, 0xd6, 0x32,
- 0x81, 0x16, 0xcf, 0xf2, 0x7c, 0x2c, 0x02, 0x96, 0xbc, 0x5a, 0x5c, 0x68, 0x5f, 0x71, 0x90, 0x53,
- 0xb3, 0xee, 0x38, 0x17, 0x17, 0x37, 0xca, 0x09, 0x87, 0xe3, 0x61, 0x19, 0x87, 0x9f, 0x67, 0xd0,
- 0x49, 0x19, 0x56, 0xc3, 0xe9, 0x6f, 0x1d, 0xfe, 0x35, 0x63, 0x1d, 0xca, 0x19, 0x65, 0xec, 0x3e,
- 0xa3, 0x8a, 0xba, 0x60, 0x22, 0x88, 0xdd, 0x50, 0xc4, 0xf0, 0xd8, 0x5e, 0x14, 0xd9, 0x91, 0x33,
- 0x73, 0x0c, 0x86, 0xef, 0x75, 0x90, 0x63, 0xce, 0x29, 0x3d, 0xbe, 0x5c, 0xf5, 0x8f, 0x14, 0x69,
- 0x2d, 0x78, 0x41, 0x48, 0xc1, 0x14, 0x29, 0xd9, 0x89, 0x58, 0xa2, 0xff, 0x85, 0x6f, 0x39, 0x23,
- 0x2d, 0xdf, 0x40, 0x8a, 0x72, 0x56, 0xf2, 0xc7, 0x7c, 0x57, 0x83, 0x3c, 0x29, 0xe5, 0x86, 0x36,
- 0x71, 0x09, 0x39, 0x3c, 0xc7, 0x5a, 0x20, 0x4b, 0x7a, 0xbf, 0x31, 0x5e, 0x73, 0xc1, 0x8b, 0xae,
- 0x48, 0xc3, 0x2c, 0xb2, 0xc7, 0x56, 0xb3, 0x35, 0x20, 0x33, 0xb8, 0xcb, 0x70, 0xba, 0xf3, 0xf1,
- 0xd5, 0x8e, 0x18, 0x22, 0xfa, 0xe9, 0x8c, 0x26, 0xec, 0x67, 0x0c, 0xdf, 0xfe, 0x44, 0x3d, 0x71,
- 0x3c, 0x79, 0xee, 0x90, 0x3f, 0xaa, 0xa3, 0x16, 0x57, 0x34, 0xf6, 0x4d, 0x9d, 0x88, 0x17, 0x17,
- 0xdb, 0xc8, 0xa5, 0xb7, 0xa2, 0x22, 0xda, 0x03, 0x1c, 0xc8, 0xdf, 0x1a, 0x8a, 0x27, 0xa4, 0x86,
- 0x86, 0x48, 0x73, 0x3c, 0xcd, 0x69, 0x86, 0x9b, 0x9c, 0x69, 0x86, 0x53, 0x43, 0x77, 0x75, 0xb1,
- 0x22, 0xcd, 0x05, 0x85, 0x02, 0x3b, 0x54, 0xfe, 0x5b, 0x2f, 0xbe, 0x07, 0xd4, 0x80, 0x4c, 0x7f,
- 0x03, 0xb1, 0x9e, 0x31, 0x10, 0xf3, 0x18, 0xe5, 0x87, 0x67, 0xc1, 0x04, 0xa6, 0x92, 0x83, 0x87,
- 0xac, 0xcb, 0x69, 0x67, 0xce, 0x9a, 0xa1, 0x44, 0x91, 0x20, 0x28, 0x12, 0x6c, 0xb4, 0xe1, 0xdb,
- 0x73, 0x40, 0x16, 0xfe, 0x69, 0x7a, 0xf3, 0x98, 0xbb, 0x68, 0x6f, 0x9e, 0x4c, 0x99, 0x3e, 0x2f,
- 0xf3, 0x22, 0x7d, 0x26, 0x14, 0xb3, 0x11, 0x22, 0x2c, 0x75, 0x26, 0x94, 0xbe, 0x79, 0xda, 0x02,
- 0xa3, 0xf7, 0x05, 0x28, 0x3f, 0xdc, 0x4b, 0xbf, 0x2f, 0x40, 0xf9, 0xe1, 0xe4, 0xa3, 0x6e, 0x5e,
- 0xf8, 0x53, 0x20, 0x23, 0x1c, 0x69, 0x8c, 0x90, 0x25, 0x40, 0xa1, 0x22, 0xe5, 0x09, 0x08, 0x20,
- 0xa2, 0x7f, 0x03, 0xe8, 0x5f, 0xf8, 0x02, 0xc8, 0x6e, 0x88, 0xd4, 0xc7, 0xb7, 0x86, 0x9a, 0xf7,
- 0x10, 0x92, 0x20, 0x5b, 0x6e, 0x02, 0xd1, 0x3d, 0xb6, 0x5a, 0xcf, 0xa5, 0xd1, 0x93, 0x77, 0xb5,
- 0xe3, 0x57, 0x02, 0x26, 0x9c, 0x4e, 0x6a, 0xcb, 0x32, 0xae, 0xd2, 0x58, 0x6c, 0xc5, 0xc4, 0x21,
- 0x19, 0x17, 0x15, 0xe4, 0xb5, 0x42, 0xe3, 0xef, 0x81, 0x82, 0xfa, 0x96, 0x58, 0x4c, 0x6e, 0x4e,
- 0xb0, 0xd7, 0xd1, 0xd7, 0x28, 0xd2, 0x2b, 0x82, 0xad, 0x48, 0x2c, 0x27, 0x68, 0x45, 0x51, 0x67,
- 0x9c, 0x48, 0x84, 0xfb, 0xbb, 0x3f, 0xd4, 0x9e, 0xfc, 0x6a, 0x60, 0x78, 0xf0, 0xd2, 0x48, 0xcf,
- 0x55, 0xed, 0x46, 0x0f, 0x2e, 0x0a, 0xd8, 0x9a, 0xc3, 0x5a, 0x5a, 0x05, 0x67, 0x1b, 0x2a, 0x9c,
- 0x4d, 0xf7, 0x35, 0x23, 0xd7, 0x63, 0x9c, 0x03, 0xc8, 0x6f, 0x90, 0x77, 0x05, 0x5b, 0xc2, 0xf8,
- 0x39, 0xed, 0x38, 0x59, 0x29, 0xbc, 0xab, 0x48, 0x7f, 0x23, 0xb0, 0x25, 0xe2, 0x16, 0x7c, 0xb0,
- 0x60, 0xb4, 0xb5, 0x23, 0x79, 0xa7, 0x97, 0x1e, 0x23, 0xce, 0xf5, 0x4f, 0x76, 0x7d, 0xaf, 0x1d,
- 0xbf, 0x82, 0x07, 0x8b, 0xb6, 0xdb, 0x3b, 0x46, 0xbb, 0x0f, 0x8c, 0x7c, 0x71, 0x50, 0xed, 0xf9,
- 0x46, 0x3d, 0x7c, 0xd6, 0xbc, 0xc2, 0x02, 0x37, 0x0f, 0xb0, 0x7d, 0xc3, 0xad, 0x20, 0xdf, 0x98,
- 0x1e, 0xbd, 0xde, 0x40, 0x9b, 0x88, 0x6c, 0x89, 0xf1, 0x66, 0x0a, 0x9e, 0x9a, 0xd1, 0x1b, 0x53,
- 0x05, 0xfe, 0x9d, 0xb9, 0x4c, 0xc3, 0xdb, 0xf7, 0xe8, 0xce, 0x02, 0x63, 0x99, 0xb6, 0x8e, 0x20,
- 0x05, 0x99, 0xc8, 0xfb, 0x43, 0xed, 0xea, 0x89, 0x76, 0xff, 0x26, 0x39, 0xdc, 0x64, 0x33, 0x9e,
- 0xee, 0x44, 0x30, 0xd6, 0x74, 0xef, 0x58, 0x2a, 0x0a, 0x1f, 0xb6, 0x7b, 0x59, 0x91, 0xd6, 0x59,
- 0x2a, 0x6a, 0x15, 0xfe, 0x06, 0x96, 0xc5, 0xfb, 0x43, 0xed, 0xf8, 0xa7, 0x3a, 0xf4, 0x91, 0xda,
- 0xdf, 0xaf, 0xb6, 0x9d, 0xd5, 0xce, 0xdc, 0x4d, 0x5e, 0x1e, 0xc0, 0xe7, 0x64, 0xec, 0x0a, 0xec,
- 0x30, 0x07, 0x8a, 0xe2, 0x2d, 0xd1, 0x68, 0x24, 0x96, 0x90, 0x1b, 0xa4, 0x7a, 0xac, 0x14, 0xf2,
- 0xd1, 0xee, 0xc8, 0x0e, 0x45, 0x7a, 0x5b, 0x70, 0x14, 0x8a, 0xb5, 0x84, 0x23, 0xd1, 0xc9, 0x8c,
- 0xe4, 0xb9, 0x43, 0x38, 0x39, 0x41, 0x1f, 0x7f, 0x57, 0xaf, 0x7a, 0xb4, 0x43, 0xeb, 0x3e, 0xea,
- 0x27, 0x89, 0x3b, 0x65, 0xfe, 0x16, 0xbc, 0x15, 0x5e, 0xe6, 0x8f, 0x27, 0x22, 0xd1, 0x32, 0x7f,
- 0x8b, 0x99, 0xd2, 0xe3, 0xe8, 0x16, 0xbe, 0x05, 0x72, 0x09, 0x46, 0x90, 0x8c, 0xe3, 0xf3, 0x41,
- 0xe8, 0xc6, 0x37, 0x1a, 0x2e, 0xf2, 0x84, 0x8b, 0xbb, 0xaf, 0x62, 0x63, 0x31, 0xdc, 0xff, 0x1d,
- 0x75, 0x6c, 0x1f, 0x4b, 0x3f, 0xdd, 0xa0, 0x5a, 0x17, 0x43, 0x30, 0x5f, 0x20, 0x5a, 0x47, 0xcc,
- 0x23, 0x29, 0xf8, 0xa8, 0x17, 0xfe, 0x2f, 0x1c, 0xba, 0x46, 0x03, 0x97, 0xe1, 0x44, 0xe2, 0xe9,
- 0x6a, 0xff, 0xcc, 0xf7, 0xa7, 0xbc, 0x86, 0x96, 0x70, 0xd5, 0x97, 0xf6, 0xf7, 0xa7, 0x74, 0xc3,
- 0x00, 0x8a, 0x05, 0x97, 0x59, 0xf2, 0x37, 0xf1, 0xed, 0x15, 0x2c, 0x78, 0x26, 0xd9, 0x4f, 0x6e,
- 0xe2, 0xf6, 0x73, 0xc6, 0xe5, 0xb9, 0xeb, 0x68, 0x07, 0x25, 0x82, 0x1b, 0x81, 0xf8, 0x5f, 0x79,
- 0x40, 0x11, 0xc9, 0x0f, 0x1d, 0xc3, 0x67, 0x9b, 0x0e, 0x9b, 0xdd, 0x53, 0xe2, 0x59, 0x58, 0x65,
- 0xbf, 0x5d, 0x0a, 0x9f, 0xf8, 0x33, 0x4c, 0x22, 0x69, 0x6b, 0x37, 0x86, 0x2b, 0xcd, 0xe0, 0x51,
- 0xa6, 0x75, 0x8d, 0xbe, 0x11, 0x3c, 0xca, 0xb2, 0x05, 0x8d, 0x74, 0x0e, 0x01, 0x50, 0x70, 0xa0,
- 0x91, 0xff, 0x83, 0x07, 0xcc, 0xb5, 0x01, 0x67, 0x53, 0x3b, 0xd2, 0xc1, 0xd0, 0xa5, 0x8a, 0x54,
- 0x02, 0xe6, 0x09, 0x4e, 0xe4, 0x22, 0x76, 0x26, 0x39, 0x53, 0x33, 0x86, 0x9d, 0xb9, 0xa9, 0xb2,
- 0x33, 0xf7, 0x50, 0xd9, 0xd9, 0x8e, 0x46, 0xc4, 0xce, 0x36, 0xe0, 0x2c, 0x3b, 0xa7, 0x93, 0x9d,
- 0x1d, 0xc8, 0xe5, 0xff, 0xc0, 0x81, 0xfc, 0x37, 0x12, 0x91, 0xe8, 0xe3, 0xc8, 0xcb, 0xe6, 0x22,
- 0x9c, 0x99, 0x20, 0xff, 0x7b, 0x0f, 0x28, 0xa0, 0x21, 0xb3, 0x2c, 0x96, 0xce, 0x25, 0x34, 0x8b,
- 0x59, 0xe4, 0xb3, 0x9a, 0xb9, 0xf1, 0x8f, 0x25, 0x93, 0x19, 0x3e, 0xab, 0x73, 0x96, 0xfc, 0x1f,
- 0x3d, 0x60, 0x9e, 0x03, 0x3c, 0xcb, 0x6e, 0xe9, 0xf4, 0x38, 0x5d, 0xd0, 0x2b, 0xfe, 0xa9, 0x0a,
- 0xe4, 0xea, 0x8b, 0xd6, 0x57, 0xf1, 0xf7, 0xe0, 0xf7, 0x1c, 0xc8, 0x91, 0xf6, 0x06, 0x43, 0xe1,
- 0xe0, 0xce, 0xb0, 0x0c, 0xd9, 0x57, 0xc6, 0x4c, 0x78, 0x40, 0x7e, 0xdf, 0xe7, 0x4b, 0x55, 0x14,
- 0x8f, 0xf2, 0x51, 0x45, 0xda, 0x0a, 0x9f, 0xc6, 0xe1, 0x4d, 0xbd, 0x56, 0x39, 0xa9, 0xa6, 0x75,
- 0x77, 0xa8, 0xc7, 0x7a, 0xc8, 0x1d, 0x96, 0x9d, 0x7d, 0xc9, 0x53, 0x57, 0x7d, 0x13, 0xaa, 0xf5,
- 0xd1, 0x2f, 0x86, 0x4f, 0x7a, 0x16, 0xc2, 0x27, 0x2a, 0xa9, 0x4f, 0x56, 0xee, 0x5d, 0x5d, 0x19,
- 0x34, 0x07, 0xda, 0xc7, 0x81, 0xa2, 0x5a, 0x74, 0x1b, 0x05, 0xf5, 0x9e, 0xab, 0x9f, 0xbd, 0x6f,
- 0xdc, 0x56, 0xac, 0x4f, 0x62, 0xe9, 0x38, 0x35, 0xe2, 0x51, 0xfe, 0x2d, 0x45, 0x5a, 0x04, 0xc9,
- 0xb3, 0x5c, 0x38, 0x4f, 0xd2, 0xc7, 0xfc, 0x42, 0x63, 0x5b, 0xcd, 0x97, 0xd9, 0xc7, 0x46, 0xc4,
- 0x2e, 0x5e, 0xf9, 0x01, 0x25, 0x80, 0x1f, 0x56, 0xa2, 0x14, 0xcb, 0x6a, 0x4e, 0x80, 0xff, 0x89,
- 0x03, 0x10, 0x7f, 0x70, 0xbb, 0x1c, 0x8b, 0x47, 0x9a, 0x83, 0x61, 0xfd, 0xc3, 0x90, 0x77, 0x19,
- 0x11, 0x5d, 0x41, 0x1f, 0xf5, 0x53, 0xe3, 0xd6, 0x89, 0x47, 0xf9, 0x3d, 0x8a, 0xb4, 0x1c, 0x42,
- 0x32, 0xd2, 0xfe, 0xaf, 0x87, 0x07, 0x8c, 0xd1, 0xbb, 0xc0, 0xd0, 0x1c, 0xaa, 0xf9, 0xe7, 0x26,
- 0x33, 0x87, 0xca, 0x28, 0xf9, 0xa2, 0x3e, 0x99, 0x9b, 0x9c, 0xee, 0xe8, 0x35, 0x8c, 0x85, 0x7e,
- 0xe7, 0xcb, 0xf7, 0x76, 0xf4, 0xbb, 0xbd, 0x8d, 0xcf, 0xff, 0x2d, 0x42, 0x3f, 0xfd, 0x40, 0xbe,
- 0x8f, 0xf9, 0x85, 0x86, 0xfe, 0xa2, 0x6f, 0xcd, 0xa4, 0x86, 0x8e, 0xd3, 0xb5, 0xf4, 0x81, 0x7f,
- 0xcd, 0x81, 0x7c, 0xe6, 0xc5, 0x73, 0xb8, 0xd8, 0xb9, 0xaf, 0x47, 0x0f, 0x79, 0xc9, 0x58, 0xc5,
- 0xf1, 0x28, 0xbf, 0x03, 0x8f, 0x97, 0x7a, 0x31, 0xdd, 0xc7, 0xfc, 0x42, 0xe3, 0x7d, 0x0e, 0x4e,
- 0x65, 0xbc, 0x08, 0xcb, 0xf6, 0xe7, 0x8d, 0x6d, 0x58, 0x76, 0x79, 0x8c, 0xda, 0x86, 0x65, 0xb7,
- 0xf7, 0x91, 0x09, 0x96, 0xe9, 0x47, 0x92, 0x7d, 0xcc, 0x2f, 0x8c, 0x65, 0x61, 0xaa, 0x58, 0xbe,
- 0xc1, 0xe1, 0x50, 0x3e, 0x35, 0x6c, 0x16, 0x8f, 0x8e, 0x27, 0xde, 0x7d, 0x4f, 0x8e, 0x59, 0x1e,
- 0x8f, 0xf2, 0xef, 0x22, 0xfe, 0xa6, 0x51, 0x8b, 0x23, 0xe9, 0x3e, 0x17, 0x18, 0x1a, 0x7e, 0x05,
- 0x9c, 0x94, 0x8c, 0xc2, 0x7b, 0x1c, 0xc8, 0xa5, 0xde, 0x5b, 0x82, 0x0b, 0x1d, 0x23, 0xb2, 0xde,
- 0xd9, 0xf2, 0x2d, 0x4a, 0x5d, 0x18, 0x8f, 0xf2, 0x2d, 0x8a, 0x54, 0x06, 0x8b, 0x1d, 0x6f, 0x35,
- 0xa9, 0xed, 0xad, 0x3e, 0x57, 0x28, 0x1a, 0xef, 0x7a, 0xf8, 0xf2, 0xe4, 0xd0, 0x6d, 0x5c, 0xb3,
- 0xf8, 0x61, 0x25, 0xea, 0x27, 0x0e, 0x7f, 0xc7, 0x81, 0x22, 0xfb, 0xfb, 0x39, 0x36, 0x7e, 0x71,
- 0x79, 0x44, 0xc9, 0xc6, 0x2f, 0x6e, 0x0f, 0xf0, 0xf0, 0x6d, 0x9c, 0x22, 0xbd, 0x08, 0x7d, 0xa9,
- 0x9f, 0xe1, 0xf1, 0x8d, 0x51, 0x86, 0x66, 0xb7, 0x11, 0x6e, 0x78, 0xb0, 0xd9, 0x19, 0x42, 0xf1,
- 0x67, 0x0e, 0xbf, 0xfb, 0xcf, 0xbe, 0x5d, 0x62, 0xd3, 0xa3, 0xae, 0xaf, 0xda, 0xd8, 0xf4, 0xa8,
- 0xfb, 0x03, 0x28, 0xfc, 0x69, 0x4e, 0x91, 0x5e, 0x86, 0x8b, 0xd9, 0xe9, 0x98, 0xd7, 0x48, 0x11,
- 0x9e, 0x1b, 0xbb, 0x18, 0x4d, 0x78, 0x3b, 0xdc, 0x96, 0x96, 0x09, 0x57, 0x1a, 0x97, 0xdd, 0xc2,
- 0xb3, 0x1e, 0x14, 0xe2, 0xb4, 0x3d, 0x28, 0x61, 0x9b, 0xb9, 0xeb, 0x2b, 0x24, 0xb6, 0x99, 0xbb,
- 0xbf, 0x4a, 0xc1, 0xdf, 0xe6, 0x14, 0xe9, 0x2d, 0x38, 0xf1, 0xf7, 0x38, 0x7c, 0x13, 0xaf, 0x8a,
- 0x30, 0xb2, 0x03, 0xbe, 0x93, 0x5e, 0x8c, 0x54, 0x7e, 0x40, 0xfe, 0xfa, 0x10, 0xaa, 0x1c, 0xc8,
- 0xa5, 0x2e, 0x75, 0xb7, 0x09, 0x2f, 0xfb, 0xc0, 0x84, 0x4d, 0x78, 0x6d, 0x8f, 0x1e, 0xf0, 0xe7,
- 0x38, 0x45, 0xfa, 0x2b, 0xdd, 0x92, 0xea, 0xea, 0x90, 0xdc, 0x69, 0x84, 0xbe, 0xef, 0xab, 0x72,
- 0xc2, 0xee, 0x0f, 0xb5, 0xab, 0xd7, 0x0e, 0x0f, 0x0f, 0x9d, 0x1b, 0x1e, 0x3c, 0xee, 0xa7, 0xef,
- 0xa3, 0x1a, 0xee, 0xff, 0x0e, 0xd7, 0xc6, 0xdc, 0x2f, 0xa4, 0x89, 0xfb, 0xbb, 0x3c, 0x00, 0x3a,
- 0x2f, 0xaf, 0xb7, 0xf1, 0x80, 0xeb, 0x03, 0x04, 0x36, 0x1e, 0x70, 0xbf, 0x01, 0x9f, 0x1f, 0xe4,
- 0x14, 0xe9, 0x1d, 0x68, 0xbc, 0xc0, 0x51, 0xef, 0xb8, 0xbf, 0xdd, 0xb7, 0x2e, 0x65, 0xd1, 0x04,
- 0x51, 0xb1, 0x43, 0x78, 0x78, 0x5c, 0xf0, 0x6b, 0x0e, 0xe4, 0x33, 0x97, 0xd1, 0xdb, 0xac, 0xbb,
- 0xfd, 0xa2, 0x7a, 0x5f, 0x71, 0x45, 0x63, 0x24, 0xd2, 0x18, 0x96, 0x2b, 0x82, 0xd1, 0x50, 0xc5,
- 0xa6, 0x44, 0x22, 0x5a, 0x13, 0x69, 0xd8, 0xcf, 0x7f, 0xca, 0x29, 0xd2, 0x0a, 0x98, 0x8b, 0x2f,
- 0xb1, 0xc7, 0xa4, 0xf7, 0xe1, 0x1f, 0x6e, 0xac, 0x8e, 0x66, 0x55, 0x0f, 0x83, 0x0f, 0x6b, 0x56,
- 0x95, 0x0d, 0x64, 0xd4, 0xf0, 0x4f, 0x1c, 0x28, 0xb4, 0xdd, 0x80, 0x0c, 0x9f, 0x74, 0x55, 0xde,
- 0xd6, 0x0d, 0xb9, 0x3e, 0xff, 0xd8, 0x15, 0xe2, 0x51, 0xfe, 0x3c, 0xa7, 0x48, 0x35, 0xf0, 0xc9,
- 0x71, 0xae, 0x51, 0xf6, 0x8d, 0x57, 0x01, 0xe1, 0xe1, 0x0d, 0x3e, 0x4d, 0x5a, 0xcf, 0xe8, 0x55,
- 0x77, 0x27, 0xfe, 0x48, 0xd2, 0x1a, 0xcc, 0x33, 0x64, 0x36, 0xb2, 0xda, 0xef, 0xeb, 0xf2, 0x2d,
- 0x19, 0xab, 0x38, 0x1e, 0xe5, 0x2f, 0x71, 0x8a, 0xf4, 0x13, 0xb8, 0x7c, 0xa2, 0xf7, 0x39, 0xf9,
- 0x26, 0x5c, 0x13, 0xe1, 0xe0, 0xc7, 0xb0, 0x6e, 0x82, 0x38, 0x20, 0xcb, 0xeb, 0x78, 0xe5, 0x07,
- 0xe6, 0x42, 0xdb, 0x9a, 0x39, 0x54, 0xb0, 0xbe, 0xb7, 0x5d, 0x8e, 0xe3, 0xd4, 0xf7, 0xce, 0xdb,
- 0x92, 0x9c, 0xfa, 0xde, 0xe5, 0x86, 0x1d, 0xfe, 0x06, 0xa7, 0x48, 0x1b, 0xe0, 0x93, 0x2e, 0xf7,
- 0xec, 0x30, 0x5a, 0xde, 0xed, 0x22, 0x9e, 0xe4, 0xb9, 0x43, 0x0e, 0xf5, 0xde, 0x00, 0x77, 0x3e,
- 0xc8, 0xb4, 0xcd, 0xad, 0x65, 0xc2, 0x02, 0xe8, 0x6f, 0x0b, 0x1b, 0x86, 0x02, 0xbc, 0x68, 0xed,
- 0x98, 0x58, 0xec, 0xc0, 0xf2, 0xb8, 0xcb, 0x15, 0x28, 0x36, 0x1f, 0xc7, 0xed, 0x4a, 0x0e, 0xfe,
- 0x9f, 0x90, 0xea, 0x13, 0xb4, 0xa3, 0x5f, 0x8e, 0xf4, 0xb4, 0x8f, 0x45, 0x6a, 0x63, 0x53, 0xd4,
- 0x37, 0x89, 0xba, 0x08, 0x43, 0x8d, 0xfc, 0x23, 0xc0, 0x90, 0x2e, 0x30, 0xdf, 0x7a, 0xa8, 0xc0,
- 0x92, 0x85, 0x26, 0x96, 0x73, 0x5c, 0xef, 0xca, 0xb0, 0x71, 0x8e, 0xfb, 0xcd, 0x0d, 0xfc, 0xcf,
- 0x39, 0x45, 0xfa, 0x1b, 0x58, 0x36, 0x81, 0xe9, 0x9b, 0xfb, 0xc4, 0xbe, 0x49, 0xd5, 0xc6, 0xe8,
- 0x12, 0x1e, 0x11, 0xba, 0x2e, 0x5a, 0xdb, 0x16, 0xa9, 0x78, 0xca, 0xe5, 0x6c, 0xbe, 0x63, 0x35,
- 0xeb, 0x3c, 0x2b, 0x3e, 0x09, 0x9e, 0x22, 0xfb, 0xeb, 0xbe, 0x49, 0xd4, 0xc5, 0x48, 0xf2, 0x3d,
- 0x22, 0x24, 0x5d, 0xf3, 0x80, 0xb9, 0x8e, 0xc3, 0xbc, 0x90, 0xc5, 0x81, 0xdb, 0x01, 0x6c, 0x1f,
- 0x3f, 0x5e, 0x95, 0x78, 0x94, 0xff, 0x05, 0xa7, 0x48, 0x3b, 0xe0, 0xca, 0x09, 0xcc, 0x3d, 0x46,
- 0xda, 0xfb, 0x26, 0x53, 0x19, 0x61, 0x2a, 0xea, 0xdb, 0xf3, 0xf0, 0x31, 0x55, 0x69, 0x7c, 0x52,
- 0x47, 0xd9, 0x25, 0x8f, 0xe3, 0x78, 0xde, 0x92, 0x31, 0xce, 0xb2, 0x39, 0x97, 0xc1, 0xce, 0xb3,
- 0x80, 0xfc, 0xbf, 0x70, 0x8a, 0xf4, 0x36, 0x2c, 0xc1, 0x27, 0x01, 0xfd, 0xa4, 0x82, 0x1f, 0x9f,
- 0x5b, 0xf3, 0xbd, 0xec, 0x0a, 0xc6, 0x97, 0x6c, 0x6a, 0xe7, 0xbb, 0xd5, 0x5b, 0x37, 0x92, 0x83,
- 0x9d, 0x24, 0xa5, 0xa4, 0xed, 0xac, 0x7a, 0xa2, 0x5d, 0x3b, 0x7d, 0x53, 0xbd, 0xfe, 0x69, 0xf2,
- 0xf2, 0x80, 0xbf, 0x21, 0xb4, 0x6b, 0x17, 0x42, 0x53, 0x84, 0x7f, 0xef, 0x11, 0xa0, 0x29, 0x8a,
- 0xa7, 0x84, 0x82, 0x05, 0x1e, 0x3a, 0xc5, 0xd4, 0x38, 0x5e, 0xb2, 0x34, 0x85, 0x05, 0xb3, 0x0e,
- 0x24, 0xf9, 0xf8, 0xf1, 0xaa, 0xc4, 0xa3, 0xfc, 0x2f, 0x39, 0x45, 0xfa, 0x3b, 0x58, 0x31, 0xbe,
- 0xfd, 0x56, 0x8f, 0x1f, 0x56, 0x3b, 0x49, 0xde, 0x8d, 0x6f, 0x92, 0xf5, 0x11, 0xde, 0xc2, 0xf0,
- 0x51, 0xe0, 0x8d, 0x1c, 0x81, 0x80, 0xff, 0xc8, 0xf8, 0x06, 0x46, 0x02, 0x75, 0x4a, 0xdf, 0x80,
- 0xca, 0xd7, 0x4f, 0xe9, 0x1b, 0xd0, 0x59, 0xd8, 0x7c, 0x92, 0x08, 0xe4, 0xb8, 0x78, 0x30, 0x53,
- 0xb4, 0x7d, 0x93, 0xa9, 0x8c, 0x30, 0xf6, 0x31, 0x07, 0x0f, 0x70, 0x8f, 0x42, 0x24, 0xc9, 0x39,
- 0x06, 0xe4, 0x6d, 0xe2, 0x3f, 0x3f, 0xac, 0x34, 0x46, 0x02, 0xff, 0xbd, 0x07, 0x05, 0x4d, 0x98,
- 0xcc, 0x68, 0x67, 0xd0, 0xc4, 0x9e, 0x38, 0xed, 0x63, 0x17, 0x98, 0xb5, 0x91, 0xa6, 0x26, 0xfc,
- 0x6e, 0x2c, 0xc2, 0xde, 0xff, 0xe6, 0x14, 0x69, 0x3f, 0xb4, 0xe7, 0x56, 0x93, 0xc3, 0xa5, 0xc6,
- 0x55, 0xdc, 0xbe, 0xb7, 0x6d, 0xe5, 0xc3, 0xfd, 0x9f, 0xe0, 0x17, 0x6f, 0xcc, 0x8a, 0xf6, 0x84,
- 0x33, 0x24, 0xc5, 0xda, 0x99, 0x3e, 0xff, 0xbe, 0x48, 0x6c, 0x8f, 0xbe, 0x24, 0x40, 0x67, 0xc7,
- 0x2f, 0x9e, 0x57, 0x8f, 0x5d, 0xf0, 0x47, 0x23, 0x0d, 0x24, 0x01, 0x0d, 0x21, 0x77, 0x0f, 0x0c,
- 0x3d, 0x02, 0xd4, 0x92, 0xa4, 0xb6, 0xe3, 0x1e, 0x50, 0xc0, 0x26, 0x2b, 0xc3, 0x25, 0x29, 0x30,
- 0x48, 0x32, 0x99, 0xc7, 0xc6, 0xdf, 0x5d, 0x4e, 0x91, 0xb6, 0xc2, 0x79, 0x2e, 0xc9, 0xce, 0xbe,
- 0xe7, 0x52, 0x21, 0x2d, 0x1a, 0x69, 0x28, 0xf3, 0x93, 0x4b, 0x86, 0xd1, 0x59, 0x5e, 0x9c, 0x61,
- 0x9d, 0xfc, 0xae, 0x6b, 0xf4, 0xc0, 0x51, 0x84, 0x92, 0x10, 0x6c, 0x7c, 0x14, 0x9a, 0x4d, 0x9f,
- 0x7d, 0xa7, 0x07, 0x14, 0xbb, 0x3d, 0x86, 0x01, 0x9f, 0x66, 0xfd, 0x50, 0xf7, 0x57, 0x4d, 0x7c,
- 0xcb, 0x26, 0x50, 0x2b, 0x1e, 0xe5, 0xbf, 0xe2, 0x14, 0x49, 0x84, 0x0b, 0x52, 0xbc, 0xad, 0xe1,
- 0x4b, 0x55, 0x80, 0x90, 0xd1, 0xcc, 0x3f, 0x0a, 0xfe, 0x08, 0xa1, 0xa1, 0x57, 0x73, 0x82, 0xd8,
- 0x07, 0x40, 0x3e, 0x99, 0x02, 0xc9, 0x1a, 0xfe, 0x67, 0x0e, 0x00, 0x2b, 0xa7, 0x18, 0xfa, 0x1c,
- 0x6b, 0x36, 0x73, 0xaf, 0xd0, 0xb7, 0x30, 0x65, 0x59, 0x3c, 0xca, 0x1f, 0xe4, 0x14, 0xa9, 0x0a,
- 0x96, 0x62, 0xbe, 0xa0, 0x73, 0x02, 0x49, 0xac, 0x2e, 0x65, 0x09, 0xc2, 0x43, 0x1d, 0xac, 0x79,
- 0x10, 0x3c, 0x04, 0xf1, 0xe0, 0x7f, 0x8b, 0x57, 0xe6, 0x74, 0x7e, 0x97, 0x73, 0x65, 0x6e, 0xcb,
- 0xda, 0x73, 0xae, 0xcc, 0x1d, 0xe9, 0x61, 0x6d, 0xa9, 0xa6, 0x36, 0xd2, 0xf7, 0x85, 0xf6, 0x71,
- 0xab, 0x2f, 0x65, 0x09, 0x9a, 0xda, 0x16, 0xb8, 0xf9, 0xc1, 0xa7, 0x66, 0xac, 0xbb, 0xfe, 0x89,
- 0x03, 0xf9, 0x4c, 0xc2, 0x8f, 0x6d, 0x0d, 0x6e, 0x4f, 0xbf, 0xb2, 0xad, 0xc1, 0x9d, 0xb9, 0x42,
- 0xff, 0x06, 0xef, 0x57, 0xa1, 0xec, 0x58, 0x7a, 0x02, 0x3e, 0x17, 0x18, 0x8e, 0xa1, 0xf1, 0x69,
- 0xa0, 0x94, 0xee, 0x70, 0xfc, 0x0b, 0x07, 0xf2, 0x99, 0x64, 0x0f, 0xdb, 0x54, 0xec, 0xa9, 0x37,
- 0xb6, 0xa9, 0x38, 0xf3, 0x44, 0xfe, 0x2d, 0xde, 0x9a, 0x40, 0xbb, 0x54, 0xec, 0x54, 0x9c, 0x30,
- 0x34, 0x95, 0x6d, 0xbe, 0xf4, 0x51, 0x46, 0x9f, 0xd1, 0xff, 0xe5, 0x00, 0xb0, 0x72, 0x0b, 0x6c,
- 0xa2, 0xc4, 0x24, 0x78, 0xd8, 0x44, 0xc9, 0x96, 0x90, 0xf0, 0x0d, 0xa7, 0x48, 0xaf, 0xc1, 0x52,
- 0xf5, 0x60, 0xb7, 0xf6, 0xdd, 0x45, 0x86, 0xab, 0xee, 0x9d, 0x18, 0xe9, 0x69, 0xf7, 0xad, 0xc1,
- 0x25, 0x44, 0x88, 0x7a, 0xcf, 0x0f, 0xdf, 0xfd, 0x04, 0x97, 0xdc, 0x1f, 0x6a, 0x1f, 0xbe, 0xf7,
- 0x79, 0xf2, 0xd3, 0xb3, 0x38, 0xad, 0x3a, 0xd9, 0xd5, 0xaf, 0xb6, 0xfe, 0x8c, 0x72, 0x8e, 0xde,
- 0xf0, 0x6d, 0x4b, 0xdb, 0x84, 0x2b, 0xe3, 0x89, 0x48, 0x54, 0x9f, 0xf5, 0xaf, 0x39, 0x50, 0x68,
- 0xdb, 0xe2, 0xb6, 0x09, 0x9d, 0x33, 0xed, 0xc0, 0x26, 0x74, 0x2e, 0x3b, 0xe4, 0x7c, 0x2b, 0xa7,
- 0x48, 0x15, 0x10, 0xe2, 0xcb, 0x09, 0x19, 0x72, 0x96, 0xe2, 0x30, 0x26, 0xc9, 0x9a, 0x46, 0x56,
- 0x07, 0xdf, 0xaf, 0x80, 0x89, 0x2a, 0xa4, 0x95, 0xa8, 0x35, 0x9f, 0x73, 0x8a, 0x74, 0x94, 0x83,
- 0x8b, 0x41, 0x31, 0x4a, 0x32, 0x27, 0x1b, 0xf6, 0x7e, 0x69, 0xfb, 0x66, 0x7f, 0x5d, 0xa4, 0x5e,
- 0xcc, 0x5c, 0x55, 0x21, 0x56, 0xac, 0xe2, 0x41, 0xe5, 0xce, 0xfa, 0x78, 0x30, 0x1a, 0xaa, 0xdc,
- 0x5b, 0x25, 0x70, 0x1e, 0xb1, 0x28, 0x18, 0x8d, 0x86, 0x43, 0xf5, 0x28, 0x11, 0xa0, 0xf2, 0xbd,
- 0x78, 0xa4, 0xb9, 0xda, 0x01, 0xd9, 0xf1, 0x14, 0x58, 0x0a, 0x80, 0x14, 0x0d, 0x6d, 0x91, 0xf7,
- 0x4b, 0x2d, 0x89, 0xdd, 0x70, 0x5e, 0xb6, 0xc7, 0x97, 0xaf, 0xff, 0x15, 0x89, 0x85, 0x7e, 0x8a,
- 0xea, 0xf9, 0x3d, 0x3b, 0x8b, 0x40, 0x01, 0x53, 0xe9, 0x5f, 0xed, 0x28, 0xa8, 0xa8, 0x5c, 0x47,
- 0xcd, 0xef, 0xff, 0x07, 0x00, 0x00, 0xff, 0xff, 0xd1, 0x63, 0xd6, 0x56, 0x98, 0xae, 0x00, 0x00,
+ 0xba, 0xe0, 0x56, 0xb7, 0x24, 0xa4, 0xd4, 0x49, 0x22, 0x81, 0xdc, 0x1c, 0x6e, 0xca, 0x60, 0x43,
+ 0xa1, 0x03, 0x0a, 0xf9, 0x40, 0x8c, 0x6d, 0x4a, 0x12, 0x06, 0x1e, 0x18, 0xe3, 0xf6, 0xf8, 0x08,
+ 0xde, 0x7b, 0xeb, 0xd7, 0xa8, 0x0b, 0xd1, 0xa6, 0xa5, 0x6e, 0x77, 0xb5, 0x60, 0x18, 0x87, 0x63,
+ 0xc1, 0x46, 0x20, 0xb0, 0x84, 0xd8, 0x02, 0xcc, 0x21, 0x99, 0x87, 0x38, 0x6c, 0x7c, 0x49, 0xc0,
+ 0xf8, 0x81, 0x90, 0x04, 0xc4, 0xc6, 0x46, 0xec, 0x9b, 0xd9, 0x98, 0xd8, 0x89, 0xd8, 0x89, 0xd9,
+ 0xdd, 0xd9, 0x98, 0x89, 0x89, 0x98, 0x55, 0x55, 0x4b, 0xb3, 0x07, 0x13, 0xb1, 0x33, 0x31, 0x11,
+ 0xb3, 0x11, 0x1b, 0x2f, 0x2a, 0x33, 0xab, 0x2a, 0xeb, 0x68, 0x5d, 0x34, 0x84, 0x84, 0xf5, 0x07,
+ 0xd4, 0x5f, 0x1e, 0x95, 0xf9, 0xdd, 0xf9, 0xe5, 0x97, 0x99, 0x60, 0xee, 0x8e, 0x7a, 0xa9, 0x7c,
+ 0x97, 0x18, 0x69, 0x2c, 0x6f, 0x0c, 0x36, 0x05, 0x1b, 0xc4, 0x78, 0x45, 0x2c, 0x1e, 0x4d, 0x44,
+ 0x61, 0xae, 0x06, 0x23, 0x20, 0xdf, 0x13, 0x0d, 0xd1, 0x68, 0x43, 0x44, 0xac, 0x0c, 0xc6, 0xc2,
+ 0x95, 0xbb, 0x12, 0x89, 0xd8, 0x8e, 0x68, 0x68, 0x1f, 0xae, 0xe7, 0x5b, 0x40, 0x15, 0x05, 0x9b,
+ 0x9a, 0xa2, 0x89, 0x60, 0x22, 0x1c, 0x6d, 0x92, 0x6c, 0xa5, 0xe8, 0xd7, 0x8e, 0xe6, 0x9d, 0x95,
+ 0x52, 0x22, 0xde, 0x5c, 0x9f, 0x20, 0xa5, 0x65, 0xe8, 0xbf, 0xfa, 0xf2, 0x06, 0xb1, 0xa9, 0x5c,
+ 0xda, 0x1b, 0x6c, 0x68, 0x10, 0xe3, 0x95, 0xd1, 0x18, 0x6a, 0xef, 0xd2, 0xd7, 0xbc, 0x3d, 0xc1,
+ 0x48, 0x38, 0x14, 0x4c, 0x88, 0x95, 0xfa, 0x1f, 0xb8, 0x80, 0xbd, 0xe9, 0x05, 0xa0, 0x36, 0xda,
+ 0xd8, 0x18, 0x6d, 0x0a, 0x88, 0x52, 0x0c, 0x56, 0x80, 0x8c, 0xfa, 0x68, 0x48, 0x2c, 0x65, 0xfc,
+ 0xcc, 0xb2, 0xfc, 0x1a, 0x9f, 0x2c, 0xcc, 0xe3, 0x10, 0x80, 0x2f, 0x1c, 0xbe, 0x77, 0x52, 0xe9,
+ 0x3c, 0x3f, 0x72, 0xf2, 0xec, 0x70, 0x6f, 0x6f, 0xf2, 0xc2, 0x81, 0x00, 0x02, 0xc3, 0x6a, 0x30,
+ 0xab, 0x51, 0x94, 0xa4, 0x60, 0x83, 0x58, 0xea, 0xf1, 0x33, 0xcb, 0x72, 0x6a, 0xfc, 0xb2, 0xb0,
+ 0x90, 0xd3, 0x61, 0x3c, 0xa4, 0x5b, 0x0d, 0xdd, 0xeb, 0x56, 0x0f, 0xf4, 0x06, 0xf4, 0x42, 0xb8,
+ 0x0a, 0x64, 0xc5, 0x45, 0xa9, 0x39, 0x92, 0x28, 0xf5, 0xfa, 0x99, 0x65, 0xd9, 0x35, 0x4f, 0xc8,
+ 0xc2, 0x5c, 0x8e, 0x80, 0xf8, 0x3c, 0xdc, 0x32, 0x39, 0x70, 0x42, 0x3d, 0xdf, 0x15, 0x20, 0x50,
+ 0x58, 0x07, 0x32, 0x42, 0xc1, 0x44, 0xb0, 0x34, 0xc3, 0xcf, 0x2c, 0xcb, 0xe5, 0xe7, 0x55, 0x60,
+ 0x0c, 0x55, 0xe8, 0x18, 0xaa, 0x78, 0x03, 0x61, 0xa8, 0x66, 0x9e, 0x2c, 0x14, 0x73, 0xa8, 0xa6,
+ 0xde, 0x8f, 0x7a, 0xea, 0x9a, 0xda, 0xde, 0x13, 0x40, 0x30, 0xf8, 0x3c, 0xc8, 0x89, 0x8b, 0xef,
+ 0x37, 0x8b, 0x52, 0x62, 0x53, 0x5d, 0x69, 0x26, 0x1a, 0x36, 0xfa, 0xb6, 0x09, 0xe5, 0xcd, 0x3f,
+ 0x03, 0xe6, 0x9f, 0x30, 0x0c, 0x0a, 0xf7, 0x8a, 0x3b, 0xde, 0xa5, 0xd0, 0x5b, 0x9a, 0x85, 0x46,
+ 0x32, 0xbf, 0x82, 0xa2, 0x78, 0xc5, 0xdb, 0xe2, 0x0e, 0xc1, 0xac, 0x52, 0xc3, 0xca, 0xc2, 0x93,
+ 0x9c, 0xbd, 0x21, 0x9f, 0xa7, 0x7e, 0xf6, 0xf1, 0xc8, 0xd9, 0xe3, 0x04, 0x29, 0xf6, 0xe2, 0xea,
+ 0x27, 0x65, 0x61, 0x01, 0xf0, 0x71, 0x14, 0x6d, 0xf8, 0xbc, 0x91, 0xfd, 0xe7, 0x92, 0x27, 0xaf,
+ 0xe2, 0x09, 0xb1, 0xff, 0xec, 0x05, 0x05, 0xb8, 0x70, 0x4b, 0x58, 0x4a, 0x4c, 0x07, 0xe2, 0x6d,
+ 0xb0, 0x10, 0xcf, 0xe7, 0x20, 0x9e, 0x36, 0x8f, 0xb7, 0x82, 0x91, 0x66, 0xf1, 0x71, 0xa0, 0xdf,
+ 0x72, 0x59, 0x78, 0x1a, 0x2c, 0xe1, 0x6c, 0x24, 0xe2, 0x21, 0xa6, 0xa1, 0xd2, 0x7a, 0x7a, 0xb8,
+ 0x5b, 0xa7, 0xe4, 0x41, 0x06, 0x14, 0x58, 0x3f, 0x09, 0x37, 0x80, 0xcc, 0x98, 0x18, 0x6f, 0x94,
+ 0x10, 0x29, 0x47, 0x61, 0xf4, 0x52, 0x59, 0x28, 0xe1, 0x70, 0x55, 0xdb, 0x80, 0x30, 0xd0, 0x18,
+ 0x86, 0xb5, 0x7f, 0x1e, 0xd2, 0x75, 0xc9, 0x30, 0x5e, 0x03, 0x79, 0xc2, 0x9e, 0x60, 0x38, 0x12,
+ 0xdc, 0x11, 0x11, 0x03, 0xe2, 0xfb, 0xd5, 0x2f, 0xcb, 0xc2, 0x0f, 0x40, 0x35, 0x67, 0x01, 0xf2,
+ 0x9c, 0xfa, 0x8f, 0x57, 0x86, 0x7b, 0x2f, 0xd2, 0x3a, 0x4f, 0xed, 0x6a, 0x57, 0x8e, 0x76, 0xab,
+ 0x67, 0x7a, 0x95, 0xe3, 0x9f, 0x2b, 0x1d, 0xbd, 0xda, 0xec, 0x3a, 0x3e, 0x52, 0x4f, 0x5d, 0x63,
+ 0xff, 0xc8, 0x80, 0x7c, 0xaa, 0xf1, 0x94, 0x67, 0xd0, 0xea, 0x75, 0xb2, 0xf0, 0x22, 0x58, 0xcb,
+ 0x59, 0x07, 0x3d, 0xbe, 0x29, 0x13, 0x1c, 0xf6, 0xcc, 0x02, 0x73, 0x6a, 0xe3, 0x62, 0x30, 0x21,
+ 0x06, 0xc4, 0x58, 0x54, 0x0a, 0x27, 0xa2, 0xf1, 0x7d, 0x01, 0xf1, 0x7d, 0xb8, 0x09, 0xe4, 0xc6,
+ 0xe2, 0xd1, 0xf7, 0xc4, 0xfa, 0x44, 0xad, 0x3e, 0xff, 0x9c, 0x9a, 0x67, 0x64, 0x61, 0x3e, 0x47,
+ 0xc3, 0xf9, 0xbc, 0x91, 0xee, 0xdb, 0xc9, 0xce, 0x9e, 0xa1, 0x81, 0x4b, 0xc9, 0x0b, 0x07, 0xfe,
+ 0x5a, 0x93, 0x15, 0xcf, 0x28, 0x62, 0x4a, 0xfd, 0x01, 0xba, 0x0e, 0xac, 0x02, 0x19, 0x4d, 0xc1,
+ 0x46, 0x0a, 0x21, 0xc5, 0x1c, 0x02, 0xf0, 0x79, 0x43, 0x03, 0x27, 0x94, 0xfe, 0x13, 0xca, 0xf1,
+ 0xf6, 0xe4, 0x17, 0xd7, 0xcc, 0xc6, 0xa8, 0x10, 0x86, 0x40, 0x46, 0x62, 0x5f, 0x4c, 0x44, 0xb8,
+ 0xc8, 0xa9, 0xd9, 0x26, 0x0b, 0xaf, 0x72, 0x08, 0xc0, 0xaf, 0xc7, 0xad, 0x92, 0xd7, 0x07, 0x94,
+ 0xf3, 0x9f, 0xdc, 0x1f, 0x6c, 0xdb, 0xb8, 0x7e, 0xcb, 0xab, 0xcb, 0x36, 0x8a, 0x91, 0x46, 0x0c,
+ 0x5f, 0x5e, 0xe6, 0xdf, 0xb0, 0x7e, 0xeb, 0xfa, 0xc0, 0xa6, 0xda, 0x65, 0x98, 0x73, 0x87, 0xfa,
+ 0xdb, 0x86, 0xef, 0x75, 0x2a, 0xad, 0x37, 0xd5, 0x4f, 0x0f, 0x0f, 0x0d, 0xdc, 0x24, 0xb5, 0x02,
+ 0xa8, 0x33, 0xb8, 0x05, 0x64, 0x27, 0x82, 0xbb, 0xc5, 0xe8, 0x1e, 0x31, 0x8e, 0xa4, 0x3c, 0xbb,
+ 0x66, 0xa5, 0x2c, 0x94, 0x73, 0x06, 0x90, 0x5f, 0x8c, 0x71, 0x36, 0xd4, 0xd7, 0xaf, 0x1e, 0xbb,
+ 0x92, 0xec, 0xe9, 0x56, 0x6e, 0xdd, 0x50, 0xbe, 0x3d, 0xa3, 0x74, 0x5d, 0x4d, 0x9e, 0x3b, 0x88,
+ 0xbb, 0x0a, 0x18, 0x95, 0x61, 0x2d, 0x98, 0x15, 0x17, 0x63, 0xd1, 0x37, 0x03, 0x5b, 0x88, 0x90,
+ 0x6b, 0xcc, 0xcc, 0xe9, 0x30, 0x7e, 0x3e, 0xee, 0x82, 0x8c, 0x5f, 0x6f, 0xaf, 0x74, 0x5d, 0x53,
+ 0x3e, 0xdb, 0x1f, 0xd0, 0x6b, 0xc1, 0x5a, 0x90, 0xdd, 0x2c, 0x89, 0x71, 0x84, 0xb2, 0x2c, 0x1d,
+ 0xed, 0x4b, 0x38, 0x03, 0xc8, 0x97, 0xda, 0xba, 0x49, 0x9e, 0xbc, 0xaa, 0xb6, 0xde, 0x52, 0x8e,
+ 0xb7, 0x07, 0x8c, 0x3a, 0x70, 0x1d, 0xc8, 0x8e, 0x05, 0x25, 0x69, 0x6f, 0x34, 0x1e, 0x2a, 0x9d,
+ 0x85, 0x3a, 0x59, 0x22, 0x0b, 0x8b, 0x39, 0x03, 0xc8, 0x97, 0xd8, 0x3a, 0x51, 0x7a, 0x0f, 0x69,
+ 0x5c, 0x6c, 0x54, 0x80, 0xd5, 0x1a, 0x37, 0x36, 0x46, 0x13, 0x62, 0x69, 0x36, 0xc2, 0x0b, 0xd2,
+ 0x29, 0x04, 0xc4, 0x97, 0x18, 0x58, 0x19, 0xbe, 0xd7, 0x95, 0xbc, 0xfa, 0x09, 0xc1, 0x04, 0x29,
+ 0x86, 0xeb, 0x34, 0x75, 0xa7, 0xfd, 0xa5, 0x61, 0x22, 0x07, 0x7d, 0x1e, 0x35, 0x37, 0xa1, 0x9a,
+ 0x24, 0x98, 0x0d, 0x09, 0x0a, 0xcc, 0x62, 0x18, 0x00, 0x05, 0xe4, 0x87, 0x8e, 0x0a, 0x80, 0xba,
+ 0xe1, 0x64, 0xe1, 0x19, 0xce, 0x56, 0xc4, 0x97, 0xd0, 0x7d, 0x99, 0xd8, 0xb0, 0x55, 0x83, 0xaf,
+ 0xe9, 0x7d, 0x6e, 0xd3, 0x31, 0x93, 0x6b, 0xa2, 0xd7, 0x56, 0x64, 0x1b, 0x1f, 0x46, 0x8e, 0xad,
+ 0x0e, 0x5c, 0x07, 0x72, 0x43, 0x61, 0x29, 0x16, 0x09, 0xee, 0xdb, 0xaa, 0x8d, 0x30, 0x0f, 0xf5,
+ 0xb6, 0x08, 0xc9, 0x08, 0x05, 0xe7, 0xf3, 0x94, 0xeb, 0xa7, 0x92, 0x97, 0xfb, 0x31, 0x9b, 0x07,
+ 0xe8, 0xa2, 0xea, 0x55, 0xb2, 0x50, 0x01, 0xca, 0x38, 0x37, 0x09, 0xe4, 0x4b, 0x94, 0xd6, 0x4e,
+ 0x65, 0xa0, 0xdf, 0xa4, 0x10, 0xd6, 0x51, 0xbf, 0xf1, 0x82, 0x62, 0x67, 0xf5, 0xa9, 0x6f, 0x4b,
+ 0x5f, 0xb5, 0x39, 0x42, 0xb4, 0xf9, 0x32, 0x67, 0x82, 0x07, 0x81, 0x0d, 0x29, 0x41, 0x80, 0x21,
+ 0x28, 0x64, 0x10, 0xd3, 0xc7, 0xa2, 0xf2, 0xb2, 0x50, 0x09, 0xca, 0x39, 0x57, 0x72, 0x39, 0xc8,
+ 0x4b, 0xf4, 0xf1, 0x67, 0x0c, 0x28, 0xc1, 0xf5, 0xb7, 0x89, 0x71, 0x29, 0xda, 0x14, 0x8c, 0x68,
+ 0xed, 0xd2, 0xab, 0x91, 0xab, 0xd7, 0xc8, 0xc2, 0x73, 0xa0, 0x8a, 0x73, 0xff, 0x10, 0x3f, 0x9f,
+ 0x8c, 0xac, 0xef, 0xab, 0xa1, 0x7e, 0x07, 0xfb, 0xa9, 0x5e, 0x30, 0xd7, 0xad, 0xd9, 0x0c, 0x03,
+ 0x4e, 0x41, 0x06, 0xac, 0x96, 0x85, 0xe7, 0xc1, 0xb3, 0x5c, 0x0a, 0x82, 0xa5, 0x20, 0x34, 0x61,
+ 0xc4, 0xdf, 0x7a, 0xc1, 0x9c, 0x37, 0x63, 0xa1, 0xa9, 0xe7, 0x18, 0xac, 0xb0, 0x38, 0x06, 0xd8,
+ 0xf1, 0x46, 0x8e, 0x41, 0x1e, 0xed, 0x18, 0x10, 0xfb, 0x6e, 0x5a, 0xb1, 0x8c, 0x07, 0xb3, 0x62,
+ 0x99, 0x93, 0xb1, 0x62, 0x55, 0x0e, 0x53, 0x8e, 0xdc, 0x5f, 0xd3, 0x94, 0xe7, 0xb8, 0xd9, 0xee,
+ 0x55, 0x0e, 0xdb, 0x5d, 0x22, 0x0b, 0x90, 0xb2, 0xdd, 0x59, 0x76, 0x63, 0x6d, 0xd8, 0x11, 0x17,
+ 0x82, 0xf1, 0x25, 0x6a, 0xe7, 0x77, 0xea, 0xa7, 0xd7, 0xdc, 0xec, 0x88, 0xb3, 0xfa, 0x63, 0x29,
+ 0xc6, 0x18, 0x01, 0xd3, 0xdf, 0x8e, 0xb8, 0x91, 0xcb, 0x41, 0x5e, 0x22, 0xbe, 0xff, 0x9e, 0x01,
+ 0x45, 0x1b, 0xc4, 0xc4, 0xd4, 0x92, 0xdd, 0xea, 0x0a, 0x59, 0x58, 0x01, 0x96, 0x73, 0x8e, 0x91,
+ 0xf1, 0x25, 0x78, 0xc9, 0x62, 0x67, 0xd2, 0xff, 0xe2, 0x05, 0xb3, 0x6d, 0x75, 0x1f, 0x4f, 0x0e,
+ 0x45, 0xb3, 0x9f, 0xbe, 0x1c, 0x5a, 0x29, 0x0b, 0x65, 0x80, 0xe3, 0x9c, 0xb4, 0x72, 0x10, 0x96,
+ 0xb0, 0x67, 0x1b, 0x03, 0x66, 0xe3, 0x10, 0xc3, 0xc3, 0xe1, 0xcf, 0xea, 0x32, 0x59, 0x58, 0x0e,
+ 0x9e, 0xe1, 0x9c, 0x1f, 0xe1, 0xe1, 0xf0, 0xb1, 0x5b, 0x4a, 0xc7, 0xa7, 0x84, 0x4d, 0x51, 0x58,
+ 0x83, 0xfd, 0x95, 0x17, 0x40, 0x7b, 0xcd, 0xe9, 0x14, 0x5b, 0xf4, 0x8e, 0xc6, 0x68, 0x74, 0x6c,
+ 0x8a, 0x9e, 0xf5, 0x34, 0xe2, 0xaf, 0xe7, 0x64, 0x61, 0x35, 0x58, 0xc5, 0xb9, 0xd0, 0x88, 0x9f,
+ 0xef, 0x24, 0xa7, 0xc9, 0x66, 0x3f, 0x63, 0xc0, 0x9c, 0x3a, 0x31, 0x22, 0x4e, 0x35, 0x27, 0xc6,
+ 0x30, 0xd8, 0x2e, 0x83, 0xd3, 0xdc, 0xce, 0x0b, 0x23, 0x67, 0x2f, 0xdb, 0x75, 0x61, 0xbb, 0x17,
+ 0x14, 0x3b, 0xab, 0x4f, 0x7d, 0x2e, 0xb5, 0xf0, 0x57, 0xc6, 0x83, 0xf1, 0x57, 0xe6, 0x43, 0xb6,
+ 0xb0, 0x6e, 0xf8, 0x75, 0xd0, 0x83, 0xf0, 0xd6, 0xaf, 0x67, 0x01, 0x60, 0xd6, 0x84, 0xeb, 0xdc,
+ 0x58, 0x6a, 0xd1, 0xe8, 0x2c, 0x65, 0xe5, 0xa4, 0x15, 0x16, 0x4e, 0x9a, 0x97, 0x82, 0x93, 0x26,
+ 0xe7, 0x05, 0x1b, 0x71, 0xa9, 0x0c, 0x8a, 0xe2, 0x7a, 0x5c, 0x0a, 0x2a, 0x77, 0x4e, 0x28, 0x47,
+ 0xda, 0x8d, 0x09, 0x36, 0xc7, 0x23, 0x66, 0x38, 0x8a, 0xf6, 0x61, 0x33, 0x27, 0xe5, 0xc3, 0x66,
+ 0x8d, 0xcb, 0x87, 0xa5, 0x5c, 0xf5, 0x59, 0x0f, 0xe6, 0xaa, 0x67, 0x4f, 0xc6, 0x55, 0x7f, 0xdd,
+ 0x11, 0x70, 0xca, 0x31, 0x23, 0x78, 0xf6, 0x80, 0x53, 0x31, 0xdd, 0x97, 0x3e, 0x67, 0x47, 0xbc,
+ 0xe9, 0x75, 0x47, 0xbc, 0x09, 0x38, 0xba, 0x34, 0xe2, 0x4d, 0x96, 0x2e, 0x75, 0x9c, 0x38, 0x22,
+ 0x4e, 0x55, 0x20, 0xbb, 0x1e, 0xad, 0xe5, 0x6a, 0xf6, 0x91, 0xe0, 0x15, 0x26, 0x86, 0x0e, 0xe4,
+ 0x73, 0xf0, 0x92, 0x6e, 0x78, 0x7f, 0x4b, 0xc0, 0x00, 0x22, 0x12, 0x22, 0xd7, 0xb1, 0x66, 0x1f,
+ 0x09, 0x52, 0x11, 0x12, 0x12, 0x20, 0x9f, 0x83, 0x7d, 0x48, 0xd4, 0x4a, 0x07, 0xc2, 0x17, 0x01,
+ 0xc0, 0x3d, 0xfc, 0x30, 0xdc, 0x28, 0x96, 0xe6, 0xa3, 0x76, 0x0b, 0x65, 0xc1, 0xc7, 0x51, 0x60,
+ 0x3e, 0x0f, 0x7f, 0x4f, 0x3d, 0x7d, 0x73, 0xe4, 0xf4, 0x77, 0x01, 0xaa, 0x44, 0x6b, 0x8e, 0xbb,
+ 0x42, 0xcd, 0x0b, 0xa8, 0xe6, 0x26, 0x98, 0xcf, 0xc3, 0x1f, 0xd6, 0x9b, 0x9b, 0x25, 0xf6, 0xd8,
+ 0x5a, 0xe1, 0x84, 0x63, 0x6b, 0x1a, 0x3f, 0xc5, 0x9a, 0x77, 0x44, 0xc2, 0xf5, 0xa5, 0x45, 0x14,
+ 0x3f, 0x61, 0x90, 0xce, 0x4f, 0xda, 0xbf, 0x2d, 0xdf, 0x28, 0x2d, 0xd7, 0x75, 0x7e, 0xc2, 0xc5,
+ 0xec, 0x7f, 0x65, 0x40, 0x7e, 0xed, 0xae, 0x60, 0x3c, 0xa1, 0x19, 0x9c, 0x3a, 0xcd, 0x4a, 0x2e,
+ 0x05, 0x19, 0x31, 0x4d, 0x63, 0x62, 0x25, 0x3b, 0x5b, 0x16, 0x0a, 0x38, 0x04, 0xe0, 0xb3, 0x46,
+ 0xba, 0xff, 0x49, 0x3d, 0x75, 0x2d, 0x80, 0x7e, 0x69, 0x62, 0x29, 0x85, 0x7f, 0x8c, 0x65, 0x38,
+ 0x9f, 0x88, 0xa5, 0x06, 0xe0, 0xf3, 0xd4, 0xde, 0x0e, 0x5c, 0x73, 0xe4, 0x70, 0x47, 0x00, 0xc1,
+ 0xe0, 0x32, 0x90, 0x99, 0x88, 0x26, 0x82, 0x11, 0x24, 0xc4, 0xf9, 0x35, 0x50, 0x16, 0x0a, 0x39,
+ 0x0c, 0xe1, 0xb3, 0xd4, 0xfd, 0x03, 0x5a, 0xaf, 0xf8, 0x27, 0xdc, 0x68, 0xb1, 0xf4, 0xd0, 0xa2,
+ 0xff, 0xd0, 0x38, 0xc7, 0xeb, 0x4d, 0xb2, 0xbf, 0xcd, 0x02, 0x99, 0xa8, 0x05, 0x7c, 0x0e, 0xe4,
+ 0x10, 0xed, 0xb3, 0xa9, 0x8e, 0xa8, 0x2b, 0xc4, 0x16, 0x26, 0x94, 0xcf, 0xc6, 0xca, 0x2a, 0x1c,
+ 0x0a, 0x98, 0x40, 0x8d, 0xb0, 0x71, 0x43, 0xed, 0x11, 0x65, 0x85, 0x09, 0x6b, 0x82, 0x6d, 0x2a,
+ 0x8b, 0x2a, 0x99, 0x98, 0xe2, 0x5a, 0x0a, 0xbc, 0xbb, 0xc5, 0x7d, 0x44, 0x69, 0xcd, 0x91, 0x85,
+ 0x22, 0x4e, 0xfb, 0xcd, 0xe7, 0xd4, 0x6b, 0x33, 0xf0, 0xef, 0x16, 0xf7, 0x05, 0xb4, 0xdf, 0x90,
+ 0x23, 0x9a, 0x13, 0xeb, 0xa7, 0xb9, 0xb2, 0x30, 0x87, 0x68, 0xce, 0x5c, 0x54, 0xd1, 0xa2, 0x38,
+ 0xb7, 0x81, 0xfc, 0x48, 0x30, 0x21, 0x4a, 0x89, 0xb7, 0xc4, 0xb8, 0x14, 0x8e, 0x36, 0x11, 0xf5,
+ 0x84, 0x02, 0xcb, 0xd6, 0x12, 0x7e, 0xae, 0xda, 0xb5, 0x1f, 0x2f, 0x1c, 0xf1, 0xf7, 0xf6, 0x60,
+ 0x78, 0xc0, 0x5a, 0x0d, 0xbe, 0x0d, 0x8a, 0x30, 0x40, 0x88, 0xc5, 0xf4, 0x4e, 0xf1, 0xba, 0x7d,
+ 0x85, 0x2c, 0x2c, 0xe3, 0x1c, 0x85, 0x7c, 0xb1, 0xd1, 0x6f, 0x30, 0x16, 0x33, 0x7a, 0x75, 0xd4,
+ 0x83, 0xdb, 0xc1, 0x6c, 0x0c, 0xab, 0x13, 0xa5, 0xfa, 0x78, 0x18, 0x6d, 0x95, 0x13, 0xed, 0xa6,
+ 0xb9, 0xb7, 0x9c, 0xb3, 0x94, 0xea, 0x3a, 0x64, 0x42, 0x03, 0xce, 0x8a, 0x16, 0x4d, 0x92, 0x33,
+ 0x29, 0x4d, 0x02, 0x26, 0xa9, 0x49, 0x72, 0x1f, 0x4c, 0x93, 0xe4, 0x4d, 0x42, 0x93, 0xd0, 0x86,
+ 0x39, 0x7f, 0x4c, 0xc3, 0xac, 0x74, 0xdc, 0xb2, 0x1a, 0x66, 0x0e, 0x64, 0x84, 0xeb, 0xa3, 0x4d,
+ 0x44, 0x89, 0x61, 0xf6, 0xd2, 0x00, 0x3a, 0x7b, 0x75, 0xde, 0x55, 0x2f, 0x1c, 0x0e, 0x20, 0x10,
+ 0xfb, 0x07, 0x06, 0x14, 0x23, 0xf9, 0x22, 0x44, 0x9c, 0x22, 0x0a, 0xe4, 0x87, 0x16, 0x05, 0xf2,
+ 0x84, 0x53, 0x81, 0x90, 0xe1, 0xd6, 0x2c, 0x95, 0x05, 0x96, 0xe8, 0x11, 0x9f, 0xa1, 0x47, 0xd0,
+ 0x34, 0x93, 0x47, 0x5a, 0xd5, 0xae, 0x6f, 0xe8, 0xa5, 0x03, 0xdb, 0x96, 0x01, 0xf2, 0xe8, 0xd6,
+ 0x70, 0x39, 0x11, 0x44, 0xc6, 0x34, 0xf9, 0x58, 0x10, 0x01, 0x96, 0x20, 0x64, 0x27, 0xb1, 0x1c,
+ 0x3e, 0x0b, 0x66, 0x11, 0xce, 0x27, 0x3a, 0x64, 0xbe, 0x2c, 0x94, 0x72, 0x3a, 0x8c, 0xcf, 0xb7,
+ 0x8a, 0x9c, 0x0e, 0x87, 0x35, 0x00, 0x04, 0x4d, 0x31, 0xf3, 0x9a, 0xa6, 0x9e, 0x02, 0xf3, 0xb3,
+ 0x71, 0x63, 0x5a, 0xba, 0xa8, 0x62, 0xb8, 0x1e, 0xe4, 0x52, 0xd2, 0x41, 0xb4, 0xcb, 0x53, 0xb2,
+ 0xe0, 0xe7, 0x68, 0xb8, 0xde, 0x0b, 0x2d, 0x48, 0x74, 0xb9, 0x45, 0x84, 0x32, 0x27, 0x25, 0x42,
+ 0x59, 0x93, 0x14, 0xa1, 0x59, 0x0f, 0x26, 0x42, 0xd9, 0x13, 0x15, 0xa1, 0xa5, 0xc0, 0xdb, 0x1c,
+ 0x8f, 0x10, 0x3d, 0x81, 0xd5, 0x70, 0x73, 0x3c, 0xa2, 0xab, 0x61, 0xcd, 0x5d, 0xd4, 0x7e, 0xb3,
+ 0x3f, 0xf7, 0x82, 0x5c, 0xc4, 0x0e, 0x75, 0x62, 0x22, 0x18, 0x8e, 0x18, 0x6a, 0x99, 0x19, 0x87,
+ 0x5a, 0x5e, 0x6d, 0x67, 0x07, 0xb4, 0x46, 0x30, 0xd8, 0x21, 0x97, 0x62, 0x41, 0x93, 0x19, 0x56,
+ 0x6a, 0x2e, 0x63, 0x30, 0xd4, 0xa8, 0x5b, 0x13, 0x84, 0x49, 0x02, 0x22, 0x4d, 0x86, 0x0f, 0x7f,
+ 0x35, 0x7c, 0xef, 0x5a, 0x80, 0x00, 0x61, 0x2d, 0x00, 0x7b, 0x82, 0x91, 0x66, 0x51, 0x7a, 0x25,
+ 0x1c, 0x11, 0x91, 0x34, 0x10, 0xca, 0x53, 0x60, 0x1e, 0xe2, 0xbf, 0xf1, 0x7e, 0x31, 0x61, 0x78,
+ 0xaa, 0x1c, 0x36, 0x80, 0xec, 0xfa, 0x68, 0x53, 0x42, 0x6c, 0x4a, 0x68, 0x2b, 0x12, 0x4d, 0xa0,
+ 0x9e, 0x76, 0x0a, 0x14, 0xc6, 0x41, 0x45, 0x2d, 0xa9, 0xb8, 0xbe, 0x29, 0x11, 0xdf, 0x87, 0x3f,
+ 0x65, 0x34, 0xe6, 0x8b, 0x31, 0x1e, 0xda, 0x5a, 0xd4, 0x23, 0xfb, 0x95, 0xe3, 0x5f, 0xe3, 0x0f,
+ 0x06, 0x8c, 0x72, 0x1d, 0xef, 0x59, 0xa3, 0xe3, 0xdd, 0xf7, 0x26, 0xc8, 0xb7, 0x7c, 0x06, 0x16,
+ 0x61, 0xb3, 0x89, 0xf0, 0x8e, 0x2d, 0x64, 0x05, 0xc8, 0x44, 0x13, 0x40, 0xc8, 0xcd, 0xe5, 0x4b,
+ 0x2d, 0xe3, 0xd5, 0x26, 0x45, 0x3a, 0x08, 0xe0, 0x6a, 0xd5, 0x9e, 0x17, 0x18, 0xf6, 0x3a, 0x03,
+ 0x72, 0xa9, 0x22, 0xb8, 0xcc, 0x42, 0xce, 0x62, 0x59, 0x98, 0x4d, 0xc8, 0x99, 0x43, 0x30, 0x75,
+ 0xbc, 0x9d, 0x10, 0xb3, 0x46, 0xd3, 0x75, 0x89, 0x5d, 0x84, 0x92, 0x15, 0xb2, 0xb0, 0x82, 0x43,
+ 0x00, 0xfe, 0x29, 0x5c, 0x33, 0xd9, 0xd9, 0xa7, 0xf4, 0xde, 0xd6, 0x27, 0xaf, 0xb4, 0x5c, 0x51,
+ 0x3a, 0x2e, 0x69, 0x0b, 0xab, 0x5b, 0xbd, 0xca, 0xdd, 0x83, 0x01, 0x54, 0x15, 0x56, 0x81, 0x59,
+ 0x04, 0x0f, 0x84, 0xb8, 0x68, 0x61, 0xab, 0xc3, 0xf8, 0x3c, 0xf2, 0xcd, 0x43, 0x2d, 0x4a, 0xcf,
+ 0xed, 0x80, 0x0e, 0x66, 0x55, 0x0f, 0x28, 0xd0, 0x54, 0x2e, 0xd6, 0x4a, 0xab, 0xb4, 0xb5, 0xfe,
+ 0xc3, 0x50, 0xbc, 0xb6, 0xf8, 0x81, 0xd7, 0xef, 0x99, 0x74, 0xfc, 0x60, 0x1d, 0xc8, 0xd6, 0xbc,
+ 0x23, 0xe4, 0xe5, 0x66, 0xa0, 0x7e, 0x96, 0x68, 0x8a, 0xd0, 0x00, 0xba, 0xc7, 0x11, 0xd6, 0x05,
+ 0x8c, 0x0a, 0x70, 0x9d, 0xc5, 0xfb, 0x41, 0x9e, 0x01, 0xa6, 0xcb, 0x62, 0xcc, 0x27, 0xb8, 0xe5,
+ 0xfd, 0xc1, 0x36, 0xf5, 0x64, 0xaf, 0xda, 0x76, 0x40, 0xbd, 0xda, 0x9d, 0xfc, 0xc9, 0x51, 0xf5,
+ 0x78, 0x57, 0xf2, 0xbb, 0x8b, 0xd6, 0x68, 0x84, 0x0d, 0x73, 0xbc, 0x4f, 0x3d, 0x72, 0x7b, 0xe4,
+ 0x70, 0x07, 0x36, 0x03, 0x58, 0x00, 0xe9, 0xed, 0x83, 0x42, 0x4b, 0xf5, 0xa9, 0x1f, 0x88, 0x08,
+ 0xd8, 0xb2, 0xb9, 0x1c, 0x22, 0xab, 0xdb, 0x6a, 0x6c, 0x50, 0xb0, 0x11, 0x9c, 0x67, 0x33, 0x82,
+ 0xe7, 0x0e, 0x4e, 0xd7, 0xed, 0x03, 0x3b, 0xb9, 0xdc, 0xc9, 0x4b, 0x82, 0x1b, 0x9f, 0x7a, 0xc0,
+ 0x9c, 0x0d, 0x62, 0x82, 0xd2, 0x64, 0x58, 0x98, 0x1c, 0x81, 0xb3, 0xf4, 0x30, 0xbe, 0x67, 0x52,
+ 0x8c, 0xbf, 0x8a, 0x30, 0x3e, 0x16, 0xbf, 0x85, 0xee, 0xf6, 0xe5, 0xaf, 0x35, 0x19, 0x71, 0x4f,
+ 0x11, 0x43, 0x38, 0x9d, 0xa4, 0x88, 0xb9, 0xcd, 0x8d, 0x7f, 0x8a, 0xc2, 0x84, 0xd2, 0xd6, 0x32,
+ 0xdc, 0xfb, 0x79, 0x72, 0xe0, 0x10, 0x46, 0xaa, 0xc9, 0xf7, 0x43, 0x5e, 0x50, 0xec, 0x6c, 0x3c,
+ 0xdd, 0x52, 0x19, 0xdd, 0x56, 0x90, 0x4f, 0xca, 0xc2, 0x02, 0xc2, 0xf4, 0xc5, 0x6e, 0x38, 0x98,
+ 0x46, 0x1c, 0x4f, 0xd2, 0xe2, 0x5c, 0x09, 0x35, 0x06, 0x99, 0x09, 0xff, 0x2b, 0x1e, 0x50, 0x62,
+ 0xca, 0x0b, 0x76, 0x37, 0xbe, 0x27, 0xe6, 0x64, 0x95, 0x61, 0x4e, 0xc6, 0x2d, 0x55, 0x2f, 0xc8,
+ 0xc2, 0xb3, 0x60, 0x35, 0xe7, 0x8e, 0x31, 0x7d, 0x1d, 0x41, 0x79, 0x70, 0xa6, 0x38, 0xfd, 0xc5,
+ 0x0b, 0xe6, 0xba, 0xb5, 0x9a, 0xfa, 0x02, 0xf5, 0xae, 0x45, 0xa0, 0x16, 0xa7, 0x5c, 0x51, 0x19,
+ 0x46, 0x65, 0x99, 0x2c, 0x2c, 0x25, 0xf2, 0xb5, 0xd0, 0x61, 0x54, 0x30, 0x5e, 0xa6, 0x9d, 0xa0,
+ 0x91, 0x44, 0xa2, 0x14, 0x24, 0x74, 0xa7, 0x3c, 0x25, 0x61, 0x1b, 0x44, 0xbd, 0xc1, 0x63, 0x64,
+ 0x63, 0x34, 0x46, 0xd4, 0x97, 0x32, 0x58, 0x02, 0xfd, 0x29, 0x97, 0x32, 0x7a, 0x43, 0xbd, 0xb0,
+ 0x7a, 0x9b, 0x2c, 0xbc, 0x0a, 0x36, 0x73, 0xee, 0x98, 0xe1, 0x79, 0x8c, 0x4f, 0xb5, 0xed, 0xb0,
+ 0xd2, 0x73, 0xce, 0x40, 0xe8, 0xe8, 0x06, 0x4b, 0xce, 0x00, 0x73, 0xdd, 0x7a, 0x9b, 0xfa, 0x12,
+ 0xb6, 0xc3, 0x22, 0x61, 0xa5, 0xa9, 0x96, 0x58, 0x35, 0x55, 0xb2, 0xb0, 0x8a, 0x08, 0xd6, 0xf2,
+ 0x71, 0x23, 0x68, 0x1a, 0x09, 0xd9, 0xeb, 0xb2, 0xb0, 0x15, 0x6c, 0xe1, 0x52, 0x50, 0x71, 0x62,
+ 0x4c, 0x41, 0x84, 0xef, 0x23, 0x0f, 0x28, 0xc0, 0x7b, 0x5d, 0x08, 0x91, 0x8f, 0x83, 0x67, 0xb7,
+ 0x52, 0x16, 0xca, 0xc1, 0x0a, 0xce, 0x36, 0x2d, 0xfe, 0x09, 0xbc, 0x79, 0xe7, 0x47, 0x00, 0xff,
+ 0x70, 0xef, 0x2d, 0xf5, 0xfa, 0x47, 0x44, 0x32, 0x0e, 0x7a, 0x41, 0xa1, 0xa5, 0xf6, 0xcc, 0x5e,
+ 0x6a, 0x3a, 0xd8, 0x95, 0xe4, 0xf8, 0xd8, 0x51, 0xcb, 0xcf, 0xb5, 0x50, 0xc2, 0xe4, 0xc5, 0xff,
+ 0xe6, 0x01, 0x25, 0x54, 0x5d, 0xc2, 0xe2, 0xdf, 0x77, 0x43, 0x50, 0x2b, 0x0b, 0xeb, 0xc0, 0x4b,
+ 0x9c, 0x3b, 0x66, 0xf8, 0xa5, 0x16, 0x5c, 0xd2, 0xa2, 0x6f, 0xe1, 0xf0, 0x33, 0x5e, 0x30, 0xd7,
+ 0xad, 0x83, 0x19, 0x46, 0x4f, 0x07, 0xa3, 0xaf, 0x95, 0x85, 0x17, 0xc0, 0x73, 0x5c, 0x0a, 0x0c,
+ 0xf3, 0x0b, 0xac, 0xfc, 0x6e, 0x73, 0x7f, 0xfe, 0x93, 0x07, 0x14, 0xd5, 0x45, 0xf7, 0x36, 0x45,
+ 0xa2, 0xc1, 0xd0, 0xe3, 0xa2, 0x83, 0x1f, 0x88, 0xe1, 0x5f, 0x92, 0x85, 0xb5, 0x60, 0x0d, 0xe7,
+ 0x40, 0x0a, 0xbf, 0x74, 0xa8, 0xef, 0x93, 0xe1, 0x3b, 0x77, 0xc6, 0xe2, 0xf5, 0xff, 0xe7, 0x01,
+ 0x05, 0x6f, 0xc6, 0x46, 0x47, 0x27, 0x93, 0x26, 0x74, 0x32, 0x93, 0x40, 0xe7, 0x4a, 0x90, 0xb1,
+ 0x33, 0x1c, 0xc1, 0x91, 0xea, 0xbc, 0x9a, 0x05, 0xb2, 0xf0, 0x04, 0x87, 0x00, 0xfc, 0x6c, 0xed,
+ 0x5f, 0xff, 0x50, 0xdf, 0xd1, 0xa1, 0xc1, 0x0b, 0x24, 0x02, 0x8c, 0x0a, 0xe8, 0x90, 0x78, 0xc6,
+ 0xb8, 0x43, 0xe2, 0x55, 0x20, 0x73, 0x67, 0x34, 0x5e, 0x8f, 0xa3, 0x81, 0xd9, 0x78, 0x9f, 0x0b,
+ 0x43, 0x78, 0x48, 0x8e, 0x7f, 0x0d, 0xf6, 0x2b, 0xad, 0x37, 0xf1, 0xf7, 0x02, 0xb8, 0x48, 0x0f,
+ 0x8b, 0xd8, 0x10, 0xc8, 0x2f, 0xc3, 0xb5, 0x74, 0xe3, 0x79, 0xf8, 0x2b, 0xa5, 0xe7, 0xdc, 0xd0,
+ 0xed, 0x23, 0x2e, 0xd8, 0xd7, 0x6c, 0xa9, 0xa5, 0xf1, 0x8c, 0x8a, 0x49, 0xa7, 0x2d, 0xb5, 0xa1,
+ 0x96, 0x9f, 0x6b, 0x21, 0x8c, 0xa9, 0x55, 0x3e, 0xf6, 0x02, 0xa8, 0x07, 0x3d, 0x02, 0x62, 0x44,
+ 0x0c, 0x4a, 0xe2, 0x94, 0x13, 0x04, 0x53, 0xaf, 0x30, 0xe3, 0xd5, 0x2b, 0x21, 0x90, 0x4d, 0xf8,
+ 0x5b, 0x22, 0x7b, 0x36, 0x1b, 0x65, 0x61, 0x3d, 0x67, 0x00, 0xf9, 0x35, 0x94, 0x2c, 0x94, 0xf9,
+ 0x87, 0xfa, 0xda, 0x87, 0x06, 0x2f, 0xe8, 0xfb, 0x95, 0x67, 0x71, 0x82, 0xa0, 0x7a, 0x64, 0xbf,
+ 0xda, 0x75, 0xc4, 0x50, 0xc3, 0xfe, 0x38, 0x41, 0x8f, 0xd1, 0x49, 0xf5, 0x06, 0x59, 0xa8, 0x03,
+ 0x35, 0x9c, 0x0b, 0x02, 0xf9, 0x32, 0xdc, 0x87, 0x9f, 0x04, 0xd4, 0x5b, 0x7e, 0x32, 0x7c, 0xe0,
+ 0x24, 0xd5, 0x89, 0x64, 0x75, 0x2c, 0xff, 0x87, 0xd7, 0x0c, 0x9e, 0x1a, 0x9d, 0x4c, 0x7d, 0x81,
+ 0xa8, 0xb1, 0xec, 0x11, 0x17, 0xdb, 0xd2, 0x49, 0xd1, 0x34, 0xf0, 0x0e, 0x1b, 0x5e, 0x6b, 0xe5,
+ 0x93, 0xc9, 0x4f, 0xbb, 0xf5, 0xd4, 0x7a, 0x59, 0xa8, 0x01, 0xeb, 0x38, 0x37, 0x12, 0xf1, 0xcb,
+ 0xc7, 0x22, 0xb4, 0x29, 0x6b, 0x7f, 0xf6, 0x82, 0x79, 0x9b, 0x1a, 0x63, 0xd1, 0x78, 0xa2, 0x36,
+ 0xd2, 0x2c, 0x25, 0xc4, 0xf8, 0xc3, 0x11, 0xb8, 0x97, 0x41, 0x4e, 0x3d, 0xee, 0x7f, 0x53, 0x1d,
+ 0x61, 0x83, 0xc5, 0x28, 0x4d, 0xc7, 0x80, 0xf2, 0xd9, 0x23, 0x9d, 0x87, 0x92, 0x77, 0x2f, 0x6f,
+ 0xaa, 0x33, 0xc5, 0xcd, 0x2c, 0x85, 0x5b, 0x40, 0x8e, 0x26, 0x44, 0x52, 0x2c, 0x58, 0xaf, 0x0b,
+ 0x5d, 0x85, 0x2c, 0xb0, 0x9c, 0x09, 0x35, 0x32, 0x86, 0x3a, 0x7b, 0xd4, 0x0b, 0x87, 0x0d, 0x30,
+ 0xd5, 0x9b, 0x01, 0x83, 0xcf, 0x11, 0xe9, 0xcd, 0xd0, 0x77, 0xde, 0x4b, 0x89, 0xf4, 0x16, 0xd9,
+ 0xfb, 0xb0, 0x8a, 0x30, 0xad, 0x37, 0x32, 0x27, 0xa5, 0x37, 0xd6, 0x01, 0xbc, 0xef, 0xb9, 0xd5,
+ 0x3c, 0x4d, 0x83, 0x3e, 0x6f, 0x42, 0x5d, 0x35, 0x88, 0x59, 0x5c, 0x5d, 0x27, 0x0b, 0x02, 0x78,
+ 0x99, 0x4b, 0x45, 0x35, 0x7e, 0x89, 0xd2, 0x3b, 0xa8, 0x1c, 0xee, 0xf7, 0x13, 0xdc, 0xa5, 0x90,
+ 0xee, 0x6e, 0x2f, 0x28, 0x75, 0xef, 0x61, 0xc6, 0xe6, 0xa5, 0x43, 0x3c, 0x6b, 0x64, 0xe1, 0x65,
+ 0xf0, 0x22, 0x97, 0x12, 0xc7, 0xfc, 0xe2, 0x54, 0x64, 0x32, 0x65, 0xf3, 0xf7, 0x0c, 0x28, 0x24,
+ 0x4d, 0xa6, 0x48, 0x02, 0xce, 0xeb, 0xe3, 0x50, 0xae, 0xe8, 0x20, 0x32, 0x56, 0xae, 0x0b, 0xac,
+ 0x11, 0x62, 0x7d, 0x8e, 0x96, 0xec, 0x9b, 0xa3, 0xb3, 0xc0, 0x2c, 0xd2, 0x14, 0xf2, 0x96, 0xbd,
+ 0x79, 0xe4, 0xf5, 0x61, 0xb1, 0x9c, 0x63, 0x6d, 0x4f, 0xa7, 0x5c, 0xac, 0xa3, 0x15, 0x83, 0x87,
+ 0x4a, 0x9a, 0x35, 0x15, 0x03, 0x54, 0x8f, 0xec, 0xc7, 0x67, 0xdd, 0x0d, 0x18, 0xad, 0x0c, 0x5e,
+ 0xd4, 0x84, 0x7a, 0x4f, 0xd8, 0x48, 0xc5, 0xc9, 0xd7, 0x54, 0xd3, 0x22, 0xce, 0x00, 0xe2, 0xf6,
+ 0x97, 0x0f, 0x0e, 0xf5, 0x1f, 0x33, 0x62, 0xdc, 0x01, 0xa3, 0x14, 0x56, 0x81, 0x2c, 0x29, 0x11,
+ 0x4c, 0x34, 0x4b, 0x84, 0x15, 0x91, 0x53, 0x4c, 0x40, 0x7c, 0x21, 0x4e, 0x4a, 0xd6, 0xda, 0x1d,
+ 0xbd, 0xa9, 0xee, 0x3f, 0x10, 0x20, 0x05, 0xb0, 0x1c, 0x64, 0xa2, 0x39, 0x11, 0x35, 0x82, 0x28,
+ 0x84, 0x21, 0xd6, 0xbc, 0x12, 0x0c, 0x83, 0x1b, 0x2d, 0x09, 0x43, 0x58, 0x6f, 0xa0, 0x50, 0x3c,
+ 0x9d, 0x30, 0x34, 0x8f, 0x1e, 0x67, 0xaa, 0xb4, 0x21, 0x6b, 0x12, 0xcd, 0xac, 0x89, 0x26, 0xd1,
+ 0xac, 0x07, 0x79, 0xf5, 0xd4, 0x1a, 0x91, 0x64, 0xe1, 0x20, 0x84, 0x59, 0x0a, 0xf8, 0x02, 0xeb,
+ 0xa6, 0x40, 0xc0, 0x52, 0xfa, 0x48, 0x13, 0xf7, 0xaa, 0x4c, 0xed, 0x94, 0x4b, 0xe5, 0x60, 0xe8,
+ 0xda, 0x29, 0x4f, 0x3d, 0x7a, 0x65, 0xe4, 0xe4, 0x59, 0xf5, 0x66, 0xab, 0x45, 0x2f, 0xad, 0x00,
+ 0x19, 0x9a, 0xd2, 0x26, 0x99, 0x7a, 0x58, 0x82, 0x34, 0x00, 0x8f, 0x27, 0xe2, 0x27, 0xb9, 0xb6,
+ 0x08, 0x06, 0x37, 0x83, 0x82, 0x70, 0xb0, 0x71, 0xab, 0xce, 0x52, 0x9b, 0xea, 0x48, 0x82, 0x1e,
+ 0xca, 0x94, 0xb1, 0x15, 0xf1, 0xb6, 0xdf, 0x01, 0xdb, 0x6f, 0x7b, 0xaa, 0x5f, 0xc1, 0xe8, 0xa9,
+ 0x7e, 0xc9, 0xc1, 0x4f, 0x1d, 0x39, 0xf8, 0xcf, 0xd3, 0xd6, 0xb6, 0x90, 0x52, 0x90, 0xa6, 0xb5,
+ 0xcd, 0xc1, 0xd6, 0xd6, 0xaf, 0x29, 0x48, 0x03, 0xca, 0xf6, 0x64, 0x83, 0x7c, 0x22, 0x8c, 0x24,
+ 0xfb, 0x69, 0x46, 0x24, 0xbf, 0x2f, 0x22, 0xb9, 0x19, 0x64, 0xe1, 0xec, 0xb0, 0xd2, 0x1c, 0xb4,
+ 0x38, 0x59, 0x2d, 0x0b, 0x2b, 0x39, 0x02, 0xe2, 0x9f, 0xc6, 0x48, 0xd3, 0x31, 0x3c, 0xf2, 0xf1,
+ 0xd5, 0xe4, 0x9d, 0x1b, 0xea, 0xe9, 0x9b, 0xc9, 0x73, 0x07, 0xe9, 0x34, 0xb3, 0x00, 0xa9, 0x0f,
+ 0x6b, 0xac, 0xc9, 0x89, 0xc0, 0xf4, 0x0a, 0x2c, 0xc9, 0x89, 0x05, 0x84, 0x7d, 0xfc, 0x6a, 0x47,
+ 0xc7, 0xf0, 0xbd, 0x6b, 0xd6, 0xcc, 0xc4, 0x4a, 0x90, 0xd9, 0x14, 0x4d, 0x88, 0x12, 0x91, 0x5a,
+ 0xc4, 0xc1, 0x18, 0x62, 0x78, 0xed, 0x7e, 0xf4, 0x33, 0x80, 0xa1, 0x70, 0x3d, 0xc8, 0x08, 0xc6,
+ 0x1b, 0xa4, 0xd2, 0x3c, 0x34, 0xfe, 0x55, 0xb2, 0x50, 0xc1, 0x21, 0xc0, 0x68, 0xa3, 0xf7, 0x6b,
+ 0x26, 0xcc, 0x8f, 0x9d, 0xa2, 0x00, 0xaa, 0x6d, 0xd1, 0x4d, 0xf9, 0x93, 0xd2, 0x4d, 0x05, 0x93,
+ 0xd1, 0x4d, 0x85, 0x13, 0xd7, 0x4d, 0x45, 0xe3, 0xd1, 0x4d, 0x7f, 0x0b, 0x72, 0x10, 0x51, 0x50,
+ 0xae, 0xe0, 0x6c, 0xd4, 0xe2, 0x45, 0x59, 0xa8, 0xe6, 0x4c, 0x28, 0x5f, 0x8e, 0xfe, 0xf4, 0x63,
+ 0x1a, 0xde, 0x1f, 0x6c, 0xd3, 0xd6, 0xe5, 0x7d, 0xfb, 0xd5, 0x6f, 0xba, 0xc9, 0xa9, 0xdc, 0x3b,
+ 0xf7, 0x92, 0x27, 0x35, 0x59, 0x25, 0x44, 0x36, 0x5b, 0xb2, 0x5f, 0x66, 0x80, 0x22, 0x7c, 0x9c,
+ 0x0d, 0xd1, 0x23, 0xed, 0x5b, 0x9f, 0xb6, 0x75, 0x83, 0x67, 0xc2, 0xeb, 0x86, 0xa0, 0x73, 0xdd,
+ 0x50, 0x2b, 0x0b, 0xeb, 0x68, 0x5d, 0xb4, 0x1a, 0x47, 0xe3, 0x94, 0x7f, 0x7b, 0x47, 0x13, 0xf0,
+ 0x2f, 0xfb, 0x47, 0x4e, 0x7f, 0x87, 0xfd, 0x96, 0xfb, 0x83, 0x6d, 0x23, 0x03, 0x67, 0x86, 0x7b,
+ 0x2e, 0x2b, 0x2d, 0x57, 0x47, 0x3e, 0xbe, 0x4a, 0x57, 0xa0, 0x95, 0x55, 0x0b, 0x63, 0x59, 0x4d,
+ 0xbc, 0x2f, 0x0b, 0x4d, 0x44, 0x47, 0xee, 0xc4, 0x3d, 0xeb, 0x4a, 0x92, 0xe4, 0xb0, 0x19, 0x9d,
+ 0x93, 0x4c, 0xb6, 0x6f, 0x2f, 0x69, 0xcb, 0xfb, 0xee, 0xab, 0xc3, 0x77, 0xef, 0x2a, 0x83, 0x1d,
+ 0xf7, 0x07, 0xdb, 0x94, 0xcf, 0x3f, 0xf2, 0x3f, 0x13, 0x8c, 0x07, 0xff, 0x36, 0x58, 0xfe, 0xe3,
+ 0xbf, 0x5f, 0xf1, 0x8c, 0x5f, 0xe9, 0xe8, 0x1d, 0x1a, 0xb8, 0x82, 0x73, 0xdd, 0x94, 0xd6, 0x6b,
+ 0xfe, 0xc6, 0x60, 0x73, 0x28, 0x12, 0x6e, 0x2a, 0x0f, 0xc6, 0x83, 0xf5, 0xbb, 0x9a, 0xc2, 0x21,
+ 0xa2, 0x76, 0x75, 0xd7, 0x30, 0x73, 0x7c, 0xae, 0x61, 0xd6, 0x38, 0x5c, 0xc3, 0xea, 0xbf, 0x91,
+ 0x85, 0x0d, 0x60, 0x3d, 0xe7, 0xa0, 0x31, 0xbf, 0x8a, 0xde, 0xaf, 0xc3, 0x14, 0xb0, 0xbb, 0x79,
+ 0xf6, 0x3d, 0xdc, 0x8f, 0x33, 0xf4, 0xd3, 0xb2, 0x46, 0x3f, 0xd3, 0x2d, 0x41, 0x62, 0x81, 0x9b,
+ 0xc7, 0x6b, 0xe4, 0x46, 0x94, 0xcb, 0x02, 0x47, 0x3c, 0x5f, 0x76, 0x6c, 0xc4, 0x90, 0x58, 0xc3,
+ 0xae, 0x74, 0xae, 0x49, 0x2c, 0x97, 0xb6, 0x15, 0xec, 0xb5, 0x5e, 0x6e, 0x66, 0x59, 0x36, 0x65,
+ 0x8d, 0x7f, 0xd9, 0x54, 0xbd, 0x59, 0x16, 0x36, 0x82, 0x57, 0x38, 0x27, 0xf1, 0x26, 0xc4, 0x05,
+ 0x64, 0x51, 0xf3, 0x3f, 0x71, 0xc6, 0x84, 0xc5, 0xcb, 0x98, 0x7a, 0x6a, 0xc3, 0x16, 0x6e, 0xf0,
+ 0xa4, 0x2b, 0xdc, 0xe0, 0x99, 0x48, 0xb8, 0x41, 0xcf, 0x00, 0x73, 0xc7, 0x17, 0xcf, 0xd2, 0xc8,
+ 0x4f, 0x21, 0x73, 0xff, 0xc7, 0x8b, 0xf2, 0x26, 0x1c, 0xad, 0xa7, 0xbe, 0xe0, 0x6d, 0x1d, 0x25,
+ 0xcf, 0xd5, 0x32, 0x1d, 0xe2, 0x94, 0x22, 0xb1, 0x9b, 0xe3, 0x82, 0x8c, 0x69, 0x14, 0xd3, 0x13,
+ 0x64, 0xe1, 0x25, 0xf0, 0x03, 0x2e, 0x05, 0xc5, 0x46, 0x27, 0x38, 0x11, 0xaf, 0xbb, 0x59, 0x60,
+ 0xce, 0xa6, 0x26, 0x29, 0x11, 0x8c, 0x44, 0x46, 0xb7, 0xc9, 0x93, 0x8f, 0xe5, 0x6d, 0x74, 0xc6,
+ 0xf2, 0x38, 0xcd, 0xd9, 0xa4, 0x84, 0x6b, 0xb6, 0xe1, 0xde, 0x8f, 0x2a, 0x65, 0x9b, 0x9c, 0xc6,
+ 0x79, 0xc5, 0xd8, 0x0b, 0x05, 0x57, 0x11, 0x5b, 0x63, 0xb1, 0xc1, 0x4b, 0x47, 0x5f, 0xa7, 0x58,
+ 0x83, 0x7a, 0x5b, 0x2d, 0x47, 0x01, 0x33, 0xcd, 0xd8, 0x22, 0x7d, 0x14, 0x10, 0x27, 0x93, 0x6a,
+ 0x83, 0xb9, 0x7e, 0xde, 0x38, 0x93, 0x68, 0x8e, 0x84, 0x3e, 0x1b, 0x58, 0xa5, 0xaf, 0x23, 0xb2,
+ 0xf4, 0x35, 0x93, 0xeb, 0x3a, 0x42, 0x1f, 0x04, 0x59, 0x4e, 0x50, 0xbb, 0x8e, 0xb3, 0x74, 0xf1,
+ 0x1a, 0xe7, 0xae, 0x23, 0x7c, 0xdd, 0x70, 0xdd, 0xb3, 0x91, 0xeb, 0xbb, 0x46, 0x16, 0x9e, 0x33,
+ 0x5c, 0xf7, 0x32, 0xcb, 0x39, 0x10, 0x74, 0xd2, 0xa0, 0xcc, 0x3f, 0x7c, 0xf3, 0xe8, 0xc8, 0x67,
+ 0x17, 0x94, 0xe3, 0xc7, 0x86, 0x06, 0xcf, 0x28, 0x2d, 0xad, 0xc9, 0xfe, 0x2f, 0x34, 0xc8, 0xd7,
+ 0x67, 0x0c, 0x07, 0xbe, 0x82, 0xf8, 0xd2, 0x78, 0x2d, 0x80, 0xb5, 0x03, 0xf2, 0xa5, 0x0b, 0x47,
+ 0x2e, 0x7e, 0xa6, 0x5c, 0xfe, 0xd4, 0x50, 0x31, 0xc4, 0x69, 0xb6, 0x78, 0x99, 0x20, 0xbd, 0x5e,
+ 0xa6, 0xe6, 0x5b, 0x47, 0x63, 0x62, 0x3c, 0x98, 0x88, 0xc6, 0x2d, 0x07, 0x86, 0x75, 0x20, 0x9f,
+ 0xa3, 0x9e, 0x68, 0x1f, 0xba, 0xd3, 0x85, 0x7c, 0x6b, 0x1d, 0x58, 0x5d, 0x25, 0x0b, 0xab, 0x40,
+ 0x25, 0xe7, 0x26, 0x0e, 0x7c, 0xa9, 0xd2, 0x73, 0x64, 0xf8, 0x52, 0x8b, 0xe1, 0x99, 0x99, 0x1a,
+ 0xf3, 0xb8, 0x17, 0x14, 0x3b, 0x5b, 0xcc, 0x04, 0x45, 0xd3, 0xa1, 0xdf, 0x9e, 0x95, 0x05, 0x1e,
+ 0xac, 0xe4, 0x5c, 0xf1, 0xeb, 0x46, 0x12, 0xa2, 0xd3, 0xfe, 0xe0, 0x01, 0x25, 0x6f, 0x36, 0x85,
+ 0x67, 0xb4, 0xda, 0x04, 0xb4, 0x9a, 0x7e, 0xd9, 0x88, 0x3b, 0xe2, 0xf8, 0x52, 0xa5, 0xbd, 0x6f,
+ 0xf8, 0xce, 0x1d, 0x17, 0xfe, 0x3f, 0xe9, 0x05, 0x73, 0xdd, 0xda, 0xcc, 0x48, 0x40, 0x3a, 0x24,
+ 0xe0, 0x79, 0x59, 0xa8, 0x02, 0x3c, 0x97, 0x02, 0xc3, 0x6e, 0x64, 0x21, 0x32, 0xd0, 0x9d, 0x05,
+ 0xe6, 0xbc, 0x19, 0x6b, 0x88, 0x07, 0x43, 0xe2, 0x8c, 0x04, 0x8c, 0xcf, 0xae, 0xaf, 0x77, 0xb1,
+ 0xeb, 0x4b, 0xc7, 0x65, 0xd7, 0x2d, 0xe6, 0xbc, 0xdc, 0x6a, 0xce, 0xc7, 0x0a, 0x0b, 0xae, 0xb6,
+ 0xdb, 0xf1, 0xf1, 0xe4, 0xbb, 0x6c, 0xb6, 0x19, 0x70, 0x6b, 0xec, 0x8d, 0x36, 0xe0, 0xdf, 0x2f,
+ 0xd3, 0xed, 0xc2, 0xf1, 0x9a, 0x8c, 0x1c, 0x4e, 0xf6, 0x7f, 0x91, 0xc2, 0x74, 0x3b, 0x5b, 0xcc,
+ 0x28, 0xae, 0x74, 0x9a, 0x6e, 0x37, 0xfc, 0xba, 0x91, 0x84, 0xa8, 0xad, 0x6f, 0xbc, 0xa0, 0x38,
+ 0x10, 0x8d, 0x44, 0x76, 0x04, 0xeb, 0x77, 0xcf, 0xe8, 0xad, 0xf1, 0xe9, 0xad, 0x1a, 0x6a, 0xf3,
+ 0x03, 0xc7, 0xf2, 0x9e, 0x96, 0x85, 0xa7, 0xa8, 0xcd, 0x8f, 0x79, 0xc3, 0x9f, 0x1f, 0x50, 0x3a,
+ 0xcf, 0xab, 0x03, 0xe7, 0x94, 0xd6, 0x6b, 0xc9, 0x73, 0x07, 0xf5, 0x02, 0x73, 0x07, 0xc4, 0x20,
+ 0x97, 0x1b, 0xee, 0xf9, 0x52, 0xdc, 0xd8, 0x45, 0x82, 0x64, 0x2f, 0x28, 0x71, 0x69, 0x32, 0x23,
+ 0x42, 0x69, 0xbc, 0xfe, 0xcd, 0x1d, 0xc1, 0x6e, 0x44, 0x21, 0x32, 0xf4, 0x9f, 0xb3, 0xc0, 0x6c,
+ 0x52, 0x77, 0x9b, 0x46, 0x60, 0x71, 0xef, 0x8c, 0x00, 0xcd, 0x18, 0xfe, 0x34, 0x18, 0xfe, 0xff,
+ 0xc0, 0x50, 0x9a, 0x06, 0x20, 0xc1, 0xfe, 0x92, 0x91, 0x85, 0x2b, 0x0c, 0xa5, 0x6b, 0xce, 0x30,
+ 0x3a, 0x43, 0xea, 0x20, 0xbf, 0x9e, 0xa0, 0xa8, 0x7c, 0xfe, 0x91, 0x7a, 0xbe, 0x4b, 0x07, 0x0f,
+ 0xf5, 0xf5, 0xaf, 0x2c, 0xf3, 0x2b, 0xad, 0x67, 0x95, 0xde, 0xdb, 0x6a, 0xef, 0x49, 0xbc, 0xe3,
+ 0xa6, 0xf6, 0xdd, 0x50, 0xff, 0xf1, 0x04, 0x96, 0x55, 0x45, 0x6e, 0x53, 0x6e, 0xdd, 0xc0, 0x7b,
+ 0x6f, 0x9a, 0xab, 0x80, 0xaf, 0xf8, 0xb1, 0xf4, 0x35, 0xd4, 0xd7, 0x6e, 0xeb, 0x86, 0xae, 0xa5,
+ 0xc8, 0x6d, 0x74, 0xde, 0x34, 0xa5, 0xed, 0xc8, 0xc9, 0x7f, 0xa7, 0x94, 0xf0, 0xf3, 0xf4, 0xd1,
+ 0x8f, 0x5c, 0x3c, 0x38, 0xfc, 0x45, 0xab, 0xa9, 0xe9, 0x7e, 0xe5, 0x05, 0xd0, 0x5e, 0x7d, 0xea,
+ 0xab, 0xb9, 0x8d, 0x96, 0xa0, 0xe8, 0x7c, 0xb7, 0xa0, 0x28, 0x99, 0xcd, 0xe3, 0xf0, 0x96, 0x0b,
+ 0x39, 0xf2, 0xef, 0x42, 0x27, 0x17, 0xba, 0x12, 0x65, 0xa9, 0x66, 0x82, 0x02, 0x6b, 0x7d, 0xd8,
+ 0xcf, 0x80, 0xdc, 0x26, 0x71, 0xaf, 0x7e, 0xb9, 0x48, 0x29, 0x83, 0x92, 0x97, 0xca, 0x46, 0x41,
+ 0x5e, 0xc5, 0x56, 0xb3, 0x3a, 0xbe, 0xf2, 0xe4, 0x3d, 0x59, 0x68, 0xe0, 0xe8, 0x5e, 0xf8, 0x77,
+ 0x0c, 0xbe, 0x34, 0x54, 0x76, 0x63, 0xb0, 0x29, 0xbc, 0x53, 0x94, 0x12, 0x7e, 0x1c, 0x65, 0xbb,
+ 0x3f, 0xd8, 0xa6, 0x5e, 0xb8, 0xad, 0xb6, 0xf7, 0x0c, 0xff, 0xd3, 0x41, 0xb5, 0xff, 0x38, 0xbe,
+ 0x12, 0x4c, 0x69, 0x3d, 0x94, 0xbc, 0x3e, 0x70, 0x7f, 0xb0, 0x6d, 0xe4, 0x64, 0x8f, 0x7a, 0x61,
+ 0x10, 0x6d, 0xf8, 0x9d, 0xfb, 0x60, 0x73, 0xb8, 0x29, 0xf4, 0x61, 0xe5, 0x07, 0x9a, 0xf6, 0xfa,
+ 0x30, 0x40, 0x7f, 0x06, 0x0d, 0x3e, 0x1a, 0x09, 0x19, 0x83, 0xf7, 0x8c, 0x3d, 0xf8, 0xd7, 0xcc,
+ 0xea, 0xf4, 0xe0, 0xa9, 0x5e, 0xf8, 0x77, 0xd4, 0xd3, 0x5f, 0x3c, 0xa4, 0xc1, 0x53, 0x9f, 0x81,
+ 0x01, 0x00, 0xcc, 0xb9, 0x10, 0x7b, 0xa0, 0x11, 0x95, 0xa3, 0xc0, 0xfc, 0xe2, 0x31, 0x11, 0x19,
+ 0xa0, 0xaa, 0x6b, 0x7d, 0x9a, 0x9f, 0x20, 0xd6, 0x01, 0xf7, 0x69, 0x82, 0xf9, 0xc5, 0x63, 0xce,
+ 0x2f, 0x40, 0x55, 0xf7, 0xbd, 0x03, 0x8a, 0xec, 0x14, 0x4f, 0xcf, 0xed, 0x33, 0x5a, 0xcf, 0x76,
+ 0x72, 0xa4, 0xe9, 0x5e, 0x9b, 0x4e, 0x7c, 0x85, 0x03, 0xa1, 0xfd, 0xc6, 0xb0, 0xa4, 0xdf, 0x0a,
+ 0xbb, 0xc6, 0xc8, 0xd8, 0xf1, 0x4c, 0xd4, 0x70, 0x6e, 0xb2, 0x26, 0xee, 0x78, 0x1e, 0xc0, 0x7c,
+ 0x5b, 0x7c, 0x0a, 0xbc, 0x81, 0x36, 0x69, 0x9f, 0xc2, 0xe2, 0xe8, 0x64, 0x3c, 0xc0, 0xb6, 0xe0,
+ 0x2a, 0x90, 0xb5, 0x33, 0x1c, 0x49, 0x88, 0x71, 0x5a, 0xe3, 0x11, 0x10, 0x9f, 0x87, 0xd3, 0x81,
+ 0x86, 0xef, 0x1d, 0x56, 0x07, 0x2e, 0x07, 0x08, 0xd4, 0x70, 0xa4, 0xdd, 0x50, 0xcd, 0x97, 0xea,
+ 0xcc, 0xb5, 0x0b, 0xc3, 0x4c, 0xf3, 0xf2, 0x3b, 0x2f, 0xbd, 0xcb, 0x69, 0x34, 0x99, 0xfa, 0x16,
+ 0x66, 0xb3, 0x25, 0xc3, 0xd3, 0xd5, 0xc2, 0x90, 0xd9, 0x90, 0xb1, 0x23, 0x0b, 0x53, 0x68, 0x43,
+ 0xc4, 0xf4, 0xbb, 0x94, 0xd9, 0x9d, 0x5a, 0x6e, 0x14, 0x26, 0x86, 0xe6, 0x13, 0xd3, 0xd0, 0x90,
+ 0x06, 0x70, 0x2d, 0xe5, 0x4e, 0x61, 0xf2, 0xa2, 0xdb, 0x48, 0x4c, 0x67, 0xaa, 0xc8, 0xee, 0x4b,
+ 0x51, 0x39, 0x6b, 0xa9, 0xef, 0xcd, 0x35, 0x72, 0x9d, 0xcc, 0x6b, 0xe7, 0x5e, 0x76, 0xfa, 0xd9,
+ 0x28, 0xdf, 0x8b, 0x12, 0xd4, 0xd9, 0x74, 0x33, 0x97, 0x04, 0x3b, 0x3a, 0xe5, 0x2c, 0x63, 0xa2,
+ 0x29, 0x67, 0xb6, 0xf4, 0xae, 0xcc, 0xc9, 0xa4, 0x77, 0xad, 0x36, 0x92, 0xf4, 0xb2, 0xcc, 0x9b,
+ 0xf3, 0xf4, 0x24, 0x3d, 0xa3, 0xa5, 0x2d, 0x47, 0xaf, 0x52, 0xf7, 0xc9, 0x29, 0x17, 0x9b, 0xf8,
+ 0xe4, 0x46, 0x4e, 0x18, 0xfa, 0xa9, 0x7b, 0xe5, 0xb5, 0xae, 0xc9, 0x71, 0x88, 0x2e, 0xd6, 0xe4,
+ 0x38, 0x92, 0x3a, 0xe5, 0x9a, 0x1a, 0x57, 0x6b, 0x49, 0xf5, 0xcb, 0x31, 0x53, 0x3b, 0xe9, 0x54,
+ 0x3f, 0xa8, 0x7f, 0xdf, 0x84, 0x59, 0xb2, 0xfc, 0x56, 0x1b, 0xae, 0x3e, 0xa0, 0xe6, 0x4b, 0x5c,
+ 0x7d, 0x63, 0xbe, 0xf8, 0xb7, 0xee, 0xd2, 0x57, 0x6b, 0x2b, 0x7f, 0xb0, 0x98, 0xb3, 0x71, 0x9a,
+ 0x43, 0xde, 0xd8, 0xaf, 0x2c, 0xfa, 0xe6, 0x55, 0x62, 0xeb, 0x66, 0xcc, 0xc1, 0xa8, 0xe6, 0x60,
+ 0x8d, 0x25, 0xd0, 0xe2, 0x59, 0x96, 0x8f, 0x45, 0xc0, 0x94, 0x57, 0x93, 0x0b, 0xed, 0x2b, 0x0e,
+ 0x72, 0x6a, 0xd6, 0x1d, 0xe7, 0xfc, 0xc2, 0x06, 0x31, 0xe1, 0x70, 0x3c, 0x4c, 0xe3, 0xf0, 0xf3,
+ 0x0c, 0x3a, 0x29, 0xc3, 0x6c, 0x38, 0xf5, 0xad, 0xc3, 0xbf, 0xb6, 0x58, 0x87, 0x72, 0x8b, 0x32,
+ 0x76, 0x9f, 0x51, 0x45, 0x5d, 0x30, 0x11, 0xc4, 0x6e, 0x28, 0x62, 0x78, 0x6c, 0x2f, 0x8a, 0xec,
+ 0xc8, 0x99, 0x3e, 0x06, 0xc3, 0xf7, 0x3a, 0xc8, 0x31, 0xe6, 0x94, 0x1e, 0x5f, 0xae, 0xfa, 0x07,
+ 0xb2, 0xb0, 0x06, 0x3c, 0xcf, 0xa5, 0x60, 0x8a, 0x94, 0xec, 0x44, 0x2c, 0xd1, 0xff, 0xc2, 0xb7,
+ 0x9c, 0x91, 0x96, 0x6f, 0x20, 0x45, 0x39, 0x23, 0xf9, 0xa3, 0xbe, 0xab, 0x41, 0x9e, 0x94, 0x72,
+ 0x43, 0x1b, 0xbf, 0x88, 0x1c, 0x9e, 0xb3, 0x5a, 0x20, 0x53, 0x7a, 0xff, 0xbf, 0x07, 0x3c, 0x61,
+ 0x4f, 0xd0, 0x59, 0xff, 0xa3, 0x84, 0xd8, 0x14, 0x9a, 0x41, 0xfa, 0xa8, 0x48, 0x7f, 0x45, 0x16,
+ 0x6a, 0x81, 0xc0, 0xa5, 0x46, 0x1e, 0xbf, 0xc4, 0x86, 0xfa, 0xe1, 0xde, 0xcf, 0xd5, 0x8f, 0x5b,
+ 0xd4, 0x23, 0x5f, 0x2a, 0xd7, 0x4f, 0x99, 0x04, 0xf8, 0x5a, 0x7f, 0x4e, 0x07, 0xaf, 0x7a, 0xa3,
+ 0xa1, 0x19, 0x6e, 0x1f, 0xdd, 0xce, 0xd5, 0x80, 0xcc, 0xe0, 0x4e, 0x7d, 0xd5, 0x93, 0x8f, 0xef,
+ 0xd6, 0xc4, 0x10, 0xde, 0x4f, 0xa7, 0x94, 0x61, 0x47, 0x6f, 0xe8, 0xf6, 0x27, 0xca, 0xf1, 0x63,
+ 0xc9, 0x73, 0x07, 0xfd, 0x31, 0x0d, 0xb5, 0xb8, 0xa2, 0xbe, 0x71, 0xed, 0x44, 0x3c, 0xbf, 0xd0,
+ 0x46, 0x34, 0xad, 0x15, 0xb5, 0xa5, 0xd0, 0xcf, 0x80, 0xfc, 0x2d, 0x61, 0x29, 0x21, 0x84, 0x42,
+ 0xd1, 0x26, 0x29, 0xcd, 0x79, 0x9e, 0x1b, 0x9d, 0x79, 0x9e, 0x93, 0x43, 0x77, 0x75, 0xb1, 0x2c,
+ 0xcc, 0x06, 0x85, 0x9c, 0x75, 0xa8, 0xec, 0x37, 0x5e, 0x7c, 0x11, 0xab, 0x0e, 0x99, 0xfa, 0x16,
+ 0x7a, 0x9d, 0xc5, 0x42, 0xcf, 0xb1, 0x58, 0x1f, 0x3c, 0x0b, 0x4b, 0x64, 0x30, 0x39, 0x70, 0xd0,
+ 0xbc, 0x1d, 0x78, 0xfa, 0x2c, 0xda, 0x4a, 0x64, 0x01, 0x82, 0x22, 0xce, 0x46, 0x1b, 0xb6, 0x2d,
+ 0x07, 0x64, 0xe1, 0x9f, 0xc6, 0x72, 0x0a, 0x73, 0x17, 0xbd, 0x9c, 0x22, 0x53, 0xa6, 0x0f, 0x2c,
+ 0xbd, 0x40, 0x1f, 0xca, 0xc5, 0x6c, 0x84, 0x08, 0x4b, 0x1d, 0xca, 0xa5, 0xaf, 0xfe, 0x36, 0xc1,
+ 0xe8, 0x81, 0x07, 0x6a, 0x21, 0xe4, 0xa5, 0x1f, 0x78, 0xa0, 0x16, 0x42, 0xe4, 0xa3, 0x6e, 0xcb,
+ 0xa0, 0xa7, 0x40, 0x46, 0x24, 0xda, 0x10, 0x25, 0x6b, 0xb0, 0x42, 0x59, 0xc8, 0xe3, 0x10, 0x80,
+ 0x47, 0xff, 0x06, 0xd0, 0xbf, 0xf0, 0x79, 0x90, 0x1d, 0x8a, 0xd6, 0x4b, 0x5b, 0xc2, 0x4d, 0xbb,
+ 0x09, 0x49, 0x90, 0x33, 0x65, 0x00, 0xd1, 0x45, 0xc2, 0x6a, 0xf7, 0xa5, 0x91, 0x13, 0x77, 0xd5,
+ 0x63, 0x57, 0x02, 0x06, 0x9c, 0xce, 0x2a, 0xcc, 0xd2, 0xef, 0x32, 0x59, 0x68, 0x6e, 0x4a, 0x40,
+ 0x32, 0x2e, 0x2a, 0xca, 0x6e, 0xee, 0x4d, 0xbc, 0x07, 0x0a, 0xea, 0x9b, 0xe3, 0x71, 0xb1, 0x29,
+ 0x61, 0x7d, 0x0f, 0xa0, 0x46, 0x16, 0x5e, 0xe6, 0x6c, 0x45, 0x7c, 0x39, 0x41, 0x2b, 0x0a, 0xfb,
+ 0xe3, 0x4c, 0x2e, 0xdc, 0xdf, 0xfd, 0xc1, 0xb6, 0xe4, 0x97, 0xfd, 0x43, 0x03, 0x97, 0x86, 0xbb,
+ 0xaf, 0xaa, 0x37, 0xba, 0x71, 0x51, 0xc0, 0xd6, 0x1c, 0xd6, 0xd2, 0x2a, 0x38, 0x5b, 0x57, 0xe1,
+ 0xd6, 0x7c, 0x6b, 0x63, 0xeb, 0x60, 0x94, 0x83, 0x18, 0xf9, 0x21, 0x71, 0x67, 0xb0, 0x39, 0x82,
+ 0xdf, 0x33, 0x97, 0xc8, 0x52, 0xed, 0x5d, 0x59, 0xf8, 0x3b, 0xce, 0x5a, 0xc2, 0x6f, 0xc6, 0x27,
+ 0x3b, 0x46, 0x5a, 0xda, 0x93, 0x77, 0x7a, 0xe8, 0x31, 0xe2, 0xc3, 0x16, 0xc9, 0xce, 0xef, 0xd4,
+ 0x63, 0x57, 0xf0, 0x60, 0x51, 0xbe, 0x43, 0xfb, 0x48, 0xd7, 0xfe, 0xe1, 0xcf, 0x0f, 0x28, 0xdd,
+ 0x5f, 0x2b, 0x87, 0xce, 0x1a, 0x77, 0x88, 0xe0, 0xe6, 0x01, 0x6b, 0xdf, 0x70, 0x0b, 0xc8, 0xd7,
+ 0xa7, 0x47, 0x2f, 0xf8, 0xd0, 0x2e, 0xae, 0xb5, 0x44, 0x7f, 0xb4, 0x06, 0x4f, 0x4d, 0xef, 0xcd,
+ 0x52, 0x05, 0xfe, 0x83, 0xb1, 0x4e, 0xc6, 0xf9, 0x13, 0xe8, 0xd2, 0x08, 0x7d, 0x9d, 0xbc, 0x96,
+ 0x20, 0x05, 0xf9, 0x28, 0xf7, 0x07, 0xdb, 0x94, 0xe3, 0x6d, 0xfe, 0x8d, 0x62, 0xa4, 0xd1, 0xe6,
+ 0xbd, 0xb8, 0x13, 0x41, 0x5f, 0x54, 0xbf, 0x63, 0xaa, 0x28, 0x7c, 0xda, 0xf1, 0x25, 0x59, 0x58,
+ 0x6b, 0xaa, 0xa8, 0x95, 0xf8, 0x1b, 0x58, 0x16, 0xef, 0x0f, 0xb6, 0xe1, 0x9f, 0xca, 0xe0, 0x47,
+ 0x4a, 0x5f, 0x9f, 0xd2, 0x7a, 0x56, 0x3d, 0x73, 0x37, 0x79, 0xb9, 0x1f, 0x1f, 0x54, 0xb2, 0x2b,
+ 0xb0, 0x43, 0x0c, 0x28, 0x92, 0x9a, 0x63, 0xb1, 0x68, 0x3c, 0x21, 0x86, 0x84, 0x7a, 0xac, 0x14,
+ 0xf2, 0xd1, 0xf6, 0xd4, 0x76, 0x59, 0x78, 0x9b, 0x73, 0x14, 0xf2, 0xb5, 0x84, 0x23, 0xd1, 0xd1,
+ 0x98, 0xe4, 0xb9, 0x83, 0x38, 0x3b, 0x44, 0x1b, 0x7f, 0x67, 0x8f, 0x72, 0xa4, 0x5d, 0xed, 0x3a,
+ 0xe2, 0x27, 0x99, 0x53, 0x65, 0xfe, 0x66, 0x9c, 0x8b, 0x50, 0xe6, 0x97, 0x12, 0xd1, 0x58, 0x99,
+ 0xbf, 0xd9, 0xc8, 0xa9, 0x72, 0x74, 0x0b, 0xdf, 0x02, 0xb9, 0x04, 0x23, 0x48, 0xc6, 0xf1, 0x01,
+ 0x2d, 0x74, 0xe5, 0x1e, 0x0d, 0xe7, 0x59, 0xc2, 0xc5, 0x5d, 0x57, 0xb1, 0xb1, 0x18, 0xea, 0xfb,
+ 0x96, 0xba, 0x37, 0x01, 0x4b, 0x3f, 0xdd, 0xa0, 0x5a, 0x13, 0x43, 0x30, 0x97, 0x23, 0x5a, 0x87,
+ 0xcf, 0x23, 0x67, 0x20, 0x50, 0x2f, 0xec, 0x5f, 0x19, 0x74, 0x8f, 0x09, 0x2e, 0xc3, 0xbe, 0xce,
+ 0x54, 0xb5, 0x7f, 0xc6, 0x03, 0x60, 0x5e, 0x5d, 0x4b, 0xb8, 0xea, 0x4b, 0xfb, 0x03, 0x60, 0x9a,
+ 0x61, 0x00, 0xc5, 0x9c, 0xcb, 0x2c, 0xd9, 0x9b, 0xf8, 0xfa, 0x10, 0x2b, 0x78, 0x3a, 0xd9, 0x4f,
+ 0x66, 0xfc, 0xf6, 0x73, 0xda, 0x1d, 0x34, 0xd0, 0xd0, 0x0e, 0x4a, 0x38, 0x37, 0x02, 0xb1, 0xbf,
+ 0xf6, 0x80, 0x22, 0x92, 0xa0, 0x3b, 0x8a, 0xcf, 0x36, 0x15, 0xb2, 0x0d, 0x26, 0xc5, 0xb3, 0xb0,
+ 0xca, 0x7e, 0xbd, 0x17, 0x3e, 0x72, 0xa9, 0x9b, 0x44, 0xd2, 0xd6, 0x6e, 0x0c, 0x57, 0x18, 0xd1,
+ 0xbb, 0x4c, 0xf3, 0x1d, 0x03, 0x3d, 0x7a, 0x97, 0x65, 0x8b, 0xda, 0x69, 0x1c, 0x02, 0x20, 0xe7,
+ 0x40, 0x23, 0xfb, 0x47, 0x0f, 0x98, 0x6d, 0x03, 0xce, 0xe4, 0xd6, 0xa4, 0x83, 0xa1, 0x4b, 0x65,
+ 0xa1, 0x04, 0xcc, 0xe1, 0x9c, 0xc8, 0x45, 0xec, 0x4c, 0x92, 0xd6, 0xa6, 0x0d, 0x3b, 0x33, 0x93,
+ 0x65, 0x67, 0xe6, 0xa1, 0xb2, 0xb3, 0x1d, 0x8d, 0x88, 0x9d, 0x6d, 0xc0, 0x19, 0x76, 0x4e, 0x27,
+ 0x3b, 0x3b, 0x90, 0xcb, 0xfe, 0x91, 0x01, 0xf9, 0x6f, 0x24, 0xa2, 0xb1, 0xc7, 0x91, 0x97, 0x8d,
+ 0x45, 0xb8, 0x65, 0x82, 0xec, 0x1f, 0x3c, 0xa0, 0x80, 0x86, 0xcc, 0xb0, 0x58, 0x3a, 0x97, 0xd0,
+ 0x56, 0xcc, 0x22, 0x9f, 0xd5, 0x38, 0x9c, 0xf0, 0x58, 0x32, 0x99, 0xee, 0xb3, 0x3a, 0x67, 0xc9,
+ 0xfe, 0xc9, 0x03, 0xe6, 0x38, 0xc0, 0x33, 0xec, 0x96, 0x4e, 0x8f, 0xd3, 0x05, 0xbd, 0x7c, 0xcf,
+ 0xf3, 0x20, 0x57, 0x5b, 0xb4, 0xbe, 0x8a, 0xbf, 0x07, 0xbf, 0x63, 0x40, 0x8e, 0xb0, 0x27, 0x18,
+ 0x8e, 0x04, 0x77, 0x44, 0x44, 0x68, 0x7d, 0xe6, 0xcd, 0x80, 0x07, 0xc4, 0xf7, 0x7d, 0xbe, 0x54,
+ 0x45, 0x52, 0x8c, 0x8d, 0xc9, 0xc2, 0x16, 0xb8, 0x04, 0x87, 0x37, 0xb5, 0x5a, 0xe5, 0xa4, 0x9a,
+ 0xda, 0xd5, 0xae, 0x1c, 0xed, 0x26, 0x97, 0x88, 0x76, 0xf4, 0x26, 0x4f, 0x5e, 0xf5, 0x8d, 0xab,
+ 0xd6, 0x47, 0xbf, 0x1c, 0x3a, 0xe1, 0x99, 0x0f, 0x9f, 0xa8, 0xa4, 0x3e, 0x59, 0xb9, 0x67, 0x55,
+ 0x65, 0xd0, 0x18, 0x68, 0x2f, 0x03, 0x8a, 0x6a, 0xd1, 0x75, 0x20, 0xd4, 0x83, 0xba, 0x7e, 0xeb,
+ 0x85, 0xef, 0xb6, 0x62, 0x6d, 0x12, 0x8b, 0xc7, 0xa8, 0x21, 0xc5, 0xd8, 0xb7, 0x64, 0x61, 0x01,
+ 0x24, 0xef, 0xa2, 0xe1, 0x44, 0x55, 0x9f, 0xe5, 0x17, 0x1a, 0xdb, 0x2a, 0xb6, 0xcc, 0x3e, 0x36,
+ 0x22, 0x76, 0x52, 0xe5, 0x07, 0x94, 0x00, 0x7e, 0x58, 0x89, 0x72, 0x5c, 0xab, 0x19, 0x0e, 0xfe,
+ 0x47, 0x06, 0x40, 0xfc, 0xc1, 0x6d, 0x62, 0x5c, 0x8a, 0x36, 0x05, 0x23, 0xda, 0x87, 0x21, 0xeb,
+ 0x32, 0x22, 0xba, 0x82, 0x36, 0xea, 0xa7, 0xc6, 0xac, 0x23, 0xc5, 0xd8, 0xdd, 0xb2, 0xb0, 0x0c,
+ 0x42, 0x32, 0xd2, 0xbe, 0xaf, 0x86, 0xfa, 0xf5, 0xd1, 0xbb, 0xc0, 0xd0, 0x1c, 0xaa, 0xd9, 0x67,
+ 0x27, 0x32, 0x87, 0xca, 0x18, 0xf9, 0xa2, 0x36, 0x99, 0x9b, 0x8c, 0xe6, 0xe8, 0x85, 0x46, 0x43,
+ 0xbf, 0xbd, 0xd8, 0x89, 0x7e, 0x67, 0x0d, 0x29, 0xc6, 0xfe, 0x3d, 0x42, 0x3f, 0x39, 0xea, 0x42,
+ 0xd0, 0x4f, 0xff, 0x42, 0x43, 0x7f, 0xc1, 0xb7, 0x7a, 0x42, 0x43, 0xc7, 0xf9, 0x72, 0xda, 0xc0,
+ 0xbf, 0x62, 0x40, 0xbe, 0xe5, 0xc9, 0x79, 0xb8, 0xd0, 0xb9, 0xb1, 0x4a, 0x0f, 0x79, 0xd1, 0x68,
+ 0xc5, 0x52, 0x8c, 0xdd, 0x8e, 0xc7, 0x4b, 0x3d, 0x59, 0xef, 0xb3, 0xfc, 0x42, 0xe3, 0x7d, 0x16,
+ 0x4e, 0x66, 0xbc, 0x08, 0xcb, 0xf6, 0xf7, 0xa5, 0x6d, 0x58, 0x76, 0x79, 0x0d, 0xdc, 0x86, 0x65,
+ 0xb7, 0x07, 0xaa, 0x09, 0x96, 0xe9, 0x57, 0xaa, 0x7d, 0x96, 0x5f, 0x18, 0xcb, 0xdc, 0x64, 0xb1,
+ 0x7c, 0x83, 0xc1, 0xa1, 0x7c, 0x6a, 0xd8, 0x56, 0x3c, 0x3a, 0xde, 0xd8, 0xf7, 0x3d, 0x39, 0x6a,
+ 0xb9, 0x14, 0x63, 0xdf, 0x45, 0xfc, 0x4d, 0xa3, 0x16, 0x47, 0xd2, 0x7d, 0x2e, 0x30, 0x34, 0xfc,
+ 0x0a, 0x38, 0x21, 0x19, 0x85, 0xf7, 0x18, 0x90, 0x4b, 0x3d, 0x78, 0x05, 0xe7, 0x3b, 0x46, 0x64,
+ 0x3e, 0x74, 0xe6, 0x5b, 0x90, 0xba, 0x50, 0x8a, 0xb1, 0xcd, 0xb2, 0x50, 0x06, 0x8b, 0x1d, 0x8f,
+ 0x65, 0x29, 0x6d, 0x2d, 0x3e, 0x57, 0x28, 0x1a, 0xef, 0x3a, 0xf8, 0xd2, 0xc4, 0xd0, 0xad, 0xdf,
+ 0x73, 0xf9, 0x61, 0x25, 0xea, 0x47, 0x82, 0xbf, 0x67, 0x40, 0x91, 0xfd, 0x01, 0x23, 0x1b, 0xbf,
+ 0xb8, 0xbc, 0x62, 0x65, 0xe3, 0x17, 0xb7, 0x17, 0x90, 0xd8, 0x56, 0x46, 0x16, 0x5e, 0x80, 0xbe,
+ 0xd4, 0xef, 0x20, 0xf9, 0x46, 0x29, 0x43, 0xb3, 0xdb, 0x00, 0xd7, 0x3f, 0xd8, 0xec, 0x74, 0xa1,
+ 0xf8, 0x0b, 0x03, 0xa0, 0xf3, 0xf1, 0x18, 0x9b, 0x1e, 0x75, 0x7d, 0x56, 0xc8, 0xa6, 0x47, 0xdd,
+ 0x5f, 0xa0, 0x61, 0x4f, 0x33, 0xb2, 0xf0, 0x12, 0x5c, 0x68, 0x9d, 0x8e, 0x71, 0x8f, 0x17, 0xe1,
+ 0xb9, 0xd1, 0x8b, 0xd1, 0x84, 0xb7, 0xc1, 0xad, 0x69, 0x99, 0x70, 0xa5, 0x7e, 0xdb, 0x30, 0x3c,
+ 0xeb, 0x41, 0x21, 0x4e, 0xdb, 0x8b, 0x1e, 0xb6, 0x99, 0xbb, 0x3e, 0x03, 0x63, 0x9b, 0xb9, 0xfb,
+ 0xb3, 0x20, 0xec, 0x6d, 0x46, 0x16, 0xde, 0x82, 0xe3, 0x7f, 0x10, 0xc5, 0x37, 0xfe, 0xaa, 0x08,
+ 0x23, 0xdb, 0xe1, 0x3b, 0xe9, 0xc5, 0x48, 0xe5, 0x07, 0xe4, 0xaf, 0x0f, 0xa1, 0xc2, 0x80, 0x5c,
+ 0xea, 0x56, 0x7d, 0x9b, 0xf0, 0x5a, 0x5f, 0xf8, 0xb0, 0x09, 0xaf, 0xed, 0xd5, 0x09, 0xf6, 0x1c,
+ 0x23, 0x0b, 0x7f, 0xa3, 0x59, 0x52, 0x4d, 0x1d, 0x92, 0x4b, 0xa5, 0xd0, 0xf7, 0x7d, 0x55, 0x4e,
+ 0xd8, 0xfd, 0xc1, 0x36, 0xe5, 0xda, 0xa1, 0xa1, 0xc1, 0x73, 0x43, 0x03, 0xc7, 0xfc, 0xf4, 0x85,
+ 0x60, 0x43, 0x7d, 0xdf, 0xe2, 0xda, 0x98, 0xfb, 0xb9, 0x34, 0x71, 0x7f, 0xa7, 0x07, 0x40, 0xe7,
+ 0xeb, 0x01, 0x36, 0x1e, 0x70, 0x7d, 0x01, 0xc2, 0xc6, 0x03, 0xee, 0x4f, 0x10, 0xb0, 0x03, 0x8c,
+ 0x2c, 0xbc, 0x03, 0xf5, 0x27, 0x50, 0xea, 0x1d, 0x17, 0xe8, 0xfb, 0xd6, 0xa6, 0x2c, 0x1a, 0x27,
+ 0x2a, 0xb6, 0x73, 0x0f, 0x8f, 0x0b, 0x7e, 0xc3, 0x80, 0x7c, 0xcb, 0x6b, 0x00, 0x36, 0xeb, 0x6e,
+ 0x7f, 0x29, 0xc0, 0x57, 0x5c, 0xd1, 0x10, 0x8d, 0x36, 0x44, 0xc4, 0x8a, 0x60, 0x2c, 0x5c, 0xb1,
+ 0x31, 0x91, 0x88, 0xd5, 0x44, 0x43, 0xfb, 0xd8, 0x53, 0x8c, 0x2c, 0x2c, 0x87, 0xb9, 0xf8, 0x15,
+ 0x01, 0x4c, 0x7a, 0x1f, 0xfe, 0xe1, 0xc6, 0xea, 0x68, 0x56, 0xf5, 0x30, 0xf8, 0xb0, 0x66, 0x55,
+ 0x19, 0x22, 0xa3, 0x86, 0x7f, 0x66, 0x40, 0xa1, 0xed, 0x0a, 0x6a, 0xf8, 0xa4, 0xab, 0xf2, 0x36,
+ 0xaf, 0x28, 0xf6, 0xf9, 0x47, 0xaf, 0x20, 0xc5, 0xd8, 0xf3, 0x8c, 0x2c, 0xd4, 0xc0, 0x27, 0xc7,
+ 0xb8, 0xc7, 0xda, 0x37, 0x56, 0x05, 0x84, 0x87, 0x37, 0xd8, 0x34, 0x69, 0x3d, 0xbd, 0x57, 0xcd,
+ 0x9d, 0xf8, 0x13, 0x49, 0x6b, 0x30, 0x0e, 0xf1, 0xd9, 0xc8, 0x6a, 0xbf, 0x30, 0xcd, 0xb7, 0x68,
+ 0xb4, 0x62, 0x29, 0xc6, 0x5e, 0x62, 0x64, 0xe1, 0x87, 0x70, 0xd9, 0x78, 0x2f, 0xd4, 0xf2, 0x8d,
+ 0xbb, 0x26, 0xc2, 0xc1, 0x2b, 0xb0, 0x6e, 0x9c, 0x38, 0x20, 0xcb, 0x6b, 0xa9, 0xf2, 0x03, 0x63,
+ 0xa1, 0x6d, 0xce, 0x1c, 0xca, 0x58, 0xdf, 0xdb, 0x6e, 0x27, 0x72, 0xea, 0x7b, 0xe7, 0x75, 0x55,
+ 0x4e, 0x7d, 0xef, 0x72, 0xc5, 0x11, 0x7b, 0x83, 0x91, 0x85, 0xf5, 0xf0, 0x49, 0x97, 0x8b, 0x8e,
+ 0x2c, 0x5a, 0xde, 0xed, 0x26, 0xa4, 0xe4, 0xb9, 0x83, 0x0e, 0xf5, 0x1e, 0x82, 0x3b, 0x1e, 0x64,
+ 0xda, 0xc6, 0xd6, 0x32, 0x61, 0x01, 0xf4, 0xb7, 0x89, 0x0d, 0x5d, 0x01, 0x5e, 0x34, 0x77, 0x4c,
+ 0x4c, 0x76, 0xb0, 0xf2, 0xb8, 0xcb, 0x1d, 0x34, 0x36, 0x1f, 0xc7, 0xed, 0x4e, 0x14, 0xf6, 0xa7,
+ 0x48, 0xf5, 0x71, 0xea, 0x91, 0x2f, 0x86, 0xbb, 0xdb, 0x46, 0x23, 0xb5, 0xbe, 0x29, 0xea, 0x9b,
+ 0x40, 0x5d, 0x84, 0xa1, 0x06, 0xf6, 0x11, 0x60, 0x48, 0x13, 0x98, 0x6f, 0x3c, 0x54, 0x60, 0xc9,
+ 0x44, 0x93, 0x95, 0x73, 0x5c, 0x2f, 0x2b, 0xb1, 0x71, 0x8e, 0xfb, 0xd5, 0x19, 0xec, 0xcf, 0x19,
+ 0x59, 0xf8, 0x3b, 0x58, 0x36, 0x8e, 0xe9, 0x1b, 0xfb, 0xc4, 0xbe, 0x09, 0xd5, 0xc6, 0xe8, 0xe2,
+ 0x1e, 0x11, 0xba, 0x2e, 0x9a, 0xdb, 0x16, 0xa9, 0x78, 0xca, 0xe5, 0x72, 0x04, 0xc7, 0x6a, 0xd6,
+ 0x79, 0x58, 0x7f, 0x02, 0x3c, 0x45, 0xf6, 0xd7, 0x7d, 0x13, 0xa8, 0x8b, 0x91, 0xe4, 0x7b, 0x44,
+ 0x48, 0xba, 0xe6, 0x01, 0xb3, 0x1d, 0xa7, 0xa9, 0xa1, 0x15, 0x07, 0x6e, 0x27, 0xe0, 0x7d, 0xec,
+ 0x58, 0x55, 0xa4, 0x18, 0xfb, 0x4b, 0x46, 0x16, 0xb6, 0xc3, 0x15, 0xe3, 0x98, 0x7b, 0x9c, 0xb4,
+ 0xf7, 0x4d, 0xa4, 0x32, 0xc2, 0x54, 0xcc, 0xb7, 0xfb, 0xe1, 0x63, 0xaa, 0x52, 0xff, 0xa4, 0x86,
+ 0xb2, 0x4b, 0x1e, 0xc7, 0xf9, 0xc8, 0x45, 0xa3, 0x1c, 0x26, 0x74, 0x2e, 0x83, 0x9d, 0x87, 0x31,
+ 0xd9, 0x5f, 0x30, 0xb2, 0xf0, 0x36, 0x2c, 0xc1, 0x47, 0x31, 0xfd, 0x01, 0x3d, 0x79, 0x13, 0x1d,
+ 0x1c, 0xf4, 0xbd, 0xe4, 0x0a, 0xc6, 0xb7, 0x9c, 0xaa, 0xe7, 0xbb, 0x94, 0x5b, 0x37, 0x92, 0x03,
+ 0x1d, 0x24, 0xa5, 0xa4, 0xf5, 0xac, 0x72, 0xbc, 0x4d, 0x3d, 0x7d, 0x53, 0xb9, 0x7e, 0x2a, 0x79,
+ 0xb9, 0xdf, 0x1f, 0x0a, 0xef, 0xdc, 0x89, 0xd0, 0x14, 0x65, 0xdf, 0x7b, 0x04, 0x68, 0x8a, 0xe1,
+ 0x29, 0xa1, 0x60, 0x81, 0x87, 0x4e, 0x31, 0xd5, 0xcf, 0xf7, 0x2c, 0x4e, 0x61, 0xc1, 0xcc, 0x13,
+ 0x61, 0x3e, 0x76, 0xac, 0x2a, 0x52, 0x8c, 0xfd, 0x15, 0x23, 0x0b, 0xff, 0x00, 0x2b, 0xc6, 0xb6,
+ 0xdf, 0xca, 0xb1, 0x43, 0x4a, 0x07, 0xc9, 0xbb, 0xf1, 0x4d, 0xb0, 0x3e, 0xc2, 0x5b, 0x04, 0x3e,
+ 0x0a, 0xbc, 0x91, 0x33, 0x28, 0xf0, 0x9f, 0x2d, 0xbe, 0x81, 0x9e, 0xc1, 0x9e, 0xd2, 0x37, 0xa0,
+ 0x0e, 0x4c, 0xa4, 0xf4, 0x0d, 0xe8, 0x34, 0x78, 0x36, 0x49, 0x04, 0x72, 0x4c, 0x3c, 0x18, 0x39,
+ 0xf2, 0xbe, 0x89, 0x54, 0x46, 0x18, 0xfb, 0x98, 0x81, 0xfb, 0x99, 0x47, 0x21, 0x92, 0xe4, 0x20,
+ 0x09, 0xf2, 0x36, 0xf1, 0x9f, 0x1f, 0x56, 0xea, 0x23, 0x81, 0xff, 0xce, 0x83, 0x82, 0x26, 0x96,
+ 0xd4, 0x74, 0x67, 0xd0, 0xc4, 0x9e, 0xb9, 0xee, 0xb3, 0x2e, 0x30, 0x6b, 0xa3, 0x8d, 0x8d, 0xf8,
+ 0xe1, 0x5e, 0x84, 0xbd, 0xff, 0xcd, 0xc8, 0xc2, 0x3e, 0x68, 0x4f, 0x6e, 0x27, 0xa7, 0x7b, 0xf5,
+ 0xbb, 0xd0, 0x7d, 0x6f, 0xdb, 0xca, 0x87, 0xfa, 0x3e, 0xc1, 0x4f, 0x0e, 0x19, 0x15, 0xed, 0x09,
+ 0x67, 0x48, 0x8a, 0xd5, 0x33, 0xbd, 0xfe, 0xbd, 0xd1, 0xf8, 0x6e, 0x6d, 0x49, 0x80, 0x0e, 0xef,
+ 0x5f, 0x3c, 0xaf, 0x1c, 0xbd, 0xe0, 0x8f, 0x45, 0x43, 0x24, 0x01, 0x0d, 0x21, 0x77, 0x37, 0x0c,
+ 0x3f, 0x02, 0xd4, 0x92, 0xa4, 0xb6, 0x9b, 0x1e, 0xe7, 0xcd, 0xa7, 0x38, 0xd3, 0x1c, 0x3e, 0x3d,
+ 0xaa, 0x27, 0x6a, 0xa4, 0xa3, 0xfb, 0xe6, 0xb9, 0xe0, 0x13, 0xe1, 0xf2, 0xbf, 0x33, 0xb2, 0xb0,
+ 0x13, 0xae, 0x42, 0x89, 0x76, 0x01, 0x97, 0x5c, 0xf5, 0x65, 0xe1, 0xa6, 0x86, 0xb8, 0x28, 0x49,
+ 0x95, 0x92, 0x18, 0xdf, 0x13, 0xae, 0x17, 0x2b, 0x25, 0xb1, 0x3e, 0x2e, 0x26, 0x96, 0xfb, 0x26,
+ 0xde, 0xe4, 0x11, 0x22, 0x4e, 0xfc, 0x51, 0x4c, 0xc3, 0xce, 0x31, 0x0f, 0x28, 0xb0, 0x66, 0x79,
+ 0xc3, 0x45, 0x29, 0x10, 0x46, 0x52, 0xc0, 0x47, 0x67, 0xbc, 0xbb, 0x8c, 0x2c, 0x6c, 0x81, 0x73,
+ 0x5c, 0xb2, 0xc4, 0x7d, 0xcf, 0xa6, 0xe2, 0xb6, 0x58, 0x34, 0x54, 0xe6, 0x27, 0xd7, 0x63, 0xa3,
+ 0x53, 0xe8, 0x38, 0x35, 0x3d, 0xf9, 0x6d, 0xe7, 0xc8, 0xfe, 0x23, 0x08, 0x25, 0x61, 0xd8, 0xf0,
+ 0x28, 0x4c, 0x82, 0x36, 0xfb, 0x0e, 0x0f, 0x28, 0x76, 0x7b, 0xc6, 0x05, 0x2e, 0xb1, 0x3a, 0xf0,
+ 0xee, 0xef, 0xf1, 0xf8, 0x96, 0x8e, 0xa3, 0x96, 0x14, 0x63, 0xbf, 0x64, 0x64, 0x81, 0x87, 0xf3,
+ 0x52, 0xbc, 0x0a, 0xe3, 0x4b, 0x55, 0x80, 0x90, 0xd1, 0xc4, 0x3e, 0x0a, 0xfe, 0x08, 0xa3, 0xa1,
+ 0x57, 0x33, 0x1c, 0xdf, 0x0b, 0x40, 0x3e, 0x99, 0x02, 0x49, 0xb7, 0xfe, 0x19, 0x03, 0x80, 0x99,
+ 0x8c, 0x0d, 0x7d, 0x8e, 0xc5, 0xae, 0xb1, 0xc9, 0xea, 0x9b, 0x9f, 0xb2, 0x4c, 0x8a, 0xb1, 0x07,
+ 0x18, 0x59, 0xa8, 0x82, 0xa5, 0x98, 0x2f, 0xe8, 0x64, 0x4a, 0x12, 0xe4, 0x4c, 0x59, 0x82, 0xf0,
+ 0x50, 0x07, 0x6b, 0x1e, 0x04, 0x0f, 0x41, 0x3c, 0xf8, 0xdf, 0xe1, 0x90, 0x06, 0x9d, 0x18, 0xe7,
+ 0x0c, 0x69, 0xd8, 0xd2, 0x1d, 0x9d, 0x21, 0x0d, 0x47, 0x5e, 0x5d, 0x6b, 0xaa, 0xa9, 0x61, 0x35,
+ 0xe0, 0x4b, 0x59, 0x82, 0xa6, 0xb6, 0x19, 0x6e, 0x7a, 0xf0, 0xa9, 0xe9, 0x0b, 0xd6, 0x9f, 0x32,
+ 0x20, 0xdf, 0x92, 0x29, 0x65, 0x0b, 0x5e, 0xd8, 0xf3, 0xd6, 0x6c, 0xc1, 0x0b, 0x67, 0x92, 0xd5,
+ 0x8f, 0xf0, 0x46, 0x1f, 0x4a, 0x2b, 0xa6, 0x27, 0xe0, 0x73, 0x81, 0xe1, 0xe0, 0x23, 0x9b, 0x06,
+ 0x4a, 0x69, 0x9e, 0xda, 0x2f, 0x18, 0x90, 0x6f, 0xc9, 0x92, 0xb1, 0x4d, 0xc5, 0x9e, 0xb3, 0x64,
+ 0x9b, 0x8a, 0x33, 0xc1, 0xe6, 0xdf, 0xe0, 0x3d, 0x1d, 0xb4, 0xbd, 0x67, 0x9d, 0x8a, 0x13, 0x86,
+ 0xa6, 0xb2, 0xd5, 0x97, 0x3e, 0xca, 0x68, 0x33, 0xfa, 0xbf, 0x0c, 0x00, 0x66, 0x52, 0x86, 0x4d,
+ 0x94, 0x2c, 0x99, 0x31, 0x36, 0x51, 0xb2, 0x65, 0x72, 0x7c, 0xcd, 0xc8, 0xc2, 0x6b, 0xb0, 0x54,
+ 0x39, 0xd0, 0xa5, 0x7e, 0x7b, 0xd1, 0xc2, 0x55, 0xf7, 0x8e, 0x0f, 0x77, 0xb7, 0xf9, 0x56, 0xe3,
+ 0x12, 0x22, 0x44, 0x3d, 0xe7, 0x87, 0xee, 0x7e, 0x82, 0x4b, 0xee, 0x0f, 0xb6, 0x0d, 0xdd, 0xfb,
+ 0x2c, 0x79, 0xea, 0x2c, 0xce, 0x47, 0x4f, 0x76, 0xf6, 0x29, 0x2d, 0x3f, 0xa1, 0xbc, 0xca, 0x37,
+ 0x7c, 0x5b, 0xd3, 0x36, 0xe1, 0x4a, 0x29, 0x11, 0x8d, 0x69, 0xb3, 0xfe, 0x0d, 0x03, 0x0a, 0x6d,
+ 0xb9, 0x01, 0x36, 0xa1, 0x73, 0xe6, 0x6b, 0xd8, 0x84, 0xce, 0x25, 0xb5, 0x80, 0x6d, 0x61, 0x64,
+ 0xa1, 0x02, 0x42, 0x7c, 0xad, 0xa6, 0x85, 0x9c, 0xa5, 0x38, 0xfe, 0x4b, 0xd2, 0xcd, 0x91, 0xd5,
+ 0xc1, 0x37, 0x83, 0x60, 0xa2, 0x72, 0x69, 0x25, 0x6a, 0xcd, 0x67, 0x8c, 0x2c, 0x1c, 0x61, 0xe0,
+ 0x42, 0x50, 0x8c, 0x3c, 0x00, 0x92, 0xe9, 0xe0, 0x17, 0xb6, 0x6d, 0xf2, 0xd7, 0x45, 0xeb, 0xf9,
+ 0xcc, 0x95, 0x15, 0x7c, 0xc5, 0x4a, 0x16, 0x54, 0xee, 0xa8, 0x97, 0x82, 0xb1, 0x70, 0xe5, 0x9e,
+ 0x2a, 0x8e, 0xf1, 0xf0, 0x45, 0xc1, 0x58, 0x2c, 0x12, 0xae, 0x47, 0x19, 0x14, 0x95, 0xef, 0x49,
+ 0xd1, 0xa6, 0x6a, 0x07, 0x64, 0xfb, 0x53, 0x60, 0x31, 0x00, 0x42, 0x2c, 0xbc, 0x59, 0xdc, 0x27,
+ 0x34, 0x27, 0x76, 0xc1, 0x39, 0xd9, 0x1e, 0x5f, 0xbe, 0xf6, 0x57, 0x34, 0x1e, 0xfe, 0x31, 0xaa,
+ 0xe7, 0xf7, 0xec, 0x28, 0x02, 0x05, 0x96, 0x4a, 0xff, 0x6a, 0x7b, 0x41, 0x45, 0xe5, 0x5a, 0x6a,
+ 0x7e, 0xff, 0x12, 0x00, 0x00, 0xff, 0xff, 0xf9, 0xec, 0xe7, 0xee, 0x52, 0xb1, 0x00, 0x00,
}
// Reference imports to suppress errors if they are not otherwise used.
@@ -6878,6 +6949,7 @@ type HelmManagerClient interface {
GetReleaseHistory(ctx context.Context, in *GetReleaseHistoryReq, opts ...grpc.CallOption) (*GetReleaseHistoryResp, error)
GetReleaseManifest(ctx context.Context, in *GetReleaseManifestReq, opts ...grpc.CallOption) (*GetReleaseManifestResp, error)
GetReleaseStatus(ctx context.Context, in *GetReleaseStatusReq, opts ...grpc.CallOption) (*CommonListResp, error)
+ GetReleaseDetailExtend(ctx context.Context, in *GetReleaseDetailExtendReq, opts ...grpc.CallOption) (*CommonResp, error)
GetReleasePods(ctx context.Context, in *GetReleasePodsReq, opts ...grpc.CallOption) (*CommonListResp, error)
ImportClusterRelease(ctx context.Context, in *ImportClusterReleaseReq, opts ...grpc.CallOption) (*ImportClusterReleaseResp, error)
}
@@ -7115,6 +7187,15 @@ func (c *helmManagerClient) GetReleaseStatus(ctx context.Context, in *GetRelease
return out, nil
}
+func (c *helmManagerClient) GetReleaseDetailExtend(ctx context.Context, in *GetReleaseDetailExtendReq, opts ...grpc.CallOption) (*CommonResp, error) {
+ out := new(CommonResp)
+ err := c.cc.Invoke(ctx, "/helmmanager.HelmManager/GetReleaseDetailExtend", in, out, opts...)
+ if err != nil {
+ return nil, err
+ }
+ return out, nil
+}
+
func (c *helmManagerClient) GetReleasePods(ctx context.Context, in *GetReleasePodsReq, opts ...grpc.CallOption) (*CommonListResp, error) {
out := new(CommonListResp)
err := c.cc.Invoke(ctx, "/helmmanager.HelmManager/GetReleasePods", in, out, opts...)
@@ -7164,6 +7245,7 @@ type HelmManagerServer interface {
GetReleaseHistory(context.Context, *GetReleaseHistoryReq) (*GetReleaseHistoryResp, error)
GetReleaseManifest(context.Context, *GetReleaseManifestReq) (*GetReleaseManifestResp, error)
GetReleaseStatus(context.Context, *GetReleaseStatusReq) (*CommonListResp, error)
+ GetReleaseDetailExtend(context.Context, *GetReleaseDetailExtendReq) (*CommonResp, error)
GetReleasePods(context.Context, *GetReleasePodsReq) (*CommonListResp, error)
ImportClusterRelease(context.Context, *ImportClusterReleaseReq) (*ImportClusterReleaseResp, error)
}
@@ -7247,6 +7329,9 @@ func (*UnimplementedHelmManagerServer) GetReleaseManifest(ctx context.Context, r
func (*UnimplementedHelmManagerServer) GetReleaseStatus(ctx context.Context, req *GetReleaseStatusReq) (*CommonListResp, error) {
return nil, status.Errorf(codes.Unimplemented, "method GetReleaseStatus not implemented")
}
+func (*UnimplementedHelmManagerServer) GetReleaseDetailExtend(ctx context.Context, req *GetReleaseDetailExtendReq) (*CommonResp, error) {
+ return nil, status.Errorf(codes.Unimplemented, "method GetReleaseDetailExtend not implemented")
+}
func (*UnimplementedHelmManagerServer) GetReleasePods(ctx context.Context, req *GetReleasePodsReq) (*CommonListResp, error) {
return nil, status.Errorf(codes.Unimplemented, "method GetReleasePods not implemented")
}
@@ -7708,6 +7793,24 @@ func _HelmManager_GetReleaseStatus_Handler(srv interface{}, ctx context.Context,
return interceptor(ctx, in, info, handler)
}
+func _HelmManager_GetReleaseDetailExtend_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+ in := new(GetReleaseDetailExtendReq)
+ if err := dec(in); err != nil {
+ return nil, err
+ }
+ if interceptor == nil {
+ return srv.(HelmManagerServer).GetReleaseDetailExtend(ctx, in)
+ }
+ info := &grpc.UnaryServerInfo{
+ Server: srv,
+ FullMethod: "/helmmanager.HelmManager/GetReleaseDetailExtend",
+ }
+ handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+ return srv.(HelmManagerServer).GetReleaseDetailExtend(ctx, req.(*GetReleaseDetailExtendReq))
+ }
+ return interceptor(ctx, in, info, handler)
+}
+
func _HelmManager_GetReleasePods_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
in := new(GetReleasePodsReq)
if err := dec(in); err != nil {
@@ -7848,6 +7951,10 @@ var _HelmManager_serviceDesc = grpc.ServiceDesc{
MethodName: "GetReleaseStatus",
Handler: _HelmManager_GetReleaseStatus_Handler,
},
+ {
+ MethodName: "GetReleaseDetailExtend",
+ Handler: _HelmManager_GetReleaseDetailExtend_Handler,
+ },
{
MethodName: "GetReleasePods",
Handler: _HelmManager_GetReleasePods_Handler,
diff --git a/bcs-services/bcs-helm-manager/proto/bcs-helm-manager/bcs-helm-manager.pb.gw.go b/bcs-services/bcs-helm-manager/proto/bcs-helm-manager/bcs-helm-manager.pb.gw.go
index 6c3bd5d8ba..2a9cb96a52 100644
--- a/bcs-services/bcs-helm-manager/proto/bcs-helm-manager/bcs-helm-manager.pb.gw.go
+++ b/bcs-services/bcs-helm-manager/proto/bcs-helm-manager/bcs-helm-manager.pb.gw.go
@@ -2677,6 +2677,126 @@ func local_request_HelmManager_GetReleaseStatus_0(ctx context.Context, marshaler
}
+func request_HelmManager_GetReleaseDetailExtend_0(ctx context.Context, marshaler runtime.Marshaler, client HelmManagerClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {
+ var protoReq GetReleaseDetailExtendReq
+ var metadata runtime.ServerMetadata
+
+ var (
+ val string
+ ok bool
+ err error
+ _ = err
+ )
+
+ val, ok = pathParams["projectCode"]
+ if !ok {
+ return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "projectCode")
+ }
+
+ protoReq.ProjectCode, err = runtime.StringP(val)
+
+ if err != nil {
+ return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "projectCode", err)
+ }
+
+ val, ok = pathParams["clusterID"]
+ if !ok {
+ return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "clusterID")
+ }
+
+ protoReq.ClusterID, err = runtime.StringP(val)
+
+ if err != nil {
+ return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "clusterID", err)
+ }
+
+ val, ok = pathParams["namespace"]
+ if !ok {
+ return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "namespace")
+ }
+
+ protoReq.Namespace, err = runtime.StringP(val)
+
+ if err != nil {
+ return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "namespace", err)
+ }
+
+ val, ok = pathParams["name"]
+ if !ok {
+ return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "name")
+ }
+
+ protoReq.Name, err = runtime.StringP(val)
+
+ if err != nil {
+ return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "name", err)
+ }
+
+ msg, err := client.GetReleaseDetailExtend(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD))
+ return msg, metadata, err
+
+}
+
+func local_request_HelmManager_GetReleaseDetailExtend_0(ctx context.Context, marshaler runtime.Marshaler, server HelmManagerServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {
+ var protoReq GetReleaseDetailExtendReq
+ var metadata runtime.ServerMetadata
+
+ var (
+ val string
+ ok bool
+ err error
+ _ = err
+ )
+
+ val, ok = pathParams["projectCode"]
+ if !ok {
+ return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "projectCode")
+ }
+
+ protoReq.ProjectCode, err = runtime.StringP(val)
+
+ if err != nil {
+ return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "projectCode", err)
+ }
+
+ val, ok = pathParams["clusterID"]
+ if !ok {
+ return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "clusterID")
+ }
+
+ protoReq.ClusterID, err = runtime.StringP(val)
+
+ if err != nil {
+ return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "clusterID", err)
+ }
+
+ val, ok = pathParams["namespace"]
+ if !ok {
+ return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "namespace")
+ }
+
+ protoReq.Namespace, err = runtime.StringP(val)
+
+ if err != nil {
+ return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "namespace", err)
+ }
+
+ val, ok = pathParams["name"]
+ if !ok {
+ return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "name")
+ }
+
+ protoReq.Name, err = runtime.StringP(val)
+
+ if err != nil {
+ return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "name", err)
+ }
+
+ msg, err := server.GetReleaseDetailExtend(ctx, &protoReq)
+ return msg, metadata, err
+
+}
+
var (
filter_HelmManager_GetReleasePods_0 = &utilities.DoubleArray{Encoding: map[string]int{"projectCode": 0, "clusterID": 1, "namespace": 2, "name": 3}, Base: []int{1, 1, 2, 3, 4, 0, 0, 0, 0}, Check: []int{0, 1, 1, 1, 1, 2, 3, 4, 5}}
)
@@ -4064,6 +4184,26 @@ func RegisterHelmManagerGwServer(ctx context.Context, mux *runtime.ServeMux, ser
})
+ mux.Handle("GET", pattern_HelmManager_GetReleaseDetailExtend_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {
+ ctx, cancel := context.WithCancel(req.Context())
+ defer cancel()
+ inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)
+ rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req)
+ if err != nil {
+ runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
+ return
+ }
+ resp, md, err := local_request_HelmManager_GetReleaseDetailExtend_0(rctx, inboundMarshaler, server, req, pathParams)
+ ctx = runtime.NewServerMetadataContext(ctx, md)
+ if err != nil {
+ runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
+ return
+ }
+
+ forward_HelmManager_GetReleaseDetailExtend_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)
+
+ })
+
mux.Handle("GET", pattern_HelmManager_GetReleasePods_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {
ctx, cancel := context.WithCancel(req.Context())
defer cancel()
@@ -4773,6 +4913,26 @@ func RegisterHelmManagerGwClient(ctx context.Context, mux *runtime.ServeMux, cli
})
+ mux.Handle("GET", pattern_HelmManager_GetReleaseDetailExtend_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {
+ ctx, cancel := context.WithCancel(req.Context())
+ defer cancel()
+ inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)
+ rctx, err := runtime.AnnotateContext(ctx, mux, req)
+ if err != nil {
+ runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
+ return
+ }
+ resp, md, err := request_HelmManager_GetReleaseDetailExtend_0(rctx, inboundMarshaler, client, req, pathParams)
+ ctx = runtime.NewServerMetadataContext(ctx, md)
+ if err != nil {
+ runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
+ return
+ }
+
+ forward_HelmManager_GetReleaseDetailExtend_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)
+
+ })
+
mux.Handle("GET", pattern_HelmManager_GetReleasePods_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {
ctx, cancel := context.WithCancel(req.Context())
defer cancel()
@@ -4867,6 +5027,8 @@ var (
pattern_HelmManager_GetReleaseStatus_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 1, 0, 4, 1, 5, 3, 2, 4, 1, 0, 4, 1, 5, 5, 2, 6, 1, 0, 4, 1, 5, 7, 2, 8, 1, 0, 4, 1, 5, 9, 2, 10}, []string{"helmmanager", "v1", "projects", "projectCode", "clusters", "clusterID", "namespaces", "namespace", "releases", "name", "status"}, "", runtime.AssumeColonVerbOpt(true)))
+ pattern_HelmManager_GetReleaseDetailExtend_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 1, 0, 4, 1, 5, 3, 2, 4, 1, 0, 4, 1, 5, 5, 2, 6, 1, 0, 4, 1, 5, 7, 2, 8, 1, 0, 4, 1, 5, 9, 2, 10}, []string{"helmmanager", "v1", "projects", "projectCode", "clusters", "clusterID", "namespaces", "namespace", "releases", "name", "expend"}, "", runtime.AssumeColonVerbOpt(true)))
+
pattern_HelmManager_GetReleasePods_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 1, 0, 4, 1, 5, 3, 2, 4, 1, 0, 4, 1, 5, 5, 2, 6, 1, 0, 4, 1, 5, 7, 2, 8, 1, 0, 4, 1, 5, 9, 2, 10}, []string{"helmmanager", "v1", "projects", "projectCode", "clusters", "clusterID", "namespaces", "namespace", "releases", "name", "pods"}, "", runtime.AssumeColonVerbOpt(true)))
pattern_HelmManager_ImportClusterRelease_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 1, 0, 4, 1, 5, 3, 2, 4, 1, 0, 4, 1, 5, 5, 2, 6, 1, 0, 4, 1, 5, 7, 2, 8, 1, 0, 4, 1, 5, 9, 2, 10}, []string{"helmmanager", "v1", "projects", "projectCode", "clusters", "clusterID", "namespaces", "namespace", "releases", "name", "import"}, "", runtime.AssumeColonVerbOpt(true)))
@@ -4923,6 +5085,8 @@ var (
forward_HelmManager_GetReleaseStatus_0 = runtime.ForwardResponseMessage
+ forward_HelmManager_GetReleaseDetailExtend_0 = runtime.ForwardResponseMessage
+
forward_HelmManager_GetReleasePods_0 = runtime.ForwardResponseMessage
forward_HelmManager_ImportClusterRelease_0 = runtime.ForwardResponseMessage
diff --git a/bcs-services/bcs-helm-manager/proto/bcs-helm-manager/bcs-helm-manager.pb.micro.go b/bcs-services/bcs-helm-manager/proto/bcs-helm-manager/bcs-helm-manager.pb.micro.go
index c6b715d355..ddbde43cd9 100644
--- a/bcs-services/bcs-helm-manager/proto/bcs-helm-manager/bcs-helm-manager.pb.micro.go
+++ b/bcs-services/bcs-helm-manager/proto/bcs-helm-manager/bcs-helm-manager.pb.micro.go
@@ -204,6 +204,12 @@ func NewHelmManagerEndpoints() []*api.Endpoint {
Method: []string{"GET"},
Handler: "rpc",
},
+ &api.Endpoint{
+ Name: "HelmManager.GetReleaseDetailExtend",
+ Path: []string{"/helmmanager/v1/projects/{projectCode}/clusters/{clusterID}/namespaces/{namespace}/releases/{name}/expend"},
+ Method: []string{"GET"},
+ Handler: "rpc",
+ },
&api.Endpoint{
Name: "HelmManager.GetReleasePods",
Path: []string{"/helmmanager/v1/projects/{projectCode}/clusters/{clusterID}/namespaces/{namespace}/releases/{name}/pods"},
@@ -252,6 +258,7 @@ type HelmManagerService interface {
GetReleaseHistory(ctx context.Context, in *GetReleaseHistoryReq, opts ...client.CallOption) (*GetReleaseHistoryResp, error)
GetReleaseManifest(ctx context.Context, in *GetReleaseManifestReq, opts ...client.CallOption) (*GetReleaseManifestResp, error)
GetReleaseStatus(ctx context.Context, in *GetReleaseStatusReq, opts ...client.CallOption) (*CommonListResp, error)
+ GetReleaseDetailExtend(ctx context.Context, in *GetReleaseDetailExtendReq, opts ...client.CallOption) (*CommonResp, error)
GetReleasePods(ctx context.Context, in *GetReleasePodsReq, opts ...client.CallOption) (*CommonListResp, error)
ImportClusterRelease(ctx context.Context, in *ImportClusterReleaseReq, opts ...client.CallOption) (*ImportClusterReleaseResp, error)
}
@@ -518,6 +525,16 @@ func (c *helmManagerService) GetReleaseStatus(ctx context.Context, in *GetReleas
return out, nil
}
+func (c *helmManagerService) GetReleaseDetailExtend(ctx context.Context, in *GetReleaseDetailExtendReq, opts ...client.CallOption) (*CommonResp, error) {
+ req := c.c.NewRequest(c.name, "HelmManager.GetReleaseDetailExtend", in)
+ out := new(CommonResp)
+ err := c.c.Call(ctx, req, out, opts...)
+ if err != nil {
+ return nil, err
+ }
+ return out, nil
+}
+
func (c *helmManagerService) GetReleasePods(ctx context.Context, in *GetReleasePodsReq, opts ...client.CallOption) (*CommonListResp, error) {
req := c.c.NewRequest(c.name, "HelmManager.GetReleasePods", in)
out := new(CommonListResp)
@@ -570,6 +587,7 @@ type HelmManagerHandler interface {
GetReleaseHistory(context.Context, *GetReleaseHistoryReq, *GetReleaseHistoryResp) error
GetReleaseManifest(context.Context, *GetReleaseManifestReq, *GetReleaseManifestResp) error
GetReleaseStatus(context.Context, *GetReleaseStatusReq, *CommonListResp) error
+ GetReleaseDetailExtend(context.Context, *GetReleaseDetailExtendReq, *CommonResp) error
GetReleasePods(context.Context, *GetReleasePodsReq, *CommonListResp) error
ImportClusterRelease(context.Context, *ImportClusterReleaseReq, *ImportClusterReleaseResp) error
}
@@ -601,6 +619,7 @@ func RegisterHelmManagerHandler(s server.Server, hdlr HelmManagerHandler, opts .
GetReleaseHistory(ctx context.Context, in *GetReleaseHistoryReq, out *GetReleaseHistoryResp) error
GetReleaseManifest(ctx context.Context, in *GetReleaseManifestReq, out *GetReleaseManifestResp) error
GetReleaseStatus(ctx context.Context, in *GetReleaseStatusReq, out *CommonListResp) error
+ GetReleaseDetailExtend(ctx context.Context, in *GetReleaseDetailExtendReq, out *CommonResp) error
GetReleasePods(ctx context.Context, in *GetReleasePodsReq, out *CommonListResp) error
ImportClusterRelease(ctx context.Context, in *ImportClusterReleaseReq, out *ImportClusterReleaseResp) error
}
@@ -770,6 +789,12 @@ func RegisterHelmManagerHandler(s server.Server, hdlr HelmManagerHandler, opts .
Method: []string{"GET"},
Handler: "rpc",
}))
+ opts = append(opts, api.WithEndpoint(&api.Endpoint{
+ Name: "HelmManager.GetReleaseDetailExtend",
+ Path: []string{"/helmmanager/v1/projects/{projectCode}/clusters/{clusterID}/namespaces/{namespace}/releases/{name}/expend"},
+ Method: []string{"GET"},
+ Handler: "rpc",
+ }))
opts = append(opts, api.WithEndpoint(&api.Endpoint{
Name: "HelmManager.GetReleasePods",
Path: []string{"/helmmanager/v1/projects/{projectCode}/clusters/{clusterID}/namespaces/{namespace}/releases/{name}/pods"},
@@ -890,6 +915,10 @@ func (h *helmManagerHandler) GetReleaseStatus(ctx context.Context, in *GetReleas
return h.HelmManagerHandler.GetReleaseStatus(ctx, in, out)
}
+func (h *helmManagerHandler) GetReleaseDetailExtend(ctx context.Context, in *GetReleaseDetailExtendReq, out *CommonResp) error {
+ return h.HelmManagerHandler.GetReleaseDetailExtend(ctx, in, out)
+}
+
func (h *helmManagerHandler) GetReleasePods(ctx context.Context, in *GetReleasePodsReq, out *CommonListResp) error {
return h.HelmManagerHandler.GetReleasePods(ctx, in, out)
}
diff --git a/bcs-services/bcs-helm-manager/proto/bcs-helm-manager/bcs-helm-manager.pb.validate.go b/bcs-services/bcs-helm-manager/proto/bcs-helm-manager/bcs-helm-manager.pb.validate.go
index 6455a18a70..22adee8ada 100644
--- a/bcs-services/bcs-helm-manager/proto/bcs-helm-manager/bcs-helm-manager.pb.validate.go
+++ b/bcs-services/bcs-helm-manager/proto/bcs-helm-manager/bcs-helm-manager.pb.validate.go
@@ -9782,6 +9782,152 @@ var _ interface {
ErrorName() string
} = GetReleaseStatusReqValidationError{}
+// Validate checks the field values on GetReleaseDetailExtendReq with the rules
+// defined in the proto definition for this message. If any rules are
+// violated, the first error encountered is returned, or nil if there are no violations.
+func (m *GetReleaseDetailExtendReq) Validate() error {
+ return m.validate(false)
+}
+
+// ValidateAll checks the field values on GetReleaseDetailExtendReq with the
+// rules defined in the proto definition for this message. If any rules are
+// violated, the result is a list of violation errors wrapped in
+// GetReleaseDetailExtendReqMultiError, or nil if none found.
+func (m *GetReleaseDetailExtendReq) ValidateAll() error {
+ return m.validate(true)
+}
+
+func (m *GetReleaseDetailExtendReq) validate(all bool) error {
+ if m == nil {
+ return nil
+ }
+
+ var errors []error
+
+ if utf8.RuneCountInString(m.GetName()) < 1 {
+ err := GetReleaseDetailExtendReqValidationError{
+ field: "Name",
+ reason: "value length must be at least 1 runes",
+ }
+ if !all {
+ return err
+ }
+ errors = append(errors, err)
+ }
+
+ if l := utf8.RuneCountInString(m.GetNamespace()); l < 1 || l > 64 {
+ err := GetReleaseDetailExtendReqValidationError{
+ field: "Namespace",
+ reason: "value length must be between 1 and 64 runes, inclusive",
+ }
+ if !all {
+ return err
+ }
+ errors = append(errors, err)
+ }
+
+ if l := utf8.RuneCountInString(m.GetClusterID()); l < 1 || l > 64 {
+ err := GetReleaseDetailExtendReqValidationError{
+ field: "ClusterID",
+ reason: "value length must be between 1 and 64 runes, inclusive",
+ }
+ if !all {
+ return err
+ }
+ errors = append(errors, err)
+ }
+
+ if l := utf8.RuneCountInString(m.GetProjectCode()); l < 1 || l > 32 {
+ err := GetReleaseDetailExtendReqValidationError{
+ field: "ProjectCode",
+ reason: "value length must be between 1 and 32 runes, inclusive",
+ }
+ if !all {
+ return err
+ }
+ errors = append(errors, err)
+ }
+
+ if len(errors) > 0 {
+ return GetReleaseDetailExtendReqMultiError(errors)
+ }
+
+ return nil
+}
+
+// GetReleaseDetailExtendReqMultiError is an error wrapping multiple validation
+// errors returned by GetReleaseDetailExtendReq.ValidateAll() if the
+// designated constraints aren't met.
+type GetReleaseDetailExtendReqMultiError []error
+
+// Error returns a concatenation of all the error messages it wraps.
+func (m GetReleaseDetailExtendReqMultiError) Error() string {
+ var msgs []string
+ for _, err := range m {
+ msgs = append(msgs, err.Error())
+ }
+ return strings.Join(msgs, "; ")
+}
+
+// AllErrors returns a list of validation violation errors.
+func (m GetReleaseDetailExtendReqMultiError) AllErrors() []error { return m }
+
+// GetReleaseDetailExtendReqValidationError is the validation error returned by
+// GetReleaseDetailExtendReq.Validate if the designated constraints aren't met.
+type GetReleaseDetailExtendReqValidationError struct {
+ field string
+ reason string
+ cause error
+ key bool
+}
+
+// Field function returns field value.
+func (e GetReleaseDetailExtendReqValidationError) Field() string { return e.field }
+
+// Reason function returns reason value.
+func (e GetReleaseDetailExtendReqValidationError) Reason() string { return e.reason }
+
+// Cause function returns cause value.
+func (e GetReleaseDetailExtendReqValidationError) Cause() error { return e.cause }
+
+// Key function returns key value.
+func (e GetReleaseDetailExtendReqValidationError) Key() bool { return e.key }
+
+// ErrorName returns error name.
+func (e GetReleaseDetailExtendReqValidationError) ErrorName() string {
+ return "GetReleaseDetailExtendReqValidationError"
+}
+
+// Error satisfies the builtin error interface
+func (e GetReleaseDetailExtendReqValidationError) Error() string {
+ cause := ""
+ if e.cause != nil {
+ cause = fmt.Sprintf(" | caused by: %v", e.cause)
+ }
+
+ key := ""
+ if e.key {
+ key = "key for "
+ }
+
+ return fmt.Sprintf(
+ "invalid %sGetReleaseDetailExtendReq.%s: %s%s",
+ key,
+ e.field,
+ e.reason,
+ cause)
+}
+
+var _ error = GetReleaseDetailExtendReqValidationError{}
+
+var _ interface {
+ Field() string
+ Reason() string
+ Key() bool
+ Cause() error
+ ErrorName() string
+} = GetReleaseDetailExtendReqValidationError{}
+
// Validate checks the field values on GetReleasePodsReq with the rules defined
// in the proto definition for this message. If any rules are violated, the
// first error encountered is returned, or nil if there are no violations.
diff --git a/bcs-services/bcs-helm-manager/proto/bcs-helm-manager/bcs-helm-manager.proto b/bcs-services/bcs-helm-manager/proto/bcs-helm-manager/bcs-helm-manager.proto
index 6df229b709..38dc7198a1 100644
--- a/bcs-services/bcs-helm-manager/proto/bcs-helm-manager/bcs-helm-manager.proto
+++ b/bcs-services/bcs-helm-manager/proto/bcs-helm-manager/bcs-helm-manager.proto
@@ -278,6 +278,15 @@ service HelmManager {
summary: "获取 release 资源的状态"
};
}
+ rpc GetReleaseDetailExtend(GetReleaseDetailExtendReq) returns (CommonResp) {
+ option (google.api.http) = {
+ get: "/helmmanager/v1/projects/{projectCode}/clusters/{clusterID}/namespaces/{namespace}/releases/{name}/expend"
+ };
+ option (grpc.gateway.protoc_gen_swagger.options.openapiv2_operation) = {
+ description: "Helm Release 详情扩展(ingress/service/secret)"
+ summary: "Helm Release 详情扩展(ingress/service/secret)"
+ };
+ }
rpc GetReleasePods(GetReleasePodsReq) returns (CommonListResp) {
option (google.api.http) = {
get: "/helmmanager/v1/projects/{projectCode}/clusters/{clusterID}/namespaces/{namespace}/releases/{name}/pods"
@@ -2513,6 +2522,32 @@ message GetReleaseStatusReq {
}, (validate.rules).string = {min_len : 1 , max_len : 32}];
}
+message GetReleaseDetailExtendReq {
+ option (grpc.gateway.protoc_gen_swagger.options.openapiv2_schema) = {
+ json_schema : {
+ title : "GetReleaseDetailExtendReq"
+ description : "获取 release 详情扩展的参数"
+ }
+ };
+
+ required string name = 1[(grpc.gateway.protoc_gen_swagger.options.openapiv2_field) = {
+ title: "name",
+ description: "chart release名称"
+ }, (validate.rules).string = {min_len : 1}];
+ required string namespace = 2[(grpc.gateway.protoc_gen_swagger.options.openapiv2_field) = {
+ title: "namespace",
+ description: "所在的namespace"
+ }, (validate.rules).string = {min_len : 1, max_len : 64}];
+ required string clusterID = 3[(grpc.gateway.protoc_gen_swagger.options.openapiv2_field) = {
+ title: "clusterID",
+ description: "所在的集群ID"
+ }, (validate.rules).string = {min_len : 1, max_len : 64}];
+ required string projectCode = 4[(grpc.gateway.protoc_gen_swagger.options.openapiv2_field) = {
+ title: "projectCode",
+ description: "项目代码"
+ }, (validate.rules).string = {min_len : 1, max_len : 32}];
+}
+
message GetReleasePodsReq {
option (grpc.gateway.protoc_gen_swagger.options.openapiv2_schema) = {
json_schema : {
diff --git a/bcs-services/bcs-helm-manager/proto/bcs-helm-manager/bcs-helm-manager.swagger.json b/bcs-services/bcs-helm-manager/proto/bcs-helm-manager/bcs-helm-manager.swagger.json
index 084ba64a5e..5bd06c9926 100644
--- a/bcs-services/bcs-helm-manager/proto/bcs-helm-manager/bcs-helm-manager.swagger.json
+++ b/bcs-services/bcs-helm-manager/proto/bcs-helm-manager/bcs-helm-manager.swagger.json
@@ -567,6 +567,60 @@
]
}
},
+ "/helmmanager/v1/projects/{projectCode}/clusters/{clusterID}/namespaces/{namespace}/releases/{name}/expend": {
+ "get": {
+ "summary": "Helm Release 详情扩展(ingress/service/secret)",
+ "description": "Helm Release 详情扩展(ingress/service/secret)",
+ "operationId": "HelmManager_GetReleaseDetailExtend",
+ "responses": {
+ "200": {
+ "description": "A successful response.",
+ "schema": {
+ "$ref": "#/definitions/helmmanagerCommonResp"
+ }
+ },
+ "default": {
+ "description": "An unexpected error response",
+ "schema": {
+ "$ref": "#/definitions/runtimeError"
+ }
+ }
+ },
+ "parameters": [
+ {
+ "name": "projectCode",
+ "description": "项目代码",
+ "in": "path",
+ "required": true,
+ "type": "string"
+ },
+ {
+ "name": "clusterID",
+ "description": "所在的集群ID",
+ "in": "path",
+ "required": true,
+ "type": "string"
+ },
+ {
+ "name": "namespace",
+ "description": "所在的namespace",
+ "in": "path",
+ "required": true,
+ "type": "string"
+ },
+ {
+ "name": "name",
+ "description": "chart release名称",
+ "in": "path",
+ "required": true,
+ "type": "string"
+ }
+ ],
+ "tags": [
+ "HelmManager"
+ ]
+ }
+ },
"/helmmanager/v1/projects/{projectCode}/clusters/{clusterID}/namespaces/{namespace}/releases/{name}/history": {
"get": {
"summary": "查询指定集群的chart release历史信息",
@@ -1759,10 +1813,10 @@
"items": {
"$ref": "#/definitions/protobufAny"
},
- "description": "Application specific response metadata. Must be set in the first response\nfor streaming APIs."
+ "description": "Application specific response metadata. Must be set in the first response\r\nfor streaming APIs."
}
},
- "description": "Message that represents an arbitrary HTTP body. It should only be used for\npayload formats that can't be represented as JSON, such as raw binary or\nan HTML page.\n\n\nThis message can be used both in streaming and non-streaming API methods in\nthe request as well as the response.\n\nIt can be used as a top-level request field, which is convenient if one\nwants to extract parameters from either the URL or HTTP template into the\nrequest fields and also want access to the raw HTTP body.\n\nExample:\n\n message GetResourceRequest {\n // A unique request id.\n string request_id = 1;\n\n // The raw HTTP body is bound to this field.\n google.api.HttpBody http_body = 2;\n\n }\n\n service ResourceService {\n rpc GetResource(GetResourceRequest)\n returns (google.api.HttpBody);\n rpc UpdateResource(google.api.HttpBody)\n returns (google.protobuf.Empty);\n\n }\n\nExample with streaming methods:\n\n service CaldavService {\n rpc GetCalendar(stream google.api.HttpBody)\n returns (stream google.api.HttpBody);\n rpc UpdateCalendar(stream google.api.HttpBody)\n returns (stream google.api.HttpBody);\n\n }\n\nUse of this type only changes how the request and response bodies are\nhandled, all other features will continue to work unchanged."
+ "description": "Message that represents an arbitrary HTTP body. It should only be used for\r\npayload formats that can't be represented as JSON, such as raw binary or\r\nan HTML page.\r\n\r\n\r\nThis message can be used both in streaming and non-streaming API methods in\r\nthe request as well as the response.\r\n\r\nIt can be used as a top-level request field, which is convenient if one\r\nwants to extract parameters from either the URL or HTTP template into the\r\nrequest fields and also want access to the raw HTTP body.\r\n\r\nExample:\r\n\r\n message GetResourceRequest {\r\n // A unique request id.\r\n string request_id = 1;\r\n\r\n // The raw HTTP body is bound to this field.\r\n google.api.HttpBody http_body = 2;\r\n\r\n }\r\n\r\n service ResourceService {\r\n rpc GetResource(GetResourceRequest)\r\n returns (google.api.HttpBody);\r\n rpc UpdateResource(google.api.HttpBody)\r\n returns (google.protobuf.Empty);\r\n\r\n }\r\n\r\nExample with streaming methods:\r\n\r\n service CaldavService {\r\n rpc GetCalendar(stream google.api.HttpBody)\r\n returns (stream google.api.HttpBody);\r\n rpc UpdateCalendar(stream google.api.HttpBody)\r\n returns (stream google.api.HttpBody);\r\n\r\n }\r\n\r\nUse of this type only changes how the request and response bodies are\r\nhandled, all other features will continue to work unchanged."
},
"helmmanagerAddons": {
"type": "object",
@@ -2136,6 +2190,45 @@
"description": "通用列表返回",
"title": "CommonListResp"
},
+ "helmmanagerCommonResp": {
+ "type": "object",
+ "properties": {
+ "code": {
+ "type": "integer",
+ "format": "int64",
+ "description": "返回错误码",
+ "title": "code"
+ },
+ "message": {
+ "type": "string",
+ "description": "返回错误信息",
+ "title": "message"
+ },
+ "result": {
+ "type": "boolean",
+ "format": "boolean",
+ "description": "返回结果",
+ "title": "result"
+ },
+ "data": {
+ "type": "object",
+ "description": "返回数据",
+ "title": "data"
+ },
+ "requestID": {
+ "type": "string",
+ "description": "requestID",
+ "title": "requestID"
+ },
+ "web_annotations": {
+ "$ref": "#/definitions/helmmanagerWebAnnotations",
+ "description": "权限信息",
+ "title": "web_annotations"
+ }
+ },
+ "description": "通用返回",
+ "title": "CommonResp"
+ },
"helmmanagerCreatePersonalRepoReq": {
"type": "object",
"properties": {
@@ -4204,7 +4297,7 @@
"properties": {
"type_url": {
"type": "string",
- "description": "A URL/resource name that uniquely identifies the type of the serialized\nprotocol buffer message. This string must contain at least\none \"/\" character. The last segment of the URL's path must represent\nthe fully qualified name of the type (as in\n`path/google.protobuf.Duration`). The name should be in a canonical form\n(e.g., leading \".\" is not accepted).\n\nIn practice, teams usually precompile into the binary all types that they\nexpect it to use in the context of Any. However, for URLs which use the\nscheme `http`, `https`, or no scheme, one can optionally set up a type\nserver that maps type URLs to message definitions as follows:\n\n* If no scheme is provided, `https` is assumed.\n* An HTTP GET on the URL must yield a [google.protobuf.Type][]\n value in binary format, or produce an error.\n* Applications are allowed to cache lookup results based on the\n URL, or have them precompiled into a binary to avoid any\n lookup. Therefore, binary compatibility needs to be preserved\n on changes to types. (Use versioned type names to manage\n breaking changes.)\n\nNote: this functionality is not currently available in the official\nprotobuf release, and it is not used for type URLs beginning with\ntype.googleapis.com.\n\nSchemes other than `http`, `https` (or the empty scheme) might be\nused with implementation specific semantics."
+ "description": "A URL/resource name that uniquely identifies the type of the serialized\r\nprotocol buffer message. This string must contain at least\r\none \"/\" character. The last segment of the URL's path must represent\r\nthe fully qualified name of the type (as in\r\n`path/google.protobuf.Duration`). The name should be in a canonical form\r\n(e.g., leading \".\" is not accepted).\r\n\r\nIn practice, teams usually precompile into the binary all types that they\r\nexpect it to use in the context of Any. However, for URLs which use the\r\nscheme `http`, `https`, or no scheme, one can optionally set up a type\r\nserver that maps type URLs to message definitions as follows:\r\n\r\n* If no scheme is provided, `https` is assumed.\r\n* An HTTP GET on the URL must yield a [google.protobuf.Type][]\r\n value in binary format, or produce an error.\r\n* Applications are allowed to cache lookup results based on the\r\n URL, or have them precompiled into a binary to avoid any\r\n lookup. Therefore, binary compatibility needs to be preserved\r\n on changes to types. (Use versioned type names to manage\r\n breaking changes.)\r\n\r\nNote: this functionality is not currently available in the official\r\nprotobuf release, and it is not used for type URLs beginning with\r\ntype.googleapis.com.\r\n\r\nSchemes other than `http`, `https` (or the empty scheme) might be\r\nused with implementation specific semantics."
},
"value": {
"type": "string",
@@ -4212,7 +4305,7 @@
"description": "Must be a valid serialized protocol buffer of the above specified type."
}
},
- "description": "`Any` contains an arbitrary serialized protocol buffer message along with a\nURL that describes the type of the serialized message.\n\nProtobuf library provides support to pack/unpack Any values in the form\nof utility functions or additional generated methods of the Any type.\n\nExample 1: Pack and unpack a message in C++.\n\n Foo foo = ...;\n Any any;\n any.PackFrom(foo);\n ...\n if (any.UnpackTo(\u0026foo)) {\n ...\n }\n\nExample 2: Pack and unpack a message in Java.\n\n Foo foo = ...;\n Any any = Any.pack(foo);\n ...\n if (any.is(Foo.class)) {\n foo = any.unpack(Foo.class);\n }\n\n Example 3: Pack and unpack a message in Python.\n\n foo = Foo(...)\n any = Any()\n any.Pack(foo)\n ...\n if any.Is(Foo.DESCRIPTOR):\n any.Unpack(foo)\n ...\n\n Example 4: Pack and unpack a message in Go\n\n foo := \u0026pb.Foo{...}\n any, err := ptypes.MarshalAny(foo)\n ...\n foo := \u0026pb.Foo{}\n if err := ptypes.UnmarshalAny(any, foo); err != nil {\n ...\n }\n\nThe pack methods provided by protobuf library will by default use\n'type.googleapis.com/full.type.name' as the type URL and the unpack\nmethods only use the fully qualified type name after the last '/'\nin the type URL, for example \"foo.bar.com/x/y.z\" will yield type\nname \"y.z\".\n\n\nJSON\n====\nThe JSON representation of an `Any` value uses the regular\nrepresentation of the deserialized, embedded message, with an\nadditional field `@type` which contains the type URL. Example:\n\n package google.profile;\n message Person {\n string first_name = 1;\n string last_name = 2;\n }\n\n {\n \"@type\": \"type.googleapis.com/google.profile.Person\",\n \"firstName\": \u003cstring\u003e,\n \"lastName\": \u003cstring\u003e\n }\n\nIf the embedded message type is well-known and has a custom JSON\nrepresentation, that representation will be embedded adding a field\n`value` which holds the custom JSON in addition to the `@type`\nfield. Example (for message [google.protobuf.Duration][]):\n\n {\n \"@type\": \"type.googleapis.com/google.protobuf.Duration\",\n \"value\": \"1.212s\"\n }"
+ "title": "`Any` contains an arbitrary serialized protocol buffer message along with a\r\nURL that describes the type of the serialized message.\r\n\r\nProtobuf library provides support to pack/unpack Any values in the form\r\nof utility functions or additional generated methods of the Any type.\r\n\r\nExample 1: Pack and unpack a message in C++.\r\n\r\n Foo foo = ...;\r\n Any any;\r\n any.PackFrom(foo);\r\n ...\r\n if (any.UnpackTo(\u0026foo)) {\r\n ...\r\n }\r\n\r\nExample 2: Pack and unpack a message in Java.\r\n\r\n Foo foo = ...;\r\n Any any = Any.pack(foo);\r\n ...\r\n if (any.is(Foo.class)) {\r\n foo = any.unpack(Foo.class);\r\n }\r\n\r\n Example 3: Pack and unpack a message in Python.\r\n\r\n foo = Foo(...)\r\n any = Any()\r\n any.Pack(foo)\r\n ...\r\n if any.Is(Foo.DESCRIPTOR):\r\n any.Unpack(foo)\r\n ...\r\n\r\n Example 4: Pack and unpack a message in Go\r\n\r\n foo := \u0026pb.Foo{...}\r\n any, err := ptypes.MarshalAny(foo)\r\n ...\r\n foo := \u0026pb.Foo{}\r\n if err := ptypes.UnmarshalAny(any, foo); err != nil {\r\n ...\r\n }\r\n\r\nThe pack methods provided by protobuf library will by default use\r\n'type.googleapis.com/full.type.name' as the type URL and the unpack\r\nmethods only use the fully qualified type name after the last '/'\r\nin the type URL, for example \"foo.bar.com/x/y.z\" will yield type\r\nname \"y.z\".\r\n\r\n\r\nJSON\r\n====\r\nThe JSON representation of an `Any` value uses the regular\r\nrepresentation of the deserialized, embedded message, with an\r\nadditional field `@type` which contains the type URL. Example:\r\n\r\n package google.profile;\r\n message Person {\r\n string first_name = 1;\r\n string last_name = 2;\r\n }\r\n\r\n {\r\n \"@type\": \"type.googleapis.com/google.profile.Person\",\r\n \"firstName\": \u003cstring\u003e,\r\n \"lastName\": \u003cstring\u003e\r\n }\r\n\r\nIf the embedded message type is well-known and has a custom JSON\r\nrepresentation, that representation will be embedded adding a field\r\n`value` which holds the custom JSON in addition to the `@type`\r\nfield. Example (for message [google.protobuf.Duration][]):\r\n\r\n {\r\n \"@type\": \"type.googleapis.com/google.protobuf.Duration\",\r\n \"value\": \"1.212s\"\r\n }"
},
"protobufNullValue": {
"type": "string",
@@ -4220,7 +4313,7 @@
"NULL_VALUE"
],
"default": "NULL_VALUE",
- "description": "`NullValue` is a singleton enumeration to represent the null value for the\n`Value` type union.\n\n The JSON representation for `NullValue` is JSON `null`.\n\n - NULL_VALUE: Null value."
+ "description": "`NullValue` is a singleton enumeration to represent the null value for the\r\n`Value` type union.\r\n\r\n The JSON representation for `NullValue` is JSON `null`.\n\n - NULL_VALUE: Null value."
},
"runtimeError": {
"type": "object",
diff --git a/bcs-services/cluster-resources/pkg/metrics/metrics.go b/bcs-services/cluster-resources/pkg/metrics/metrics.go
new file mode 100644
index 0000000000..1ab360d059
--- /dev/null
+++ b/bcs-services/cluster-resources/pkg/metrics/metrics.go
@@ -0,0 +1,61 @@
+/*
+ * Tencent is pleased to support the open source community by making Blueking Container Service available.
+ * Copyright (C) 2019 THL A29 Limited, a Tencent company. All rights reserved.
+ * Licensed under the MIT License (the "License"); you may not use this file except
+ * in compliance with the License. You may obtain a copy of the License at
+ * http://opensource.org/licenses/MIT
+ * Unless required by applicable law or agreed to in writing, software distributed under
+ * the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND,
+ * either express or implied. See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// Package metrics xxx
+package metrics
+
+import (
+ "strconv"
+ "strings"
+ "time"
+
+ "github.com/prometheus/client_golang/prometheus"
+)
+
+const bkBcsClusterResources = "bkbcs_clusterresources"
+
+var (
+ // api 请求总量
+ apiRequestsTotal = prometheus.NewCounterVec(prometheus.CounterOpts{
+ Namespace: bkBcsClusterResources,
+ Name: "api_request_total_num",
+ Help: "The total number of requests for template set api",
+ }, []string{"handler", "code"})
+
+ // api 请求耗时, 包含页面返回, API请求
+ apiRequestDuration = prometheus.NewHistogramVec(prometheus.HistogramOpts{
+ Namespace: bkBcsClusterResources,
+ Name: "api_request_duration_seconds",
+ Help: "Histogram of latencies for template set api",
+ Buckets: []float64{0.1, 0.2, 0.5, 1, 2, 5, 10, 30, 60},
+ }, []string{"handler", "code"})
+)
+
+func init() {
+ prometheus.MustRegister(apiRequestsTotal)
+ prometheus.MustRegister(apiRequestDuration)
+}
+
+// collectAPIRequestMetric api metrics 处理
+func collectAPIRequestMetric(handler, code string, started time.Time) {
+ apiRequestsTotal.WithLabelValues(handler, code).Inc()
+ apiRequestDuration.WithLabelValues(handler, code).Observe(time.Since(started).Seconds())
+}
+
+// RecordMetrics 记录metrics
+func RecordMetrics(method string, code int32, started time.Time) {
+ methods := strings.Split(method, ".")
+ if len(methods) != 2 {
+ return
+ }
+ collectAPIRequestMetric(methods[1], strconv.Itoa(int(code)), started)
+}
diff --git a/bcs-services/cluster-resources/pkg/wrapper/response.go b/bcs-services/cluster-resources/pkg/wrapper/response.go
index 1df60b8bd5..1d40493758 100644
--- a/bcs-services/cluster-resources/pkg/wrapper/response.go
+++ b/bcs-services/cluster-resources/pkg/wrapper/response.go
@@ -30,6 +30,7 @@ import (
"github.com/Tencent/bk-bcs/bcs-services/cluster-resources/pkg/common/errcode"
"github.com/Tencent/bk-bcs/bcs-services/cluster-resources/pkg/iam/perm"
log "github.com/Tencent/bk-bcs/bcs-services/cluster-resources/pkg/logging"
+ "github.com/Tencent/bk-bcs/bcs-services/cluster-resources/pkg/metrics"
"github.com/Tencent/bk-bcs/bcs-services/cluster-resources/pkg/util/errorx"
"github.com/Tencent/bk-bcs/bcs-services/cluster-resources/pkg/util/pbstruct"
clusterRes "github.com/Tencent/bk-bcs/bcs-services/cluster-resources/proto/cluster-resources"
@@ -42,13 +43,16 @@ func NewResponseFormatWrapper() server.HandlerWrapper {
startTime := time.Now()
err := fn(ctx, req, rsp)
endTime := time.Now()
+ message, code := getRespMsgCode(err)
+ // 记录metrics
+ metrics.RecordMetrics(req.Method(), code, startTime)
// 添加审计
go addAudit(ctx, req, rsp, startTime, endTime)
// 若返回结构是标准结构,则这里将错误信息捕获,按照规范格式化到结构体中
switch r := rsp.(type) {
case *clusterRes.CommonResp:
r.RequestID = getRequestID(ctx)
- r.Message, r.Code = getRespMsgCode(err)
+ r.Message, r.Code = message, code
if err != nil {
r.Data = genNewRespData(ctx, err)
// 返回 nil 避免框架重复处理 error
@@ -56,7 +60,7 @@ func NewResponseFormatWrapper() server.HandlerWrapper {
}
case *clusterRes.CommonListResp:
r.RequestID = getRequestID(ctx)
- r.Message, r.Code = getRespMsgCode(err)
+ r.Message, r.Code = message, code
if err != nil {
r.Data = nil
return nil // nolint:nilerr