From e049ad8af07d8e2faff7ec633ba6a15fba169244 Mon Sep 17 00:00:00 2001 From: Aaron Stein Date: Tue, 17 Jul 2018 16:05:08 -0700 Subject: [PATCH] cli configuration and status api fixes: #294, #279, #280, #290 --- _integration/cmp/provider.go | 2 +- cmd/akash/constants/constants.go | 26 - cmd/akash/key.go | 8 +- cmd/akash/provider.go | 14 +- cmd/akash/session/base.go | 27 +- cmd/akash/session/flags.go | 22 +- cmd/akash/session/flags_test.go | 62 ++- cmd/akash/session/session.go | 39 +- provider/cluster/kube/builder.go | 4 +- provider/cluster/kube/client.go | 54 +- provider/cluster/kube/client_test.go | 2 +- provider/cluster/kube/deployment_test.go | 2 +- sdl/v1.go | 12 +- types/types.pb.go | 632 +++++++++++++---------- types/types.proto | 15 +- types/types.swagger.json | 35 +- 16 files changed, 555 insertions(+), 401 deletions(-) delete mode 100644 cmd/akash/constants/constants.go diff --git a/_integration/cmp/provider.go b/_integration/cmp/provider.go index eb3b46b3bf..fb32698ea1 100644 --- a/_integration/cmp/provider.go +++ b/_integration/cmp/provider.go @@ -23,7 +23,7 @@ func providerCreate(root vars.Ref, key vars.Ref, paddr vars.Ref) gestalt.Compone } func providerRun(root vars.Ref, key vars.Ref, paddr vars.Ref) gestalt.Component { - return akash_(root, "provider-run", "provider", "run", paddr.Var(), "-k", key.Name()). + return akash_(root, "provider-run", "provider", "run", paddr.Var(), "-k", key.Name(), "--host", "localhost"). WithMeta(g.Require(paddr.Name())) } diff --git a/cmd/akash/constants/constants.go b/cmd/akash/constants/constants.go deleted file mode 100644 index 916463c16d..0000000000 --- a/cmd/akash/constants/constants.go +++ /dev/null @@ -1,26 +0,0 @@ -package constants - -const ( - - // should be for every command - FlagRootDir = "data" - FlagNode = "node" - - // all non-query commands / actual transactions - FlagNonce = "nonce" - - // only commands which need private key / signing - FlagKey = "key" - KeyDir = "keys" - Codec = "english" - - // all key types should be standardized - FlagKeyType = "type" - KeyType = "ed25519" - - // market commands - FlagNoWait = "no-wait" - - // todo: interactive. - Password = "0123456789" -) diff --git a/cmd/akash/key.go b/cmd/akash/key.go index 70046b1af4..32285e4196 100644 --- a/cmd/akash/key.go +++ b/cmd/akash/key.go @@ -6,7 +6,6 @@ import ( "os" "text/tabwriter" - "github.com/ovrclk/akash/cmd/akash/constants" "github.com/ovrclk/akash/cmd/akash/session" "github.com/spf13/cobra" @@ -48,7 +47,12 @@ func doKeyCreateCommand(session session.Session, cmd *cobra.Command, args []stri return err } - info, _, err := kmgr.Create(args[0], constants.Password, ktype) + password, err := session.Password() + if err != nil { + return err + } + + info, _, err := kmgr.Create(args[0], password, ktype) if err != nil { return err } diff --git a/cmd/akash/provider.go b/cmd/akash/provider.go index d574b841c3..f3a6d98e3b 100644 --- a/cmd/akash/provider.go +++ b/cmd/akash/provider.go @@ -5,7 +5,6 @@ import ( "context" "fmt" - "github.com/ovrclk/akash/cmd/akash/constants" "github.com/ovrclk/akash/cmd/akash/session" "github.com/ovrclk/akash/cmd/common" "github.com/ovrclk/akash/keys" @@ -71,7 +70,12 @@ func doCreateProviderCommand(session session.Session, cmd *cobra.Command, args [ return err } - info, _, err := kmgr.Create(kname, constants.Password, ktype) + password, err := session.Password() + if err != nil { + return err + } + + info, _, err := kmgr.Create(kname, password, ktype) if err != nil { return err } @@ -121,8 +125,10 @@ func runCommand() *cobra.Command { Use: "run ", Short: "respond to chain events", Args: cobra.ExactArgs(1), - RunE: session.WithSession(session.RequireNode(doProviderRunCommand)), + RunE: session.WithSession(session.RequireNode(session.RequireHost(doProviderRunCommand))), } + + session.AddFlagHost(cmd, cmd.PersistentFlags()) cmd.Flags().Bool("kube", false, "use kubernetes cluster") cmd.Flags().String("manifest-ns", "lease", "set manifest namespace") @@ -158,7 +164,7 @@ func doProviderRunCommand(session session.Session, cmd *cobra.Command, args []st if err != nil { return err } - cclient, err = kube.NewClient(session.Log().With("cmp", "cluster-client"), ns) + cclient, err = kube.NewClient(session.Log().With("cmp", "cluster-client"), session.Host(), ns) if err != nil { return err } diff --git a/cmd/akash/session/base.go b/cmd/akash/session/base.go index 10a1d5b22c..d2352bf960 100644 --- a/cmd/akash/session/base.go +++ b/cmd/akash/session/base.go @@ -4,24 +4,45 @@ import ( "os" "path" - "github.com/ovrclk/akash/cmd/akash/constants" "github.com/spf13/cobra" "github.com/spf13/viper" ) +const ( + flagRootDir = "data" + flagNode = "node" + flagNonce = "nonce" + flagKey = "key" + flagKeyType = "type" + flagNoWait = "no-wait" + flagHost = "host" + flagPassword = "password" + keyDir = "keys" + + defaultKeyType = "ed25519" + defaultCodec = "english" + defaultPassword = "0123456789" +) + func SetupBaseCommand(cmd *cobra.Command) { cmd.PersistentPreRunE = func(cmd *cobra.Command, args []string) error { - root, _ := cmd.Flags().GetString(constants.FlagRootDir) + root, _ := cmd.Flags().GetString(flagRootDir) return initCommandConfig(root) } cmd.PersistentPostRunE = func(cmd *cobra.Command, args []string) error { return saveCommandConfig() } - cmd.PersistentFlags().StringP(constants.FlagRootDir, "d", defaultRootDir(), "data directory") + cmd.PersistentFlags().StringP(flagRootDir, "d", defaultRootDir(), "data directory") } func initCommandConfig(root string) error { viper.SetEnvPrefix("AKASH") + + viper.BindEnv(flagNode) + + viper.BindEnv(flagPassword) + viper.SetDefault(flagPassword, defaultPassword) + viper.AutomaticEnv() viper.SetConfigFile(path.Join(root, "akash.toml")) diff --git a/cmd/akash/session/flags.go b/cmd/akash/session/flags.go index c65b83a0d0..d339252369 100644 --- a/cmd/akash/session/flags.go +++ b/cmd/akash/session/flags.go @@ -3,7 +3,6 @@ package session import ( "fmt" - "github.com/ovrclk/akash/cmd/akash/constants" "github.com/spf13/cobra" "github.com/spf13/pflag" "github.com/spf13/viper" @@ -11,29 +10,34 @@ import ( ) func AddFlagNode(cmd *cobra.Command, flags *pflag.FlagSet) { - flags.StringP(constants.FlagNode, "n", "http://localhost:46657", "node host") - viper.BindPFlag(constants.FlagNode, flags.Lookup(constants.FlagNode)) + flags.StringP(flagNode, "n", "http://localhost:46657", "node host") + viper.BindPFlag(flagNode, flags.Lookup(flagNode)) } func AddFlagKey(cmd *cobra.Command, flags *pflag.FlagSet) { - flags.StringP(constants.FlagKey, "k", "", "key name (required)") - cmd.MarkFlagRequired(constants.FlagKey) + flags.StringP(flagKey, "k", "", "key name (required)") + cmd.MarkFlagRequired(flagKey) } func AddFlagNonce(cmd *cobra.Command, flags *pflag.FlagSet) { - flags.Uint64(constants.FlagNonce, 0, "nonce (optional)") + flags.Uint64(flagNonce, 0, "nonce (optional)") } func AddFlagKeyType(cmd *cobra.Command, flags *pflag.FlagSet) { - flags.StringP(constants.FlagKeyType, "t", constants.KeyType, "Type of key (ed25519|secp256k1|ledger)") + flags.StringP(flagKeyType, "t", defaultKeyType, "Type of key (ed25519|secp256k1|ledger)") } func AddFlagWait(cmd *cobra.Command, flags *pflag.FlagSet) { - flags.Bool(constants.FlagNoWait, false, "Do not wait for lease creation") + flags.Bool(flagNoWait, false, "Do not wait for lease creation") +} + +func AddFlagHost(cmd *cobra.Command, flags *pflag.FlagSet) { + flags.String(flagHost, "", "cluster host") + viper.BindPFlag(flagHost, flags.Lookup(flagHost)) } func parseFlagKeyType(flags *pflag.FlagSet) (keys.CryptoAlgo, error) { - ktype, err := flags.GetString(constants.FlagKeyType) + ktype, err := flags.GetString(flagKeyType) if err != nil { return "", err } diff --git a/cmd/akash/session/flags_test.go b/cmd/akash/session/flags_test.go index 24b9bb1b1e..896ea4eeeb 100644 --- a/cmd/akash/session/flags_test.go +++ b/cmd/akash/session/flags_test.go @@ -1,12 +1,10 @@ -package session_test +package session import ( "os" "strconv" "testing" - "github.com/ovrclk/akash/cmd/akash/constants" - "github.com/ovrclk/akash/cmd/akash/session" "github.com/ovrclk/akash/testutil" "github.com/spf13/cobra" "github.com/spf13/pflag" @@ -24,7 +22,7 @@ func TestNode_Env(t *testing.T) { os.Setenv("AKASH_NODE", val) - assertCommand(t, session.AddFlagNode, func(sess session.Session, cmd *cobra.Command, args []string) error { + assertCommand(t, AddFlagNode, func(sess Session, cmd *cobra.Command, args []string) error { assert.Equal(t, val, sess.Node()) return nil }) @@ -33,47 +31,81 @@ func TestNode_Env(t *testing.T) { func TestNode_Flag(t *testing.T) { const val = "foo.bar:123" - assertCommand(t, session.AddFlagNode, func(sess session.Session, cmd *cobra.Command, args []string) error { + assertCommand(t, AddFlagNode, func(sess Session, cmd *cobra.Command, args []string) error { assert.Equal(t, val, sess.Node()) return nil }, "-n", val) } +func TestHost_Env(t *testing.T) { + const val = "bar" + defer os.Unsetenv("AKASH_HOST") + + os.Setenv("AKASH_HOST", val) + + assertCommand(t, AddFlagHost, func(sess Session, cmd *cobra.Command, args []string) error { + assert.Equal(t, val, sess.Host()) + return nil + }) +} + +func TestHost_Flag(t *testing.T) { + const val = "foo" + + assertCommand(t, AddFlagHost, func(sess Session, cmd *cobra.Command, args []string) error { + assert.Equal(t, val, sess.Host()) + return nil + }, "--host", val) +} + func TestKey_Flag(t *testing.T) { const val = "foo" - assertCommand(t, session.AddFlagKey, func(sess session.Session, cmd *cobra.Command, args []string) error { + assertCommand(t, AddFlagKey, func(sess Session, cmd *cobra.Command, args []string) error { assert.Equal(t, val, sess.KeyName()) return nil }, "-k", val) } +func TestPassword_Env(t *testing.T) { + const val = "password" + defer os.Unsetenv("AKASH_PASSWORD") + + os.Setenv("AKASH_PASSWORD", val) + + assertCommand(t, AddFlagNode, func(sess Session, cmd *cobra.Command, args []string) error { + p, err := sess.Password() + assert.NoError(t, err) + assert.Equal(t, val, p) + return nil + }) +} func TestFlag_Nonce(t *testing.T) { const val uint64 = 10 const key = "foo" flagfn := func(cmd *cobra.Command, flags *pflag.FlagSet) { - session.AddFlagKey(cmd, flags) - session.AddFlagNonce(cmd, flags) - session.AddFlagNode(cmd, flags) + AddFlagKey(cmd, flags) + AddFlagNonce(cmd, flags) + AddFlagNode(cmd, flags) } - assertCommand(t, flagfn, func(sess session.Session, cmd *cobra.Command, args []string) error { + assertCommand(t, flagfn, func(sess Session, cmd *cobra.Command, args []string) error { kmgr, err := sess.KeyManager() require.NoError(t, err) - _, _, err = kmgr.Create(key, constants.Password, keys.AlgoEd25519) + _, _, err = kmgr.Create(key, defaultPassword, keys.AlgoEd25519) require.NoError(t, err) nonce, err := sess.Nonce() require.NoError(t, err) require.Equal(t, val, nonce) return nil - }, "--"+constants.FlagNonce, strconv.Itoa(int(val)), "-k", key, "-n", "node.address") + }, "--"+flagNonce, strconv.Itoa(int(val)), "-k", key, "-n", "node.address") } -func assertCommand(t *testing.T, flagfn flagFn, fn session.Runner, args ...string) { +func assertCommand(t *testing.T, flagfn flagFn, fn Runner, args ...string) { testutil.WithAkashDir(t, func(basedir string) { viper.Reset() @@ -81,14 +113,14 @@ func assertCommand(t *testing.T, flagfn flagFn, fn session.Runner, args ...strin cmd := &cobra.Command{ Use: "test", - RunE: session.WithSession(func(sess session.Session, cmd *cobra.Command, args []string) error { + RunE: WithSession(func(sess Session, cmd *cobra.Command, args []string) error { ran = true require.Equal(t, basedir, sess.RootDir(), "unexpected home dir") return fn(sess, cmd, args) }), } - session.SetupBaseCommand(cmd) + SetupBaseCommand(cmd) if flagfn != nil { flagfn(cmd, cmd.Flags()) diff --git a/cmd/akash/session/session.go b/cmd/akash/session/session.go index a652c27a56..0582f874e6 100644 --- a/cmd/akash/session/session.go +++ b/cmd/akash/session/session.go @@ -7,7 +7,6 @@ import ( "os" "sync" - "github.com/ovrclk/akash/cmd/akash/constants" "github.com/ovrclk/akash/cmd/common" "github.com/ovrclk/akash/query" "github.com/ovrclk/akash/txutil" @@ -36,6 +35,8 @@ type Session interface { Signer() (txutil.Signer, keys.Info, error) Ctx() context.Context NoWait() bool + Host() string + Password() (string, error) } type cmdRunner func(cmd *cobra.Command, args []string) error @@ -49,6 +50,15 @@ func WithSession(fn Runner) cmdRunner { } } +func RequireHost(fn Runner) Runner { + return func(session Session, cmd *cobra.Command, args []string) error { + if host := session.Host(); host == "" { + return errors.New("host unset") + } + return fn(session, cmd, args) + } +} + func RequireRootDir(fn Runner) Runner { return func(session Session, cmd *cobra.Command, args []string) error { if root := session.RootDir(); root == "" { @@ -119,7 +129,7 @@ func (ctx *session) Log() log.Logger { } func (ctx *session) RootDir() string { - root, _ := ctx.cmd.Flags().GetString(constants.FlagRootDir) + root, _ := ctx.cmd.Flags().GetString(flagRootDir) return root } @@ -143,10 +153,10 @@ func (ctx *session) KeyManager() (keys.Keybase, error) { } func (ctx *session) Node() string { - if ctx.cmd.Flag(constants.FlagNode).Value.String() != ctx.cmd.Flag(constants.FlagNode).DefValue { - return ctx.cmd.Flag(constants.FlagNode).Value.String() + if ctx.cmd.Flag(flagNode).Value.String() != ctx.cmd.Flag(flagNode).DefValue { + return ctx.cmd.Flag(flagNode).Value.String() } - return viper.GetString(constants.FlagNode) + return viper.GetString(flagNode) } func (ctx *session) Client() *tmclient.HTTP { @@ -158,7 +168,7 @@ func (ctx *session) TxClient() (txutil.Client, error) { if err != nil { return nil, err } - nonce, err := ctx.cmd.Flags().GetUint64(constants.FlagNonce) + nonce, err := ctx.cmd.Flags().GetUint64(flagNonce) if err != nil { nonce = 0 } @@ -170,7 +180,7 @@ func (ctx *session) QueryClient() query.Client { } func (ctx *session) KeyName() string { - val, _ := ctx.cmd.Flags().GetString(constants.FlagKey) + val, _ := ctx.cmd.Flags().GetString(flagKey) return val } @@ -198,7 +208,7 @@ func (ctx *session) Key() (keys.Info, error) { } func (ctx *session) Password() (string, error) { - return constants.Password, nil + return viper.GetString(flagPassword), nil } func (ctx *session) Signer() (txutil.Signer, keys.Info, error) { @@ -231,7 +241,7 @@ func (ctx *session) Nonce() (uint64, error) { } func (ctx *session) NoWait() bool { - val, _ := ctx.cmd.Flags().GetBool(constants.FlagNoWait) + val, _ := ctx.cmd.Flags().GetBool(flagNoWait) return val } @@ -240,13 +250,20 @@ func (ctx *session) Ctx() context.Context { } func loadKeyManager(root string) (keys.Keybase, tmdb.DB, error) { - codec, err := words.LoadCodec(constants.Codec) + codec, err := words.LoadCodec(defaultCodec) if err != nil { return nil, nil, err } - db := tmdb.NewDB(constants.KeyDir, tmdb.GoLevelDBBackend, root) + db := tmdb.NewDB(keyDir, tmdb.GoLevelDBBackend, root) manager := keys.New(db, codec) return manager, db, nil } + +func (ctx *session) Host() string { + if len(ctx.cmd.Flag(flagHost).Value.String()) > 0 { + return ctx.cmd.Flag(flagHost).Value.String() + } + return viper.GetString(flagHost) +} diff --git a/provider/cluster/kube/builder.go b/provider/cluster/kube/builder.go index 816c9c9ae1..3a792b7b43 100644 --- a/provider/cluster/kube/builder.go +++ b/provider/cluster/kube/builder.go @@ -3,6 +3,7 @@ package kube import ( "crypto/sha1" "encoding/hex" + "fmt" "strconv" "strings" @@ -210,7 +211,8 @@ type ingressBuilder struct { expose *types.ManifestServiceExpose } -func newIngressBuilder(lid types.LeaseID, group *types.ManifestGroup, service *types.ManifestService, expose *types.ManifestServiceExpose) *ingressBuilder { +func newIngressBuilder(host string, lid types.LeaseID, group *types.ManifestGroup, service *types.ManifestService, expose *types.ManifestServiceExpose) *ingressBuilder { + expose.Hosts = append(expose.Hosts, fmt.Sprintf("%v.%v.%v", service.Name, lid.DeploymentID(), host)) return &ingressBuilder{ deploymentBuilder: deploymentBuilder{builder: builder{lid, group}, service: service}, expose: expose, diff --git a/provider/cluster/kube/client.go b/provider/cluster/kube/client.go index aa6d8f1663..4ecc4af13b 100644 --- a/provider/cluster/kube/client.go +++ b/provider/cluster/kube/client.go @@ -25,13 +25,14 @@ type Client interface { } type client struct { - kc kubernetes.Interface - mc *manifestclient.Clientset - ns string - log log.Logger + kc kubernetes.Interface + mc *manifestclient.Clientset + ns string + host string + log log.Logger } -func NewClient(log log.Logger, ns string) (Client, error) { +func NewClient(log log.Logger, host, ns string) (Client, error) { config, err := openKubeConfig(log) if err != nil { @@ -69,10 +70,11 @@ func NewClient(log log.Logger, ns string) (Client, error) { } return &client{ - kc: kc, - mc: mc, - ns: ns, - log: log, + kc: kc, + mc: mc, + ns: ns, + host: host, + log: log, }, nil } @@ -142,7 +144,7 @@ func (c *client) Deploy(lid types.LeaseID, group *types.ManifestGroup) error { if !c.shouldExpose(expose) { continue } - if err := applyIngress(c.kc, newIngressBuilder(lid, group, service, expose)); err != nil { + if err := applyIngress(c.kc, newIngressBuilder(c.host, lid, group, service, expose)); err != nil { c.log.Error("applying ingress", "err", err, "lease", lid, "service", service.Name, "expose", expose) return err } @@ -190,16 +192,36 @@ func (c *client) LeaseStatus(lid types.LeaseID) (*types.LeaseStatusResponse, err c.log.Error(err.Error()) return nil, types.ErrInternalError{Message: "internal error"} } - if deployments == nil { + if deployments == nil || len(deployments.Items) == 0 { return nil, types.ErrResourceNotFound{Message: "no deployments for lease"} } - response := &types.LeaseStatusResponse{} + serviceStatus := make(map[string]*types.ServiceStatus, len(deployments.Items)) for _, deployment := range deployments.Items { - status := &types.LeaseStatus{ - Name: deployment.Name, - Status: fmt.Sprintf("available replicas: %v/%v", - deployment.Status.AvailableReplicas, deployment.Status.Replicas), + status := &types.ServiceStatus{ + Name: deployment.Name, + Available: deployment.Status.AvailableReplicas, + Total: deployment.Status.Replicas, + } + serviceStatus[deployment.Name] = status + } + ingress, err := c.kc.ExtensionsV1beta1().Ingresses(lidNS(lid)).List(metav1.ListOptions{}) + if err != nil { + c.log.Error(err.Error()) + return nil, types.ErrInternalError{Message: "internal error"} + } + if ingress == nil || len(ingress.Items) == 0 { + return nil, types.ErrResourceNotFound{Message: "no ingress for lease"} + } + for _, ing := range ingress.Items { + service := serviceStatus[ing.Name] + hosts := []string{} + for _, rule := range ing.Spec.Rules { + hosts = append(hosts, rule.Host) } + service.URIs = hosts + } + response := &types.LeaseStatusResponse{} + for _, status := range serviceStatus { response.Services = append(response.Services, status) } return response, nil diff --git a/provider/cluster/kube/client_test.go b/provider/cluster/kube/client_test.go index b0f01d74af..a6341fe20b 100644 --- a/provider/cluster/kube/client_test.go +++ b/provider/cluster/kube/client_test.go @@ -11,7 +11,7 @@ import ( ) func kubeClient(t *testing.T) Client { - client, err := NewClient(log.NewTMLogger(os.Stdout), strings.ToLower(t.Name())) + client, err := NewClient(log.NewTMLogger(os.Stdout), "host", strings.ToLower(t.Name())) assert.NoError(t, err) return client } diff --git a/provider/cluster/kube/deployment_test.go b/provider/cluster/kube/deployment_test.go index 0611d32a88..cac5a403e4 100644 --- a/provider/cluster/kube/deployment_test.go +++ b/provider/cluster/kube/deployment_test.go @@ -22,7 +22,7 @@ func TestDeploy(t *testing.T) { require.NoError(t, err) log := log.NewTMLogger(os.Stdout) - client, err := NewClient(log, "lease") + client, err := NewClient(log, "host", "lease") assert.NoError(t, err) err = client.Deploy(lease.LeaseID, mani.Groups[0]) diff --git a/sdl/v1.go b/sdl/v1.go index 344a37fa61..b4fe7a89d7 100644 --- a/sdl/v1.go +++ b/sdl/v1.go @@ -26,11 +26,13 @@ type v1Service struct { } type v1Expose struct { - Port uint32 - As uint32 - Proto string `yaml:",omitempty"` - To []v1ExposeTo `yaml:",omitempty"` - Accept []string `yaml:",omitempty"` + Port uint32 + As uint32 + Proto string `yaml:",omitempty"` + To []v1ExposeTo `yaml:",omitempty"` + // TODO: add one value to this as servicename.deploymentID.providerIP + // provider comes from startup configuration + Accept []string `yaml:",omitempty"` } type v1ExposeTo struct { diff --git a/types/types.pb.go b/types/types.pb.go index 4daa734cf4..f376ff9d83 100644 --- a/types/types.pb.go +++ b/types/types.pb.go @@ -50,14 +50,14 @@ ServerStatus DeployRespone LeaseStatusRequest - LeaseStatusResponse ServiceStatusRequest ServiceStatusResponse LogRequest LogOptions Log LogResponse - LeaseStatus + LeaseStatusResponse + ServiceStatus ManifestGetRequest ManifestGetResponse ErrInvalidPayload @@ -1602,22 +1602,6 @@ func (m *LeaseStatusRequest) GetProvider() string { return "" } -type LeaseStatusResponse struct { - Services []*LeaseStatus `protobuf:"bytes,1,rep,name=services" json:"services,omitempty"` -} - -func (m *LeaseStatusResponse) Reset() { *m = LeaseStatusResponse{} } -func (m *LeaseStatusResponse) String() string { return proto.CompactTextString(m) } -func (*LeaseStatusResponse) ProtoMessage() {} -func (*LeaseStatusResponse) Descriptor() ([]byte, []int) { return fileDescriptorTypes, []int{42} } - -func (m *LeaseStatusResponse) GetServices() []*LeaseStatus { - if m != nil { - return m.Services - } - return nil -} - type ServiceStatusRequest struct { Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` Deployment string `protobuf:"bytes,2,opt,name=deployment,proto3" json:"deployment,omitempty"` @@ -1629,7 +1613,7 @@ type ServiceStatusRequest struct { func (m *ServiceStatusRequest) Reset() { *m = ServiceStatusRequest{} } func (m *ServiceStatusRequest) String() string { return proto.CompactTextString(m) } func (*ServiceStatusRequest) ProtoMessage() {} -func (*ServiceStatusRequest) Descriptor() ([]byte, []int) { return fileDescriptorTypes, []int{43} } +func (*ServiceStatusRequest) Descriptor() ([]byte, []int) { return fileDescriptorTypes, []int{42} } func (m *ServiceStatusRequest) GetName() string { if m != nil { @@ -1677,7 +1661,7 @@ type ServiceStatusResponse struct { func (m *ServiceStatusResponse) Reset() { *m = ServiceStatusResponse{} } func (m *ServiceStatusResponse) String() string { return proto.CompactTextString(m) } func (*ServiceStatusResponse) ProtoMessage() {} -func (*ServiceStatusResponse) Descriptor() ([]byte, []int) { return fileDescriptorTypes, []int{44} } +func (*ServiceStatusResponse) Descriptor() ([]byte, []int) { return fileDescriptorTypes, []int{43} } func (m *ServiceStatusResponse) GetObservedGeneration() int64 { if m != nil { @@ -1726,7 +1710,7 @@ type LogRequest struct { func (m *LogRequest) Reset() { *m = LogRequest{} } func (m *LogRequest) String() string { return proto.CompactTextString(m) } func (*LogRequest) ProtoMessage() {} -func (*LogRequest) Descriptor() ([]byte, []int) { return fileDescriptorTypes, []int{45} } +func (*LogRequest) Descriptor() ([]byte, []int) { return fileDescriptorTypes, []int{44} } func (m *LogRequest) GetName() string { if m != nil { @@ -1778,7 +1762,7 @@ type LogOptions struct { func (m *LogOptions) Reset() { *m = LogOptions{} } func (m *LogOptions) String() string { return proto.CompactTextString(m) } func (*LogOptions) ProtoMessage() {} -func (*LogOptions) Descriptor() ([]byte, []int) { return fileDescriptorTypes, []int{46} } +func (*LogOptions) Descriptor() ([]byte, []int) { return fileDescriptorTypes, []int{45} } func (m *LogOptions) GetTailLines() int64 { if m != nil { @@ -1802,7 +1786,7 @@ type Log struct { func (m *Log) Reset() { *m = Log{} } func (m *Log) String() string { return proto.CompactTextString(m) } func (*Log) ProtoMessage() {} -func (*Log) Descriptor() ([]byte, []int) { return fileDescriptorTypes, []int{47} } +func (*Log) Descriptor() ([]byte, []int) { return fileDescriptorTypes, []int{46} } func (m *Log) GetName() string { if m != nil { @@ -1825,7 +1809,7 @@ type LogResponse struct { func (m *LogResponse) Reset() { *m = LogResponse{} } func (m *LogResponse) String() string { return proto.CompactTextString(m) } func (*LogResponse) ProtoMessage() {} -func (*LogResponse) Descriptor() ([]byte, []int) { return fileDescriptorTypes, []int{48} } +func (*LogResponse) Descriptor() ([]byte, []int) { return fileDescriptorTypes, []int{47} } func (m *LogResponse) GetResult() *Log { if m != nil { @@ -1834,28 +1818,60 @@ func (m *LogResponse) GetResult() *Log { return nil } -type LeaseStatus struct { - Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` - Status string `protobuf:"bytes,2,opt,name=status,proto3" json:"status,omitempty"` +type LeaseStatusResponse struct { + Services []*ServiceStatus `protobuf:"bytes,1,rep,name=services" json:"services,omitempty"` } -func (m *LeaseStatus) Reset() { *m = LeaseStatus{} } -func (m *LeaseStatus) String() string { return proto.CompactTextString(m) } -func (*LeaseStatus) ProtoMessage() {} -func (*LeaseStatus) Descriptor() ([]byte, []int) { return fileDescriptorTypes, []int{49} } +func (m *LeaseStatusResponse) Reset() { *m = LeaseStatusResponse{} } +func (m *LeaseStatusResponse) String() string { return proto.CompactTextString(m) } +func (*LeaseStatusResponse) ProtoMessage() {} +func (*LeaseStatusResponse) Descriptor() ([]byte, []int) { return fileDescriptorTypes, []int{48} } + +func (m *LeaseStatusResponse) GetServices() []*ServiceStatus { + if m != nil { + return m.Services + } + return nil +} -func (m *LeaseStatus) GetName() string { +type ServiceStatus struct { + Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` + URIs []string `protobuf:"bytes,2,rep,name=URIs" json:"URIs,omitempty"` + Available int32 `protobuf:"varint,3,opt,name=available,proto3" json:"available,omitempty"` + Total int32 `protobuf:"varint,4,opt,name=total,proto3" json:"total,omitempty"` +} + +func (m *ServiceStatus) Reset() { *m = ServiceStatus{} } +func (m *ServiceStatus) String() string { return proto.CompactTextString(m) } +func (*ServiceStatus) ProtoMessage() {} +func (*ServiceStatus) Descriptor() ([]byte, []int) { return fileDescriptorTypes, []int{49} } + +func (m *ServiceStatus) GetName() string { if m != nil { return m.Name } return "" } -func (m *LeaseStatus) GetStatus() string { +func (m *ServiceStatus) GetURIs() []string { if m != nil { - return m.Status + return m.URIs } - return "" + return nil +} + +func (m *ServiceStatus) GetAvailable() int32 { + if m != nil { + return m.Available + } + return 0 +} + +func (m *ServiceStatus) GetTotal() int32 { + if m != nil { + return m.Total + } + return 0 } type ManifestGetRequest struct { @@ -1981,14 +1997,14 @@ func init() { proto.RegisterType((*ServerStatus)(nil), "types.ServerStatus") proto.RegisterType((*DeployRespone)(nil), "types.DeployRespone") proto.RegisterType((*LeaseStatusRequest)(nil), "types.LeaseStatusRequest") - proto.RegisterType((*LeaseStatusResponse)(nil), "types.LeaseStatusResponse") proto.RegisterType((*ServiceStatusRequest)(nil), "types.ServiceStatusRequest") proto.RegisterType((*ServiceStatusResponse)(nil), "types.ServiceStatusResponse") proto.RegisterType((*LogRequest)(nil), "types.LogRequest") proto.RegisterType((*LogOptions)(nil), "types.LogOptions") proto.RegisterType((*Log)(nil), "types.Log") proto.RegisterType((*LogResponse)(nil), "types.LogResponse") - proto.RegisterType((*LeaseStatus)(nil), "types.LeaseStatus") + proto.RegisterType((*LeaseStatusResponse)(nil), "types.LeaseStatusResponse") + proto.RegisterType((*ServiceStatus)(nil), "types.ServiceStatus") proto.RegisterType((*ManifestGetRequest)(nil), "types.ManifestGetRequest") proto.RegisterType((*ManifestGetResponse)(nil), "types.ManifestGetResponse") proto.RegisterType((*ErrInvalidPayload)(nil), "types.ErrInvalidPayload") @@ -3052,18 +3068,6 @@ func (this *LeaseStatusRequest) GoString() string { s = append(s, "}") return strings.Join(s, "") } -func (this *LeaseStatusResponse) GoString() string { - if this == nil { - return "nil" - } - s := make([]string, 0, 5) - s = append(s, "&types.LeaseStatusResponse{") - if this.Services != nil { - s = append(s, "Services: "+fmt.Sprintf("%#v", this.Services)+",\n") - } - s = append(s, "}") - return strings.Join(s, "") -} func (this *ServiceStatusRequest) GoString() string { if this == nil { return "nil" @@ -3143,14 +3147,28 @@ func (this *LogResponse) GoString() string { s = append(s, "}") return strings.Join(s, "") } -func (this *LeaseStatus) GoString() string { +func (this *LeaseStatusResponse) GoString() string { if this == nil { return "nil" } - s := make([]string, 0, 6) - s = append(s, "&types.LeaseStatus{") + s := make([]string, 0, 5) + s = append(s, "&types.LeaseStatusResponse{") + if this.Services != nil { + s = append(s, "Services: "+fmt.Sprintf("%#v", this.Services)+",\n") + } + s = append(s, "}") + return strings.Join(s, "") +} +func (this *ServiceStatus) GoString() string { + if this == nil { + return "nil" + } + s := make([]string, 0, 8) + s = append(s, "&types.ServiceStatus{") s = append(s, "Name: "+fmt.Sprintf("%#v", this.Name)+",\n") - s = append(s, "Status: "+fmt.Sprintf("%#v", this.Status)+",\n") + s = append(s, "URIs: "+fmt.Sprintf("%#v", this.URIs)+",\n") + s = append(s, "Available: "+fmt.Sprintf("%#v", this.Available)+",\n") + s = append(s, "Total: "+fmt.Sprintf("%#v", this.Total)+",\n") s = append(s, "}") return strings.Join(s, "") } @@ -8734,87 +8752,6 @@ func (m *LeaseStatusRequest) Unmarshal(dAtA []byte) error { } return nil } -func (m *LeaseStatusResponse) Unmarshal(dAtA []byte) error { - l := len(dAtA) - iNdEx := 0 - for iNdEx < l { - preIndex := iNdEx - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowTypes - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - fieldNum := int32(wire >> 3) - wireType := int(wire & 0x7) - if wireType == 4 { - return fmt.Errorf("proto: LeaseStatusResponse: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: LeaseStatusResponse: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Services", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowTypes - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= (int(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthTypes - } - postIndex := iNdEx + msglen - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.Services = append(m.Services, &LeaseStatus{}) - if err := m.Services[len(m.Services)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipTypes(dAtA[iNdEx:]) - if err != nil { - return err - } - if skippy < 0 { - return ErrInvalidLengthTypes - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} func (m *ServiceStatusRequest) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 @@ -9663,7 +9600,88 @@ func (m *LogResponse) Unmarshal(dAtA []byte) error { } return nil } -func (m *LeaseStatus) Unmarshal(dAtA []byte) error { +func (m *LeaseStatusResponse) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: LeaseStatusResponse: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: LeaseStatusResponse: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Services", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthTypes + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Services = append(m.Services, &ServiceStatus{}) + if err := m.Services[len(m.Services)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipTypes(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthTypes + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *ServiceStatus) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 for iNdEx < l { @@ -9686,10 +9704,10 @@ func (m *LeaseStatus) Unmarshal(dAtA []byte) error { fieldNum := int32(wire >> 3) wireType := int(wire & 0x7) if wireType == 4 { - return fmt.Errorf("proto: LeaseStatus: wiretype end group for non-group") + return fmt.Errorf("proto: ServiceStatus: wiretype end group for non-group") } if fieldNum <= 0 { - return fmt.Errorf("proto: LeaseStatus: illegal tag %d (wire type %d)", fieldNum, wire) + return fmt.Errorf("proto: ServiceStatus: illegal tag %d (wire type %d)", fieldNum, wire) } switch fieldNum { case 1: @@ -9723,7 +9741,7 @@ func (m *LeaseStatus) Unmarshal(dAtA []byte) error { iNdEx = postIndex case 2: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Status", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field URIs", wireType) } var stringLen uint64 for shift := uint(0); ; shift += 7 { @@ -9748,8 +9766,46 @@ func (m *LeaseStatus) Unmarshal(dAtA []byte) error { if postIndex > l { return io.ErrUnexpectedEOF } - m.Status = string(dAtA[iNdEx:postIndex]) + m.URIs = append(m.URIs, string(dAtA[iNdEx:postIndex])) iNdEx = postIndex + case 3: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field Available", wireType) + } + m.Available = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + m.Available |= (int32(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + case 4: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field Total", wireType) + } + m.Total = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + m.Total |= (int32(b) & 0x7F) << shift + if b < 0x80 { + break + } + } default: iNdEx = preIndex skippy, err := skipTypes(dAtA[iNdEx:]) @@ -10280,152 +10336,154 @@ var ( func init() { proto.RegisterFile("types/types.proto", fileDescriptorTypes) } var fileDescriptorTypes = []byte{ - // 2345 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xdc, 0x39, 0xcb, 0x6f, 0x1c, 0x49, - 0xf9, 0xd3, 0xf3, 0xee, 0xcf, 0x9e, 0x64, 0x5c, 0x9e, 0xcd, 0xce, 0xfa, 0x17, 0x25, 0xf9, 0xf5, - 0xae, 0xb4, 0xde, 0x4d, 0xe2, 0x09, 0xce, 0x2e, 0x9b, 0x17, 0xb0, 0x7e, 0x4c, 0x62, 0x07, 0xaf, - 0x6d, 0x95, 0x9d, 0xe5, 0xc0, 0x01, 0xb5, 0x3d, 0xe5, 0x49, 0x2b, 0x3d, 0x5d, 0x93, 0xae, 0x1e, - 0xaf, 0xad, 0xac, 0x2f, 0x1c, 0x40, 0x2b, 0x6e, 0x20, 0x21, 0x0e, 0x20, 0x81, 0xc4, 0x81, 0x0b, - 0x47, 0xfe, 0x07, 0x04, 0x97, 0x95, 0x90, 0x50, 0x04, 0x52, 0x50, 0x56, 0x1c, 0x38, 0x72, 0xe3, - 0x86, 0x50, 0xbd, 0x7a, 0xaa, 0x7b, 0x7a, 0x42, 0xec, 0x78, 0x11, 0xe2, 0x32, 0xea, 0xef, 0x51, - 0x5f, 0x7d, 0xef, 0xaa, 0xaf, 0x06, 0xa6, 0xa2, 0xc3, 0x3e, 0x61, 0x2d, 0xf1, 0x3b, 0xd7, 0x0f, - 0x69, 0x44, 0x51, 0x49, 0x00, 0x33, 0x57, 0xbb, 0x5e, 0xf4, 0x70, 0xb0, 0x33, 0xb7, 0x4b, 0x7b, - 0xad, 0x2e, 0xed, 0xd2, 0x96, 0xa0, 0xee, 0x0c, 0xf6, 0x04, 0x24, 0x00, 0xf1, 0x25, 0x57, 0xcd, - 0x9c, 0xef, 0x52, 0xda, 0xf5, 0x49, 0xcb, 0xed, 0x7b, 0x2d, 0x37, 0x08, 0x68, 0xe4, 0x46, 0x1e, - 0x0d, 0x94, 0x4c, 0xe7, 0x36, 0x54, 0xee, 0x91, 0x80, 0x30, 0x8f, 0xa1, 0x6b, 0x50, 0x75, 0x77, - 0x77, 0xe9, 0x20, 0x88, 0x58, 0xd3, 0xba, 0x54, 0x98, 0x9d, 0x98, 0x3f, 0x33, 0x27, 0xb7, 0x5f, - 0x90, 0xe8, 0xc5, 0xe2, 0x6f, 0x9f, 0x5d, 0xcc, 0xe1, 0x98, 0xcb, 0xd9, 0x83, 0xfc, 0xf6, 0x01, - 0xaa, 0x43, 0xe1, 0x11, 0x39, 0x6c, 0x5a, 0x97, 0xac, 0xd9, 0x49, 0xcc, 0x3f, 0xd1, 0x79, 0xb0, - 0x99, 0xd7, 0x0d, 0xdc, 0x68, 0x10, 0x92, 0x66, 0x5e, 0xe0, 0x87, 0x08, 0x74, 0x0d, 0x2a, 0x7d, - 0xf7, 0xd0, 0xa7, 0x6e, 0xa7, 0x59, 0xb8, 0x64, 0xcd, 0x4e, 0xcc, 0xd7, 0xd5, 0x36, 0xdb, 0x07, - 0x9b, 0x12, 0xaf, 0x36, 0xd2, 0x6c, 0xce, 0xf7, 0x4b, 0x60, 0xc7, 0x44, 0xd4, 0x80, 0x52, 0x40, - 0x83, 0x5d, 0x22, 0x76, 0x2c, 0x62, 0x09, 0xa0, 0xb7, 0xa1, 0x1c, 0x1d, 0x6c, 0x91, 0xa0, 0x23, - 0x36, 0x9c, 0x98, 0xaf, 0xc5, 0x42, 0x39, 0x72, 0x25, 0x87, 0x15, 0x19, 0x7d, 0x13, 0x50, 0x74, - 0xb0, 0x14, 0x12, 0x37, 0x22, 0xcb, 0xa4, 0xef, 0xd3, 0xc3, 0x1e, 0x09, 0x22, 0xa5, 0xc9, 0x1b, - 0xf1, 0xa2, 0x34, 0xc3, 0x4a, 0x0e, 0x67, 0x2c, 0x43, 0x77, 0xa0, 0xa6, 0xb1, 0x1b, 0x61, 0x87, - 0x84, 0xcd, 0xa2, 0x90, 0xd3, 0x48, 0xc9, 0x11, 0xb4, 0x95, 0x1c, 0x4e, 0x32, 0xa3, 0x75, 0x98, - 0xd6, 0x88, 0xbb, 0x03, 0x7f, 0xcf, 0xf3, 0x7d, 0xa1, 0x4b, 0x49, 0xc8, 0x98, 0x49, 0xc9, 0x30, - 0x38, 0x56, 0x72, 0x38, 0x6b, 0xa1, 0xa9, 0xcd, 0x1a, 0x71, 0x19, 0x69, 0x96, 0x33, 0xb5, 0x11, - 0x34, 0x53, 0x1b, 0x81, 0x40, 0x6d, 0xa8, 0x6b, 0xc4, 0x66, 0x48, 0xf7, 0x3d, 0x6e, 0x4e, 0x45, - 0x08, 0x78, 0x3d, 0x25, 0x40, 0x93, 0x57, 0x72, 0x78, 0x64, 0x09, 0x5a, 0x81, 0xa9, 0xe8, 0x60, - 0xc9, 0xa7, 0xcc, 0x74, 0x6f, 0x55, 0xc8, 0x69, 0x0e, 0xe5, 0x24, 0xe9, 0x2b, 0x39, 0x3c, 0xba, - 0x48, 0x45, 0x8a, 0x23, 0x4d, 0xef, 0xd8, 0xe9, 0x48, 0xa5, 0x18, 0x54, 0xa4, 0x52, 0x58, 0x74, - 0x13, 0x26, 0x15, 0x56, 0xba, 0x06, 0x84, 0x98, 0xe9, 0xa4, 0x18, 0xed, 0x99, 0x04, 0xeb, 0xa2, - 0x1d, 0x27, 0xac, 0xf3, 0x03, 0x0b, 0x2a, 0xaa, 0x1a, 0xd0, 0x7d, 0xa8, 0xb8, 0x9d, 0x4e, 0x48, - 0x18, 0x93, 0xb9, 0xbf, 0x78, 0x8d, 0x67, 0xed, 0x9f, 0x9e, 0x5d, 0x9c, 0x35, 0x0a, 0x94, 0xee, - 0x87, 0xbb, 0xfe, 0xa3, 0x96, 0xfb, 0xc8, 0x65, 0x0f, 0x65, 0x31, 0xb7, 0x76, 0x5c, 0x46, 0xe6, - 0x16, 0x0f, 0x23, 0xc2, 0xb0, 0x16, 0x80, 0x9a, 0x50, 0xd9, 0x71, 0x7d, 0x97, 0x67, 0x75, 0x5e, - 0x64, 0xb5, 0x06, 0x87, 0xd9, 0x5e, 0x30, 0xb2, 0xfd, 0x56, 0xf1, 0x6f, 0xbf, 0xb8, 0x68, 0x39, - 0xbf, 0xb2, 0xa0, 0x2c, 0xf3, 0x1b, 0x2d, 0x43, 0x71, 0x2f, 0xa4, 0xbd, 0x13, 0x6b, 0x22, 0x56, - 0xa3, 0x0f, 0x21, 0x1f, 0x51, 0x59, 0xb1, 0x27, 0x90, 0x91, 0x8f, 0x28, 0x3a, 0x07, 0x65, 0xb7, - 0xc7, 0xdd, 0xa3, 0xf4, 0x55, 0x90, 0xf3, 0x4f, 0x0b, 0xaa, 0x71, 0x8a, 0x9c, 0xa6, 0xe7, 0xee, - 0x42, 0x89, 0x7e, 0x12, 0x90, 0xf0, 0xc4, 0x5a, 0xcb, 0xe5, 0x3c, 0x02, 0x0f, 0x29, 0x8b, 0x1e, - 0xe0, 0x55, 0xa1, 0xb9, 0x8d, 0x35, 0x88, 0xbe, 0x0e, 0xe0, 0x46, 0x51, 0xe8, 0xed, 0x0c, 0x22, - 0xc2, 0x9a, 0x45, 0xd1, 0x19, 0x75, 0x26, 0x6b, 0x93, 0x16, 0x34, 0x83, 0x6a, 0x5d, 0xc6, 0x0a, - 0x15, 0xab, 0x0f, 0xc1, 0xd6, 0xcc, 0x0c, 0x5d, 0x07, 0xbb, 0xaf, 0x01, 0xd5, 0x6b, 0xcf, 0xa6, - 0x24, 0x2a, 0x41, 0x43, 0x3e, 0xe7, 0x77, 0x16, 0xd4, 0xd3, 0x15, 0x38, 0x34, 0xdf, 0x3a, 0x35, - 0xf3, 0xf3, 0x2f, 0x32, 0xbf, 0x70, 0x5c, 0xf3, 0x87, 0x09, 0x5c, 0x34, 0x12, 0xd8, 0xc1, 0x30, - 0x89, 0x09, 0xa3, 0x83, 0x70, 0x97, 0x3c, 0x08, 0xbc, 0x88, 0x1f, 0x22, 0x4b, 0x9b, 0x0f, 0x84, - 0x15, 0x35, 0xcc, 0x3f, 0x79, 0x26, 0xf5, 0x48, 0x8f, 0x86, 0x87, 0xaa, 0x22, 0x14, 0x84, 0x10, - 0x14, 0x3b, 0x1e, 0x7b, 0xa4, 0xf2, 0x4b, 0x7c, 0x2b, 0x17, 0xf7, 0xa1, 0xa6, 0x65, 0xde, 0x0b, - 0xe9, 0xa0, 0x8f, 0xae, 0x42, 0x71, 0x10, 0x78, 0x91, 0x90, 0x3a, 0xac, 0x75, 0x73, 0x5f, 0xa5, - 0xaf, 0x60, 0xe3, 0x9a, 0x8a, 0xca, 0x16, 0x1b, 0xd6, 0xb0, 0x04, 0x38, 0xb6, 0x1f, 0x7a, 0xc3, - 0x02, 0x14, 0x80, 0xda, 0x71, 0x09, 0xa6, 0x46, 0x5c, 0xc0, 0x15, 0x0c, 0xdc, 0x9e, 0x3c, 0x9e, - 0x6c, 0x2c, 0xbe, 0xb9, 0x90, 0x7d, 0xd7, 0x1f, 0x10, 0xe5, 0x5c, 0x09, 0x28, 0x21, 0x3f, 0xb3, - 0xc0, 0x16, 0xfa, 0x6e, 0xf5, 0xc9, 0x6e, 0xe6, 0xea, 0x45, 0x98, 0x0c, 0xc9, 0xe3, 0x81, 0x17, - 0x12, 0xde, 0xca, 0x58, 0x33, 0xff, 0x52, 0x41, 0x48, 0xac, 0x41, 0x37, 0xc0, 0x0e, 0x95, 0xe1, - 0x3a, 0x8a, 0x8d, 0x94, 0x43, 0x84, 0x12, 0x3a, 0xef, 0x62, 0x66, 0xe7, 0x08, 0xa6, 0x86, 0x4d, - 0x59, 0xf0, 0xac, 0x2e, 0xa3, 0x4d, 0x80, 0xce, 0xb0, 0xbd, 0x9f, 0x34, 0xf9, 0x0c, 0x19, 0x3c, - 0x03, 0x18, 0x79, 0xac, 0x82, 0xcd, 0x3f, 0x6f, 0x15, 0x7f, 0xf2, 0xf3, 0x8b, 0x39, 0xe7, 0x1f, - 0x79, 0x38, 0x9b, 0xda, 0x1f, 0xcd, 0x43, 0xde, 0xeb, 0xa8, 0xb0, 0x6a, 0x37, 0x8c, 0xe8, 0xb8, - 0x58, 0xe5, 0xfa, 0x7c, 0xfe, 0xec, 0xa2, 0x85, 0xf3, 0x5e, 0x27, 0x76, 0x6c, 0xde, 0x70, 0xec, - 0x0c, 0x54, 0x29, 0x3f, 0x89, 0xb7, 0xb7, 0xd7, 0x44, 0x78, 0x0b, 0x38, 0x86, 0xd1, 0x02, 0x94, - 0x58, 0xe4, 0x46, 0x32, 0x6f, 0xcf, 0xcc, 0x5f, 0xce, 0xde, 0x26, 0x0d, 0x6f, 0xf1, 0x25, 0x58, - 0xae, 0x1c, 0x89, 0x5b, 0xe9, 0x55, 0xe3, 0x56, 0x3e, 0x4e, 0xdc, 0x6e, 0x42, 0x23, 0x4b, 0x39, - 0x54, 0x85, 0xe2, 0xc6, 0x66, 0x7b, 0xbd, 0x9e, 0x43, 0x13, 0x50, 0xd9, 0xc0, 0xcb, 0x6d, 0xdc, - 0x5e, 0xae, 0x5b, 0x08, 0xa0, 0xbc, 0xb4, 0xb6, 0xb1, 0xd5, 0x5e, 0xae, 0x17, 0xe2, 0x96, 0x55, - 0x4f, 0x09, 0x60, 0xe8, 0x0a, 0x94, 0xbc, 0x88, 0xf4, 0x74, 0xd7, 0x3a, 0x97, 0xed, 0x15, 0x2c, - 0x99, 0x9c, 0xa7, 0x79, 0x00, 0xe3, 0x40, 0x3f, 0xcd, 0xbe, 0xbf, 0x02, 0xe5, 0x88, 0x04, 0xae, - 0xaa, 0xd6, 0x93, 0x88, 0x52, 0xeb, 0xd1, 0x07, 0x3a, 0xd0, 0x05, 0x11, 0xe8, 0xff, 0x1f, 0x31, - 0xc9, 0xf8, 0x4c, 0x84, 0xf7, 0x3e, 0x54, 0x3e, 0x26, 0x21, 0xf3, 0x68, 0x20, 0x72, 0xe4, 0x44, - 0xe6, 0x28, 0x01, 0xce, 0x3b, 0x66, 0x92, 0xcb, 0x38, 0x01, 0x94, 0x17, 0x96, 0xb6, 0x57, 0x3f, - 0x6e, 0xd7, 0x73, 0x46, 0x70, 0xf2, 0x2a, 0x38, 0x77, 0x60, 0x62, 0xb8, 0x80, 0xa1, 0xab, 0xc9, - 0xb8, 0x4c, 0x8d, 0x18, 0xa1, 0xf2, 0x43, 0x05, 0xe6, 0x7b, 0x79, 0x40, 0xa3, 0x97, 0x5c, 0xc3, - 0xa9, 0xd6, 0x2b, 0x3a, 0x35, 0xee, 0xfa, 0x79, 0xf3, 0x92, 0xfe, 0xa2, 0x7a, 0xbb, 0x0f, 0x95, - 0xfd, 0x57, 0xf5, 0xa6, 0x12, 0x80, 0x66, 0xa1, 0xdc, 0x15, 0xf9, 0xaa, 0x4a, 0x4e, 0x4f, 0x18, - 0x71, 0x9b, 0xc5, 0x8a, 0xee, 0xfc, 0xc5, 0x82, 0xa9, 0x91, 0xeb, 0xe8, 0x97, 0xd0, 0xdd, 0x6e, - 0x43, 0x39, 0x24, 0x2e, 0xa3, 0x81, 0x70, 0xc8, 0x99, 0xf9, 0x37, 0xc7, 0x5d, 0x85, 0xe7, 0xb0, - 0x60, 0x5b, 0xa2, 0x1d, 0x82, 0xd5, 0x12, 0xe7, 0x36, 0xc0, 0x10, 0x8b, 0x6c, 0x28, 0x3d, 0x58, - 0xdf, 0x6a, 0x6f, 0xd7, 0x73, 0xa8, 0x0e, 0x93, 0xdb, 0xed, 0xf5, 0x85, 0xf5, 0xed, 0xef, 0x88, - 0xec, 0xa8, 0x5b, 0x1c, 0xb3, 0xba, 0xbe, 0xf5, 0xe0, 0xee, 0xdd, 0xd5, 0xa5, 0xd5, 0xf6, 0xfa, - 0x76, 0x3d, 0xef, 0x7c, 0x66, 0x41, 0x45, 0x8c, 0x1b, 0x5f, 0x4a, 0xd7, 0x6e, 0x40, 0x49, 0x78, - 0x52, 0xc7, 0x59, 0x00, 0xba, 0x97, 0x17, 0xd2, 0xbd, 0xfc, 0xd7, 0x16, 0x94, 0xe4, 0xe8, 0x33, - 0x6b, 0x74, 0x70, 0x3d, 0x66, 0x2a, 0x2d, 0x53, 0x7d, 0xbb, 0x01, 0x25, 0x12, 0x74, 0x16, 0x64, - 0x9d, 0x17, 0xb0, 0x04, 0x78, 0xbe, 0x9b, 0x45, 0xfb, 0xba, 0x29, 0x42, 0xfe, 0x9a, 0xa5, 0xea, - 0xb4, 0x00, 0x86, 0xc8, 0x64, 0x07, 0xfc, 0x68, 0x61, 0x7b, 0x69, 0x25, 0xd5, 0x01, 0x75, 0x91, - 0x6d, 0x40, 0x2d, 0x31, 0xc2, 0xbd, 0xaa, 0xda, 0xce, 0x15, 0x28, 0x0b, 0x76, 0x86, 0x9c, 0x64, - 0xc1, 0x4e, 0x9a, 0xc2, 0x74, 0x95, 0x3e, 0xb7, 0xa0, 0x66, 0xcc, 0x30, 0xff, 0xc1, 0x00, 0x36, - 0xa0, 0x24, 0x0a, 0x53, 0x5f, 0x7a, 0x04, 0x80, 0xd6, 0xa0, 0xaa, 0xaf, 0xa3, 0x27, 0xae, 0xd1, - 0x58, 0x82, 0x4a, 0x89, 0xdf, 0x5b, 0x30, 0x61, 0xce, 0x69, 0x73, 0x86, 0x87, 0xf5, 0x41, 0x97, - 0xf0, 0xc1, 0xa8, 0x9f, 0xe5, 0xf5, 0x2c, 0x6f, 0x5c, 0xcf, 0xd0, 0xcd, 0x64, 0x7a, 0xbc, 0x39, - 0x2a, 0xc8, 0xfc, 0x4e, 0xa4, 0xca, 0xfb, 0x50, 0x4f, 0x93, 0x5e, 0x3e, 0x61, 0x6e, 0xc0, 0xa4, - 0xb1, 0x98, 0xa1, 0xd9, 0x64, 0x94, 0xd1, 0xa8, 0x1e, 0x3a, 0xd6, 0xdf, 0x86, 0xe9, 0x8c, 0x49, - 0xff, 0x74, 0xdc, 0xe1, 0x2c, 0x8b, 0x6e, 0x9f, 0x1e, 0x89, 0x8f, 0x29, 0xdb, 0xf9, 0xb3, 0x05, - 0x15, 0x31, 0x11, 0xff, 0x4f, 0x26, 0xe2, 0x4f, 0x2d, 0x28, 0xc9, 0x87, 0x90, 0xac, 0x22, 0x57, - 0x76, 0xbf, 0x54, 0xf2, 0x8d, 0xe9, 0x4d, 0x42, 0x84, 0xfc, 0x4d, 0x24, 0xdc, 0x5b, 0x00, 0x43, - 0xe4, 0xb8, 0x53, 0xdf, 0x6c, 0x45, 0xa7, 0xa2, 0x25, 0x4f, 0x55, 0xf3, 0xd5, 0xe3, 0xe5, 0xe5, - 0xf1, 0x26, 0x26, 0x08, 0x63, 0x9b, 0x98, 0xa0, 0xea, 0xc4, 0xfe, 0x65, 0x1e, 0xce, 0x7e, 0xe4, - 0x06, 0xde, 0x1e, 0x61, 0x11, 0x26, 0x8f, 0x07, 0x84, 0x45, 0x68, 0xd1, 0x78, 0x32, 0x3c, 0x41, - 0xe8, 0xc4, 0x23, 0xe3, 0xfa, 0xc8, 0x23, 0xe3, 0x09, 0x24, 0x19, 0xcf, 0x92, 0xc9, 0x8c, 0x2e, - 0x9c, 0x42, 0x46, 0x5f, 0x86, 0x6a, 0x4f, 0x19, 0xae, 0xde, 0x05, 0xf5, 0x90, 0x1f, 0xfb, 0x23, - 0x66, 0x70, 0x6e, 0x40, 0x55, 0x63, 0xd1, 0x95, 0xf8, 0xfa, 0x62, 0x25, 0x2e, 0xfc, 0x9a, 0x41, - 0xde, 0xb1, 0xf5, 0x15, 0xe6, 0x5b, 0x50, 0x4b, 0x10, 0x32, 0x47, 0xc8, 0x79, 0xa8, 0x32, 0x12, - 0xee, 0x7b, 0x7c, 0x8a, 0xc8, 0x27, 0xae, 0xee, 0x7a, 0xed, 0x96, 0x24, 0xe3, 0x98, 0xcf, 0xf9, - 0xa3, 0x35, 0x8c, 0x9c, 0xa2, 0x8e, 0x1b, 0x6e, 0xbd, 0x9e, 0xdb, 0x8d, 0x87, 0x5b, 0x01, 0x70, - 0x4e, 0x37, 0xec, 0xca, 0x59, 0xd3, 0xc6, 0xe2, 0x9b, 0xdf, 0x0b, 0x48, 0xb0, 0x2f, 0xde, 0x50, - 0x6c, 0xcc, 0x3f, 0xd1, 0xdb, 0x6a, 0x44, 0x2f, 0x8d, 0x1d, 0xd1, 0xd3, 0xc3, 0x79, 0xd9, 0x1c, - 0xce, 0xdf, 0x83, 0x32, 0x39, 0xe8, 0x53, 0x46, 0x9a, 0x15, 0x61, 0xd4, 0xf9, 0x6c, 0xa3, 0xda, - 0x82, 0x07, 0x2b, 0x5e, 0x7e, 0x0d, 0x79, 0x2d, 0x93, 0x83, 0x2b, 0xdd, 0xa7, 0x61, 0xa4, 0xde, - 0x21, 0xc4, 0x37, 0x72, 0x60, 0x92, 0x1c, 0x44, 0x24, 0x0c, 0x5c, 0x7f, 0x93, 0xd3, 0xe4, 0xeb, - 0x40, 0x02, 0x27, 0x4b, 0x8c, 0x46, 0x54, 0xbd, 0x1d, 0x49, 0x00, 0x35, 0xa1, 0xa2, 0x9c, 0x29, - 0xe2, 0x6f, 0x63, 0x0d, 0xa2, 0x73, 0x50, 0xee, 0xfa, 0x74, 0xc7, 0xf5, 0x85, 0xe1, 0x55, 0xac, - 0x20, 0x2e, 0xe7, 0x21, 0x65, 0x91, 0x9c, 0xf4, 0x6c, 0x2c, 0x01, 0xa7, 0x02, 0xa5, 0x76, 0xaf, - 0x1f, 0x1d, 0x3a, 0x77, 0x60, 0x92, 0xeb, 0x2b, 0xef, 0x31, 0x03, 0xc6, 0xd5, 0xdd, 0xa5, 0x1d, - 0x19, 0x8d, 0x12, 0x16, 0xdf, 0x7c, 0xd3, 0x1e, 0x61, 0x6c, 0x18, 0x0f, 0x0d, 0x3a, 0xef, 0x40, - 0x4d, 0xde, 0x33, 0x31, 0x61, 0x7d, 0x1a, 0x24, 0x58, 0xad, 0x24, 0xeb, 0xa7, 0x80, 0xe2, 0x9e, - 0x34, 0x60, 0xba, 0x6c, 0x2f, 0x8c, 0x34, 0x7d, 0x7b, 0x7c, 0x0b, 0xb7, 0x33, 0x5b, 0xb8, 0xad, - 0x5b, 0xf8, 0x4c, 0xaa, 0x85, 0xdb, 0xc3, 0x86, 0xec, 0xb4, 0x61, 0x3a, 0xb1, 0x3b, 0xd7, 0x96, - 0x11, 0x34, 0x67, 0xe4, 0x70, 0xf2, 0x3c, 0x35, 0xb9, 0x87, 0xf9, 0xfb, 0x43, 0x0b, 0x1a, 0x2a, - 0xbc, 0x49, 0x3b, 0xb2, 0x92, 0x38, 0x69, 0x5b, 0x7e, 0xbc, 0x6d, 0x85, 0x4c, 0xdb, 0x8a, 0xe3, - 0x6c, 0x2b, 0xa5, 0x6c, 0x7b, 0x6e, 0xc1, 0x6b, 0x29, 0xa5, 0x62, 0xf3, 0x10, 0xdd, 0xe1, 0xca, - 0x93, 0xce, 0x3d, 0x12, 0x90, 0x50, 0xfc, 0x4f, 0x23, 0x74, 0x2c, 0xe0, 0x0c, 0x0a, 0xdf, 0x25, - 0x24, 0x7d, 0xdf, 0xdb, 0x75, 0x99, 0xd0, 0xb7, 0x84, 0x63, 0x18, 0xcd, 0xc2, 0xd9, 0x41, 0xbf, - 0xe3, 0x46, 0xa4, 0x83, 0x35, 0x4b, 0x41, 0xb0, 0xa4, 0xd1, 0xe8, 0x2d, 0xa8, 0x85, 0xc4, 0xed, - 0x1c, 0xc6, 0x7c, 0x45, 0xc1, 0x97, 0x44, 0xa2, 0x2b, 0x30, 0xe5, 0xee, 0xbb, 0x9e, 0xef, 0xee, - 0xf8, 0x24, 0xe6, 0x2c, 0x09, 0xce, 0x51, 0x82, 0xf3, 0x1b, 0x0b, 0x60, 0x8d, 0x76, 0xff, 0x0b, - 0xdc, 0x8d, 0x2e, 0x43, 0x85, 0xf6, 0xc5, 0x1f, 0x5e, 0xea, 0xcf, 0x10, 0x3d, 0x19, 0xaf, 0xd1, - 0xee, 0x86, 0x24, 0x60, 0xcd, 0xe1, 0x2c, 0x0a, 0xb5, 0x15, 0x1a, 0x9d, 0x07, 0x3b, 0x72, 0x3d, - 0x7f, 0xcd, 0x0b, 0x08, 0x53, 0x61, 0x18, 0x22, 0x78, 0x05, 0xef, 0x51, 0xdf, 0xa7, 0x9f, 0x08, - 0xe5, 0xab, 0x58, 0x41, 0xce, 0x75, 0x28, 0xac, 0xd1, 0x6e, 0xa6, 0xcd, 0xe3, 0x2b, 0xf3, 0x2b, - 0x30, 0x21, 0xfc, 0xa5, 0x32, 0xc1, 0xe1, 0xc3, 0x22, 0x1b, 0xf8, 0xfa, 0xe5, 0x12, 0x86, 0x3a, - 0x63, 0x45, 0x71, 0x6e, 0xc2, 0x84, 0x91, 0xf5, 0x99, 0xfb, 0x9d, 0x83, 0x32, 0x13, 0x54, 0xb5, - 0x9d, 0x82, 0x9c, 0x77, 0x01, 0xc5, 0x07, 0x06, 0x89, 0xcf, 0xe4, 0x06, 0x94, 0x7c, 0xf1, 0xcf, - 0x88, 0xfc, 0x23, 0x4f, 0x02, 0xce, 0x22, 0x4c, 0x27, 0x78, 0x95, 0x86, 0xe6, 0xd1, 0x66, 0xfd, - 0xbb, 0xa3, 0xed, 0x2a, 0x4c, 0xb5, 0xc3, 0x70, 0x35, 0xd8, 0x77, 0x7d, 0xaf, 0xa3, 0xff, 0xc5, - 0x1b, 0xdf, 0x7b, 0xae, 0x40, 0x5d, 0xb0, 0xcb, 0xf6, 0xda, 0x0e, 0x43, 0x1a, 0xbe, 0x80, 0xbb, - 0x05, 0xd3, 0xed, 0x30, 0xd4, 0x07, 0xc6, 0x3a, 0x8d, 0xee, 0xd2, 0x41, 0xf0, 0x02, 0xf1, 0xf3, - 0x3f, 0x2e, 0x42, 0x65, 0xc9, 0x1f, 0xb0, 0x88, 0x84, 0xe8, 0x0e, 0x94, 0x95, 0xff, 0xf4, 0xd5, - 0x45, 0xf4, 0xd9, 0x19, 0x7d, 0x0e, 0x99, 0xcd, 0xd6, 0x39, 0xfb, 0xdd, 0x3f, 0xfc, 0xf5, 0x47, - 0x79, 0x1b, 0x55, 0x5a, 0xd2, 0x8f, 0x68, 0x0d, 0xca, 0xb2, 0x9f, 0xa2, 0xf4, 0x59, 0xaa, 0x7c, - 0x3a, 0xd3, 0x48, 0x3c, 0xc3, 0xa8, 0xb6, 0xeb, 0x34, 0x84, 0xa0, 0x33, 0x8e, 0xdd, 0xd2, 0x2e, - 0xba, 0x65, 0xbd, 0x8b, 0x3e, 0x4d, 0x06, 0xf4, 0x8d, 0x8c, 0xd6, 0xa6, 0xa4, 0xce, 0x64, 0x91, - 0x64, 0x60, 0x9c, 0xaf, 0x0a, 0xd9, 0xd7, 0xd0, 0x5c, 0x4b, 0xc4, 0xaf, 0xf5, 0x64, 0x58, 0x53, - 0x47, 0xad, 0x27, 0xa2, 0x8a, 0x8e, 0x5a, 0x4f, 0x44, 0xdd, 0x1c, 0xb5, 0x9e, 0xe8, 0x32, 0x39, - 0x42, 0x9f, 0x59, 0x50, 0x4b, 0xb4, 0x25, 0xf4, 0x7f, 0x86, 0x0f, 0xd2, 0x1d, 0x74, 0xe6, 0x7c, - 0x36, 0x51, 0x29, 0xf1, 0x35, 0xa1, 0xc4, 0x07, 0xe8, 0xfd, 0xe3, 0x29, 0xd1, 0x7a, 0xc2, 0xd3, - 0xf6, 0x08, 0x0d, 0x60, 0x42, 0xc9, 0x5d, 0xa3, 0x5d, 0x86, 0x8c, 0x8a, 0xd5, 0xdb, 0x1b, 0x05, - 0xe1, 0xb4, 0xc5, 0x66, 0xdf, 0x70, 0xde, 0x6b, 0xf9, 0xb4, 0xcb, 0x8e, 0xb9, 0xd7, 0x2d, 0x5d, - 0xfb, 0xd7, 0xac, 0xc5, 0xfa, 0xd3, 0xe7, 0x17, 0xac, 0xbf, 0x3f, 0xbf, 0x60, 0x7d, 0xfe, 0xc5, - 0x05, 0xeb, 0xe9, 0x17, 0x17, 0xac, 0x9d, 0xb2, 0x38, 0xc6, 0xaf, 0xff, 0x2b, 0x00, 0x00, 0xff, - 0xff, 0xad, 0x89, 0x7b, 0x1c, 0x8c, 0x1f, 0x00, 0x00, + // 2372 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xdc, 0x59, 0xcf, 0x6f, 0x1b, 0xc7, + 0xf5, 0xe7, 0x92, 0x5c, 0x92, 0xfb, 0x24, 0xda, 0xd4, 0x88, 0x49, 0x18, 0x7d, 0x0d, 0x3b, 0xdf, + 0x4d, 0x80, 0x28, 0xb1, 0x2d, 0xaa, 0x72, 0xd2, 0xf8, 0x57, 0xdb, 0xe8, 0x07, 0x6d, 0xc9, 0x55, + 0x24, 0x61, 0x24, 0xa5, 0x87, 0x1e, 0x8a, 0x95, 0x38, 0xa2, 0x17, 0x5e, 0xee, 0xd0, 0x3b, 0x4b, + 0x45, 0x82, 0xa3, 0x4b, 0x0f, 0x2d, 0x82, 0xde, 0x5a, 0xa0, 0xe8, 0xa1, 0x05, 0x5a, 0xa0, 0x87, + 0x5e, 0x7a, 0xec, 0xff, 0x50, 0xb4, 0x97, 0x00, 0x05, 0x0a, 0xa3, 0x05, 0x5c, 0x38, 0xe8, 0xa1, + 0xc7, 0xde, 0x7a, 0x2b, 0x8a, 0xf9, 0xb5, 0xbf, 0xb8, 0x74, 0x6d, 0x59, 0x29, 0x8a, 0x5e, 0x88, + 0x7d, 0x6f, 0xde, 0xbc, 0x79, 0xf3, 0x7e, 0x7c, 0x66, 0xde, 0x10, 0xa6, 0xc2, 0xe3, 0x01, 0x61, + 0x6d, 0xf1, 0x3b, 0x37, 0x08, 0x68, 0x48, 0x91, 0x29, 0x88, 0x99, 0xab, 0x3d, 0x37, 0xbc, 0x3f, + 0xdc, 0x9b, 0xdb, 0xa7, 0xfd, 0x76, 0x8f, 0xf6, 0x68, 0x5b, 0x8c, 0xee, 0x0d, 0x0f, 0x04, 0x25, + 0x08, 0xf1, 0x25, 0x67, 0xcd, 0x5c, 0xe8, 0x51, 0xda, 0xf3, 0x48, 0xdb, 0x19, 0xb8, 0x6d, 0xc7, + 0xf7, 0x69, 0xe8, 0x84, 0x2e, 0xf5, 0x95, 0x4e, 0xfb, 0x16, 0x54, 0xef, 0x12, 0x9f, 0x30, 0x97, + 0xa1, 0x79, 0xa8, 0x39, 0xfb, 0xfb, 0x74, 0xe8, 0x87, 0xac, 0x65, 0xbc, 0x51, 0x9a, 0x9d, 0x58, + 0x38, 0x37, 0x27, 0x97, 0x5f, 0x94, 0xec, 0xa5, 0xf2, 0x6f, 0x9f, 0x5c, 0x2a, 0xe0, 0x48, 0xca, + 0x3e, 0x80, 0xe2, 0xce, 0x11, 0x6a, 0x40, 0xe9, 0x01, 0x39, 0x6e, 0x19, 0x6f, 0x18, 0xb3, 0x93, + 0x98, 0x7f, 0xa2, 0x0b, 0x60, 0x31, 0xb7, 0xe7, 0x3b, 0xe1, 0x30, 0x20, 0xad, 0xa2, 0xe0, 0xc7, + 0x0c, 0x34, 0x0f, 0xd5, 0x81, 0x73, 0xec, 0x51, 0xa7, 0xdb, 0x2a, 0xbd, 0x61, 0xcc, 0x4e, 0x2c, + 0x34, 0xd4, 0x32, 0x3b, 0x47, 0x5b, 0x92, 0xaf, 0x16, 0xd2, 0x62, 0xf6, 0xf7, 0x4d, 0xb0, 0xa2, + 0x41, 0xd4, 0x04, 0xd3, 0xa7, 0xfe, 0x3e, 0x11, 0x2b, 0x96, 0xb1, 0x24, 0xd0, 0xdb, 0x50, 0x09, + 0x8f, 0xb6, 0x89, 0xdf, 0x15, 0x0b, 0x4e, 0x2c, 0xd4, 0x23, 0xa5, 0x9c, 0xb9, 0x5a, 0xc0, 0x6a, + 0x18, 0x7d, 0x13, 0x50, 0x78, 0xb4, 0x1c, 0x10, 0x27, 0x24, 0x2b, 0x64, 0xe0, 0xd1, 0xe3, 0x3e, + 0xf1, 0x43, 0x65, 0xc9, 0xeb, 0xd1, 0xa4, 0xac, 0xc0, 0x6a, 0x01, 0xe7, 0x4c, 0x43, 0xb7, 0xa1, + 0xae, 0xb9, 0x9b, 0x41, 0x97, 0x04, 0xad, 0xb2, 0xd0, 0xd3, 0xcc, 0xe8, 0x11, 0x63, 0xab, 0x05, + 0x9c, 0x16, 0x46, 0x1b, 0x30, 0xad, 0x19, 0x77, 0x86, 0xde, 0x81, 0xeb, 0x79, 0xc2, 0x16, 0x53, + 0xe8, 0x98, 0xc9, 0xe8, 0x48, 0x48, 0xac, 0x16, 0x70, 0xde, 0xc4, 0xa4, 0x35, 0xeb, 0xc4, 0x61, + 0xa4, 0x55, 0xc9, 0xb5, 0x46, 0x8c, 0x25, 0xad, 0x11, 0x0c, 0xd4, 0x81, 0x86, 0x66, 0x6c, 0x05, + 0xf4, 0xd0, 0xe5, 0xdb, 0xa9, 0x0a, 0x05, 0xaf, 0x65, 0x14, 0xe8, 0xe1, 0xd5, 0x02, 0x1e, 0x99, + 0x82, 0x56, 0x61, 0x2a, 0x3c, 0x5a, 0xf6, 0x28, 0x4b, 0xba, 0xb7, 0x26, 0xf4, 0xb4, 0x62, 0x3d, + 0xe9, 0xf1, 0xd5, 0x02, 0x1e, 0x9d, 0xa4, 0x22, 0xc5, 0x99, 0x49, 0xef, 0x58, 0xd9, 0x48, 0x65, + 0x04, 0x54, 0xa4, 0x32, 0x5c, 0x74, 0x03, 0x26, 0x15, 0x57, 0xba, 0x06, 0x84, 0x9a, 0xe9, 0xb4, + 0x1a, 0xed, 0x99, 0x94, 0xe8, 0x92, 0x15, 0x25, 0xac, 0xfd, 0x03, 0x03, 0xaa, 0xaa, 0x1a, 0xd0, + 0x3d, 0xa8, 0x3a, 0xdd, 0x6e, 0x40, 0x18, 0x93, 0xb9, 0xbf, 0x34, 0xcf, 0xb3, 0xf6, 0x4f, 0x4f, + 0x2e, 0xcd, 0x26, 0x0a, 0x94, 0x1e, 0x06, 0xfb, 0xde, 0x83, 0xb6, 0xf3, 0xc0, 0x61, 0xf7, 0x65, + 0x31, 0xb7, 0xf7, 0x1c, 0x46, 0xe6, 0x96, 0x8e, 0x43, 0xc2, 0xb0, 0x56, 0x80, 0x5a, 0x50, 0xdd, + 0x73, 0x3c, 0x87, 0x67, 0x75, 0x51, 0x64, 0xb5, 0x26, 0xe3, 0x6c, 0x2f, 0x25, 0xb2, 0xfd, 0x66, + 0xf9, 0x6f, 0xbf, 0xb8, 0x64, 0xd8, 0xbf, 0x32, 0xa0, 0x22, 0xf3, 0x1b, 0xad, 0x40, 0xf9, 0x20, + 0xa0, 0xfd, 0x53, 0x5b, 0x22, 0x66, 0xa3, 0x0f, 0xa1, 0x18, 0x52, 0x59, 0xb1, 0xa7, 0xd0, 0x51, + 0x0c, 0x29, 0x7a, 0x15, 0x2a, 0x4e, 0x9f, 0xbb, 0x47, 0xd9, 0xab, 0x28, 0xfb, 0x9f, 0x06, 0xd4, + 0xa2, 0x14, 0x39, 0x4b, 0xcf, 0xdd, 0x01, 0x93, 0x7e, 0xe2, 0x93, 0xe0, 0xd4, 0x56, 0xcb, 0xe9, + 0x3c, 0x02, 0xf7, 0x29, 0x0b, 0x77, 0xf1, 0x9a, 0xb0, 0xdc, 0xc2, 0x9a, 0x44, 0x5f, 0x07, 0x70, + 0xc2, 0x30, 0x70, 0xf7, 0x86, 0x21, 0x61, 0xad, 0xb2, 0x40, 0x46, 0x9d, 0xc9, 0x7a, 0x4b, 0x8b, + 0x5a, 0x40, 0x41, 0x57, 0x62, 0x86, 0x8a, 0xd5, 0x87, 0x60, 0x69, 0x61, 0x86, 0xae, 0x81, 0x35, + 0xd0, 0x84, 0xc2, 0xda, 0xf3, 0x19, 0x8d, 0x4a, 0x51, 0x2c, 0x67, 0xff, 0xce, 0x80, 0x46, 0xb6, + 0x02, 0xe3, 0xed, 0x1b, 0x67, 0xb6, 0xfd, 0xe2, 0xb3, 0xb6, 0x5f, 0x7a, 0xd1, 0xed, 0xc7, 0x09, + 0x5c, 0x4e, 0x24, 0xb0, 0x8d, 0x61, 0x12, 0x13, 0x46, 0x87, 0xc1, 0x3e, 0xd9, 0xf5, 0xdd, 0x90, + 0x1f, 0x22, 0xcb, 0x5b, 0xbb, 0x62, 0x17, 0x75, 0xcc, 0x3f, 0x79, 0x26, 0xf5, 0x49, 0x9f, 0x06, + 0xc7, 0xaa, 0x22, 0x14, 0x85, 0x10, 0x94, 0xbb, 0x2e, 0x7b, 0xa0, 0xf2, 0x4b, 0x7c, 0x2b, 0x17, + 0x0f, 0xa0, 0xae, 0x75, 0xde, 0x0d, 0xe8, 0x70, 0x80, 0xae, 0x42, 0x79, 0xe8, 0xbb, 0xa1, 0xd0, + 0x1a, 0xd7, 0x7a, 0x72, 0x5d, 0x65, 0xaf, 0x10, 0xe3, 0x96, 0x8a, 0xca, 0x16, 0x0b, 0xd6, 0xb1, + 0x24, 0x38, 0x77, 0x10, 0xb8, 0x71, 0x01, 0x0a, 0x42, 0xad, 0xb8, 0x0c, 0x53, 0x23, 0x2e, 0xe0, + 0x06, 0xfa, 0x4e, 0x5f, 0x1e, 0x4f, 0x16, 0x16, 0xdf, 0x5c, 0xc9, 0xa1, 0xe3, 0x0d, 0x89, 0x72, + 0xae, 0x24, 0x94, 0x92, 0x9f, 0x19, 0x60, 0x09, 0x7b, 0xb7, 0x07, 0x64, 0x3f, 0x77, 0xf6, 0x12, + 0x4c, 0x06, 0xe4, 0xe1, 0xd0, 0x0d, 0x08, 0x87, 0x32, 0xd6, 0x2a, 0x3e, 0x57, 0x10, 0x52, 0x73, + 0xd0, 0x75, 0xb0, 0x02, 0xb5, 0x71, 0x1d, 0xc5, 0x66, 0xc6, 0x21, 0xc2, 0x08, 0x9d, 0x77, 0x91, + 0xb0, 0x7d, 0x02, 0x53, 0x31, 0x28, 0x0b, 0x99, 0xb5, 0x15, 0xb4, 0x05, 0xd0, 0x8d, 0xe1, 0xfd, + 0xb4, 0xc9, 0x97, 0xd0, 0xc1, 0x33, 0x80, 0x91, 0x87, 0x2a, 0xd8, 0xfc, 0xf3, 0x66, 0xf9, 0x27, + 0x3f, 0xbf, 0x54, 0xb0, 0xff, 0x51, 0x84, 0xf3, 0x99, 0xf5, 0xd1, 0x02, 0x14, 0xdd, 0xae, 0x0a, + 0xab, 0x76, 0xc3, 0x88, 0x8d, 0x4b, 0x35, 0x6e, 0xcf, 0xe7, 0x4f, 0x2e, 0x19, 0xb8, 0xe8, 0x76, + 0x23, 0xc7, 0x16, 0x13, 0x8e, 0x9d, 0x81, 0x1a, 0xe5, 0x27, 0xf1, 0xce, 0xce, 0xba, 0x08, 0x6f, + 0x09, 0x47, 0x34, 0x5a, 0x04, 0x93, 0x85, 0x4e, 0x28, 0xf3, 0xf6, 0xdc, 0xc2, 0xe5, 0xfc, 0x65, + 0xb2, 0xf4, 0x36, 0x9f, 0x82, 0xe5, 0xcc, 0x91, 0xb8, 0x99, 0x2f, 0x1b, 0xb7, 0xca, 0x8b, 0xc4, + 0xed, 0x06, 0x34, 0xf3, 0x8c, 0x43, 0x35, 0x28, 0x6f, 0x6e, 0x75, 0x36, 0x1a, 0x05, 0x34, 0x01, + 0xd5, 0x4d, 0xbc, 0xd2, 0xc1, 0x9d, 0x95, 0x86, 0x81, 0x00, 0x2a, 0xcb, 0xeb, 0x9b, 0xdb, 0x9d, + 0x95, 0x46, 0x29, 0x82, 0xac, 0x46, 0x46, 0x01, 0x43, 0x57, 0xc0, 0x74, 0x43, 0xd2, 0xd7, 0xa8, + 0xf5, 0x6a, 0xbe, 0x57, 0xb0, 0x14, 0xb2, 0x1f, 0x17, 0x01, 0x12, 0x07, 0xfa, 0x59, 0xe2, 0xfe, + 0x2a, 0x54, 0x42, 0xe2, 0x3b, 0xaa, 0x5a, 0x4f, 0xa3, 0x4a, 0xcd, 0x47, 0x1f, 0xe8, 0x40, 0x97, + 0x44, 0xa0, 0xff, 0x7f, 0x64, 0x4b, 0x89, 0xcf, 0x54, 0x78, 0xef, 0x41, 0xf5, 0x63, 0x12, 0x30, + 0x97, 0xfa, 0x22, 0x47, 0x4e, 0xb5, 0x1d, 0xa5, 0xc0, 0x7e, 0x27, 0x99, 0xe4, 0x32, 0x4e, 0x00, + 0x95, 0xc5, 0xe5, 0x9d, 0xb5, 0x8f, 0x3b, 0x8d, 0x42, 0x22, 0x38, 0x45, 0x15, 0x9c, 0xdb, 0x30, + 0x11, 0x4f, 0x60, 0xe8, 0x6a, 0x3a, 0x2e, 0x53, 0x23, 0x9b, 0x50, 0xf9, 0xa1, 0x02, 0xf3, 0xbd, + 0x22, 0xa0, 0xd1, 0x4b, 0x6e, 0xc2, 0xa9, 0xc6, 0x4b, 0x3a, 0x35, 0x42, 0xfd, 0x62, 0xf2, 0x92, + 0xfe, 0xac, 0x7a, 0xbb, 0x07, 0xd5, 0xc3, 0x97, 0xf5, 0xa6, 0x52, 0x80, 0x66, 0xa1, 0xd2, 0x13, + 0xf9, 0xaa, 0x4a, 0x4e, 0x77, 0x18, 0x11, 0xcc, 0x62, 0x35, 0x6e, 0xff, 0xc5, 0x80, 0xa9, 0x91, + 0xeb, 0xe8, 0x97, 0x80, 0x6e, 0xb7, 0xa0, 0x12, 0x10, 0x87, 0x51, 0x5f, 0x38, 0xe4, 0xdc, 0xc2, + 0x9b, 0xe3, 0xae, 0xc2, 0x73, 0x58, 0x88, 0x2d, 0xd3, 0x2e, 0xc1, 0x6a, 0x8a, 0x7d, 0x0b, 0x20, + 0xe6, 0x22, 0x0b, 0xcc, 0xdd, 0x8d, 0xed, 0xce, 0x4e, 0xa3, 0x80, 0x1a, 0x30, 0xb9, 0xd3, 0xd9, + 0x58, 0xdc, 0xd8, 0xf9, 0x8e, 0xc8, 0x8e, 0x86, 0xc1, 0x39, 0x6b, 0x1b, 0xdb, 0xbb, 0x77, 0xee, + 0xac, 0x2d, 0xaf, 0x75, 0x36, 0x76, 0x1a, 0x45, 0xfb, 0x33, 0x03, 0xaa, 0xa2, 0xdd, 0xf8, 0x52, + 0x50, 0xbb, 0x09, 0xa6, 0xf0, 0xa4, 0x8e, 0xb3, 0x20, 0x34, 0x96, 0x97, 0xb2, 0x58, 0xfe, 0x6b, + 0x03, 0x4c, 0xd9, 0xfa, 0xcc, 0x26, 0x10, 0x5c, 0xb7, 0x99, 0xca, 0xca, 0x0c, 0x6e, 0x37, 0xc1, + 0x24, 0x7e, 0x77, 0x51, 0xd6, 0x79, 0x09, 0x4b, 0x82, 0xe7, 0x7b, 0xb2, 0x68, 0x5f, 0x4b, 0xaa, + 0x90, 0xbf, 0xc9, 0x52, 0xb5, 0xdb, 0x00, 0x31, 0x33, 0x8d, 0x80, 0x1f, 0x2d, 0xee, 0x2c, 0xaf, + 0x66, 0x10, 0x50, 0x17, 0xd9, 0x26, 0xd4, 0x53, 0x2d, 0xdc, 0xcb, 0x9a, 0x6d, 0x5f, 0x81, 0x8a, + 0x10, 0x67, 0xc8, 0x4e, 0x17, 0xec, 0x64, 0x52, 0x99, 0xae, 0xd2, 0xa7, 0x06, 0xd4, 0x13, 0x3d, + 0xcc, 0x7f, 0x30, 0x80, 0x4d, 0x30, 0x45, 0x61, 0xea, 0x4b, 0x8f, 0x20, 0xd0, 0x3a, 0xd4, 0xf4, + 0x75, 0xf4, 0xd4, 0x35, 0x1a, 0x69, 0x50, 0x29, 0xf1, 0x7b, 0x03, 0x26, 0x92, 0x7d, 0xda, 0x5c, + 0xc2, 0xc3, 0xfa, 0xa0, 0x4b, 0xf9, 0x60, 0xd4, 0xcf, 0xf2, 0x7a, 0x56, 0x4c, 0x5c, 0xcf, 0xd0, + 0x8d, 0x74, 0x7a, 0xbc, 0x39, 0xaa, 0x28, 0xf9, 0x9d, 0x4a, 0x95, 0xf7, 0xa1, 0x91, 0x1d, 0x7a, + 0xfe, 0x84, 0xb9, 0x0e, 0x93, 0x89, 0xc9, 0x0c, 0xcd, 0xa6, 0xa3, 0x8c, 0x46, 0xed, 0xd0, 0xb1, + 0xfe, 0x36, 0x4c, 0xe7, 0x74, 0xfa, 0x67, 0xe3, 0x0e, 0x7b, 0x45, 0xa0, 0x7d, 0xb6, 0x25, 0x7e, + 0x41, 0xdd, 0xf6, 0x9f, 0x0d, 0xa8, 0x8a, 0x8e, 0xf8, 0x7f, 0x32, 0x11, 0x7f, 0x6a, 0x80, 0x29, + 0x1f, 0x42, 0xf2, 0x8a, 0x5c, 0xed, 0xfb, 0xb9, 0x92, 0x6f, 0x0c, 0x36, 0x09, 0x15, 0xf2, 0x37, + 0x95, 0x70, 0x6f, 0x01, 0xc4, 0xcc, 0x71, 0xa7, 0x7e, 0x12, 0x8a, 0xce, 0xc4, 0x4a, 0x9e, 0xaa, + 0xc9, 0x57, 0x8f, 0xe7, 0xd7, 0xc7, 0x41, 0x4c, 0x0c, 0x8c, 0x05, 0x31, 0x31, 0xaa, 0x13, 0xfb, + 0x97, 0x45, 0x38, 0xff, 0x91, 0xe3, 0xbb, 0x07, 0x84, 0x85, 0x98, 0x3c, 0x1c, 0x12, 0x16, 0xa2, + 0xa5, 0xc4, 0x93, 0xe1, 0x29, 0x42, 0x27, 0x1e, 0x19, 0x37, 0x46, 0x1e, 0x19, 0x4f, 0xa1, 0x29, + 0xf1, 0x2c, 0x99, 0xce, 0xe8, 0xd2, 0x19, 0x64, 0xf4, 0x65, 0xa8, 0xf5, 0xd5, 0xc6, 0xd5, 0xbb, + 0xa0, 0x6e, 0xf2, 0x23, 0x7f, 0x44, 0x02, 0xf6, 0x75, 0xa8, 0x69, 0x2e, 0xba, 0x12, 0x5d, 0x5f, + 0x8c, 0xd4, 0x85, 0x5f, 0x0b, 0xc8, 0x3b, 0xb6, 0xbe, 0xc2, 0x7c, 0x0b, 0xea, 0xa9, 0x81, 0xdc, + 0x16, 0x72, 0x01, 0x6a, 0x8c, 0x04, 0x87, 0x2e, 0xef, 0x22, 0x8a, 0xa9, 0xab, 0xbb, 0x9e, 0xbb, + 0x2d, 0x87, 0x71, 0x24, 0x67, 0xff, 0xd1, 0x88, 0x23, 0xa7, 0x46, 0xc7, 0x35, 0xb7, 0x6e, 0xdf, + 0xe9, 0x45, 0xcd, 0xad, 0x20, 0xb8, 0xa4, 0x13, 0xf4, 0x64, 0xaf, 0x69, 0x61, 0xf1, 0xcd, 0xef, + 0x05, 0xc4, 0x3f, 0x14, 0x6f, 0x28, 0x16, 0xe6, 0x9f, 0xe8, 0x6d, 0xd5, 0xa2, 0x9b, 0x63, 0x5b, + 0xf4, 0x6c, 0x73, 0x5e, 0x49, 0x36, 0xe7, 0xef, 0x41, 0x85, 0x1c, 0x0d, 0x28, 0x23, 0xad, 0xaa, + 0xd8, 0xd4, 0x85, 0xfc, 0x4d, 0x75, 0x84, 0x0c, 0x56, 0xb2, 0xfc, 0x1a, 0xf2, 0x4a, 0xae, 0x04, + 0x37, 0x7a, 0x40, 0x83, 0x50, 0xbd, 0x43, 0x88, 0x6f, 0x64, 0xc3, 0x24, 0x39, 0x0a, 0x49, 0xe0, + 0x3b, 0xde, 0x16, 0x1f, 0x93, 0xaf, 0x03, 0x29, 0x9e, 0x2c, 0x31, 0x1a, 0x52, 0xf5, 0x76, 0x24, + 0x09, 0xd4, 0x82, 0xaa, 0x72, 0xa6, 0x88, 0xbf, 0x85, 0x35, 0x89, 0x5e, 0x85, 0x4a, 0xcf, 0xa3, + 0x7b, 0x8e, 0x27, 0x36, 0x5e, 0xc3, 0x8a, 0xe2, 0x7a, 0xee, 0x53, 0x16, 0xca, 0x4e, 0xcf, 0xc2, + 0x92, 0xb0, 0xab, 0x60, 0x76, 0xfa, 0x83, 0xf0, 0xd8, 0xbe, 0x0d, 0x93, 0xdc, 0x5e, 0x79, 0x8f, + 0x19, 0x32, 0x6e, 0xee, 0x3e, 0xed, 0xca, 0x68, 0x98, 0x58, 0x7c, 0xf3, 0x45, 0xfb, 0x84, 0xb1, + 0x38, 0x1e, 0x9a, 0xb4, 0xdf, 0x81, 0xba, 0xbc, 0x67, 0x62, 0xc2, 0x06, 0xd4, 0x4f, 0x89, 0x1a, + 0x69, 0xd1, 0x4f, 0x01, 0x45, 0x98, 0x34, 0x64, 0xba, 0x6c, 0x2f, 0x8e, 0x80, 0xbe, 0x35, 0x1e, + 0xc2, 0xad, 0x5c, 0x08, 0xb7, 0x34, 0x84, 0xcf, 0x64, 0x20, 0xdc, 0x8a, 0x01, 0xd9, 0xfe, 0xa1, + 0x01, 0x4d, 0x15, 0x97, 0xb4, 0x01, 0x79, 0xd9, 0x97, 0x36, 0xaa, 0x38, 0xde, 0xa8, 0x52, 0xae, + 0x51, 0xe5, 0x71, 0x46, 0x99, 0x19, 0xa3, 0x9e, 0x1a, 0xf0, 0x4a, 0xc6, 0x28, 0xee, 0x45, 0x46, + 0xd0, 0x1c, 0x20, 0xba, 0xc7, 0x23, 0x4b, 0xba, 0x77, 0x89, 0x4f, 0x02, 0xf1, 0x07, 0x8b, 0xb0, + 0xb1, 0x84, 0x73, 0x46, 0xf8, 0x2a, 0x01, 0x19, 0x78, 0xee, 0xbe, 0xc3, 0x84, 0xbd, 0x26, 0x8e, + 0x68, 0x34, 0x0b, 0xe7, 0x87, 0x83, 0xae, 0x13, 0x92, 0x2e, 0xd6, 0x22, 0x25, 0x21, 0x92, 0x65, + 0xa3, 0xb7, 0xa0, 0x1e, 0x10, 0xa7, 0x7b, 0x1c, 0xc9, 0x95, 0x85, 0x5c, 0x9a, 0x89, 0xae, 0xc0, + 0x94, 0x73, 0xe8, 0xb8, 0x9e, 0xb3, 0xe7, 0x91, 0x48, 0xd2, 0x14, 0x92, 0xa3, 0x03, 0xf6, 0x6f, + 0x0c, 0x80, 0x75, 0xda, 0xfb, 0x2f, 0x70, 0x37, 0xba, 0x0c, 0x55, 0x3a, 0x10, 0xff, 0x54, 0xa9, + 0x7f, 0x31, 0x74, 0x4b, 0xbb, 0x4e, 0x7b, 0x9b, 0x72, 0x00, 0x6b, 0x09, 0x7b, 0x49, 0x98, 0xad, + 0xd8, 0xe8, 0x02, 0x58, 0xa1, 0xe3, 0x7a, 0xeb, 0xae, 0x4f, 0x98, 0x0a, 0x43, 0xcc, 0xe0, 0xa5, + 0x77, 0x40, 0x3d, 0x8f, 0x7e, 0x22, 0x8c, 0xaf, 0x61, 0x45, 0xd9, 0xd7, 0xa0, 0xb4, 0x4e, 0x7b, + 0xb9, 0x7b, 0x1e, 0x5f, 0x52, 0x5f, 0x81, 0x09, 0xe1, 0x2f, 0x95, 0x09, 0x36, 0xef, 0xf2, 0xd8, + 0xd0, 0xd3, 0x4f, 0x8e, 0x10, 0xdb, 0x8c, 0xd5, 0x88, 0x7d, 0x17, 0xa6, 0x53, 0xa5, 0xa5, 0xa6, + 0xce, 0x27, 0x00, 0x3a, 0x8d, 0xfa, 0xe9, 0xa4, 0x8b, 0xe1, 0xf9, 0x01, 0xd4, 0x53, 0x43, 0xb9, + 0xa6, 0x23, 0x28, 0xef, 0xe2, 0x35, 0x89, 0xf9, 0x16, 0x16, 0xdf, 0xdc, 0x3f, 0x51, 0xe8, 0x55, + 0x76, 0xc5, 0x0c, 0x1e, 0xaa, 0x90, 0x86, 0x8e, 0xa7, 0xf2, 0x49, 0x12, 0xf6, 0xbb, 0x80, 0xa2, + 0x43, 0x86, 0x44, 0xe7, 0x78, 0x13, 0x4c, 0x4f, 0xfc, 0x9b, 0x22, 0xff, 0xfc, 0x93, 0x84, 0xbd, + 0x04, 0xd3, 0x29, 0x59, 0xb5, 0xc3, 0xe4, 0x71, 0x68, 0xfc, 0xbb, 0xe3, 0xf0, 0x2a, 0x4c, 0x75, + 0x82, 0x60, 0xcd, 0x3f, 0x74, 0x3c, 0xb7, 0xab, 0xff, 0xf9, 0x1b, 0x8f, 0x57, 0x57, 0xa0, 0x21, + 0xc4, 0x25, 0x24, 0x77, 0x82, 0x80, 0x06, 0xcf, 0x90, 0x6e, 0xc3, 0x74, 0x27, 0x08, 0xf4, 0x21, + 0xb3, 0x41, 0xc3, 0x3b, 0x74, 0xe8, 0x3f, 0x43, 0xfd, 0xc2, 0x8f, 0xcb, 0x50, 0x5d, 0xf6, 0x86, + 0x2c, 0x24, 0x01, 0xba, 0x0d, 0x15, 0xe5, 0x6f, 0x7d, 0xdd, 0x11, 0xd8, 0x3c, 0x33, 0x9d, 0x08, + 0x97, 0x06, 0x68, 0xfb, 0xfc, 0x77, 0xff, 0xf0, 0xd7, 0x1f, 0x15, 0x2d, 0x54, 0x6d, 0x33, 0x39, + 0x67, 0x1d, 0x2a, 0x12, 0x83, 0x51, 0xf6, 0xfc, 0x55, 0x3e, 0x9d, 0x69, 0xa6, 0x9e, 0x6e, 0x14, + 0x54, 0xdb, 0x4d, 0xa1, 0xe8, 0x9c, 0x6d, 0xb5, 0xb5, 0x8b, 0x6e, 0x1a, 0xef, 0xa2, 0x4f, 0x61, + 0x22, 0x91, 0x4b, 0xe8, 0xf5, 0xe4, 0xfd, 0x2b, 0x85, 0x9c, 0x33, 0x33, 0x79, 0x43, 0x32, 0x30, + 0xf6, 0x57, 0x85, 0xee, 0x79, 0x34, 0xd7, 0x16, 0xf1, 0x6b, 0x3f, 0x8a, 0xcb, 0xf9, 0xa4, 0xfd, + 0x48, 0x14, 0xf0, 0x49, 0xfb, 0x91, 0x28, 0xd9, 0x93, 0xf6, 0x23, 0x5d, 0xa1, 0x27, 0xe8, 0x33, + 0x23, 0x9b, 0x81, 0xff, 0x97, 0x9b, 0xb2, 0xca, 0x84, 0x0b, 0xf9, 0x83, 0xca, 0x88, 0xaf, 0x09, + 0x23, 0x3e, 0x40, 0xef, 0xbf, 0x98, 0x11, 0xed, 0x47, 0x3c, 0xcd, 0x4f, 0xd0, 0x10, 0x26, 0x94, + 0xde, 0x75, 0xda, 0x63, 0x28, 0x01, 0x16, 0x7a, 0xf9, 0x44, 0x2d, 0xda, 0x1d, 0xb1, 0xd8, 0x37, + 0xec, 0xf7, 0xda, 0x1e, 0xed, 0xb1, 0x17, 0x5c, 0xeb, 0xa6, 0x86, 0x9d, 0x79, 0x63, 0xa9, 0xf1, + 0xf8, 0xe9, 0x45, 0xe3, 0xef, 0x4f, 0x2f, 0x1a, 0x9f, 0x7f, 0x71, 0xd1, 0x78, 0xfc, 0xc5, 0x45, + 0x63, 0xaf, 0x22, 0x8e, 0xfe, 0x6b, 0xff, 0x0a, 0x00, 0x00, 0xff, 0xff, 0x5f, 0xef, 0xb9, 0x14, + 0xc0, 0x1f, 0x00, 0x00, } diff --git a/types/types.proto b/types/types.proto index 43ef88b3a7..fd2ba78e3a 100644 --- a/types/types.proto +++ b/types/types.proto @@ -416,10 +416,6 @@ message LeaseStatusRequest { string provider = 4; } -message LeaseStatusResponse { - repeated LeaseStatus services = 1; -} - message ServiceStatusRequest { string name = 1; string deployment = 2; @@ -459,10 +455,15 @@ message LogResponse { Log result = 1; } +message LeaseStatusResponse { + repeated ServiceStatus services = 1; +} -message LeaseStatus { - string name = 1; - string status = 2; +message ServiceStatus { + string name = 1; + repeated string URIs = 2; + int32 available = 3; + int32 total = 4; } message ManifestGetRequest { diff --git a/types/types.swagger.json b/types/types.swagger.json index 56c8164442..c4cdd2cc45 100644 --- a/types/types.swagger.json +++ b/types/types.swagger.json @@ -213,24 +213,13 @@ } } }, - "typesLeaseStatus": { - "type": "object", - "properties": { - "name": { - "type": "string" - }, - "status": { - "type": "string" - } - } - }, "typesLeaseStatusResponse": { "type": "object", "properties": { "services": { "type": "array", "items": { - "$ref": "#/definitions/typesLeaseStatus" + "$ref": "#/definitions/typesServiceStatus" } } } @@ -407,6 +396,28 @@ } } }, + "typesServiceStatus": { + "type": "object", + "properties": { + "name": { + "type": "string" + }, + "URIs": { + "type": "array", + "items": { + "type": "string" + } + }, + "available": { + "type": "integer", + "format": "int32" + }, + "total": { + "type": "integer", + "format": "int32" + } + } + }, "typesServiceStatusResponse": { "type": "object", "properties": {