From 93390b1ef83e0ed4f60d19f663776e7519d23632 Mon Sep 17 00:00:00 2001 From: Simon Behar Date: Mon, 4 Nov 2019 12:25:08 -0800 Subject: [PATCH 01/44] WIP: Informer working --- api/openapi-spec/swagger.json | 67 + cmd/workflow-controller/main.go | 8 +- manifests/base/crds/workflow-crd.yaml | 14 + .../argo-ui-rbac/argo-ui-clusterrole.yaml | 1 + .../workflow-aggregate-roles.yaml | 6 + .../workflow-controller-clusterrole.yaml | 14 +- manifests/install.yaml | 33 + manifests/namespace-install.yaml | 26 + .../workflow-controller-role.yaml | 12 + pkg/apis/api-rules/violation_exceptions.list | 1 + .../workflow/v1alpha1/cron_workflow_types.go | 30 + pkg/apis/workflow/v1alpha1/generated.pb.go | 1337 ++++++++++++----- pkg/apis/workflow/v1alpha1/generated.proto | 26 + .../workflow/v1alpha1/openapi_generated.go | 116 ++ .../v1alpha1/zz_generated.deepcopy.go | 77 + .../typed/workflow/v1alpha1/cronworkflow.go | 158 ++ .../v1alpha1/fake/fake_cronworkflow.go | 112 ++ .../v1alpha1/fake/fake_workflow_client.go | 4 + .../workflow/v1alpha1/generated_expansion.go | 2 + .../workflow/v1alpha1/workflow_client.go | 5 + .../informers/externalversions/generic.go | 2 + .../workflow/v1alpha1/cronworkflow.go | 73 + .../workflow/v1alpha1/interface.go | 7 + .../listers/workflow/v1alpha1/cronworkflow.go | 78 + .../workflow/v1alpha1/expansion_generated.go | 8 + workflow/cron/controller.go | 65 + 26 files changed, 1939 insertions(+), 343 deletions(-) create mode 100644 pkg/apis/workflow/v1alpha1/cron_workflow_types.go create mode 100644 pkg/client/clientset/versioned/typed/workflow/v1alpha1/cronworkflow.go create mode 100644 pkg/client/clientset/versioned/typed/workflow/v1alpha1/fake/fake_cronworkflow.go create mode 100644 pkg/client/informers/externalversions/workflow/v1alpha1/cronworkflow.go create mode 100644 pkg/client/listers/workflow/v1alpha1/cronworkflow.go create mode 100644 workflow/cron/controller.go diff --git a/api/openapi-spec/swagger.json b/api/openapi-spec/swagger.json index 631a266a49cf..bbb2eea7b723 100644 --- a/api/openapi-spec/swagger.json +++ b/api/openapi-spec/swagger.json @@ -200,6 +200,73 @@ } } }, + "io.argoproj.workflow.v1alpha1.CronWorkflow": { + "description": "CronWorkflow is the definition of a scheduled workflow resource", + "type": "object", + "required": [ + "spec", + "options" + ], + "properties": { + "apiVersion": { + "description": "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources", + "type": "string" + }, + "kind": { + "description": "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds", + "type": "string" + }, + "metadata": { + "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ObjectMeta" + }, + "options": { + "$ref": "#/definitions/io.argoproj.workflow.v1alpha1.CronWorkflowOptions" + }, + "spec": { + "$ref": "#/definitions/io.argoproj.workflow.v1alpha1.WorkflowSpec" + } + } + }, + "io.argoproj.workflow.v1alpha1.CronWorkflowList": { + "description": "CronWorkflowList is list of CronWorkflow resources", + "type": "object", + "required": [ + "metadata", + "items" + ], + "properties": { + "apiVersion": { + "description": "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources", + "type": "string" + }, + "items": { + "type": "array", + "items": { + "$ref": "#/definitions/io.argoproj.workflow.v1alpha1.CronWorkflow" + } + }, + "kind": { + "description": "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds", + "type": "string" + }, + "metadata": { + "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ListMeta" + } + } + }, + "io.argoproj.workflow.v1alpha1.CronWorkflowOptions": { + "description": "CronWorkflowOptions is the schedule of when to run CronWorkflows", + "type": "object", + "required": [ + "cronSchedule" + ], + "properties": { + "cronSchedule": { + "description": "CronSchedule is a schedule to run the Workflow in Cron format", + "type": "string" + } + } + }, "io.argoproj.workflow.v1alpha1.DAGTask": { "description": "DAGTask represents a node in the graph during DAG execution", "type": "object", diff --git a/cmd/workflow-controller/main.go b/cmd/workflow-controller/main.go index 141615c9fcd5..751e6d4dbb83 100644 --- a/cmd/workflow-controller/main.go +++ b/cmd/workflow-controller/main.go @@ -3,6 +3,7 @@ package main import ( "context" "fmt" + "github.com/argoproj/argo/workflow/cron" "os" "time" @@ -61,21 +62,24 @@ func NewRootCommand() *cobra.Command { } kubeclientset := kubernetes.NewForConfigOrDie(config) - wflientset := wfclientset.NewForConfigOrDie(config) + wfclientset := wfclientset.NewForConfigOrDie(config) // start a controller on instances of our custom resource - wfController := controller.NewWorkflowController(config, kubeclientset, wflientset, namespace, executorImage, executorImagePullPolicy, configMap) + wfController := controller.NewWorkflowController(config, kubeclientset, wfclientset, namespace, executorImage, executorImagePullPolicy, configMap) err = wfController.ResyncConfig() if err != nil { return err } + cronController := cron.NewCronController(kubeclientset, wfclientset, namespace) + ctx, cancel := context.WithCancel(context.Background()) defer cancel() go wfController.Run(ctx, workflowWorkers, podWorkers) go wfController.MetricsServer(ctx) go wfController.TelemetryServer(ctx) go wfController.RunTTLController(ctx) + go cronController.Run(ctx) // Wait forever select {} diff --git a/manifests/base/crds/workflow-crd.yaml b/manifests/base/crds/workflow-crd.yaml index 44daa07497fd..7f654f4c0702 100644 --- a/manifests/base/crds/workflow-crd.yaml +++ b/manifests/base/crds/workflow-crd.yaml @@ -25,3 +25,17 @@ spec: plural: workflowtemplates shortNames: - wftmpl +--- +apiVersion: apiextensions.k8s.io/v1beta1 +kind: CustomResourceDefinition +metadata: + name: cronworkflows.argoproj.io +spec: + group: argoproj.io + version: v1alpha1 + scope: Namespaced + names: + kind: CronWorkflow + plural: cronworkflows + shortNames: + - cronwf \ No newline at end of file diff --git a/manifests/cluster-install/argo-ui-rbac/argo-ui-clusterrole.yaml b/manifests/cluster-install/argo-ui-rbac/argo-ui-clusterrole.yaml index 4ea2ccb4b46d..6a29b0188afc 100644 --- a/manifests/cluster-install/argo-ui-rbac/argo-ui-clusterrole.yaml +++ b/manifests/cluster-install/argo-ui-rbac/argo-ui-clusterrole.yaml @@ -24,6 +24,7 @@ rules: resources: - workflows - workflowtemplates + - cronworkflows verbs: - get - list diff --git a/manifests/cluster-install/workflow-controller-rbac/workflow-aggregate-roles.yaml b/manifests/cluster-install/workflow-controller-rbac/workflow-aggregate-roles.yaml index 397311a21dfa..c3d25cbed3f1 100644 --- a/manifests/cluster-install/workflow-controller-rbac/workflow-aggregate-roles.yaml +++ b/manifests/cluster-install/workflow-controller-rbac/workflow-aggregate-roles.yaml @@ -12,6 +12,8 @@ rules: - workflows/finalizers - workflowtemplates - workflowtemplates/finalizers + - cronworkflows + - cronworkflows/finalizers verbs: - get - list @@ -32,6 +34,8 @@ rules: - workflows/finalizers - workflowtemplates - workflowtemplates/finalizers + - cronworkflows + - cronworkflows/finalizers verbs: - create - delete @@ -57,6 +61,8 @@ rules: - workflows/finalizers - workflowtemplates - workflowtemplates/finalizers + - cronworkflows + - cronworkflows/finalizers verbs: - create - delete diff --git a/manifests/cluster-install/workflow-controller-rbac/workflow-controller-clusterrole.yaml b/manifests/cluster-install/workflow-controller-rbac/workflow-controller-clusterrole.yaml index f8d333b6fab9..c4bc85caae57 100644 --- a/manifests/cluster-install/workflow-controller-rbac/workflow-controller-clusterrole.yaml +++ b/manifests/cluster-install/workflow-controller-rbac/workflow-controller-clusterrole.yaml @@ -58,4 +58,16 @@ rules: - serviceaccounts verbs: - get - - list \ No newline at end of file + - list +- apiGroups: + - argoproj.io + resources: + - cronworkflows + - cronworkflows/finalizers + verbs: + - get + - list + - watch + - update + - patch + - delete \ No newline at end of file diff --git a/manifests/install.yaml b/manifests/install.yaml index 589b8beb59d9..a50675c66f4c 100644 --- a/manifests/install.yaml +++ b/manifests/install.yaml @@ -1,6 +1,20 @@ # This is an auto-generated file. DO NOT EDIT apiVersion: apiextensions.k8s.io/v1beta1 kind: CustomResourceDefinition +metadata: + name: cronworkflows.argoproj.io +spec: + group: argoproj.io + names: + kind: CronWorkflow + plural: cronworkflows + shortNames: + - cronwf + scope: Namespaced + version: v1alpha1 +--- +apiVersion: apiextensions.k8s.io/v1beta1 +kind: CustomResourceDefinition metadata: name: workflows.argoproj.io spec: @@ -63,6 +77,8 @@ rules: - workflows/finalizers - workflowtemplates - workflowtemplates/finalizers + - cronworkflows + - cronworkflows/finalizers verbs: - create - delete @@ -87,6 +103,8 @@ rules: - workflows/finalizers - workflowtemplates - workflowtemplates/finalizers + - cronworkflows + - cronworkflows/finalizers verbs: - create - delete @@ -111,6 +129,8 @@ rules: - workflows/finalizers - workflowtemplates - workflowtemplates/finalizers + - cronworkflows + - cronworkflows/finalizers verbs: - get - list @@ -177,6 +197,18 @@ rules: verbs: - get - list +- apiGroups: + - argoproj.io + resources: + - cronworkflows + - cronworkflows/finalizers + verbs: + - get + - list + - watch + - update + - patch + - delete --- apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRole @@ -204,6 +236,7 @@ rules: resources: - workflows - workflowtemplates + - cronworkflows verbs: - get - list diff --git a/manifests/namespace-install.yaml b/manifests/namespace-install.yaml index 277b9e22f826..0c79bbeab6dd 100644 --- a/manifests/namespace-install.yaml +++ b/manifests/namespace-install.yaml @@ -1,6 +1,20 @@ # This is an auto-generated file. DO NOT EDIT apiVersion: apiextensions.k8s.io/v1beta1 kind: CustomResourceDefinition +metadata: + name: cronworkflows.argoproj.io +spec: + group: argoproj.io + names: + kind: CronWorkflow + plural: cronworkflows + shortNames: + - cronwf + scope: Namespaced + version: v1alpha1 +--- +apiVersion: apiextensions.k8s.io/v1beta1 +kind: CustomResourceDefinition metadata: name: workflows.argoproj.io spec: @@ -104,6 +118,18 @@ rules: - secrets verbs: - get +- apiGroups: + - argoproj.io + resources: + - cronworkflows + - cronworkflows/finalizers + verbs: + - get + - list + - watch + - update + - patch + - delete --- apiVersion: rbac.authorization.k8s.io/v1 kind: Role diff --git a/manifests/namespace-install/workflow-controller-rbac/workflow-controller-role.yaml b/manifests/namespace-install/workflow-controller-rbac/workflow-controller-role.yaml index 8687a6109309..c89ecbc6de30 100644 --- a/manifests/namespace-install/workflow-controller-rbac/workflow-controller-role.yaml +++ b/manifests/namespace-install/workflow-controller-rbac/workflow-controller-role.yaml @@ -65,3 +65,15 @@ rules: - secrets verbs: - get +- apiGroups: + - argoproj.io + resources: + - cronworkflows + - cronworkflows/finalizers + verbs: + - get + - list + - watch + - update + - patch + - delete \ No newline at end of file diff --git a/pkg/apis/api-rules/violation_exceptions.list b/pkg/apis/api-rules/violation_exceptions.list index 9e38e9306af6..2f7ddc168cd7 100644 --- a/pkg/apis/api-rules/violation_exceptions.list +++ b/pkg/apis/api-rules/violation_exceptions.list @@ -1,5 +1,6 @@ API rule violation: list_type_missing,github.com/argoproj/argo/pkg/apis/workflow/v1alpha1,Arguments,Artifacts API rule violation: list_type_missing,github.com/argoproj/argo/pkg/apis/workflow/v1alpha1,Arguments,Parameters +API rule violation: list_type_missing,github.com/argoproj/argo/pkg/apis/workflow/v1alpha1,CronWorkflowList,Items API rule violation: list_type_missing,github.com/argoproj/argo/pkg/apis/workflow/v1alpha1,DAGTask,Dependencies API rule violation: list_type_missing,github.com/argoproj/argo/pkg/apis/workflow/v1alpha1,DAGTask,WithItems API rule violation: list_type_missing,github.com/argoproj/argo/pkg/apis/workflow/v1alpha1,DAGTemplate,Tasks diff --git a/pkg/apis/workflow/v1alpha1/cron_workflow_types.go b/pkg/apis/workflow/v1alpha1/cron_workflow_types.go new file mode 100644 index 000000000000..3385548ff0fd --- /dev/null +++ b/pkg/apis/workflow/v1alpha1/cron_workflow_types.go @@ -0,0 +1,30 @@ +package v1alpha1 + +import ( + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" +) + +// CronWorkflow is the definition of a scheduled workflow resource +// +genclient +// +genclient:noStatus +// +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object +type CronWorkflow struct { + metav1.TypeMeta `json:",inline"` + metav1.ObjectMeta `json:"metadata,omitempty" protobuf:"bytes,1,opt,name=metadata"` + Spec WorkflowSpec `json:"spec" protobuf:"bytes,2,opt,name=spec"` + Options CronWorkflowOptions `json:"options" protobuf:"bytes,3,opt,name=options"` +} + +// CronWorkflowList is list of CronWorkflow resources +// +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object +type CronWorkflowList struct { + metav1.TypeMeta `json:",inline"` + metav1.ListMeta `json:"metadata" protobuf:"bytes,1,opt,name=metadata"` + Items []CronWorkflow `json:"items" protobuf:"bytes,2,rep,name=items"` +} + +// CronWorkflowOptions is the schedule of when to run CronWorkflows +type CronWorkflowOptions struct { + // CronSchedule is a schedule to run the Workflow in Cron format + CronSchedule string `json:"cronSchedule" protobuf:"bytes,1,opt,name=cronSchedule"` +} diff --git a/pkg/apis/workflow/v1alpha1/generated.pb.go b/pkg/apis/workflow/v1alpha1/generated.pb.go index 4fe0707b4ec6..f666c708189c 100644 --- a/pkg/apis/workflow/v1alpha1/generated.pb.go +++ b/pkg/apis/workflow/v1alpha1/generated.pb.go @@ -255,10 +255,94 @@ func (m *ContinueOn) XXX_DiscardUnknown() { var xxx_messageInfo_ContinueOn proto.InternalMessageInfo +func (m *CronWorkflow) Reset() { *m = CronWorkflow{} } +func (*CronWorkflow) ProtoMessage() {} +func (*CronWorkflow) Descriptor() ([]byte, []int) { + return fileDescriptor_c23edafa7e7ea072, []int{8} +} +func (m *CronWorkflow) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *CronWorkflow) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *CronWorkflow) XXX_Merge(src proto.Message) { + xxx_messageInfo_CronWorkflow.Merge(m, src) +} +func (m *CronWorkflow) XXX_Size() int { + return m.Size() +} +func (m *CronWorkflow) XXX_DiscardUnknown() { + xxx_messageInfo_CronWorkflow.DiscardUnknown(m) +} + +var xxx_messageInfo_CronWorkflow proto.InternalMessageInfo + +func (m *CronWorkflowList) Reset() { *m = CronWorkflowList{} } +func (*CronWorkflowList) ProtoMessage() {} +func (*CronWorkflowList) Descriptor() ([]byte, []int) { + return fileDescriptor_c23edafa7e7ea072, []int{9} +} +func (m *CronWorkflowList) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *CronWorkflowList) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *CronWorkflowList) XXX_Merge(src proto.Message) { + xxx_messageInfo_CronWorkflowList.Merge(m, src) +} +func (m *CronWorkflowList) XXX_Size() int { + return m.Size() +} +func (m *CronWorkflowList) XXX_DiscardUnknown() { + xxx_messageInfo_CronWorkflowList.DiscardUnknown(m) +} + +var xxx_messageInfo_CronWorkflowList proto.InternalMessageInfo + +func (m *CronWorkflowOptions) Reset() { *m = CronWorkflowOptions{} } +func (*CronWorkflowOptions) ProtoMessage() {} +func (*CronWorkflowOptions) Descriptor() ([]byte, []int) { + return fileDescriptor_c23edafa7e7ea072, []int{10} +} +func (m *CronWorkflowOptions) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *CronWorkflowOptions) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *CronWorkflowOptions) XXX_Merge(src proto.Message) { + xxx_messageInfo_CronWorkflowOptions.Merge(m, src) +} +func (m *CronWorkflowOptions) XXX_Size() int { + return m.Size() +} +func (m *CronWorkflowOptions) XXX_DiscardUnknown() { + xxx_messageInfo_CronWorkflowOptions.DiscardUnknown(m) +} + +var xxx_messageInfo_CronWorkflowOptions proto.InternalMessageInfo + func (m *DAGTask) Reset() { *m = DAGTask{} } func (*DAGTask) ProtoMessage() {} func (*DAGTask) Descriptor() ([]byte, []int) { - return fileDescriptor_c23edafa7e7ea072, []int{8} + return fileDescriptor_c23edafa7e7ea072, []int{11} } func (m *DAGTask) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -286,7 +370,7 @@ var xxx_messageInfo_DAGTask proto.InternalMessageInfo func (m *DAGTemplate) Reset() { *m = DAGTemplate{} } func (*DAGTemplate) ProtoMessage() {} func (*DAGTemplate) Descriptor() ([]byte, []int) { - return fileDescriptor_c23edafa7e7ea072, []int{9} + return fileDescriptor_c23edafa7e7ea072, []int{12} } func (m *DAGTemplate) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -314,7 +398,7 @@ var xxx_messageInfo_DAGTemplate proto.InternalMessageInfo func (m *ExecutorConfig) Reset() { *m = ExecutorConfig{} } func (*ExecutorConfig) ProtoMessage() {} func (*ExecutorConfig) Descriptor() ([]byte, []int) { - return fileDescriptor_c23edafa7e7ea072, []int{10} + return fileDescriptor_c23edafa7e7ea072, []int{13} } func (m *ExecutorConfig) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -342,7 +426,7 @@ var xxx_messageInfo_ExecutorConfig proto.InternalMessageInfo func (m *GitArtifact) Reset() { *m = GitArtifact{} } func (*GitArtifact) ProtoMessage() {} func (*GitArtifact) Descriptor() ([]byte, []int) { - return fileDescriptor_c23edafa7e7ea072, []int{11} + return fileDescriptor_c23edafa7e7ea072, []int{14} } func (m *GitArtifact) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -370,7 +454,7 @@ var xxx_messageInfo_GitArtifact proto.InternalMessageInfo func (m *HDFSArtifact) Reset() { *m = HDFSArtifact{} } func (*HDFSArtifact) ProtoMessage() {} func (*HDFSArtifact) Descriptor() ([]byte, []int) { - return fileDescriptor_c23edafa7e7ea072, []int{12} + return fileDescriptor_c23edafa7e7ea072, []int{15} } func (m *HDFSArtifact) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -398,7 +482,7 @@ var xxx_messageInfo_HDFSArtifact proto.InternalMessageInfo func (m *HDFSConfig) Reset() { *m = HDFSConfig{} } func (*HDFSConfig) ProtoMessage() {} func (*HDFSConfig) Descriptor() ([]byte, []int) { - return fileDescriptor_c23edafa7e7ea072, []int{13} + return fileDescriptor_c23edafa7e7ea072, []int{16} } func (m *HDFSConfig) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -426,7 +510,7 @@ var xxx_messageInfo_HDFSConfig proto.InternalMessageInfo func (m *HDFSKrbConfig) Reset() { *m = HDFSKrbConfig{} } func (*HDFSKrbConfig) ProtoMessage() {} func (*HDFSKrbConfig) Descriptor() ([]byte, []int) { - return fileDescriptor_c23edafa7e7ea072, []int{14} + return fileDescriptor_c23edafa7e7ea072, []int{17} } func (m *HDFSKrbConfig) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -454,7 +538,7 @@ var xxx_messageInfo_HDFSKrbConfig proto.InternalMessageInfo func (m *HTTPArtifact) Reset() { *m = HTTPArtifact{} } func (*HTTPArtifact) ProtoMessage() {} func (*HTTPArtifact) Descriptor() ([]byte, []int) { - return fileDescriptor_c23edafa7e7ea072, []int{15} + return fileDescriptor_c23edafa7e7ea072, []int{18} } func (m *HTTPArtifact) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -482,7 +566,7 @@ var xxx_messageInfo_HTTPArtifact proto.InternalMessageInfo func (m *Inputs) Reset() { *m = Inputs{} } func (*Inputs) ProtoMessage() {} func (*Inputs) Descriptor() ([]byte, []int) { - return fileDescriptor_c23edafa7e7ea072, []int{16} + return fileDescriptor_c23edafa7e7ea072, []int{19} } func (m *Inputs) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -510,7 +594,7 @@ var xxx_messageInfo_Inputs proto.InternalMessageInfo func (m *Item) Reset() { *m = Item{} } func (*Item) ProtoMessage() {} func (*Item) Descriptor() ([]byte, []int) { - return fileDescriptor_c23edafa7e7ea072, []int{17} + return fileDescriptor_c23edafa7e7ea072, []int{20} } func (m *Item) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -538,7 +622,7 @@ var xxx_messageInfo_Item proto.InternalMessageInfo func (m *ItemValue) Reset() { *m = ItemValue{} } func (*ItemValue) ProtoMessage() {} func (*ItemValue) Descriptor() ([]byte, []int) { - return fileDescriptor_c23edafa7e7ea072, []int{18} + return fileDescriptor_c23edafa7e7ea072, []int{21} } func (m *ItemValue) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -566,7 +650,7 @@ var xxx_messageInfo_ItemValue proto.InternalMessageInfo func (m *Metadata) Reset() { *m = Metadata{} } func (*Metadata) ProtoMessage() {} func (*Metadata) Descriptor() ([]byte, []int) { - return fileDescriptor_c23edafa7e7ea072, []int{19} + return fileDescriptor_c23edafa7e7ea072, []int{22} } func (m *Metadata) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -594,7 +678,7 @@ var xxx_messageInfo_Metadata proto.InternalMessageInfo func (m *NodeStatus) Reset() { *m = NodeStatus{} } func (*NodeStatus) ProtoMessage() {} func (*NodeStatus) Descriptor() ([]byte, []int) { - return fileDescriptor_c23edafa7e7ea072, []int{20} + return fileDescriptor_c23edafa7e7ea072, []int{23} } func (m *NodeStatus) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -622,7 +706,7 @@ var xxx_messageInfo_NodeStatus proto.InternalMessageInfo func (m *NoneStrategy) Reset() { *m = NoneStrategy{} } func (*NoneStrategy) ProtoMessage() {} func (*NoneStrategy) Descriptor() ([]byte, []int) { - return fileDescriptor_c23edafa7e7ea072, []int{21} + return fileDescriptor_c23edafa7e7ea072, []int{24} } func (m *NoneStrategy) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -650,7 +734,7 @@ var xxx_messageInfo_NoneStrategy proto.InternalMessageInfo func (m *Outputs) Reset() { *m = Outputs{} } func (*Outputs) ProtoMessage() {} func (*Outputs) Descriptor() ([]byte, []int) { - return fileDescriptor_c23edafa7e7ea072, []int{22} + return fileDescriptor_c23edafa7e7ea072, []int{25} } func (m *Outputs) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -678,7 +762,7 @@ var xxx_messageInfo_Outputs proto.InternalMessageInfo func (m *ParallelSteps) Reset() { *m = ParallelSteps{} } func (*ParallelSteps) ProtoMessage() {} func (*ParallelSteps) Descriptor() ([]byte, []int) { - return fileDescriptor_c23edafa7e7ea072, []int{23} + return fileDescriptor_c23edafa7e7ea072, []int{26} } func (m *ParallelSteps) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -706,7 +790,7 @@ var xxx_messageInfo_ParallelSteps proto.InternalMessageInfo func (m *Parameter) Reset() { *m = Parameter{} } func (*Parameter) ProtoMessage() {} func (*Parameter) Descriptor() ([]byte, []int) { - return fileDescriptor_c23edafa7e7ea072, []int{24} + return fileDescriptor_c23edafa7e7ea072, []int{27} } func (m *Parameter) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -734,7 +818,7 @@ var xxx_messageInfo_Parameter proto.InternalMessageInfo func (m *PodGC) Reset() { *m = PodGC{} } func (*PodGC) ProtoMessage() {} func (*PodGC) Descriptor() ([]byte, []int) { - return fileDescriptor_c23edafa7e7ea072, []int{25} + return fileDescriptor_c23edafa7e7ea072, []int{28} } func (m *PodGC) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -762,7 +846,7 @@ var xxx_messageInfo_PodGC proto.InternalMessageInfo func (m *RawArtifact) Reset() { *m = RawArtifact{} } func (*RawArtifact) ProtoMessage() {} func (*RawArtifact) Descriptor() ([]byte, []int) { - return fileDescriptor_c23edafa7e7ea072, []int{26} + return fileDescriptor_c23edafa7e7ea072, []int{29} } func (m *RawArtifact) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -790,7 +874,7 @@ var xxx_messageInfo_RawArtifact proto.InternalMessageInfo func (m *ResourceTemplate) Reset() { *m = ResourceTemplate{} } func (*ResourceTemplate) ProtoMessage() {} func (*ResourceTemplate) Descriptor() ([]byte, []int) { - return fileDescriptor_c23edafa7e7ea072, []int{27} + return fileDescriptor_c23edafa7e7ea072, []int{30} } func (m *ResourceTemplate) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -818,7 +902,7 @@ var xxx_messageInfo_ResourceTemplate proto.InternalMessageInfo func (m *RetryStrategy) Reset() { *m = RetryStrategy{} } func (*RetryStrategy) ProtoMessage() {} func (*RetryStrategy) Descriptor() ([]byte, []int) { - return fileDescriptor_c23edafa7e7ea072, []int{28} + return fileDescriptor_c23edafa7e7ea072, []int{31} } func (m *RetryStrategy) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -846,7 +930,7 @@ var xxx_messageInfo_RetryStrategy proto.InternalMessageInfo func (m *S3Artifact) Reset() { *m = S3Artifact{} } func (*S3Artifact) ProtoMessage() {} func (*S3Artifact) Descriptor() ([]byte, []int) { - return fileDescriptor_c23edafa7e7ea072, []int{29} + return fileDescriptor_c23edafa7e7ea072, []int{32} } func (m *S3Artifact) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -874,7 +958,7 @@ var xxx_messageInfo_S3Artifact proto.InternalMessageInfo func (m *S3Bucket) Reset() { *m = S3Bucket{} } func (*S3Bucket) ProtoMessage() {} func (*S3Bucket) Descriptor() ([]byte, []int) { - return fileDescriptor_c23edafa7e7ea072, []int{30} + return fileDescriptor_c23edafa7e7ea072, []int{33} } func (m *S3Bucket) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -902,7 +986,7 @@ var xxx_messageInfo_S3Bucket proto.InternalMessageInfo func (m *ScriptTemplate) Reset() { *m = ScriptTemplate{} } func (*ScriptTemplate) ProtoMessage() {} func (*ScriptTemplate) Descriptor() ([]byte, []int) { - return fileDescriptor_c23edafa7e7ea072, []int{31} + return fileDescriptor_c23edafa7e7ea072, []int{34} } func (m *ScriptTemplate) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -930,7 +1014,7 @@ var xxx_messageInfo_ScriptTemplate proto.InternalMessageInfo func (m *Sequence) Reset() { *m = Sequence{} } func (*Sequence) ProtoMessage() {} func (*Sequence) Descriptor() ([]byte, []int) { - return fileDescriptor_c23edafa7e7ea072, []int{32} + return fileDescriptor_c23edafa7e7ea072, []int{35} } func (m *Sequence) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -958,7 +1042,7 @@ var xxx_messageInfo_Sequence proto.InternalMessageInfo func (m *SuspendTemplate) Reset() { *m = SuspendTemplate{} } func (*SuspendTemplate) ProtoMessage() {} func (*SuspendTemplate) Descriptor() ([]byte, []int) { - return fileDescriptor_c23edafa7e7ea072, []int{33} + return fileDescriptor_c23edafa7e7ea072, []int{36} } func (m *SuspendTemplate) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -986,7 +1070,7 @@ var xxx_messageInfo_SuspendTemplate proto.InternalMessageInfo func (m *TarStrategy) Reset() { *m = TarStrategy{} } func (*TarStrategy) ProtoMessage() {} func (*TarStrategy) Descriptor() ([]byte, []int) { - return fileDescriptor_c23edafa7e7ea072, []int{34} + return fileDescriptor_c23edafa7e7ea072, []int{37} } func (m *TarStrategy) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1014,7 +1098,7 @@ var xxx_messageInfo_TarStrategy proto.InternalMessageInfo func (m *Template) Reset() { *m = Template{} } func (*Template) ProtoMessage() {} func (*Template) Descriptor() ([]byte, []int) { - return fileDescriptor_c23edafa7e7ea072, []int{35} + return fileDescriptor_c23edafa7e7ea072, []int{38} } func (m *Template) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1042,7 +1126,7 @@ var xxx_messageInfo_Template proto.InternalMessageInfo func (m *TemplateRef) Reset() { *m = TemplateRef{} } func (*TemplateRef) ProtoMessage() {} func (*TemplateRef) Descriptor() ([]byte, []int) { - return fileDescriptor_c23edafa7e7ea072, []int{36} + return fileDescriptor_c23edafa7e7ea072, []int{39} } func (m *TemplateRef) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1070,7 +1154,7 @@ var xxx_messageInfo_TemplateRef proto.InternalMessageInfo func (m *UserContainer) Reset() { *m = UserContainer{} } func (*UserContainer) ProtoMessage() {} func (*UserContainer) Descriptor() ([]byte, []int) { - return fileDescriptor_c23edafa7e7ea072, []int{37} + return fileDescriptor_c23edafa7e7ea072, []int{40} } func (m *UserContainer) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1098,7 +1182,7 @@ var xxx_messageInfo_UserContainer proto.InternalMessageInfo func (m *ValueFrom) Reset() { *m = ValueFrom{} } func (*ValueFrom) ProtoMessage() {} func (*ValueFrom) Descriptor() ([]byte, []int) { - return fileDescriptor_c23edafa7e7ea072, []int{38} + return fileDescriptor_c23edafa7e7ea072, []int{41} } func (m *ValueFrom) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1126,7 +1210,7 @@ var xxx_messageInfo_ValueFrom proto.InternalMessageInfo func (m *Workflow) Reset() { *m = Workflow{} } func (*Workflow) ProtoMessage() {} func (*Workflow) Descriptor() ([]byte, []int) { - return fileDescriptor_c23edafa7e7ea072, []int{39} + return fileDescriptor_c23edafa7e7ea072, []int{42} } func (m *Workflow) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1154,7 +1238,7 @@ var xxx_messageInfo_Workflow proto.InternalMessageInfo func (m *WorkflowList) Reset() { *m = WorkflowList{} } func (*WorkflowList) ProtoMessage() {} func (*WorkflowList) Descriptor() ([]byte, []int) { - return fileDescriptor_c23edafa7e7ea072, []int{40} + return fileDescriptor_c23edafa7e7ea072, []int{43} } func (m *WorkflowList) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1182,7 +1266,7 @@ var xxx_messageInfo_WorkflowList proto.InternalMessageInfo func (m *WorkflowSpec) Reset() { *m = WorkflowSpec{} } func (*WorkflowSpec) ProtoMessage() {} func (*WorkflowSpec) Descriptor() ([]byte, []int) { - return fileDescriptor_c23edafa7e7ea072, []int{41} + return fileDescriptor_c23edafa7e7ea072, []int{44} } func (m *WorkflowSpec) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1210,7 +1294,7 @@ var xxx_messageInfo_WorkflowSpec proto.InternalMessageInfo func (m *WorkflowStatus) Reset() { *m = WorkflowStatus{} } func (*WorkflowStatus) ProtoMessage() {} func (*WorkflowStatus) Descriptor() ([]byte, []int) { - return fileDescriptor_c23edafa7e7ea072, []int{42} + return fileDescriptor_c23edafa7e7ea072, []int{45} } func (m *WorkflowStatus) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1238,7 +1322,7 @@ var xxx_messageInfo_WorkflowStatus proto.InternalMessageInfo func (m *WorkflowStep) Reset() { *m = WorkflowStep{} } func (*WorkflowStep) ProtoMessage() {} func (*WorkflowStep) Descriptor() ([]byte, []int) { - return fileDescriptor_c23edafa7e7ea072, []int{43} + return fileDescriptor_c23edafa7e7ea072, []int{46} } func (m *WorkflowStep) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1266,7 +1350,7 @@ var xxx_messageInfo_WorkflowStep proto.InternalMessageInfo func (m *WorkflowTemplate) Reset() { *m = WorkflowTemplate{} } func (*WorkflowTemplate) ProtoMessage() {} func (*WorkflowTemplate) Descriptor() ([]byte, []int) { - return fileDescriptor_c23edafa7e7ea072, []int{44} + return fileDescriptor_c23edafa7e7ea072, []int{47} } func (m *WorkflowTemplate) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1294,7 +1378,7 @@ var xxx_messageInfo_WorkflowTemplate proto.InternalMessageInfo func (m *WorkflowTemplateList) Reset() { *m = WorkflowTemplateList{} } func (*WorkflowTemplateList) ProtoMessage() {} func (*WorkflowTemplateList) Descriptor() ([]byte, []int) { - return fileDescriptor_c23edafa7e7ea072, []int{45} + return fileDescriptor_c23edafa7e7ea072, []int{48} } func (m *WorkflowTemplateList) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1322,7 +1406,7 @@ var xxx_messageInfo_WorkflowTemplateList proto.InternalMessageInfo func (m *WorkflowTemplateSpec) Reset() { *m = WorkflowTemplateSpec{} } func (*WorkflowTemplateSpec) ProtoMessage() {} func (*WorkflowTemplateSpec) Descriptor() ([]byte, []int) { - return fileDescriptor_c23edafa7e7ea072, []int{46} + return fileDescriptor_c23edafa7e7ea072, []int{49} } func (m *WorkflowTemplateSpec) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1356,6 +1440,9 @@ func init() { proto.RegisterType((*ArtifactoryArtifact)(nil), "github.com.argoproj.argo.pkg.apis.workflow.v1alpha1.ArtifactoryArtifact") proto.RegisterType((*ArtifactoryAuth)(nil), "github.com.argoproj.argo.pkg.apis.workflow.v1alpha1.ArtifactoryAuth") proto.RegisterType((*ContinueOn)(nil), "github.com.argoproj.argo.pkg.apis.workflow.v1alpha1.ContinueOn") + proto.RegisterType((*CronWorkflow)(nil), "github.com.argoproj.argo.pkg.apis.workflow.v1alpha1.CronWorkflow") + proto.RegisterType((*CronWorkflowList)(nil), "github.com.argoproj.argo.pkg.apis.workflow.v1alpha1.CronWorkflowList") + proto.RegisterType((*CronWorkflowOptions)(nil), "github.com.argoproj.argo.pkg.apis.workflow.v1alpha1.CronWorkflowOptions") proto.RegisterType((*DAGTask)(nil), "github.com.argoproj.argo.pkg.apis.workflow.v1alpha1.DAGTask") proto.RegisterType((*DAGTemplate)(nil), "github.com.argoproj.argo.pkg.apis.workflow.v1alpha1.DAGTemplate") proto.RegisterType((*ExecutorConfig)(nil), "github.com.argoproj.argo.pkg.apis.workflow.v1alpha1.ExecutorConfig") @@ -1410,299 +1497,303 @@ func init() { } var fileDescriptor_c23edafa7e7ea072 = []byte{ - // 4659 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xec, 0x7c, 0x4d, 0x6c, 0x1c, 0x47, - 0x76, 0xbf, 0x86, 0xe4, 0x0c, 0x67, 0xde, 0xf0, 0x4b, 0x25, 0xc9, 0x6a, 0xd3, 0x32, 0x47, 0xdb, - 0x86, 0xfd, 0xd7, 0xfe, 0x63, 0x0f, 0x6d, 0x69, 0x37, 0xf1, 0x7a, 0x63, 0x7b, 0x39, 0xfc, 0x90, - 0xa8, 0x0f, 0x8a, 0x79, 0x43, 0xc9, 0xd9, 0x78, 0x91, 0x4d, 0xb3, 0xa7, 0x38, 0xd3, 0x9a, 0x99, - 0xee, 0x76, 0x57, 0x0f, 0x69, 0xc2, 0x87, 0x38, 0x41, 0x82, 0x24, 0x08, 0x16, 0x48, 0x2e, 0xc9, - 0x22, 0x7b, 0x09, 0x72, 0x48, 0x2e, 0xb9, 0xe4, 0x1a, 0x04, 0x1b, 0x20, 0xc8, 0xc1, 0xc8, 0x25, - 0xbe, 0xc5, 0x87, 0x80, 0x58, 0x33, 0x97, 0x04, 0x09, 0x10, 0x20, 0x97, 0x00, 0x3a, 0x05, 0xf5, - 0xd1, 0xd5, 0x1f, 0xd3, 0xb4, 0xa8, 0x19, 0x4a, 0x41, 0xb0, 0x7b, 0x12, 0xfb, 0xbd, 0x57, 0xbf, - 0x57, 0x1f, 0xaf, 0x5e, 0xbd, 0xf7, 0xaa, 0x46, 0xb0, 0xda, 0x76, 0xc2, 0xce, 0x60, 0xb7, 0x6e, - 0x7b, 0xfd, 0x65, 0x2b, 0x68, 0x7b, 0x7e, 0xe0, 0x3d, 0x12, 0x7f, 0x2c, 0xfb, 0xdd, 0xf6, 0xb2, - 0xe5, 0x3b, 0x6c, 0xf9, 0xc0, 0x0b, 0xba, 0x7b, 0x3d, 0xef, 0x60, 0x79, 0xff, 0x2d, 0xab, 0xe7, - 0x77, 0xac, 0xb7, 0x96, 0xdb, 0xd4, 0xa5, 0x81, 0x15, 0xd2, 0x56, 0xdd, 0x0f, 0xbc, 0xd0, 0x23, - 0x37, 0x62, 0x90, 0x7a, 0x04, 0x22, 0xfe, 0xa8, 0xfb, 0xdd, 0x76, 0x9d, 0x83, 0xd4, 0x23, 0x90, - 0x7a, 0x04, 0xb2, 0xf8, 0x46, 0x42, 0x73, 0xdb, 0xe3, 0x0a, 0x39, 0xd6, 0xee, 0x60, 0x4f, 0x7c, - 0x89, 0x0f, 0xf1, 0x97, 0xd4, 0xb1, 0x68, 0x76, 0xdf, 0x66, 0x75, 0xc7, 0xe3, 0x5d, 0x5a, 0xb6, - 0xbd, 0x80, 0x2e, 0xef, 0x0f, 0xf5, 0x63, 0xf1, 0x1b, 0xb1, 0x4c, 0xdf, 0xb2, 0x3b, 0x8e, 0x4b, - 0x83, 0xc3, 0x78, 0x1c, 0x7d, 0x1a, 0x5a, 0x79, 0xad, 0x96, 0x4f, 0x6a, 0x15, 0x0c, 0xdc, 0xd0, - 0xe9, 0xd3, 0xa1, 0x06, 0x3f, 0xff, 0xa4, 0x06, 0xcc, 0xee, 0xd0, 0xbe, 0x95, 0x6d, 0x67, 0xfe, - 0x63, 0x01, 0xe6, 0x57, 0x02, 0xbb, 0xe3, 0xec, 0xd3, 0x66, 0xc8, 0x19, 0xed, 0x43, 0xf2, 0x21, - 0x4c, 0x86, 0x56, 0x60, 0x14, 0xae, 0x16, 0xae, 0x55, 0xaf, 0x7f, 0xa7, 0x3e, 0xc2, 0x44, 0xd6, - 0x77, 0xac, 0x20, 0x82, 0x6b, 0x4c, 0x1f, 0x1f, 0xd5, 0x26, 0x77, 0xac, 0x00, 0x39, 0x2a, 0xf9, - 0x3e, 0x4c, 0xb9, 0x9e, 0x4b, 0x8d, 0x09, 0x81, 0xbe, 0x32, 0x12, 0xfa, 0x96, 0xe7, 0xea, 0xde, - 0x36, 0xca, 0xc7, 0x47, 0xb5, 0x29, 0x4e, 0x41, 0x01, 0x6c, 0xfe, 0x67, 0x01, 0x2a, 0x2b, 0x41, - 0x7b, 0xd0, 0xa7, 0x6e, 0xc8, 0x48, 0x00, 0xe0, 0x5b, 0x81, 0xd5, 0xa7, 0x21, 0x0d, 0x98, 0x51, - 0xb8, 0x3a, 0x79, 0xad, 0x7a, 0xfd, 0xbd, 0x91, 0x94, 0x6e, 0x47, 0x30, 0x0d, 0xf2, 0xd9, 0x51, - 0xed, 0xdc, 0xf1, 0x51, 0x0d, 0x34, 0x89, 0x61, 0x42, 0x0b, 0x71, 0xa1, 0x62, 0x05, 0xa1, 0xb3, - 0x67, 0xd9, 0x21, 0x33, 0x26, 0x84, 0xca, 0x77, 0x47, 0x52, 0xb9, 0xa2, 0x50, 0x1a, 0xe7, 0x95, - 0xc6, 0x4a, 0x44, 0x61, 0x18, 0xab, 0x30, 0xff, 0x7d, 0x12, 0xca, 0x11, 0x83, 0x5c, 0x85, 0x29, - 0xd7, 0xea, 0x53, 0xb1, 0x7a, 0x95, 0xc6, 0x8c, 0x6a, 0x38, 0xb5, 0x65, 0xf5, 0xf9, 0x04, 0x59, - 0x7d, 0xca, 0x25, 0x7c, 0x2b, 0xec, 0x88, 0x15, 0x48, 0x48, 0x6c, 0x5b, 0x61, 0x07, 0x05, 0x87, - 0x5c, 0x81, 0xa9, 0xbe, 0xd7, 0xa2, 0xc6, 0xe4, 0xd5, 0xc2, 0xb5, 0xa2, 0x9c, 0xe0, 0x7b, 0x5e, - 0x8b, 0xa2, 0xa0, 0xf2, 0xf6, 0x7b, 0x81, 0xd7, 0x37, 0xa6, 0xd2, 0xed, 0x37, 0x02, 0xaf, 0x8f, - 0x82, 0x43, 0x7e, 0xbf, 0x00, 0x0b, 0x51, 0xf7, 0xee, 0x7a, 0xb6, 0x15, 0x3a, 0x9e, 0x6b, 0x14, - 0xc5, 0x82, 0xaf, 0x8f, 0x35, 0x11, 0x11, 0x58, 0xc3, 0x50, 0x5a, 0x17, 0xb2, 0x1c, 0x1c, 0x52, - 0x4c, 0xae, 0x03, 0xb4, 0x7b, 0xde, 0xae, 0xd5, 0xe3, 0x73, 0x60, 0x94, 0x44, 0xaf, 0xf5, 0x12, - 0xde, 0xd4, 0x1c, 0x4c, 0x48, 0x91, 0x2e, 0x4c, 0x5b, 0x72, 0x57, 0x18, 0xd3, 0xa2, 0xdf, 0x6b, - 0x23, 0xf6, 0x3b, 0xb5, 0xb3, 0x1a, 0xd5, 0xe3, 0xa3, 0xda, 0xb4, 0x22, 0x62, 0xa4, 0x81, 0xbc, - 0x0e, 0x65, 0xcf, 0xe7, 0x5d, 0xb5, 0x7a, 0x46, 0xf9, 0x6a, 0xe1, 0x5a, 0xb9, 0xb1, 0xa0, 0xba, - 0x57, 0xbe, 0xaf, 0xe8, 0xa8, 0x25, 0xcc, 0x3f, 0x2e, 0xc2, 0xd0, 0xa8, 0xc9, 0x5b, 0x50, 0x55, - 0x68, 0x77, 0xbd, 0x36, 0x13, 0x8b, 0x5f, 0x6e, 0xcc, 0x1f, 0x1f, 0xd5, 0xaa, 0x2b, 0x31, 0x19, - 0x93, 0x32, 0xe4, 0x03, 0x98, 0x60, 0x37, 0xd4, 0x36, 0x7c, 0x7f, 0xa4, 0xd1, 0x35, 0x6f, 0x68, - 0x03, 0x2d, 0x1d, 0x1f, 0xd5, 0x26, 0x9a, 0x37, 0x70, 0x82, 0xdd, 0xe0, 0xee, 0xa3, 0xed, 0x84, - 0xc2, 0x78, 0x46, 0x75, 0x1f, 0x37, 0x9d, 0x50, 0x43, 0x0b, 0xf7, 0x71, 0xd3, 0x09, 0x91, 0xa3, - 0x72, 0xf7, 0xd1, 0x09, 0x43, 0x5f, 0x18, 0xdf, 0xa8, 0xee, 0xe3, 0xd6, 0xce, 0xce, 0xb6, 0x86, - 0x17, 0xd6, 0xcd, 0x29, 0x28, 0x80, 0xc9, 0x27, 0x7c, 0x26, 0x25, 0xcf, 0x0b, 0x0e, 0x95, 0xd5, - 0xde, 0x1a, 0xcb, 0x6a, 0xbd, 0xe0, 0x50, 0xab, 0x53, 0x6b, 0xa2, 0x19, 0x98, 0xd4, 0x26, 0x46, - 0xd7, 0xda, 0x63, 0xc2, 0x48, 0x47, 0x1e, 0xdd, 0xda, 0x46, 0x33, 0x33, 0xba, 0xb5, 0x8d, 0x26, - 0x0a, 0x60, 0xbe, 0x36, 0x81, 0x75, 0xa0, 0x6c, 0x7a, 0xb4, 0xb5, 0x41, 0xeb, 0x20, 0xbd, 0x36, - 0x68, 0x1d, 0x20, 0x47, 0x35, 0xdb, 0x70, 0x29, 0xe2, 0x20, 0xf5, 0x3d, 0xe6, 0x88, 0x01, 0xd2, - 0x3d, 0xb2, 0x0c, 0x15, 0xdb, 0x73, 0xf7, 0x9c, 0xf6, 0x3d, 0xcb, 0x57, 0x8e, 0x49, 0x7b, 0xb4, - 0xd5, 0x88, 0x81, 0xb1, 0x0c, 0x79, 0x19, 0x26, 0xbb, 0xf4, 0x50, 0x79, 0xa8, 0xaa, 0x12, 0x9d, - 0xbc, 0x43, 0x0f, 0x91, 0xd3, 0xcd, 0x1f, 0x17, 0xe0, 0x42, 0xce, 0xe4, 0xf2, 0x66, 0x83, 0xa0, - 0xa7, 0x34, 0xe8, 0x66, 0x0f, 0xf0, 0x2e, 0x72, 0x3a, 0xf9, 0x9d, 0x02, 0xcc, 0x27, 0x66, 0x7b, - 0x65, 0xa0, 0x9c, 0xe0, 0xe8, 0xbb, 0x3b, 0x85, 0xd5, 0xb8, 0xac, 0x34, 0xce, 0x67, 0x18, 0x98, - 0xd5, 0x6a, 0xfe, 0x93, 0x38, 0x75, 0x53, 0x34, 0x62, 0xc1, 0xdc, 0x80, 0xd1, 0x80, 0xbb, 0xe8, - 0x26, 0xb5, 0x03, 0x1a, 0xaa, 0x03, 0xf8, 0xd5, 0xba, 0x3c, 0xda, 0x79, 0x2f, 0xea, 0x3c, 0xca, - 0xa8, 0xef, 0xbf, 0x55, 0x97, 0x12, 0x77, 0xe8, 0x61, 0x93, 0xf6, 0x28, 0xc7, 0x68, 0x90, 0xe3, - 0xa3, 0xda, 0xdc, 0x83, 0x14, 0x00, 0x66, 0x00, 0xb9, 0x0a, 0xdf, 0x62, 0xec, 0xc0, 0x0b, 0x5a, - 0x4a, 0xc5, 0xc4, 0x53, 0xab, 0xd8, 0x4e, 0x01, 0x60, 0x06, 0xd0, 0xfc, 0x2e, 0xc0, 0xaa, 0xe7, - 0x86, 0x8e, 0x3b, 0xa0, 0xf7, 0x5d, 0xf2, 0x0a, 0x14, 0x69, 0x10, 0x78, 0x81, 0x72, 0x48, 0xb3, - 0x6a, 0x82, 0x8a, 0xeb, 0x9c, 0x88, 0x92, 0x47, 0x5e, 0x83, 0xd2, 0x9e, 0xe5, 0xf4, 0x68, 0x4b, - 0xf4, 0xa6, 0xdc, 0x98, 0x53, 0x52, 0xa5, 0x0d, 0x41, 0x45, 0xc5, 0x35, 0xff, 0xa4, 0x04, 0xd3, - 0x6b, 0x2b, 0x37, 0x77, 0x2c, 0xd6, 0x3d, 0xc5, 0x29, 0xf7, 0x3a, 0x94, 0x43, 0xda, 0xf7, 0x7b, - 0x56, 0x48, 0x95, 0x1d, 0x69, 0xa7, 0xba, 0xa3, 0xe8, 0xa8, 0x25, 0x88, 0xc7, 0x8f, 0x6c, 0x15, - 0x33, 0x28, 0xcf, 0xf5, 0xde, 0x88, 0x36, 0xa1, 0x50, 0x92, 0x67, 0xb6, 0x22, 0x61, 0xac, 0x83, - 0x30, 0xa8, 0x46, 0xca, 0x91, 0xee, 0x29, 0x77, 0x36, 0x62, 0xac, 0x15, 0xe3, 0x48, 0xf7, 0x92, - 0x20, 0x60, 0x52, 0x0b, 0xf9, 0x06, 0xcc, 0xb4, 0xa8, 0x4f, 0xdd, 0x16, 0x75, 0x6d, 0x87, 0x32, - 0xa3, 0x78, 0x75, 0x92, 0xcf, 0xcb, 0xf1, 0x51, 0x6d, 0x66, 0x2d, 0x41, 0xc7, 0x94, 0x14, 0x79, - 0x04, 0x95, 0x03, 0x27, 0xec, 0x6c, 0x86, 0xb4, 0xcf, 0x3d, 0x13, 0x0f, 0x67, 0xbe, 0x35, 0x52, - 0x47, 0x39, 0x42, 0x3c, 0x2d, 0x1f, 0x44, 0x98, 0x18, 0xc3, 0x73, 0x4f, 0xc1, 0x3f, 0x44, 0x60, - 0x25, 0xbc, 0x54, 0x25, 0xdd, 0x40, 0x30, 0x30, 0x96, 0x21, 0x0c, 0x66, 0xf8, 0x47, 0x93, 0x7e, - 0x34, 0xa0, 0xae, 0x4d, 0xc5, 0xf9, 0x39, 0x6a, 0xb8, 0x15, 0x81, 0xc8, 0x19, 0xf9, 0x20, 0x01, - 0x8b, 0x29, 0x25, 0xdc, 0xfa, 0x0e, 0x3a, 0xd4, 0x35, 0x2a, 0x69, 0xeb, 0xfb, 0xa0, 0x43, 0x5d, - 0x14, 0x1c, 0xe2, 0x01, 0xd8, 0x7a, 0x1b, 0x18, 0x30, 0xc6, 0x21, 0x1b, 0xef, 0xa6, 0xc6, 0x1c, - 0x0f, 0x58, 0xe2, 0x6f, 0x4c, 0xa8, 0x30, 0xff, 0xae, 0x00, 0x55, 0xbe, 0x39, 0x22, 0x83, 0x7e, - 0x0d, 0x4a, 0xa1, 0x15, 0xb4, 0x95, 0x17, 0xa9, 0xc4, 0x9b, 0x6a, 0x47, 0x50, 0x51, 0x71, 0x89, - 0x05, 0xc5, 0xd0, 0x62, 0xdd, 0x28, 0x4e, 0xfd, 0xc5, 0x91, 0xfa, 0xa8, 0x76, 0x65, 0xbc, 0xbf, - 0xf9, 0x17, 0x43, 0x89, 0x4c, 0xae, 0x41, 0x99, 0xef, 0xe0, 0x0d, 0x8b, 0xc9, 0xa0, 0xa0, 0xdc, - 0x98, 0xe1, 0xbb, 0x70, 0x43, 0xd1, 0x50, 0x73, 0xcd, 0xef, 0xc1, 0xdc, 0xfa, 0xc7, 0xd4, 0x1e, - 0x84, 0x5e, 0x20, 0x8f, 0x05, 0x72, 0x1b, 0x08, 0xa3, 0xc1, 0xbe, 0x63, 0xd3, 0x15, 0xdb, 0xf6, - 0x06, 0x6e, 0xb8, 0x15, 0xef, 0xfa, 0x45, 0xa5, 0x8d, 0x34, 0x87, 0x24, 0x30, 0xa7, 0x95, 0xf9, - 0x97, 0x53, 0x50, 0x4d, 0x04, 0x16, 0x7c, 0x15, 0x03, 0xea, 0x7b, 0x59, 0x1f, 0xc2, 0x8f, 0x2e, - 0x14, 0x1c, 0xee, 0x43, 0x02, 0xba, 0xef, 0x30, 0x1e, 0xbe, 0x66, 0x7c, 0x08, 0x2a, 0x3a, 0x6a, - 0x09, 0x52, 0x83, 0x62, 0x8b, 0xfa, 0x61, 0x47, 0x0c, 0x72, 0xaa, 0x51, 0xe1, 0x13, 0xb1, 0xc6, - 0x09, 0x28, 0xe9, 0x5c, 0x60, 0x8f, 0x86, 0x76, 0xc7, 0x98, 0x12, 0xfb, 0x4e, 0x08, 0x6c, 0x70, - 0x02, 0x4a, 0x7a, 0xce, 0x11, 0x50, 0x7c, 0xf6, 0x47, 0x40, 0xe9, 0x8c, 0x8f, 0x00, 0xe2, 0xc3, - 0x05, 0xc6, 0x3a, 0xdb, 0x81, 0xb3, 0x6f, 0x85, 0x54, 0x34, 0x16, 0x7a, 0xa6, 0x9f, 0x46, 0xcf, - 0xe5, 0xe3, 0xa3, 0xda, 0x85, 0x66, 0xf3, 0x56, 0x16, 0x05, 0xf3, 0xa0, 0x49, 0x13, 0x2e, 0x39, - 0x2e, 0xa3, 0xf6, 0x20, 0xa0, 0x9b, 0x6d, 0xd7, 0x0b, 0xe8, 0x2d, 0x8f, 0x71, 0x38, 0x15, 0x4d, - 0xbf, 0xac, 0x16, 0xed, 0xd2, 0x66, 0x9e, 0x10, 0xe6, 0xb7, 0x35, 0xff, 0xa1, 0x00, 0x33, 0xc9, - 0x58, 0x8a, 0x30, 0x80, 0xce, 0xda, 0x46, 0x53, 0x5a, 0xa6, 0x3a, 0x9c, 0xdf, 0x1f, 0x39, 0x44, - 0x93, 0x30, 0x71, 0x22, 0x12, 0xd3, 0x30, 0xa1, 0xe6, 0x14, 0xc9, 0xda, 0x2b, 0x50, 0xdc, 0xf3, - 0x02, 0x9b, 0xaa, 0xbd, 0xa5, 0xf7, 0xe0, 0x06, 0x27, 0xa2, 0xe4, 0x99, 0xff, 0x5a, 0x80, 0x84, - 0x06, 0xf2, 0xeb, 0x30, 0xcb, 0x75, 0xdc, 0x09, 0x76, 0x53, 0xa3, 0x69, 0x8c, 0x3c, 0x1a, 0x8d, - 0xd4, 0xb8, 0xa4, 0xf4, 0xcf, 0xa6, 0xc8, 0x98, 0xd6, 0x47, 0x7e, 0x0e, 0x2a, 0x56, 0xab, 0x15, - 0x50, 0xc6, 0xa8, 0x74, 0x3d, 0x95, 0xc6, 0xac, 0x38, 0x2b, 0x23, 0x22, 0xc6, 0x7c, 0xbe, 0x0d, - 0x79, 0xf0, 0xca, 0x2d, 0x5b, 0x0c, 0x32, 0xb1, 0x0d, 0xb9, 0x12, 0x4e, 0x47, 0x2d, 0x61, 0xfe, - 0x60, 0x0a, 0xd2, 0xba, 0x49, 0x0b, 0xe6, 0xbb, 0xc1, 0xee, 0xea, 0xaa, 0x65, 0x77, 0x46, 0x0a, - 0xad, 0x2e, 0xf0, 0x98, 0xee, 0x4e, 0x1a, 0x01, 0xb3, 0x90, 0x4a, 0xcb, 0x1d, 0x7a, 0x18, 0x5a, - 0xbb, 0xa3, 0x44, 0x57, 0x91, 0x96, 0x24, 0x02, 0x66, 0x21, 0xc9, 0x37, 0xa1, 0xda, 0x0d, 0x76, - 0xa3, 0x4d, 0xae, 0xa6, 0xe3, 0x82, 0x9a, 0x8e, 0xea, 0x9d, 0x98, 0x85, 0x49, 0x39, 0x3e, 0x85, - 0xdd, 0x60, 0x17, 0xa9, 0xd5, 0x8b, 0xf2, 0x76, 0x3d, 0x85, 0x77, 0x14, 0x1d, 0xb5, 0x04, 0xf1, - 0x81, 0x74, 0xa3, 0xd9, 0xd3, 0xf1, 0xb9, 0xf2, 0x45, 0xd7, 0xf2, 0x46, 0xa3, 0x85, 0x92, 0x03, - 0x7a, 0x81, 0xfb, 0xe6, 0x3b, 0x43, 0x38, 0x98, 0x83, 0x4d, 0xbe, 0x0b, 0x97, 0xbb, 0xc1, 0xae, - 0x72, 0xe4, 0xdb, 0x81, 0xe3, 0xda, 0x8e, 0x9f, 0x4a, 0xd8, 0x6b, 0xaa, 0xbb, 0x97, 0xef, 0xe4, - 0x8b, 0xe1, 0x49, 0xed, 0xcd, 0x37, 0x60, 0x26, 0x99, 0xf0, 0x3d, 0x21, 0x49, 0x30, 0xff, 0xa3, - 0x00, 0xa5, 0x4d, 0xd7, 0x1f, 0xfc, 0x94, 0xd4, 0x8e, 0xfe, 0x6c, 0x0a, 0xa6, 0x78, 0xe8, 0x45, - 0xae, 0xc1, 0x54, 0x78, 0xe8, 0xcb, 0xb3, 0x75, 0xb2, 0x71, 0x31, 0x72, 0x34, 0x3b, 0x87, 0x3e, - 0x7d, 0xac, 0xfe, 0x45, 0x21, 0x41, 0xde, 0x83, 0x92, 0x3b, 0xe8, 0x3f, 0xb4, 0x7a, 0xca, 0x29, - 0xbd, 0x16, 0x85, 0x16, 0x5b, 0x82, 0xfa, 0xf8, 0xa8, 0x76, 0x91, 0xba, 0xb6, 0xd7, 0x72, 0xdc, - 0xf6, 0xf2, 0x23, 0xe6, 0xb9, 0xf5, 0xad, 0x41, 0x7f, 0x97, 0x06, 0xa8, 0x5a, 0x91, 0xaf, 0xc3, - 0xf4, 0xae, 0xe7, 0xf5, 0x38, 0x80, 0x74, 0x59, 0xf3, 0x0a, 0x60, 0xba, 0x21, 0xc9, 0x18, 0xf1, - 0x79, 0x14, 0xc3, 0xc2, 0x80, 0x4b, 0x4e, 0xa5, 0xa3, 0x98, 0xa6, 0xa0, 0xa2, 0xe2, 0x92, 0x3e, - 0x94, 0xfa, 0x96, 0xcf, 0xe5, 0x8a, 0x62, 0xca, 0xd6, 0x47, 0x8e, 0x4f, 0xeb, 0xf7, 0x04, 0xce, - 0xba, 0x1b, 0x06, 0x87, 0xb1, 0x3a, 0x49, 0x44, 0xa5, 0x84, 0x38, 0x30, 0xdd, 0x73, 0x58, 0xc8, - 0xf5, 0x95, 0xc6, 0xb0, 0x0a, 0xae, 0xef, 0xa1, 0xd5, 0x1b, 0xd0, 0x78, 0x06, 0xee, 0x4a, 0x58, - 0x8c, 0xf0, 0x17, 0x0f, 0xa1, 0x9a, 0xe8, 0x11, 0x59, 0x90, 0x89, 0xb1, 0x30, 0x5e, 0x91, 0x0b, - 0x93, 0x1d, 0x28, 0xee, 0x73, 0x0c, 0xe5, 0x6c, 0xc6, 0xec, 0x09, 0x4a, 0xb0, 0x77, 0x26, 0xde, - 0x2e, 0xbc, 0x53, 0xfe, 0xe1, 0x9f, 0xd6, 0xce, 0x7d, 0xfa, 0xcf, 0x57, 0xcf, 0x99, 0x7f, 0x3f, - 0x09, 0x15, 0x2d, 0xf2, 0x7f, 0xdb, 0x52, 0x82, 0x8c, 0xa5, 0xdc, 0x1e, 0x6f, 0xbe, 0x4e, 0x65, - 0x2e, 0x2b, 0x69, 0x73, 0x99, 0x69, 0xfc, 0xbf, 0xc4, 0x52, 0x3f, 0x3e, 0xaa, 0x19, 0xe9, 0x49, - 0x40, 0xeb, 0xe0, 0x1e, 0x65, 0xcc, 0x6a, 0xd3, 0xd8, 0x0c, 0xbe, 0xf5, 0x24, 0x33, 0xb8, 0x98, - 0x34, 0x83, 0x4a, 0xfe, 0x32, 0x7e, 0x3a, 0x09, 0xe5, 0x7b, 0x34, 0xb4, 0x5a, 0x56, 0x68, 0x91, - 0xdf, 0x2e, 0x40, 0xd5, 0x72, 0x5d, 0x2f, 0x14, 0x05, 0xc4, 0xc8, 0xbd, 0x6d, 0x8d, 0x34, 0x1d, - 0x11, 0x68, 0x7d, 0x25, 0x06, 0x94, 0x53, 0xa2, 0x4f, 0xa6, 0x04, 0x07, 0x93, 0x7a, 0xc9, 0x47, - 0x50, 0xea, 0x59, 0xbb, 0xb4, 0x17, 0x79, 0xbb, 0xcd, 0xf1, 0x7a, 0x70, 0x57, 0x60, 0x65, 0xd6, - 0x43, 0x12, 0x51, 0x29, 0x5a, 0x7c, 0x0f, 0x16, 0xb2, 0x1d, 0x7d, 0x9a, 0x19, 0xe5, 0x8b, 0x91, - 0x50, 0xf3, 0x34, 0x4d, 0xcd, 0xbf, 0xa9, 0x00, 0x6c, 0x79, 0x2d, 0xda, 0x0c, 0xad, 0x70, 0xc0, - 0xc8, 0x22, 0x4c, 0x38, 0x2d, 0x75, 0x14, 0x81, 0xea, 0xed, 0xc4, 0xe6, 0x1a, 0x4e, 0x38, 0x2d, - 0x5d, 0xe2, 0x98, 0x38, 0xb1, 0xc4, 0xf1, 0x4d, 0xa8, 0xb6, 0x1c, 0xe6, 0xf7, 0xac, 0xc3, 0xad, - 0x9c, 0x58, 0x60, 0x2d, 0x66, 0x61, 0x52, 0x8e, 0xbc, 0xae, 0xf6, 0xaf, 0xdc, 0x28, 0x46, 0x66, - 0xff, 0x96, 0x79, 0xf7, 0x12, 0x7b, 0xf8, 0x6d, 0x98, 0x89, 0x4a, 0x08, 0x42, 0x4b, 0x51, 0xb4, - 0x8a, 0x76, 0xfd, 0xcc, 0x4e, 0x82, 0x87, 0x29, 0xc9, 0x6c, 0x89, 0xa3, 0xf4, 0x5c, 0x4a, 0x1c, - 0x6b, 0xb0, 0xc0, 0x42, 0x2f, 0xa0, 0xad, 0x48, 0x62, 0x73, 0xcd, 0x20, 0xa9, 0x81, 0x2e, 0x34, - 0x33, 0x7c, 0x1c, 0x6a, 0x41, 0xb6, 0xe1, 0x62, 0xd4, 0x89, 0xe4, 0x00, 0x8d, 0x0b, 0x02, 0xe9, - 0x8a, 0x42, 0xba, 0xf8, 0x41, 0x8e, 0x0c, 0xe6, 0xb6, 0x24, 0x6f, 0x42, 0xd1, 0xef, 0x58, 0x8c, - 0xaa, 0xa2, 0x46, 0x94, 0xbb, 0x16, 0xb7, 0x39, 0xf1, 0xf1, 0x51, 0xad, 0xc2, 0xa7, 0x5d, 0x7c, - 0xa0, 0x14, 0x24, 0xd7, 0x01, 0x76, 0xbd, 0x81, 0xdb, 0xb2, 0x82, 0xc3, 0xcd, 0x35, 0x91, 0xc9, - 0x24, 0xae, 0x2d, 0x1a, 0x9a, 0x83, 0x09, 0x29, 0xee, 0x30, 0xfb, 0xd2, 0x75, 0xa8, 0xda, 0x84, - 0x76, 0x98, 0xda, 0xa3, 0x28, 0x3e, 0xf9, 0x10, 0x2a, 0x2c, 0xb4, 0x82, 0x90, 0xb6, 0x56, 0x42, - 0x55, 0xa0, 0xf8, 0xff, 0x89, 0xd0, 0x4e, 0x5f, 0x22, 0xc6, 0xcb, 0xd2, 0xa7, 0xa1, 0xc5, 0x83, - 0xbd, 0x1d, 0xa7, 0x4f, 0xe3, 0xa8, 0xa2, 0x19, 0x81, 0x60, 0x8c, 0x47, 0x7e, 0x15, 0x60, 0xcf, - 0x71, 0x1d, 0xd6, 0x11, 0xe8, 0xd5, 0xa7, 0x46, 0xd7, 0xe3, 0xdc, 0xd0, 0x28, 0x98, 0x40, 0xe4, - 0x39, 0x8f, 0xef, 0xb5, 0x36, 0xb7, 0x8d, 0x19, 0x31, 0x4a, 0x9d, 0xf3, 0x6c, 0x73, 0x22, 0x4a, - 0x1e, 0xb9, 0x06, 0xe5, 0x96, 0x45, 0xfb, 0x9e, 0x4b, 0x5b, 0xc6, 0x6c, 0x5c, 0x77, 0x58, 0x53, - 0x34, 0xd4, 0x5c, 0xf2, 0x7d, 0x28, 0x39, 0x22, 0xe4, 0x33, 0xe6, 0x44, 0x57, 0xbf, 0x3d, 0xda, - 0xa1, 0x20, 0x20, 0x1a, 0xc0, 0x3d, 0x8e, 0xfc, 0x1b, 0x15, 0x2c, 0xb1, 0x61, 0xda, 0x1b, 0x84, - 0x42, 0xc3, 0xbc, 0xd0, 0x30, 0x5a, 0x9d, 0xe5, 0xbe, 0xc4, 0x90, 0xd7, 0x48, 0xea, 0x03, 0x23, - 0x64, 0x3e, 0x5e, 0xbb, 0xe3, 0xf4, 0x5a, 0x01, 0x75, 0x8d, 0x05, 0x91, 0x52, 0x89, 0xf1, 0xae, - 0x2a, 0x1a, 0x6a, 0x2e, 0xf9, 0x05, 0x98, 0xf5, 0x06, 0xa1, 0xb0, 0x1b, 0x6e, 0x76, 0xcc, 0x38, - 0x2f, 0xc4, 0xcf, 0xf3, 0xb4, 0xed, 0x7e, 0x92, 0x81, 0x69, 0x39, 0x73, 0x0e, 0x66, 0x92, 0x77, - 0xaf, 0xe6, 0x1f, 0x4e, 0x40, 0xd4, 0x8f, 0x9f, 0x86, 0x68, 0x99, 0x98, 0x50, 0x0a, 0x28, 0x1b, - 0xf4, 0x42, 0xe5, 0x6c, 0xc5, 0x5a, 0xa3, 0xa0, 0xa0, 0xe2, 0x98, 0x07, 0x30, 0xcb, 0x7b, 0xdb, - 0xeb, 0xd1, 0x5e, 0x33, 0xa4, 0x3e, 0x23, 0x7b, 0x50, 0x64, 0xfc, 0x0f, 0x35, 0x27, 0xa3, 0xdd, - 0xea, 0x44, 0xae, 0x86, 0x43, 0xc6, 0xf6, 0x2e, 0x14, 0xa0, 0x84, 0x37, 0xff, 0x68, 0x02, 0x2a, - 0x7a, 0x9e, 0x4e, 0x51, 0x21, 0x7f, 0x15, 0xa6, 0x5b, 0x74, 0xcf, 0xe2, 0xa3, 0x51, 0x17, 0x2d, - 0xdc, 0xac, 0xd6, 0x24, 0x09, 0x23, 0x1e, 0xa9, 0x45, 0x87, 0x99, 0x1c, 0xb2, 0xa8, 0x5a, 0x25, - 0x63, 0x45, 0xd2, 0x85, 0x8a, 0xf8, 0x63, 0x23, 0xba, 0x14, 0x1e, 0x75, 0xdd, 0x1f, 0x46, 0x28, - 0xb2, 0x16, 0xa0, 0x3f, 0x31, 0xc6, 0xcf, 0x5c, 0xe6, 0x16, 0x4f, 0x73, 0x99, 0x6b, 0x6e, 0x00, - 0x77, 0x0c, 0x37, 0x57, 0xc9, 0xbb, 0x50, 0x66, 0xca, 0x74, 0xd5, 0xbc, 0x7c, 0x2d, 0xca, 0x82, - 0x23, 0x93, 0x7e, 0x7c, 0x54, 0x9b, 0x15, 0xc2, 0x11, 0x01, 0x75, 0x13, 0x73, 0x19, 0xaa, 0x89, - 0xcb, 0x2f, 0x3e, 0xc3, 0x3c, 0xe4, 0xc8, 0xce, 0xf0, 0x9a, 0x15, 0x5a, 0x28, 0x38, 0xe6, 0xe3, - 0x09, 0x58, 0x40, 0xca, 0xbc, 0x41, 0x60, 0xd3, 0x64, 0x65, 0xd6, 0xb2, 0xc5, 0x8d, 0x78, 0xa6, - 0x32, 0xbb, 0x22, 0xa8, 0xa8, 0xb8, 0xe4, 0xdb, 0x30, 0xdb, 0xa7, 0x41, 0x5b, 0x6f, 0x36, 0xb5, - 0x48, 0xba, 0xbe, 0x72, 0x2f, 0xc9, 0xc4, 0xb4, 0x2c, 0xcf, 0xf7, 0xfb, 0x96, 0xeb, 0xec, 0x51, - 0x16, 0x66, 0x4b, 0x26, 0xf7, 0x14, 0x1d, 0xb5, 0x04, 0xb9, 0x09, 0xe7, 0x19, 0x0d, 0xef, 0x1f, - 0xb8, 0x34, 0x40, 0xba, 0x47, 0x03, 0x51, 0x49, 0x9f, 0x12, 0x2e, 0xf3, 0x45, 0xd5, 0xec, 0x7c, - 0x33, 0x2b, 0x80, 0xc3, 0x6d, 0xc4, 0xe9, 0x3b, 0xb0, 0x6d, 0xca, 0xd8, 0xaa, 0xe7, 0xb6, 0x1c, - 0x7d, 0xef, 0x9f, 0x3c, 0x7d, 0x33, 0x7c, 0x1c, 0x6a, 0xc1, 0x51, 0xf6, 0x2c, 0xa7, 0x37, 0x08, - 0x68, 0x8c, 0x52, 0x4a, 0xa3, 0x6c, 0x64, 0xf8, 0x38, 0xd4, 0xc2, 0x7c, 0x13, 0x66, 0x91, 0x86, - 0xc1, 0xa1, 0x9e, 0x93, 0x1a, 0x14, 0x7b, 0x4e, 0xdf, 0x91, 0xc5, 0x9f, 0xa2, 0x34, 0xe4, 0xbb, - 0x9c, 0x80, 0x92, 0x6e, 0xfe, 0xb0, 0x00, 0x10, 0xdf, 0x69, 0x93, 0x2e, 0x94, 0xd9, 0x8d, 0xc6, - 0xc0, 0xee, 0xea, 0x7a, 0xd1, 0x88, 0xd7, 0x0a, 0x0a, 0x24, 0x5e, 0x82, 0x88, 0x82, 0x5a, 0xc1, - 0x93, 0x6e, 0x3c, 0xff, 0x6a, 0x12, 0x74, 0x2b, 0xbe, 0xb8, 0xd4, 0x6d, 0xf9, 0x9e, 0xe3, 0x46, - 0xd5, 0x7d, 0x8d, 0xbc, 0xae, 0xe8, 0xa8, 0x25, 0xb8, 0xbd, 0xed, 0xca, 0x41, 0x4c, 0xa4, 0xed, - 0x4d, 0xf5, 0x41, 0x71, 0xb9, 0x5c, 0x40, 0xdb, 0x7c, 0xae, 0x27, 0xd3, 0x72, 0x28, 0xa8, 0xa8, - 0xb8, 0xfc, 0x98, 0x89, 0x0a, 0xa6, 0xca, 0x46, 0xc4, 0x31, 0x13, 0xd5, 0x56, 0x51, 0x73, 0x49, - 0x07, 0xe6, 0x2d, 0xb1, 0xb4, 0x71, 0x11, 0xf8, 0xa9, 0xea, 0xd9, 0xf1, 0x7d, 0x6a, 0x1a, 0x05, - 0xb3, 0xb0, 0x5c, 0x13, 0x8b, 0x9b, 0x3f, 0x7d, 0x59, 0x5b, 0x6b, 0x6a, 0xa6, 0x51, 0x30, 0x0b, - 0xcb, 0x23, 0xac, 0xc0, 0xeb, 0xd1, 0x15, 0xdc, 0x52, 0x91, 0x9c, 0x8e, 0xb0, 0x50, 0x92, 0x31, - 0xe2, 0x9b, 0xbf, 0x5b, 0x80, 0xb9, 0xa6, 0x1d, 0x38, 0x7e, 0xa8, 0xf7, 0xfe, 0x96, 0xb8, 0x08, - 0x0f, 0x2d, 0x1e, 0xfb, 0x28, 0x9b, 0x7a, 0xf9, 0x84, 0x7a, 0x9a, 0x14, 0x4a, 0xdd, 0x93, 0x4b, - 0x12, 0xc6, 0x10, 0x22, 0xeb, 0x15, 0xde, 0x25, 0xbb, 0xb6, 0x4d, 0x41, 0x45, 0xc5, 0x35, 0x7f, - 0x54, 0x80, 0xb2, 0xbe, 0xbd, 0x7a, 0x05, 0x8a, 0xe2, 0x52, 0x44, 0xd9, 0x8e, 0x3e, 0x4c, 0x56, - 0x39, 0x11, 0x25, 0x8f, 0x0b, 0x89, 0x70, 0x4e, 0x01, 0x27, 0x4e, 0x1c, 0x2b, 0x08, 0x51, 0xf2, - 0xb8, 0xd1, 0x52, 0xb7, 0xa5, 0xec, 0x45, 0x1b, 0xed, 0xba, 0xdb, 0x42, 0x4e, 0x17, 0x17, 0xbb, - 0x5e, 0xd0, 0xb7, 0xc2, 0x6c, 0x4e, 0xbe, 0x21, 0xa8, 0xa8, 0xb8, 0xe6, 0x79, 0x98, 0x6f, 0x0e, - 0x98, 0x4f, 0x5d, 0x1d, 0x82, 0x9b, 0xb3, 0x50, 0x4d, 0x3c, 0x21, 0x33, 0xff, 0xeb, 0x32, 0xe8, - 0x5b, 0xdb, 0x9f, 0xdd, 0xfd, 0x8e, 0x94, 0x18, 0xd9, 0x3a, 0xc6, 0x2d, 0x8e, 0x1f, 0xe3, 0xea, - 0x95, 0xcc, 0xc4, 0xb9, 0xed, 0x38, 0xce, 0x2d, 0x9d, 0x41, 0x9c, 0xab, 0xf7, 0xd6, 0x50, 0xac, - 0xfb, 0x7b, 0x05, 0x98, 0x71, 0x79, 0x1e, 0xad, 0x76, 0xb0, 0x31, 0x2d, 0x62, 0xab, 0xfb, 0x63, - 0x4d, 0x62, 0x7d, 0x2b, 0x81, 0x28, 0x4b, 0x08, 0x3a, 0xcf, 0x4d, 0xb2, 0x30, 0xa5, 0x9a, 0x6c, - 0x40, 0xd9, 0xda, 0xe3, 0xc9, 0x49, 0x78, 0xa8, 0xae, 0x9f, 0xaf, 0xe4, 0xed, 0xe9, 0x15, 0x25, - 0x23, 0xdd, 0x65, 0xf4, 0x85, 0xba, 0x2d, 0x3f, 0x6f, 0xfa, 0xaa, 0x8c, 0x21, 0xb2, 0xb7, 0x51, - 0xcf, 0x9b, 0xa8, 0x16, 0x92, 0x38, 0xf2, 0x15, 0x05, 0xb5, 0x02, 0x1e, 0xc9, 0xca, 0xf4, 0x47, - 0xe4, 0x7e, 0x65, 0x19, 0xc9, 0xca, 0xd4, 0x08, 0x15, 0x87, 0xb4, 0xa3, 0xc0, 0xb5, 0x2a, 0x26, - 0xb7, 0x31, 0x72, 0x30, 0xaf, 0x63, 0xe1, 0xfc, 0xc8, 0x95, 0xdc, 0x4e, 0xba, 0xc5, 0x99, 0xd3, - 0xb8, 0xc5, 0xd9, 0x13, 0x5d, 0x62, 0x1b, 0x4a, 0x4c, 0x38, 0x5d, 0x91, 0xf3, 0x55, 0xaf, 0xaf, - 0x8e, 0x76, 0x66, 0xa7, 0xfc, 0xb6, 0x9c, 0x1d, 0x49, 0x43, 0x05, 0x4f, 0x3c, 0x28, 0x07, 0x2a, - 0xb6, 0x53, 0x69, 0xe3, 0x68, 0x55, 0xe7, 0x6c, 0x80, 0x28, 0xed, 0x23, 0xa2, 0xa2, 0x56, 0x42, - 0x3e, 0x84, 0xc9, 0x96, 0xd5, 0x56, 0x09, 0xe4, 0x77, 0x46, 0xbe, 0xa8, 0x8f, 0xd4, 0x88, 0xb7, - 0x5b, 0x6b, 0x2b, 0x37, 0x91, 0xa3, 0x92, 0x2e, 0x4c, 0x33, 0xe9, 0x83, 0x8d, 0x85, 0x31, 0x9e, - 0x44, 0x65, 0xfc, 0xb8, 0x4c, 0x29, 0x14, 0x11, 0x23, 0x0d, 0x64, 0x1d, 0xa6, 0xf7, 0xbd, 0xde, - 0xa0, 0xaf, 0x32, 0xcf, 0xea, 0xf5, 0xc5, 0xbc, 0xd5, 0x7e, 0x28, 0x44, 0x62, 0x27, 0x20, 0xbf, - 0x19, 0x46, 0x6d, 0xc9, 0x6f, 0x16, 0x60, 0x8e, 0x6f, 0x1d, 0x6d, 0x07, 0xcc, 0x20, 0x63, 0x58, - 0xea, 0x03, 0x46, 0x83, 0xd8, 0xc2, 0x5e, 0x50, 0x6a, 0xe7, 0x36, 0x53, 0x1a, 0x30, 0xa3, 0x91, - 0xf8, 0x50, 0x66, 0x4e, 0x8b, 0xda, 0x56, 0xc0, 0x8c, 0x0b, 0x67, 0xa6, 0x3d, 0x0e, 0x15, 0x15, - 0x36, 0x6a, 0x2d, 0xe4, 0xb7, 0xc4, 0x33, 0x36, 0xf5, 0x90, 0x53, 0x3d, 0xae, 0xbd, 0x78, 0x96, - 0x8f, 0x6b, 0x2f, 0xc8, 0x37, 0x6c, 0x29, 0x0d, 0x98, 0x55, 0x49, 0xee, 0xc3, 0x25, 0x9e, 0xa9, - 0xec, 0xd3, 0x35, 0x6a, 0xb5, 0x7a, 0x8e, 0x4b, 0x9b, 0xd4, 0xf6, 0xdc, 0x16, 0x33, 0x2e, 0x89, - 0x7b, 0x81, 0x17, 0x8f, 0x8f, 0x6a, 0x97, 0x56, 0xf2, 0x04, 0x30, 0xbf, 0x1d, 0xf9, 0x04, 0x66, - 0x83, 0x64, 0xc0, 0x6e, 0xbc, 0x30, 0xc6, 0xa5, 0x74, 0x2a, 0xf4, 0x97, 0x95, 0x8d, 0x14, 0x09, - 0xd3, 0xba, 0xc8, 0x5b, 0x50, 0xf5, 0x95, 0xa7, 0x72, 0x58, 0xdf, 0xb8, 0x2c, 0xc6, 0x20, 0x4e, - 0xd4, 0xed, 0x98, 0x8c, 0x49, 0x19, 0xf2, 0x00, 0xaa, 0xa1, 0xd7, 0xa3, 0x81, 0x2a, 0xa0, 0x1b, - 0x62, 0xf1, 0x97, 0xf2, 0x2c, 0x79, 0x47, 0x8b, 0xc5, 0xe5, 0xd9, 0x98, 0xc6, 0x30, 0x89, 0xc3, - 0xf3, 0x3e, 0x66, 0x77, 0x68, 0x6b, 0xd0, 0xa3, 0x81, 0x48, 0x72, 0x5f, 0x4c, 0xe7, 0x7d, 0xcd, - 0x24, 0x13, 0xd3, 0xb2, 0x3c, 0x93, 0xf3, 0x03, 0xc7, 0x0b, 0x9c, 0xf0, 0x70, 0xb5, 0x67, 0x31, - 0x26, 0x00, 0x16, 0x05, 0x80, 0xce, 0xe4, 0xb6, 0xb3, 0x02, 0x38, 0xdc, 0x86, 0x47, 0xf9, 0x11, - 0xd1, 0x78, 0x49, 0xe4, 0x4b, 0xc2, 0x2d, 0x45, 0x6d, 0x51, 0x73, 0x4f, 0x78, 0xa2, 0x73, 0x65, - 0x94, 0x27, 0x3a, 0xa4, 0x05, 0x57, 0xac, 0x41, 0xe8, 0xf5, 0x39, 0x21, 0xdd, 0x64, 0xc7, 0xeb, - 0x52, 0xd7, 0xb8, 0x2a, 0xce, 0xaa, 0xab, 0xc7, 0x47, 0xb5, 0x2b, 0x2b, 0x5f, 0x21, 0x87, 0x5f, - 0x89, 0x42, 0xfa, 0x50, 0xa6, 0xea, 0x99, 0x91, 0xf1, 0xb5, 0x31, 0x0e, 0x89, 0xf4, 0x5b, 0x25, - 0x39, 0x41, 0x11, 0x0d, 0xb5, 0x0a, 0xb2, 0x03, 0xd5, 0x8e, 0xc7, 0xc2, 0x95, 0x9e, 0x63, 0x31, - 0xca, 0x8c, 0x97, 0x85, 0x9d, 0xe4, 0x9e, 0x6f, 0xb7, 0x22, 0xb1, 0xd8, 0x4c, 0x6e, 0xc5, 0x2d, - 0x31, 0x09, 0x43, 0xa8, 0x48, 0x79, 0x06, 0x62, 0xd5, 0x3c, 0x37, 0xa4, 0x1f, 0x87, 0xc6, 0x92, - 0x18, 0xcb, 0x6b, 0x79, 0xc8, 0xdb, 0x5e, 0xab, 0x99, 0x96, 0x96, 0xbb, 0x3c, 0x43, 0xc4, 0x2c, - 0x26, 0x79, 0x1b, 0x66, 0x7c, 0xaf, 0xd5, 0xf4, 0xa9, 0xbd, 0x6d, 0x85, 0x76, 0xc7, 0xa8, 0xa5, - 0xcb, 0xff, 0xdb, 0x09, 0x1e, 0xa6, 0x24, 0x17, 0xdf, 0x87, 0xf3, 0x43, 0xf1, 0xd4, 0x53, 0xdd, - 0x95, 0xfc, 0x79, 0x01, 0x92, 0xe1, 0xec, 0x99, 0xc7, 0xfd, 0x37, 0xe1, 0xbc, 0xfa, 0x71, 0x0c, - 0x3f, 0x6c, 0x7b, 0x83, 0x30, 0xca, 0x7d, 0x13, 0x55, 0x0f, 0xcc, 0x0a, 0xe0, 0x70, 0x1b, 0xf3, - 0x2f, 0x0a, 0x30, 0x9b, 0x72, 0xdf, 0x67, 0x9e, 0xe7, 0x6d, 0x00, 0xe9, 0x3b, 0x41, 0xe0, 0x05, - 0xf2, 0x0c, 0xbc, 0xc7, 0x6d, 0x99, 0xa9, 0xe7, 0xb2, 0xe2, 0x99, 0xc5, 0xbd, 0x21, 0x2e, 0xe6, - 0xb4, 0x30, 0xff, 0xba, 0x00, 0x71, 0x59, 0x4d, 0xbf, 0x2d, 0x2a, 0x9c, 0xf8, 0xb6, 0xe8, 0x75, - 0x28, 0x3f, 0x62, 0x9e, 0xbb, 0x1d, 0xbf, 0x40, 0xd2, 0x13, 0x7a, 0xbb, 0x79, 0x7f, 0x4b, 0x48, - 0x6a, 0x09, 0x21, 0xfd, 0xd1, 0x86, 0xd3, 0x0b, 0x87, 0xdf, 0xe9, 0xdc, 0xfe, 0x25, 0x49, 0x47, - 0x2d, 0x41, 0x96, 0xa1, 0xa2, 0x2b, 0xb9, 0x2a, 0x41, 0xd4, 0x93, 0xa0, 0xcb, 0x98, 0x18, 0xcb, - 0x98, 0x3f, 0x9e, 0x80, 0x72, 0x54, 0x06, 0x25, 0xbf, 0x96, 0x08, 0x96, 0xe5, 0x04, 0xbf, 0x79, - 0xba, 0xfb, 0x85, 0xfb, 0xbb, 0x8f, 0xa8, 0x1d, 0xf2, 0x88, 0x38, 0xae, 0x1b, 0xc6, 0xb4, 0x44, - 0x84, 0x6c, 0xc3, 0x14, 0xf3, 0xa9, 0x3d, 0xd6, 0x0f, 0x95, 0x74, 0xd5, 0xd6, 0xa7, 0x76, 0x3c, - 0xc1, 0xfc, 0x0b, 0x05, 0x38, 0xe9, 0x42, 0x89, 0x89, 0xab, 0x40, 0x95, 0x78, 0xae, 0x8e, 0x59, - 0x1c, 0xe6, 0x50, 0xc9, 0xbb, 0x6f, 0xfe, 0x8d, 0x4a, 0x85, 0xf9, 0x79, 0x01, 0x66, 0x22, 0xd1, - 0xbb, 0x0e, 0x0b, 0xc9, 0xf7, 0x86, 0x26, 0xb1, 0x7e, 0xba, 0x49, 0xe4, 0xad, 0xc5, 0x14, 0xea, - 0x05, 0x8e, 0x28, 0x89, 0x09, 0xdc, 0x85, 0xa2, 0x23, 0xde, 0x0c, 0x8f, 0x53, 0x98, 0x8f, 0xfa, - 0x1b, 0x67, 0x0e, 0xf2, 0xcd, 0xb0, 0x84, 0x36, 0xff, 0xf6, 0x42, 0x3c, 0x24, 0x3e, 0xad, 0xc4, - 0x85, 0x4a, 0xb4, 0xc1, 0xa3, 0x82, 0xfb, 0xbb, 0x63, 0x25, 0x85, 0xb1, 0x51, 0x46, 0x14, 0x86, - 0xb1, 0x0a, 0x72, 0x1d, 0x80, 0x72, 0xcf, 0x26, 0xab, 0x71, 0x13, 0xe9, 0x7a, 0xf4, 0xba, 0xe6, - 0x60, 0x42, 0xea, 0xf9, 0x17, 0x1c, 0xf2, 0x8f, 0xe8, 0xa9, 0x67, 0x72, 0x44, 0x5f, 0x39, 0xf3, - 0x23, 0xfa, 0xe5, 0x67, 0x7f, 0x44, 0x27, 0x12, 0x92, 0xe2, 0x18, 0x09, 0xc9, 0x27, 0x70, 0x51, - 0xfe, 0xb9, 0xda, 0xb3, 0x9c, 0xbe, 0xb6, 0x17, 0xf5, 0x48, 0xe8, 0xeb, 0xb9, 0x07, 0x33, 0x0d, - 0x98, 0xc3, 0x42, 0xea, 0x86, 0x0f, 0xe3, 0x96, 0xf1, 0x0d, 0xf3, 0xc3, 0x1c, 0x38, 0xcc, 0x55, - 0x92, 0x8d, 0x60, 0xa7, 0x4f, 0x11, 0xc1, 0xfe, 0xa8, 0x00, 0x97, 0xac, 0xbc, 0x5f, 0xec, 0xa8, - 0x3a, 0xc6, 0xed, 0xb1, 0xf2, 0x89, 0x14, 0xa2, 0xca, 0x07, 0xf2, 0x58, 0x98, 0xdf, 0x07, 0xf2, - 0x6a, 0x9c, 0x92, 0x56, 0x84, 0x51, 0xe5, 0x27, 0x93, 0x3f, 0xc8, 0x96, 0x82, 0x40, 0xcc, 0x76, - 0x73, 0x6c, 0x87, 0x7d, 0x06, 0xe5, 0xa0, 0xea, 0x18, 0xe5, 0xa0, 0x4c, 0x7a, 0x31, 0x73, 0x46, - 0xe9, 0x85, 0x0b, 0x0b, 0x4e, 0xdf, 0x6a, 0xd3, 0xed, 0x41, 0xaf, 0x27, 0x6b, 0xda, 0xcc, 0x98, - 0x15, 0xd8, 0xb9, 0x2f, 0x3b, 0x79, 0xba, 0xd7, 0x93, 0xe7, 0xa3, 0xbe, 0xe6, 0x89, 0xaf, 0x61, - 0x36, 0x33, 0x48, 0x38, 0x84, 0xcd, 0xcd, 0x92, 0x87, 0xad, 0x5b, 0x34, 0xe4, 0xb3, 0x2d, 0x2a, - 0x25, 0xea, 0x97, 0x89, 0xb7, 0x62, 0x32, 0x26, 0x65, 0xc8, 0x1d, 0xa8, 0xb4, 0x5c, 0xb6, 0xed, - 0xf5, 0x1c, 0xfb, 0x50, 0x94, 0x3b, 0x2a, 0x8d, 0x37, 0xb8, 0x6f, 0x5b, 0xdb, 0x6a, 0x4a, 0xe2, - 0xe3, 0xa3, 0xda, 0x95, 0xe1, 0x9f, 0x5e, 0xd7, 0x35, 0x1f, 0xe3, 0xf6, 0xe4, 0x9e, 0x00, 0x53, - 0xcf, 0x9c, 0x65, 0x69, 0xe3, 0xea, 0x09, 0x11, 0xf2, 0xda, 0x56, 0xf4, 0x2a, 0x7b, 0x56, 0xa9, - 0x53, 0x8f, 0x97, 0x63, 0x04, 0xf2, 0x1a, 0x94, 0x3c, 0x77, 0xfd, 0x63, 0x27, 0x34, 0xce, 0xa7, - 0x6b, 0xda, 0xf7, 0x05, 0x15, 0x15, 0x97, 0x3c, 0x80, 0xcb, 0x61, 0xd8, 0x53, 0xa9, 0xed, 0xca, - 0x5e, 0x48, 0x83, 0xe8, 0x29, 0x83, 0x78, 0x8e, 0x52, 0x6c, 0xbc, 0x74, 0x7c, 0x54, 0xbb, 0xbc, - 0xb3, 0x73, 0x37, 0x4f, 0x04, 0x4f, 0x6a, 0x7b, 0x72, 0xd2, 0x7d, 0x61, 0xc4, 0xa4, 0x3b, 0x99, - 0xe7, 0x5d, 0xfc, 0xca, 0x3c, 0x6f, 0x28, 0x2f, 0xbd, 0xf4, 0x14, 0x79, 0xe9, 0x87, 0xe2, 0xc1, - 0xc6, 0xcd, 0x55, 0x95, 0xd3, 0xbf, 0x33, 0x5a, 0x29, 0x91, 0x23, 0xc8, 0x7b, 0x3b, 0xf1, 0x27, - 0x4a, 0x4c, 0xb2, 0x0d, 0x17, 0x7d, 0xaf, 0x35, 0x94, 0xd6, 0x8a, 0x24, 0x3e, 0xf1, 0x5a, 0x67, - 0x3b, 0x47, 0x06, 0x73, 0x5b, 0x0a, 0x5f, 0x1a, 0xd3, 0x0d, 0x43, 0x4c, 0x8c, 0xf4, 0xa5, 0x31, - 0x19, 0x93, 0x32, 0xd9, 0x2c, 0xef, 0xc5, 0x67, 0x96, 0xe5, 0x2d, 0x3e, 0x87, 0x2c, 0xef, 0xa5, - 0xe7, 0x97, 0xe5, 0x7d, 0x51, 0x86, 0xb9, 0x74, 0xfc, 0x1a, 0xbf, 0x95, 0x2a, 0x9c, 0xf6, 0xad, - 0x54, 0xea, 0x31, 0xd3, 0xc4, 0x33, 0x7d, 0xcc, 0x34, 0x79, 0xe6, 0x8f, 0x99, 0x12, 0x8f, 0xb6, - 0xa6, 0x9e, 0xf0, 0x68, 0x6b, 0x05, 0xe6, 0x6d, 0xaf, 0xef, 0x8b, 0xdf, 0x45, 0xa8, 0xa7, 0x3b, - 0xf2, 0x7a, 0x5d, 0x5f, 0x60, 0xae, 0xa6, 0xd9, 0x98, 0x95, 0x27, 0x0c, 0x8a, 0xae, 0x68, 0x58, - 0x1a, 0xe3, 0xc1, 0x67, 0x7a, 0xc1, 0xc4, 0x41, 0xa9, 0xde, 0x5c, 0xea, 0x30, 0x5d, 0xaa, 0x97, - 0xba, 0x78, 0xa0, 0x31, 0x9f, 0x7e, 0x64, 0xc7, 0x8c, 0x8a, 0xd0, 0xff, 0xcb, 0x67, 0xa1, 0x3f, - 0xfd, 0xa2, 0x4f, 0xf5, 0x24, 0xbe, 0xd3, 0x4d, 0x73, 0x31, 0xdb, 0x13, 0x12, 0xc0, 0x0b, 0x7e, - 0x5e, 0x18, 0xc6, 0xd4, 0xad, 0xd2, 0x57, 0x05, 0x83, 0x4b, 0x4a, 0xcb, 0x0b, 0xb9, 0x81, 0x1c, - 0xc3, 0x13, 0x90, 0x93, 0x2f, 0xc2, 0xca, 0xcf, 0xea, 0x45, 0xd8, 0xe2, 0xa1, 0x7c, 0x6c, 0x7a, - 0xe2, 0x3b, 0xd5, 0x07, 0xe9, 0xb7, 0xe3, 0xef, 0x8f, 0xf8, 0x9f, 0x71, 0x44, 0xcf, 0x59, 0x93, - 0x6f, 0x64, 0x7f, 0xa3, 0x00, 0x17, 0xf3, 0x96, 0x25, 0xa7, 0x17, 0xcd, 0x74, 0x2f, 0xc6, 0x4b, - 0xd7, 0x92, 0xae, 0xe5, 0xdf, 0x8a, 0x89, 0xe4, 0x30, 0xa4, 0xfe, 0xcf, 0x6e, 0x8e, 0x47, 0xba, - 0x39, 0x4e, 0xfd, 0xfe, 0xb7, 0xf8, 0x1c, 0x7f, 0xff, 0x5b, 0x1a, 0xe1, 0xf7, 0xbf, 0xd3, 0xcf, - 0xf3, 0xf7, 0xbf, 0xe5, 0x53, 0xfe, 0xfe, 0xb7, 0xf2, 0xec, 0x7f, 0xff, 0xfb, 0x65, 0x01, 0x16, - 0xb2, 0xcf, 0x91, 0x9f, 0x43, 0x91, 0xac, 0x9b, 0x2a, 0x92, 0x6d, 0x8e, 0xe5, 0xcc, 0xa3, 0x6e, - 0x9f, 0x54, 0x2c, 0x33, 0x7f, 0x52, 0x80, 0xa1, 0x27, 0xd7, 0xcf, 0xa1, 0x8e, 0xf5, 0x28, 0x5d, - 0xc7, 0x5a, 0x3f, 0x93, 0x41, 0x9e, 0x50, 0xcf, 0xfa, 0xef, 0x9c, 0x21, 0xfe, 0xaf, 0xd4, 0xb5, - 0x52, 0xae, 0x6d, 0xe2, 0xd9, 0xbb, 0xb6, 0x46, 0xfd, 0xb3, 0x2f, 0x97, 0xce, 0x7d, 0xfe, 0xe5, - 0xd2, 0xb9, 0x2f, 0xbe, 0x5c, 0x3a, 0xf7, 0xe9, 0xf1, 0x52, 0xe1, 0xb3, 0xe3, 0xa5, 0xc2, 0xe7, - 0xc7, 0x4b, 0x85, 0x2f, 0x8e, 0x97, 0x0a, 0x3f, 0x39, 0x5e, 0x2a, 0xfc, 0xc1, 0xbf, 0x2c, 0x9d, - 0xfb, 0x95, 0x72, 0x84, 0xfb, 0x3f, 0x01, 0x00, 0x00, 0xff, 0xff, 0x11, 0xce, 0xba, 0xc9, 0x25, - 0x4c, 0x00, 0x00, + // 4729 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xec, 0x5c, 0x4d, 0x8c, 0x5c, 0x57, + 0x56, 0x76, 0x75, 0x77, 0x55, 0x57, 0x9d, 0xea, 0x3f, 0xdf, 0xb6, 0xe3, 0x97, 0x8e, 0xd3, 0xe5, + 0x79, 0x51, 0x82, 0x07, 0x92, 0xea, 0xc4, 0x9e, 0x81, 0x4c, 0x86, 0x24, 0x53, 0xd5, 0x3f, 0x76, + 0xdb, 0xee, 0x1f, 0x4e, 0xb5, 0x6d, 0x86, 0x8c, 0x18, 0x5e, 0xbf, 0xba, 0x5d, 0xf5, 0xdc, 0x55, + 0xef, 0xbd, 0xbc, 0xfb, 0xaa, 0x3b, 0xad, 0x2c, 0x08, 0x08, 0x04, 0x08, 0x8d, 0x04, 0x1b, 0x18, + 0x31, 0x1b, 0xc4, 0x02, 0x36, 0x6c, 0xd8, 0x22, 0x34, 0x48, 0x88, 0x45, 0x34, 0x1b, 0xb2, 0x23, + 0x0b, 0xd4, 0x9a, 0x34, 0x1b, 0x10, 0x48, 0x48, 0x6c, 0x90, 0xbc, 0x42, 0xf7, 0xe7, 0xdd, 0xf7, + 0x53, 0xd5, 0x71, 0xbb, 0xaa, 0x6d, 0xc4, 0xcc, 0xac, 0xdc, 0xef, 0x9c, 0x73, 0xbf, 0x73, 0x7f, + 0xcf, 0x3d, 0xe7, 0xdc, 0x53, 0x86, 0xe5, 0x96, 0x13, 0xb6, 0x7b, 0xbb, 0x55, 0xdb, 0xeb, 0x2e, + 0x59, 0x41, 0xcb, 0xf3, 0x03, 0xef, 0x91, 0xf8, 0x63, 0xc9, 0xdf, 0x6f, 0x2d, 0x59, 0xbe, 0xc3, + 0x96, 0x0e, 0xbd, 0x60, 0x7f, 0xaf, 0xe3, 0x1d, 0x2e, 0x1d, 0xbc, 0x65, 0x75, 0xfc, 0xb6, 0xf5, + 0xd6, 0x52, 0x8b, 0xba, 0x34, 0xb0, 0x42, 0xda, 0xac, 0xfa, 0x81, 0x17, 0x7a, 0xe4, 0x66, 0x0c, + 0x52, 0x8d, 0x40, 0xc4, 0x1f, 0x55, 0x7f, 0xbf, 0x55, 0xe5, 0x20, 0xd5, 0x08, 0xa4, 0x1a, 0x81, + 0x2c, 0xbc, 0x91, 0xd0, 0xdc, 0xf2, 0xb8, 0x42, 0x8e, 0xb5, 0xdb, 0xdb, 0x13, 0x5f, 0xe2, 0x43, + 0xfc, 0x25, 0x75, 0x2c, 0x98, 0xfb, 0x6f, 0xb3, 0xaa, 0xe3, 0xf1, 0x2e, 0x2d, 0xd9, 0x5e, 0x40, + 0x97, 0x0e, 0xfa, 0xfa, 0xb1, 0xf0, 0xb5, 0x58, 0xa6, 0x6b, 0xd9, 0x6d, 0xc7, 0xa5, 0xc1, 0x51, + 0x3c, 0x8e, 0x2e, 0x0d, 0xad, 0x41, 0xad, 0x96, 0x4e, 0x6b, 0x15, 0xf4, 0xdc, 0xd0, 0xe9, 0xd2, + 0xbe, 0x06, 0xbf, 0xf8, 0xa4, 0x06, 0xcc, 0x6e, 0xd3, 0xae, 0x95, 0x6d, 0x67, 0xfe, 0x53, 0x0e, + 0x66, 0x6b, 0x81, 0xdd, 0x76, 0x0e, 0x68, 0x23, 0xe4, 0x8c, 0xd6, 0x11, 0xf9, 0x00, 0xc6, 0x43, + 0x2b, 0x30, 0x72, 0xd7, 0x72, 0xd7, 0xcb, 0x37, 0xbe, 0x55, 0x1d, 0x62, 0x22, 0xab, 0x3b, 0x56, + 0x10, 0xc1, 0xd5, 0x27, 0x4f, 0x8e, 0x2b, 0xe3, 0x3b, 0x56, 0x80, 0x1c, 0x95, 0x7c, 0x17, 0x26, + 0x5c, 0xcf, 0xa5, 0xc6, 0x98, 0x40, 0xaf, 0x0d, 0x85, 0xbe, 0xe9, 0xb9, 0xba, 0xb7, 0xf5, 0xe2, + 0xc9, 0x71, 0x65, 0x82, 0x53, 0x50, 0x00, 0x9b, 0xff, 0x95, 0x83, 0x52, 0x2d, 0x68, 0xf5, 0xba, + 0xd4, 0x0d, 0x19, 0x09, 0x00, 0x7c, 0x2b, 0xb0, 0xba, 0x34, 0xa4, 0x01, 0x33, 0x72, 0xd7, 0xc6, + 0xaf, 0x97, 0x6f, 0xbc, 0x37, 0x94, 0xd2, 0xed, 0x08, 0xa6, 0x4e, 0x3e, 0x3d, 0xae, 0x5c, 0x38, + 0x39, 0xae, 0x80, 0x26, 0x31, 0x4c, 0x68, 0x21, 0x2e, 0x94, 0xac, 0x20, 0x74, 0xf6, 0x2c, 0x3b, + 0x64, 0xc6, 0x98, 0x50, 0xf9, 0xee, 0x50, 0x2a, 0x6b, 0x0a, 0xa5, 0x7e, 0x51, 0x69, 0x2c, 0x45, + 0x14, 0x86, 0xb1, 0x0a, 0xf3, 0x3f, 0xc6, 0xa1, 0x18, 0x31, 0xc8, 0x35, 0x98, 0x70, 0xad, 0x2e, + 0x15, 0xab, 0x57, 0xaa, 0x4f, 0xa9, 0x86, 0x13, 0x9b, 0x56, 0x97, 0x4f, 0x90, 0xd5, 0xa5, 0x5c, + 0xc2, 0xb7, 0xc2, 0xb6, 0x58, 0x81, 0x84, 0xc4, 0xb6, 0x15, 0xb6, 0x51, 0x70, 0xc8, 0x55, 0x98, + 0xe8, 0x7a, 0x4d, 0x6a, 0x8c, 0x5f, 0xcb, 0x5d, 0xcf, 0xcb, 0x09, 0xde, 0xf0, 0x9a, 0x14, 0x05, + 0x95, 0xb7, 0xdf, 0x0b, 0xbc, 0xae, 0x31, 0x91, 0x6e, 0xbf, 0x16, 0x78, 0x5d, 0x14, 0x1c, 0xf2, + 0x87, 0x39, 0x98, 0x8b, 0xba, 0x77, 0xcf, 0xb3, 0xad, 0xd0, 0xf1, 0x5c, 0x23, 0x2f, 0x16, 0x7c, + 0x75, 0xa4, 0x89, 0x88, 0xc0, 0xea, 0x86, 0xd2, 0x3a, 0x97, 0xe5, 0x60, 0x9f, 0x62, 0x72, 0x03, + 0xa0, 0xd5, 0xf1, 0x76, 0xad, 0x0e, 0x9f, 0x03, 0xa3, 0x20, 0x7a, 0xad, 0x97, 0xf0, 0x96, 0xe6, + 0x60, 0x42, 0x8a, 0xec, 0xc3, 0xa4, 0x25, 0x4f, 0x85, 0x31, 0x29, 0xfa, 0xbd, 0x32, 0x64, 0xbf, + 0x53, 0x27, 0xab, 0x5e, 0x3e, 0x39, 0xae, 0x4c, 0x2a, 0x22, 0x46, 0x1a, 0xc8, 0xeb, 0x50, 0xf4, + 0x7c, 0xde, 0x55, 0xab, 0x63, 0x14, 0xaf, 0xe5, 0xae, 0x17, 0xeb, 0x73, 0xaa, 0x7b, 0xc5, 0x2d, + 0x45, 0x47, 0x2d, 0x61, 0xfe, 0x69, 0x1e, 0xfa, 0x46, 0x4d, 0xde, 0x82, 0xb2, 0x42, 0xbb, 0xe7, + 0xb5, 0x98, 0x58, 0xfc, 0x62, 0x7d, 0xf6, 0xe4, 0xb8, 0x52, 0xae, 0xc5, 0x64, 0x4c, 0xca, 0x90, + 0x87, 0x30, 0xc6, 0x6e, 0xaa, 0x63, 0xf8, 0xfe, 0x50, 0xa3, 0x6b, 0xdc, 0xd4, 0x1b, 0xb4, 0x70, + 0x72, 0x5c, 0x19, 0x6b, 0xdc, 0xc4, 0x31, 0x76, 0x93, 0x9b, 0x8f, 0x96, 0x13, 0x8a, 0xcd, 0x33, + 0xac, 0xf9, 0xb8, 0xe5, 0x84, 0x1a, 0x5a, 0x98, 0x8f, 0x5b, 0x4e, 0x88, 0x1c, 0x95, 0x9b, 0x8f, + 0x76, 0x18, 0xfa, 0x62, 0xf3, 0x0d, 0x6b, 0x3e, 0x6e, 0xef, 0xec, 0x6c, 0x6b, 0x78, 0xb1, 0xbb, + 0x39, 0x05, 0x05, 0x30, 0xf9, 0x98, 0xcf, 0xa4, 0xe4, 0x79, 0xc1, 0x91, 0xda, 0xb5, 0xb7, 0x47, + 0xda, 0xb5, 0x5e, 0x70, 0xa4, 0xd5, 0xa9, 0x35, 0xd1, 0x0c, 0x4c, 0x6a, 0x13, 0xa3, 0x6b, 0xee, + 0x31, 0xb1, 0x49, 0x87, 0x1e, 0xdd, 0xca, 0x5a, 0x23, 0x33, 0xba, 0x95, 0xb5, 0x06, 0x0a, 0x60, + 0xbe, 0x36, 0x81, 0x75, 0xa8, 0xf6, 0xf4, 0x70, 0x6b, 0x83, 0xd6, 0x61, 0x7a, 0x6d, 0xd0, 0x3a, + 0x44, 0x8e, 0x6a, 0xb6, 0xe0, 0x72, 0xc4, 0x41, 0xea, 0x7b, 0xcc, 0x11, 0x03, 0xa4, 0x7b, 0x64, + 0x09, 0x4a, 0xb6, 0xe7, 0xee, 0x39, 0xad, 0x0d, 0xcb, 0x57, 0x86, 0x49, 0x5b, 0xb4, 0xe5, 0x88, + 0x81, 0xb1, 0x0c, 0x79, 0x19, 0xc6, 0xf7, 0xe9, 0x91, 0xb2, 0x50, 0x65, 0x25, 0x3a, 0x7e, 0x97, + 0x1e, 0x21, 0xa7, 0x9b, 0x3f, 0xcc, 0xc1, 0xfc, 0x80, 0xc9, 0xe5, 0xcd, 0x7a, 0x41, 0x47, 0x69, + 0xd0, 0xcd, 0xee, 0xe3, 0x3d, 0xe4, 0x74, 0xf2, 0x7b, 0x39, 0x98, 0x4d, 0xcc, 0x76, 0xad, 0xa7, + 0x8c, 0xe0, 0xf0, 0xa7, 0x3b, 0x85, 0x55, 0xbf, 0xa2, 0x34, 0xce, 0x66, 0x18, 0x98, 0xd5, 0x6a, + 0xfe, 0xb3, 0xb8, 0x75, 0x53, 0x34, 0x62, 0xc1, 0x4c, 0x8f, 0xd1, 0x80, 0x9b, 0xe8, 0x06, 0xb5, + 0x03, 0x1a, 0xaa, 0x0b, 0xf8, 0xd5, 0xaa, 0xbc, 0xda, 0x79, 0x2f, 0xaa, 0xdc, 0xcb, 0xa8, 0x1e, + 0xbc, 0x55, 0x95, 0x12, 0x77, 0xe9, 0x51, 0x83, 0x76, 0x28, 0xc7, 0xa8, 0x93, 0x93, 0xe3, 0xca, + 0xcc, 0xfd, 0x14, 0x00, 0x66, 0x00, 0xb9, 0x0a, 0xdf, 0x62, 0xec, 0xd0, 0x0b, 0x9a, 0x4a, 0xc5, + 0xd8, 0x53, 0xab, 0xd8, 0x4e, 0x01, 0x60, 0x06, 0xd0, 0xfc, 0x36, 0xc0, 0xb2, 0xe7, 0x86, 0x8e, + 0xdb, 0xa3, 0x5b, 0x2e, 0x79, 0x05, 0xf2, 0x34, 0x08, 0xbc, 0x40, 0x19, 0xa4, 0x69, 0x35, 0x41, + 0xf9, 0x55, 0x4e, 0x44, 0xc9, 0x23, 0xaf, 0x41, 0x61, 0xcf, 0x72, 0x3a, 0xb4, 0x29, 0x7a, 0x53, + 0xac, 0xcf, 0x28, 0xa9, 0xc2, 0x9a, 0xa0, 0xa2, 0xe2, 0x9a, 0x3f, 0x1a, 0x83, 0xa9, 0xe5, 0xc0, + 0x73, 0x1f, 0xaa, 0x85, 0x20, 0xbf, 0x01, 0x45, 0xee, 0x3f, 0x35, 0xad, 0xd0, 0x52, 0x73, 0xf5, + 0x66, 0x62, 0x20, 0xda, 0x0d, 0x8a, 0x97, 0x90, 0x4b, 0xf3, 0xa1, 0x6d, 0xed, 0x3e, 0xa2, 0x76, + 0xb8, 0x41, 0x43, 0x2b, 0xbe, 0x08, 0x62, 0x1a, 0x6a, 0x54, 0x62, 0xc3, 0x04, 0xf3, 0xa9, 0x3d, + 0x92, 0xb3, 0x12, 0x75, 0xb7, 0xe1, 0x53, 0x3b, 0xbe, 0x2d, 0xf9, 0x17, 0x0a, 0x70, 0xc2, 0x60, + 0x52, 0x1a, 0x77, 0xa6, 0x6c, 0xe6, 0x70, 0xd6, 0x26, 0x39, 0x35, 0xf2, 0xda, 0x60, 0xf5, 0x59, + 0xa5, 0x6e, 0x52, 0x11, 0x30, 0xd2, 0x64, 0x7e, 0x9e, 0x83, 0xb9, 0x64, 0x8b, 0x7b, 0x0e, 0x0b, + 0xc9, 0x77, 0xfa, 0x26, 0xb4, 0x7a, 0xb6, 0x09, 0xe5, 0xad, 0xc5, 0x74, 0xea, 0x8b, 0x2b, 0xa2, + 0x24, 0x26, 0x73, 0x0f, 0xf2, 0x4e, 0x48, 0xbb, 0x91, 0x4b, 0x54, 0x1b, 0x79, 0x94, 0xf1, 0x7e, + 0x5a, 0xe7, 0xb8, 0x28, 0xe1, 0xcd, 0x2d, 0x98, 0x1f, 0x30, 0x17, 0xe4, 0x6d, 0x98, 0xb2, 0x03, + 0xcf, 0x6d, 0xd8, 0x6d, 0xda, 0xec, 0x75, 0x22, 0x07, 0xe9, 0x92, 0x82, 0x10, 0x3b, 0x2b, 0xe2, + 0x61, 0x4a, 0xd2, 0xfc, 0xb3, 0x02, 0x4c, 0xae, 0xd4, 0x6e, 0xed, 0x58, 0x6c, 0xff, 0x0c, 0xee, + 0xd5, 0xeb, 0x50, 0x0c, 0x69, 0xd7, 0xef, 0x58, 0x21, 0x55, 0x06, 0x4c, 0x4f, 0xca, 0x8e, 0xa2, + 0xa3, 0x96, 0x20, 0x1e, 0xf7, 0x15, 0x95, 0xb3, 0xaa, 0x96, 0xff, 0xbd, 0x21, 0x8d, 0x91, 0x42, + 0x49, 0x3a, 0x8b, 0x8a, 0x84, 0xb1, 0x0e, 0xc2, 0xa0, 0x1c, 0x29, 0x47, 0xba, 0xa7, 0xee, 0xd1, + 0x21, 0x9d, 0xfc, 0x18, 0x47, 0xde, 0x6b, 0x09, 0x02, 0x26, 0xb5, 0x90, 0xaf, 0xc1, 0x54, 0x93, + 0xfa, 0xd4, 0x6d, 0x52, 0xd7, 0x76, 0x28, 0x33, 0xf2, 0xd7, 0xc6, 0xf9, 0xbc, 0xf0, 0x79, 0x5f, + 0x49, 0xd0, 0x31, 0x25, 0x45, 0x1e, 0x41, 0xe9, 0xd0, 0x09, 0xdb, 0x62, 0x71, 0x8d, 0x82, 0xd8, + 0x34, 0xdf, 0x18, 0xaa, 0xa3, 0x1c, 0x21, 0x9e, 0x96, 0x87, 0x11, 0x26, 0xc6, 0xf0, 0xfc, 0x8a, + 0xe2, 0x1f, 0xc2, 0xa3, 0x17, 0xd7, 0x63, 0x29, 0xdd, 0x40, 0x30, 0x30, 0x96, 0x21, 0x0c, 0xa6, + 0xf8, 0x47, 0x83, 0x7e, 0xd8, 0xa3, 0xae, 0x4d, 0x85, 0xe3, 0x36, 0xac, 0x9f, 0x1f, 0x81, 0xc8, + 0x19, 0x79, 0x98, 0x80, 0xc5, 0x94, 0x12, 0xbe, 0xfb, 0x0e, 0xdb, 0xd4, 0x35, 0x4a, 0xe9, 0xdd, + 0xf7, 0xb0, 0x4d, 0x5d, 0x14, 0x1c, 0xe2, 0x01, 0xd8, 0xda, 0xfe, 0x1a, 0x30, 0x82, 0x77, 0x17, + 0x9b, 0xf1, 0xfa, 0x0c, 0x37, 0x90, 0xf1, 0x37, 0x26, 0x54, 0x98, 0xff, 0x90, 0x83, 0x32, 0x3f, + 0x1c, 0xd1, 0x86, 0x7e, 0x0d, 0x0a, 0xa1, 0x15, 0xb4, 0xd4, 0xf5, 0x55, 0x8a, 0xad, 0xf9, 0x8e, + 0xa0, 0xa2, 0xe2, 0x12, 0x0b, 0xf2, 0xa1, 0xc5, 0xf6, 0x23, 0x6b, 0xf0, 0xcb, 0x43, 0xf5, 0x51, + 0x9d, 0xca, 0xd8, 0x10, 0xf0, 0x2f, 0x86, 0x12, 0x99, 0x5c, 0x87, 0x22, 0xbf, 0x3a, 0xd6, 0x2c, + 0x26, 0xbd, 0xd1, 0x62, 0x7d, 0x8a, 0x9f, 0xc2, 0x35, 0x45, 0x43, 0xcd, 0x35, 0xbf, 0x03, 0x33, + 0xab, 0x1f, 0x51, 0xbb, 0x17, 0x7a, 0x81, 0xf4, 0x47, 0xc8, 0x1d, 0x20, 0x8c, 0x06, 0x07, 0x8e, + 0x4d, 0x6b, 0xb6, 0xed, 0xf5, 0xdc, 0x70, 0x33, 0x3e, 0xf5, 0x0b, 0x4a, 0x1b, 0x69, 0xf4, 0x49, + 0xe0, 0x80, 0x56, 0xe6, 0x5f, 0x4f, 0x40, 0x39, 0xe1, 0xd1, 0xf2, 0x55, 0x0c, 0xa8, 0xef, 0x65, + 0x6d, 0x08, 0xf7, 0x99, 0x50, 0x70, 0xb8, 0x0d, 0x09, 0xe8, 0x81, 0xc3, 0x78, 0xdc, 0x94, 0xb1, + 0x21, 0xa8, 0xe8, 0xa8, 0x25, 0x48, 0x05, 0xf2, 0x4d, 0xea, 0x87, 0x6d, 0x31, 0xc8, 0x89, 0x7a, + 0x89, 0x4f, 0xc4, 0x0a, 0x27, 0xa0, 0xa4, 0x73, 0x81, 0x3d, 0x1a, 0xda, 0x6d, 0x63, 0x42, 0x9c, + 0x3b, 0x21, 0xb0, 0xc6, 0x09, 0x28, 0xe9, 0x03, 0x7c, 0x8f, 0xfc, 0xb3, 0xf7, 0x3d, 0x0a, 0xe7, + 0xec, 0x7b, 0x10, 0x1f, 0xe6, 0x19, 0x6b, 0x6f, 0x07, 0xce, 0x81, 0x15, 0x52, 0xd1, 0x58, 0xe8, + 0x99, 0x7c, 0x1a, 0x3d, 0x57, 0x4e, 0x8e, 0x2b, 0xf3, 0x8d, 0xc6, 0xed, 0x2c, 0x0a, 0x0e, 0x82, + 0x26, 0x0d, 0xb8, 0xec, 0xb8, 0x8c, 0xda, 0xbd, 0x80, 0xae, 0xb7, 0x5c, 0x2f, 0xa0, 0xb7, 0x3d, + 0xc6, 0xe1, 0x54, 0x18, 0xf7, 0xb2, 0x5a, 0xb4, 0xcb, 0xeb, 0x83, 0x84, 0x70, 0x70, 0x5b, 0xf3, + 0x47, 0x39, 0x98, 0x4a, 0x3a, 0xf1, 0x84, 0x01, 0xb4, 0x57, 0xd6, 0x1a, 0x72, 0x67, 0xaa, 0x8b, + 0xf9, 0xfd, 0xa1, 0x63, 0x03, 0x09, 0x13, 0x3b, 0x3e, 0x31, 0x0d, 0x13, 0x6a, 0xce, 0x90, 0x25, + 0x78, 0x05, 0xf2, 0x7b, 0x5e, 0x60, 0x53, 0x75, 0xb6, 0xf4, 0x19, 0x5c, 0xe3, 0x44, 0x94, 0x3c, + 0xf3, 0xdf, 0x72, 0x90, 0xd0, 0x40, 0x7e, 0x13, 0xa6, 0xb9, 0x8e, 0xbb, 0xc1, 0x6e, 0x6a, 0x34, + 0xf5, 0xa1, 0x47, 0xa3, 0x91, 0xea, 0x97, 0x95, 0xfe, 0xe9, 0x14, 0x19, 0xd3, 0xfa, 0xc8, 0x2f, + 0x40, 0xc9, 0x6a, 0x36, 0x03, 0xca, 0x18, 0x95, 0xa6, 0xa7, 0x54, 0x9f, 0x16, 0x77, 0x65, 0x44, + 0xc4, 0x98, 0xcf, 0x8f, 0x21, 0x8f, 0x9a, 0xf8, 0xce, 0x16, 0x83, 0x4c, 0x1c, 0x43, 0xae, 0x84, + 0xd3, 0x51, 0x4b, 0x98, 0xdf, 0x9b, 0x80, 0xb4, 0x6e, 0xd2, 0x84, 0xd9, 0xfd, 0x60, 0x77, 0x79, + 0xd9, 0xb2, 0xdb, 0x43, 0xf9, 0xf4, 0xf3, 0x3c, 0x98, 0xb8, 0x9b, 0x46, 0xc0, 0x2c, 0xa4, 0xd2, + 0x72, 0x97, 0x1e, 0x85, 0xd6, 0xee, 0x30, 0x6e, 0x7d, 0xa4, 0x25, 0x89, 0x80, 0x59, 0x48, 0xf2, + 0x75, 0x28, 0xef, 0x07, 0xbb, 0xd1, 0x21, 0x57, 0xd3, 0x31, 0xaf, 0xa6, 0xa3, 0x7c, 0x37, 0x66, + 0x61, 0x52, 0x8e, 0x4f, 0xe1, 0x7e, 0xb0, 0x8b, 0xd4, 0xea, 0x44, 0x09, 0x23, 0x3d, 0x85, 0x77, + 0x15, 0x1d, 0xb5, 0x04, 0xf1, 0x81, 0xec, 0x47, 0xb3, 0xa7, 0x03, 0x43, 0x65, 0x8b, 0xae, 0x0f, + 0x1a, 0x8d, 0x16, 0x4a, 0x0e, 0xe8, 0x05, 0x6e, 0x9b, 0xef, 0xf6, 0xe1, 0xe0, 0x00, 0x6c, 0xf2, + 0x6d, 0xb8, 0xb2, 0x1f, 0xec, 0x2a, 0x43, 0xbe, 0x1d, 0x38, 0xae, 0xed, 0xf8, 0xa9, 0x4c, 0x51, + 0x45, 0x75, 0xf7, 0xca, 0xdd, 0xc1, 0x62, 0x78, 0x5a, 0x7b, 0xf3, 0x0d, 0x98, 0x4a, 0x66, 0x1a, + 0x9e, 0x10, 0x9d, 0x9a, 0xff, 0x99, 0x83, 0xc2, 0xba, 0xeb, 0xf7, 0x7e, 0x4a, 0x92, 0x96, 0x7f, + 0x31, 0x01, 0x13, 0xdc, 0xf5, 0x22, 0xd7, 0x61, 0x22, 0x3c, 0xf2, 0xe5, 0xdd, 0x3a, 0xae, 0xfd, + 0xf1, 0x89, 0x9d, 0x23, 0x9f, 0x3e, 0x56, 0xff, 0xa2, 0x90, 0x20, 0xef, 0x41, 0xc1, 0xed, 0x75, + 0x1f, 0x58, 0x1d, 0x65, 0x94, 0x5e, 0x8b, 0x5c, 0x8b, 0x4d, 0x41, 0x7d, 0x7c, 0x5c, 0xb9, 0x44, + 0x5d, 0xdb, 0x6b, 0x3a, 0x6e, 0x6b, 0xe9, 0x11, 0xf3, 0xdc, 0xea, 0x66, 0xaf, 0xbb, 0x4b, 0x03, + 0x54, 0xad, 0xc8, 0x57, 0x61, 0x72, 0xd7, 0xf3, 0x3a, 0x1c, 0x40, 0x9a, 0x2c, 0x1d, 0x1e, 0xd5, + 0x25, 0x19, 0x23, 0x3e, 0xf7, 0x62, 0x58, 0x18, 0x70, 0xc9, 0x89, 0xb4, 0x17, 0xd3, 0x10, 0x54, + 0x54, 0x5c, 0xd2, 0x85, 0x42, 0xd7, 0xf2, 0xb9, 0x5c, 0x5e, 0x4c, 0xd9, 0xea, 0xd0, 0xfe, 0x69, + 0x75, 0x43, 0xe0, 0xac, 0xba, 0x61, 0x70, 0x14, 0xab, 0x93, 0x44, 0x54, 0x4a, 0x88, 0x03, 0x93, + 0x1d, 0x87, 0x85, 0x5c, 0x5f, 0x61, 0x84, 0x5d, 0xc1, 0xf5, 0x3d, 0xb0, 0x3a, 0x3d, 0x1a, 0xcf, + 0xc0, 0x3d, 0x09, 0x8b, 0x11, 0xfe, 0xc2, 0x11, 0x94, 0x13, 0x3d, 0x22, 0x73, 0x32, 0x23, 0x23, + 0x36, 0xaf, 0x48, 0xc2, 0x90, 0x1d, 0xc8, 0x1f, 0x70, 0x0c, 0x65, 0x6c, 0x46, 0xec, 0x09, 0x4a, + 0xb0, 0x77, 0xc6, 0xde, 0xce, 0xbd, 0x53, 0xfc, 0xfe, 0x9f, 0x57, 0x2e, 0x7c, 0xf2, 0x2f, 0xd7, + 0x2e, 0x98, 0xff, 0x38, 0x0e, 0x25, 0x2d, 0xf2, 0xff, 0x7b, 0xa7, 0x04, 0x99, 0x9d, 0x72, 0x67, + 0xb4, 0xf9, 0x3a, 0xd3, 0x76, 0xa9, 0xa5, 0xb7, 0xcb, 0x54, 0xfd, 0xe7, 0x12, 0x4b, 0xfd, 0xf8, + 0xb8, 0x62, 0xa4, 0x27, 0x01, 0xad, 0xc3, 0x0d, 0xca, 0x98, 0xd5, 0xa2, 0xf1, 0x36, 0xf8, 0xc6, + 0x93, 0xb6, 0xc1, 0xa5, 0xe4, 0x36, 0x28, 0x0d, 0x5e, 0xc6, 0x4f, 0xc6, 0xa1, 0xb8, 0x11, 0xa5, + 0x01, 0x7e, 0x37, 0x07, 0x65, 0xcb, 0x75, 0xbd, 0xd0, 0x92, 0x39, 0x0f, 0x69, 0xde, 0x36, 0x87, + 0x9a, 0x8e, 0x08, 0xb4, 0x5a, 0x8b, 0x01, 0xe5, 0x94, 0xe8, 0x9b, 0x29, 0xc1, 0xc1, 0xa4, 0x5e, + 0xf2, 0x21, 0x14, 0x3a, 0xd6, 0x2e, 0xed, 0x44, 0xd6, 0x6e, 0x7d, 0xb4, 0x1e, 0xdc, 0x13, 0x58, + 0x99, 0xf5, 0x90, 0x44, 0x54, 0x8a, 0x16, 0xde, 0x83, 0xb9, 0x6c, 0x47, 0x9f, 0x66, 0x46, 0xf9, + 0x62, 0x24, 0xd4, 0x3c, 0x4d, 0x53, 0xf3, 0xef, 0x4a, 0x00, 0x9b, 0x5e, 0x93, 0x36, 0x42, 0x2b, + 0xec, 0x31, 0xb2, 0x00, 0x63, 0x4e, 0x53, 0x5d, 0x45, 0xa0, 0x7a, 0x3b, 0xb6, 0xbe, 0x82, 0x63, + 0x4e, 0x53, 0xa7, 0x38, 0xc6, 0x4e, 0x4d, 0x71, 0x7c, 0x1d, 0xca, 0x4d, 0x87, 0xf9, 0x1d, 0xeb, + 0x68, 0x73, 0x80, 0x2f, 0xb0, 0x12, 0xb3, 0x30, 0x29, 0x47, 0x5e, 0x57, 0xe7, 0x57, 0x1e, 0x14, + 0x23, 0x73, 0x7e, 0x8b, 0xbc, 0x7b, 0x89, 0x33, 0xfc, 0x36, 0x4c, 0x45, 0x29, 0x04, 0xa1, 0x25, + 0x9f, 0xce, 0xd7, 0xec, 0x24, 0x78, 0x98, 0x92, 0xcc, 0xa6, 0x38, 0x0a, 0xcf, 0x25, 0xc5, 0xb1, + 0x02, 0x73, 0x2c, 0xf4, 0x02, 0xda, 0x8c, 0x24, 0xd6, 0x57, 0x0c, 0x92, 0x1a, 0xe8, 0x5c, 0x23, + 0xc3, 0xc7, 0xbe, 0x16, 0x64, 0x1b, 0x2e, 0x45, 0x9d, 0x48, 0x0e, 0xd0, 0x98, 0x17, 0x48, 0x57, + 0x15, 0xd2, 0xa5, 0x87, 0x03, 0x64, 0x70, 0x60, 0x4b, 0xf2, 0x26, 0xe4, 0xfd, 0xb6, 0xc5, 0xa8, + 0x4a, 0x6a, 0x44, 0xb1, 0x6b, 0x7e, 0x9b, 0x13, 0x1f, 0x1f, 0x57, 0x4a, 0x7c, 0xda, 0xc5, 0x07, + 0x4a, 0x41, 0x72, 0x03, 0x60, 0xd7, 0xeb, 0xb9, 0x4d, 0x2b, 0x38, 0x5a, 0x5f, 0x11, 0x91, 0x4c, + 0xe2, 0xbd, 0xac, 0xae, 0x39, 0x98, 0x90, 0xe2, 0x06, 0xb3, 0x2b, 0x4d, 0x87, 0xca, 0x4d, 0x68, + 0x83, 0xa9, 0x2d, 0x8a, 0xe2, 0x93, 0x0f, 0xa0, 0xc4, 0x42, 0x2b, 0x08, 0x69, 0xb3, 0x16, 0xaa, + 0x04, 0xc5, 0xcf, 0x9f, 0x2d, 0xcb, 0xb8, 0xe3, 0x74, 0x69, 0xec, 0x55, 0x34, 0x22, 0x10, 0x8c, + 0xf1, 0xc8, 0xaf, 0x03, 0xec, 0x39, 0xae, 0xc3, 0xda, 0x02, 0xbd, 0xfc, 0xd4, 0xe8, 0x7a, 0x9c, + 0x6b, 0x1a, 0x05, 0x13, 0x88, 0x3c, 0xe6, 0xf1, 0xbd, 0xe6, 0xfa, 0xb6, 0x31, 0x25, 0x46, 0xa9, + 0x63, 0x9e, 0x6d, 0x4e, 0x44, 0xc9, 0x23, 0xd7, 0xa1, 0xd8, 0xb4, 0x68, 0xd7, 0x73, 0x69, 0xd3, + 0x98, 0x8e, 0xf3, 0x0e, 0x2b, 0x8a, 0x86, 0x9a, 0x4b, 0xbe, 0x0b, 0x05, 0x47, 0xb8, 0x7c, 0xc6, + 0x8c, 0xe8, 0xea, 0x37, 0x87, 0xbb, 0x14, 0x04, 0x44, 0x1d, 0xb8, 0xc5, 0x91, 0x7f, 0xa3, 0x82, + 0x25, 0x36, 0x4c, 0x7a, 0xbd, 0x50, 0x68, 0x98, 0x15, 0x1a, 0x86, 0xcb, 0xb3, 0x6c, 0x49, 0x0c, + 0xf9, 0x7e, 0xa9, 0x3e, 0x30, 0x42, 0xe6, 0xe3, 0xb5, 0xdb, 0x4e, 0xa7, 0x19, 0x50, 0xd7, 0x98, + 0x13, 0x21, 0x95, 0x18, 0xef, 0xb2, 0xa2, 0xa1, 0xe6, 0x92, 0x5f, 0x82, 0x69, 0xaf, 0x17, 0x8a, + 0x7d, 0xc3, 0xb7, 0x1d, 0x33, 0x2e, 0x0a, 0xf1, 0x8b, 0x3c, 0x6c, 0xdb, 0x4a, 0x32, 0x30, 0x2d, + 0x67, 0xce, 0xc0, 0x54, 0xf2, 0xd1, 0xdf, 0xfc, 0xe3, 0x31, 0x88, 0xfa, 0xf1, 0xd3, 0xe0, 0x2d, + 0x13, 0x13, 0x0a, 0x01, 0x65, 0xbd, 0x4e, 0xa8, 0x8c, 0xad, 0x58, 0x6b, 0x14, 0x14, 0x54, 0x1c, + 0xf3, 0x10, 0xa6, 0x79, 0x6f, 0x3b, 0x1d, 0xda, 0x69, 0x84, 0xd4, 0x67, 0x64, 0x0f, 0xf2, 0x8c, + 0xff, 0xa1, 0xe6, 0x64, 0xc4, 0xe7, 0x8b, 0x90, 0xfa, 0xf1, 0x7e, 0x17, 0x0a, 0x50, 0xc2, 0x9b, + 0x7f, 0x32, 0x06, 0x25, 0x3d, 0x4f, 0x67, 0xc8, 0x90, 0xbf, 0x0a, 0x93, 0x4d, 0xba, 0x67, 0xf1, + 0xd1, 0xa8, 0x17, 0x3e, 0xbe, 0xad, 0x56, 0x24, 0x09, 0x23, 0x1e, 0xa9, 0x44, 0x97, 0x99, 0x1c, + 0xb2, 0xc8, 0x5a, 0x25, 0x7d, 0x45, 0xb2, 0x0f, 0x25, 0xf1, 0xc7, 0x5a, 0x54, 0x8d, 0x30, 0xec, + 0xba, 0x3f, 0x88, 0x50, 0x64, 0x2e, 0x40, 0x7f, 0x62, 0x8c, 0x9f, 0xa9, 0x22, 0xc8, 0x9f, 0xa5, + 0x8a, 0xc0, 0x5c, 0x03, 0x6e, 0x18, 0x6e, 0x2d, 0x93, 0x77, 0xa1, 0xc8, 0xd4, 0xd6, 0x55, 0xf3, + 0xf2, 0x95, 0x28, 0x0a, 0x8e, 0xb6, 0xf4, 0xe3, 0xe3, 0xca, 0xb4, 0x10, 0x8e, 0x08, 0xa8, 0x9b, + 0x98, 0x4b, 0x50, 0x4e, 0xbc, 0xba, 0xf2, 0x19, 0xd6, 0x4f, 0x34, 0x89, 0x19, 0x5e, 0xb1, 0x42, + 0x0b, 0x05, 0xc7, 0x7c, 0x3c, 0x06, 0x73, 0x48, 0x99, 0xd7, 0x0b, 0x6c, 0x9a, 0xcc, 0xcc, 0x5a, + 0xb6, 0x28, 0xc5, 0xc8, 0x64, 0x66, 0x6b, 0x82, 0x8a, 0x8a, 0x4b, 0xbe, 0x09, 0xd3, 0x5d, 0x1a, + 0xb4, 0xf4, 0x61, 0x53, 0x8b, 0xa4, 0xf3, 0x2b, 0x1b, 0x49, 0x26, 0xa6, 0x65, 0x79, 0xbc, 0xdf, + 0xb5, 0x5c, 0x67, 0x8f, 0xb2, 0x30, 0x9b, 0x32, 0xd9, 0x50, 0x74, 0xd4, 0x12, 0xe4, 0x16, 0x5c, + 0x64, 0x34, 0xdc, 0x3a, 0x74, 0x69, 0x80, 0x74, 0x8f, 0x06, 0x22, 0x93, 0x3e, 0x21, 0x4c, 0xe6, + 0x8b, 0xaa, 0xd9, 0xc5, 0x46, 0x56, 0x00, 0xfb, 0xdb, 0x88, 0xdb, 0xb7, 0x67, 0xdb, 0x94, 0xb1, + 0x65, 0xcf, 0x6d, 0x3a, 0xba, 0xe0, 0x24, 0x79, 0xfb, 0x66, 0xf8, 0xd8, 0xd7, 0x82, 0xa3, 0xec, + 0x59, 0x4e, 0xa7, 0x17, 0xd0, 0x18, 0xa5, 0x90, 0x46, 0x59, 0xcb, 0xf0, 0xb1, 0xaf, 0x85, 0xf9, + 0x26, 0x4c, 0x23, 0x0d, 0x83, 0x23, 0x3d, 0x27, 0x15, 0xc8, 0x77, 0x9c, 0xae, 0x23, 0x93, 0x3f, + 0x79, 0xb9, 0x91, 0xef, 0x71, 0x02, 0x4a, 0xba, 0xf9, 0xfd, 0x1c, 0x40, 0x5c, 0x4c, 0x41, 0xf6, + 0xa1, 0xc8, 0x6e, 0xd6, 0x7b, 0xf6, 0xbe, 0xce, 0x17, 0x0d, 0xf9, 0xac, 0xa0, 0x40, 0xe2, 0x25, + 0x88, 0x28, 0xa8, 0x15, 0x3c, 0xe9, 0xa9, 0xfd, 0x6f, 0xc6, 0x41, 0xb7, 0xe2, 0x8b, 0x4b, 0xdd, + 0xa6, 0xef, 0x39, 0x6e, 0x94, 0xdd, 0xd7, 0xc8, 0xab, 0x8a, 0x8e, 0x5a, 0x82, 0xef, 0xb7, 0x5d, + 0x39, 0x88, 0xb1, 0xf4, 0x7e, 0x53, 0x7d, 0x50, 0x5c, 0x2e, 0x17, 0xd0, 0x16, 0x9f, 0xeb, 0xf1, + 0xb4, 0x1c, 0x0a, 0x2a, 0x2a, 0x2e, 0xbf, 0x66, 0xa2, 0x84, 0xa9, 0xda, 0x23, 0xe2, 0x9a, 0x89, + 0x72, 0xab, 0xa8, 0xb9, 0xa4, 0x0d, 0xb3, 0x96, 0x58, 0xda, 0x38, 0x09, 0xfc, 0x54, 0xf9, 0xec, + 0xf8, 0x21, 0x3f, 0x8d, 0x82, 0x59, 0x58, 0xae, 0x89, 0xc5, 0xcd, 0x9f, 0x3e, 0xad, 0xad, 0x35, + 0x35, 0xd2, 0x28, 0x98, 0x85, 0xe5, 0x1e, 0x56, 0xe0, 0x75, 0x68, 0x0d, 0x37, 0x95, 0x27, 0xa7, + 0x3d, 0x2c, 0x94, 0x64, 0x8c, 0xf8, 0xe6, 0xef, 0xe7, 0x60, 0xa6, 0x61, 0x07, 0x8e, 0x1f, 0xea, + 0xb3, 0xbf, 0x29, 0x2a, 0x30, 0x42, 0x8b, 0xfb, 0x3e, 0x6a, 0x4f, 0xbd, 0x7c, 0x4a, 0x3e, 0x4d, + 0x0a, 0xa5, 0x0a, 0x34, 0x24, 0x09, 0x63, 0x08, 0x11, 0xf5, 0x0a, 0xeb, 0x92, 0x5d, 0xdb, 0x86, + 0xa0, 0xa2, 0xe2, 0x9a, 0x3f, 0xc8, 0x41, 0x51, 0xbf, 0x5e, 0xbd, 0x02, 0x79, 0xf1, 0x28, 0xa2, + 0xf6, 0x8e, 0xbe, 0x4c, 0x96, 0x39, 0x11, 0x25, 0x8f, 0x0b, 0x09, 0x77, 0x4e, 0x01, 0x27, 0x6e, + 0x1c, 0x2b, 0x08, 0x51, 0xf2, 0xf8, 0xa6, 0xa5, 0x6e, 0x53, 0xed, 0x17, 0xbd, 0x69, 0x57, 0xdd, + 0x26, 0x72, 0xba, 0xa8, 0x28, 0xf0, 0x82, 0xae, 0x15, 0x66, 0x63, 0xf2, 0x35, 0x41, 0x45, 0xc5, + 0x35, 0x2f, 0xc2, 0x6c, 0xa3, 0xc7, 0x7c, 0xea, 0x6a, 0x17, 0xdc, 0x9c, 0x86, 0x72, 0xa2, 0x76, + 0xd1, 0xfc, 0xef, 0x2b, 0xa0, 0x5f, 0x6d, 0x7f, 0xf6, 0xf6, 0x3b, 0x54, 0x60, 0x64, 0x6b, 0x1f, + 0x37, 0x3f, 0xba, 0x8f, 0xab, 0x57, 0x32, 0xe3, 0xe7, 0xb6, 0x62, 0x3f, 0xb7, 0x70, 0x0e, 0x7e, + 0x6e, 0x5c, 0x37, 0x91, 0xf5, 0x75, 0xff, 0x20, 0x07, 0x53, 0x2e, 0x8f, 0xa3, 0xd5, 0x09, 0x36, + 0x26, 0x85, 0x6f, 0xb5, 0x35, 0xd2, 0x24, 0x56, 0x37, 0x13, 0x88, 0x32, 0x85, 0xa0, 0xe3, 0xdc, + 0x24, 0x0b, 0x53, 0xaa, 0xc9, 0x1a, 0x14, 0xad, 0x3d, 0x1e, 0x9c, 0x84, 0x47, 0xea, 0xf9, 0xf9, + 0xea, 0xa0, 0x33, 0x5d, 0x53, 0x32, 0xd2, 0x5c, 0x46, 0x5f, 0xa8, 0xdb, 0xf2, 0xfb, 0x46, 0x97, + 0x7d, 0x94, 0x46, 0xb8, 0x6f, 0xa2, 0x5c, 0x48, 0xe2, 0xca, 0x57, 0x94, 0x44, 0x15, 0x88, 0x09, + 0x05, 0x19, 0xfe, 0x88, 0xd8, 0xaf, 0x28, 0x3d, 0x59, 0x19, 0x1a, 0xa1, 0xe2, 0x90, 0x56, 0xe4, + 0xb8, 0x96, 0xc5, 0xe4, 0xd6, 0x87, 0x76, 0xe6, 0xb5, 0x2f, 0x3c, 0xd8, 0x73, 0x25, 0x77, 0x92, + 0x66, 0x71, 0xea, 0x2c, 0x66, 0x71, 0xfa, 0x54, 0x93, 0xd8, 0x82, 0x02, 0x13, 0x46, 0x57, 0xc4, + 0x7c, 0xe5, 0x1b, 0xcb, 0xc3, 0xdd, 0xd9, 0x29, 0xbb, 0x2d, 0x67, 0x47, 0xd2, 0x50, 0xc1, 0x13, + 0x0f, 0x8a, 0x81, 0xf2, 0xed, 0x54, 0xd8, 0x38, 0x5c, 0xd6, 0x39, 0xeb, 0x20, 0xca, 0xfd, 0x11, + 0x51, 0x51, 0x2b, 0x21, 0x1f, 0xc0, 0x78, 0xd3, 0x6a, 0xa9, 0x00, 0xf2, 0x5b, 0x43, 0x3f, 0xd4, + 0x47, 0x6a, 0x44, 0xd1, 0xe0, 0x4a, 0xed, 0x16, 0x72, 0x54, 0xb2, 0x0f, 0x93, 0x4c, 0xda, 0x60, + 0x63, 0x6e, 0x84, 0x5a, 0xbc, 0x8c, 0x1d, 0x97, 0x21, 0x85, 0x22, 0x62, 0xa4, 0x81, 0xac, 0xc2, + 0xe4, 0x81, 0xd7, 0xe9, 0x75, 0x55, 0xe4, 0x59, 0xbe, 0xb1, 0x30, 0x68, 0xb5, 0x1f, 0x08, 0x91, + 0xd8, 0x08, 0xc8, 0x6f, 0x86, 0x51, 0x5b, 0xf2, 0xdb, 0x39, 0x98, 0xe1, 0x47, 0x47, 0xef, 0x03, + 0x66, 0x90, 0x11, 0x76, 0xea, 0x7d, 0x46, 0x83, 0x78, 0x87, 0xbd, 0xa0, 0xd4, 0xce, 0xac, 0xa7, + 0x34, 0x60, 0x46, 0x23, 0xf1, 0xa1, 0xc8, 0x9c, 0x26, 0xb5, 0xad, 0x80, 0x19, 0xf3, 0xe7, 0xa6, + 0x3d, 0x76, 0x15, 0x15, 0x36, 0x6a, 0x2d, 0xe4, 0x77, 0x44, 0xfd, 0xa4, 0xaa, 0x20, 0x56, 0x55, + 0xdd, 0x97, 0xce, 0xb3, 0xaa, 0x7b, 0x5e, 0x16, 0x4f, 0xa6, 0x34, 0x60, 0x56, 0x25, 0xd9, 0x82, + 0xcb, 0x3c, 0x52, 0x39, 0xa0, 0x2b, 0xd4, 0x6a, 0x76, 0x1c, 0x97, 0x36, 0xa8, 0xed, 0xb9, 0x4d, + 0x66, 0x5c, 0x16, 0xef, 0x02, 0x2f, 0x9e, 0x1c, 0x57, 0x2e, 0xd7, 0x06, 0x09, 0xe0, 0xe0, 0x76, + 0xe4, 0x63, 0x98, 0x0e, 0x92, 0x0e, 0xbb, 0xf1, 0xc2, 0x08, 0x8f, 0xd2, 0x29, 0xd7, 0x5f, 0x66, + 0x36, 0x52, 0x24, 0x4c, 0xeb, 0x22, 0x6f, 0x41, 0xd9, 0x57, 0x96, 0xca, 0x61, 0x5d, 0xe3, 0x8a, + 0x18, 0x83, 0xb8, 0x51, 0xb7, 0x63, 0x32, 0x26, 0x65, 0xc8, 0x7d, 0x28, 0x87, 0x5e, 0x87, 0x06, + 0x2a, 0x81, 0x6e, 0x88, 0xc5, 0x5f, 0x1c, 0xb4, 0x93, 0x77, 0xb4, 0x58, 0x9c, 0x9e, 0x8d, 0x69, + 0x0c, 0x93, 0x38, 0x3c, 0xee, 0x63, 0xaa, 0xe4, 0x2d, 0x10, 0x41, 0xee, 0x8b, 0xe9, 0xb8, 0xaf, + 0x91, 0x64, 0x62, 0x5a, 0x96, 0x47, 0x72, 0x7e, 0xe0, 0x78, 0x81, 0x13, 0x1e, 0x2d, 0x77, 0x2c, + 0xc6, 0x04, 0xc0, 0x82, 0x00, 0xd0, 0x91, 0xdc, 0x76, 0x56, 0x00, 0xfb, 0xdb, 0x70, 0x2f, 0x3f, + 0x22, 0x1a, 0x2f, 0x89, 0x78, 0x49, 0x98, 0xa5, 0xa8, 0x2d, 0x6a, 0xee, 0x29, 0x25, 0x3a, 0x57, + 0x87, 0x29, 0xd1, 0x21, 0x4d, 0xb8, 0x6a, 0xf5, 0x42, 0xaf, 0xcb, 0x09, 0xe9, 0x26, 0x3b, 0xde, + 0x3e, 0x75, 0x8d, 0x6b, 0xe2, 0xae, 0xba, 0x76, 0x72, 0x5c, 0xb9, 0x5a, 0xfb, 0x12, 0x39, 0xfc, + 0x52, 0x14, 0xd2, 0x85, 0x22, 0x55, 0x65, 0x46, 0xc6, 0x57, 0x46, 0xb8, 0x24, 0xd2, 0xb5, 0x4a, + 0x72, 0x82, 0x22, 0x1a, 0x6a, 0x15, 0x64, 0x07, 0xca, 0x6d, 0x8f, 0x85, 0xb5, 0x8e, 0x63, 0x31, + 0xca, 0x8c, 0x97, 0xc5, 0x3e, 0x19, 0x78, 0xbf, 0xdd, 0x8e, 0xc4, 0xe2, 0x6d, 0x72, 0x3b, 0x6e, + 0x89, 0x49, 0x18, 0x42, 0x45, 0xc8, 0xd3, 0x13, 0xab, 0xe6, 0xb9, 0x21, 0xfd, 0x28, 0x34, 0x16, + 0xc5, 0x58, 0x5e, 0x1b, 0x84, 0xbc, 0xed, 0x35, 0x1b, 0x69, 0x69, 0x79, 0xca, 0x33, 0x44, 0xcc, + 0x62, 0x92, 0xb7, 0x61, 0xca, 0xf7, 0x9a, 0x0d, 0x9f, 0xda, 0xdb, 0x56, 0x68, 0xb7, 0x8d, 0x4a, + 0x3a, 0xfd, 0xbf, 0x9d, 0xe0, 0x61, 0x4a, 0x72, 0xe1, 0x7d, 0xb8, 0xd8, 0xe7, 0x4f, 0x3d, 0xd5, + 0x5b, 0xc9, 0x5f, 0xe6, 0x20, 0xe9, 0xce, 0x9e, 0xbb, 0xdf, 0x7f, 0x0b, 0x2e, 0xaa, 0x5f, 0x65, + 0xf1, 0xcb, 0xb6, 0xd3, 0x0b, 0xa3, 0xd8, 0x37, 0x91, 0xf5, 0xc0, 0xac, 0x00, 0xf6, 0xb7, 0x31, + 0xff, 0x2a, 0x07, 0xd3, 0x29, 0xf3, 0x7d, 0xee, 0x71, 0xde, 0x1a, 0x90, 0xae, 0x13, 0x04, 0x5e, + 0x20, 0xef, 0xc0, 0x0d, 0xbe, 0x97, 0x99, 0xaa, 0xd3, 0x16, 0x65, 0x16, 0x1b, 0x7d, 0x5c, 0x1c, + 0xd0, 0xc2, 0xfc, 0xdb, 0x1c, 0xc4, 0x69, 0x35, 0x5d, 0x5b, 0x94, 0x3b, 0xb5, 0xb6, 0xe8, 0x75, + 0x28, 0x3e, 0x62, 0x9e, 0xbb, 0x1d, 0x57, 0x20, 0xe9, 0x09, 0xbd, 0xd3, 0xd8, 0xda, 0x14, 0x92, + 0x5a, 0x42, 0x48, 0x7f, 0xb8, 0xe6, 0x74, 0xc2, 0xfe, 0x3a, 0x9d, 0x3b, 0xbf, 0x22, 0xe9, 0xa8, + 0x25, 0xc8, 0x12, 0x94, 0x74, 0x26, 0x57, 0x05, 0x88, 0x7a, 0x12, 0x74, 0x1a, 0x13, 0x63, 0x19, + 0xf3, 0x87, 0x63, 0x50, 0xfc, 0x49, 0x2b, 0x3a, 0xdf, 0x87, 0x02, 0x13, 0x4f, 0x81, 0x2a, 0xf0, + 0x5c, 0x1e, 0x31, 0x39, 0xcc, 0xa1, 0x92, 0x6f, 0xdf, 0xfc, 0x1b, 0x95, 0x0a, 0xf3, 0xb3, 0x1c, + 0x4c, 0x3d, 0xc7, 0x42, 0xf3, 0xdd, 0x74, 0xa1, 0xf9, 0xbb, 0x23, 0x0d, 0xed, 0x94, 0x22, 0xf3, + 0xbf, 0x9f, 0x8f, 0x87, 0xc4, 0xa7, 0x95, 0xb8, 0x50, 0x8a, 0x0e, 0x78, 0x94, 0x70, 0x7f, 0x77, + 0xa4, 0xa0, 0x30, 0xde, 0x94, 0x11, 0x85, 0x61, 0xac, 0x82, 0xdc, 0x00, 0xa0, 0xdc, 0xb2, 0xc9, + 0x6c, 0xdc, 0x58, 0x3a, 0x1f, 0xbd, 0xaa, 0x39, 0x98, 0x90, 0x7a, 0xfe, 0x09, 0x87, 0xc1, 0x57, + 0xf4, 0xc4, 0x33, 0xb9, 0xa2, 0xaf, 0x9e, 0xfb, 0x15, 0xfd, 0xf2, 0xb3, 0xbf, 0xa2, 0x13, 0x01, + 0x49, 0x7e, 0x84, 0x80, 0xe4, 0x63, 0xb8, 0x24, 0xff, 0x5c, 0xee, 0x58, 0x4e, 0x57, 0xef, 0x17, + 0x55, 0x24, 0xf4, 0xd5, 0x81, 0x17, 0x33, 0x0d, 0x98, 0xc3, 0x42, 0xea, 0x86, 0x0f, 0xe2, 0x96, + 0xf1, 0x0b, 0xf3, 0x83, 0x01, 0x70, 0x38, 0x50, 0x49, 0xd6, 0x83, 0x9d, 0x3c, 0x83, 0x07, 0xfb, + 0x83, 0x1c, 0x5c, 0xb6, 0x06, 0xfd, 0x54, 0x4c, 0xe5, 0x31, 0xee, 0x8c, 0x14, 0x4f, 0xa4, 0x10, + 0x55, 0x3c, 0x30, 0x88, 0x85, 0x83, 0xfb, 0x40, 0x5e, 0x8d, 0x43, 0xd2, 0x92, 0xd8, 0x54, 0x83, + 0x83, 0xc9, 0xef, 0x65, 0x53, 0x41, 0x20, 0x66, 0xbb, 0x31, 0xb2, 0xc1, 0x3e, 0x87, 0x74, 0x50, + 0x79, 0x84, 0x74, 0x50, 0x26, 0xbc, 0x98, 0x3a, 0xa7, 0xf0, 0xc2, 0x85, 0x39, 0xa7, 0x6b, 0xb5, + 0xe8, 0x76, 0xaf, 0xd3, 0x91, 0x39, 0x6d, 0x66, 0x4c, 0x0b, 0xec, 0x81, 0x95, 0x9d, 0x3c, 0xdc, + 0xeb, 0xc8, 0xfb, 0x51, 0x3f, 0xf3, 0xc4, 0xcf, 0x30, 0xeb, 0x19, 0x24, 0xec, 0xc3, 0xe6, 0xdb, + 0x92, 0xbb, 0xad, 0x9b, 0x34, 0xe4, 0xb3, 0x2d, 0x32, 0x25, 0xea, 0x27, 0xb1, 0xb7, 0x63, 0x32, + 0x26, 0x65, 0xc8, 0x5d, 0x28, 0x35, 0x5d, 0xb6, 0xed, 0x75, 0x1c, 0xfb, 0x48, 0xa4, 0x3b, 0x4a, + 0xf5, 0x37, 0xb8, 0x6d, 0x5b, 0xd9, 0x6c, 0x48, 0xe2, 0xe3, 0xe3, 0xca, 0xd5, 0xfe, 0xdf, 0xfc, + 0x57, 0x35, 0x1f, 0xe3, 0xf6, 0x64, 0x43, 0x80, 0xa9, 0x32, 0x67, 0x99, 0xda, 0xb8, 0x76, 0x8a, + 0x87, 0xbc, 0xb2, 0x19, 0x55, 0x65, 0x4f, 0x2b, 0x75, 0xaa, 0x78, 0x39, 0x46, 0x20, 0xaf, 0x41, + 0xc1, 0x73, 0x57, 0x3f, 0x72, 0x42, 0xe3, 0x62, 0x3a, 0xa7, 0xbd, 0x25, 0xa8, 0xa8, 0xb8, 0xe4, + 0x3e, 0x5c, 0x09, 0xc3, 0x8e, 0x0a, 0x6d, 0x6b, 0x7b, 0x21, 0x0d, 0xa2, 0x52, 0x06, 0x51, 0x8e, + 0x92, 0xaf, 0xbf, 0x74, 0x72, 0x5c, 0xb9, 0xb2, 0xb3, 0x73, 0x6f, 0x90, 0x08, 0x9e, 0xd6, 0xf6, + 0xf4, 0xa0, 0x7b, 0x7e, 0xc8, 0xa0, 0x3b, 0x19, 0xe7, 0x5d, 0xfa, 0xd2, 0x38, 0xaf, 0x2f, 0x2e, + 0xbd, 0xfc, 0x14, 0x71, 0xe9, 0x07, 0xa2, 0x60, 0xe3, 0xd6, 0xb2, 0x8a, 0xe9, 0xdf, 0x19, 0x2e, + 0x95, 0xc8, 0x11, 0xe4, 0xbb, 0x9d, 0xf8, 0x13, 0x25, 0x26, 0xd9, 0x86, 0x4b, 0xbe, 0xd7, 0xec, + 0x0b, 0x6b, 0x45, 0x10, 0x9f, 0xa8, 0xd6, 0xd9, 0x1e, 0x20, 0x83, 0x03, 0x5b, 0x0a, 0x5b, 0x1a, + 0xd3, 0x0d, 0x43, 0x4c, 0x8c, 0xb4, 0xa5, 0x31, 0x19, 0x93, 0x32, 0xd9, 0x28, 0xef, 0xc5, 0x67, + 0x16, 0xe5, 0x2d, 0x3c, 0x87, 0x28, 0xef, 0xa5, 0xe7, 0x17, 0xe5, 0x7d, 0x5e, 0x84, 0x99, 0xb4, + 0xff, 0x1a, 0xd7, 0x4a, 0xe5, 0xce, 0x5a, 0x2b, 0x95, 0x2a, 0x66, 0x1a, 0x7b, 0xa6, 0xc5, 0x4c, + 0xe3, 0xe7, 0x5e, 0xcc, 0x94, 0x28, 0xda, 0x9a, 0x78, 0x42, 0xd1, 0x56, 0x0d, 0x66, 0x6d, 0xaf, + 0xeb, 0x8b, 0xdf, 0x45, 0xa8, 0xd2, 0x1d, 0xf9, 0xbc, 0xae, 0x1f, 0x30, 0x97, 0xd3, 0x6c, 0xcc, + 0xca, 0x13, 0x06, 0x79, 0x57, 0x34, 0x2c, 0x8c, 0x50, 0xf0, 0x99, 0x5e, 0x30, 0x71, 0x51, 0xaa, + 0x9a, 0x4b, 0xed, 0xa6, 0x4b, 0xf5, 0x52, 0x17, 0x77, 0x34, 0x66, 0xd3, 0x45, 0x76, 0xcc, 0x28, + 0x09, 0xfd, 0xbf, 0x7a, 0x1e, 0xfa, 0xd3, 0x15, 0x7d, 0xaa, 0x27, 0xf1, 0x9b, 0x6e, 0x9a, 0x8b, + 0xd9, 0x9e, 0x90, 0x00, 0x5e, 0xf0, 0x07, 0xb9, 0x61, 0x4c, 0xbd, 0x2a, 0x7d, 0x99, 0x33, 0xb8, + 0xa8, 0xb4, 0xbc, 0x30, 0xd0, 0x91, 0x63, 0x78, 0x0a, 0x72, 0xb2, 0x22, 0xac, 0xf8, 0xac, 0x2a, + 0xc2, 0x16, 0x8e, 0x64, 0xb1, 0xe9, 0xa9, 0x75, 0xaa, 0xf7, 0xd3, 0xb5, 0xe3, 0xef, 0x0f, 0xf9, + 0xbf, 0xc0, 0x44, 0xe5, 0xac, 0xc9, 0x1a, 0xd9, 0xdf, 0xca, 0xc1, 0xa5, 0x41, 0xcb, 0x32, 0xa0, + 0x17, 0x8d, 0x74, 0x2f, 0x46, 0x0b, 0xd7, 0x92, 0xa6, 0xe5, 0xdf, 0xf3, 0x89, 0xe0, 0x30, 0xa4, + 0xfe, 0xcf, 0x5e, 0x8e, 0x87, 0x7a, 0x39, 0x4e, 0xfd, 0xfe, 0x37, 0xff, 0x1c, 0x7f, 0xff, 0x5b, + 0x18, 0xe2, 0xf7, 0xbf, 0x93, 0xcf, 0xf3, 0xf7, 0xbf, 0xc5, 0x33, 0xfe, 0xfe, 0xb7, 0xf4, 0xec, + 0x7f, 0xff, 0xfb, 0x45, 0x0e, 0xe6, 0xb2, 0xe5, 0xc8, 0xcf, 0x21, 0x49, 0xb6, 0x9f, 0x4a, 0x92, + 0xad, 0x8f, 0x64, 0xcc, 0xa3, 0x6e, 0x9f, 0x96, 0x2c, 0x33, 0x7f, 0x9c, 0x83, 0xbe, 0x92, 0xeb, + 0xe7, 0x90, 0xc7, 0x7a, 0x94, 0xce, 0x63, 0xad, 0x9e, 0xcb, 0x20, 0x4f, 0xc9, 0x67, 0xfd, 0xcf, + 0x80, 0x21, 0xfe, 0x9f, 0xe4, 0xb5, 0x52, 0xa6, 0x6d, 0xec, 0xd9, 0x9b, 0xb6, 0x7a, 0xf5, 0xd3, + 0x2f, 0x16, 0x2f, 0x7c, 0xf6, 0xc5, 0xe2, 0x85, 0xcf, 0xbf, 0x58, 0xbc, 0xf0, 0xc9, 0xc9, 0x62, + 0xee, 0xd3, 0x93, 0xc5, 0xdc, 0x67, 0x27, 0x8b, 0xb9, 0xcf, 0x4f, 0x16, 0x73, 0x3f, 0x3e, 0x59, + 0xcc, 0xfd, 0xd1, 0xbf, 0x2e, 0x5e, 0xf8, 0xb5, 0x62, 0x84, 0xfb, 0xbf, 0x01, 0x00, 0x00, 0xff, + 0xff, 0xb7, 0xae, 0xb9, 0x8a, 0x9e, 0x4e, 0x00, 0x00, } func (m *ArchiveStrategy) Marshal() (dAtA []byte, err error) { @@ -2143,6 +2234,134 @@ func (m *ContinueOn) MarshalToSizedBuffer(dAtA []byte) (int, error) { return len(dAtA) - i, nil } +func (m *CronWorkflow) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *CronWorkflow) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *CronWorkflow) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + { + size, err := m.Options.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x1a + { + size, err := m.Spec.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x12 + { + size, err := m.ObjectMeta.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil +} + +func (m *CronWorkflowList) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *CronWorkflowList) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *CronWorkflowList) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if len(m.Items) > 0 { + for iNdEx := len(m.Items) - 1; iNdEx >= 0; iNdEx-- { + { + size, err := m.Items[iNdEx].MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x12 + } + } + { + size, err := m.ListMeta.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil +} + +func (m *CronWorkflowOptions) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *CronWorkflowOptions) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *CronWorkflowOptions) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + i -= len(m.CronSchedule) + copy(dAtA[i:], m.CronSchedule) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.CronSchedule))) + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil +} + func (m *DAGTask) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) @@ -5144,23 +5363,66 @@ func (m *ContinueOn) Size() (n int) { return n } -func (m *DAGTask) Size() (n int) { +func (m *CronWorkflow) Size() (n int) { if m == nil { return 0 } var l int _ = l - l = len(m.Name) + l = m.ObjectMeta.Size() n += 1 + l + sovGenerated(uint64(l)) - l = len(m.Template) + l = m.Spec.Size() n += 1 + l + sovGenerated(uint64(l)) - l = m.Arguments.Size() + l = m.Options.Size() n += 1 + l + sovGenerated(uint64(l)) - if m.TemplateRef != nil { - l = m.TemplateRef.Size() - n += 1 + l + sovGenerated(uint64(l)) + return n +} + +func (m *CronWorkflowList) Size() (n int) { + if m == nil { + return 0 } - if len(m.Dependencies) > 0 { + var l int + _ = l + l = m.ListMeta.Size() + n += 1 + l + sovGenerated(uint64(l)) + if len(m.Items) > 0 { + for _, e := range m.Items { + l = e.Size() + n += 1 + l + sovGenerated(uint64(l)) + } + } + return n +} + +func (m *CronWorkflowOptions) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = len(m.CronSchedule) + n += 1 + l + sovGenerated(uint64(l)) + return n +} + +func (m *DAGTask) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = len(m.Name) + n += 1 + l + sovGenerated(uint64(l)) + l = len(m.Template) + n += 1 + l + sovGenerated(uint64(l)) + l = m.Arguments.Size() + n += 1 + l + sovGenerated(uint64(l)) + if m.TemplateRef != nil { + l = m.TemplateRef.Size() + n += 1 + l + sovGenerated(uint64(l)) + } + if len(m.Dependencies) > 0 { for _, s := range m.Dependencies { l = len(s) n += 1 + l + sovGenerated(uint64(l)) @@ -6278,6 +6540,44 @@ func (this *ContinueOn) String() string { }, "") return s } +func (this *CronWorkflow) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&CronWorkflow{`, + `ObjectMeta:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.ObjectMeta), "ObjectMeta", "v11.ObjectMeta", 1), `&`, ``, 1) + `,`, + `Spec:` + strings.Replace(strings.Replace(this.Spec.String(), "WorkflowSpec", "WorkflowSpec", 1), `&`, ``, 1) + `,`, + `Options:` + strings.Replace(strings.Replace(this.Options.String(), "CronWorkflowOptions", "CronWorkflowOptions", 1), `&`, ``, 1) + `,`, + `}`, + }, "") + return s +} +func (this *CronWorkflowList) String() string { + if this == nil { + return "nil" + } + repeatedStringForItems := "[]CronWorkflow{" + for _, f := range this.Items { + repeatedStringForItems += strings.Replace(strings.Replace(f.String(), "CronWorkflow", "CronWorkflow", 1), `&`, ``, 1) + "," + } + repeatedStringForItems += "}" + s := strings.Join([]string{`&CronWorkflowList{`, + `ListMeta:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.ListMeta), "ListMeta", "v11.ListMeta", 1), `&`, ``, 1) + `,`, + `Items:` + repeatedStringForItems + `,`, + `}`, + }, "") + return s +} +func (this *CronWorkflowOptions) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&CronWorkflowOptions{`, + `CronSchedule:` + fmt.Sprintf("%v", this.CronSchedule) + `,`, + `}`, + }, "") + return s +} func (this *DAGTask) String() string { if this == nil { return "nil" @@ -8269,6 +8569,363 @@ func (m *ContinueOn) Unmarshal(dAtA []byte) error { } return nil } +func (m *CronWorkflow) 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 ErrIntOverflowGenerated + } + 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: CronWorkflow: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: CronWorkflow: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field ObjectMeta", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.ObjectMeta.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Spec", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.Spec.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 3: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Options", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.Options.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipGenerated(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *CronWorkflowList) 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 ErrIntOverflowGenerated + } + 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: CronWorkflowList: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: CronWorkflowList: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field ListMeta", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.ListMeta.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Items", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Items = append(m.Items, CronWorkflow{}) + if err := m.Items[len(m.Items)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipGenerated(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *CronWorkflowOptions) 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 ErrIntOverflowGenerated + } + 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: CronWorkflowOptions: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: CronWorkflowOptions: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field CronSchedule", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.CronSchedule = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipGenerated(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} func (m *DAGTask) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 diff --git a/pkg/apis/workflow/v1alpha1/generated.proto b/pkg/apis/workflow/v1alpha1/generated.proto index a606b5d2a023..2c0b28c00733 100644 --- a/pkg/apis/workflow/v1alpha1/generated.proto +++ b/pkg/apis/workflow/v1alpha1/generated.proto @@ -122,6 +122,32 @@ message ContinueOn { optional bool failed = 2; } +// CronWorkflow is the definition of a scheduled workflow resource +// +genclient +// +genclient:noStatus +// +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object +message CronWorkflow { + optional k8s.io.apimachinery.pkg.apis.meta.v1.ObjectMeta metadata = 1; + + optional WorkflowSpec spec = 2; + + optional CronWorkflowOptions options = 3; +} + +// CronWorkflowList is list of CronWorkflow resources +// +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object +message CronWorkflowList { + optional k8s.io.apimachinery.pkg.apis.meta.v1.ListMeta metadata = 1; + + repeated CronWorkflow items = 2; +} + +// CronWorkflowOptions is the schedule of when to run CronWorkflows +message CronWorkflowOptions { + // CronSchedule is a schedule to run the Workflow in Cron format + optional string cronSchedule = 1; +} + // DAGTask represents a node in the graph during DAG execution message DAGTask { // Name is the name of the target diff --git a/pkg/apis/workflow/v1alpha1/openapi_generated.go b/pkg/apis/workflow/v1alpha1/openapi_generated.go index 5883dbae9a49..c61454d79011 100644 --- a/pkg/apis/workflow/v1alpha1/openapi_generated.go +++ b/pkg/apis/workflow/v1alpha1/openapi_generated.go @@ -21,6 +21,9 @@ func GetOpenAPIDefinitions(ref common.ReferenceCallback) map[string]common.OpenA "github.com/argoproj/argo/pkg/apis/workflow/v1alpha1.ArtifactoryArtifact": schema_pkg_apis_workflow_v1alpha1_ArtifactoryArtifact(ref), "github.com/argoproj/argo/pkg/apis/workflow/v1alpha1.ArtifactoryAuth": schema_pkg_apis_workflow_v1alpha1_ArtifactoryAuth(ref), "github.com/argoproj/argo/pkg/apis/workflow/v1alpha1.ContinueOn": schema_pkg_apis_workflow_v1alpha1_ContinueOn(ref), + "github.com/argoproj/argo/pkg/apis/workflow/v1alpha1.CronWorkflow": schema_pkg_apis_workflow_v1alpha1_CronWorkflow(ref), + "github.com/argoproj/argo/pkg/apis/workflow/v1alpha1.CronWorkflowList": schema_pkg_apis_workflow_v1alpha1_CronWorkflowList(ref), + "github.com/argoproj/argo/pkg/apis/workflow/v1alpha1.CronWorkflowOptions": schema_pkg_apis_workflow_v1alpha1_CronWorkflowOptions(ref), "github.com/argoproj/argo/pkg/apis/workflow/v1alpha1.DAGTask": schema_pkg_apis_workflow_v1alpha1_DAGTask(ref), "github.com/argoproj/argo/pkg/apis/workflow/v1alpha1.DAGTemplate": schema_pkg_apis_workflow_v1alpha1_DAGTemplate(ref), "github.com/argoproj/argo/pkg/apis/workflow/v1alpha1.ExecutorConfig": schema_pkg_apis_workflow_v1alpha1_ExecutorConfig(ref), @@ -417,6 +420,119 @@ func schema_pkg_apis_workflow_v1alpha1_ContinueOn(ref common.ReferenceCallback) } } +func schema_pkg_apis_workflow_v1alpha1_CronWorkflow(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "CronWorkflow is the definition of a scheduled workflow resource", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "kind": { + SchemaProps: spec.SchemaProps{ + Description: "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds", + Type: []string{"string"}, + Format: "", + }, + }, + "apiVersion": { + SchemaProps: spec.SchemaProps{ + Description: "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources", + Type: []string{"string"}, + Format: "", + }, + }, + "metadata": { + SchemaProps: spec.SchemaProps{ + Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.ObjectMeta"), + }, + }, + "spec": { + SchemaProps: spec.SchemaProps{ + Ref: ref("github.com/argoproj/argo/pkg/apis/workflow/v1alpha1.WorkflowSpec"), + }, + }, + "options": { + SchemaProps: spec.SchemaProps{ + Ref: ref("github.com/argoproj/argo/pkg/apis/workflow/v1alpha1.CronWorkflowOptions"), + }, + }, + }, + Required: []string{"spec", "options"}, + }, + }, + Dependencies: []string{ + "github.com/argoproj/argo/pkg/apis/workflow/v1alpha1.CronWorkflowOptions", "github.com/argoproj/argo/pkg/apis/workflow/v1alpha1.WorkflowSpec", "k8s.io/apimachinery/pkg/apis/meta/v1.ObjectMeta"}, + } +} + +func schema_pkg_apis_workflow_v1alpha1_CronWorkflowList(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "CronWorkflowList is list of CronWorkflow resources", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "kind": { + SchemaProps: spec.SchemaProps{ + Description: "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds", + Type: []string{"string"}, + Format: "", + }, + }, + "apiVersion": { + SchemaProps: spec.SchemaProps{ + Description: "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources", + Type: []string{"string"}, + Format: "", + }, + }, + "metadata": { + SchemaProps: spec.SchemaProps{ + Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.ListMeta"), + }, + }, + "items": { + SchemaProps: spec.SchemaProps{ + Type: []string{"array"}, + Items: &spec.SchemaOrArray{ + Schema: &spec.Schema{ + SchemaProps: spec.SchemaProps{ + Ref: ref("github.com/argoproj/argo/pkg/apis/workflow/v1alpha1.CronWorkflow"), + }, + }, + }, + }, + }, + }, + Required: []string{"metadata", "items"}, + }, + }, + Dependencies: []string{ + "github.com/argoproj/argo/pkg/apis/workflow/v1alpha1.CronWorkflow", "k8s.io/apimachinery/pkg/apis/meta/v1.ListMeta"}, + } +} + +func schema_pkg_apis_workflow_v1alpha1_CronWorkflowOptions(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "CronWorkflowOptions is the schedule of when to run CronWorkflows", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "cronSchedule": { + SchemaProps: spec.SchemaProps{ + Description: "CronSchedule is a schedule to run the Workflow in Cron format", + Type: []string{"string"}, + Format: "", + }, + }, + }, + Required: []string{"cronSchedule"}, + }, + }, + } +} + func schema_pkg_apis_workflow_v1alpha1_DAGTask(ref common.ReferenceCallback) common.OpenAPIDefinition { return common.OpenAPIDefinition{ Schema: spec.Schema{ diff --git a/pkg/apis/workflow/v1alpha1/zz_generated.deepcopy.go b/pkg/apis/workflow/v1alpha1/zz_generated.deepcopy.go index f162e2a09aec..cfaefd82d52b 100644 --- a/pkg/apis/workflow/v1alpha1/zz_generated.deepcopy.go +++ b/pkg/apis/workflow/v1alpha1/zz_generated.deepcopy.go @@ -220,6 +220,83 @@ func (in *ContinueOn) DeepCopy() *ContinueOn { return out } +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *CronWorkflow) DeepCopyInto(out *CronWorkflow) { + *out = *in + out.TypeMeta = in.TypeMeta + in.ObjectMeta.DeepCopyInto(&out.ObjectMeta) + in.Spec.DeepCopyInto(&out.Spec) + out.Options = in.Options + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new CronWorkflow. +func (in *CronWorkflow) DeepCopy() *CronWorkflow { + if in == nil { + return nil + } + out := new(CronWorkflow) + in.DeepCopyInto(out) + return out +} + +// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object. +func (in *CronWorkflow) DeepCopyObject() runtime.Object { + if c := in.DeepCopy(); c != nil { + return c + } + return nil +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *CronWorkflowList) DeepCopyInto(out *CronWorkflowList) { + *out = *in + out.TypeMeta = in.TypeMeta + in.ListMeta.DeepCopyInto(&out.ListMeta) + if in.Items != nil { + in, out := &in.Items, &out.Items + *out = make([]CronWorkflow, len(*in)) + for i := range *in { + (*in)[i].DeepCopyInto(&(*out)[i]) + } + } + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new CronWorkflowList. +func (in *CronWorkflowList) DeepCopy() *CronWorkflowList { + if in == nil { + return nil + } + out := new(CronWorkflowList) + in.DeepCopyInto(out) + return out +} + +// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object. +func (in *CronWorkflowList) DeepCopyObject() runtime.Object { + if c := in.DeepCopy(); c != nil { + return c + } + return nil +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *CronWorkflowOptions) DeepCopyInto(out *CronWorkflowOptions) { + *out = *in + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new CronWorkflowOptions. +func (in *CronWorkflowOptions) DeepCopy() *CronWorkflowOptions { + if in == nil { + return nil + } + out := new(CronWorkflowOptions) + in.DeepCopyInto(out) + return out +} + // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. func (in *DAGTask) DeepCopyInto(out *DAGTask) { *out = *in diff --git a/pkg/client/clientset/versioned/typed/workflow/v1alpha1/cronworkflow.go b/pkg/client/clientset/versioned/typed/workflow/v1alpha1/cronworkflow.go new file mode 100644 index 000000000000..2220092617b7 --- /dev/null +++ b/pkg/client/clientset/versioned/typed/workflow/v1alpha1/cronworkflow.go @@ -0,0 +1,158 @@ +// Code generated by client-gen. DO NOT EDIT. + +package v1alpha1 + +import ( + "time" + + v1alpha1 "github.com/argoproj/argo/pkg/apis/workflow/v1alpha1" + scheme "github.com/argoproj/argo/pkg/client/clientset/versioned/scheme" + v1 "k8s.io/apimachinery/pkg/apis/meta/v1" + types "k8s.io/apimachinery/pkg/types" + watch "k8s.io/apimachinery/pkg/watch" + rest "k8s.io/client-go/rest" +) + +// CronWorkflowsGetter has a method to return a CronWorkflowInterface. +// A group's client should implement this interface. +type CronWorkflowsGetter interface { + CronWorkflows(namespace string) CronWorkflowInterface +} + +// CronWorkflowInterface has methods to work with CronWorkflow resources. +type CronWorkflowInterface interface { + Create(*v1alpha1.CronWorkflow) (*v1alpha1.CronWorkflow, error) + Update(*v1alpha1.CronWorkflow) (*v1alpha1.CronWorkflow, error) + Delete(name string, options *v1.DeleteOptions) error + DeleteCollection(options *v1.DeleteOptions, listOptions v1.ListOptions) error + Get(name string, options v1.GetOptions) (*v1alpha1.CronWorkflow, error) + List(opts v1.ListOptions) (*v1alpha1.CronWorkflowList, error) + Watch(opts v1.ListOptions) (watch.Interface, error) + Patch(name string, pt types.PatchType, data []byte, subresources ...string) (result *v1alpha1.CronWorkflow, err error) + CronWorkflowExpansion +} + +// cronWorkflows implements CronWorkflowInterface +type cronWorkflows struct { + client rest.Interface + ns string +} + +// newCronWorkflows returns a CronWorkflows +func newCronWorkflows(c *ArgoprojV1alpha1Client, namespace string) *cronWorkflows { + return &cronWorkflows{ + client: c.RESTClient(), + ns: namespace, + } +} + +// Get takes name of the cronWorkflow, and returns the corresponding cronWorkflow object, and an error if there is any. +func (c *cronWorkflows) Get(name string, options v1.GetOptions) (result *v1alpha1.CronWorkflow, err error) { + result = &v1alpha1.CronWorkflow{} + err = c.client.Get(). + Namespace(c.ns). + Resource("cronworkflows"). + Name(name). + VersionedParams(&options, scheme.ParameterCodec). + Do(). + Into(result) + return +} + +// List takes label and field selectors, and returns the list of CronWorkflows that match those selectors. +func (c *cronWorkflows) List(opts v1.ListOptions) (result *v1alpha1.CronWorkflowList, err error) { + var timeout time.Duration + if opts.TimeoutSeconds != nil { + timeout = time.Duration(*opts.TimeoutSeconds) * time.Second + } + result = &v1alpha1.CronWorkflowList{} + err = c.client.Get(). + Namespace(c.ns). + Resource("cronworkflows"). + VersionedParams(&opts, scheme.ParameterCodec). + Timeout(timeout). + Do(). + Into(result) + return +} + +// Watch returns a watch.Interface that watches the requested cronWorkflows. +func (c *cronWorkflows) Watch(opts v1.ListOptions) (watch.Interface, error) { + var timeout time.Duration + if opts.TimeoutSeconds != nil { + timeout = time.Duration(*opts.TimeoutSeconds) * time.Second + } + opts.Watch = true + return c.client.Get(). + Namespace(c.ns). + Resource("cronworkflows"). + VersionedParams(&opts, scheme.ParameterCodec). + Timeout(timeout). + Watch() +} + +// Create takes the representation of a cronWorkflow and creates it. Returns the server's representation of the cronWorkflow, and an error, if there is any. +func (c *cronWorkflows) Create(cronWorkflow *v1alpha1.CronWorkflow) (result *v1alpha1.CronWorkflow, err error) { + result = &v1alpha1.CronWorkflow{} + err = c.client.Post(). + Namespace(c.ns). + Resource("cronworkflows"). + Body(cronWorkflow). + Do(). + Into(result) + return +} + +// Update takes the representation of a cronWorkflow and updates it. Returns the server's representation of the cronWorkflow, and an error, if there is any. +func (c *cronWorkflows) Update(cronWorkflow *v1alpha1.CronWorkflow) (result *v1alpha1.CronWorkflow, err error) { + result = &v1alpha1.CronWorkflow{} + err = c.client.Put(). + Namespace(c.ns). + Resource("cronworkflows"). + Name(cronWorkflow.Name). + Body(cronWorkflow). + Do(). + Into(result) + return +} + +// Delete takes name of the cronWorkflow and deletes it. Returns an error if one occurs. +func (c *cronWorkflows) Delete(name string, options *v1.DeleteOptions) error { + return c.client.Delete(). + Namespace(c.ns). + Resource("cronworkflows"). + Name(name). + Body(options). + Do(). + Error() +} + +// DeleteCollection deletes a collection of objects. +func (c *cronWorkflows) DeleteCollection(options *v1.DeleteOptions, listOptions v1.ListOptions) error { + var timeout time.Duration + if listOptions.TimeoutSeconds != nil { + timeout = time.Duration(*listOptions.TimeoutSeconds) * time.Second + } + return c.client.Delete(). + Namespace(c.ns). + Resource("cronworkflows"). + VersionedParams(&listOptions, scheme.ParameterCodec). + Timeout(timeout). + Body(options). + Do(). + Error() +} + +// Patch applies the patch and returns the patched cronWorkflow. +func (c *cronWorkflows) Patch(name string, pt types.PatchType, data []byte, subresources ...string) (result *v1alpha1.CronWorkflow, err error) { + result = &v1alpha1.CronWorkflow{} + err = c.client.Patch(pt). + Namespace(c.ns). + Resource("cronworkflows"). + SubResource(subresources...). + Name(name). + Body(data). + Do(). + Into(result) + return +} diff --git a/pkg/client/clientset/versioned/typed/workflow/v1alpha1/fake/fake_cronworkflow.go b/pkg/client/clientset/versioned/typed/workflow/v1alpha1/fake/fake_cronworkflow.go new file mode 100644 index 000000000000..fddf378d3bd0 --- /dev/null +++ b/pkg/client/clientset/versioned/typed/workflow/v1alpha1/fake/fake_cronworkflow.go @@ -0,0 +1,112 @@ +// Code generated by client-gen. DO NOT EDIT. + +package fake + +import ( + v1alpha1 "github.com/argoproj/argo/pkg/apis/workflow/v1alpha1" + v1 "k8s.io/apimachinery/pkg/apis/meta/v1" + labels "k8s.io/apimachinery/pkg/labels" + schema "k8s.io/apimachinery/pkg/runtime/schema" + types "k8s.io/apimachinery/pkg/types" + watch "k8s.io/apimachinery/pkg/watch" + testing "k8s.io/client-go/testing" +) + +// FakeCronWorkflows implements CronWorkflowInterface +type FakeCronWorkflows struct { + Fake *FakeArgoprojV1alpha1 + ns string +} + +var cronworkflowsResource = schema.GroupVersionResource{Group: "argoproj.io", Version: "v1alpha1", Resource: "cronworkflows"} + +var cronworkflowsKind = schema.GroupVersionKind{Group: "argoproj.io", Version: "v1alpha1", Kind: "CronWorkflow"} + +// Get takes name of the cronWorkflow, and returns the corresponding cronWorkflow object, and an error if there is any. +func (c *FakeCronWorkflows) Get(name string, options v1.GetOptions) (result *v1alpha1.CronWorkflow, err error) { + obj, err := c.Fake. + Invokes(testing.NewGetAction(cronworkflowsResource, c.ns, name), &v1alpha1.CronWorkflow{}) + + if obj == nil { + return nil, err + } + return obj.(*v1alpha1.CronWorkflow), err +} + +// List takes label and field selectors, and returns the list of CronWorkflows that match those selectors. +func (c *FakeCronWorkflows) List(opts v1.ListOptions) (result *v1alpha1.CronWorkflowList, err error) { + obj, err := c.Fake. + Invokes(testing.NewListAction(cronworkflowsResource, cronworkflowsKind, c.ns, opts), &v1alpha1.CronWorkflowList{}) + + if obj == nil { + return nil, err + } + + label, _, _ := testing.ExtractFromListOptions(opts) + if label == nil { + label = labels.Everything() + } + list := &v1alpha1.CronWorkflowList{ListMeta: obj.(*v1alpha1.CronWorkflowList).ListMeta} + for _, item := range obj.(*v1alpha1.CronWorkflowList).Items { + if label.Matches(labels.Set(item.Labels)) { + list.Items = append(list.Items, item) + } + } + return list, err +} + +// Watch returns a watch.Interface that watches the requested cronWorkflows. +func (c *FakeCronWorkflows) Watch(opts v1.ListOptions) (watch.Interface, error) { + return c.Fake. + InvokesWatch(testing.NewWatchAction(cronworkflowsResource, c.ns, opts)) + +} + +// Create takes the representation of a cronWorkflow and creates it. Returns the server's representation of the cronWorkflow, and an error, if there is any. +func (c *FakeCronWorkflows) Create(cronWorkflow *v1alpha1.CronWorkflow) (result *v1alpha1.CronWorkflow, err error) { + obj, err := c.Fake. + Invokes(testing.NewCreateAction(cronworkflowsResource, c.ns, cronWorkflow), &v1alpha1.CronWorkflow{}) + + if obj == nil { + return nil, err + } + return obj.(*v1alpha1.CronWorkflow), err +} + +// Update takes the representation of a cronWorkflow and updates it. Returns the server's representation of the cronWorkflow, and an error, if there is any. +func (c *FakeCronWorkflows) Update(cronWorkflow *v1alpha1.CronWorkflow) (result *v1alpha1.CronWorkflow, err error) { + obj, err := c.Fake. + Invokes(testing.NewUpdateAction(cronworkflowsResource, c.ns, cronWorkflow), &v1alpha1.CronWorkflow{}) + + if obj == nil { + return nil, err + } + return obj.(*v1alpha1.CronWorkflow), err +} + +// Delete takes name of the cronWorkflow and deletes it. Returns an error if one occurs. +func (c *FakeCronWorkflows) Delete(name string, options *v1.DeleteOptions) error { + _, err := c.Fake. + Invokes(testing.NewDeleteAction(cronworkflowsResource, c.ns, name), &v1alpha1.CronWorkflow{}) + + return err +} + +// DeleteCollection deletes a collection of objects. +func (c *FakeCronWorkflows) DeleteCollection(options *v1.DeleteOptions, listOptions v1.ListOptions) error { + action := testing.NewDeleteCollectionAction(cronworkflowsResource, c.ns, listOptions) + + _, err := c.Fake.Invokes(action, &v1alpha1.CronWorkflowList{}) + return err +} + +// Patch applies the patch and returns the patched cronWorkflow. +func (c *FakeCronWorkflows) Patch(name string, pt types.PatchType, data []byte, subresources ...string) (result *v1alpha1.CronWorkflow, err error) { + obj, err := c.Fake. + Invokes(testing.NewPatchSubresourceAction(cronworkflowsResource, c.ns, name, pt, data, subresources...), &v1alpha1.CronWorkflow{}) + + if obj == nil { + return nil, err + } + return obj.(*v1alpha1.CronWorkflow), err +} diff --git a/pkg/client/clientset/versioned/typed/workflow/v1alpha1/fake/fake_workflow_client.go b/pkg/client/clientset/versioned/typed/workflow/v1alpha1/fake/fake_workflow_client.go index 682651a5e10a..376ca146d2d1 100644 --- a/pkg/client/clientset/versioned/typed/workflow/v1alpha1/fake/fake_workflow_client.go +++ b/pkg/client/clientset/versioned/typed/workflow/v1alpha1/fake/fake_workflow_client.go @@ -12,6 +12,10 @@ type FakeArgoprojV1alpha1 struct { *testing.Fake } +func (c *FakeArgoprojV1alpha1) CronWorkflows(namespace string) v1alpha1.CronWorkflowInterface { + return &FakeCronWorkflows{c, namespace} +} + func (c *FakeArgoprojV1alpha1) Workflows(namespace string) v1alpha1.WorkflowInterface { return &FakeWorkflows{c, namespace} } diff --git a/pkg/client/clientset/versioned/typed/workflow/v1alpha1/generated_expansion.go b/pkg/client/clientset/versioned/typed/workflow/v1alpha1/generated_expansion.go index 96acabd7d755..a4837a52f2a3 100644 --- a/pkg/client/clientset/versioned/typed/workflow/v1alpha1/generated_expansion.go +++ b/pkg/client/clientset/versioned/typed/workflow/v1alpha1/generated_expansion.go @@ -2,6 +2,8 @@ package v1alpha1 +type CronWorkflowExpansion interface{} + type WorkflowExpansion interface{} type WorkflowTemplateExpansion interface{} diff --git a/pkg/client/clientset/versioned/typed/workflow/v1alpha1/workflow_client.go b/pkg/client/clientset/versioned/typed/workflow/v1alpha1/workflow_client.go index 7d8df785a06e..2a93aa9b0c4c 100644 --- a/pkg/client/clientset/versioned/typed/workflow/v1alpha1/workflow_client.go +++ b/pkg/client/clientset/versioned/typed/workflow/v1alpha1/workflow_client.go @@ -10,6 +10,7 @@ import ( type ArgoprojV1alpha1Interface interface { RESTClient() rest.Interface + CronWorkflowsGetter WorkflowsGetter WorkflowTemplatesGetter } @@ -19,6 +20,10 @@ type ArgoprojV1alpha1Client struct { restClient rest.Interface } +func (c *ArgoprojV1alpha1Client) CronWorkflows(namespace string) CronWorkflowInterface { + return newCronWorkflows(c, namespace) +} + func (c *ArgoprojV1alpha1Client) Workflows(namespace string) WorkflowInterface { return newWorkflows(c, namespace) } diff --git a/pkg/client/informers/externalversions/generic.go b/pkg/client/informers/externalversions/generic.go index 2a2188a7212e..c870b30bb283 100644 --- a/pkg/client/informers/externalversions/generic.go +++ b/pkg/client/informers/externalversions/generic.go @@ -37,6 +37,8 @@ func (f *genericInformer) Lister() cache.GenericLister { func (f *sharedInformerFactory) ForResource(resource schema.GroupVersionResource) (GenericInformer, error) { switch resource { // Group=argoproj.io, Version=v1alpha1 + case v1alpha1.SchemeGroupVersion.WithResource("cronworkflows"): + return &genericInformer{resource: resource.GroupResource(), informer: f.Argoproj().V1alpha1().CronWorkflows().Informer()}, nil case v1alpha1.SchemeGroupVersion.WithResource("workflows"): return &genericInformer{resource: resource.GroupResource(), informer: f.Argoproj().V1alpha1().Workflows().Informer()}, nil case v1alpha1.SchemeGroupVersion.WithResource("workflowtemplates"): diff --git a/pkg/client/informers/externalversions/workflow/v1alpha1/cronworkflow.go b/pkg/client/informers/externalversions/workflow/v1alpha1/cronworkflow.go new file mode 100644 index 000000000000..60a2ee4b1947 --- /dev/null +++ b/pkg/client/informers/externalversions/workflow/v1alpha1/cronworkflow.go @@ -0,0 +1,73 @@ +// Code generated by informer-gen. DO NOT EDIT. + +package v1alpha1 + +import ( + time "time" + + workflowv1alpha1 "github.com/argoproj/argo/pkg/apis/workflow/v1alpha1" + versioned "github.com/argoproj/argo/pkg/client/clientset/versioned" + internalinterfaces "github.com/argoproj/argo/pkg/client/informers/externalversions/internalinterfaces" + v1alpha1 "github.com/argoproj/argo/pkg/client/listers/workflow/v1alpha1" + v1 "k8s.io/apimachinery/pkg/apis/meta/v1" + runtime "k8s.io/apimachinery/pkg/runtime" + watch "k8s.io/apimachinery/pkg/watch" + cache "k8s.io/client-go/tools/cache" +) + +// CronWorkflowInformer provides access to a shared informer and lister for +// CronWorkflows. +type CronWorkflowInformer interface { + Informer() cache.SharedIndexInformer + Lister() v1alpha1.CronWorkflowLister +} + +type cronWorkflowInformer struct { + factory internalinterfaces.SharedInformerFactory + tweakListOptions internalinterfaces.TweakListOptionsFunc + namespace string +} + +// NewCronWorkflowInformer constructs a new informer for CronWorkflow type. +// Always prefer using an informer factory to get a shared informer instead of getting an independent +// one. This reduces memory footprint and number of connections to the server. +func NewCronWorkflowInformer(client versioned.Interface, namespace string, resyncPeriod time.Duration, indexers cache.Indexers) cache.SharedIndexInformer { + return NewFilteredCronWorkflowInformer(client, namespace, resyncPeriod, indexers, nil) +} + +// NewFilteredCronWorkflowInformer constructs a new informer for CronWorkflow type. +// Always prefer using an informer factory to get a shared informer instead of getting an independent +// one. This reduces memory footprint and number of connections to the server. +func NewFilteredCronWorkflowInformer(client versioned.Interface, namespace string, resyncPeriod time.Duration, indexers cache.Indexers, tweakListOptions internalinterfaces.TweakListOptionsFunc) cache.SharedIndexInformer { + return cache.NewSharedIndexInformer( + &cache.ListWatch{ + ListFunc: func(options v1.ListOptions) (runtime.Object, error) { + if tweakListOptions != nil { + tweakListOptions(&options) + } + return client.ArgoprojV1alpha1().CronWorkflows(namespace).List(options) + }, + WatchFunc: func(options v1.ListOptions) (watch.Interface, error) { + if tweakListOptions != nil { + tweakListOptions(&options) + } + return client.ArgoprojV1alpha1().CronWorkflows(namespace).Watch(options) + }, + }, + &workflowv1alpha1.CronWorkflow{}, + resyncPeriod, + indexers, + ) +} + +func (f *cronWorkflowInformer) defaultInformer(client versioned.Interface, resyncPeriod time.Duration) cache.SharedIndexInformer { + return NewFilteredCronWorkflowInformer(client, f.namespace, resyncPeriod, cache.Indexers{cache.NamespaceIndex: cache.MetaNamespaceIndexFunc}, f.tweakListOptions) +} + +func (f *cronWorkflowInformer) Informer() cache.SharedIndexInformer { + return f.factory.InformerFor(&workflowv1alpha1.CronWorkflow{}, f.defaultInformer) +} + +func (f *cronWorkflowInformer) Lister() v1alpha1.CronWorkflowLister { + return v1alpha1.NewCronWorkflowLister(f.Informer().GetIndexer()) +} diff --git a/pkg/client/informers/externalversions/workflow/v1alpha1/interface.go b/pkg/client/informers/externalversions/workflow/v1alpha1/interface.go index e4129951ddaa..db28d4b2b1f4 100644 --- a/pkg/client/informers/externalversions/workflow/v1alpha1/interface.go +++ b/pkg/client/informers/externalversions/workflow/v1alpha1/interface.go @@ -8,6 +8,8 @@ import ( // Interface provides access to all the informers in this group version. type Interface interface { + // CronWorkflows returns a CronWorkflowInformer. + CronWorkflows() CronWorkflowInformer // Workflows returns a WorkflowInformer. Workflows() WorkflowInformer // WorkflowTemplates returns a WorkflowTemplateInformer. @@ -25,6 +27,11 @@ func New(f internalinterfaces.SharedInformerFactory, namespace string, tweakList return &version{factory: f, namespace: namespace, tweakListOptions: tweakListOptions} } +// CronWorkflows returns a CronWorkflowInformer. +func (v *version) CronWorkflows() CronWorkflowInformer { + return &cronWorkflowInformer{factory: v.factory, namespace: v.namespace, tweakListOptions: v.tweakListOptions} +} + // Workflows returns a WorkflowInformer. func (v *version) Workflows() WorkflowInformer { return &workflowInformer{factory: v.factory, namespace: v.namespace, tweakListOptions: v.tweakListOptions} diff --git a/pkg/client/listers/workflow/v1alpha1/cronworkflow.go b/pkg/client/listers/workflow/v1alpha1/cronworkflow.go new file mode 100644 index 000000000000..90ece7944df3 --- /dev/null +++ b/pkg/client/listers/workflow/v1alpha1/cronworkflow.go @@ -0,0 +1,78 @@ +// Code generated by lister-gen. DO NOT EDIT. + +package v1alpha1 + +import ( + v1alpha1 "github.com/argoproj/argo/pkg/apis/workflow/v1alpha1" + "k8s.io/apimachinery/pkg/api/errors" + "k8s.io/apimachinery/pkg/labels" + "k8s.io/client-go/tools/cache" +) + +// CronWorkflowLister helps list CronWorkflows. +type CronWorkflowLister interface { + // List lists all CronWorkflows in the indexer. + List(selector labels.Selector) (ret []*v1alpha1.CronWorkflow, err error) + // CronWorkflows returns an object that can list and get CronWorkflows. + CronWorkflows(namespace string) CronWorkflowNamespaceLister + CronWorkflowListerExpansion +} + +// cronWorkflowLister implements the CronWorkflowLister interface. +type cronWorkflowLister struct { + indexer cache.Indexer +} + +// NewCronWorkflowLister returns a new CronWorkflowLister. +func NewCronWorkflowLister(indexer cache.Indexer) CronWorkflowLister { + return &cronWorkflowLister{indexer: indexer} +} + +// List lists all CronWorkflows in the indexer. +func (s *cronWorkflowLister) List(selector labels.Selector) (ret []*v1alpha1.CronWorkflow, err error) { + err = cache.ListAll(s.indexer, selector, func(m interface{}) { + ret = append(ret, m.(*v1alpha1.CronWorkflow)) + }) + return ret, err +} + +// CronWorkflows returns an object that can list and get CronWorkflows. +func (s *cronWorkflowLister) CronWorkflows(namespace string) CronWorkflowNamespaceLister { + return cronWorkflowNamespaceLister{indexer: s.indexer, namespace: namespace} +} + +// CronWorkflowNamespaceLister helps list and get CronWorkflows. +type CronWorkflowNamespaceLister interface { + // List lists all CronWorkflows in the indexer for a given namespace. + List(selector labels.Selector) (ret []*v1alpha1.CronWorkflow, err error) + // Get retrieves the CronWorkflow from the indexer for a given namespace and name. + Get(name string) (*v1alpha1.CronWorkflow, error) + CronWorkflowNamespaceListerExpansion +} + +// cronWorkflowNamespaceLister implements the CronWorkflowNamespaceLister +// interface. +type cronWorkflowNamespaceLister struct { + indexer cache.Indexer + namespace string +} + +// List lists all CronWorkflows in the indexer for a given namespace. +func (s cronWorkflowNamespaceLister) List(selector labels.Selector) (ret []*v1alpha1.CronWorkflow, err error) { + err = cache.ListAllByNamespace(s.indexer, s.namespace, selector, func(m interface{}) { + ret = append(ret, m.(*v1alpha1.CronWorkflow)) + }) + return ret, err +} + +// Get retrieves the CronWorkflow from the indexer for a given namespace and name. +func (s cronWorkflowNamespaceLister) Get(name string) (*v1alpha1.CronWorkflow, error) { + obj, exists, err := s.indexer.GetByKey(s.namespace + "/" + name) + if err != nil { + return nil, err + } + if !exists { + return nil, errors.NewNotFound(v1alpha1.Resource("cronworkflow"), name) + } + return obj.(*v1alpha1.CronWorkflow), nil +} diff --git a/pkg/client/listers/workflow/v1alpha1/expansion_generated.go b/pkg/client/listers/workflow/v1alpha1/expansion_generated.go index fbb3c935cfe1..948b5db9290d 100644 --- a/pkg/client/listers/workflow/v1alpha1/expansion_generated.go +++ b/pkg/client/listers/workflow/v1alpha1/expansion_generated.go @@ -2,6 +2,14 @@ package v1alpha1 +// CronWorkflowListerExpansion allows custom methods to be added to +// CronWorkflowLister. +type CronWorkflowListerExpansion interface{} + +// CronWorkflowNamespaceListerExpansion allows custom methods to be added to +// CronWorkflowNamespaceLister. +type CronWorkflowNamespaceListerExpansion interface{} + // WorkflowListerExpansion allows custom methods to be added to // WorkflowLister. type WorkflowListerExpansion interface{} diff --git a/workflow/cron/controller.go b/workflow/cron/controller.go new file mode 100644 index 000000000000..63599b4235b9 --- /dev/null +++ b/workflow/cron/controller.go @@ -0,0 +1,65 @@ +package cron + +import ( + "context" + "github.com/argoproj/argo/pkg/client/clientset/versioned" + "github.com/argoproj/argo/pkg/client/informers/externalversions" + "github.com/argoproj/argo/pkg/client/informers/externalversions/workflow/v1alpha1" + log "github.com/sirupsen/logrus" + "k8s.io/client-go/kubernetes" + "k8s.io/client-go/tools/cache" + "time" +) + +// CronController is a controller for cron workflows +type CronController struct { + namespace string + kubeclientset kubernetes.Interface + wfclientset versioned.Interface + wfcronInformer v1alpha1.CronWorkflowInformer +} + +const ( + cronWorkflowResyncPeriod = 20 * time.Minute +) + +func NewCronController( + kubeclientset kubernetes.Interface, + wfclientset versioned.Interface, + namespace string, +) *CronController { + return &CronController{ + kubeclientset: kubeclientset, + wfclientset: wfclientset, + namespace: namespace, + } +} + +func (cc *CronController) Run(ctx context.Context) { + cc.wfcronInformer = cc.newCronWorkflowInformer() + cc.addCronWorkflowInformerHandler() + + go cc.wfcronInformer.Informer().Run(ctx.Done()) + + <-ctx.Done() +} + +func (cc *CronController) addCronWorkflowInformerHandler() { + cc.wfcronInformer.Informer().AddEventHandler(cache.ResourceEventHandlerFuncs{ + AddFunc: func(obj interface{}) { + log.Infof("SIMON Adding object: %v", obj) + }, + UpdateFunc: func(old, new interface{}) { + log.Infof("SIMON Updating object: %v", new) + }, + DeleteFunc: func(obj interface{}) { + log.Infof("SIMON Deleting object: %v", obj) + }, + }) +} + +func (cc *CronController) newCronWorkflowInformer() v1alpha1.CronWorkflowInformer { + var informerFactory externalversions.SharedInformerFactory + informerFactory = externalversions.NewSharedInformerFactory(cc.wfclientset, cronWorkflowResyncPeriod) + return informerFactory.Argoproj().V1alpha1().CronWorkflows() +} From 8e63ce2f52deba4674b4d64befc5e86dd7d5eafe Mon Sep 17 00:00:00 2001 From: Simon Behar Date: Mon, 4 Nov 2019 16:08:28 -0800 Subject: [PATCH 02/44] WIP: Working on cron infra --- Gopkg.lock | 9 + api/openapi-spec/swagger.json | 6 +- .../workflow/v1alpha1/cron_workflow_types.go | 4 +- pkg/apis/workflow/v1alpha1/generated.pb.go | 608 +++++++++--------- pkg/apis/workflow/v1alpha1/generated.proto | 4 +- .../workflow/v1alpha1/openapi_generated.go | 6 +- workflow/cron/controller.go | 7 + 7 files changed, 330 insertions(+), 314 deletions(-) diff --git a/Gopkg.lock b/Gopkg.lock index 9007e8fb2ac7..e17b6d2c66b2 100644 --- a/Gopkg.lock +++ b/Gopkg.lock @@ -579,6 +579,14 @@ revision = "00ec24a6a2d86e7074629c8384715dbb05adccd8" version = "v0.0.4" +[[projects]] + digest = "1:6bb048133650d1fb7fbff9fb3c35bd5c7e8653fc95c3bae6df94cd17d1580278" + name = "github.com/robfig/cron" + packages = ["."] + pruneopts = "" + revision = "45fbe1491cdd47d74d1bf1396286d67faee8b8b5" + version = "v3.0.0" + [[projects]] digest = "1:3962f553b77bf6c03fc07cd687a22dd3b00fe11aa14d31194f5505f5bb65cdc8" name = "github.com/sergi/go-diff" @@ -1459,6 +1467,7 @@ "github.com/pkg/errors", "github.com/prometheus/client_golang/prometheus", "github.com/prometheus/client_golang/prometheus/promhttp", + "github.com/robfig/cron", "github.com/sirupsen/logrus", "github.com/spf13/cobra", "github.com/stretchr/testify/assert", diff --git a/api/openapi-spec/swagger.json b/api/openapi-spec/swagger.json index bbb2eea7b723..d294eacdc870 100644 --- a/api/openapi-spec/swagger.json +++ b/api/openapi-spec/swagger.json @@ -258,11 +258,11 @@ "description": "CronWorkflowOptions is the schedule of when to run CronWorkflows", "type": "object", "required": [ - "cronSchedule" + "schedule" ], "properties": { - "cronSchedule": { - "description": "CronSchedule is a schedule to run the Workflow in Cron format", + "schedule": { + "description": "Schedule is a schedule to run the Workflow in Cron format", "type": "string" } } diff --git a/pkg/apis/workflow/v1alpha1/cron_workflow_types.go b/pkg/apis/workflow/v1alpha1/cron_workflow_types.go index 3385548ff0fd..a62b80e1f800 100644 --- a/pkg/apis/workflow/v1alpha1/cron_workflow_types.go +++ b/pkg/apis/workflow/v1alpha1/cron_workflow_types.go @@ -25,6 +25,6 @@ type CronWorkflowList struct { // CronWorkflowOptions is the schedule of when to run CronWorkflows type CronWorkflowOptions struct { - // CronSchedule is a schedule to run the Workflow in Cron format - CronSchedule string `json:"cronSchedule" protobuf:"bytes,1,opt,name=cronSchedule"` + // Schedule is a schedule to run the Workflow in Cron format + Schedule string `json:"schedule" protobuf:"bytes,1,opt,name=schedule"` } diff --git a/pkg/apis/workflow/v1alpha1/generated.pb.go b/pkg/apis/workflow/v1alpha1/generated.pb.go index f666c708189c..e96cc4d649d7 100644 --- a/pkg/apis/workflow/v1alpha1/generated.pb.go +++ b/pkg/apis/workflow/v1alpha1/generated.pb.go @@ -1497,303 +1497,303 @@ func init() { } var fileDescriptor_c23edafa7e7ea072 = []byte{ - // 4729 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xec, 0x5c, 0x4d, 0x8c, 0x5c, 0x57, - 0x56, 0x76, 0x75, 0x77, 0x55, 0x57, 0x9d, 0xea, 0x3f, 0xdf, 0xb6, 0xe3, 0x97, 0x8e, 0xd3, 0xe5, - 0x79, 0x51, 0x82, 0x07, 0x92, 0xea, 0xc4, 0x9e, 0x81, 0x4c, 0x86, 0x24, 0x53, 0xd5, 0x3f, 0x76, - 0xdb, 0xee, 0x1f, 0x4e, 0xb5, 0x6d, 0x86, 0x8c, 0x18, 0x5e, 0xbf, 0xba, 0x5d, 0xf5, 0xdc, 0x55, - 0xef, 0xbd, 0xbc, 0xfb, 0xaa, 0x3b, 0xad, 0x2c, 0x08, 0x08, 0x04, 0x08, 0x8d, 0x04, 0x1b, 0x18, - 0x31, 0x1b, 0xc4, 0x02, 0x36, 0x6c, 0xd8, 0x22, 0x34, 0x48, 0x88, 0x45, 0x34, 0x1b, 0xb2, 0x23, - 0x0b, 0xd4, 0x9a, 0x34, 0x1b, 0x10, 0x48, 0x48, 0x6c, 0x90, 0xbc, 0x42, 0xf7, 0xe7, 0xdd, 0xf7, - 0x53, 0xd5, 0x71, 0xbb, 0xaa, 0x6d, 0xc4, 0xcc, 0xac, 0xdc, 0xef, 0x9c, 0x73, 0xbf, 0x73, 0x7f, - 0xcf, 0x3d, 0xe7, 0xdc, 0x53, 0x86, 0xe5, 0x96, 0x13, 0xb6, 0x7b, 0xbb, 0x55, 0xdb, 0xeb, 0x2e, - 0x59, 0x41, 0xcb, 0xf3, 0x03, 0xef, 0x91, 0xf8, 0x63, 0xc9, 0xdf, 0x6f, 0x2d, 0x59, 0xbe, 0xc3, - 0x96, 0x0e, 0xbd, 0x60, 0x7f, 0xaf, 0xe3, 0x1d, 0x2e, 0x1d, 0xbc, 0x65, 0x75, 0xfc, 0xb6, 0xf5, - 0xd6, 0x52, 0x8b, 0xba, 0x34, 0xb0, 0x42, 0xda, 0xac, 0xfa, 0x81, 0x17, 0x7a, 0xe4, 0x66, 0x0c, - 0x52, 0x8d, 0x40, 0xc4, 0x1f, 0x55, 0x7f, 0xbf, 0x55, 0xe5, 0x20, 0xd5, 0x08, 0xa4, 0x1a, 0x81, - 0x2c, 0xbc, 0x91, 0xd0, 0xdc, 0xf2, 0xb8, 0x42, 0x8e, 0xb5, 0xdb, 0xdb, 0x13, 0x5f, 0xe2, 0x43, - 0xfc, 0x25, 0x75, 0x2c, 0x98, 0xfb, 0x6f, 0xb3, 0xaa, 0xe3, 0xf1, 0x2e, 0x2d, 0xd9, 0x5e, 0x40, - 0x97, 0x0e, 0xfa, 0xfa, 0xb1, 0xf0, 0xb5, 0x58, 0xa6, 0x6b, 0xd9, 0x6d, 0xc7, 0xa5, 0xc1, 0x51, - 0x3c, 0x8e, 0x2e, 0x0d, 0xad, 0x41, 0xad, 0x96, 0x4e, 0x6b, 0x15, 0xf4, 0xdc, 0xd0, 0xe9, 0xd2, - 0xbe, 0x06, 0xbf, 0xf8, 0xa4, 0x06, 0xcc, 0x6e, 0xd3, 0xae, 0x95, 0x6d, 0x67, 0xfe, 0x53, 0x0e, - 0x66, 0x6b, 0x81, 0xdd, 0x76, 0x0e, 0x68, 0x23, 0xe4, 0x8c, 0xd6, 0x11, 0xf9, 0x00, 0xc6, 0x43, - 0x2b, 0x30, 0x72, 0xd7, 0x72, 0xd7, 0xcb, 0x37, 0xbe, 0x55, 0x1d, 0x62, 0x22, 0xab, 0x3b, 0x56, - 0x10, 0xc1, 0xd5, 0x27, 0x4f, 0x8e, 0x2b, 0xe3, 0x3b, 0x56, 0x80, 0x1c, 0x95, 0x7c, 0x17, 0x26, - 0x5c, 0xcf, 0xa5, 0xc6, 0x98, 0x40, 0xaf, 0x0d, 0x85, 0xbe, 0xe9, 0xb9, 0xba, 0xb7, 0xf5, 0xe2, - 0xc9, 0x71, 0x65, 0x82, 0x53, 0x50, 0x00, 0x9b, 0xff, 0x95, 0x83, 0x52, 0x2d, 0x68, 0xf5, 0xba, - 0xd4, 0x0d, 0x19, 0x09, 0x00, 0x7c, 0x2b, 0xb0, 0xba, 0x34, 0xa4, 0x01, 0x33, 0x72, 0xd7, 0xc6, - 0xaf, 0x97, 0x6f, 0xbc, 0x37, 0x94, 0xd2, 0xed, 0x08, 0xa6, 0x4e, 0x3e, 0x3d, 0xae, 0x5c, 0x38, - 0x39, 0xae, 0x80, 0x26, 0x31, 0x4c, 0x68, 0x21, 0x2e, 0x94, 0xac, 0x20, 0x74, 0xf6, 0x2c, 0x3b, - 0x64, 0xc6, 0x98, 0x50, 0xf9, 0xee, 0x50, 0x2a, 0x6b, 0x0a, 0xa5, 0x7e, 0x51, 0x69, 0x2c, 0x45, - 0x14, 0x86, 0xb1, 0x0a, 0xf3, 0x3f, 0xc6, 0xa1, 0x18, 0x31, 0xc8, 0x35, 0x98, 0x70, 0xad, 0x2e, - 0x15, 0xab, 0x57, 0xaa, 0x4f, 0xa9, 0x86, 0x13, 0x9b, 0x56, 0x97, 0x4f, 0x90, 0xd5, 0xa5, 0x5c, - 0xc2, 0xb7, 0xc2, 0xb6, 0x58, 0x81, 0x84, 0xc4, 0xb6, 0x15, 0xb6, 0x51, 0x70, 0xc8, 0x55, 0x98, - 0xe8, 0x7a, 0x4d, 0x6a, 0x8c, 0x5f, 0xcb, 0x5d, 0xcf, 0xcb, 0x09, 0xde, 0xf0, 0x9a, 0x14, 0x05, - 0x95, 0xb7, 0xdf, 0x0b, 0xbc, 0xae, 0x31, 0x91, 0x6e, 0xbf, 0x16, 0x78, 0x5d, 0x14, 0x1c, 0xf2, - 0x87, 0x39, 0x98, 0x8b, 0xba, 0x77, 0xcf, 0xb3, 0xad, 0xd0, 0xf1, 0x5c, 0x23, 0x2f, 0x16, 0x7c, - 0x75, 0xa4, 0x89, 0x88, 0xc0, 0xea, 0x86, 0xd2, 0x3a, 0x97, 0xe5, 0x60, 0x9f, 0x62, 0x72, 0x03, - 0xa0, 0xd5, 0xf1, 0x76, 0xad, 0x0e, 0x9f, 0x03, 0xa3, 0x20, 0x7a, 0xad, 0x97, 0xf0, 0x96, 0xe6, - 0x60, 0x42, 0x8a, 0xec, 0xc3, 0xa4, 0x25, 0x4f, 0x85, 0x31, 0x29, 0xfa, 0xbd, 0x32, 0x64, 0xbf, - 0x53, 0x27, 0xab, 0x5e, 0x3e, 0x39, 0xae, 0x4c, 0x2a, 0x22, 0x46, 0x1a, 0xc8, 0xeb, 0x50, 0xf4, - 0x7c, 0xde, 0x55, 0xab, 0x63, 0x14, 0xaf, 0xe5, 0xae, 0x17, 0xeb, 0x73, 0xaa, 0x7b, 0xc5, 0x2d, - 0x45, 0x47, 0x2d, 0x61, 0xfe, 0x69, 0x1e, 0xfa, 0x46, 0x4d, 0xde, 0x82, 0xb2, 0x42, 0xbb, 0xe7, - 0xb5, 0x98, 0x58, 0xfc, 0x62, 0x7d, 0xf6, 0xe4, 0xb8, 0x52, 0xae, 0xc5, 0x64, 0x4c, 0xca, 0x90, - 0x87, 0x30, 0xc6, 0x6e, 0xaa, 0x63, 0xf8, 0xfe, 0x50, 0xa3, 0x6b, 0xdc, 0xd4, 0x1b, 0xb4, 0x70, - 0x72, 0x5c, 0x19, 0x6b, 0xdc, 0xc4, 0x31, 0x76, 0x93, 0x9b, 0x8f, 0x96, 0x13, 0x8a, 0xcd, 0x33, - 0xac, 0xf9, 0xb8, 0xe5, 0x84, 0x1a, 0x5a, 0x98, 0x8f, 0x5b, 0x4e, 0x88, 0x1c, 0x95, 0x9b, 0x8f, - 0x76, 0x18, 0xfa, 0x62, 0xf3, 0x0d, 0x6b, 0x3e, 0x6e, 0xef, 0xec, 0x6c, 0x6b, 0x78, 0xb1, 0xbb, - 0x39, 0x05, 0x05, 0x30, 0xf9, 0x98, 0xcf, 0xa4, 0xe4, 0x79, 0xc1, 0x91, 0xda, 0xb5, 0xb7, 0x47, - 0xda, 0xb5, 0x5e, 0x70, 0xa4, 0xd5, 0xa9, 0x35, 0xd1, 0x0c, 0x4c, 0x6a, 0x13, 0xa3, 0x6b, 0xee, - 0x31, 0xb1, 0x49, 0x87, 0x1e, 0xdd, 0xca, 0x5a, 0x23, 0x33, 0xba, 0x95, 0xb5, 0x06, 0x0a, 0x60, - 0xbe, 0x36, 0x81, 0x75, 0xa8, 0xf6, 0xf4, 0x70, 0x6b, 0x83, 0xd6, 0x61, 0x7a, 0x6d, 0xd0, 0x3a, - 0x44, 0x8e, 0x6a, 0xb6, 0xe0, 0x72, 0xc4, 0x41, 0xea, 0x7b, 0xcc, 0x11, 0x03, 0xa4, 0x7b, 0x64, - 0x09, 0x4a, 0xb6, 0xe7, 0xee, 0x39, 0xad, 0x0d, 0xcb, 0x57, 0x86, 0x49, 0x5b, 0xb4, 0xe5, 0x88, - 0x81, 0xb1, 0x0c, 0x79, 0x19, 0xc6, 0xf7, 0xe9, 0x91, 0xb2, 0x50, 0x65, 0x25, 0x3a, 0x7e, 0x97, - 0x1e, 0x21, 0xa7, 0x9b, 0x3f, 0xcc, 0xc1, 0xfc, 0x80, 0xc9, 0xe5, 0xcd, 0x7a, 0x41, 0x47, 0x69, - 0xd0, 0xcd, 0xee, 0xe3, 0x3d, 0xe4, 0x74, 0xf2, 0x7b, 0x39, 0x98, 0x4d, 0xcc, 0x76, 0xad, 0xa7, - 0x8c, 0xe0, 0xf0, 0xa7, 0x3b, 0x85, 0x55, 0xbf, 0xa2, 0x34, 0xce, 0x66, 0x18, 0x98, 0xd5, 0x6a, - 0xfe, 0xb3, 0xb8, 0x75, 0x53, 0x34, 0x62, 0xc1, 0x4c, 0x8f, 0xd1, 0x80, 0x9b, 0xe8, 0x06, 0xb5, - 0x03, 0x1a, 0xaa, 0x0b, 0xf8, 0xd5, 0xaa, 0xbc, 0xda, 0x79, 0x2f, 0xaa, 0xdc, 0xcb, 0xa8, 0x1e, - 0xbc, 0x55, 0x95, 0x12, 0x77, 0xe9, 0x51, 0x83, 0x76, 0x28, 0xc7, 0xa8, 0x93, 0x93, 0xe3, 0xca, - 0xcc, 0xfd, 0x14, 0x00, 0x66, 0x00, 0xb9, 0x0a, 0xdf, 0x62, 0xec, 0xd0, 0x0b, 0x9a, 0x4a, 0xc5, - 0xd8, 0x53, 0xab, 0xd8, 0x4e, 0x01, 0x60, 0x06, 0xd0, 0xfc, 0x36, 0xc0, 0xb2, 0xe7, 0x86, 0x8e, - 0xdb, 0xa3, 0x5b, 0x2e, 0x79, 0x05, 0xf2, 0x34, 0x08, 0xbc, 0x40, 0x19, 0xa4, 0x69, 0x35, 0x41, - 0xf9, 0x55, 0x4e, 0x44, 0xc9, 0x23, 0xaf, 0x41, 0x61, 0xcf, 0x72, 0x3a, 0xb4, 0x29, 0x7a, 0x53, - 0xac, 0xcf, 0x28, 0xa9, 0xc2, 0x9a, 0xa0, 0xa2, 0xe2, 0x9a, 0x3f, 0x1a, 0x83, 0xa9, 0xe5, 0xc0, - 0x73, 0x1f, 0xaa, 0x85, 0x20, 0xbf, 0x01, 0x45, 0xee, 0x3f, 0x35, 0xad, 0xd0, 0x52, 0x73, 0xf5, - 0x66, 0x62, 0x20, 0xda, 0x0d, 0x8a, 0x97, 0x90, 0x4b, 0xf3, 0xa1, 0x6d, 0xed, 0x3e, 0xa2, 0x76, - 0xb8, 0x41, 0x43, 0x2b, 0xbe, 0x08, 0x62, 0x1a, 0x6a, 0x54, 0x62, 0xc3, 0x04, 0xf3, 0xa9, 0x3d, - 0x92, 0xb3, 0x12, 0x75, 0xb7, 0xe1, 0x53, 0x3b, 0xbe, 0x2d, 0xf9, 0x17, 0x0a, 0x70, 0xc2, 0x60, - 0x52, 0x1a, 0x77, 0xa6, 0x6c, 0xe6, 0x70, 0xd6, 0x26, 0x39, 0x35, 0xf2, 0xda, 0x60, 0xf5, 0x59, - 0xa5, 0x6e, 0x52, 0x11, 0x30, 0xd2, 0x64, 0x7e, 0x9e, 0x83, 0xb9, 0x64, 0x8b, 0x7b, 0x0e, 0x0b, - 0xc9, 0x77, 0xfa, 0x26, 0xb4, 0x7a, 0xb6, 0x09, 0xe5, 0xad, 0xc5, 0x74, 0xea, 0x8b, 0x2b, 0xa2, - 0x24, 0x26, 0x73, 0x0f, 0xf2, 0x4e, 0x48, 0xbb, 0x91, 0x4b, 0x54, 0x1b, 0x79, 0x94, 0xf1, 0x7e, - 0x5a, 0xe7, 0xb8, 0x28, 0xe1, 0xcd, 0x2d, 0x98, 0x1f, 0x30, 0x17, 0xe4, 0x6d, 0x98, 0xb2, 0x03, - 0xcf, 0x6d, 0xd8, 0x6d, 0xda, 0xec, 0x75, 0x22, 0x07, 0xe9, 0x92, 0x82, 0x10, 0x3b, 0x2b, 0xe2, - 0x61, 0x4a, 0xd2, 0xfc, 0xb3, 0x02, 0x4c, 0xae, 0xd4, 0x6e, 0xed, 0x58, 0x6c, 0xff, 0x0c, 0xee, - 0xd5, 0xeb, 0x50, 0x0c, 0x69, 0xd7, 0xef, 0x58, 0x21, 0x55, 0x06, 0x4c, 0x4f, 0xca, 0x8e, 0xa2, - 0xa3, 0x96, 0x20, 0x1e, 0xf7, 0x15, 0x95, 0xb3, 0xaa, 0x96, 0xff, 0xbd, 0x21, 0x8d, 0x91, 0x42, - 0x49, 0x3a, 0x8b, 0x8a, 0x84, 0xb1, 0x0e, 0xc2, 0xa0, 0x1c, 0x29, 0x47, 0xba, 0xa7, 0xee, 0xd1, - 0x21, 0x9d, 0xfc, 0x18, 0x47, 0xde, 0x6b, 0x09, 0x02, 0x26, 0xb5, 0x90, 0xaf, 0xc1, 0x54, 0x93, - 0xfa, 0xd4, 0x6d, 0x52, 0xd7, 0x76, 0x28, 0x33, 0xf2, 0xd7, 0xc6, 0xf9, 0xbc, 0xf0, 0x79, 0x5f, - 0x49, 0xd0, 0x31, 0x25, 0x45, 0x1e, 0x41, 0xe9, 0xd0, 0x09, 0xdb, 0x62, 0x71, 0x8d, 0x82, 0xd8, - 0x34, 0xdf, 0x18, 0xaa, 0xa3, 0x1c, 0x21, 0x9e, 0x96, 0x87, 0x11, 0x26, 0xc6, 0xf0, 0xfc, 0x8a, - 0xe2, 0x1f, 0xc2, 0xa3, 0x17, 0xd7, 0x63, 0x29, 0xdd, 0x40, 0x30, 0x30, 0x96, 0x21, 0x0c, 0xa6, - 0xf8, 0x47, 0x83, 0x7e, 0xd8, 0xa3, 0xae, 0x4d, 0x85, 0xe3, 0x36, 0xac, 0x9f, 0x1f, 0x81, 0xc8, - 0x19, 0x79, 0x98, 0x80, 0xc5, 0x94, 0x12, 0xbe, 0xfb, 0x0e, 0xdb, 0xd4, 0x35, 0x4a, 0xe9, 0xdd, - 0xf7, 0xb0, 0x4d, 0x5d, 0x14, 0x1c, 0xe2, 0x01, 0xd8, 0xda, 0xfe, 0x1a, 0x30, 0x82, 0x77, 0x17, - 0x9b, 0xf1, 0xfa, 0x0c, 0x37, 0x90, 0xf1, 0x37, 0x26, 0x54, 0x98, 0xff, 0x90, 0x83, 0x32, 0x3f, - 0x1c, 0xd1, 0x86, 0x7e, 0x0d, 0x0a, 0xa1, 0x15, 0xb4, 0xd4, 0xf5, 0x55, 0x8a, 0xad, 0xf9, 0x8e, - 0xa0, 0xa2, 0xe2, 0x12, 0x0b, 0xf2, 0xa1, 0xc5, 0xf6, 0x23, 0x6b, 0xf0, 0xcb, 0x43, 0xf5, 0x51, - 0x9d, 0xca, 0xd8, 0x10, 0xf0, 0x2f, 0x86, 0x12, 0x99, 0x5c, 0x87, 0x22, 0xbf, 0x3a, 0xd6, 0x2c, - 0x26, 0xbd, 0xd1, 0x62, 0x7d, 0x8a, 0x9f, 0xc2, 0x35, 0x45, 0x43, 0xcd, 0x35, 0xbf, 0x03, 0x33, - 0xab, 0x1f, 0x51, 0xbb, 0x17, 0x7a, 0x81, 0xf4, 0x47, 0xc8, 0x1d, 0x20, 0x8c, 0x06, 0x07, 0x8e, - 0x4d, 0x6b, 0xb6, 0xed, 0xf5, 0xdc, 0x70, 0x33, 0x3e, 0xf5, 0x0b, 0x4a, 0x1b, 0x69, 0xf4, 0x49, - 0xe0, 0x80, 0x56, 0xe6, 0x5f, 0x4f, 0x40, 0x39, 0xe1, 0xd1, 0xf2, 0x55, 0x0c, 0xa8, 0xef, 0x65, - 0x6d, 0x08, 0xf7, 0x99, 0x50, 0x70, 0xb8, 0x0d, 0x09, 0xe8, 0x81, 0xc3, 0x78, 0xdc, 0x94, 0xb1, - 0x21, 0xa8, 0xe8, 0xa8, 0x25, 0x48, 0x05, 0xf2, 0x4d, 0xea, 0x87, 0x6d, 0x31, 0xc8, 0x89, 0x7a, - 0x89, 0x4f, 0xc4, 0x0a, 0x27, 0xa0, 0xa4, 0x73, 0x81, 0x3d, 0x1a, 0xda, 0x6d, 0x63, 0x42, 0x9c, - 0x3b, 0x21, 0xb0, 0xc6, 0x09, 0x28, 0xe9, 0x03, 0x7c, 0x8f, 0xfc, 0xb3, 0xf7, 0x3d, 0x0a, 0xe7, - 0xec, 0x7b, 0x10, 0x1f, 0xe6, 0x19, 0x6b, 0x6f, 0x07, 0xce, 0x81, 0x15, 0x52, 0xd1, 0x58, 0xe8, - 0x99, 0x7c, 0x1a, 0x3d, 0x57, 0x4e, 0x8e, 0x2b, 0xf3, 0x8d, 0xc6, 0xed, 0x2c, 0x0a, 0x0e, 0x82, - 0x26, 0x0d, 0xb8, 0xec, 0xb8, 0x8c, 0xda, 0xbd, 0x80, 0xae, 0xb7, 0x5c, 0x2f, 0xa0, 0xb7, 0x3d, - 0xc6, 0xe1, 0x54, 0x18, 0xf7, 0xb2, 0x5a, 0xb4, 0xcb, 0xeb, 0x83, 0x84, 0x70, 0x70, 0x5b, 0xf3, - 0x47, 0x39, 0x98, 0x4a, 0x3a, 0xf1, 0x84, 0x01, 0xb4, 0x57, 0xd6, 0x1a, 0x72, 0x67, 0xaa, 0x8b, - 0xf9, 0xfd, 0xa1, 0x63, 0x03, 0x09, 0x13, 0x3b, 0x3e, 0x31, 0x0d, 0x13, 0x6a, 0xce, 0x90, 0x25, - 0x78, 0x05, 0xf2, 0x7b, 0x5e, 0x60, 0x53, 0x75, 0xb6, 0xf4, 0x19, 0x5c, 0xe3, 0x44, 0x94, 0x3c, - 0xf3, 0xdf, 0x72, 0x90, 0xd0, 0x40, 0x7e, 0x13, 0xa6, 0xb9, 0x8e, 0xbb, 0xc1, 0x6e, 0x6a, 0x34, - 0xf5, 0xa1, 0x47, 0xa3, 0x91, 0xea, 0x97, 0x95, 0xfe, 0xe9, 0x14, 0x19, 0xd3, 0xfa, 0xc8, 0x2f, - 0x40, 0xc9, 0x6a, 0x36, 0x03, 0xca, 0x18, 0x95, 0xa6, 0xa7, 0x54, 0x9f, 0x16, 0x77, 0x65, 0x44, - 0xc4, 0x98, 0xcf, 0x8f, 0x21, 0x8f, 0x9a, 0xf8, 0xce, 0x16, 0x83, 0x4c, 0x1c, 0x43, 0xae, 0x84, - 0xd3, 0x51, 0x4b, 0x98, 0xdf, 0x9b, 0x80, 0xb4, 0x6e, 0xd2, 0x84, 0xd9, 0xfd, 0x60, 0x77, 0x79, - 0xd9, 0xb2, 0xdb, 0x43, 0xf9, 0xf4, 0xf3, 0x3c, 0x98, 0xb8, 0x9b, 0x46, 0xc0, 0x2c, 0xa4, 0xd2, - 0x72, 0x97, 0x1e, 0x85, 0xd6, 0xee, 0x30, 0x6e, 0x7d, 0xa4, 0x25, 0x89, 0x80, 0x59, 0x48, 0xf2, - 0x75, 0x28, 0xef, 0x07, 0xbb, 0xd1, 0x21, 0x57, 0xd3, 0x31, 0xaf, 0xa6, 0xa3, 0x7c, 0x37, 0x66, - 0x61, 0x52, 0x8e, 0x4f, 0xe1, 0x7e, 0xb0, 0x8b, 0xd4, 0xea, 0x44, 0x09, 0x23, 0x3d, 0x85, 0x77, - 0x15, 0x1d, 0xb5, 0x04, 0xf1, 0x81, 0xec, 0x47, 0xb3, 0xa7, 0x03, 0x43, 0x65, 0x8b, 0xae, 0x0f, - 0x1a, 0x8d, 0x16, 0x4a, 0x0e, 0xe8, 0x05, 0x6e, 0x9b, 0xef, 0xf6, 0xe1, 0xe0, 0x00, 0x6c, 0xf2, - 0x6d, 0xb8, 0xb2, 0x1f, 0xec, 0x2a, 0x43, 0xbe, 0x1d, 0x38, 0xae, 0xed, 0xf8, 0xa9, 0x4c, 0x51, - 0x45, 0x75, 0xf7, 0xca, 0xdd, 0xc1, 0x62, 0x78, 0x5a, 0x7b, 0xf3, 0x0d, 0x98, 0x4a, 0x66, 0x1a, - 0x9e, 0x10, 0x9d, 0x9a, 0xff, 0x99, 0x83, 0xc2, 0xba, 0xeb, 0xf7, 0x7e, 0x4a, 0x92, 0x96, 0x7f, - 0x31, 0x01, 0x13, 0xdc, 0xf5, 0x22, 0xd7, 0x61, 0x22, 0x3c, 0xf2, 0xe5, 0xdd, 0x3a, 0xae, 0xfd, - 0xf1, 0x89, 0x9d, 0x23, 0x9f, 0x3e, 0x56, 0xff, 0xa2, 0x90, 0x20, 0xef, 0x41, 0xc1, 0xed, 0x75, - 0x1f, 0x58, 0x1d, 0x65, 0x94, 0x5e, 0x8b, 0x5c, 0x8b, 0x4d, 0x41, 0x7d, 0x7c, 0x5c, 0xb9, 0x44, - 0x5d, 0xdb, 0x6b, 0x3a, 0x6e, 0x6b, 0xe9, 0x11, 0xf3, 0xdc, 0xea, 0x66, 0xaf, 0xbb, 0x4b, 0x03, - 0x54, 0xad, 0xc8, 0x57, 0x61, 0x72, 0xd7, 0xf3, 0x3a, 0x1c, 0x40, 0x9a, 0x2c, 0x1d, 0x1e, 0xd5, - 0x25, 0x19, 0x23, 0x3e, 0xf7, 0x62, 0x58, 0x18, 0x70, 0xc9, 0x89, 0xb4, 0x17, 0xd3, 0x10, 0x54, - 0x54, 0x5c, 0xd2, 0x85, 0x42, 0xd7, 0xf2, 0xb9, 0x5c, 0x5e, 0x4c, 0xd9, 0xea, 0xd0, 0xfe, 0x69, - 0x75, 0x43, 0xe0, 0xac, 0xba, 0x61, 0x70, 0x14, 0xab, 0x93, 0x44, 0x54, 0x4a, 0x88, 0x03, 0x93, - 0x1d, 0x87, 0x85, 0x5c, 0x5f, 0x61, 0x84, 0x5d, 0xc1, 0xf5, 0x3d, 0xb0, 0x3a, 0x3d, 0x1a, 0xcf, - 0xc0, 0x3d, 0x09, 0x8b, 0x11, 0xfe, 0xc2, 0x11, 0x94, 0x13, 0x3d, 0x22, 0x73, 0x32, 0x23, 0x23, - 0x36, 0xaf, 0x48, 0xc2, 0x90, 0x1d, 0xc8, 0x1f, 0x70, 0x0c, 0x65, 0x6c, 0x46, 0xec, 0x09, 0x4a, - 0xb0, 0x77, 0xc6, 0xde, 0xce, 0xbd, 0x53, 0xfc, 0xfe, 0x9f, 0x57, 0x2e, 0x7c, 0xf2, 0x2f, 0xd7, - 0x2e, 0x98, 0xff, 0x38, 0x0e, 0x25, 0x2d, 0xf2, 0xff, 0x7b, 0xa7, 0x04, 0x99, 0x9d, 0x72, 0x67, - 0xb4, 0xf9, 0x3a, 0xd3, 0x76, 0xa9, 0xa5, 0xb7, 0xcb, 0x54, 0xfd, 0xe7, 0x12, 0x4b, 0xfd, 0xf8, - 0xb8, 0x62, 0xa4, 0x27, 0x01, 0xad, 0xc3, 0x0d, 0xca, 0x98, 0xd5, 0xa2, 0xf1, 0x36, 0xf8, 0xc6, - 0x93, 0xb6, 0xc1, 0xa5, 0xe4, 0x36, 0x28, 0x0d, 0x5e, 0xc6, 0x4f, 0xc6, 0xa1, 0xb8, 0x11, 0xa5, - 0x01, 0x7e, 0x37, 0x07, 0x65, 0xcb, 0x75, 0xbd, 0xd0, 0x92, 0x39, 0x0f, 0x69, 0xde, 0x36, 0x87, - 0x9a, 0x8e, 0x08, 0xb4, 0x5a, 0x8b, 0x01, 0xe5, 0x94, 0xe8, 0x9b, 0x29, 0xc1, 0xc1, 0xa4, 0x5e, - 0xf2, 0x21, 0x14, 0x3a, 0xd6, 0x2e, 0xed, 0x44, 0xd6, 0x6e, 0x7d, 0xb4, 0x1e, 0xdc, 0x13, 0x58, - 0x99, 0xf5, 0x90, 0x44, 0x54, 0x8a, 0x16, 0xde, 0x83, 0xb9, 0x6c, 0x47, 0x9f, 0x66, 0x46, 0xf9, - 0x62, 0x24, 0xd4, 0x3c, 0x4d, 0x53, 0xf3, 0xef, 0x4a, 0x00, 0x9b, 0x5e, 0x93, 0x36, 0x42, 0x2b, - 0xec, 0x31, 0xb2, 0x00, 0x63, 0x4e, 0x53, 0x5d, 0x45, 0xa0, 0x7a, 0x3b, 0xb6, 0xbe, 0x82, 0x63, - 0x4e, 0x53, 0xa7, 0x38, 0xc6, 0x4e, 0x4d, 0x71, 0x7c, 0x1d, 0xca, 0x4d, 0x87, 0xf9, 0x1d, 0xeb, - 0x68, 0x73, 0x80, 0x2f, 0xb0, 0x12, 0xb3, 0x30, 0x29, 0x47, 0x5e, 0x57, 0xe7, 0x57, 0x1e, 0x14, - 0x23, 0x73, 0x7e, 0x8b, 0xbc, 0x7b, 0x89, 0x33, 0xfc, 0x36, 0x4c, 0x45, 0x29, 0x04, 0xa1, 0x25, - 0x9f, 0xce, 0xd7, 0xec, 0x24, 0x78, 0x98, 0x92, 0xcc, 0xa6, 0x38, 0x0a, 0xcf, 0x25, 0xc5, 0xb1, - 0x02, 0x73, 0x2c, 0xf4, 0x02, 0xda, 0x8c, 0x24, 0xd6, 0x57, 0x0c, 0x92, 0x1a, 0xe8, 0x5c, 0x23, - 0xc3, 0xc7, 0xbe, 0x16, 0x64, 0x1b, 0x2e, 0x45, 0x9d, 0x48, 0x0e, 0xd0, 0x98, 0x17, 0x48, 0x57, - 0x15, 0xd2, 0xa5, 0x87, 0x03, 0x64, 0x70, 0x60, 0x4b, 0xf2, 0x26, 0xe4, 0xfd, 0xb6, 0xc5, 0xa8, - 0x4a, 0x6a, 0x44, 0xb1, 0x6b, 0x7e, 0x9b, 0x13, 0x1f, 0x1f, 0x57, 0x4a, 0x7c, 0xda, 0xc5, 0x07, - 0x4a, 0x41, 0x72, 0x03, 0x60, 0xd7, 0xeb, 0xb9, 0x4d, 0x2b, 0x38, 0x5a, 0x5f, 0x11, 0x91, 0x4c, - 0xe2, 0xbd, 0xac, 0xae, 0x39, 0x98, 0x90, 0xe2, 0x06, 0xb3, 0x2b, 0x4d, 0x87, 0xca, 0x4d, 0x68, - 0x83, 0xa9, 0x2d, 0x8a, 0xe2, 0x93, 0x0f, 0xa0, 0xc4, 0x42, 0x2b, 0x08, 0x69, 0xb3, 0x16, 0xaa, - 0x04, 0xc5, 0xcf, 0x9f, 0x2d, 0xcb, 0xb8, 0xe3, 0x74, 0x69, 0xec, 0x55, 0x34, 0x22, 0x10, 0x8c, - 0xf1, 0xc8, 0xaf, 0x03, 0xec, 0x39, 0xae, 0xc3, 0xda, 0x02, 0xbd, 0xfc, 0xd4, 0xe8, 0x7a, 0x9c, - 0x6b, 0x1a, 0x05, 0x13, 0x88, 0x3c, 0xe6, 0xf1, 0xbd, 0xe6, 0xfa, 0xb6, 0x31, 0x25, 0x46, 0xa9, - 0x63, 0x9e, 0x6d, 0x4e, 0x44, 0xc9, 0x23, 0xd7, 0xa1, 0xd8, 0xb4, 0x68, 0xd7, 0x73, 0x69, 0xd3, - 0x98, 0x8e, 0xf3, 0x0e, 0x2b, 0x8a, 0x86, 0x9a, 0x4b, 0xbe, 0x0b, 0x05, 0x47, 0xb8, 0x7c, 0xc6, - 0x8c, 0xe8, 0xea, 0x37, 0x87, 0xbb, 0x14, 0x04, 0x44, 0x1d, 0xb8, 0xc5, 0x91, 0x7f, 0xa3, 0x82, - 0x25, 0x36, 0x4c, 0x7a, 0xbd, 0x50, 0x68, 0x98, 0x15, 0x1a, 0x86, 0xcb, 0xb3, 0x6c, 0x49, 0x0c, - 0xf9, 0x7e, 0xa9, 0x3e, 0x30, 0x42, 0xe6, 0xe3, 0xb5, 0xdb, 0x4e, 0xa7, 0x19, 0x50, 0xd7, 0x98, - 0x13, 0x21, 0x95, 0x18, 0xef, 0xb2, 0xa2, 0xa1, 0xe6, 0x92, 0x5f, 0x82, 0x69, 0xaf, 0x17, 0x8a, - 0x7d, 0xc3, 0xb7, 0x1d, 0x33, 0x2e, 0x0a, 0xf1, 0x8b, 0x3c, 0x6c, 0xdb, 0x4a, 0x32, 0x30, 0x2d, - 0x67, 0xce, 0xc0, 0x54, 0xf2, 0xd1, 0xdf, 0xfc, 0xe3, 0x31, 0x88, 0xfa, 0xf1, 0xd3, 0xe0, 0x2d, - 0x13, 0x13, 0x0a, 0x01, 0x65, 0xbd, 0x4e, 0xa8, 0x8c, 0xad, 0x58, 0x6b, 0x14, 0x14, 0x54, 0x1c, - 0xf3, 0x10, 0xa6, 0x79, 0x6f, 0x3b, 0x1d, 0xda, 0x69, 0x84, 0xd4, 0x67, 0x64, 0x0f, 0xf2, 0x8c, - 0xff, 0xa1, 0xe6, 0x64, 0xc4, 0xe7, 0x8b, 0x90, 0xfa, 0xf1, 0x7e, 0x17, 0x0a, 0x50, 0xc2, 0x9b, - 0x7f, 0x32, 0x06, 0x25, 0x3d, 0x4f, 0x67, 0xc8, 0x90, 0xbf, 0x0a, 0x93, 0x4d, 0xba, 0x67, 0xf1, - 0xd1, 0xa8, 0x17, 0x3e, 0xbe, 0xad, 0x56, 0x24, 0x09, 0x23, 0x1e, 0xa9, 0x44, 0x97, 0x99, 0x1c, - 0xb2, 0xc8, 0x5a, 0x25, 0x7d, 0x45, 0xb2, 0x0f, 0x25, 0xf1, 0xc7, 0x5a, 0x54, 0x8d, 0x30, 0xec, - 0xba, 0x3f, 0x88, 0x50, 0x64, 0x2e, 0x40, 0x7f, 0x62, 0x8c, 0x9f, 0xa9, 0x22, 0xc8, 0x9f, 0xa5, - 0x8a, 0xc0, 0x5c, 0x03, 0x6e, 0x18, 0x6e, 0x2d, 0x93, 0x77, 0xa1, 0xc8, 0xd4, 0xd6, 0x55, 0xf3, - 0xf2, 0x95, 0x28, 0x0a, 0x8e, 0xb6, 0xf4, 0xe3, 0xe3, 0xca, 0xb4, 0x10, 0x8e, 0x08, 0xa8, 0x9b, - 0x98, 0x4b, 0x50, 0x4e, 0xbc, 0xba, 0xf2, 0x19, 0xd6, 0x4f, 0x34, 0x89, 0x19, 0x5e, 0xb1, 0x42, - 0x0b, 0x05, 0xc7, 0x7c, 0x3c, 0x06, 0x73, 0x48, 0x99, 0xd7, 0x0b, 0x6c, 0x9a, 0xcc, 0xcc, 0x5a, - 0xb6, 0x28, 0xc5, 0xc8, 0x64, 0x66, 0x6b, 0x82, 0x8a, 0x8a, 0x4b, 0xbe, 0x09, 0xd3, 0x5d, 0x1a, - 0xb4, 0xf4, 0x61, 0x53, 0x8b, 0xa4, 0xf3, 0x2b, 0x1b, 0x49, 0x26, 0xa6, 0x65, 0x79, 0xbc, 0xdf, - 0xb5, 0x5c, 0x67, 0x8f, 0xb2, 0x30, 0x9b, 0x32, 0xd9, 0x50, 0x74, 0xd4, 0x12, 0xe4, 0x16, 0x5c, - 0x64, 0x34, 0xdc, 0x3a, 0x74, 0x69, 0x80, 0x74, 0x8f, 0x06, 0x22, 0x93, 0x3e, 0x21, 0x4c, 0xe6, - 0x8b, 0xaa, 0xd9, 0xc5, 0x46, 0x56, 0x00, 0xfb, 0xdb, 0x88, 0xdb, 0xb7, 0x67, 0xdb, 0x94, 0xb1, - 0x65, 0xcf, 0x6d, 0x3a, 0xba, 0xe0, 0x24, 0x79, 0xfb, 0x66, 0xf8, 0xd8, 0xd7, 0x82, 0xa3, 0xec, - 0x59, 0x4e, 0xa7, 0x17, 0xd0, 0x18, 0xa5, 0x90, 0x46, 0x59, 0xcb, 0xf0, 0xb1, 0xaf, 0x85, 0xf9, - 0x26, 0x4c, 0x23, 0x0d, 0x83, 0x23, 0x3d, 0x27, 0x15, 0xc8, 0x77, 0x9c, 0xae, 0x23, 0x93, 0x3f, - 0x79, 0xb9, 0x91, 0xef, 0x71, 0x02, 0x4a, 0xba, 0xf9, 0xfd, 0x1c, 0x40, 0x5c, 0x4c, 0x41, 0xf6, - 0xa1, 0xc8, 0x6e, 0xd6, 0x7b, 0xf6, 0xbe, 0xce, 0x17, 0x0d, 0xf9, 0xac, 0xa0, 0x40, 0xe2, 0x25, - 0x88, 0x28, 0xa8, 0x15, 0x3c, 0xe9, 0xa9, 0xfd, 0x6f, 0xc6, 0x41, 0xb7, 0xe2, 0x8b, 0x4b, 0xdd, - 0xa6, 0xef, 0x39, 0x6e, 0x94, 0xdd, 0xd7, 0xc8, 0xab, 0x8a, 0x8e, 0x5a, 0x82, 0xef, 0xb7, 0x5d, - 0x39, 0x88, 0xb1, 0xf4, 0x7e, 0x53, 0x7d, 0x50, 0x5c, 0x2e, 0x17, 0xd0, 0x16, 0x9f, 0xeb, 0xf1, - 0xb4, 0x1c, 0x0a, 0x2a, 0x2a, 0x2e, 0xbf, 0x66, 0xa2, 0x84, 0xa9, 0xda, 0x23, 0xe2, 0x9a, 0x89, - 0x72, 0xab, 0xa8, 0xb9, 0xa4, 0x0d, 0xb3, 0x96, 0x58, 0xda, 0x38, 0x09, 0xfc, 0x54, 0xf9, 0xec, - 0xf8, 0x21, 0x3f, 0x8d, 0x82, 0x59, 0x58, 0xae, 0x89, 0xc5, 0xcd, 0x9f, 0x3e, 0xad, 0xad, 0x35, - 0x35, 0xd2, 0x28, 0x98, 0x85, 0xe5, 0x1e, 0x56, 0xe0, 0x75, 0x68, 0x0d, 0x37, 0x95, 0x27, 0xa7, - 0x3d, 0x2c, 0x94, 0x64, 0x8c, 0xf8, 0xe6, 0xef, 0xe7, 0x60, 0xa6, 0x61, 0x07, 0x8e, 0x1f, 0xea, - 0xb3, 0xbf, 0x29, 0x2a, 0x30, 0x42, 0x8b, 0xfb, 0x3e, 0x6a, 0x4f, 0xbd, 0x7c, 0x4a, 0x3e, 0x4d, - 0x0a, 0xa5, 0x0a, 0x34, 0x24, 0x09, 0x63, 0x08, 0x11, 0xf5, 0x0a, 0xeb, 0x92, 0x5d, 0xdb, 0x86, - 0xa0, 0xa2, 0xe2, 0x9a, 0x3f, 0xc8, 0x41, 0x51, 0xbf, 0x5e, 0xbd, 0x02, 0x79, 0xf1, 0x28, 0xa2, - 0xf6, 0x8e, 0xbe, 0x4c, 0x96, 0x39, 0x11, 0x25, 0x8f, 0x0b, 0x09, 0x77, 0x4e, 0x01, 0x27, 0x6e, - 0x1c, 0x2b, 0x08, 0x51, 0xf2, 0xf8, 0xa6, 0xa5, 0x6e, 0x53, 0xed, 0x17, 0xbd, 0x69, 0x57, 0xdd, - 0x26, 0x72, 0xba, 0xa8, 0x28, 0xf0, 0x82, 0xae, 0x15, 0x66, 0x63, 0xf2, 0x35, 0x41, 0x45, 0xc5, - 0x35, 0x2f, 0xc2, 0x6c, 0xa3, 0xc7, 0x7c, 0xea, 0x6a, 0x17, 0xdc, 0x9c, 0x86, 0x72, 0xa2, 0x76, - 0xd1, 0xfc, 0xef, 0x2b, 0xa0, 0x5f, 0x6d, 0x7f, 0xf6, 0xf6, 0x3b, 0x54, 0x60, 0x64, 0x6b, 0x1f, - 0x37, 0x3f, 0xba, 0x8f, 0xab, 0x57, 0x32, 0xe3, 0xe7, 0xb6, 0x62, 0x3f, 0xb7, 0x70, 0x0e, 0x7e, - 0x6e, 0x5c, 0x37, 0x91, 0xf5, 0x75, 0xff, 0x20, 0x07, 0x53, 0x2e, 0x8f, 0xa3, 0xd5, 0x09, 0x36, - 0x26, 0x85, 0x6f, 0xb5, 0x35, 0xd2, 0x24, 0x56, 0x37, 0x13, 0x88, 0x32, 0x85, 0xa0, 0xe3, 0xdc, - 0x24, 0x0b, 0x53, 0xaa, 0xc9, 0x1a, 0x14, 0xad, 0x3d, 0x1e, 0x9c, 0x84, 0x47, 0xea, 0xf9, 0xf9, - 0xea, 0xa0, 0x33, 0x5d, 0x53, 0x32, 0xd2, 0x5c, 0x46, 0x5f, 0xa8, 0xdb, 0xf2, 0xfb, 0x46, 0x97, - 0x7d, 0x94, 0x46, 0xb8, 0x6f, 0xa2, 0x5c, 0x48, 0xe2, 0xca, 0x57, 0x94, 0x44, 0x15, 0x88, 0x09, - 0x05, 0x19, 0xfe, 0x88, 0xd8, 0xaf, 0x28, 0x3d, 0x59, 0x19, 0x1a, 0xa1, 0xe2, 0x90, 0x56, 0xe4, - 0xb8, 0x96, 0xc5, 0xe4, 0xd6, 0x87, 0x76, 0xe6, 0xb5, 0x2f, 0x3c, 0xd8, 0x73, 0x25, 0x77, 0x92, - 0x66, 0x71, 0xea, 0x2c, 0x66, 0x71, 0xfa, 0x54, 0x93, 0xd8, 0x82, 0x02, 0x13, 0x46, 0x57, 0xc4, - 0x7c, 0xe5, 0x1b, 0xcb, 0xc3, 0xdd, 0xd9, 0x29, 0xbb, 0x2d, 0x67, 0x47, 0xd2, 0x50, 0xc1, 0x13, - 0x0f, 0x8a, 0x81, 0xf2, 0xed, 0x54, 0xd8, 0x38, 0x5c, 0xd6, 0x39, 0xeb, 0x20, 0xca, 0xfd, 0x11, - 0x51, 0x51, 0x2b, 0x21, 0x1f, 0xc0, 0x78, 0xd3, 0x6a, 0xa9, 0x00, 0xf2, 0x5b, 0x43, 0x3f, 0xd4, - 0x47, 0x6a, 0x44, 0xd1, 0xe0, 0x4a, 0xed, 0x16, 0x72, 0x54, 0xb2, 0x0f, 0x93, 0x4c, 0xda, 0x60, - 0x63, 0x6e, 0x84, 0x5a, 0xbc, 0x8c, 0x1d, 0x97, 0x21, 0x85, 0x22, 0x62, 0xa4, 0x81, 0xac, 0xc2, - 0xe4, 0x81, 0xd7, 0xe9, 0x75, 0x55, 0xe4, 0x59, 0xbe, 0xb1, 0x30, 0x68, 0xb5, 0x1f, 0x08, 0x91, - 0xd8, 0x08, 0xc8, 0x6f, 0x86, 0x51, 0x5b, 0xf2, 0xdb, 0x39, 0x98, 0xe1, 0x47, 0x47, 0xef, 0x03, - 0x66, 0x90, 0x11, 0x76, 0xea, 0x7d, 0x46, 0x83, 0x78, 0x87, 0xbd, 0xa0, 0xd4, 0xce, 0xac, 0xa7, - 0x34, 0x60, 0x46, 0x23, 0xf1, 0xa1, 0xc8, 0x9c, 0x26, 0xb5, 0xad, 0x80, 0x19, 0xf3, 0xe7, 0xa6, - 0x3d, 0x76, 0x15, 0x15, 0x36, 0x6a, 0x2d, 0xe4, 0x77, 0x44, 0xfd, 0xa4, 0xaa, 0x20, 0x56, 0x55, - 0xdd, 0x97, 0xce, 0xb3, 0xaa, 0x7b, 0x5e, 0x16, 0x4f, 0xa6, 0x34, 0x60, 0x56, 0x25, 0xd9, 0x82, - 0xcb, 0x3c, 0x52, 0x39, 0xa0, 0x2b, 0xd4, 0x6a, 0x76, 0x1c, 0x97, 0x36, 0xa8, 0xed, 0xb9, 0x4d, - 0x66, 0x5c, 0x16, 0xef, 0x02, 0x2f, 0x9e, 0x1c, 0x57, 0x2e, 0xd7, 0x06, 0x09, 0xe0, 0xe0, 0x76, - 0xe4, 0x63, 0x98, 0x0e, 0x92, 0x0e, 0xbb, 0xf1, 0xc2, 0x08, 0x8f, 0xd2, 0x29, 0xd7, 0x5f, 0x66, - 0x36, 0x52, 0x24, 0x4c, 0xeb, 0x22, 0x6f, 0x41, 0xd9, 0x57, 0x96, 0xca, 0x61, 0x5d, 0xe3, 0x8a, - 0x18, 0x83, 0xb8, 0x51, 0xb7, 0x63, 0x32, 0x26, 0x65, 0xc8, 0x7d, 0x28, 0x87, 0x5e, 0x87, 0x06, - 0x2a, 0x81, 0x6e, 0x88, 0xc5, 0x5f, 0x1c, 0xb4, 0x93, 0x77, 0xb4, 0x58, 0x9c, 0x9e, 0x8d, 0x69, - 0x0c, 0x93, 0x38, 0x3c, 0xee, 0x63, 0xaa, 0xe4, 0x2d, 0x10, 0x41, 0xee, 0x8b, 0xe9, 0xb8, 0xaf, - 0x91, 0x64, 0x62, 0x5a, 0x96, 0x47, 0x72, 0x7e, 0xe0, 0x78, 0x81, 0x13, 0x1e, 0x2d, 0x77, 0x2c, - 0xc6, 0x04, 0xc0, 0x82, 0x00, 0xd0, 0x91, 0xdc, 0x76, 0x56, 0x00, 0xfb, 0xdb, 0x70, 0x2f, 0x3f, - 0x22, 0x1a, 0x2f, 0x89, 0x78, 0x49, 0x98, 0xa5, 0xa8, 0x2d, 0x6a, 0xee, 0x29, 0x25, 0x3a, 0x57, - 0x87, 0x29, 0xd1, 0x21, 0x4d, 0xb8, 0x6a, 0xf5, 0x42, 0xaf, 0xcb, 0x09, 0xe9, 0x26, 0x3b, 0xde, - 0x3e, 0x75, 0x8d, 0x6b, 0xe2, 0xae, 0xba, 0x76, 0x72, 0x5c, 0xb9, 0x5a, 0xfb, 0x12, 0x39, 0xfc, - 0x52, 0x14, 0xd2, 0x85, 0x22, 0x55, 0x65, 0x46, 0xc6, 0x57, 0x46, 0xb8, 0x24, 0xd2, 0xb5, 0x4a, - 0x72, 0x82, 0x22, 0x1a, 0x6a, 0x15, 0x64, 0x07, 0xca, 0x6d, 0x8f, 0x85, 0xb5, 0x8e, 0x63, 0x31, - 0xca, 0x8c, 0x97, 0xc5, 0x3e, 0x19, 0x78, 0xbf, 0xdd, 0x8e, 0xc4, 0xe2, 0x6d, 0x72, 0x3b, 0x6e, - 0x89, 0x49, 0x18, 0x42, 0x45, 0xc8, 0xd3, 0x13, 0xab, 0xe6, 0xb9, 0x21, 0xfd, 0x28, 0x34, 0x16, - 0xc5, 0x58, 0x5e, 0x1b, 0x84, 0xbc, 0xed, 0x35, 0x1b, 0x69, 0x69, 0x79, 0xca, 0x33, 0x44, 0xcc, - 0x62, 0x92, 0xb7, 0x61, 0xca, 0xf7, 0x9a, 0x0d, 0x9f, 0xda, 0xdb, 0x56, 0x68, 0xb7, 0x8d, 0x4a, - 0x3a, 0xfd, 0xbf, 0x9d, 0xe0, 0x61, 0x4a, 0x72, 0xe1, 0x7d, 0xb8, 0xd8, 0xe7, 0x4f, 0x3d, 0xd5, - 0x5b, 0xc9, 0x5f, 0xe6, 0x20, 0xe9, 0xce, 0x9e, 0xbb, 0xdf, 0x7f, 0x0b, 0x2e, 0xaa, 0x5f, 0x65, - 0xf1, 0xcb, 0xb6, 0xd3, 0x0b, 0xa3, 0xd8, 0x37, 0x91, 0xf5, 0xc0, 0xac, 0x00, 0xf6, 0xb7, 0x31, - 0xff, 0x2a, 0x07, 0xd3, 0x29, 0xf3, 0x7d, 0xee, 0x71, 0xde, 0x1a, 0x90, 0xae, 0x13, 0x04, 0x5e, - 0x20, 0xef, 0xc0, 0x0d, 0xbe, 0x97, 0x99, 0xaa, 0xd3, 0x16, 0x65, 0x16, 0x1b, 0x7d, 0x5c, 0x1c, - 0xd0, 0xc2, 0xfc, 0xdb, 0x1c, 0xc4, 0x69, 0x35, 0x5d, 0x5b, 0x94, 0x3b, 0xb5, 0xb6, 0xe8, 0x75, - 0x28, 0x3e, 0x62, 0x9e, 0xbb, 0x1d, 0x57, 0x20, 0xe9, 0x09, 0xbd, 0xd3, 0xd8, 0xda, 0x14, 0x92, - 0x5a, 0x42, 0x48, 0x7f, 0xb8, 0xe6, 0x74, 0xc2, 0xfe, 0x3a, 0x9d, 0x3b, 0xbf, 0x22, 0xe9, 0xa8, - 0x25, 0xc8, 0x12, 0x94, 0x74, 0x26, 0x57, 0x05, 0x88, 0x7a, 0x12, 0x74, 0x1a, 0x13, 0x63, 0x19, - 0xf3, 0x87, 0x63, 0x50, 0xfc, 0x49, 0x2b, 0x3a, 0xdf, 0x87, 0x02, 0x13, 0x4f, 0x81, 0x2a, 0xf0, - 0x5c, 0x1e, 0x31, 0x39, 0xcc, 0xa1, 0x92, 0x6f, 0xdf, 0xfc, 0x1b, 0x95, 0x0a, 0xf3, 0xb3, 0x1c, - 0x4c, 0x3d, 0xc7, 0x42, 0xf3, 0xdd, 0x74, 0xa1, 0xf9, 0xbb, 0x23, 0x0d, 0xed, 0x94, 0x22, 0xf3, - 0xbf, 0x9f, 0x8f, 0x87, 0xc4, 0xa7, 0x95, 0xb8, 0x50, 0x8a, 0x0e, 0x78, 0x94, 0x70, 0x7f, 0x77, - 0xa4, 0xa0, 0x30, 0xde, 0x94, 0x11, 0x85, 0x61, 0xac, 0x82, 0xdc, 0x00, 0xa0, 0xdc, 0xb2, 0xc9, - 0x6c, 0xdc, 0x58, 0x3a, 0x1f, 0xbd, 0xaa, 0x39, 0x98, 0x90, 0x7a, 0xfe, 0x09, 0x87, 0xc1, 0x57, - 0xf4, 0xc4, 0x33, 0xb9, 0xa2, 0xaf, 0x9e, 0xfb, 0x15, 0xfd, 0xf2, 0xb3, 0xbf, 0xa2, 0x13, 0x01, - 0x49, 0x7e, 0x84, 0x80, 0xe4, 0x63, 0xb8, 0x24, 0xff, 0x5c, 0xee, 0x58, 0x4e, 0x57, 0xef, 0x17, - 0x55, 0x24, 0xf4, 0xd5, 0x81, 0x17, 0x33, 0x0d, 0x98, 0xc3, 0x42, 0xea, 0x86, 0x0f, 0xe2, 0x96, - 0xf1, 0x0b, 0xf3, 0x83, 0x01, 0x70, 0x38, 0x50, 0x49, 0xd6, 0x83, 0x9d, 0x3c, 0x83, 0x07, 0xfb, - 0x83, 0x1c, 0x5c, 0xb6, 0x06, 0xfd, 0x54, 0x4c, 0xe5, 0x31, 0xee, 0x8c, 0x14, 0x4f, 0xa4, 0x10, - 0x55, 0x3c, 0x30, 0x88, 0x85, 0x83, 0xfb, 0x40, 0x5e, 0x8d, 0x43, 0xd2, 0x92, 0xd8, 0x54, 0x83, - 0x83, 0xc9, 0xef, 0x65, 0x53, 0x41, 0x20, 0x66, 0xbb, 0x31, 0xb2, 0xc1, 0x3e, 0x87, 0x74, 0x50, - 0x79, 0x84, 0x74, 0x50, 0x26, 0xbc, 0x98, 0x3a, 0xa7, 0xf0, 0xc2, 0x85, 0x39, 0xa7, 0x6b, 0xb5, - 0xe8, 0x76, 0xaf, 0xd3, 0x91, 0x39, 0x6d, 0x66, 0x4c, 0x0b, 0xec, 0x81, 0x95, 0x9d, 0x3c, 0xdc, - 0xeb, 0xc8, 0xfb, 0x51, 0x3f, 0xf3, 0xc4, 0xcf, 0x30, 0xeb, 0x19, 0x24, 0xec, 0xc3, 0xe6, 0xdb, - 0x92, 0xbb, 0xad, 0x9b, 0x34, 0xe4, 0xb3, 0x2d, 0x32, 0x25, 0xea, 0x27, 0xb1, 0xb7, 0x63, 0x32, - 0x26, 0x65, 0xc8, 0x5d, 0x28, 0x35, 0x5d, 0xb6, 0xed, 0x75, 0x1c, 0xfb, 0x48, 0xa4, 0x3b, 0x4a, - 0xf5, 0x37, 0xb8, 0x6d, 0x5b, 0xd9, 0x6c, 0x48, 0xe2, 0xe3, 0xe3, 0xca, 0xd5, 0xfe, 0xdf, 0xfc, - 0x57, 0x35, 0x1f, 0xe3, 0xf6, 0x64, 0x43, 0x80, 0xa9, 0x32, 0x67, 0x99, 0xda, 0xb8, 0x76, 0x8a, - 0x87, 0xbc, 0xb2, 0x19, 0x55, 0x65, 0x4f, 0x2b, 0x75, 0xaa, 0x78, 0x39, 0x46, 0x20, 0xaf, 0x41, - 0xc1, 0x73, 0x57, 0x3f, 0x72, 0x42, 0xe3, 0x62, 0x3a, 0xa7, 0xbd, 0x25, 0xa8, 0xa8, 0xb8, 0xe4, - 0x3e, 0x5c, 0x09, 0xc3, 0x8e, 0x0a, 0x6d, 0x6b, 0x7b, 0x21, 0x0d, 0xa2, 0x52, 0x06, 0x51, 0x8e, - 0x92, 0xaf, 0xbf, 0x74, 0x72, 0x5c, 0xb9, 0xb2, 0xb3, 0x73, 0x6f, 0x90, 0x08, 0x9e, 0xd6, 0xf6, - 0xf4, 0xa0, 0x7b, 0x7e, 0xc8, 0xa0, 0x3b, 0x19, 0xe7, 0x5d, 0xfa, 0xd2, 0x38, 0xaf, 0x2f, 0x2e, - 0xbd, 0xfc, 0x14, 0x71, 0xe9, 0x07, 0xa2, 0x60, 0xe3, 0xd6, 0xb2, 0x8a, 0xe9, 0xdf, 0x19, 0x2e, - 0x95, 0xc8, 0x11, 0xe4, 0xbb, 0x9d, 0xf8, 0x13, 0x25, 0x26, 0xd9, 0x86, 0x4b, 0xbe, 0xd7, 0xec, - 0x0b, 0x6b, 0x45, 0x10, 0x9f, 0xa8, 0xd6, 0xd9, 0x1e, 0x20, 0x83, 0x03, 0x5b, 0x0a, 0x5b, 0x1a, - 0xd3, 0x0d, 0x43, 0x4c, 0x8c, 0xb4, 0xa5, 0x31, 0x19, 0x93, 0x32, 0xd9, 0x28, 0xef, 0xc5, 0x67, - 0x16, 0xe5, 0x2d, 0x3c, 0x87, 0x28, 0xef, 0xa5, 0xe7, 0x17, 0xe5, 0x7d, 0x5e, 0x84, 0x99, 0xb4, - 0xff, 0x1a, 0xd7, 0x4a, 0xe5, 0xce, 0x5a, 0x2b, 0x95, 0x2a, 0x66, 0x1a, 0x7b, 0xa6, 0xc5, 0x4c, - 0xe3, 0xe7, 0x5e, 0xcc, 0x94, 0x28, 0xda, 0x9a, 0x78, 0x42, 0xd1, 0x56, 0x0d, 0x66, 0x6d, 0xaf, - 0xeb, 0x8b, 0xdf, 0x45, 0xa8, 0xd2, 0x1d, 0xf9, 0xbc, 0xae, 0x1f, 0x30, 0x97, 0xd3, 0x6c, 0xcc, - 0xca, 0x13, 0x06, 0x79, 0x57, 0x34, 0x2c, 0x8c, 0x50, 0xf0, 0x99, 0x5e, 0x30, 0x71, 0x51, 0xaa, - 0x9a, 0x4b, 0xed, 0xa6, 0x4b, 0xf5, 0x52, 0x17, 0x77, 0x34, 0x66, 0xd3, 0x45, 0x76, 0xcc, 0x28, - 0x09, 0xfd, 0xbf, 0x7a, 0x1e, 0xfa, 0xd3, 0x15, 0x7d, 0xaa, 0x27, 0xf1, 0x9b, 0x6e, 0x9a, 0x8b, - 0xd9, 0x9e, 0x90, 0x00, 0x5e, 0xf0, 0x07, 0xb9, 0x61, 0x4c, 0xbd, 0x2a, 0x7d, 0x99, 0x33, 0xb8, - 0xa8, 0xb4, 0xbc, 0x30, 0xd0, 0x91, 0x63, 0x78, 0x0a, 0x72, 0xb2, 0x22, 0xac, 0xf8, 0xac, 0x2a, - 0xc2, 0x16, 0x8e, 0x64, 0xb1, 0xe9, 0xa9, 0x75, 0xaa, 0xf7, 0xd3, 0xb5, 0xe3, 0xef, 0x0f, 0xf9, - 0xbf, 0xc0, 0x44, 0xe5, 0xac, 0xc9, 0x1a, 0xd9, 0xdf, 0xca, 0xc1, 0xa5, 0x41, 0xcb, 0x32, 0xa0, - 0x17, 0x8d, 0x74, 0x2f, 0x46, 0x0b, 0xd7, 0x92, 0xa6, 0xe5, 0xdf, 0xf3, 0x89, 0xe0, 0x30, 0xa4, - 0xfe, 0xcf, 0x5e, 0x8e, 0x87, 0x7a, 0x39, 0x4e, 0xfd, 0xfe, 0x37, 0xff, 0x1c, 0x7f, 0xff, 0x5b, - 0x18, 0xe2, 0xf7, 0xbf, 0x93, 0xcf, 0xf3, 0xf7, 0xbf, 0xc5, 0x33, 0xfe, 0xfe, 0xb7, 0xf4, 0xec, - 0x7f, 0xff, 0xfb, 0x45, 0x0e, 0xe6, 0xb2, 0xe5, 0xc8, 0xcf, 0x21, 0x49, 0xb6, 0x9f, 0x4a, 0x92, - 0xad, 0x8f, 0x64, 0xcc, 0xa3, 0x6e, 0x9f, 0x96, 0x2c, 0x33, 0x7f, 0x9c, 0x83, 0xbe, 0x92, 0xeb, - 0xe7, 0x90, 0xc7, 0x7a, 0x94, 0xce, 0x63, 0xad, 0x9e, 0xcb, 0x20, 0x4f, 0xc9, 0x67, 0xfd, 0xcf, - 0x80, 0x21, 0xfe, 0x9f, 0xe4, 0xb5, 0x52, 0xa6, 0x6d, 0xec, 0xd9, 0x9b, 0xb6, 0x7a, 0xf5, 0xd3, - 0x2f, 0x16, 0x2f, 0x7c, 0xf6, 0xc5, 0xe2, 0x85, 0xcf, 0xbf, 0x58, 0xbc, 0xf0, 0xc9, 0xc9, 0x62, - 0xee, 0xd3, 0x93, 0xc5, 0xdc, 0x67, 0x27, 0x8b, 0xb9, 0xcf, 0x4f, 0x16, 0x73, 0x3f, 0x3e, 0x59, - 0xcc, 0xfd, 0xd1, 0xbf, 0x2e, 0x5e, 0xf8, 0xb5, 0x62, 0x84, 0xfb, 0xbf, 0x01, 0x00, 0x00, 0xff, - 0xff, 0xb7, 0xae, 0xb9, 0x8a, 0x9e, 0x4e, 0x00, 0x00, + // 4725 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xec, 0x5c, 0x4d, 0x6c, 0x1c, 0x57, + 0x72, 0xd6, 0x90, 0x9c, 0xe1, 0x4c, 0x0d, 0xff, 0xf4, 0x28, 0x59, 0x6d, 0x5a, 0xe6, 0x68, 0xdb, + 0xb0, 0xa3, 0x4d, 0x6c, 0xd2, 0x96, 0x76, 0x13, 0xaf, 0x37, 0xb6, 0x77, 0x86, 0x3f, 0x12, 0x25, + 0x91, 0x62, 0x6a, 0x28, 0x29, 0x1b, 0x2f, 0xb2, 0x69, 0xf6, 0x3c, 0xce, 0xb4, 0x38, 0xd3, 0xdd, + 0xee, 0xd7, 0x23, 0x9a, 0xf0, 0x21, 0x4e, 0x90, 0x20, 0x09, 0x82, 0x05, 0x92, 0x4b, 0xb2, 0xc8, + 0x5e, 0x82, 0x1c, 0x92, 0x4b, 0x2e, 0xb9, 0x06, 0xc1, 0x06, 0x08, 0x72, 0x30, 0xf6, 0x12, 0xdf, + 0xe2, 0x43, 0x40, 0xac, 0x99, 0x4b, 0x82, 0x04, 0x08, 0x90, 0x4b, 0x00, 0x9d, 0x82, 0xf7, 0xd3, + 0xaf, 0x7f, 0xa6, 0x69, 0x51, 0x33, 0x94, 0x82, 0xec, 0xee, 0x49, 0xec, 0xaa, 0x7a, 0x5f, 0xbd, + 0xdf, 0x7a, 0x55, 0xf5, 0x6a, 0x04, 0x2b, 0x6d, 0x27, 0xec, 0xf4, 0x77, 0x97, 0x6c, 0xaf, 0xb7, + 0x6c, 0x05, 0x6d, 0xcf, 0x0f, 0xbc, 0x87, 0xe2, 0x8f, 0x65, 0x7f, 0xbf, 0xbd, 0x6c, 0xf9, 0x0e, + 0x5b, 0x3e, 0xf0, 0x82, 0xfd, 0xbd, 0xae, 0x77, 0xb0, 0xfc, 0xe8, 0x2d, 0xab, 0xeb, 0x77, 0xac, + 0xb7, 0x96, 0xdb, 0xd4, 0xa5, 0x81, 0x15, 0xd2, 0xd6, 0x92, 0x1f, 0x78, 0xa1, 0x47, 0xae, 0xc7, + 0x20, 0x4b, 0x11, 0x88, 0xf8, 0x63, 0xc9, 0xdf, 0x6f, 0x2f, 0x71, 0x90, 0xa5, 0x08, 0x64, 0x29, + 0x02, 0x59, 0x78, 0x23, 0xa1, 0xb9, 0xed, 0x71, 0x85, 0x1c, 0x6b, 0xb7, 0xbf, 0x27, 0xbe, 0xc4, + 0x87, 0xf8, 0x4b, 0xea, 0x58, 0x30, 0xf7, 0xdf, 0x66, 0x4b, 0x8e, 0xc7, 0xbb, 0xb4, 0x6c, 0x7b, + 0x01, 0x5d, 0x7e, 0x34, 0xd0, 0x8f, 0x85, 0xaf, 0xc5, 0x32, 0x3d, 0xcb, 0xee, 0x38, 0x2e, 0x0d, + 0x0e, 0xe3, 0x71, 0xf4, 0x68, 0x68, 0xe5, 0xb5, 0x5a, 0x3e, 0xa9, 0x55, 0xd0, 0x77, 0x43, 0xa7, + 0x47, 0x07, 0x1a, 0xfc, 0xe2, 0x93, 0x1a, 0x30, 0xbb, 0x43, 0x7b, 0x56, 0xb6, 0x9d, 0xf9, 0x4f, + 0x05, 0x98, 0xad, 0x07, 0x76, 0xc7, 0x79, 0x44, 0x9b, 0x21, 0x67, 0xb4, 0x0f, 0xc9, 0x07, 0x30, + 0x1e, 0x5a, 0x81, 0x51, 0xb8, 0x52, 0xb8, 0x5a, 0xbd, 0xf6, 0xad, 0xa5, 0x21, 0x26, 0x72, 0x69, + 0xc7, 0x0a, 0x22, 0xb8, 0xc6, 0xe4, 0xf1, 0x51, 0x6d, 0x7c, 0xc7, 0x0a, 0x90, 0xa3, 0x92, 0xef, + 0xc2, 0x84, 0xeb, 0xb9, 0xd4, 0x18, 0x13, 0xe8, 0xf5, 0xa1, 0xd0, 0xb7, 0x3c, 0x57, 0xf7, 0xb6, + 0x51, 0x3e, 0x3e, 0xaa, 0x4d, 0x70, 0x0a, 0x0a, 0x60, 0xf3, 0xbf, 0x0a, 0x50, 0xa9, 0x07, 0xed, + 0x7e, 0x8f, 0xba, 0x21, 0x23, 0x01, 0x80, 0x6f, 0x05, 0x56, 0x8f, 0x86, 0x34, 0x60, 0x46, 0xe1, + 0xca, 0xf8, 0xd5, 0xea, 0xb5, 0xf7, 0x86, 0x52, 0xba, 0x1d, 0xc1, 0x34, 0xc8, 0xa7, 0x47, 0xb5, + 0x73, 0xc7, 0x47, 0x35, 0xd0, 0x24, 0x86, 0x09, 0x2d, 0xc4, 0x85, 0x8a, 0x15, 0x84, 0xce, 0x9e, + 0x65, 0x87, 0xcc, 0x18, 0x13, 0x2a, 0xdf, 0x1d, 0x4a, 0x65, 0x5d, 0xa1, 0x34, 0xce, 0x2b, 0x8d, + 0x95, 0x88, 0xc2, 0x30, 0x56, 0x61, 0xfe, 0xc7, 0x38, 0x94, 0x23, 0x06, 0xb9, 0x02, 0x13, 0xae, + 0xd5, 0xa3, 0x62, 0xf5, 0x2a, 0x8d, 0x29, 0xd5, 0x70, 0x62, 0xcb, 0xea, 0xf1, 0x09, 0xb2, 0x7a, + 0x94, 0x4b, 0xf8, 0x56, 0xd8, 0x11, 0x2b, 0x90, 0x90, 0xd8, 0xb6, 0xc2, 0x0e, 0x0a, 0x0e, 0xb9, + 0x0c, 0x13, 0x3d, 0xaf, 0x45, 0x8d, 0xf1, 0x2b, 0x85, 0xab, 0x45, 0x39, 0xc1, 0x9b, 0x5e, 0x8b, + 0xa2, 0xa0, 0xf2, 0xf6, 0x7b, 0x81, 0xd7, 0x33, 0x26, 0xd2, 0xed, 0xd7, 0x03, 0xaf, 0x87, 0x82, + 0x43, 0xfe, 0xb0, 0x00, 0x73, 0x51, 0xf7, 0xee, 0x78, 0xb6, 0x15, 0x3a, 0x9e, 0x6b, 0x14, 0xc5, + 0x82, 0xaf, 0x8d, 0x34, 0x11, 0x11, 0x58, 0xc3, 0x50, 0x5a, 0xe7, 0xb2, 0x1c, 0x1c, 0x50, 0x4c, + 0xae, 0x01, 0xb4, 0xbb, 0xde, 0xae, 0xd5, 0xe5, 0x73, 0x60, 0x94, 0x44, 0xaf, 0xf5, 0x12, 0xde, + 0xd0, 0x1c, 0x4c, 0x48, 0x91, 0x7d, 0x98, 0xb4, 0xe4, 0xa9, 0x30, 0x26, 0x45, 0xbf, 0x57, 0x87, + 0xec, 0x77, 0xea, 0x64, 0x35, 0xaa, 0xc7, 0x47, 0xb5, 0x49, 0x45, 0xc4, 0x48, 0x03, 0x79, 0x1d, + 0xca, 0x9e, 0xcf, 0xbb, 0x6a, 0x75, 0x8d, 0xf2, 0x95, 0xc2, 0xd5, 0x72, 0x63, 0x4e, 0x75, 0xaf, + 0x7c, 0x57, 0xd1, 0x51, 0x4b, 0x98, 0x7f, 0x5a, 0x84, 0x81, 0x51, 0x93, 0xb7, 0xa0, 0xaa, 0xd0, + 0xee, 0x78, 0x6d, 0x26, 0x16, 0xbf, 0xdc, 0x98, 0x3d, 0x3e, 0xaa, 0x55, 0xeb, 0x31, 0x19, 0x93, + 0x32, 0xe4, 0x01, 0x8c, 0xb1, 0xeb, 0xea, 0x18, 0xbe, 0x3f, 0xd4, 0xe8, 0x9a, 0xd7, 0xf5, 0x06, + 0x2d, 0x1d, 0x1f, 0xd5, 0xc6, 0x9a, 0xd7, 0x71, 0x8c, 0x5d, 0xe7, 0xe6, 0xa3, 0xed, 0x84, 0x62, + 0xf3, 0x0c, 0x6b, 0x3e, 0x6e, 0x38, 0xa1, 0x86, 0x16, 0xe6, 0xe3, 0x86, 0x13, 0x22, 0x47, 0xe5, + 0xe6, 0xa3, 0x13, 0x86, 0xbe, 0xd8, 0x7c, 0xc3, 0x9a, 0x8f, 0x9b, 0x3b, 0x3b, 0xdb, 0x1a, 0x5e, + 0xec, 0x6e, 0x4e, 0x41, 0x01, 0x4c, 0x3e, 0xe6, 0x33, 0x29, 0x79, 0x5e, 0x70, 0xa8, 0x76, 0xed, + 0xcd, 0x91, 0x76, 0xad, 0x17, 0x1c, 0x6a, 0x75, 0x6a, 0x4d, 0x34, 0x03, 0x93, 0xda, 0xc4, 0xe8, + 0x5a, 0x7b, 0x4c, 0x6c, 0xd2, 0xa1, 0x47, 0xb7, 0xba, 0xde, 0xcc, 0x8c, 0x6e, 0x75, 0xbd, 0x89, + 0x02, 0x98, 0xaf, 0x4d, 0x60, 0x1d, 0xa8, 0x3d, 0x3d, 0xdc, 0xda, 0xa0, 0x75, 0x90, 0x5e, 0x1b, + 0xb4, 0x0e, 0x90, 0xa3, 0x9a, 0x6d, 0xb8, 0x18, 0x71, 0x90, 0xfa, 0x1e, 0x73, 0xc4, 0x00, 0xe9, + 0x1e, 0x59, 0x86, 0x8a, 0xed, 0xb9, 0x7b, 0x4e, 0x7b, 0xd3, 0xf2, 0x95, 0x61, 0xd2, 0x16, 0x6d, + 0x25, 0x62, 0x60, 0x2c, 0x43, 0x5e, 0x86, 0xf1, 0x7d, 0x7a, 0xa8, 0x2c, 0x54, 0x55, 0x89, 0x8e, + 0xdf, 0xa6, 0x87, 0xc8, 0xe9, 0xe6, 0x0f, 0x0b, 0x30, 0x9f, 0x33, 0xb9, 0xbc, 0x59, 0x3f, 0xe8, + 0x2a, 0x0d, 0xba, 0xd9, 0x3d, 0xbc, 0x83, 0x9c, 0x4e, 0x7e, 0xaf, 0x00, 0xb3, 0x89, 0xd9, 0xae, + 0xf7, 0x95, 0x11, 0x1c, 0xfe, 0x74, 0xa7, 0xb0, 0x1a, 0x97, 0x94, 0xc6, 0xd9, 0x0c, 0x03, 0xb3, + 0x5a, 0xcd, 0x7f, 0x16, 0xb7, 0x6e, 0x8a, 0x46, 0x2c, 0x98, 0xe9, 0x33, 0x1a, 0x70, 0x13, 0xdd, + 0xa4, 0x76, 0x40, 0x43, 0x75, 0x01, 0xbf, 0xba, 0x24, 0xaf, 0x76, 0xde, 0x8b, 0x25, 0xee, 0x65, + 0x2c, 0x3d, 0x7a, 0x6b, 0x49, 0x4a, 0xdc, 0xa6, 0x87, 0x4d, 0xda, 0xa5, 0x1c, 0xa3, 0x41, 0x8e, + 0x8f, 0x6a, 0x33, 0xf7, 0x52, 0x00, 0x98, 0x01, 0xe4, 0x2a, 0x7c, 0x8b, 0xb1, 0x03, 0x2f, 0x68, + 0x29, 0x15, 0x63, 0x4f, 0xad, 0x62, 0x3b, 0x05, 0x80, 0x19, 0x40, 0xf3, 0xdb, 0x00, 0x2b, 0x9e, + 0x1b, 0x3a, 0x6e, 0x9f, 0xde, 0x75, 0xc9, 0x2b, 0x50, 0xa4, 0x41, 0xe0, 0x05, 0xca, 0x20, 0x4d, + 0xab, 0x09, 0x2a, 0xae, 0x71, 0x22, 0x4a, 0x1e, 0x79, 0x0d, 0x4a, 0x7b, 0x96, 0xd3, 0xa5, 0x2d, + 0xd1, 0x9b, 0x72, 0x63, 0x46, 0x49, 0x95, 0xd6, 0x05, 0x15, 0x15, 0xd7, 0xfc, 0xd1, 0x18, 0x4c, + 0xad, 0x04, 0x9e, 0xfb, 0x40, 0x2d, 0x04, 0xf9, 0x0d, 0x28, 0x73, 0xff, 0xa9, 0x65, 0x85, 0x96, + 0x9a, 0xab, 0x37, 0x13, 0x03, 0xd1, 0x6e, 0x50, 0xbc, 0x84, 0x5c, 0x9a, 0x0f, 0xed, 0xee, 0xee, + 0x43, 0x6a, 0x87, 0x9b, 0x34, 0xb4, 0xe2, 0x8b, 0x20, 0xa6, 0xa1, 0x46, 0x25, 0x36, 0x4c, 0x30, + 0x9f, 0xda, 0x23, 0x39, 0x2b, 0x51, 0x77, 0x9b, 0x3e, 0xb5, 0xe3, 0xdb, 0x92, 0x7f, 0xa1, 0x00, + 0x27, 0x0c, 0x26, 0xa5, 0x71, 0x67, 0xca, 0x66, 0x0e, 0x67, 0x6d, 0x92, 0x53, 0x23, 0xaf, 0x0d, + 0xd6, 0x98, 0x55, 0xea, 0x26, 0x15, 0x01, 0x23, 0x4d, 0xe6, 0xe7, 0x05, 0x98, 0x4b, 0xb6, 0xb8, + 0xe3, 0xb0, 0x90, 0x7c, 0x67, 0x60, 0x42, 0x97, 0x4e, 0x37, 0xa1, 0xbc, 0xb5, 0x98, 0x4e, 0x7d, + 0x71, 0x45, 0x94, 0xc4, 0x64, 0xee, 0x41, 0xd1, 0x09, 0x69, 0x2f, 0x72, 0x89, 0xea, 0x23, 0x8f, + 0x32, 0xde, 0x4f, 0x1b, 0x1c, 0x17, 0x25, 0xbc, 0xb9, 0x02, 0xf3, 0x39, 0x73, 0xc1, 0x6f, 0x59, + 0xee, 0x03, 0xb7, 0xfa, 0xdd, 0xc8, 0x39, 0xd2, 0x9d, 0x6d, 0x2a, 0x3a, 0x6a, 0x09, 0xf3, 0xcf, + 0x4a, 0x30, 0xb9, 0x5a, 0xbf, 0xb1, 0x63, 0xb1, 0xfd, 0x53, 0xb8, 0x54, 0xaf, 0x43, 0x39, 0xa4, + 0x3d, 0xbf, 0x6b, 0x85, 0x54, 0x19, 0x2d, 0x8d, 0xbd, 0xa3, 0xe8, 0xa8, 0x25, 0x88, 0xc7, 0xfd, + 0x43, 0xe5, 0xa0, 0xaa, 0x25, 0x7f, 0x6f, 0x48, 0x03, 0xa4, 0x50, 0x92, 0x0e, 0xa2, 0x22, 0x61, + 0xac, 0x83, 0x30, 0xa8, 0x46, 0xca, 0x91, 0xee, 0xa9, 0xbb, 0x73, 0x48, 0xc7, 0x3e, 0xc6, 0x91, + 0x77, 0x59, 0x82, 0x80, 0x49, 0x2d, 0xe4, 0x6b, 0x30, 0xd5, 0xa2, 0x3e, 0x75, 0x5b, 0xd4, 0xb5, + 0x1d, 0xca, 0x8c, 0xe2, 0x95, 0x71, 0x3e, 0x2f, 0xc7, 0x47, 0xb5, 0xa9, 0xd5, 0x04, 0x1d, 0x53, + 0x52, 0xe4, 0x21, 0x54, 0x0e, 0x9c, 0xb0, 0x23, 0x16, 0xd4, 0x28, 0x89, 0x8d, 0xf2, 0x8d, 0xa1, + 0x3a, 0xca, 0x11, 0xe2, 0x69, 0x79, 0x10, 0x61, 0x62, 0x0c, 0xcf, 0xaf, 0x25, 0xfe, 0x21, 0xbc, + 0x78, 0x71, 0x25, 0x56, 0xd2, 0x0d, 0x04, 0x03, 0x63, 0x19, 0xc2, 0x60, 0x8a, 0x7f, 0x34, 0xe9, + 0x87, 0x7d, 0xea, 0xda, 0x54, 0x38, 0x6b, 0xc3, 0xfa, 0xf6, 0x11, 0x88, 0x9c, 0x91, 0x07, 0x09, + 0x58, 0x4c, 0x29, 0xe1, 0xbb, 0xef, 0xa0, 0x43, 0x5d, 0xa3, 0x92, 0xde, 0x7d, 0x0f, 0x3a, 0xd4, + 0x45, 0xc1, 0x21, 0x1e, 0x80, 0xad, 0x6d, 0xae, 0x01, 0x23, 0x78, 0x74, 0xb1, 0xe9, 0x6e, 0xcc, + 0x70, 0xa3, 0x18, 0x7f, 0x63, 0x42, 0x85, 0xf9, 0x0f, 0x05, 0xa8, 0xf2, 0xc3, 0x11, 0x6d, 0xe8, + 0xd7, 0xa0, 0x14, 0x5a, 0x41, 0x5b, 0x5d, 0x59, 0x95, 0xd8, 0x82, 0xef, 0x08, 0x2a, 0x2a, 0x2e, + 0xb1, 0xa0, 0x18, 0x5a, 0x6c, 0x3f, 0xb2, 0x00, 0xbf, 0x3c, 0x54, 0x1f, 0xd5, 0xa9, 0x8c, 0x0f, + 0x3f, 0xff, 0x62, 0x28, 0x91, 0xc9, 0x55, 0x28, 0xf3, 0xeb, 0x62, 0xdd, 0x62, 0xd2, 0x03, 0x2d, + 0x37, 0xa6, 0xf8, 0x29, 0x5c, 0x57, 0x34, 0xd4, 0x5c, 0xf3, 0x3b, 0x30, 0xb3, 0xf6, 0x11, 0xb5, + 0xfb, 0xa1, 0x17, 0x48, 0x1f, 0x84, 0xdc, 0x02, 0xc2, 0x68, 0xf0, 0xc8, 0xb1, 0x69, 0xdd, 0xb6, + 0xbd, 0xbe, 0x1b, 0x6e, 0xc5, 0xa7, 0x7e, 0x41, 0x69, 0x23, 0xcd, 0x01, 0x09, 0xcc, 0x69, 0x65, + 0xfe, 0xf5, 0x04, 0x54, 0x13, 0x5e, 0x2c, 0x5f, 0xc5, 0x80, 0xfa, 0x5e, 0xd6, 0x86, 0x70, 0x3f, + 0x09, 0x05, 0x87, 0xdb, 0x90, 0x80, 0x3e, 0x72, 0x18, 0x8f, 0x95, 0x32, 0x36, 0x04, 0x15, 0x1d, + 0xb5, 0x04, 0xa9, 0x41, 0xb1, 0x45, 0xfd, 0xb0, 0x23, 0x06, 0x39, 0xd1, 0xa8, 0xf0, 0x89, 0x58, + 0xe5, 0x04, 0x94, 0x74, 0x2e, 0xb0, 0x47, 0x43, 0xbb, 0x63, 0x4c, 0x88, 0x73, 0x27, 0x04, 0xd6, + 0x39, 0x01, 0x25, 0x3d, 0xc7, 0xdf, 0x28, 0x3e, 0x7b, 0x7f, 0xa3, 0x74, 0xc6, 0xfe, 0x06, 0xf1, + 0x61, 0x9e, 0xb1, 0xce, 0x76, 0xe0, 0x3c, 0xb2, 0x42, 0x2a, 0x1a, 0x0b, 0x3d, 0x93, 0x4f, 0xa3, + 0xe7, 0xd2, 0xf1, 0x51, 0x6d, 0xbe, 0xd9, 0xbc, 0x99, 0x45, 0xc1, 0x3c, 0x68, 0xd2, 0x84, 0x8b, + 0x8e, 0xcb, 0xa8, 0xdd, 0x0f, 0xe8, 0x46, 0xdb, 0xf5, 0x02, 0x7a, 0xd3, 0x63, 0x1c, 0x4e, 0x85, + 0x6e, 0x2f, 0xab, 0x45, 0xbb, 0xb8, 0x91, 0x27, 0x84, 0xf9, 0x6d, 0xcd, 0x1f, 0x15, 0x60, 0x2a, + 0xe9, 0xb8, 0x13, 0x06, 0xd0, 0x59, 0x5d, 0x6f, 0xca, 0x9d, 0xa9, 0x2e, 0xe3, 0xf7, 0x87, 0x8e, + 0x07, 0x24, 0x4c, 0xec, 0xec, 0xc4, 0x34, 0x4c, 0xa8, 0x39, 0x45, 0x66, 0xe0, 0x15, 0x28, 0xee, + 0x79, 0x81, 0x4d, 0xd5, 0xd9, 0xd2, 0x67, 0x70, 0x9d, 0x13, 0x51, 0xf2, 0xcc, 0x7f, 0x2b, 0x40, + 0x42, 0x03, 0xf9, 0x4d, 0x98, 0xe6, 0x3a, 0x6e, 0x07, 0xbb, 0xa9, 0xd1, 0x34, 0x86, 0x1e, 0x8d, + 0x46, 0x6a, 0x5c, 0x54, 0xfa, 0xa7, 0x53, 0x64, 0x4c, 0xeb, 0x23, 0xbf, 0x00, 0x15, 0xab, 0xd5, + 0x0a, 0x28, 0x63, 0x54, 0x9a, 0x9e, 0x4a, 0x63, 0x5a, 0xdc, 0x95, 0x11, 0x11, 0x63, 0x3e, 0x3f, + 0x86, 0x3c, 0x52, 0xe2, 0x3b, 0x5b, 0x0c, 0x32, 0x71, 0x0c, 0xb9, 0x12, 0x4e, 0x47, 0x2d, 0x61, + 0x7e, 0x6f, 0x02, 0xd2, 0xba, 0x49, 0x0b, 0x66, 0xf7, 0x83, 0xdd, 0x95, 0x15, 0xcb, 0xee, 0x0c, + 0xe5, 0xc7, 0xcf, 0xf3, 0x00, 0xe2, 0x76, 0x1a, 0x01, 0xb3, 0x90, 0x4a, 0xcb, 0x6d, 0x7a, 0x18, + 0x5a, 0xbb, 0xc3, 0xb8, 0xf2, 0x91, 0x96, 0x24, 0x02, 0x66, 0x21, 0xc9, 0xd7, 0xa1, 0xba, 0x1f, + 0xec, 0x46, 0x87, 0x5c, 0x4d, 0xc7, 0xbc, 0x9a, 0x8e, 0xea, 0xed, 0x98, 0x85, 0x49, 0x39, 0x3e, + 0x85, 0xfb, 0xc1, 0x2e, 0x52, 0xab, 0x1b, 0x25, 0x89, 0xf4, 0x14, 0xde, 0x56, 0x74, 0xd4, 0x12, + 0xc4, 0x07, 0xb2, 0x1f, 0xcd, 0x9e, 0x0e, 0x06, 0x95, 0x2d, 0xba, 0x9a, 0x37, 0x1a, 0x2d, 0x94, + 0x1c, 0xd0, 0x0b, 0xdc, 0x36, 0xdf, 0x1e, 0xc0, 0xc1, 0x1c, 0x6c, 0xf2, 0x6d, 0xb8, 0xb4, 0x1f, + 0xec, 0x2a, 0x43, 0xbe, 0x1d, 0x38, 0xae, 0xed, 0xf8, 0xa9, 0xec, 0x50, 0x4d, 0x75, 0xf7, 0xd2, + 0xed, 0x7c, 0x31, 0x3c, 0xa9, 0xbd, 0xf9, 0x06, 0x4c, 0x25, 0xb3, 0x0b, 0x4f, 0x88, 0x48, 0xcd, + 0xff, 0x2c, 0x40, 0x69, 0xc3, 0xf5, 0xfb, 0x3f, 0x25, 0x89, 0xca, 0xbf, 0x98, 0x80, 0x09, 0xee, + 0x7a, 0x91, 0xab, 0x30, 0x11, 0x1e, 0xfa, 0xf2, 0x6e, 0x1d, 0x6f, 0x5c, 0x88, 0x0c, 0xcd, 0xce, + 0xa1, 0x4f, 0x1f, 0xab, 0x7f, 0x51, 0x48, 0x90, 0xf7, 0xa0, 0xe4, 0xf6, 0x7b, 0xf7, 0xad, 0xae, + 0x32, 0x4a, 0xaf, 0x45, 0xae, 0xc5, 0x96, 0xa0, 0x3e, 0x3e, 0xaa, 0x5d, 0xa0, 0xae, 0xed, 0xb5, + 0x1c, 0xb7, 0xbd, 0xfc, 0x90, 0x79, 0xee, 0xd2, 0x56, 0xbf, 0xb7, 0x4b, 0x03, 0x54, 0xad, 0xc8, + 0x57, 0x61, 0x72, 0xd7, 0xf3, 0xba, 0x1c, 0x40, 0x9a, 0x2c, 0x1d, 0x12, 0x35, 0x24, 0x19, 0x23, + 0x3e, 0xf7, 0x62, 0x58, 0x18, 0x70, 0xc9, 0x89, 0xb4, 0x17, 0xd3, 0x14, 0x54, 0x54, 0x5c, 0xd2, + 0x83, 0x52, 0xcf, 0xf2, 0xb9, 0x5c, 0x51, 0x4c, 0xd9, 0xda, 0xd0, 0xfe, 0xe9, 0xd2, 0xa6, 0xc0, + 0x59, 0x73, 0xc3, 0xe0, 0x30, 0x56, 0x27, 0x89, 0xa8, 0x94, 0x10, 0x07, 0x26, 0xbb, 0x0e, 0x0b, + 0xb9, 0xbe, 0xd2, 0x08, 0xbb, 0x82, 0xeb, 0xbb, 0x6f, 0x75, 0xfb, 0x34, 0x9e, 0x81, 0x3b, 0x12, + 0x16, 0x23, 0xfc, 0x85, 0x43, 0xa8, 0x26, 0x7a, 0x44, 0xe6, 0x64, 0x16, 0x46, 0x6c, 0x5e, 0x91, + 0x78, 0x21, 0x3b, 0x50, 0x7c, 0xc4, 0x31, 0x94, 0xb1, 0x19, 0xb1, 0x27, 0x28, 0xc1, 0xde, 0x19, + 0x7b, 0xbb, 0xf0, 0x4e, 0xf9, 0xfb, 0x7f, 0x5e, 0x3b, 0xf7, 0xc9, 0xbf, 0x5c, 0x39, 0x67, 0xfe, + 0xe3, 0x38, 0x54, 0xb4, 0xc8, 0xff, 0xef, 0x9d, 0x12, 0x64, 0x76, 0xca, 0xad, 0xd1, 0xe6, 0xeb, + 0x54, 0xdb, 0xa5, 0x9e, 0xde, 0x2e, 0x53, 0x8d, 0x9f, 0x4b, 0x2c, 0xf5, 0xe3, 0xa3, 0x9a, 0x91, + 0x9e, 0x04, 0xb4, 0x0e, 0x36, 0x29, 0x63, 0x56, 0x9b, 0xc6, 0xdb, 0xe0, 0x1b, 0x4f, 0xda, 0x06, + 0x17, 0x92, 0xdb, 0xa0, 0x92, 0xbf, 0x8c, 0x9f, 0x8c, 0x43, 0x79, 0x33, 0x0a, 0xfd, 0x7f, 0xb7, + 0x00, 0x55, 0xcb, 0x75, 0xbd, 0xd0, 0x92, 0x79, 0x0e, 0x69, 0xde, 0xb6, 0x86, 0x9a, 0x8e, 0x08, + 0x74, 0xa9, 0x1e, 0x03, 0xca, 0x29, 0xd1, 0x37, 0x53, 0x82, 0x83, 0x49, 0xbd, 0xe4, 0x43, 0x28, + 0x75, 0xad, 0x5d, 0xda, 0x8d, 0xac, 0xdd, 0xc6, 0x68, 0x3d, 0xb8, 0x23, 0xb0, 0x32, 0xeb, 0x21, + 0x89, 0xa8, 0x14, 0x2d, 0xbc, 0x07, 0x73, 0xd9, 0x8e, 0x3e, 0xcd, 0x8c, 0xf2, 0xc5, 0x48, 0xa8, + 0x79, 0x9a, 0xa6, 0xe6, 0xdf, 0x55, 0x00, 0xb6, 0xbc, 0x16, 0x6d, 0x86, 0x56, 0xd8, 0x67, 0x64, + 0x01, 0xc6, 0x9c, 0x96, 0xba, 0x8a, 0x40, 0xf5, 0x76, 0x6c, 0x63, 0x15, 0xc7, 0x9c, 0x96, 0x4e, + 0x71, 0x8c, 0x9d, 0x98, 0xe2, 0xf8, 0x3a, 0x54, 0x5b, 0x0e, 0xf3, 0xbb, 0xd6, 0xe1, 0x56, 0x8e, + 0x2f, 0xb0, 0x1a, 0xb3, 0x30, 0x29, 0x47, 0x5e, 0x57, 0xe7, 0x57, 0x1e, 0x14, 0x23, 0x73, 0x7e, + 0xcb, 0xbc, 0x7b, 0x89, 0x33, 0xfc, 0x36, 0x4c, 0x45, 0x29, 0x04, 0xa1, 0xa5, 0x28, 0x5a, 0x45, + 0xa7, 0x7e, 0x6a, 0x27, 0xc1, 0xc3, 0x94, 0x64, 0x36, 0xc5, 0x51, 0x7a, 0x2e, 0x29, 0x8e, 0x55, + 0x98, 0x63, 0xa1, 0x17, 0xd0, 0x56, 0x24, 0xb1, 0xb1, 0x6a, 0x90, 0xd4, 0x40, 0xe7, 0x9a, 0x19, + 0x3e, 0x0e, 0xb4, 0x20, 0xdb, 0x70, 0x21, 0xea, 0x44, 0x72, 0x80, 0xc6, 0xbc, 0x40, 0xba, 0xac, + 0x90, 0x2e, 0x3c, 0xc8, 0x91, 0xc1, 0xdc, 0x96, 0xe4, 0x4d, 0x28, 0xfa, 0x1d, 0x8b, 0x51, 0x95, + 0xd4, 0x88, 0x62, 0xd7, 0xe2, 0x36, 0x27, 0x3e, 0x3e, 0xaa, 0x55, 0xf8, 0xb4, 0x8b, 0x0f, 0x94, + 0x82, 0xe4, 0x1a, 0xc0, 0xae, 0xd7, 0x77, 0x5b, 0x56, 0x70, 0xb8, 0xb1, 0x2a, 0x22, 0x99, 0xc4, + 0x1b, 0x59, 0x43, 0x73, 0x30, 0x21, 0xc5, 0x0d, 0x66, 0x4f, 0x9a, 0x0e, 0x95, 0x9b, 0xd0, 0x06, + 0x53, 0x5b, 0x14, 0xc5, 0x27, 0x1f, 0x40, 0x85, 0x85, 0x56, 0x10, 0xd2, 0x56, 0x3d, 0x54, 0x09, + 0x8a, 0x9f, 0x3f, 0x5d, 0x66, 0x71, 0xc7, 0xe9, 0xd1, 0xd8, 0xab, 0x68, 0x46, 0x20, 0x18, 0xe3, + 0x91, 0x5f, 0x07, 0xd8, 0x73, 0x5c, 0x87, 0x75, 0x04, 0x7a, 0xf5, 0xa9, 0xd1, 0xf5, 0x38, 0xd7, + 0x35, 0x0a, 0x26, 0x10, 0x79, 0xcc, 0xe3, 0x7b, 0xad, 0x8d, 0x6d, 0x63, 0x4a, 0x8c, 0x52, 0xc7, + 0x3c, 0xdb, 0x9c, 0x88, 0x92, 0x47, 0xae, 0x42, 0xb9, 0x65, 0xd1, 0x9e, 0xe7, 0xd2, 0x96, 0x31, + 0x1d, 0xe7, 0x1d, 0x56, 0x15, 0x0d, 0x35, 0x97, 0x7c, 0x17, 0x4a, 0x8e, 0x70, 0xf9, 0x8c, 0x19, + 0xd1, 0xd5, 0x6f, 0x0e, 0x77, 0x29, 0x08, 0x88, 0x06, 0x70, 0x8b, 0x23, 0xff, 0x46, 0x05, 0x4b, + 0x6c, 0x98, 0xf4, 0xfa, 0xa1, 0xd0, 0x30, 0x2b, 0x34, 0x0c, 0x97, 0x67, 0xb9, 0x2b, 0x31, 0xe4, + 0x9b, 0xa5, 0xfa, 0xc0, 0x08, 0x99, 0x8f, 0xd7, 0xee, 0x38, 0xdd, 0x56, 0x40, 0x5d, 0x63, 0x4e, + 0x84, 0x54, 0x62, 0xbc, 0x2b, 0x8a, 0x86, 0x9a, 0x4b, 0x7e, 0x09, 0xa6, 0xbd, 0x7e, 0x28, 0xf6, + 0x0d, 0xdf, 0x76, 0xcc, 0x38, 0x2f, 0xc4, 0xcf, 0xf3, 0xb0, 0xed, 0x6e, 0x92, 0x81, 0x69, 0x39, + 0x73, 0x06, 0xa6, 0x92, 0x0f, 0xfd, 0xe6, 0x1f, 0x8f, 0x41, 0xd4, 0x8f, 0x9f, 0x06, 0x6f, 0x99, + 0x98, 0x50, 0x0a, 0x28, 0xeb, 0x77, 0x43, 0x65, 0x6c, 0xc5, 0x5a, 0xa3, 0xa0, 0xa0, 0xe2, 0x98, + 0x07, 0x30, 0xcd, 0x7b, 0xdb, 0xed, 0xd2, 0x6e, 0x33, 0xa4, 0x3e, 0x23, 0x7b, 0x50, 0x64, 0xfc, + 0x0f, 0x35, 0x27, 0x23, 0x3e, 0x59, 0x84, 0xd4, 0x8f, 0xf7, 0xbb, 0x50, 0x80, 0x12, 0xde, 0xfc, + 0x93, 0x31, 0xa8, 0xe8, 0x79, 0x3a, 0x45, 0x86, 0xfc, 0x55, 0x98, 0x6c, 0xd1, 0x3d, 0x8b, 0x8f, + 0x46, 0xbd, 0xea, 0xf1, 0x6d, 0xb5, 0x2a, 0x49, 0x18, 0xf1, 0x48, 0x2d, 0xba, 0xcc, 0xe4, 0x90, + 0x45, 0xd6, 0x2a, 0xe9, 0x2b, 0x92, 0x7d, 0xa8, 0x88, 0x3f, 0xd6, 0xa3, 0x0a, 0x84, 0x61, 0xd7, + 0xfd, 0x7e, 0x84, 0x22, 0x73, 0x01, 0xfa, 0x13, 0x63, 0xfc, 0x4c, 0xe5, 0x40, 0xf1, 0x34, 0x95, + 0x03, 0xe6, 0x3a, 0x70, 0xc3, 0x70, 0x63, 0x85, 0xbc, 0x0b, 0x65, 0xa6, 0xb6, 0xae, 0x9a, 0x97, + 0xaf, 0xe8, 0xf7, 0x06, 0x45, 0x7f, 0x7c, 0x54, 0x9b, 0x16, 0xc2, 0x11, 0x01, 0x75, 0x13, 0x73, + 0x19, 0xaa, 0x89, 0x97, 0x56, 0x3e, 0xc3, 0xfa, 0x59, 0x26, 0x31, 0xc3, 0xab, 0x56, 0x68, 0xa1, + 0xe0, 0x98, 0x8f, 0xc7, 0x60, 0x0e, 0x29, 0xf3, 0xfa, 0x81, 0x4d, 0x93, 0x99, 0x59, 0xcb, 0x16, + 0xe5, 0x17, 0x99, 0xcc, 0x6c, 0x5d, 0x50, 0x51, 0x71, 0xc9, 0x37, 0x61, 0xba, 0x47, 0x83, 0xb6, + 0x3e, 0x6c, 0x6a, 0x91, 0x74, 0x7e, 0x65, 0x33, 0xc9, 0xc4, 0xb4, 0x2c, 0x8f, 0xf7, 0x7b, 0x96, + 0xeb, 0xec, 0x51, 0x16, 0x66, 0x53, 0x26, 0x9b, 0x8a, 0x8e, 0x5a, 0x82, 0xdc, 0x80, 0xf3, 0x8c, + 0x86, 0x77, 0x0f, 0x5c, 0x1a, 0x20, 0xdd, 0xa3, 0x81, 0xc8, 0xa4, 0x4f, 0x08, 0x93, 0xf9, 0xa2, + 0x6a, 0x76, 0xbe, 0x99, 0x15, 0xc0, 0xc1, 0x36, 0xe2, 0xf6, 0xed, 0xdb, 0x36, 0x65, 0x6c, 0xc5, + 0x73, 0x5b, 0x8e, 0x2e, 0x32, 0x49, 0xde, 0xbe, 0x19, 0x3e, 0x0e, 0xb4, 0xe0, 0x28, 0x7b, 0x96, + 0xd3, 0xed, 0x07, 0x34, 0x46, 0x29, 0xa5, 0x51, 0xd6, 0x33, 0x7c, 0x1c, 0x68, 0x61, 0xbe, 0x09, + 0xd3, 0x48, 0xc3, 0xe0, 0x50, 0xcf, 0x49, 0x0d, 0x8a, 0x5d, 0xa7, 0xe7, 0xc8, 0xe4, 0x4f, 0x51, + 0x6e, 0xe4, 0x3b, 0x9c, 0x80, 0x92, 0x6e, 0x7e, 0xbf, 0x00, 0x10, 0x17, 0x50, 0x90, 0x7d, 0x28, + 0xb3, 0xeb, 0x8d, 0xbe, 0xbd, 0xaf, 0xf3, 0x45, 0x43, 0x3e, 0x2b, 0x28, 0x90, 0xc4, 0xe3, 0x96, + 0xa2, 0xa0, 0x56, 0xf0, 0xa4, 0xe7, 0xf5, 0xbf, 0x19, 0x07, 0xdd, 0x8a, 0x2f, 0x2e, 0x75, 0x5b, + 0xbe, 0xe7, 0xb8, 0x61, 0xf6, 0xd9, 0x6c, 0x4d, 0xd1, 0x51, 0x4b, 0xf0, 0xfd, 0xb6, 0x2b, 0x07, + 0x31, 0x96, 0xde, 0x6f, 0xaa, 0x0f, 0x8a, 0xcb, 0xe5, 0x02, 0xda, 0xe6, 0x73, 0x3d, 0x9e, 0x96, + 0x43, 0x41, 0x45, 0xc5, 0xe5, 0xd7, 0x4c, 0x94, 0x30, 0x55, 0x7b, 0x44, 0x5c, 0x33, 0x51, 0x6e, + 0x15, 0x35, 0x97, 0x74, 0x60, 0xd6, 0x12, 0x4b, 0x1b, 0x27, 0x81, 0x9f, 0x2a, 0x9f, 0x1d, 0x3f, + 0xde, 0xa7, 0x51, 0x30, 0x0b, 0xcb, 0x35, 0xb1, 0xb8, 0xf9, 0xd3, 0xa7, 0xb5, 0xb5, 0xa6, 0x66, + 0x1a, 0x05, 0xb3, 0xb0, 0xdc, 0xc3, 0x0a, 0xbc, 0x2e, 0xad, 0xe3, 0x96, 0xf2, 0xe4, 0xb4, 0x87, + 0x85, 0x92, 0x8c, 0x11, 0xdf, 0xfc, 0xfd, 0x02, 0xcc, 0x34, 0xed, 0xc0, 0xf1, 0x43, 0x7d, 0xf6, + 0xb7, 0x44, 0xd5, 0x45, 0x68, 0x71, 0xdf, 0x47, 0xed, 0xa9, 0x97, 0x4f, 0xc8, 0xa7, 0x49, 0xa1, + 0x54, 0x51, 0x86, 0x24, 0x61, 0x0c, 0x21, 0xa2, 0x5e, 0x61, 0x5d, 0xb2, 0x6b, 0xdb, 0x14, 0x54, + 0x54, 0x5c, 0xf3, 0x07, 0x05, 0x28, 0xeb, 0xd7, 0xab, 0x57, 0xa0, 0x28, 0x1e, 0x45, 0xd4, 0xde, + 0xd1, 0x97, 0xc9, 0x0a, 0x27, 0xa2, 0xe4, 0x71, 0x21, 0xe1, 0xce, 0x29, 0xe0, 0xc4, 0x8d, 0x63, + 0x05, 0x21, 0x4a, 0x1e, 0xdf, 0xb4, 0xd4, 0x6d, 0xa9, 0xfd, 0xa2, 0x37, 0xed, 0x9a, 0xdb, 0x42, + 0x4e, 0x17, 0x55, 0x04, 0x5e, 0xd0, 0xb3, 0xc2, 0x6c, 0x4c, 0xbe, 0x2e, 0xa8, 0xa8, 0xb8, 0xe6, + 0x79, 0x98, 0x6d, 0xf6, 0x99, 0x4f, 0x5d, 0xed, 0x82, 0x9b, 0xd3, 0x50, 0x4d, 0xd4, 0x2b, 0x9a, + 0xff, 0x7d, 0x09, 0xf4, 0xab, 0xed, 0xcf, 0xde, 0x7e, 0x87, 0x0a, 0x8c, 0x6c, 0xed, 0xe3, 0x16, + 0x47, 0xf7, 0x71, 0xf5, 0x4a, 0x66, 0xfc, 0xdc, 0x76, 0xec, 0xe7, 0x96, 0xce, 0xc0, 0xcf, 0x8d, + 0x6b, 0x25, 0xb2, 0xbe, 0xee, 0x1f, 0x14, 0x60, 0xca, 0xe5, 0x71, 0xb4, 0x3a, 0xc1, 0xc6, 0xa4, + 0xf0, 0xad, 0xee, 0x8e, 0x34, 0x89, 0x4b, 0x5b, 0x09, 0x44, 0x99, 0x42, 0xd0, 0x71, 0x6e, 0x92, + 0x85, 0x29, 0xd5, 0x64, 0x1d, 0xca, 0xd6, 0x1e, 0x0f, 0x4e, 0xc2, 0x43, 0xf5, 0xfc, 0x7c, 0x39, + 0xef, 0x4c, 0xd7, 0x95, 0x8c, 0x34, 0x97, 0xd1, 0x17, 0xea, 0xb6, 0xfc, 0xbe, 0xd1, 0xa5, 0x1e, + 0x95, 0x11, 0xee, 0x9b, 0x28, 0x17, 0x92, 0xb8, 0xf2, 0x15, 0x25, 0x51, 0xf9, 0x61, 0x42, 0x49, + 0x86, 0x3f, 0x22, 0xf6, 0x2b, 0x4b, 0x4f, 0x56, 0x86, 0x46, 0xa8, 0x38, 0xa4, 0x1d, 0x39, 0xae, + 0x55, 0x31, 0xb9, 0x8d, 0xa1, 0x9d, 0x79, 0xed, 0x0b, 0xe7, 0x7b, 0xae, 0xe4, 0x56, 0xd2, 0x2c, + 0x4e, 0x9d, 0xc6, 0x2c, 0x4e, 0x9f, 0x68, 0x12, 0xdb, 0x50, 0x62, 0xc2, 0xe8, 0x8a, 0x98, 0xaf, + 0x7a, 0x6d, 0x65, 0xb8, 0x3b, 0x3b, 0x65, 0xb7, 0xe5, 0xec, 0x48, 0x1a, 0x2a, 0x78, 0xe2, 0x41, + 0x39, 0x50, 0xbe, 0x9d, 0x0a, 0x1b, 0x87, 0xcb, 0x3a, 0x67, 0x1d, 0x44, 0xb9, 0x3f, 0x22, 0x2a, + 0x6a, 0x25, 0xe4, 0x03, 0x18, 0x6f, 0x59, 0x6d, 0x15, 0x40, 0x7e, 0x6b, 0xe8, 0x87, 0xfa, 0x48, + 0x8d, 0x28, 0x14, 0x5c, 0xad, 0xdf, 0x40, 0x8e, 0x4a, 0xf6, 0x61, 0x92, 0x49, 0x1b, 0x6c, 0xcc, + 0x8d, 0x50, 0x7f, 0x97, 0xb1, 0xe3, 0x32, 0xa4, 0x50, 0x44, 0x8c, 0x34, 0x90, 0x35, 0x98, 0x7c, + 0xe4, 0x75, 0xfb, 0x3d, 0x15, 0x79, 0x56, 0xaf, 0x2d, 0xe4, 0xad, 0xf6, 0x7d, 0x21, 0x12, 0x1b, + 0x01, 0xf9, 0xcd, 0x30, 0x6a, 0x4b, 0x7e, 0xbb, 0x00, 0x33, 0xfc, 0xe8, 0xe8, 0x7d, 0xc0, 0x0c, + 0x32, 0xc2, 0x4e, 0xbd, 0xc7, 0x68, 0x10, 0xef, 0xb0, 0x17, 0x94, 0xda, 0x99, 0x8d, 0x94, 0x06, + 0xcc, 0x68, 0x24, 0x3e, 0x94, 0x99, 0xd3, 0xa2, 0xb6, 0x15, 0x30, 0x63, 0xfe, 0xcc, 0xb4, 0xc7, + 0xae, 0xa2, 0xc2, 0x46, 0xad, 0x85, 0xfc, 0x8e, 0xa8, 0x99, 0x54, 0x55, 0xc3, 0xaa, 0x92, 0xfb, + 0xc2, 0x59, 0x56, 0x72, 0xcf, 0xcb, 0x82, 0xc9, 0x94, 0x06, 0xcc, 0xaa, 0x24, 0x77, 0xe1, 0x22, + 0x8f, 0x54, 0x1e, 0xd1, 0x55, 0x6a, 0xb5, 0xba, 0x8e, 0x4b, 0x9b, 0xd4, 0xf6, 0xdc, 0x16, 0x33, + 0x2e, 0x8a, 0x77, 0x81, 0x17, 0x8f, 0x8f, 0x6a, 0x17, 0xeb, 0x79, 0x02, 0x98, 0xdf, 0x8e, 0x7c, + 0x0c, 0xd3, 0x41, 0xd2, 0x61, 0x37, 0x5e, 0x18, 0xe1, 0x51, 0x3a, 0xe5, 0xfa, 0xcb, 0xcc, 0x46, + 0x8a, 0x84, 0x69, 0x5d, 0xe4, 0x2d, 0xa8, 0xfa, 0xca, 0x52, 0x39, 0xac, 0x67, 0x5c, 0x12, 0x63, + 0x10, 0x37, 0xea, 0x76, 0x4c, 0xc6, 0xa4, 0x0c, 0xb9, 0x07, 0xd5, 0xd0, 0xeb, 0xd2, 0x40, 0x25, + 0xd0, 0x0d, 0xb1, 0xf8, 0x8b, 0x79, 0x3b, 0x79, 0x47, 0x8b, 0xc5, 0xe9, 0xd9, 0x98, 0xc6, 0x30, + 0x89, 0xc3, 0xe3, 0xbe, 0xa8, 0xe4, 0x2d, 0x10, 0x41, 0xee, 0x8b, 0xe9, 0xb8, 0xaf, 0x99, 0x64, + 0x62, 0x5a, 0x96, 0x47, 0x72, 0x7e, 0xe0, 0x78, 0x81, 0x13, 0x1e, 0xae, 0x74, 0x2d, 0xc6, 0x04, + 0xc0, 0x82, 0x00, 0xd0, 0x91, 0xdc, 0x76, 0x56, 0x00, 0x07, 0xdb, 0x70, 0x2f, 0x3f, 0x22, 0x1a, + 0x2f, 0x89, 0x78, 0x49, 0x98, 0xa5, 0xa8, 0x2d, 0x6a, 0xee, 0x09, 0x25, 0x3a, 0x97, 0x87, 0x29, + 0xd1, 0x21, 0x2d, 0xb8, 0x6c, 0xf5, 0x43, 0xaf, 0xc7, 0x09, 0xe9, 0x26, 0x3b, 0xde, 0x3e, 0x75, + 0x8d, 0x2b, 0xe2, 0xae, 0xba, 0x72, 0x7c, 0x54, 0xbb, 0x5c, 0xff, 0x12, 0x39, 0xfc, 0x52, 0x14, + 0xd2, 0x83, 0x32, 0x55, 0x65, 0x46, 0xc6, 0x57, 0x46, 0xb8, 0x24, 0xd2, 0xb5, 0x4a, 0x72, 0x82, + 0x22, 0x1a, 0x6a, 0x15, 0x64, 0x07, 0xaa, 0x1d, 0x8f, 0x85, 0xf5, 0xae, 0x63, 0x31, 0xca, 0x8c, + 0x97, 0xc5, 0x3e, 0xc9, 0xbd, 0xdf, 0x6e, 0x46, 0x62, 0xf1, 0x36, 0xb9, 0x19, 0xb7, 0xc4, 0x24, + 0x0c, 0xa1, 0x22, 0xe4, 0xe9, 0x8b, 0x55, 0xf3, 0xdc, 0x90, 0x7e, 0x14, 0x1a, 0x8b, 0x62, 0x2c, + 0xaf, 0xe5, 0x21, 0x6f, 0x7b, 0xad, 0x66, 0x5a, 0x5a, 0x9e, 0xf2, 0x0c, 0x11, 0xb3, 0x98, 0xe4, + 0x6d, 0x98, 0xf2, 0xbd, 0x56, 0xd3, 0xa7, 0xf6, 0xb6, 0x15, 0xda, 0x1d, 0xa3, 0x96, 0x4e, 0xff, + 0x6f, 0x27, 0x78, 0x98, 0x92, 0x5c, 0x78, 0x1f, 0xce, 0x0f, 0xf8, 0x53, 0x4f, 0xf5, 0x56, 0xf2, + 0x97, 0x05, 0x48, 0xba, 0xb3, 0x67, 0xee, 0xf7, 0xdf, 0x80, 0xf3, 0xea, 0x97, 0x58, 0xfc, 0xb2, + 0xed, 0xf6, 0xc3, 0x28, 0xf6, 0x4d, 0x64, 0x3d, 0x30, 0x2b, 0x80, 0x83, 0x6d, 0xcc, 0xbf, 0x2a, + 0xc0, 0x74, 0xca, 0x7c, 0x9f, 0x79, 0x9c, 0xb7, 0x0e, 0xa4, 0xe7, 0x04, 0x81, 0x17, 0xc8, 0x3b, + 0x70, 0x93, 0xef, 0x65, 0xa6, 0x6a, 0xb3, 0x45, 0x99, 0xc5, 0xe6, 0x00, 0x17, 0x73, 0x5a, 0x98, + 0x7f, 0x5b, 0x80, 0x38, 0xad, 0xa6, 0x6b, 0x8b, 0x0a, 0x27, 0xd6, 0x16, 0xbd, 0x0e, 0xe5, 0x87, + 0xcc, 0x73, 0xb7, 0xe3, 0x0a, 0x24, 0x3d, 0xa1, 0xb7, 0x9a, 0x77, 0xb7, 0x84, 0xa4, 0x96, 0x10, + 0xd2, 0x1f, 0xae, 0x3b, 0xdd, 0x70, 0xb0, 0x4e, 0xe7, 0xd6, 0xaf, 0x48, 0x3a, 0x6a, 0x09, 0xb2, + 0x0c, 0x15, 0x9d, 0xc9, 0x55, 0x01, 0xa2, 0x9e, 0x04, 0x9d, 0xc6, 0xc4, 0x58, 0xc6, 0xfc, 0xe1, + 0x18, 0x94, 0x7f, 0xd2, 0x0a, 0xcd, 0xf7, 0xa1, 0xc4, 0xc4, 0x53, 0xa0, 0x0a, 0x3c, 0x57, 0x46, + 0x4c, 0x0e, 0x73, 0xa8, 0xe4, 0xdb, 0x37, 0xff, 0x46, 0xa5, 0xc2, 0xfc, 0xac, 0x00, 0x53, 0xcf, + 0xb1, 0xb8, 0x7c, 0x37, 0x5d, 0x5c, 0xfe, 0xee, 0x48, 0x43, 0x3b, 0xa1, 0xb0, 0xfc, 0xef, 0xe7, + 0xe3, 0x21, 0xf1, 0x69, 0x25, 0x2e, 0x54, 0xa2, 0x03, 0x1e, 0x25, 0xdc, 0xdf, 0x1d, 0x29, 0x28, + 0x8c, 0x37, 0x65, 0x44, 0x61, 0x18, 0xab, 0x20, 0xd7, 0x00, 0x28, 0xb7, 0x6c, 0x32, 0x1b, 0x37, + 0x96, 0xce, 0x47, 0xaf, 0x69, 0x0e, 0x26, 0xa4, 0x9e, 0x7f, 0xc2, 0x21, 0xff, 0x8a, 0x9e, 0x78, + 0x26, 0x57, 0xf4, 0xe5, 0x33, 0xbf, 0xa2, 0x5f, 0x7e, 0xf6, 0x57, 0x74, 0x22, 0x20, 0x29, 0x8e, + 0x10, 0x90, 0x7c, 0x0c, 0x17, 0xe4, 0x9f, 0x2b, 0x5d, 0xcb, 0xe9, 0xe9, 0xfd, 0xa2, 0x8a, 0x84, + 0xbe, 0x9a, 0x7b, 0x31, 0xd3, 0x80, 0x39, 0x2c, 0xa4, 0x6e, 0x78, 0x3f, 0x6e, 0x19, 0xbf, 0x30, + 0xdf, 0xcf, 0x81, 0xc3, 0x5c, 0x25, 0x59, 0x0f, 0x76, 0xf2, 0x14, 0x1e, 0xec, 0x0f, 0x0a, 0x70, + 0xd1, 0xca, 0xfb, 0x79, 0x98, 0xca, 0x63, 0xdc, 0x1a, 0x29, 0x9e, 0x48, 0x21, 0xaa, 0x78, 0x20, + 0x8f, 0x85, 0xf9, 0x7d, 0x20, 0xaf, 0xc6, 0x21, 0x69, 0x45, 0x6c, 0xaa, 0xfc, 0x60, 0xf2, 0x7b, + 0xd9, 0x54, 0x10, 0x88, 0xd9, 0x6e, 0x8e, 0x6c, 0xb0, 0xcf, 0x20, 0x1d, 0x54, 0x1d, 0x21, 0x1d, + 0x94, 0x09, 0x2f, 0xa6, 0xce, 0x28, 0xbc, 0x70, 0x61, 0xce, 0xe9, 0x59, 0x6d, 0xba, 0xdd, 0xef, + 0x76, 0x65, 0x4e, 0x9b, 0x19, 0xd3, 0x02, 0x3b, 0xb7, 0xb2, 0x93, 0x87, 0x7b, 0x5d, 0x79, 0x3f, + 0xea, 0x67, 0x9e, 0xf8, 0x19, 0x66, 0x23, 0x83, 0x84, 0x03, 0xd8, 0x7c, 0x5b, 0x72, 0xb7, 0x75, + 0x8b, 0x86, 0x7c, 0xb6, 0x45, 0xa6, 0x44, 0xfd, 0x0c, 0xf6, 0x66, 0x4c, 0xc6, 0xa4, 0x0c, 0xb9, + 0x0d, 0x95, 0x96, 0xcb, 0xb6, 0xbd, 0xae, 0x63, 0x1f, 0x8a, 0x74, 0x47, 0xa5, 0xf1, 0x06, 0xb7, + 0x6d, 0xab, 0x5b, 0x4d, 0x49, 0x7c, 0x7c, 0x54, 0xbb, 0x3c, 0xf8, 0x3b, 0xff, 0x25, 0xcd, 0xc7, + 0xb8, 0x3d, 0xd9, 0x14, 0x60, 0xaa, 0xcc, 0x59, 0xa6, 0x36, 0xae, 0x9c, 0xe0, 0x21, 0xaf, 0x6e, + 0x45, 0x55, 0xd9, 0xd3, 0x4a, 0x9d, 0x2a, 0x5e, 0x8e, 0x11, 0xc8, 0x6b, 0x50, 0xf2, 0xdc, 0xb5, + 0x8f, 0x9c, 0xd0, 0x38, 0x9f, 0xce, 0x69, 0xdf, 0x15, 0x54, 0x54, 0x5c, 0x72, 0x0f, 0x2e, 0x85, + 0x61, 0x57, 0x85, 0xb6, 0xf5, 0xbd, 0x90, 0x06, 0x51, 0x29, 0x83, 0x28, 0x47, 0x29, 0x36, 0x5e, + 0x3a, 0x3e, 0xaa, 0x5d, 0xda, 0xd9, 0xb9, 0x93, 0x27, 0x82, 0x27, 0xb5, 0x3d, 0x39, 0xe8, 0x9e, + 0x1f, 0x32, 0xe8, 0x4e, 0xc6, 0x79, 0x17, 0xbe, 0x34, 0xce, 0x1b, 0x88, 0x4b, 0x2f, 0x3e, 0x45, + 0x5c, 0xfa, 0x81, 0x28, 0xd8, 0xb8, 0xb1, 0xa2, 0x62, 0xfa, 0x77, 0x86, 0x4b, 0x25, 0x72, 0x04, + 0xf9, 0x6e, 0x27, 0xfe, 0x44, 0x89, 0x49, 0xb6, 0xe1, 0x82, 0xef, 0xb5, 0x06, 0xc2, 0x5a, 0x11, + 0xc4, 0x27, 0xaa, 0x75, 0xb6, 0x73, 0x64, 0x30, 0xb7, 0xa5, 0xb0, 0xa5, 0x31, 0xdd, 0x30, 0xc4, + 0xc4, 0x48, 0x5b, 0x1a, 0x93, 0x31, 0x29, 0x93, 0x8d, 0xf2, 0x5e, 0x7c, 0x66, 0x51, 0xde, 0xc2, + 0x73, 0x88, 0xf2, 0x5e, 0x7a, 0x7e, 0x51, 0xde, 0xe7, 0x65, 0x98, 0x49, 0xfb, 0xaf, 0x71, 0xad, + 0x54, 0xe1, 0xb4, 0xb5, 0x52, 0xa9, 0x62, 0xa6, 0xb1, 0x67, 0x5a, 0xcc, 0x34, 0x7e, 0xe6, 0xc5, + 0x4c, 0x89, 0xa2, 0xad, 0x89, 0x27, 0x14, 0x6d, 0xd5, 0x61, 0xd6, 0xf6, 0x7a, 0xbe, 0xf8, 0x5d, + 0x84, 0x2a, 0xdd, 0x91, 0xcf, 0xeb, 0xfa, 0x01, 0x73, 0x25, 0xcd, 0xc6, 0xac, 0x3c, 0x61, 0x50, + 0x74, 0x45, 0xc3, 0xd2, 0x08, 0x05, 0x9f, 0xe9, 0x05, 0x13, 0x17, 0xa5, 0xaa, 0xb9, 0xd4, 0x6e, + 0xba, 0x54, 0x2f, 0x75, 0x71, 0x47, 0x63, 0x36, 0x5d, 0x64, 0xc7, 0x8c, 0x8a, 0xd0, 0xff, 0xab, + 0x67, 0xa1, 0x3f, 0x5d, 0xd1, 0xa7, 0x7a, 0x12, 0xbf, 0xe9, 0xa6, 0xb9, 0x98, 0xed, 0x09, 0x09, + 0xe0, 0x05, 0x3f, 0xcf, 0x0d, 0x63, 0xea, 0x55, 0xe9, 0xcb, 0x9c, 0xc1, 0x45, 0xa5, 0xe5, 0x85, + 0x5c, 0x47, 0x8e, 0xe1, 0x09, 0xc8, 0xc9, 0x8a, 0xb0, 0xf2, 0xb3, 0xaa, 0x08, 0x5b, 0x38, 0x94, + 0xc5, 0xa6, 0x27, 0xd6, 0xa9, 0xde, 0x4b, 0xd7, 0x8e, 0xbf, 0x3f, 0xe4, 0xff, 0xfc, 0x12, 0x95, + 0xb3, 0x26, 0x6b, 0x64, 0x7f, 0xab, 0x00, 0x17, 0xf2, 0x96, 0x25, 0xa7, 0x17, 0xcd, 0x74, 0x2f, + 0x46, 0x0b, 0xd7, 0x92, 0xa6, 0xe5, 0xdf, 0x8b, 0x89, 0xe0, 0x30, 0xa4, 0xfe, 0xcf, 0x5e, 0x8e, + 0x87, 0x7a, 0x39, 0x4e, 0xfd, 0xfe, 0xb7, 0xf8, 0x1c, 0x7f, 0xff, 0x5b, 0x1a, 0xe2, 0xf7, 0xbf, + 0x93, 0xcf, 0xf3, 0xf7, 0xbf, 0xe5, 0x53, 0xfe, 0xfe, 0xb7, 0xf2, 0xec, 0x7f, 0xff, 0xfb, 0x45, + 0x01, 0xe6, 0xb2, 0xe5, 0xc8, 0xcf, 0x21, 0x49, 0xb6, 0x9f, 0x4a, 0x92, 0x6d, 0x8c, 0x64, 0xcc, + 0xa3, 0x6e, 0x9f, 0x94, 0x2c, 0x33, 0x7f, 0x5c, 0x80, 0x81, 0x92, 0xeb, 0xe7, 0x90, 0xc7, 0x7a, + 0x98, 0xce, 0x63, 0xad, 0x9d, 0xc9, 0x20, 0x4f, 0xc8, 0x67, 0xfd, 0x4f, 0xce, 0x10, 0xff, 0x4f, + 0xf2, 0x5a, 0x29, 0xd3, 0x36, 0xf6, 0xec, 0x4d, 0x5b, 0x63, 0xe9, 0xd3, 0x2f, 0x16, 0xcf, 0x7d, + 0xf6, 0xc5, 0xe2, 0xb9, 0xcf, 0xbf, 0x58, 0x3c, 0xf7, 0xc9, 0xf1, 0x62, 0xe1, 0xd3, 0xe3, 0xc5, + 0xc2, 0x67, 0xc7, 0x8b, 0x85, 0xcf, 0x8f, 0x17, 0x0b, 0x3f, 0x3e, 0x5e, 0x2c, 0xfc, 0xd1, 0xbf, + 0x2e, 0x9e, 0xfb, 0xb5, 0x72, 0x84, 0xfb, 0xbf, 0x01, 0x00, 0x00, 0xff, 0xff, 0x16, 0xda, 0x52, + 0xff, 0x92, 0x4e, 0x00, 0x00, } func (m *ArchiveStrategy) Marshal() (dAtA []byte, err error) { @@ -2354,9 +2354,9 @@ func (m *CronWorkflowOptions) MarshalToSizedBuffer(dAtA []byte) (int, error) { _ = i var l int _ = l - i -= len(m.CronSchedule) - copy(dAtA[i:], m.CronSchedule) - i = encodeVarintGenerated(dAtA, i, uint64(len(m.CronSchedule))) + i -= len(m.Schedule) + copy(dAtA[i:], m.Schedule) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.Schedule))) i-- dAtA[i] = 0xa return len(dAtA) - i, nil @@ -5401,7 +5401,7 @@ func (m *CronWorkflowOptions) Size() (n int) { } var l int _ = l - l = len(m.CronSchedule) + l = len(m.Schedule) n += 1 + l + sovGenerated(uint64(l)) return n } @@ -6573,7 +6573,7 @@ func (this *CronWorkflowOptions) String() string { return "nil" } s := strings.Join([]string{`&CronWorkflowOptions{`, - `CronSchedule:` + fmt.Sprintf("%v", this.CronSchedule) + `,`, + `Schedule:` + fmt.Sprintf("%v", this.Schedule) + `,`, `}`, }, "") return s @@ -8872,7 +8872,7 @@ func (m *CronWorkflowOptions) Unmarshal(dAtA []byte) error { switch fieldNum { case 1: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field CronSchedule", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field Schedule", wireType) } var stringLen uint64 for shift := uint(0); ; shift += 7 { @@ -8900,7 +8900,7 @@ func (m *CronWorkflowOptions) Unmarshal(dAtA []byte) error { if postIndex > l { return io.ErrUnexpectedEOF } - m.CronSchedule = string(dAtA[iNdEx:postIndex]) + m.Schedule = string(dAtA[iNdEx:postIndex]) iNdEx = postIndex default: iNdEx = preIndex diff --git a/pkg/apis/workflow/v1alpha1/generated.proto b/pkg/apis/workflow/v1alpha1/generated.proto index 2c0b28c00733..8f76944d2047 100644 --- a/pkg/apis/workflow/v1alpha1/generated.proto +++ b/pkg/apis/workflow/v1alpha1/generated.proto @@ -144,8 +144,8 @@ message CronWorkflowList { // CronWorkflowOptions is the schedule of when to run CronWorkflows message CronWorkflowOptions { - // CronSchedule is a schedule to run the Workflow in Cron format - optional string cronSchedule = 1; + // Schedule is a schedule to run the Workflow in Cron format + optional string schedule = 1; } // DAGTask represents a node in the graph during DAG execution diff --git a/pkg/apis/workflow/v1alpha1/openapi_generated.go b/pkg/apis/workflow/v1alpha1/openapi_generated.go index c61454d79011..4618fde1ebc9 100644 --- a/pkg/apis/workflow/v1alpha1/openapi_generated.go +++ b/pkg/apis/workflow/v1alpha1/openapi_generated.go @@ -519,15 +519,15 @@ func schema_pkg_apis_workflow_v1alpha1_CronWorkflowOptions(ref common.ReferenceC Description: "CronWorkflowOptions is the schedule of when to run CronWorkflows", Type: []string{"object"}, Properties: map[string]spec.Schema{ - "cronSchedule": { + "schedule": { SchemaProps: spec.SchemaProps{ - Description: "CronSchedule is a schedule to run the Workflow in Cron format", + Description: "Schedule is a schedule to run the Workflow in Cron format", Type: []string{"string"}, Format: "", }, }, }, - Required: []string{"cronSchedule"}, + Required: []string{"schedule"}, }, }, } diff --git a/workflow/cron/controller.go b/workflow/cron/controller.go index 63599b4235b9..7ace15a3d786 100644 --- a/workflow/cron/controller.go +++ b/workflow/cron/controller.go @@ -5,6 +5,7 @@ import ( "github.com/argoproj/argo/pkg/client/clientset/versioned" "github.com/argoproj/argo/pkg/client/informers/externalversions" "github.com/argoproj/argo/pkg/client/informers/externalversions/workflow/v1alpha1" + "github.com/robfig/cron" log "github.com/sirupsen/logrus" "k8s.io/client-go/kubernetes" "k8s.io/client-go/tools/cache" @@ -13,6 +14,7 @@ import ( // CronController is a controller for cron workflows type CronController struct { + cron *cron.Cron namespace string kubeclientset kubernetes.Interface wfclientset versioned.Interface @@ -32,10 +34,15 @@ func NewCronController( kubeclientset: kubeclientset, wfclientset: wfclientset, namespace: namespace, + cron: cron.New(), } } func (cc *CronController) Run(ctx context.Context) { + + // Get outstanding CronWorkflows + cc.wfcronInformer.Lister().CronWorkflows(cc.namespace).List(nil) + cc.wfcronInformer = cc.newCronWorkflowInformer() cc.addCronWorkflowInformerHandler() From 8fd042d71fc5d4fb7064aba9a70c83acf66741c5 Mon Sep 17 00:00:00 2001 From: Simon Behar Date: Wed, 6 Nov 2019 13:46:19 -0800 Subject: [PATCH 03/44] WIP: Won't work --- workflow/cron/controller.go | 74 +++++++++++++++++++++++++++++++------ 1 file changed, 63 insertions(+), 11 deletions(-) diff --git a/workflow/cron/controller.go b/workflow/cron/controller.go index 7ace15a3d786..c8ad1e65aefa 100644 --- a/workflow/cron/controller.go +++ b/workflow/cron/controller.go @@ -2,23 +2,28 @@ package cron import ( "context" + "github.com/argoproj/argo/pkg/apis/workflow/v1alpha1" "github.com/argoproj/argo/pkg/client/clientset/versioned" "github.com/argoproj/argo/pkg/client/informers/externalversions" - "github.com/argoproj/argo/pkg/client/informers/externalversions/workflow/v1alpha1" + extv1alpha1 "github.com/argoproj/argo/pkg/client/informers/externalversions/workflow/v1alpha1" + "github.com/pkg/errors" "github.com/robfig/cron" log "github.com/sirupsen/logrus" "k8s.io/client-go/kubernetes" "k8s.io/client-go/tools/cache" + "sync" "time" ) // CronController is a controller for cron workflows type CronController struct { - cron *cron.Cron namespace string + cron *cron.Cron + nameEntryIDMap map[string]cron.EntryID kubeclientset kubernetes.Interface wfclientset versioned.Interface - wfcronInformer v1alpha1.CronWorkflowInformer + wfcronInformer extv1alpha1.CronWorkflowInformer + lock sync.Mutex } const ( @@ -31,26 +36,73 @@ func NewCronController( namespace string, ) *CronController { return &CronController{ - kubeclientset: kubeclientset, - wfclientset: wfclientset, - namespace: namespace, - cron: cron.New(), + kubeclientset: kubeclientset, + wfclientset: wfclientset, + namespace: namespace, + cron: cron.New(), + nameEntryIDMap: make(map[string]cron.EntryID), } } func (cc *CronController) Run(ctx context.Context) { - - // Get outstanding CronWorkflows - cc.wfcronInformer.Lister().CronWorkflows(cc.namespace).List(nil) + log.Infof("Starting CronWorkflow controller") cc.wfcronInformer = cc.newCronWorkflowInformer() cc.addCronWorkflowInformerHandler() + // Get outstanding CronWorkflows + err := cc.parseOutstandingCronWorkflows() + if err != nil { + log.Fatalf("Error: %s", err) + } + + cc.cron.Start() + defer cc.cron.Stop() + go cc.wfcronInformer.Informer().Run(ctx.Done()) <-ctx.Done() } +func (cc *CronController) parseOutstandingCronWorkflows() error { + log.Infof("Parsing outstanding CronWorkflows") + + cronWorkflows, err := cc.wfcronInformer.Lister().CronWorkflows(cc.namespace).List(nil) + if err != nil { + return errors.Wrap(err, "Error parsing existing CronWorkflow") + } + + for _, cronWorkflow := range cronWorkflows { + err := cc.parseCronWorkflow(cronWorkflow) + if err != nil { + return errors.Wrap(err, "Error parsing existing CronWorkflow") + } + } + return nil +} + +func (cc *CronController) parseCronWorkflow(cronWorkflow *v1alpha1.CronWorkflow) error { + cc.lock.Lock() + defer cc.lock.Unlock() + + log.Infof("Parsing CronWorkflow %s", cronWorkflow.Name) + + if entryId, ok := cc.nameEntryIDMap[cronWorkflow.Name]; ok { + // The job is currently scheduled, remove it and re add it. + cc.cron.Remove(entryId) + delete(cc.nameEntryIDMap, cronWorkflow.Name) + } + // TODO: this is mostly a place holder. This is most likely not how/where we will be running the workflows + entryId, err := cc.cron.AddFunc(cronWorkflow.Options.Schedule, func() { log.Infof("Would have run %s", cronWorkflow.Name) }) + if err != nil { + return errors.Wrap(err, "Unable to add CronWorkflow") + } + cc.nameEntryIDMap[cronWorkflow.Name] = entryId + + log.Infof("CronWorkflow %s added", cronWorkflow.Name) + return nil +} + func (cc *CronController) addCronWorkflowInformerHandler() { cc.wfcronInformer.Informer().AddEventHandler(cache.ResourceEventHandlerFuncs{ AddFunc: func(obj interface{}) { @@ -65,7 +117,7 @@ func (cc *CronController) addCronWorkflowInformerHandler() { }) } -func (cc *CronController) newCronWorkflowInformer() v1alpha1.CronWorkflowInformer { +func (cc *CronController) newCronWorkflowInformer() extv1alpha1.CronWorkflowInformer { var informerFactory externalversions.SharedInformerFactory informerFactory = externalversions.NewSharedInformerFactory(cc.wfclientset, cronWorkflowResyncPeriod) return informerFactory.Argoproj().V1alpha1().CronWorkflows() From 66ab6286f38bd2cec0e8d461fcb9f255072da0f6 Mon Sep 17 00:00:00 2001 From: Simon Behar Date: Thu, 7 Nov 2019 11:24:34 -0800 Subject: [PATCH 04/44] WIP: Toy now working --- workflow/cron/controller.go | 27 ++++++++++++++++++++++++++- 1 file changed, 26 insertions(+), 1 deletion(-) diff --git a/workflow/cron/controller.go b/workflow/cron/controller.go index c8ad1e65aefa..2cf13ecf1ae5 100644 --- a/workflow/cron/controller.go +++ b/workflow/cron/controller.go @@ -9,6 +9,7 @@ import ( "github.com/pkg/errors" "github.com/robfig/cron" log "github.com/sirupsen/logrus" + "k8s.io/apimachinery/pkg/labels" "k8s.io/client-go/kubernetes" "k8s.io/client-go/tools/cache" "sync" @@ -67,7 +68,7 @@ func (cc *CronController) Run(ctx context.Context) { func (cc *CronController) parseOutstandingCronWorkflows() error { log.Infof("Parsing outstanding CronWorkflows") - cronWorkflows, err := cc.wfcronInformer.Lister().CronWorkflows(cc.namespace).List(nil) + cronWorkflows, err := cc.wfcronInformer.Lister().CronWorkflows(cc.namespace).List(labels.Everything()) if err != nil { return errors.Wrap(err, "Error parsing existing CronWorkflow") } @@ -100,6 +101,10 @@ func (cc *CronController) parseCronWorkflow(cronWorkflow *v1alpha1.CronWorkflow) cc.nameEntryIDMap[cronWorkflow.Name] = entryId log.Infof("CronWorkflow %s added", cronWorkflow.Name) + + log.Infof("SIMON Entries %v", cc.cron.Entries()) + log.Infof("SIMON Entry next %s", cc.cron.Entry(entryId).Next) + return nil } @@ -107,9 +112,29 @@ func (cc *CronController) addCronWorkflowInformerHandler() { cc.wfcronInformer.Informer().AddEventHandler(cache.ResourceEventHandlerFuncs{ AddFunc: func(obj interface{}) { log.Infof("SIMON Adding object: %v", obj) + cronWf, ok := obj.(*v1alpha1.CronWorkflow) + if !ok { + log.Errorf("Error casting object") + return + } + err := cc.parseCronWorkflow(cronWf) + if err != nil { + log.Errorf("Error parsing CronWorkflow %s", cronWf.Name) + return + } }, UpdateFunc: func(old, new interface{}) { log.Infof("SIMON Updating object: %v", new) + cronWf, ok := new.(*v1alpha1.CronWorkflow) + if !ok { + log.Errorf("Error casting object") + return + } + err := cc.parseCronWorkflow(cronWf) + if err != nil { + log.Errorf("Error parsing CronWorkflow %s", cronWf.Name) + return + } }, DeleteFunc: func(obj interface{}) { log.Infof("SIMON Deleting object: %v", obj) From 5d98393ebe2408da9302b0939060e450864fb793 Mon Sep 17 00:00:00 2001 From: Simon Behar Date: Thu, 7 Nov 2019 13:34:55 -0800 Subject: [PATCH 05/44] WIP: Object deletion --- workflow/cron/controller.go | 68 +++++++++++++++++++++++++++---------- 1 file changed, 51 insertions(+), 17 deletions(-) diff --git a/workflow/cron/controller.go b/workflow/cron/controller.go index 2cf13ecf1ae5..c534da167179 100644 --- a/workflow/cron/controller.go +++ b/workflow/cron/controller.go @@ -2,6 +2,7 @@ package cron import ( "context" + "fmt" "github.com/argoproj/argo/pkg/apis/workflow/v1alpha1" "github.com/argoproj/argo/pkg/client/clientset/versioned" "github.com/argoproj/argo/pkg/client/informers/externalversions" @@ -24,7 +25,7 @@ type CronController struct { kubeclientset kubernetes.Interface wfclientset versioned.Interface wfcronInformer extv1alpha1.CronWorkflowInformer - lock sync.Mutex + cronLock sync.Mutex } const ( @@ -74,7 +75,7 @@ func (cc *CronController) parseOutstandingCronWorkflows() error { } for _, cronWorkflow := range cronWorkflows { - err := cc.parseCronWorkflow(cronWorkflow) + err := cc.startCronWorkflow(cronWorkflow) if err != nil { return errors.Wrap(err, "Error parsing existing CronWorkflow") } @@ -82,9 +83,9 @@ func (cc *CronController) parseOutstandingCronWorkflows() error { return nil } -func (cc *CronController) parseCronWorkflow(cronWorkflow *v1alpha1.CronWorkflow) error { - cc.lock.Lock() - defer cc.lock.Unlock() +func (cc *CronController) startCronWorkflow(cronWorkflow *v1alpha1.CronWorkflow) error { + cc.cronLock.Lock() + defer cc.cronLock.Unlock() log.Infof("Parsing CronWorkflow %s", cronWorkflow.Name) @@ -108,36 +109,61 @@ func (cc *CronController) parseCronWorkflow(cronWorkflow *v1alpha1.CronWorkflow) return nil } +func (cc *CronController) stopCronWorkflow(cronWorkflow *v1alpha1.CronWorkflow) error { + cc.cronLock.Lock() + defer cc.cronLock.Unlock() + + entryId, ok := cc.nameEntryIDMap[cronWorkflow.Name] + if !ok { + return fmt.Errorf("unable to remove workflow: workflow %s does not exist", cronWorkflow.Name) + } + + cc.cron.Remove(entryId) + delete(cc.nameEntryIDMap, cronWorkflow.Name) + + log.Infof("CronWorkflow %s removed", cronWorkflow.Name) + return nil + + +} + func (cc *CronController) addCronWorkflowInformerHandler() { cc.wfcronInformer.Informer().AddEventHandler(cache.ResourceEventHandlerFuncs{ AddFunc: func(obj interface{}) { log.Infof("SIMON Adding object: %v", obj) - cronWf, ok := obj.(*v1alpha1.CronWorkflow) - if !ok { - log.Errorf("Error casting object") - return + cronWf, err := convertToWorkflow(obj) + if err != nil { + log.Error(err) } - err := cc.parseCronWorkflow(cronWf) + err = cc.startCronWorkflow(cronWf) if err != nil { - log.Errorf("Error parsing CronWorkflow %s", cronWf.Name) + log.Errorf("Error starting CronWorkflow %s: %s", cronWf.Name, err) return } }, UpdateFunc: func(old, new interface{}) { log.Infof("SIMON Updating object: %v", new) - cronWf, ok := new.(*v1alpha1.CronWorkflow) - if !ok { - log.Errorf("Error casting object") - return + cronWf, err := convertToWorkflow(new) + if err != nil { + log.Error(err) } - err := cc.parseCronWorkflow(cronWf) + err = cc.startCronWorkflow(cronWf) if err != nil { - log.Errorf("Error parsing CronWorkflow %s", cronWf.Name) + log.Errorf("Error starting CronWorkflow %s: %s", cronWf.Name, err) return } }, DeleteFunc: func(obj interface{}) { log.Infof("SIMON Deleting object: %v", obj) + cronWf, err := convertToWorkflow(obj) + if err != nil { + log.Error(err) + } + err = cc.stopCronWorkflow(cronWf) + if err != nil { + log.Errorf("Error stopping CronWorkflow %s: %s", cronWf.Name, err) + return + } }, }) } @@ -147,3 +173,11 @@ func (cc *CronController) newCronWorkflowInformer() extv1alpha1.CronWorkflowInfo informerFactory = externalversions.NewSharedInformerFactory(cc.wfclientset, cronWorkflowResyncPeriod) return informerFactory.Argoproj().V1alpha1().CronWorkflows() } + +func convertToWorkflow(obj interface{}) (*v1alpha1.CronWorkflow, error) { + cronWf, ok := obj.(*v1alpha1.CronWorkflow) + if !ok { + return nil, fmt.Errorf("error casting object") + } + return cronWf, nil +} From c6d65fc76a26477e785be756ce593b7840cda94b Mon Sep 17 00:00:00 2001 From: Simon Behar Date: Mon, 11 Nov 2019 19:43:52 -0800 Subject: [PATCH 06/44] WIP: Trying to make API call --- Gopkg.lock | 31 ++ api/openapi-spec/swagger.json | 7 +- .../workflow/v1alpha1/cron_workflow_types.go | 2 + pkg/apis/workflow/v1alpha1/generated.pb.go | 519 ++++++++++-------- pkg/apis/workflow/v1alpha1/generated.proto | 3 + .../workflow/v1alpha1/openapi_generated.go | 9 +- workflow/cron/controller.go | 58 +- workflow/cron/cron_workflow_job.go | 53 ++ 8 files changed, 410 insertions(+), 272 deletions(-) create mode 100644 workflow/cron/cron_workflow_job.go diff --git a/Gopkg.lock b/Gopkg.lock index e17b6d2c66b2..9228d470c3fd 100644 --- a/Gopkg.lock +++ b/Gopkg.lock @@ -55,6 +55,25 @@ pruneopts = "" revision = "de5bf2ad457846296e2031421a34e2568e304e35" +[[projects]] + branch = "master" + digest = "1:a7f619ffc7b99687f9444bd0a07509fec8ae708a7175d234878129896c0918a8" + name = "github.com/alecthomas/template" + packages = [ + ".", + "parse", + ] + pruneopts = "" + revision = "fb15b899a75114aa79cc930e33c46b577cc664b1" + +[[projects]] + branch = "master" + digest = "1:9d943843b71c5d44f184893fcdbe419bf639fee8647ceeca4c7d4fd95923721c" + name = "github.com/alecthomas/units" + packages = ["."] + pruneopts = "" + revision = "f65c72e2690dc4b403c8bd637baf4611cd4c069b" + [[projects]] branch = "master" digest = "1:52905b00a73cda93a2ce8c5fa35185daed673d59e39576e81ad6ab6fb7076b3c" @@ -561,6 +580,7 @@ packages = [ "expfmt", "internal/bitbucket.org/ww/goautoneg", + "log", "model", ] pruneopts = "" @@ -805,6 +825,8 @@ "cpu", "unix", "windows", + "windows/registry", + "windows/svc/eventlog", ] pruneopts = "" revision = "9109b7679e13aa34a54834cfb4949cac4b96e576" @@ -954,6 +976,14 @@ revision = "6eaf6f47437a6b4e2153a190160ef39a92c7eceb" version = "v1.23.0" +[[projects]] + digest = "1:15d017551627c8bb091bde628215b2861bed128855343fdd570c62d08871f6e1" + name = "gopkg.in/alecthomas/kingpin.v2" + packages = ["."] + pruneopts = "" + revision = "947dcec5ba9c011838740e680966fd7087a71d0d" + version = "v2.2.6" + [[projects]] digest = "1:75fb3fcfc73a8c723efde7777b40e8e8ff9babf30d8c56160d01beffea8a95a6" name = "gopkg.in/inf.v0" @@ -1467,6 +1497,7 @@ "github.com/pkg/errors", "github.com/prometheus/client_golang/prometheus", "github.com/prometheus/client_golang/prometheus/promhttp", + "github.com/prometheus/common/log", "github.com/robfig/cron", "github.com/sirupsen/logrus", "github.com/spf13/cobra", diff --git a/api/openapi-spec/swagger.json b/api/openapi-spec/swagger.json index d294eacdc870..5c96271a685e 100644 --- a/api/openapi-spec/swagger.json +++ b/api/openapi-spec/swagger.json @@ -258,9 +258,14 @@ "description": "CronWorkflowOptions is the schedule of when to run CronWorkflows", "type": "object", "required": [ - "schedule" + "schedule", + "runtimeNamespace" ], "properties": { + "runtimeNamespace": { + "description": "RuntimeNamespace is the namespace where the CronWorkflow will run", + "type": "string" + }, "schedule": { "description": "Schedule is a schedule to run the Workflow in Cron format", "type": "string" diff --git a/pkg/apis/workflow/v1alpha1/cron_workflow_types.go b/pkg/apis/workflow/v1alpha1/cron_workflow_types.go index a62b80e1f800..2b692a49fdc6 100644 --- a/pkg/apis/workflow/v1alpha1/cron_workflow_types.go +++ b/pkg/apis/workflow/v1alpha1/cron_workflow_types.go @@ -27,4 +27,6 @@ type CronWorkflowList struct { type CronWorkflowOptions struct { // Schedule is a schedule to run the Workflow in Cron format Schedule string `json:"schedule" protobuf:"bytes,1,opt,name=schedule"` + // RuntimeNamespace is the namespace where the CronWorkflow will run + RuntimeNamespace string `json:"runtimeNamespace" protobuf:"bytes,2,opt,name=runtimeNamespace"` } diff --git a/pkg/apis/workflow/v1alpha1/generated.pb.go b/pkg/apis/workflow/v1alpha1/generated.pb.go index e96cc4d649d7..f0663f9a259b 100644 --- a/pkg/apis/workflow/v1alpha1/generated.pb.go +++ b/pkg/apis/workflow/v1alpha1/generated.pb.go @@ -1497,15 +1497,15 @@ func init() { } var fileDescriptor_c23edafa7e7ea072 = []byte{ - // 4725 bytes of a gzipped FileDescriptorProto + // 4747 bytes of a gzipped FileDescriptorProto 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xec, 0x5c, 0x4d, 0x6c, 0x1c, 0x57, 0x72, 0xd6, 0x90, 0x9c, 0xe1, 0x4c, 0x0d, 0xff, 0xf4, 0x28, 0x59, 0x6d, 0x5a, 0xe6, 0x68, 0xdb, 0xb0, 0xa3, 0x4d, 0x6c, 0xd2, 0x96, 0x76, 0x13, 0xaf, 0x37, 0xb6, 0x77, 0x86, 0x3f, 0x12, 0x25, 0x91, 0x62, 0x6a, 0x28, 0x29, 0x1b, 0x2f, 0xb2, 0x69, 0xf6, 0x3c, 0xce, 0xb4, 0x38, 0xd3, 0xdd, - 0xee, 0xd7, 0x23, 0x9a, 0xf0, 0x21, 0x4e, 0x90, 0x20, 0x09, 0x82, 0x05, 0x92, 0x4b, 0xb2, 0xc8, - 0x5e, 0x82, 0x1c, 0x92, 0x4b, 0x2e, 0xb9, 0x06, 0xc1, 0x06, 0x08, 0x72, 0x30, 0xf6, 0x12, 0xdf, - 0xe2, 0x43, 0x40, 0xac, 0x99, 0x4b, 0x82, 0x04, 0x08, 0x90, 0x4b, 0x00, 0x9d, 0x82, 0xf7, 0xd3, - 0xaf, 0x7f, 0xa6, 0x69, 0x51, 0x33, 0x94, 0x82, 0xec, 0xee, 0x49, 0xec, 0xaa, 0x7a, 0x5f, 0xbd, + 0xee, 0xd7, 0x23, 0x9a, 0xf0, 0x21, 0x4e, 0x90, 0x20, 0x59, 0x04, 0x0b, 0x24, 0x97, 0x64, 0x91, + 0xbd, 0x04, 0x39, 0x24, 0x97, 0x5c, 0x72, 0x0d, 0x82, 0x0d, 0x10, 0xe4, 0x60, 0xec, 0x25, 0xbe, + 0xc5, 0x87, 0x80, 0x58, 0x33, 0x97, 0x04, 0x09, 0x10, 0x20, 0x97, 0x00, 0x3a, 0x05, 0xef, 0xa7, + 0x5f, 0xff, 0x4c, 0xd3, 0xa2, 0x66, 0x28, 0x05, 0xc9, 0xee, 0x49, 0xec, 0xaa, 0x7a, 0x5f, 0xbd, 0xdf, 0x7a, 0x55, 0xf5, 0x6a, 0x04, 0x2b, 0x6d, 0x27, 0xec, 0xf4, 0x77, 0x97, 0x6c, 0xaf, 0xb7, 0x6c, 0x05, 0x6d, 0xcf, 0x0f, 0xbc, 0x87, 0xe2, 0x8f, 0x65, 0x7f, 0xbf, 0xbd, 0x6c, 0xf9, 0x0e, 0x5b, 0x3e, 0xf0, 0x82, 0xfd, 0xbd, 0xae, 0x77, 0xb0, 0xfc, 0xe8, 0x2d, 0xab, 0xeb, 0x77, 0xac, @@ -1515,28 +1515,28 @@ var fileDescriptor_c23edafa7e7ea072 = []byte{ 0x87, 0xf8, 0x4b, 0xea, 0x58, 0x30, 0xf7, 0xdf, 0x66, 0x4b, 0x8e, 0xc7, 0xbb, 0xb4, 0x6c, 0x7b, 0x01, 0x5d, 0x7e, 0x34, 0xd0, 0x8f, 0x85, 0xaf, 0xc5, 0x32, 0x3d, 0xcb, 0xee, 0x38, 0x2e, 0x0d, 0x0e, 0xe3, 0x71, 0xf4, 0x68, 0x68, 0xe5, 0xb5, 0x5a, 0x3e, 0xa9, 0x55, 0xd0, 0x77, 0x43, 0xa7, - 0x47, 0x07, 0x1a, 0xfc, 0xe2, 0x93, 0x1a, 0x30, 0xbb, 0x43, 0x7b, 0x56, 0xb6, 0x9d, 0xf9, 0x4f, + 0x47, 0x07, 0x1a, 0xfc, 0xe2, 0x93, 0x1a, 0x30, 0xbb, 0x43, 0x7b, 0x56, 0xb6, 0x9d, 0xf9, 0x8f, 0x05, 0x98, 0xad, 0x07, 0x76, 0xc7, 0x79, 0x44, 0x9b, 0x21, 0x67, 0xb4, 0x0f, 0xc9, 0x07, 0x30, 0x1e, 0x5a, 0x81, 0x51, 0xb8, 0x52, 0xb8, 0x5a, 0xbd, 0xf6, 0xad, 0xa5, 0x21, 0x26, 0x72, 0x69, 0xc7, 0x0a, 0x22, 0xb8, 0xc6, 0xe4, 0xf1, 0x51, 0x6d, 0x7c, 0xc7, 0x0a, 0x90, 0xa3, 0x92, 0xef, 0xc2, 0x84, 0xeb, 0xb9, 0xd4, 0x18, 0x13, 0xe8, 0xf5, 0xa1, 0xd0, 0xb7, 0x3c, 0x57, 0xf7, 0xb6, - 0x51, 0x3e, 0x3e, 0xaa, 0x4d, 0x70, 0x0a, 0x0a, 0x60, 0xf3, 0xbf, 0x0a, 0x50, 0xa9, 0x07, 0xed, + 0x51, 0x3e, 0x3e, 0xaa, 0x4d, 0x70, 0x0a, 0x0a, 0x60, 0xf3, 0x3f, 0x0b, 0x50, 0xa9, 0x07, 0xed, 0x7e, 0x8f, 0xba, 0x21, 0x23, 0x01, 0x80, 0x6f, 0x05, 0x56, 0x8f, 0x86, 0x34, 0x60, 0x46, 0xe1, 0xca, 0xf8, 0xd5, 0xea, 0xb5, 0xf7, 0x86, 0x52, 0xba, 0x1d, 0xc1, 0x34, 0xc8, 0xa7, 0x47, 0xb5, 0x73, 0xc7, 0x47, 0x35, 0xd0, 0x24, 0x86, 0x09, 0x2d, 0xc4, 0x85, 0x8a, 0x15, 0x84, 0xce, 0x9e, 0x65, 0x87, 0xcc, 0x18, 0x13, 0x2a, 0xdf, 0x1d, 0x4a, 0x65, 0x5d, 0xa1, 0x34, 0xce, 0x2b, 0x8d, - 0x95, 0x88, 0xc2, 0x30, 0x56, 0x61, 0xfe, 0xc7, 0x38, 0x94, 0x23, 0x06, 0xb9, 0x02, 0x13, 0xae, + 0x95, 0x88, 0xc2, 0x30, 0x56, 0x61, 0xfe, 0xfb, 0x38, 0x94, 0x23, 0x06, 0xb9, 0x02, 0x13, 0xae, 0xd5, 0xa3, 0x62, 0xf5, 0x2a, 0x8d, 0x29, 0xd5, 0x70, 0x62, 0xcb, 0xea, 0xf1, 0x09, 0xb2, 0x7a, 0x94, 0x4b, 0xf8, 0x56, 0xd8, 0x11, 0x2b, 0x90, 0x90, 0xd8, 0xb6, 0xc2, 0x0e, 0x0a, 0x0e, 0xb9, 0x0c, 0x13, 0x3d, 0xaf, 0x45, 0x8d, 0xf1, 0x2b, 0x85, 0xab, 0x45, 0x39, 0xc1, 0x9b, 0x5e, 0x8b, 0xa2, 0xa0, 0xf2, 0xf6, 0x7b, 0x81, 0xd7, 0x33, 0x26, 0xd2, 0xed, 0xd7, 0x03, 0xaf, 0x87, 0x82, - 0x43, 0xfe, 0xb0, 0x00, 0x73, 0x51, 0xf7, 0xee, 0x78, 0xb6, 0x15, 0x3a, 0x9e, 0x6b, 0x14, 0xc5, + 0x43, 0xfe, 0xa0, 0x00, 0x73, 0x51, 0xf7, 0xee, 0x78, 0xb6, 0x15, 0x3a, 0x9e, 0x6b, 0x14, 0xc5, 0x82, 0xaf, 0x8d, 0x34, 0x11, 0x11, 0x58, 0xc3, 0x50, 0x5a, 0xe7, 0xb2, 0x1c, 0x1c, 0x50, 0x4c, 0xae, 0x01, 0xb4, 0xbb, 0xde, 0xae, 0xd5, 0xe5, 0x73, 0x60, 0x94, 0x44, 0xaf, 0xf5, 0x12, 0xde, 0xd0, 0x1c, 0x4c, 0x48, 0x91, 0x7d, 0x98, 0xb4, 0xe4, 0xa9, 0x30, 0x26, 0x45, 0xbf, 0x57, 0x87, 0xec, 0x77, 0xea, 0x64, 0x35, 0xaa, 0xc7, 0x47, 0xb5, 0x49, 0x45, 0xc4, 0x48, 0x03, 0x79, 0x1d, 0xca, 0x9e, 0xcf, 0xbb, 0x6a, 0x75, 0x8d, 0xf2, 0x95, 0xc2, 0xd5, 0x72, 0x63, 0x4e, 0x75, 0xaf, - 0x7c, 0x57, 0xd1, 0x51, 0x4b, 0x98, 0x7f, 0x5a, 0x84, 0x81, 0x51, 0x93, 0xb7, 0xa0, 0xaa, 0xd0, + 0x7c, 0x57, 0xd1, 0x51, 0x4b, 0x98, 0x7f, 0x52, 0x84, 0x81, 0x51, 0x93, 0xb7, 0xa0, 0xaa, 0xd0, 0xee, 0x78, 0x6d, 0x26, 0x16, 0xbf, 0xdc, 0x98, 0x3d, 0x3e, 0xaa, 0x55, 0xeb, 0x31, 0x19, 0x93, 0x32, 0xe4, 0x01, 0x8c, 0xb1, 0xeb, 0xea, 0x18, 0xbe, 0x3f, 0xd4, 0xe8, 0x9a, 0xd7, 0xf5, 0x06, 0x2d, 0x1d, 0x1f, 0xd5, 0xc6, 0x9a, 0xd7, 0x71, 0x8c, 0x5d, 0xe7, 0xe6, 0xa3, 0xed, 0x84, 0x62, @@ -1549,17 +1549,17 @@ var fileDescriptor_c23edafa7e7ea072 = []byte{ 0xb4, 0x0e, 0x90, 0xa3, 0x9a, 0x6d, 0xb8, 0x18, 0x71, 0x90, 0xfa, 0x1e, 0x73, 0xc4, 0x00, 0xe9, 0x1e, 0x59, 0x86, 0x8a, 0xed, 0xb9, 0x7b, 0x4e, 0x7b, 0xd3, 0xf2, 0x95, 0x61, 0xd2, 0x16, 0x6d, 0x25, 0x62, 0x60, 0x2c, 0x43, 0x5e, 0x86, 0xf1, 0x7d, 0x7a, 0xa8, 0x2c, 0x54, 0x55, 0x89, 0x8e, - 0xdf, 0xa6, 0x87, 0xc8, 0xe9, 0xe6, 0x0f, 0x0b, 0x30, 0x9f, 0x33, 0xb9, 0xbc, 0x59, 0x3f, 0xe8, + 0xdf, 0xa6, 0x87, 0xc8, 0xe9, 0xe6, 0x8f, 0x0a, 0x30, 0x9f, 0x33, 0xb9, 0xbc, 0x59, 0x3f, 0xe8, 0x2a, 0x0d, 0xba, 0xd9, 0x3d, 0xbc, 0x83, 0x9c, 0x4e, 0x7e, 0xaf, 0x00, 0xb3, 0x89, 0xd9, 0xae, 0xf7, 0x95, 0x11, 0x1c, 0xfe, 0x74, 0xa7, 0xb0, 0x1a, 0x97, 0x94, 0xc6, 0xd9, 0x0c, 0x03, 0xb3, - 0x5a, 0xcd, 0x7f, 0x16, 0xb7, 0x6e, 0x8a, 0x46, 0x2c, 0x98, 0xe9, 0x33, 0x1a, 0x70, 0x13, 0xdd, + 0x5a, 0xcd, 0x7f, 0x12, 0xb7, 0x6e, 0x8a, 0x46, 0x2c, 0x98, 0xe9, 0x33, 0x1a, 0x70, 0x13, 0xdd, 0xa4, 0x76, 0x40, 0x43, 0x75, 0x01, 0xbf, 0xba, 0x24, 0xaf, 0x76, 0xde, 0x8b, 0x25, 0xee, 0x65, 0x2c, 0x3d, 0x7a, 0x6b, 0x49, 0x4a, 0xdc, 0xa6, 0x87, 0x4d, 0xda, 0xa5, 0x1c, 0xa3, 0x41, 0x8e, 0x8f, 0x6a, 0x33, 0xf7, 0x52, 0x00, 0x98, 0x01, 0xe4, 0x2a, 0x7c, 0x8b, 0xb1, 0x03, 0x2f, 0x68, 0x29, 0x15, 0x63, 0x4f, 0xad, 0x62, 0x3b, 0x05, 0x80, 0x19, 0x40, 0xf3, 0xdb, 0x00, 0x2b, 0x9e, 0x1b, 0x3a, 0x6e, 0x9f, 0xde, 0x75, 0xc9, 0x2b, 0x50, 0xa4, 0x41, 0xe0, 0x05, 0xca, 0x20, 0x4d, 0xab, 0x09, 0x2a, 0xae, 0x71, 0x22, 0x4a, 0x1e, 0x79, 0x0d, 0x4a, 0x7b, 0x96, 0xd3, 0xa5, 0x2d, - 0xd1, 0x9b, 0x72, 0x63, 0x46, 0x49, 0x95, 0xd6, 0x05, 0x15, 0x15, 0xd7, 0xfc, 0xd1, 0x18, 0x4c, + 0xd1, 0x9b, 0x72, 0x63, 0x46, 0x49, 0x95, 0xd6, 0x05, 0x15, 0x15, 0xd7, 0xfc, 0xf1, 0x18, 0x4c, 0xad, 0x04, 0x9e, 0xfb, 0x40, 0x2d, 0x04, 0xf9, 0x0d, 0x28, 0x73, 0xff, 0xa9, 0x65, 0x85, 0x96, 0x9a, 0xab, 0x37, 0x13, 0x03, 0xd1, 0x6e, 0x50, 0xbc, 0x84, 0x5c, 0x9a, 0x0f, 0xed, 0xee, 0xee, 0x43, 0x6a, 0x87, 0x9b, 0x34, 0xb4, 0xe2, 0x8b, 0x20, 0xa6, 0xa1, 0x46, 0x25, 0x36, 0x4c, 0x30, @@ -1568,232 +1568,233 @@ var fileDescriptor_c23edafa7e7ea072 = []byte{ 0xd6, 0x98, 0x55, 0xea, 0x26, 0x15, 0x01, 0x23, 0x4d, 0xe6, 0xe7, 0x05, 0x98, 0x4b, 0xb6, 0xb8, 0xe3, 0xb0, 0x90, 0x7c, 0x67, 0x60, 0x42, 0x97, 0x4e, 0x37, 0xa1, 0xbc, 0xb5, 0x98, 0x4e, 0x7d, 0x71, 0x45, 0x94, 0xc4, 0x64, 0xee, 0x41, 0xd1, 0x09, 0x69, 0x2f, 0x72, 0x89, 0xea, 0x23, 0x8f, - 0x32, 0xde, 0x4f, 0x1b, 0x1c, 0x17, 0x25, 0xbc, 0xb9, 0x02, 0xf3, 0x39, 0x73, 0xc1, 0x6f, 0x59, - 0xee, 0x03, 0xb7, 0xfa, 0xdd, 0xc8, 0x39, 0xd2, 0x9d, 0x6d, 0x2a, 0x3a, 0x6a, 0x09, 0xf3, 0xcf, - 0x4a, 0x30, 0xb9, 0x5a, 0xbf, 0xb1, 0x63, 0xb1, 0xfd, 0x53, 0xb8, 0x54, 0xaf, 0x43, 0x39, 0xa4, - 0x3d, 0xbf, 0x6b, 0x85, 0x54, 0x19, 0x2d, 0x8d, 0xbd, 0xa3, 0xe8, 0xa8, 0x25, 0x88, 0xc7, 0xfd, - 0x43, 0xe5, 0xa0, 0xaa, 0x25, 0x7f, 0x6f, 0x48, 0x03, 0xa4, 0x50, 0x92, 0x0e, 0xa2, 0x22, 0x61, - 0xac, 0x83, 0x30, 0xa8, 0x46, 0xca, 0x91, 0xee, 0xa9, 0xbb, 0x73, 0x48, 0xc7, 0x3e, 0xc6, 0x91, - 0x77, 0x59, 0x82, 0x80, 0x49, 0x2d, 0xe4, 0x6b, 0x30, 0xd5, 0xa2, 0x3e, 0x75, 0x5b, 0xd4, 0xb5, - 0x1d, 0xca, 0x8c, 0xe2, 0x95, 0x71, 0x3e, 0x2f, 0xc7, 0x47, 0xb5, 0xa9, 0xd5, 0x04, 0x1d, 0x53, - 0x52, 0xe4, 0x21, 0x54, 0x0e, 0x9c, 0xb0, 0x23, 0x16, 0xd4, 0x28, 0x89, 0x8d, 0xf2, 0x8d, 0xa1, - 0x3a, 0xca, 0x11, 0xe2, 0x69, 0x79, 0x10, 0x61, 0x62, 0x0c, 0xcf, 0xaf, 0x25, 0xfe, 0x21, 0xbc, - 0x78, 0x71, 0x25, 0x56, 0xd2, 0x0d, 0x04, 0x03, 0x63, 0x19, 0xc2, 0x60, 0x8a, 0x7f, 0x34, 0xe9, - 0x87, 0x7d, 0xea, 0xda, 0x54, 0x38, 0x6b, 0xc3, 0xfa, 0xf6, 0x11, 0x88, 0x9c, 0x91, 0x07, 0x09, - 0x58, 0x4c, 0x29, 0xe1, 0xbb, 0xef, 0xa0, 0x43, 0x5d, 0xa3, 0x92, 0xde, 0x7d, 0x0f, 0x3a, 0xd4, - 0x45, 0xc1, 0x21, 0x1e, 0x80, 0xad, 0x6d, 0xae, 0x01, 0x23, 0x78, 0x74, 0xb1, 0xe9, 0x6e, 0xcc, - 0x70, 0xa3, 0x18, 0x7f, 0x63, 0x42, 0x85, 0xf9, 0x0f, 0x05, 0xa8, 0xf2, 0xc3, 0x11, 0x6d, 0xe8, - 0xd7, 0xa0, 0x14, 0x5a, 0x41, 0x5b, 0x5d, 0x59, 0x95, 0xd8, 0x82, 0xef, 0x08, 0x2a, 0x2a, 0x2e, - 0xb1, 0xa0, 0x18, 0x5a, 0x6c, 0x3f, 0xb2, 0x00, 0xbf, 0x3c, 0x54, 0x1f, 0xd5, 0xa9, 0x8c, 0x0f, - 0x3f, 0xff, 0x62, 0x28, 0x91, 0xc9, 0x55, 0x28, 0xf3, 0xeb, 0x62, 0xdd, 0x62, 0xd2, 0x03, 0x2d, - 0x37, 0xa6, 0xf8, 0x29, 0x5c, 0x57, 0x34, 0xd4, 0x5c, 0xf3, 0x3b, 0x30, 0xb3, 0xf6, 0x11, 0xb5, - 0xfb, 0xa1, 0x17, 0x48, 0x1f, 0x84, 0xdc, 0x02, 0xc2, 0x68, 0xf0, 0xc8, 0xb1, 0x69, 0xdd, 0xb6, - 0xbd, 0xbe, 0x1b, 0x6e, 0xc5, 0xa7, 0x7e, 0x41, 0x69, 0x23, 0xcd, 0x01, 0x09, 0xcc, 0x69, 0x65, - 0xfe, 0xf5, 0x04, 0x54, 0x13, 0x5e, 0x2c, 0x5f, 0xc5, 0x80, 0xfa, 0x5e, 0xd6, 0x86, 0x70, 0x3f, - 0x09, 0x05, 0x87, 0xdb, 0x90, 0x80, 0x3e, 0x72, 0x18, 0x8f, 0x95, 0x32, 0x36, 0x04, 0x15, 0x1d, - 0xb5, 0x04, 0xa9, 0x41, 0xb1, 0x45, 0xfd, 0xb0, 0x23, 0x06, 0x39, 0xd1, 0xa8, 0xf0, 0x89, 0x58, - 0xe5, 0x04, 0x94, 0x74, 0x2e, 0xb0, 0x47, 0x43, 0xbb, 0x63, 0x4c, 0x88, 0x73, 0x27, 0x04, 0xd6, - 0x39, 0x01, 0x25, 0x3d, 0xc7, 0xdf, 0x28, 0x3e, 0x7b, 0x7f, 0xa3, 0x74, 0xc6, 0xfe, 0x06, 0xf1, - 0x61, 0x9e, 0xb1, 0xce, 0x76, 0xe0, 0x3c, 0xb2, 0x42, 0x2a, 0x1a, 0x0b, 0x3d, 0x93, 0x4f, 0xa3, - 0xe7, 0xd2, 0xf1, 0x51, 0x6d, 0xbe, 0xd9, 0xbc, 0x99, 0x45, 0xc1, 0x3c, 0x68, 0xd2, 0x84, 0x8b, - 0x8e, 0xcb, 0xa8, 0xdd, 0x0f, 0xe8, 0x46, 0xdb, 0xf5, 0x02, 0x7a, 0xd3, 0x63, 0x1c, 0x4e, 0x85, - 0x6e, 0x2f, 0xab, 0x45, 0xbb, 0xb8, 0x91, 0x27, 0x84, 0xf9, 0x6d, 0xcd, 0x1f, 0x15, 0x60, 0x2a, - 0xe9, 0xb8, 0x13, 0x06, 0xd0, 0x59, 0x5d, 0x6f, 0xca, 0x9d, 0xa9, 0x2e, 0xe3, 0xf7, 0x87, 0x8e, - 0x07, 0x24, 0x4c, 0xec, 0xec, 0xc4, 0x34, 0x4c, 0xa8, 0x39, 0x45, 0x66, 0xe0, 0x15, 0x28, 0xee, - 0x79, 0x81, 0x4d, 0xd5, 0xd9, 0xd2, 0x67, 0x70, 0x9d, 0x13, 0x51, 0xf2, 0xcc, 0x7f, 0x2b, 0x40, - 0x42, 0x03, 0xf9, 0x4d, 0x98, 0xe6, 0x3a, 0x6e, 0x07, 0xbb, 0xa9, 0xd1, 0x34, 0x86, 0x1e, 0x8d, - 0x46, 0x6a, 0x5c, 0x54, 0xfa, 0xa7, 0x53, 0x64, 0x4c, 0xeb, 0x23, 0xbf, 0x00, 0x15, 0xab, 0xd5, - 0x0a, 0x28, 0x63, 0x54, 0x9a, 0x9e, 0x4a, 0x63, 0x5a, 0xdc, 0x95, 0x11, 0x11, 0x63, 0x3e, 0x3f, - 0x86, 0x3c, 0x52, 0xe2, 0x3b, 0x5b, 0x0c, 0x32, 0x71, 0x0c, 0xb9, 0x12, 0x4e, 0x47, 0x2d, 0x61, - 0x7e, 0x6f, 0x02, 0xd2, 0xba, 0x49, 0x0b, 0x66, 0xf7, 0x83, 0xdd, 0x95, 0x15, 0xcb, 0xee, 0x0c, - 0xe5, 0xc7, 0xcf, 0xf3, 0x00, 0xe2, 0x76, 0x1a, 0x01, 0xb3, 0x90, 0x4a, 0xcb, 0x6d, 0x7a, 0x18, - 0x5a, 0xbb, 0xc3, 0xb8, 0xf2, 0x91, 0x96, 0x24, 0x02, 0x66, 0x21, 0xc9, 0xd7, 0xa1, 0xba, 0x1f, - 0xec, 0x46, 0x87, 0x5c, 0x4d, 0xc7, 0xbc, 0x9a, 0x8e, 0xea, 0xed, 0x98, 0x85, 0x49, 0x39, 0x3e, - 0x85, 0xfb, 0xc1, 0x2e, 0x52, 0xab, 0x1b, 0x25, 0x89, 0xf4, 0x14, 0xde, 0x56, 0x74, 0xd4, 0x12, - 0xc4, 0x07, 0xb2, 0x1f, 0xcd, 0x9e, 0x0e, 0x06, 0x95, 0x2d, 0xba, 0x9a, 0x37, 0x1a, 0x2d, 0x94, - 0x1c, 0xd0, 0x0b, 0xdc, 0x36, 0xdf, 0x1e, 0xc0, 0xc1, 0x1c, 0x6c, 0xf2, 0x6d, 0xb8, 0xb4, 0x1f, - 0xec, 0x2a, 0x43, 0xbe, 0x1d, 0x38, 0xae, 0xed, 0xf8, 0xa9, 0xec, 0x50, 0x4d, 0x75, 0xf7, 0xd2, - 0xed, 0x7c, 0x31, 0x3c, 0xa9, 0xbd, 0xf9, 0x06, 0x4c, 0x25, 0xb3, 0x0b, 0x4f, 0x88, 0x48, 0xcd, - 0xff, 0x2c, 0x40, 0x69, 0xc3, 0xf5, 0xfb, 0x3f, 0x25, 0x89, 0xca, 0xbf, 0x98, 0x80, 0x09, 0xee, - 0x7a, 0x91, 0xab, 0x30, 0x11, 0x1e, 0xfa, 0xf2, 0x6e, 0x1d, 0x6f, 0x5c, 0x88, 0x0c, 0xcd, 0xce, - 0xa1, 0x4f, 0x1f, 0xab, 0x7f, 0x51, 0x48, 0x90, 0xf7, 0xa0, 0xe4, 0xf6, 0x7b, 0xf7, 0xad, 0xae, - 0x32, 0x4a, 0xaf, 0x45, 0xae, 0xc5, 0x96, 0xa0, 0x3e, 0x3e, 0xaa, 0x5d, 0xa0, 0xae, 0xed, 0xb5, - 0x1c, 0xb7, 0xbd, 0xfc, 0x90, 0x79, 0xee, 0xd2, 0x56, 0xbf, 0xb7, 0x4b, 0x03, 0x54, 0xad, 0xc8, - 0x57, 0x61, 0x72, 0xd7, 0xf3, 0xba, 0x1c, 0x40, 0x9a, 0x2c, 0x1d, 0x12, 0x35, 0x24, 0x19, 0x23, - 0x3e, 0xf7, 0x62, 0x58, 0x18, 0x70, 0xc9, 0x89, 0xb4, 0x17, 0xd3, 0x14, 0x54, 0x54, 0x5c, 0xd2, - 0x83, 0x52, 0xcf, 0xf2, 0xb9, 0x5c, 0x51, 0x4c, 0xd9, 0xda, 0xd0, 0xfe, 0xe9, 0xd2, 0xa6, 0xc0, - 0x59, 0x73, 0xc3, 0xe0, 0x30, 0x56, 0x27, 0x89, 0xa8, 0x94, 0x10, 0x07, 0x26, 0xbb, 0x0e, 0x0b, - 0xb9, 0xbe, 0xd2, 0x08, 0xbb, 0x82, 0xeb, 0xbb, 0x6f, 0x75, 0xfb, 0x34, 0x9e, 0x81, 0x3b, 0x12, - 0x16, 0x23, 0xfc, 0x85, 0x43, 0xa8, 0x26, 0x7a, 0x44, 0xe6, 0x64, 0x16, 0x46, 0x6c, 0x5e, 0x91, - 0x78, 0x21, 0x3b, 0x50, 0x7c, 0xc4, 0x31, 0x94, 0xb1, 0x19, 0xb1, 0x27, 0x28, 0xc1, 0xde, 0x19, - 0x7b, 0xbb, 0xf0, 0x4e, 0xf9, 0xfb, 0x7f, 0x5e, 0x3b, 0xf7, 0xc9, 0xbf, 0x5c, 0x39, 0x67, 0xfe, - 0xe3, 0x38, 0x54, 0xb4, 0xc8, 0xff, 0xef, 0x9d, 0x12, 0x64, 0x76, 0xca, 0xad, 0xd1, 0xe6, 0xeb, - 0x54, 0xdb, 0xa5, 0x9e, 0xde, 0x2e, 0x53, 0x8d, 0x9f, 0x4b, 0x2c, 0xf5, 0xe3, 0xa3, 0x9a, 0x91, - 0x9e, 0x04, 0xb4, 0x0e, 0x36, 0x29, 0x63, 0x56, 0x9b, 0xc6, 0xdb, 0xe0, 0x1b, 0x4f, 0xda, 0x06, - 0x17, 0x92, 0xdb, 0xa0, 0x92, 0xbf, 0x8c, 0x9f, 0x8c, 0x43, 0x79, 0x33, 0x0a, 0xfd, 0x7f, 0xb7, - 0x00, 0x55, 0xcb, 0x75, 0xbd, 0xd0, 0x92, 0x79, 0x0e, 0x69, 0xde, 0xb6, 0x86, 0x9a, 0x8e, 0x08, - 0x74, 0xa9, 0x1e, 0x03, 0xca, 0x29, 0xd1, 0x37, 0x53, 0x82, 0x83, 0x49, 0xbd, 0xe4, 0x43, 0x28, - 0x75, 0xad, 0x5d, 0xda, 0x8d, 0xac, 0xdd, 0xc6, 0x68, 0x3d, 0xb8, 0x23, 0xb0, 0x32, 0xeb, 0x21, - 0x89, 0xa8, 0x14, 0x2d, 0xbc, 0x07, 0x73, 0xd9, 0x8e, 0x3e, 0xcd, 0x8c, 0xf2, 0xc5, 0x48, 0xa8, - 0x79, 0x9a, 0xa6, 0xe6, 0xdf, 0x55, 0x00, 0xb6, 0xbc, 0x16, 0x6d, 0x86, 0x56, 0xd8, 0x67, 0x64, - 0x01, 0xc6, 0x9c, 0x96, 0xba, 0x8a, 0x40, 0xf5, 0x76, 0x6c, 0x63, 0x15, 0xc7, 0x9c, 0x96, 0x4e, - 0x71, 0x8c, 0x9d, 0x98, 0xe2, 0xf8, 0x3a, 0x54, 0x5b, 0x0e, 0xf3, 0xbb, 0xd6, 0xe1, 0x56, 0x8e, - 0x2f, 0xb0, 0x1a, 0xb3, 0x30, 0x29, 0x47, 0x5e, 0x57, 0xe7, 0x57, 0x1e, 0x14, 0x23, 0x73, 0x7e, - 0xcb, 0xbc, 0x7b, 0x89, 0x33, 0xfc, 0x36, 0x4c, 0x45, 0x29, 0x04, 0xa1, 0xa5, 0x28, 0x5a, 0x45, - 0xa7, 0x7e, 0x6a, 0x27, 0xc1, 0xc3, 0x94, 0x64, 0x36, 0xc5, 0x51, 0x7a, 0x2e, 0x29, 0x8e, 0x55, - 0x98, 0x63, 0xa1, 0x17, 0xd0, 0x56, 0x24, 0xb1, 0xb1, 0x6a, 0x90, 0xd4, 0x40, 0xe7, 0x9a, 0x19, - 0x3e, 0x0e, 0xb4, 0x20, 0xdb, 0x70, 0x21, 0xea, 0x44, 0x72, 0x80, 0xc6, 0xbc, 0x40, 0xba, 0xac, - 0x90, 0x2e, 0x3c, 0xc8, 0x91, 0xc1, 0xdc, 0x96, 0xe4, 0x4d, 0x28, 0xfa, 0x1d, 0x8b, 0x51, 0x95, - 0xd4, 0x88, 0x62, 0xd7, 0xe2, 0x36, 0x27, 0x3e, 0x3e, 0xaa, 0x55, 0xf8, 0xb4, 0x8b, 0x0f, 0x94, - 0x82, 0xe4, 0x1a, 0xc0, 0xae, 0xd7, 0x77, 0x5b, 0x56, 0x70, 0xb8, 0xb1, 0x2a, 0x22, 0x99, 0xc4, - 0x1b, 0x59, 0x43, 0x73, 0x30, 0x21, 0xc5, 0x0d, 0x66, 0x4f, 0x9a, 0x0e, 0x95, 0x9b, 0xd0, 0x06, - 0x53, 0x5b, 0x14, 0xc5, 0x27, 0x1f, 0x40, 0x85, 0x85, 0x56, 0x10, 0xd2, 0x56, 0x3d, 0x54, 0x09, - 0x8a, 0x9f, 0x3f, 0x5d, 0x66, 0x71, 0xc7, 0xe9, 0xd1, 0xd8, 0xab, 0x68, 0x46, 0x20, 0x18, 0xe3, - 0x91, 0x5f, 0x07, 0xd8, 0x73, 0x5c, 0x87, 0x75, 0x04, 0x7a, 0xf5, 0xa9, 0xd1, 0xf5, 0x38, 0xd7, - 0x35, 0x0a, 0x26, 0x10, 0x79, 0xcc, 0xe3, 0x7b, 0xad, 0x8d, 0x6d, 0x63, 0x4a, 0x8c, 0x52, 0xc7, - 0x3c, 0xdb, 0x9c, 0x88, 0x92, 0x47, 0xae, 0x42, 0xb9, 0x65, 0xd1, 0x9e, 0xe7, 0xd2, 0x96, 0x31, - 0x1d, 0xe7, 0x1d, 0x56, 0x15, 0x0d, 0x35, 0x97, 0x7c, 0x17, 0x4a, 0x8e, 0x70, 0xf9, 0x8c, 0x19, - 0xd1, 0xd5, 0x6f, 0x0e, 0x77, 0x29, 0x08, 0x88, 0x06, 0x70, 0x8b, 0x23, 0xff, 0x46, 0x05, 0x4b, - 0x6c, 0x98, 0xf4, 0xfa, 0xa1, 0xd0, 0x30, 0x2b, 0x34, 0x0c, 0x97, 0x67, 0xb9, 0x2b, 0x31, 0xe4, - 0x9b, 0xa5, 0xfa, 0xc0, 0x08, 0x99, 0x8f, 0xd7, 0xee, 0x38, 0xdd, 0x56, 0x40, 0x5d, 0x63, 0x4e, - 0x84, 0x54, 0x62, 0xbc, 0x2b, 0x8a, 0x86, 0x9a, 0x4b, 0x7e, 0x09, 0xa6, 0xbd, 0x7e, 0x28, 0xf6, - 0x0d, 0xdf, 0x76, 0xcc, 0x38, 0x2f, 0xc4, 0xcf, 0xf3, 0xb0, 0xed, 0x6e, 0x92, 0x81, 0x69, 0x39, - 0x73, 0x06, 0xa6, 0x92, 0x0f, 0xfd, 0xe6, 0x1f, 0x8f, 0x41, 0xd4, 0x8f, 0x9f, 0x06, 0x6f, 0x99, - 0x98, 0x50, 0x0a, 0x28, 0xeb, 0x77, 0x43, 0x65, 0x6c, 0xc5, 0x5a, 0xa3, 0xa0, 0xa0, 0xe2, 0x98, - 0x07, 0x30, 0xcd, 0x7b, 0xdb, 0xed, 0xd2, 0x6e, 0x33, 0xa4, 0x3e, 0x23, 0x7b, 0x50, 0x64, 0xfc, - 0x0f, 0x35, 0x27, 0x23, 0x3e, 0x59, 0x84, 0xd4, 0x8f, 0xf7, 0xbb, 0x50, 0x80, 0x12, 0xde, 0xfc, - 0x93, 0x31, 0xa8, 0xe8, 0x79, 0x3a, 0x45, 0x86, 0xfc, 0x55, 0x98, 0x6c, 0xd1, 0x3d, 0x8b, 0x8f, - 0x46, 0xbd, 0xea, 0xf1, 0x6d, 0xb5, 0x2a, 0x49, 0x18, 0xf1, 0x48, 0x2d, 0xba, 0xcc, 0xe4, 0x90, - 0x45, 0xd6, 0x2a, 0xe9, 0x2b, 0x92, 0x7d, 0xa8, 0x88, 0x3f, 0xd6, 0xa3, 0x0a, 0x84, 0x61, 0xd7, - 0xfd, 0x7e, 0x84, 0x22, 0x73, 0x01, 0xfa, 0x13, 0x63, 0xfc, 0x4c, 0xe5, 0x40, 0xf1, 0x34, 0x95, - 0x03, 0xe6, 0x3a, 0x70, 0xc3, 0x70, 0x63, 0x85, 0xbc, 0x0b, 0x65, 0xa6, 0xb6, 0xae, 0x9a, 0x97, - 0xaf, 0xe8, 0xf7, 0x06, 0x45, 0x7f, 0x7c, 0x54, 0x9b, 0x16, 0xc2, 0x11, 0x01, 0x75, 0x13, 0x73, - 0x19, 0xaa, 0x89, 0x97, 0x56, 0x3e, 0xc3, 0xfa, 0x59, 0x26, 0x31, 0xc3, 0xab, 0x56, 0x68, 0xa1, - 0xe0, 0x98, 0x8f, 0xc7, 0x60, 0x0e, 0x29, 0xf3, 0xfa, 0x81, 0x4d, 0x93, 0x99, 0x59, 0xcb, 0x16, - 0xe5, 0x17, 0x99, 0xcc, 0x6c, 0x5d, 0x50, 0x51, 0x71, 0xc9, 0x37, 0x61, 0xba, 0x47, 0x83, 0xb6, - 0x3e, 0x6c, 0x6a, 0x91, 0x74, 0x7e, 0x65, 0x33, 0xc9, 0xc4, 0xb4, 0x2c, 0x8f, 0xf7, 0x7b, 0x96, - 0xeb, 0xec, 0x51, 0x16, 0x66, 0x53, 0x26, 0x9b, 0x8a, 0x8e, 0x5a, 0x82, 0xdc, 0x80, 0xf3, 0x8c, - 0x86, 0x77, 0x0f, 0x5c, 0x1a, 0x20, 0xdd, 0xa3, 0x81, 0xc8, 0xa4, 0x4f, 0x08, 0x93, 0xf9, 0xa2, - 0x6a, 0x76, 0xbe, 0x99, 0x15, 0xc0, 0xc1, 0x36, 0xe2, 0xf6, 0xed, 0xdb, 0x36, 0x65, 0x6c, 0xc5, - 0x73, 0x5b, 0x8e, 0x2e, 0x32, 0x49, 0xde, 0xbe, 0x19, 0x3e, 0x0e, 0xb4, 0xe0, 0x28, 0x7b, 0x96, - 0xd3, 0xed, 0x07, 0x34, 0x46, 0x29, 0xa5, 0x51, 0xd6, 0x33, 0x7c, 0x1c, 0x68, 0x61, 0xbe, 0x09, - 0xd3, 0x48, 0xc3, 0xe0, 0x50, 0xcf, 0x49, 0x0d, 0x8a, 0x5d, 0xa7, 0xe7, 0xc8, 0xe4, 0x4f, 0x51, - 0x6e, 0xe4, 0x3b, 0x9c, 0x80, 0x92, 0x6e, 0x7e, 0xbf, 0x00, 0x10, 0x17, 0x50, 0x90, 0x7d, 0x28, - 0xb3, 0xeb, 0x8d, 0xbe, 0xbd, 0xaf, 0xf3, 0x45, 0x43, 0x3e, 0x2b, 0x28, 0x90, 0xc4, 0xe3, 0x96, - 0xa2, 0xa0, 0x56, 0xf0, 0xa4, 0xe7, 0xf5, 0xbf, 0x19, 0x07, 0xdd, 0x8a, 0x2f, 0x2e, 0x75, 0x5b, - 0xbe, 0xe7, 0xb8, 0x61, 0xf6, 0xd9, 0x6c, 0x4d, 0xd1, 0x51, 0x4b, 0xf0, 0xfd, 0xb6, 0x2b, 0x07, - 0x31, 0x96, 0xde, 0x6f, 0xaa, 0x0f, 0x8a, 0xcb, 0xe5, 0x02, 0xda, 0xe6, 0x73, 0x3d, 0x9e, 0x96, - 0x43, 0x41, 0x45, 0xc5, 0xe5, 0xd7, 0x4c, 0x94, 0x30, 0x55, 0x7b, 0x44, 0x5c, 0x33, 0x51, 0x6e, - 0x15, 0x35, 0x97, 0x74, 0x60, 0xd6, 0x12, 0x4b, 0x1b, 0x27, 0x81, 0x9f, 0x2a, 0x9f, 0x1d, 0x3f, - 0xde, 0xa7, 0x51, 0x30, 0x0b, 0xcb, 0x35, 0xb1, 0xb8, 0xf9, 0xd3, 0xa7, 0xb5, 0xb5, 0xa6, 0x66, - 0x1a, 0x05, 0xb3, 0xb0, 0xdc, 0xc3, 0x0a, 0xbc, 0x2e, 0xad, 0xe3, 0x96, 0xf2, 0xe4, 0xb4, 0x87, - 0x85, 0x92, 0x8c, 0x11, 0xdf, 0xfc, 0xfd, 0x02, 0xcc, 0x34, 0xed, 0xc0, 0xf1, 0x43, 0x7d, 0xf6, - 0xb7, 0x44, 0xd5, 0x45, 0x68, 0x71, 0xdf, 0x47, 0xed, 0xa9, 0x97, 0x4f, 0xc8, 0xa7, 0x49, 0xa1, - 0x54, 0x51, 0x86, 0x24, 0x61, 0x0c, 0x21, 0xa2, 0x5e, 0x61, 0x5d, 0xb2, 0x6b, 0xdb, 0x14, 0x54, - 0x54, 0x5c, 0xf3, 0x07, 0x05, 0x28, 0xeb, 0xd7, 0xab, 0x57, 0xa0, 0x28, 0x1e, 0x45, 0xd4, 0xde, - 0xd1, 0x97, 0xc9, 0x0a, 0x27, 0xa2, 0xe4, 0x71, 0x21, 0xe1, 0xce, 0x29, 0xe0, 0xc4, 0x8d, 0x63, - 0x05, 0x21, 0x4a, 0x1e, 0xdf, 0xb4, 0xd4, 0x6d, 0xa9, 0xfd, 0xa2, 0x37, 0xed, 0x9a, 0xdb, 0x42, - 0x4e, 0x17, 0x55, 0x04, 0x5e, 0xd0, 0xb3, 0xc2, 0x6c, 0x4c, 0xbe, 0x2e, 0xa8, 0xa8, 0xb8, 0xe6, - 0x79, 0x98, 0x6d, 0xf6, 0x99, 0x4f, 0x5d, 0xed, 0x82, 0x9b, 0xd3, 0x50, 0x4d, 0xd4, 0x2b, 0x9a, - 0xff, 0x7d, 0x09, 0xf4, 0xab, 0xed, 0xcf, 0xde, 0x7e, 0x87, 0x0a, 0x8c, 0x6c, 0xed, 0xe3, 0x16, - 0x47, 0xf7, 0x71, 0xf5, 0x4a, 0x66, 0xfc, 0xdc, 0x76, 0xec, 0xe7, 0x96, 0xce, 0xc0, 0xcf, 0x8d, - 0x6b, 0x25, 0xb2, 0xbe, 0xee, 0x1f, 0x14, 0x60, 0xca, 0xe5, 0x71, 0xb4, 0x3a, 0xc1, 0xc6, 0xa4, - 0xf0, 0xad, 0xee, 0x8e, 0x34, 0x89, 0x4b, 0x5b, 0x09, 0x44, 0x99, 0x42, 0xd0, 0x71, 0x6e, 0x92, - 0x85, 0x29, 0xd5, 0x64, 0x1d, 0xca, 0xd6, 0x1e, 0x0f, 0x4e, 0xc2, 0x43, 0xf5, 0xfc, 0x7c, 0x39, - 0xef, 0x4c, 0xd7, 0x95, 0x8c, 0x34, 0x97, 0xd1, 0x17, 0xea, 0xb6, 0xfc, 0xbe, 0xd1, 0xa5, 0x1e, - 0x95, 0x11, 0xee, 0x9b, 0x28, 0x17, 0x92, 0xb8, 0xf2, 0x15, 0x25, 0x51, 0xf9, 0x61, 0x42, 0x49, - 0x86, 0x3f, 0x22, 0xf6, 0x2b, 0x4b, 0x4f, 0x56, 0x86, 0x46, 0xa8, 0x38, 0xa4, 0x1d, 0x39, 0xae, - 0x55, 0x31, 0xb9, 0x8d, 0xa1, 0x9d, 0x79, 0xed, 0x0b, 0xe7, 0x7b, 0xae, 0xe4, 0x56, 0xd2, 0x2c, - 0x4e, 0x9d, 0xc6, 0x2c, 0x4e, 0x9f, 0x68, 0x12, 0xdb, 0x50, 0x62, 0xc2, 0xe8, 0x8a, 0x98, 0xaf, - 0x7a, 0x6d, 0x65, 0xb8, 0x3b, 0x3b, 0x65, 0xb7, 0xe5, 0xec, 0x48, 0x1a, 0x2a, 0x78, 0xe2, 0x41, - 0x39, 0x50, 0xbe, 0x9d, 0x0a, 0x1b, 0x87, 0xcb, 0x3a, 0x67, 0x1d, 0x44, 0xb9, 0x3f, 0x22, 0x2a, - 0x6a, 0x25, 0xe4, 0x03, 0x18, 0x6f, 0x59, 0x6d, 0x15, 0x40, 0x7e, 0x6b, 0xe8, 0x87, 0xfa, 0x48, - 0x8d, 0x28, 0x14, 0x5c, 0xad, 0xdf, 0x40, 0x8e, 0x4a, 0xf6, 0x61, 0x92, 0x49, 0x1b, 0x6c, 0xcc, - 0x8d, 0x50, 0x7f, 0x97, 0xb1, 0xe3, 0x32, 0xa4, 0x50, 0x44, 0x8c, 0x34, 0x90, 0x35, 0x98, 0x7c, - 0xe4, 0x75, 0xfb, 0x3d, 0x15, 0x79, 0x56, 0xaf, 0x2d, 0xe4, 0xad, 0xf6, 0x7d, 0x21, 0x12, 0x1b, - 0x01, 0xf9, 0xcd, 0x30, 0x6a, 0x4b, 0x7e, 0xbb, 0x00, 0x33, 0xfc, 0xe8, 0xe8, 0x7d, 0xc0, 0x0c, - 0x32, 0xc2, 0x4e, 0xbd, 0xc7, 0x68, 0x10, 0xef, 0xb0, 0x17, 0x94, 0xda, 0x99, 0x8d, 0x94, 0x06, - 0xcc, 0x68, 0x24, 0x3e, 0x94, 0x99, 0xd3, 0xa2, 0xb6, 0x15, 0x30, 0x63, 0xfe, 0xcc, 0xb4, 0xc7, - 0xae, 0xa2, 0xc2, 0x46, 0xad, 0x85, 0xfc, 0x8e, 0xa8, 0x99, 0x54, 0x55, 0xc3, 0xaa, 0x92, 0xfb, - 0xc2, 0x59, 0x56, 0x72, 0xcf, 0xcb, 0x82, 0xc9, 0x94, 0x06, 0xcc, 0xaa, 0x24, 0x77, 0xe1, 0x22, - 0x8f, 0x54, 0x1e, 0xd1, 0x55, 0x6a, 0xb5, 0xba, 0x8e, 0x4b, 0x9b, 0xd4, 0xf6, 0xdc, 0x16, 0x33, - 0x2e, 0x8a, 0x77, 0x81, 0x17, 0x8f, 0x8f, 0x6a, 0x17, 0xeb, 0x79, 0x02, 0x98, 0xdf, 0x8e, 0x7c, - 0x0c, 0xd3, 0x41, 0xd2, 0x61, 0x37, 0x5e, 0x18, 0xe1, 0x51, 0x3a, 0xe5, 0xfa, 0xcb, 0xcc, 0x46, - 0x8a, 0x84, 0x69, 0x5d, 0xe4, 0x2d, 0xa8, 0xfa, 0xca, 0x52, 0x39, 0xac, 0x67, 0x5c, 0x12, 0x63, - 0x10, 0x37, 0xea, 0x76, 0x4c, 0xc6, 0xa4, 0x0c, 0xb9, 0x07, 0xd5, 0xd0, 0xeb, 0xd2, 0x40, 0x25, - 0xd0, 0x0d, 0xb1, 0xf8, 0x8b, 0x79, 0x3b, 0x79, 0x47, 0x8b, 0xc5, 0xe9, 0xd9, 0x98, 0xc6, 0x30, - 0x89, 0xc3, 0xe3, 0xbe, 0xa8, 0xe4, 0x2d, 0x10, 0x41, 0xee, 0x8b, 0xe9, 0xb8, 0xaf, 0x99, 0x64, - 0x62, 0x5a, 0x96, 0x47, 0x72, 0x7e, 0xe0, 0x78, 0x81, 0x13, 0x1e, 0xae, 0x74, 0x2d, 0xc6, 0x04, - 0xc0, 0x82, 0x00, 0xd0, 0x91, 0xdc, 0x76, 0x56, 0x00, 0x07, 0xdb, 0x70, 0x2f, 0x3f, 0x22, 0x1a, - 0x2f, 0x89, 0x78, 0x49, 0x98, 0xa5, 0xa8, 0x2d, 0x6a, 0xee, 0x09, 0x25, 0x3a, 0x97, 0x87, 0x29, - 0xd1, 0x21, 0x2d, 0xb8, 0x6c, 0xf5, 0x43, 0xaf, 0xc7, 0x09, 0xe9, 0x26, 0x3b, 0xde, 0x3e, 0x75, - 0x8d, 0x2b, 0xe2, 0xae, 0xba, 0x72, 0x7c, 0x54, 0xbb, 0x5c, 0xff, 0x12, 0x39, 0xfc, 0x52, 0x14, - 0xd2, 0x83, 0x32, 0x55, 0x65, 0x46, 0xc6, 0x57, 0x46, 0xb8, 0x24, 0xd2, 0xb5, 0x4a, 0x72, 0x82, - 0x22, 0x1a, 0x6a, 0x15, 0x64, 0x07, 0xaa, 0x1d, 0x8f, 0x85, 0xf5, 0xae, 0x63, 0x31, 0xca, 0x8c, - 0x97, 0xc5, 0x3e, 0xc9, 0xbd, 0xdf, 0x6e, 0x46, 0x62, 0xf1, 0x36, 0xb9, 0x19, 0xb7, 0xc4, 0x24, - 0x0c, 0xa1, 0x22, 0xe4, 0xe9, 0x8b, 0x55, 0xf3, 0xdc, 0x90, 0x7e, 0x14, 0x1a, 0x8b, 0x62, 0x2c, - 0xaf, 0xe5, 0x21, 0x6f, 0x7b, 0xad, 0x66, 0x5a, 0x5a, 0x9e, 0xf2, 0x0c, 0x11, 0xb3, 0x98, 0xe4, - 0x6d, 0x98, 0xf2, 0xbd, 0x56, 0xd3, 0xa7, 0xf6, 0xb6, 0x15, 0xda, 0x1d, 0xa3, 0x96, 0x4e, 0xff, - 0x6f, 0x27, 0x78, 0x98, 0x92, 0x5c, 0x78, 0x1f, 0xce, 0x0f, 0xf8, 0x53, 0x4f, 0xf5, 0x56, 0xf2, - 0x97, 0x05, 0x48, 0xba, 0xb3, 0x67, 0xee, 0xf7, 0xdf, 0x80, 0xf3, 0xea, 0x97, 0x58, 0xfc, 0xb2, - 0xed, 0xf6, 0xc3, 0x28, 0xf6, 0x4d, 0x64, 0x3d, 0x30, 0x2b, 0x80, 0x83, 0x6d, 0xcc, 0xbf, 0x2a, - 0xc0, 0x74, 0xca, 0x7c, 0x9f, 0x79, 0x9c, 0xb7, 0x0e, 0xa4, 0xe7, 0x04, 0x81, 0x17, 0xc8, 0x3b, - 0x70, 0x93, 0xef, 0x65, 0xa6, 0x6a, 0xb3, 0x45, 0x99, 0xc5, 0xe6, 0x00, 0x17, 0x73, 0x5a, 0x98, - 0x7f, 0x5b, 0x80, 0x38, 0xad, 0xa6, 0x6b, 0x8b, 0x0a, 0x27, 0xd6, 0x16, 0xbd, 0x0e, 0xe5, 0x87, - 0xcc, 0x73, 0xb7, 0xe3, 0x0a, 0x24, 0x3d, 0xa1, 0xb7, 0x9a, 0x77, 0xb7, 0x84, 0xa4, 0x96, 0x10, - 0xd2, 0x1f, 0xae, 0x3b, 0xdd, 0x70, 0xb0, 0x4e, 0xe7, 0xd6, 0xaf, 0x48, 0x3a, 0x6a, 0x09, 0xb2, - 0x0c, 0x15, 0x9d, 0xc9, 0x55, 0x01, 0xa2, 0x9e, 0x04, 0x9d, 0xc6, 0xc4, 0x58, 0xc6, 0xfc, 0xe1, - 0x18, 0x94, 0x7f, 0xd2, 0x0a, 0xcd, 0xf7, 0xa1, 0xc4, 0xc4, 0x53, 0xa0, 0x0a, 0x3c, 0x57, 0x46, - 0x4c, 0x0e, 0x73, 0xa8, 0xe4, 0xdb, 0x37, 0xff, 0x46, 0xa5, 0xc2, 0xfc, 0xac, 0x00, 0x53, 0xcf, - 0xb1, 0xb8, 0x7c, 0x37, 0x5d, 0x5c, 0xfe, 0xee, 0x48, 0x43, 0x3b, 0xa1, 0xb0, 0xfc, 0xef, 0xe7, - 0xe3, 0x21, 0xf1, 0x69, 0x25, 0x2e, 0x54, 0xa2, 0x03, 0x1e, 0x25, 0xdc, 0xdf, 0x1d, 0x29, 0x28, - 0x8c, 0x37, 0x65, 0x44, 0x61, 0x18, 0xab, 0x20, 0xd7, 0x00, 0x28, 0xb7, 0x6c, 0x32, 0x1b, 0x37, - 0x96, 0xce, 0x47, 0xaf, 0x69, 0x0e, 0x26, 0xa4, 0x9e, 0x7f, 0xc2, 0x21, 0xff, 0x8a, 0x9e, 0x78, - 0x26, 0x57, 0xf4, 0xe5, 0x33, 0xbf, 0xa2, 0x5f, 0x7e, 0xf6, 0x57, 0x74, 0x22, 0x20, 0x29, 0x8e, - 0x10, 0x90, 0x7c, 0x0c, 0x17, 0xe4, 0x9f, 0x2b, 0x5d, 0xcb, 0xe9, 0xe9, 0xfd, 0xa2, 0x8a, 0x84, - 0xbe, 0x9a, 0x7b, 0x31, 0xd3, 0x80, 0x39, 0x2c, 0xa4, 0x6e, 0x78, 0x3f, 0x6e, 0x19, 0xbf, 0x30, - 0xdf, 0xcf, 0x81, 0xc3, 0x5c, 0x25, 0x59, 0x0f, 0x76, 0xf2, 0x14, 0x1e, 0xec, 0x0f, 0x0a, 0x70, - 0xd1, 0xca, 0xfb, 0x79, 0x98, 0xca, 0x63, 0xdc, 0x1a, 0x29, 0x9e, 0x48, 0x21, 0xaa, 0x78, 0x20, - 0x8f, 0x85, 0xf9, 0x7d, 0x20, 0xaf, 0xc6, 0x21, 0x69, 0x45, 0x6c, 0xaa, 0xfc, 0x60, 0xf2, 0x7b, - 0xd9, 0x54, 0x10, 0x88, 0xd9, 0x6e, 0x8e, 0x6c, 0xb0, 0xcf, 0x20, 0x1d, 0x54, 0x1d, 0x21, 0x1d, - 0x94, 0x09, 0x2f, 0xa6, 0xce, 0x28, 0xbc, 0x70, 0x61, 0xce, 0xe9, 0x59, 0x6d, 0xba, 0xdd, 0xef, - 0x76, 0x65, 0x4e, 0x9b, 0x19, 0xd3, 0x02, 0x3b, 0xb7, 0xb2, 0x93, 0x87, 0x7b, 0x5d, 0x79, 0x3f, - 0xea, 0x67, 0x9e, 0xf8, 0x19, 0x66, 0x23, 0x83, 0x84, 0x03, 0xd8, 0x7c, 0x5b, 0x72, 0xb7, 0x75, - 0x8b, 0x86, 0x7c, 0xb6, 0x45, 0xa6, 0x44, 0xfd, 0x0c, 0xf6, 0x66, 0x4c, 0xc6, 0xa4, 0x0c, 0xb9, - 0x0d, 0x95, 0x96, 0xcb, 0xb6, 0xbd, 0xae, 0x63, 0x1f, 0x8a, 0x74, 0x47, 0xa5, 0xf1, 0x06, 0xb7, - 0x6d, 0xab, 0x5b, 0x4d, 0x49, 0x7c, 0x7c, 0x54, 0xbb, 0x3c, 0xf8, 0x3b, 0xff, 0x25, 0xcd, 0xc7, - 0xb8, 0x3d, 0xd9, 0x14, 0x60, 0xaa, 0xcc, 0x59, 0xa6, 0x36, 0xae, 0x9c, 0xe0, 0x21, 0xaf, 0x6e, - 0x45, 0x55, 0xd9, 0xd3, 0x4a, 0x9d, 0x2a, 0x5e, 0x8e, 0x11, 0xc8, 0x6b, 0x50, 0xf2, 0xdc, 0xb5, - 0x8f, 0x9c, 0xd0, 0x38, 0x9f, 0xce, 0x69, 0xdf, 0x15, 0x54, 0x54, 0x5c, 0x72, 0x0f, 0x2e, 0x85, - 0x61, 0x57, 0x85, 0xb6, 0xf5, 0xbd, 0x90, 0x06, 0x51, 0x29, 0x83, 0x28, 0x47, 0x29, 0x36, 0x5e, - 0x3a, 0x3e, 0xaa, 0x5d, 0xda, 0xd9, 0xb9, 0x93, 0x27, 0x82, 0x27, 0xb5, 0x3d, 0x39, 0xe8, 0x9e, - 0x1f, 0x32, 0xe8, 0x4e, 0xc6, 0x79, 0x17, 0xbe, 0x34, 0xce, 0x1b, 0x88, 0x4b, 0x2f, 0x3e, 0x45, - 0x5c, 0xfa, 0x81, 0x28, 0xd8, 0xb8, 0xb1, 0xa2, 0x62, 0xfa, 0x77, 0x86, 0x4b, 0x25, 0x72, 0x04, - 0xf9, 0x6e, 0x27, 0xfe, 0x44, 0x89, 0x49, 0xb6, 0xe1, 0x82, 0xef, 0xb5, 0x06, 0xc2, 0x5a, 0x11, - 0xc4, 0x27, 0xaa, 0x75, 0xb6, 0x73, 0x64, 0x30, 0xb7, 0xa5, 0xb0, 0xa5, 0x31, 0xdd, 0x30, 0xc4, - 0xc4, 0x48, 0x5b, 0x1a, 0x93, 0x31, 0x29, 0x93, 0x8d, 0xf2, 0x5e, 0x7c, 0x66, 0x51, 0xde, 0xc2, - 0x73, 0x88, 0xf2, 0x5e, 0x7a, 0x7e, 0x51, 0xde, 0xe7, 0x65, 0x98, 0x49, 0xfb, 0xaf, 0x71, 0xad, - 0x54, 0xe1, 0xb4, 0xb5, 0x52, 0xa9, 0x62, 0xa6, 0xb1, 0x67, 0x5a, 0xcc, 0x34, 0x7e, 0xe6, 0xc5, - 0x4c, 0x89, 0xa2, 0xad, 0x89, 0x27, 0x14, 0x6d, 0xd5, 0x61, 0xd6, 0xf6, 0x7a, 0xbe, 0xf8, 0x5d, - 0x84, 0x2a, 0xdd, 0x91, 0xcf, 0xeb, 0xfa, 0x01, 0x73, 0x25, 0xcd, 0xc6, 0xac, 0x3c, 0x61, 0x50, - 0x74, 0x45, 0xc3, 0xd2, 0x08, 0x05, 0x9f, 0xe9, 0x05, 0x13, 0x17, 0xa5, 0xaa, 0xb9, 0xd4, 0x6e, - 0xba, 0x54, 0x2f, 0x75, 0x71, 0x47, 0x63, 0x36, 0x5d, 0x64, 0xc7, 0x8c, 0x8a, 0xd0, 0xff, 0xab, - 0x67, 0xa1, 0x3f, 0x5d, 0xd1, 0xa7, 0x7a, 0x12, 0xbf, 0xe9, 0xa6, 0xb9, 0x98, 0xed, 0x09, 0x09, - 0xe0, 0x05, 0x3f, 0xcf, 0x0d, 0x63, 0xea, 0x55, 0xe9, 0xcb, 0x9c, 0xc1, 0x45, 0xa5, 0xe5, 0x85, - 0x5c, 0x47, 0x8e, 0xe1, 0x09, 0xc8, 0xc9, 0x8a, 0xb0, 0xf2, 0xb3, 0xaa, 0x08, 0x5b, 0x38, 0x94, - 0xc5, 0xa6, 0x27, 0xd6, 0xa9, 0xde, 0x4b, 0xd7, 0x8e, 0xbf, 0x3f, 0xe4, 0xff, 0xfc, 0x12, 0x95, - 0xb3, 0x26, 0x6b, 0x64, 0x7f, 0xab, 0x00, 0x17, 0xf2, 0x96, 0x25, 0xa7, 0x17, 0xcd, 0x74, 0x2f, - 0x46, 0x0b, 0xd7, 0x92, 0xa6, 0xe5, 0xdf, 0x8b, 0x89, 0xe0, 0x30, 0xa4, 0xfe, 0xcf, 0x5e, 0x8e, - 0x87, 0x7a, 0x39, 0x4e, 0xfd, 0xfe, 0xb7, 0xf8, 0x1c, 0x7f, 0xff, 0x5b, 0x1a, 0xe2, 0xf7, 0xbf, - 0x93, 0xcf, 0xf3, 0xf7, 0xbf, 0xe5, 0x53, 0xfe, 0xfe, 0xb7, 0xf2, 0xec, 0x7f, 0xff, 0xfb, 0x45, - 0x01, 0xe6, 0xb2, 0xe5, 0xc8, 0xcf, 0x21, 0x49, 0xb6, 0x9f, 0x4a, 0x92, 0x6d, 0x8c, 0x64, 0xcc, - 0xa3, 0x6e, 0x9f, 0x94, 0x2c, 0x33, 0x7f, 0x5c, 0x80, 0x81, 0x92, 0xeb, 0xe7, 0x90, 0xc7, 0x7a, - 0x98, 0xce, 0x63, 0xad, 0x9d, 0xc9, 0x20, 0x4f, 0xc8, 0x67, 0xfd, 0x4f, 0xce, 0x10, 0xff, 0x4f, - 0xf2, 0x5a, 0x29, 0xd3, 0x36, 0xf6, 0xec, 0x4d, 0x5b, 0x63, 0xe9, 0xd3, 0x2f, 0x16, 0xcf, 0x7d, - 0xf6, 0xc5, 0xe2, 0xb9, 0xcf, 0xbf, 0x58, 0x3c, 0xf7, 0xc9, 0xf1, 0x62, 0xe1, 0xd3, 0xe3, 0xc5, - 0xc2, 0x67, 0xc7, 0x8b, 0x85, 0xcf, 0x8f, 0x17, 0x0b, 0x3f, 0x3e, 0x5e, 0x2c, 0xfc, 0xd1, 0xbf, - 0x2e, 0x9e, 0xfb, 0xb5, 0x72, 0x84, 0xfb, 0xbf, 0x01, 0x00, 0x00, 0xff, 0xff, 0x16, 0xda, 0x52, - 0xff, 0x92, 0x4e, 0x00, 0x00, + 0x32, 0xde, 0x4f, 0x1b, 0x1c, 0x17, 0x25, 0xbc, 0xf9, 0xbd, 0x02, 0xcc, 0xe7, 0x4c, 0x06, 0xbf, + 0x66, 0xb9, 0x13, 0xdc, 0xea, 0x77, 0x23, 0xef, 0x48, 0xf7, 0xb6, 0xa9, 0xe8, 0xa8, 0x25, 0xc8, + 0x2a, 0xcc, 0x29, 0xd7, 0x99, 0x3b, 0x04, 0xcc, 0xb7, 0x6c, 0xaa, 0xec, 0x91, 0xf6, 0x3d, 0x30, + 0xc3, 0xc7, 0x81, 0x16, 0xe6, 0x9f, 0x96, 0x60, 0x72, 0xb5, 0x7e, 0x63, 0xc7, 0x62, 0xfb, 0xa7, + 0xf0, 0xcc, 0x5e, 0x87, 0x72, 0x48, 0x7b, 0x7e, 0xd7, 0x0a, 0x23, 0x5d, 0xba, 0x87, 0x3b, 0x8a, + 0x8e, 0x5a, 0x82, 0x78, 0xdc, 0xcd, 0x54, 0x7e, 0xae, 0xda, 0x39, 0xef, 0x0d, 0x69, 0xc7, 0x14, + 0x4a, 0xd2, 0xcf, 0x54, 0x24, 0x8c, 0x75, 0x10, 0x06, 0xd5, 0x48, 0x39, 0xd2, 0x3d, 0x75, 0x05, + 0x0f, 0x19, 0x1f, 0xc4, 0x38, 0xf2, 0x4a, 0x4c, 0x10, 0x30, 0xa9, 0x85, 0x7c, 0x0d, 0xa6, 0x5a, + 0xd4, 0xa7, 0x6e, 0x8b, 0xba, 0xb6, 0x43, 0x99, 0x51, 0xbc, 0x32, 0xce, 0xe7, 0xe5, 0xf8, 0xa8, + 0x36, 0xb5, 0x9a, 0xa0, 0x63, 0x4a, 0x8a, 0x3c, 0x84, 0xca, 0x81, 0x13, 0x76, 0xc4, 0xbe, 0x30, + 0x4a, 0x62, 0xbf, 0x7d, 0x63, 0xa8, 0x8e, 0x72, 0x84, 0x78, 0x5a, 0x1e, 0x44, 0x98, 0x18, 0xc3, + 0xf3, 0xdb, 0x8d, 0x7f, 0x88, 0x60, 0x40, 0xdc, 0xac, 0x95, 0x74, 0x03, 0xc1, 0xc0, 0x58, 0x86, + 0x30, 0x98, 0xe2, 0x1f, 0x4d, 0xfa, 0x61, 0x9f, 0xba, 0x36, 0x15, 0x3e, 0xdf, 0xb0, 0x21, 0x42, + 0x04, 0x22, 0x67, 0xe4, 0x41, 0x02, 0x16, 0x53, 0x4a, 0xf8, 0xee, 0x3b, 0xe8, 0x50, 0xd7, 0xa8, + 0xa4, 0x77, 0xdf, 0x83, 0x0e, 0x75, 0x51, 0x70, 0x88, 0x07, 0x60, 0x6b, 0xd3, 0x6d, 0xc0, 0x08, + 0x8e, 0x61, 0x7c, 0x03, 0x34, 0x66, 0xb8, 0x6d, 0x8d, 0xbf, 0x31, 0xa1, 0xc2, 0xfc, 0xfb, 0x02, + 0x54, 0xf9, 0xe1, 0x88, 0x36, 0xf4, 0x6b, 0x50, 0x0a, 0xad, 0xa0, 0xad, 0x6e, 0xbe, 0x4a, 0x7c, + 0x11, 0xec, 0x08, 0x2a, 0x2a, 0x2e, 0xb1, 0xa0, 0x18, 0x5a, 0x6c, 0x3f, 0x32, 0x24, 0xbf, 0x3c, + 0x54, 0x1f, 0xd5, 0xa9, 0x8c, 0x6d, 0x08, 0xff, 0x62, 0x28, 0x91, 0xc9, 0x55, 0x28, 0xf3, 0x5b, + 0x67, 0xdd, 0x62, 0xd2, 0x91, 0x2d, 0x37, 0xa6, 0xf8, 0x29, 0x5c, 0x57, 0x34, 0xd4, 0x5c, 0xf3, + 0x3b, 0x30, 0xb3, 0xf6, 0x11, 0xb5, 0xfb, 0xa1, 0x17, 0x48, 0x57, 0x86, 0xdc, 0x02, 0xc2, 0x68, + 0xf0, 0xc8, 0xb1, 0x69, 0xdd, 0xb6, 0xbd, 0xbe, 0x1b, 0x6e, 0xc5, 0xa7, 0x7e, 0x41, 0x69, 0x23, + 0xcd, 0x01, 0x09, 0xcc, 0x69, 0x65, 0xfe, 0xd5, 0x04, 0x54, 0x13, 0xce, 0x30, 0x5f, 0xc5, 0x80, + 0xfa, 0x5e, 0xd6, 0x86, 0x70, 0x77, 0x0b, 0x05, 0x87, 0xdb, 0x90, 0x80, 0x3e, 0x72, 0x18, 0x0f, + 0xb9, 0x32, 0x36, 0x04, 0x15, 0x1d, 0xb5, 0x04, 0xa9, 0x41, 0xb1, 0x45, 0xfd, 0xb0, 0x23, 0x06, + 0x39, 0xd1, 0xa8, 0xf0, 0x89, 0x58, 0xe5, 0x04, 0x94, 0x74, 0x2e, 0xb0, 0x47, 0x43, 0xbb, 0x63, + 0x4c, 0x88, 0x73, 0x27, 0x04, 0xd6, 0x39, 0x01, 0x25, 0x3d, 0xc7, 0x6d, 0x29, 0x3e, 0x7b, 0xb7, + 0xa5, 0x74, 0xc6, 0x6e, 0x0b, 0xf1, 0x61, 0x9e, 0xb1, 0xce, 0x76, 0xe0, 0x3c, 0xb2, 0x42, 0x2a, + 0x1a, 0x0b, 0x3d, 0x93, 0x4f, 0xa3, 0xe7, 0xd2, 0xf1, 0x51, 0x6d, 0xbe, 0xd9, 0xbc, 0x99, 0x45, + 0xc1, 0x3c, 0x68, 0xd2, 0x84, 0x8b, 0x8e, 0xcb, 0xa8, 0xdd, 0x0f, 0xe8, 0x46, 0xdb, 0xf5, 0x02, + 0x7a, 0xd3, 0x63, 0x1c, 0x4e, 0x45, 0x80, 0x2f, 0xab, 0x45, 0xbb, 0xb8, 0x91, 0x27, 0x84, 0xf9, + 0x6d, 0xcd, 0x1f, 0x17, 0x60, 0x2a, 0xe9, 0xff, 0x13, 0x06, 0xd0, 0x59, 0x5d, 0x6f, 0xca, 0x9d, + 0xa9, 0xee, 0xf4, 0xf7, 0x87, 0x0e, 0x2b, 0x24, 0x4c, 0xec, 0x33, 0xc5, 0x34, 0x4c, 0xa8, 0x39, + 0x45, 0x82, 0xe1, 0x15, 0x28, 0xee, 0x79, 0x81, 0x4d, 0xd5, 0xd9, 0xd2, 0x67, 0x70, 0x9d, 0x13, + 0x51, 0xf2, 0xcc, 0x7f, 0x2d, 0x40, 0x42, 0x03, 0xf9, 0x4d, 0x98, 0xe6, 0x3a, 0x6e, 0x07, 0xbb, + 0xa9, 0xd1, 0x34, 0x86, 0x1e, 0x8d, 0x46, 0x6a, 0x5c, 0x54, 0xfa, 0xa7, 0x53, 0x64, 0x4c, 0xeb, + 0x23, 0xbf, 0x00, 0x15, 0xab, 0xd5, 0x0a, 0x28, 0x63, 0x54, 0x9a, 0x9e, 0x4a, 0x63, 0x5a, 0xdc, + 0x95, 0x11, 0x11, 0x63, 0x3e, 0x3f, 0x86, 0x3c, 0xe0, 0xe2, 0x3b, 0x5b, 0x0c, 0x32, 0x71, 0x0c, + 0xb9, 0x12, 0x4e, 0x47, 0x2d, 0x61, 0x7e, 0x7f, 0x02, 0xd2, 0xba, 0x49, 0x0b, 0x66, 0xf7, 0x83, + 0xdd, 0x95, 0x15, 0xcb, 0xee, 0x0c, 0x15, 0x0e, 0xcc, 0xf3, 0x38, 0xe4, 0x76, 0x1a, 0x01, 0xb3, + 0x90, 0x4a, 0xcb, 0x6d, 0x7a, 0x18, 0x5a, 0xbb, 0xc3, 0x44, 0x04, 0x91, 0x96, 0x24, 0x02, 0x66, + 0x21, 0xc9, 0xd7, 0xa1, 0xba, 0x1f, 0xec, 0x46, 0x87, 0x5c, 0x4d, 0xc7, 0xbc, 0x9a, 0x8e, 0xea, + 0xed, 0x98, 0x85, 0x49, 0x39, 0x3e, 0x85, 0xfb, 0xc1, 0x2e, 0x52, 0xab, 0x1b, 0xe5, 0x9a, 0xf4, + 0x14, 0xde, 0x56, 0x74, 0xd4, 0x12, 0xc4, 0x07, 0xb2, 0x1f, 0xcd, 0x9e, 0x8e, 0x29, 0x95, 0x2d, + 0xba, 0x9a, 0x37, 0x1a, 0x2d, 0x94, 0x1c, 0xd0, 0x0b, 0xdc, 0x36, 0xdf, 0x1e, 0xc0, 0xc1, 0x1c, + 0x6c, 0xf2, 0x6d, 0xb8, 0xb4, 0x1f, 0xec, 0x2a, 0x43, 0xbe, 0x1d, 0x38, 0xae, 0xed, 0xf8, 0xa9, + 0x24, 0x53, 0x4d, 0x75, 0xf7, 0xd2, 0xed, 0x7c, 0x31, 0x3c, 0xa9, 0xbd, 0xf9, 0x06, 0x4c, 0x25, + 0x93, 0x14, 0x4f, 0x08, 0x6c, 0xcd, 0xff, 0x28, 0x40, 0x69, 0xc3, 0xf5, 0xfb, 0x3f, 0x25, 0xf9, + 0xce, 0x3f, 0x9f, 0x80, 0x09, 0xee, 0x7a, 0x91, 0xab, 0x30, 0x11, 0x1e, 0xfa, 0xf2, 0x6e, 0x1d, + 0x6f, 0x5c, 0x88, 0x0c, 0xcd, 0xce, 0xa1, 0x4f, 0x1f, 0xab, 0x7f, 0x51, 0x48, 0x90, 0xf7, 0xa0, + 0xe4, 0xf6, 0x7b, 0xf7, 0xad, 0xae, 0x32, 0x4a, 0xaf, 0x45, 0xae, 0xc5, 0x96, 0xa0, 0x3e, 0x3e, + 0xaa, 0x5d, 0xa0, 0xae, 0xed, 0xb5, 0x1c, 0xb7, 0xbd, 0xfc, 0x90, 0x79, 0xee, 0xd2, 0x56, 0xbf, + 0xb7, 0x4b, 0x03, 0x54, 0xad, 0xc8, 0x57, 0x61, 0x72, 0xd7, 0xf3, 0xba, 0x1c, 0x40, 0x9a, 0x2c, + 0x1d, 0x59, 0x35, 0x24, 0x19, 0x23, 0x3e, 0xf7, 0x62, 0x58, 0x18, 0x70, 0xc9, 0x89, 0xb4, 0x17, + 0xd3, 0x14, 0x54, 0x54, 0x5c, 0xd2, 0x83, 0x52, 0xcf, 0xf2, 0xb9, 0x5c, 0x51, 0x4c, 0xd9, 0xda, + 0xd0, 0xfe, 0xe9, 0xd2, 0xa6, 0xc0, 0x59, 0x73, 0xc3, 0xe0, 0x30, 0x56, 0x27, 0x89, 0xa8, 0x94, + 0x10, 0x07, 0x26, 0xbb, 0x0e, 0x0b, 0xb9, 0xbe, 0xd2, 0x08, 0xbb, 0x82, 0xeb, 0xbb, 0x6f, 0x75, + 0xfb, 0x34, 0x9e, 0x81, 0x3b, 0x12, 0x16, 0x23, 0xfc, 0x85, 0x43, 0xa8, 0x26, 0x7a, 0x44, 0xe6, + 0x64, 0x32, 0x47, 0x6c, 0x5e, 0x91, 0xbf, 0x21, 0x3b, 0x50, 0x7c, 0xc4, 0x31, 0x94, 0xb1, 0x19, + 0xb1, 0x27, 0x28, 0xc1, 0xde, 0x19, 0x7b, 0xbb, 0xf0, 0x4e, 0xf9, 0x07, 0x7f, 0x56, 0x3b, 0xf7, + 0xc9, 0x3f, 0x5f, 0x39, 0x67, 0xfe, 0xc3, 0x38, 0x54, 0xb4, 0xc8, 0xff, 0xed, 0x9d, 0x12, 0x64, + 0x76, 0xca, 0xad, 0xd1, 0xe6, 0xeb, 0x54, 0xdb, 0xa5, 0x9e, 0xde, 0x2e, 0x53, 0x8d, 0x9f, 0x4b, + 0x2c, 0xf5, 0xe3, 0xa3, 0x9a, 0x91, 0x9e, 0x04, 0xb4, 0x0e, 0x36, 0x29, 0x63, 0x56, 0x9b, 0xc6, + 0xdb, 0xe0, 0x1b, 0x4f, 0xda, 0x06, 0x17, 0x92, 0xdb, 0xa0, 0x92, 0xbf, 0x8c, 0x9f, 0x8c, 0x43, + 0x79, 0x33, 0xca, 0x20, 0xfc, 0x6e, 0x01, 0xaa, 0x96, 0xeb, 0x7a, 0xa1, 0x25, 0xd3, 0x25, 0xd2, + 0xbc, 0x6d, 0x0d, 0x35, 0x1d, 0x11, 0xe8, 0x52, 0x3d, 0x06, 0x94, 0x53, 0xa2, 0x6f, 0xa6, 0x04, + 0x07, 0x93, 0x7a, 0xc9, 0x87, 0x50, 0xea, 0x5a, 0xbb, 0xb4, 0x1b, 0x59, 0xbb, 0x8d, 0xd1, 0x7a, + 0x70, 0x47, 0x60, 0x65, 0xd6, 0x43, 0x12, 0x51, 0x29, 0x5a, 0x78, 0x0f, 0xe6, 0xb2, 0x1d, 0x7d, + 0x9a, 0x19, 0xe5, 0x8b, 0x91, 0x50, 0xf3, 0x34, 0x4d, 0xcd, 0xbf, 0xad, 0x00, 0x6c, 0x79, 0x2d, + 0xda, 0x0c, 0xad, 0xb0, 0xcf, 0xc8, 0x02, 0x8c, 0x39, 0x2d, 0x75, 0x15, 0x81, 0xea, 0xed, 0xd8, + 0xc6, 0x2a, 0x8e, 0x39, 0x2d, 0x9d, 0xe2, 0x18, 0x3b, 0x31, 0xc5, 0xf1, 0x75, 0xa8, 0xb6, 0x1c, + 0xe6, 0x77, 0xad, 0xc3, 0xad, 0x1c, 0x5f, 0x60, 0x35, 0x66, 0x61, 0x52, 0x8e, 0xbc, 0xae, 0xce, + 0xef, 0x44, 0x2a, 0x03, 0x13, 0x9d, 0xdf, 0x32, 0xef, 0x5e, 0xe2, 0x0c, 0xbf, 0x0d, 0x53, 0x51, + 0x0a, 0x41, 0x68, 0x29, 0x8a, 0x56, 0xd1, 0xa9, 0x9f, 0xda, 0x49, 0xf0, 0x30, 0x25, 0x99, 0x4d, + 0x71, 0x94, 0x9e, 0x4b, 0x8a, 0x63, 0x15, 0xe6, 0x58, 0xe8, 0x05, 0xb4, 0x15, 0x49, 0x6c, 0xac, + 0x1a, 0x24, 0x9d, 0x6a, 0x6a, 0x66, 0xf8, 0x38, 0xd0, 0x82, 0x6c, 0xc3, 0x85, 0xa8, 0x13, 0xc9, + 0x01, 0x1a, 0xf3, 0x02, 0xe9, 0xb2, 0x42, 0xba, 0xf0, 0x20, 0x47, 0x06, 0x73, 0x5b, 0x92, 0x37, + 0xa1, 0xe8, 0x77, 0x2c, 0x46, 0x55, 0x52, 0x23, 0x8a, 0x5d, 0x8b, 0xdb, 0x9c, 0xf8, 0xf8, 0xa8, + 0x56, 0xe1, 0xd3, 0x2e, 0x3e, 0x50, 0x0a, 0x92, 0x6b, 0x00, 0xbb, 0x5e, 0xdf, 0x6d, 0x59, 0xc1, + 0xe1, 0xc6, 0xaa, 0x88, 0x64, 0x12, 0x4f, 0x6d, 0x0d, 0xcd, 0xc1, 0x84, 0x14, 0x37, 0x98, 0x3d, + 0x69, 0x3a, 0x54, 0x6e, 0x42, 0x1b, 0x4c, 0x6d, 0x51, 0x14, 0x9f, 0x7c, 0x00, 0x15, 0x16, 0x5a, + 0x41, 0x48, 0x5b, 0xf5, 0x50, 0x25, 0x28, 0x7e, 0xfe, 0x74, 0x09, 0xca, 0x1d, 0xa7, 0x47, 0x63, + 0xaf, 0xa2, 0x19, 0x81, 0x60, 0x8c, 0x47, 0x7e, 0x1d, 0x60, 0xcf, 0x71, 0x1d, 0xd6, 0x11, 0xe8, + 0xd5, 0xa7, 0x46, 0xd7, 0xe3, 0x5c, 0xd7, 0x28, 0x98, 0x40, 0xe4, 0x31, 0x8f, 0xef, 0xb5, 0x36, + 0xb6, 0x8d, 0x29, 0x31, 0x4a, 0x1d, 0xf3, 0x6c, 0x73, 0x22, 0x4a, 0x1e, 0xb9, 0x0a, 0xe5, 0x96, + 0x45, 0x7b, 0x9e, 0x4b, 0x5b, 0xc6, 0x74, 0x9c, 0x77, 0x58, 0x55, 0x34, 0xd4, 0x5c, 0xf2, 0x5d, + 0x28, 0x39, 0xc2, 0xe5, 0x33, 0x66, 0x44, 0x57, 0xbf, 0x39, 0xdc, 0xa5, 0x20, 0x20, 0x1a, 0xc0, + 0x2d, 0x8e, 0xfc, 0x1b, 0x15, 0x2c, 0xb1, 0x61, 0xd2, 0xeb, 0x87, 0x42, 0xc3, 0xac, 0xd0, 0x30, + 0x5c, 0x9e, 0xe5, 0xae, 0xc4, 0x90, 0x4f, 0x9f, 0xea, 0x03, 0x23, 0x64, 0x3e, 0x5e, 0xbb, 0xe3, + 0x74, 0x5b, 0x01, 0x75, 0x8d, 0x39, 0x11, 0x52, 0x89, 0xf1, 0xae, 0x28, 0x1a, 0x6a, 0x2e, 0xf9, + 0x25, 0x98, 0xf6, 0xfa, 0xa1, 0xd8, 0x37, 0x7c, 0xdb, 0x31, 0xe3, 0xbc, 0x10, 0x3f, 0xcf, 0xc3, + 0xb6, 0xbb, 0x49, 0x06, 0xa6, 0xe5, 0xcc, 0x19, 0x98, 0x4a, 0xd6, 0x0b, 0x98, 0x7f, 0x34, 0x06, + 0x51, 0x3f, 0x7e, 0x1a, 0xbc, 0x65, 0x62, 0x42, 0x29, 0xa0, 0xac, 0xdf, 0x0d, 0x95, 0xb1, 0x15, + 0x6b, 0x8d, 0x82, 0x82, 0x8a, 0x63, 0x1e, 0xc0, 0x34, 0xef, 0x6d, 0xb7, 0x4b, 0xbb, 0xcd, 0x90, + 0xfa, 0x8c, 0xec, 0x41, 0x91, 0xf1, 0x3f, 0xd4, 0x9c, 0x8c, 0xf8, 0xf2, 0x11, 0x52, 0x3f, 0xde, + 0xef, 0x42, 0x01, 0x4a, 0x78, 0xf3, 0x8f, 0xc7, 0xa0, 0xa2, 0xe7, 0xe9, 0x14, 0x19, 0xf2, 0x57, + 0x61, 0xb2, 0x45, 0xf7, 0x2c, 0x3e, 0x1a, 0xf5, 0x38, 0xc8, 0xb7, 0xd5, 0xaa, 0x24, 0x61, 0xc4, + 0x23, 0xb5, 0xe8, 0x32, 0x93, 0x43, 0x16, 0x59, 0xab, 0xa4, 0xaf, 0x48, 0xf6, 0xa1, 0x22, 0xfe, + 0x58, 0x8f, 0x0a, 0x19, 0x86, 0x5d, 0xf7, 0xfb, 0x11, 0x8a, 0xcc, 0x05, 0xe8, 0x4f, 0x8c, 0xf1, + 0x33, 0x05, 0x08, 0xc5, 0xd3, 0x14, 0x20, 0x98, 0xeb, 0xc0, 0x0d, 0xc3, 0x8d, 0x15, 0xf2, 0x2e, + 0x94, 0x99, 0xda, 0xba, 0x6a, 0x5e, 0xbe, 0xa2, 0x5f, 0x2d, 0x14, 0xfd, 0xf1, 0x51, 0x6d, 0x5a, + 0x08, 0x47, 0x04, 0xd4, 0x4d, 0xcc, 0x65, 0xa8, 0x26, 0x1e, 0x6c, 0xf9, 0x0c, 0xeb, 0xd7, 0x9d, + 0xc4, 0x0c, 0xaf, 0x5a, 0xa1, 0x85, 0x82, 0x63, 0x3e, 0x1e, 0x83, 0x39, 0xa4, 0xcc, 0xeb, 0x07, + 0x36, 0x4d, 0x66, 0x66, 0x2d, 0x5b, 0x54, 0x71, 0x64, 0x32, 0xb3, 0x75, 0x41, 0x45, 0xc5, 0x25, + 0xdf, 0x84, 0xe9, 0x1e, 0x0d, 0xda, 0xfa, 0xb0, 0xa9, 0x45, 0xd2, 0xf9, 0x95, 0xcd, 0x24, 0x13, + 0xd3, 0xb2, 0x3c, 0xde, 0xef, 0x59, 0xae, 0xb3, 0x47, 0x59, 0x98, 0x4d, 0x99, 0x6c, 0x2a, 0x3a, + 0x6a, 0x09, 0x72, 0x03, 0xce, 0x33, 0x1a, 0xde, 0x3d, 0x70, 0x69, 0x80, 0x74, 0x8f, 0x06, 0x22, + 0x93, 0x3e, 0x21, 0x4c, 0xe6, 0x8b, 0xaa, 0xd9, 0xf9, 0x66, 0x56, 0x00, 0x07, 0xdb, 0x88, 0xdb, + 0xb7, 0x6f, 0xdb, 0x94, 0xb1, 0x15, 0xcf, 0x6d, 0x39, 0xba, 0x56, 0x25, 0x79, 0xfb, 0x66, 0xf8, + 0x38, 0xd0, 0x82, 0xa3, 0xec, 0x59, 0x4e, 0xb7, 0x1f, 0xd0, 0x18, 0xa5, 0x94, 0x46, 0x59, 0xcf, + 0xf0, 0x71, 0xa0, 0x85, 0xf9, 0x26, 0x4c, 0x23, 0x0d, 0x83, 0x43, 0x3d, 0x27, 0x35, 0x28, 0x76, + 0x9d, 0x9e, 0x23, 0x93, 0x3f, 0x45, 0xb9, 0x91, 0xef, 0x70, 0x02, 0x4a, 0xba, 0xf9, 0x83, 0x02, + 0x40, 0x5c, 0x87, 0x41, 0xf6, 0xa1, 0xcc, 0xae, 0x37, 0xfa, 0xf6, 0xbe, 0xce, 0x17, 0x0d, 0xf9, + 0xac, 0xa0, 0x40, 0x12, 0x4f, 0x64, 0x8a, 0x82, 0x5a, 0xc1, 0x93, 0x5e, 0xe9, 0xff, 0x7a, 0x1c, + 0x74, 0x2b, 0xbe, 0xb8, 0xd4, 0x6d, 0xf9, 0x9e, 0xe3, 0x86, 0xd9, 0xc7, 0xb7, 0x35, 0x45, 0x47, + 0x2d, 0xc1, 0xf7, 0xdb, 0xae, 0x1c, 0xc4, 0x58, 0x7a, 0xbf, 0xa9, 0x3e, 0x28, 0x2e, 0x97, 0x0b, + 0x68, 0x9b, 0xcf, 0xf5, 0x78, 0x5a, 0x0e, 0x05, 0x15, 0x15, 0x97, 0x5f, 0x33, 0x51, 0xc2, 0x54, + 0xed, 0x11, 0x71, 0xcd, 0x44, 0xb9, 0x55, 0xd4, 0x5c, 0xd2, 0x81, 0x59, 0x4b, 0x2c, 0x6d, 0x9c, + 0x04, 0x7e, 0xaa, 0x7c, 0x76, 0x5c, 0x03, 0x90, 0x46, 0xc1, 0x2c, 0x2c, 0xd7, 0xc4, 0xe2, 0xe6, + 0x4f, 0x9f, 0xd6, 0xd6, 0x9a, 0x9a, 0x69, 0x14, 0xcc, 0xc2, 0x72, 0x0f, 0x2b, 0xf0, 0xba, 0xb4, + 0x8e, 0x5b, 0xca, 0x93, 0xd3, 0x1e, 0x16, 0x4a, 0x32, 0x46, 0x7c, 0xf3, 0xf7, 0x0b, 0x30, 0xd3, + 0xb4, 0x03, 0xc7, 0x0f, 0xf5, 0xd9, 0xdf, 0x12, 0xc5, 0x1b, 0xa1, 0xc5, 0x7d, 0x1f, 0xb5, 0xa7, + 0x5e, 0x3e, 0x21, 0x9f, 0x26, 0x85, 0x52, 0xb5, 0x1d, 0x92, 0x84, 0x31, 0x84, 0x88, 0x7a, 0x85, + 0x75, 0xc9, 0xae, 0x6d, 0x53, 0x50, 0x51, 0x71, 0xcd, 0x1f, 0x16, 0xa0, 0xac, 0x5f, 0xaf, 0x5e, + 0x81, 0xa2, 0x78, 0x14, 0x51, 0x7b, 0x47, 0x5f, 0x26, 0x2b, 0x9c, 0x88, 0x92, 0xc7, 0x85, 0x84, + 0x3b, 0xa7, 0x80, 0x13, 0x37, 0x8e, 0x15, 0x84, 0x28, 0x79, 0x7c, 0xd3, 0x52, 0xb7, 0xa5, 0xf6, + 0x8b, 0xde, 0xb4, 0x6b, 0x6e, 0x0b, 0x39, 0x5d, 0x14, 0x23, 0x78, 0x41, 0xcf, 0x0a, 0xb3, 0x31, + 0xf9, 0xba, 0xa0, 0xa2, 0xe2, 0x9a, 0xe7, 0x61, 0xb6, 0xd9, 0x67, 0x3e, 0x75, 0xb5, 0x0b, 0x6e, + 0x4e, 0x43, 0x35, 0x51, 0xf6, 0x68, 0xfe, 0xd7, 0x25, 0xd0, 0xaf, 0xb6, 0x3f, 0x7b, 0xfb, 0x1d, + 0x2a, 0x30, 0xb2, 0xb5, 0x8f, 0x5b, 0x1c, 0xdd, 0xc7, 0xd5, 0x2b, 0x99, 0xf1, 0x73, 0xdb, 0xb1, + 0x9f, 0x5b, 0x3a, 0x03, 0x3f, 0x37, 0x2e, 0xb9, 0xc8, 0xfa, 0xba, 0xdf, 0x2b, 0xc0, 0x94, 0xcb, + 0xe3, 0x68, 0x75, 0x82, 0x8d, 0x49, 0xe1, 0x5b, 0xdd, 0x1d, 0x69, 0x12, 0x97, 0xb6, 0x12, 0x88, + 0x32, 0x85, 0xa0, 0xe3, 0xdc, 0x24, 0x0b, 0x53, 0xaa, 0xc9, 0x3a, 0x94, 0xad, 0x3d, 0x1e, 0x9c, + 0x84, 0x87, 0xea, 0xf9, 0xf9, 0x72, 0xde, 0x99, 0xae, 0x2b, 0x19, 0x69, 0x2e, 0xa3, 0x2f, 0xd4, + 0x6d, 0xf9, 0x7d, 0xa3, 0x2b, 0x46, 0x2a, 0x23, 0xdc, 0x37, 0x51, 0x2e, 0x24, 0x71, 0xe5, 0x2b, + 0x4a, 0xa2, 0x80, 0xc4, 0x84, 0x92, 0x0c, 0x7f, 0x44, 0xec, 0x57, 0x96, 0x9e, 0xac, 0x0c, 0x8d, + 0x50, 0x71, 0x48, 0x3b, 0x72, 0x5c, 0xab, 0x62, 0x72, 0x1b, 0x43, 0x3b, 0xf3, 0xda, 0x17, 0xce, + 0xf7, 0x5c, 0xc9, 0xad, 0xa4, 0x59, 0x9c, 0x3a, 0x8d, 0x59, 0x9c, 0x3e, 0xd1, 0x24, 0xb6, 0xa1, + 0xc4, 0x84, 0xd1, 0x15, 0x31, 0x5f, 0xf5, 0xda, 0xca, 0x70, 0x77, 0x76, 0xca, 0x6e, 0xcb, 0xd9, + 0x91, 0x34, 0x54, 0xf0, 0xc4, 0x83, 0x72, 0xa0, 0x7c, 0x3b, 0x15, 0x36, 0x0e, 0x97, 0x75, 0xce, + 0x3a, 0x88, 0x72, 0x7f, 0x44, 0x54, 0xd4, 0x4a, 0xc8, 0x07, 0x30, 0xde, 0xb2, 0xda, 0x2a, 0x80, + 0xfc, 0xd6, 0xd0, 0x0f, 0xf5, 0x91, 0x1a, 0x51, 0x6f, 0xb8, 0x5a, 0xbf, 0x81, 0x1c, 0x95, 0xec, + 0xc3, 0x24, 0x93, 0x36, 0xd8, 0x98, 0x1b, 0xa1, 0x8c, 0x2f, 0x63, 0xc7, 0x65, 0x48, 0xa1, 0x88, + 0x18, 0x69, 0x20, 0x6b, 0x30, 0xf9, 0xc8, 0xeb, 0xf6, 0x7b, 0x2a, 0xf2, 0xac, 0x5e, 0x5b, 0xc8, + 0x5b, 0xed, 0xfb, 0x42, 0x24, 0x36, 0x02, 0xf2, 0x9b, 0x61, 0xd4, 0x96, 0xfc, 0x76, 0x01, 0x66, + 0xf8, 0xd1, 0xd1, 0xfb, 0x80, 0x19, 0x64, 0x84, 0x9d, 0x7a, 0x8f, 0xd1, 0x20, 0xde, 0x61, 0x2f, + 0x28, 0xb5, 0x33, 0x1b, 0x29, 0x0d, 0x98, 0xd1, 0x48, 0x7c, 0x28, 0x33, 0xa7, 0x45, 0x6d, 0x2b, + 0x60, 0xc6, 0xfc, 0x99, 0x69, 0x8f, 0x5d, 0x45, 0x85, 0x8d, 0x5a, 0x0b, 0xf9, 0x1d, 0x51, 0x7a, + 0xa9, 0x8a, 0x8f, 0x55, 0x41, 0xf8, 0x85, 0xb3, 0x2c, 0x08, 0x9f, 0x97, 0x75, 0x97, 0x29, 0x0d, + 0x98, 0x55, 0x49, 0xee, 0xc2, 0x45, 0x1e, 0xa9, 0x3c, 0xa2, 0xab, 0xd4, 0x6a, 0x75, 0x1d, 0x97, + 0x36, 0xa9, 0xed, 0xb9, 0x2d, 0x66, 0x5c, 0x14, 0xef, 0x02, 0x2f, 0x1e, 0x1f, 0xd5, 0x2e, 0xd6, + 0xf3, 0x04, 0x30, 0xbf, 0x1d, 0xf9, 0x18, 0xa6, 0x83, 0xa4, 0xc3, 0x6e, 0xbc, 0x30, 0xc2, 0xa3, + 0x74, 0xca, 0xf5, 0x97, 0x99, 0x8d, 0x14, 0x09, 0xd3, 0xba, 0xc8, 0x5b, 0x50, 0xf5, 0x95, 0xa5, + 0x72, 0x58, 0xcf, 0xb8, 0x24, 0xc6, 0x20, 0x6e, 0xd4, 0xed, 0x98, 0x8c, 0x49, 0x19, 0x72, 0x0f, + 0xaa, 0xa1, 0xd7, 0xa5, 0x81, 0x4a, 0xa0, 0x1b, 0x62, 0xf1, 0x17, 0xf3, 0x76, 0xf2, 0x8e, 0x16, + 0x8b, 0xd3, 0xb3, 0x31, 0x8d, 0x61, 0x12, 0x87, 0xc7, 0x7d, 0x51, 0xe1, 0x5c, 0x20, 0x82, 0xdc, + 0x17, 0xd3, 0x71, 0x5f, 0x33, 0xc9, 0xc4, 0xb4, 0x2c, 0x8f, 0xe4, 0xfc, 0xc0, 0xf1, 0x02, 0x27, + 0x3c, 0x5c, 0xe9, 0x5a, 0x8c, 0x09, 0x80, 0x05, 0x01, 0xa0, 0x23, 0xb9, 0xed, 0xac, 0x00, 0x0e, + 0xb6, 0xe1, 0x5e, 0x7e, 0x44, 0x34, 0x5e, 0x12, 0xf1, 0x92, 0x30, 0x4b, 0x51, 0x5b, 0xd4, 0xdc, + 0x13, 0x4a, 0x74, 0x2e, 0x0f, 0x53, 0xa2, 0x43, 0x5a, 0x70, 0xd9, 0xea, 0x87, 0x5e, 0x8f, 0x13, + 0xd2, 0x4d, 0x76, 0xbc, 0x7d, 0xea, 0x1a, 0x57, 0xc4, 0x5d, 0x75, 0xe5, 0xf8, 0xa8, 0x76, 0xb9, + 0xfe, 0x25, 0x72, 0xf8, 0xa5, 0x28, 0xa4, 0x07, 0x65, 0xaa, 0xca, 0x8c, 0x8c, 0xaf, 0x8c, 0x70, + 0x49, 0xa4, 0x6b, 0x95, 0xe4, 0x04, 0x45, 0x34, 0xd4, 0x2a, 0xc8, 0x0e, 0x54, 0x3b, 0x1e, 0x0b, + 0xeb, 0x5d, 0xc7, 0x62, 0x94, 0x19, 0x2f, 0x8b, 0x7d, 0x92, 0x7b, 0xbf, 0xdd, 0x8c, 0xc4, 0xe2, + 0x6d, 0x72, 0x33, 0x6e, 0x89, 0x49, 0x18, 0x42, 0x45, 0xc8, 0xd3, 0x17, 0xab, 0xe6, 0xb9, 0x21, + 0xfd, 0x28, 0x34, 0x16, 0xc5, 0x58, 0x5e, 0xcb, 0x43, 0xde, 0xf6, 0x5a, 0xcd, 0xb4, 0xb4, 0x3c, + 0xe5, 0x19, 0x22, 0x66, 0x31, 0xc9, 0xdb, 0x30, 0xe5, 0x7b, 0xad, 0xa6, 0x4f, 0xed, 0x6d, 0x2b, + 0xb4, 0x3b, 0x46, 0x2d, 0x9d, 0xfe, 0xdf, 0x4e, 0xf0, 0x30, 0x25, 0xb9, 0xf0, 0x3e, 0x9c, 0x1f, + 0xf0, 0xa7, 0x9e, 0xea, 0xad, 0xe4, 0x2f, 0x0a, 0x90, 0x74, 0x67, 0xcf, 0xdc, 0xef, 0xbf, 0x01, + 0xe7, 0x55, 0x8d, 0x29, 0xbf, 0x6c, 0xbb, 0xfd, 0x30, 0x8a, 0x7d, 0x13, 0x59, 0x0f, 0xcc, 0x0a, + 0xe0, 0x60, 0x1b, 0xf3, 0x2f, 0x0b, 0x30, 0x9d, 0x32, 0xdf, 0x67, 0x1e, 0xe7, 0xad, 0x03, 0xe9, + 0x39, 0x41, 0xe0, 0x05, 0xf2, 0x0e, 0xdc, 0xe4, 0x7b, 0x99, 0xa9, 0x12, 0x6f, 0x51, 0x66, 0xb1, + 0x39, 0xc0, 0xc5, 0x9c, 0x16, 0xe6, 0xdf, 0x14, 0x20, 0x4e, 0xab, 0xe9, 0xda, 0xa2, 0xc2, 0x89, + 0xb5, 0x45, 0xaf, 0x43, 0xf9, 0x21, 0xf3, 0xdc, 0xed, 0xb8, 0x02, 0x49, 0x4f, 0xe8, 0xad, 0xe6, + 0xdd, 0x2d, 0x21, 0xa9, 0x25, 0x84, 0xf4, 0x87, 0xeb, 0x4e, 0x37, 0x1c, 0xac, 0xd3, 0xb9, 0xf5, + 0x2b, 0x92, 0x8e, 0x5a, 0x82, 0x2c, 0x43, 0x45, 0x67, 0x72, 0x55, 0x80, 0xa8, 0x27, 0x41, 0xa7, + 0x31, 0x31, 0x96, 0x31, 0x7f, 0x34, 0x06, 0xe5, 0xff, 0x6f, 0xf5, 0xea, 0xfb, 0x50, 0x62, 0xe2, + 0x29, 0x50, 0x05, 0x9e, 0x2b, 0x23, 0x26, 0x87, 0x39, 0x54, 0xf2, 0xed, 0x9b, 0x7f, 0xa3, 0x52, + 0x61, 0x7e, 0x56, 0x80, 0xa9, 0xe7, 0x58, 0xa3, 0xbe, 0x9b, 0xae, 0x51, 0x7f, 0x77, 0xa4, 0xa1, + 0x9d, 0x50, 0x9f, 0xfe, 0x77, 0xf3, 0xf1, 0x90, 0xf8, 0xb4, 0x12, 0x17, 0x2a, 0xd1, 0x01, 0x8f, + 0x12, 0xee, 0xef, 0x8e, 0x14, 0x14, 0xc6, 0x9b, 0x32, 0xa2, 0x30, 0x8c, 0x55, 0x90, 0x6b, 0x00, + 0x94, 0x5b, 0x36, 0x99, 0x8d, 0x1b, 0x4b, 0xe7, 0xa3, 0xd7, 0x34, 0x07, 0x13, 0x52, 0xcf, 0x3f, + 0xe1, 0x90, 0x7f, 0x45, 0x4f, 0x3c, 0x93, 0x2b, 0xfa, 0xf2, 0x99, 0x5f, 0xd1, 0x2f, 0x3f, 0xfb, + 0x2b, 0x3a, 0x11, 0x90, 0x14, 0x47, 0x08, 0x48, 0x3e, 0x86, 0x0b, 0xf2, 0xcf, 0x95, 0xae, 0xe5, + 0xf4, 0xf4, 0x7e, 0x51, 0x45, 0x42, 0x5f, 0xcd, 0xbd, 0x98, 0x69, 0xc0, 0x1c, 0x16, 0x52, 0x37, + 0xbc, 0x1f, 0xb7, 0x8c, 0x5f, 0x98, 0xef, 0xe7, 0xc0, 0x61, 0xae, 0x92, 0xac, 0x07, 0x3b, 0x79, + 0x0a, 0x0f, 0xf6, 0x87, 0x05, 0xb8, 0x68, 0xe5, 0xfd, 0xca, 0x4c, 0xe5, 0x31, 0x6e, 0x8d, 0x14, + 0x4f, 0xa4, 0x10, 0x55, 0x3c, 0x90, 0xc7, 0xc2, 0xfc, 0x3e, 0x90, 0x57, 0xe3, 0x90, 0xb4, 0x22, + 0x36, 0x55, 0x7e, 0x30, 0xf9, 0xfd, 0x6c, 0x2a, 0x08, 0xc4, 0x6c, 0x37, 0x47, 0x36, 0xd8, 0x67, + 0x90, 0x0e, 0xaa, 0x8e, 0x90, 0x0e, 0xca, 0x84, 0x17, 0x53, 0x67, 0x14, 0x5e, 0xb8, 0x30, 0xe7, + 0xf4, 0xac, 0x36, 0xdd, 0xee, 0x77, 0xbb, 0x32, 0xa7, 0xcd, 0x8c, 0x69, 0x81, 0x9d, 0x5b, 0xd9, + 0xc9, 0xc3, 0xbd, 0xae, 0xbc, 0x1f, 0xf5, 0x33, 0x4f, 0xfc, 0x0c, 0xb3, 0x91, 0x41, 0xc2, 0x01, + 0x6c, 0xbe, 0x2d, 0xb9, 0xdb, 0xba, 0x45, 0x43, 0x3e, 0xdb, 0x22, 0x53, 0xa2, 0x7e, 0x4d, 0x7b, + 0x33, 0x26, 0x63, 0x52, 0x86, 0xdc, 0x86, 0x4a, 0xcb, 0x65, 0xdb, 0x5e, 0xd7, 0xb1, 0x0f, 0x45, + 0xba, 0xa3, 0xd2, 0x78, 0x83, 0xdb, 0xb6, 0xd5, 0xad, 0xa6, 0x24, 0x3e, 0x3e, 0xaa, 0x5d, 0x1e, + 0xfc, 0xef, 0x02, 0x96, 0x34, 0x1f, 0xe3, 0xf6, 0x64, 0x53, 0x80, 0xa9, 0x32, 0x67, 0x99, 0xda, + 0xb8, 0x72, 0x82, 0x87, 0xbc, 0xba, 0x15, 0x55, 0x65, 0x4f, 0x2b, 0x75, 0xaa, 0x78, 0x39, 0x46, + 0x20, 0xaf, 0x41, 0xc9, 0x73, 0xd7, 0x3e, 0x72, 0x42, 0xe3, 0x7c, 0x3a, 0xa7, 0x7d, 0x57, 0x50, + 0x51, 0x71, 0xc9, 0x3d, 0xb8, 0x14, 0x86, 0x5d, 0x15, 0xda, 0xd6, 0xf7, 0x42, 0x1a, 0x44, 0xa5, + 0x0c, 0xa2, 0x1c, 0xa5, 0xd8, 0x78, 0xe9, 0xf8, 0xa8, 0x76, 0x69, 0x67, 0xe7, 0x4e, 0x9e, 0x08, + 0x9e, 0xd4, 0xf6, 0xe4, 0xa0, 0x7b, 0x7e, 0xc8, 0xa0, 0x3b, 0x19, 0xe7, 0x5d, 0xf8, 0xd2, 0x38, + 0x6f, 0x20, 0x2e, 0xbd, 0xf8, 0x14, 0x71, 0xe9, 0x07, 0xa2, 0x60, 0xe3, 0xc6, 0x8a, 0x8a, 0xe9, + 0xdf, 0x19, 0x2e, 0x95, 0xc8, 0x11, 0xe4, 0xbb, 0x9d, 0xf8, 0x13, 0x25, 0x26, 0xd9, 0x86, 0x0b, + 0xbe, 0xd7, 0x1a, 0x08, 0x6b, 0x45, 0x10, 0x9f, 0xa8, 0xd6, 0xd9, 0xce, 0x91, 0xc1, 0xdc, 0x96, + 0xc2, 0x96, 0xc6, 0x74, 0xc3, 0x10, 0x13, 0x23, 0x6d, 0x69, 0x4c, 0xc6, 0xa4, 0x4c, 0x36, 0xca, + 0x7b, 0xf1, 0x99, 0x45, 0x79, 0x0b, 0xcf, 0x21, 0xca, 0x7b, 0xe9, 0xf9, 0x45, 0x79, 0x9f, 0x97, + 0x61, 0x26, 0xed, 0xbf, 0xc6, 0xb5, 0x52, 0x85, 0xd3, 0xd6, 0x4a, 0xa5, 0x8a, 0x99, 0xc6, 0x9e, + 0x69, 0x31, 0xd3, 0xf8, 0x99, 0x17, 0x33, 0x25, 0x8a, 0xb6, 0x26, 0x9e, 0x50, 0xb4, 0x55, 0x87, + 0x59, 0xdb, 0xeb, 0xf9, 0xe2, 0x77, 0x11, 0xaa, 0x74, 0x47, 0x3e, 0xaf, 0xeb, 0x07, 0xcc, 0x95, + 0x34, 0x1b, 0xb3, 0xf2, 0x84, 0x41, 0xd1, 0x15, 0x0d, 0x4b, 0x23, 0x14, 0x7c, 0xa6, 0x17, 0x4c, + 0x5c, 0x94, 0xaa, 0xe6, 0x52, 0xbb, 0xe9, 0x52, 0xbd, 0xd4, 0xc5, 0x1d, 0x8d, 0xd9, 0x74, 0x91, + 0x1d, 0x33, 0x2a, 0x42, 0xff, 0xaf, 0x9e, 0x85, 0xfe, 0x74, 0x45, 0x9f, 0xea, 0x49, 0xfc, 0xa6, + 0x9b, 0xe6, 0x62, 0xb6, 0x27, 0x24, 0x80, 0x17, 0xfc, 0x3c, 0x37, 0x8c, 0xa9, 0x57, 0xa5, 0x2f, + 0x73, 0x06, 0x17, 0x95, 0x96, 0x17, 0x72, 0x1d, 0x39, 0x86, 0x27, 0x20, 0x27, 0x2b, 0xc2, 0xca, + 0xcf, 0xaa, 0x22, 0x6c, 0xe1, 0x50, 0x16, 0x9b, 0x9e, 0x58, 0xa7, 0x7a, 0x2f, 0x5d, 0x3b, 0xfe, + 0xfe, 0x90, 0xff, 0x81, 0x4c, 0x54, 0xce, 0x9a, 0xac, 0x91, 0xfd, 0xad, 0x02, 0x5c, 0xc8, 0x5b, + 0x96, 0x9c, 0x5e, 0x34, 0xd3, 0xbd, 0x18, 0x2d, 0x5c, 0x4b, 0x9a, 0x96, 0x7f, 0x2b, 0x26, 0x82, + 0xc3, 0x90, 0xfa, 0x3f, 0x7b, 0x39, 0x1e, 0xea, 0xe5, 0x38, 0xf5, 0xfb, 0xdf, 0xe2, 0x73, 0xfc, + 0xfd, 0x6f, 0x69, 0x88, 0xdf, 0xff, 0x4e, 0x3e, 0xcf, 0xdf, 0xff, 0x96, 0x4f, 0xf9, 0xfb, 0xdf, + 0xca, 0xb3, 0xff, 0xfd, 0xef, 0x17, 0x05, 0x98, 0xcb, 0x96, 0x23, 0x3f, 0x87, 0x24, 0xd9, 0x7e, + 0x2a, 0x49, 0xb6, 0x31, 0x92, 0x31, 0x8f, 0xba, 0x7d, 0x52, 0xb2, 0xcc, 0xfc, 0x49, 0x01, 0x06, + 0x4a, 0xae, 0x9f, 0x43, 0x1e, 0xeb, 0x61, 0x3a, 0x8f, 0xb5, 0x76, 0x26, 0x83, 0x3c, 0x21, 0x9f, + 0xf5, 0xdf, 0x39, 0x43, 0xfc, 0x5f, 0xc9, 0x6b, 0xa5, 0x4c, 0xdb, 0xd8, 0xb3, 0x37, 0x6d, 0x8d, + 0xa5, 0x4f, 0xbf, 0x58, 0x3c, 0xf7, 0xd9, 0x17, 0x8b, 0xe7, 0x3e, 0xff, 0x62, 0xf1, 0xdc, 0x27, + 0xc7, 0x8b, 0x85, 0x4f, 0x8f, 0x17, 0x0b, 0x9f, 0x1d, 0x2f, 0x16, 0x3e, 0x3f, 0x5e, 0x2c, 0xfc, + 0xe4, 0x78, 0xb1, 0xf0, 0x87, 0xff, 0xb2, 0x78, 0xee, 0xd7, 0xca, 0x11, 0xee, 0xff, 0x04, 0x00, + 0x00, 0xff, 0xff, 0x93, 0x34, 0x6f, 0xbd, 0xd9, 0x4e, 0x00, 0x00, } func (m *ArchiveStrategy) Marshal() (dAtA []byte, err error) { @@ -2354,6 +2355,11 @@ func (m *CronWorkflowOptions) MarshalToSizedBuffer(dAtA []byte) (int, error) { _ = i var l int _ = l + i -= len(m.RuntimeNamespace) + copy(dAtA[i:], m.RuntimeNamespace) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.RuntimeNamespace))) + i-- + dAtA[i] = 0x12 i -= len(m.Schedule) copy(dAtA[i:], m.Schedule) i = encodeVarintGenerated(dAtA, i, uint64(len(m.Schedule))) @@ -5403,6 +5409,8 @@ func (m *CronWorkflowOptions) Size() (n int) { _ = l l = len(m.Schedule) n += 1 + l + sovGenerated(uint64(l)) + l = len(m.RuntimeNamespace) + n += 1 + l + sovGenerated(uint64(l)) return n } @@ -6574,6 +6582,7 @@ func (this *CronWorkflowOptions) String() string { } s := strings.Join([]string{`&CronWorkflowOptions{`, `Schedule:` + fmt.Sprintf("%v", this.Schedule) + `,`, + `RuntimeNamespace:` + fmt.Sprintf("%v", this.RuntimeNamespace) + `,`, `}`, }, "") return s @@ -8902,6 +8911,38 @@ func (m *CronWorkflowOptions) Unmarshal(dAtA []byte) error { } m.Schedule = string(dAtA[iNdEx:postIndex]) iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field RuntimeNamespace", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.RuntimeNamespace = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex default: iNdEx = preIndex skippy, err := skipGenerated(dAtA[iNdEx:]) diff --git a/pkg/apis/workflow/v1alpha1/generated.proto b/pkg/apis/workflow/v1alpha1/generated.proto index 8f76944d2047..2799d2bb0370 100644 --- a/pkg/apis/workflow/v1alpha1/generated.proto +++ b/pkg/apis/workflow/v1alpha1/generated.proto @@ -146,6 +146,9 @@ message CronWorkflowList { message CronWorkflowOptions { // Schedule is a schedule to run the Workflow in Cron format optional string schedule = 1; + + // RuntimeNamespace is the namespace where the CronWorkflow will run + optional string runtimeNamespace = 2; } // DAGTask represents a node in the graph during DAG execution diff --git a/pkg/apis/workflow/v1alpha1/openapi_generated.go b/pkg/apis/workflow/v1alpha1/openapi_generated.go index 4618fde1ebc9..c507b5c3a679 100644 --- a/pkg/apis/workflow/v1alpha1/openapi_generated.go +++ b/pkg/apis/workflow/v1alpha1/openapi_generated.go @@ -526,8 +526,15 @@ func schema_pkg_apis_workflow_v1alpha1_CronWorkflowOptions(ref common.ReferenceC Format: "", }, }, + "runtimeNamespace": { + SchemaProps: spec.SchemaProps{ + Description: "RuntimeNamespace is the namespace where the CronWorkflow will run", + Type: []string{"string"}, + Format: "", + }, + }, }, - Required: []string{"schedule"}, + Required: []string{"schedule", "runtimeNamespace"}, }, }, } diff --git a/workflow/cron/controller.go b/workflow/cron/controller.go index c534da167179..08e95fb1c4bf 100644 --- a/workflow/cron/controller.go +++ b/workflow/cron/controller.go @@ -17,14 +17,14 @@ import ( "time" ) -// CronController is a controller for cron workflows -type CronController struct { +// Controller is a controller for cron workflows +type Controller struct { namespace string cron *cron.Cron nameEntryIDMap map[string]cron.EntryID - kubeclientset kubernetes.Interface - wfclientset versioned.Interface - wfcronInformer extv1alpha1.CronWorkflowInformer + kubeClientset kubernetes.Interface + wfClientset versioned.Interface + wfCronInformer extv1alpha1.CronWorkflowInformer cronLock sync.Mutex } @@ -36,20 +36,20 @@ func NewCronController( kubeclientset kubernetes.Interface, wfclientset versioned.Interface, namespace string, -) *CronController { - return &CronController{ - kubeclientset: kubeclientset, - wfclientset: wfclientset, +) *Controller { + return &Controller{ + kubeClientset: kubeclientset, + wfClientset: wfclientset, namespace: namespace, cron: cron.New(), nameEntryIDMap: make(map[string]cron.EntryID), } } -func (cc *CronController) Run(ctx context.Context) { +func (cc *Controller) Run(ctx context.Context) { log.Infof("Starting CronWorkflow controller") - cc.wfcronInformer = cc.newCronWorkflowInformer() + cc.wfCronInformer = cc.newCronWorkflowInformer() cc.addCronWorkflowInformerHandler() // Get outstanding CronWorkflows @@ -61,15 +61,15 @@ func (cc *CronController) Run(ctx context.Context) { cc.cron.Start() defer cc.cron.Stop() - go cc.wfcronInformer.Informer().Run(ctx.Done()) + go cc.wfCronInformer.Informer().Run(ctx.Done()) <-ctx.Done() } -func (cc *CronController) parseOutstandingCronWorkflows() error { +func (cc *Controller) parseOutstandingCronWorkflows() error { log.Infof("Parsing outstanding CronWorkflows") - cronWorkflows, err := cc.wfcronInformer.Lister().CronWorkflows(cc.namespace).List(labels.Everything()) + cronWorkflows, err := cc.wfCronInformer.Lister().CronWorkflows(cc.namespace).List(labels.Everything()) if err != nil { return errors.Wrap(err, "Error parsing existing CronWorkflow") } @@ -83,7 +83,7 @@ func (cc *CronController) parseOutstandingCronWorkflows() error { return nil } -func (cc *CronController) startCronWorkflow(cronWorkflow *v1alpha1.CronWorkflow) error { +func (cc *Controller) startCronWorkflow(cronWorkflow *v1alpha1.CronWorkflow) error { cc.cronLock.Lock() defer cc.cronLock.Unlock() @@ -94,22 +94,20 @@ func (cc *CronController) startCronWorkflow(cronWorkflow *v1alpha1.CronWorkflow) cc.cron.Remove(entryId) delete(cc.nameEntryIDMap, cronWorkflow.Name) } - // TODO: this is mostly a place holder. This is most likely not how/where we will be running the workflows - entryId, err := cc.cron.AddFunc(cronWorkflow.Options.Schedule, func() { log.Infof("Would have run %s", cronWorkflow.Name) }) + // TODO: Should we make a deep copy of the cronWorkflow? + // TODO: Almost sure the wfClientset should be passed as reference and not value + cronWorkflowJob := NewCronWorkflowJob(cronWorkflow.Name, cronWorkflow, cc.wfClientset) + entryId, err := cc.cron.AddJob(cronWorkflow.Options.Schedule, cronWorkflowJob) if err != nil { return errors.Wrap(err, "Unable to add CronWorkflow") } cc.nameEntryIDMap[cronWorkflow.Name] = entryId log.Infof("CronWorkflow %s added", cronWorkflow.Name) - - log.Infof("SIMON Entries %v", cc.cron.Entries()) - log.Infof("SIMON Entry next %s", cc.cron.Entry(entryId).Next) - return nil } -func (cc *CronController) stopCronWorkflow(cronWorkflow *v1alpha1.CronWorkflow) error { +func (cc *Controller) stopCronWorkflow(cronWorkflow *v1alpha1.CronWorkflow) error { cc.cronLock.Lock() defer cc.cronLock.Unlock() @@ -123,22 +121,20 @@ func (cc *CronController) stopCronWorkflow(cronWorkflow *v1alpha1.CronWorkflow) log.Infof("CronWorkflow %s removed", cronWorkflow.Name) return nil - - } -func (cc *CronController) addCronWorkflowInformerHandler() { - cc.wfcronInformer.Informer().AddEventHandler(cache.ResourceEventHandlerFuncs{ +func (cc *Controller) addCronWorkflowInformerHandler() { + cc.wfCronInformer.Informer().AddEventHandler(cache.ResourceEventHandlerFuncs{ AddFunc: func(obj interface{}) { log.Infof("SIMON Adding object: %v", obj) cronWf, err := convertToWorkflow(obj) if err != nil { log.Error(err) + return } err = cc.startCronWorkflow(cronWf) if err != nil { log.Errorf("Error starting CronWorkflow %s: %s", cronWf.Name, err) - return } }, UpdateFunc: func(old, new interface{}) { @@ -146,11 +142,11 @@ func (cc *CronController) addCronWorkflowInformerHandler() { cronWf, err := convertToWorkflow(new) if err != nil { log.Error(err) + return } err = cc.startCronWorkflow(cronWf) if err != nil { log.Errorf("Error starting CronWorkflow %s: %s", cronWf.Name, err) - return } }, DeleteFunc: func(obj interface{}) { @@ -158,19 +154,19 @@ func (cc *CronController) addCronWorkflowInformerHandler() { cronWf, err := convertToWorkflow(obj) if err != nil { log.Error(err) + return } err = cc.stopCronWorkflow(cronWf) if err != nil { log.Errorf("Error stopping CronWorkflow %s: %s", cronWf.Name, err) - return } }, }) } -func (cc *CronController) newCronWorkflowInformer() extv1alpha1.CronWorkflowInformer { +func (cc *Controller) newCronWorkflowInformer() extv1alpha1.CronWorkflowInformer { var informerFactory externalversions.SharedInformerFactory - informerFactory = externalversions.NewSharedInformerFactory(cc.wfclientset, cronWorkflowResyncPeriod) + informerFactory = externalversions.NewSharedInformerFactory(cc.wfClientset, cronWorkflowResyncPeriod) return informerFactory.Argoproj().V1alpha1().CronWorkflows() } diff --git a/workflow/cron/cron_workflow_job.go b/workflow/cron/cron_workflow_job.go new file mode 100644 index 000000000000..fa516059976e --- /dev/null +++ b/workflow/cron/cron_workflow_job.go @@ -0,0 +1,53 @@ +package cron + +import ( + "github.com/argoproj/argo/pkg/apis/workflow" + "github.com/argoproj/argo/pkg/apis/workflow/v1alpha1" + "github.com/argoproj/argo/pkg/client/clientset/versioned" + "github.com/argoproj/argo/workflow/util" + "github.com/prometheus/common/log" +) + +type CronWorkflowJob struct { + // Name is the name of the CronWorkflow template to be run + Name string + + // CronWorkflow is the CronWorkflow to be run + // TODO: Maybe do the casting during submission and store the actual Workflow type here? + cronWf *v1alpha1.CronWorkflow + + wfClientset versioned.Interface +} + +func NewCronWorkflowJob(templateName string, cronWorkflow *v1alpha1.CronWorkflow, wfClientset versioned.Interface) *CronWorkflowJob { + return &CronWorkflowJob{ + Name: templateName, + cronWf: cronWorkflow, + wfClientset: wfClientset, + } +} + +func (job *CronWorkflowJob) Run() { + log.Infof("Running %s", job.Name) + wf := job.castToWorkflow() + runtimeNamespace := job.cronWf.Options.RuntimeNamespace + wfClient := job.wfClientset.ArgoprojV1alpha1().Workflows(runtimeNamespace) + // TODO: Is this the best way to submit Workflows? + // TODO: SubmitOpts is currently always nil + _, err := util.SubmitWorkflow(wfClient, job.wfClientset, runtimeNamespace, wf, &util.SubmitOpts{}) + if err != nil { + log.Fatalf("Failed to submit workflow: %v", err) + } + log.Infof("Created %s", job.Name) +} + +func (job *CronWorkflowJob) castToWorkflow() *v1alpha1.Workflow { + // TODO: Overall, is this the best way to create the actual Workflow object? + newTypeMeta := job.cronWf.TypeMeta + newTypeMeta.Kind = workflow.WorkflowKind + return &v1alpha1.Workflow{ + TypeMeta: newTypeMeta, + ObjectMeta: job.cronWf.ObjectMeta, + Spec: job.cronWf.Spec, + } +} From eb5a0f560d1dc6476fff0ed90d5e2df8a659bfc6 Mon Sep 17 00:00:00 2001 From: Simon Behar Date: Tue, 12 Nov 2019 09:17:51 -0800 Subject: [PATCH 07/44] WIP: Can now run WFs --- api/openapi-spec/swagger.json | 7 +- .../workflow/v1alpha1/cron_workflow_types.go | 2 + pkg/apis/workflow/v1alpha1/generated.pb.go | 521 ++++++++++-------- pkg/apis/workflow/v1alpha1/generated.proto | 3 + .../workflow/v1alpha1/openapi_generated.go | 9 +- workflow/config/config.go | 2 +- workflow/cron/controller.go | 17 +- workflow/cron/cron_workflow_job.go | 55 +- 8 files changed, 345 insertions(+), 271 deletions(-) diff --git a/api/openapi-spec/swagger.json b/api/openapi-spec/swagger.json index 5c96271a685e..cd9043ab8370 100644 --- a/api/openapi-spec/swagger.json +++ b/api/openapi-spec/swagger.json @@ -259,9 +259,14 @@ "type": "object", "required": [ "schedule", - "runtimeNamespace" + "runtimeNamespace", + "runtimeGenerateName" ], "properties": { + "runtimeGenerateName": { + "description": "RuntimeGenerateName is the name generator the Workflow will be run with. Mutually exclusive with RuntimeName", + "type": "string" + }, "runtimeNamespace": { "description": "RuntimeNamespace is the namespace where the CronWorkflow will run", "type": "string" diff --git a/pkg/apis/workflow/v1alpha1/cron_workflow_types.go b/pkg/apis/workflow/v1alpha1/cron_workflow_types.go index 2b692a49fdc6..d71e18f9894a 100644 --- a/pkg/apis/workflow/v1alpha1/cron_workflow_types.go +++ b/pkg/apis/workflow/v1alpha1/cron_workflow_types.go @@ -29,4 +29,6 @@ type CronWorkflowOptions struct { Schedule string `json:"schedule" protobuf:"bytes,1,opt,name=schedule"` // RuntimeNamespace is the namespace where the CronWorkflow will run RuntimeNamespace string `json:"runtimeNamespace" protobuf:"bytes,2,opt,name=runtimeNamespace"` + // RuntimeGenerateName is the name generator the Workflow will be run with. Mutually exclusive with RuntimeName + RuntimeGenerateName string `json:"runtimeGenerateName" protobuf:"bytes,3,opt,name=runtimeGenerateName"` } diff --git a/pkg/apis/workflow/v1alpha1/generated.pb.go b/pkg/apis/workflow/v1alpha1/generated.pb.go index f0663f9a259b..a1f5a59b8103 100644 --- a/pkg/apis/workflow/v1alpha1/generated.pb.go +++ b/pkg/apis/workflow/v1alpha1/generated.pb.go @@ -1497,15 +1497,15 @@ func init() { } var fileDescriptor_c23edafa7e7ea072 = []byte{ - // 4747 bytes of a gzipped FileDescriptorProto + // 4767 bytes of a gzipped FileDescriptorProto 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xec, 0x5c, 0x4d, 0x6c, 0x1c, 0x57, 0x72, 0xd6, 0x90, 0x9c, 0xe1, 0x4c, 0x0d, 0xff, 0xf4, 0x28, 0x59, 0x6d, 0x5a, 0xe6, 0x68, 0xdb, 0xb0, 0xa3, 0x4d, 0x6c, 0xd2, 0x96, 0x76, 0x13, 0xaf, 0x37, 0xb6, 0x77, 0x86, 0x3f, 0x12, 0x25, 0x91, 0x62, 0x6a, 0x28, 0x29, 0x1b, 0x2f, 0xb2, 0x69, 0xf6, 0x3c, 0xce, 0xb4, 0x38, 0xd3, 0xdd, - 0xee, 0xd7, 0x23, 0x9a, 0xf0, 0x21, 0x4e, 0x90, 0x20, 0x59, 0x04, 0x0b, 0x24, 0x97, 0x64, 0x91, - 0xbd, 0x04, 0x39, 0x24, 0x97, 0x5c, 0x72, 0x0d, 0x82, 0x0d, 0x10, 0xe4, 0x60, 0xec, 0x25, 0xbe, - 0xc5, 0x87, 0x80, 0x58, 0x33, 0x97, 0x04, 0x09, 0x10, 0x20, 0x97, 0x00, 0x3a, 0x05, 0xef, 0xa7, - 0x5f, 0xff, 0x4c, 0xd3, 0xa2, 0x66, 0x28, 0x05, 0xc9, 0xee, 0x49, 0xec, 0xaa, 0x7a, 0x5f, 0xbd, + 0xee, 0xd7, 0x23, 0x9a, 0xf0, 0x21, 0x4e, 0x90, 0x20, 0x09, 0x82, 0x05, 0x92, 0x4b, 0xb2, 0xc8, + 0x5e, 0x82, 0x1c, 0x92, 0x4b, 0x2e, 0xb9, 0x06, 0xc1, 0x06, 0x08, 0x72, 0x30, 0xf6, 0x12, 0xdf, + 0xe2, 0x43, 0x40, 0xac, 0x99, 0x4b, 0x82, 0x04, 0x08, 0x90, 0x4b, 0x00, 0x9d, 0x82, 0xf7, 0xd3, + 0xaf, 0x7f, 0xa6, 0x69, 0x51, 0x33, 0x94, 0x82, 0xec, 0xee, 0x49, 0xec, 0xaa, 0x7a, 0x5f, 0xbd, 0xdf, 0x7a, 0x55, 0xf5, 0x6a, 0x04, 0x2b, 0x6d, 0x27, 0xec, 0xf4, 0x77, 0x97, 0x6c, 0xaf, 0xb7, 0x6c, 0x05, 0x6d, 0xcf, 0x0f, 0xbc, 0x87, 0xe2, 0x8f, 0x65, 0x7f, 0xbf, 0xbd, 0x6c, 0xf9, 0x0e, 0x5b, 0x3e, 0xf0, 0x82, 0xfd, 0xbd, 0xae, 0x77, 0xb0, 0xfc, 0xe8, 0x2d, 0xab, 0xeb, 0x77, 0xac, @@ -1515,28 +1515,28 @@ var fileDescriptor_c23edafa7e7ea072 = []byte{ 0x87, 0xf8, 0x4b, 0xea, 0x58, 0x30, 0xf7, 0xdf, 0x66, 0x4b, 0x8e, 0xc7, 0xbb, 0xb4, 0x6c, 0x7b, 0x01, 0x5d, 0x7e, 0x34, 0xd0, 0x8f, 0x85, 0xaf, 0xc5, 0x32, 0x3d, 0xcb, 0xee, 0x38, 0x2e, 0x0d, 0x0e, 0xe3, 0x71, 0xf4, 0x68, 0x68, 0xe5, 0xb5, 0x5a, 0x3e, 0xa9, 0x55, 0xd0, 0x77, 0x43, 0xa7, - 0x47, 0x07, 0x1a, 0xfc, 0xe2, 0x93, 0x1a, 0x30, 0xbb, 0x43, 0x7b, 0x56, 0xb6, 0x9d, 0xf9, 0x8f, + 0x47, 0x07, 0x1a, 0xfc, 0xe2, 0x93, 0x1a, 0x30, 0xbb, 0x43, 0x7b, 0x56, 0xb6, 0x9d, 0xf9, 0x4f, 0x05, 0x98, 0xad, 0x07, 0x76, 0xc7, 0x79, 0x44, 0x9b, 0x21, 0x67, 0xb4, 0x0f, 0xc9, 0x07, 0x30, 0x1e, 0x5a, 0x81, 0x51, 0xb8, 0x52, 0xb8, 0x5a, 0xbd, 0xf6, 0xad, 0xa5, 0x21, 0x26, 0x72, 0x69, 0xc7, 0x0a, 0x22, 0xb8, 0xc6, 0xe4, 0xf1, 0x51, 0x6d, 0x7c, 0xc7, 0x0a, 0x90, 0xa3, 0x92, 0xef, 0xc2, 0x84, 0xeb, 0xb9, 0xd4, 0x18, 0x13, 0xe8, 0xf5, 0xa1, 0xd0, 0xb7, 0x3c, 0x57, 0xf7, 0xb6, - 0x51, 0x3e, 0x3e, 0xaa, 0x4d, 0x70, 0x0a, 0x0a, 0x60, 0xf3, 0x3f, 0x0b, 0x50, 0xa9, 0x07, 0xed, + 0x51, 0x3e, 0x3e, 0xaa, 0x4d, 0x70, 0x0a, 0x0a, 0x60, 0xf3, 0xbf, 0x0a, 0x50, 0xa9, 0x07, 0xed, 0x7e, 0x8f, 0xba, 0x21, 0x23, 0x01, 0x80, 0x6f, 0x05, 0x56, 0x8f, 0x86, 0x34, 0x60, 0x46, 0xe1, 0xca, 0xf8, 0xd5, 0xea, 0xb5, 0xf7, 0x86, 0x52, 0xba, 0x1d, 0xc1, 0x34, 0xc8, 0xa7, 0x47, 0xb5, 0x73, 0xc7, 0x47, 0x35, 0xd0, 0x24, 0x86, 0x09, 0x2d, 0xc4, 0x85, 0x8a, 0x15, 0x84, 0xce, 0x9e, 0x65, 0x87, 0xcc, 0x18, 0x13, 0x2a, 0xdf, 0x1d, 0x4a, 0x65, 0x5d, 0xa1, 0x34, 0xce, 0x2b, 0x8d, - 0x95, 0x88, 0xc2, 0x30, 0x56, 0x61, 0xfe, 0xfb, 0x38, 0x94, 0x23, 0x06, 0xb9, 0x02, 0x13, 0xae, + 0x95, 0x88, 0xc2, 0x30, 0x56, 0x61, 0xfe, 0xc7, 0x38, 0x94, 0x23, 0x06, 0xb9, 0x02, 0x13, 0xae, 0xd5, 0xa3, 0x62, 0xf5, 0x2a, 0x8d, 0x29, 0xd5, 0x70, 0x62, 0xcb, 0xea, 0xf1, 0x09, 0xb2, 0x7a, 0x94, 0x4b, 0xf8, 0x56, 0xd8, 0x11, 0x2b, 0x90, 0x90, 0xd8, 0xb6, 0xc2, 0x0e, 0x0a, 0x0e, 0xb9, 0x0c, 0x13, 0x3d, 0xaf, 0x45, 0x8d, 0xf1, 0x2b, 0x85, 0xab, 0x45, 0x39, 0xc1, 0x9b, 0x5e, 0x8b, 0xa2, 0xa0, 0xf2, 0xf6, 0x7b, 0x81, 0xd7, 0x33, 0x26, 0xd2, 0xed, 0xd7, 0x03, 0xaf, 0x87, 0x82, - 0x43, 0xfe, 0xa0, 0x00, 0x73, 0x51, 0xf7, 0xee, 0x78, 0xb6, 0x15, 0x3a, 0x9e, 0x6b, 0x14, 0xc5, + 0x43, 0xfe, 0xb0, 0x00, 0x73, 0x51, 0xf7, 0xee, 0x78, 0xb6, 0x15, 0x3a, 0x9e, 0x6b, 0x14, 0xc5, 0x82, 0xaf, 0x8d, 0x34, 0x11, 0x11, 0x58, 0xc3, 0x50, 0x5a, 0xe7, 0xb2, 0x1c, 0x1c, 0x50, 0x4c, 0xae, 0x01, 0xb4, 0xbb, 0xde, 0xae, 0xd5, 0xe5, 0x73, 0x60, 0x94, 0x44, 0xaf, 0xf5, 0x12, 0xde, 0xd0, 0x1c, 0x4c, 0x48, 0x91, 0x7d, 0x98, 0xb4, 0xe4, 0xa9, 0x30, 0x26, 0x45, 0xbf, 0x57, 0x87, 0xec, 0x77, 0xea, 0x64, 0x35, 0xaa, 0xc7, 0x47, 0xb5, 0x49, 0x45, 0xc4, 0x48, 0x03, 0x79, 0x1d, 0xca, 0x9e, 0xcf, 0xbb, 0x6a, 0x75, 0x8d, 0xf2, 0x95, 0xc2, 0xd5, 0x72, 0x63, 0x4e, 0x75, 0xaf, - 0x7c, 0x57, 0xd1, 0x51, 0x4b, 0x98, 0x7f, 0x52, 0x84, 0x81, 0x51, 0x93, 0xb7, 0xa0, 0xaa, 0xd0, + 0x7c, 0x57, 0xd1, 0x51, 0x4b, 0x98, 0x7f, 0x5a, 0x84, 0x81, 0x51, 0x93, 0xb7, 0xa0, 0xaa, 0xd0, 0xee, 0x78, 0x6d, 0x26, 0x16, 0xbf, 0xdc, 0x98, 0x3d, 0x3e, 0xaa, 0x55, 0xeb, 0x31, 0x19, 0x93, 0x32, 0xe4, 0x01, 0x8c, 0xb1, 0xeb, 0xea, 0x18, 0xbe, 0x3f, 0xd4, 0xe8, 0x9a, 0xd7, 0xf5, 0x06, 0x2d, 0x1d, 0x1f, 0xd5, 0xc6, 0x9a, 0xd7, 0x71, 0x8c, 0x5d, 0xe7, 0xe6, 0xa3, 0xed, 0x84, 0x62, @@ -1549,17 +1549,17 @@ var fileDescriptor_c23edafa7e7ea072 = []byte{ 0xb4, 0x0e, 0x90, 0xa3, 0x9a, 0x6d, 0xb8, 0x18, 0x71, 0x90, 0xfa, 0x1e, 0x73, 0xc4, 0x00, 0xe9, 0x1e, 0x59, 0x86, 0x8a, 0xed, 0xb9, 0x7b, 0x4e, 0x7b, 0xd3, 0xf2, 0x95, 0x61, 0xd2, 0x16, 0x6d, 0x25, 0x62, 0x60, 0x2c, 0x43, 0x5e, 0x86, 0xf1, 0x7d, 0x7a, 0xa8, 0x2c, 0x54, 0x55, 0x89, 0x8e, - 0xdf, 0xa6, 0x87, 0xc8, 0xe9, 0xe6, 0x8f, 0x0a, 0x30, 0x9f, 0x33, 0xb9, 0xbc, 0x59, 0x3f, 0xe8, + 0xdf, 0xa6, 0x87, 0xc8, 0xe9, 0xe6, 0x0f, 0x0b, 0x30, 0x9f, 0x33, 0xb9, 0xbc, 0x59, 0x3f, 0xe8, 0x2a, 0x0d, 0xba, 0xd9, 0x3d, 0xbc, 0x83, 0x9c, 0x4e, 0x7e, 0xaf, 0x00, 0xb3, 0x89, 0xd9, 0xae, 0xf7, 0x95, 0x11, 0x1c, 0xfe, 0x74, 0xa7, 0xb0, 0x1a, 0x97, 0x94, 0xc6, 0xd9, 0x0c, 0x03, 0xb3, - 0x5a, 0xcd, 0x7f, 0x12, 0xb7, 0x6e, 0x8a, 0x46, 0x2c, 0x98, 0xe9, 0x33, 0x1a, 0x70, 0x13, 0xdd, + 0x5a, 0xcd, 0x7f, 0x16, 0xb7, 0x6e, 0x8a, 0x46, 0x2c, 0x98, 0xe9, 0x33, 0x1a, 0x70, 0x13, 0xdd, 0xa4, 0x76, 0x40, 0x43, 0x75, 0x01, 0xbf, 0xba, 0x24, 0xaf, 0x76, 0xde, 0x8b, 0x25, 0xee, 0x65, 0x2c, 0x3d, 0x7a, 0x6b, 0x49, 0x4a, 0xdc, 0xa6, 0x87, 0x4d, 0xda, 0xa5, 0x1c, 0xa3, 0x41, 0x8e, 0x8f, 0x6a, 0x33, 0xf7, 0x52, 0x00, 0x98, 0x01, 0xe4, 0x2a, 0x7c, 0x8b, 0xb1, 0x03, 0x2f, 0x68, 0x29, 0x15, 0x63, 0x4f, 0xad, 0x62, 0x3b, 0x05, 0x80, 0x19, 0x40, 0xf3, 0xdb, 0x00, 0x2b, 0x9e, 0x1b, 0x3a, 0x6e, 0x9f, 0xde, 0x75, 0xc9, 0x2b, 0x50, 0xa4, 0x41, 0xe0, 0x05, 0xca, 0x20, 0x4d, 0xab, 0x09, 0x2a, 0xae, 0x71, 0x22, 0x4a, 0x1e, 0x79, 0x0d, 0x4a, 0x7b, 0x96, 0xd3, 0xa5, 0x2d, - 0xd1, 0x9b, 0x72, 0x63, 0x46, 0x49, 0x95, 0xd6, 0x05, 0x15, 0x15, 0xd7, 0xfc, 0xf1, 0x18, 0x4c, + 0xd1, 0x9b, 0x72, 0x63, 0x46, 0x49, 0x95, 0xd6, 0x05, 0x15, 0x15, 0xd7, 0xfc, 0xd1, 0x18, 0x4c, 0xad, 0x04, 0x9e, 0xfb, 0x40, 0x2d, 0x04, 0xf9, 0x0d, 0x28, 0x73, 0xff, 0xa9, 0x65, 0x85, 0x96, 0x9a, 0xab, 0x37, 0x13, 0x03, 0xd1, 0x6e, 0x50, 0xbc, 0x84, 0x5c, 0x9a, 0x0f, 0xed, 0xee, 0xee, 0x43, 0x6a, 0x87, 0x9b, 0x34, 0xb4, 0xe2, 0x8b, 0x20, 0xa6, 0xa1, 0x46, 0x25, 0x36, 0x4c, 0x30, @@ -1568,233 +1568,234 @@ var fileDescriptor_c23edafa7e7ea072 = []byte{ 0xd6, 0x98, 0x55, 0xea, 0x26, 0x15, 0x01, 0x23, 0x4d, 0xe6, 0xe7, 0x05, 0x98, 0x4b, 0xb6, 0xb8, 0xe3, 0xb0, 0x90, 0x7c, 0x67, 0x60, 0x42, 0x97, 0x4e, 0x37, 0xa1, 0xbc, 0xb5, 0x98, 0x4e, 0x7d, 0x71, 0x45, 0x94, 0xc4, 0x64, 0xee, 0x41, 0xd1, 0x09, 0x69, 0x2f, 0x72, 0x89, 0xea, 0x23, 0x8f, - 0x32, 0xde, 0x4f, 0x1b, 0x1c, 0x17, 0x25, 0xbc, 0xf9, 0xbd, 0x02, 0xcc, 0xe7, 0x4c, 0x06, 0xbf, - 0x66, 0xb9, 0x13, 0xdc, 0xea, 0x77, 0x23, 0xef, 0x48, 0xf7, 0xb6, 0xa9, 0xe8, 0xa8, 0x25, 0xc8, - 0x2a, 0xcc, 0x29, 0xd7, 0x99, 0x3b, 0x04, 0xcc, 0xb7, 0x6c, 0xaa, 0xec, 0x91, 0xf6, 0x3d, 0x30, - 0xc3, 0xc7, 0x81, 0x16, 0xe6, 0x9f, 0x96, 0x60, 0x72, 0xb5, 0x7e, 0x63, 0xc7, 0x62, 0xfb, 0xa7, - 0xf0, 0xcc, 0x5e, 0x87, 0x72, 0x48, 0x7b, 0x7e, 0xd7, 0x0a, 0x23, 0x5d, 0xba, 0x87, 0x3b, 0x8a, - 0x8e, 0x5a, 0x82, 0x78, 0xdc, 0xcd, 0x54, 0x7e, 0xae, 0xda, 0x39, 0xef, 0x0d, 0x69, 0xc7, 0x14, - 0x4a, 0xd2, 0xcf, 0x54, 0x24, 0x8c, 0x75, 0x10, 0x06, 0xd5, 0x48, 0x39, 0xd2, 0x3d, 0x75, 0x05, - 0x0f, 0x19, 0x1f, 0xc4, 0x38, 0xf2, 0x4a, 0x4c, 0x10, 0x30, 0xa9, 0x85, 0x7c, 0x0d, 0xa6, 0x5a, - 0xd4, 0xa7, 0x6e, 0x8b, 0xba, 0xb6, 0x43, 0x99, 0x51, 0xbc, 0x32, 0xce, 0xe7, 0xe5, 0xf8, 0xa8, - 0x36, 0xb5, 0x9a, 0xa0, 0x63, 0x4a, 0x8a, 0x3c, 0x84, 0xca, 0x81, 0x13, 0x76, 0xc4, 0xbe, 0x30, - 0x4a, 0x62, 0xbf, 0x7d, 0x63, 0xa8, 0x8e, 0x72, 0x84, 0x78, 0x5a, 0x1e, 0x44, 0x98, 0x18, 0xc3, - 0xf3, 0xdb, 0x8d, 0x7f, 0x88, 0x60, 0x40, 0xdc, 0xac, 0x95, 0x74, 0x03, 0xc1, 0xc0, 0x58, 0x86, - 0x30, 0x98, 0xe2, 0x1f, 0x4d, 0xfa, 0x61, 0x9f, 0xba, 0x36, 0x15, 0x3e, 0xdf, 0xb0, 0x21, 0x42, - 0x04, 0x22, 0x67, 0xe4, 0x41, 0x02, 0x16, 0x53, 0x4a, 0xf8, 0xee, 0x3b, 0xe8, 0x50, 0xd7, 0xa8, - 0xa4, 0x77, 0xdf, 0x83, 0x0e, 0x75, 0x51, 0x70, 0x88, 0x07, 0x60, 0x6b, 0xd3, 0x6d, 0xc0, 0x08, - 0x8e, 0x61, 0x7c, 0x03, 0x34, 0x66, 0xb8, 0x6d, 0x8d, 0xbf, 0x31, 0xa1, 0xc2, 0xfc, 0xfb, 0x02, - 0x54, 0xf9, 0xe1, 0x88, 0x36, 0xf4, 0x6b, 0x50, 0x0a, 0xad, 0xa0, 0xad, 0x6e, 0xbe, 0x4a, 0x7c, - 0x11, 0xec, 0x08, 0x2a, 0x2a, 0x2e, 0xb1, 0xa0, 0x18, 0x5a, 0x6c, 0x3f, 0x32, 0x24, 0xbf, 0x3c, - 0x54, 0x1f, 0xd5, 0xa9, 0x8c, 0x6d, 0x08, 0xff, 0x62, 0x28, 0x91, 0xc9, 0x55, 0x28, 0xf3, 0x5b, - 0x67, 0xdd, 0x62, 0xd2, 0x91, 0x2d, 0x37, 0xa6, 0xf8, 0x29, 0x5c, 0x57, 0x34, 0xd4, 0x5c, 0xf3, - 0x3b, 0x30, 0xb3, 0xf6, 0x11, 0xb5, 0xfb, 0xa1, 0x17, 0x48, 0x57, 0x86, 0xdc, 0x02, 0xc2, 0x68, - 0xf0, 0xc8, 0xb1, 0x69, 0xdd, 0xb6, 0xbd, 0xbe, 0x1b, 0x6e, 0xc5, 0xa7, 0x7e, 0x41, 0x69, 0x23, - 0xcd, 0x01, 0x09, 0xcc, 0x69, 0x65, 0xfe, 0xd5, 0x04, 0x54, 0x13, 0xce, 0x30, 0x5f, 0xc5, 0x80, - 0xfa, 0x5e, 0xd6, 0x86, 0x70, 0x77, 0x0b, 0x05, 0x87, 0xdb, 0x90, 0x80, 0x3e, 0x72, 0x18, 0x0f, - 0xb9, 0x32, 0x36, 0x04, 0x15, 0x1d, 0xb5, 0x04, 0xa9, 0x41, 0xb1, 0x45, 0xfd, 0xb0, 0x23, 0x06, - 0x39, 0xd1, 0xa8, 0xf0, 0x89, 0x58, 0xe5, 0x04, 0x94, 0x74, 0x2e, 0xb0, 0x47, 0x43, 0xbb, 0x63, - 0x4c, 0x88, 0x73, 0x27, 0x04, 0xd6, 0x39, 0x01, 0x25, 0x3d, 0xc7, 0x6d, 0x29, 0x3e, 0x7b, 0xb7, - 0xa5, 0x74, 0xc6, 0x6e, 0x0b, 0xf1, 0x61, 0x9e, 0xb1, 0xce, 0x76, 0xe0, 0x3c, 0xb2, 0x42, 0x2a, - 0x1a, 0x0b, 0x3d, 0x93, 0x4f, 0xa3, 0xe7, 0xd2, 0xf1, 0x51, 0x6d, 0xbe, 0xd9, 0xbc, 0x99, 0x45, - 0xc1, 0x3c, 0x68, 0xd2, 0x84, 0x8b, 0x8e, 0xcb, 0xa8, 0xdd, 0x0f, 0xe8, 0x46, 0xdb, 0xf5, 0x02, - 0x7a, 0xd3, 0x63, 0x1c, 0x4e, 0x45, 0x80, 0x2f, 0xab, 0x45, 0xbb, 0xb8, 0x91, 0x27, 0x84, 0xf9, - 0x6d, 0xcd, 0x1f, 0x17, 0x60, 0x2a, 0xe9, 0xff, 0x13, 0x06, 0xd0, 0x59, 0x5d, 0x6f, 0xca, 0x9d, - 0xa9, 0xee, 0xf4, 0xf7, 0x87, 0x0e, 0x2b, 0x24, 0x4c, 0xec, 0x33, 0xc5, 0x34, 0x4c, 0xa8, 0x39, - 0x45, 0x82, 0xe1, 0x15, 0x28, 0xee, 0x79, 0x81, 0x4d, 0xd5, 0xd9, 0xd2, 0x67, 0x70, 0x9d, 0x13, - 0x51, 0xf2, 0xcc, 0x7f, 0x2d, 0x40, 0x42, 0x03, 0xf9, 0x4d, 0x98, 0xe6, 0x3a, 0x6e, 0x07, 0xbb, - 0xa9, 0xd1, 0x34, 0x86, 0x1e, 0x8d, 0x46, 0x6a, 0x5c, 0x54, 0xfa, 0xa7, 0x53, 0x64, 0x4c, 0xeb, - 0x23, 0xbf, 0x00, 0x15, 0xab, 0xd5, 0x0a, 0x28, 0x63, 0x54, 0x9a, 0x9e, 0x4a, 0x63, 0x5a, 0xdc, - 0x95, 0x11, 0x11, 0x63, 0x3e, 0x3f, 0x86, 0x3c, 0xe0, 0xe2, 0x3b, 0x5b, 0x0c, 0x32, 0x71, 0x0c, - 0xb9, 0x12, 0x4e, 0x47, 0x2d, 0x61, 0x7e, 0x7f, 0x02, 0xd2, 0xba, 0x49, 0x0b, 0x66, 0xf7, 0x83, - 0xdd, 0x95, 0x15, 0xcb, 0xee, 0x0c, 0x15, 0x0e, 0xcc, 0xf3, 0x38, 0xe4, 0x76, 0x1a, 0x01, 0xb3, - 0x90, 0x4a, 0xcb, 0x6d, 0x7a, 0x18, 0x5a, 0xbb, 0xc3, 0x44, 0x04, 0x91, 0x96, 0x24, 0x02, 0x66, - 0x21, 0xc9, 0xd7, 0xa1, 0xba, 0x1f, 0xec, 0x46, 0x87, 0x5c, 0x4d, 0xc7, 0xbc, 0x9a, 0x8e, 0xea, - 0xed, 0x98, 0x85, 0x49, 0x39, 0x3e, 0x85, 0xfb, 0xc1, 0x2e, 0x52, 0xab, 0x1b, 0xe5, 0x9a, 0xf4, - 0x14, 0xde, 0x56, 0x74, 0xd4, 0x12, 0xc4, 0x07, 0xb2, 0x1f, 0xcd, 0x9e, 0x8e, 0x29, 0x95, 0x2d, - 0xba, 0x9a, 0x37, 0x1a, 0x2d, 0x94, 0x1c, 0xd0, 0x0b, 0xdc, 0x36, 0xdf, 0x1e, 0xc0, 0xc1, 0x1c, - 0x6c, 0xf2, 0x6d, 0xb8, 0xb4, 0x1f, 0xec, 0x2a, 0x43, 0xbe, 0x1d, 0x38, 0xae, 0xed, 0xf8, 0xa9, - 0x24, 0x53, 0x4d, 0x75, 0xf7, 0xd2, 0xed, 0x7c, 0x31, 0x3c, 0xa9, 0xbd, 0xf9, 0x06, 0x4c, 0x25, - 0x93, 0x14, 0x4f, 0x08, 0x6c, 0xcd, 0xff, 0x28, 0x40, 0x69, 0xc3, 0xf5, 0xfb, 0x3f, 0x25, 0xf9, - 0xce, 0x3f, 0x9f, 0x80, 0x09, 0xee, 0x7a, 0x91, 0xab, 0x30, 0x11, 0x1e, 0xfa, 0xf2, 0x6e, 0x1d, - 0x6f, 0x5c, 0x88, 0x0c, 0xcd, 0xce, 0xa1, 0x4f, 0x1f, 0xab, 0x7f, 0x51, 0x48, 0x90, 0xf7, 0xa0, - 0xe4, 0xf6, 0x7b, 0xf7, 0xad, 0xae, 0x32, 0x4a, 0xaf, 0x45, 0xae, 0xc5, 0x96, 0xa0, 0x3e, 0x3e, - 0xaa, 0x5d, 0xa0, 0xae, 0xed, 0xb5, 0x1c, 0xb7, 0xbd, 0xfc, 0x90, 0x79, 0xee, 0xd2, 0x56, 0xbf, - 0xb7, 0x4b, 0x03, 0x54, 0xad, 0xc8, 0x57, 0x61, 0x72, 0xd7, 0xf3, 0xba, 0x1c, 0x40, 0x9a, 0x2c, - 0x1d, 0x59, 0x35, 0x24, 0x19, 0x23, 0x3e, 0xf7, 0x62, 0x58, 0x18, 0x70, 0xc9, 0x89, 0xb4, 0x17, - 0xd3, 0x14, 0x54, 0x54, 0x5c, 0xd2, 0x83, 0x52, 0xcf, 0xf2, 0xb9, 0x5c, 0x51, 0x4c, 0xd9, 0xda, - 0xd0, 0xfe, 0xe9, 0xd2, 0xa6, 0xc0, 0x59, 0x73, 0xc3, 0xe0, 0x30, 0x56, 0x27, 0x89, 0xa8, 0x94, - 0x10, 0x07, 0x26, 0xbb, 0x0e, 0x0b, 0xb9, 0xbe, 0xd2, 0x08, 0xbb, 0x82, 0xeb, 0xbb, 0x6f, 0x75, - 0xfb, 0x34, 0x9e, 0x81, 0x3b, 0x12, 0x16, 0x23, 0xfc, 0x85, 0x43, 0xa8, 0x26, 0x7a, 0x44, 0xe6, - 0x64, 0x32, 0x47, 0x6c, 0x5e, 0x91, 0xbf, 0x21, 0x3b, 0x50, 0x7c, 0xc4, 0x31, 0x94, 0xb1, 0x19, - 0xb1, 0x27, 0x28, 0xc1, 0xde, 0x19, 0x7b, 0xbb, 0xf0, 0x4e, 0xf9, 0x07, 0x7f, 0x56, 0x3b, 0xf7, - 0xc9, 0x3f, 0x5f, 0x39, 0x67, 0xfe, 0xc3, 0x38, 0x54, 0xb4, 0xc8, 0xff, 0xed, 0x9d, 0x12, 0x64, - 0x76, 0xca, 0xad, 0xd1, 0xe6, 0xeb, 0x54, 0xdb, 0xa5, 0x9e, 0xde, 0x2e, 0x53, 0x8d, 0x9f, 0x4b, - 0x2c, 0xf5, 0xe3, 0xa3, 0x9a, 0x91, 0x9e, 0x04, 0xb4, 0x0e, 0x36, 0x29, 0x63, 0x56, 0x9b, 0xc6, - 0xdb, 0xe0, 0x1b, 0x4f, 0xda, 0x06, 0x17, 0x92, 0xdb, 0xa0, 0x92, 0xbf, 0x8c, 0x9f, 0x8c, 0x43, - 0x79, 0x33, 0xca, 0x20, 0xfc, 0x6e, 0x01, 0xaa, 0x96, 0xeb, 0x7a, 0xa1, 0x25, 0xd3, 0x25, 0xd2, - 0xbc, 0x6d, 0x0d, 0x35, 0x1d, 0x11, 0xe8, 0x52, 0x3d, 0x06, 0x94, 0x53, 0xa2, 0x6f, 0xa6, 0x04, - 0x07, 0x93, 0x7a, 0xc9, 0x87, 0x50, 0xea, 0x5a, 0xbb, 0xb4, 0x1b, 0x59, 0xbb, 0x8d, 0xd1, 0x7a, - 0x70, 0x47, 0x60, 0x65, 0xd6, 0x43, 0x12, 0x51, 0x29, 0x5a, 0x78, 0x0f, 0xe6, 0xb2, 0x1d, 0x7d, - 0x9a, 0x19, 0xe5, 0x8b, 0x91, 0x50, 0xf3, 0x34, 0x4d, 0xcd, 0xbf, 0xad, 0x00, 0x6c, 0x79, 0x2d, - 0xda, 0x0c, 0xad, 0xb0, 0xcf, 0xc8, 0x02, 0x8c, 0x39, 0x2d, 0x75, 0x15, 0x81, 0xea, 0xed, 0xd8, - 0xc6, 0x2a, 0x8e, 0x39, 0x2d, 0x9d, 0xe2, 0x18, 0x3b, 0x31, 0xc5, 0xf1, 0x75, 0xa8, 0xb6, 0x1c, - 0xe6, 0x77, 0xad, 0xc3, 0xad, 0x1c, 0x5f, 0x60, 0x35, 0x66, 0x61, 0x52, 0x8e, 0xbc, 0xae, 0xce, - 0xef, 0x44, 0x2a, 0x03, 0x13, 0x9d, 0xdf, 0x32, 0xef, 0x5e, 0xe2, 0x0c, 0xbf, 0x0d, 0x53, 0x51, - 0x0a, 0x41, 0x68, 0x29, 0x8a, 0x56, 0xd1, 0xa9, 0x9f, 0xda, 0x49, 0xf0, 0x30, 0x25, 0x99, 0x4d, - 0x71, 0x94, 0x9e, 0x4b, 0x8a, 0x63, 0x15, 0xe6, 0x58, 0xe8, 0x05, 0xb4, 0x15, 0x49, 0x6c, 0xac, - 0x1a, 0x24, 0x9d, 0x6a, 0x6a, 0x66, 0xf8, 0x38, 0xd0, 0x82, 0x6c, 0xc3, 0x85, 0xa8, 0x13, 0xc9, - 0x01, 0x1a, 0xf3, 0x02, 0xe9, 0xb2, 0x42, 0xba, 0xf0, 0x20, 0x47, 0x06, 0x73, 0x5b, 0x92, 0x37, - 0xa1, 0xe8, 0x77, 0x2c, 0x46, 0x55, 0x52, 0x23, 0x8a, 0x5d, 0x8b, 0xdb, 0x9c, 0xf8, 0xf8, 0xa8, - 0x56, 0xe1, 0xd3, 0x2e, 0x3e, 0x50, 0x0a, 0x92, 0x6b, 0x00, 0xbb, 0x5e, 0xdf, 0x6d, 0x59, 0xc1, - 0xe1, 0xc6, 0xaa, 0x88, 0x64, 0x12, 0x4f, 0x6d, 0x0d, 0xcd, 0xc1, 0x84, 0x14, 0x37, 0x98, 0x3d, - 0x69, 0x3a, 0x54, 0x6e, 0x42, 0x1b, 0x4c, 0x6d, 0x51, 0x14, 0x9f, 0x7c, 0x00, 0x15, 0x16, 0x5a, - 0x41, 0x48, 0x5b, 0xf5, 0x50, 0x25, 0x28, 0x7e, 0xfe, 0x74, 0x09, 0xca, 0x1d, 0xa7, 0x47, 0x63, - 0xaf, 0xa2, 0x19, 0x81, 0x60, 0x8c, 0x47, 0x7e, 0x1d, 0x60, 0xcf, 0x71, 0x1d, 0xd6, 0x11, 0xe8, - 0xd5, 0xa7, 0x46, 0xd7, 0xe3, 0x5c, 0xd7, 0x28, 0x98, 0x40, 0xe4, 0x31, 0x8f, 0xef, 0xb5, 0x36, - 0xb6, 0x8d, 0x29, 0x31, 0x4a, 0x1d, 0xf3, 0x6c, 0x73, 0x22, 0x4a, 0x1e, 0xb9, 0x0a, 0xe5, 0x96, - 0x45, 0x7b, 0x9e, 0x4b, 0x5b, 0xc6, 0x74, 0x9c, 0x77, 0x58, 0x55, 0x34, 0xd4, 0x5c, 0xf2, 0x5d, - 0x28, 0x39, 0xc2, 0xe5, 0x33, 0x66, 0x44, 0x57, 0xbf, 0x39, 0xdc, 0xa5, 0x20, 0x20, 0x1a, 0xc0, - 0x2d, 0x8e, 0xfc, 0x1b, 0x15, 0x2c, 0xb1, 0x61, 0xd2, 0xeb, 0x87, 0x42, 0xc3, 0xac, 0xd0, 0x30, - 0x5c, 0x9e, 0xe5, 0xae, 0xc4, 0x90, 0x4f, 0x9f, 0xea, 0x03, 0x23, 0x64, 0x3e, 0x5e, 0xbb, 0xe3, - 0x74, 0x5b, 0x01, 0x75, 0x8d, 0x39, 0x11, 0x52, 0x89, 0xf1, 0xae, 0x28, 0x1a, 0x6a, 0x2e, 0xf9, - 0x25, 0x98, 0xf6, 0xfa, 0xa1, 0xd8, 0x37, 0x7c, 0xdb, 0x31, 0xe3, 0xbc, 0x10, 0x3f, 0xcf, 0xc3, - 0xb6, 0xbb, 0x49, 0x06, 0xa6, 0xe5, 0xcc, 0x19, 0x98, 0x4a, 0xd6, 0x0b, 0x98, 0x7f, 0x34, 0x06, - 0x51, 0x3f, 0x7e, 0x1a, 0xbc, 0x65, 0x62, 0x42, 0x29, 0xa0, 0xac, 0xdf, 0x0d, 0x95, 0xb1, 0x15, - 0x6b, 0x8d, 0x82, 0x82, 0x8a, 0x63, 0x1e, 0xc0, 0x34, 0xef, 0x6d, 0xb7, 0x4b, 0xbb, 0xcd, 0x90, - 0xfa, 0x8c, 0xec, 0x41, 0x91, 0xf1, 0x3f, 0xd4, 0x9c, 0x8c, 0xf8, 0xf2, 0x11, 0x52, 0x3f, 0xde, - 0xef, 0x42, 0x01, 0x4a, 0x78, 0xf3, 0x8f, 0xc7, 0xa0, 0xa2, 0xe7, 0xe9, 0x14, 0x19, 0xf2, 0x57, - 0x61, 0xb2, 0x45, 0xf7, 0x2c, 0x3e, 0x1a, 0xf5, 0x38, 0xc8, 0xb7, 0xd5, 0xaa, 0x24, 0x61, 0xc4, - 0x23, 0xb5, 0xe8, 0x32, 0x93, 0x43, 0x16, 0x59, 0xab, 0xa4, 0xaf, 0x48, 0xf6, 0xa1, 0x22, 0xfe, - 0x58, 0x8f, 0x0a, 0x19, 0x86, 0x5d, 0xf7, 0xfb, 0x11, 0x8a, 0xcc, 0x05, 0xe8, 0x4f, 0x8c, 0xf1, - 0x33, 0x05, 0x08, 0xc5, 0xd3, 0x14, 0x20, 0x98, 0xeb, 0xc0, 0x0d, 0xc3, 0x8d, 0x15, 0xf2, 0x2e, - 0x94, 0x99, 0xda, 0xba, 0x6a, 0x5e, 0xbe, 0xa2, 0x5f, 0x2d, 0x14, 0xfd, 0xf1, 0x51, 0x6d, 0x5a, - 0x08, 0x47, 0x04, 0xd4, 0x4d, 0xcc, 0x65, 0xa8, 0x26, 0x1e, 0x6c, 0xf9, 0x0c, 0xeb, 0xd7, 0x9d, - 0xc4, 0x0c, 0xaf, 0x5a, 0xa1, 0x85, 0x82, 0x63, 0x3e, 0x1e, 0x83, 0x39, 0xa4, 0xcc, 0xeb, 0x07, - 0x36, 0x4d, 0x66, 0x66, 0x2d, 0x5b, 0x54, 0x71, 0x64, 0x32, 0xb3, 0x75, 0x41, 0x45, 0xc5, 0x25, - 0xdf, 0x84, 0xe9, 0x1e, 0x0d, 0xda, 0xfa, 0xb0, 0xa9, 0x45, 0xd2, 0xf9, 0x95, 0xcd, 0x24, 0x13, - 0xd3, 0xb2, 0x3c, 0xde, 0xef, 0x59, 0xae, 0xb3, 0x47, 0x59, 0x98, 0x4d, 0x99, 0x6c, 0x2a, 0x3a, - 0x6a, 0x09, 0x72, 0x03, 0xce, 0x33, 0x1a, 0xde, 0x3d, 0x70, 0x69, 0x80, 0x74, 0x8f, 0x06, 0x22, - 0x93, 0x3e, 0x21, 0x4c, 0xe6, 0x8b, 0xaa, 0xd9, 0xf9, 0x66, 0x56, 0x00, 0x07, 0xdb, 0x88, 0xdb, - 0xb7, 0x6f, 0xdb, 0x94, 0xb1, 0x15, 0xcf, 0x6d, 0x39, 0xba, 0x56, 0x25, 0x79, 0xfb, 0x66, 0xf8, - 0x38, 0xd0, 0x82, 0xa3, 0xec, 0x59, 0x4e, 0xb7, 0x1f, 0xd0, 0x18, 0xa5, 0x94, 0x46, 0x59, 0xcf, - 0xf0, 0x71, 0xa0, 0x85, 0xf9, 0x26, 0x4c, 0x23, 0x0d, 0x83, 0x43, 0x3d, 0x27, 0x35, 0x28, 0x76, - 0x9d, 0x9e, 0x23, 0x93, 0x3f, 0x45, 0xb9, 0x91, 0xef, 0x70, 0x02, 0x4a, 0xba, 0xf9, 0x83, 0x02, - 0x40, 0x5c, 0x87, 0x41, 0xf6, 0xa1, 0xcc, 0xae, 0x37, 0xfa, 0xf6, 0xbe, 0xce, 0x17, 0x0d, 0xf9, - 0xac, 0xa0, 0x40, 0x12, 0x4f, 0x64, 0x8a, 0x82, 0x5a, 0xc1, 0x93, 0x5e, 0xe9, 0xff, 0x7a, 0x1c, - 0x74, 0x2b, 0xbe, 0xb8, 0xd4, 0x6d, 0xf9, 0x9e, 0xe3, 0x86, 0xd9, 0xc7, 0xb7, 0x35, 0x45, 0x47, - 0x2d, 0xc1, 0xf7, 0xdb, 0xae, 0x1c, 0xc4, 0x58, 0x7a, 0xbf, 0xa9, 0x3e, 0x28, 0x2e, 0x97, 0x0b, - 0x68, 0x9b, 0xcf, 0xf5, 0x78, 0x5a, 0x0e, 0x05, 0x15, 0x15, 0x97, 0x5f, 0x33, 0x51, 0xc2, 0x54, - 0xed, 0x11, 0x71, 0xcd, 0x44, 0xb9, 0x55, 0xd4, 0x5c, 0xd2, 0x81, 0x59, 0x4b, 0x2c, 0x6d, 0x9c, - 0x04, 0x7e, 0xaa, 0x7c, 0x76, 0x5c, 0x03, 0x90, 0x46, 0xc1, 0x2c, 0x2c, 0xd7, 0xc4, 0xe2, 0xe6, - 0x4f, 0x9f, 0xd6, 0xd6, 0x9a, 0x9a, 0x69, 0x14, 0xcc, 0xc2, 0x72, 0x0f, 0x2b, 0xf0, 0xba, 0xb4, - 0x8e, 0x5b, 0xca, 0x93, 0xd3, 0x1e, 0x16, 0x4a, 0x32, 0x46, 0x7c, 0xf3, 0xf7, 0x0b, 0x30, 0xd3, - 0xb4, 0x03, 0xc7, 0x0f, 0xf5, 0xd9, 0xdf, 0x12, 0xc5, 0x1b, 0xa1, 0xc5, 0x7d, 0x1f, 0xb5, 0xa7, - 0x5e, 0x3e, 0x21, 0x9f, 0x26, 0x85, 0x52, 0xb5, 0x1d, 0x92, 0x84, 0x31, 0x84, 0x88, 0x7a, 0x85, - 0x75, 0xc9, 0xae, 0x6d, 0x53, 0x50, 0x51, 0x71, 0xcd, 0x1f, 0x16, 0xa0, 0xac, 0x5f, 0xaf, 0x5e, - 0x81, 0xa2, 0x78, 0x14, 0x51, 0x7b, 0x47, 0x5f, 0x26, 0x2b, 0x9c, 0x88, 0x92, 0xc7, 0x85, 0x84, - 0x3b, 0xa7, 0x80, 0x13, 0x37, 0x8e, 0x15, 0x84, 0x28, 0x79, 0x7c, 0xd3, 0x52, 0xb7, 0xa5, 0xf6, - 0x8b, 0xde, 0xb4, 0x6b, 0x6e, 0x0b, 0x39, 0x5d, 0x14, 0x23, 0x78, 0x41, 0xcf, 0x0a, 0xb3, 0x31, - 0xf9, 0xba, 0xa0, 0xa2, 0xe2, 0x9a, 0xe7, 0x61, 0xb6, 0xd9, 0x67, 0x3e, 0x75, 0xb5, 0x0b, 0x6e, - 0x4e, 0x43, 0x35, 0x51, 0xf6, 0x68, 0xfe, 0xd7, 0x25, 0xd0, 0xaf, 0xb6, 0x3f, 0x7b, 0xfb, 0x1d, - 0x2a, 0x30, 0xb2, 0xb5, 0x8f, 0x5b, 0x1c, 0xdd, 0xc7, 0xd5, 0x2b, 0x99, 0xf1, 0x73, 0xdb, 0xb1, - 0x9f, 0x5b, 0x3a, 0x03, 0x3f, 0x37, 0x2e, 0xb9, 0xc8, 0xfa, 0xba, 0xdf, 0x2b, 0xc0, 0x94, 0xcb, - 0xe3, 0x68, 0x75, 0x82, 0x8d, 0x49, 0xe1, 0x5b, 0xdd, 0x1d, 0x69, 0x12, 0x97, 0xb6, 0x12, 0x88, - 0x32, 0x85, 0xa0, 0xe3, 0xdc, 0x24, 0x0b, 0x53, 0xaa, 0xc9, 0x3a, 0x94, 0xad, 0x3d, 0x1e, 0x9c, - 0x84, 0x87, 0xea, 0xf9, 0xf9, 0x72, 0xde, 0x99, 0xae, 0x2b, 0x19, 0x69, 0x2e, 0xa3, 0x2f, 0xd4, - 0x6d, 0xf9, 0x7d, 0xa3, 0x2b, 0x46, 0x2a, 0x23, 0xdc, 0x37, 0x51, 0x2e, 0x24, 0x71, 0xe5, 0x2b, - 0x4a, 0xa2, 0x80, 0xc4, 0x84, 0x92, 0x0c, 0x7f, 0x44, 0xec, 0x57, 0x96, 0x9e, 0xac, 0x0c, 0x8d, - 0x50, 0x71, 0x48, 0x3b, 0x72, 0x5c, 0xab, 0x62, 0x72, 0x1b, 0x43, 0x3b, 0xf3, 0xda, 0x17, 0xce, - 0xf7, 0x5c, 0xc9, 0xad, 0xa4, 0x59, 0x9c, 0x3a, 0x8d, 0x59, 0x9c, 0x3e, 0xd1, 0x24, 0xb6, 0xa1, - 0xc4, 0x84, 0xd1, 0x15, 0x31, 0x5f, 0xf5, 0xda, 0xca, 0x70, 0x77, 0x76, 0xca, 0x6e, 0xcb, 0xd9, - 0x91, 0x34, 0x54, 0xf0, 0xc4, 0x83, 0x72, 0xa0, 0x7c, 0x3b, 0x15, 0x36, 0x0e, 0x97, 0x75, 0xce, - 0x3a, 0x88, 0x72, 0x7f, 0x44, 0x54, 0xd4, 0x4a, 0xc8, 0x07, 0x30, 0xde, 0xb2, 0xda, 0x2a, 0x80, - 0xfc, 0xd6, 0xd0, 0x0f, 0xf5, 0x91, 0x1a, 0x51, 0x6f, 0xb8, 0x5a, 0xbf, 0x81, 0x1c, 0x95, 0xec, - 0xc3, 0x24, 0x93, 0x36, 0xd8, 0x98, 0x1b, 0xa1, 0x8c, 0x2f, 0x63, 0xc7, 0x65, 0x48, 0xa1, 0x88, - 0x18, 0x69, 0x20, 0x6b, 0x30, 0xf9, 0xc8, 0xeb, 0xf6, 0x7b, 0x2a, 0xf2, 0xac, 0x5e, 0x5b, 0xc8, - 0x5b, 0xed, 0xfb, 0x42, 0x24, 0x36, 0x02, 0xf2, 0x9b, 0x61, 0xd4, 0x96, 0xfc, 0x76, 0x01, 0x66, - 0xf8, 0xd1, 0xd1, 0xfb, 0x80, 0x19, 0x64, 0x84, 0x9d, 0x7a, 0x8f, 0xd1, 0x20, 0xde, 0x61, 0x2f, - 0x28, 0xb5, 0x33, 0x1b, 0x29, 0x0d, 0x98, 0xd1, 0x48, 0x7c, 0x28, 0x33, 0xa7, 0x45, 0x6d, 0x2b, - 0x60, 0xc6, 0xfc, 0x99, 0x69, 0x8f, 0x5d, 0x45, 0x85, 0x8d, 0x5a, 0x0b, 0xf9, 0x1d, 0x51, 0x7a, - 0xa9, 0x8a, 0x8f, 0x55, 0x41, 0xf8, 0x85, 0xb3, 0x2c, 0x08, 0x9f, 0x97, 0x75, 0x97, 0x29, 0x0d, - 0x98, 0x55, 0x49, 0xee, 0xc2, 0x45, 0x1e, 0xa9, 0x3c, 0xa2, 0xab, 0xd4, 0x6a, 0x75, 0x1d, 0x97, - 0x36, 0xa9, 0xed, 0xb9, 0x2d, 0x66, 0x5c, 0x14, 0xef, 0x02, 0x2f, 0x1e, 0x1f, 0xd5, 0x2e, 0xd6, - 0xf3, 0x04, 0x30, 0xbf, 0x1d, 0xf9, 0x18, 0xa6, 0x83, 0xa4, 0xc3, 0x6e, 0xbc, 0x30, 0xc2, 0xa3, - 0x74, 0xca, 0xf5, 0x97, 0x99, 0x8d, 0x14, 0x09, 0xd3, 0xba, 0xc8, 0x5b, 0x50, 0xf5, 0x95, 0xa5, - 0x72, 0x58, 0xcf, 0xb8, 0x24, 0xc6, 0x20, 0x6e, 0xd4, 0xed, 0x98, 0x8c, 0x49, 0x19, 0x72, 0x0f, - 0xaa, 0xa1, 0xd7, 0xa5, 0x81, 0x4a, 0xa0, 0x1b, 0x62, 0xf1, 0x17, 0xf3, 0x76, 0xf2, 0x8e, 0x16, - 0x8b, 0xd3, 0xb3, 0x31, 0x8d, 0x61, 0x12, 0x87, 0xc7, 0x7d, 0x51, 0xe1, 0x5c, 0x20, 0x82, 0xdc, - 0x17, 0xd3, 0x71, 0x5f, 0x33, 0xc9, 0xc4, 0xb4, 0x2c, 0x8f, 0xe4, 0xfc, 0xc0, 0xf1, 0x02, 0x27, - 0x3c, 0x5c, 0xe9, 0x5a, 0x8c, 0x09, 0x80, 0x05, 0x01, 0xa0, 0x23, 0xb9, 0xed, 0xac, 0x00, 0x0e, - 0xb6, 0xe1, 0x5e, 0x7e, 0x44, 0x34, 0x5e, 0x12, 0xf1, 0x92, 0x30, 0x4b, 0x51, 0x5b, 0xd4, 0xdc, - 0x13, 0x4a, 0x74, 0x2e, 0x0f, 0x53, 0xa2, 0x43, 0x5a, 0x70, 0xd9, 0xea, 0x87, 0x5e, 0x8f, 0x13, - 0xd2, 0x4d, 0x76, 0xbc, 0x7d, 0xea, 0x1a, 0x57, 0xc4, 0x5d, 0x75, 0xe5, 0xf8, 0xa8, 0x76, 0xb9, - 0xfe, 0x25, 0x72, 0xf8, 0xa5, 0x28, 0xa4, 0x07, 0x65, 0xaa, 0xca, 0x8c, 0x8c, 0xaf, 0x8c, 0x70, - 0x49, 0xa4, 0x6b, 0x95, 0xe4, 0x04, 0x45, 0x34, 0xd4, 0x2a, 0xc8, 0x0e, 0x54, 0x3b, 0x1e, 0x0b, - 0xeb, 0x5d, 0xc7, 0x62, 0x94, 0x19, 0x2f, 0x8b, 0x7d, 0x92, 0x7b, 0xbf, 0xdd, 0x8c, 0xc4, 0xe2, - 0x6d, 0x72, 0x33, 0x6e, 0x89, 0x49, 0x18, 0x42, 0x45, 0xc8, 0xd3, 0x17, 0xab, 0xe6, 0xb9, 0x21, - 0xfd, 0x28, 0x34, 0x16, 0xc5, 0x58, 0x5e, 0xcb, 0x43, 0xde, 0xf6, 0x5a, 0xcd, 0xb4, 0xb4, 0x3c, - 0xe5, 0x19, 0x22, 0x66, 0x31, 0xc9, 0xdb, 0x30, 0xe5, 0x7b, 0xad, 0xa6, 0x4f, 0xed, 0x6d, 0x2b, - 0xb4, 0x3b, 0x46, 0x2d, 0x9d, 0xfe, 0xdf, 0x4e, 0xf0, 0x30, 0x25, 0xb9, 0xf0, 0x3e, 0x9c, 0x1f, - 0xf0, 0xa7, 0x9e, 0xea, 0xad, 0xe4, 0x2f, 0x0a, 0x90, 0x74, 0x67, 0xcf, 0xdc, 0xef, 0xbf, 0x01, - 0xe7, 0x55, 0x8d, 0x29, 0xbf, 0x6c, 0xbb, 0xfd, 0x30, 0x8a, 0x7d, 0x13, 0x59, 0x0f, 0xcc, 0x0a, - 0xe0, 0x60, 0x1b, 0xf3, 0x2f, 0x0b, 0x30, 0x9d, 0x32, 0xdf, 0x67, 0x1e, 0xe7, 0xad, 0x03, 0xe9, - 0x39, 0x41, 0xe0, 0x05, 0xf2, 0x0e, 0xdc, 0xe4, 0x7b, 0x99, 0xa9, 0x12, 0x6f, 0x51, 0x66, 0xb1, - 0x39, 0xc0, 0xc5, 0x9c, 0x16, 0xe6, 0xdf, 0x14, 0x20, 0x4e, 0xab, 0xe9, 0xda, 0xa2, 0xc2, 0x89, - 0xb5, 0x45, 0xaf, 0x43, 0xf9, 0x21, 0xf3, 0xdc, 0xed, 0xb8, 0x02, 0x49, 0x4f, 0xe8, 0xad, 0xe6, - 0xdd, 0x2d, 0x21, 0xa9, 0x25, 0x84, 0xf4, 0x87, 0xeb, 0x4e, 0x37, 0x1c, 0xac, 0xd3, 0xb9, 0xf5, - 0x2b, 0x92, 0x8e, 0x5a, 0x82, 0x2c, 0x43, 0x45, 0x67, 0x72, 0x55, 0x80, 0xa8, 0x27, 0x41, 0xa7, - 0x31, 0x31, 0x96, 0x31, 0x7f, 0x34, 0x06, 0xe5, 0xff, 0x6f, 0xf5, 0xea, 0xfb, 0x50, 0x62, 0xe2, - 0x29, 0x50, 0x05, 0x9e, 0x2b, 0x23, 0x26, 0x87, 0x39, 0x54, 0xf2, 0xed, 0x9b, 0x7f, 0xa3, 0x52, - 0x61, 0x7e, 0x56, 0x80, 0xa9, 0xe7, 0x58, 0xa3, 0xbe, 0x9b, 0xae, 0x51, 0x7f, 0x77, 0xa4, 0xa1, - 0x9d, 0x50, 0x9f, 0xfe, 0x77, 0xf3, 0xf1, 0x90, 0xf8, 0xb4, 0x12, 0x17, 0x2a, 0xd1, 0x01, 0x8f, - 0x12, 0xee, 0xef, 0x8e, 0x14, 0x14, 0xc6, 0x9b, 0x32, 0xa2, 0x30, 0x8c, 0x55, 0x90, 0x6b, 0x00, - 0x94, 0x5b, 0x36, 0x99, 0x8d, 0x1b, 0x4b, 0xe7, 0xa3, 0xd7, 0x34, 0x07, 0x13, 0x52, 0xcf, 0x3f, - 0xe1, 0x90, 0x7f, 0x45, 0x4f, 0x3c, 0x93, 0x2b, 0xfa, 0xf2, 0x99, 0x5f, 0xd1, 0x2f, 0x3f, 0xfb, - 0x2b, 0x3a, 0x11, 0x90, 0x14, 0x47, 0x08, 0x48, 0x3e, 0x86, 0x0b, 0xf2, 0xcf, 0x95, 0xae, 0xe5, - 0xf4, 0xf4, 0x7e, 0x51, 0x45, 0x42, 0x5f, 0xcd, 0xbd, 0x98, 0x69, 0xc0, 0x1c, 0x16, 0x52, 0x37, - 0xbc, 0x1f, 0xb7, 0x8c, 0x5f, 0x98, 0xef, 0xe7, 0xc0, 0x61, 0xae, 0x92, 0xac, 0x07, 0x3b, 0x79, - 0x0a, 0x0f, 0xf6, 0x87, 0x05, 0xb8, 0x68, 0xe5, 0xfd, 0xca, 0x4c, 0xe5, 0x31, 0x6e, 0x8d, 0x14, - 0x4f, 0xa4, 0x10, 0x55, 0x3c, 0x90, 0xc7, 0xc2, 0xfc, 0x3e, 0x90, 0x57, 0xe3, 0x90, 0xb4, 0x22, - 0x36, 0x55, 0x7e, 0x30, 0xf9, 0xfd, 0x6c, 0x2a, 0x08, 0xc4, 0x6c, 0x37, 0x47, 0x36, 0xd8, 0x67, - 0x90, 0x0e, 0xaa, 0x8e, 0x90, 0x0e, 0xca, 0x84, 0x17, 0x53, 0x67, 0x14, 0x5e, 0xb8, 0x30, 0xe7, - 0xf4, 0xac, 0x36, 0xdd, 0xee, 0x77, 0xbb, 0x32, 0xa7, 0xcd, 0x8c, 0x69, 0x81, 0x9d, 0x5b, 0xd9, - 0xc9, 0xc3, 0xbd, 0xae, 0xbc, 0x1f, 0xf5, 0x33, 0x4f, 0xfc, 0x0c, 0xb3, 0x91, 0x41, 0xc2, 0x01, - 0x6c, 0xbe, 0x2d, 0xb9, 0xdb, 0xba, 0x45, 0x43, 0x3e, 0xdb, 0x22, 0x53, 0xa2, 0x7e, 0x4d, 0x7b, - 0x33, 0x26, 0x63, 0x52, 0x86, 0xdc, 0x86, 0x4a, 0xcb, 0x65, 0xdb, 0x5e, 0xd7, 0xb1, 0x0f, 0x45, - 0xba, 0xa3, 0xd2, 0x78, 0x83, 0xdb, 0xb6, 0xd5, 0xad, 0xa6, 0x24, 0x3e, 0x3e, 0xaa, 0x5d, 0x1e, - 0xfc, 0xef, 0x02, 0x96, 0x34, 0x1f, 0xe3, 0xf6, 0x64, 0x53, 0x80, 0xa9, 0x32, 0x67, 0x99, 0xda, - 0xb8, 0x72, 0x82, 0x87, 0xbc, 0xba, 0x15, 0x55, 0x65, 0x4f, 0x2b, 0x75, 0xaa, 0x78, 0x39, 0x46, - 0x20, 0xaf, 0x41, 0xc9, 0x73, 0xd7, 0x3e, 0x72, 0x42, 0xe3, 0x7c, 0x3a, 0xa7, 0x7d, 0x57, 0x50, - 0x51, 0x71, 0xc9, 0x3d, 0xb8, 0x14, 0x86, 0x5d, 0x15, 0xda, 0xd6, 0xf7, 0x42, 0x1a, 0x44, 0xa5, - 0x0c, 0xa2, 0x1c, 0xa5, 0xd8, 0x78, 0xe9, 0xf8, 0xa8, 0x76, 0x69, 0x67, 0xe7, 0x4e, 0x9e, 0x08, - 0x9e, 0xd4, 0xf6, 0xe4, 0xa0, 0x7b, 0x7e, 0xc8, 0xa0, 0x3b, 0x19, 0xe7, 0x5d, 0xf8, 0xd2, 0x38, - 0x6f, 0x20, 0x2e, 0xbd, 0xf8, 0x14, 0x71, 0xe9, 0x07, 0xa2, 0x60, 0xe3, 0xc6, 0x8a, 0x8a, 0xe9, - 0xdf, 0x19, 0x2e, 0x95, 0xc8, 0x11, 0xe4, 0xbb, 0x9d, 0xf8, 0x13, 0x25, 0x26, 0xd9, 0x86, 0x0b, - 0xbe, 0xd7, 0x1a, 0x08, 0x6b, 0x45, 0x10, 0x9f, 0xa8, 0xd6, 0xd9, 0xce, 0x91, 0xc1, 0xdc, 0x96, - 0xc2, 0x96, 0xc6, 0x74, 0xc3, 0x10, 0x13, 0x23, 0x6d, 0x69, 0x4c, 0xc6, 0xa4, 0x4c, 0x36, 0xca, - 0x7b, 0xf1, 0x99, 0x45, 0x79, 0x0b, 0xcf, 0x21, 0xca, 0x7b, 0xe9, 0xf9, 0x45, 0x79, 0x9f, 0x97, - 0x61, 0x26, 0xed, 0xbf, 0xc6, 0xb5, 0x52, 0x85, 0xd3, 0xd6, 0x4a, 0xa5, 0x8a, 0x99, 0xc6, 0x9e, - 0x69, 0x31, 0xd3, 0xf8, 0x99, 0x17, 0x33, 0x25, 0x8a, 0xb6, 0x26, 0x9e, 0x50, 0xb4, 0x55, 0x87, - 0x59, 0xdb, 0xeb, 0xf9, 0xe2, 0x77, 0x11, 0xaa, 0x74, 0x47, 0x3e, 0xaf, 0xeb, 0x07, 0xcc, 0x95, - 0x34, 0x1b, 0xb3, 0xf2, 0x84, 0x41, 0xd1, 0x15, 0x0d, 0x4b, 0x23, 0x14, 0x7c, 0xa6, 0x17, 0x4c, - 0x5c, 0x94, 0xaa, 0xe6, 0x52, 0xbb, 0xe9, 0x52, 0xbd, 0xd4, 0xc5, 0x1d, 0x8d, 0xd9, 0x74, 0x91, - 0x1d, 0x33, 0x2a, 0x42, 0xff, 0xaf, 0x9e, 0x85, 0xfe, 0x74, 0x45, 0x9f, 0xea, 0x49, 0xfc, 0xa6, - 0x9b, 0xe6, 0x62, 0xb6, 0x27, 0x24, 0x80, 0x17, 0xfc, 0x3c, 0x37, 0x8c, 0xa9, 0x57, 0xa5, 0x2f, - 0x73, 0x06, 0x17, 0x95, 0x96, 0x17, 0x72, 0x1d, 0x39, 0x86, 0x27, 0x20, 0x27, 0x2b, 0xc2, 0xca, - 0xcf, 0xaa, 0x22, 0x6c, 0xe1, 0x50, 0x16, 0x9b, 0x9e, 0x58, 0xa7, 0x7a, 0x2f, 0x5d, 0x3b, 0xfe, - 0xfe, 0x90, 0xff, 0x81, 0x4c, 0x54, 0xce, 0x9a, 0xac, 0x91, 0xfd, 0xad, 0x02, 0x5c, 0xc8, 0x5b, - 0x96, 0x9c, 0x5e, 0x34, 0xd3, 0xbd, 0x18, 0x2d, 0x5c, 0x4b, 0x9a, 0x96, 0x7f, 0x2b, 0x26, 0x82, - 0xc3, 0x90, 0xfa, 0x3f, 0x7b, 0x39, 0x1e, 0xea, 0xe5, 0x38, 0xf5, 0xfb, 0xdf, 0xe2, 0x73, 0xfc, - 0xfd, 0x6f, 0x69, 0x88, 0xdf, 0xff, 0x4e, 0x3e, 0xcf, 0xdf, 0xff, 0x96, 0x4f, 0xf9, 0xfb, 0xdf, - 0xca, 0xb3, 0xff, 0xfd, 0xef, 0x17, 0x05, 0x98, 0xcb, 0x96, 0x23, 0x3f, 0x87, 0x24, 0xd9, 0x7e, - 0x2a, 0x49, 0xb6, 0x31, 0x92, 0x31, 0x8f, 0xba, 0x7d, 0x52, 0xb2, 0xcc, 0xfc, 0x49, 0x01, 0x06, - 0x4a, 0xae, 0x9f, 0x43, 0x1e, 0xeb, 0x61, 0x3a, 0x8f, 0xb5, 0x76, 0x26, 0x83, 0x3c, 0x21, 0x9f, - 0xf5, 0xdf, 0x39, 0x43, 0xfc, 0x5f, 0xc9, 0x6b, 0xa5, 0x4c, 0xdb, 0xd8, 0xb3, 0x37, 0x6d, 0x8d, - 0xa5, 0x4f, 0xbf, 0x58, 0x3c, 0xf7, 0xd9, 0x17, 0x8b, 0xe7, 0x3e, 0xff, 0x62, 0xf1, 0xdc, 0x27, - 0xc7, 0x8b, 0x85, 0x4f, 0x8f, 0x17, 0x0b, 0x9f, 0x1d, 0x2f, 0x16, 0x3e, 0x3f, 0x5e, 0x2c, 0xfc, - 0xe4, 0x78, 0xb1, 0xf0, 0x87, 0xff, 0xb2, 0x78, 0xee, 0xd7, 0xca, 0x11, 0xee, 0xff, 0x04, 0x00, - 0x00, 0xff, 0xff, 0x93, 0x34, 0x6f, 0xbd, 0xd9, 0x4e, 0x00, 0x00, + 0x32, 0xde, 0x4f, 0x1b, 0x1c, 0x17, 0x25, 0x3c, 0x1f, 0xda, 0x7c, 0xce, 0x64, 0xf0, 0x6b, 0x96, + 0x3b, 0xc1, 0xad, 0x7e, 0x37, 0xf2, 0x8e, 0x74, 0x6f, 0x9b, 0x8a, 0x8e, 0x5a, 0x82, 0xac, 0xc2, + 0x9c, 0x72, 0x9d, 0xb9, 0x43, 0xc0, 0x7c, 0xcb, 0xa6, 0xca, 0x1e, 0x69, 0xdf, 0x03, 0x33, 0x7c, + 0x1c, 0x68, 0x41, 0x36, 0x61, 0x5e, 0xd1, 0x6e, 0x28, 0xc7, 0x5b, 0x38, 0x21, 0xe3, 0x02, 0xe8, + 0x25, 0x05, 0x34, 0x8f, 0x83, 0x22, 0x98, 0xd7, 0xce, 0xfc, 0xb3, 0x12, 0x4c, 0xae, 0xd6, 0x6f, + 0xec, 0x58, 0x6c, 0xff, 0x14, 0x8e, 0xde, 0xeb, 0x50, 0x0e, 0x69, 0xcf, 0xef, 0x5a, 0x61, 0xd4, + 0x75, 0x3d, 0xe0, 0x1d, 0x45, 0x47, 0x2d, 0x41, 0x3c, 0xee, 0xb5, 0x2a, 0xb7, 0x59, 0x6d, 0xc4, + 0xf7, 0x86, 0x34, 0x8b, 0x0a, 0x25, 0xe9, 0xb6, 0x2a, 0x12, 0xc6, 0x3a, 0x08, 0x83, 0x6a, 0xa4, + 0x1c, 0xe9, 0x9e, 0xba, 0xd1, 0x87, 0x0c, 0x37, 0x62, 0x1c, 0x79, 0xc3, 0x26, 0x08, 0x98, 0xd4, + 0x42, 0xbe, 0x06, 0x53, 0x2d, 0xea, 0x53, 0xb7, 0x45, 0x5d, 0xdb, 0xa1, 0xcc, 0x28, 0x5e, 0x19, + 0xe7, 0xf3, 0x72, 0x7c, 0x54, 0x9b, 0x5a, 0x4d, 0xd0, 0x31, 0x25, 0x45, 0x1e, 0x42, 0xe5, 0xc0, + 0x09, 0x3b, 0x62, 0x9b, 0x19, 0x25, 0xb1, 0x7d, 0xbf, 0x31, 0x54, 0x47, 0x39, 0x42, 0x3c, 0x2d, + 0x0f, 0x22, 0x4c, 0x8c, 0xe1, 0xf9, 0x65, 0xc9, 0x3f, 0x44, 0x6c, 0x21, 0x2e, 0xea, 0x4a, 0xba, + 0x81, 0x60, 0x60, 0x2c, 0x43, 0x18, 0x4c, 0xf1, 0x8f, 0x26, 0xfd, 0xb0, 0x4f, 0x5d, 0x9b, 0x0a, + 0x17, 0x72, 0xd8, 0x88, 0x23, 0x02, 0x91, 0x33, 0xf2, 0x20, 0x01, 0x8b, 0x29, 0x25, 0x7c, 0xf7, + 0x1d, 0x74, 0xa8, 0x6b, 0x54, 0xd2, 0xbb, 0xef, 0x41, 0x87, 0xba, 0x28, 0x38, 0xc4, 0x03, 0xb0, + 0xf5, 0x4d, 0x60, 0xc0, 0x08, 0x7e, 0x66, 0x7c, 0xa1, 0x34, 0x66, 0xb8, 0xa9, 0x8e, 0xbf, 0x31, + 0xa1, 0xc2, 0xfc, 0x87, 0x02, 0x54, 0xf9, 0xe1, 0x88, 0x36, 0xf4, 0x6b, 0x50, 0x0a, 0xad, 0xa0, + 0xad, 0x2e, 0xd2, 0x4a, 0x7c, 0xaf, 0xec, 0x08, 0x2a, 0x2a, 0x2e, 0xb1, 0xa0, 0x18, 0x5a, 0x6c, + 0x3f, 0xb2, 0x4b, 0xbf, 0x3c, 0x54, 0x1f, 0xd5, 0xa9, 0x8c, 0x4d, 0x12, 0xff, 0x62, 0x28, 0x91, + 0xc9, 0x55, 0x28, 0xf3, 0x4b, 0x6c, 0xdd, 0x62, 0xd2, 0x2f, 0x2e, 0x37, 0xa6, 0xf8, 0x29, 0x5c, + 0x57, 0x34, 0xd4, 0x5c, 0xf3, 0x3b, 0x30, 0xb3, 0xf6, 0x11, 0xb5, 0xfb, 0xa1, 0x17, 0x48, 0xcf, + 0x88, 0xdc, 0x02, 0xc2, 0x68, 0xf0, 0xc8, 0xb1, 0x69, 0xdd, 0xb6, 0xbd, 0xbe, 0x1b, 0x6e, 0xc5, + 0xa7, 0x7e, 0x41, 0x69, 0x23, 0xcd, 0x01, 0x09, 0xcc, 0x69, 0x65, 0xfe, 0xf5, 0x04, 0x54, 0x13, + 0xbe, 0x35, 0x5f, 0xc5, 0x80, 0xfa, 0x5e, 0xd6, 0x86, 0x70, 0xef, 0x0d, 0x05, 0x87, 0xdb, 0x90, + 0x80, 0x3e, 0x72, 0x18, 0x8f, 0xe0, 0x32, 0x36, 0x04, 0x15, 0x1d, 0xb5, 0x04, 0xa9, 0x41, 0xb1, + 0x45, 0xfd, 0xb0, 0x23, 0x06, 0x39, 0xd1, 0xa8, 0xf0, 0x89, 0x58, 0xe5, 0x04, 0x94, 0x74, 0x2e, + 0xb0, 0x47, 0x43, 0xbb, 0x63, 0x4c, 0x88, 0x73, 0x27, 0x04, 0xd6, 0x39, 0x01, 0x25, 0x3d, 0xc7, + 0x0b, 0x2a, 0x3e, 0x7b, 0x2f, 0xa8, 0x74, 0xc6, 0x5e, 0x10, 0xf1, 0x61, 0x9e, 0xb1, 0xce, 0x76, + 0xe0, 0x3c, 0xb2, 0x42, 0x2a, 0x1a, 0x0b, 0x3d, 0x93, 0x4f, 0xa3, 0xe7, 0x12, 0xbf, 0x19, 0x9a, + 0xcd, 0x9b, 0x59, 0x14, 0xcc, 0x83, 0x26, 0x4d, 0xb8, 0xe8, 0xb8, 0x8c, 0xda, 0xfd, 0x80, 0x6e, + 0xb4, 0x5d, 0x2f, 0xa0, 0x37, 0x3d, 0xc6, 0xe1, 0x54, 0x40, 0xf9, 0xb2, 0x5a, 0xb4, 0x8b, 0x1b, + 0x79, 0x42, 0x98, 0xdf, 0xd6, 0xfc, 0x51, 0x01, 0xa6, 0x92, 0xe1, 0x04, 0x61, 0x00, 0x9d, 0xd5, + 0xf5, 0xa6, 0xdc, 0x99, 0xca, 0x45, 0x78, 0x7f, 0xe8, 0x28, 0x45, 0xc2, 0xc4, 0x2e, 0x58, 0x4c, + 0xc3, 0x84, 0x9a, 0x53, 0xe4, 0x2b, 0x5e, 0x81, 0xe2, 0x9e, 0x17, 0xd8, 0x54, 0x9d, 0x2d, 0x7d, + 0x06, 0xd7, 0x39, 0x11, 0x25, 0xcf, 0xfc, 0xb7, 0x02, 0x24, 0x34, 0x90, 0xdf, 0x84, 0x69, 0xae, + 0xe3, 0x76, 0xb0, 0x9b, 0x1a, 0x4d, 0x63, 0xe8, 0xd1, 0x68, 0xa4, 0xc6, 0x45, 0xa5, 0x7f, 0x3a, + 0x45, 0xc6, 0xb4, 0x3e, 0xf2, 0x0b, 0x50, 0xb1, 0x5a, 0xad, 0x80, 0x32, 0x46, 0xa5, 0xe9, 0xa9, + 0x34, 0xa6, 0xc5, 0x5d, 0x19, 0x11, 0x31, 0xe6, 0xf3, 0x63, 0xc8, 0xe3, 0x37, 0xbe, 0xb3, 0x95, + 0xf3, 0xa0, 0x8f, 0x21, 0x57, 0xc2, 0xe9, 0xa8, 0x25, 0xcc, 0xef, 0x4d, 0x40, 0x5a, 0x37, 0x69, + 0xc1, 0xec, 0x7e, 0xb0, 0xbb, 0xb2, 0x62, 0xd9, 0x9d, 0xa1, 0xa2, 0x8b, 0x79, 0x1e, 0xd6, 0xdc, + 0x4e, 0x23, 0x60, 0x16, 0x52, 0x69, 0xb9, 0x4d, 0x0f, 0x43, 0x6b, 0x77, 0x98, 0x00, 0x23, 0xd2, + 0x92, 0x44, 0xc0, 0x2c, 0x24, 0xf9, 0x3a, 0x54, 0xf7, 0x83, 0xdd, 0xe8, 0x90, 0xab, 0xe9, 0x98, + 0x57, 0xd3, 0x51, 0xbd, 0x1d, 0xb3, 0x30, 0x29, 0xc7, 0xa7, 0x70, 0x3f, 0xd8, 0x45, 0x6a, 0x75, + 0xa3, 0xd4, 0x95, 0x9e, 0xc2, 0xdb, 0x8a, 0x8e, 0x5a, 0x82, 0xf8, 0x40, 0xf6, 0xa3, 0xd9, 0xd3, + 0x21, 0xaa, 0xb2, 0x45, 0x57, 0xf3, 0x46, 0xa3, 0x85, 0x92, 0x03, 0x7a, 0x81, 0xdb, 0xe6, 0xdb, + 0x03, 0x38, 0x98, 0x83, 0x4d, 0xbe, 0x0d, 0x97, 0xf6, 0x83, 0x5d, 0x65, 0xc8, 0xb7, 0x03, 0xc7, + 0xb5, 0x1d, 0x3f, 0x95, 0xb3, 0xaa, 0xa9, 0xee, 0x5e, 0xba, 0x9d, 0x2f, 0x86, 0x27, 0xb5, 0x37, + 0xdf, 0x80, 0xa9, 0x64, 0xce, 0xe3, 0x09, 0x71, 0xb2, 0xf9, 0x9f, 0x05, 0x28, 0x6d, 0xb8, 0x7e, + 0xff, 0xa7, 0x24, 0x7d, 0xfa, 0x17, 0x13, 0x30, 0xc1, 0x5d, 0x2f, 0x72, 0x15, 0x26, 0xc2, 0x43, + 0x5f, 0xde, 0xad, 0xe3, 0x8d, 0x0b, 0x91, 0xa1, 0xd9, 0x39, 0xf4, 0xe9, 0x63, 0xf5, 0x2f, 0x0a, + 0x09, 0xf2, 0x1e, 0x94, 0xdc, 0x7e, 0xef, 0xbe, 0xd5, 0x55, 0x46, 0xe9, 0xb5, 0xc8, 0xb5, 0xd8, + 0x12, 0xd4, 0xc7, 0x47, 0xb5, 0x0b, 0xd4, 0xb5, 0xbd, 0x96, 0xe3, 0xb6, 0x97, 0x1f, 0x32, 0xcf, + 0x5d, 0xda, 0xea, 0xf7, 0x76, 0x69, 0x80, 0xaa, 0x15, 0xf9, 0x2a, 0x4c, 0xee, 0x7a, 0x5e, 0x97, + 0x03, 0x48, 0x93, 0xa5, 0x03, 0xb5, 0x86, 0x24, 0x63, 0xc4, 0xe7, 0x5e, 0x0c, 0x0b, 0x03, 0x2e, + 0x39, 0x91, 0xf6, 0x62, 0x9a, 0x82, 0x8a, 0x8a, 0x4b, 0x7a, 0x50, 0xea, 0x59, 0x3e, 0x97, 0x2b, + 0x8a, 0x29, 0x5b, 0x1b, 0xda, 0x3f, 0x5d, 0xda, 0x14, 0x38, 0x6b, 0x6e, 0x18, 0x1c, 0xc6, 0xea, + 0x24, 0x11, 0x95, 0x12, 0xe2, 0xc0, 0x64, 0xd7, 0x61, 0x21, 0xd7, 0x57, 0x1a, 0x61, 0x57, 0x70, + 0x7d, 0xf7, 0xad, 0x6e, 0x9f, 0xc6, 0x33, 0x70, 0x47, 0xc2, 0x62, 0x84, 0xbf, 0x70, 0x08, 0xd5, + 0x44, 0x8f, 0xc8, 0x9c, 0xcc, 0x0d, 0x89, 0xcd, 0x2b, 0xd2, 0x41, 0x64, 0x07, 0x8a, 0x8f, 0x38, + 0x86, 0x32, 0x36, 0x23, 0xf6, 0x04, 0x25, 0xd8, 0x3b, 0x63, 0x6f, 0x17, 0xde, 0x29, 0x7f, 0xff, + 0xcf, 0x6b, 0xe7, 0x3e, 0xf9, 0x97, 0x2b, 0xe7, 0xcc, 0x7f, 0x1c, 0x87, 0x8a, 0x16, 0xf9, 0xff, + 0xbd, 0x53, 0x82, 0xcc, 0x4e, 0xb9, 0x35, 0xda, 0x7c, 0x9d, 0x6a, 0xbb, 0xd4, 0xd3, 0xdb, 0x65, + 0xaa, 0xf1, 0x73, 0x89, 0xa5, 0x7e, 0x7c, 0x54, 0x33, 0xd2, 0x93, 0x80, 0xd6, 0xc1, 0x26, 0x65, + 0xcc, 0x6a, 0xd3, 0x78, 0x1b, 0x7c, 0xe3, 0x49, 0xdb, 0xe0, 0x42, 0x72, 0x1b, 0x54, 0xf2, 0x97, + 0xf1, 0x93, 0x71, 0x28, 0x6f, 0x46, 0x09, 0x89, 0xdf, 0x2d, 0x40, 0xd5, 0x72, 0x5d, 0x2f, 0xb4, + 0x64, 0xf6, 0x45, 0x9a, 0xb7, 0xad, 0xa1, 0xa6, 0x23, 0x02, 0x5d, 0xaa, 0xc7, 0x80, 0x72, 0x4a, + 0xf4, 0xcd, 0x94, 0xe0, 0x60, 0x52, 0x2f, 0xf9, 0x10, 0x4a, 0x5d, 0x6b, 0x97, 0x76, 0x23, 0x6b, + 0xb7, 0x31, 0x5a, 0x0f, 0xee, 0x08, 0xac, 0xcc, 0x7a, 0x48, 0x22, 0x2a, 0x45, 0x0b, 0xef, 0xc1, + 0x5c, 0xb6, 0xa3, 0x4f, 0x33, 0xa3, 0x7c, 0x31, 0x12, 0x6a, 0x9e, 0xa6, 0xa9, 0xf9, 0x77, 0x15, + 0x80, 0x2d, 0xaf, 0x45, 0x9b, 0xa1, 0x15, 0xf6, 0x19, 0x59, 0x80, 0x31, 0xa7, 0xa5, 0xae, 0x22, + 0x50, 0xbd, 0x1d, 0xdb, 0x58, 0xc5, 0x31, 0xa7, 0xa5, 0x53, 0x1c, 0x63, 0x27, 0xa6, 0x38, 0xbe, + 0x0e, 0xd5, 0x96, 0xc3, 0xfc, 0xae, 0x75, 0xb8, 0x95, 0xe3, 0x0b, 0xac, 0xc6, 0x2c, 0x4c, 0xca, + 0x91, 0xd7, 0xd5, 0xf9, 0x9d, 0x48, 0x25, 0x74, 0xa2, 0xf3, 0x5b, 0xe6, 0xdd, 0x4b, 0x9c, 0xe1, + 0xb7, 0x61, 0x2a, 0x4a, 0x21, 0x08, 0x2d, 0x45, 0xd1, 0x2a, 0x3a, 0xf5, 0x53, 0x3b, 0x09, 0x1e, + 0xa6, 0x24, 0xb3, 0x29, 0x8e, 0xd2, 0x73, 0x49, 0x71, 0xac, 0xc2, 0x1c, 0x0b, 0xbd, 0x80, 0xb6, + 0x22, 0x89, 0x8d, 0x55, 0x83, 0xa4, 0x33, 0x57, 0xcd, 0x0c, 0x1f, 0x07, 0x5a, 0x90, 0x6d, 0xb8, + 0x10, 0x75, 0x22, 0x39, 0x40, 0x63, 0x5e, 0x20, 0x5d, 0x56, 0x48, 0x17, 0x1e, 0xe4, 0xc8, 0x60, + 0x6e, 0x4b, 0xf2, 0x26, 0x14, 0xfd, 0x8e, 0xc5, 0xa8, 0x4a, 0x6a, 0x44, 0xb1, 0x6b, 0x71, 0x9b, + 0x13, 0x1f, 0x1f, 0xd5, 0x2a, 0x7c, 0xda, 0xc5, 0x07, 0x4a, 0x41, 0x72, 0x0d, 0x60, 0xd7, 0xeb, + 0xbb, 0x2d, 0x2b, 0x38, 0xdc, 0x58, 0x15, 0x91, 0x4c, 0xe2, 0xe5, 0xae, 0xa1, 0x39, 0x98, 0x90, + 0xe2, 0x06, 0xb3, 0x27, 0x4d, 0x87, 0xca, 0x4d, 0x68, 0x83, 0xa9, 0x2d, 0x8a, 0xe2, 0x93, 0x0f, + 0xa0, 0xc2, 0x42, 0x2b, 0x08, 0x69, 0xab, 0x1e, 0xaa, 0x04, 0xc5, 0xcf, 0x9f, 0x2e, 0xdf, 0xb9, + 0xe3, 0xf4, 0x68, 0xec, 0x55, 0x34, 0x23, 0x10, 0x8c, 0xf1, 0xc8, 0xaf, 0x03, 0xec, 0x39, 0xae, + 0xc3, 0x3a, 0x02, 0xbd, 0xfa, 0xd4, 0xe8, 0x7a, 0x9c, 0xeb, 0x1a, 0x05, 0x13, 0x88, 0x3c, 0xe6, + 0xf1, 0xbd, 0xd6, 0xc6, 0xb6, 0x31, 0x25, 0x46, 0xa9, 0x63, 0x9e, 0x6d, 0x4e, 0x44, 0xc9, 0x23, + 0x57, 0xa1, 0xdc, 0xb2, 0x68, 0xcf, 0x73, 0x69, 0xcb, 0x98, 0x8e, 0xf3, 0x0e, 0xab, 0x8a, 0x86, + 0x9a, 0x4b, 0xbe, 0x0b, 0x25, 0x47, 0xb8, 0x7c, 0xc6, 0x8c, 0xe8, 0xea, 0x37, 0x87, 0xbb, 0x14, + 0x04, 0x44, 0x03, 0xb8, 0xc5, 0x91, 0x7f, 0xa3, 0x82, 0x25, 0x36, 0x4c, 0x7a, 0xfd, 0x50, 0x68, + 0x98, 0x15, 0x1a, 0x86, 0xcb, 0xb3, 0xdc, 0x95, 0x18, 0xf2, 0x25, 0x55, 0x7d, 0x60, 0x84, 0xcc, + 0xc7, 0x6b, 0x77, 0x9c, 0x6e, 0x2b, 0xa0, 0xae, 0x31, 0x27, 0x42, 0x2a, 0x31, 0xde, 0x15, 0x45, + 0x43, 0xcd, 0x25, 0xbf, 0x04, 0xd3, 0x5e, 0x3f, 0x14, 0xfb, 0x86, 0x6f, 0x3b, 0x66, 0x9c, 0x17, + 0xe2, 0xe7, 0x79, 0xd8, 0x76, 0x37, 0xc9, 0xc0, 0xb4, 0x9c, 0x39, 0x03, 0x53, 0xc9, 0xf2, 0x03, + 0xf3, 0x8f, 0xc7, 0x20, 0xea, 0xc7, 0x4f, 0x83, 0xb7, 0x4c, 0x4c, 0x28, 0x05, 0x94, 0xf5, 0xbb, + 0xa1, 0x32, 0xb6, 0x62, 0xad, 0x51, 0x50, 0x50, 0x71, 0xcc, 0x03, 0x98, 0xe6, 0xbd, 0xed, 0x76, + 0x69, 0xb7, 0x19, 0x52, 0x9f, 0x91, 0x3d, 0x28, 0x32, 0xfe, 0x87, 0x9a, 0x93, 0x11, 0x1f, 0x52, + 0x42, 0xea, 0xc7, 0xfb, 0x5d, 0x28, 0x40, 0x09, 0x6f, 0xfe, 0xc9, 0x18, 0x54, 0xf4, 0x3c, 0x9d, + 0x22, 0x43, 0xfe, 0x2a, 0x4c, 0xb6, 0xe8, 0x9e, 0xc5, 0x47, 0xa3, 0xde, 0x1a, 0xf9, 0xb6, 0x5a, + 0x95, 0x24, 0x8c, 0x78, 0xa4, 0x16, 0x5d, 0x66, 0x72, 0xc8, 0x22, 0x6b, 0x95, 0xf4, 0x15, 0xc9, + 0x3e, 0x54, 0xc4, 0x1f, 0xeb, 0x51, 0x5d, 0xc4, 0xb0, 0xeb, 0x7e, 0x3f, 0x42, 0x91, 0xb9, 0x00, + 0xfd, 0x89, 0x31, 0x7e, 0xa6, 0x9e, 0xa1, 0x78, 0x9a, 0x7a, 0x06, 0x73, 0x1d, 0xb8, 0x61, 0xb8, + 0xb1, 0x42, 0xde, 0x85, 0x32, 0x53, 0x5b, 0x57, 0xcd, 0xcb, 0x57, 0xf4, 0x23, 0x88, 0xa2, 0x3f, + 0x3e, 0xaa, 0x4d, 0x0b, 0xe1, 0x88, 0x80, 0xba, 0x89, 0xb9, 0x0c, 0xd5, 0xc4, 0xfb, 0x2f, 0x9f, + 0x61, 0xfd, 0x58, 0x94, 0x98, 0xe1, 0x55, 0x2b, 0xb4, 0x50, 0x70, 0xcc, 0xc7, 0x63, 0x30, 0x87, + 0x94, 0x79, 0xfd, 0xc0, 0xa6, 0xc9, 0xcc, 0xac, 0x65, 0x8b, 0xa2, 0x90, 0x4c, 0x66, 0xb6, 0x2e, + 0xa8, 0xa8, 0xb8, 0xe4, 0x9b, 0x30, 0xdd, 0xa3, 0x41, 0x5b, 0x1f, 0x36, 0xb5, 0x48, 0x3a, 0xbf, + 0xb2, 0x99, 0x64, 0x62, 0x5a, 0x96, 0xc7, 0xfb, 0x3d, 0xcb, 0x75, 0xf6, 0x28, 0x0b, 0xb3, 0x29, + 0x93, 0x4d, 0x45, 0x47, 0x2d, 0x41, 0x6e, 0xc0, 0x79, 0x46, 0xc3, 0xbb, 0x07, 0x2e, 0x0d, 0x90, + 0xee, 0xd1, 0x40, 0x64, 0xd2, 0x27, 0x84, 0xc9, 0x7c, 0x51, 0x35, 0x3b, 0xdf, 0xcc, 0x0a, 0xe0, + 0x60, 0x1b, 0x71, 0xfb, 0xf6, 0x6d, 0x9b, 0x32, 0xb6, 0xe2, 0xb9, 0x2d, 0x47, 0x97, 0xbe, 0x24, + 0x6f, 0xdf, 0x0c, 0x1f, 0x07, 0x5a, 0x70, 0x94, 0x3d, 0xcb, 0xe9, 0xf6, 0x03, 0x1a, 0xa3, 0x94, + 0xd2, 0x28, 0xeb, 0x19, 0x3e, 0x0e, 0xb4, 0x30, 0xdf, 0x84, 0x69, 0xa4, 0x61, 0x70, 0xa8, 0xe7, + 0xa4, 0x06, 0xc5, 0xae, 0xd3, 0x73, 0x64, 0xf2, 0xa7, 0x28, 0x37, 0xf2, 0x1d, 0x4e, 0x40, 0x49, + 0x37, 0xbf, 0x5f, 0x00, 0x88, 0xcb, 0x3a, 0xc8, 0x3e, 0x94, 0xd9, 0xf5, 0x46, 0xdf, 0xde, 0xd7, + 0xf9, 0xa2, 0x21, 0x9f, 0x15, 0x14, 0x48, 0xe2, 0xc5, 0x4d, 0x51, 0x50, 0x2b, 0x78, 0xd2, 0xa3, + 0xff, 0xdf, 0x8c, 0x83, 0x6e, 0xc5, 0x17, 0x97, 0xba, 0x2d, 0xdf, 0x73, 0xdc, 0x30, 0xfb, 0x96, + 0xb7, 0xa6, 0xe8, 0xa8, 0x25, 0xf8, 0x7e, 0xdb, 0x95, 0x83, 0x18, 0x4b, 0xef, 0x37, 0xd5, 0x07, + 0xc5, 0xe5, 0x72, 0x01, 0x6d, 0xf3, 0xb9, 0x1e, 0x4f, 0xcb, 0xa1, 0xa0, 0xa2, 0xe2, 0xf2, 0x6b, + 0x26, 0x4a, 0x98, 0xaa, 0x3d, 0x22, 0xae, 0x99, 0x28, 0xb7, 0x8a, 0x9a, 0x4b, 0x3a, 0x30, 0x6b, + 0x89, 0xa5, 0x8d, 0x93, 0xc0, 0x4f, 0x95, 0xcf, 0x8e, 0x4b, 0x0a, 0xd2, 0x28, 0x98, 0x85, 0xe5, + 0x9a, 0x58, 0xdc, 0xfc, 0xe9, 0xd3, 0xda, 0x5a, 0x53, 0x33, 0x8d, 0x82, 0x59, 0x58, 0xee, 0x61, + 0x05, 0x5e, 0x97, 0xd6, 0x71, 0x4b, 0x79, 0x72, 0xda, 0xc3, 0x42, 0x49, 0xc6, 0x88, 0x6f, 0xfe, + 0x7e, 0x01, 0x66, 0x9a, 0x76, 0xe0, 0xf8, 0xa1, 0x3e, 0xfb, 0x5b, 0xa2, 0x16, 0x24, 0xb4, 0xb8, + 0xef, 0xa3, 0xf6, 0xd4, 0xcb, 0x27, 0xe4, 0xd3, 0xa4, 0x50, 0xaa, 0x54, 0x44, 0x92, 0x30, 0x86, + 0x10, 0x51, 0xaf, 0xb0, 0x2e, 0xd9, 0xb5, 0x6d, 0x0a, 0x2a, 0x2a, 0xae, 0xf9, 0x83, 0x02, 0x94, + 0xf5, 0xeb, 0xd5, 0x2b, 0x50, 0x14, 0x8f, 0x22, 0x6a, 0xef, 0xe8, 0xcb, 0x64, 0x85, 0x13, 0x51, + 0xf2, 0xb8, 0x90, 0x70, 0xe7, 0x14, 0x70, 0xe2, 0xc6, 0xb1, 0x82, 0x10, 0x25, 0x8f, 0x6f, 0x5a, + 0xea, 0xb6, 0xd4, 0x7e, 0xd1, 0x9b, 0x76, 0xcd, 0x6d, 0x21, 0xa7, 0x8b, 0xda, 0x06, 0x2f, 0xe8, + 0x59, 0x61, 0x36, 0x26, 0x5f, 0x17, 0x54, 0x54, 0x5c, 0xf3, 0x3c, 0xcc, 0x36, 0xfb, 0xcc, 0xa7, + 0xae, 0x76, 0xc1, 0xcd, 0x69, 0xa8, 0x26, 0xaa, 0x28, 0xcd, 0xff, 0xbe, 0x04, 0xfa, 0xd5, 0xf6, + 0x67, 0x6f, 0xbf, 0x43, 0x05, 0x46, 0xb6, 0xf6, 0x71, 0x8b, 0xa3, 0xfb, 0xb8, 0x7a, 0x25, 0x33, + 0x7e, 0x6e, 0x3b, 0xf6, 0x73, 0x4b, 0x67, 0xe0, 0xe7, 0xc6, 0x15, 0x1c, 0x59, 0x5f, 0xf7, 0x0f, + 0x0a, 0x30, 0xe5, 0xf2, 0x38, 0x5a, 0x9d, 0x60, 0x63, 0x52, 0xf8, 0x56, 0x77, 0x47, 0x9a, 0xc4, + 0xa5, 0xad, 0x04, 0xa2, 0x4c, 0x21, 0xe8, 0x38, 0x37, 0xc9, 0xc2, 0x94, 0x6a, 0xb2, 0x0e, 0x65, + 0x6b, 0x8f, 0x07, 0x27, 0xe1, 0xa1, 0x7a, 0x7e, 0xbe, 0x9c, 0x77, 0xa6, 0xeb, 0x4a, 0x46, 0x9a, + 0xcb, 0xe8, 0x0b, 0x75, 0x5b, 0x7e, 0xdf, 0xe8, 0x02, 0x94, 0xca, 0x08, 0xf7, 0x4d, 0x94, 0x0b, + 0x49, 0x5c, 0xf9, 0x8a, 0x92, 0xa8, 0x47, 0x31, 0xa1, 0x24, 0xc3, 0x1f, 0x11, 0xfb, 0x95, 0xa5, + 0x27, 0x2b, 0x43, 0x23, 0x54, 0x1c, 0xd2, 0x8e, 0x1c, 0xd7, 0xaa, 0x98, 0xdc, 0xc6, 0xd0, 0xce, + 0xbc, 0xf6, 0x85, 0xf3, 0x3d, 0x57, 0x72, 0x2b, 0x69, 0x16, 0xa7, 0x4e, 0x63, 0x16, 0xa7, 0x4f, + 0x34, 0x89, 0x6d, 0x28, 0x31, 0x61, 0x74, 0x45, 0xcc, 0x57, 0xbd, 0xb6, 0x32, 0xdc, 0x9d, 0x9d, + 0xb2, 0xdb, 0x72, 0x76, 0x24, 0x0d, 0x15, 0x3c, 0xf1, 0xa0, 0x1c, 0x28, 0xdf, 0x4e, 0x85, 0x8d, + 0xc3, 0x65, 0x9d, 0xb3, 0x0e, 0xa2, 0xdc, 0x1f, 0x11, 0x15, 0xb5, 0x12, 0xf2, 0x01, 0x8c, 0xb7, + 0xac, 0xb6, 0x0a, 0x20, 0xbf, 0x35, 0xf4, 0x43, 0x7d, 0xa4, 0x46, 0x94, 0x2f, 0xae, 0xd6, 0x6f, + 0x20, 0x47, 0x25, 0xfb, 0x30, 0xc9, 0xa4, 0x0d, 0x36, 0xe6, 0x46, 0xa8, 0x0a, 0xcc, 0xd8, 0x71, + 0x19, 0x52, 0x28, 0x22, 0x46, 0x1a, 0xc8, 0x1a, 0x4c, 0x3e, 0xf2, 0xba, 0xfd, 0x9e, 0x8a, 0x3c, + 0xab, 0xd7, 0x16, 0xf2, 0x56, 0xfb, 0xbe, 0x10, 0x89, 0x8d, 0x80, 0xfc, 0x66, 0x18, 0xb5, 0x25, + 0xbf, 0x5d, 0x80, 0x19, 0x7e, 0x74, 0xf4, 0x3e, 0x60, 0x06, 0x19, 0x61, 0xa7, 0xde, 0x63, 0x34, + 0x88, 0x77, 0xd8, 0x0b, 0x4a, 0xed, 0xcc, 0x46, 0x4a, 0x03, 0x66, 0x34, 0x12, 0x1f, 0xca, 0xcc, + 0x69, 0x51, 0xdb, 0x0a, 0x98, 0x31, 0x7f, 0x66, 0xda, 0x63, 0x57, 0x51, 0x61, 0xa3, 0xd6, 0x42, + 0x7e, 0x47, 0x54, 0x72, 0xaa, 0x5a, 0x66, 0x55, 0x5f, 0x7e, 0xe1, 0x2c, 0xeb, 0xcb, 0xe7, 0x65, + 0x19, 0x67, 0x4a, 0x03, 0x66, 0x55, 0x92, 0xbb, 0x70, 0x91, 0x47, 0x2a, 0x8f, 0xe8, 0x2a, 0xb5, + 0x5a, 0x5d, 0xc7, 0xa5, 0x4d, 0x6a, 0x7b, 0x6e, 0x8b, 0x19, 0x17, 0xc5, 0xbb, 0xc0, 0x8b, 0xc7, + 0x47, 0xb5, 0x8b, 0xf5, 0x3c, 0x01, 0xcc, 0x6f, 0x47, 0x3e, 0x86, 0xe9, 0x20, 0xe9, 0xb0, 0x1b, + 0x2f, 0x8c, 0xf0, 0x28, 0x9d, 0x72, 0xfd, 0x65, 0x66, 0x23, 0x45, 0xc2, 0xb4, 0x2e, 0xf2, 0x16, + 0x54, 0x7d, 0x65, 0xa9, 0x1c, 0xd6, 0x33, 0x2e, 0x89, 0x31, 0x88, 0x1b, 0x75, 0x3b, 0x26, 0x63, + 0x52, 0x86, 0xdc, 0x83, 0x6a, 0xe8, 0x75, 0x69, 0xa0, 0x12, 0xe8, 0x86, 0x58, 0xfc, 0xc5, 0xbc, + 0x9d, 0xbc, 0xa3, 0xc5, 0xe2, 0xf4, 0x6c, 0x4c, 0x63, 0x98, 0xc4, 0xe1, 0x71, 0x5f, 0x54, 0x87, + 0x17, 0x88, 0x20, 0xf7, 0xc5, 0x74, 0xdc, 0xd7, 0x4c, 0x32, 0x31, 0x2d, 0xcb, 0x23, 0x39, 0x3f, + 0x70, 0xbc, 0xc0, 0x09, 0x0f, 0x57, 0xba, 0x16, 0x63, 0x02, 0x60, 0x41, 0x00, 0xe8, 0x48, 0x6e, + 0x3b, 0x2b, 0x80, 0x83, 0x6d, 0xb8, 0x97, 0x1f, 0x11, 0x8d, 0x97, 0x44, 0xbc, 0x24, 0xcc, 0x52, + 0xd4, 0x16, 0x35, 0xf7, 0x84, 0x12, 0x9d, 0xcb, 0xc3, 0x94, 0xe8, 0x90, 0x16, 0x5c, 0xb6, 0xfa, + 0xa1, 0xd7, 0xe3, 0x84, 0x74, 0x93, 0x1d, 0x6f, 0x9f, 0xba, 0xc6, 0x15, 0x71, 0x57, 0x5d, 0x39, + 0x3e, 0xaa, 0x5d, 0xae, 0x7f, 0x89, 0x1c, 0x7e, 0x29, 0x0a, 0xe9, 0x41, 0x99, 0xaa, 0x32, 0x23, + 0xe3, 0x2b, 0x23, 0x5c, 0x12, 0xe9, 0x5a, 0x25, 0x39, 0x41, 0x11, 0x0d, 0xb5, 0x0a, 0xb2, 0x03, + 0xd5, 0x8e, 0xc7, 0xc2, 0x7a, 0xd7, 0xb1, 0x18, 0x65, 0xc6, 0xcb, 0x62, 0x9f, 0xe4, 0xde, 0x6f, + 0x37, 0x23, 0xb1, 0x78, 0x9b, 0xdc, 0x8c, 0x5b, 0x62, 0x12, 0x86, 0x50, 0x11, 0xf2, 0xf4, 0xc5, + 0xaa, 0x79, 0x6e, 0x48, 0x3f, 0x0a, 0x8d, 0x45, 0x31, 0x96, 0xd7, 0xf2, 0x90, 0xb7, 0xbd, 0x56, + 0x33, 0x2d, 0x2d, 0x4f, 0x79, 0x86, 0x88, 0x59, 0x4c, 0xf2, 0x36, 0x4c, 0xf9, 0x5e, 0xab, 0xe9, + 0x53, 0x7b, 0xdb, 0x0a, 0xed, 0x8e, 0x51, 0x4b, 0xa7, 0xff, 0xb7, 0x13, 0x3c, 0x4c, 0x49, 0x2e, + 0xbc, 0x0f, 0xe7, 0x07, 0xfc, 0xa9, 0xa7, 0x7a, 0x2b, 0xf9, 0xcb, 0x02, 0x24, 0xdd, 0xd9, 0x33, + 0xf7, 0xfb, 0x6f, 0xc0, 0x79, 0x55, 0x66, 0xca, 0x2f, 0xdb, 0x6e, 0x3f, 0x8c, 0x62, 0xdf, 0x44, + 0xd6, 0x03, 0xb3, 0x02, 0x38, 0xd8, 0xc6, 0xfc, 0xab, 0x02, 0x4c, 0xa7, 0xcc, 0xf7, 0x99, 0xc7, + 0x79, 0xeb, 0x40, 0x7a, 0x4e, 0x10, 0x78, 0x81, 0xbc, 0x03, 0x37, 0xf9, 0x5e, 0x66, 0xaa, 0x62, + 0x5c, 0x94, 0x59, 0x6c, 0x0e, 0x70, 0x31, 0xa7, 0x85, 0xf9, 0xb7, 0x05, 0x88, 0xd3, 0x6a, 0xba, + 0xb6, 0xa8, 0x70, 0x62, 0x6d, 0xd1, 0xeb, 0x50, 0x7e, 0xc8, 0x3c, 0x77, 0x3b, 0xae, 0x40, 0xd2, + 0x13, 0x7a, 0xab, 0x79, 0x77, 0x4b, 0x48, 0x6a, 0x09, 0x21, 0xfd, 0xe1, 0xba, 0xd3, 0x0d, 0x07, + 0xeb, 0x74, 0x6e, 0xfd, 0x8a, 0xa4, 0xa3, 0x96, 0x20, 0xcb, 0x50, 0xd1, 0x99, 0x5c, 0x15, 0x20, + 0xea, 0x49, 0xd0, 0x69, 0x4c, 0x8c, 0x65, 0xcc, 0x1f, 0x8e, 0x41, 0xf9, 0x27, 0xad, 0xfc, 0x7d, + 0x1f, 0x4a, 0x4c, 0x3c, 0x05, 0xaa, 0xc0, 0x73, 0x65, 0xc4, 0xe4, 0x30, 0x87, 0x4a, 0xbe, 0x7d, + 0xf3, 0x6f, 0x54, 0x2a, 0xcc, 0xcf, 0x0a, 0x30, 0xf5, 0x1c, 0x4b, 0xde, 0x77, 0xd3, 0x25, 0xef, + 0xef, 0x8e, 0x34, 0xb4, 0x13, 0xca, 0xdd, 0xff, 0x7e, 0x3e, 0x1e, 0x12, 0x9f, 0x56, 0xe2, 0x42, + 0x25, 0x3a, 0xe0, 0x51, 0xc2, 0xfd, 0xdd, 0x91, 0x82, 0xc2, 0x78, 0x53, 0x46, 0x14, 0x86, 0xb1, + 0x0a, 0x72, 0x0d, 0x80, 0x72, 0xcb, 0x26, 0xb3, 0x71, 0x63, 0xe9, 0x7c, 0xf4, 0x9a, 0xe6, 0x60, + 0x42, 0xea, 0xf9, 0x27, 0x1c, 0xf2, 0xaf, 0xe8, 0x89, 0x67, 0x72, 0x45, 0x5f, 0x3e, 0xf3, 0x2b, + 0xfa, 0xe5, 0x67, 0x7f, 0x45, 0x27, 0x02, 0x92, 0xe2, 0x08, 0x01, 0xc9, 0xc7, 0x70, 0x41, 0xfe, + 0xb9, 0xd2, 0xb5, 0x9c, 0x9e, 0xde, 0x2f, 0xaa, 0x48, 0xe8, 0xab, 0xb9, 0x17, 0x33, 0x0d, 0x98, + 0xc3, 0x42, 0xea, 0x86, 0xf7, 0xe3, 0x96, 0xf1, 0x0b, 0xf3, 0xfd, 0x1c, 0x38, 0xcc, 0x55, 0x92, + 0xf5, 0x60, 0x27, 0x4f, 0xe1, 0xc1, 0xfe, 0xa0, 0x00, 0x17, 0xad, 0xbc, 0x1f, 0xad, 0xa9, 0x3c, + 0xc6, 0xad, 0x91, 0xe2, 0x89, 0x14, 0xa2, 0x8a, 0x07, 0xf2, 0x58, 0x98, 0xdf, 0x07, 0xf2, 0x6a, + 0x1c, 0x92, 0x56, 0xc4, 0xa6, 0xca, 0x0f, 0x26, 0xbf, 0x97, 0x4d, 0x05, 0x81, 0x98, 0xed, 0xe6, + 0xc8, 0x06, 0xfb, 0x0c, 0xd2, 0x41, 0xd5, 0x11, 0xd2, 0x41, 0x99, 0xf0, 0x62, 0xea, 0x8c, 0xc2, + 0x0b, 0x17, 0xe6, 0x9c, 0x9e, 0xd5, 0xa6, 0xdb, 0xfd, 0x6e, 0x57, 0xe6, 0xb4, 0x99, 0x31, 0x2d, + 0xb0, 0x73, 0x2b, 0x3b, 0x79, 0xb8, 0xd7, 0x95, 0xf7, 0xa3, 0x7e, 0xe6, 0x89, 0x9f, 0x61, 0x36, + 0x32, 0x48, 0x38, 0x80, 0xcd, 0xb7, 0x25, 0x77, 0x5b, 0xb7, 0x68, 0xc8, 0x67, 0x5b, 0x64, 0x4a, + 0xd4, 0x8f, 0x73, 0x6f, 0xc6, 0x64, 0x4c, 0xca, 0x90, 0xdb, 0x50, 0x69, 0xb9, 0x6c, 0xdb, 0xeb, + 0x3a, 0xf6, 0xa1, 0x48, 0x77, 0x54, 0x1a, 0x6f, 0x70, 0xdb, 0xb6, 0xba, 0xd5, 0x94, 0xc4, 0xc7, + 0x47, 0xb5, 0xcb, 0x83, 0xff, 0xfb, 0xc0, 0x92, 0xe6, 0x63, 0xdc, 0x9e, 0x6c, 0x0a, 0x30, 0x55, + 0xe6, 0x2c, 0x53, 0x1b, 0x57, 0x4e, 0xf0, 0x90, 0x57, 0xb7, 0xa2, 0xaa, 0xec, 0x69, 0xa5, 0x4e, + 0x15, 0x2f, 0xc7, 0x08, 0xe4, 0x35, 0x28, 0x79, 0xee, 0xda, 0x47, 0x4e, 0x68, 0x9c, 0x4f, 0xe7, + 0xb4, 0xef, 0x0a, 0x2a, 0x2a, 0x2e, 0xb9, 0x07, 0x97, 0xc2, 0xb0, 0xab, 0x42, 0xdb, 0xfa, 0x5e, + 0x48, 0x83, 0xa8, 0x94, 0x41, 0x94, 0xa3, 0x14, 0x1b, 0x2f, 0x1d, 0x1f, 0xd5, 0x2e, 0xed, 0xec, + 0xdc, 0xc9, 0x13, 0xc1, 0x93, 0xda, 0x9e, 0x1c, 0x74, 0xcf, 0x0f, 0x19, 0x74, 0x27, 0xe3, 0xbc, + 0x0b, 0x5f, 0x1a, 0xe7, 0x0d, 0xc4, 0xa5, 0x17, 0x9f, 0x22, 0x2e, 0xfd, 0x40, 0x14, 0x6c, 0xdc, + 0x58, 0x51, 0x31, 0xfd, 0x3b, 0xc3, 0xa5, 0x12, 0x39, 0x82, 0x7c, 0xb7, 0x13, 0x7f, 0xa2, 0xc4, + 0x24, 0xdb, 0x70, 0xc1, 0xf7, 0x5a, 0x03, 0x61, 0xad, 0x08, 0xe2, 0x13, 0xd5, 0x3a, 0xdb, 0x39, + 0x32, 0x98, 0xdb, 0x52, 0xd8, 0xd2, 0x98, 0x6e, 0x18, 0x62, 0x62, 0xa4, 0x2d, 0x8d, 0xc9, 0x98, + 0x94, 0xc9, 0x46, 0x79, 0x2f, 0x3e, 0xb3, 0x28, 0x6f, 0xe1, 0x39, 0x44, 0x79, 0x2f, 0x3d, 0xbf, + 0x28, 0xef, 0xf3, 0x32, 0xcc, 0xa4, 0xfd, 0xd7, 0xb8, 0x56, 0xaa, 0x70, 0xda, 0x5a, 0xa9, 0x54, + 0x31, 0xd3, 0xd8, 0x33, 0x2d, 0x66, 0x1a, 0x3f, 0xf3, 0x62, 0xa6, 0x44, 0xd1, 0xd6, 0xc4, 0x13, + 0x8a, 0xb6, 0xea, 0x30, 0x6b, 0x7b, 0x3d, 0x5f, 0xfc, 0x2e, 0x42, 0x95, 0xee, 0xc8, 0xe7, 0x75, + 0xfd, 0x80, 0xb9, 0x92, 0x66, 0x63, 0x56, 0x9e, 0x30, 0x28, 0xba, 0xa2, 0x61, 0x69, 0x84, 0x82, + 0xcf, 0xf4, 0x82, 0x89, 0x8b, 0x52, 0xd5, 0x5c, 0x6a, 0x37, 0x5d, 0xaa, 0x97, 0xba, 0xb8, 0xa3, + 0x31, 0x9b, 0x2e, 0xb2, 0x63, 0x46, 0x45, 0xe8, 0xff, 0xd5, 0xb3, 0xd0, 0x9f, 0xae, 0xe8, 0x53, + 0x3d, 0x89, 0xdf, 0x74, 0xd3, 0x5c, 0xcc, 0xf6, 0x84, 0x04, 0xf0, 0x82, 0x9f, 0xe7, 0x86, 0x31, + 0xf5, 0xaa, 0xf4, 0x65, 0xce, 0xe0, 0xa2, 0xd2, 0xf2, 0x42, 0xae, 0x23, 0xc7, 0xf0, 0x04, 0xe4, + 0x64, 0x45, 0x58, 0xf9, 0x59, 0x55, 0x84, 0x2d, 0x1c, 0xca, 0x62, 0xd3, 0x13, 0xeb, 0x54, 0xef, + 0xa5, 0x6b, 0xc7, 0xdf, 0x1f, 0xf2, 0xff, 0xa3, 0x89, 0xca, 0x59, 0x93, 0x35, 0xb2, 0xbf, 0x55, + 0x80, 0x0b, 0x79, 0xcb, 0x92, 0xd3, 0x8b, 0x66, 0xba, 0x17, 0xa3, 0x85, 0x6b, 0x49, 0xd3, 0xf2, + 0xef, 0xc5, 0x44, 0x70, 0x18, 0x52, 0xff, 0x67, 0x2f, 0xc7, 0x43, 0xbd, 0x1c, 0xa7, 0x7e, 0xff, + 0x5b, 0x7c, 0x8e, 0xbf, 0xff, 0x2d, 0x0d, 0xf1, 0xfb, 0xdf, 0xc9, 0xe7, 0xf9, 0xfb, 0xdf, 0xf2, + 0x29, 0x7f, 0xff, 0x5b, 0x79, 0xf6, 0xbf, 0xff, 0xfd, 0xa2, 0x00, 0x73, 0xd9, 0x72, 0xe4, 0xe7, + 0x90, 0x24, 0xdb, 0x4f, 0x25, 0xc9, 0x36, 0x46, 0x32, 0xe6, 0x51, 0xb7, 0x4f, 0x4a, 0x96, 0x99, + 0x3f, 0x2e, 0xc0, 0x40, 0xc9, 0xf5, 0x73, 0xc8, 0x63, 0x3d, 0x4c, 0xe7, 0xb1, 0xd6, 0xce, 0x64, + 0x90, 0x27, 0xe4, 0xb3, 0xfe, 0x27, 0x67, 0x88, 0xff, 0x27, 0x79, 0xad, 0x94, 0x69, 0x1b, 0x7b, + 0xf6, 0xa6, 0xad, 0xb1, 0xf4, 0xe9, 0x17, 0x8b, 0xe7, 0x3e, 0xfb, 0x62, 0xf1, 0xdc, 0xe7, 0x5f, + 0x2c, 0x9e, 0xfb, 0xe4, 0x78, 0xb1, 0xf0, 0xe9, 0xf1, 0x62, 0xe1, 0xb3, 0xe3, 0xc5, 0xc2, 0xe7, + 0xc7, 0x8b, 0x85, 0x1f, 0x1f, 0x2f, 0x16, 0xfe, 0xe8, 0x5f, 0x17, 0xcf, 0xfd, 0x5a, 0x39, 0xc2, + 0xfd, 0xdf, 0x00, 0x00, 0x00, 0xff, 0xff, 0x29, 0xb1, 0x3e, 0x58, 0x28, 0x4f, 0x00, 0x00, } func (m *ArchiveStrategy) Marshal() (dAtA []byte, err error) { @@ -2355,6 +2356,11 @@ func (m *CronWorkflowOptions) MarshalToSizedBuffer(dAtA []byte) (int, error) { _ = i var l int _ = l + i -= len(m.RuntimeGenerateName) + copy(dAtA[i:], m.RuntimeGenerateName) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.RuntimeGenerateName))) + i-- + dAtA[i] = 0x1a i -= len(m.RuntimeNamespace) copy(dAtA[i:], m.RuntimeNamespace) i = encodeVarintGenerated(dAtA, i, uint64(len(m.RuntimeNamespace))) @@ -5411,6 +5417,8 @@ func (m *CronWorkflowOptions) Size() (n int) { n += 1 + l + sovGenerated(uint64(l)) l = len(m.RuntimeNamespace) n += 1 + l + sovGenerated(uint64(l)) + l = len(m.RuntimeGenerateName) + n += 1 + l + sovGenerated(uint64(l)) return n } @@ -6583,6 +6591,7 @@ func (this *CronWorkflowOptions) String() string { s := strings.Join([]string{`&CronWorkflowOptions{`, `Schedule:` + fmt.Sprintf("%v", this.Schedule) + `,`, `RuntimeNamespace:` + fmt.Sprintf("%v", this.RuntimeNamespace) + `,`, + `RuntimeGenerateName:` + fmt.Sprintf("%v", this.RuntimeGenerateName) + `,`, `}`, }, "") return s @@ -8943,6 +8952,38 @@ func (m *CronWorkflowOptions) Unmarshal(dAtA []byte) error { } m.RuntimeNamespace = string(dAtA[iNdEx:postIndex]) iNdEx = postIndex + case 3: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field RuntimeGenerateName", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.RuntimeGenerateName = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex default: iNdEx = preIndex skippy, err := skipGenerated(dAtA[iNdEx:]) diff --git a/pkg/apis/workflow/v1alpha1/generated.proto b/pkg/apis/workflow/v1alpha1/generated.proto index 2799d2bb0370..b445dbff579c 100644 --- a/pkg/apis/workflow/v1alpha1/generated.proto +++ b/pkg/apis/workflow/v1alpha1/generated.proto @@ -149,6 +149,9 @@ message CronWorkflowOptions { // RuntimeNamespace is the namespace where the CronWorkflow will run optional string runtimeNamespace = 2; + + // RuntimeGenerateName is the name generator the Workflow will be run with. Mutually exclusive with RuntimeName + optional string runtimeGenerateName = 3; } // DAGTask represents a node in the graph during DAG execution diff --git a/pkg/apis/workflow/v1alpha1/openapi_generated.go b/pkg/apis/workflow/v1alpha1/openapi_generated.go index c507b5c3a679..201d1cd42869 100644 --- a/pkg/apis/workflow/v1alpha1/openapi_generated.go +++ b/pkg/apis/workflow/v1alpha1/openapi_generated.go @@ -533,8 +533,15 @@ func schema_pkg_apis_workflow_v1alpha1_CronWorkflowOptions(ref common.ReferenceC Format: "", }, }, + "runtimeGenerateName": { + SchemaProps: spec.SchemaProps{ + Description: "RuntimeGenerateName is the name generator the Workflow will be run with. Mutually exclusive with RuntimeName", + Type: []string{"string"}, + Format: "", + }, + }, }, - Required: []string{"schedule", "runtimeNamespace"}, + Required: []string{"schedule", "runtimeNamespace", "runtimeGenerateName"}, }, }, } diff --git a/workflow/config/config.go b/workflow/config/config.go index 4409faecbbde..3ed164378b20 100644 --- a/workflow/config/config.go +++ b/workflow/config/config.go @@ -38,7 +38,7 @@ type WorkflowControllerConfig struct { // ArtifactRepository contains the default location of an artifact repository for container artifacts ArtifactRepository ArtifactRepository `json:"artifactRepository,omitempty"` - // Namespace is a label selector filter to limit the controller's watch to a specific namespace + // RuntimeNamespace is a label selector filter to limit the controller's watch to a specific namespace Namespace string `json:"namespace,omitempty"` // InstanceID is a label selector to limit the controller's watch to a specific instance. It diff --git a/workflow/cron/controller.go b/workflow/cron/controller.go index 08e95fb1c4bf..685a9c38352b 100644 --- a/workflow/cron/controller.go +++ b/workflow/cron/controller.go @@ -96,7 +96,10 @@ func (cc *Controller) startCronWorkflow(cronWorkflow *v1alpha1.CronWorkflow) err } // TODO: Should we make a deep copy of the cronWorkflow? // TODO: Almost sure the wfClientset should be passed as reference and not value - cronWorkflowJob := NewCronWorkflowJob(cronWorkflow.Name, cronWorkflow, cc.wfClientset) + cronWorkflowJob, err := NewCronWorkflowJob(cronWorkflow.Name, cronWorkflow, cc.wfClientset) + if err != nil { + return err + } entryId, err := cc.cron.AddJob(cronWorkflow.Options.Schedule, cronWorkflowJob) if err != nil { return errors.Wrap(err, "Unable to add CronWorkflow") @@ -107,19 +110,19 @@ func (cc *Controller) startCronWorkflow(cronWorkflow *v1alpha1.CronWorkflow) err return nil } -func (cc *Controller) stopCronWorkflow(cronWorkflow *v1alpha1.CronWorkflow) error { +func (cc *Controller) stopCronWorkflow(cronWorkflowName string) error { cc.cronLock.Lock() defer cc.cronLock.Unlock() - entryId, ok := cc.nameEntryIDMap[cronWorkflow.Name] + entryId, ok := cc.nameEntryIDMap[cronWorkflowName] if !ok { - return fmt.Errorf("unable to remove workflow: workflow %s does not exist", cronWorkflow.Name) + return fmt.Errorf("unable to remove workflow: workflow %s does not exist", cronWorkflowName) } cc.cron.Remove(entryId) - delete(cc.nameEntryIDMap, cronWorkflow.Name) + delete(cc.nameEntryIDMap, cronWorkflowName) - log.Infof("CronWorkflow %s removed", cronWorkflow.Name) + log.Infof("CronWorkflow %s removed", cronWorkflowName) return nil } @@ -156,7 +159,7 @@ func (cc *Controller) addCronWorkflowInformerHandler() { log.Error(err) return } - err = cc.stopCronWorkflow(cronWf) + err = cc.stopCronWorkflow(cronWf.Name) if err != nil { log.Errorf("Error stopping CronWorkflow %s: %s", cronWf.Name, err) } diff --git a/workflow/cron/cron_workflow_job.go b/workflow/cron/cron_workflow_job.go index fa516059976e..75acb2b034e3 100644 --- a/workflow/cron/cron_workflow_job.go +++ b/workflow/cron/cron_workflow_job.go @@ -1,53 +1,66 @@ package cron import ( + "fmt" + "github.com/argoproj/argo/errors" "github.com/argoproj/argo/pkg/apis/workflow" "github.com/argoproj/argo/pkg/apis/workflow/v1alpha1" "github.com/argoproj/argo/pkg/client/clientset/versioned" "github.com/argoproj/argo/workflow/util" "github.com/prometheus/common/log" + v1 "k8s.io/apimachinery/pkg/apis/meta/v1" ) type CronWorkflowJob struct { - // Name is the name of the CronWorkflow template to be run - Name string + // Name is the namespace where the Workflow will be run + RuntimeNamespace string // CronWorkflow is the CronWorkflow to be run - // TODO: Maybe do the casting during submission and store the actual Workflow type here? - cronWf *v1alpha1.CronWorkflow + cronWf *v1alpha1.Workflow wfClientset versioned.Interface } -func NewCronWorkflowJob(templateName string, cronWorkflow *v1alpha1.CronWorkflow, wfClientset versioned.Interface) *CronWorkflowJob { - return &CronWorkflowJob{ - Name: templateName, - cronWf: cronWorkflow, - wfClientset: wfClientset, +func NewCronWorkflowJob(templateName string, cronWorkflow *v1alpha1.CronWorkflow, wfClientset versioned.Interface) (*CronWorkflowJob, error) { + wf, err := castToWorkflow(cronWorkflow) + if err != nil { + return nil, errors.InternalWrapError(err, "Unable to create CronWorkflowJob") } + return &CronWorkflowJob{ + RuntimeNamespace: cronWorkflow.Options.RuntimeNamespace, + cronWf: wf, + wfClientset: wfClientset, + }, nil } func (job *CronWorkflowJob) Run() { - log.Infof("Running %s", job.Name) - wf := job.castToWorkflow() - runtimeNamespace := job.cronWf.Options.RuntimeNamespace + log.Infof("Running %s", job.cronWf.ObjectMeta.Name) + runtimeNamespace := job.RuntimeNamespace wfClient := job.wfClientset.ArgoprojV1alpha1().Workflows(runtimeNamespace) // TODO: Is this the best way to submit Workflows? // TODO: SubmitOpts is currently always nil - _, err := util.SubmitWorkflow(wfClient, job.wfClientset, runtimeNamespace, wf, &util.SubmitOpts{}) + _, err := util.SubmitWorkflow(wfClient, job.wfClientset, runtimeNamespace, job.cronWf, &util.SubmitOpts{}) if err != nil { - log.Fatalf("Failed to submit workflow: %v", err) + log.Fatalf("Failed to run CronWorkflow: %v", err) } - log.Infof("Created %s", job.Name) + log.Infof("Created %s", job.cronWf.ObjectMeta.Name) } -func (job *CronWorkflowJob) castToWorkflow() *v1alpha1.Workflow { +func castToWorkflow(cronWf *v1alpha1.CronWorkflow) (*v1alpha1.Workflow, error) { // TODO: Overall, is this the best way to create the actual Workflow object? - newTypeMeta := job.cronWf.TypeMeta - newTypeMeta.Kind = workflow.WorkflowKind + newTypeMeta := v1.TypeMeta{ + Kind: workflow.WorkflowKind, + APIVersion: cronWf.TypeMeta.APIVersion, + } + newObjectMeta := v1.ObjectMeta{} + if cronWf.Options.RuntimeGenerateName != "" { + newObjectMeta.GenerateName = cronWf.Options.RuntimeGenerateName + } else { + return nil, fmt.Errorf("CronWorkflow should have runtimeGenerateName defined") + } return &v1alpha1.Workflow{ TypeMeta: newTypeMeta, - ObjectMeta: job.cronWf.ObjectMeta, - Spec: job.cronWf.Spec, - } + ObjectMeta: newObjectMeta, + Spec: cronWf.Spec, + }, nil } From 30b6acf42dfd9b10aaec6a08e2ea4267c1363b21 Mon Sep 17 00:00:00 2001 From: Simon Behar Date: Tue, 12 Nov 2019 11:09:24 -0800 Subject: [PATCH 08/44] WIP: Concurrency policy --- api/openapi-spec/swagger.json | 4 + .../workflow/v1alpha1/cron_workflow_types.go | 4 + pkg/apis/workflow/v1alpha1/generated.pb.go | 642 ++++++++++-------- pkg/apis/workflow/v1alpha1/generated.proto | 4 + .../workflow/v1alpha1/openapi_generated.go | 7 + workflow/common/common.go | 2 + workflow/cron/controller.go | 2 +- workflow/cron/cron_workflow_job.go | 68 +- 8 files changed, 422 insertions(+), 311 deletions(-) diff --git a/api/openapi-spec/swagger.json b/api/openapi-spec/swagger.json index cd9043ab8370..9076df1e4006 100644 --- a/api/openapi-spec/swagger.json +++ b/api/openapi-spec/swagger.json @@ -263,6 +263,10 @@ "runtimeGenerateName" ], "properties": { + "concurrencyPolicy": { + "description": "ConcurrencyPolicy is the name generator the Workflow will be run with. Mutually exclusive with RuntimeName", + "type": "string" + }, "runtimeGenerateName": { "description": "RuntimeGenerateName is the name generator the Workflow will be run with. Mutually exclusive with RuntimeName", "type": "string" diff --git a/pkg/apis/workflow/v1alpha1/cron_workflow_types.go b/pkg/apis/workflow/v1alpha1/cron_workflow_types.go index d71e18f9894a..43ec5cfa2d1b 100644 --- a/pkg/apis/workflow/v1alpha1/cron_workflow_types.go +++ b/pkg/apis/workflow/v1alpha1/cron_workflow_types.go @@ -1,6 +1,7 @@ package v1alpha1 import ( + "k8s.io/api/batch/v2alpha1" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" ) @@ -23,6 +24,7 @@ type CronWorkflowList struct { Items []CronWorkflow `json:"items" protobuf:"bytes,2,rep,name=items"` } +// TODO: Consider replacing this with the K8s API CronJobSpec. This spec is only available starting on v2alpha1. // CronWorkflowOptions is the schedule of when to run CronWorkflows type CronWorkflowOptions struct { // Schedule is a schedule to run the Workflow in Cron format @@ -31,4 +33,6 @@ type CronWorkflowOptions struct { RuntimeNamespace string `json:"runtimeNamespace" protobuf:"bytes,2,opt,name=runtimeNamespace"` // RuntimeGenerateName is the name generator the Workflow will be run with. Mutually exclusive with RuntimeName RuntimeGenerateName string `json:"runtimeGenerateName" protobuf:"bytes,3,opt,name=runtimeGenerateName"` + // ConcurrencyPolicy is the name generator the Workflow will be run with. Mutually exclusive with RuntimeName + ConcurrencyPolicy v2alpha1.ConcurrencyPolicy `json:"concurrencyPolicy,omitempty" protobuf:"bytes,4,opt,name=concurrencyPolicy,casttype=ConcurrencyPolicy"` } diff --git a/pkg/apis/workflow/v1alpha1/generated.pb.go b/pkg/apis/workflow/v1alpha1/generated.pb.go index a1f5a59b8103..cd322c518c1b 100644 --- a/pkg/apis/workflow/v1alpha1/generated.pb.go +++ b/pkg/apis/workflow/v1alpha1/generated.pb.go @@ -11,6 +11,7 @@ import ( proto "github.com/gogo/protobuf/proto" github_com_gogo_protobuf_sortkeys "github.com/gogo/protobuf/sortkeys" + k8s_io_api_batch_v2alpha1 "k8s.io/api/batch/v2alpha1" k8s_io_api_core_v1 "k8s.io/api/core/v1" v1 "k8s.io/api/core/v1" @@ -1497,305 +1498,308 @@ func init() { } var fileDescriptor_c23edafa7e7ea072 = []byte{ - // 4767 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xec, 0x5c, 0x4d, 0x6c, 0x1c, 0x57, - 0x72, 0xd6, 0x90, 0x9c, 0xe1, 0x4c, 0x0d, 0xff, 0xf4, 0x28, 0x59, 0x6d, 0x5a, 0xe6, 0x68, 0xdb, - 0xb0, 0xa3, 0x4d, 0x6c, 0xd2, 0x96, 0x76, 0x13, 0xaf, 0x37, 0xb6, 0x77, 0x86, 0x3f, 0x12, 0x25, - 0x91, 0x62, 0x6a, 0x28, 0x29, 0x1b, 0x2f, 0xb2, 0x69, 0xf6, 0x3c, 0xce, 0xb4, 0x38, 0xd3, 0xdd, - 0xee, 0xd7, 0x23, 0x9a, 0xf0, 0x21, 0x4e, 0x90, 0x20, 0x09, 0x82, 0x05, 0x92, 0x4b, 0xb2, 0xc8, - 0x5e, 0x82, 0x1c, 0x92, 0x4b, 0x2e, 0xb9, 0x06, 0xc1, 0x06, 0x08, 0x72, 0x30, 0xf6, 0x12, 0xdf, - 0xe2, 0x43, 0x40, 0xac, 0x99, 0x4b, 0x82, 0x04, 0x08, 0x90, 0x4b, 0x00, 0x9d, 0x82, 0xf7, 0xd3, - 0xaf, 0x7f, 0xa6, 0x69, 0x51, 0x33, 0x94, 0x82, 0xec, 0xee, 0x49, 0xec, 0xaa, 0x7a, 0x5f, 0xbd, - 0xdf, 0x7a, 0x55, 0xf5, 0x6a, 0x04, 0x2b, 0x6d, 0x27, 0xec, 0xf4, 0x77, 0x97, 0x6c, 0xaf, 0xb7, - 0x6c, 0x05, 0x6d, 0xcf, 0x0f, 0xbc, 0x87, 0xe2, 0x8f, 0x65, 0x7f, 0xbf, 0xbd, 0x6c, 0xf9, 0x0e, - 0x5b, 0x3e, 0xf0, 0x82, 0xfd, 0xbd, 0xae, 0x77, 0xb0, 0xfc, 0xe8, 0x2d, 0xab, 0xeb, 0x77, 0xac, - 0xb7, 0x96, 0xdb, 0xd4, 0xa5, 0x81, 0x15, 0xd2, 0xd6, 0x92, 0x1f, 0x78, 0xa1, 0x47, 0xae, 0xc7, - 0x20, 0x4b, 0x11, 0x88, 0xf8, 0x63, 0xc9, 0xdf, 0x6f, 0x2f, 0x71, 0x90, 0xa5, 0x08, 0x64, 0x29, - 0x02, 0x59, 0x78, 0x23, 0xa1, 0xb9, 0xed, 0x71, 0x85, 0x1c, 0x6b, 0xb7, 0xbf, 0x27, 0xbe, 0xc4, - 0x87, 0xf8, 0x4b, 0xea, 0x58, 0x30, 0xf7, 0xdf, 0x66, 0x4b, 0x8e, 0xc7, 0xbb, 0xb4, 0x6c, 0x7b, - 0x01, 0x5d, 0x7e, 0x34, 0xd0, 0x8f, 0x85, 0xaf, 0xc5, 0x32, 0x3d, 0xcb, 0xee, 0x38, 0x2e, 0x0d, - 0x0e, 0xe3, 0x71, 0xf4, 0x68, 0x68, 0xe5, 0xb5, 0x5a, 0x3e, 0xa9, 0x55, 0xd0, 0x77, 0x43, 0xa7, - 0x47, 0x07, 0x1a, 0xfc, 0xe2, 0x93, 0x1a, 0x30, 0xbb, 0x43, 0x7b, 0x56, 0xb6, 0x9d, 0xf9, 0x4f, - 0x05, 0x98, 0xad, 0x07, 0x76, 0xc7, 0x79, 0x44, 0x9b, 0x21, 0x67, 0xb4, 0x0f, 0xc9, 0x07, 0x30, - 0x1e, 0x5a, 0x81, 0x51, 0xb8, 0x52, 0xb8, 0x5a, 0xbd, 0xf6, 0xad, 0xa5, 0x21, 0x26, 0x72, 0x69, - 0xc7, 0x0a, 0x22, 0xb8, 0xc6, 0xe4, 0xf1, 0x51, 0x6d, 0x7c, 0xc7, 0x0a, 0x90, 0xa3, 0x92, 0xef, - 0xc2, 0x84, 0xeb, 0xb9, 0xd4, 0x18, 0x13, 0xe8, 0xf5, 0xa1, 0xd0, 0xb7, 0x3c, 0x57, 0xf7, 0xb6, - 0x51, 0x3e, 0x3e, 0xaa, 0x4d, 0x70, 0x0a, 0x0a, 0x60, 0xf3, 0xbf, 0x0a, 0x50, 0xa9, 0x07, 0xed, - 0x7e, 0x8f, 0xba, 0x21, 0x23, 0x01, 0x80, 0x6f, 0x05, 0x56, 0x8f, 0x86, 0x34, 0x60, 0x46, 0xe1, - 0xca, 0xf8, 0xd5, 0xea, 0xb5, 0xf7, 0x86, 0x52, 0xba, 0x1d, 0xc1, 0x34, 0xc8, 0xa7, 0x47, 0xb5, - 0x73, 0xc7, 0x47, 0x35, 0xd0, 0x24, 0x86, 0x09, 0x2d, 0xc4, 0x85, 0x8a, 0x15, 0x84, 0xce, 0x9e, - 0x65, 0x87, 0xcc, 0x18, 0x13, 0x2a, 0xdf, 0x1d, 0x4a, 0x65, 0x5d, 0xa1, 0x34, 0xce, 0x2b, 0x8d, - 0x95, 0x88, 0xc2, 0x30, 0x56, 0x61, 0xfe, 0xc7, 0x38, 0x94, 0x23, 0x06, 0xb9, 0x02, 0x13, 0xae, - 0xd5, 0xa3, 0x62, 0xf5, 0x2a, 0x8d, 0x29, 0xd5, 0x70, 0x62, 0xcb, 0xea, 0xf1, 0x09, 0xb2, 0x7a, - 0x94, 0x4b, 0xf8, 0x56, 0xd8, 0x11, 0x2b, 0x90, 0x90, 0xd8, 0xb6, 0xc2, 0x0e, 0x0a, 0x0e, 0xb9, - 0x0c, 0x13, 0x3d, 0xaf, 0x45, 0x8d, 0xf1, 0x2b, 0x85, 0xab, 0x45, 0x39, 0xc1, 0x9b, 0x5e, 0x8b, - 0xa2, 0xa0, 0xf2, 0xf6, 0x7b, 0x81, 0xd7, 0x33, 0x26, 0xd2, 0xed, 0xd7, 0x03, 0xaf, 0x87, 0x82, - 0x43, 0xfe, 0xb0, 0x00, 0x73, 0x51, 0xf7, 0xee, 0x78, 0xb6, 0x15, 0x3a, 0x9e, 0x6b, 0x14, 0xc5, - 0x82, 0xaf, 0x8d, 0x34, 0x11, 0x11, 0x58, 0xc3, 0x50, 0x5a, 0xe7, 0xb2, 0x1c, 0x1c, 0x50, 0x4c, - 0xae, 0x01, 0xb4, 0xbb, 0xde, 0xae, 0xd5, 0xe5, 0x73, 0x60, 0x94, 0x44, 0xaf, 0xf5, 0x12, 0xde, - 0xd0, 0x1c, 0x4c, 0x48, 0x91, 0x7d, 0x98, 0xb4, 0xe4, 0xa9, 0x30, 0x26, 0x45, 0xbf, 0x57, 0x87, - 0xec, 0x77, 0xea, 0x64, 0x35, 0xaa, 0xc7, 0x47, 0xb5, 0x49, 0x45, 0xc4, 0x48, 0x03, 0x79, 0x1d, - 0xca, 0x9e, 0xcf, 0xbb, 0x6a, 0x75, 0x8d, 0xf2, 0x95, 0xc2, 0xd5, 0x72, 0x63, 0x4e, 0x75, 0xaf, - 0x7c, 0x57, 0xd1, 0x51, 0x4b, 0x98, 0x7f, 0x5a, 0x84, 0x81, 0x51, 0x93, 0xb7, 0xa0, 0xaa, 0xd0, - 0xee, 0x78, 0x6d, 0x26, 0x16, 0xbf, 0xdc, 0x98, 0x3d, 0x3e, 0xaa, 0x55, 0xeb, 0x31, 0x19, 0x93, - 0x32, 0xe4, 0x01, 0x8c, 0xb1, 0xeb, 0xea, 0x18, 0xbe, 0x3f, 0xd4, 0xe8, 0x9a, 0xd7, 0xf5, 0x06, - 0x2d, 0x1d, 0x1f, 0xd5, 0xc6, 0x9a, 0xd7, 0x71, 0x8c, 0x5d, 0xe7, 0xe6, 0xa3, 0xed, 0x84, 0x62, - 0xf3, 0x0c, 0x6b, 0x3e, 0x6e, 0x38, 0xa1, 0x86, 0x16, 0xe6, 0xe3, 0x86, 0x13, 0x22, 0x47, 0xe5, - 0xe6, 0xa3, 0x13, 0x86, 0xbe, 0xd8, 0x7c, 0xc3, 0x9a, 0x8f, 0x9b, 0x3b, 0x3b, 0xdb, 0x1a, 0x5e, - 0xec, 0x6e, 0x4e, 0x41, 0x01, 0x4c, 0x3e, 0xe6, 0x33, 0x29, 0x79, 0x5e, 0x70, 0xa8, 0x76, 0xed, - 0xcd, 0x91, 0x76, 0xad, 0x17, 0x1c, 0x6a, 0x75, 0x6a, 0x4d, 0x34, 0x03, 0x93, 0xda, 0xc4, 0xe8, - 0x5a, 0x7b, 0x4c, 0x6c, 0xd2, 0xa1, 0x47, 0xb7, 0xba, 0xde, 0xcc, 0x8c, 0x6e, 0x75, 0xbd, 0x89, - 0x02, 0x98, 0xaf, 0x4d, 0x60, 0x1d, 0xa8, 0x3d, 0x3d, 0xdc, 0xda, 0xa0, 0x75, 0x90, 0x5e, 0x1b, - 0xb4, 0x0e, 0x90, 0xa3, 0x9a, 0x6d, 0xb8, 0x18, 0x71, 0x90, 0xfa, 0x1e, 0x73, 0xc4, 0x00, 0xe9, - 0x1e, 0x59, 0x86, 0x8a, 0xed, 0xb9, 0x7b, 0x4e, 0x7b, 0xd3, 0xf2, 0x95, 0x61, 0xd2, 0x16, 0x6d, - 0x25, 0x62, 0x60, 0x2c, 0x43, 0x5e, 0x86, 0xf1, 0x7d, 0x7a, 0xa8, 0x2c, 0x54, 0x55, 0x89, 0x8e, - 0xdf, 0xa6, 0x87, 0xc8, 0xe9, 0xe6, 0x0f, 0x0b, 0x30, 0x9f, 0x33, 0xb9, 0xbc, 0x59, 0x3f, 0xe8, - 0x2a, 0x0d, 0xba, 0xd9, 0x3d, 0xbc, 0x83, 0x9c, 0x4e, 0x7e, 0xaf, 0x00, 0xb3, 0x89, 0xd9, 0xae, - 0xf7, 0x95, 0x11, 0x1c, 0xfe, 0x74, 0xa7, 0xb0, 0x1a, 0x97, 0x94, 0xc6, 0xd9, 0x0c, 0x03, 0xb3, - 0x5a, 0xcd, 0x7f, 0x16, 0xb7, 0x6e, 0x8a, 0x46, 0x2c, 0x98, 0xe9, 0x33, 0x1a, 0x70, 0x13, 0xdd, - 0xa4, 0x76, 0x40, 0x43, 0x75, 0x01, 0xbf, 0xba, 0x24, 0xaf, 0x76, 0xde, 0x8b, 0x25, 0xee, 0x65, - 0x2c, 0x3d, 0x7a, 0x6b, 0x49, 0x4a, 0xdc, 0xa6, 0x87, 0x4d, 0xda, 0xa5, 0x1c, 0xa3, 0x41, 0x8e, - 0x8f, 0x6a, 0x33, 0xf7, 0x52, 0x00, 0x98, 0x01, 0xe4, 0x2a, 0x7c, 0x8b, 0xb1, 0x03, 0x2f, 0x68, - 0x29, 0x15, 0x63, 0x4f, 0xad, 0x62, 0x3b, 0x05, 0x80, 0x19, 0x40, 0xf3, 0xdb, 0x00, 0x2b, 0x9e, - 0x1b, 0x3a, 0x6e, 0x9f, 0xde, 0x75, 0xc9, 0x2b, 0x50, 0xa4, 0x41, 0xe0, 0x05, 0xca, 0x20, 0x4d, - 0xab, 0x09, 0x2a, 0xae, 0x71, 0x22, 0x4a, 0x1e, 0x79, 0x0d, 0x4a, 0x7b, 0x96, 0xd3, 0xa5, 0x2d, - 0xd1, 0x9b, 0x72, 0x63, 0x46, 0x49, 0x95, 0xd6, 0x05, 0x15, 0x15, 0xd7, 0xfc, 0xd1, 0x18, 0x4c, - 0xad, 0x04, 0x9e, 0xfb, 0x40, 0x2d, 0x04, 0xf9, 0x0d, 0x28, 0x73, 0xff, 0xa9, 0x65, 0x85, 0x96, - 0x9a, 0xab, 0x37, 0x13, 0x03, 0xd1, 0x6e, 0x50, 0xbc, 0x84, 0x5c, 0x9a, 0x0f, 0xed, 0xee, 0xee, - 0x43, 0x6a, 0x87, 0x9b, 0x34, 0xb4, 0xe2, 0x8b, 0x20, 0xa6, 0xa1, 0x46, 0x25, 0x36, 0x4c, 0x30, - 0x9f, 0xda, 0x23, 0x39, 0x2b, 0x51, 0x77, 0x9b, 0x3e, 0xb5, 0xe3, 0xdb, 0x92, 0x7f, 0xa1, 0x00, - 0x27, 0x0c, 0x26, 0xa5, 0x71, 0x67, 0xca, 0x66, 0x0e, 0x67, 0x6d, 0x92, 0x53, 0x23, 0xaf, 0x0d, - 0xd6, 0x98, 0x55, 0xea, 0x26, 0x15, 0x01, 0x23, 0x4d, 0xe6, 0xe7, 0x05, 0x98, 0x4b, 0xb6, 0xb8, - 0xe3, 0xb0, 0x90, 0x7c, 0x67, 0x60, 0x42, 0x97, 0x4e, 0x37, 0xa1, 0xbc, 0xb5, 0x98, 0x4e, 0x7d, - 0x71, 0x45, 0x94, 0xc4, 0x64, 0xee, 0x41, 0xd1, 0x09, 0x69, 0x2f, 0x72, 0x89, 0xea, 0x23, 0x8f, - 0x32, 0xde, 0x4f, 0x1b, 0x1c, 0x17, 0x25, 0x3c, 0x1f, 0xda, 0x7c, 0xce, 0x64, 0xf0, 0x6b, 0x96, - 0x3b, 0xc1, 0xad, 0x7e, 0x37, 0xf2, 0x8e, 0x74, 0x6f, 0x9b, 0x8a, 0x8e, 0x5a, 0x82, 0xac, 0xc2, - 0x9c, 0x72, 0x9d, 0xb9, 0x43, 0xc0, 0x7c, 0xcb, 0xa6, 0xca, 0x1e, 0x69, 0xdf, 0x03, 0x33, 0x7c, - 0x1c, 0x68, 0x41, 0x36, 0x61, 0x5e, 0xd1, 0x6e, 0x28, 0xc7, 0x5b, 0x38, 0x21, 0xe3, 0x02, 0xe8, - 0x25, 0x05, 0x34, 0x8f, 0x83, 0x22, 0x98, 0xd7, 0xce, 0xfc, 0xb3, 0x12, 0x4c, 0xae, 0xd6, 0x6f, - 0xec, 0x58, 0x6c, 0xff, 0x14, 0x8e, 0xde, 0xeb, 0x50, 0x0e, 0x69, 0xcf, 0xef, 0x5a, 0x61, 0xd4, - 0x75, 0x3d, 0xe0, 0x1d, 0x45, 0x47, 0x2d, 0x41, 0x3c, 0xee, 0xb5, 0x2a, 0xb7, 0x59, 0x6d, 0xc4, - 0xf7, 0x86, 0x34, 0x8b, 0x0a, 0x25, 0xe9, 0xb6, 0x2a, 0x12, 0xc6, 0x3a, 0x08, 0x83, 0x6a, 0xa4, - 0x1c, 0xe9, 0x9e, 0xba, 0xd1, 0x87, 0x0c, 0x37, 0x62, 0x1c, 0x79, 0xc3, 0x26, 0x08, 0x98, 0xd4, - 0x42, 0xbe, 0x06, 0x53, 0x2d, 0xea, 0x53, 0xb7, 0x45, 0x5d, 0xdb, 0xa1, 0xcc, 0x28, 0x5e, 0x19, - 0xe7, 0xf3, 0x72, 0x7c, 0x54, 0x9b, 0x5a, 0x4d, 0xd0, 0x31, 0x25, 0x45, 0x1e, 0x42, 0xe5, 0xc0, - 0x09, 0x3b, 0x62, 0x9b, 0x19, 0x25, 0xb1, 0x7d, 0xbf, 0x31, 0x54, 0x47, 0x39, 0x42, 0x3c, 0x2d, - 0x0f, 0x22, 0x4c, 0x8c, 0xe1, 0xf9, 0x65, 0xc9, 0x3f, 0x44, 0x6c, 0x21, 0x2e, 0xea, 0x4a, 0xba, - 0x81, 0x60, 0x60, 0x2c, 0x43, 0x18, 0x4c, 0xf1, 0x8f, 0x26, 0xfd, 0xb0, 0x4f, 0x5d, 0x9b, 0x0a, - 0x17, 0x72, 0xd8, 0x88, 0x23, 0x02, 0x91, 0x33, 0xf2, 0x20, 0x01, 0x8b, 0x29, 0x25, 0x7c, 0xf7, - 0x1d, 0x74, 0xa8, 0x6b, 0x54, 0xd2, 0xbb, 0xef, 0x41, 0x87, 0xba, 0x28, 0x38, 0xc4, 0x03, 0xb0, - 0xf5, 0x4d, 0x60, 0xc0, 0x08, 0x7e, 0x66, 0x7c, 0xa1, 0x34, 0x66, 0xb8, 0xa9, 0x8e, 0xbf, 0x31, - 0xa1, 0xc2, 0xfc, 0x87, 0x02, 0x54, 0xf9, 0xe1, 0x88, 0x36, 0xf4, 0x6b, 0x50, 0x0a, 0xad, 0xa0, - 0xad, 0x2e, 0xd2, 0x4a, 0x7c, 0xaf, 0xec, 0x08, 0x2a, 0x2a, 0x2e, 0xb1, 0xa0, 0x18, 0x5a, 0x6c, - 0x3f, 0xb2, 0x4b, 0xbf, 0x3c, 0x54, 0x1f, 0xd5, 0xa9, 0x8c, 0x4d, 0x12, 0xff, 0x62, 0x28, 0x91, - 0xc9, 0x55, 0x28, 0xf3, 0x4b, 0x6c, 0xdd, 0x62, 0xd2, 0x2f, 0x2e, 0x37, 0xa6, 0xf8, 0x29, 0x5c, - 0x57, 0x34, 0xd4, 0x5c, 0xf3, 0x3b, 0x30, 0xb3, 0xf6, 0x11, 0xb5, 0xfb, 0xa1, 0x17, 0x48, 0xcf, - 0x88, 0xdc, 0x02, 0xc2, 0x68, 0xf0, 0xc8, 0xb1, 0x69, 0xdd, 0xb6, 0xbd, 0xbe, 0x1b, 0x6e, 0xc5, - 0xa7, 0x7e, 0x41, 0x69, 0x23, 0xcd, 0x01, 0x09, 0xcc, 0x69, 0x65, 0xfe, 0xf5, 0x04, 0x54, 0x13, - 0xbe, 0x35, 0x5f, 0xc5, 0x80, 0xfa, 0x5e, 0xd6, 0x86, 0x70, 0xef, 0x0d, 0x05, 0x87, 0xdb, 0x90, - 0x80, 0x3e, 0x72, 0x18, 0x8f, 0xe0, 0x32, 0x36, 0x04, 0x15, 0x1d, 0xb5, 0x04, 0xa9, 0x41, 0xb1, - 0x45, 0xfd, 0xb0, 0x23, 0x06, 0x39, 0xd1, 0xa8, 0xf0, 0x89, 0x58, 0xe5, 0x04, 0x94, 0x74, 0x2e, - 0xb0, 0x47, 0x43, 0xbb, 0x63, 0x4c, 0x88, 0x73, 0x27, 0x04, 0xd6, 0x39, 0x01, 0x25, 0x3d, 0xc7, - 0x0b, 0x2a, 0x3e, 0x7b, 0x2f, 0xa8, 0x74, 0xc6, 0x5e, 0x10, 0xf1, 0x61, 0x9e, 0xb1, 0xce, 0x76, - 0xe0, 0x3c, 0xb2, 0x42, 0x2a, 0x1a, 0x0b, 0x3d, 0x93, 0x4f, 0xa3, 0xe7, 0x12, 0xbf, 0x19, 0x9a, - 0xcd, 0x9b, 0x59, 0x14, 0xcc, 0x83, 0x26, 0x4d, 0xb8, 0xe8, 0xb8, 0x8c, 0xda, 0xfd, 0x80, 0x6e, - 0xb4, 0x5d, 0x2f, 0xa0, 0x37, 0x3d, 0xc6, 0xe1, 0x54, 0x40, 0xf9, 0xb2, 0x5a, 0xb4, 0x8b, 0x1b, - 0x79, 0x42, 0x98, 0xdf, 0xd6, 0xfc, 0x51, 0x01, 0xa6, 0x92, 0xe1, 0x04, 0x61, 0x00, 0x9d, 0xd5, - 0xf5, 0xa6, 0xdc, 0x99, 0xca, 0x45, 0x78, 0x7f, 0xe8, 0x28, 0x45, 0xc2, 0xc4, 0x2e, 0x58, 0x4c, - 0xc3, 0x84, 0x9a, 0x53, 0xe4, 0x2b, 0x5e, 0x81, 0xe2, 0x9e, 0x17, 0xd8, 0x54, 0x9d, 0x2d, 0x7d, - 0x06, 0xd7, 0x39, 0x11, 0x25, 0xcf, 0xfc, 0xb7, 0x02, 0x24, 0x34, 0x90, 0xdf, 0x84, 0x69, 0xae, - 0xe3, 0x76, 0xb0, 0x9b, 0x1a, 0x4d, 0x63, 0xe8, 0xd1, 0x68, 0xa4, 0xc6, 0x45, 0xa5, 0x7f, 0x3a, - 0x45, 0xc6, 0xb4, 0x3e, 0xf2, 0x0b, 0x50, 0xb1, 0x5a, 0xad, 0x80, 0x32, 0x46, 0xa5, 0xe9, 0xa9, - 0x34, 0xa6, 0xc5, 0x5d, 0x19, 0x11, 0x31, 0xe6, 0xf3, 0x63, 0xc8, 0xe3, 0x37, 0xbe, 0xb3, 0x95, - 0xf3, 0xa0, 0x8f, 0x21, 0x57, 0xc2, 0xe9, 0xa8, 0x25, 0xcc, 0xef, 0x4d, 0x40, 0x5a, 0x37, 0x69, - 0xc1, 0xec, 0x7e, 0xb0, 0xbb, 0xb2, 0x62, 0xd9, 0x9d, 0xa1, 0xa2, 0x8b, 0x79, 0x1e, 0xd6, 0xdc, - 0x4e, 0x23, 0x60, 0x16, 0x52, 0x69, 0xb9, 0x4d, 0x0f, 0x43, 0x6b, 0x77, 0x98, 0x00, 0x23, 0xd2, - 0x92, 0x44, 0xc0, 0x2c, 0x24, 0xf9, 0x3a, 0x54, 0xf7, 0x83, 0xdd, 0xe8, 0x90, 0xab, 0xe9, 0x98, - 0x57, 0xd3, 0x51, 0xbd, 0x1d, 0xb3, 0x30, 0x29, 0xc7, 0xa7, 0x70, 0x3f, 0xd8, 0x45, 0x6a, 0x75, - 0xa3, 0xd4, 0x95, 0x9e, 0xc2, 0xdb, 0x8a, 0x8e, 0x5a, 0x82, 0xf8, 0x40, 0xf6, 0xa3, 0xd9, 0xd3, - 0x21, 0xaa, 0xb2, 0x45, 0x57, 0xf3, 0x46, 0xa3, 0x85, 0x92, 0x03, 0x7a, 0x81, 0xdb, 0xe6, 0xdb, - 0x03, 0x38, 0x98, 0x83, 0x4d, 0xbe, 0x0d, 0x97, 0xf6, 0x83, 0x5d, 0x65, 0xc8, 0xb7, 0x03, 0xc7, - 0xb5, 0x1d, 0x3f, 0x95, 0xb3, 0xaa, 0xa9, 0xee, 0x5e, 0xba, 0x9d, 0x2f, 0x86, 0x27, 0xb5, 0x37, - 0xdf, 0x80, 0xa9, 0x64, 0xce, 0xe3, 0x09, 0x71, 0xb2, 0xf9, 0x9f, 0x05, 0x28, 0x6d, 0xb8, 0x7e, - 0xff, 0xa7, 0x24, 0x7d, 0xfa, 0x17, 0x13, 0x30, 0xc1, 0x5d, 0x2f, 0x72, 0x15, 0x26, 0xc2, 0x43, - 0x5f, 0xde, 0xad, 0xe3, 0x8d, 0x0b, 0x91, 0xa1, 0xd9, 0x39, 0xf4, 0xe9, 0x63, 0xf5, 0x2f, 0x0a, - 0x09, 0xf2, 0x1e, 0x94, 0xdc, 0x7e, 0xef, 0xbe, 0xd5, 0x55, 0x46, 0xe9, 0xb5, 0xc8, 0xb5, 0xd8, - 0x12, 0xd4, 0xc7, 0x47, 0xb5, 0x0b, 0xd4, 0xb5, 0xbd, 0x96, 0xe3, 0xb6, 0x97, 0x1f, 0x32, 0xcf, - 0x5d, 0xda, 0xea, 0xf7, 0x76, 0x69, 0x80, 0xaa, 0x15, 0xf9, 0x2a, 0x4c, 0xee, 0x7a, 0x5e, 0x97, - 0x03, 0x48, 0x93, 0xa5, 0x03, 0xb5, 0x86, 0x24, 0x63, 0xc4, 0xe7, 0x5e, 0x0c, 0x0b, 0x03, 0x2e, - 0x39, 0x91, 0xf6, 0x62, 0x9a, 0x82, 0x8a, 0x8a, 0x4b, 0x7a, 0x50, 0xea, 0x59, 0x3e, 0x97, 0x2b, - 0x8a, 0x29, 0x5b, 0x1b, 0xda, 0x3f, 0x5d, 0xda, 0x14, 0x38, 0x6b, 0x6e, 0x18, 0x1c, 0xc6, 0xea, - 0x24, 0x11, 0x95, 0x12, 0xe2, 0xc0, 0x64, 0xd7, 0x61, 0x21, 0xd7, 0x57, 0x1a, 0x61, 0x57, 0x70, - 0x7d, 0xf7, 0xad, 0x6e, 0x9f, 0xc6, 0x33, 0x70, 0x47, 0xc2, 0x62, 0x84, 0xbf, 0x70, 0x08, 0xd5, - 0x44, 0x8f, 0xc8, 0x9c, 0xcc, 0x0d, 0x89, 0xcd, 0x2b, 0xd2, 0x41, 0x64, 0x07, 0x8a, 0x8f, 0x38, - 0x86, 0x32, 0x36, 0x23, 0xf6, 0x04, 0x25, 0xd8, 0x3b, 0x63, 0x6f, 0x17, 0xde, 0x29, 0x7f, 0xff, - 0xcf, 0x6b, 0xe7, 0x3e, 0xf9, 0x97, 0x2b, 0xe7, 0xcc, 0x7f, 0x1c, 0x87, 0x8a, 0x16, 0xf9, 0xff, - 0xbd, 0x53, 0x82, 0xcc, 0x4e, 0xb9, 0x35, 0xda, 0x7c, 0x9d, 0x6a, 0xbb, 0xd4, 0xd3, 0xdb, 0x65, - 0xaa, 0xf1, 0x73, 0x89, 0xa5, 0x7e, 0x7c, 0x54, 0x33, 0xd2, 0x93, 0x80, 0xd6, 0xc1, 0x26, 0x65, - 0xcc, 0x6a, 0xd3, 0x78, 0x1b, 0x7c, 0xe3, 0x49, 0xdb, 0xe0, 0x42, 0x72, 0x1b, 0x54, 0xf2, 0x97, - 0xf1, 0x93, 0x71, 0x28, 0x6f, 0x46, 0x09, 0x89, 0xdf, 0x2d, 0x40, 0xd5, 0x72, 0x5d, 0x2f, 0xb4, - 0x64, 0xf6, 0x45, 0x9a, 0xb7, 0xad, 0xa1, 0xa6, 0x23, 0x02, 0x5d, 0xaa, 0xc7, 0x80, 0x72, 0x4a, - 0xf4, 0xcd, 0x94, 0xe0, 0x60, 0x52, 0x2f, 0xf9, 0x10, 0x4a, 0x5d, 0x6b, 0x97, 0x76, 0x23, 0x6b, - 0xb7, 0x31, 0x5a, 0x0f, 0xee, 0x08, 0xac, 0xcc, 0x7a, 0x48, 0x22, 0x2a, 0x45, 0x0b, 0xef, 0xc1, - 0x5c, 0xb6, 0xa3, 0x4f, 0x33, 0xa3, 0x7c, 0x31, 0x12, 0x6a, 0x9e, 0xa6, 0xa9, 0xf9, 0x77, 0x15, - 0x80, 0x2d, 0xaf, 0x45, 0x9b, 0xa1, 0x15, 0xf6, 0x19, 0x59, 0x80, 0x31, 0xa7, 0xa5, 0xae, 0x22, - 0x50, 0xbd, 0x1d, 0xdb, 0x58, 0xc5, 0x31, 0xa7, 0xa5, 0x53, 0x1c, 0x63, 0x27, 0xa6, 0x38, 0xbe, - 0x0e, 0xd5, 0x96, 0xc3, 0xfc, 0xae, 0x75, 0xb8, 0x95, 0xe3, 0x0b, 0xac, 0xc6, 0x2c, 0x4c, 0xca, - 0x91, 0xd7, 0xd5, 0xf9, 0x9d, 0x48, 0x25, 0x74, 0xa2, 0xf3, 0x5b, 0xe6, 0xdd, 0x4b, 0x9c, 0xe1, - 0xb7, 0x61, 0x2a, 0x4a, 0x21, 0x08, 0x2d, 0x45, 0xd1, 0x2a, 0x3a, 0xf5, 0x53, 0x3b, 0x09, 0x1e, - 0xa6, 0x24, 0xb3, 0x29, 0x8e, 0xd2, 0x73, 0x49, 0x71, 0xac, 0xc2, 0x1c, 0x0b, 0xbd, 0x80, 0xb6, - 0x22, 0x89, 0x8d, 0x55, 0x83, 0xa4, 0x33, 0x57, 0xcd, 0x0c, 0x1f, 0x07, 0x5a, 0x90, 0x6d, 0xb8, - 0x10, 0x75, 0x22, 0x39, 0x40, 0x63, 0x5e, 0x20, 0x5d, 0x56, 0x48, 0x17, 0x1e, 0xe4, 0xc8, 0x60, - 0x6e, 0x4b, 0xf2, 0x26, 0x14, 0xfd, 0x8e, 0xc5, 0xa8, 0x4a, 0x6a, 0x44, 0xb1, 0x6b, 0x71, 0x9b, - 0x13, 0x1f, 0x1f, 0xd5, 0x2a, 0x7c, 0xda, 0xc5, 0x07, 0x4a, 0x41, 0x72, 0x0d, 0x60, 0xd7, 0xeb, - 0xbb, 0x2d, 0x2b, 0x38, 0xdc, 0x58, 0x15, 0x91, 0x4c, 0xe2, 0xe5, 0xae, 0xa1, 0x39, 0x98, 0x90, - 0xe2, 0x06, 0xb3, 0x27, 0x4d, 0x87, 0xca, 0x4d, 0x68, 0x83, 0xa9, 0x2d, 0x8a, 0xe2, 0x93, 0x0f, - 0xa0, 0xc2, 0x42, 0x2b, 0x08, 0x69, 0xab, 0x1e, 0xaa, 0x04, 0xc5, 0xcf, 0x9f, 0x2e, 0xdf, 0xb9, - 0xe3, 0xf4, 0x68, 0xec, 0x55, 0x34, 0x23, 0x10, 0x8c, 0xf1, 0xc8, 0xaf, 0x03, 0xec, 0x39, 0xae, - 0xc3, 0x3a, 0x02, 0xbd, 0xfa, 0xd4, 0xe8, 0x7a, 0x9c, 0xeb, 0x1a, 0x05, 0x13, 0x88, 0x3c, 0xe6, - 0xf1, 0xbd, 0xd6, 0xc6, 0xb6, 0x31, 0x25, 0x46, 0xa9, 0x63, 0x9e, 0x6d, 0x4e, 0x44, 0xc9, 0x23, - 0x57, 0xa1, 0xdc, 0xb2, 0x68, 0xcf, 0x73, 0x69, 0xcb, 0x98, 0x8e, 0xf3, 0x0e, 0xab, 0x8a, 0x86, - 0x9a, 0x4b, 0xbe, 0x0b, 0x25, 0x47, 0xb8, 0x7c, 0xc6, 0x8c, 0xe8, 0xea, 0x37, 0x87, 0xbb, 0x14, - 0x04, 0x44, 0x03, 0xb8, 0xc5, 0x91, 0x7f, 0xa3, 0x82, 0x25, 0x36, 0x4c, 0x7a, 0xfd, 0x50, 0x68, - 0x98, 0x15, 0x1a, 0x86, 0xcb, 0xb3, 0xdc, 0x95, 0x18, 0xf2, 0x25, 0x55, 0x7d, 0x60, 0x84, 0xcc, - 0xc7, 0x6b, 0x77, 0x9c, 0x6e, 0x2b, 0xa0, 0xae, 0x31, 0x27, 0x42, 0x2a, 0x31, 0xde, 0x15, 0x45, - 0x43, 0xcd, 0x25, 0xbf, 0x04, 0xd3, 0x5e, 0x3f, 0x14, 0xfb, 0x86, 0x6f, 0x3b, 0x66, 0x9c, 0x17, - 0xe2, 0xe7, 0x79, 0xd8, 0x76, 0x37, 0xc9, 0xc0, 0xb4, 0x9c, 0x39, 0x03, 0x53, 0xc9, 0xf2, 0x03, - 0xf3, 0x8f, 0xc7, 0x20, 0xea, 0xc7, 0x4f, 0x83, 0xb7, 0x4c, 0x4c, 0x28, 0x05, 0x94, 0xf5, 0xbb, - 0xa1, 0x32, 0xb6, 0x62, 0xad, 0x51, 0x50, 0x50, 0x71, 0xcc, 0x03, 0x98, 0xe6, 0xbd, 0xed, 0x76, - 0x69, 0xb7, 0x19, 0x52, 0x9f, 0x91, 0x3d, 0x28, 0x32, 0xfe, 0x87, 0x9a, 0x93, 0x11, 0x1f, 0x52, - 0x42, 0xea, 0xc7, 0xfb, 0x5d, 0x28, 0x40, 0x09, 0x6f, 0xfe, 0xc9, 0x18, 0x54, 0xf4, 0x3c, 0x9d, - 0x22, 0x43, 0xfe, 0x2a, 0x4c, 0xb6, 0xe8, 0x9e, 0xc5, 0x47, 0xa3, 0xde, 0x1a, 0xf9, 0xb6, 0x5a, - 0x95, 0x24, 0x8c, 0x78, 0xa4, 0x16, 0x5d, 0x66, 0x72, 0xc8, 0x22, 0x6b, 0x95, 0xf4, 0x15, 0xc9, - 0x3e, 0x54, 0xc4, 0x1f, 0xeb, 0x51, 0x5d, 0xc4, 0xb0, 0xeb, 0x7e, 0x3f, 0x42, 0x91, 0xb9, 0x00, - 0xfd, 0x89, 0x31, 0x7e, 0xa6, 0x9e, 0xa1, 0x78, 0x9a, 0x7a, 0x06, 0x73, 0x1d, 0xb8, 0x61, 0xb8, - 0xb1, 0x42, 0xde, 0x85, 0x32, 0x53, 0x5b, 0x57, 0xcd, 0xcb, 0x57, 0xf4, 0x23, 0x88, 0xa2, 0x3f, - 0x3e, 0xaa, 0x4d, 0x0b, 0xe1, 0x88, 0x80, 0xba, 0x89, 0xb9, 0x0c, 0xd5, 0xc4, 0xfb, 0x2f, 0x9f, - 0x61, 0xfd, 0x58, 0x94, 0x98, 0xe1, 0x55, 0x2b, 0xb4, 0x50, 0x70, 0xcc, 0xc7, 0x63, 0x30, 0x87, - 0x94, 0x79, 0xfd, 0xc0, 0xa6, 0xc9, 0xcc, 0xac, 0x65, 0x8b, 0xa2, 0x90, 0x4c, 0x66, 0xb6, 0x2e, - 0xa8, 0xa8, 0xb8, 0xe4, 0x9b, 0x30, 0xdd, 0xa3, 0x41, 0x5b, 0x1f, 0x36, 0xb5, 0x48, 0x3a, 0xbf, - 0xb2, 0x99, 0x64, 0x62, 0x5a, 0x96, 0xc7, 0xfb, 0x3d, 0xcb, 0x75, 0xf6, 0x28, 0x0b, 0xb3, 0x29, - 0x93, 0x4d, 0x45, 0x47, 0x2d, 0x41, 0x6e, 0xc0, 0x79, 0x46, 0xc3, 0xbb, 0x07, 0x2e, 0x0d, 0x90, - 0xee, 0xd1, 0x40, 0x64, 0xd2, 0x27, 0x84, 0xc9, 0x7c, 0x51, 0x35, 0x3b, 0xdf, 0xcc, 0x0a, 0xe0, - 0x60, 0x1b, 0x71, 0xfb, 0xf6, 0x6d, 0x9b, 0x32, 0xb6, 0xe2, 0xb9, 0x2d, 0x47, 0x97, 0xbe, 0x24, - 0x6f, 0xdf, 0x0c, 0x1f, 0x07, 0x5a, 0x70, 0x94, 0x3d, 0xcb, 0xe9, 0xf6, 0x03, 0x1a, 0xa3, 0x94, - 0xd2, 0x28, 0xeb, 0x19, 0x3e, 0x0e, 0xb4, 0x30, 0xdf, 0x84, 0x69, 0xa4, 0x61, 0x70, 0xa8, 0xe7, - 0xa4, 0x06, 0xc5, 0xae, 0xd3, 0x73, 0x64, 0xf2, 0xa7, 0x28, 0x37, 0xf2, 0x1d, 0x4e, 0x40, 0x49, - 0x37, 0xbf, 0x5f, 0x00, 0x88, 0xcb, 0x3a, 0xc8, 0x3e, 0x94, 0xd9, 0xf5, 0x46, 0xdf, 0xde, 0xd7, - 0xf9, 0xa2, 0x21, 0x9f, 0x15, 0x14, 0x48, 0xe2, 0xc5, 0x4d, 0x51, 0x50, 0x2b, 0x78, 0xd2, 0xa3, - 0xff, 0xdf, 0x8c, 0x83, 0x6e, 0xc5, 0x17, 0x97, 0xba, 0x2d, 0xdf, 0x73, 0xdc, 0x30, 0xfb, 0x96, - 0xb7, 0xa6, 0xe8, 0xa8, 0x25, 0xf8, 0x7e, 0xdb, 0x95, 0x83, 0x18, 0x4b, 0xef, 0x37, 0xd5, 0x07, - 0xc5, 0xe5, 0x72, 0x01, 0x6d, 0xf3, 0xb9, 0x1e, 0x4f, 0xcb, 0xa1, 0xa0, 0xa2, 0xe2, 0xf2, 0x6b, - 0x26, 0x4a, 0x98, 0xaa, 0x3d, 0x22, 0xae, 0x99, 0x28, 0xb7, 0x8a, 0x9a, 0x4b, 0x3a, 0x30, 0x6b, - 0x89, 0xa5, 0x8d, 0x93, 0xc0, 0x4f, 0x95, 0xcf, 0x8e, 0x4b, 0x0a, 0xd2, 0x28, 0x98, 0x85, 0xe5, - 0x9a, 0x58, 0xdc, 0xfc, 0xe9, 0xd3, 0xda, 0x5a, 0x53, 0x33, 0x8d, 0x82, 0x59, 0x58, 0xee, 0x61, - 0x05, 0x5e, 0x97, 0xd6, 0x71, 0x4b, 0x79, 0x72, 0xda, 0xc3, 0x42, 0x49, 0xc6, 0x88, 0x6f, 0xfe, - 0x7e, 0x01, 0x66, 0x9a, 0x76, 0xe0, 0xf8, 0xa1, 0x3e, 0xfb, 0x5b, 0xa2, 0x16, 0x24, 0xb4, 0xb8, - 0xef, 0xa3, 0xf6, 0xd4, 0xcb, 0x27, 0xe4, 0xd3, 0xa4, 0x50, 0xaa, 0x54, 0x44, 0x92, 0x30, 0x86, - 0x10, 0x51, 0xaf, 0xb0, 0x2e, 0xd9, 0xb5, 0x6d, 0x0a, 0x2a, 0x2a, 0xae, 0xf9, 0x83, 0x02, 0x94, - 0xf5, 0xeb, 0xd5, 0x2b, 0x50, 0x14, 0x8f, 0x22, 0x6a, 0xef, 0xe8, 0xcb, 0x64, 0x85, 0x13, 0x51, - 0xf2, 0xb8, 0x90, 0x70, 0xe7, 0x14, 0x70, 0xe2, 0xc6, 0xb1, 0x82, 0x10, 0x25, 0x8f, 0x6f, 0x5a, - 0xea, 0xb6, 0xd4, 0x7e, 0xd1, 0x9b, 0x76, 0xcd, 0x6d, 0x21, 0xa7, 0x8b, 0xda, 0x06, 0x2f, 0xe8, - 0x59, 0x61, 0x36, 0x26, 0x5f, 0x17, 0x54, 0x54, 0x5c, 0xf3, 0x3c, 0xcc, 0x36, 0xfb, 0xcc, 0xa7, - 0xae, 0x76, 0xc1, 0xcd, 0x69, 0xa8, 0x26, 0xaa, 0x28, 0xcd, 0xff, 0xbe, 0x04, 0xfa, 0xd5, 0xf6, - 0x67, 0x6f, 0xbf, 0x43, 0x05, 0x46, 0xb6, 0xf6, 0x71, 0x8b, 0xa3, 0xfb, 0xb8, 0x7a, 0x25, 0x33, - 0x7e, 0x6e, 0x3b, 0xf6, 0x73, 0x4b, 0x67, 0xe0, 0xe7, 0xc6, 0x15, 0x1c, 0x59, 0x5f, 0xf7, 0x0f, - 0x0a, 0x30, 0xe5, 0xf2, 0x38, 0x5a, 0x9d, 0x60, 0x63, 0x52, 0xf8, 0x56, 0x77, 0x47, 0x9a, 0xc4, - 0xa5, 0xad, 0x04, 0xa2, 0x4c, 0x21, 0xe8, 0x38, 0x37, 0xc9, 0xc2, 0x94, 0x6a, 0xb2, 0x0e, 0x65, - 0x6b, 0x8f, 0x07, 0x27, 0xe1, 0xa1, 0x7a, 0x7e, 0xbe, 0x9c, 0x77, 0xa6, 0xeb, 0x4a, 0x46, 0x9a, - 0xcb, 0xe8, 0x0b, 0x75, 0x5b, 0x7e, 0xdf, 0xe8, 0x02, 0x94, 0xca, 0x08, 0xf7, 0x4d, 0x94, 0x0b, - 0x49, 0x5c, 0xf9, 0x8a, 0x92, 0xa8, 0x47, 0x31, 0xa1, 0x24, 0xc3, 0x1f, 0x11, 0xfb, 0x95, 0xa5, - 0x27, 0x2b, 0x43, 0x23, 0x54, 0x1c, 0xd2, 0x8e, 0x1c, 0xd7, 0xaa, 0x98, 0xdc, 0xc6, 0xd0, 0xce, - 0xbc, 0xf6, 0x85, 0xf3, 0x3d, 0x57, 0x72, 0x2b, 0x69, 0x16, 0xa7, 0x4e, 0x63, 0x16, 0xa7, 0x4f, - 0x34, 0x89, 0x6d, 0x28, 0x31, 0x61, 0x74, 0x45, 0xcc, 0x57, 0xbd, 0xb6, 0x32, 0xdc, 0x9d, 0x9d, - 0xb2, 0xdb, 0x72, 0x76, 0x24, 0x0d, 0x15, 0x3c, 0xf1, 0xa0, 0x1c, 0x28, 0xdf, 0x4e, 0x85, 0x8d, - 0xc3, 0x65, 0x9d, 0xb3, 0x0e, 0xa2, 0xdc, 0x1f, 0x11, 0x15, 0xb5, 0x12, 0xf2, 0x01, 0x8c, 0xb7, - 0xac, 0xb6, 0x0a, 0x20, 0xbf, 0x35, 0xf4, 0x43, 0x7d, 0xa4, 0x46, 0x94, 0x2f, 0xae, 0xd6, 0x6f, - 0x20, 0x47, 0x25, 0xfb, 0x30, 0xc9, 0xa4, 0x0d, 0x36, 0xe6, 0x46, 0xa8, 0x0a, 0xcc, 0xd8, 0x71, - 0x19, 0x52, 0x28, 0x22, 0x46, 0x1a, 0xc8, 0x1a, 0x4c, 0x3e, 0xf2, 0xba, 0xfd, 0x9e, 0x8a, 0x3c, - 0xab, 0xd7, 0x16, 0xf2, 0x56, 0xfb, 0xbe, 0x10, 0x89, 0x8d, 0x80, 0xfc, 0x66, 0x18, 0xb5, 0x25, - 0xbf, 0x5d, 0x80, 0x19, 0x7e, 0x74, 0xf4, 0x3e, 0x60, 0x06, 0x19, 0x61, 0xa7, 0xde, 0x63, 0x34, - 0x88, 0x77, 0xd8, 0x0b, 0x4a, 0xed, 0xcc, 0x46, 0x4a, 0x03, 0x66, 0x34, 0x12, 0x1f, 0xca, 0xcc, - 0x69, 0x51, 0xdb, 0x0a, 0x98, 0x31, 0x7f, 0x66, 0xda, 0x63, 0x57, 0x51, 0x61, 0xa3, 0xd6, 0x42, - 0x7e, 0x47, 0x54, 0x72, 0xaa, 0x5a, 0x66, 0x55, 0x5f, 0x7e, 0xe1, 0x2c, 0xeb, 0xcb, 0xe7, 0x65, - 0x19, 0x67, 0x4a, 0x03, 0x66, 0x55, 0x92, 0xbb, 0x70, 0x91, 0x47, 0x2a, 0x8f, 0xe8, 0x2a, 0xb5, - 0x5a, 0x5d, 0xc7, 0xa5, 0x4d, 0x6a, 0x7b, 0x6e, 0x8b, 0x19, 0x17, 0xc5, 0xbb, 0xc0, 0x8b, 0xc7, - 0x47, 0xb5, 0x8b, 0xf5, 0x3c, 0x01, 0xcc, 0x6f, 0x47, 0x3e, 0x86, 0xe9, 0x20, 0xe9, 0xb0, 0x1b, - 0x2f, 0x8c, 0xf0, 0x28, 0x9d, 0x72, 0xfd, 0x65, 0x66, 0x23, 0x45, 0xc2, 0xb4, 0x2e, 0xf2, 0x16, - 0x54, 0x7d, 0x65, 0xa9, 0x1c, 0xd6, 0x33, 0x2e, 0x89, 0x31, 0x88, 0x1b, 0x75, 0x3b, 0x26, 0x63, - 0x52, 0x86, 0xdc, 0x83, 0x6a, 0xe8, 0x75, 0x69, 0xa0, 0x12, 0xe8, 0x86, 0x58, 0xfc, 0xc5, 0xbc, - 0x9d, 0xbc, 0xa3, 0xc5, 0xe2, 0xf4, 0x6c, 0x4c, 0x63, 0x98, 0xc4, 0xe1, 0x71, 0x5f, 0x54, 0x87, - 0x17, 0x88, 0x20, 0xf7, 0xc5, 0x74, 0xdc, 0xd7, 0x4c, 0x32, 0x31, 0x2d, 0xcb, 0x23, 0x39, 0x3f, - 0x70, 0xbc, 0xc0, 0x09, 0x0f, 0x57, 0xba, 0x16, 0x63, 0x02, 0x60, 0x41, 0x00, 0xe8, 0x48, 0x6e, - 0x3b, 0x2b, 0x80, 0x83, 0x6d, 0xb8, 0x97, 0x1f, 0x11, 0x8d, 0x97, 0x44, 0xbc, 0x24, 0xcc, 0x52, - 0xd4, 0x16, 0x35, 0xf7, 0x84, 0x12, 0x9d, 0xcb, 0xc3, 0x94, 0xe8, 0x90, 0x16, 0x5c, 0xb6, 0xfa, - 0xa1, 0xd7, 0xe3, 0x84, 0x74, 0x93, 0x1d, 0x6f, 0x9f, 0xba, 0xc6, 0x15, 0x71, 0x57, 0x5d, 0x39, - 0x3e, 0xaa, 0x5d, 0xae, 0x7f, 0x89, 0x1c, 0x7e, 0x29, 0x0a, 0xe9, 0x41, 0x99, 0xaa, 0x32, 0x23, - 0xe3, 0x2b, 0x23, 0x5c, 0x12, 0xe9, 0x5a, 0x25, 0x39, 0x41, 0x11, 0x0d, 0xb5, 0x0a, 0xb2, 0x03, - 0xd5, 0x8e, 0xc7, 0xc2, 0x7a, 0xd7, 0xb1, 0x18, 0x65, 0xc6, 0xcb, 0x62, 0x9f, 0xe4, 0xde, 0x6f, - 0x37, 0x23, 0xb1, 0x78, 0x9b, 0xdc, 0x8c, 0x5b, 0x62, 0x12, 0x86, 0x50, 0x11, 0xf2, 0xf4, 0xc5, - 0xaa, 0x79, 0x6e, 0x48, 0x3f, 0x0a, 0x8d, 0x45, 0x31, 0x96, 0xd7, 0xf2, 0x90, 0xb7, 0xbd, 0x56, - 0x33, 0x2d, 0x2d, 0x4f, 0x79, 0x86, 0x88, 0x59, 0x4c, 0xf2, 0x36, 0x4c, 0xf9, 0x5e, 0xab, 0xe9, - 0x53, 0x7b, 0xdb, 0x0a, 0xed, 0x8e, 0x51, 0x4b, 0xa7, 0xff, 0xb7, 0x13, 0x3c, 0x4c, 0x49, 0x2e, - 0xbc, 0x0f, 0xe7, 0x07, 0xfc, 0xa9, 0xa7, 0x7a, 0x2b, 0xf9, 0xcb, 0x02, 0x24, 0xdd, 0xd9, 0x33, - 0xf7, 0xfb, 0x6f, 0xc0, 0x79, 0x55, 0x66, 0xca, 0x2f, 0xdb, 0x6e, 0x3f, 0x8c, 0x62, 0xdf, 0x44, - 0xd6, 0x03, 0xb3, 0x02, 0x38, 0xd8, 0xc6, 0xfc, 0xab, 0x02, 0x4c, 0xa7, 0xcc, 0xf7, 0x99, 0xc7, - 0x79, 0xeb, 0x40, 0x7a, 0x4e, 0x10, 0x78, 0x81, 0xbc, 0x03, 0x37, 0xf9, 0x5e, 0x66, 0xaa, 0x62, - 0x5c, 0x94, 0x59, 0x6c, 0x0e, 0x70, 0x31, 0xa7, 0x85, 0xf9, 0xb7, 0x05, 0x88, 0xd3, 0x6a, 0xba, - 0xb6, 0xa8, 0x70, 0x62, 0x6d, 0xd1, 0xeb, 0x50, 0x7e, 0xc8, 0x3c, 0x77, 0x3b, 0xae, 0x40, 0xd2, - 0x13, 0x7a, 0xab, 0x79, 0x77, 0x4b, 0x48, 0x6a, 0x09, 0x21, 0xfd, 0xe1, 0xba, 0xd3, 0x0d, 0x07, - 0xeb, 0x74, 0x6e, 0xfd, 0x8a, 0xa4, 0xa3, 0x96, 0x20, 0xcb, 0x50, 0xd1, 0x99, 0x5c, 0x15, 0x20, - 0xea, 0x49, 0xd0, 0x69, 0x4c, 0x8c, 0x65, 0xcc, 0x1f, 0x8e, 0x41, 0xf9, 0x27, 0xad, 0xfc, 0x7d, - 0x1f, 0x4a, 0x4c, 0x3c, 0x05, 0xaa, 0xc0, 0x73, 0x65, 0xc4, 0xe4, 0x30, 0x87, 0x4a, 0xbe, 0x7d, - 0xf3, 0x6f, 0x54, 0x2a, 0xcc, 0xcf, 0x0a, 0x30, 0xf5, 0x1c, 0x4b, 0xde, 0x77, 0xd3, 0x25, 0xef, - 0xef, 0x8e, 0x34, 0xb4, 0x13, 0xca, 0xdd, 0xff, 0x7e, 0x3e, 0x1e, 0x12, 0x9f, 0x56, 0xe2, 0x42, - 0x25, 0x3a, 0xe0, 0x51, 0xc2, 0xfd, 0xdd, 0x91, 0x82, 0xc2, 0x78, 0x53, 0x46, 0x14, 0x86, 0xb1, - 0x0a, 0x72, 0x0d, 0x80, 0x72, 0xcb, 0x26, 0xb3, 0x71, 0x63, 0xe9, 0x7c, 0xf4, 0x9a, 0xe6, 0x60, - 0x42, 0xea, 0xf9, 0x27, 0x1c, 0xf2, 0xaf, 0xe8, 0x89, 0x67, 0x72, 0x45, 0x5f, 0x3e, 0xf3, 0x2b, - 0xfa, 0xe5, 0x67, 0x7f, 0x45, 0x27, 0x02, 0x92, 0xe2, 0x08, 0x01, 0xc9, 0xc7, 0x70, 0x41, 0xfe, - 0xb9, 0xd2, 0xb5, 0x9c, 0x9e, 0xde, 0x2f, 0xaa, 0x48, 0xe8, 0xab, 0xb9, 0x17, 0x33, 0x0d, 0x98, - 0xc3, 0x42, 0xea, 0x86, 0xf7, 0xe3, 0x96, 0xf1, 0x0b, 0xf3, 0xfd, 0x1c, 0x38, 0xcc, 0x55, 0x92, - 0xf5, 0x60, 0x27, 0x4f, 0xe1, 0xc1, 0xfe, 0xa0, 0x00, 0x17, 0xad, 0xbc, 0x1f, 0xad, 0xa9, 0x3c, - 0xc6, 0xad, 0x91, 0xe2, 0x89, 0x14, 0xa2, 0x8a, 0x07, 0xf2, 0x58, 0x98, 0xdf, 0x07, 0xf2, 0x6a, - 0x1c, 0x92, 0x56, 0xc4, 0xa6, 0xca, 0x0f, 0x26, 0xbf, 0x97, 0x4d, 0x05, 0x81, 0x98, 0xed, 0xe6, - 0xc8, 0x06, 0xfb, 0x0c, 0xd2, 0x41, 0xd5, 0x11, 0xd2, 0x41, 0x99, 0xf0, 0x62, 0xea, 0x8c, 0xc2, - 0x0b, 0x17, 0xe6, 0x9c, 0x9e, 0xd5, 0xa6, 0xdb, 0xfd, 0x6e, 0x57, 0xe6, 0xb4, 0x99, 0x31, 0x2d, - 0xb0, 0x73, 0x2b, 0x3b, 0x79, 0xb8, 0xd7, 0x95, 0xf7, 0xa3, 0x7e, 0xe6, 0x89, 0x9f, 0x61, 0x36, - 0x32, 0x48, 0x38, 0x80, 0xcd, 0xb7, 0x25, 0x77, 0x5b, 0xb7, 0x68, 0xc8, 0x67, 0x5b, 0x64, 0x4a, - 0xd4, 0x8f, 0x73, 0x6f, 0xc6, 0x64, 0x4c, 0xca, 0x90, 0xdb, 0x50, 0x69, 0xb9, 0x6c, 0xdb, 0xeb, - 0x3a, 0xf6, 0xa1, 0x48, 0x77, 0x54, 0x1a, 0x6f, 0x70, 0xdb, 0xb6, 0xba, 0xd5, 0x94, 0xc4, 0xc7, - 0x47, 0xb5, 0xcb, 0x83, 0xff, 0xfb, 0xc0, 0x92, 0xe6, 0x63, 0xdc, 0x9e, 0x6c, 0x0a, 0x30, 0x55, - 0xe6, 0x2c, 0x53, 0x1b, 0x57, 0x4e, 0xf0, 0x90, 0x57, 0xb7, 0xa2, 0xaa, 0xec, 0x69, 0xa5, 0x4e, - 0x15, 0x2f, 0xc7, 0x08, 0xe4, 0x35, 0x28, 0x79, 0xee, 0xda, 0x47, 0x4e, 0x68, 0x9c, 0x4f, 0xe7, - 0xb4, 0xef, 0x0a, 0x2a, 0x2a, 0x2e, 0xb9, 0x07, 0x97, 0xc2, 0xb0, 0xab, 0x42, 0xdb, 0xfa, 0x5e, - 0x48, 0x83, 0xa8, 0x94, 0x41, 0x94, 0xa3, 0x14, 0x1b, 0x2f, 0x1d, 0x1f, 0xd5, 0x2e, 0xed, 0xec, - 0xdc, 0xc9, 0x13, 0xc1, 0x93, 0xda, 0x9e, 0x1c, 0x74, 0xcf, 0x0f, 0x19, 0x74, 0x27, 0xe3, 0xbc, - 0x0b, 0x5f, 0x1a, 0xe7, 0x0d, 0xc4, 0xa5, 0x17, 0x9f, 0x22, 0x2e, 0xfd, 0x40, 0x14, 0x6c, 0xdc, - 0x58, 0x51, 0x31, 0xfd, 0x3b, 0xc3, 0xa5, 0x12, 0x39, 0x82, 0x7c, 0xb7, 0x13, 0x7f, 0xa2, 0xc4, - 0x24, 0xdb, 0x70, 0xc1, 0xf7, 0x5a, 0x03, 0x61, 0xad, 0x08, 0xe2, 0x13, 0xd5, 0x3a, 0xdb, 0x39, - 0x32, 0x98, 0xdb, 0x52, 0xd8, 0xd2, 0x98, 0x6e, 0x18, 0x62, 0x62, 0xa4, 0x2d, 0x8d, 0xc9, 0x98, - 0x94, 0xc9, 0x46, 0x79, 0x2f, 0x3e, 0xb3, 0x28, 0x6f, 0xe1, 0x39, 0x44, 0x79, 0x2f, 0x3d, 0xbf, - 0x28, 0xef, 0xf3, 0x32, 0xcc, 0xa4, 0xfd, 0xd7, 0xb8, 0x56, 0xaa, 0x70, 0xda, 0x5a, 0xa9, 0x54, - 0x31, 0xd3, 0xd8, 0x33, 0x2d, 0x66, 0x1a, 0x3f, 0xf3, 0x62, 0xa6, 0x44, 0xd1, 0xd6, 0xc4, 0x13, - 0x8a, 0xb6, 0xea, 0x30, 0x6b, 0x7b, 0x3d, 0x5f, 0xfc, 0x2e, 0x42, 0x95, 0xee, 0xc8, 0xe7, 0x75, - 0xfd, 0x80, 0xb9, 0x92, 0x66, 0x63, 0x56, 0x9e, 0x30, 0x28, 0xba, 0xa2, 0x61, 0x69, 0x84, 0x82, - 0xcf, 0xf4, 0x82, 0x89, 0x8b, 0x52, 0xd5, 0x5c, 0x6a, 0x37, 0x5d, 0xaa, 0x97, 0xba, 0xb8, 0xa3, - 0x31, 0x9b, 0x2e, 0xb2, 0x63, 0x46, 0x45, 0xe8, 0xff, 0xd5, 0xb3, 0xd0, 0x9f, 0xae, 0xe8, 0x53, - 0x3d, 0x89, 0xdf, 0x74, 0xd3, 0x5c, 0xcc, 0xf6, 0x84, 0x04, 0xf0, 0x82, 0x9f, 0xe7, 0x86, 0x31, - 0xf5, 0xaa, 0xf4, 0x65, 0xce, 0xe0, 0xa2, 0xd2, 0xf2, 0x42, 0xae, 0x23, 0xc7, 0xf0, 0x04, 0xe4, - 0x64, 0x45, 0x58, 0xf9, 0x59, 0x55, 0x84, 0x2d, 0x1c, 0xca, 0x62, 0xd3, 0x13, 0xeb, 0x54, 0xef, - 0xa5, 0x6b, 0xc7, 0xdf, 0x1f, 0xf2, 0xff, 0xa3, 0x89, 0xca, 0x59, 0x93, 0x35, 0xb2, 0xbf, 0x55, - 0x80, 0x0b, 0x79, 0xcb, 0x92, 0xd3, 0x8b, 0x66, 0xba, 0x17, 0xa3, 0x85, 0x6b, 0x49, 0xd3, 0xf2, - 0xef, 0xc5, 0x44, 0x70, 0x18, 0x52, 0xff, 0x67, 0x2f, 0xc7, 0x43, 0xbd, 0x1c, 0xa7, 0x7e, 0xff, - 0x5b, 0x7c, 0x8e, 0xbf, 0xff, 0x2d, 0x0d, 0xf1, 0xfb, 0xdf, 0xc9, 0xe7, 0xf9, 0xfb, 0xdf, 0xf2, - 0x29, 0x7f, 0xff, 0x5b, 0x79, 0xf6, 0xbf, 0xff, 0xfd, 0xa2, 0x00, 0x73, 0xd9, 0x72, 0xe4, 0xe7, - 0x90, 0x24, 0xdb, 0x4f, 0x25, 0xc9, 0x36, 0x46, 0x32, 0xe6, 0x51, 0xb7, 0x4f, 0x4a, 0x96, 0x99, - 0x3f, 0x2e, 0xc0, 0x40, 0xc9, 0xf5, 0x73, 0xc8, 0x63, 0x3d, 0x4c, 0xe7, 0xb1, 0xd6, 0xce, 0x64, - 0x90, 0x27, 0xe4, 0xb3, 0xfe, 0x27, 0x67, 0x88, 0xff, 0x27, 0x79, 0xad, 0x94, 0x69, 0x1b, 0x7b, - 0xf6, 0xa6, 0xad, 0xb1, 0xf4, 0xe9, 0x17, 0x8b, 0xe7, 0x3e, 0xfb, 0x62, 0xf1, 0xdc, 0xe7, 0x5f, - 0x2c, 0x9e, 0xfb, 0xe4, 0x78, 0xb1, 0xf0, 0xe9, 0xf1, 0x62, 0xe1, 0xb3, 0xe3, 0xc5, 0xc2, 0xe7, - 0xc7, 0x8b, 0x85, 0x1f, 0x1f, 0x2f, 0x16, 0xfe, 0xe8, 0x5f, 0x17, 0xcf, 0xfd, 0x5a, 0x39, 0xc2, - 0xfd, 0xdf, 0x00, 0x00, 0x00, 0xff, 0xff, 0x29, 0xb1, 0x3e, 0x58, 0x28, 0x4f, 0x00, 0x00, + // 4811 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xec, 0x5c, 0x4d, 0x8c, 0x5c, 0x57, + 0x56, 0x76, 0x55, 0x77, 0x55, 0x57, 0x9d, 0xea, 0x3f, 0xdf, 0xb6, 0xe3, 0x97, 0x8e, 0xd3, 0xe5, + 0x79, 0x51, 0x82, 0x87, 0x49, 0xaa, 0x13, 0x7b, 0x06, 0x32, 0x19, 0x92, 0x4c, 0x55, 0xff, 0xd8, + 0x6d, 0xbb, 0x7f, 0x38, 0xd5, 0xb6, 0x19, 0x32, 0x62, 0x78, 0xfd, 0xea, 0x76, 0xd5, 0x73, 0x57, + 0xbd, 0xf7, 0xf2, 0xee, 0xab, 0xee, 0x94, 0xb2, 0x20, 0x20, 0x10, 0x20, 0x34, 0x12, 0x6c, 0x60, + 0xc4, 0x6c, 0x10, 0x0b, 0xd8, 0xb0, 0x61, 0x8b, 0xd0, 0x20, 0x21, 0x16, 0xd1, 0x6c, 0xc8, 0x8e, + 0x2c, 0x50, 0x6b, 0xd2, 0x6c, 0x40, 0x20, 0x21, 0xb1, 0x41, 0xf2, 0x0a, 0xdd, 0xfb, 0xee, 0xbb, + 0xef, 0xa7, 0x5e, 0xc7, 0xed, 0xaa, 0xb6, 0x11, 0xcc, 0xac, 0xdc, 0xef, 0x9c, 0x73, 0xbf, 0x73, + 0x7f, 0xcf, 0x3d, 0xe7, 0xdc, 0x53, 0x86, 0x95, 0xb6, 0xe5, 0x77, 0xfa, 0x7b, 0x35, 0xd3, 0xe9, + 0x2d, 0x1b, 0x5e, 0xdb, 0x71, 0x3d, 0xe7, 0x91, 0xf8, 0x63, 0xd9, 0x3d, 0x68, 0x2f, 0x1b, 0xae, + 0xc5, 0x96, 0x8f, 0x1c, 0xef, 0x60, 0xbf, 0xeb, 0x1c, 0x2d, 0x1f, 0xbe, 0x65, 0x74, 0xdd, 0x8e, + 0xf1, 0xd6, 0x72, 0x9b, 0xda, 0xd4, 0x33, 0x7c, 0xda, 0xaa, 0xb9, 0x9e, 0xe3, 0x3b, 0xe4, 0x66, + 0x04, 0x52, 0x0b, 0x41, 0xc4, 0x1f, 0x35, 0xf7, 0xa0, 0x5d, 0xe3, 0x20, 0xb5, 0x10, 0xa4, 0x16, + 0x82, 0x2c, 0xbe, 0x11, 0xd3, 0xdc, 0x76, 0xb8, 0x42, 0x8e, 0xb5, 0xd7, 0xdf, 0x17, 0x5f, 0xe2, + 0x43, 0xfc, 0x15, 0xe8, 0x58, 0xd4, 0x0f, 0xde, 0x66, 0x35, 0xcb, 0xe1, 0x5d, 0x5a, 0x36, 0x1d, + 0x8f, 0x2e, 0x1f, 0x0e, 0xf5, 0x63, 0xf1, 0xeb, 0x91, 0x4c, 0xcf, 0x30, 0x3b, 0x96, 0x4d, 0xbd, + 0x41, 0x34, 0x8e, 0x1e, 0xf5, 0x8d, 0xac, 0x56, 0xcb, 0xa7, 0xb5, 0xf2, 0xfa, 0xb6, 0x6f, 0xf5, + 0xe8, 0x50, 0x83, 0x5f, 0x78, 0x52, 0x03, 0x66, 0x76, 0x68, 0xcf, 0x48, 0xb7, 0xd3, 0xff, 0x31, + 0x07, 0x73, 0x75, 0xcf, 0xec, 0x58, 0x87, 0xb4, 0xe9, 0x73, 0x46, 0x7b, 0x40, 0x3e, 0x80, 0x09, + 0xdf, 0xf0, 0xb4, 0xdc, 0xb5, 0xdc, 0xf5, 0xca, 0x8d, 0x6f, 0xd7, 0x46, 0x98, 0xc8, 0xda, 0xae, + 0xe1, 0x85, 0x70, 0x8d, 0xa9, 0x93, 0xe3, 0xea, 0xc4, 0xae, 0xe1, 0x21, 0x47, 0x25, 0xdf, 0x83, + 0x49, 0xdb, 0xb1, 0xa9, 0x96, 0x17, 0xe8, 0xf5, 0x91, 0xd0, 0xb7, 0x1c, 0x5b, 0xf5, 0xb6, 0x51, + 0x3a, 0x39, 0xae, 0x4e, 0x72, 0x0a, 0x0a, 0x60, 0xfd, 0x3f, 0x73, 0x50, 0xae, 0x7b, 0xed, 0x7e, + 0x8f, 0xda, 0x3e, 0x23, 0x1e, 0x80, 0x6b, 0x78, 0x46, 0x8f, 0xfa, 0xd4, 0x63, 0x5a, 0xee, 0xda, + 0xc4, 0xf5, 0xca, 0x8d, 0xf7, 0x46, 0x52, 0xba, 0x13, 0xc2, 0x34, 0xc8, 0xa7, 0xc7, 0xd5, 0x0b, + 0x27, 0xc7, 0x55, 0x50, 0x24, 0x86, 0x31, 0x2d, 0xc4, 0x86, 0xb2, 0xe1, 0xf9, 0xd6, 0xbe, 0x61, + 0xfa, 0x4c, 0xcb, 0x0b, 0x95, 0xef, 0x8e, 0xa4, 0xb2, 0x2e, 0x51, 0x1a, 0x17, 0xa5, 0xc6, 0x72, + 0x48, 0x61, 0x18, 0xa9, 0xd0, 0xff, 0x7d, 0x02, 0x4a, 0x21, 0x83, 0x5c, 0x83, 0x49, 0xdb, 0xe8, + 0x51, 0xb1, 0x7a, 0xe5, 0xc6, 0xb4, 0x6c, 0x38, 0xb9, 0x65, 0xf4, 0xf8, 0x04, 0x19, 0x3d, 0xca, + 0x25, 0x5c, 0xc3, 0xef, 0x88, 0x15, 0x88, 0x49, 0xec, 0x18, 0x7e, 0x07, 0x05, 0x87, 0x5c, 0x85, + 0xc9, 0x9e, 0xd3, 0xa2, 0xda, 0xc4, 0xb5, 0xdc, 0xf5, 0x42, 0x30, 0xc1, 0x9b, 0x4e, 0x8b, 0xa2, + 0xa0, 0xf2, 0xf6, 0xfb, 0x9e, 0xd3, 0xd3, 0x26, 0x93, 0xed, 0xd7, 0x3d, 0xa7, 0x87, 0x82, 0x43, + 0xfe, 0x20, 0x07, 0xf3, 0x61, 0xf7, 0xee, 0x39, 0xa6, 0xe1, 0x5b, 0x8e, 0xad, 0x15, 0xc4, 0x82, + 0xaf, 0x8d, 0x35, 0x11, 0x21, 0x58, 0x43, 0x93, 0x5a, 0xe7, 0xd3, 0x1c, 0x1c, 0x52, 0x4c, 0x6e, + 0x00, 0xb4, 0xbb, 0xce, 0x9e, 0xd1, 0xe5, 0x73, 0xa0, 0x15, 0x45, 0xaf, 0xd5, 0x12, 0xde, 0x52, + 0x1c, 0x8c, 0x49, 0x91, 0x03, 0x98, 0x32, 0x82, 0x53, 0xa1, 0x4d, 0x89, 0x7e, 0xaf, 0x8e, 0xd8, + 0xef, 0xc4, 0xc9, 0x6a, 0x54, 0x4e, 0x8e, 0xab, 0x53, 0x92, 0x88, 0xa1, 0x06, 0xf2, 0x3a, 0x94, + 0x1c, 0x97, 0x77, 0xd5, 0xe8, 0x6a, 0xa5, 0x6b, 0xb9, 0xeb, 0xa5, 0xc6, 0xbc, 0xec, 0x5e, 0x69, + 0x5b, 0xd2, 0x51, 0x49, 0xe8, 0x7f, 0x52, 0x80, 0xa1, 0x51, 0x93, 0xb7, 0xa0, 0x22, 0xd1, 0xee, + 0x39, 0x6d, 0x26, 0x16, 0xbf, 0xd4, 0x98, 0x3b, 0x39, 0xae, 0x56, 0xea, 0x11, 0x19, 0xe3, 0x32, + 0xe4, 0x21, 0xe4, 0xd9, 0x4d, 0x79, 0x0c, 0xdf, 0x1f, 0x69, 0x74, 0xcd, 0x9b, 0x6a, 0x83, 0x16, + 0x4f, 0x8e, 0xab, 0xf9, 0xe6, 0x4d, 0xcc, 0xb3, 0x9b, 0xdc, 0x7c, 0xb4, 0x2d, 0x5f, 0x6c, 0x9e, + 0x51, 0xcd, 0xc7, 0x2d, 0xcb, 0x57, 0xd0, 0xc2, 0x7c, 0xdc, 0xb2, 0x7c, 0xe4, 0xa8, 0xdc, 0x7c, + 0x74, 0x7c, 0xdf, 0x15, 0x9b, 0x6f, 0x54, 0xf3, 0x71, 0x7b, 0x77, 0x77, 0x47, 0xc1, 0x8b, 0xdd, + 0xcd, 0x29, 0x28, 0x80, 0xc9, 0xc7, 0x7c, 0x26, 0x03, 0x9e, 0xe3, 0x0d, 0xe4, 0xae, 0xbd, 0x3d, + 0xd6, 0xae, 0x75, 0xbc, 0x81, 0x52, 0x27, 0xd7, 0x44, 0x31, 0x30, 0xae, 0x4d, 0x8c, 0xae, 0xb5, + 0xcf, 0xc4, 0x26, 0x1d, 0x79, 0x74, 0xab, 0xeb, 0xcd, 0xd4, 0xe8, 0x56, 0xd7, 0x9b, 0x28, 0x80, + 0xf9, 0xda, 0x78, 0xc6, 0x91, 0xdc, 0xd3, 0xa3, 0xad, 0x0d, 0x1a, 0x47, 0xc9, 0xb5, 0x41, 0xe3, + 0x08, 0x39, 0xaa, 0xde, 0x86, 0xcb, 0x21, 0x07, 0xa9, 0xeb, 0x30, 0x4b, 0x0c, 0x90, 0xee, 0x93, + 0x65, 0x28, 0x9b, 0x8e, 0xbd, 0x6f, 0xb5, 0x37, 0x0d, 0x57, 0x1a, 0x26, 0x65, 0xd1, 0x56, 0x42, + 0x06, 0x46, 0x32, 0xe4, 0x65, 0x98, 0x38, 0xa0, 0x03, 0x69, 0xa1, 0x2a, 0x52, 0x74, 0xe2, 0x2e, + 0x1d, 0x20, 0xa7, 0xeb, 0x3f, 0xca, 0xc1, 0x42, 0xc6, 0xe4, 0xf2, 0x66, 0x7d, 0xaf, 0x2b, 0x35, + 0xa8, 0x66, 0xf7, 0xf1, 0x1e, 0x72, 0x3a, 0xf9, 0xdd, 0x1c, 0xcc, 0xc5, 0x66, 0xbb, 0xde, 0x97, + 0x46, 0x70, 0xf4, 0xd3, 0x9d, 0xc0, 0x6a, 0x5c, 0x91, 0x1a, 0xe7, 0x52, 0x0c, 0x4c, 0x6b, 0xd5, + 0xff, 0x49, 0xdc, 0xba, 0x09, 0x1a, 0x31, 0x60, 0xb6, 0xcf, 0xa8, 0xc7, 0x4d, 0x74, 0x93, 0x9a, + 0x1e, 0xf5, 0xe5, 0x05, 0xfc, 0x6a, 0x2d, 0xb8, 0xda, 0x79, 0x2f, 0x6a, 0xdc, 0xcb, 0xa8, 0x1d, + 0xbe, 0x55, 0x0b, 0x24, 0xee, 0xd2, 0x41, 0x93, 0x76, 0x29, 0xc7, 0x68, 0x90, 0x93, 0xe3, 0xea, + 0xec, 0xfd, 0x04, 0x00, 0xa6, 0x00, 0xb9, 0x0a, 0xd7, 0x60, 0xec, 0xc8, 0xf1, 0x5a, 0x52, 0x45, + 0xfe, 0xa9, 0x55, 0xec, 0x24, 0x00, 0x30, 0x05, 0xa8, 0x7f, 0x07, 0x60, 0xc5, 0xb1, 0x7d, 0xcb, + 0xee, 0xd3, 0x6d, 0x9b, 0xbc, 0x02, 0x05, 0xea, 0x79, 0x8e, 0x27, 0x0d, 0xd2, 0x8c, 0x9c, 0xa0, + 0xc2, 0x1a, 0x27, 0x62, 0xc0, 0x23, 0xaf, 0x41, 0x71, 0xdf, 0xb0, 0xba, 0xb4, 0x25, 0x7a, 0x53, + 0x6a, 0xcc, 0x4a, 0xa9, 0xe2, 0xba, 0xa0, 0xa2, 0xe4, 0xea, 0x3f, 0xce, 0xc3, 0xf4, 0x8a, 0xe7, + 0xd8, 0x0f, 0xe5, 0x42, 0x90, 0x5f, 0x87, 0x12, 0xf7, 0x9f, 0x5a, 0x86, 0x6f, 0xc8, 0xb9, 0x7a, + 0x33, 0x36, 0x10, 0xe5, 0x06, 0x45, 0x4b, 0xc8, 0xa5, 0xf9, 0xd0, 0xb6, 0xf7, 0x1e, 0x51, 0xd3, + 0xdf, 0xa4, 0xbe, 0x11, 0x5d, 0x04, 0x11, 0x0d, 0x15, 0x2a, 0x31, 0x61, 0x92, 0xb9, 0xd4, 0x1c, + 0xcb, 0x59, 0x09, 0xbb, 0xdb, 0x74, 0xa9, 0x19, 0xdd, 0x96, 0xfc, 0x0b, 0x05, 0x38, 0x61, 0x30, + 0x15, 0x18, 0x77, 0x26, 0x6d, 0xe6, 0x68, 0xd6, 0x26, 0x3e, 0x35, 0xc1, 0xb5, 0xc1, 0x1a, 0x73, + 0x52, 0xdd, 0x94, 0x24, 0x60, 0xa8, 0x49, 0xff, 0x3c, 0x07, 0xf3, 0xf1, 0x16, 0xf7, 0x2c, 0xe6, + 0x93, 0xef, 0x0e, 0x4d, 0x68, 0xed, 0x6c, 0x13, 0xca, 0x5b, 0x8b, 0xe9, 0x54, 0x17, 0x57, 0x48, + 0x89, 0x4d, 0xe6, 0x3e, 0x14, 0x2c, 0x9f, 0xf6, 0x42, 0x97, 0xa8, 0x3e, 0xf6, 0x28, 0xa3, 0xfd, + 0xb4, 0xc1, 0x71, 0x31, 0x80, 0xd7, 0x3f, 0xcb, 0xc3, 0x42, 0xc6, 0x64, 0xf0, 0x6b, 0x96, 0x3b, + 0xc1, 0xad, 0x7e, 0x37, 0xf4, 0x8e, 0x54, 0x6f, 0x9b, 0x92, 0x8e, 0x4a, 0x82, 0xac, 0xc2, 0xbc, + 0x74, 0x9d, 0xb9, 0x43, 0xc0, 0x5c, 0xc3, 0xa4, 0xd2, 0x1e, 0x29, 0xdf, 0x03, 0x53, 0x7c, 0x1c, + 0x6a, 0x41, 0x36, 0x61, 0x41, 0xd2, 0x6e, 0x49, 0xc7, 0x5b, 0x38, 0x21, 0x13, 0x02, 0xe8, 0x25, + 0x09, 0xb4, 0x80, 0xc3, 0x22, 0x98, 0xd5, 0x8e, 0x1c, 0xc2, 0x45, 0xd3, 0xb1, 0xcd, 0xbe, 0xe7, + 0x51, 0xdb, 0x1c, 0xec, 0x38, 0x5d, 0xcb, 0x1c, 0x48, 0x3f, 0xec, 0xb6, 0x04, 0xbb, 0xb8, 0x92, + 0x16, 0x78, 0x7c, 0x5c, 0xfd, 0x5a, 0x2c, 0x50, 0xd9, 0x33, 0x7c, 0xb3, 0xb3, 0x7c, 0x78, 0x23, + 0x9c, 0xd0, 0xb4, 0x38, 0x0e, 0xab, 0xd0, 0xff, 0xb4, 0x08, 0x53, 0xab, 0xf5, 0x5b, 0xbb, 0x06, + 0x3b, 0x38, 0x83, 0x83, 0xf9, 0x3a, 0x94, 0x7c, 0xda, 0x73, 0xbb, 0x86, 0x1f, 0x4e, 0x99, 0x9a, + 0xe8, 0x5d, 0x49, 0x47, 0x25, 0x41, 0x1c, 0xee, 0x2d, 0x4b, 0x77, 0x5d, 0x1e, 0x80, 0xf7, 0x46, + 0x34, 0xc7, 0x12, 0x25, 0xee, 0x2e, 0x4b, 0x12, 0x46, 0x3a, 0x08, 0x83, 0x4a, 0xa8, 0x1c, 0xe9, + 0xbe, 0xf4, 0x24, 0x46, 0x0c, 0x73, 0x22, 0x9c, 0xe0, 0x66, 0x8f, 0x11, 0x30, 0xae, 0x85, 0x7c, + 0x1d, 0xa6, 0x5b, 0xd4, 0xa5, 0x76, 0x8b, 0xda, 0xa6, 0x45, 0x99, 0x56, 0xb8, 0x36, 0xc1, 0xe7, + 0xe5, 0xe4, 0xb8, 0x3a, 0xbd, 0x1a, 0xa3, 0x63, 0x42, 0x8a, 0x3c, 0x82, 0xf2, 0x91, 0xe5, 0x77, + 0xc4, 0xf6, 0xd6, 0x8a, 0xe2, 0xd8, 0x7c, 0x73, 0xa4, 0x8e, 0x72, 0x84, 0x68, 0x5a, 0x1e, 0x86, + 0x98, 0x18, 0xc1, 0xf3, 0x4b, 0x9a, 0x7f, 0x88, 0x98, 0x46, 0x38, 0x08, 0xe5, 0x64, 0x03, 0xc1, + 0xc0, 0x48, 0x86, 0x30, 0x98, 0xe6, 0x1f, 0x4d, 0xfa, 0x61, 0x9f, 0xda, 0x26, 0x15, 0xae, 0xeb, + 0xa8, 0x91, 0x4e, 0x08, 0x12, 0xcc, 0xc8, 0xc3, 0x18, 0x2c, 0x26, 0x94, 0xf0, 0xdd, 0x77, 0xd4, + 0xa1, 0xb6, 0x56, 0x4e, 0xee, 0xbe, 0x87, 0x1d, 0x6a, 0xa3, 0xe0, 0x10, 0x07, 0xc0, 0x54, 0x37, + 0x90, 0x06, 0x63, 0xf8, 0xb7, 0xd1, 0x45, 0xd6, 0x98, 0xe5, 0x57, 0x44, 0xf4, 0x8d, 0x31, 0x15, + 0xfa, 0xdf, 0xe7, 0xa0, 0xc2, 0x0f, 0x47, 0xb8, 0xa1, 0x5f, 0x83, 0xa2, 0x6f, 0x78, 0x6d, 0x79, + 0x81, 0x97, 0xa3, 0xfb, 0x6c, 0x57, 0x50, 0x51, 0x72, 0x89, 0x01, 0x05, 0xdf, 0x60, 0x07, 0xa1, + 0x3d, 0xfc, 0xa5, 0x91, 0xfa, 0x28, 0x4f, 0x65, 0x64, 0x0a, 0xf9, 0x17, 0xc3, 0x00, 0x99, 0x5c, + 0x87, 0x12, 0xbf, 0x3c, 0xd7, 0x0d, 0x16, 0xf8, 0xe3, 0xa5, 0xc6, 0x34, 0x3f, 0x85, 0xeb, 0x92, + 0x86, 0x8a, 0xab, 0x7f, 0x17, 0x66, 0xd7, 0x3e, 0xa2, 0x66, 0xdf, 0x77, 0xbc, 0xc0, 0x23, 0x23, + 0x77, 0x80, 0x30, 0xea, 0x1d, 0x5a, 0x26, 0xad, 0x9b, 0xa6, 0xd3, 0xb7, 0xfd, 0xad, 0xe8, 0xd4, + 0x2f, 0x4a, 0x6d, 0xa4, 0x39, 0x24, 0x81, 0x19, 0xad, 0xf4, 0xbf, 0x9a, 0x84, 0x4a, 0xcc, 0xa7, + 0xe7, 0xab, 0xe8, 0x51, 0xd7, 0x49, 0xdb, 0x10, 0xee, 0x35, 0xa2, 0xe0, 0x70, 0x1b, 0xe2, 0xd1, + 0x43, 0x8b, 0xf1, 0xc8, 0x31, 0x65, 0x43, 0x50, 0xd2, 0x51, 0x49, 0x90, 0x2a, 0x14, 0x5a, 0xd4, + 0xf5, 0x3b, 0x62, 0x90, 0x93, 0x8d, 0x32, 0x9f, 0x88, 0x55, 0x4e, 0xc0, 0x80, 0xce, 0x05, 0xf6, + 0xa9, 0x6f, 0x76, 0xb4, 0x49, 0x71, 0xee, 0x84, 0xc0, 0x3a, 0x27, 0x60, 0x40, 0xcf, 0xf0, 0xbe, + 0x0a, 0xcf, 0xde, 0xfb, 0x2a, 0x9e, 0xb3, 0xf7, 0x45, 0x5c, 0x58, 0x60, 0xac, 0xb3, 0xe3, 0x59, + 0x87, 0x86, 0x4f, 0x45, 0x63, 0xa1, 0x67, 0xea, 0x69, 0xf4, 0x5c, 0xe1, 0x37, 0x52, 0xb3, 0x79, + 0x3b, 0x8d, 0x82, 0x59, 0xd0, 0xa4, 0x09, 0x97, 0x2d, 0x9b, 0x51, 0xb3, 0xef, 0xd1, 0x8d, 0xb6, + 0xed, 0x78, 0xf4, 0xb6, 0xc3, 0x38, 0x9c, 0x0c, 0x64, 0x5f, 0x96, 0x8b, 0x76, 0x79, 0x23, 0x4b, + 0x08, 0xb3, 0xdb, 0xea, 0x3f, 0xce, 0xc1, 0x74, 0x3c, 0x8c, 0x21, 0x0c, 0xa0, 0xb3, 0xba, 0xde, + 0x0c, 0x76, 0xa6, 0x74, 0x4d, 0xde, 0x1f, 0x39, 0x3a, 0x0a, 0x60, 0x22, 0xd7, 0x2f, 0xa2, 0x61, + 0x4c, 0xcd, 0x19, 0xf2, 0x24, 0xaf, 0x40, 0x61, 0xdf, 0xf1, 0x4c, 0x2a, 0xcf, 0x96, 0x3a, 0x83, + 0xeb, 0x9c, 0x88, 0x01, 0x4f, 0xff, 0xd7, 0x1c, 0xc4, 0x34, 0x90, 0xdf, 0x80, 0x19, 0xae, 0xe3, + 0xae, 0xb7, 0x97, 0x18, 0x4d, 0x63, 0xe4, 0xd1, 0x28, 0xa4, 0xc6, 0x65, 0xa9, 0x7f, 0x26, 0x41, + 0xc6, 0xa4, 0x3e, 0xf2, 0x35, 0x28, 0x1b, 0xad, 0x96, 0x47, 0x19, 0xa3, 0x81, 0xe9, 0x29, 0x37, + 0x66, 0xc4, 0x5d, 0x19, 0x12, 0x31, 0xe2, 0xf3, 0x63, 0xc8, 0xe3, 0x46, 0xbe, 0xb3, 0xa5, 0xd3, + 0xa2, 0x8e, 0x21, 0x57, 0xc2, 0xe9, 0xa8, 0x24, 0xf4, 0xef, 0x4f, 0x42, 0x52, 0x37, 0x69, 0xc1, + 0xdc, 0x81, 0xb7, 0xb7, 0xb2, 0x62, 0x98, 0x9d, 0x91, 0xa2, 0x9a, 0x05, 0x1e, 0x4e, 0xdd, 0x4d, + 0x22, 0x60, 0x1a, 0x52, 0x6a, 0xb9, 0x4b, 0x07, 0xbe, 0xb1, 0x37, 0x4a, 0x60, 0x13, 0x6a, 0x89, + 0x23, 0x60, 0x1a, 0x92, 0x7c, 0x03, 0x2a, 0x07, 0xde, 0x5e, 0x78, 0xc8, 0xe5, 0x74, 0x2c, 0xc8, + 0xe9, 0xa8, 0xdc, 0x8d, 0x58, 0x18, 0x97, 0xe3, 0x53, 0x78, 0xe0, 0xed, 0x21, 0x35, 0xba, 0x61, + 0xca, 0x4c, 0x4d, 0xe1, 0x5d, 0x49, 0x47, 0x25, 0x41, 0x5c, 0x20, 0x07, 0xe1, 0xec, 0xa9, 0xd0, + 0x58, 0xda, 0xa2, 0xeb, 0x59, 0xa3, 0x51, 0x42, 0xf1, 0x01, 0xbd, 0xc0, 0x6d, 0xf3, 0xdd, 0x21, + 0x1c, 0xcc, 0xc0, 0x26, 0xdf, 0x81, 0x2b, 0x07, 0xde, 0x9e, 0x34, 0xe4, 0x3b, 0x9e, 0x65, 0x9b, + 0x96, 0x9b, 0xc8, 0x95, 0x55, 0x65, 0x77, 0xaf, 0xdc, 0xcd, 0x16, 0xc3, 0xd3, 0xda, 0xeb, 0x6f, + 0xc0, 0x74, 0x3c, 0xd7, 0xf2, 0x84, 0xf8, 0x5c, 0xff, 0x8f, 0x1c, 0x14, 0x37, 0x6c, 0xb7, 0xff, + 0x53, 0x92, 0xb6, 0xfd, 0xf3, 0x49, 0x98, 0xe4, 0xae, 0x17, 0xb9, 0x0e, 0x93, 0xfe, 0xc0, 0x0d, + 0xee, 0xd6, 0x89, 0xc6, 0xa5, 0xd0, 0xd0, 0xec, 0x0e, 0x5c, 0xfa, 0x58, 0xfe, 0x8b, 0x42, 0x82, + 0xbc, 0x07, 0x45, 0xbb, 0xdf, 0x7b, 0x60, 0x74, 0xa5, 0x51, 0x7a, 0x2d, 0x74, 0x2d, 0xb6, 0x04, + 0xf5, 0xf1, 0x71, 0xf5, 0x12, 0xb5, 0x4d, 0xa7, 0x65, 0xd9, 0xed, 0xe5, 0x47, 0xcc, 0xb1, 0x6b, + 0x5b, 0xfd, 0xde, 0x1e, 0xf5, 0x50, 0xb6, 0x22, 0x5f, 0x85, 0xa9, 0x3d, 0xc7, 0xe9, 0x72, 0x80, + 0xc0, 0x64, 0xa9, 0x00, 0xb1, 0x11, 0x90, 0x31, 0xe4, 0x73, 0x2f, 0x86, 0xf9, 0x1e, 0x97, 0x9c, + 0x4c, 0x7a, 0x31, 0x4d, 0x41, 0x45, 0xc9, 0x25, 0x3d, 0x28, 0xf6, 0x0c, 0x97, 0xcb, 0x15, 0xc4, + 0x94, 0xad, 0x8d, 0xec, 0x9f, 0xd6, 0x36, 0x05, 0xce, 0x9a, 0xed, 0x7b, 0x83, 0x48, 0x5d, 0x40, + 0x44, 0xa9, 0x84, 0x58, 0x30, 0xd5, 0xb5, 0x98, 0xcf, 0xf5, 0x15, 0xc7, 0xd8, 0x15, 0x5c, 0xdf, + 0x03, 0xa3, 0xdb, 0xa7, 0xd1, 0x0c, 0xdc, 0x0b, 0x60, 0x31, 0xc4, 0x5f, 0x1c, 0x40, 0x25, 0xd6, + 0x23, 0x32, 0x1f, 0xe4, 0xa4, 0xc4, 0xe6, 0x15, 0x69, 0x28, 0xb2, 0x0b, 0x85, 0x43, 0x8e, 0x21, + 0x8d, 0xcd, 0x98, 0x3d, 0xc1, 0x00, 0xec, 0x9d, 0xfc, 0xdb, 0xb9, 0x77, 0x4a, 0x3f, 0xf8, 0xb3, + 0xea, 0x85, 0x4f, 0xfe, 0xf9, 0xda, 0x05, 0xfd, 0x1f, 0x26, 0xa0, 0xac, 0x44, 0xfe, 0x6f, 0xef, + 0x14, 0x2f, 0xb5, 0x53, 0xee, 0x8c, 0x37, 0x5f, 0x67, 0xda, 0x2e, 0xf5, 0xe4, 0x76, 0x99, 0x6e, + 0xfc, 0x5c, 0x6c, 0xa9, 0x1f, 0x1f, 0x57, 0xb5, 0xe4, 0x24, 0xa0, 0x71, 0xb4, 0x49, 0x19, 0x33, + 0xda, 0x34, 0xda, 0x06, 0xdf, 0x7c, 0xd2, 0x36, 0xb8, 0x14, 0xdf, 0x06, 0xe5, 0xec, 0x65, 0xfc, + 0x64, 0x02, 0x4a, 0x9b, 0x61, 0x22, 0xe4, 0x77, 0x72, 0x50, 0x31, 0x6c, 0xdb, 0xf1, 0x8d, 0x20, + 0xeb, 0x13, 0x98, 0xb7, 0xad, 0x91, 0xa6, 0x23, 0x04, 0xad, 0xd5, 0x23, 0xc0, 0x60, 0x4a, 0xd4, + 0xcd, 0x14, 0xe3, 0x60, 0x5c, 0x2f, 0xf9, 0x10, 0x8a, 0x5d, 0x63, 0x8f, 0x76, 0x43, 0x6b, 0xb7, + 0x31, 0x5e, 0x0f, 0xee, 0x09, 0xac, 0xd4, 0x7a, 0x04, 0x44, 0x94, 0x8a, 0x16, 0xdf, 0x83, 0xf9, + 0x74, 0x47, 0x9f, 0x66, 0x46, 0xf9, 0x62, 0xc4, 0xd4, 0x3c, 0x4d, 0x53, 0xfd, 0x6f, 0xcb, 0x00, + 0x5b, 0x4e, 0x8b, 0x36, 0x7d, 0xc3, 0xef, 0x33, 0xb2, 0x08, 0x79, 0xab, 0x25, 0xaf, 0x22, 0x90, + 0xbd, 0xcd, 0x6f, 0xac, 0x62, 0xde, 0x6a, 0xa9, 0x14, 0x47, 0xfe, 0xd4, 0x14, 0xc7, 0x37, 0xa0, + 0xd2, 0xb2, 0x98, 0xdb, 0x35, 0x06, 0x5b, 0x19, 0xbe, 0xc0, 0x6a, 0xc4, 0xc2, 0xb8, 0x1c, 0x79, + 0x5d, 0x9e, 0xdf, 0xc9, 0x44, 0x22, 0x29, 0x3c, 0xbf, 0x25, 0xde, 0xbd, 0xd8, 0x19, 0x7e, 0x1b, + 0xa6, 0xc3, 0x14, 0x82, 0xd0, 0x52, 0x10, 0xad, 0xc2, 0x53, 0x3f, 0xbd, 0x1b, 0xe3, 0x61, 0x42, + 0x32, 0x9d, 0xe2, 0x28, 0x3e, 0x97, 0x14, 0xc7, 0x2a, 0xcc, 0x33, 0xdf, 0xf1, 0x68, 0x2b, 0x94, + 0xd8, 0x58, 0xd5, 0x48, 0x32, 0x63, 0xd6, 0x4c, 0xf1, 0x71, 0xa8, 0x05, 0xd9, 0x81, 0x4b, 0x61, + 0x27, 0xe2, 0x03, 0xd4, 0x16, 0x04, 0xd2, 0x55, 0x89, 0x74, 0xe9, 0x61, 0x86, 0x0c, 0x66, 0xb6, + 0x24, 0x6f, 0x42, 0xc1, 0xed, 0x18, 0x8c, 0xca, 0xa4, 0x46, 0x18, 0xbb, 0x16, 0x76, 0x38, 0xf1, + 0xf1, 0x71, 0xb5, 0xcc, 0xa7, 0x5d, 0x7c, 0x60, 0x20, 0x48, 0x6e, 0x00, 0xec, 0x39, 0x7d, 0xbb, + 0x65, 0x78, 0x83, 0x8d, 0x55, 0x11, 0xc9, 0xc4, 0x5e, 0x0c, 0x1b, 0x8a, 0x83, 0x31, 0x29, 0x6e, + 0x30, 0x7b, 0x81, 0xe9, 0x90, 0xb9, 0x09, 0x65, 0x30, 0x95, 0x45, 0x91, 0x7c, 0xf2, 0x01, 0x94, + 0x99, 0x6f, 0x78, 0x3e, 0x6d, 0xd5, 0x7d, 0x99, 0xa0, 0xf8, 0xf9, 0xb3, 0xe5, 0x59, 0x77, 0xad, + 0x1e, 0x8d, 0xbc, 0x8a, 0x66, 0x08, 0x82, 0x11, 0x1e, 0xf9, 0x35, 0x80, 0x7d, 0xcb, 0xb6, 0x58, + 0x47, 0xa0, 0x57, 0x9e, 0x1a, 0x5d, 0x8d, 0x73, 0x5d, 0xa1, 0x60, 0x0c, 0x91, 0xc7, 0x3c, 0xae, + 0xd3, 0xda, 0xd8, 0xd1, 0xa6, 0xc5, 0x28, 0x55, 0xcc, 0xb3, 0xc3, 0x89, 0x18, 0xf0, 0xc8, 0x75, + 0x28, 0xb5, 0x0c, 0xda, 0x73, 0x6c, 0xda, 0xd2, 0x66, 0xa2, 0xbc, 0xc3, 0xaa, 0xa4, 0xa1, 0xe2, + 0x92, 0xef, 0x41, 0xd1, 0x12, 0x2e, 0x9f, 0x36, 0x2b, 0xba, 0xfa, 0xad, 0xd1, 0x2e, 0x05, 0x01, + 0xd1, 0x00, 0x6e, 0x71, 0x82, 0xbf, 0x51, 0xc2, 0x12, 0x13, 0xa6, 0x9c, 0xbe, 0x2f, 0x34, 0xcc, + 0x09, 0x0d, 0xa3, 0xe5, 0x59, 0xb6, 0x03, 0x8c, 0xe0, 0x05, 0x57, 0x7e, 0x60, 0x88, 0xcc, 0xc7, + 0x6b, 0x76, 0xac, 0x6e, 0xcb, 0xa3, 0xb6, 0x36, 0x2f, 0x42, 0x2a, 0x31, 0xde, 0x15, 0x49, 0x43, + 0xc5, 0x25, 0xbf, 0x08, 0x33, 0x4e, 0xdf, 0x17, 0xfb, 0x86, 0x6f, 0x3b, 0xa6, 0x5d, 0x14, 0xe2, + 0x17, 0x79, 0xd8, 0xb6, 0x1d, 0x67, 0x60, 0x52, 0x4e, 0x9f, 0x85, 0xe9, 0x78, 0xd9, 0x83, 0xfe, + 0x47, 0x79, 0x08, 0xfb, 0xf1, 0xd3, 0xe0, 0x2d, 0x13, 0x1d, 0x8a, 0x1e, 0x65, 0xfd, 0xae, 0x2f, + 0x8d, 0xad, 0x58, 0x6b, 0x14, 0x14, 0x94, 0x1c, 0xfd, 0x08, 0x66, 0x78, 0x6f, 0xbb, 0x5d, 0xda, + 0x6d, 0xfa, 0xd4, 0x65, 0x64, 0x1f, 0x0a, 0x8c, 0xff, 0x21, 0xe7, 0x64, 0xcc, 0x07, 0x1c, 0x9f, + 0xba, 0xd1, 0x7e, 0x17, 0x0a, 0x30, 0x80, 0xd7, 0xff, 0x38, 0x0f, 0x65, 0x35, 0x4f, 0x67, 0xc8, + 0x90, 0xbf, 0x0a, 0x53, 0x2d, 0xba, 0x6f, 0xf0, 0xd1, 0xc8, 0x37, 0x4e, 0xbe, 0xad, 0x56, 0x03, + 0x12, 0x86, 0x3c, 0x52, 0x0d, 0x2f, 0xb3, 0x60, 0xc8, 0x22, 0x6b, 0x15, 0xf7, 0x15, 0xc9, 0x01, + 0x94, 0xc5, 0x1f, 0xeb, 0x61, 0x3d, 0xc6, 0xa8, 0xeb, 0xfe, 0x20, 0x44, 0x09, 0x72, 0x01, 0xea, + 0x13, 0x23, 0xfc, 0x54, 0x1d, 0x45, 0xe1, 0x2c, 0x75, 0x14, 0xfa, 0x3a, 0x70, 0xc3, 0x70, 0x6b, + 0x85, 0xbc, 0x0b, 0x25, 0x26, 0xb7, 0xae, 0x9c, 0x97, 0xaf, 0xa8, 0xc7, 0x17, 0x49, 0x7f, 0x7c, + 0x5c, 0x9d, 0x11, 0xc2, 0x21, 0x01, 0x55, 0x13, 0x7d, 0x19, 0x2a, 0xb1, 0x77, 0x67, 0x3e, 0xc3, + 0xea, 0x91, 0x2a, 0x36, 0xc3, 0xab, 0x86, 0x6f, 0xa0, 0xe0, 0xe8, 0x8f, 0xf3, 0x30, 0x8f, 0x94, + 0x39, 0x7d, 0xcf, 0xa4, 0xf1, 0xcc, 0xac, 0x61, 0x8a, 0x62, 0x94, 0x54, 0x66, 0xb6, 0x2e, 0xa8, + 0x28, 0xb9, 0xe4, 0x5b, 0x30, 0xd3, 0xa3, 0x5e, 0x5b, 0x1d, 0x36, 0xb9, 0x48, 0x2a, 0xbf, 0xb2, + 0x19, 0x67, 0x62, 0x52, 0x96, 0xc7, 0xfb, 0x3d, 0xc3, 0xb6, 0xf6, 0x29, 0xf3, 0xd3, 0x29, 0x93, + 0x4d, 0x49, 0x47, 0x25, 0x41, 0x6e, 0xc1, 0x45, 0x46, 0xfd, 0xed, 0x23, 0x9b, 0x7a, 0x48, 0xf7, + 0xa9, 0x27, 0x32, 0xe9, 0x93, 0xc2, 0x64, 0xbe, 0x18, 0xbe, 0xe8, 0x34, 0xd3, 0x02, 0x38, 0xdc, + 0x46, 0xdc, 0xbe, 0x7d, 0xd3, 0xa4, 0x8c, 0xad, 0x38, 0x76, 0xcb, 0x52, 0x25, 0x37, 0xf1, 0xdb, + 0x37, 0xc5, 0xc7, 0xa1, 0x16, 0x1c, 0x65, 0xdf, 0xb0, 0xba, 0x7d, 0x8f, 0x46, 0x28, 0xc5, 0x24, + 0xca, 0x7a, 0x8a, 0x8f, 0x43, 0x2d, 0xf4, 0x37, 0x61, 0x06, 0xa9, 0xef, 0x0d, 0xd4, 0x9c, 0x54, + 0xa1, 0xd0, 0xb5, 0x7a, 0x56, 0x90, 0xfc, 0x29, 0x04, 0x1b, 0xf9, 0x1e, 0x27, 0x60, 0x40, 0xd7, + 0x7f, 0x90, 0x03, 0x88, 0xca, 0x49, 0xc8, 0x01, 0x94, 0xd8, 0xcd, 0x46, 0xdf, 0x3c, 0x50, 0xf9, + 0xa2, 0x11, 0x9f, 0x15, 0x24, 0x48, 0xec, 0xa5, 0x4f, 0x52, 0x50, 0x29, 0x78, 0x52, 0xb1, 0xc1, + 0x5f, 0x4f, 0x80, 0x6a, 0xc5, 0x17, 0x97, 0xda, 0x2d, 0xd7, 0xb1, 0x6c, 0x3f, 0xfd, 0x86, 0xb8, + 0x26, 0xe9, 0xa8, 0x24, 0xf8, 0x7e, 0xdb, 0x0b, 0x06, 0x91, 0x4f, 0xee, 0x37, 0xd9, 0x07, 0xc9, + 0xe5, 0x72, 0x1e, 0x6d, 0xf3, 0xb9, 0x9e, 0x48, 0xca, 0xa1, 0xa0, 0xa2, 0xe4, 0xf2, 0x6b, 0x26, + 0x4c, 0x98, 0xca, 0x3d, 0x22, 0xae, 0x99, 0x30, 0xb7, 0x8a, 0x8a, 0x4b, 0x3a, 0x30, 0x67, 0x88, + 0xa5, 0x8d, 0x92, 0xc0, 0x4f, 0x95, 0xcf, 0x8e, 0x4a, 0x19, 0x92, 0x28, 0x98, 0x86, 0xe5, 0x9a, + 0x58, 0xd4, 0xfc, 0xe9, 0xd3, 0xda, 0x4a, 0x53, 0x33, 0x89, 0x82, 0x69, 0x58, 0xee, 0x61, 0x79, + 0x4e, 0x97, 0xd6, 0x71, 0x4b, 0x7a, 0x72, 0xca, 0xc3, 0xc2, 0x80, 0x8c, 0x21, 0x5f, 0xff, 0xbd, + 0x1c, 0xcc, 0x36, 0x4d, 0xcf, 0x72, 0x7d, 0x75, 0xf6, 0xb7, 0x44, 0x0d, 0x8a, 0x6f, 0x70, 0xdf, + 0x47, 0xee, 0xa9, 0x97, 0x4f, 0xc9, 0xa7, 0x05, 0x42, 0x89, 0x12, 0x95, 0x80, 0x84, 0x11, 0x84, + 0x88, 0x7a, 0x85, 0x75, 0x49, 0xaf, 0x6d, 0x53, 0x50, 0x51, 0x72, 0xf5, 0x1f, 0xe6, 0xa0, 0xa4, + 0x5e, 0xaf, 0x5e, 0x81, 0x82, 0x78, 0x14, 0x91, 0x7b, 0x47, 0x5d, 0x26, 0x2b, 0x9c, 0x88, 0x01, + 0x8f, 0x0b, 0x09, 0x77, 0x4e, 0x02, 0xc7, 0x6e, 0x1c, 0xc3, 0xf3, 0x31, 0xe0, 0xf1, 0x4d, 0x4b, + 0xed, 0x96, 0xdc, 0x2f, 0x6a, 0xd3, 0xae, 0xd9, 0x2d, 0xe4, 0x74, 0x51, 0x53, 0xe1, 0x78, 0x3d, + 0xc3, 0x4f, 0xc7, 0xe4, 0xeb, 0x82, 0x8a, 0x92, 0xab, 0x5f, 0x84, 0xb9, 0x66, 0x9f, 0xb9, 0xd4, + 0x56, 0x2e, 0xb8, 0x3e, 0x03, 0x95, 0x58, 0xf5, 0xa6, 0xfe, 0x5f, 0x57, 0x40, 0xbd, 0xda, 0xfe, + 0xec, 0xed, 0x77, 0xa4, 0xc0, 0xc8, 0x54, 0x3e, 0x6e, 0x61, 0x7c, 0x1f, 0x57, 0xad, 0x64, 0xca, + 0xcf, 0x6d, 0x47, 0x7e, 0x6e, 0xf1, 0x1c, 0xfc, 0xdc, 0xa8, 0x72, 0x24, 0xed, 0xeb, 0xfe, 0x7e, + 0x0e, 0xa6, 0x6d, 0x1e, 0x47, 0xcb, 0x13, 0xac, 0x4d, 0x09, 0xdf, 0x6a, 0x7b, 0xac, 0x49, 0xac, + 0x6d, 0xc5, 0x10, 0x83, 0x14, 0x82, 0x8a, 0x73, 0xe3, 0x2c, 0x4c, 0xa8, 0x26, 0xeb, 0x50, 0x32, + 0xf6, 0x79, 0x70, 0xe2, 0x0f, 0xe4, 0xf3, 0xf3, 0xd5, 0xac, 0x33, 0x5d, 0x97, 0x32, 0x81, 0xb9, + 0x0c, 0xbf, 0x50, 0xb5, 0xe5, 0xf7, 0x8d, 0x2a, 0x7c, 0x29, 0x8f, 0x71, 0xdf, 0x84, 0xb9, 0x90, + 0xd8, 0x95, 0x2f, 0x29, 0xb1, 0x3a, 0x18, 0x1d, 0x8a, 0x41, 0xf8, 0x23, 0x62, 0xbf, 0x52, 0xe0, + 0xc9, 0x06, 0xa1, 0x11, 0x4a, 0x0e, 0x69, 0x87, 0x8e, 0x6b, 0x45, 0x4c, 0x6e, 0x63, 0x64, 0x67, + 0x5e, 0xf9, 0xc2, 0xd9, 0x9e, 0x2b, 0xb9, 0x13, 0x37, 0x8b, 0xd3, 0x67, 0x31, 0x8b, 0x33, 0xa7, + 0x9a, 0xc4, 0x36, 0x14, 0x99, 0x30, 0xba, 0x22, 0xe6, 0xab, 0xdc, 0x58, 0x19, 0xed, 0xce, 0x4e, + 0xd8, 0xed, 0x60, 0x76, 0x02, 0x1a, 0x4a, 0x78, 0xe2, 0x40, 0xc9, 0x93, 0xbe, 0x9d, 0x0c, 0x1b, + 0x47, 0xcb, 0x3a, 0xa7, 0x1d, 0xc4, 0x60, 0x7f, 0x84, 0x54, 0x54, 0x4a, 0xc8, 0x07, 0x30, 0xd1, + 0x32, 0xda, 0x32, 0x80, 0xfc, 0xf6, 0xc8, 0x0f, 0xf5, 0xa1, 0x1a, 0x51, 0x36, 0xb9, 0x5a, 0xbf, + 0x85, 0x1c, 0x95, 0x1c, 0xc0, 0x14, 0x0b, 0x6c, 0xb0, 0x36, 0x3f, 0x46, 0x35, 0x62, 0xca, 0x8e, + 0x07, 0x21, 0x85, 0x24, 0x62, 0xa8, 0x81, 0xac, 0xc1, 0xd4, 0xa1, 0xd3, 0xed, 0xf7, 0x64, 0xe4, + 0x59, 0xb9, 0xb1, 0x98, 0xb5, 0xda, 0x0f, 0x84, 0x48, 0x64, 0x04, 0x82, 0x6f, 0x86, 0x61, 0x5b, + 0xf2, 0x5b, 0x39, 0x98, 0xe5, 0x47, 0x47, 0xed, 0x03, 0xa6, 0x91, 0x31, 0x76, 0xea, 0x7d, 0x46, + 0xbd, 0x68, 0x87, 0xbd, 0x20, 0xd5, 0xce, 0x6e, 0x24, 0x34, 0x60, 0x4a, 0x23, 0x71, 0xa1, 0xc4, + 0xac, 0x16, 0x35, 0x0d, 0x8f, 0x69, 0x0b, 0xe7, 0xa6, 0x3d, 0x72, 0x15, 0x25, 0x36, 0x2a, 0x2d, + 0xe4, 0xb7, 0x45, 0x05, 0xa9, 0xac, 0xa1, 0x96, 0x75, 0xed, 0x97, 0xce, 0xb3, 0xae, 0x7d, 0x21, + 0x28, 0x1f, 0x4d, 0x68, 0xc0, 0xb4, 0x4a, 0xb2, 0x0d, 0x97, 0x79, 0xa4, 0x72, 0x48, 0x57, 0xa9, + 0xd1, 0xea, 0x5a, 0x36, 0x6d, 0x52, 0xd3, 0xb1, 0x5b, 0x4c, 0xbb, 0x2c, 0xde, 0x05, 0x5e, 0x3c, + 0x39, 0xae, 0x5e, 0xae, 0x67, 0x09, 0x60, 0x76, 0x3b, 0xf2, 0x31, 0xcc, 0x78, 0x71, 0x87, 0x5d, + 0x7b, 0x61, 0x8c, 0x47, 0xe9, 0x84, 0xeb, 0x1f, 0x64, 0x36, 0x12, 0x24, 0x4c, 0xea, 0x22, 0x6f, + 0x41, 0xc5, 0x95, 0x96, 0xca, 0x62, 0x3d, 0xed, 0x8a, 0x18, 0x83, 0xb8, 0x51, 0x77, 0x22, 0x32, + 0xc6, 0x65, 0xc8, 0x7d, 0xa8, 0xf8, 0x4e, 0x97, 0x7a, 0x32, 0x81, 0xae, 0x89, 0xc5, 0x5f, 0xca, + 0xda, 0xc9, 0xbb, 0x4a, 0x2c, 0x4a, 0xcf, 0x46, 0x34, 0x86, 0x71, 0x1c, 0x1e, 0xf7, 0x85, 0xf5, + 0x7f, 0x9e, 0x08, 0x72, 0x5f, 0x4c, 0xc6, 0x7d, 0xcd, 0x38, 0x13, 0x93, 0xb2, 0x3c, 0x92, 0x73, + 0x3d, 0xcb, 0xf1, 0x2c, 0x7f, 0xb0, 0xd2, 0x35, 0x18, 0x13, 0x00, 0x8b, 0x02, 0x40, 0x45, 0x72, + 0x3b, 0x69, 0x01, 0x1c, 0x6e, 0xc3, 0xbd, 0xfc, 0x90, 0xa8, 0xbd, 0x24, 0xe2, 0x25, 0x61, 0x96, + 0xc2, 0xb6, 0xa8, 0xb8, 0xa7, 0x94, 0xe8, 0x5c, 0x1d, 0xa5, 0x44, 0x87, 0xb4, 0xe0, 0xaa, 0xd1, + 0xf7, 0x9d, 0x1e, 0x27, 0x24, 0x9b, 0xec, 0x3a, 0x07, 0xd4, 0xd6, 0xae, 0x89, 0xbb, 0xea, 0xda, + 0xc9, 0x71, 0xf5, 0x6a, 0xfd, 0x4b, 0xe4, 0xf0, 0x4b, 0x51, 0x48, 0x0f, 0x4a, 0x54, 0x96, 0x19, + 0x69, 0x5f, 0x19, 0xe3, 0x92, 0x48, 0xd6, 0x2a, 0x05, 0x13, 0x14, 0xd2, 0x50, 0xa9, 0x20, 0xbb, + 0x50, 0xe9, 0x38, 0xcc, 0xaf, 0x77, 0x2d, 0x83, 0x51, 0xa6, 0xbd, 0x2c, 0xf6, 0x49, 0xe6, 0xfd, + 0x76, 0x3b, 0x14, 0x8b, 0xb6, 0xc9, 0xed, 0xa8, 0x25, 0xc6, 0x61, 0x08, 0x15, 0x21, 0x4f, 0x5f, + 0xac, 0x9a, 0x63, 0xfb, 0xf4, 0x23, 0x5f, 0x5b, 0x12, 0x63, 0x79, 0x2d, 0x0b, 0x79, 0xc7, 0x69, + 0x35, 0x93, 0xd2, 0xc1, 0x29, 0x4f, 0x11, 0x31, 0x8d, 0x49, 0xde, 0x86, 0x69, 0xd7, 0x69, 0x35, + 0x5d, 0x6a, 0xee, 0x18, 0xbe, 0xd9, 0xd1, 0xaa, 0xc9, 0xf4, 0xff, 0x4e, 0x8c, 0x87, 0x09, 0xc9, + 0xc5, 0xf7, 0xe1, 0xe2, 0x90, 0x3f, 0xf5, 0x54, 0x6f, 0x25, 0x7f, 0x91, 0x83, 0xb8, 0x3b, 0x7b, + 0xee, 0x7e, 0xff, 0x2d, 0xb8, 0x28, 0xcb, 0x5b, 0xf9, 0x65, 0xdb, 0xed, 0xfb, 0x61, 0xec, 0x1b, + 0xcb, 0x7a, 0x60, 0x5a, 0x00, 0x87, 0xdb, 0xe8, 0x7f, 0x99, 0x83, 0x99, 0x84, 0xf9, 0x3e, 0xf7, + 0x38, 0x6f, 0x1d, 0x48, 0xcf, 0xf2, 0x3c, 0xc7, 0x0b, 0xee, 0xc0, 0x4d, 0xbe, 0x97, 0x99, 0xac, + 0x54, 0x17, 0x65, 0x16, 0x9b, 0x43, 0x5c, 0xcc, 0x68, 0xa1, 0xff, 0x4d, 0x0e, 0xa2, 0xb4, 0x9a, + 0xaa, 0x2d, 0xca, 0x9d, 0x5a, 0x5b, 0xf4, 0x3a, 0x94, 0x1e, 0x31, 0xc7, 0xde, 0x89, 0x2a, 0x90, + 0xd4, 0x84, 0xde, 0x69, 0x6e, 0x6f, 0x09, 0x49, 0x25, 0x21, 0xa4, 0x3f, 0x5c, 0xb7, 0xba, 0xfe, + 0x70, 0x9d, 0xce, 0x9d, 0x5f, 0x0e, 0xe8, 0xa8, 0x24, 0xc8, 0x32, 0x94, 0x55, 0x26, 0x57, 0x06, + 0x88, 0x6a, 0x12, 0x54, 0x1a, 0x13, 0x23, 0x19, 0xfd, 0x47, 0x79, 0x28, 0xfd, 0x7f, 0x2b, 0xbb, + 0x3f, 0x80, 0x22, 0x13, 0x4f, 0x81, 0x32, 0xf0, 0x5c, 0x19, 0x33, 0x39, 0xcc, 0xa1, 0xe2, 0x6f, + 0xdf, 0xfc, 0x1b, 0xa5, 0x0a, 0xfd, 0xb3, 0x1c, 0x4c, 0x3f, 0xc7, 0x52, 0xfb, 0xbd, 0x64, 0xa9, + 0xfd, 0xbb, 0x63, 0x0d, 0xed, 0x94, 0x32, 0xfb, 0xbf, 0x5b, 0x88, 0x86, 0xc4, 0xa7, 0x95, 0xd8, + 0x50, 0x0e, 0x0f, 0x78, 0x98, 0x70, 0x7f, 0x77, 0xac, 0xa0, 0x30, 0xda, 0x94, 0x21, 0x85, 0x61, + 0xa4, 0x82, 0xdc, 0x00, 0xa0, 0xdc, 0xb2, 0x05, 0xd9, 0xb8, 0x7c, 0x32, 0x1f, 0xbd, 0xa6, 0x38, + 0x18, 0x93, 0x7a, 0xfe, 0x09, 0x87, 0xec, 0x2b, 0x7a, 0xf2, 0x99, 0x5c, 0xd1, 0x57, 0xcf, 0xfd, + 0x8a, 0x7e, 0xf9, 0xd9, 0x5f, 0xd1, 0xb1, 0x80, 0xa4, 0x30, 0x46, 0x40, 0xf2, 0x31, 0x5c, 0x0a, + 0xfe, 0x5c, 0xe9, 0x1a, 0x56, 0x4f, 0xed, 0x17, 0x59, 0x24, 0xf4, 0xd5, 0xcc, 0x8b, 0x99, 0x7a, + 0xcc, 0x62, 0x3e, 0xb5, 0xfd, 0x07, 0x51, 0xcb, 0xe8, 0x85, 0xf9, 0x41, 0x06, 0x1c, 0x66, 0x2a, + 0x49, 0x7b, 0xb0, 0x53, 0x67, 0xf0, 0x60, 0x7f, 0x98, 0x83, 0xcb, 0x46, 0xd6, 0x8f, 0xe5, 0x64, + 0x1e, 0xe3, 0xce, 0x58, 0xf1, 0x44, 0x02, 0x51, 0xc6, 0x03, 0x59, 0x2c, 0xcc, 0xee, 0x03, 0x79, + 0x35, 0x0a, 0x49, 0xcb, 0x62, 0x53, 0x65, 0x07, 0x93, 0xdf, 0x4f, 0xa7, 0x82, 0x40, 0xcc, 0x76, + 0x73, 0x6c, 0x83, 0x7d, 0x0e, 0xe9, 0xa0, 0xca, 0x18, 0xe9, 0xa0, 0x54, 0x78, 0x31, 0x7d, 0x4e, + 0xe1, 0x85, 0x0d, 0xf3, 0x56, 0xcf, 0x68, 0xd3, 0x9d, 0x7e, 0xb7, 0x1b, 0xe4, 0xb4, 0x99, 0x36, + 0x23, 0xb0, 0x33, 0x2b, 0x3b, 0x79, 0xb8, 0xd7, 0x0d, 0xee, 0x47, 0xf5, 0xcc, 0x13, 0x3d, 0xc3, + 0x6c, 0xa4, 0x90, 0x70, 0x08, 0x9b, 0x6f, 0x4b, 0xee, 0xb6, 0x6e, 0x51, 0x9f, 0xcf, 0xb6, 0xc8, + 0x94, 0xc8, 0x1f, 0x05, 0xdf, 0x8e, 0xc8, 0x18, 0x97, 0x21, 0x77, 0xa1, 0xdc, 0xb2, 0x99, 0xfc, + 0x61, 0xd1, 0x9c, 0xb0, 0x52, 0x6f, 0x70, 0xdb, 0xb6, 0xba, 0xd5, 0x54, 0x3f, 0x26, 0xba, 0x3a, + 0xfc, 0xbf, 0x1e, 0xd4, 0x14, 0x1f, 0xa3, 0xf6, 0x64, 0x53, 0x80, 0xc9, 0x32, 0xe7, 0x20, 0xb5, + 0x71, 0xed, 0x14, 0x0f, 0x79, 0x75, 0x2b, 0xac, 0xca, 0x9e, 0x91, 0xea, 0x64, 0xf1, 0x72, 0x84, + 0x40, 0x5e, 0x83, 0xa2, 0x63, 0xaf, 0x7d, 0x64, 0xf9, 0xda, 0xc5, 0x64, 0x4e, 0x7b, 0x5b, 0x50, + 0x51, 0x72, 0xc9, 0x7d, 0xb8, 0xe2, 0xfb, 0x5d, 0x19, 0xda, 0xd6, 0xf7, 0x7d, 0xea, 0x85, 0xa5, + 0x0c, 0xa2, 0x1c, 0xa5, 0xd0, 0x78, 0xe9, 0xe4, 0xb8, 0x7a, 0x65, 0x77, 0xf7, 0x5e, 0x96, 0x08, + 0x9e, 0xd6, 0xf6, 0xf4, 0xa0, 0x7b, 0x61, 0xc4, 0xa0, 0x3b, 0x1e, 0xe7, 0x5d, 0xfa, 0xd2, 0x38, + 0x6f, 0x28, 0x2e, 0xbd, 0xfc, 0x14, 0x71, 0xe9, 0x07, 0xa2, 0x60, 0xe3, 0xd6, 0x8a, 0x8c, 0xe9, + 0xdf, 0x19, 0x2d, 0x95, 0xc8, 0x11, 0x82, 0x77, 0x3b, 0xf1, 0x27, 0x06, 0x98, 0x64, 0x07, 0x2e, + 0xb9, 0x4e, 0x6b, 0x28, 0xac, 0x15, 0x41, 0x7c, 0xac, 0x5a, 0x67, 0x27, 0x43, 0x06, 0x33, 0x5b, + 0x0a, 0x5b, 0x1a, 0xd1, 0x35, 0x4d, 0x4c, 0x4c, 0x60, 0x4b, 0x23, 0x32, 0xc6, 0x65, 0xd2, 0x51, + 0xde, 0x8b, 0xcf, 0x2c, 0xca, 0x5b, 0x7c, 0x0e, 0x51, 0xde, 0x4b, 0xcf, 0x2f, 0xca, 0xfb, 0xbc, + 0x04, 0xb3, 0x49, 0xff, 0x35, 0xaa, 0x95, 0xca, 0x9d, 0xb5, 0x56, 0x2a, 0x51, 0xcc, 0x94, 0x7f, + 0xa6, 0xc5, 0x4c, 0x13, 0xe7, 0x5e, 0xcc, 0x14, 0x2b, 0xda, 0x9a, 0x7c, 0x42, 0xd1, 0x56, 0x1d, + 0xe6, 0x4c, 0xa7, 0xe7, 0x8a, 0xdf, 0x45, 0xc8, 0xd2, 0x9d, 0xe0, 0x79, 0x5d, 0x3d, 0x60, 0xae, + 0x24, 0xd9, 0x98, 0x96, 0x27, 0x0c, 0x0a, 0xb6, 0x68, 0x58, 0x1c, 0xa3, 0xe0, 0x33, 0xb9, 0x60, + 0xe2, 0xa2, 0x94, 0x35, 0x97, 0xca, 0x4d, 0x0f, 0xd4, 0x07, 0xba, 0xb8, 0xa3, 0x31, 0x97, 0x2c, + 0xb2, 0x63, 0x5a, 0x59, 0xe8, 0xff, 0x95, 0xf3, 0xd0, 0x9f, 0xac, 0xe8, 0x93, 0x3d, 0x89, 0xde, + 0x74, 0x93, 0x5c, 0x4c, 0xf7, 0x84, 0x78, 0xf0, 0x82, 0x9b, 0xe5, 0x86, 0x31, 0xf9, 0xaa, 0xf4, + 0x65, 0xce, 0xe0, 0x92, 0xd4, 0xf2, 0x42, 0xa6, 0x23, 0xc7, 0xf0, 0x14, 0xe4, 0x78, 0x45, 0x58, + 0xe9, 0x59, 0x55, 0x84, 0x2d, 0x0e, 0x82, 0x62, 0xd3, 0x53, 0xeb, 0x54, 0xef, 0x27, 0x6b, 0xc7, + 0xdf, 0x1f, 0xf1, 0xff, 0xc1, 0x09, 0xcb, 0x59, 0xe3, 0x35, 0xb2, 0xbf, 0x99, 0x83, 0x4b, 0x59, + 0xcb, 0x92, 0xd1, 0x8b, 0x66, 0xb2, 0x17, 0xe3, 0x85, 0x6b, 0x71, 0xd3, 0xf2, 0x6f, 0x85, 0x58, + 0x70, 0xe8, 0x53, 0xf7, 0x67, 0x2f, 0xc7, 0x23, 0xbd, 0x1c, 0x27, 0x7e, 0xff, 0x5b, 0x78, 0x8e, + 0xbf, 0xff, 0x2d, 0x8e, 0xf0, 0xfb, 0xdf, 0xa9, 0xe7, 0xf9, 0xfb, 0xdf, 0xd2, 0x19, 0x7f, 0xff, + 0x5b, 0x7e, 0xf6, 0xbf, 0xff, 0xfd, 0x22, 0x07, 0xf3, 0xe9, 0x72, 0xe4, 0xe7, 0x90, 0x24, 0x3b, + 0x48, 0x24, 0xc9, 0x36, 0xc6, 0x32, 0xe6, 0x61, 0xb7, 0x4f, 0x4b, 0x96, 0xe9, 0x3f, 0xc9, 0xc1, + 0x50, 0xc9, 0xf5, 0x73, 0xc8, 0x63, 0x3d, 0x4a, 0xe6, 0xb1, 0xd6, 0xce, 0x65, 0x90, 0xa7, 0xe4, + 0xb3, 0xfe, 0x3b, 0x63, 0x88, 0xff, 0x2b, 0x79, 0xad, 0x84, 0x69, 0xcb, 0x3f, 0x7b, 0xd3, 0xd6, + 0xa8, 0x7d, 0xfa, 0xc5, 0xd2, 0x85, 0xcf, 0xbe, 0x58, 0xba, 0xf0, 0xf9, 0x17, 0x4b, 0x17, 0x3e, + 0x39, 0x59, 0xca, 0x7d, 0x7a, 0xb2, 0x94, 0xfb, 0xec, 0x64, 0x29, 0xf7, 0xf9, 0xc9, 0x52, 0xee, + 0x27, 0x27, 0x4b, 0xb9, 0x3f, 0xfc, 0x97, 0xa5, 0x0b, 0xbf, 0x5a, 0x0a, 0x71, 0xff, 0x27, 0x00, + 0x00, 0xff, 0xff, 0x9b, 0x3d, 0x9a, 0xdc, 0xa0, 0x4f, 0x00, 0x00, } func (m *ArchiveStrategy) Marshal() (dAtA []byte, err error) { @@ -2356,6 +2360,11 @@ func (m *CronWorkflowOptions) MarshalToSizedBuffer(dAtA []byte) (int, error) { _ = i var l int _ = l + i -= len(m.ConcurrencyPolicy) + copy(dAtA[i:], m.ConcurrencyPolicy) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.ConcurrencyPolicy))) + i-- + dAtA[i] = 0x22 i -= len(m.RuntimeGenerateName) copy(dAtA[i:], m.RuntimeGenerateName) i = encodeVarintGenerated(dAtA, i, uint64(len(m.RuntimeGenerateName))) @@ -5419,6 +5428,8 @@ func (m *CronWorkflowOptions) Size() (n int) { n += 1 + l + sovGenerated(uint64(l)) l = len(m.RuntimeGenerateName) n += 1 + l + sovGenerated(uint64(l)) + l = len(m.ConcurrencyPolicy) + n += 1 + l + sovGenerated(uint64(l)) return n } @@ -6592,6 +6603,7 @@ func (this *CronWorkflowOptions) String() string { `Schedule:` + fmt.Sprintf("%v", this.Schedule) + `,`, `RuntimeNamespace:` + fmt.Sprintf("%v", this.RuntimeNamespace) + `,`, `RuntimeGenerateName:` + fmt.Sprintf("%v", this.RuntimeGenerateName) + `,`, + `ConcurrencyPolicy:` + fmt.Sprintf("%v", this.ConcurrencyPolicy) + `,`, `}`, }, "") return s @@ -8984,6 +8996,38 @@ func (m *CronWorkflowOptions) Unmarshal(dAtA []byte) error { } m.RuntimeGenerateName = string(dAtA[iNdEx:postIndex]) iNdEx = postIndex + case 4: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field ConcurrencyPolicy", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.ConcurrencyPolicy = k8s_io_api_batch_v2alpha1.ConcurrencyPolicy(dAtA[iNdEx:postIndex]) + iNdEx = postIndex default: iNdEx = preIndex skippy, err := skipGenerated(dAtA[iNdEx:]) diff --git a/pkg/apis/workflow/v1alpha1/generated.proto b/pkg/apis/workflow/v1alpha1/generated.proto index b445dbff579c..3236150097fc 100644 --- a/pkg/apis/workflow/v1alpha1/generated.proto +++ b/pkg/apis/workflow/v1alpha1/generated.proto @@ -142,6 +142,7 @@ message CronWorkflowList { repeated CronWorkflow items = 2; } +// TODO: Consider replacing this with the K8s API CronJobSpec. This spec is only available starting on v2alpha1. // CronWorkflowOptions is the schedule of when to run CronWorkflows message CronWorkflowOptions { // Schedule is a schedule to run the Workflow in Cron format @@ -152,6 +153,9 @@ message CronWorkflowOptions { // RuntimeGenerateName is the name generator the Workflow will be run with. Mutually exclusive with RuntimeName optional string runtimeGenerateName = 3; + + // ConcurrencyPolicy is the name generator the Workflow will be run with. Mutually exclusive with RuntimeName + optional string concurrencyPolicy = 4; } // DAGTask represents a node in the graph during DAG execution diff --git a/pkg/apis/workflow/v1alpha1/openapi_generated.go b/pkg/apis/workflow/v1alpha1/openapi_generated.go index 201d1cd42869..3e79c72ca794 100644 --- a/pkg/apis/workflow/v1alpha1/openapi_generated.go +++ b/pkg/apis/workflow/v1alpha1/openapi_generated.go @@ -540,6 +540,13 @@ func schema_pkg_apis_workflow_v1alpha1_CronWorkflowOptions(ref common.ReferenceC Format: "", }, }, + "concurrencyPolicy": { + SchemaProps: spec.SchemaProps{ + Description: "ConcurrencyPolicy is the name generator the Workflow will be run with. Mutually exclusive with RuntimeName", + Type: []string{"string"}, + Format: "", + }, + }, }, Required: []string{"schedule", "runtimeNamespace", "runtimeGenerateName"}, }, diff --git a/workflow/common/common.go b/workflow/common/common.go index 2a9781a4df47..89103edfda67 100644 --- a/workflow/common/common.go +++ b/workflow/common/common.go @@ -57,6 +57,8 @@ const ( LabelKeyWorkflow = workflow.WorkflowFullName + "/workflow" // LabelKeyPhase is a label applied to workflows to indicate the current phase of the workflow (for filtering purposes) LabelKeyPhase = workflow.WorkflowFullName + "/phase" + // LabelKeyPhase is a label applied to workflows to indicate the current phase of the workflow (for filtering purposes) + LabelCronWorkflowParent = workflow.WorkflowFullName + "/cron-workflow-parent" // ExecutorArtifactBaseDir is the base directory in the init container in which artifacts will be copied to. // Each artifact will be named according to its input name (e.g: /argo/inputs/artifacts/CODE) diff --git a/workflow/cron/controller.go b/workflow/cron/controller.go index 685a9c38352b..0c4b830fd4a5 100644 --- a/workflow/cron/controller.go +++ b/workflow/cron/controller.go @@ -96,7 +96,7 @@ func (cc *Controller) startCronWorkflow(cronWorkflow *v1alpha1.CronWorkflow) err } // TODO: Should we make a deep copy of the cronWorkflow? // TODO: Almost sure the wfClientset should be passed as reference and not value - cronWorkflowJob, err := NewCronWorkflowJob(cronWorkflow.Name, cronWorkflow, cc.wfClientset) + cronWorkflowJob, err := NewCronWorkflowJob(cronWorkflow, cc.wfClientset) if err != nil { return err } diff --git a/workflow/cron/cron_workflow_job.go b/workflow/cron/cron_workflow_job.go index 75acb2b034e3..b6c28287cd59 100644 --- a/workflow/cron/cron_workflow_job.go +++ b/workflow/cron/cron_workflow_job.go @@ -6,37 +6,78 @@ import ( "github.com/argoproj/argo/pkg/apis/workflow" "github.com/argoproj/argo/pkg/apis/workflow/v1alpha1" "github.com/argoproj/argo/pkg/client/clientset/versioned" + "github.com/argoproj/argo/workflow/common" "github.com/argoproj/argo/workflow/util" "github.com/prometheus/common/log" + "k8s.io/api/batch/v2alpha1" v1 "k8s.io/apimachinery/pkg/apis/meta/v1" + "k8s.io/apimachinery/pkg/labels" + "k8s.io/apimachinery/pkg/selection" ) type CronWorkflowJob struct { - // Name is the namespace where the Workflow will be run - RuntimeNamespace string - // CronWorkflow is the CronWorkflow to be run - cronWf *v1alpha1.Workflow - + jobName string + cronWf *v1alpha1.Workflow + options v1alpha1.CronWorkflowOptions wfClientset versioned.Interface } -func NewCronWorkflowJob(templateName string, cronWorkflow *v1alpha1.CronWorkflow, wfClientset versioned.Interface) (*CronWorkflowJob, error) { +func NewCronWorkflowJob(cronWorkflow *v1alpha1.CronWorkflow, wfClientset versioned.Interface) (*CronWorkflowJob, error) { wf, err := castToWorkflow(cronWorkflow) if err != nil { return nil, errors.InternalWrapError(err, "Unable to create CronWorkflowJob") } return &CronWorkflowJob{ - RuntimeNamespace: cronWorkflow.Options.RuntimeNamespace, - cronWf: wf, - wfClientset: wfClientset, + jobName: cronWorkflow.ObjectMeta.Name, + cronWf: wf, + options: cronWorkflow.Options, + wfClientset: wfClientset, }, nil } func (job *CronWorkflowJob) Run() { - log.Infof("Running %s", job.cronWf.ObjectMeta.Name) - runtimeNamespace := job.RuntimeNamespace + log.Infof("Running %s", job.jobName) + runtimeNamespace := job.options.RuntimeNamespace + wfClient := job.wfClientset.ArgoprojV1alpha1().Workflows(runtimeNamespace) + + if job.options.ConcurrencyPolicy != "" { + switch job.options.ConcurrencyPolicy { + case v2alpha1.ForbidConcurrent: + labelSelector := labels.NewSelector() + req, _ := labels.NewRequirement(common.LabelCronWorkflowParent, selection.Equals, []string{job.cronWf.Name}) + labelSelector.Add(*req) + wfList, _ := job.wfClientset.ArgoprojV1alpha1().Workflows(runtimeNamespace).List(v1.ListOptions{ + LabelSelector: labelSelector.String(), + }) + for _, wf := range wfList.Items { + if wf.Status.Phase == v1alpha1.NodeRunning { + log.Infof("%s has ConcurrencyPolicy: Forbid and has an active Workflow so it was not run", job.jobName) + return + } + } + case v2alpha1.ReplaceConcurrent: + labelSelector := labels.NewSelector() + req, _ := labels.NewRequirement(common.LabelCronWorkflowParent, selection.Equals, []string{job.cronWf.Name}) + labelSelector.Add(*req) + wfList, _ := job.wfClientset.ArgoprojV1alpha1().Workflows(runtimeNamespace).List(v1.ListOptions{ + LabelSelector: labelSelector.String(), + }) + for _, wf := range wfList.Items { + if wf.Status.Phase == v1alpha1.NodeRunning { + log.Infof("%s has ConcurrencyPolicy: Replace and has an active Workflow %s", job.jobName, wf.Name) + log.Infof("Stopping %s...", wf.Name) + err := util.TerminateWorkflow(wfClient, wf.Name) + if err != nil { + log.Errorf("Error in stopping workflow %s: %s", wf.Name, err) + return + } + } + } + } + } + // TODO: Is this the best way to submit Workflows? // TODO: SubmitOpts is currently always nil _, err := util.SubmitWorkflow(wfClient, job.wfClientset, runtimeNamespace, job.cronWf, &util.SubmitOpts{}) @@ -52,12 +93,17 @@ func castToWorkflow(cronWf *v1alpha1.CronWorkflow) (*v1alpha1.Workflow, error) { Kind: workflow.WorkflowKind, APIVersion: cronWf.TypeMeta.APIVersion, } + newObjectMeta := v1.ObjectMeta{} if cronWf.Options.RuntimeGenerateName != "" { newObjectMeta.GenerateName = cronWf.Options.RuntimeGenerateName } else { return nil, fmt.Errorf("CronWorkflow should have runtimeGenerateName defined") } + + newObjectMeta.Labels = make(map[string]string) + newObjectMeta.Labels[common.LabelCronWorkflowParent] = cronWf.Name + return &v1alpha1.Workflow{ TypeMeta: newTypeMeta, ObjectMeta: newObjectMeta, From 4358994cd60941328bccc180b2d49683c8008aef Mon Sep 17 00:00:00 2001 From: Simon Behar Date: Tue, 12 Nov 2019 14:18:39 -0800 Subject: [PATCH 09/44] WIP --- api/openapi-spec/swagger.json | 24 +- .../workflow/v1alpha1/cron_workflow_types.go | 15 +- pkg/apis/workflow/v1alpha1/generated.pb.go | 963 +++++++++++------- pkg/apis/workflow/v1alpha1/generated.proto | 18 +- .../workflow/v1alpha1/openapi_generated.go | 46 +- .../v1alpha1/zz_generated.deepcopy.go | 25 +- workflow/cron/controller.go | 30 +- workflow/cron/cron_workflow_job.go | 134 ++- 8 files changed, 827 insertions(+), 428 deletions(-) diff --git a/api/openapi-spec/swagger.json b/api/openapi-spec/swagger.json index 8443226fb7a6..a66bbbef76af 100644 --- a/api/openapi-spec/swagger.json +++ b/api/openapi-spec/swagger.json @@ -205,6 +205,7 @@ "type": "object", "required": [ "spec", + "status", "options" ], "properties": { @@ -224,6 +225,9 @@ }, "spec": { "$ref": "#/definitions/io.argoproj.workflow.v1alpha1.WorkflowSpec" + }, + "status": { + "$ref": "#/definitions/io.argoproj.workflow.v1alpha1.CronWorkflowStatus" } } }, @@ -264,7 +268,7 @@ ], "properties": { "concurrencyPolicy": { - "description": "ConcurrencyPolicy is the name generator the Workflow will be run with. Mutually exclusive with RuntimeName", + "description": "ConcurrencyPolicy is the K8s-style concurrency policy that will be used", "type": "string" }, "runtimeGenerateName": { @@ -278,6 +282,24 @@ "schedule": { "description": "Schedule is a schedule to run the Workflow in Cron format", "type": "string" + }, + "startingDeadlineSeconds": { + "description": "StartingDeadlineSeconds is the K8s-style deadline that will limit the time a CronWorkflow will be run after its original scheduled time if it is missed.", + "type": "integer", + "format": "int64" + }, + "suspend": { + "description": "Suspend is a flag that will stop new CronWorkflows from running if set to true", + "type": "boolean" + } + } + }, + "io.argoproj.workflow.v1alpha1.CronWorkflowStatus": { + "type": "object", + "properties": { + "lastScheduledTime": { + "description": "LastScheduleTime is the last time the CronWorkflow was scheduled", + "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Time" } } }, diff --git a/pkg/apis/workflow/v1alpha1/cron_workflow_types.go b/pkg/apis/workflow/v1alpha1/cron_workflow_types.go index 43ec5cfa2d1b..5d2da6e987da 100644 --- a/pkg/apis/workflow/v1alpha1/cron_workflow_types.go +++ b/pkg/apis/workflow/v1alpha1/cron_workflow_types.go @@ -13,7 +13,8 @@ type CronWorkflow struct { metav1.TypeMeta `json:",inline"` metav1.ObjectMeta `json:"metadata,omitempty" protobuf:"bytes,1,opt,name=metadata"` Spec WorkflowSpec `json:"spec" protobuf:"bytes,2,opt,name=spec"` - Options CronWorkflowOptions `json:"options" protobuf:"bytes,3,opt,name=options"` + Status CronWorkflowStatus `json:"status" protobuf:"bytes,3,opt,name=status"` + Options CronWorkflowOptions `json:"options" protobuf:"bytes,4,opt,name=options"` } // CronWorkflowList is list of CronWorkflow resources @@ -24,6 +25,11 @@ type CronWorkflowList struct { Items []CronWorkflow `json:"items" protobuf:"bytes,2,rep,name=items"` } +type CronWorkflowStatus struct { + // LastScheduleTime is the last time the CronWorkflow was scheduled + LastScheduledTime *metav1.Time `json:"lastScheduledTime,omitempty" protobuf:"bytes,1,opt,name=lastScheduledTime"` +} + // TODO: Consider replacing this with the K8s API CronJobSpec. This spec is only available starting on v2alpha1. // CronWorkflowOptions is the schedule of when to run CronWorkflows type CronWorkflowOptions struct { @@ -33,6 +39,11 @@ type CronWorkflowOptions struct { RuntimeNamespace string `json:"runtimeNamespace" protobuf:"bytes,2,opt,name=runtimeNamespace"` // RuntimeGenerateName is the name generator the Workflow will be run with. Mutually exclusive with RuntimeName RuntimeGenerateName string `json:"runtimeGenerateName" protobuf:"bytes,3,opt,name=runtimeGenerateName"` - // ConcurrencyPolicy is the name generator the Workflow will be run with. Mutually exclusive with RuntimeName + // ConcurrencyPolicy is the K8s-style concurrency policy that will be used ConcurrencyPolicy v2alpha1.ConcurrencyPolicy `json:"concurrencyPolicy,omitempty" protobuf:"bytes,4,opt,name=concurrencyPolicy,casttype=ConcurrencyPolicy"` + // Suspend is a flag that will stop new CronWorkflows from running if set to true + Suspend bool `json:"suspend,omitempty" protobuf:"varint,5,opt,name=suspend"` + // StartingDeadlineSeconds is the K8s-style deadline that will limit the time a CronWorkflow will be run after its + // original scheduled time if it is missed. + StartingDeadlineSeconds *int64 `json:"startingDeadlineSeconds,omitempty" protobuf:"varint,6,opt,name=startingDeadlineSeconds"` } diff --git a/pkg/apis/workflow/v1alpha1/generated.pb.go b/pkg/apis/workflow/v1alpha1/generated.pb.go index 63e750294d37..44e6665f3c4a 100644 --- a/pkg/apis/workflow/v1alpha1/generated.pb.go +++ b/pkg/apis/workflow/v1alpha1/generated.pb.go @@ -340,10 +340,38 @@ func (m *CronWorkflowOptions) XXX_DiscardUnknown() { var xxx_messageInfo_CronWorkflowOptions proto.InternalMessageInfo +func (m *CronWorkflowStatus) Reset() { *m = CronWorkflowStatus{} } +func (*CronWorkflowStatus) ProtoMessage() {} +func (*CronWorkflowStatus) Descriptor() ([]byte, []int) { + return fileDescriptor_c23edafa7e7ea072, []int{11} +} +func (m *CronWorkflowStatus) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *CronWorkflowStatus) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *CronWorkflowStatus) XXX_Merge(src proto.Message) { + xxx_messageInfo_CronWorkflowStatus.Merge(m, src) +} +func (m *CronWorkflowStatus) XXX_Size() int { + return m.Size() +} +func (m *CronWorkflowStatus) XXX_DiscardUnknown() { + xxx_messageInfo_CronWorkflowStatus.DiscardUnknown(m) +} + +var xxx_messageInfo_CronWorkflowStatus proto.InternalMessageInfo + func (m *DAGTask) Reset() { *m = DAGTask{} } func (*DAGTask) ProtoMessage() {} func (*DAGTask) Descriptor() ([]byte, []int) { - return fileDescriptor_c23edafa7e7ea072, []int{11} + return fileDescriptor_c23edafa7e7ea072, []int{12} } func (m *DAGTask) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -371,7 +399,7 @@ var xxx_messageInfo_DAGTask proto.InternalMessageInfo func (m *DAGTemplate) Reset() { *m = DAGTemplate{} } func (*DAGTemplate) ProtoMessage() {} func (*DAGTemplate) Descriptor() ([]byte, []int) { - return fileDescriptor_c23edafa7e7ea072, []int{12} + return fileDescriptor_c23edafa7e7ea072, []int{13} } func (m *DAGTemplate) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -399,7 +427,7 @@ var xxx_messageInfo_DAGTemplate proto.InternalMessageInfo func (m *ExecutorConfig) Reset() { *m = ExecutorConfig{} } func (*ExecutorConfig) ProtoMessage() {} func (*ExecutorConfig) Descriptor() ([]byte, []int) { - return fileDescriptor_c23edafa7e7ea072, []int{13} + return fileDescriptor_c23edafa7e7ea072, []int{14} } func (m *ExecutorConfig) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -427,7 +455,7 @@ var xxx_messageInfo_ExecutorConfig proto.InternalMessageInfo func (m *GitArtifact) Reset() { *m = GitArtifact{} } func (*GitArtifact) ProtoMessage() {} func (*GitArtifact) Descriptor() ([]byte, []int) { - return fileDescriptor_c23edafa7e7ea072, []int{14} + return fileDescriptor_c23edafa7e7ea072, []int{15} } func (m *GitArtifact) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -455,7 +483,7 @@ var xxx_messageInfo_GitArtifact proto.InternalMessageInfo func (m *HDFSArtifact) Reset() { *m = HDFSArtifact{} } func (*HDFSArtifact) ProtoMessage() {} func (*HDFSArtifact) Descriptor() ([]byte, []int) { - return fileDescriptor_c23edafa7e7ea072, []int{15} + return fileDescriptor_c23edafa7e7ea072, []int{16} } func (m *HDFSArtifact) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -483,7 +511,7 @@ var xxx_messageInfo_HDFSArtifact proto.InternalMessageInfo func (m *HDFSConfig) Reset() { *m = HDFSConfig{} } func (*HDFSConfig) ProtoMessage() {} func (*HDFSConfig) Descriptor() ([]byte, []int) { - return fileDescriptor_c23edafa7e7ea072, []int{16} + return fileDescriptor_c23edafa7e7ea072, []int{17} } func (m *HDFSConfig) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -511,7 +539,7 @@ var xxx_messageInfo_HDFSConfig proto.InternalMessageInfo func (m *HDFSKrbConfig) Reset() { *m = HDFSKrbConfig{} } func (*HDFSKrbConfig) ProtoMessage() {} func (*HDFSKrbConfig) Descriptor() ([]byte, []int) { - return fileDescriptor_c23edafa7e7ea072, []int{17} + return fileDescriptor_c23edafa7e7ea072, []int{18} } func (m *HDFSKrbConfig) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -539,7 +567,7 @@ var xxx_messageInfo_HDFSKrbConfig proto.InternalMessageInfo func (m *HTTPArtifact) Reset() { *m = HTTPArtifact{} } func (*HTTPArtifact) ProtoMessage() {} func (*HTTPArtifact) Descriptor() ([]byte, []int) { - return fileDescriptor_c23edafa7e7ea072, []int{18} + return fileDescriptor_c23edafa7e7ea072, []int{19} } func (m *HTTPArtifact) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -567,7 +595,7 @@ var xxx_messageInfo_HTTPArtifact proto.InternalMessageInfo func (m *Inputs) Reset() { *m = Inputs{} } func (*Inputs) ProtoMessage() {} func (*Inputs) Descriptor() ([]byte, []int) { - return fileDescriptor_c23edafa7e7ea072, []int{19} + return fileDescriptor_c23edafa7e7ea072, []int{20} } func (m *Inputs) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -595,7 +623,7 @@ var xxx_messageInfo_Inputs proto.InternalMessageInfo func (m *Item) Reset() { *m = Item{} } func (*Item) ProtoMessage() {} func (*Item) Descriptor() ([]byte, []int) { - return fileDescriptor_c23edafa7e7ea072, []int{20} + return fileDescriptor_c23edafa7e7ea072, []int{21} } func (m *Item) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -623,7 +651,7 @@ var xxx_messageInfo_Item proto.InternalMessageInfo func (m *ItemValue) Reset() { *m = ItemValue{} } func (*ItemValue) ProtoMessage() {} func (*ItemValue) Descriptor() ([]byte, []int) { - return fileDescriptor_c23edafa7e7ea072, []int{21} + return fileDescriptor_c23edafa7e7ea072, []int{22} } func (m *ItemValue) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -651,7 +679,7 @@ var xxx_messageInfo_ItemValue proto.InternalMessageInfo func (m *Metadata) Reset() { *m = Metadata{} } func (*Metadata) ProtoMessage() {} func (*Metadata) Descriptor() ([]byte, []int) { - return fileDescriptor_c23edafa7e7ea072, []int{22} + return fileDescriptor_c23edafa7e7ea072, []int{23} } func (m *Metadata) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -679,7 +707,7 @@ var xxx_messageInfo_Metadata proto.InternalMessageInfo func (m *NodeStatus) Reset() { *m = NodeStatus{} } func (*NodeStatus) ProtoMessage() {} func (*NodeStatus) Descriptor() ([]byte, []int) { - return fileDescriptor_c23edafa7e7ea072, []int{23} + return fileDescriptor_c23edafa7e7ea072, []int{24} } func (m *NodeStatus) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -707,7 +735,7 @@ var xxx_messageInfo_NodeStatus proto.InternalMessageInfo func (m *NoneStrategy) Reset() { *m = NoneStrategy{} } func (*NoneStrategy) ProtoMessage() {} func (*NoneStrategy) Descriptor() ([]byte, []int) { - return fileDescriptor_c23edafa7e7ea072, []int{24} + return fileDescriptor_c23edafa7e7ea072, []int{25} } func (m *NoneStrategy) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -735,7 +763,7 @@ var xxx_messageInfo_NoneStrategy proto.InternalMessageInfo func (m *Outputs) Reset() { *m = Outputs{} } func (*Outputs) ProtoMessage() {} func (*Outputs) Descriptor() ([]byte, []int) { - return fileDescriptor_c23edafa7e7ea072, []int{25} + return fileDescriptor_c23edafa7e7ea072, []int{26} } func (m *Outputs) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -763,7 +791,7 @@ var xxx_messageInfo_Outputs proto.InternalMessageInfo func (m *ParallelSteps) Reset() { *m = ParallelSteps{} } func (*ParallelSteps) ProtoMessage() {} func (*ParallelSteps) Descriptor() ([]byte, []int) { - return fileDescriptor_c23edafa7e7ea072, []int{26} + return fileDescriptor_c23edafa7e7ea072, []int{27} } func (m *ParallelSteps) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -791,7 +819,7 @@ var xxx_messageInfo_ParallelSteps proto.InternalMessageInfo func (m *Parameter) Reset() { *m = Parameter{} } func (*Parameter) ProtoMessage() {} func (*Parameter) Descriptor() ([]byte, []int) { - return fileDescriptor_c23edafa7e7ea072, []int{27} + return fileDescriptor_c23edafa7e7ea072, []int{28} } func (m *Parameter) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -819,7 +847,7 @@ var xxx_messageInfo_Parameter proto.InternalMessageInfo func (m *PodGC) Reset() { *m = PodGC{} } func (*PodGC) ProtoMessage() {} func (*PodGC) Descriptor() ([]byte, []int) { - return fileDescriptor_c23edafa7e7ea072, []int{28} + return fileDescriptor_c23edafa7e7ea072, []int{29} } func (m *PodGC) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -847,7 +875,7 @@ var xxx_messageInfo_PodGC proto.InternalMessageInfo func (m *RawArtifact) Reset() { *m = RawArtifact{} } func (*RawArtifact) ProtoMessage() {} func (*RawArtifact) Descriptor() ([]byte, []int) { - return fileDescriptor_c23edafa7e7ea072, []int{29} + return fileDescriptor_c23edafa7e7ea072, []int{30} } func (m *RawArtifact) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -875,7 +903,7 @@ var xxx_messageInfo_RawArtifact proto.InternalMessageInfo func (m *ResourceTemplate) Reset() { *m = ResourceTemplate{} } func (*ResourceTemplate) ProtoMessage() {} func (*ResourceTemplate) Descriptor() ([]byte, []int) { - return fileDescriptor_c23edafa7e7ea072, []int{30} + return fileDescriptor_c23edafa7e7ea072, []int{31} } func (m *ResourceTemplate) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -903,7 +931,7 @@ var xxx_messageInfo_ResourceTemplate proto.InternalMessageInfo func (m *RetryStrategy) Reset() { *m = RetryStrategy{} } func (*RetryStrategy) ProtoMessage() {} func (*RetryStrategy) Descriptor() ([]byte, []int) { - return fileDescriptor_c23edafa7e7ea072, []int{31} + return fileDescriptor_c23edafa7e7ea072, []int{32} } func (m *RetryStrategy) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -931,7 +959,7 @@ var xxx_messageInfo_RetryStrategy proto.InternalMessageInfo func (m *S3Artifact) Reset() { *m = S3Artifact{} } func (*S3Artifact) ProtoMessage() {} func (*S3Artifact) Descriptor() ([]byte, []int) { - return fileDescriptor_c23edafa7e7ea072, []int{32} + return fileDescriptor_c23edafa7e7ea072, []int{33} } func (m *S3Artifact) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -959,7 +987,7 @@ var xxx_messageInfo_S3Artifact proto.InternalMessageInfo func (m *S3Bucket) Reset() { *m = S3Bucket{} } func (*S3Bucket) ProtoMessage() {} func (*S3Bucket) Descriptor() ([]byte, []int) { - return fileDescriptor_c23edafa7e7ea072, []int{33} + return fileDescriptor_c23edafa7e7ea072, []int{34} } func (m *S3Bucket) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -987,7 +1015,7 @@ var xxx_messageInfo_S3Bucket proto.InternalMessageInfo func (m *ScriptTemplate) Reset() { *m = ScriptTemplate{} } func (*ScriptTemplate) ProtoMessage() {} func (*ScriptTemplate) Descriptor() ([]byte, []int) { - return fileDescriptor_c23edafa7e7ea072, []int{34} + return fileDescriptor_c23edafa7e7ea072, []int{35} } func (m *ScriptTemplate) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1015,7 +1043,7 @@ var xxx_messageInfo_ScriptTemplate proto.InternalMessageInfo func (m *Sequence) Reset() { *m = Sequence{} } func (*Sequence) ProtoMessage() {} func (*Sequence) Descriptor() ([]byte, []int) { - return fileDescriptor_c23edafa7e7ea072, []int{35} + return fileDescriptor_c23edafa7e7ea072, []int{36} } func (m *Sequence) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1043,7 +1071,7 @@ var xxx_messageInfo_Sequence proto.InternalMessageInfo func (m *SuspendTemplate) Reset() { *m = SuspendTemplate{} } func (*SuspendTemplate) ProtoMessage() {} func (*SuspendTemplate) Descriptor() ([]byte, []int) { - return fileDescriptor_c23edafa7e7ea072, []int{36} + return fileDescriptor_c23edafa7e7ea072, []int{37} } func (m *SuspendTemplate) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1071,7 +1099,7 @@ var xxx_messageInfo_SuspendTemplate proto.InternalMessageInfo func (m *TarStrategy) Reset() { *m = TarStrategy{} } func (*TarStrategy) ProtoMessage() {} func (*TarStrategy) Descriptor() ([]byte, []int) { - return fileDescriptor_c23edafa7e7ea072, []int{37} + return fileDescriptor_c23edafa7e7ea072, []int{38} } func (m *TarStrategy) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1099,7 +1127,7 @@ var xxx_messageInfo_TarStrategy proto.InternalMessageInfo func (m *Template) Reset() { *m = Template{} } func (*Template) ProtoMessage() {} func (*Template) Descriptor() ([]byte, []int) { - return fileDescriptor_c23edafa7e7ea072, []int{38} + return fileDescriptor_c23edafa7e7ea072, []int{39} } func (m *Template) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1127,7 +1155,7 @@ var xxx_messageInfo_Template proto.InternalMessageInfo func (m *TemplateRef) Reset() { *m = TemplateRef{} } func (*TemplateRef) ProtoMessage() {} func (*TemplateRef) Descriptor() ([]byte, []int) { - return fileDescriptor_c23edafa7e7ea072, []int{39} + return fileDescriptor_c23edafa7e7ea072, []int{40} } func (m *TemplateRef) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1155,7 +1183,7 @@ var xxx_messageInfo_TemplateRef proto.InternalMessageInfo func (m *UserContainer) Reset() { *m = UserContainer{} } func (*UserContainer) ProtoMessage() {} func (*UserContainer) Descriptor() ([]byte, []int) { - return fileDescriptor_c23edafa7e7ea072, []int{40} + return fileDescriptor_c23edafa7e7ea072, []int{41} } func (m *UserContainer) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1183,7 +1211,7 @@ var xxx_messageInfo_UserContainer proto.InternalMessageInfo func (m *ValueFrom) Reset() { *m = ValueFrom{} } func (*ValueFrom) ProtoMessage() {} func (*ValueFrom) Descriptor() ([]byte, []int) { - return fileDescriptor_c23edafa7e7ea072, []int{41} + return fileDescriptor_c23edafa7e7ea072, []int{42} } func (m *ValueFrom) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1211,7 +1239,7 @@ var xxx_messageInfo_ValueFrom proto.InternalMessageInfo func (m *Workflow) Reset() { *m = Workflow{} } func (*Workflow) ProtoMessage() {} func (*Workflow) Descriptor() ([]byte, []int) { - return fileDescriptor_c23edafa7e7ea072, []int{42} + return fileDescriptor_c23edafa7e7ea072, []int{43} } func (m *Workflow) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1239,7 +1267,7 @@ var xxx_messageInfo_Workflow proto.InternalMessageInfo func (m *WorkflowList) Reset() { *m = WorkflowList{} } func (*WorkflowList) ProtoMessage() {} func (*WorkflowList) Descriptor() ([]byte, []int) { - return fileDescriptor_c23edafa7e7ea072, []int{43} + return fileDescriptor_c23edafa7e7ea072, []int{44} } func (m *WorkflowList) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1267,7 +1295,7 @@ var xxx_messageInfo_WorkflowList proto.InternalMessageInfo func (m *WorkflowSpec) Reset() { *m = WorkflowSpec{} } func (*WorkflowSpec) ProtoMessage() {} func (*WorkflowSpec) Descriptor() ([]byte, []int) { - return fileDescriptor_c23edafa7e7ea072, []int{44} + return fileDescriptor_c23edafa7e7ea072, []int{45} } func (m *WorkflowSpec) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1295,7 +1323,7 @@ var xxx_messageInfo_WorkflowSpec proto.InternalMessageInfo func (m *WorkflowStatus) Reset() { *m = WorkflowStatus{} } func (*WorkflowStatus) ProtoMessage() {} func (*WorkflowStatus) Descriptor() ([]byte, []int) { - return fileDescriptor_c23edafa7e7ea072, []int{45} + return fileDescriptor_c23edafa7e7ea072, []int{46} } func (m *WorkflowStatus) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1323,7 +1351,7 @@ var xxx_messageInfo_WorkflowStatus proto.InternalMessageInfo func (m *WorkflowStep) Reset() { *m = WorkflowStep{} } func (*WorkflowStep) ProtoMessage() {} func (*WorkflowStep) Descriptor() ([]byte, []int) { - return fileDescriptor_c23edafa7e7ea072, []int{46} + return fileDescriptor_c23edafa7e7ea072, []int{47} } func (m *WorkflowStep) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1351,7 +1379,7 @@ var xxx_messageInfo_WorkflowStep proto.InternalMessageInfo func (m *WorkflowTemplate) Reset() { *m = WorkflowTemplate{} } func (*WorkflowTemplate) ProtoMessage() {} func (*WorkflowTemplate) Descriptor() ([]byte, []int) { - return fileDescriptor_c23edafa7e7ea072, []int{47} + return fileDescriptor_c23edafa7e7ea072, []int{48} } func (m *WorkflowTemplate) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1379,7 +1407,7 @@ var xxx_messageInfo_WorkflowTemplate proto.InternalMessageInfo func (m *WorkflowTemplateList) Reset() { *m = WorkflowTemplateList{} } func (*WorkflowTemplateList) ProtoMessage() {} func (*WorkflowTemplateList) Descriptor() ([]byte, []int) { - return fileDescriptor_c23edafa7e7ea072, []int{48} + return fileDescriptor_c23edafa7e7ea072, []int{49} } func (m *WorkflowTemplateList) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1407,7 +1435,7 @@ var xxx_messageInfo_WorkflowTemplateList proto.InternalMessageInfo func (m *WorkflowTemplateSpec) Reset() { *m = WorkflowTemplateSpec{} } func (*WorkflowTemplateSpec) ProtoMessage() {} func (*WorkflowTemplateSpec) Descriptor() ([]byte, []int) { - return fileDescriptor_c23edafa7e7ea072, []int{49} + return fileDescriptor_c23edafa7e7ea072, []int{50} } func (m *WorkflowTemplateSpec) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1444,6 +1472,7 @@ func init() { proto.RegisterType((*CronWorkflow)(nil), "github.com.argoproj.argo.pkg.apis.workflow.v1alpha1.CronWorkflow") proto.RegisterType((*CronWorkflowList)(nil), "github.com.argoproj.argo.pkg.apis.workflow.v1alpha1.CronWorkflowList") proto.RegisterType((*CronWorkflowOptions)(nil), "github.com.argoproj.argo.pkg.apis.workflow.v1alpha1.CronWorkflowOptions") + proto.RegisterType((*CronWorkflowStatus)(nil), "github.com.argoproj.argo.pkg.apis.workflow.v1alpha1.CronWorkflowStatus") proto.RegisterType((*DAGTask)(nil), "github.com.argoproj.argo.pkg.apis.workflow.v1alpha1.DAGTask") proto.RegisterType((*DAGTemplate)(nil), "github.com.argoproj.argo.pkg.apis.workflow.v1alpha1.DAGTemplate") proto.RegisterType((*ExecutorConfig)(nil), "github.com.argoproj.argo.pkg.apis.workflow.v1alpha1.ExecutorConfig") @@ -1498,309 +1527,314 @@ func init() { } var fileDescriptor_c23edafa7e7ea072 = []byte{ - // 4824 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xec, 0x5c, 0x4d, 0x6c, 0x1c, 0x47, - 0x76, 0xd6, 0x90, 0x9c, 0xe1, 0xcc, 0x1b, 0xfe, 0xa9, 0x28, 0x59, 0x6d, 0x5a, 0xe6, 0x68, 0x7b, - 0xb1, 0x8e, 0x36, 0xeb, 0x25, 0x6d, 0x69, 0x37, 0xf1, 0xda, 0xb1, 0xbd, 0x33, 0xfc, 0x91, 0x28, - 0x89, 0x14, 0xf3, 0x86, 0x92, 0xb2, 0xf1, 0x22, 0x9b, 0x66, 0x4f, 0x71, 0xa6, 0xc5, 0x99, 0xee, - 0x76, 0x55, 0x0f, 0x69, 0xc2, 0x87, 0x38, 0x41, 0x82, 0x24, 0x08, 0x16, 0x48, 0x2e, 0xc9, 0x22, - 0x7b, 0x09, 0x72, 0x48, 0x2e, 0xb9, 0xe4, 0x1a, 0x04, 0x1b, 0x20, 0xc8, 0xc1, 0xd8, 0x4b, 0x7c, - 0x8b, 0x0f, 0x01, 0xb1, 0x66, 0x2e, 0x09, 0x12, 0x20, 0x40, 0x2e, 0x01, 0x74, 0x0a, 0xaa, 0xba, - 0xba, 0xfa, 0x67, 0x9a, 0x36, 0x35, 0x43, 0x29, 0x48, 0x76, 0x4f, 0x62, 0xbf, 0xf7, 0xea, 0x7b, - 0xf5, 0xfb, 0xea, 0xbd, 0x57, 0x6f, 0x04, 0x2b, 0x6d, 0x27, 0xe8, 0xf4, 0x77, 0x97, 0x6c, 0xaf, - 0xb7, 0x6c, 0xb1, 0xb6, 0xe7, 0x33, 0xef, 0xb1, 0xfc, 0x63, 0xd9, 0xdf, 0x6f, 0x2f, 0x5b, 0xbe, - 0xc3, 0x97, 0x0f, 0x3d, 0xb6, 0xbf, 0xd7, 0xf5, 0x0e, 0x97, 0x0f, 0x5e, 0xb7, 0xba, 0x7e, 0xc7, - 0x7a, 0x7d, 0xb9, 0x4d, 0x5d, 0xca, 0xac, 0x80, 0xb6, 0x96, 0x7c, 0xe6, 0x05, 0x1e, 0xb9, 0x19, - 0x83, 0x2c, 0x45, 0x20, 0xf2, 0x8f, 0x25, 0x7f, 0xbf, 0xbd, 0x24, 0x40, 0x96, 0x22, 0x90, 0xa5, - 0x08, 0x64, 0xe1, 0xeb, 0x09, 0xcd, 0x6d, 0x4f, 0x28, 0x14, 0x58, 0xbb, 0xfd, 0x3d, 0xf9, 0x25, - 0x3f, 0xe4, 0x5f, 0xa1, 0x8e, 0x05, 0x73, 0xff, 0x0d, 0xbe, 0xe4, 0x78, 0xa2, 0x4b, 0xcb, 0xb6, - 0xc7, 0xe8, 0xf2, 0xc1, 0x40, 0x3f, 0x16, 0xbe, 0x11, 0xcb, 0xf4, 0x2c, 0xbb, 0xe3, 0xb8, 0x94, - 0x1d, 0xc5, 0xe3, 0xe8, 0xd1, 0xc0, 0xca, 0x6b, 0xb5, 0x7c, 0x5a, 0x2b, 0xd6, 0x77, 0x03, 0xa7, - 0x47, 0x07, 0x1a, 0xfc, 0xc2, 0x17, 0x35, 0xe0, 0x76, 0x87, 0xf6, 0xac, 0x6c, 0x3b, 0xf3, 0x1f, - 0x0b, 0x30, 0x5b, 0x67, 0x76, 0xc7, 0x39, 0xa0, 0xcd, 0x40, 0x30, 0xda, 0x47, 0xe4, 0x3d, 0x18, - 0x0f, 0x2c, 0x66, 0x14, 0xae, 0x15, 0xae, 0x57, 0x6f, 0x7c, 0x7b, 0x69, 0x88, 0x89, 0x5c, 0xda, - 0xb1, 0x58, 0x04, 0xd7, 0x98, 0x3c, 0x39, 0xae, 0x8d, 0xef, 0x58, 0x0c, 0x05, 0x2a, 0xf9, 0x1e, - 0x4c, 0xb8, 0x9e, 0x4b, 0x8d, 0x31, 0x89, 0x5e, 0x1f, 0x0a, 0x7d, 0xcb, 0x73, 0x75, 0x6f, 0x1b, - 0xe5, 0x93, 0xe3, 0xda, 0x84, 0xa0, 0xa0, 0x04, 0x36, 0xff, 0xb3, 0x00, 0x95, 0x3a, 0x6b, 0xf7, - 0x7b, 0xd4, 0x0d, 0x38, 0x61, 0x00, 0xbe, 0xc5, 0xac, 0x1e, 0x0d, 0x28, 0xe3, 0x46, 0xe1, 0xda, - 0xf8, 0xf5, 0xea, 0x8d, 0x77, 0x86, 0x52, 0xba, 0x1d, 0xc1, 0x34, 0xc8, 0xc7, 0xc7, 0xb5, 0x0b, - 0x27, 0xc7, 0x35, 0xd0, 0x24, 0x8e, 0x09, 0x2d, 0xc4, 0x85, 0x8a, 0xc5, 0x02, 0x67, 0xcf, 0xb2, - 0x03, 0x6e, 0x8c, 0x49, 0x95, 0x6f, 0x0f, 0xa5, 0xb2, 0xae, 0x50, 0x1a, 0x17, 0x95, 0xc6, 0x4a, - 0x44, 0xe1, 0x18, 0xab, 0x30, 0xff, 0x7d, 0x1c, 0xca, 0x11, 0x83, 0x5c, 0x83, 0x09, 0xd7, 0xea, - 0x51, 0xb9, 0x7a, 0x95, 0xc6, 0x94, 0x6a, 0x38, 0xb1, 0x65, 0xf5, 0xc4, 0x04, 0x59, 0x3d, 0x2a, - 0x24, 0x7c, 0x2b, 0xe8, 0xc8, 0x15, 0x48, 0x48, 0x6c, 0x5b, 0x41, 0x07, 0x25, 0x87, 0x5c, 0x85, - 0x89, 0x9e, 0xd7, 0xa2, 0xc6, 0xf8, 0xb5, 0xc2, 0xf5, 0x62, 0x38, 0xc1, 0x9b, 0x5e, 0x8b, 0xa2, - 0xa4, 0x8a, 0xf6, 0x7b, 0xcc, 0xeb, 0x19, 0x13, 0xe9, 0xf6, 0xeb, 0xcc, 0xeb, 0xa1, 0xe4, 0x90, - 0x3f, 0x28, 0xc0, 0x5c, 0xd4, 0xbd, 0x7b, 0x9e, 0x6d, 0x05, 0x8e, 0xe7, 0x1a, 0x45, 0xb9, 0xe0, - 0x6b, 0x23, 0x4d, 0x44, 0x04, 0xd6, 0x30, 0x94, 0xd6, 0xb9, 0x2c, 0x07, 0x07, 0x14, 0x93, 0x1b, - 0x00, 0xed, 0xae, 0xb7, 0x6b, 0x75, 0xc5, 0x1c, 0x18, 0x25, 0xd9, 0x6b, 0xbd, 0x84, 0xb7, 0x34, - 0x07, 0x13, 0x52, 0x64, 0x1f, 0x26, 0xad, 0xf0, 0x54, 0x18, 0x93, 0xb2, 0xdf, 0xab, 0x43, 0xf6, - 0x3b, 0x75, 0xb2, 0x1a, 0xd5, 0x93, 0xe3, 0xda, 0xa4, 0x22, 0x62, 0xa4, 0x81, 0xbc, 0x0a, 0x65, - 0xcf, 0x17, 0x5d, 0xb5, 0xba, 0x46, 0xf9, 0x5a, 0xe1, 0x7a, 0xb9, 0x31, 0xa7, 0xba, 0x57, 0xbe, - 0xaf, 0xe8, 0xa8, 0x25, 0xcc, 0x3f, 0x29, 0xc2, 0xc0, 0xa8, 0xc9, 0xeb, 0x50, 0x55, 0x68, 0xf7, - 0xbc, 0x36, 0x97, 0x8b, 0x5f, 0x6e, 0xcc, 0x9e, 0x1c, 0xd7, 0xaa, 0xf5, 0x98, 0x8c, 0x49, 0x19, - 0xf2, 0x08, 0xc6, 0xf8, 0x4d, 0x75, 0x0c, 0xdf, 0x1d, 0x6a, 0x74, 0xcd, 0x9b, 0x7a, 0x83, 0x96, - 0x4e, 0x8e, 0x6b, 0x63, 0xcd, 0x9b, 0x38, 0xc6, 0x6f, 0x0a, 0xf3, 0xd1, 0x76, 0x02, 0xb9, 0x79, - 0x86, 0x35, 0x1f, 0xb7, 0x9c, 0x40, 0x43, 0x4b, 0xf3, 0x71, 0xcb, 0x09, 0x50, 0xa0, 0x0a, 0xf3, - 0xd1, 0x09, 0x02, 0x5f, 0x6e, 0xbe, 0x61, 0xcd, 0xc7, 0xed, 0x9d, 0x9d, 0x6d, 0x0d, 0x2f, 0x77, - 0xb7, 0xa0, 0xa0, 0x04, 0x26, 0x1f, 0x8a, 0x99, 0x0c, 0x79, 0x1e, 0x3b, 0x52, 0xbb, 0xf6, 0xf6, - 0x48, 0xbb, 0xd6, 0x63, 0x47, 0x5a, 0x9d, 0x5a, 0x13, 0xcd, 0xc0, 0xa4, 0x36, 0x39, 0xba, 0xd6, - 0x1e, 0x97, 0x9b, 0x74, 0xe8, 0xd1, 0xad, 0xae, 0x37, 0x33, 0xa3, 0x5b, 0x5d, 0x6f, 0xa2, 0x04, - 0x16, 0x6b, 0xc3, 0xac, 0x43, 0xb5, 0xa7, 0x87, 0x5b, 0x1b, 0xb4, 0x0e, 0xd3, 0x6b, 0x83, 0xd6, - 0x21, 0x0a, 0x54, 0xb3, 0x0d, 0x97, 0x23, 0x0e, 0x52, 0xdf, 0xe3, 0x8e, 0x1c, 0x20, 0xdd, 0x23, - 0xcb, 0x50, 0xb1, 0x3d, 0x77, 0xcf, 0x69, 0x6f, 0x5a, 0xbe, 0x32, 0x4c, 0xda, 0xa2, 0xad, 0x44, - 0x0c, 0x8c, 0x65, 0xc8, 0xcb, 0x30, 0xbe, 0x4f, 0x8f, 0x94, 0x85, 0xaa, 0x2a, 0xd1, 0xf1, 0xbb, - 0xf4, 0x08, 0x05, 0xdd, 0xfc, 0x51, 0x01, 0xe6, 0x73, 0x26, 0x57, 0x34, 0xeb, 0xb3, 0xae, 0xd2, - 0xa0, 0x9b, 0x3d, 0xc0, 0x7b, 0x28, 0xe8, 0xe4, 0x77, 0x0b, 0x30, 0x9b, 0x98, 0xed, 0x7a, 0x5f, - 0x19, 0xc1, 0xe1, 0x4f, 0x77, 0x0a, 0xab, 0x71, 0x45, 0x69, 0x9c, 0xcd, 0x30, 0x30, 0xab, 0xd5, - 0xfc, 0x27, 0x79, 0xeb, 0xa6, 0x68, 0xc4, 0x82, 0x99, 0x3e, 0xa7, 0x4c, 0x98, 0xe8, 0x26, 0xb5, - 0x19, 0x0d, 0xd4, 0x05, 0xfc, 0x95, 0xa5, 0xf0, 0x6a, 0x17, 0xbd, 0x58, 0x12, 0x5e, 0xc6, 0xd2, - 0xc1, 0xeb, 0x4b, 0xa1, 0xc4, 0x5d, 0x7a, 0xd4, 0xa4, 0x5d, 0x2a, 0x30, 0x1a, 0xe4, 0xe4, 0xb8, - 0x36, 0xf3, 0x20, 0x05, 0x80, 0x19, 0x40, 0xa1, 0xc2, 0xb7, 0x38, 0x3f, 0xf4, 0x58, 0x4b, 0xa9, - 0x18, 0x7b, 0x6a, 0x15, 0xdb, 0x29, 0x00, 0xcc, 0x00, 0x9a, 0xdf, 0x01, 0x58, 0xf1, 0xdc, 0xc0, - 0x71, 0xfb, 0xf4, 0xbe, 0x4b, 0xbe, 0x0c, 0x45, 0xca, 0x98, 0xc7, 0x94, 0x41, 0x9a, 0x56, 0x13, - 0x54, 0x5c, 0x13, 0x44, 0x0c, 0x79, 0xe4, 0x15, 0x28, 0xed, 0x59, 0x4e, 0x97, 0xb6, 0x64, 0x6f, - 0xca, 0x8d, 0x19, 0x25, 0x55, 0x5a, 0x97, 0x54, 0x54, 0x5c, 0xf3, 0xc7, 0x63, 0x30, 0xb5, 0xc2, - 0x3c, 0xf7, 0x91, 0x5a, 0x08, 0xf2, 0xeb, 0x50, 0x16, 0xfe, 0x53, 0xcb, 0x0a, 0x2c, 0x35, 0x57, - 0xaf, 0x25, 0x06, 0xa2, 0xdd, 0xa0, 0x78, 0x09, 0x85, 0xb4, 0x18, 0xda, 0xfd, 0xdd, 0xc7, 0xd4, - 0x0e, 0x36, 0x69, 0x60, 0xc5, 0x17, 0x41, 0x4c, 0x43, 0x8d, 0x4a, 0x6c, 0x98, 0xe0, 0x3e, 0xb5, - 0x47, 0x72, 0x56, 0xa2, 0xee, 0x36, 0x7d, 0x6a, 0xc7, 0xb7, 0xa5, 0xf8, 0x42, 0x09, 0x4e, 0x38, - 0x4c, 0x86, 0xc6, 0x9d, 0x2b, 0x9b, 0x39, 0x9c, 0xb5, 0x49, 0x4e, 0x4d, 0x78, 0x6d, 0xf0, 0xc6, - 0xac, 0x52, 0x37, 0xa9, 0x08, 0x18, 0x69, 0x32, 0x3f, 0x2d, 0xc0, 0x5c, 0xb2, 0xc5, 0x3d, 0x87, - 0x07, 0xe4, 0xbb, 0x03, 0x13, 0xba, 0x74, 0xb6, 0x09, 0x15, 0xad, 0xe5, 0x74, 0xea, 0x8b, 0x2b, - 0xa2, 0x24, 0x26, 0x73, 0x0f, 0x8a, 0x4e, 0x40, 0x7b, 0x91, 0x4b, 0x54, 0x1f, 0x79, 0x94, 0xf1, - 0x7e, 0xda, 0x10, 0xb8, 0x18, 0xc2, 0x9b, 0x9f, 0x8c, 0xc1, 0x7c, 0xce, 0x64, 0x88, 0x6b, 0x56, - 0x38, 0xc1, 0xad, 0x7e, 0x37, 0xf2, 0x8e, 0x74, 0x6f, 0x9b, 0x8a, 0x8e, 0x5a, 0x82, 0xac, 0xc2, - 0x9c, 0x72, 0x9d, 0x85, 0x43, 0xc0, 0x7d, 0xcb, 0xa6, 0xca, 0x1e, 0x69, 0xdf, 0x03, 0x33, 0x7c, - 0x1c, 0x68, 0x41, 0x36, 0x61, 0x5e, 0xd1, 0x6e, 0x29, 0xc7, 0x5b, 0x3a, 0x21, 0xe3, 0x12, 0xe8, - 0x25, 0x05, 0x34, 0x8f, 0x83, 0x22, 0x98, 0xd7, 0x8e, 0x1c, 0xc0, 0x45, 0xdb, 0x73, 0xed, 0x3e, - 0x63, 0xd4, 0xb5, 0x8f, 0xb6, 0xbd, 0xae, 0x63, 0x1f, 0x29, 0x3f, 0xec, 0xb6, 0x02, 0xbb, 0xb8, - 0x92, 0x15, 0x78, 0x72, 0x5c, 0xfb, 0x5a, 0x22, 0x50, 0xd9, 0xb5, 0x02, 0xbb, 0xb3, 0x7c, 0x70, - 0x23, 0x9a, 0xd0, 0xac, 0x38, 0x0e, 0xaa, 0x30, 0xff, 0xb4, 0x04, 0x93, 0xab, 0xf5, 0x5b, 0x3b, - 0x16, 0xdf, 0x3f, 0x83, 0x83, 0xf9, 0x2a, 0x94, 0x03, 0xda, 0xf3, 0xbb, 0x56, 0x10, 0x4d, 0x99, - 0x9e, 0xe8, 0x1d, 0x45, 0x47, 0x2d, 0x41, 0x3c, 0xe1, 0x2d, 0x2b, 0x77, 0x5d, 0x1d, 0x80, 0x77, - 0x86, 0x34, 0xc7, 0x0a, 0x25, 0xe9, 0x2e, 0x2b, 0x12, 0xc6, 0x3a, 0x08, 0x87, 0x6a, 0xa4, 0x1c, - 0xe9, 0x9e, 0xf2, 0x24, 0x86, 0x0c, 0x73, 0x62, 0x9c, 0xf0, 0x66, 0x4f, 0x10, 0x30, 0xa9, 0x85, - 0x7c, 0x03, 0xa6, 0x5a, 0xd4, 0xa7, 0x6e, 0x8b, 0xba, 0xb6, 0x43, 0xb9, 0x51, 0xbc, 0x36, 0x2e, - 0xe6, 0xe5, 0xe4, 0xb8, 0x36, 0xb5, 0x9a, 0xa0, 0x63, 0x4a, 0x8a, 0x3c, 0x86, 0xca, 0xa1, 0x13, - 0x74, 0xe4, 0xf6, 0x36, 0x4a, 0xf2, 0xd8, 0x7c, 0x6b, 0xa8, 0x8e, 0x0a, 0x84, 0x78, 0x5a, 0x1e, - 0x45, 0x98, 0x18, 0xc3, 0x8b, 0x4b, 0x5a, 0x7c, 0xc8, 0x98, 0x46, 0x3a, 0x08, 0x95, 0x74, 0x03, - 0xc9, 0xc0, 0x58, 0x86, 0x70, 0x98, 0x12, 0x1f, 0x4d, 0xfa, 0x7e, 0x9f, 0xba, 0x36, 0x95, 0xae, - 0xeb, 0xb0, 0x91, 0x4e, 0x04, 0x12, 0xce, 0xc8, 0xa3, 0x04, 0x2c, 0xa6, 0x94, 0x88, 0xdd, 0x77, - 0xd8, 0xa1, 0xae, 0x51, 0x49, 0xef, 0xbe, 0x47, 0x1d, 0xea, 0xa2, 0xe4, 0x10, 0x0f, 0xc0, 0xd6, - 0x37, 0x90, 0x01, 0x23, 0xf8, 0xb7, 0xf1, 0x45, 0xd6, 0x98, 0x11, 0x57, 0x44, 0xfc, 0x8d, 0x09, - 0x15, 0xe6, 0xdf, 0x17, 0xa0, 0x2a, 0x0e, 0x47, 0xb4, 0xa1, 0x5f, 0x81, 0x52, 0x60, 0xb1, 0xb6, - 0xba, 0xc0, 0x2b, 0xf1, 0x7d, 0xb6, 0x23, 0xa9, 0xa8, 0xb8, 0xc4, 0x82, 0x62, 0x60, 0xf1, 0xfd, - 0xc8, 0x1e, 0xfe, 0xd2, 0x50, 0x7d, 0x54, 0xa7, 0x32, 0x36, 0x85, 0xe2, 0x8b, 0x63, 0x88, 0x4c, - 0xae, 0x43, 0x59, 0x5c, 0x9e, 0xeb, 0x16, 0x0f, 0xfd, 0xf1, 0x72, 0x63, 0x4a, 0x9c, 0xc2, 0x75, - 0x45, 0x43, 0xcd, 0x35, 0xbf, 0x0b, 0x33, 0x6b, 0x1f, 0x50, 0xbb, 0x1f, 0x78, 0x2c, 0xf4, 0xc8, - 0xc8, 0x1d, 0x20, 0x9c, 0xb2, 0x03, 0xc7, 0xa6, 0x75, 0xdb, 0xf6, 0xfa, 0x6e, 0xb0, 0x15, 0x9f, - 0xfa, 0x05, 0xa5, 0x8d, 0x34, 0x07, 0x24, 0x30, 0xa7, 0x95, 0xf9, 0x57, 0x13, 0x50, 0x4d, 0xf8, - 0xf4, 0x62, 0x15, 0x19, 0xf5, 0xbd, 0xac, 0x0d, 0x11, 0x5e, 0x23, 0x4a, 0x8e, 0xb0, 0x21, 0x8c, - 0x1e, 0x38, 0x5c, 0x44, 0x8e, 0x19, 0x1b, 0x82, 0x8a, 0x8e, 0x5a, 0x82, 0xd4, 0xa0, 0xd8, 0xa2, - 0x7e, 0xd0, 0x91, 0x83, 0x9c, 0x68, 0x54, 0xc4, 0x44, 0xac, 0x0a, 0x02, 0x86, 0x74, 0x21, 0xb0, - 0x47, 0x03, 0xbb, 0x63, 0x4c, 0xc8, 0x73, 0x27, 0x05, 0xd6, 0x05, 0x01, 0x43, 0x7a, 0x8e, 0xf7, - 0x55, 0x7c, 0xf6, 0xde, 0x57, 0xe9, 0x9c, 0xbd, 0x2f, 0xe2, 0xc3, 0x3c, 0xe7, 0x9d, 0x6d, 0xe6, - 0x1c, 0x58, 0x01, 0x95, 0x8d, 0xa5, 0x9e, 0xc9, 0xa7, 0xd1, 0x73, 0x45, 0xdc, 0x48, 0xcd, 0xe6, - 0xed, 0x2c, 0x0a, 0xe6, 0x41, 0x93, 0x26, 0x5c, 0x76, 0x5c, 0x4e, 0xed, 0x3e, 0xa3, 0x1b, 0x6d, - 0xd7, 0x63, 0xf4, 0xb6, 0xc7, 0x05, 0x9c, 0x0a, 0x64, 0x5f, 0x56, 0x8b, 0x76, 0x79, 0x23, 0x4f, - 0x08, 0xf3, 0xdb, 0x9a, 0x3f, 0x2e, 0xc0, 0x54, 0x32, 0x8c, 0x21, 0x1c, 0xa0, 0xb3, 0xba, 0xde, - 0x0c, 0x77, 0xa6, 0x72, 0x4d, 0xde, 0x1d, 0x3a, 0x3a, 0x0a, 0x61, 0x62, 0xd7, 0x2f, 0xa6, 0x61, - 0x42, 0xcd, 0x19, 0xf2, 0x24, 0x5f, 0x86, 0xe2, 0x9e, 0xc7, 0x6c, 0xaa, 0xce, 0x96, 0x3e, 0x83, - 0xeb, 0x82, 0x88, 0x21, 0xcf, 0xfc, 0xd7, 0x02, 0x24, 0x34, 0x90, 0xdf, 0x80, 0x69, 0xa1, 0xe3, - 0x2e, 0xdb, 0x4d, 0x8d, 0xa6, 0x31, 0xf4, 0x68, 0x34, 0x52, 0xe3, 0xb2, 0xd2, 0x3f, 0x9d, 0x22, - 0x63, 0x5a, 0x1f, 0xf9, 0x1a, 0x54, 0xac, 0x56, 0x8b, 0x51, 0xce, 0x69, 0x68, 0x7a, 0x2a, 0x8d, - 0x69, 0x79, 0x57, 0x46, 0x44, 0x8c, 0xf9, 0xe2, 0x18, 0x8a, 0xb8, 0x51, 0xec, 0x6c, 0xe5, 0xb4, - 0xe8, 0x63, 0x28, 0x94, 0x08, 0x3a, 0x6a, 0x09, 0xf3, 0xfb, 0x13, 0x90, 0xd6, 0x4d, 0x5a, 0x30, - 0xbb, 0xcf, 0x76, 0x57, 0x56, 0x2c, 0xbb, 0x33, 0x54, 0x54, 0x33, 0x2f, 0xc2, 0xa9, 0xbb, 0x69, - 0x04, 0xcc, 0x42, 0x2a, 0x2d, 0x77, 0xe9, 0x51, 0x60, 0xed, 0x0e, 0x13, 0xd8, 0x44, 0x5a, 0x92, - 0x08, 0x98, 0x85, 0x24, 0xdf, 0x84, 0xea, 0x3e, 0xdb, 0x8d, 0x0e, 0xb9, 0x9a, 0x8e, 0x79, 0x35, - 0x1d, 0xd5, 0xbb, 0x31, 0x0b, 0x93, 0x72, 0x62, 0x0a, 0xf7, 0xd9, 0x2e, 0x52, 0xab, 0x1b, 0xa5, - 0xcc, 0xf4, 0x14, 0xde, 0x55, 0x74, 0xd4, 0x12, 0xc4, 0x07, 0xb2, 0x1f, 0xcd, 0x9e, 0x0e, 0x8d, - 0x95, 0x2d, 0xba, 0x9e, 0x37, 0x1a, 0x2d, 0x94, 0x1c, 0xd0, 0x0b, 0xc2, 0x36, 0xdf, 0x1d, 0xc0, - 0xc1, 0x1c, 0x6c, 0xf2, 0x1d, 0xb8, 0xb2, 0xcf, 0x76, 0x95, 0x21, 0xdf, 0x66, 0x8e, 0x6b, 0x3b, - 0x7e, 0x2a, 0x57, 0x56, 0x53, 0xdd, 0xbd, 0x72, 0x37, 0x5f, 0x0c, 0x4f, 0x6b, 0x6f, 0x7e, 0x1d, - 0xa6, 0x92, 0xb9, 0x96, 0x2f, 0x88, 0xcf, 0xcd, 0xff, 0x28, 0x40, 0x69, 0xc3, 0xf5, 0xfb, 0x3f, - 0x25, 0x69, 0xdb, 0x3f, 0x9f, 0x80, 0x09, 0xe1, 0x7a, 0x91, 0xeb, 0x30, 0x11, 0x1c, 0xf9, 0xe1, - 0xdd, 0x3a, 0xde, 0xb8, 0x14, 0x19, 0x9a, 0x9d, 0x23, 0x9f, 0x3e, 0x51, 0xff, 0xa2, 0x94, 0x20, - 0xef, 0x40, 0xc9, 0xed, 0xf7, 0x1e, 0x5a, 0x5d, 0x65, 0x94, 0x5e, 0x89, 0x5c, 0x8b, 0x2d, 0x49, - 0x7d, 0x72, 0x5c, 0xbb, 0x44, 0x5d, 0xdb, 0x6b, 0x39, 0x6e, 0x7b, 0xf9, 0x31, 0xf7, 0xdc, 0xa5, - 0xad, 0x7e, 0x6f, 0x97, 0x32, 0x54, 0xad, 0xc8, 0x57, 0x61, 0x72, 0xd7, 0xf3, 0xba, 0x02, 0x20, - 0x34, 0x59, 0x3a, 0x40, 0x6c, 0x84, 0x64, 0x8c, 0xf8, 0xc2, 0x8b, 0xe1, 0x01, 0x13, 0x92, 0x13, - 0x69, 0x2f, 0xa6, 0x29, 0xa9, 0xa8, 0xb8, 0xa4, 0x07, 0xa5, 0x9e, 0xe5, 0x0b, 0xb9, 0xa2, 0x9c, - 0xb2, 0xb5, 0xa1, 0xfd, 0xd3, 0xa5, 0x4d, 0x89, 0xb3, 0xe6, 0x06, 0xec, 0x28, 0x56, 0x17, 0x12, - 0x51, 0x29, 0x21, 0x0e, 0x4c, 0x76, 0x1d, 0x1e, 0x08, 0x7d, 0xa5, 0x11, 0x76, 0x85, 0xd0, 0xf7, - 0xd0, 0xea, 0xf6, 0x69, 0x3c, 0x03, 0xf7, 0x42, 0x58, 0x8c, 0xf0, 0x17, 0x8e, 0xa0, 0x9a, 0xe8, - 0x11, 0x99, 0x0b, 0x73, 0x52, 0x72, 0xf3, 0xca, 0x34, 0x14, 0xd9, 0x81, 0xe2, 0x81, 0xc0, 0x50, - 0xc6, 0x66, 0xc4, 0x9e, 0x60, 0x08, 0xf6, 0xe6, 0xd8, 0x1b, 0x85, 0x37, 0xcb, 0x3f, 0xf8, 0xb3, - 0xda, 0x85, 0x8f, 0xfe, 0xf9, 0xda, 0x05, 0xf3, 0x1f, 0xc6, 0xa1, 0xa2, 0x45, 0xfe, 0x6f, 0xef, - 0x14, 0x96, 0xd9, 0x29, 0x77, 0x46, 0x9b, 0xaf, 0x33, 0x6d, 0x97, 0x7a, 0x7a, 0xbb, 0x4c, 0x35, - 0x7e, 0x2e, 0xb1, 0xd4, 0x4f, 0x8e, 0x6b, 0x46, 0x7a, 0x12, 0xd0, 0x3a, 0xdc, 0xa4, 0x9c, 0x5b, - 0x6d, 0x1a, 0x6f, 0x83, 0x6f, 0x7d, 0xd1, 0x36, 0xb8, 0x94, 0xdc, 0x06, 0x95, 0xfc, 0x65, 0xfc, - 0x68, 0x1c, 0xca, 0x9b, 0x51, 0x22, 0xe4, 0x77, 0x0a, 0x50, 0xb5, 0x5c, 0xd7, 0x0b, 0xac, 0x30, - 0xeb, 0x13, 0x9a, 0xb7, 0xad, 0xa1, 0xa6, 0x23, 0x02, 0x5d, 0xaa, 0xc7, 0x80, 0xe1, 0x94, 0xe8, - 0x9b, 0x29, 0xc1, 0xc1, 0xa4, 0x5e, 0xf2, 0x3e, 0x94, 0xba, 0xd6, 0x2e, 0xed, 0x46, 0xd6, 0x6e, - 0x63, 0xb4, 0x1e, 0xdc, 0x93, 0x58, 0x99, 0xf5, 0x08, 0x89, 0xa8, 0x14, 0x2d, 0xbc, 0x03, 0x73, - 0xd9, 0x8e, 0x3e, 0xcd, 0x8c, 0x8a, 0xc5, 0x48, 0xa8, 0x79, 0x9a, 0xa6, 0xe6, 0xdf, 0x56, 0x00, - 0xb6, 0xbc, 0x16, 0x6d, 0x06, 0x56, 0xd0, 0xe7, 0x64, 0x01, 0xc6, 0x9c, 0x96, 0xba, 0x8a, 0x40, - 0xf5, 0x76, 0x6c, 0x63, 0x15, 0xc7, 0x9c, 0x96, 0x4e, 0x71, 0x8c, 0x9d, 0x9a, 0xe2, 0xf8, 0x26, - 0x54, 0x5b, 0x0e, 0xf7, 0xbb, 0xd6, 0xd1, 0x56, 0x8e, 0x2f, 0xb0, 0x1a, 0xb3, 0x30, 0x29, 0x47, - 0x5e, 0x55, 0xe7, 0x77, 0x22, 0x95, 0x48, 0x8a, 0xce, 0x6f, 0x59, 0x74, 0x2f, 0x71, 0x86, 0xdf, - 0x80, 0xa9, 0x28, 0x85, 0x20, 0xb5, 0x14, 0x65, 0xab, 0xe8, 0xd4, 0x4f, 0xed, 0x24, 0x78, 0x98, - 0x92, 0xcc, 0xa6, 0x38, 0x4a, 0xcf, 0x25, 0xc5, 0xb1, 0x0a, 0x73, 0x3c, 0xf0, 0x18, 0x6d, 0x45, - 0x12, 0x1b, 0xab, 0x06, 0x49, 0x67, 0xcc, 0x9a, 0x19, 0x3e, 0x0e, 0xb4, 0x20, 0xdb, 0x70, 0x29, - 0xea, 0x44, 0x72, 0x80, 0xc6, 0xbc, 0x44, 0xba, 0xaa, 0x90, 0x2e, 0x3d, 0xca, 0x91, 0xc1, 0xdc, - 0x96, 0xe4, 0x35, 0x28, 0xfa, 0x1d, 0x8b, 0x53, 0x95, 0xd4, 0x88, 0x62, 0xd7, 0xe2, 0xb6, 0x20, - 0x3e, 0x39, 0xae, 0x55, 0xc4, 0xb4, 0xcb, 0x0f, 0x0c, 0x05, 0xc9, 0x0d, 0x80, 0x5d, 0xaf, 0xef, - 0xb6, 0x2c, 0x76, 0xb4, 0xb1, 0x2a, 0x23, 0x99, 0xc4, 0x8b, 0x61, 0x43, 0x73, 0x30, 0x21, 0x25, - 0x0c, 0x66, 0x2f, 0x34, 0x1d, 0x2a, 0x37, 0xa1, 0x0d, 0xa6, 0xb6, 0x28, 0x8a, 0x4f, 0xde, 0x83, - 0x0a, 0x0f, 0x2c, 0x16, 0xd0, 0x56, 0x3d, 0x50, 0x09, 0x8a, 0x9f, 0x3f, 0x5b, 0x9e, 0x75, 0xc7, - 0xe9, 0xd1, 0xd8, 0xab, 0x68, 0x46, 0x20, 0x18, 0xe3, 0x91, 0x5f, 0x03, 0xd8, 0x73, 0x5c, 0x87, - 0x77, 0x24, 0x7a, 0xf5, 0xa9, 0xd1, 0xf5, 0x38, 0xd7, 0x35, 0x0a, 0x26, 0x10, 0x45, 0xcc, 0xe3, - 0x7b, 0xad, 0x8d, 0x6d, 0x63, 0x4a, 0x8e, 0x52, 0xc7, 0x3c, 0xdb, 0x82, 0x88, 0x21, 0x8f, 0x5c, - 0x87, 0x72, 0xcb, 0xa2, 0x3d, 0xcf, 0xa5, 0x2d, 0x63, 0x3a, 0xce, 0x3b, 0xac, 0x2a, 0x1a, 0x6a, - 0x2e, 0xf9, 0x1e, 0x94, 0x1c, 0xe9, 0xf2, 0x19, 0x33, 0xb2, 0xab, 0x6f, 0x0d, 0x77, 0x29, 0x48, - 0x88, 0x06, 0x08, 0x8b, 0x13, 0xfe, 0x8d, 0x0a, 0x96, 0xd8, 0x30, 0xe9, 0xf5, 0x03, 0xa9, 0x61, - 0x56, 0x6a, 0x18, 0x2e, 0xcf, 0x72, 0x3f, 0xc4, 0x08, 0x5f, 0x70, 0xd5, 0x07, 0x46, 0xc8, 0x62, - 0xbc, 0x76, 0xc7, 0xe9, 0xb6, 0x18, 0x75, 0x8d, 0x39, 0x19, 0x52, 0xc9, 0xf1, 0xae, 0x28, 0x1a, - 0x6a, 0x2e, 0xf9, 0x45, 0x98, 0xf6, 0xfa, 0x81, 0xdc, 0x37, 0x62, 0xdb, 0x71, 0xe3, 0xa2, 0x14, - 0xbf, 0x28, 0xc2, 0xb6, 0xfb, 0x49, 0x06, 0xa6, 0xe5, 0xcc, 0x19, 0x98, 0x4a, 0x96, 0x3d, 0x98, - 0x7f, 0x34, 0x06, 0x51, 0x3f, 0x7e, 0x1a, 0xbc, 0x65, 0x62, 0x42, 0x89, 0x51, 0xde, 0xef, 0x06, - 0xca, 0xd8, 0xca, 0xb5, 0x46, 0x49, 0x41, 0xc5, 0x31, 0x0f, 0x61, 0x5a, 0xf4, 0xb6, 0xdb, 0xa5, - 0xdd, 0x66, 0x40, 0x7d, 0x4e, 0xf6, 0xa0, 0xc8, 0xc5, 0x1f, 0x6a, 0x4e, 0x46, 0x7c, 0xc0, 0x09, - 0xa8, 0x1f, 0xef, 0x77, 0xa9, 0x00, 0x43, 0x78, 0xf3, 0x8f, 0xc7, 0xa0, 0xa2, 0xe7, 0xe9, 0x0c, - 0x19, 0xf2, 0xaf, 0xc0, 0x64, 0x8b, 0xee, 0x59, 0x62, 0x34, 0xea, 0x8d, 0x53, 0x6c, 0xab, 0xd5, - 0x90, 0x84, 0x11, 0x8f, 0xd4, 0xa2, 0xcb, 0x2c, 0x1c, 0xb2, 0xcc, 0x5a, 0x25, 0x7d, 0x45, 0xb2, - 0x0f, 0x15, 0xf9, 0xc7, 0x7a, 0x54, 0x8f, 0x31, 0xec, 0xba, 0x3f, 0x8c, 0x50, 0xc2, 0x5c, 0x80, - 0xfe, 0xc4, 0x18, 0x3f, 0x53, 0x47, 0x51, 0x3c, 0x4b, 0x1d, 0x85, 0xb9, 0x0e, 0xc2, 0x30, 0xdc, - 0x5a, 0x21, 0x6f, 0x43, 0x99, 0xab, 0xad, 0xab, 0xe6, 0xe5, 0x4b, 0xfa, 0xf1, 0x45, 0xd1, 0x9f, - 0x1c, 0xd7, 0xa6, 0xa5, 0x70, 0x44, 0x40, 0xdd, 0xc4, 0x5c, 0x86, 0x6a, 0xe2, 0xdd, 0x59, 0xcc, - 0xb0, 0x7e, 0xa4, 0x4a, 0xcc, 0xf0, 0xaa, 0x15, 0x58, 0x28, 0x39, 0xe6, 0x93, 0x31, 0x98, 0x43, - 0xca, 0xbd, 0x3e, 0xb3, 0x69, 0x32, 0x33, 0x6b, 0xd9, 0xb2, 0x18, 0x25, 0x93, 0x99, 0xad, 0x4b, - 0x2a, 0x2a, 0x2e, 0x79, 0x0b, 0xa6, 0x7b, 0x94, 0xb5, 0xf5, 0x61, 0x53, 0x8b, 0xa4, 0xf3, 0x2b, - 0x9b, 0x49, 0x26, 0xa6, 0x65, 0x45, 0xbc, 0xdf, 0xb3, 0x5c, 0x67, 0x8f, 0xf2, 0x20, 0x9b, 0x32, - 0xd9, 0x54, 0x74, 0xd4, 0x12, 0xe4, 0x16, 0x5c, 0xe4, 0x34, 0xb8, 0x7f, 0xe8, 0x52, 0x86, 0x74, - 0x8f, 0x32, 0x99, 0x49, 0x9f, 0x90, 0x26, 0xf3, 0xc5, 0xe8, 0x45, 0xa7, 0x99, 0x15, 0xc0, 0xc1, - 0x36, 0xf2, 0xf6, 0xed, 0xdb, 0x36, 0xe5, 0x7c, 0xc5, 0x73, 0x5b, 0x8e, 0x2e, 0xb9, 0x49, 0xde, - 0xbe, 0x19, 0x3e, 0x0e, 0xb4, 0x10, 0x28, 0x7b, 0x96, 0xd3, 0xed, 0x33, 0x1a, 0xa3, 0x94, 0xd2, - 0x28, 0xeb, 0x19, 0x3e, 0x0e, 0xb4, 0x30, 0x5f, 0x83, 0x69, 0xa4, 0x01, 0x3b, 0xd2, 0x73, 0x52, - 0x83, 0x62, 0xd7, 0xe9, 0x39, 0x61, 0xf2, 0xa7, 0x18, 0x6e, 0xe4, 0x7b, 0x82, 0x80, 0x21, 0xdd, - 0xfc, 0x41, 0x01, 0x20, 0x2e, 0x27, 0x21, 0xfb, 0x50, 0xe6, 0x37, 0x1b, 0x7d, 0x7b, 0x5f, 0xe7, - 0x8b, 0x86, 0x7c, 0x56, 0x50, 0x20, 0x89, 0x97, 0x3e, 0x45, 0x41, 0xad, 0xe0, 0x8b, 0x8a, 0x0d, - 0xfe, 0x7a, 0x1c, 0x74, 0x2b, 0xb1, 0xb8, 0xd4, 0x6d, 0xf9, 0x9e, 0xe3, 0x06, 0xd9, 0x37, 0xc4, - 0x35, 0x45, 0x47, 0x2d, 0x21, 0xf6, 0xdb, 0x6e, 0x38, 0x88, 0xb1, 0xf4, 0x7e, 0x53, 0x7d, 0x50, - 0x5c, 0x21, 0xc7, 0x68, 0x5b, 0xcc, 0xf5, 0x78, 0x5a, 0x0e, 0x25, 0x15, 0x15, 0x57, 0x5c, 0x33, - 0x51, 0xc2, 0x54, 0xed, 0x11, 0x79, 0xcd, 0x44, 0xb9, 0x55, 0xd4, 0x5c, 0xd2, 0x81, 0x59, 0x4b, - 0x2e, 0x6d, 0x9c, 0x04, 0x7e, 0xaa, 0x7c, 0x76, 0x5c, 0xca, 0x90, 0x46, 0xc1, 0x2c, 0xac, 0xd0, - 0xc4, 0xe3, 0xe6, 0x4f, 0x9f, 0xd6, 0xd6, 0x9a, 0x9a, 0x69, 0x14, 0xcc, 0xc2, 0x0a, 0x0f, 0x8b, - 0x79, 0x5d, 0x5a, 0xc7, 0x2d, 0xe5, 0xc9, 0x69, 0x0f, 0x0b, 0x43, 0x32, 0x46, 0x7c, 0xf3, 0xf7, - 0x0a, 0x30, 0xd3, 0xb4, 0x99, 0xe3, 0x07, 0xfa, 0xec, 0x6f, 0xc9, 0x1a, 0x94, 0xc0, 0x12, 0xbe, - 0x8f, 0xda, 0x53, 0x2f, 0x9f, 0x92, 0x4f, 0x0b, 0x85, 0x52, 0x25, 0x2a, 0x21, 0x09, 0x63, 0x08, - 0x19, 0xf5, 0x4a, 0xeb, 0x92, 0x5d, 0xdb, 0xa6, 0xa4, 0xa2, 0xe2, 0x9a, 0x3f, 0x2c, 0x40, 0x59, - 0xbf, 0x5e, 0x7d, 0x19, 0x8a, 0xf2, 0x51, 0x44, 0xed, 0x1d, 0x7d, 0x99, 0xac, 0x08, 0x22, 0x86, - 0x3c, 0x21, 0x24, 0xdd, 0x39, 0x05, 0x9c, 0xb8, 0x71, 0x2c, 0x16, 0x60, 0xc8, 0x13, 0x9b, 0x96, - 0xba, 0x2d, 0xb5, 0x5f, 0xf4, 0xa6, 0x5d, 0x73, 0x5b, 0x28, 0xe8, 0xb2, 0xa6, 0xc2, 0x63, 0x3d, - 0x2b, 0xc8, 0xc6, 0xe4, 0xeb, 0x92, 0x8a, 0x8a, 0x6b, 0xbe, 0x05, 0xb3, 0xcd, 0x3e, 0xf7, 0xa9, - 0xab, 0x5d, 0x70, 0xe9, 0xbb, 0xf5, 0x99, 0xa5, 0xcd, 0x64, 0x51, 0xf9, 0x6e, 0x8a, 0x86, 0x9a, - 0x6b, 0x4e, 0x43, 0x35, 0x51, 0xe7, 0x69, 0xfe, 0xd7, 0x15, 0xd0, 0xef, 0xbb, 0x3f, 0x7b, 0x25, - 0x1e, 0x2a, 0x84, 0xb2, 0xb5, 0x37, 0x5c, 0x1c, 0xdd, 0x1b, 0xd6, 0x6b, 0x9e, 0xf1, 0x88, 0xdb, - 0xb1, 0x47, 0x5c, 0x3a, 0x07, 0x8f, 0x38, 0xae, 0x31, 0xc9, 0x7a, 0xc5, 0xbf, 0x5f, 0x80, 0x29, - 0x57, 0x44, 0xdc, 0xea, 0xac, 0x1b, 0x93, 0xd2, 0x0b, 0xbb, 0x3f, 0xd2, 0x24, 0x2e, 0x6d, 0x25, - 0x10, 0xc3, 0x64, 0x83, 0x8e, 0x88, 0x93, 0x2c, 0x4c, 0xa9, 0x26, 0xeb, 0x50, 0xb6, 0xf6, 0x44, - 0x18, 0x13, 0x1c, 0xa9, 0x87, 0xea, 0xab, 0x79, 0xa7, 0xbf, 0xae, 0x64, 0xc2, 0x3d, 0x1f, 0x7d, - 0xa1, 0x6e, 0x2b, 0x6e, 0x26, 0x5d, 0x22, 0x53, 0x19, 0xe1, 0x66, 0x8a, 0xb2, 0x26, 0x09, 0xe7, - 0x40, 0x51, 0x12, 0x15, 0x33, 0x26, 0x94, 0xc2, 0x40, 0x49, 0x46, 0x89, 0xe5, 0xd0, 0xe7, 0x0d, - 0x83, 0x28, 0x54, 0x1c, 0xd2, 0x8e, 0x5c, 0xdc, 0xaa, 0x9c, 0xdc, 0xc6, 0xd0, 0x6e, 0xbf, 0xf6, - 0x9a, 0xf3, 0x7d, 0x5c, 0x72, 0x27, 0x69, 0x40, 0xa7, 0xce, 0x62, 0x40, 0xa7, 0x4f, 0x35, 0x9e, - 0x6d, 0x28, 0x71, 0x69, 0x9e, 0x65, 0x74, 0x58, 0xbd, 0xb1, 0x32, 0xdc, 0xed, 0x9e, 0xb2, 0xf0, - 0xe1, 0xec, 0x84, 0x34, 0x54, 0xf0, 0xc4, 0x83, 0x32, 0x53, 0x5e, 0xa0, 0x0a, 0x30, 0x87, 0xcb, - 0x4f, 0x67, 0x5d, 0xc9, 0x70, 0x7f, 0x44, 0x54, 0xd4, 0x4a, 0xc8, 0x7b, 0x30, 0xde, 0xb2, 0xda, - 0x2a, 0xd4, 0xfc, 0xf6, 0xd0, 0x4f, 0xfa, 0x91, 0x1a, 0x59, 0x60, 0xb9, 0x5a, 0xbf, 0x85, 0x02, - 0x95, 0xec, 0xc3, 0x24, 0x0f, 0xad, 0xb5, 0x31, 0x37, 0x42, 0xdd, 0x62, 0xc6, 0xe2, 0x87, 0xc1, - 0x87, 0x22, 0x62, 0xa4, 0x81, 0xac, 0xc1, 0xe4, 0x81, 0xd7, 0xed, 0xf7, 0x54, 0x8c, 0x5a, 0xbd, - 0xb1, 0x90, 0xb7, 0xda, 0x0f, 0xa5, 0x48, 0x6c, 0x04, 0xc2, 0x6f, 0x8e, 0x51, 0x5b, 0xf2, 0x5b, - 0x05, 0x98, 0x11, 0x47, 0x47, 0xef, 0x03, 0x6e, 0x90, 0x11, 0x76, 0xea, 0x03, 0x4e, 0x59, 0xbc, - 0xc3, 0x5e, 0x50, 0x6a, 0x67, 0x36, 0x52, 0x1a, 0x30, 0xa3, 0x91, 0xf8, 0x50, 0xe6, 0x4e, 0x8b, - 0xda, 0x16, 0xe3, 0xc6, 0xfc, 0xb9, 0x69, 0x8f, 0x9d, 0x4a, 0x85, 0x8d, 0x5a, 0x0b, 0xf9, 0x6d, - 0x59, 0x6b, 0xaa, 0xaa, 0xad, 0x55, 0x05, 0xfc, 0xa5, 0xf3, 0xac, 0x80, 0x9f, 0x0f, 0x0b, 0x4d, - 0x53, 0x1a, 0x30, 0xab, 0x92, 0xdc, 0x87, 0xcb, 0x22, 0xa6, 0x39, 0xa0, 0xab, 0xd4, 0x6a, 0x75, - 0x1d, 0x97, 0x36, 0xa9, 0xed, 0xb9, 0x2d, 0x6e, 0x5c, 0x96, 0x2f, 0x08, 0x2f, 0x9e, 0x1c, 0xd7, - 0x2e, 0xd7, 0xf3, 0x04, 0x30, 0xbf, 0x1d, 0xf9, 0x10, 0xa6, 0x59, 0xd2, 0xb5, 0x37, 0x5e, 0x18, - 0xe1, 0xf9, 0x3a, 0x15, 0x24, 0x84, 0x39, 0x90, 0x14, 0x09, 0xd3, 0xba, 0xc8, 0xeb, 0x50, 0xf5, - 0x95, 0xa5, 0x72, 0x78, 0xcf, 0xb8, 0x22, 0xc7, 0x20, 0x6f, 0xd4, 0xed, 0x98, 0x8c, 0x49, 0x19, - 0xf2, 0x00, 0xaa, 0x81, 0xd7, 0xa5, 0x4c, 0xa5, 0xda, 0x0d, 0xb9, 0xf8, 0x8b, 0x79, 0x3b, 0x79, - 0x47, 0x8b, 0xc5, 0x89, 0xdc, 0x98, 0xc6, 0x31, 0x89, 0x23, 0x22, 0xc4, 0xa8, 0x52, 0x90, 0xc9, - 0x70, 0xf8, 0xc5, 0x74, 0x84, 0xd8, 0x4c, 0x32, 0x31, 0x2d, 0x2b, 0x62, 0x3e, 0x9f, 0x39, 0x1e, - 0x73, 0x82, 0xa3, 0x95, 0xae, 0xc5, 0xb9, 0x04, 0x58, 0x90, 0x00, 0x3a, 0xe6, 0xdb, 0xce, 0x0a, - 0xe0, 0x60, 0x1b, 0xe1, 0xaa, 0x45, 0x44, 0xe3, 0xa5, 0xd8, 0x55, 0x8b, 0xda, 0xa2, 0xe6, 0x9e, - 0x52, 0xcc, 0x73, 0x75, 0x98, 0x62, 0x1e, 0xd2, 0x82, 0xab, 0x56, 0x3f, 0xf0, 0x7a, 0x82, 0x90, - 0x6e, 0xb2, 0xe3, 0xed, 0x53, 0xd7, 0xb8, 0x26, 0xef, 0xaa, 0x6b, 0x27, 0xc7, 0xb5, 0xab, 0xf5, - 0xcf, 0x91, 0xc3, 0xcf, 0x45, 0x21, 0x3d, 0x28, 0x53, 0x55, 0x90, 0x64, 0x7c, 0x69, 0x84, 0x4b, - 0x22, 0x5d, 0xd5, 0x14, 0x4e, 0x50, 0x44, 0x43, 0xad, 0x82, 0xec, 0x40, 0xb5, 0xe3, 0xf1, 0xa0, - 0xde, 0x75, 0x2c, 0x4e, 0xb9, 0xf1, 0xb2, 0xdc, 0x27, 0xb9, 0xf7, 0xdb, 0xed, 0x48, 0x2c, 0xde, - 0x26, 0xb7, 0xe3, 0x96, 0x98, 0x84, 0x21, 0x54, 0x06, 0x47, 0x7d, 0xb9, 0x6a, 0x9e, 0x1b, 0xd0, - 0x0f, 0x02, 0x63, 0x51, 0x8e, 0xe5, 0x95, 0x3c, 0xe4, 0x6d, 0xaf, 0xd5, 0x4c, 0x4b, 0x87, 0xa7, - 0x3c, 0x43, 0xc4, 0x2c, 0x26, 0x79, 0x03, 0xa6, 0x7c, 0xaf, 0xd5, 0xf4, 0xa9, 0xbd, 0x6d, 0x05, - 0x76, 0xc7, 0xa8, 0xa5, 0x1f, 0x0a, 0xb6, 0x13, 0x3c, 0x4c, 0x49, 0x2e, 0xbc, 0x0b, 0x17, 0x07, - 0xfc, 0xa9, 0xa7, 0x7a, 0x55, 0xf9, 0x8b, 0x02, 0x24, 0xdd, 0xd9, 0x73, 0xf7, 0xfb, 0x6f, 0xc1, - 0x45, 0x55, 0x08, 0x2b, 0x2e, 0xdb, 0x6e, 0x3f, 0x88, 0xa2, 0xe4, 0x44, 0x7e, 0x04, 0xb3, 0x02, - 0x38, 0xd8, 0xc6, 0xfc, 0xcb, 0x02, 0x4c, 0xa7, 0xcc, 0xf7, 0xb9, 0x47, 0x84, 0xeb, 0x40, 0x7a, - 0x0e, 0x63, 0x1e, 0x0b, 0xef, 0xc0, 0x4d, 0xb1, 0x97, 0xb9, 0xaa, 0x69, 0x97, 0x05, 0x19, 0x9b, - 0x03, 0x5c, 0xcc, 0x69, 0x61, 0xfe, 0x4d, 0x01, 0xe2, 0x04, 0x9c, 0xae, 0x42, 0x2a, 0x9c, 0x5a, - 0x85, 0xf4, 0x2a, 0x94, 0x1f, 0x73, 0xcf, 0xdd, 0x8e, 0x6b, 0x95, 0xf4, 0x84, 0xde, 0x69, 0xde, - 0xdf, 0x92, 0x92, 0x5a, 0x42, 0x4a, 0xbf, 0xbf, 0xee, 0x74, 0x83, 0xc1, 0x8a, 0x9e, 0x3b, 0xbf, - 0x1c, 0xd2, 0x51, 0x4b, 0x90, 0x65, 0xa8, 0xe8, 0x9c, 0xaf, 0x0a, 0x25, 0xf5, 0x24, 0xe8, 0x84, - 0x27, 0xc6, 0x32, 0xe6, 0x8f, 0xc6, 0xa0, 0xfc, 0xff, 0xad, 0x40, 0x7f, 0x1f, 0x4a, 0x5c, 0x3e, - 0x1a, 0xaa, 0xc0, 0x73, 0x65, 0xc4, 0x34, 0xb2, 0x80, 0x4a, 0xbe, 0x92, 0x8b, 0x6f, 0x54, 0x2a, - 0xcc, 0x4f, 0x0a, 0x30, 0xf5, 0x1c, 0x8b, 0xf2, 0x77, 0xd3, 0x45, 0xf9, 0x6f, 0x8f, 0x34, 0xb4, - 0x53, 0x0a, 0xf2, 0xff, 0x6e, 0x3e, 0x1e, 0x92, 0x98, 0x56, 0xe2, 0x42, 0x25, 0x3a, 0xe0, 0x51, - 0x6a, 0xfe, 0xed, 0x91, 0x82, 0xc2, 0x78, 0x53, 0x46, 0x14, 0x8e, 0xb1, 0x0a, 0x72, 0x03, 0x80, - 0x0a, 0xcb, 0x16, 0xe6, 0xed, 0xc6, 0xd2, 0x99, 0xeb, 0x35, 0xcd, 0xc1, 0x84, 0xd4, 0xf3, 0x4f, - 0x38, 0xe4, 0x5f, 0xd1, 0x13, 0xcf, 0xe4, 0x8a, 0xbe, 0x7a, 0xee, 0x57, 0xf4, 0xcb, 0xcf, 0xfe, - 0x8a, 0x4e, 0x04, 0x24, 0xc5, 0x11, 0x02, 0x92, 0x0f, 0xe1, 0x52, 0xf8, 0xe7, 0x4a, 0xd7, 0x72, - 0x7a, 0x7a, 0xbf, 0xa8, 0x72, 0xa2, 0xaf, 0xe6, 0x5e, 0xcc, 0x94, 0x71, 0x87, 0x07, 0xd4, 0x0d, - 0x1e, 0xc6, 0x2d, 0xe3, 0xb7, 0xe8, 0x87, 0x39, 0x70, 0x98, 0xab, 0x24, 0xeb, 0xc1, 0x4e, 0x9e, - 0xc1, 0x83, 0xfd, 0x61, 0x01, 0x2e, 0x5b, 0x79, 0x3f, 0xab, 0x53, 0x79, 0x8c, 0x3b, 0x23, 0xc5, - 0x13, 0x29, 0x44, 0x15, 0x0f, 0xe4, 0xb1, 0x30, 0xbf, 0x0f, 0xe4, 0x2b, 0x71, 0x48, 0x5a, 0x91, - 0x9b, 0x2a, 0x3f, 0x98, 0xfc, 0x7e, 0x36, 0x15, 0x04, 0x72, 0xb6, 0x9b, 0x23, 0x1b, 0xec, 0x73, - 0x48, 0x07, 0x55, 0x47, 0x48, 0x07, 0x65, 0xc2, 0x8b, 0xa9, 0x73, 0x0a, 0x2f, 0x5c, 0x98, 0x73, - 0x7a, 0x56, 0x9b, 0x6e, 0xf7, 0xbb, 0xdd, 0x30, 0xfb, 0xcd, 0x8d, 0x69, 0x89, 0x9d, 0x5b, 0x03, - 0x2a, 0xc2, 0xbd, 0x6e, 0x78, 0x3f, 0xea, 0x07, 0xa1, 0xf8, 0xc1, 0x66, 0x23, 0x83, 0x84, 0x03, - 0xd8, 0x62, 0x5b, 0x0a, 0xb7, 0x75, 0x8b, 0x06, 0x62, 0xb6, 0x65, 0xa6, 0x44, 0xfd, 0x7c, 0xf8, - 0x76, 0x4c, 0xc6, 0xa4, 0x0c, 0xb9, 0x0b, 0x95, 0x96, 0xcb, 0xd5, 0x4f, 0x90, 0x66, 0xa5, 0x95, - 0xfa, 0xba, 0xb0, 0x6d, 0xab, 0x5b, 0x4d, 0xfd, 0xb3, 0xa3, 0xab, 0x83, 0xff, 0x3f, 0xc2, 0x92, - 0xe6, 0x63, 0xdc, 0x9e, 0x6c, 0x4a, 0x30, 0x55, 0x10, 0x1d, 0xa6, 0x36, 0xae, 0x9d, 0xe2, 0x21, - 0xaf, 0x6e, 0x45, 0xf5, 0xdb, 0xd3, 0x4a, 0x9d, 0x2a, 0x73, 0x8e, 0x11, 0xc8, 0x2b, 0x50, 0xf2, - 0xdc, 0xb5, 0x0f, 0x9c, 0xc0, 0xb8, 0x98, 0xce, 0x7e, 0xdf, 0x97, 0x54, 0x54, 0x5c, 0xf2, 0x00, - 0xae, 0x04, 0x41, 0x57, 0x85, 0xb6, 0xf5, 0xbd, 0x80, 0xb2, 0xa8, 0xe8, 0x41, 0x16, 0xae, 0x14, - 0x1b, 0x2f, 0x9d, 0x1c, 0xd7, 0xae, 0xec, 0xec, 0xdc, 0xcb, 0x13, 0xc1, 0xd3, 0xda, 0x9e, 0x1e, - 0x74, 0xcf, 0x0f, 0x19, 0x74, 0x27, 0xe3, 0xbc, 0x4b, 0x9f, 0x1b, 0xe7, 0x0d, 0xc4, 0xa5, 0x97, - 0x9f, 0x22, 0x2e, 0x7d, 0x4f, 0x96, 0x76, 0xdc, 0x5a, 0x51, 0x31, 0xfd, 0x9b, 0xc3, 0xa5, 0x12, - 0x05, 0x42, 0xf8, 0xc2, 0x27, 0xff, 0xc4, 0x10, 0x93, 0x6c, 0xc3, 0x25, 0xdf, 0x6b, 0x0d, 0x84, - 0xb5, 0x32, 0x88, 0x4f, 0xd4, 0xf5, 0x6c, 0xe7, 0xc8, 0x60, 0x6e, 0x4b, 0x69, 0x4b, 0x63, 0xba, - 0x61, 0xc8, 0x89, 0x09, 0x6d, 0x69, 0x4c, 0xc6, 0xa4, 0x4c, 0x36, 0xca, 0x7b, 0xf1, 0x99, 0x45, - 0x79, 0x0b, 0xcf, 0x21, 0xca, 0x7b, 0xe9, 0xf9, 0x45, 0x79, 0x9f, 0x96, 0x61, 0x26, 0xed, 0xbf, - 0xc6, 0x55, 0x55, 0x85, 0xb3, 0x56, 0x55, 0xa5, 0xca, 0x9e, 0xc6, 0x9e, 0x69, 0xd9, 0xd3, 0xf8, - 0xb9, 0x97, 0x3d, 0x25, 0xca, 0xbb, 0x26, 0xbe, 0xa0, 0xbc, 0xab, 0x0e, 0xb3, 0xb6, 0xd7, 0xf3, - 0xe5, 0x2f, 0x28, 0x54, 0x91, 0x4f, 0xf8, 0x10, 0xaf, 0x9f, 0x3a, 0x57, 0xd2, 0x6c, 0xcc, 0xca, - 0x13, 0x0e, 0x45, 0x57, 0x36, 0x2c, 0x8d, 0x50, 0x1a, 0x9a, 0x5e, 0x30, 0x79, 0x51, 0xaa, 0xea, - 0x4c, 0xed, 0xa6, 0x87, 0xea, 0x43, 0x5d, 0xc2, 0xd1, 0x98, 0x4d, 0x97, 0xe3, 0x71, 0xa3, 0x22, - 0xf5, 0xff, 0xca, 0x79, 0xe8, 0x4f, 0xd7, 0xfe, 0xa9, 0x9e, 0xc4, 0xaf, 0xbf, 0x69, 0x2e, 0x66, - 0x7b, 0x42, 0x18, 0xbc, 0xe0, 0xe7, 0xb9, 0x61, 0x5c, 0xbd, 0x2a, 0x7d, 0x9e, 0x33, 0xb8, 0xa8, - 0xb4, 0xbc, 0x90, 0xeb, 0xc8, 0x71, 0x3c, 0x05, 0x39, 0x59, 0x3b, 0x56, 0x7e, 0x56, 0xb5, 0x63, - 0x0b, 0x47, 0x61, 0x59, 0xea, 0xa9, 0x15, 0xad, 0x0f, 0xd2, 0x55, 0xe6, 0xef, 0x0e, 0xf9, 0x3f, - 0xe6, 0x44, 0x85, 0xaf, 0xc9, 0x6a, 0xda, 0xdf, 0x2c, 0xc0, 0xa5, 0xbc, 0x65, 0xc9, 0xe9, 0x45, - 0x33, 0xdd, 0x8b, 0xd1, 0xc2, 0xb5, 0xa4, 0x69, 0xf9, 0xb7, 0x62, 0x22, 0x38, 0x0c, 0xa8, 0xff, - 0xb3, 0x97, 0xe3, 0xa1, 0x5e, 0x8e, 0x53, 0xbf, 0x14, 0x2e, 0x3e, 0xc7, 0x5f, 0x0a, 0x97, 0x86, - 0xf8, 0xa5, 0xf0, 0xe4, 0xf3, 0xfc, 0xa5, 0x70, 0xf9, 0x8c, 0xbf, 0x14, 0xae, 0x3c, 0xfb, 0x5f, - 0x0a, 0x7f, 0x56, 0x80, 0xb9, 0x6c, 0xe1, 0xf2, 0x73, 0x48, 0x92, 0xed, 0xa7, 0x92, 0x64, 0x1b, - 0x23, 0x19, 0xf3, 0xa8, 0xdb, 0xa7, 0x25, 0xcb, 0xcc, 0x9f, 0x14, 0x60, 0xa0, 0x38, 0xfb, 0x39, - 0xe4, 0xb1, 0x1e, 0xa7, 0xf3, 0x58, 0x6b, 0xe7, 0x32, 0xc8, 0x53, 0xf2, 0x59, 0xff, 0x9d, 0x33, - 0xc4, 0xff, 0x95, 0xbc, 0x56, 0xca, 0xb4, 0x8d, 0x3d, 0x7b, 0xd3, 0xd6, 0x58, 0xfa, 0xf8, 0xb3, - 0xc5, 0x0b, 0x9f, 0x7c, 0xb6, 0x78, 0xe1, 0xd3, 0xcf, 0x16, 0x2f, 0x7c, 0x74, 0xb2, 0x58, 0xf8, - 0xf8, 0x64, 0xb1, 0xf0, 0xc9, 0xc9, 0x62, 0xe1, 0xd3, 0x93, 0xc5, 0xc2, 0x4f, 0x4e, 0x16, 0x0b, - 0x7f, 0xf8, 0x2f, 0x8b, 0x17, 0x7e, 0xb5, 0x1c, 0xe1, 0xfe, 0x4f, 0x00, 0x00, 0x00, 0xff, 0xff, - 0xe4, 0x27, 0x8f, 0xe3, 0xca, 0x4f, 0x00, 0x00, + // 4900 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xec, 0x5c, 0x4d, 0x6c, 0x64, 0x57, + 0x56, 0xee, 0xb2, 0x5d, 0xe5, 0xaa, 0x53, 0xfe, 0xeb, 0xeb, 0xee, 0x74, 0xc5, 0xe9, 0xb8, 0x7a, + 0x5e, 0x94, 0xd0, 0xc3, 0x24, 0xe5, 0xa4, 0x7b, 0x06, 0x32, 0x09, 0x49, 0xa6, 0xca, 0x7f, 0xed, + 0xee, 0xb6, 0xdb, 0x9c, 0x72, 0x77, 0x33, 0x64, 0xc4, 0x70, 0xfd, 0xea, 0xba, 0xea, 0xb5, 0xab, + 0xde, 0x7b, 0x79, 0xf7, 0x95, 0x1d, 0x2b, 0x0b, 0x02, 0x02, 0xc1, 0x08, 0x8d, 0x04, 0x1b, 0x18, + 0x31, 0x1b, 0xc4, 0x02, 0x36, 0x6c, 0xd8, 0x02, 0x1a, 0x24, 0xc4, 0x22, 0x62, 0x43, 0xc4, 0x86, + 0x2c, 0x90, 0x35, 0x31, 0x1b, 0x10, 0x48, 0x48, 0x6c, 0x90, 0x7a, 0x85, 0xee, 0x7d, 0xf7, 0xdd, + 0xf7, 0x53, 0xcf, 0x89, 0xbb, 0xca, 0xdd, 0x08, 0x66, 0x56, 0xed, 0x3a, 0xe7, 0xdc, 0xef, 0xdc, + 0xdf, 0x73, 0xcf, 0x39, 0xf7, 0xbc, 0x86, 0xe5, 0xb6, 0xe5, 0x77, 0xfa, 0xbb, 0x35, 0xd3, 0xe9, + 0x2d, 0x51, 0xaf, 0xed, 0xb8, 0x9e, 0xf3, 0x48, 0xfe, 0xb1, 0xe4, 0xee, 0xb7, 0x97, 0xa8, 0x6b, + 0xf1, 0xa5, 0x43, 0xc7, 0xdb, 0xdf, 0xeb, 0x3a, 0x87, 0x4b, 0x07, 0x6f, 0xd0, 0xae, 0xdb, 0xa1, + 0x6f, 0x2c, 0xb5, 0x99, 0xcd, 0x3c, 0xea, 0xb3, 0x56, 0xcd, 0xf5, 0x1c, 0xdf, 0x21, 0x37, 0x23, + 0x90, 0x5a, 0x08, 0x22, 0xff, 0xa8, 0xb9, 0xfb, 0xed, 0x9a, 0x00, 0xa9, 0x85, 0x20, 0xb5, 0x10, + 0x64, 0xe1, 0xb5, 0x98, 0xe6, 0xb6, 0x23, 0x14, 0x0a, 0xac, 0xdd, 0xfe, 0x9e, 0xfc, 0x25, 0x7f, + 0xc8, 0xbf, 0x02, 0x1d, 0x0b, 0xc6, 0xfe, 0x9b, 0xbc, 0x66, 0x39, 0xa2, 0x4b, 0x4b, 0xa6, 0xe3, + 0xb1, 0xa5, 0x83, 0x81, 0x7e, 0x2c, 0x7c, 0x3d, 0x92, 0xe9, 0x51, 0xb3, 0x63, 0xd9, 0xcc, 0x3b, + 0x8a, 0xc6, 0xd1, 0x63, 0x3e, 0xcd, 0x6a, 0xb5, 0x74, 0x5a, 0x2b, 0xaf, 0x6f, 0xfb, 0x56, 0x8f, + 0x0d, 0x34, 0xf8, 0xb9, 0x2f, 0x6b, 0xc0, 0xcd, 0x0e, 0xeb, 0xd1, 0x74, 0x3b, 0xe3, 0x1f, 0x72, + 0x30, 0x5b, 0xf7, 0xcc, 0x8e, 0x75, 0xc0, 0x9a, 0xbe, 0x60, 0xb4, 0x8f, 0xc8, 0xfb, 0x30, 0xee, + 0x53, 0xaf, 0x92, 0xbb, 0x96, 0xbb, 0x5e, 0xbe, 0xf1, 0xad, 0xda, 0x10, 0x13, 0x59, 0xdb, 0xa1, + 0x5e, 0x08, 0xd7, 0x98, 0x3c, 0x39, 0xae, 0x8e, 0xef, 0x50, 0x0f, 0x05, 0x2a, 0xf9, 0x2e, 0x4c, + 0xd8, 0x8e, 0xcd, 0x2a, 0x63, 0x12, 0xbd, 0x3e, 0x14, 0xfa, 0x96, 0x63, 0xeb, 0xde, 0x36, 0x8a, + 0x27, 0xc7, 0xd5, 0x09, 0x41, 0x41, 0x09, 0x6c, 0xfc, 0x67, 0x0e, 0x4a, 0x75, 0xaf, 0xdd, 0xef, + 0x31, 0xdb, 0xe7, 0xc4, 0x03, 0x70, 0xa9, 0x47, 0x7b, 0xcc, 0x67, 0x1e, 0xaf, 0xe4, 0xae, 0x8d, + 0x5f, 0x2f, 0xdf, 0x78, 0x77, 0x28, 0xa5, 0xdb, 0x21, 0x4c, 0x83, 0x7c, 0x72, 0x5c, 0xbd, 0x70, + 0x72, 0x5c, 0x05, 0x4d, 0xe2, 0x18, 0xd3, 0x42, 0x6c, 0x28, 0x51, 0xcf, 0xb7, 0xf6, 0xa8, 0xe9, + 0xf3, 0xca, 0x98, 0x54, 0xf9, 0xce, 0x50, 0x2a, 0xeb, 0x0a, 0xa5, 0x71, 0x51, 0x69, 0x2c, 0x85, + 0x14, 0x8e, 0x91, 0x0a, 0xe3, 0xdf, 0xc7, 0xa1, 0x18, 0x32, 0xc8, 0x35, 0x98, 0xb0, 0x69, 0x8f, + 0xc9, 0xd5, 0x2b, 0x35, 0xa6, 0x54, 0xc3, 0x89, 0x2d, 0xda, 0x13, 0x13, 0x44, 0x7b, 0x4c, 0x48, + 0xb8, 0xd4, 0xef, 0xc8, 0x15, 0x88, 0x49, 0x6c, 0x53, 0xbf, 0x83, 0x92, 0x43, 0xae, 0xc2, 0x44, + 0xcf, 0x69, 0xb1, 0xca, 0xf8, 0xb5, 0xdc, 0xf5, 0x7c, 0x30, 0xc1, 0x9b, 0x4e, 0x8b, 0xa1, 0xa4, + 0x8a, 0xf6, 0x7b, 0x9e, 0xd3, 0xab, 0x4c, 0x24, 0xdb, 0xaf, 0x79, 0x4e, 0x0f, 0x25, 0x87, 0xfc, + 0x6e, 0x0e, 0xe6, 0xc2, 0xee, 0xdd, 0x75, 0x4c, 0xea, 0x5b, 0x8e, 0x5d, 0xc9, 0xcb, 0x05, 0x5f, + 0x1d, 0x69, 0x22, 0x42, 0xb0, 0x46, 0x45, 0x69, 0x9d, 0x4b, 0x73, 0x70, 0x40, 0x31, 0xb9, 0x01, + 0xd0, 0xee, 0x3a, 0xbb, 0xb4, 0x2b, 0xe6, 0xa0, 0x52, 0x90, 0xbd, 0xd6, 0x4b, 0xb8, 0xae, 0x39, + 0x18, 0x93, 0x22, 0xfb, 0x30, 0x49, 0x83, 0x53, 0x51, 0x99, 0x94, 0xfd, 0x5e, 0x19, 0xb2, 0xdf, + 0x89, 0x93, 0xd5, 0x28, 0x9f, 0x1c, 0x57, 0x27, 0x15, 0x11, 0x43, 0x0d, 0xe4, 0x55, 0x28, 0x3a, + 0xae, 0xe8, 0x2a, 0xed, 0x56, 0x8a, 0xd7, 0x72, 0xd7, 0x8b, 0x8d, 0x39, 0xd5, 0xbd, 0xe2, 0x3d, + 0x45, 0x47, 0x2d, 0x61, 0xfc, 0x61, 0x1e, 0x06, 0x46, 0x4d, 0xde, 0x80, 0xb2, 0x42, 0xbb, 0xeb, + 0xb4, 0xb9, 0x5c, 0xfc, 0x62, 0x63, 0xf6, 0xe4, 0xb8, 0x5a, 0xae, 0x47, 0x64, 0x8c, 0xcb, 0x90, + 0x87, 0x30, 0xc6, 0x6f, 0xaa, 0x63, 0xf8, 0xde, 0x50, 0xa3, 0x6b, 0xde, 0xd4, 0x1b, 0xb4, 0x70, + 0x72, 0x5c, 0x1d, 0x6b, 0xde, 0xc4, 0x31, 0x7e, 0x53, 0x98, 0x8f, 0xb6, 0xe5, 0xcb, 0xcd, 0x33, + 0xac, 0xf9, 0x58, 0xb7, 0x7c, 0x0d, 0x2d, 0xcd, 0xc7, 0xba, 0xe5, 0xa3, 0x40, 0x15, 0xe6, 0xa3, + 0xe3, 0xfb, 0xae, 0xdc, 0x7c, 0xc3, 0x9a, 0x8f, 0x5b, 0x3b, 0x3b, 0xdb, 0x1a, 0x5e, 0xee, 0x6e, + 0x41, 0x41, 0x09, 0x4c, 0x3e, 0x12, 0x33, 0x19, 0xf0, 0x1c, 0xef, 0x48, 0xed, 0xda, 0x5b, 0x23, + 0xed, 0x5a, 0xc7, 0x3b, 0xd2, 0xea, 0xd4, 0x9a, 0x68, 0x06, 0xc6, 0xb5, 0xc9, 0xd1, 0xb5, 0xf6, + 0xb8, 0xdc, 0xa4, 0x43, 0x8f, 0x6e, 0x65, 0xad, 0x99, 0x1a, 0xdd, 0xca, 0x5a, 0x13, 0x25, 0xb0, + 0x58, 0x1b, 0x8f, 0x1e, 0xaa, 0x3d, 0x3d, 0xdc, 0xda, 0x20, 0x3d, 0x4c, 0xae, 0x0d, 0xd2, 0x43, + 0x14, 0xa8, 0x46, 0x1b, 0x2e, 0x87, 0x1c, 0x64, 0xae, 0xc3, 0x2d, 0x39, 0x40, 0xb6, 0x47, 0x96, + 0xa0, 0x64, 0x3a, 0xf6, 0x9e, 0xd5, 0xde, 0xa4, 0xae, 0x32, 0x4c, 0xda, 0xa2, 0x2d, 0x87, 0x0c, + 0x8c, 0x64, 0xc8, 0x8b, 0x30, 0xbe, 0xcf, 0x8e, 0x94, 0x85, 0x2a, 0x2b, 0xd1, 0xf1, 0x3b, 0xec, + 0x08, 0x05, 0xdd, 0xf8, 0x51, 0x0e, 0xe6, 0x33, 0x26, 0x57, 0x34, 0xeb, 0x7b, 0x5d, 0xa5, 0x41, + 0x37, 0xbb, 0x8f, 0x77, 0x51, 0xd0, 0xc9, 0x6f, 0xe7, 0x60, 0x36, 0x36, 0xdb, 0xf5, 0xbe, 0x32, + 0x82, 0xc3, 0x9f, 0xee, 0x04, 0x56, 0xe3, 0x8a, 0xd2, 0x38, 0x9b, 0x62, 0x60, 0x5a, 0xab, 0xf1, + 0x4f, 0xf2, 0xd6, 0x4d, 0xd0, 0x08, 0x85, 0x99, 0x3e, 0x67, 0x9e, 0x30, 0xd1, 0x4d, 0x66, 0x7a, + 0xcc, 0x57, 0x17, 0xf0, 0xcb, 0xb5, 0xe0, 0x6a, 0x17, 0xbd, 0xa8, 0x09, 0x2f, 0xa3, 0x76, 0xf0, + 0x46, 0x2d, 0x90, 0xb8, 0xc3, 0x8e, 0x9a, 0xac, 0xcb, 0x04, 0x46, 0x83, 0x9c, 0x1c, 0x57, 0x67, + 0xee, 0x27, 0x00, 0x30, 0x05, 0x28, 0x54, 0xb8, 0x94, 0xf3, 0x43, 0xc7, 0x6b, 0x29, 0x15, 0x63, + 0x4f, 0xac, 0x62, 0x3b, 0x01, 0x80, 0x29, 0x40, 0xe3, 0xdb, 0x00, 0xcb, 0x8e, 0xed, 0x5b, 0x76, + 0x9f, 0xdd, 0xb3, 0xc9, 0x4b, 0x90, 0x67, 0x9e, 0xe7, 0x78, 0xca, 0x20, 0x4d, 0xab, 0x09, 0xca, + 0xaf, 0x0a, 0x22, 0x06, 0x3c, 0xf2, 0x0a, 0x14, 0xf6, 0xa8, 0xd5, 0x65, 0x2d, 0xd9, 0x9b, 0x62, + 0x63, 0x46, 0x49, 0x15, 0xd6, 0x24, 0x15, 0x15, 0xd7, 0xf8, 0xab, 0x71, 0x98, 0x5a, 0xf6, 0x1c, + 0xfb, 0xa1, 0x5a, 0x08, 0xf2, 0xab, 0x50, 0x14, 0xfe, 0x53, 0x8b, 0xfa, 0x54, 0xcd, 0xd5, 0xeb, + 0xb1, 0x81, 0x68, 0x37, 0x28, 0x5a, 0x42, 0x21, 0x2d, 0x86, 0x76, 0x6f, 0xf7, 0x11, 0x33, 0xfd, + 0x4d, 0xe6, 0xd3, 0xe8, 0x22, 0x88, 0x68, 0xa8, 0x51, 0x89, 0x09, 0x13, 0xdc, 0x65, 0xe6, 0x48, + 0xce, 0x4a, 0xd8, 0xdd, 0xa6, 0xcb, 0xcc, 0xe8, 0xb6, 0x14, 0xbf, 0x50, 0x82, 0x13, 0x07, 0x0a, + 0xdc, 0xa7, 0x7e, 0x9f, 0x2b, 0x93, 0xb9, 0x3e, 0x94, 0x9a, 0xf8, 0xcc, 0x34, 0x25, 0x5c, 0x34, + 0x91, 0xc1, 0x6f, 0x54, 0x6a, 0x08, 0x87, 0xc9, 0xe0, 0x36, 0xe1, 0xca, 0x8c, 0xde, 0x1a, 0x59, + 0x63, 0x70, 0x4f, 0xf1, 0xc6, 0xac, 0x52, 0x39, 0xa9, 0x08, 0x18, 0x6a, 0x32, 0x3e, 0xcb, 0xc1, + 0x5c, 0xbc, 0xc5, 0x5d, 0x8b, 0xfb, 0xe4, 0x3b, 0x03, 0x2b, 0x58, 0x3b, 0xdb, 0x0a, 0x8a, 0xd6, + 0x72, 0xfd, 0xf4, 0x4d, 0x19, 0x52, 0x62, 0xab, 0xb7, 0x07, 0x79, 0xcb, 0x67, 0xbd, 0xd0, 0x07, + 0xab, 0x8f, 0x3c, 0xca, 0x68, 0x03, 0x6f, 0x08, 0x5c, 0x0c, 0xe0, 0x8d, 0x7f, 0x1c, 0x87, 0xf9, + 0x8c, 0xc9, 0x10, 0xf7, 0xba, 0xf0, 0xba, 0x5b, 0xfd, 0x6e, 0xe8, 0x8e, 0xe9, 0xde, 0x36, 0x15, + 0x1d, 0xb5, 0x04, 0x59, 0x81, 0x39, 0xe5, 0xab, 0x0b, 0x0f, 0x84, 0xbb, 0xd4, 0x64, 0xca, 0x00, + 0x6a, 0x67, 0x07, 0x53, 0x7c, 0x1c, 0x68, 0x41, 0x36, 0x61, 0x5e, 0xd1, 0xd6, 0x95, 0xa7, 0x2f, + 0xbd, 0x9e, 0x71, 0x09, 0xf4, 0x82, 0x02, 0x9a, 0xc7, 0x41, 0x11, 0xcc, 0x6a, 0x47, 0x0e, 0xe0, + 0xa2, 0xe9, 0xd8, 0x66, 0xdf, 0xf3, 0x98, 0x6d, 0x1e, 0x6d, 0x3b, 0x5d, 0xcb, 0x3c, 0x52, 0x8e, + 0xdf, 0x2d, 0x05, 0x76, 0x71, 0x39, 0x2d, 0xf0, 0xf8, 0xb8, 0xfa, 0xb5, 0x58, 0x64, 0xb4, 0x4b, + 0x7d, 0xb3, 0xb3, 0x74, 0x70, 0x23, 0x9c, 0xd0, 0xb4, 0x38, 0x0e, 0xaa, 0x20, 0x5f, 0x85, 0x49, + 0xde, 0xe7, 0x2e, 0xb3, 0x5b, 0xf2, 0x06, 0x2e, 0x46, 0x1b, 0xab, 0x19, 0x90, 0x31, 0xe4, 0x93, + 0xfb, 0x70, 0x85, 0xfb, 0xc2, 0xc0, 0xda, 0xed, 0x15, 0x46, 0x5b, 0x5d, 0xcb, 0x16, 0xe6, 0xce, + 0xb1, 0x5b, 0xc1, 0x35, 0x3a, 0xde, 0x78, 0xe1, 0xe4, 0xb8, 0x7a, 0xa5, 0x99, 0x2d, 0x82, 0xa7, + 0xb5, 0x35, 0xbe, 0x97, 0x03, 0x32, 0x78, 0xa6, 0x08, 0x87, 0x8b, 0x5d, 0xca, 0xfd, 0x70, 0xfd, + 0x5a, 0x3b, 0x96, 0xf2, 0xb5, 0xcb, 0x37, 0x7e, 0xf6, 0x6c, 0x5b, 0x57, 0xb4, 0x68, 0x3c, 0x1f, + 0x4e, 0xde, 0xdd, 0x34, 0x18, 0x0e, 0xe2, 0x1b, 0x7f, 0x54, 0x80, 0xc9, 0x95, 0xfa, 0xfa, 0x0e, + 0xe5, 0xfb, 0x67, 0xf0, 0xef, 0x5f, 0x85, 0xa2, 0xcf, 0x7a, 0x6e, 0x97, 0xfa, 0xe1, 0x06, 0xd2, + 0xdb, 0x6e, 0x47, 0xd1, 0x51, 0x4b, 0x10, 0x47, 0x04, 0x2b, 0x2a, 0x5a, 0x52, 0x06, 0xe8, 0xdd, + 0x21, 0x6f, 0x43, 0x85, 0x12, 0x8f, 0x56, 0x14, 0x09, 0x23, 0x1d, 0x84, 0x43, 0x39, 0x54, 0x8e, + 0x6c, 0x4f, 0x59, 0xa0, 0x21, 0xa3, 0xcc, 0x08, 0x27, 0x70, 0xac, 0x62, 0x04, 0x8c, 0x6b, 0x21, + 0x5f, 0x87, 0xa9, 0x16, 0x13, 0xdb, 0x85, 0xd9, 0xa6, 0xc5, 0x78, 0x25, 0x7f, 0x6d, 0x5c, 0xcc, + 0xcb, 0xc9, 0x71, 0x75, 0x6a, 0x25, 0x46, 0xc7, 0x84, 0x14, 0x79, 0x04, 0xa5, 0x43, 0xcb, 0xef, + 0xc8, 0xc3, 0x5e, 0x29, 0x48, 0x23, 0xf2, 0xcd, 0xa1, 0x3a, 0x2a, 0x10, 0xa2, 0x69, 0x79, 0x18, + 0x62, 0x62, 0x04, 0x2f, 0x7c, 0x24, 0xf1, 0x43, 0x86, 0x94, 0xd2, 0x3f, 0x2b, 0x25, 0x1b, 0x48, + 0x06, 0x46, 0x32, 0x84, 0xc3, 0x94, 0xf8, 0xd1, 0x64, 0x1f, 0xf4, 0x99, 0x6d, 0x32, 0x19, 0x39, + 0x0c, 0x1b, 0x68, 0x86, 0x20, 0xc1, 0x8c, 0x3c, 0x8c, 0xc1, 0x62, 0x42, 0x89, 0xd8, 0x7d, 0x87, + 0x1d, 0x66, 0x57, 0x4a, 0xc9, 0xdd, 0xf7, 0xb0, 0xc3, 0x6c, 0x94, 0x1c, 0xe2, 0x00, 0x98, 0xda, + 0x01, 0xa8, 0xc0, 0x08, 0xe1, 0x45, 0xe4, 0x47, 0x34, 0x66, 0xc4, 0x0d, 0x1d, 0xfd, 0xc6, 0x98, + 0x0a, 0xe3, 0x6f, 0x73, 0x50, 0x16, 0x87, 0x23, 0xdc, 0xd0, 0xaf, 0x40, 0xc1, 0xa7, 0x5e, 0x5b, + 0xf9, 0x4f, 0xa5, 0xe8, 0x16, 0xdc, 0x91, 0x54, 0x54, 0x5c, 0x42, 0x21, 0xef, 0x53, 0xbe, 0x1f, + 0xde, 0x0e, 0xbf, 0x30, 0x54, 0x1f, 0xd5, 0xa9, 0x8c, 0x2e, 0x06, 0xf1, 0x8b, 0x63, 0x80, 0x4c, + 0xae, 0x43, 0x51, 0xf8, 0x2e, 0x6b, 0x94, 0x07, 0xe1, 0x50, 0xb1, 0x31, 0x25, 0x4e, 0xe1, 0x9a, + 0xa2, 0xa1, 0xe6, 0x1a, 0xdf, 0x81, 0x99, 0xd5, 0x0f, 0x99, 0xd9, 0xf7, 0x1d, 0x2f, 0x70, 0x88, + 0xc9, 0x6d, 0x20, 0x9c, 0x79, 0x07, 0x96, 0xc9, 0xea, 0xa6, 0xe9, 0xf4, 0x6d, 0x7f, 0x2b, 0x3a, + 0xf5, 0x0b, 0x4a, 0x1b, 0x69, 0x0e, 0x48, 0x60, 0x46, 0x2b, 0xe3, 0xcf, 0x27, 0xa0, 0x1c, 0x0b, + 0xa9, 0xc4, 0x2a, 0x7a, 0xcc, 0x75, 0xd2, 0x36, 0x44, 0x38, 0xed, 0x28, 0x39, 0xc2, 0x86, 0x78, + 0xec, 0xc0, 0xe2, 0x22, 0x70, 0x4f, 0xd9, 0x10, 0x54, 0x74, 0xd4, 0x12, 0xa4, 0x0a, 0xf9, 0x16, + 0x73, 0xfd, 0x8e, 0x1c, 0xe4, 0x44, 0xa3, 0x24, 0x26, 0x62, 0x45, 0x10, 0x30, 0xa0, 0x0b, 0x81, + 0x3d, 0xe6, 0x9b, 0x9d, 0xca, 0x84, 0x3c, 0x77, 0x52, 0x60, 0x4d, 0x10, 0x30, 0xa0, 0x67, 0x38, + 0xbf, 0xf9, 0xa7, 0xef, 0xfc, 0x16, 0xce, 0xd9, 0xf9, 0x25, 0x2e, 0xcc, 0x73, 0xde, 0xd9, 0xf6, + 0xac, 0x03, 0xea, 0x33, 0xd9, 0x58, 0xea, 0x99, 0x7c, 0x12, 0x3d, 0x57, 0xc4, 0xfd, 0xdc, 0x6c, + 0xde, 0x4a, 0xa3, 0x60, 0x16, 0x34, 0x69, 0xc2, 0x65, 0xcb, 0xe6, 0xcc, 0xec, 0x7b, 0x6c, 0xa3, + 0x6d, 0x3b, 0x1e, 0xbb, 0xe5, 0x70, 0x01, 0xa7, 0xf2, 0x08, 0x2f, 0xaa, 0x45, 0xbb, 0xbc, 0x91, + 0x25, 0x84, 0xd9, 0x6d, 0x8d, 0xbf, 0xcf, 0xc1, 0x54, 0x3c, 0x8a, 0x24, 0x1c, 0xa0, 0xb3, 0xb2, + 0xd6, 0x0c, 0x76, 0xa6, 0xba, 0xed, 0xde, 0x1b, 0x3a, 0x38, 0x0d, 0x60, 0x22, 0xcf, 0x3b, 0xa2, + 0x61, 0x4c, 0xcd, 0x19, 0xd2, 0x54, 0x2f, 0x41, 0x7e, 0xcf, 0xf1, 0x4c, 0xa6, 0xce, 0x96, 0x3e, + 0x83, 0x6b, 0x82, 0x88, 0x01, 0xcf, 0xf8, 0xd7, 0x1c, 0xc4, 0x34, 0x90, 0x5f, 0x83, 0x69, 0xa1, + 0xe3, 0x8e, 0xb7, 0x9b, 0x18, 0x4d, 0x63, 0xe8, 0xd1, 0x68, 0xa4, 0xc6, 0x65, 0xa5, 0x7f, 0x3a, + 0x41, 0xc6, 0xa4, 0x3e, 0xf2, 0x35, 0x28, 0xd1, 0x56, 0xcb, 0x63, 0x9c, 0xb3, 0xc0, 0xf4, 0x94, + 0x1a, 0xd3, 0xf2, 0xae, 0x0c, 0x89, 0x18, 0xf1, 0xc5, 0x31, 0x14, 0x61, 0xbb, 0xd8, 0xd9, 0xca, + 0x85, 0xd3, 0xc7, 0x50, 0x28, 0x11, 0x74, 0xd4, 0x12, 0xc6, 0xf7, 0x27, 0x20, 0xa9, 0x9b, 0xb4, + 0x60, 0x76, 0xdf, 0xdb, 0x5d, 0x5e, 0xa6, 0x66, 0x67, 0xa8, 0xa0, 0x72, 0x5e, 0x44, 0xb3, 0x77, + 0x92, 0x08, 0x98, 0x86, 0x54, 0x5a, 0xee, 0xb0, 0x23, 0x9f, 0xee, 0x0e, 0x13, 0x57, 0x86, 0x5a, + 0xe2, 0x08, 0x98, 0x86, 0x24, 0xdf, 0x80, 0xf2, 0xbe, 0xb7, 0x1b, 0x1e, 0x72, 0x35, 0x1d, 0xf3, + 0x6a, 0x3a, 0xca, 0x77, 0x22, 0x16, 0xc6, 0xe5, 0xc4, 0x14, 0xee, 0x7b, 0xbb, 0xc8, 0x68, 0x37, + 0xcc, 0x58, 0xea, 0x29, 0xbc, 0xa3, 0xe8, 0xa8, 0x25, 0x88, 0x0b, 0x64, 0x3f, 0x9c, 0x3d, 0x9d, + 0x99, 0x50, 0xb6, 0xe8, 0x7a, 0xd6, 0x68, 0xb4, 0x50, 0x7c, 0x40, 0xcf, 0x09, 0xdb, 0x7c, 0x67, + 0x00, 0x07, 0x33, 0xb0, 0xc9, 0xb7, 0xe1, 0xca, 0xbe, 0xb7, 0xab, 0x0c, 0xf9, 0xb6, 0x67, 0xd9, + 0xa6, 0xe5, 0x26, 0x52, 0x95, 0x55, 0xd5, 0xdd, 0x2b, 0x77, 0xb2, 0xc5, 0xf0, 0xb4, 0xf6, 0xc6, + 0x6b, 0x30, 0x15, 0x4f, 0x75, 0x7d, 0x49, 0x7a, 0xc4, 0xf8, 0x8f, 0x1c, 0x14, 0x36, 0x6c, 0xb7, + 0xff, 0x13, 0x92, 0x35, 0xff, 0x93, 0x09, 0x98, 0x10, 0xae, 0x17, 0xb9, 0x0e, 0x13, 0xfe, 0x91, + 0x1b, 0xdc, 0xad, 0xe3, 0x8d, 0x4b, 0xa1, 0xa1, 0xd9, 0x39, 0x72, 0xd9, 0x63, 0xf5, 0x2f, 0x4a, + 0x09, 0xf2, 0x2e, 0x14, 0xec, 0x7e, 0xef, 0x01, 0xed, 0x2a, 0xa3, 0xf4, 0x4a, 0xe8, 0x5a, 0x6c, + 0x49, 0xea, 0xe3, 0xe3, 0xea, 0x25, 0x66, 0x9b, 0x4e, 0xcb, 0xb2, 0xdb, 0x4b, 0x8f, 0xb8, 0x63, + 0xd7, 0xb6, 0xfa, 0xbd, 0x5d, 0xe6, 0xa1, 0x6a, 0x25, 0xa2, 0x9a, 0x5d, 0xc7, 0xe9, 0x0a, 0x80, + 0xf1, 0x64, 0x54, 0xd3, 0x08, 0xc8, 0x18, 0xf2, 0x85, 0x17, 0xc3, 0x7d, 0x4f, 0x48, 0x4e, 0x24, + 0xbd, 0x98, 0xa6, 0xa4, 0xa2, 0xe2, 0x92, 0x1e, 0x14, 0x7a, 0xd4, 0x15, 0x72, 0x79, 0x39, 0x65, + 0xab, 0x43, 0xfb, 0xa7, 0xb5, 0x4d, 0x89, 0xb3, 0x6a, 0xfb, 0xde, 0x51, 0xa4, 0x2e, 0x20, 0xa2, + 0x52, 0x42, 0x2c, 0x98, 0xec, 0x5a, 0xdc, 0x17, 0xfa, 0x0a, 0x23, 0xec, 0x0a, 0xa1, 0xef, 0x01, + 0xed, 0xf6, 0x59, 0x34, 0x03, 0x77, 0x03, 0x58, 0x0c, 0xf1, 0x17, 0x8e, 0xa0, 0x1c, 0xeb, 0x11, + 0x99, 0x0b, 0x52, 0x82, 0x72, 0xf3, 0xca, 0x2c, 0x20, 0xd9, 0x81, 0xfc, 0x81, 0xc0, 0x50, 0xc6, + 0x66, 0xc4, 0x9e, 0x60, 0x00, 0xf6, 0xd6, 0xd8, 0x9b, 0xb9, 0xb7, 0x8a, 0x3f, 0xf8, 0xe3, 0xea, + 0x85, 0x8f, 0xff, 0xf9, 0xda, 0x05, 0xe3, 0xef, 0xc6, 0xa1, 0xa4, 0x45, 0xfe, 0x6f, 0xef, 0x14, + 0x2f, 0xb5, 0x53, 0x6e, 0x8f, 0x36, 0x5f, 0x67, 0xda, 0x2e, 0xf5, 0xe4, 0x76, 0x99, 0x6a, 0xfc, + 0x4c, 0x6c, 0xa9, 0x1f, 0x1f, 0x57, 0x2b, 0xc9, 0x49, 0x40, 0x7a, 0xb8, 0xc9, 0x38, 0xa7, 0x6d, + 0x16, 0x6d, 0x83, 0x6f, 0x7e, 0xd9, 0x36, 0xb8, 0x14, 0xdf, 0x06, 0xa5, 0xec, 0x65, 0xfc, 0x78, + 0x1c, 0x8a, 0x9b, 0x61, 0x5a, 0xe8, 0xb7, 0x72, 0x50, 0xa6, 0xb6, 0xed, 0xf8, 0x34, 0xc8, 0x81, + 0x05, 0xe6, 0x6d, 0x6b, 0xa8, 0xe9, 0x08, 0x41, 0x6b, 0xf5, 0x08, 0x30, 0x98, 0x12, 0x7d, 0x33, + 0xc5, 0x38, 0x18, 0xd7, 0x4b, 0x3e, 0x80, 0x42, 0x97, 0xee, 0xb2, 0x6e, 0x68, 0xed, 0x36, 0x46, + 0xeb, 0xc1, 0x5d, 0x89, 0x95, 0x5a, 0x8f, 0x80, 0x88, 0x4a, 0xd1, 0xc2, 0xbb, 0x30, 0x97, 0xee, + 0xe8, 0x93, 0xcc, 0xa8, 0x58, 0x8c, 0x98, 0x9a, 0x27, 0x69, 0x6a, 0xfc, 0x75, 0x09, 0x60, 0xcb, + 0x69, 0x31, 0x95, 0x47, 0x59, 0x80, 0x31, 0xab, 0xa5, 0xae, 0x22, 0x50, 0xbd, 0x1d, 0xdb, 0x58, + 0xc1, 0x31, 0xab, 0xa5, 0x53, 0x1c, 0x63, 0xa7, 0xa6, 0x38, 0xbe, 0x01, 0xe5, 0x96, 0xc5, 0xdd, + 0x2e, 0x3d, 0xda, 0xca, 0xf0, 0x05, 0x56, 0x22, 0x16, 0xc6, 0xe5, 0xc8, 0xab, 0xea, 0xfc, 0x4e, + 0x24, 0xd2, 0x6a, 0xe1, 0xf9, 0x2d, 0x8a, 0xee, 0xc5, 0xce, 0xf0, 0x9b, 0x30, 0x15, 0xa6, 0x10, + 0xa4, 0x96, 0xbc, 0x6c, 0x15, 0x9e, 0xfa, 0xa9, 0x9d, 0x18, 0x0f, 0x13, 0x92, 0xe9, 0x14, 0x47, + 0xe1, 0x99, 0xa4, 0x38, 0x56, 0x60, 0x8e, 0xfb, 0x8e, 0xc7, 0x5a, 0xa1, 0xc4, 0xc6, 0x4a, 0x85, + 0x24, 0xf3, 0x87, 0xcd, 0x14, 0x1f, 0x07, 0x5a, 0x90, 0x6d, 0xb8, 0x14, 0x76, 0x22, 0x3e, 0xc0, + 0xca, 0xbc, 0x44, 0xba, 0xaa, 0x90, 0x2e, 0x3d, 0xcc, 0x90, 0xc1, 0xcc, 0x96, 0xe4, 0x75, 0xc8, + 0xbb, 0x1d, 0xca, 0x99, 0x4a, 0x6a, 0x84, 0xb1, 0x6b, 0x7e, 0x5b, 0x10, 0x1f, 0x1f, 0x57, 0x4b, + 0x62, 0xda, 0xe5, 0x0f, 0x0c, 0x04, 0xc9, 0x0d, 0x80, 0x5d, 0xa7, 0x6f, 0xb7, 0xa8, 0x77, 0xb4, + 0xb1, 0x22, 0x23, 0x99, 0xd8, 0x83, 0x6d, 0x43, 0x73, 0x30, 0x26, 0x25, 0x0c, 0x66, 0x2f, 0x30, + 0x1d, 0x2a, 0x37, 0xa1, 0x0d, 0xa6, 0xb6, 0x28, 0x8a, 0x4f, 0xde, 0x87, 0x92, 0x4c, 0xfa, 0xb1, + 0x56, 0xdd, 0x57, 0x09, 0x8a, 0x27, 0x49, 0xdd, 0x69, 0xaf, 0xa2, 0x19, 0x82, 0x60, 0x84, 0x47, + 0x7e, 0x05, 0x60, 0xcf, 0xb2, 0x2d, 0xde, 0x91, 0xe8, 0xe5, 0x27, 0x46, 0xd7, 0xe3, 0x5c, 0xd3, + 0x28, 0x18, 0x43, 0x14, 0x31, 0x8f, 0xeb, 0xb4, 0x36, 0xb6, 0x2b, 0x53, 0x72, 0x94, 0x3a, 0xe6, + 0xd9, 0x16, 0x44, 0x0c, 0x78, 0xe4, 0x3a, 0x14, 0x5b, 0x94, 0xf5, 0x1c, 0x9b, 0xb5, 0x2a, 0xd3, + 0x51, 0xde, 0x61, 0x45, 0xd1, 0x50, 0x73, 0xc9, 0x77, 0xa1, 0x60, 0x49, 0x97, 0xaf, 0x32, 0x23, + 0xbb, 0xfa, 0xf6, 0x70, 0x97, 0x82, 0x84, 0x68, 0x80, 0xb0, 0x38, 0xc1, 0xdf, 0xa8, 0x60, 0x89, + 0x09, 0x93, 0x4e, 0xdf, 0x97, 0x1a, 0x66, 0xa5, 0x86, 0xe1, 0xf2, 0x2c, 0xf7, 0x02, 0x8c, 0xe0, + 0x01, 0x5d, 0xfd, 0xc0, 0x10, 0x59, 0x8c, 0xd7, 0xec, 0x58, 0xdd, 0x96, 0xc7, 0xec, 0xca, 0x9c, + 0x0c, 0xa9, 0xe4, 0x78, 0x97, 0x15, 0x0d, 0x35, 0x97, 0xfc, 0x3c, 0x4c, 0x3b, 0x7d, 0x5f, 0xee, + 0x1b, 0xb1, 0xed, 0x78, 0xe5, 0xa2, 0x14, 0xbf, 0x28, 0xc2, 0xb6, 0x7b, 0x71, 0x06, 0x26, 0xe5, + 0x8c, 0x19, 0x98, 0x8a, 0x57, 0x9d, 0x18, 0xbf, 0x3f, 0x06, 0x61, 0x3f, 0x7e, 0x12, 0xbc, 0x65, + 0x62, 0x40, 0xc1, 0x63, 0xbc, 0xdf, 0xf5, 0x95, 0xb1, 0x95, 0x6b, 0x8d, 0x92, 0x82, 0x8a, 0x63, + 0x1c, 0xc2, 0xb4, 0xe8, 0x6d, 0xb7, 0xcb, 0xba, 0x4d, 0x9f, 0xb9, 0x9c, 0xec, 0x41, 0x9e, 0x8b, + 0x3f, 0xd4, 0x9c, 0x8c, 0xf8, 0x7e, 0xe6, 0x33, 0x37, 0xda, 0xef, 0x52, 0x01, 0x06, 0xf0, 0xc6, + 0x1f, 0x8c, 0x41, 0x49, 0xcf, 0xd3, 0x19, 0x32, 0xe4, 0x2f, 0xc3, 0x64, 0x8b, 0xed, 0x51, 0x31, + 0x1a, 0xf5, 0xc4, 0x2c, 0xb6, 0xd5, 0x4a, 0x40, 0xc2, 0x90, 0x47, 0xaa, 0xe1, 0x65, 0x16, 0x0c, + 0x59, 0x66, 0xad, 0xe2, 0xbe, 0x22, 0xd9, 0x87, 0x92, 0xfc, 0x63, 0x2d, 0x2c, 0x87, 0x19, 0x76, + 0xdd, 0x1f, 0x84, 0x28, 0x41, 0x2e, 0x40, 0xff, 0xc4, 0x08, 0x3f, 0x55, 0xc6, 0x92, 0x3f, 0x4b, + 0x19, 0x8b, 0xb1, 0x06, 0xc2, 0x30, 0xac, 0x2f, 0x93, 0x77, 0xa0, 0xc8, 0xd5, 0xd6, 0x55, 0xf3, + 0xf2, 0x15, 0xfd, 0x14, 0xa5, 0xe8, 0x8f, 0x8f, 0xab, 0xd3, 0x52, 0x38, 0x24, 0xa0, 0x6e, 0x62, + 0x2c, 0x41, 0x39, 0xf6, 0xec, 0x2f, 0x66, 0x58, 0x3f, 0xd9, 0xc5, 0x66, 0x78, 0x85, 0xfa, 0x14, + 0x25, 0xc7, 0x78, 0x3c, 0x06, 0x73, 0xc8, 0xb8, 0xd3, 0xf7, 0x4c, 0x16, 0xcf, 0xcc, 0x52, 0x53, + 0xd6, 0x02, 0xa5, 0x32, 0xb3, 0x75, 0x49, 0x45, 0xc5, 0x25, 0x6f, 0xc3, 0x74, 0x8f, 0x79, 0x6d, + 0x7d, 0xd8, 0xd4, 0x22, 0xe9, 0xfc, 0xca, 0x66, 0x9c, 0x89, 0x49, 0x59, 0x11, 0xef, 0xf7, 0xa8, + 0x6d, 0xed, 0x31, 0xee, 0xa7, 0x53, 0x26, 0x9b, 0x8a, 0x8e, 0x5a, 0x82, 0xac, 0xc3, 0x45, 0xce, + 0xfc, 0x7b, 0x87, 0x36, 0xf3, 0x90, 0xed, 0x31, 0x4f, 0x66, 0xd2, 0x27, 0xa4, 0xc9, 0xd4, 0x4f, + 0x34, 0xcd, 0xb4, 0x00, 0x0e, 0xb6, 0x91, 0xb7, 0x6f, 0xdf, 0x34, 0x19, 0xe7, 0xcb, 0x8e, 0xdd, + 0xb2, 0x74, 0xc5, 0x53, 0xfc, 0xf6, 0x4d, 0xf1, 0x71, 0xa0, 0x85, 0x40, 0xd9, 0xa3, 0x56, 0xb7, + 0xef, 0xb1, 0x08, 0xa5, 0x90, 0x44, 0x59, 0x4b, 0xf1, 0x71, 0xa0, 0x85, 0xf1, 0x3a, 0x4c, 0x23, + 0xf3, 0xbd, 0x23, 0x3d, 0x27, 0x55, 0xc8, 0x77, 0xad, 0x9e, 0x15, 0x24, 0x7f, 0xf2, 0xc1, 0x46, + 0xbe, 0x2b, 0x08, 0x18, 0xd0, 0x8d, 0x1f, 0xe4, 0x00, 0xa2, 0x6a, 0x1e, 0xb2, 0x0f, 0x45, 0x7e, + 0xb3, 0xd1, 0x37, 0xf7, 0x75, 0xbe, 0x68, 0xc8, 0x67, 0x05, 0x05, 0x12, 0x7b, 0xf7, 0x54, 0x14, + 0xd4, 0x0a, 0xbe, 0xac, 0xd6, 0xe3, 0x2f, 0xc6, 0x41, 0xb7, 0x12, 0x8b, 0xcb, 0xec, 0x96, 0xeb, + 0x58, 0xb6, 0x9f, 0x7e, 0x51, 0x5d, 0x55, 0x74, 0xd4, 0x12, 0x62, 0xbf, 0xed, 0x06, 0x83, 0x18, + 0x4b, 0xee, 0x37, 0xd5, 0x07, 0xc5, 0x15, 0x72, 0x1e, 0x6b, 0x8b, 0xb9, 0x1e, 0x4f, 0xca, 0xa1, + 0xa4, 0xa2, 0xe2, 0x8a, 0x6b, 0x26, 0x4c, 0x98, 0xaa, 0x3d, 0x22, 0xaf, 0x99, 0x30, 0xb7, 0x8a, + 0x9a, 0x4b, 0x3a, 0x30, 0x4b, 0xe5, 0xd2, 0x46, 0x49, 0xe0, 0x27, 0xca, 0x67, 0x47, 0x95, 0x24, + 0x49, 0x14, 0x4c, 0xc3, 0x0a, 0x4d, 0x3c, 0x6a, 0xfe, 0xe4, 0x69, 0x6d, 0xad, 0xa9, 0x99, 0x44, + 0xc1, 0x34, 0xac, 0xf0, 0xb0, 0x3c, 0xa7, 0xcb, 0xea, 0xb8, 0xa5, 0x3c, 0x39, 0xed, 0x61, 0x61, + 0x40, 0xc6, 0x90, 0x6f, 0xfc, 0x4e, 0x0e, 0x66, 0x9a, 0xa6, 0x67, 0xb9, 0xbe, 0x3e, 0xfb, 0x5b, + 0xb2, 0x04, 0xc8, 0xa7, 0xc2, 0xf7, 0x51, 0x7b, 0xea, 0xc5, 0x53, 0xf2, 0x69, 0x81, 0x50, 0xa2, + 0x42, 0x28, 0x20, 0x61, 0x04, 0x21, 0xa3, 0x5e, 0x69, 0x5d, 0xd2, 0x6b, 0xdb, 0x94, 0x54, 0x54, + 0x5c, 0xe3, 0x87, 0x39, 0x28, 0xea, 0xd7, 0xab, 0x97, 0x20, 0x2f, 0x1f, 0x45, 0xd4, 0xde, 0xd1, + 0x97, 0xc9, 0xb2, 0x20, 0x62, 0xc0, 0x13, 0x42, 0xd2, 0x9d, 0x53, 0xc0, 0xb1, 0x1b, 0x87, 0x7a, + 0x3e, 0x06, 0x3c, 0xb1, 0x69, 0x99, 0xdd, 0x52, 0xfb, 0x45, 0x6f, 0xda, 0x55, 0xbb, 0x85, 0x82, + 0x2e, 0x4b, 0x5a, 0x1c, 0xaf, 0x47, 0xfd, 0x74, 0x4c, 0xbe, 0x26, 0xa9, 0xa8, 0xb8, 0xc6, 0xdb, + 0x30, 0xab, 0xde, 0xb3, 0xf5, 0x44, 0x09, 0xdf, 0xad, 0xef, 0x51, 0x6d, 0x26, 0xf3, 0xca, 0x77, + 0x53, 0x34, 0xd4, 0x5c, 0x63, 0x1a, 0xca, 0xb1, 0x32, 0x5b, 0xe3, 0xbf, 0xae, 0x80, 0x7e, 0xdf, + 0xfd, 0xe9, 0x2b, 0xf1, 0x50, 0x21, 0x94, 0xa9, 0xbd, 0xe1, 0xfc, 0xe8, 0xde, 0xb0, 0x5e, 0xf3, + 0x94, 0x47, 0xdc, 0x8e, 0x3c, 0xe2, 0xc2, 0x39, 0x78, 0xc4, 0x51, 0xc5, 0x4d, 0xda, 0x2b, 0xfe, + 0x5e, 0x0e, 0xa6, 0x6c, 0x11, 0x71, 0xab, 0xb3, 0x5e, 0x99, 0x94, 0x5e, 0xd8, 0xbd, 0x91, 0x26, + 0xb1, 0xb6, 0x15, 0x43, 0x0c, 0x92, 0x0d, 0x3a, 0x22, 0x8e, 0xb3, 0x30, 0xa1, 0x9a, 0xac, 0x41, + 0x91, 0xee, 0x89, 0x30, 0xc6, 0x3f, 0x52, 0x0f, 0xd5, 0x57, 0xb3, 0x4e, 0x7f, 0x5d, 0xc9, 0x04, + 0x7b, 0x3e, 0xfc, 0x85, 0xba, 0xad, 0xb8, 0x99, 0x74, 0xc1, 0x50, 0x69, 0x84, 0x9b, 0x29, 0xcc, + 0x9a, 0xc4, 0x9c, 0x03, 0x45, 0x89, 0xd5, 0x0f, 0x19, 0x50, 0x08, 0x02, 0x25, 0x19, 0x25, 0x16, + 0x03, 0x9f, 0x37, 0x08, 0xa2, 0x50, 0x71, 0x48, 0x3b, 0x74, 0x71, 0xcb, 0x72, 0x72, 0x1b, 0x43, + 0xbb, 0xfd, 0xda, 0x6b, 0xce, 0xf6, 0x71, 0xc9, 0xed, 0xb8, 0x01, 0x9d, 0x3a, 0x8b, 0x01, 0x9d, + 0x3e, 0xd5, 0x78, 0xb6, 0xa1, 0xc0, 0xa5, 0x79, 0x96, 0xd1, 0x61, 0xf9, 0xc6, 0xf2, 0x70, 0xb7, + 0x7b, 0xc2, 0xc2, 0x07, 0xb3, 0x13, 0xd0, 0x50, 0xc1, 0x13, 0x07, 0x8a, 0x9e, 0xf2, 0x02, 0x55, + 0x80, 0x39, 0x5c, 0x7e, 0x3a, 0xed, 0x4a, 0x06, 0xfb, 0x23, 0xa4, 0xa2, 0x56, 0x42, 0xde, 0x87, + 0xf1, 0x16, 0x6d, 0xab, 0x50, 0xf3, 0x5b, 0x43, 0x3f, 0xe9, 0x87, 0x6a, 0x64, 0x7d, 0xeb, 0x4a, + 0x7d, 0x1d, 0x05, 0x2a, 0xd9, 0x8f, 0x8a, 0x92, 0xe6, 0x46, 0x28, 0x1b, 0x4d, 0x59, 0xfc, 0x20, + 0xf8, 0x18, 0x28, 0x6b, 0x5a, 0x85, 0xc9, 0x03, 0xa7, 0xdb, 0xef, 0xa9, 0x18, 0xb5, 0x7c, 0x63, + 0x21, 0x6b, 0xb5, 0x1f, 0x48, 0x91, 0xc8, 0x08, 0x04, 0xbf, 0x39, 0x86, 0x6d, 0xc9, 0x6f, 0xe4, + 0x60, 0x46, 0x1c, 0x1d, 0xbd, 0x0f, 0x78, 0x85, 0x8c, 0xb0, 0x53, 0xef, 0x73, 0xe6, 0x45, 0x3b, + 0xec, 0x39, 0xa5, 0x76, 0x66, 0x23, 0xa1, 0x01, 0x53, 0x1a, 0x89, 0x0b, 0x45, 0x6e, 0xb5, 0x98, + 0x49, 0x3d, 0x5e, 0x99, 0x3f, 0x37, 0xed, 0x91, 0x53, 0xa9, 0xb0, 0x51, 0x6b, 0x21, 0xbf, 0x29, + 0x4b, 0x7d, 0x55, 0xb1, 0xbb, 0xfa, 0x00, 0xe1, 0xd2, 0x79, 0x7e, 0x80, 0x30, 0x1f, 0xd4, 0xf9, + 0x26, 0x34, 0x60, 0x5a, 0x25, 0xb9, 0x07, 0x97, 0x45, 0x4c, 0x73, 0xc0, 0xd2, 0x95, 0x69, 0x97, + 0xe5, 0x0b, 0xc2, 0xf3, 0x27, 0xc7, 0xd5, 0xcb, 0xf5, 0x2c, 0x01, 0xcc, 0x6e, 0x47, 0x3e, 0x82, + 0x69, 0x2f, 0xee, 0xda, 0x57, 0x9e, 0x1b, 0xe1, 0xf9, 0x3a, 0x11, 0x24, 0x04, 0x39, 0x90, 0x04, + 0x09, 0x93, 0xba, 0xc8, 0x1b, 0x50, 0x76, 0x95, 0xa5, 0xb2, 0x78, 0xaf, 0x72, 0x45, 0x8e, 0x41, + 0xde, 0xa8, 0xdb, 0x11, 0x19, 0xe3, 0x32, 0xe4, 0x3e, 0x94, 0x7d, 0xa7, 0xcb, 0x3c, 0x95, 0x6a, + 0xaf, 0xc8, 0xc5, 0x5f, 0xcc, 0xda, 0xc9, 0x3b, 0x5a, 0x2c, 0x4a, 0xe4, 0x46, 0x34, 0x8e, 0x71, + 0x1c, 0x11, 0x21, 0x86, 0x75, 0x93, 0x9e, 0x0c, 0x87, 0x9f, 0x4f, 0x46, 0x88, 0xcd, 0x38, 0x13, + 0x93, 0xb2, 0x22, 0xe6, 0x73, 0x3d, 0xcb, 0xf1, 0x2c, 0xff, 0x68, 0xb9, 0x4b, 0x39, 0x97, 0x00, + 0x0b, 0x12, 0x40, 0xc7, 0x7c, 0xdb, 0x69, 0x01, 0x1c, 0x6c, 0x23, 0x5c, 0xb5, 0x90, 0x58, 0x79, + 0x21, 0x72, 0xd5, 0xc2, 0xb6, 0xa8, 0xb9, 0xa7, 0x14, 0xf3, 0x5c, 0x1d, 0xa6, 0x98, 0x87, 0xb4, + 0xe0, 0x2a, 0xed, 0xfb, 0x4e, 0x4f, 0x10, 0x92, 0x4d, 0x76, 0x9c, 0x7d, 0x66, 0x57, 0xae, 0xc9, + 0xbb, 0xea, 0xda, 0xc9, 0x71, 0xf5, 0x6a, 0xfd, 0x0b, 0xe4, 0xf0, 0x0b, 0x51, 0x48, 0x0f, 0x8a, + 0x4c, 0x15, 0x24, 0x55, 0xbe, 0x32, 0xc2, 0x25, 0x91, 0xac, 0x6a, 0x0a, 0x26, 0x28, 0xa4, 0xa1, + 0x56, 0x41, 0x76, 0xa0, 0xdc, 0x71, 0xb8, 0x5f, 0xef, 0x5a, 0x94, 0x33, 0x5e, 0x79, 0x51, 0xee, + 0x93, 0xcc, 0xfb, 0xed, 0x56, 0x28, 0x16, 0x6d, 0x93, 0x5b, 0x51, 0x4b, 0x8c, 0xc3, 0x10, 0x26, + 0x83, 0xa3, 0xbe, 0x5c, 0x35, 0xc7, 0xf6, 0xd9, 0x87, 0x7e, 0x65, 0x51, 0x8e, 0xe5, 0x95, 0x2c, + 0xe4, 0x6d, 0xa7, 0xd5, 0x4c, 0x4a, 0x07, 0xa7, 0x3c, 0x45, 0xc4, 0x34, 0x26, 0x79, 0x13, 0xa6, + 0x5c, 0xa7, 0xd5, 0x74, 0x99, 0xb9, 0x4d, 0x7d, 0xb3, 0x53, 0xa9, 0x26, 0x1f, 0x0a, 0xb6, 0x63, + 0x3c, 0x4c, 0x48, 0x2e, 0xbc, 0x07, 0x17, 0x07, 0xfc, 0xa9, 0x27, 0x7a, 0x55, 0xf9, 0xd3, 0x1c, + 0xc4, 0xdd, 0xd9, 0x73, 0xf7, 0xfb, 0xd7, 0xe1, 0xa2, 0x2a, 0x0b, 0x16, 0x97, 0x6d, 0xb7, 0xef, + 0x87, 0x51, 0x72, 0x2c, 0x3f, 0x82, 0x69, 0x01, 0x1c, 0x6c, 0x63, 0xfc, 0x59, 0x0e, 0xa6, 0x13, + 0xe6, 0xfb, 0xdc, 0x23, 0xc2, 0x35, 0x20, 0x3d, 0xcb, 0xf3, 0x1c, 0x2f, 0xb8, 0x03, 0x37, 0xc5, + 0x5e, 0xe6, 0xea, 0x93, 0x02, 0x59, 0x90, 0xb1, 0x39, 0xc0, 0xc5, 0x8c, 0x16, 0xc6, 0x5f, 0xe6, + 0x20, 0x4a, 0xc0, 0xe9, 0x2a, 0xa4, 0xdc, 0xa9, 0x55, 0x48, 0xaf, 0x42, 0xf1, 0x11, 0x77, 0xec, + 0xed, 0xa8, 0x56, 0x49, 0x4f, 0xe8, 0xed, 0xe6, 0xbd, 0x2d, 0x29, 0xa9, 0x25, 0xa4, 0xf4, 0x07, + 0x6b, 0x56, 0xd7, 0x1f, 0xac, 0xe8, 0xb9, 0xfd, 0x8b, 0x01, 0x1d, 0xb5, 0x04, 0x59, 0x82, 0x92, + 0xce, 0xf9, 0xaa, 0x50, 0x52, 0x4f, 0x82, 0x4e, 0x78, 0x62, 0x24, 0x63, 0xfc, 0x68, 0x0c, 0x8a, + 0xff, 0xdf, 0xbe, 0x8f, 0xd8, 0x4f, 0x7d, 0x1f, 0xb1, 0x3c, 0x62, 0x1a, 0xf9, 0x8b, 0xbe, 0x8d, + 0x30, 0x3e, 0xcd, 0xc1, 0xd4, 0x33, 0xfc, 0x44, 0x61, 0x37, 0xf9, 0x89, 0xc2, 0x3b, 0x23, 0x0d, + 0xed, 0x94, 0xcf, 0x13, 0xfe, 0x66, 0x3e, 0x1a, 0x92, 0x98, 0x56, 0x62, 0x43, 0x29, 0x3c, 0xe0, + 0x61, 0x6a, 0xfe, 0x9d, 0x91, 0x82, 0xc2, 0x68, 0x53, 0x86, 0x14, 0x8e, 0x91, 0x0a, 0x72, 0x03, + 0x80, 0x09, 0xcb, 0x16, 0xe4, 0xed, 0xc6, 0x92, 0x99, 0xeb, 0x55, 0xcd, 0xc1, 0x98, 0xd4, 0xb3, + 0x4f, 0x38, 0x64, 0x5f, 0xd1, 0x13, 0x4f, 0xe5, 0x8a, 0xbe, 0x7a, 0xee, 0x57, 0xf4, 0x8b, 0x4f, + 0xff, 0x8a, 0x8e, 0x05, 0x24, 0xf9, 0x11, 0x02, 0x92, 0x8f, 0xe0, 0x52, 0xf0, 0xe7, 0x72, 0x97, + 0x5a, 0x3d, 0xbd, 0x5f, 0x54, 0x39, 0xd1, 0x57, 0x33, 0x2f, 0x66, 0xe6, 0x71, 0x8b, 0xfb, 0xcc, + 0xf6, 0x1f, 0x44, 0x2d, 0xa3, 0xb7, 0xe8, 0x07, 0x19, 0x70, 0x98, 0xa9, 0x24, 0xed, 0xc1, 0x4e, + 0x9e, 0xc1, 0x83, 0xfd, 0x61, 0x0e, 0x2e, 0xd3, 0xac, 0xaf, 0x1a, 0x55, 0x1e, 0xe3, 0xf6, 0x48, + 0xf1, 0x44, 0x02, 0x51, 0xc5, 0x03, 0x59, 0x2c, 0xcc, 0xee, 0x03, 0x79, 0x39, 0x0a, 0x49, 0x4b, + 0x72, 0x53, 0x65, 0x07, 0x93, 0xdf, 0x4f, 0xa7, 0x82, 0x40, 0xce, 0x76, 0x73, 0x64, 0x83, 0x7d, + 0x0e, 0xe9, 0xa0, 0xf2, 0x08, 0xe9, 0xa0, 0x54, 0x78, 0x31, 0x75, 0x4e, 0xe1, 0x85, 0x0d, 0x73, + 0x56, 0x8f, 0xb6, 0xd9, 0x76, 0xbf, 0xdb, 0x0d, 0xb2, 0xdf, 0xbc, 0x32, 0x2d, 0xb1, 0x33, 0x6b, + 0x40, 0x45, 0xb8, 0xd7, 0x0d, 0xee, 0x47, 0xfd, 0x20, 0x14, 0x3d, 0xd8, 0x6c, 0xa4, 0x90, 0x70, + 0x00, 0x5b, 0x6c, 0x4b, 0xe1, 0xb6, 0x6e, 0x31, 0x5f, 0xcc, 0xb6, 0xcc, 0x94, 0xa8, 0xaf, 0xb7, + 0x6f, 0x45, 0x64, 0x8c, 0xcb, 0x90, 0x3b, 0x50, 0x6a, 0xd9, 0x5c, 0x7d, 0x90, 0x35, 0x2b, 0xad, + 0xd4, 0x6b, 0xc2, 0xb6, 0xad, 0x6c, 0x35, 0xf5, 0x47, 0x58, 0x57, 0x07, 0xff, 0x7b, 0x8a, 0x9a, + 0xe6, 0x63, 0xd4, 0x9e, 0x6c, 0x4a, 0x30, 0x55, 0x10, 0x1d, 0xa4, 0x36, 0xae, 0x9d, 0xe2, 0x21, + 0xaf, 0x6c, 0x85, 0xf5, 0xdb, 0xd3, 0x4a, 0x9d, 0x2a, 0x73, 0x8e, 0x10, 0xc8, 0x2b, 0x50, 0x70, + 0xec, 0xd5, 0x0f, 0x2d, 0xbf, 0x72, 0x31, 0x99, 0xfd, 0xbe, 0x27, 0xa9, 0xa8, 0xb8, 0xe4, 0x3e, + 0x5c, 0xf1, 0xfd, 0xae, 0x0a, 0x6d, 0xeb, 0x7b, 0x3e, 0xf3, 0xc2, 0xa2, 0x07, 0x59, 0xb8, 0x92, + 0x0f, 0xbe, 0xdc, 0xda, 0xd9, 0xb9, 0x9b, 0x25, 0x82, 0xa7, 0xb5, 0x3d, 0x3d, 0xe8, 0x9e, 0x1f, + 0x32, 0xe8, 0x8e, 0xc7, 0x79, 0x97, 0xbe, 0x30, 0xce, 0x1b, 0x88, 0x4b, 0x2f, 0x3f, 0x41, 0x5c, + 0xfa, 0xbe, 0x2c, 0xed, 0x58, 0x5f, 0x56, 0x31, 0xfd, 0x5b, 0xc3, 0xa5, 0x12, 0x05, 0x42, 0xf0, + 0xc2, 0x27, 0xff, 0xc4, 0x00, 0x93, 0x6c, 0xc3, 0x25, 0xd7, 0x69, 0x0d, 0x84, 0xb5, 0x32, 0x88, + 0x8f, 0xd5, 0xf5, 0x6c, 0x67, 0xc8, 0x60, 0x66, 0x4b, 0x69, 0x4b, 0x23, 0x7a, 0xa5, 0x22, 0x27, + 0x26, 0xb0, 0xa5, 0x11, 0x19, 0xe3, 0x32, 0xe9, 0x28, 0xef, 0xf9, 0xa7, 0x16, 0xe5, 0x2d, 0x3c, + 0x83, 0x28, 0xef, 0x85, 0x67, 0x17, 0xe5, 0x7d, 0x56, 0x84, 0x99, 0xd4, 0x77, 0x88, 0xba, 0xaa, + 0x2a, 0x77, 0xd6, 0xaa, 0xaa, 0x44, 0xd9, 0xd3, 0xd8, 0x53, 0x2d, 0x7b, 0x1a, 0x3f, 0xf7, 0xb2, + 0xa7, 0x58, 0x79, 0xd7, 0xc4, 0x97, 0x94, 0x77, 0xd5, 0x61, 0xd6, 0x74, 0x7a, 0xae, 0xfc, 0x82, + 0x42, 0x15, 0xf9, 0x04, 0x0f, 0xf1, 0xfa, 0xa9, 0x73, 0x39, 0xc9, 0xc6, 0xb4, 0x3c, 0xe1, 0x90, + 0xb7, 0x65, 0xc3, 0xc2, 0x08, 0xa5, 0xa1, 0xc9, 0x05, 0x93, 0x17, 0xa5, 0xaa, 0xce, 0xd4, 0x6e, + 0x7a, 0xa0, 0x3e, 0xd0, 0x25, 0x1c, 0x8d, 0xd9, 0x64, 0x39, 0x1e, 0xaf, 0x94, 0xa4, 0xfe, 0x5f, + 0x3a, 0x0f, 0xfd, 0xc9, 0xda, 0x3f, 0xd5, 0x93, 0xe8, 0xf5, 0x37, 0xc9, 0xc5, 0x74, 0x4f, 0x88, + 0x07, 0xcf, 0xb9, 0x59, 0x6e, 0x18, 0x57, 0xaf, 0x4a, 0x5f, 0xe4, 0x0c, 0x2e, 0x2a, 0x2d, 0xcf, + 0x65, 0x3a, 0x72, 0x1c, 0x4f, 0x41, 0x8e, 0xd7, 0x8e, 0x15, 0x9f, 0x56, 0xed, 0xd8, 0xc2, 0x51, + 0x50, 0x96, 0x7a, 0x6a, 0x45, 0xeb, 0xfd, 0x64, 0x95, 0xf9, 0x7b, 0x43, 0xfe, 0x87, 0x45, 0x61, + 0xe1, 0x6b, 0xbc, 0x9a, 0xf6, 0xd7, 0x73, 0x70, 0x29, 0x6b, 0x59, 0x32, 0x7a, 0xd1, 0x4c, 0xf6, + 0x62, 0xb4, 0x70, 0x2d, 0x6e, 0x5a, 0xfe, 0x2d, 0x1f, 0x0b, 0x0e, 0x7d, 0xe6, 0xfe, 0xf4, 0xe5, + 0x78, 0xa8, 0x97, 0xe3, 0xc4, 0x97, 0xc2, 0xf9, 0x67, 0xf8, 0xa5, 0x70, 0x61, 0x88, 0x2f, 0x85, + 0x27, 0x9f, 0xe5, 0x97, 0xc2, 0xc5, 0x33, 0x7e, 0x29, 0x5c, 0x7a, 0xfa, 0x5f, 0x0a, 0x7f, 0x9e, + 0x83, 0xb9, 0x74, 0xe1, 0xf2, 0x33, 0x48, 0x92, 0xed, 0x27, 0x92, 0x64, 0x1b, 0x23, 0x19, 0xf3, + 0xb0, 0xdb, 0xa7, 0x25, 0xcb, 0x8c, 0x1f, 0xe7, 0x60, 0xa0, 0x38, 0xfb, 0x19, 0xe4, 0xb1, 0x1e, + 0x25, 0xf3, 0x58, 0xab, 0xe7, 0x32, 0xc8, 0x53, 0xf2, 0x59, 0xff, 0x9d, 0x31, 0xc4, 0xff, 0x95, + 0xbc, 0x56, 0xc2, 0xb4, 0x8d, 0x3d, 0x7d, 0xd3, 0xd6, 0xa8, 0x7d, 0xf2, 0xf9, 0xe2, 0x85, 0x4f, + 0x3f, 0x5f, 0xbc, 0xf0, 0xd9, 0xe7, 0x8b, 0x17, 0x3e, 0x3e, 0x59, 0xcc, 0x7d, 0x72, 0xb2, 0x98, + 0xfb, 0xf4, 0x64, 0x31, 0xf7, 0xd9, 0xc9, 0x62, 0xee, 0xc7, 0x27, 0x8b, 0xb9, 0xdf, 0xfb, 0x97, + 0xc5, 0x0b, 0xbf, 0x5c, 0x0c, 0x71, 0xff, 0x27, 0x00, 0x00, 0xff, 0xff, 0xbd, 0x1e, 0x71, 0x13, + 0x49, 0x51, 0x00, 0x00, } func (m *ArchiveStrategy) Marshal() (dAtA []byte, err error) { @@ -2270,6 +2304,16 @@ func (m *CronWorkflow) MarshalToSizedBuffer(dAtA []byte) (int, error) { i = encodeVarintGenerated(dAtA, i, uint64(size)) } i-- + dAtA[i] = 0x22 + { + size, err := m.Status.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- dAtA[i] = 0x1a { size, err := m.Spec.MarshalToSizedBuffer(dAtA[:i]) @@ -2361,6 +2405,19 @@ func (m *CronWorkflowOptions) MarshalToSizedBuffer(dAtA []byte) (int, error) { _ = i var l int _ = l + if m.StartingDeadlineSeconds != nil { + i = encodeVarintGenerated(dAtA, i, uint64(*m.StartingDeadlineSeconds)) + i-- + dAtA[i] = 0x30 + } + i-- + if m.Suspend { + dAtA[i] = 1 + } else { + dAtA[i] = 0 + } + i-- + dAtA[i] = 0x28 i -= len(m.ConcurrencyPolicy) copy(dAtA[i:], m.ConcurrencyPolicy) i = encodeVarintGenerated(dAtA, i, uint64(len(m.ConcurrencyPolicy))) @@ -2384,6 +2441,39 @@ func (m *CronWorkflowOptions) MarshalToSizedBuffer(dAtA []byte) (int, error) { return len(dAtA) - i, nil } +func (m *CronWorkflowStatus) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *CronWorkflowStatus) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *CronWorkflowStatus) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + { + size, err := m.LastScheduledTime.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil +} + func (m *DAGTask) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) @@ -5400,6 +5490,8 @@ func (m *CronWorkflow) Size() (n int) { n += 1 + l + sovGenerated(uint64(l)) l = m.Spec.Size() n += 1 + l + sovGenerated(uint64(l)) + l = m.Status.Size() + n += 1 + l + sovGenerated(uint64(l)) l = m.Options.Size() n += 1 + l + sovGenerated(uint64(l)) return n @@ -5436,6 +5528,21 @@ func (m *CronWorkflowOptions) Size() (n int) { n += 1 + l + sovGenerated(uint64(l)) l = len(m.ConcurrencyPolicy) n += 1 + l + sovGenerated(uint64(l)) + n += 2 + if m.StartingDeadlineSeconds != nil { + n += 1 + sovGenerated(uint64(*m.StartingDeadlineSeconds)) + } + return n +} + +func (m *CronWorkflowStatus) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = m.LastScheduledTime.Size() + n += 1 + l + sovGenerated(uint64(l)) return n } @@ -6583,6 +6690,7 @@ func (this *CronWorkflow) String() string { s := strings.Join([]string{`&CronWorkflow{`, `ObjectMeta:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.ObjectMeta), "ObjectMeta", "v11.ObjectMeta", 1), `&`, ``, 1) + `,`, `Spec:` + strings.Replace(strings.Replace(this.Spec.String(), "WorkflowSpec", "WorkflowSpec", 1), `&`, ``, 1) + `,`, + `Status:` + strings.Replace(strings.Replace(this.Status.String(), "CronWorkflowStatus", "CronWorkflowStatus", 1), `&`, ``, 1) + `,`, `Options:` + strings.Replace(strings.Replace(this.Options.String(), "CronWorkflowOptions", "CronWorkflowOptions", 1), `&`, ``, 1) + `,`, `}`, }, "") @@ -6613,6 +6721,18 @@ func (this *CronWorkflowOptions) String() string { `RuntimeNamespace:` + fmt.Sprintf("%v", this.RuntimeNamespace) + `,`, `RuntimeGenerateName:` + fmt.Sprintf("%v", this.RuntimeGenerateName) + `,`, `ConcurrencyPolicy:` + fmt.Sprintf("%v", this.ConcurrencyPolicy) + `,`, + `Suspend:` + fmt.Sprintf("%v", this.Suspend) + `,`, + `StartingDeadlineSeconds:` + valueToStringGenerated(this.StartingDeadlineSeconds) + `,`, + `}`, + }, "") + return s +} +func (this *CronWorkflowStatus) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&CronWorkflowStatus{`, + `LastScheduledTime:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.LastScheduledTime), "Time", "v11.Time", 1), `&`, ``, 1) + `,`, `}`, }, "") return s @@ -8705,6 +8825,39 @@ func (m *CronWorkflow) Unmarshal(dAtA []byte) error { } iNdEx = postIndex case 3: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Status", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.Status.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 4: if wireType != 2 { return fmt.Errorf("proto: wrong wireType = %d for field Options", wireType) } @@ -9038,6 +9191,132 @@ func (m *CronWorkflowOptions) Unmarshal(dAtA []byte) error { } m.ConcurrencyPolicy = k8s_io_api_batch_v2alpha1.ConcurrencyPolicy(dAtA[iNdEx:postIndex]) iNdEx = postIndex + case 5: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field Suspend", wireType) + } + var v int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + v |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + m.Suspend = bool(v != 0) + case 6: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field StartingDeadlineSeconds", wireType) + } + var v int64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + v |= int64(b&0x7F) << shift + if b < 0x80 { + break + } + } + m.StartingDeadlineSeconds = &v + default: + iNdEx = preIndex + skippy, err := skipGenerated(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *CronWorkflowStatus) 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 ErrIntOverflowGenerated + } + 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: CronWorkflowStatus: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: CronWorkflowStatus: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field LastScheduledTime", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.LastScheduledTime.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex default: iNdEx = preIndex skippy, err := skipGenerated(dAtA[iNdEx:]) diff --git a/pkg/apis/workflow/v1alpha1/generated.proto b/pkg/apis/workflow/v1alpha1/generated.proto index 3024ebea61b0..d49ca8b96164 100644 --- a/pkg/apis/workflow/v1alpha1/generated.proto +++ b/pkg/apis/workflow/v1alpha1/generated.proto @@ -131,7 +131,9 @@ message CronWorkflow { optional WorkflowSpec spec = 2; - optional CronWorkflowOptions options = 3; + optional CronWorkflowStatus status = 3; + + optional CronWorkflowOptions options = 4; } // CronWorkflowList is list of CronWorkflow resources @@ -154,8 +156,20 @@ message CronWorkflowOptions { // RuntimeGenerateName is the name generator the Workflow will be run with. Mutually exclusive with RuntimeName optional string runtimeGenerateName = 3; - // ConcurrencyPolicy is the name generator the Workflow will be run with. Mutually exclusive with RuntimeName + // ConcurrencyPolicy is the K8s-style concurrency policy that will be used optional string concurrencyPolicy = 4; + + // Suspend is a flag that will stop new CronWorkflows from running if set to true + optional bool suspend = 5; + + // StartingDeadlineSeconds is the K8s-style deadline that will limit the time a CronWorkflow will be run after its + // original scheduled time if it is missed. + optional int64 startingDeadlineSeconds = 6; +} + +message CronWorkflowStatus { + // LastScheduleTime is the last time the CronWorkflow was scheduled + optional k8s.io.apimachinery.pkg.apis.meta.v1.Time lastScheduledTime = 1; } // DAGTask represents a node in the graph during DAG execution diff --git a/pkg/apis/workflow/v1alpha1/openapi_generated.go b/pkg/apis/workflow/v1alpha1/openapi_generated.go index 27cea7bc42fe..f2b1a461eb7b 100644 --- a/pkg/apis/workflow/v1alpha1/openapi_generated.go +++ b/pkg/apis/workflow/v1alpha1/openapi_generated.go @@ -24,6 +24,7 @@ func GetOpenAPIDefinitions(ref common.ReferenceCallback) map[string]common.OpenA "github.com/argoproj/argo/pkg/apis/workflow/v1alpha1.CronWorkflow": schema_pkg_apis_workflow_v1alpha1_CronWorkflow(ref), "github.com/argoproj/argo/pkg/apis/workflow/v1alpha1.CronWorkflowList": schema_pkg_apis_workflow_v1alpha1_CronWorkflowList(ref), "github.com/argoproj/argo/pkg/apis/workflow/v1alpha1.CronWorkflowOptions": schema_pkg_apis_workflow_v1alpha1_CronWorkflowOptions(ref), + "github.com/argoproj/argo/pkg/apis/workflow/v1alpha1.CronWorkflowStatus": schema_pkg_apis_workflow_v1alpha1_CronWorkflowStatus(ref), "github.com/argoproj/argo/pkg/apis/workflow/v1alpha1.DAGTask": schema_pkg_apis_workflow_v1alpha1_DAGTask(ref), "github.com/argoproj/argo/pkg/apis/workflow/v1alpha1.DAGTemplate": schema_pkg_apis_workflow_v1alpha1_DAGTemplate(ref), "github.com/argoproj/argo/pkg/apis/workflow/v1alpha1.ExecutorConfig": schema_pkg_apis_workflow_v1alpha1_ExecutorConfig(ref), @@ -451,17 +452,22 @@ func schema_pkg_apis_workflow_v1alpha1_CronWorkflow(ref common.ReferenceCallback Ref: ref("github.com/argoproj/argo/pkg/apis/workflow/v1alpha1.WorkflowSpec"), }, }, + "status": { + SchemaProps: spec.SchemaProps{ + Ref: ref("github.com/argoproj/argo/pkg/apis/workflow/v1alpha1.CronWorkflowStatus"), + }, + }, "options": { SchemaProps: spec.SchemaProps{ Ref: ref("github.com/argoproj/argo/pkg/apis/workflow/v1alpha1.CronWorkflowOptions"), }, }, }, - Required: []string{"spec", "options"}, + Required: []string{"spec", "status", "options"}, }, }, Dependencies: []string{ - "github.com/argoproj/argo/pkg/apis/workflow/v1alpha1.CronWorkflowOptions", "github.com/argoproj/argo/pkg/apis/workflow/v1alpha1.WorkflowSpec", "k8s.io/apimachinery/pkg/apis/meta/v1.ObjectMeta"}, + "github.com/argoproj/argo/pkg/apis/workflow/v1alpha1.CronWorkflowOptions", "github.com/argoproj/argo/pkg/apis/workflow/v1alpha1.CronWorkflowStatus", "github.com/argoproj/argo/pkg/apis/workflow/v1alpha1.WorkflowSpec", "k8s.io/apimachinery/pkg/apis/meta/v1.ObjectMeta"}, } } @@ -542,11 +548,25 @@ func schema_pkg_apis_workflow_v1alpha1_CronWorkflowOptions(ref common.ReferenceC }, "concurrencyPolicy": { SchemaProps: spec.SchemaProps{ - Description: "ConcurrencyPolicy is the name generator the Workflow will be run with. Mutually exclusive with RuntimeName", + Description: "ConcurrencyPolicy is the K8s-style concurrency policy that will be used", Type: []string{"string"}, Format: "", }, }, + "suspend": { + SchemaProps: spec.SchemaProps{ + Description: "Suspend is a flag that will stop new CronWorkflows from running if set to true", + Type: []string{"boolean"}, + Format: "", + }, + }, + "startingDeadlineSeconds": { + SchemaProps: spec.SchemaProps{ + Description: "StartingDeadlineSeconds is the K8s-style deadline that will limit the time a CronWorkflow will be run after its original scheduled time if it is missed.", + Type: []string{"integer"}, + Format: "int64", + }, + }, }, Required: []string{"schedule", "runtimeNamespace", "runtimeGenerateName"}, }, @@ -554,6 +574,26 @@ func schema_pkg_apis_workflow_v1alpha1_CronWorkflowOptions(ref common.ReferenceC } } +func schema_pkg_apis_workflow_v1alpha1_CronWorkflowStatus(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "lastScheduledTime": { + SchemaProps: spec.SchemaProps{ + Description: "LastScheduleTime is the last time the CronWorkflow was scheduled", + Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.Time"), + }, + }, + }, + }, + }, + Dependencies: []string{ + "k8s.io/apimachinery/pkg/apis/meta/v1.Time"}, + } +} + func schema_pkg_apis_workflow_v1alpha1_DAGTask(ref common.ReferenceCallback) common.OpenAPIDefinition { return common.OpenAPIDefinition{ Schema: spec.Schema{ diff --git a/pkg/apis/workflow/v1alpha1/zz_generated.deepcopy.go b/pkg/apis/workflow/v1alpha1/zz_generated.deepcopy.go index 836a997288d4..28a40674a8bf 100644 --- a/pkg/apis/workflow/v1alpha1/zz_generated.deepcopy.go +++ b/pkg/apis/workflow/v1alpha1/zz_generated.deepcopy.go @@ -226,7 +226,8 @@ func (in *CronWorkflow) DeepCopyInto(out *CronWorkflow) { out.TypeMeta = in.TypeMeta in.ObjectMeta.DeepCopyInto(&out.ObjectMeta) in.Spec.DeepCopyInto(&out.Spec) - out.Options = in.Options + in.Status.DeepCopyInto(&out.Status) + in.Options.DeepCopyInto(&out.Options) return } @@ -284,6 +285,11 @@ func (in *CronWorkflowList) DeepCopyObject() runtime.Object { // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. func (in *CronWorkflowOptions) DeepCopyInto(out *CronWorkflowOptions) { *out = *in + if in.StartingDeadlineSeconds != nil { + in, out := &in.StartingDeadlineSeconds, &out.StartingDeadlineSeconds + *out = new(int64) + **out = **in + } return } @@ -297,6 +303,23 @@ func (in *CronWorkflowOptions) DeepCopy() *CronWorkflowOptions { return out } +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *CronWorkflowStatus) DeepCopyInto(out *CronWorkflowStatus) { + *out = *in + in.LastScheduledTime.DeepCopyInto(&out.LastScheduledTime) + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new CronWorkflowStatus. +func (in *CronWorkflowStatus) DeepCopy() *CronWorkflowStatus { + if in == nil { + return nil + } + out := new(CronWorkflowStatus) + in.DeepCopyInto(out) + return out +} + // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. func (in *DAGTask) DeepCopyInto(out *DAGTask) { *out = *in diff --git a/workflow/cron/controller.go b/workflow/cron/controller.go index 0c4b830fd4a5..7aeafd4f2d3b 100644 --- a/workflow/cron/controller.go +++ b/workflow/cron/controller.go @@ -10,7 +10,6 @@ import ( "github.com/pkg/errors" "github.com/robfig/cron" log "github.com/sirupsen/logrus" - "k8s.io/apimachinery/pkg/labels" "k8s.io/client-go/kubernetes" "k8s.io/client-go/tools/cache" "sync" @@ -52,12 +51,6 @@ func (cc *Controller) Run(ctx context.Context) { cc.wfCronInformer = cc.newCronWorkflowInformer() cc.addCronWorkflowInformerHandler() - // Get outstanding CronWorkflows - err := cc.parseOutstandingCronWorkflows() - if err != nil { - log.Fatalf("Error: %s", err) - } - cc.cron.Start() defer cc.cron.Stop() @@ -66,23 +59,6 @@ func (cc *Controller) Run(ctx context.Context) { <-ctx.Done() } -func (cc *Controller) parseOutstandingCronWorkflows() error { - log.Infof("Parsing outstanding CronWorkflows") - - cronWorkflows, err := cc.wfCronInformer.Lister().CronWorkflows(cc.namespace).List(labels.Everything()) - if err != nil { - return errors.Wrap(err, "Error parsing existing CronWorkflow") - } - - for _, cronWorkflow := range cronWorkflows { - err := cc.startCronWorkflow(cronWorkflow) - if err != nil { - return errors.Wrap(err, "Error parsing existing CronWorkflow") - } - } - return nil -} - func (cc *Controller) startCronWorkflow(cronWorkflow *v1alpha1.CronWorkflow) error { cc.cronLock.Lock() defer cc.cronLock.Unlock() @@ -94,12 +70,14 @@ func (cc *Controller) startCronWorkflow(cronWorkflow *v1alpha1.CronWorkflow) err cc.cron.Remove(entryId) delete(cc.nameEntryIDMap, cronWorkflow.Name) } - // TODO: Should we make a deep copy of the cronWorkflow? // TODO: Almost sure the wfClientset should be passed as reference and not value - cronWorkflowJob, err := NewCronWorkflowJob(cronWorkflow, cc.wfClientset) + + cronWfIf := cc.wfClientset.ArgoprojV1alpha1().CronWorkflows(cc.namespace) + cronWorkflowJob, err := NewCronWorkflowJob(cronWorkflow, cc.wfClientset, cronWfIf) if err != nil { return err } + entryId, err := cc.cron.AddJob(cronWorkflow.Options.Schedule, cronWorkflowJob) if err != nil { return errors.Wrap(err, "Unable to add CronWorkflow") diff --git a/workflow/cron/cron_workflow_job.go b/workflow/cron/cron_workflow_job.go index b6c28287cd59..63cd65fcf12e 100644 --- a/workflow/cron/cron_workflow_job.go +++ b/workflow/cron/cron_workflow_job.go @@ -2,10 +2,10 @@ package cron import ( "fmt" - "github.com/argoproj/argo/errors" "github.com/argoproj/argo/pkg/apis/workflow" "github.com/argoproj/argo/pkg/apis/workflow/v1alpha1" "github.com/argoproj/argo/pkg/client/clientset/versioned" + typed "github.com/argoproj/argo/pkg/client/clientset/versioned/typed/workflow/v1alpha1" "github.com/argoproj/argo/workflow/common" "github.com/argoproj/argo/workflow/util" "github.com/prometheus/common/log" @@ -13,82 +13,114 @@ import ( v1 "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/apimachinery/pkg/labels" "k8s.io/apimachinery/pkg/selection" + "time" ) -type CronWorkflowJob struct { +type CronWorkflowWrapper struct { // CronWorkflow is the CronWorkflow to be run - jobName string - cronWf *v1alpha1.Workflow - options v1alpha1.CronWorkflowOptions + name string + cronWf *v1alpha1.CronWorkflow wfClientset versioned.Interface + cronWfIf typed.CronWorkflowInterface } -func NewCronWorkflowJob(cronWorkflow *v1alpha1.CronWorkflow, wfClientset versioned.Interface) (*CronWorkflowJob, error) { - wf, err := castToWorkflow(cronWorkflow) - if err != nil { - return nil, errors.InternalWrapError(err, "Unable to create CronWorkflowJob") - } - return &CronWorkflowJob{ - jobName: cronWorkflow.ObjectMeta.Name, - cronWf: wf, - options: cronWorkflow.Options, +func NewCronWorkflowJob(cronWorkflow *v1alpha1.CronWorkflow, wfClientset versioned.Interface, cronWfIf typed.CronWorkflowInterface) (*CronWorkflowWrapper, error) { + return &CronWorkflowWrapper{ + name: cronWorkflow.ObjectMeta.Name, + cronWf: cronWorkflow, wfClientset: wfClientset, + cronWfIf: cronWfIf, }, nil } -func (job *CronWorkflowJob) Run() { - log.Infof("Running %s", job.jobName) - runtimeNamespace := job.options.RuntimeNamespace +func (cronWfWrp *CronWorkflowWrapper) Run() { + log.Infof("Running %s", cronWfWrp.name) + + if cronWfWrp.cronWf.Options.Suspend { + log.Infof("%s is suspended, skipping execution", cronWfWrp.name) + return + } - wfClient := job.wfClientset.ArgoprojV1alpha1().Workflows(runtimeNamespace) + runtimeNamespace := cronWfWrp.cronWf.Options.RuntimeNamespace + wfClient := cronWfWrp.wfClientset.ArgoprojV1alpha1().Workflows(runtimeNamespace) - if job.options.ConcurrencyPolicy != "" { - switch job.options.ConcurrencyPolicy { + if cronWfWrp.cronWf.Options.ConcurrencyPolicy != "" { + switch cronWfWrp.cronWf.Options.ConcurrencyPolicy { + case v2alpha1.AllowConcurrent, "": + // Do nothing case v2alpha1.ForbidConcurrent: - labelSelector := labels.NewSelector() - req, _ := labels.NewRequirement(common.LabelCronWorkflowParent, selection.Equals, []string{job.cronWf.Name}) - labelSelector.Add(*req) - wfList, _ := job.wfClientset.ArgoprojV1alpha1().Workflows(runtimeNamespace).List(v1.ListOptions{ - LabelSelector: labelSelector.String(), - }) - for _, wf := range wfList.Items { - if wf.Status.Phase == v1alpha1.NodeRunning { - log.Infof("%s has ConcurrencyPolicy: Forbid and has an active Workflow so it was not run", job.jobName) - return - } + runningWorkflows, err := cronWfWrp.getRunningWorkflows() + if err != nil { + log.Errorf("Error in running CronWorkflow %s: %s", cronWfWrp.name, err) + return + } + log.Infof("%v", runningWorkflows) + if len(runningWorkflows) > 0 { + log.Infof("%s has ConcurrencyPolicy: Forbid and has an active Workflow so it was not run", cronWfWrp.name) + return } case v2alpha1.ReplaceConcurrent: - labelSelector := labels.NewSelector() - req, _ := labels.NewRequirement(common.LabelCronWorkflowParent, selection.Equals, []string{job.cronWf.Name}) - labelSelector.Add(*req) - wfList, _ := job.wfClientset.ArgoprojV1alpha1().Workflows(runtimeNamespace).List(v1.ListOptions{ - LabelSelector: labelSelector.String(), - }) - for _, wf := range wfList.Items { - if wf.Status.Phase == v1alpha1.NodeRunning { - log.Infof("%s has ConcurrencyPolicy: Replace and has an active Workflow %s", job.jobName, wf.Name) - log.Infof("Stopping %s...", wf.Name) - err := util.TerminateWorkflow(wfClient, wf.Name) - if err != nil { - log.Errorf("Error in stopping workflow %s: %s", wf.Name, err) - return - } + runningWorkflows, err := cronWfWrp.getRunningWorkflows() + if err != nil { + log.Errorf("Error in running CronWorkflow %s: %s", cronWfWrp.name, err) + return + } + for _, wf := range runningWorkflows { + log.Infof("%s has ConcurrencyPolicy: Replace and has active Workflows. Stopping %s...", cronWfWrp.name, wf.Name) + err := util.TerminateWorkflow(wfClient, wf.Name) + if err != nil { + log.Errorf("Error stopping workflow %s: %s", wf.Name, err) + return } } + default: + log.Errorf("Invalid ConcurrencyPolicy: %s", cronWfWrp.cronWf.Options.ConcurrencyPolicy) + return } } - // TODO: Is this the best way to submit Workflows? + wf, err := castToWorkflow(cronWfWrp.cronWf) + if err != nil { + log.Errorf("Unable to create Workflow for CronWorkflow %s", cronWfWrp.name) + return + } + // TODO: SubmitOpts is currently always nil - _, err := util.SubmitWorkflow(wfClient, job.wfClientset, runtimeNamespace, job.cronWf, &util.SubmitOpts{}) + _, err = util.SubmitWorkflow(wfClient, cronWfWrp.wfClientset, runtimeNamespace, wf, &util.SubmitOpts{}) + if err != nil { + log.Errorf("Failed to run CronWorkflow: %v", err) + } + + cronWfWrp.cronWf.Status.LastScheduledTime = &v1.Time{Time: time.Now().UTC()} + _, err = cronWfWrp.cronWfIf.Update(cronWfWrp.cronWf) + if err != nil { + log.Errorf("Failed to run update CronWorkflow: %v", err) + } + log.Infof("Created %s", cronWfWrp.cronWf.ObjectMeta.Name) +} + +func (cronWfWrp *CronWorkflowWrapper) getRunningWorkflows() ([]v1alpha1.Workflow, error) { + labelSelector := labels.NewSelector() + req, err := labels.NewRequirement(common.LabelCronWorkflowParent, selection.Equals, []string{cronWfWrp.cronWf.Name}) + if err != nil { + return nil, err + } + labelSelector = labelSelector.Add(*req) + req, err = labels.NewRequirement(common.LabelKeyPhase, selection.Equals, []string{string(v1alpha1.NodeRunning)}) + if err != nil { + return nil, err + } + labelSelector = labelSelector.Add(*req) + wfList, err := cronWfWrp.wfClientset.ArgoprojV1alpha1().Workflows(cronWfWrp.cronWf.Options.RuntimeNamespace).List(v1.ListOptions{ + LabelSelector: labelSelector.String(), + }) if err != nil { - log.Fatalf("Failed to run CronWorkflow: %v", err) + return nil, err } - log.Infof("Created %s", job.cronWf.ObjectMeta.Name) + return wfList.Items, nil } func castToWorkflow(cronWf *v1alpha1.CronWorkflow) (*v1alpha1.Workflow, error) { - // TODO: Overall, is this the best way to create the actual Workflow object? newTypeMeta := v1.TypeMeta{ Kind: workflow.WorkflowKind, APIVersion: cronWf.TypeMeta.APIVersion, From 96790cd105fc4ee4da740f0a657b821a71c2f0d4 Mon Sep 17 00:00:00 2001 From: Simon Behar Date: Tue, 12 Nov 2019 14:27:58 -0800 Subject: [PATCH 10/44] Minor --- workflow/config/config.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/workflow/config/config.go b/workflow/config/config.go index 3ed164378b20..4409faecbbde 100644 --- a/workflow/config/config.go +++ b/workflow/config/config.go @@ -38,7 +38,7 @@ type WorkflowControllerConfig struct { // ArtifactRepository contains the default location of an artifact repository for container artifacts ArtifactRepository ArtifactRepository `json:"artifactRepository,omitempty"` - // RuntimeNamespace is a label selector filter to limit the controller's watch to a specific namespace + // Namespace is a label selector filter to limit the controller's watch to a specific namespace Namespace string `json:"namespace,omitempty"` // InstanceID is a label selector to limit the controller's watch to a specific instance. It From 29165bf3fb09e47f7a199a8e54be05c01c746d70 Mon Sep 17 00:00:00 2001 From: Simon Behar Date: Tue, 12 Nov 2019 17:26:01 -0800 Subject: [PATCH 11/44] WIP: StartingDeadlineSeconds now works --- workflow/cron/controller.go | 29 +++++++++++++++++++++++++---- 1 file changed, 25 insertions(+), 4 deletions(-) diff --git a/workflow/cron/controller.go b/workflow/cron/controller.go index 7aeafd4f2d3b..78911813d27a 100644 --- a/workflow/cron/controller.go +++ b/workflow/cron/controller.go @@ -7,7 +7,6 @@ import ( "github.com/argoproj/argo/pkg/client/clientset/versioned" "github.com/argoproj/argo/pkg/client/informers/externalversions" extv1alpha1 "github.com/argoproj/argo/pkg/client/informers/externalversions/workflow/v1alpha1" - "github.com/pkg/errors" "github.com/robfig/cron" log "github.com/sirupsen/logrus" "k8s.io/client-go/kubernetes" @@ -77,11 +76,33 @@ func (cc *Controller) startCronWorkflow(cronWorkflow *v1alpha1.CronWorkflow) err if err != nil { return err } - - entryId, err := cc.cron.AddJob(cronWorkflow.Options.Schedule, cronWorkflowJob) + cronSchedule, err := cron.ParseStandard(cronWorkflow.Options.Schedule) if err != nil { - return errors.Wrap(err, "Unable to add CronWorkflow") + return fmt.Errorf("could not parse schedule '%s': %w", cronWorkflow.Options.Schedule, err) + } + + // If this CronWorkflow has been run before, check if we have missed any scheduled executions + if cronWorkflow.Status.LastScheduledTime != nil { + now := time.Now() + var missedExecutionTime time.Time + nextScheduledRunTime := cronSchedule.Next(cronWorkflow.Status.LastScheduledTime.Time) + // Workflow should have ran + for nextScheduledRunTime.Before(now) { + missedExecutionTime = nextScheduledRunTime + nextScheduledRunTime = cronSchedule.Next(cronWorkflow.Status.LastScheduledTime.Time) + } + // We missed the latest execution time + if !missedExecutionTime.IsZero() { + log.Infof("%s missed an execution at %s", cronWorkflow.Name, missedExecutionTime.Format("Mon Jan _2 15:04:05 2006")) + // If StartingDeadlineSeconds is not set, or we are still within the deadline window, run the Workflow + if cronWorkflow.Options.StartingDeadlineSeconds == nil || now.Before(missedExecutionTime.Add(time.Duration(*cronWorkflow.Options.StartingDeadlineSeconds) * time.Second)) { + cronWorkflowJob.Run() + } + } } + + + entryId := cc.cron.Schedule(cronSchedule, cronWorkflowJob) cc.nameEntryIDMap[cronWorkflow.Name] = entryId log.Infof("CronWorkflow %s added", cronWorkflow.Name) From 8ef1f610e3548b1ddd4a8b60ec1658672cb37b32 Mon Sep 17 00:00:00 2001 From: Simon Behar Date: Thu, 14 Nov 2019 07:46:19 -0800 Subject: [PATCH 12/44] WIP: Fixed startingDeadlineSeconds --- pkg/apis/workflow/v1alpha1/generated.pb.go | 486 +++++++++--------- .../v1alpha1/zz_generated.deepcopy.go | 5 +- workflow/cron/controller.go | 4 +- workflow/cron/cron_workflow_job.go | 1 - 4 files changed, 253 insertions(+), 243 deletions(-) diff --git a/pkg/apis/workflow/v1alpha1/generated.pb.go b/pkg/apis/workflow/v1alpha1/generated.pb.go index 44e6665f3c4a..c374291cf759 100644 --- a/pkg/apis/workflow/v1alpha1/generated.pb.go +++ b/pkg/apis/workflow/v1alpha1/generated.pb.go @@ -14,6 +14,7 @@ import ( k8s_io_api_batch_v2alpha1 "k8s.io/api/batch/v2alpha1" k8s_io_api_core_v1 "k8s.io/api/core/v1" v1 "k8s.io/api/core/v1" + v11 "k8s.io/apimachinery/pkg/apis/meta/v1" math "math" math_bits "math/bits" @@ -1527,12 +1528,12 @@ func init() { } var fileDescriptor_c23edafa7e7ea072 = []byte{ - // 4900 bytes of a gzipped FileDescriptorProto + // 4902 bytes of a gzipped FileDescriptorProto 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xec, 0x5c, 0x4d, 0x6c, 0x64, 0x57, 0x56, 0xee, 0xb2, 0x5d, 0xe5, 0xaa, 0x53, 0xfe, 0xeb, 0xeb, 0xee, 0x74, 0xc5, 0xe9, 0xb8, 0x7a, 0x5e, 0x94, 0xd0, 0xc3, 0x24, 0xe5, 0xa4, 0x7b, 0x06, 0x32, 0x09, 0x49, 0xa6, 0xca, 0x7f, 0xed, 0xee, 0xb6, 0xdb, 0x9c, 0x72, 0x77, 0x33, 0x64, 0xc4, 0x70, 0xfd, 0xea, 0xba, 0xea, 0xb5, 0xab, - 0xde, 0x7b, 0x79, 0xf7, 0x95, 0x1d, 0x2b, 0x0b, 0x02, 0x02, 0xc1, 0x08, 0x8d, 0x04, 0x1b, 0x18, + 0xde, 0x7b, 0x79, 0xf7, 0x95, 0x1d, 0x2b, 0x0b, 0x02, 0x62, 0x04, 0x08, 0x8d, 0x04, 0x1b, 0x18, 0x31, 0x1b, 0xc4, 0x02, 0x36, 0x6c, 0xd8, 0x02, 0x1a, 0x24, 0xc4, 0x22, 0x62, 0x43, 0xc4, 0x86, 0x2c, 0x90, 0x35, 0x31, 0x1b, 0x10, 0x48, 0x48, 0x6c, 0x90, 0x7a, 0x85, 0xee, 0x7d, 0xf7, 0xdd, 0xf7, 0x53, 0xcf, 0x89, 0xbb, 0xca, 0xdd, 0x08, 0x66, 0x56, 0xed, 0x3a, 0xe7, 0xdc, 0xef, 0xdc, @@ -1580,7 +1581,7 @@ var fileDescriptor_c23edafa7e7ea072 = []byte{ 0xa0, 0x64, 0x3a, 0xf6, 0x9e, 0xd5, 0xde, 0xa4, 0xae, 0x32, 0x4c, 0xda, 0xa2, 0x2d, 0x87, 0x0c, 0x8c, 0x64, 0xc8, 0x8b, 0x30, 0xbe, 0xcf, 0x8e, 0x94, 0x85, 0x2a, 0x2b, 0xd1, 0xf1, 0x3b, 0xec, 0x08, 0x05, 0xdd, 0xf8, 0x51, 0x0e, 0xe6, 0x33, 0x26, 0x57, 0x34, 0xeb, 0x7b, 0x5d, 0xa5, 0x41, - 0x37, 0xbb, 0x8f, 0x77, 0x51, 0xd0, 0xc9, 0x6f, 0xe7, 0x60, 0x36, 0x36, 0xdb, 0xf5, 0xbe, 0x32, + 0x37, 0xbb, 0x8f, 0x77, 0x51, 0xd0, 0xc9, 0x6f, 0xe5, 0x60, 0x36, 0x36, 0xdb, 0xf5, 0xbe, 0x32, 0x82, 0xc3, 0x9f, 0xee, 0x04, 0x56, 0xe3, 0x8a, 0xd2, 0x38, 0x9b, 0x62, 0x60, 0x5a, 0xab, 0xf1, 0x4f, 0xf2, 0xd6, 0x4d, 0xd0, 0x08, 0x85, 0x99, 0x3e, 0x67, 0x9e, 0x30, 0xd1, 0x4d, 0x66, 0x7a, 0xcc, 0x57, 0x17, 0xf0, 0xcb, 0xb5, 0xe0, 0x6a, 0x17, 0xbd, 0xa8, 0x09, 0x2f, 0xa3, 0x76, 0xf0, @@ -1610,231 +1611,231 @@ var fileDescriptor_c23edafa7e7ea072 = []byte{ 0xde, 0xe7, 0x2e, 0xb3, 0x5b, 0xf2, 0x06, 0x2e, 0x46, 0x1b, 0xab, 0x19, 0x90, 0x31, 0xe4, 0x93, 0xfb, 0x70, 0x85, 0xfb, 0xc2, 0xc0, 0xda, 0xed, 0x15, 0x46, 0x5b, 0x5d, 0xcb, 0x16, 0xe6, 0xce, 0xb1, 0x5b, 0xc1, 0x35, 0x3a, 0xde, 0x78, 0xe1, 0xe4, 0xb8, 0x7a, 0xa5, 0x99, 0x2d, 0x82, 0xa7, - 0xb5, 0x35, 0xbe, 0x97, 0x03, 0x32, 0x78, 0xa6, 0x08, 0x87, 0x8b, 0x5d, 0xca, 0xfd, 0x70, 0xfd, - 0x5a, 0x3b, 0x96, 0xf2, 0xb5, 0xcb, 0x37, 0x7e, 0xf6, 0x6c, 0x5b, 0x57, 0xb4, 0x68, 0x3c, 0x1f, - 0x4e, 0xde, 0xdd, 0x34, 0x18, 0x0e, 0xe2, 0x1b, 0x7f, 0x54, 0x80, 0xc9, 0x95, 0xfa, 0xfa, 0x0e, - 0xe5, 0xfb, 0x67, 0xf0, 0xef, 0x5f, 0x85, 0xa2, 0xcf, 0x7a, 0x6e, 0x97, 0xfa, 0xe1, 0x06, 0xd2, - 0xdb, 0x6e, 0x47, 0xd1, 0x51, 0x4b, 0x10, 0x47, 0x04, 0x2b, 0x2a, 0x5a, 0x52, 0x06, 0xe8, 0xdd, - 0x21, 0x6f, 0x43, 0x85, 0x12, 0x8f, 0x56, 0x14, 0x09, 0x23, 0x1d, 0x84, 0x43, 0x39, 0x54, 0x8e, - 0x6c, 0x4f, 0x59, 0xa0, 0x21, 0xa3, 0xcc, 0x08, 0x27, 0x70, 0xac, 0x62, 0x04, 0x8c, 0x6b, 0x21, - 0x5f, 0x87, 0xa9, 0x16, 0x13, 0xdb, 0x85, 0xd9, 0xa6, 0xc5, 0x78, 0x25, 0x7f, 0x6d, 0x5c, 0xcc, - 0xcb, 0xc9, 0x71, 0x75, 0x6a, 0x25, 0x46, 0xc7, 0x84, 0x14, 0x79, 0x04, 0xa5, 0x43, 0xcb, 0xef, - 0xc8, 0xc3, 0x5e, 0x29, 0x48, 0x23, 0xf2, 0xcd, 0xa1, 0x3a, 0x2a, 0x10, 0xa2, 0x69, 0x79, 0x18, - 0x62, 0x62, 0x04, 0x2f, 0x7c, 0x24, 0xf1, 0x43, 0x86, 0x94, 0xd2, 0x3f, 0x2b, 0x25, 0x1b, 0x48, - 0x06, 0x46, 0x32, 0x84, 0xc3, 0x94, 0xf8, 0xd1, 0x64, 0x1f, 0xf4, 0x99, 0x6d, 0x32, 0x19, 0x39, - 0x0c, 0x1b, 0x68, 0x86, 0x20, 0xc1, 0x8c, 0x3c, 0x8c, 0xc1, 0x62, 0x42, 0x89, 0xd8, 0x7d, 0x87, - 0x1d, 0x66, 0x57, 0x4a, 0xc9, 0xdd, 0xf7, 0xb0, 0xc3, 0x6c, 0x94, 0x1c, 0xe2, 0x00, 0x98, 0xda, - 0x01, 0xa8, 0xc0, 0x08, 0xe1, 0x45, 0xe4, 0x47, 0x34, 0x66, 0xc4, 0x0d, 0x1d, 0xfd, 0xc6, 0x98, - 0x0a, 0xe3, 0x6f, 0x73, 0x50, 0x16, 0x87, 0x23, 0xdc, 0xd0, 0xaf, 0x40, 0xc1, 0xa7, 0x5e, 0x5b, - 0xf9, 0x4f, 0xa5, 0xe8, 0x16, 0xdc, 0x91, 0x54, 0x54, 0x5c, 0x42, 0x21, 0xef, 0x53, 0xbe, 0x1f, - 0xde, 0x0e, 0xbf, 0x30, 0x54, 0x1f, 0xd5, 0xa9, 0x8c, 0x2e, 0x06, 0xf1, 0x8b, 0x63, 0x80, 0x4c, - 0xae, 0x43, 0x51, 0xf8, 0x2e, 0x6b, 0x94, 0x07, 0xe1, 0x50, 0xb1, 0x31, 0x25, 0x4e, 0xe1, 0x9a, - 0xa2, 0xa1, 0xe6, 0x1a, 0xdf, 0x81, 0x99, 0xd5, 0x0f, 0x99, 0xd9, 0xf7, 0x1d, 0x2f, 0x70, 0x88, - 0xc9, 0x6d, 0x20, 0x9c, 0x79, 0x07, 0x96, 0xc9, 0xea, 0xa6, 0xe9, 0xf4, 0x6d, 0x7f, 0x2b, 0x3a, - 0xf5, 0x0b, 0x4a, 0x1b, 0x69, 0x0e, 0x48, 0x60, 0x46, 0x2b, 0xe3, 0xcf, 0x27, 0xa0, 0x1c, 0x0b, - 0xa9, 0xc4, 0x2a, 0x7a, 0xcc, 0x75, 0xd2, 0x36, 0x44, 0x38, 0xed, 0x28, 0x39, 0xc2, 0x86, 0x78, - 0xec, 0xc0, 0xe2, 0x22, 0x70, 0x4f, 0xd9, 0x10, 0x54, 0x74, 0xd4, 0x12, 0xa4, 0x0a, 0xf9, 0x16, - 0x73, 0xfd, 0x8e, 0x1c, 0xe4, 0x44, 0xa3, 0x24, 0x26, 0x62, 0x45, 0x10, 0x30, 0xa0, 0x0b, 0x81, - 0x3d, 0xe6, 0x9b, 0x9d, 0xca, 0x84, 0x3c, 0x77, 0x52, 0x60, 0x4d, 0x10, 0x30, 0xa0, 0x67, 0x38, - 0xbf, 0xf9, 0xa7, 0xef, 0xfc, 0x16, 0xce, 0xd9, 0xf9, 0x25, 0x2e, 0xcc, 0x73, 0xde, 0xd9, 0xf6, - 0xac, 0x03, 0xea, 0x33, 0xd9, 0x58, 0xea, 0x99, 0x7c, 0x12, 0x3d, 0x57, 0xc4, 0xfd, 0xdc, 0x6c, - 0xde, 0x4a, 0xa3, 0x60, 0x16, 0x34, 0x69, 0xc2, 0x65, 0xcb, 0xe6, 0xcc, 0xec, 0x7b, 0x6c, 0xa3, - 0x6d, 0x3b, 0x1e, 0xbb, 0xe5, 0x70, 0x01, 0xa7, 0xf2, 0x08, 0x2f, 0xaa, 0x45, 0xbb, 0xbc, 0x91, - 0x25, 0x84, 0xd9, 0x6d, 0x8d, 0xbf, 0xcf, 0xc1, 0x54, 0x3c, 0x8a, 0x24, 0x1c, 0xa0, 0xb3, 0xb2, - 0xd6, 0x0c, 0x76, 0xa6, 0xba, 0xed, 0xde, 0x1b, 0x3a, 0x38, 0x0d, 0x60, 0x22, 0xcf, 0x3b, 0xa2, - 0x61, 0x4c, 0xcd, 0x19, 0xd2, 0x54, 0x2f, 0x41, 0x7e, 0xcf, 0xf1, 0x4c, 0xa6, 0xce, 0x96, 0x3e, - 0x83, 0x6b, 0x82, 0x88, 0x01, 0xcf, 0xf8, 0xd7, 0x1c, 0xc4, 0x34, 0x90, 0x5f, 0x83, 0x69, 0xa1, - 0xe3, 0x8e, 0xb7, 0x9b, 0x18, 0x4d, 0x63, 0xe8, 0xd1, 0x68, 0xa4, 0xc6, 0x65, 0xa5, 0x7f, 0x3a, - 0x41, 0xc6, 0xa4, 0x3e, 0xf2, 0x35, 0x28, 0xd1, 0x56, 0xcb, 0x63, 0x9c, 0xb3, 0xc0, 0xf4, 0x94, - 0x1a, 0xd3, 0xf2, 0xae, 0x0c, 0x89, 0x18, 0xf1, 0xc5, 0x31, 0x14, 0x61, 0xbb, 0xd8, 0xd9, 0xca, - 0x85, 0xd3, 0xc7, 0x50, 0x28, 0x11, 0x74, 0xd4, 0x12, 0xc6, 0xf7, 0x27, 0x20, 0xa9, 0x9b, 0xb4, - 0x60, 0x76, 0xdf, 0xdb, 0x5d, 0x5e, 0xa6, 0x66, 0x67, 0xa8, 0xa0, 0x72, 0x5e, 0x44, 0xb3, 0x77, - 0x92, 0x08, 0x98, 0x86, 0x54, 0x5a, 0xee, 0xb0, 0x23, 0x9f, 0xee, 0x0e, 0x13, 0x57, 0x86, 0x5a, - 0xe2, 0x08, 0x98, 0x86, 0x24, 0xdf, 0x80, 0xf2, 0xbe, 0xb7, 0x1b, 0x1e, 0x72, 0x35, 0x1d, 0xf3, - 0x6a, 0x3a, 0xca, 0x77, 0x22, 0x16, 0xc6, 0xe5, 0xc4, 0x14, 0xee, 0x7b, 0xbb, 0xc8, 0x68, 0x37, - 0xcc, 0x58, 0xea, 0x29, 0xbc, 0xa3, 0xe8, 0xa8, 0x25, 0x88, 0x0b, 0x64, 0x3f, 0x9c, 0x3d, 0x9d, - 0x99, 0x50, 0xb6, 0xe8, 0x7a, 0xd6, 0x68, 0xb4, 0x50, 0x7c, 0x40, 0xcf, 0x09, 0xdb, 0x7c, 0x67, - 0x00, 0x07, 0x33, 0xb0, 0xc9, 0xb7, 0xe1, 0xca, 0xbe, 0xb7, 0xab, 0x0c, 0xf9, 0xb6, 0x67, 0xd9, - 0xa6, 0xe5, 0x26, 0x52, 0x95, 0x55, 0xd5, 0xdd, 0x2b, 0x77, 0xb2, 0xc5, 0xf0, 0xb4, 0xf6, 0xc6, - 0x6b, 0x30, 0x15, 0x4f, 0x75, 0x7d, 0x49, 0x7a, 0xc4, 0xf8, 0x8f, 0x1c, 0x14, 0x36, 0x6c, 0xb7, - 0xff, 0x13, 0x92, 0x35, 0xff, 0x93, 0x09, 0x98, 0x10, 0xae, 0x17, 0xb9, 0x0e, 0x13, 0xfe, 0x91, - 0x1b, 0xdc, 0xad, 0xe3, 0x8d, 0x4b, 0xa1, 0xa1, 0xd9, 0x39, 0x72, 0xd9, 0x63, 0xf5, 0x2f, 0x4a, - 0x09, 0xf2, 0x2e, 0x14, 0xec, 0x7e, 0xef, 0x01, 0xed, 0x2a, 0xa3, 0xf4, 0x4a, 0xe8, 0x5a, 0x6c, - 0x49, 0xea, 0xe3, 0xe3, 0xea, 0x25, 0x66, 0x9b, 0x4e, 0xcb, 0xb2, 0xdb, 0x4b, 0x8f, 0xb8, 0x63, - 0xd7, 0xb6, 0xfa, 0xbd, 0x5d, 0xe6, 0xa1, 0x6a, 0x25, 0xa2, 0x9a, 0x5d, 0xc7, 0xe9, 0x0a, 0x80, - 0xf1, 0x64, 0x54, 0xd3, 0x08, 0xc8, 0x18, 0xf2, 0x85, 0x17, 0xc3, 0x7d, 0x4f, 0x48, 0x4e, 0x24, - 0xbd, 0x98, 0xa6, 0xa4, 0xa2, 0xe2, 0x92, 0x1e, 0x14, 0x7a, 0xd4, 0x15, 0x72, 0x79, 0x39, 0x65, - 0xab, 0x43, 0xfb, 0xa7, 0xb5, 0x4d, 0x89, 0xb3, 0x6a, 0xfb, 0xde, 0x51, 0xa4, 0x2e, 0x20, 0xa2, - 0x52, 0x42, 0x2c, 0x98, 0xec, 0x5a, 0xdc, 0x17, 0xfa, 0x0a, 0x23, 0xec, 0x0a, 0xa1, 0xef, 0x01, - 0xed, 0xf6, 0x59, 0x34, 0x03, 0x77, 0x03, 0x58, 0x0c, 0xf1, 0x17, 0x8e, 0xa0, 0x1c, 0xeb, 0x11, - 0x99, 0x0b, 0x52, 0x82, 0x72, 0xf3, 0xca, 0x2c, 0x20, 0xd9, 0x81, 0xfc, 0x81, 0xc0, 0x50, 0xc6, - 0x66, 0xc4, 0x9e, 0x60, 0x00, 0xf6, 0xd6, 0xd8, 0x9b, 0xb9, 0xb7, 0x8a, 0x3f, 0xf8, 0xe3, 0xea, - 0x85, 0x8f, 0xff, 0xf9, 0xda, 0x05, 0xe3, 0xef, 0xc6, 0xa1, 0xa4, 0x45, 0xfe, 0x6f, 0xef, 0x14, - 0x2f, 0xb5, 0x53, 0x6e, 0x8f, 0x36, 0x5f, 0x67, 0xda, 0x2e, 0xf5, 0xe4, 0x76, 0x99, 0x6a, 0xfc, - 0x4c, 0x6c, 0xa9, 0x1f, 0x1f, 0x57, 0x2b, 0xc9, 0x49, 0x40, 0x7a, 0xb8, 0xc9, 0x38, 0xa7, 0x6d, - 0x16, 0x6d, 0x83, 0x6f, 0x7e, 0xd9, 0x36, 0xb8, 0x14, 0xdf, 0x06, 0xa5, 0xec, 0x65, 0xfc, 0x78, - 0x1c, 0x8a, 0x9b, 0x61, 0x5a, 0xe8, 0xb7, 0x72, 0x50, 0xa6, 0xb6, 0xed, 0xf8, 0x34, 0xc8, 0x81, - 0x05, 0xe6, 0x6d, 0x6b, 0xa8, 0xe9, 0x08, 0x41, 0x6b, 0xf5, 0x08, 0x30, 0x98, 0x12, 0x7d, 0x33, - 0xc5, 0x38, 0x18, 0xd7, 0x4b, 0x3e, 0x80, 0x42, 0x97, 0xee, 0xb2, 0x6e, 0x68, 0xed, 0x36, 0x46, - 0xeb, 0xc1, 0x5d, 0x89, 0x95, 0x5a, 0x8f, 0x80, 0x88, 0x4a, 0xd1, 0xc2, 0xbb, 0x30, 0x97, 0xee, - 0xe8, 0x93, 0xcc, 0xa8, 0x58, 0x8c, 0x98, 0x9a, 0x27, 0x69, 0x6a, 0xfc, 0x75, 0x09, 0x60, 0xcb, - 0x69, 0x31, 0x95, 0x47, 0x59, 0x80, 0x31, 0xab, 0xa5, 0xae, 0x22, 0x50, 0xbd, 0x1d, 0xdb, 0x58, - 0xc1, 0x31, 0xab, 0xa5, 0x53, 0x1c, 0x63, 0xa7, 0xa6, 0x38, 0xbe, 0x01, 0xe5, 0x96, 0xc5, 0xdd, - 0x2e, 0x3d, 0xda, 0xca, 0xf0, 0x05, 0x56, 0x22, 0x16, 0xc6, 0xe5, 0xc8, 0xab, 0xea, 0xfc, 0x4e, - 0x24, 0xd2, 0x6a, 0xe1, 0xf9, 0x2d, 0x8a, 0xee, 0xc5, 0xce, 0xf0, 0x9b, 0x30, 0x15, 0xa6, 0x10, - 0xa4, 0x96, 0xbc, 0x6c, 0x15, 0x9e, 0xfa, 0xa9, 0x9d, 0x18, 0x0f, 0x13, 0x92, 0xe9, 0x14, 0x47, - 0xe1, 0x99, 0xa4, 0x38, 0x56, 0x60, 0x8e, 0xfb, 0x8e, 0xc7, 0x5a, 0xa1, 0xc4, 0xc6, 0x4a, 0x85, - 0x24, 0xf3, 0x87, 0xcd, 0x14, 0x1f, 0x07, 0x5a, 0x90, 0x6d, 0xb8, 0x14, 0x76, 0x22, 0x3e, 0xc0, - 0xca, 0xbc, 0x44, 0xba, 0xaa, 0x90, 0x2e, 0x3d, 0xcc, 0x90, 0xc1, 0xcc, 0x96, 0xe4, 0x75, 0xc8, - 0xbb, 0x1d, 0xca, 0x99, 0x4a, 0x6a, 0x84, 0xb1, 0x6b, 0x7e, 0x5b, 0x10, 0x1f, 0x1f, 0x57, 0x4b, - 0x62, 0xda, 0xe5, 0x0f, 0x0c, 0x04, 0xc9, 0x0d, 0x80, 0x5d, 0xa7, 0x6f, 0xb7, 0xa8, 0x77, 0xb4, - 0xb1, 0x22, 0x23, 0x99, 0xd8, 0x83, 0x6d, 0x43, 0x73, 0x30, 0x26, 0x25, 0x0c, 0x66, 0x2f, 0x30, - 0x1d, 0x2a, 0x37, 0xa1, 0x0d, 0xa6, 0xb6, 0x28, 0x8a, 0x4f, 0xde, 0x87, 0x92, 0x4c, 0xfa, 0xb1, - 0x56, 0xdd, 0x57, 0x09, 0x8a, 0x27, 0x49, 0xdd, 0x69, 0xaf, 0xa2, 0x19, 0x82, 0x60, 0x84, 0x47, - 0x7e, 0x05, 0x60, 0xcf, 0xb2, 0x2d, 0xde, 0x91, 0xe8, 0xe5, 0x27, 0x46, 0xd7, 0xe3, 0x5c, 0xd3, - 0x28, 0x18, 0x43, 0x14, 0x31, 0x8f, 0xeb, 0xb4, 0x36, 0xb6, 0x2b, 0x53, 0x72, 0x94, 0x3a, 0xe6, - 0xd9, 0x16, 0x44, 0x0c, 0x78, 0xe4, 0x3a, 0x14, 0x5b, 0x94, 0xf5, 0x1c, 0x9b, 0xb5, 0x2a, 0xd3, - 0x51, 0xde, 0x61, 0x45, 0xd1, 0x50, 0x73, 0xc9, 0x77, 0xa1, 0x60, 0x49, 0x97, 0xaf, 0x32, 0x23, - 0xbb, 0xfa, 0xf6, 0x70, 0x97, 0x82, 0x84, 0x68, 0x80, 0xb0, 0x38, 0xc1, 0xdf, 0xa8, 0x60, 0x89, - 0x09, 0x93, 0x4e, 0xdf, 0x97, 0x1a, 0x66, 0xa5, 0x86, 0xe1, 0xf2, 0x2c, 0xf7, 0x02, 0x8c, 0xe0, - 0x01, 0x5d, 0xfd, 0xc0, 0x10, 0x59, 0x8c, 0xd7, 0xec, 0x58, 0xdd, 0x96, 0xc7, 0xec, 0xca, 0x9c, - 0x0c, 0xa9, 0xe4, 0x78, 0x97, 0x15, 0x0d, 0x35, 0x97, 0xfc, 0x3c, 0x4c, 0x3b, 0x7d, 0x5f, 0xee, - 0x1b, 0xb1, 0xed, 0x78, 0xe5, 0xa2, 0x14, 0xbf, 0x28, 0xc2, 0xb6, 0x7b, 0x71, 0x06, 0x26, 0xe5, - 0x8c, 0x19, 0x98, 0x8a, 0x57, 0x9d, 0x18, 0xbf, 0x3f, 0x06, 0x61, 0x3f, 0x7e, 0x12, 0xbc, 0x65, - 0x62, 0x40, 0xc1, 0x63, 0xbc, 0xdf, 0xf5, 0x95, 0xb1, 0x95, 0x6b, 0x8d, 0x92, 0x82, 0x8a, 0x63, - 0x1c, 0xc2, 0xb4, 0xe8, 0x6d, 0xb7, 0xcb, 0xba, 0x4d, 0x9f, 0xb9, 0x9c, 0xec, 0x41, 0x9e, 0x8b, - 0x3f, 0xd4, 0x9c, 0x8c, 0xf8, 0x7e, 0xe6, 0x33, 0x37, 0xda, 0xef, 0x52, 0x01, 0x06, 0xf0, 0xc6, - 0x1f, 0x8c, 0x41, 0x49, 0xcf, 0xd3, 0x19, 0x32, 0xe4, 0x2f, 0xc3, 0x64, 0x8b, 0xed, 0x51, 0x31, - 0x1a, 0xf5, 0xc4, 0x2c, 0xb6, 0xd5, 0x4a, 0x40, 0xc2, 0x90, 0x47, 0xaa, 0xe1, 0x65, 0x16, 0x0c, - 0x59, 0x66, 0xad, 0xe2, 0xbe, 0x22, 0xd9, 0x87, 0x92, 0xfc, 0x63, 0x2d, 0x2c, 0x87, 0x19, 0x76, - 0xdd, 0x1f, 0x84, 0x28, 0x41, 0x2e, 0x40, 0xff, 0xc4, 0x08, 0x3f, 0x55, 0xc6, 0x92, 0x3f, 0x4b, - 0x19, 0x8b, 0xb1, 0x06, 0xc2, 0x30, 0xac, 0x2f, 0x93, 0x77, 0xa0, 0xc8, 0xd5, 0xd6, 0x55, 0xf3, - 0xf2, 0x15, 0xfd, 0x14, 0xa5, 0xe8, 0x8f, 0x8f, 0xab, 0xd3, 0x52, 0x38, 0x24, 0xa0, 0x6e, 0x62, - 0x2c, 0x41, 0x39, 0xf6, 0xec, 0x2f, 0x66, 0x58, 0x3f, 0xd9, 0xc5, 0x66, 0x78, 0x85, 0xfa, 0x14, - 0x25, 0xc7, 0x78, 0x3c, 0x06, 0x73, 0xc8, 0xb8, 0xd3, 0xf7, 0x4c, 0x16, 0xcf, 0xcc, 0x52, 0x53, - 0xd6, 0x02, 0xa5, 0x32, 0xb3, 0x75, 0x49, 0x45, 0xc5, 0x25, 0x6f, 0xc3, 0x74, 0x8f, 0x79, 0x6d, - 0x7d, 0xd8, 0xd4, 0x22, 0xe9, 0xfc, 0xca, 0x66, 0x9c, 0x89, 0x49, 0x59, 0x11, 0xef, 0xf7, 0xa8, - 0x6d, 0xed, 0x31, 0xee, 0xa7, 0x53, 0x26, 0x9b, 0x8a, 0x8e, 0x5a, 0x82, 0xac, 0xc3, 0x45, 0xce, - 0xfc, 0x7b, 0x87, 0x36, 0xf3, 0x90, 0xed, 0x31, 0x4f, 0x66, 0xd2, 0x27, 0xa4, 0xc9, 0xd4, 0x4f, - 0x34, 0xcd, 0xb4, 0x00, 0x0e, 0xb6, 0x91, 0xb7, 0x6f, 0xdf, 0x34, 0x19, 0xe7, 0xcb, 0x8e, 0xdd, - 0xb2, 0x74, 0xc5, 0x53, 0xfc, 0xf6, 0x4d, 0xf1, 0x71, 0xa0, 0x85, 0x40, 0xd9, 0xa3, 0x56, 0xb7, - 0xef, 0xb1, 0x08, 0xa5, 0x90, 0x44, 0x59, 0x4b, 0xf1, 0x71, 0xa0, 0x85, 0xf1, 0x3a, 0x4c, 0x23, - 0xf3, 0xbd, 0x23, 0x3d, 0x27, 0x55, 0xc8, 0x77, 0xad, 0x9e, 0x15, 0x24, 0x7f, 0xf2, 0xc1, 0x46, - 0xbe, 0x2b, 0x08, 0x18, 0xd0, 0x8d, 0x1f, 0xe4, 0x00, 0xa2, 0x6a, 0x1e, 0xb2, 0x0f, 0x45, 0x7e, - 0xb3, 0xd1, 0x37, 0xf7, 0x75, 0xbe, 0x68, 0xc8, 0x67, 0x05, 0x05, 0x12, 0x7b, 0xf7, 0x54, 0x14, - 0xd4, 0x0a, 0xbe, 0xac, 0xd6, 0xe3, 0x2f, 0xc6, 0x41, 0xb7, 0x12, 0x8b, 0xcb, 0xec, 0x96, 0xeb, - 0x58, 0xb6, 0x9f, 0x7e, 0x51, 0x5d, 0x55, 0x74, 0xd4, 0x12, 0x62, 0xbf, 0xed, 0x06, 0x83, 0x18, - 0x4b, 0xee, 0x37, 0xd5, 0x07, 0xc5, 0x15, 0x72, 0x1e, 0x6b, 0x8b, 0xb9, 0x1e, 0x4f, 0xca, 0xa1, - 0xa4, 0xa2, 0xe2, 0x8a, 0x6b, 0x26, 0x4c, 0x98, 0xaa, 0x3d, 0x22, 0xaf, 0x99, 0x30, 0xb7, 0x8a, - 0x9a, 0x4b, 0x3a, 0x30, 0x4b, 0xe5, 0xd2, 0x46, 0x49, 0xe0, 0x27, 0xca, 0x67, 0x47, 0x95, 0x24, - 0x49, 0x14, 0x4c, 0xc3, 0x0a, 0x4d, 0x3c, 0x6a, 0xfe, 0xe4, 0x69, 0x6d, 0xad, 0xa9, 0x99, 0x44, - 0xc1, 0x34, 0xac, 0xf0, 0xb0, 0x3c, 0xa7, 0xcb, 0xea, 0xb8, 0xa5, 0x3c, 0x39, 0xed, 0x61, 0x61, - 0x40, 0xc6, 0x90, 0x6f, 0xfc, 0x4e, 0x0e, 0x66, 0x9a, 0xa6, 0x67, 0xb9, 0xbe, 0x3e, 0xfb, 0x5b, - 0xb2, 0x04, 0xc8, 0xa7, 0xc2, 0xf7, 0x51, 0x7b, 0xea, 0xc5, 0x53, 0xf2, 0x69, 0x81, 0x50, 0xa2, - 0x42, 0x28, 0x20, 0x61, 0x04, 0x21, 0xa3, 0x5e, 0x69, 0x5d, 0xd2, 0x6b, 0xdb, 0x94, 0x54, 0x54, - 0x5c, 0xe3, 0x87, 0x39, 0x28, 0xea, 0xd7, 0xab, 0x97, 0x20, 0x2f, 0x1f, 0x45, 0xd4, 0xde, 0xd1, - 0x97, 0xc9, 0xb2, 0x20, 0x62, 0xc0, 0x13, 0x42, 0xd2, 0x9d, 0x53, 0xc0, 0xb1, 0x1b, 0x87, 0x7a, - 0x3e, 0x06, 0x3c, 0xb1, 0x69, 0x99, 0xdd, 0x52, 0xfb, 0x45, 0x6f, 0xda, 0x55, 0xbb, 0x85, 0x82, - 0x2e, 0x4b, 0x5a, 0x1c, 0xaf, 0x47, 0xfd, 0x74, 0x4c, 0xbe, 0x26, 0xa9, 0xa8, 0xb8, 0xc6, 0xdb, - 0x30, 0xab, 0xde, 0xb3, 0xf5, 0x44, 0x09, 0xdf, 0xad, 0xef, 0x51, 0x6d, 0x26, 0xf3, 0xca, 0x77, - 0x53, 0x34, 0xd4, 0x5c, 0x63, 0x1a, 0xca, 0xb1, 0x32, 0x5b, 0xe3, 0xbf, 0xae, 0x80, 0x7e, 0xdf, - 0xfd, 0xe9, 0x2b, 0xf1, 0x50, 0x21, 0x94, 0xa9, 0xbd, 0xe1, 0xfc, 0xe8, 0xde, 0xb0, 0x5e, 0xf3, - 0x94, 0x47, 0xdc, 0x8e, 0x3c, 0xe2, 0xc2, 0x39, 0x78, 0xc4, 0x51, 0xc5, 0x4d, 0xda, 0x2b, 0xfe, - 0x5e, 0x0e, 0xa6, 0x6c, 0x11, 0x71, 0xab, 0xb3, 0x5e, 0x99, 0x94, 0x5e, 0xd8, 0xbd, 0x91, 0x26, - 0xb1, 0xb6, 0x15, 0x43, 0x0c, 0x92, 0x0d, 0x3a, 0x22, 0x8e, 0xb3, 0x30, 0xa1, 0x9a, 0xac, 0x41, - 0x91, 0xee, 0x89, 0x30, 0xc6, 0x3f, 0x52, 0x0f, 0xd5, 0x57, 0xb3, 0x4e, 0x7f, 0x5d, 0xc9, 0x04, - 0x7b, 0x3e, 0xfc, 0x85, 0xba, 0xad, 0xb8, 0x99, 0x74, 0xc1, 0x50, 0x69, 0x84, 0x9b, 0x29, 0xcc, - 0x9a, 0xc4, 0x9c, 0x03, 0x45, 0x89, 0xd5, 0x0f, 0x19, 0x50, 0x08, 0x02, 0x25, 0x19, 0x25, 0x16, - 0x03, 0x9f, 0x37, 0x08, 0xa2, 0x50, 0x71, 0x48, 0x3b, 0x74, 0x71, 0xcb, 0x72, 0x72, 0x1b, 0x43, - 0xbb, 0xfd, 0xda, 0x6b, 0xce, 0xf6, 0x71, 0xc9, 0xed, 0xb8, 0x01, 0x9d, 0x3a, 0x8b, 0x01, 0x9d, - 0x3e, 0xd5, 0x78, 0xb6, 0xa1, 0xc0, 0xa5, 0x79, 0x96, 0xd1, 0x61, 0xf9, 0xc6, 0xf2, 0x70, 0xb7, - 0x7b, 0xc2, 0xc2, 0x07, 0xb3, 0x13, 0xd0, 0x50, 0xc1, 0x13, 0x07, 0x8a, 0x9e, 0xf2, 0x02, 0x55, - 0x80, 0x39, 0x5c, 0x7e, 0x3a, 0xed, 0x4a, 0x06, 0xfb, 0x23, 0xa4, 0xa2, 0x56, 0x42, 0xde, 0x87, - 0xf1, 0x16, 0x6d, 0xab, 0x50, 0xf3, 0x5b, 0x43, 0x3f, 0xe9, 0x87, 0x6a, 0x64, 0x7d, 0xeb, 0x4a, - 0x7d, 0x1d, 0x05, 0x2a, 0xd9, 0x8f, 0x8a, 0x92, 0xe6, 0x46, 0x28, 0x1b, 0x4d, 0x59, 0xfc, 0x20, - 0xf8, 0x18, 0x28, 0x6b, 0x5a, 0x85, 0xc9, 0x03, 0xa7, 0xdb, 0xef, 0xa9, 0x18, 0xb5, 0x7c, 0x63, - 0x21, 0x6b, 0xb5, 0x1f, 0x48, 0x91, 0xc8, 0x08, 0x04, 0xbf, 0x39, 0x86, 0x6d, 0xc9, 0x6f, 0xe4, - 0x60, 0x46, 0x1c, 0x1d, 0xbd, 0x0f, 0x78, 0x85, 0x8c, 0xb0, 0x53, 0xef, 0x73, 0xe6, 0x45, 0x3b, - 0xec, 0x39, 0xa5, 0x76, 0x66, 0x23, 0xa1, 0x01, 0x53, 0x1a, 0x89, 0x0b, 0x45, 0x6e, 0xb5, 0x98, - 0x49, 0x3d, 0x5e, 0x99, 0x3f, 0x37, 0xed, 0x91, 0x53, 0xa9, 0xb0, 0x51, 0x6b, 0x21, 0xbf, 0x29, - 0x4b, 0x7d, 0x55, 0xb1, 0xbb, 0xfa, 0x00, 0xe1, 0xd2, 0x79, 0x7e, 0x80, 0x30, 0x1f, 0xd4, 0xf9, - 0x26, 0x34, 0x60, 0x5a, 0x25, 0xb9, 0x07, 0x97, 0x45, 0x4c, 0x73, 0xc0, 0xd2, 0x95, 0x69, 0x97, - 0xe5, 0x0b, 0xc2, 0xf3, 0x27, 0xc7, 0xd5, 0xcb, 0xf5, 0x2c, 0x01, 0xcc, 0x6e, 0x47, 0x3e, 0x82, - 0x69, 0x2f, 0xee, 0xda, 0x57, 0x9e, 0x1b, 0xe1, 0xf9, 0x3a, 0x11, 0x24, 0x04, 0x39, 0x90, 0x04, - 0x09, 0x93, 0xba, 0xc8, 0x1b, 0x50, 0x76, 0x95, 0xa5, 0xb2, 0x78, 0xaf, 0x72, 0x45, 0x8e, 0x41, - 0xde, 0xa8, 0xdb, 0x11, 0x19, 0xe3, 0x32, 0xe4, 0x3e, 0x94, 0x7d, 0xa7, 0xcb, 0x3c, 0x95, 0x6a, - 0xaf, 0xc8, 0xc5, 0x5f, 0xcc, 0xda, 0xc9, 0x3b, 0x5a, 0x2c, 0x4a, 0xe4, 0x46, 0x34, 0x8e, 0x71, - 0x1c, 0x11, 0x21, 0x86, 0x75, 0x93, 0x9e, 0x0c, 0x87, 0x9f, 0x4f, 0x46, 0x88, 0xcd, 0x38, 0x13, - 0x93, 0xb2, 0x22, 0xe6, 0x73, 0x3d, 0xcb, 0xf1, 0x2c, 0xff, 0x68, 0xb9, 0x4b, 0x39, 0x97, 0x00, - 0x0b, 0x12, 0x40, 0xc7, 0x7c, 0xdb, 0x69, 0x01, 0x1c, 0x6c, 0x23, 0x5c, 0xb5, 0x90, 0x58, 0x79, - 0x21, 0x72, 0xd5, 0xc2, 0xb6, 0xa8, 0xb9, 0xa7, 0x14, 0xf3, 0x5c, 0x1d, 0xa6, 0x98, 0x87, 0xb4, - 0xe0, 0x2a, 0xed, 0xfb, 0x4e, 0x4f, 0x10, 0x92, 0x4d, 0x76, 0x9c, 0x7d, 0x66, 0x57, 0xae, 0xc9, - 0xbb, 0xea, 0xda, 0xc9, 0x71, 0xf5, 0x6a, 0xfd, 0x0b, 0xe4, 0xf0, 0x0b, 0x51, 0x48, 0x0f, 0x8a, - 0x4c, 0x15, 0x24, 0x55, 0xbe, 0x32, 0xc2, 0x25, 0x91, 0xac, 0x6a, 0x0a, 0x26, 0x28, 0xa4, 0xa1, - 0x56, 0x41, 0x76, 0xa0, 0xdc, 0x71, 0xb8, 0x5f, 0xef, 0x5a, 0x94, 0x33, 0x5e, 0x79, 0x51, 0xee, - 0x93, 0xcc, 0xfb, 0xed, 0x56, 0x28, 0x16, 0x6d, 0x93, 0x5b, 0x51, 0x4b, 0x8c, 0xc3, 0x10, 0x26, - 0x83, 0xa3, 0xbe, 0x5c, 0x35, 0xc7, 0xf6, 0xd9, 0x87, 0x7e, 0x65, 0x51, 0x8e, 0xe5, 0x95, 0x2c, - 0xe4, 0x6d, 0xa7, 0xd5, 0x4c, 0x4a, 0x07, 0xa7, 0x3c, 0x45, 0xc4, 0x34, 0x26, 0x79, 0x13, 0xa6, - 0x5c, 0xa7, 0xd5, 0x74, 0x99, 0xb9, 0x4d, 0x7d, 0xb3, 0x53, 0xa9, 0x26, 0x1f, 0x0a, 0xb6, 0x63, - 0x3c, 0x4c, 0x48, 0x2e, 0xbc, 0x07, 0x17, 0x07, 0xfc, 0xa9, 0x27, 0x7a, 0x55, 0xf9, 0xd3, 0x1c, - 0xc4, 0xdd, 0xd9, 0x73, 0xf7, 0xfb, 0xd7, 0xe1, 0xa2, 0x2a, 0x0b, 0x16, 0x97, 0x6d, 0xb7, 0xef, - 0x87, 0x51, 0x72, 0x2c, 0x3f, 0x82, 0x69, 0x01, 0x1c, 0x6c, 0x63, 0xfc, 0x59, 0x0e, 0xa6, 0x13, - 0xe6, 0xfb, 0xdc, 0x23, 0xc2, 0x35, 0x20, 0x3d, 0xcb, 0xf3, 0x1c, 0x2f, 0xb8, 0x03, 0x37, 0xc5, - 0x5e, 0xe6, 0xea, 0x93, 0x02, 0x59, 0x90, 0xb1, 0x39, 0xc0, 0xc5, 0x8c, 0x16, 0xc6, 0x5f, 0xe6, - 0x20, 0x4a, 0xc0, 0xe9, 0x2a, 0xa4, 0xdc, 0xa9, 0x55, 0x48, 0xaf, 0x42, 0xf1, 0x11, 0x77, 0xec, - 0xed, 0xa8, 0x56, 0x49, 0x4f, 0xe8, 0xed, 0xe6, 0xbd, 0x2d, 0x29, 0xa9, 0x25, 0xa4, 0xf4, 0x07, - 0x6b, 0x56, 0xd7, 0x1f, 0xac, 0xe8, 0xb9, 0xfd, 0x8b, 0x01, 0x1d, 0xb5, 0x04, 0x59, 0x82, 0x92, - 0xce, 0xf9, 0xaa, 0x50, 0x52, 0x4f, 0x82, 0x4e, 0x78, 0x62, 0x24, 0x63, 0xfc, 0x68, 0x0c, 0x8a, - 0xff, 0xdf, 0xbe, 0x8f, 0xd8, 0x4f, 0x7d, 0x1f, 0xb1, 0x3c, 0x62, 0x1a, 0xf9, 0x8b, 0xbe, 0x8d, - 0x30, 0x3e, 0xcd, 0xc1, 0xd4, 0x33, 0xfc, 0x44, 0x61, 0x37, 0xf9, 0x89, 0xc2, 0x3b, 0x23, 0x0d, - 0xed, 0x94, 0xcf, 0x13, 0xfe, 0x66, 0x3e, 0x1a, 0x92, 0x98, 0x56, 0x62, 0x43, 0x29, 0x3c, 0xe0, - 0x61, 0x6a, 0xfe, 0x9d, 0x91, 0x82, 0xc2, 0x68, 0x53, 0x86, 0x14, 0x8e, 0x91, 0x0a, 0x72, 0x03, - 0x80, 0x09, 0xcb, 0x16, 0xe4, 0xed, 0xc6, 0x92, 0x99, 0xeb, 0x55, 0xcd, 0xc1, 0x98, 0xd4, 0xb3, - 0x4f, 0x38, 0x64, 0x5f, 0xd1, 0x13, 0x4f, 0xe5, 0x8a, 0xbe, 0x7a, 0xee, 0x57, 0xf4, 0x8b, 0x4f, - 0xff, 0x8a, 0x8e, 0x05, 0x24, 0xf9, 0x11, 0x02, 0x92, 0x8f, 0xe0, 0x52, 0xf0, 0xe7, 0x72, 0x97, - 0x5a, 0x3d, 0xbd, 0x5f, 0x54, 0x39, 0xd1, 0x57, 0x33, 0x2f, 0x66, 0xe6, 0x71, 0x8b, 0xfb, 0xcc, - 0xf6, 0x1f, 0x44, 0x2d, 0xa3, 0xb7, 0xe8, 0x07, 0x19, 0x70, 0x98, 0xa9, 0x24, 0xed, 0xc1, 0x4e, - 0x9e, 0xc1, 0x83, 0xfd, 0x61, 0x0e, 0x2e, 0xd3, 0xac, 0xaf, 0x1a, 0x55, 0x1e, 0xe3, 0xf6, 0x48, - 0xf1, 0x44, 0x02, 0x51, 0xc5, 0x03, 0x59, 0x2c, 0xcc, 0xee, 0x03, 0x79, 0x39, 0x0a, 0x49, 0x4b, - 0x72, 0x53, 0x65, 0x07, 0x93, 0xdf, 0x4f, 0xa7, 0x82, 0x40, 0xce, 0x76, 0x73, 0x64, 0x83, 0x7d, - 0x0e, 0xe9, 0xa0, 0xf2, 0x08, 0xe9, 0xa0, 0x54, 0x78, 0x31, 0x75, 0x4e, 0xe1, 0x85, 0x0d, 0x73, - 0x56, 0x8f, 0xb6, 0xd9, 0x76, 0xbf, 0xdb, 0x0d, 0xb2, 0xdf, 0xbc, 0x32, 0x2d, 0xb1, 0x33, 0x6b, - 0x40, 0x45, 0xb8, 0xd7, 0x0d, 0xee, 0x47, 0xfd, 0x20, 0x14, 0x3d, 0xd8, 0x6c, 0xa4, 0x90, 0x70, - 0x00, 0x5b, 0x6c, 0x4b, 0xe1, 0xb6, 0x6e, 0x31, 0x5f, 0xcc, 0xb6, 0xcc, 0x94, 0xa8, 0xaf, 0xb7, - 0x6f, 0x45, 0x64, 0x8c, 0xcb, 0x90, 0x3b, 0x50, 0x6a, 0xd9, 0x5c, 0x7d, 0x90, 0x35, 0x2b, 0xad, - 0xd4, 0x6b, 0xc2, 0xb6, 0xad, 0x6c, 0x35, 0xf5, 0x47, 0x58, 0x57, 0x07, 0xff, 0x7b, 0x8a, 0x9a, - 0xe6, 0x63, 0xd4, 0x9e, 0x6c, 0x4a, 0x30, 0x55, 0x10, 0x1d, 0xa4, 0x36, 0xae, 0x9d, 0xe2, 0x21, - 0xaf, 0x6c, 0x85, 0xf5, 0xdb, 0xd3, 0x4a, 0x9d, 0x2a, 0x73, 0x8e, 0x10, 0xc8, 0x2b, 0x50, 0x70, - 0xec, 0xd5, 0x0f, 0x2d, 0xbf, 0x72, 0x31, 0x99, 0xfd, 0xbe, 0x27, 0xa9, 0xa8, 0xb8, 0xe4, 0x3e, - 0x5c, 0xf1, 0xfd, 0xae, 0x0a, 0x6d, 0xeb, 0x7b, 0x3e, 0xf3, 0xc2, 0xa2, 0x07, 0x59, 0xb8, 0x92, - 0x0f, 0xbe, 0xdc, 0xda, 0xd9, 0xb9, 0x9b, 0x25, 0x82, 0xa7, 0xb5, 0x3d, 0x3d, 0xe8, 0x9e, 0x1f, - 0x32, 0xe8, 0x8e, 0xc7, 0x79, 0x97, 0xbe, 0x30, 0xce, 0x1b, 0x88, 0x4b, 0x2f, 0x3f, 0x41, 0x5c, - 0xfa, 0xbe, 0x2c, 0xed, 0x58, 0x5f, 0x56, 0x31, 0xfd, 0x5b, 0xc3, 0xa5, 0x12, 0x05, 0x42, 0xf0, - 0xc2, 0x27, 0xff, 0xc4, 0x00, 0x93, 0x6c, 0xc3, 0x25, 0xd7, 0x69, 0x0d, 0x84, 0xb5, 0x32, 0x88, - 0x8f, 0xd5, 0xf5, 0x6c, 0x67, 0xc8, 0x60, 0x66, 0x4b, 0x69, 0x4b, 0x23, 0x7a, 0xa5, 0x22, 0x27, - 0x26, 0xb0, 0xa5, 0x11, 0x19, 0xe3, 0x32, 0xe9, 0x28, 0xef, 0xf9, 0xa7, 0x16, 0xe5, 0x2d, 0x3c, - 0x83, 0x28, 0xef, 0x85, 0x67, 0x17, 0xe5, 0x7d, 0x56, 0x84, 0x99, 0xd4, 0x77, 0x88, 0xba, 0xaa, - 0x2a, 0x77, 0xd6, 0xaa, 0xaa, 0x44, 0xd9, 0xd3, 0xd8, 0x53, 0x2d, 0x7b, 0x1a, 0x3f, 0xf7, 0xb2, - 0xa7, 0x58, 0x79, 0xd7, 0xc4, 0x97, 0x94, 0x77, 0xd5, 0x61, 0xd6, 0x74, 0x7a, 0xae, 0xfc, 0x82, - 0x42, 0x15, 0xf9, 0x04, 0x0f, 0xf1, 0xfa, 0xa9, 0x73, 0x39, 0xc9, 0xc6, 0xb4, 0x3c, 0xe1, 0x90, - 0xb7, 0x65, 0xc3, 0xc2, 0x08, 0xa5, 0xa1, 0xc9, 0x05, 0x93, 0x17, 0xa5, 0xaa, 0xce, 0xd4, 0x6e, - 0x7a, 0xa0, 0x3e, 0xd0, 0x25, 0x1c, 0x8d, 0xd9, 0x64, 0x39, 0x1e, 0xaf, 0x94, 0xa4, 0xfe, 0x5f, - 0x3a, 0x0f, 0xfd, 0xc9, 0xda, 0x3f, 0xd5, 0x93, 0xe8, 0xf5, 0x37, 0xc9, 0xc5, 0x74, 0x4f, 0x88, - 0x07, 0xcf, 0xb9, 0x59, 0x6e, 0x18, 0x57, 0xaf, 0x4a, 0x5f, 0xe4, 0x0c, 0x2e, 0x2a, 0x2d, 0xcf, - 0x65, 0x3a, 0x72, 0x1c, 0x4f, 0x41, 0x8e, 0xd7, 0x8e, 0x15, 0x9f, 0x56, 0xed, 0xd8, 0xc2, 0x51, - 0x50, 0x96, 0x7a, 0x6a, 0x45, 0xeb, 0xfd, 0x64, 0x95, 0xf9, 0x7b, 0x43, 0xfe, 0x87, 0x45, 0x61, - 0xe1, 0x6b, 0xbc, 0x9a, 0xf6, 0xd7, 0x73, 0x70, 0x29, 0x6b, 0x59, 0x32, 0x7a, 0xd1, 0x4c, 0xf6, - 0x62, 0xb4, 0x70, 0x2d, 0x6e, 0x5a, 0xfe, 0x2d, 0x1f, 0x0b, 0x0e, 0x7d, 0xe6, 0xfe, 0xf4, 0xe5, - 0x78, 0xa8, 0x97, 0xe3, 0xc4, 0x97, 0xc2, 0xf9, 0x67, 0xf8, 0xa5, 0x70, 0x61, 0x88, 0x2f, 0x85, - 0x27, 0x9f, 0xe5, 0x97, 0xc2, 0xc5, 0x33, 0x7e, 0x29, 0x5c, 0x7a, 0xfa, 0x5f, 0x0a, 0x7f, 0x9e, - 0x83, 0xb9, 0x74, 0xe1, 0xf2, 0x33, 0x48, 0x92, 0xed, 0x27, 0x92, 0x64, 0x1b, 0x23, 0x19, 0xf3, - 0xb0, 0xdb, 0xa7, 0x25, 0xcb, 0x8c, 0x1f, 0xe7, 0x60, 0xa0, 0x38, 0xfb, 0x19, 0xe4, 0xb1, 0x1e, - 0x25, 0xf3, 0x58, 0xab, 0xe7, 0x32, 0xc8, 0x53, 0xf2, 0x59, 0xff, 0x9d, 0x31, 0xc4, 0xff, 0x95, - 0xbc, 0x56, 0xc2, 0xb4, 0x8d, 0x3d, 0x7d, 0xd3, 0xd6, 0xa8, 0x7d, 0xf2, 0xf9, 0xe2, 0x85, 0x4f, - 0x3f, 0x5f, 0xbc, 0xf0, 0xd9, 0xe7, 0x8b, 0x17, 0x3e, 0x3e, 0x59, 0xcc, 0x7d, 0x72, 0xb2, 0x98, - 0xfb, 0xf4, 0x64, 0x31, 0xf7, 0xd9, 0xc9, 0x62, 0xee, 0xc7, 0x27, 0x8b, 0xb9, 0xdf, 0xfb, 0x97, - 0xc5, 0x0b, 0xbf, 0x5c, 0x0c, 0x71, 0xff, 0x27, 0x00, 0x00, 0xff, 0xff, 0xbd, 0x1e, 0x71, 0x13, - 0x49, 0x51, 0x00, 0x00, + 0xb5, 0x35, 0xbe, 0x97, 0x03, 0x32, 0x78, 0xa6, 0x88, 0x03, 0x17, 0xbb, 0x94, 0xfb, 0xe1, 0xfa, + 0xb5, 0x76, 0x2c, 0xe5, 0x6b, 0x97, 0x6f, 0xfc, 0xec, 0xd9, 0xb6, 0xae, 0x68, 0xd1, 0xb8, 0x2c, + 0x26, 0xee, 0x6e, 0x1a, 0x08, 0x07, 0xb1, 0x8d, 0x3f, 0x2a, 0xc0, 0xe4, 0x4a, 0x7d, 0x7d, 0x87, + 0xf2, 0xfd, 0x33, 0xf8, 0xf6, 0xaf, 0x42, 0xd1, 0x67, 0x3d, 0xb7, 0x4b, 0xfd, 0x70, 0xf3, 0xe8, + 0x2d, 0xb7, 0xa3, 0xe8, 0xa8, 0x25, 0x88, 0x23, 0x02, 0x15, 0x15, 0x29, 0x29, 0xe3, 0xf3, 0xee, + 0x90, 0x37, 0xa1, 0x42, 0x89, 0x47, 0x2a, 0x8a, 0x84, 0x91, 0x0e, 0xc2, 0xa1, 0x1c, 0x2a, 0x47, + 0xb6, 0xa7, 0xac, 0xcf, 0x90, 0x11, 0x66, 0x84, 0x13, 0x38, 0x55, 0x31, 0x02, 0xc6, 0xb5, 0x90, + 0xaf, 0xc3, 0x54, 0x8b, 0x89, 0xad, 0xc2, 0x6c, 0xd3, 0x62, 0xbc, 0x92, 0xbf, 0x36, 0x2e, 0xe6, + 0xe5, 0xe4, 0xb8, 0x3a, 0xb5, 0x12, 0xa3, 0x63, 0x42, 0x8a, 0x3c, 0x82, 0xd2, 0xa1, 0xe5, 0x77, + 0xe4, 0x41, 0xaf, 0x14, 0xa4, 0x01, 0xf9, 0xe6, 0x50, 0x1d, 0x15, 0x08, 0xd1, 0xb4, 0x3c, 0x0c, + 0x31, 0x31, 0x82, 0x17, 0xfe, 0x91, 0xf8, 0x21, 0xc3, 0x49, 0xe9, 0x9b, 0x95, 0x92, 0x0d, 0x24, + 0x03, 0x23, 0x19, 0xc2, 0x61, 0x4a, 0xfc, 0x68, 0xb2, 0x0f, 0xfa, 0xcc, 0x36, 0x99, 0x8c, 0x1a, + 0x86, 0x0d, 0x32, 0x43, 0x90, 0x60, 0x46, 0x1e, 0xc6, 0x60, 0x31, 0xa1, 0x44, 0xec, 0xbe, 0xc3, + 0x0e, 0xb3, 0x2b, 0xa5, 0xe4, 0xee, 0x7b, 0xd8, 0x61, 0x36, 0x4a, 0x0e, 0x71, 0x00, 0x4c, 0x7d, + 0xf9, 0x57, 0x60, 0x84, 0xd0, 0x22, 0xf2, 0x21, 0x1a, 0x33, 0xe2, 0x76, 0x8e, 0x7e, 0x63, 0x4c, + 0x85, 0xf1, 0xb7, 0x39, 0x28, 0x8b, 0xc3, 0x11, 0x6e, 0xe8, 0x57, 0xa0, 0xe0, 0x53, 0xaf, 0xad, + 0x7c, 0xa7, 0x52, 0x74, 0x03, 0xee, 0x48, 0x2a, 0x2a, 0x2e, 0xa1, 0x90, 0xf7, 0x29, 0xdf, 0x0f, + 0x6f, 0x86, 0x5f, 0x18, 0xaa, 0x8f, 0xea, 0x54, 0x46, 0x97, 0x82, 0xf8, 0xc5, 0x31, 0x40, 0x26, + 0xd7, 0xa1, 0x28, 0xfc, 0x96, 0x35, 0xca, 0x83, 0x50, 0xa8, 0xd8, 0x98, 0x12, 0xa7, 0x70, 0x4d, + 0xd1, 0x50, 0x73, 0x8d, 0xef, 0xc0, 0xcc, 0xea, 0x87, 0xcc, 0xec, 0xfb, 0x8e, 0x17, 0x38, 0xc3, + 0xe4, 0x36, 0x10, 0xce, 0xbc, 0x03, 0xcb, 0x64, 0x75, 0xd3, 0x74, 0xfa, 0xb6, 0xbf, 0x15, 0x9d, + 0xfa, 0x05, 0xa5, 0x8d, 0x34, 0x07, 0x24, 0x30, 0xa3, 0x95, 0xf1, 0xe7, 0x13, 0x50, 0x8e, 0x85, + 0x53, 0x62, 0x15, 0x3d, 0xe6, 0x3a, 0x69, 0x1b, 0x22, 0x1c, 0x76, 0x94, 0x1c, 0x61, 0x43, 0x3c, + 0x76, 0x60, 0x71, 0x11, 0xb4, 0xa7, 0x6c, 0x08, 0x2a, 0x3a, 0x6a, 0x09, 0x52, 0x85, 0x7c, 0x8b, + 0xb9, 0x7e, 0x47, 0x0e, 0x72, 0xa2, 0x51, 0x12, 0x13, 0xb1, 0x22, 0x08, 0x18, 0xd0, 0x85, 0xc0, + 0x1e, 0xf3, 0xcd, 0x4e, 0x65, 0x42, 0x9e, 0x3b, 0x29, 0xb0, 0x26, 0x08, 0x18, 0xd0, 0x33, 0x1c, + 0xdf, 0xfc, 0xd3, 0x77, 0x7c, 0x0b, 0xe7, 0xec, 0xf8, 0x12, 0x17, 0xe6, 0x39, 0xef, 0x6c, 0x7b, + 0xd6, 0x01, 0xf5, 0x99, 0x6c, 0x2c, 0xf5, 0x4c, 0x3e, 0x89, 0x9e, 0x2b, 0xe2, 0x6e, 0x6e, 0x36, + 0x6f, 0xa5, 0x51, 0x30, 0x0b, 0x9a, 0x34, 0xe1, 0xb2, 0x65, 0x73, 0x66, 0xf6, 0x3d, 0xb6, 0xd1, + 0xb6, 0x1d, 0x8f, 0xdd, 0x72, 0xb8, 0x80, 0x53, 0x39, 0x84, 0x17, 0xd5, 0xa2, 0x5d, 0xde, 0xc8, + 0x12, 0xc2, 0xec, 0xb6, 0xc6, 0xdf, 0xe7, 0x60, 0x2a, 0x1e, 0x41, 0x12, 0x0e, 0xd0, 0x59, 0x59, + 0x6b, 0x06, 0x3b, 0x53, 0xdd, 0x74, 0xef, 0x0d, 0x1d, 0x98, 0x06, 0x30, 0x91, 0xd7, 0x1d, 0xd1, + 0x30, 0xa6, 0xe6, 0x0c, 0x29, 0xaa, 0x97, 0x20, 0xbf, 0xe7, 0x78, 0x26, 0x53, 0x67, 0x4b, 0x9f, + 0xc1, 0x35, 0x41, 0xc4, 0x80, 0x67, 0xfc, 0x6b, 0x0e, 0x62, 0x1a, 0xc8, 0xaf, 0xc1, 0xb4, 0xd0, + 0x71, 0xc7, 0xdb, 0x4d, 0x8c, 0xa6, 0x31, 0xf4, 0x68, 0x34, 0x52, 0xe3, 0xb2, 0xd2, 0x3f, 0x9d, + 0x20, 0x63, 0x52, 0x1f, 0xf9, 0x1a, 0x94, 0x68, 0xab, 0xe5, 0x31, 0xce, 0x59, 0x60, 0x7a, 0x4a, + 0x8d, 0x69, 0x79, 0x57, 0x86, 0x44, 0x8c, 0xf8, 0xe2, 0x18, 0x8a, 0x90, 0x5d, 0xec, 0x6c, 0xe5, + 0xbe, 0xe9, 0x63, 0x28, 0x94, 0x08, 0x3a, 0x6a, 0x09, 0xe3, 0xfb, 0x13, 0x90, 0xd4, 0x4d, 0x5a, + 0x30, 0xbb, 0xef, 0xed, 0x2e, 0x2f, 0x53, 0xb3, 0x33, 0x54, 0x40, 0x39, 0x2f, 0x22, 0xd9, 0x3b, + 0x49, 0x04, 0x4c, 0x43, 0x2a, 0x2d, 0x77, 0xd8, 0x91, 0x4f, 0x77, 0x87, 0x89, 0x29, 0x43, 0x2d, + 0x71, 0x04, 0x4c, 0x43, 0x92, 0x6f, 0x40, 0x79, 0xdf, 0xdb, 0x0d, 0x0f, 0xb9, 0x9a, 0x8e, 0x79, + 0x35, 0x1d, 0xe5, 0x3b, 0x11, 0x0b, 0xe3, 0x72, 0x62, 0x0a, 0xf7, 0xbd, 0x5d, 0x64, 0xb4, 0x1b, + 0x66, 0x2b, 0xf5, 0x14, 0xde, 0x51, 0x74, 0xd4, 0x12, 0xc4, 0x05, 0xb2, 0x1f, 0xce, 0x9e, 0xce, + 0x4a, 0x28, 0x5b, 0x74, 0x3d, 0x6b, 0x34, 0x5a, 0x28, 0x3e, 0xa0, 0xe7, 0x84, 0x6d, 0xbe, 0x33, + 0x80, 0x83, 0x19, 0xd8, 0xe4, 0xdb, 0x70, 0x65, 0xdf, 0xdb, 0x55, 0x86, 0x7c, 0xdb, 0xb3, 0x6c, + 0xd3, 0x72, 0x13, 0x69, 0xca, 0xaa, 0xea, 0xee, 0x95, 0x3b, 0xd9, 0x62, 0x78, 0x5a, 0x7b, 0xe3, + 0x35, 0x98, 0x8a, 0xa7, 0xb9, 0xbe, 0x24, 0x35, 0x62, 0xfc, 0x47, 0x0e, 0x0a, 0x1b, 0xb6, 0xdb, + 0xff, 0x09, 0xc9, 0x98, 0xff, 0xc9, 0x04, 0x4c, 0x08, 0xd7, 0x8b, 0x5c, 0x87, 0x09, 0xff, 0xc8, + 0x0d, 0xee, 0xd6, 0xf1, 0xc6, 0xa5, 0xd0, 0xd0, 0xec, 0x1c, 0xb9, 0xec, 0xb1, 0xfa, 0x17, 0xa5, + 0x04, 0x79, 0x17, 0x0a, 0x76, 0xbf, 0xf7, 0x80, 0x76, 0x95, 0x51, 0x7a, 0x25, 0x74, 0x2d, 0xb6, + 0x24, 0xf5, 0xf1, 0x71, 0xf5, 0x12, 0xb3, 0x4d, 0xa7, 0x65, 0xd9, 0xed, 0xa5, 0x47, 0xdc, 0xb1, + 0x6b, 0x5b, 0xfd, 0xde, 0x2e, 0xf3, 0x50, 0xb5, 0x12, 0x11, 0xcd, 0xae, 0xe3, 0x74, 0x05, 0xc0, + 0x78, 0x32, 0xa2, 0x69, 0x04, 0x64, 0x0c, 0xf9, 0xc2, 0x8b, 0xe1, 0xbe, 0x27, 0x24, 0x27, 0x92, + 0x5e, 0x4c, 0x53, 0x52, 0x51, 0x71, 0x49, 0x0f, 0x0a, 0x3d, 0xea, 0x0a, 0xb9, 0xbc, 0x9c, 0xb2, + 0xd5, 0xa1, 0xfd, 0xd3, 0xda, 0xa6, 0xc4, 0x59, 0xb5, 0x7d, 0xef, 0x28, 0x52, 0x17, 0x10, 0x51, + 0x29, 0x21, 0x16, 0x4c, 0x76, 0x2d, 0xee, 0x0b, 0x7d, 0x85, 0x11, 0x76, 0x85, 0xd0, 0xf7, 0x80, + 0x76, 0xfb, 0x2c, 0x9a, 0x81, 0xbb, 0x01, 0x2c, 0x86, 0xf8, 0x0b, 0x47, 0x50, 0x8e, 0xf5, 0x88, + 0xcc, 0x05, 0xe9, 0x40, 0xb9, 0x79, 0x65, 0x06, 0x90, 0xec, 0x40, 0xfe, 0x40, 0x60, 0x28, 0x63, + 0x33, 0x62, 0x4f, 0x30, 0x00, 0x7b, 0x6b, 0xec, 0xcd, 0xdc, 0x5b, 0xc5, 0x1f, 0xfc, 0x71, 0xf5, + 0xc2, 0xc7, 0xff, 0x7c, 0xed, 0x82, 0xf1, 0x77, 0xe3, 0x50, 0xd2, 0x22, 0xff, 0xb7, 0x77, 0x8a, + 0x97, 0xda, 0x29, 0xb7, 0x47, 0x9b, 0xaf, 0x33, 0x6d, 0x97, 0x7a, 0x72, 0xbb, 0x4c, 0x35, 0x7e, + 0x26, 0xb6, 0xd4, 0x8f, 0x8f, 0xab, 0x95, 0xe4, 0x24, 0x20, 0x3d, 0xdc, 0x64, 0x9c, 0xd3, 0x36, + 0x8b, 0xb6, 0xc1, 0x37, 0xbf, 0x6c, 0x1b, 0x5c, 0x8a, 0x6f, 0x83, 0x52, 0xf6, 0x32, 0x7e, 0x3c, + 0x0e, 0xc5, 0xcd, 0x30, 0x25, 0xf4, 0xbd, 0x1c, 0x94, 0xa9, 0x6d, 0x3b, 0x3e, 0x0d, 0xf2, 0x5f, + 0x81, 0x79, 0xdb, 0x1a, 0x6a, 0x3a, 0x42, 0xd0, 0x5a, 0x3d, 0x02, 0x0c, 0xa6, 0x44, 0xdf, 0x4c, + 0x31, 0x0e, 0xc6, 0xf5, 0x92, 0x0f, 0xa0, 0xd0, 0xa5, 0xbb, 0xac, 0x1b, 0x5a, 0xbb, 0x8d, 0xd1, + 0x7a, 0x70, 0x57, 0x62, 0xa5, 0xd6, 0x23, 0x20, 0xa2, 0x52, 0xb4, 0xf0, 0x2e, 0xcc, 0xa5, 0x3b, + 0xfa, 0x24, 0x33, 0x2a, 0x16, 0x23, 0xa6, 0xe6, 0x49, 0x9a, 0x1a, 0x7f, 0x5d, 0x02, 0xd8, 0x72, + 0x5a, 0x4c, 0xe5, 0x50, 0x16, 0x60, 0xcc, 0x6a, 0xa9, 0xab, 0x08, 0x54, 0x6f, 0xc7, 0x36, 0x56, + 0x70, 0xcc, 0x6a, 0xe9, 0x14, 0xc7, 0xd8, 0xa9, 0x29, 0x8e, 0x6f, 0x40, 0xb9, 0x65, 0x71, 0xb7, + 0x4b, 0x8f, 0xb6, 0x32, 0x7c, 0x81, 0x95, 0x88, 0x85, 0x71, 0x39, 0xf2, 0xaa, 0x3a, 0xbf, 0x13, + 0x89, 0x94, 0x5a, 0x78, 0x7e, 0x8b, 0xa2, 0x7b, 0xb1, 0x33, 0xfc, 0x26, 0x4c, 0x85, 0x29, 0x04, + 0xa9, 0x25, 0x2f, 0x5b, 0x85, 0xa7, 0x7e, 0x6a, 0x27, 0xc6, 0xc3, 0x84, 0x64, 0x3a, 0xc5, 0x51, + 0x78, 0x26, 0x29, 0x8e, 0x15, 0x98, 0xe3, 0xbe, 0xe3, 0xb1, 0x56, 0x28, 0xb1, 0xb1, 0x52, 0x21, + 0xc9, 0xdc, 0x61, 0x33, 0xc5, 0xc7, 0x81, 0x16, 0x64, 0x1b, 0x2e, 0x85, 0x9d, 0x88, 0x0f, 0xb0, + 0x32, 0x2f, 0x91, 0xae, 0x2a, 0xa4, 0x4b, 0x0f, 0x33, 0x64, 0x30, 0xb3, 0x25, 0x79, 0x1d, 0xf2, + 0x6e, 0x87, 0x72, 0xa6, 0x92, 0x1a, 0x61, 0xec, 0x9a, 0xdf, 0x16, 0xc4, 0xc7, 0xc7, 0xd5, 0x92, + 0x98, 0x76, 0xf9, 0x03, 0x03, 0x41, 0x72, 0x03, 0x60, 0xd7, 0xe9, 0xdb, 0x2d, 0xea, 0x1d, 0x6d, + 0xac, 0xc8, 0x48, 0x26, 0xf6, 0x58, 0xdb, 0xd0, 0x1c, 0x8c, 0x49, 0x09, 0x83, 0xd9, 0x0b, 0x4c, + 0x87, 0xca, 0x4d, 0x68, 0x83, 0xa9, 0x2d, 0x8a, 0xe2, 0x93, 0xf7, 0xa1, 0x24, 0x13, 0x7e, 0xac, + 0x55, 0xf7, 0x55, 0x82, 0xe2, 0x49, 0xd2, 0x76, 0xda, 0xab, 0x68, 0x86, 0x20, 0x18, 0xe1, 0x91, + 0x5f, 0x01, 0xd8, 0xb3, 0x6c, 0x8b, 0x77, 0x24, 0x7a, 0xf9, 0x89, 0xd1, 0xf5, 0x38, 0xd7, 0x34, + 0x0a, 0xc6, 0x10, 0x45, 0xcc, 0xe3, 0x3a, 0xad, 0x8d, 0xed, 0xca, 0x94, 0x1c, 0xa5, 0x8e, 0x79, + 0xb6, 0x05, 0x11, 0x03, 0x1e, 0xb9, 0x0e, 0xc5, 0x16, 0x65, 0x3d, 0xc7, 0x66, 0xad, 0xca, 0x74, + 0x94, 0x77, 0x58, 0x51, 0x34, 0xd4, 0x5c, 0xf2, 0x5d, 0x28, 0x58, 0xd2, 0xe5, 0xab, 0xcc, 0xc8, + 0xae, 0xbe, 0x3d, 0xdc, 0xa5, 0x20, 0x21, 0x1a, 0x20, 0x2c, 0x4e, 0xf0, 0x37, 0x2a, 0x58, 0x62, + 0xc2, 0xa4, 0xd3, 0xf7, 0xa5, 0x86, 0x59, 0xa9, 0x61, 0xb8, 0x3c, 0xcb, 0xbd, 0x00, 0x23, 0x78, + 0x3c, 0x57, 0x3f, 0x30, 0x44, 0x16, 0xe3, 0x35, 0x3b, 0x56, 0xb7, 0xe5, 0x31, 0xbb, 0x32, 0x27, + 0x43, 0x2a, 0x39, 0xde, 0x65, 0x45, 0x43, 0xcd, 0x25, 0x3f, 0x0f, 0xd3, 0x4e, 0xdf, 0x97, 0xfb, + 0x46, 0x6c, 0x3b, 0x5e, 0xb9, 0x28, 0xc5, 0x2f, 0x8a, 0xb0, 0xed, 0x5e, 0x9c, 0x81, 0x49, 0x39, + 0x63, 0x06, 0xa6, 0xe2, 0x15, 0x27, 0xc6, 0xef, 0x8f, 0x41, 0xd8, 0x8f, 0x9f, 0x04, 0x6f, 0x99, + 0x18, 0x50, 0xf0, 0x18, 0xef, 0x77, 0x7d, 0x65, 0x6c, 0xe5, 0x5a, 0xa3, 0xa4, 0xa0, 0xe2, 0x18, + 0x87, 0x30, 0x2d, 0x7a, 0xdb, 0xed, 0xb2, 0x6e, 0xd3, 0x67, 0x2e, 0x27, 0x7b, 0x90, 0xe7, 0xe2, + 0x0f, 0x35, 0x27, 0x23, 0xbe, 0x9d, 0xf9, 0xcc, 0x8d, 0xf6, 0xbb, 0x54, 0x80, 0x01, 0xbc, 0xf1, + 0x07, 0x63, 0x50, 0xd2, 0xf3, 0x74, 0x86, 0x0c, 0xf9, 0xcb, 0x30, 0xd9, 0x62, 0x7b, 0x54, 0x8c, + 0x46, 0x3d, 0x2f, 0x8b, 0x6d, 0xb5, 0x12, 0x90, 0x30, 0xe4, 0x91, 0x6a, 0x78, 0x99, 0x05, 0x43, + 0x96, 0x59, 0xab, 0xb8, 0xaf, 0x48, 0xf6, 0xa1, 0x24, 0xff, 0x58, 0x0b, 0x4b, 0x61, 0x86, 0x5d, + 0xf7, 0x07, 0x21, 0x4a, 0x90, 0x0b, 0xd0, 0x3f, 0x31, 0xc2, 0x4f, 0x95, 0xb0, 0xe4, 0xcf, 0x52, + 0xc2, 0x62, 0xac, 0x81, 0x30, 0x0c, 0xeb, 0xcb, 0xe4, 0x1d, 0x28, 0x72, 0xb5, 0x75, 0xd5, 0xbc, + 0x7c, 0x45, 0x3f, 0x43, 0x29, 0xfa, 0xe3, 0xe3, 0xea, 0xb4, 0x14, 0x0e, 0x09, 0xa8, 0x9b, 0x18, + 0x4b, 0x50, 0x8e, 0x3d, 0xf9, 0x8b, 0x19, 0xd6, 0xcf, 0x75, 0xb1, 0x19, 0x5e, 0xa1, 0x3e, 0x45, + 0xc9, 0x31, 0x1e, 0x8f, 0xc1, 0x1c, 0x32, 0xee, 0xf4, 0x3d, 0x93, 0xc5, 0x33, 0xb3, 0xd4, 0x94, + 0x75, 0x40, 0xa9, 0xcc, 0x6c, 0x5d, 0x52, 0x51, 0x71, 0xc9, 0xdb, 0x30, 0xdd, 0x63, 0x5e, 0x5b, + 0x1f, 0x36, 0xb5, 0x48, 0x3a, 0xbf, 0xb2, 0x19, 0x67, 0x62, 0x52, 0x56, 0xc4, 0xfb, 0x3d, 0x6a, + 0x5b, 0x7b, 0x8c, 0xfb, 0xe9, 0x94, 0xc9, 0xa6, 0xa2, 0xa3, 0x96, 0x20, 0xeb, 0x70, 0x91, 0x33, + 0xff, 0xde, 0xa1, 0xcd, 0x3c, 0x64, 0x7b, 0xcc, 0x93, 0x99, 0xf4, 0x09, 0x69, 0x32, 0x9f, 0x0f, + 0xdf, 0xb6, 0x9a, 0x69, 0x01, 0x1c, 0x6c, 0x23, 0x6f, 0xdf, 0xbe, 0x69, 0x32, 0xce, 0x97, 0x1d, + 0xbb, 0x65, 0xe9, 0x6a, 0xa7, 0xf8, 0xed, 0x9b, 0xe2, 0xe3, 0x40, 0x0b, 0x81, 0xb2, 0x47, 0xad, + 0x6e, 0xdf, 0x63, 0x11, 0x4a, 0x21, 0x89, 0xb2, 0x96, 0xe2, 0xe3, 0x40, 0x0b, 0xe3, 0x75, 0x98, + 0x46, 0xe6, 0x7b, 0x47, 0x7a, 0x4e, 0xaa, 0x90, 0xef, 0x5a, 0x3d, 0x2b, 0x48, 0xfe, 0xe4, 0x83, + 0x8d, 0x7c, 0x57, 0x10, 0x30, 0xa0, 0x1b, 0x3f, 0xc8, 0x01, 0x44, 0x95, 0x3c, 0x64, 0x1f, 0x8a, + 0xfc, 0x66, 0xa3, 0x6f, 0xee, 0xeb, 0x7c, 0xd1, 0x90, 0xcf, 0x0a, 0x0a, 0x24, 0xf6, 0xe6, 0xa9, + 0x28, 0xa8, 0x15, 0x7c, 0x59, 0x9d, 0xc7, 0x5f, 0x8c, 0x83, 0x6e, 0x25, 0x16, 0x97, 0xd9, 0x2d, + 0xd7, 0xb1, 0x6c, 0x3f, 0xfd, 0x9a, 0xba, 0xaa, 0xe8, 0xa8, 0x25, 0xc4, 0x7e, 0xdb, 0x0d, 0x06, + 0x31, 0x96, 0xdc, 0x6f, 0xaa, 0x0f, 0x8a, 0x2b, 0xe4, 0x3c, 0xd6, 0x16, 0x73, 0x3d, 0x9e, 0x94, + 0x43, 0x49, 0x45, 0xc5, 0x15, 0xd7, 0x4c, 0x98, 0x30, 0x55, 0x7b, 0x44, 0x5e, 0x33, 0x61, 0x6e, + 0x15, 0x35, 0x97, 0x74, 0x60, 0x96, 0xca, 0xa5, 0x8d, 0x92, 0xc0, 0x4f, 0x94, 0xcf, 0x8e, 0xaa, + 0x48, 0x92, 0x28, 0x98, 0x86, 0x15, 0x9a, 0x78, 0xd4, 0xfc, 0xc9, 0xd3, 0xda, 0x5a, 0x53, 0x33, + 0x89, 0x82, 0x69, 0x58, 0xe1, 0x61, 0x79, 0x4e, 0x97, 0xd5, 0x71, 0x4b, 0x79, 0x72, 0xda, 0xc3, + 0xc2, 0x80, 0x8c, 0x21, 0xdf, 0xf8, 0xed, 0x1c, 0xcc, 0x34, 0x4d, 0xcf, 0x72, 0x7d, 0x7d, 0xf6, + 0xb7, 0x64, 0xf9, 0x8f, 0x4f, 0x85, 0xef, 0xa3, 0xf6, 0xd4, 0x8b, 0xa7, 0xe4, 0xd3, 0x02, 0xa1, + 0x44, 0x75, 0x50, 0x40, 0xc2, 0x08, 0x42, 0x46, 0xbd, 0xd2, 0xba, 0xa4, 0xd7, 0xb6, 0x29, 0xa9, + 0xa8, 0xb8, 0xc6, 0x0f, 0x73, 0x50, 0xd4, 0xaf, 0x57, 0x2f, 0x41, 0x5e, 0x3e, 0x8a, 0xa8, 0xbd, + 0xa3, 0x2f, 0x93, 0x65, 0x41, 0xc4, 0x80, 0x27, 0x84, 0xa4, 0x3b, 0xa7, 0x80, 0x63, 0x37, 0x0e, + 0xf5, 0x7c, 0x0c, 0x78, 0x62, 0xd3, 0x32, 0xbb, 0xa5, 0xf6, 0x8b, 0xde, 0xb4, 0xab, 0x76, 0x0b, + 0x05, 0x5d, 0x96, 0xb3, 0x38, 0x5e, 0x8f, 0xfa, 0xe9, 0x98, 0x7c, 0x4d, 0x52, 0x51, 0x71, 0x8d, + 0xb7, 0x61, 0x56, 0xbd, 0x65, 0xeb, 0x89, 0x12, 0xbe, 0x5b, 0xdf, 0xa3, 0xda, 0x4c, 0xe6, 0x95, + 0xef, 0xa6, 0x68, 0xa8, 0xb9, 0xc6, 0x34, 0x94, 0x63, 0x25, 0xb6, 0xc6, 0x7f, 0x5d, 0x01, 0xfd, + 0xbe, 0xfb, 0xd3, 0x57, 0xe2, 0xa1, 0x42, 0x28, 0x53, 0x7b, 0xc3, 0xf9, 0xd1, 0xbd, 0x61, 0xbd, + 0xe6, 0x29, 0x8f, 0xb8, 0x1d, 0x79, 0xc4, 0x85, 0x73, 0xf0, 0x88, 0xa3, 0x6a, 0x9b, 0xb4, 0x57, + 0xfc, 0x3b, 0x39, 0x98, 0xb2, 0x45, 0xc4, 0xad, 0xce, 0x7a, 0x65, 0x52, 0x7a, 0x61, 0xf7, 0x46, + 0x9a, 0xc4, 0xda, 0x56, 0x0c, 0x31, 0x48, 0x36, 0xe8, 0x88, 0x38, 0xce, 0xc2, 0x84, 0x6a, 0xb2, + 0x06, 0x45, 0xba, 0x27, 0xc2, 0x18, 0xff, 0x48, 0x3d, 0x54, 0x5f, 0xcd, 0x3a, 0xfd, 0x75, 0x25, + 0x13, 0xec, 0xf9, 0xf0, 0x17, 0xea, 0xb6, 0xe2, 0x66, 0xd2, 0xc5, 0x42, 0xa5, 0x11, 0x6e, 0xa6, + 0x30, 0x6b, 0x12, 0x73, 0x0e, 0x14, 0x25, 0x56, 0x3b, 0x64, 0x40, 0x21, 0x08, 0x94, 0x64, 0x94, + 0x58, 0x0c, 0x7c, 0xde, 0x20, 0x88, 0x42, 0xc5, 0x21, 0xed, 0xd0, 0xc5, 0x2d, 0xcb, 0xc9, 0x6d, + 0x0c, 0xed, 0xf6, 0x6b, 0xaf, 0x39, 0xdb, 0xc7, 0x25, 0xb7, 0xe3, 0x06, 0x74, 0xea, 0x2c, 0x06, + 0x74, 0xfa, 0x54, 0xe3, 0xd9, 0x86, 0x02, 0x97, 0xe6, 0x59, 0x46, 0x87, 0xe5, 0x1b, 0xcb, 0xc3, + 0xdd, 0xee, 0x09, 0x0b, 0x1f, 0xcc, 0x4e, 0x40, 0x43, 0x05, 0x4f, 0x1c, 0x28, 0x7a, 0xca, 0x0b, + 0x54, 0x01, 0xe6, 0x70, 0xf9, 0xe9, 0xb4, 0x2b, 0x19, 0xec, 0x8f, 0x90, 0x8a, 0x5a, 0x09, 0x79, + 0x1f, 0xc6, 0x5b, 0xb4, 0xad, 0x42, 0xcd, 0x6f, 0x0d, 0xfd, 0xa4, 0x1f, 0xaa, 0x91, 0xb5, 0xad, + 0x2b, 0xf5, 0x75, 0x14, 0xa8, 0x64, 0x3f, 0x2a, 0x48, 0x9a, 0x1b, 0xa1, 0x64, 0x34, 0x65, 0xf1, + 0x83, 0xe0, 0x63, 0xa0, 0xa4, 0x69, 0x15, 0x26, 0x0f, 0x9c, 0x6e, 0xbf, 0xa7, 0x62, 0xd4, 0xf2, + 0x8d, 0x85, 0xac, 0xd5, 0x7e, 0x20, 0x45, 0x22, 0x23, 0x10, 0xfc, 0xe6, 0x18, 0xb6, 0x25, 0xbf, + 0x91, 0x83, 0x19, 0x71, 0x74, 0xf4, 0x3e, 0xe0, 0x15, 0x32, 0xc2, 0x4e, 0xbd, 0xcf, 0x99, 0x17, + 0xed, 0xb0, 0xe7, 0x94, 0xda, 0x99, 0x8d, 0x84, 0x06, 0x4c, 0x69, 0x24, 0x2e, 0x14, 0xb9, 0xd5, + 0x62, 0x26, 0xf5, 0x78, 0x65, 0xfe, 0xdc, 0xb4, 0x47, 0x4e, 0xa5, 0xc2, 0x46, 0xad, 0x85, 0xfc, + 0xa6, 0x2c, 0xf3, 0x55, 0x85, 0xee, 0xea, 0xe3, 0x83, 0x4b, 0xe7, 0xf9, 0xf1, 0xc1, 0x7c, 0x50, + 0xe3, 0x9b, 0xd0, 0x80, 0x69, 0x95, 0xe4, 0x1e, 0x5c, 0x16, 0x31, 0xcd, 0x01, 0x4b, 0x57, 0xa5, + 0x5d, 0x96, 0x2f, 0x08, 0xcf, 0x9f, 0x1c, 0x57, 0x2f, 0xd7, 0xb3, 0x04, 0x30, 0xbb, 0x1d, 0xf9, + 0x08, 0xa6, 0xbd, 0xb8, 0x6b, 0x5f, 0x79, 0x6e, 0x84, 0xe7, 0xeb, 0x44, 0x90, 0x10, 0xe4, 0x40, + 0x12, 0x24, 0x4c, 0xea, 0x22, 0x6f, 0x40, 0xd9, 0x55, 0x96, 0xca, 0xe2, 0xbd, 0xca, 0x15, 0x39, + 0x06, 0x79, 0xa3, 0x6e, 0x47, 0x64, 0x8c, 0xcb, 0x90, 0xfb, 0x50, 0xf6, 0x9d, 0x2e, 0xf3, 0x54, + 0xaa, 0xbd, 0x22, 0x17, 0x7f, 0x31, 0x6b, 0x27, 0xef, 0x68, 0xb1, 0x28, 0x91, 0x1b, 0xd1, 0x38, + 0xc6, 0x71, 0x44, 0x84, 0x18, 0xd6, 0x4c, 0x7a, 0x32, 0x1c, 0x7e, 0x3e, 0x19, 0x21, 0x36, 0xe3, + 0x4c, 0x4c, 0xca, 0x8a, 0x98, 0xcf, 0xf5, 0x2c, 0xc7, 0xb3, 0xfc, 0xa3, 0xe5, 0x2e, 0xe5, 0x5c, + 0x02, 0x2c, 0x48, 0x00, 0x1d, 0xf3, 0x6d, 0xa7, 0x05, 0x70, 0xb0, 0x8d, 0x70, 0xd5, 0x42, 0x62, + 0xe5, 0x85, 0xc8, 0x55, 0x0b, 0xdb, 0xa2, 0xe6, 0x9e, 0x52, 0xcc, 0x73, 0x75, 0x98, 0x62, 0x1e, + 0xd2, 0x82, 0xab, 0xb4, 0xef, 0x3b, 0x3d, 0x41, 0x48, 0x36, 0xd9, 0x71, 0xf6, 0x99, 0x5d, 0xb9, + 0x26, 0xef, 0xaa, 0x6b, 0x27, 0xc7, 0xd5, 0xab, 0xf5, 0x2f, 0x90, 0xc3, 0x2f, 0x44, 0x21, 0x3d, + 0x28, 0x32, 0x55, 0x90, 0x54, 0xf9, 0xca, 0x08, 0x97, 0x44, 0xb2, 0xaa, 0x29, 0x98, 0xa0, 0x90, + 0x86, 0x5a, 0x05, 0xd9, 0x81, 0x72, 0xc7, 0xe1, 0x7e, 0xbd, 0x6b, 0x51, 0xce, 0x78, 0xe5, 0x45, + 0xb9, 0x4f, 0x32, 0xef, 0xb7, 0x5b, 0xa1, 0x58, 0xb4, 0x4d, 0x6e, 0x45, 0x2d, 0x31, 0x0e, 0x43, + 0x98, 0x0c, 0x8e, 0xfa, 0x72, 0xd5, 0x1c, 0xdb, 0x67, 0x1f, 0xfa, 0x95, 0x45, 0x39, 0x96, 0x57, + 0xb2, 0x90, 0xb7, 0x9d, 0x56, 0x33, 0x29, 0x1d, 0x9c, 0xf2, 0x14, 0x11, 0xd3, 0x98, 0xe4, 0x4d, + 0x98, 0x72, 0x9d, 0x56, 0xd3, 0x65, 0xe6, 0x36, 0xf5, 0xcd, 0x4e, 0xa5, 0x9a, 0x7c, 0x28, 0xd8, + 0x8e, 0xf1, 0x30, 0x21, 0xb9, 0xf0, 0x1e, 0x5c, 0x1c, 0xf0, 0xa7, 0x9e, 0xe8, 0x55, 0xe5, 0x4f, + 0x73, 0x10, 0x77, 0x67, 0xcf, 0xdd, 0xef, 0x5f, 0x87, 0x8b, 0xaa, 0x24, 0x58, 0x5c, 0xb6, 0xdd, + 0xbe, 0x1f, 0x46, 0xc9, 0xb1, 0xfc, 0x08, 0xa6, 0x05, 0x70, 0xb0, 0x8d, 0xf1, 0x67, 0x39, 0x98, + 0x4e, 0x98, 0xef, 0x73, 0x8f, 0x08, 0xd7, 0x80, 0xf4, 0x2c, 0xcf, 0x73, 0xbc, 0xe0, 0x0e, 0xdc, + 0x14, 0x7b, 0x99, 0xab, 0xcf, 0x09, 0x64, 0x41, 0xc6, 0xe6, 0x00, 0x17, 0x33, 0x5a, 0x18, 0x7f, + 0x99, 0x83, 0x28, 0x01, 0xa7, 0xab, 0x90, 0x72, 0xa7, 0x56, 0x21, 0xbd, 0x0a, 0xc5, 0x47, 0xdc, + 0xb1, 0xb7, 0xa3, 0x5a, 0x25, 0x3d, 0xa1, 0xb7, 0x9b, 0xf7, 0xb6, 0xa4, 0xa4, 0x96, 0x90, 0xd2, + 0x1f, 0xac, 0x59, 0x5d, 0x7f, 0xb0, 0xa2, 0xe7, 0xf6, 0x2f, 0x06, 0x74, 0xd4, 0x12, 0x64, 0x09, + 0x4a, 0x3a, 0xe7, 0xab, 0x42, 0x49, 0x3d, 0x09, 0x3a, 0xe1, 0x89, 0x91, 0x8c, 0xf1, 0xa3, 0x31, + 0x28, 0xfe, 0x7f, 0xfb, 0x36, 0x62, 0x3f, 0xf5, 0x6d, 0xc4, 0xf2, 0x88, 0x69, 0xe4, 0x2f, 0xfa, + 0x2e, 0xc2, 0xf8, 0x34, 0x07, 0x53, 0xcf, 0xf0, 0xf3, 0x84, 0xdd, 0xe4, 0xe7, 0x09, 0xef, 0x8c, + 0x34, 0xb4, 0x53, 0x3e, 0x4d, 0xf8, 0x9b, 0xf9, 0x68, 0x48, 0x62, 0x5a, 0x89, 0x0d, 0xa5, 0xf0, + 0x80, 0x87, 0xa9, 0xf9, 0x77, 0x46, 0x0a, 0x0a, 0xa3, 0x4d, 0x19, 0x52, 0x38, 0x46, 0x2a, 0xc8, + 0x0d, 0x00, 0x26, 0x2c, 0x5b, 0x90, 0xb7, 0x1b, 0x4b, 0x66, 0xae, 0x57, 0x35, 0x07, 0x63, 0x52, + 0xcf, 0x3e, 0xe1, 0x90, 0x7d, 0x45, 0x4f, 0x3c, 0x95, 0x2b, 0xfa, 0xea, 0xb9, 0x5f, 0xd1, 0x2f, + 0x3e, 0xfd, 0x2b, 0x3a, 0x16, 0x90, 0xe4, 0x47, 0x08, 0x48, 0x3e, 0x82, 0x4b, 0xc1, 0x9f, 0xcb, + 0x5d, 0x6a, 0xf5, 0xf4, 0x7e, 0x51, 0xe5, 0x44, 0x5f, 0xcd, 0xbc, 0x98, 0x99, 0xc7, 0x2d, 0xee, + 0x33, 0xdb, 0x7f, 0x10, 0xb5, 0x8c, 0xde, 0xa2, 0x1f, 0x64, 0xc0, 0x61, 0xa6, 0x92, 0xb4, 0x07, + 0x3b, 0x79, 0x06, 0x0f, 0xf6, 0x87, 0x39, 0xb8, 0x4c, 0xb3, 0xbe, 0x68, 0x54, 0x79, 0x8c, 0xdb, + 0x23, 0xc5, 0x13, 0x09, 0x44, 0x15, 0x0f, 0x64, 0xb1, 0x30, 0xbb, 0x0f, 0xe4, 0xe5, 0x28, 0x24, + 0x2d, 0xc9, 0x4d, 0x95, 0x1d, 0x4c, 0x7e, 0x3f, 0x9d, 0x0a, 0x02, 0x39, 0xdb, 0xcd, 0x91, 0x0d, + 0xf6, 0x39, 0xa4, 0x83, 0xca, 0x23, 0xa4, 0x83, 0x52, 0xe1, 0xc5, 0xd4, 0x39, 0x85, 0x17, 0x36, + 0xcc, 0x59, 0x3d, 0xda, 0x66, 0xdb, 0xfd, 0x6e, 0x37, 0xc8, 0x7e, 0xf3, 0xca, 0xb4, 0xc4, 0xce, + 0xac, 0x01, 0x15, 0xe1, 0x5e, 0x37, 0xb8, 0x1f, 0xf5, 0x83, 0x50, 0xf4, 0x60, 0xb3, 0x91, 0x42, + 0xc2, 0x01, 0x6c, 0xb1, 0x2d, 0x85, 0xdb, 0xba, 0xc5, 0x7c, 0x31, 0xdb, 0x32, 0x53, 0xa2, 0xbe, + 0xdc, 0xbe, 0x15, 0x91, 0x31, 0x2e, 0x43, 0xee, 0x40, 0xa9, 0x65, 0x73, 0xf5, 0x31, 0xd6, 0xac, + 0xb4, 0x52, 0xaf, 0x09, 0xdb, 0xb6, 0xb2, 0xd5, 0xd4, 0x1f, 0x60, 0x5d, 0x1d, 0xfc, 0xaf, 0x29, + 0x6a, 0x9a, 0x8f, 0x51, 0x7b, 0xb2, 0x29, 0xc1, 0x54, 0x41, 0x74, 0x90, 0xda, 0xb8, 0x76, 0x8a, + 0x87, 0xbc, 0xb2, 0x15, 0xd6, 0x6f, 0x4f, 0x2b, 0x75, 0xaa, 0xcc, 0x39, 0x42, 0x20, 0xaf, 0x40, + 0xc1, 0xb1, 0x57, 0x3f, 0xb4, 0xfc, 0xca, 0xc5, 0x64, 0xf6, 0xfb, 0x9e, 0xa4, 0xa2, 0xe2, 0x92, + 0xfb, 0x70, 0xc5, 0xf7, 0xbb, 0x2a, 0xb4, 0xad, 0xef, 0xf9, 0xcc, 0x0b, 0x8b, 0x1e, 0x64, 0xe1, + 0x4a, 0x3e, 0xf8, 0x6a, 0x6b, 0x67, 0xe7, 0x6e, 0x96, 0x08, 0x9e, 0xd6, 0xf6, 0xf4, 0xa0, 0x7b, + 0x7e, 0xc8, 0xa0, 0x3b, 0x1e, 0xe7, 0x5d, 0xfa, 0xc2, 0x38, 0x6f, 0x20, 0x2e, 0xbd, 0xfc, 0x04, + 0x71, 0xe9, 0xfb, 0xb2, 0xb4, 0x63, 0x7d, 0x59, 0xc5, 0xf4, 0x6f, 0x0d, 0x97, 0x4a, 0x14, 0x08, + 0xc1, 0x0b, 0x9f, 0xfc, 0x13, 0x03, 0x4c, 0xb2, 0x0d, 0x97, 0x5c, 0xa7, 0x35, 0x10, 0xd6, 0xca, + 0x20, 0x3e, 0x56, 0xd7, 0xb3, 0x9d, 0x21, 0x83, 0x99, 0x2d, 0xa5, 0x2d, 0x8d, 0xe8, 0x95, 0x8a, + 0x9c, 0x98, 0xc0, 0x96, 0x46, 0x64, 0x8c, 0xcb, 0xa4, 0xa3, 0xbc, 0xe7, 0x9f, 0x5a, 0x94, 0xb7, + 0xf0, 0x0c, 0xa2, 0xbc, 0x17, 0x9e, 0x5d, 0x94, 0xf7, 0x59, 0x11, 0x66, 0x52, 0xdf, 0x20, 0xea, + 0xaa, 0xaa, 0xdc, 0x59, 0xab, 0xaa, 0x12, 0x65, 0x4f, 0x63, 0x4f, 0xb5, 0xec, 0x69, 0xfc, 0xdc, + 0xcb, 0x9e, 0x62, 0xe5, 0x5d, 0x13, 0x5f, 0x52, 0xde, 0x55, 0x87, 0x59, 0xd3, 0xe9, 0xb9, 0xf2, + 0x0b, 0x0a, 0x55, 0xe4, 0x13, 0x3c, 0xc4, 0xeb, 0xa7, 0xce, 0xe5, 0x24, 0x1b, 0xd3, 0xf2, 0x84, + 0x43, 0xde, 0x96, 0x0d, 0x0b, 0x23, 0x94, 0x86, 0x26, 0x17, 0x4c, 0x5e, 0x94, 0xaa, 0x3a, 0x53, + 0xbb, 0xe9, 0x81, 0xfa, 0x40, 0x97, 0x70, 0x34, 0x66, 0x93, 0xe5, 0x78, 0xbc, 0x52, 0x92, 0xfa, + 0x7f, 0xe9, 0x3c, 0xf4, 0x27, 0x6b, 0xff, 0x54, 0x4f, 0xa2, 0xd7, 0xdf, 0x24, 0x17, 0xd3, 0x3d, + 0x21, 0x1e, 0x3c, 0xe7, 0x66, 0xb9, 0x61, 0x5c, 0xbd, 0x2a, 0x7d, 0x91, 0x33, 0xb8, 0xa8, 0xb4, + 0x3c, 0x97, 0xe9, 0xc8, 0x71, 0x3c, 0x05, 0x39, 0x5e, 0x3b, 0x56, 0x7c, 0x5a, 0xb5, 0x63, 0x0b, + 0x47, 0x41, 0x59, 0xea, 0xa9, 0x15, 0xad, 0xf7, 0x93, 0x55, 0xe6, 0xef, 0x0d, 0xf9, 0x9f, 0x15, + 0x85, 0x85, 0xaf, 0xf1, 0x6a, 0xda, 0x5f, 0xcf, 0xc1, 0xa5, 0xac, 0x65, 0xc9, 0xe8, 0x45, 0x33, + 0xd9, 0x8b, 0xd1, 0xc2, 0xb5, 0xb8, 0x69, 0xf9, 0xb7, 0x7c, 0x2c, 0x38, 0xf4, 0x99, 0xfb, 0xd3, + 0x97, 0xe3, 0xa1, 0x5e, 0x8e, 0x13, 0x5f, 0x0a, 0xe7, 0x9f, 0xe1, 0x97, 0xc2, 0x85, 0x21, 0xbe, + 0x14, 0x9e, 0x7c, 0x96, 0x5f, 0x0a, 0x17, 0xcf, 0xf8, 0xa5, 0x70, 0xe9, 0xe9, 0x7f, 0x29, 0xfc, + 0x79, 0x0e, 0xe6, 0xd2, 0x85, 0xcb, 0xcf, 0x20, 0x49, 0xb6, 0x9f, 0x48, 0x92, 0x6d, 0x8c, 0x64, + 0xcc, 0xc3, 0x6e, 0x9f, 0x96, 0x2c, 0x33, 0x7e, 0x9c, 0x83, 0x81, 0xe2, 0xec, 0x67, 0x90, 0xc7, + 0x7a, 0x94, 0xcc, 0x63, 0xad, 0x9e, 0xcb, 0x20, 0x4f, 0xc9, 0x67, 0xfd, 0x77, 0xc6, 0x10, 0xff, + 0x57, 0xf2, 0x5a, 0x09, 0xd3, 0x36, 0xf6, 0xf4, 0x4d, 0x5b, 0xa3, 0xf6, 0xc9, 0xe7, 0x8b, 0x17, + 0x3e, 0xfd, 0x7c, 0xf1, 0xc2, 0x67, 0x9f, 0x2f, 0x5e, 0xf8, 0xf8, 0x64, 0x31, 0xf7, 0xc9, 0xc9, + 0x62, 0xee, 0xd3, 0x93, 0xc5, 0xdc, 0x67, 0x27, 0x8b, 0xb9, 0x1f, 0x9f, 0x2c, 0xe6, 0x7e, 0xef, + 0x5f, 0x16, 0x2f, 0xfc, 0x72, 0x31, 0xc4, 0xfd, 0x9f, 0x00, 0x00, 0x00, 0xff, 0xff, 0xde, 0x00, + 0x4c, 0xbf, 0x45, 0x51, 0x00, 0x00, } func (m *ArchiveStrategy) Marshal() (dAtA []byte, err error) { @@ -2461,16 +2462,18 @@ func (m *CronWorkflowStatus) MarshalToSizedBuffer(dAtA []byte) (int, error) { _ = i var l int _ = l - { - size, err := m.LastScheduledTime.MarshalToSizedBuffer(dAtA[:i]) - if err != nil { - return 0, err + if m.LastScheduledTime != nil { + { + size, err := m.LastScheduledTime.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) } - i -= size - i = encodeVarintGenerated(dAtA, i, uint64(size)) + i-- + dAtA[i] = 0xa } - i-- - dAtA[i] = 0xa return len(dAtA) - i, nil } @@ -5541,8 +5544,10 @@ func (m *CronWorkflowStatus) Size() (n int) { } var l int _ = l - l = m.LastScheduledTime.Size() - n += 1 + l + sovGenerated(uint64(l)) + if m.LastScheduledTime != nil { + l = m.LastScheduledTime.Size() + n += 1 + l + sovGenerated(uint64(l)) + } return n } @@ -6732,7 +6737,7 @@ func (this *CronWorkflowStatus) String() string { return "nil" } s := strings.Join([]string{`&CronWorkflowStatus{`, - `LastScheduledTime:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.LastScheduledTime), "Time", "v11.Time", 1), `&`, ``, 1) + `,`, + `LastScheduledTime:` + strings.Replace(fmt.Sprintf("%v", this.LastScheduledTime), "Time", "v11.Time", 1) + `,`, `}`, }, "") return s @@ -9313,6 +9318,9 @@ func (m *CronWorkflowStatus) Unmarshal(dAtA []byte) error { if postIndex > l { return io.ErrUnexpectedEOF } + if m.LastScheduledTime == nil { + m.LastScheduledTime = &v11.Time{} + } if err := m.LastScheduledTime.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { return err } diff --git a/pkg/apis/workflow/v1alpha1/zz_generated.deepcopy.go b/pkg/apis/workflow/v1alpha1/zz_generated.deepcopy.go index 28a40674a8bf..7282c581d7fe 100644 --- a/pkg/apis/workflow/v1alpha1/zz_generated.deepcopy.go +++ b/pkg/apis/workflow/v1alpha1/zz_generated.deepcopy.go @@ -306,7 +306,10 @@ func (in *CronWorkflowOptions) DeepCopy() *CronWorkflowOptions { // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. func (in *CronWorkflowStatus) DeepCopyInto(out *CronWorkflowStatus) { *out = *in - in.LastScheduledTime.DeepCopyInto(&out.LastScheduledTime) + if in.LastScheduledTime != nil { + in, out := &in.LastScheduledTime, &out.LastScheduledTime + *out = (*in).DeepCopy() + } return } diff --git a/workflow/cron/controller.go b/workflow/cron/controller.go index 78911813d27a..7e33034e9418 100644 --- a/workflow/cron/controller.go +++ b/workflow/cron/controller.go @@ -89,13 +89,13 @@ func (cc *Controller) startCronWorkflow(cronWorkflow *v1alpha1.CronWorkflow) err // Workflow should have ran for nextScheduledRunTime.Before(now) { missedExecutionTime = nextScheduledRunTime - nextScheduledRunTime = cronSchedule.Next(cronWorkflow.Status.LastScheduledTime.Time) + nextScheduledRunTime = cronSchedule.Next(missedExecutionTime) } // We missed the latest execution time if !missedExecutionTime.IsZero() { - log.Infof("%s missed an execution at %s", cronWorkflow.Name, missedExecutionTime.Format("Mon Jan _2 15:04:05 2006")) // If StartingDeadlineSeconds is not set, or we are still within the deadline window, run the Workflow if cronWorkflow.Options.StartingDeadlineSeconds == nil || now.Before(missedExecutionTime.Add(time.Duration(*cronWorkflow.Options.StartingDeadlineSeconds) * time.Second)) { + log.Infof("%s missed an execution at %s and is within StartingDeadline", cronWorkflow.Name, missedExecutionTime.Format("Mon Jan _2 15:04:05 2006")) cronWorkflowJob.Run() } } diff --git a/workflow/cron/cron_workflow_job.go b/workflow/cron/cron_workflow_job.go index 63cd65fcf12e..cd1d6dc6ed3f 100644 --- a/workflow/cron/cron_workflow_job.go +++ b/workflow/cron/cron_workflow_job.go @@ -54,7 +54,6 @@ func (cronWfWrp *CronWorkflowWrapper) Run() { log.Errorf("Error in running CronWorkflow %s: %s", cronWfWrp.name, err) return } - log.Infof("%v", runningWorkflows) if len(runningWorkflows) > 0 { log.Infof("%s has ConcurrencyPolicy: Forbid and has an active Workflow so it was not run", cronWfWrp.name) return From 61df6fc4f4e9c2c7ca2e8da3ed4fbe424c417e3d Mon Sep 17 00:00:00 2001 From: Simon Behar Date: Thu, 14 Nov 2019 08:31:51 -0800 Subject: [PATCH 13/44] WIP: Minor rework --- api/openapi-spec/swagger.json | 10 + .../workflow/v1alpha1/cron_workflow_types.go | 5 +- pkg/apis/workflow/v1alpha1/generated.pb.go | 678 ++++++++++-------- pkg/apis/workflow/v1alpha1/generated.proto | 7 +- .../workflow/v1alpha1/openapi_generated.go | 14 + .../v1alpha1/zz_generated.deepcopy.go | 10 + workflow/cron/controller.go | 24 +- ...rkflow_job.go => cron_workflow_wrapper.go} | 87 ++- 8 files changed, 477 insertions(+), 358 deletions(-) rename workflow/cron/{cron_workflow_job.go => cron_workflow_wrapper.go} (67%) diff --git a/api/openapi-spec/swagger.json b/api/openapi-spec/swagger.json index a66bbbef76af..77691c7ffed7 100644 --- a/api/openapi-spec/swagger.json +++ b/api/openapi-spec/swagger.json @@ -271,6 +271,11 @@ "description": "ConcurrencyPolicy is the K8s-style concurrency policy that will be used", "type": "string" }, + "failedJobsHistoryLimit": { + "description": "FailedJobsHistoryLimit is the K8s-style number of failed jobs that will be persisted", + "type": "integer", + "format": "int32" + }, "runtimeGenerateName": { "description": "RuntimeGenerateName is the name generator the Workflow will be run with. Mutually exclusive with RuntimeName", "type": "string" @@ -288,6 +293,11 @@ "type": "integer", "format": "int64" }, + "successfulJobsHistoryLimit": { + "description": "SuccessfulJobsHistoryLimit is the K8s-style number of successful jobs that will be persisted", + "type": "integer", + "format": "int32" + }, "suspend": { "description": "Suspend is a flag that will stop new CronWorkflows from running if set to true", "type": "boolean" diff --git a/pkg/apis/workflow/v1alpha1/cron_workflow_types.go b/pkg/apis/workflow/v1alpha1/cron_workflow_types.go index 5d2da6e987da..cdd54b270efd 100644 --- a/pkg/apis/workflow/v1alpha1/cron_workflow_types.go +++ b/pkg/apis/workflow/v1alpha1/cron_workflow_types.go @@ -30,7 +30,6 @@ type CronWorkflowStatus struct { LastScheduledTime *metav1.Time `json:"lastScheduledTime,omitempty" protobuf:"bytes,1,opt,name=lastScheduledTime"` } -// TODO: Consider replacing this with the K8s API CronJobSpec. This spec is only available starting on v2alpha1. // CronWorkflowOptions is the schedule of when to run CronWorkflows type CronWorkflowOptions struct { // Schedule is a schedule to run the Workflow in Cron format @@ -46,4 +45,8 @@ type CronWorkflowOptions struct { // StartingDeadlineSeconds is the K8s-style deadline that will limit the time a CronWorkflow will be run after its // original scheduled time if it is missed. StartingDeadlineSeconds *int64 `json:"startingDeadlineSeconds,omitempty" protobuf:"varint,6,opt,name=startingDeadlineSeconds"` + // SuccessfulJobsHistoryLimit is the K8s-style number of successful jobs that will be persisted + SuccessfulJobsHistoryLimit *int32 `json:"successfulJobsHistoryLimit,omitempty" protobuf:"varint,7,opt,name=successfulJobsHistoryLimit"` + // FailedJobsHistoryLimit is the K8s-style number of failed jobs that will be persisted + FailedJobsHistoryLimit *int32 `json:"failedJobsHistoryLimit,omitempty" protobuf:"varint,8,opt,name=failedJobsHistoryLimit"` } diff --git a/pkg/apis/workflow/v1alpha1/generated.pb.go b/pkg/apis/workflow/v1alpha1/generated.pb.go index c374291cf759..1ff34e315ebc 100644 --- a/pkg/apis/workflow/v1alpha1/generated.pb.go +++ b/pkg/apis/workflow/v1alpha1/generated.pb.go @@ -1528,314 +1528,318 @@ func init() { } var fileDescriptor_c23edafa7e7ea072 = []byte{ - // 4902 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xec, 0x5c, 0x4d, 0x6c, 0x64, 0x57, - 0x56, 0xee, 0xb2, 0x5d, 0xe5, 0xaa, 0x53, 0xfe, 0xeb, 0xeb, 0xee, 0x74, 0xc5, 0xe9, 0xb8, 0x7a, - 0x5e, 0x94, 0xd0, 0xc3, 0x24, 0xe5, 0xa4, 0x7b, 0x06, 0x32, 0x09, 0x49, 0xa6, 0xca, 0x7f, 0xed, - 0xee, 0xb6, 0xdb, 0x9c, 0x72, 0x77, 0x33, 0x64, 0xc4, 0x70, 0xfd, 0xea, 0xba, 0xea, 0xb5, 0xab, - 0xde, 0x7b, 0x79, 0xf7, 0x95, 0x1d, 0x2b, 0x0b, 0x02, 0x62, 0x04, 0x08, 0x8d, 0x04, 0x1b, 0x18, - 0x31, 0x1b, 0xc4, 0x02, 0x36, 0x6c, 0xd8, 0x02, 0x1a, 0x24, 0xc4, 0x22, 0x62, 0x43, 0xc4, 0x86, - 0x2c, 0x90, 0x35, 0x31, 0x1b, 0x10, 0x48, 0x48, 0x6c, 0x90, 0x7a, 0x85, 0xee, 0x7d, 0xf7, 0xdd, - 0xf7, 0x53, 0xcf, 0x89, 0xbb, 0xca, 0xdd, 0x08, 0x66, 0x56, 0xed, 0x3a, 0xe7, 0xdc, 0xef, 0xdc, - 0xdf, 0x73, 0xcf, 0x39, 0xf7, 0xbc, 0x86, 0xe5, 0xb6, 0xe5, 0x77, 0xfa, 0xbb, 0x35, 0xd3, 0xe9, - 0x2d, 0x51, 0xaf, 0xed, 0xb8, 0x9e, 0xf3, 0x48, 0xfe, 0xb1, 0xe4, 0xee, 0xb7, 0x97, 0xa8, 0x6b, - 0xf1, 0xa5, 0x43, 0xc7, 0xdb, 0xdf, 0xeb, 0x3a, 0x87, 0x4b, 0x07, 0x6f, 0xd0, 0xae, 0xdb, 0xa1, - 0x6f, 0x2c, 0xb5, 0x99, 0xcd, 0x3c, 0xea, 0xb3, 0x56, 0xcd, 0xf5, 0x1c, 0xdf, 0x21, 0x37, 0x23, - 0x90, 0x5a, 0x08, 0x22, 0xff, 0xa8, 0xb9, 0xfb, 0xed, 0x9a, 0x00, 0xa9, 0x85, 0x20, 0xb5, 0x10, - 0x64, 0xe1, 0xb5, 0x98, 0xe6, 0xb6, 0x23, 0x14, 0x0a, 0xac, 0xdd, 0xfe, 0x9e, 0xfc, 0x25, 0x7f, - 0xc8, 0xbf, 0x02, 0x1d, 0x0b, 0xc6, 0xfe, 0x9b, 0xbc, 0x66, 0x39, 0xa2, 0x4b, 0x4b, 0xa6, 0xe3, - 0xb1, 0xa5, 0x83, 0x81, 0x7e, 0x2c, 0x7c, 0x3d, 0x92, 0xe9, 0x51, 0xb3, 0x63, 0xd9, 0xcc, 0x3b, - 0x8a, 0xc6, 0xd1, 0x63, 0x3e, 0xcd, 0x6a, 0xb5, 0x74, 0x5a, 0x2b, 0xaf, 0x6f, 0xfb, 0x56, 0x8f, - 0x0d, 0x34, 0xf8, 0xb9, 0x2f, 0x6b, 0xc0, 0xcd, 0x0e, 0xeb, 0xd1, 0x74, 0x3b, 0xe3, 0x1f, 0x72, - 0x30, 0x5b, 0xf7, 0xcc, 0x8e, 0x75, 0xc0, 0x9a, 0xbe, 0x60, 0xb4, 0x8f, 0xc8, 0xfb, 0x30, 0xee, - 0x53, 0xaf, 0x92, 0xbb, 0x96, 0xbb, 0x5e, 0xbe, 0xf1, 0xad, 0xda, 0x10, 0x13, 0x59, 0xdb, 0xa1, - 0x5e, 0x08, 0xd7, 0x98, 0x3c, 0x39, 0xae, 0x8e, 0xef, 0x50, 0x0f, 0x05, 0x2a, 0xf9, 0x2e, 0x4c, - 0xd8, 0x8e, 0xcd, 0x2a, 0x63, 0x12, 0xbd, 0x3e, 0x14, 0xfa, 0x96, 0x63, 0xeb, 0xde, 0x36, 0x8a, - 0x27, 0xc7, 0xd5, 0x09, 0x41, 0x41, 0x09, 0x6c, 0xfc, 0x67, 0x0e, 0x4a, 0x75, 0xaf, 0xdd, 0xef, - 0x31, 0xdb, 0xe7, 0xc4, 0x03, 0x70, 0xa9, 0x47, 0x7b, 0xcc, 0x67, 0x1e, 0xaf, 0xe4, 0xae, 0x8d, - 0x5f, 0x2f, 0xdf, 0x78, 0x77, 0x28, 0xa5, 0xdb, 0x21, 0x4c, 0x83, 0x7c, 0x72, 0x5c, 0xbd, 0x70, - 0x72, 0x5c, 0x05, 0x4d, 0xe2, 0x18, 0xd3, 0x42, 0x6c, 0x28, 0x51, 0xcf, 0xb7, 0xf6, 0xa8, 0xe9, - 0xf3, 0xca, 0x98, 0x54, 0xf9, 0xce, 0x50, 0x2a, 0xeb, 0x0a, 0xa5, 0x71, 0x51, 0x69, 0x2c, 0x85, - 0x14, 0x8e, 0x91, 0x0a, 0xe3, 0xdf, 0xc7, 0xa1, 0x18, 0x32, 0xc8, 0x35, 0x98, 0xb0, 0x69, 0x8f, - 0xc9, 0xd5, 0x2b, 0x35, 0xa6, 0x54, 0xc3, 0x89, 0x2d, 0xda, 0x13, 0x13, 0x44, 0x7b, 0x4c, 0x48, - 0xb8, 0xd4, 0xef, 0xc8, 0x15, 0x88, 0x49, 0x6c, 0x53, 0xbf, 0x83, 0x92, 0x43, 0xae, 0xc2, 0x44, - 0xcf, 0x69, 0xb1, 0xca, 0xf8, 0xb5, 0xdc, 0xf5, 0x7c, 0x30, 0xc1, 0x9b, 0x4e, 0x8b, 0xa1, 0xa4, - 0x8a, 0xf6, 0x7b, 0x9e, 0xd3, 0xab, 0x4c, 0x24, 0xdb, 0xaf, 0x79, 0x4e, 0x0f, 0x25, 0x87, 0xfc, - 0x6e, 0x0e, 0xe6, 0xc2, 0xee, 0xdd, 0x75, 0x4c, 0xea, 0x5b, 0x8e, 0x5d, 0xc9, 0xcb, 0x05, 0x5f, - 0x1d, 0x69, 0x22, 0x42, 0xb0, 0x46, 0x45, 0x69, 0x9d, 0x4b, 0x73, 0x70, 0x40, 0x31, 0xb9, 0x01, - 0xd0, 0xee, 0x3a, 0xbb, 0xb4, 0x2b, 0xe6, 0xa0, 0x52, 0x90, 0xbd, 0xd6, 0x4b, 0xb8, 0xae, 0x39, - 0x18, 0x93, 0x22, 0xfb, 0x30, 0x49, 0x83, 0x53, 0x51, 0x99, 0x94, 0xfd, 0x5e, 0x19, 0xb2, 0xdf, - 0x89, 0x93, 0xd5, 0x28, 0x9f, 0x1c, 0x57, 0x27, 0x15, 0x11, 0x43, 0x0d, 0xe4, 0x55, 0x28, 0x3a, - 0xae, 0xe8, 0x2a, 0xed, 0x56, 0x8a, 0xd7, 0x72, 0xd7, 0x8b, 0x8d, 0x39, 0xd5, 0xbd, 0xe2, 0x3d, - 0x45, 0x47, 0x2d, 0x61, 0xfc, 0x61, 0x1e, 0x06, 0x46, 0x4d, 0xde, 0x80, 0xb2, 0x42, 0xbb, 0xeb, - 0xb4, 0xb9, 0x5c, 0xfc, 0x62, 0x63, 0xf6, 0xe4, 0xb8, 0x5a, 0xae, 0x47, 0x64, 0x8c, 0xcb, 0x90, - 0x87, 0x30, 0xc6, 0x6f, 0xaa, 0x63, 0xf8, 0xde, 0x50, 0xa3, 0x6b, 0xde, 0xd4, 0x1b, 0xb4, 0x70, - 0x72, 0x5c, 0x1d, 0x6b, 0xde, 0xc4, 0x31, 0x7e, 0x53, 0x98, 0x8f, 0xb6, 0xe5, 0xcb, 0xcd, 0x33, - 0xac, 0xf9, 0x58, 0xb7, 0x7c, 0x0d, 0x2d, 0xcd, 0xc7, 0xba, 0xe5, 0xa3, 0x40, 0x15, 0xe6, 0xa3, - 0xe3, 0xfb, 0xae, 0xdc, 0x7c, 0xc3, 0x9a, 0x8f, 0x5b, 0x3b, 0x3b, 0xdb, 0x1a, 0x5e, 0xee, 0x6e, - 0x41, 0x41, 0x09, 0x4c, 0x3e, 0x12, 0x33, 0x19, 0xf0, 0x1c, 0xef, 0x48, 0xed, 0xda, 0x5b, 0x23, - 0xed, 0x5a, 0xc7, 0x3b, 0xd2, 0xea, 0xd4, 0x9a, 0x68, 0x06, 0xc6, 0xb5, 0xc9, 0xd1, 0xb5, 0xf6, - 0xb8, 0xdc, 0xa4, 0x43, 0x8f, 0x6e, 0x65, 0xad, 0x99, 0x1a, 0xdd, 0xca, 0x5a, 0x13, 0x25, 0xb0, - 0x58, 0x1b, 0x8f, 0x1e, 0xaa, 0x3d, 0x3d, 0xdc, 0xda, 0x20, 0x3d, 0x4c, 0xae, 0x0d, 0xd2, 0x43, - 0x14, 0xa8, 0x46, 0x1b, 0x2e, 0x87, 0x1c, 0x64, 0xae, 0xc3, 0x2d, 0x39, 0x40, 0xb6, 0x47, 0x96, - 0xa0, 0x64, 0x3a, 0xf6, 0x9e, 0xd5, 0xde, 0xa4, 0xae, 0x32, 0x4c, 0xda, 0xa2, 0x2d, 0x87, 0x0c, - 0x8c, 0x64, 0xc8, 0x8b, 0x30, 0xbe, 0xcf, 0x8e, 0x94, 0x85, 0x2a, 0x2b, 0xd1, 0xf1, 0x3b, 0xec, - 0x08, 0x05, 0xdd, 0xf8, 0x51, 0x0e, 0xe6, 0x33, 0x26, 0x57, 0x34, 0xeb, 0x7b, 0x5d, 0xa5, 0x41, - 0x37, 0xbb, 0x8f, 0x77, 0x51, 0xd0, 0xc9, 0x6f, 0xe5, 0x60, 0x36, 0x36, 0xdb, 0xf5, 0xbe, 0x32, - 0x82, 0xc3, 0x9f, 0xee, 0x04, 0x56, 0xe3, 0x8a, 0xd2, 0x38, 0x9b, 0x62, 0x60, 0x5a, 0xab, 0xf1, - 0x4f, 0xf2, 0xd6, 0x4d, 0xd0, 0x08, 0x85, 0x99, 0x3e, 0x67, 0x9e, 0x30, 0xd1, 0x4d, 0x66, 0x7a, - 0xcc, 0x57, 0x17, 0xf0, 0xcb, 0xb5, 0xe0, 0x6a, 0x17, 0xbd, 0xa8, 0x09, 0x2f, 0xa3, 0x76, 0xf0, - 0x46, 0x2d, 0x90, 0xb8, 0xc3, 0x8e, 0x9a, 0xac, 0xcb, 0x04, 0x46, 0x83, 0x9c, 0x1c, 0x57, 0x67, - 0xee, 0x27, 0x00, 0x30, 0x05, 0x28, 0x54, 0xb8, 0x94, 0xf3, 0x43, 0xc7, 0x6b, 0x29, 0x15, 0x63, - 0x4f, 0xac, 0x62, 0x3b, 0x01, 0x80, 0x29, 0x40, 0xe3, 0xdb, 0x00, 0xcb, 0x8e, 0xed, 0x5b, 0x76, - 0x9f, 0xdd, 0xb3, 0xc9, 0x4b, 0x90, 0x67, 0x9e, 0xe7, 0x78, 0xca, 0x20, 0x4d, 0xab, 0x09, 0xca, - 0xaf, 0x0a, 0x22, 0x06, 0x3c, 0xf2, 0x0a, 0x14, 0xf6, 0xa8, 0xd5, 0x65, 0x2d, 0xd9, 0x9b, 0x62, - 0x63, 0x46, 0x49, 0x15, 0xd6, 0x24, 0x15, 0x15, 0xd7, 0xf8, 0xab, 0x71, 0x98, 0x5a, 0xf6, 0x1c, - 0xfb, 0xa1, 0x5a, 0x08, 0xf2, 0xab, 0x50, 0x14, 0xfe, 0x53, 0x8b, 0xfa, 0x54, 0xcd, 0xd5, 0xeb, - 0xb1, 0x81, 0x68, 0x37, 0x28, 0x5a, 0x42, 0x21, 0x2d, 0x86, 0x76, 0x6f, 0xf7, 0x11, 0x33, 0xfd, - 0x4d, 0xe6, 0xd3, 0xe8, 0x22, 0x88, 0x68, 0xa8, 0x51, 0x89, 0x09, 0x13, 0xdc, 0x65, 0xe6, 0x48, - 0xce, 0x4a, 0xd8, 0xdd, 0xa6, 0xcb, 0xcc, 0xe8, 0xb6, 0x14, 0xbf, 0x50, 0x82, 0x13, 0x07, 0x0a, - 0xdc, 0xa7, 0x7e, 0x9f, 0x2b, 0x93, 0xb9, 0x3e, 0x94, 0x9a, 0xf8, 0xcc, 0x34, 0x25, 0x5c, 0x34, - 0x91, 0xc1, 0x6f, 0x54, 0x6a, 0x08, 0x87, 0xc9, 0xe0, 0x36, 0xe1, 0xca, 0x8c, 0xde, 0x1a, 0x59, - 0x63, 0x70, 0x4f, 0xf1, 0xc6, 0xac, 0x52, 0x39, 0xa9, 0x08, 0x18, 0x6a, 0x32, 0x3e, 0xcb, 0xc1, - 0x5c, 0xbc, 0xc5, 0x5d, 0x8b, 0xfb, 0xe4, 0x3b, 0x03, 0x2b, 0x58, 0x3b, 0xdb, 0x0a, 0x8a, 0xd6, - 0x72, 0xfd, 0xf4, 0x4d, 0x19, 0x52, 0x62, 0xab, 0xb7, 0x07, 0x79, 0xcb, 0x67, 0xbd, 0xd0, 0x07, - 0xab, 0x8f, 0x3c, 0xca, 0x68, 0x03, 0x6f, 0x08, 0x5c, 0x0c, 0xe0, 0x8d, 0x7f, 0x1c, 0x87, 0xf9, - 0x8c, 0xc9, 0x10, 0xf7, 0xba, 0xf0, 0xba, 0x5b, 0xfd, 0x6e, 0xe8, 0x8e, 0xe9, 0xde, 0x36, 0x15, - 0x1d, 0xb5, 0x04, 0x59, 0x81, 0x39, 0xe5, 0xab, 0x0b, 0x0f, 0x84, 0xbb, 0xd4, 0x64, 0xca, 0x00, - 0x6a, 0x67, 0x07, 0x53, 0x7c, 0x1c, 0x68, 0x41, 0x36, 0x61, 0x5e, 0xd1, 0xd6, 0x95, 0xa7, 0x2f, - 0xbd, 0x9e, 0x71, 0x09, 0xf4, 0x82, 0x02, 0x9a, 0xc7, 0x41, 0x11, 0xcc, 0x6a, 0x47, 0x0e, 0xe0, - 0xa2, 0xe9, 0xd8, 0x66, 0xdf, 0xf3, 0x98, 0x6d, 0x1e, 0x6d, 0x3b, 0x5d, 0xcb, 0x3c, 0x52, 0x8e, - 0xdf, 0x2d, 0x05, 0x76, 0x71, 0x39, 0x2d, 0xf0, 0xf8, 0xb8, 0xfa, 0xb5, 0x58, 0x64, 0xb4, 0x4b, - 0x7d, 0xb3, 0xb3, 0x74, 0x70, 0x23, 0x9c, 0xd0, 0xb4, 0x38, 0x0e, 0xaa, 0x20, 0x5f, 0x85, 0x49, - 0xde, 0xe7, 0x2e, 0xb3, 0x5b, 0xf2, 0x06, 0x2e, 0x46, 0x1b, 0xab, 0x19, 0x90, 0x31, 0xe4, 0x93, - 0xfb, 0x70, 0x85, 0xfb, 0xc2, 0xc0, 0xda, 0xed, 0x15, 0x46, 0x5b, 0x5d, 0xcb, 0x16, 0xe6, 0xce, - 0xb1, 0x5b, 0xc1, 0x35, 0x3a, 0xde, 0x78, 0xe1, 0xe4, 0xb8, 0x7a, 0xa5, 0x99, 0x2d, 0x82, 0xa7, - 0xb5, 0x35, 0xbe, 0x97, 0x03, 0x32, 0x78, 0xa6, 0x88, 0x03, 0x17, 0xbb, 0x94, 0xfb, 0xe1, 0xfa, - 0xb5, 0x76, 0x2c, 0xe5, 0x6b, 0x97, 0x6f, 0xfc, 0xec, 0xd9, 0xb6, 0xae, 0x68, 0xd1, 0xb8, 0x2c, - 0x26, 0xee, 0x6e, 0x1a, 0x08, 0x07, 0xb1, 0x8d, 0x3f, 0x2a, 0xc0, 0xe4, 0x4a, 0x7d, 0x7d, 0x87, - 0xf2, 0xfd, 0x33, 0xf8, 0xf6, 0xaf, 0x42, 0xd1, 0x67, 0x3d, 0xb7, 0x4b, 0xfd, 0x70, 0xf3, 0xe8, - 0x2d, 0xb7, 0xa3, 0xe8, 0xa8, 0x25, 0x88, 0x23, 0x02, 0x15, 0x15, 0x29, 0x29, 0xe3, 0xf3, 0xee, - 0x90, 0x37, 0xa1, 0x42, 0x89, 0x47, 0x2a, 0x8a, 0x84, 0x91, 0x0e, 0xc2, 0xa1, 0x1c, 0x2a, 0x47, - 0xb6, 0xa7, 0xac, 0xcf, 0x90, 0x11, 0x66, 0x84, 0x13, 0x38, 0x55, 0x31, 0x02, 0xc6, 0xb5, 0x90, - 0xaf, 0xc3, 0x54, 0x8b, 0x89, 0xad, 0xc2, 0x6c, 0xd3, 0x62, 0xbc, 0x92, 0xbf, 0x36, 0x2e, 0xe6, - 0xe5, 0xe4, 0xb8, 0x3a, 0xb5, 0x12, 0xa3, 0x63, 0x42, 0x8a, 0x3c, 0x82, 0xd2, 0xa1, 0xe5, 0x77, - 0xe4, 0x41, 0xaf, 0x14, 0xa4, 0x01, 0xf9, 0xe6, 0x50, 0x1d, 0x15, 0x08, 0xd1, 0xb4, 0x3c, 0x0c, - 0x31, 0x31, 0x82, 0x17, 0xfe, 0x91, 0xf8, 0x21, 0xc3, 0x49, 0xe9, 0x9b, 0x95, 0x92, 0x0d, 0x24, - 0x03, 0x23, 0x19, 0xc2, 0x61, 0x4a, 0xfc, 0x68, 0xb2, 0x0f, 0xfa, 0xcc, 0x36, 0x99, 0x8c, 0x1a, - 0x86, 0x0d, 0x32, 0x43, 0x90, 0x60, 0x46, 0x1e, 0xc6, 0x60, 0x31, 0xa1, 0x44, 0xec, 0xbe, 0xc3, - 0x0e, 0xb3, 0x2b, 0xa5, 0xe4, 0xee, 0x7b, 0xd8, 0x61, 0x36, 0x4a, 0x0e, 0x71, 0x00, 0x4c, 0x7d, - 0xf9, 0x57, 0x60, 0x84, 0xd0, 0x22, 0xf2, 0x21, 0x1a, 0x33, 0xe2, 0x76, 0x8e, 0x7e, 0x63, 0x4c, - 0x85, 0xf1, 0xb7, 0x39, 0x28, 0x8b, 0xc3, 0x11, 0x6e, 0xe8, 0x57, 0xa0, 0xe0, 0x53, 0xaf, 0xad, - 0x7c, 0xa7, 0x52, 0x74, 0x03, 0xee, 0x48, 0x2a, 0x2a, 0x2e, 0xa1, 0x90, 0xf7, 0x29, 0xdf, 0x0f, - 0x6f, 0x86, 0x5f, 0x18, 0xaa, 0x8f, 0xea, 0x54, 0x46, 0x97, 0x82, 0xf8, 0xc5, 0x31, 0x40, 0x26, - 0xd7, 0xa1, 0x28, 0xfc, 0x96, 0x35, 0xca, 0x83, 0x50, 0xa8, 0xd8, 0x98, 0x12, 0xa7, 0x70, 0x4d, - 0xd1, 0x50, 0x73, 0x8d, 0xef, 0xc0, 0xcc, 0xea, 0x87, 0xcc, 0xec, 0xfb, 0x8e, 0x17, 0x38, 0xc3, - 0xe4, 0x36, 0x10, 0xce, 0xbc, 0x03, 0xcb, 0x64, 0x75, 0xd3, 0x74, 0xfa, 0xb6, 0xbf, 0x15, 0x9d, - 0xfa, 0x05, 0xa5, 0x8d, 0x34, 0x07, 0x24, 0x30, 0xa3, 0x95, 0xf1, 0xe7, 0x13, 0x50, 0x8e, 0x85, - 0x53, 0x62, 0x15, 0x3d, 0xe6, 0x3a, 0x69, 0x1b, 0x22, 0x1c, 0x76, 0x94, 0x1c, 0x61, 0x43, 0x3c, - 0x76, 0x60, 0x71, 0x11, 0xb4, 0xa7, 0x6c, 0x08, 0x2a, 0x3a, 0x6a, 0x09, 0x52, 0x85, 0x7c, 0x8b, - 0xb9, 0x7e, 0x47, 0x0e, 0x72, 0xa2, 0x51, 0x12, 0x13, 0xb1, 0x22, 0x08, 0x18, 0xd0, 0x85, 0xc0, - 0x1e, 0xf3, 0xcd, 0x4e, 0x65, 0x42, 0x9e, 0x3b, 0x29, 0xb0, 0x26, 0x08, 0x18, 0xd0, 0x33, 0x1c, - 0xdf, 0xfc, 0xd3, 0x77, 0x7c, 0x0b, 0xe7, 0xec, 0xf8, 0x12, 0x17, 0xe6, 0x39, 0xef, 0x6c, 0x7b, - 0xd6, 0x01, 0xf5, 0x99, 0x6c, 0x2c, 0xf5, 0x4c, 0x3e, 0x89, 0x9e, 0x2b, 0xe2, 0x6e, 0x6e, 0x36, - 0x6f, 0xa5, 0x51, 0x30, 0x0b, 0x9a, 0x34, 0xe1, 0xb2, 0x65, 0x73, 0x66, 0xf6, 0x3d, 0xb6, 0xd1, - 0xb6, 0x1d, 0x8f, 0xdd, 0x72, 0xb8, 0x80, 0x53, 0x39, 0x84, 0x17, 0xd5, 0xa2, 0x5d, 0xde, 0xc8, - 0x12, 0xc2, 0xec, 0xb6, 0xc6, 0xdf, 0xe7, 0x60, 0x2a, 0x1e, 0x41, 0x12, 0x0e, 0xd0, 0x59, 0x59, - 0x6b, 0x06, 0x3b, 0x53, 0xdd, 0x74, 0xef, 0x0d, 0x1d, 0x98, 0x06, 0x30, 0x91, 0xd7, 0x1d, 0xd1, - 0x30, 0xa6, 0xe6, 0x0c, 0x29, 0xaa, 0x97, 0x20, 0xbf, 0xe7, 0x78, 0x26, 0x53, 0x67, 0x4b, 0x9f, - 0xc1, 0x35, 0x41, 0xc4, 0x80, 0x67, 0xfc, 0x6b, 0x0e, 0x62, 0x1a, 0xc8, 0xaf, 0xc1, 0xb4, 0xd0, - 0x71, 0xc7, 0xdb, 0x4d, 0x8c, 0xa6, 0x31, 0xf4, 0x68, 0x34, 0x52, 0xe3, 0xb2, 0xd2, 0x3f, 0x9d, - 0x20, 0x63, 0x52, 0x1f, 0xf9, 0x1a, 0x94, 0x68, 0xab, 0xe5, 0x31, 0xce, 0x59, 0x60, 0x7a, 0x4a, - 0x8d, 0x69, 0x79, 0x57, 0x86, 0x44, 0x8c, 0xf8, 0xe2, 0x18, 0x8a, 0x90, 0x5d, 0xec, 0x6c, 0xe5, - 0xbe, 0xe9, 0x63, 0x28, 0x94, 0x08, 0x3a, 0x6a, 0x09, 0xe3, 0xfb, 0x13, 0x90, 0xd4, 0x4d, 0x5a, - 0x30, 0xbb, 0xef, 0xed, 0x2e, 0x2f, 0x53, 0xb3, 0x33, 0x54, 0x40, 0x39, 0x2f, 0x22, 0xd9, 0x3b, - 0x49, 0x04, 0x4c, 0x43, 0x2a, 0x2d, 0x77, 0xd8, 0x91, 0x4f, 0x77, 0x87, 0x89, 0x29, 0x43, 0x2d, - 0x71, 0x04, 0x4c, 0x43, 0x92, 0x6f, 0x40, 0x79, 0xdf, 0xdb, 0x0d, 0x0f, 0xb9, 0x9a, 0x8e, 0x79, - 0x35, 0x1d, 0xe5, 0x3b, 0x11, 0x0b, 0xe3, 0x72, 0x62, 0x0a, 0xf7, 0xbd, 0x5d, 0x64, 0xb4, 0x1b, - 0x66, 0x2b, 0xf5, 0x14, 0xde, 0x51, 0x74, 0xd4, 0x12, 0xc4, 0x05, 0xb2, 0x1f, 0xce, 0x9e, 0xce, - 0x4a, 0x28, 0x5b, 0x74, 0x3d, 0x6b, 0x34, 0x5a, 0x28, 0x3e, 0xa0, 0xe7, 0x84, 0x6d, 0xbe, 0x33, - 0x80, 0x83, 0x19, 0xd8, 0xe4, 0xdb, 0x70, 0x65, 0xdf, 0xdb, 0x55, 0x86, 0x7c, 0xdb, 0xb3, 0x6c, - 0xd3, 0x72, 0x13, 0x69, 0xca, 0xaa, 0xea, 0xee, 0x95, 0x3b, 0xd9, 0x62, 0x78, 0x5a, 0x7b, 0xe3, - 0x35, 0x98, 0x8a, 0xa7, 0xb9, 0xbe, 0x24, 0x35, 0x62, 0xfc, 0x47, 0x0e, 0x0a, 0x1b, 0xb6, 0xdb, - 0xff, 0x09, 0xc9, 0x98, 0xff, 0xc9, 0x04, 0x4c, 0x08, 0xd7, 0x8b, 0x5c, 0x87, 0x09, 0xff, 0xc8, - 0x0d, 0xee, 0xd6, 0xf1, 0xc6, 0xa5, 0xd0, 0xd0, 0xec, 0x1c, 0xb9, 0xec, 0xb1, 0xfa, 0x17, 0xa5, - 0x04, 0x79, 0x17, 0x0a, 0x76, 0xbf, 0xf7, 0x80, 0x76, 0x95, 0x51, 0x7a, 0x25, 0x74, 0x2d, 0xb6, - 0x24, 0xf5, 0xf1, 0x71, 0xf5, 0x12, 0xb3, 0x4d, 0xa7, 0x65, 0xd9, 0xed, 0xa5, 0x47, 0xdc, 0xb1, - 0x6b, 0x5b, 0xfd, 0xde, 0x2e, 0xf3, 0x50, 0xb5, 0x12, 0x11, 0xcd, 0xae, 0xe3, 0x74, 0x05, 0xc0, - 0x78, 0x32, 0xa2, 0x69, 0x04, 0x64, 0x0c, 0xf9, 0xc2, 0x8b, 0xe1, 0xbe, 0x27, 0x24, 0x27, 0x92, - 0x5e, 0x4c, 0x53, 0x52, 0x51, 0x71, 0x49, 0x0f, 0x0a, 0x3d, 0xea, 0x0a, 0xb9, 0xbc, 0x9c, 0xb2, - 0xd5, 0xa1, 0xfd, 0xd3, 0xda, 0xa6, 0xc4, 0x59, 0xb5, 0x7d, 0xef, 0x28, 0x52, 0x17, 0x10, 0x51, - 0x29, 0x21, 0x16, 0x4c, 0x76, 0x2d, 0xee, 0x0b, 0x7d, 0x85, 0x11, 0x76, 0x85, 0xd0, 0xf7, 0x80, - 0x76, 0xfb, 0x2c, 0x9a, 0x81, 0xbb, 0x01, 0x2c, 0x86, 0xf8, 0x0b, 0x47, 0x50, 0x8e, 0xf5, 0x88, - 0xcc, 0x05, 0xe9, 0x40, 0xb9, 0x79, 0x65, 0x06, 0x90, 0xec, 0x40, 0xfe, 0x40, 0x60, 0x28, 0x63, - 0x33, 0x62, 0x4f, 0x30, 0x00, 0x7b, 0x6b, 0xec, 0xcd, 0xdc, 0x5b, 0xc5, 0x1f, 0xfc, 0x71, 0xf5, - 0xc2, 0xc7, 0xff, 0x7c, 0xed, 0x82, 0xf1, 0x77, 0xe3, 0x50, 0xd2, 0x22, 0xff, 0xb7, 0x77, 0x8a, - 0x97, 0xda, 0x29, 0xb7, 0x47, 0x9b, 0xaf, 0x33, 0x6d, 0x97, 0x7a, 0x72, 0xbb, 0x4c, 0x35, 0x7e, - 0x26, 0xb6, 0xd4, 0x8f, 0x8f, 0xab, 0x95, 0xe4, 0x24, 0x20, 0x3d, 0xdc, 0x64, 0x9c, 0xd3, 0x36, - 0x8b, 0xb6, 0xc1, 0x37, 0xbf, 0x6c, 0x1b, 0x5c, 0x8a, 0x6f, 0x83, 0x52, 0xf6, 0x32, 0x7e, 0x3c, - 0x0e, 0xc5, 0xcd, 0x30, 0x25, 0xf4, 0xbd, 0x1c, 0x94, 0xa9, 0x6d, 0x3b, 0x3e, 0x0d, 0xf2, 0x5f, - 0x81, 0x79, 0xdb, 0x1a, 0x6a, 0x3a, 0x42, 0xd0, 0x5a, 0x3d, 0x02, 0x0c, 0xa6, 0x44, 0xdf, 0x4c, - 0x31, 0x0e, 0xc6, 0xf5, 0x92, 0x0f, 0xa0, 0xd0, 0xa5, 0xbb, 0xac, 0x1b, 0x5a, 0xbb, 0x8d, 0xd1, - 0x7a, 0x70, 0x57, 0x62, 0xa5, 0xd6, 0x23, 0x20, 0xa2, 0x52, 0xb4, 0xf0, 0x2e, 0xcc, 0xa5, 0x3b, - 0xfa, 0x24, 0x33, 0x2a, 0x16, 0x23, 0xa6, 0xe6, 0x49, 0x9a, 0x1a, 0x7f, 0x5d, 0x02, 0xd8, 0x72, - 0x5a, 0x4c, 0xe5, 0x50, 0x16, 0x60, 0xcc, 0x6a, 0xa9, 0xab, 0x08, 0x54, 0x6f, 0xc7, 0x36, 0x56, - 0x70, 0xcc, 0x6a, 0xe9, 0x14, 0xc7, 0xd8, 0xa9, 0x29, 0x8e, 0x6f, 0x40, 0xb9, 0x65, 0x71, 0xb7, - 0x4b, 0x8f, 0xb6, 0x32, 0x7c, 0x81, 0x95, 0x88, 0x85, 0x71, 0x39, 0xf2, 0xaa, 0x3a, 0xbf, 0x13, - 0x89, 0x94, 0x5a, 0x78, 0x7e, 0x8b, 0xa2, 0x7b, 0xb1, 0x33, 0xfc, 0x26, 0x4c, 0x85, 0x29, 0x04, - 0xa9, 0x25, 0x2f, 0x5b, 0x85, 0xa7, 0x7e, 0x6a, 0x27, 0xc6, 0xc3, 0x84, 0x64, 0x3a, 0xc5, 0x51, - 0x78, 0x26, 0x29, 0x8e, 0x15, 0x98, 0xe3, 0xbe, 0xe3, 0xb1, 0x56, 0x28, 0xb1, 0xb1, 0x52, 0x21, - 0xc9, 0xdc, 0x61, 0x33, 0xc5, 0xc7, 0x81, 0x16, 0x64, 0x1b, 0x2e, 0x85, 0x9d, 0x88, 0x0f, 0xb0, - 0x32, 0x2f, 0x91, 0xae, 0x2a, 0xa4, 0x4b, 0x0f, 0x33, 0x64, 0x30, 0xb3, 0x25, 0x79, 0x1d, 0xf2, - 0x6e, 0x87, 0x72, 0xa6, 0x92, 0x1a, 0x61, 0xec, 0x9a, 0xdf, 0x16, 0xc4, 0xc7, 0xc7, 0xd5, 0x92, - 0x98, 0x76, 0xf9, 0x03, 0x03, 0x41, 0x72, 0x03, 0x60, 0xd7, 0xe9, 0xdb, 0x2d, 0xea, 0x1d, 0x6d, - 0xac, 0xc8, 0x48, 0x26, 0xf6, 0x58, 0xdb, 0xd0, 0x1c, 0x8c, 0x49, 0x09, 0x83, 0xd9, 0x0b, 0x4c, - 0x87, 0xca, 0x4d, 0x68, 0x83, 0xa9, 0x2d, 0x8a, 0xe2, 0x93, 0xf7, 0xa1, 0x24, 0x13, 0x7e, 0xac, - 0x55, 0xf7, 0x55, 0x82, 0xe2, 0x49, 0xd2, 0x76, 0xda, 0xab, 0x68, 0x86, 0x20, 0x18, 0xe1, 0x91, - 0x5f, 0x01, 0xd8, 0xb3, 0x6c, 0x8b, 0x77, 0x24, 0x7a, 0xf9, 0x89, 0xd1, 0xf5, 0x38, 0xd7, 0x34, - 0x0a, 0xc6, 0x10, 0x45, 0xcc, 0xe3, 0x3a, 0xad, 0x8d, 0xed, 0xca, 0x94, 0x1c, 0xa5, 0x8e, 0x79, - 0xb6, 0x05, 0x11, 0x03, 0x1e, 0xb9, 0x0e, 0xc5, 0x16, 0x65, 0x3d, 0xc7, 0x66, 0xad, 0xca, 0x74, - 0x94, 0x77, 0x58, 0x51, 0x34, 0xd4, 0x5c, 0xf2, 0x5d, 0x28, 0x58, 0xd2, 0xe5, 0xab, 0xcc, 0xc8, - 0xae, 0xbe, 0x3d, 0xdc, 0xa5, 0x20, 0x21, 0x1a, 0x20, 0x2c, 0x4e, 0xf0, 0x37, 0x2a, 0x58, 0x62, - 0xc2, 0xa4, 0xd3, 0xf7, 0xa5, 0x86, 0x59, 0xa9, 0x61, 0xb8, 0x3c, 0xcb, 0xbd, 0x00, 0x23, 0x78, - 0x3c, 0x57, 0x3f, 0x30, 0x44, 0x16, 0xe3, 0x35, 0x3b, 0x56, 0xb7, 0xe5, 0x31, 0xbb, 0x32, 0x27, - 0x43, 0x2a, 0x39, 0xde, 0x65, 0x45, 0x43, 0xcd, 0x25, 0x3f, 0x0f, 0xd3, 0x4e, 0xdf, 0x97, 0xfb, - 0x46, 0x6c, 0x3b, 0x5e, 0xb9, 0x28, 0xc5, 0x2f, 0x8a, 0xb0, 0xed, 0x5e, 0x9c, 0x81, 0x49, 0x39, - 0x63, 0x06, 0xa6, 0xe2, 0x15, 0x27, 0xc6, 0xef, 0x8f, 0x41, 0xd8, 0x8f, 0x9f, 0x04, 0x6f, 0x99, - 0x18, 0x50, 0xf0, 0x18, 0xef, 0x77, 0x7d, 0x65, 0x6c, 0xe5, 0x5a, 0xa3, 0xa4, 0xa0, 0xe2, 0x18, - 0x87, 0x30, 0x2d, 0x7a, 0xdb, 0xed, 0xb2, 0x6e, 0xd3, 0x67, 0x2e, 0x27, 0x7b, 0x90, 0xe7, 0xe2, - 0x0f, 0x35, 0x27, 0x23, 0xbe, 0x9d, 0xf9, 0xcc, 0x8d, 0xf6, 0xbb, 0x54, 0x80, 0x01, 0xbc, 0xf1, - 0x07, 0x63, 0x50, 0xd2, 0xf3, 0x74, 0x86, 0x0c, 0xf9, 0xcb, 0x30, 0xd9, 0x62, 0x7b, 0x54, 0x8c, - 0x46, 0x3d, 0x2f, 0x8b, 0x6d, 0xb5, 0x12, 0x90, 0x30, 0xe4, 0x91, 0x6a, 0x78, 0x99, 0x05, 0x43, - 0x96, 0x59, 0xab, 0xb8, 0xaf, 0x48, 0xf6, 0xa1, 0x24, 0xff, 0x58, 0x0b, 0x4b, 0x61, 0x86, 0x5d, - 0xf7, 0x07, 0x21, 0x4a, 0x90, 0x0b, 0xd0, 0x3f, 0x31, 0xc2, 0x4f, 0x95, 0xb0, 0xe4, 0xcf, 0x52, - 0xc2, 0x62, 0xac, 0x81, 0x30, 0x0c, 0xeb, 0xcb, 0xe4, 0x1d, 0x28, 0x72, 0xb5, 0x75, 0xd5, 0xbc, - 0x7c, 0x45, 0x3f, 0x43, 0x29, 0xfa, 0xe3, 0xe3, 0xea, 0xb4, 0x14, 0x0e, 0x09, 0xa8, 0x9b, 0x18, - 0x4b, 0x50, 0x8e, 0x3d, 0xf9, 0x8b, 0x19, 0xd6, 0xcf, 0x75, 0xb1, 0x19, 0x5e, 0xa1, 0x3e, 0x45, - 0xc9, 0x31, 0x1e, 0x8f, 0xc1, 0x1c, 0x32, 0xee, 0xf4, 0x3d, 0x93, 0xc5, 0x33, 0xb3, 0xd4, 0x94, - 0x75, 0x40, 0xa9, 0xcc, 0x6c, 0x5d, 0x52, 0x51, 0x71, 0xc9, 0xdb, 0x30, 0xdd, 0x63, 0x5e, 0x5b, - 0x1f, 0x36, 0xb5, 0x48, 0x3a, 0xbf, 0xb2, 0x19, 0x67, 0x62, 0x52, 0x56, 0xc4, 0xfb, 0x3d, 0x6a, - 0x5b, 0x7b, 0x8c, 0xfb, 0xe9, 0x94, 0xc9, 0xa6, 0xa2, 0xa3, 0x96, 0x20, 0xeb, 0x70, 0x91, 0x33, - 0xff, 0xde, 0xa1, 0xcd, 0x3c, 0x64, 0x7b, 0xcc, 0x93, 0x99, 0xf4, 0x09, 0x69, 0x32, 0x9f, 0x0f, - 0xdf, 0xb6, 0x9a, 0x69, 0x01, 0x1c, 0x6c, 0x23, 0x6f, 0xdf, 0xbe, 0x69, 0x32, 0xce, 0x97, 0x1d, - 0xbb, 0x65, 0xe9, 0x6a, 0xa7, 0xf8, 0xed, 0x9b, 0xe2, 0xe3, 0x40, 0x0b, 0x81, 0xb2, 0x47, 0xad, - 0x6e, 0xdf, 0x63, 0x11, 0x4a, 0x21, 0x89, 0xb2, 0x96, 0xe2, 0xe3, 0x40, 0x0b, 0xe3, 0x75, 0x98, - 0x46, 0xe6, 0x7b, 0x47, 0x7a, 0x4e, 0xaa, 0x90, 0xef, 0x5a, 0x3d, 0x2b, 0x48, 0xfe, 0xe4, 0x83, - 0x8d, 0x7c, 0x57, 0x10, 0x30, 0xa0, 0x1b, 0x3f, 0xc8, 0x01, 0x44, 0x95, 0x3c, 0x64, 0x1f, 0x8a, - 0xfc, 0x66, 0xa3, 0x6f, 0xee, 0xeb, 0x7c, 0xd1, 0x90, 0xcf, 0x0a, 0x0a, 0x24, 0xf6, 0xe6, 0xa9, - 0x28, 0xa8, 0x15, 0x7c, 0x59, 0x9d, 0xc7, 0x5f, 0x8c, 0x83, 0x6e, 0x25, 0x16, 0x97, 0xd9, 0x2d, - 0xd7, 0xb1, 0x6c, 0x3f, 0xfd, 0x9a, 0xba, 0xaa, 0xe8, 0xa8, 0x25, 0xc4, 0x7e, 0xdb, 0x0d, 0x06, - 0x31, 0x96, 0xdc, 0x6f, 0xaa, 0x0f, 0x8a, 0x2b, 0xe4, 0x3c, 0xd6, 0x16, 0x73, 0x3d, 0x9e, 0x94, - 0x43, 0x49, 0x45, 0xc5, 0x15, 0xd7, 0x4c, 0x98, 0x30, 0x55, 0x7b, 0x44, 0x5e, 0x33, 0x61, 0x6e, - 0x15, 0x35, 0x97, 0x74, 0x60, 0x96, 0xca, 0xa5, 0x8d, 0x92, 0xc0, 0x4f, 0x94, 0xcf, 0x8e, 0xaa, - 0x48, 0x92, 0x28, 0x98, 0x86, 0x15, 0x9a, 0x78, 0xd4, 0xfc, 0xc9, 0xd3, 0xda, 0x5a, 0x53, 0x33, - 0x89, 0x82, 0x69, 0x58, 0xe1, 0x61, 0x79, 0x4e, 0x97, 0xd5, 0x71, 0x4b, 0x79, 0x72, 0xda, 0xc3, - 0xc2, 0x80, 0x8c, 0x21, 0xdf, 0xf8, 0xed, 0x1c, 0xcc, 0x34, 0x4d, 0xcf, 0x72, 0x7d, 0x7d, 0xf6, - 0xb7, 0x64, 0xf9, 0x8f, 0x4f, 0x85, 0xef, 0xa3, 0xf6, 0xd4, 0x8b, 0xa7, 0xe4, 0xd3, 0x02, 0xa1, - 0x44, 0x75, 0x50, 0x40, 0xc2, 0x08, 0x42, 0x46, 0xbd, 0xd2, 0xba, 0xa4, 0xd7, 0xb6, 0x29, 0xa9, - 0xa8, 0xb8, 0xc6, 0x0f, 0x73, 0x50, 0xd4, 0xaf, 0x57, 0x2f, 0x41, 0x5e, 0x3e, 0x8a, 0xa8, 0xbd, - 0xa3, 0x2f, 0x93, 0x65, 0x41, 0xc4, 0x80, 0x27, 0x84, 0xa4, 0x3b, 0xa7, 0x80, 0x63, 0x37, 0x0e, - 0xf5, 0x7c, 0x0c, 0x78, 0x62, 0xd3, 0x32, 0xbb, 0xa5, 0xf6, 0x8b, 0xde, 0xb4, 0xab, 0x76, 0x0b, - 0x05, 0x5d, 0x96, 0xb3, 0x38, 0x5e, 0x8f, 0xfa, 0xe9, 0x98, 0x7c, 0x4d, 0x52, 0x51, 0x71, 0x8d, - 0xb7, 0x61, 0x56, 0xbd, 0x65, 0xeb, 0x89, 0x12, 0xbe, 0x5b, 0xdf, 0xa3, 0xda, 0x4c, 0xe6, 0x95, - 0xef, 0xa6, 0x68, 0xa8, 0xb9, 0xc6, 0x34, 0x94, 0x63, 0x25, 0xb6, 0xc6, 0x7f, 0x5d, 0x01, 0xfd, - 0xbe, 0xfb, 0xd3, 0x57, 0xe2, 0xa1, 0x42, 0x28, 0x53, 0x7b, 0xc3, 0xf9, 0xd1, 0xbd, 0x61, 0xbd, - 0xe6, 0x29, 0x8f, 0xb8, 0x1d, 0x79, 0xc4, 0x85, 0x73, 0xf0, 0x88, 0xa3, 0x6a, 0x9b, 0xb4, 0x57, - 0xfc, 0x3b, 0x39, 0x98, 0xb2, 0x45, 0xc4, 0xad, 0xce, 0x7a, 0x65, 0x52, 0x7a, 0x61, 0xf7, 0x46, - 0x9a, 0xc4, 0xda, 0x56, 0x0c, 0x31, 0x48, 0x36, 0xe8, 0x88, 0x38, 0xce, 0xc2, 0x84, 0x6a, 0xb2, - 0x06, 0x45, 0xba, 0x27, 0xc2, 0x18, 0xff, 0x48, 0x3d, 0x54, 0x5f, 0xcd, 0x3a, 0xfd, 0x75, 0x25, - 0x13, 0xec, 0xf9, 0xf0, 0x17, 0xea, 0xb6, 0xe2, 0x66, 0xd2, 0xc5, 0x42, 0xa5, 0x11, 0x6e, 0xa6, - 0x30, 0x6b, 0x12, 0x73, 0x0e, 0x14, 0x25, 0x56, 0x3b, 0x64, 0x40, 0x21, 0x08, 0x94, 0x64, 0x94, - 0x58, 0x0c, 0x7c, 0xde, 0x20, 0x88, 0x42, 0xc5, 0x21, 0xed, 0xd0, 0xc5, 0x2d, 0xcb, 0xc9, 0x6d, - 0x0c, 0xed, 0xf6, 0x6b, 0xaf, 0x39, 0xdb, 0xc7, 0x25, 0xb7, 0xe3, 0x06, 0x74, 0xea, 0x2c, 0x06, - 0x74, 0xfa, 0x54, 0xe3, 0xd9, 0x86, 0x02, 0x97, 0xe6, 0x59, 0x46, 0x87, 0xe5, 0x1b, 0xcb, 0xc3, - 0xdd, 0xee, 0x09, 0x0b, 0x1f, 0xcc, 0x4e, 0x40, 0x43, 0x05, 0x4f, 0x1c, 0x28, 0x7a, 0xca, 0x0b, - 0x54, 0x01, 0xe6, 0x70, 0xf9, 0xe9, 0xb4, 0x2b, 0x19, 0xec, 0x8f, 0x90, 0x8a, 0x5a, 0x09, 0x79, - 0x1f, 0xc6, 0x5b, 0xb4, 0xad, 0x42, 0xcd, 0x6f, 0x0d, 0xfd, 0xa4, 0x1f, 0xaa, 0x91, 0xb5, 0xad, - 0x2b, 0xf5, 0x75, 0x14, 0xa8, 0x64, 0x3f, 0x2a, 0x48, 0x9a, 0x1b, 0xa1, 0x64, 0x34, 0x65, 0xf1, - 0x83, 0xe0, 0x63, 0xa0, 0xa4, 0x69, 0x15, 0x26, 0x0f, 0x9c, 0x6e, 0xbf, 0xa7, 0x62, 0xd4, 0xf2, - 0x8d, 0x85, 0xac, 0xd5, 0x7e, 0x20, 0x45, 0x22, 0x23, 0x10, 0xfc, 0xe6, 0x18, 0xb6, 0x25, 0xbf, - 0x91, 0x83, 0x19, 0x71, 0x74, 0xf4, 0x3e, 0xe0, 0x15, 0x32, 0xc2, 0x4e, 0xbd, 0xcf, 0x99, 0x17, - 0xed, 0xb0, 0xe7, 0x94, 0xda, 0x99, 0x8d, 0x84, 0x06, 0x4c, 0x69, 0x24, 0x2e, 0x14, 0xb9, 0xd5, - 0x62, 0x26, 0xf5, 0x78, 0x65, 0xfe, 0xdc, 0xb4, 0x47, 0x4e, 0xa5, 0xc2, 0x46, 0xad, 0x85, 0xfc, - 0xa6, 0x2c, 0xf3, 0x55, 0x85, 0xee, 0xea, 0xe3, 0x83, 0x4b, 0xe7, 0xf9, 0xf1, 0xc1, 0x7c, 0x50, - 0xe3, 0x9b, 0xd0, 0x80, 0x69, 0x95, 0xe4, 0x1e, 0x5c, 0x16, 0x31, 0xcd, 0x01, 0x4b, 0x57, 0xa5, - 0x5d, 0x96, 0x2f, 0x08, 0xcf, 0x9f, 0x1c, 0x57, 0x2f, 0xd7, 0xb3, 0x04, 0x30, 0xbb, 0x1d, 0xf9, - 0x08, 0xa6, 0xbd, 0xb8, 0x6b, 0x5f, 0x79, 0x6e, 0x84, 0xe7, 0xeb, 0x44, 0x90, 0x10, 0xe4, 0x40, - 0x12, 0x24, 0x4c, 0xea, 0x22, 0x6f, 0x40, 0xd9, 0x55, 0x96, 0xca, 0xe2, 0xbd, 0xca, 0x15, 0x39, - 0x06, 0x79, 0xa3, 0x6e, 0x47, 0x64, 0x8c, 0xcb, 0x90, 0xfb, 0x50, 0xf6, 0x9d, 0x2e, 0xf3, 0x54, - 0xaa, 0xbd, 0x22, 0x17, 0x7f, 0x31, 0x6b, 0x27, 0xef, 0x68, 0xb1, 0x28, 0x91, 0x1b, 0xd1, 0x38, - 0xc6, 0x71, 0x44, 0x84, 0x18, 0xd6, 0x4c, 0x7a, 0x32, 0x1c, 0x7e, 0x3e, 0x19, 0x21, 0x36, 0xe3, - 0x4c, 0x4c, 0xca, 0x8a, 0x98, 0xcf, 0xf5, 0x2c, 0xc7, 0xb3, 0xfc, 0xa3, 0xe5, 0x2e, 0xe5, 0x5c, - 0x02, 0x2c, 0x48, 0x00, 0x1d, 0xf3, 0x6d, 0xa7, 0x05, 0x70, 0xb0, 0x8d, 0x70, 0xd5, 0x42, 0x62, - 0xe5, 0x85, 0xc8, 0x55, 0x0b, 0xdb, 0xa2, 0xe6, 0x9e, 0x52, 0xcc, 0x73, 0x75, 0x98, 0x62, 0x1e, - 0xd2, 0x82, 0xab, 0xb4, 0xef, 0x3b, 0x3d, 0x41, 0x48, 0x36, 0xd9, 0x71, 0xf6, 0x99, 0x5d, 0xb9, - 0x26, 0xef, 0xaa, 0x6b, 0x27, 0xc7, 0xd5, 0xab, 0xf5, 0x2f, 0x90, 0xc3, 0x2f, 0x44, 0x21, 0x3d, - 0x28, 0x32, 0x55, 0x90, 0x54, 0xf9, 0xca, 0x08, 0x97, 0x44, 0xb2, 0xaa, 0x29, 0x98, 0xa0, 0x90, - 0x86, 0x5a, 0x05, 0xd9, 0x81, 0x72, 0xc7, 0xe1, 0x7e, 0xbd, 0x6b, 0x51, 0xce, 0x78, 0xe5, 0x45, - 0xb9, 0x4f, 0x32, 0xef, 0xb7, 0x5b, 0xa1, 0x58, 0xb4, 0x4d, 0x6e, 0x45, 0x2d, 0x31, 0x0e, 0x43, - 0x98, 0x0c, 0x8e, 0xfa, 0x72, 0xd5, 0x1c, 0xdb, 0x67, 0x1f, 0xfa, 0x95, 0x45, 0x39, 0x96, 0x57, - 0xb2, 0x90, 0xb7, 0x9d, 0x56, 0x33, 0x29, 0x1d, 0x9c, 0xf2, 0x14, 0x11, 0xd3, 0x98, 0xe4, 0x4d, - 0x98, 0x72, 0x9d, 0x56, 0xd3, 0x65, 0xe6, 0x36, 0xf5, 0xcd, 0x4e, 0xa5, 0x9a, 0x7c, 0x28, 0xd8, - 0x8e, 0xf1, 0x30, 0x21, 0xb9, 0xf0, 0x1e, 0x5c, 0x1c, 0xf0, 0xa7, 0x9e, 0xe8, 0x55, 0xe5, 0x4f, - 0x73, 0x10, 0x77, 0x67, 0xcf, 0xdd, 0xef, 0x5f, 0x87, 0x8b, 0xaa, 0x24, 0x58, 0x5c, 0xb6, 0xdd, - 0xbe, 0x1f, 0x46, 0xc9, 0xb1, 0xfc, 0x08, 0xa6, 0x05, 0x70, 0xb0, 0x8d, 0xf1, 0x67, 0x39, 0x98, - 0x4e, 0x98, 0xef, 0x73, 0x8f, 0x08, 0xd7, 0x80, 0xf4, 0x2c, 0xcf, 0x73, 0xbc, 0xe0, 0x0e, 0xdc, - 0x14, 0x7b, 0x99, 0xab, 0xcf, 0x09, 0x64, 0x41, 0xc6, 0xe6, 0x00, 0x17, 0x33, 0x5a, 0x18, 0x7f, - 0x99, 0x83, 0x28, 0x01, 0xa7, 0xab, 0x90, 0x72, 0xa7, 0x56, 0x21, 0xbd, 0x0a, 0xc5, 0x47, 0xdc, - 0xb1, 0xb7, 0xa3, 0x5a, 0x25, 0x3d, 0xa1, 0xb7, 0x9b, 0xf7, 0xb6, 0xa4, 0xa4, 0x96, 0x90, 0xd2, - 0x1f, 0xac, 0x59, 0x5d, 0x7f, 0xb0, 0xa2, 0xe7, 0xf6, 0x2f, 0x06, 0x74, 0xd4, 0x12, 0x64, 0x09, - 0x4a, 0x3a, 0xe7, 0xab, 0x42, 0x49, 0x3d, 0x09, 0x3a, 0xe1, 0x89, 0x91, 0x8c, 0xf1, 0xa3, 0x31, - 0x28, 0xfe, 0x7f, 0xfb, 0x36, 0x62, 0x3f, 0xf5, 0x6d, 0xc4, 0xf2, 0x88, 0x69, 0xe4, 0x2f, 0xfa, - 0x2e, 0xc2, 0xf8, 0x34, 0x07, 0x53, 0xcf, 0xf0, 0xf3, 0x84, 0xdd, 0xe4, 0xe7, 0x09, 0xef, 0x8c, - 0x34, 0xb4, 0x53, 0x3e, 0x4d, 0xf8, 0x9b, 0xf9, 0x68, 0x48, 0x62, 0x5a, 0x89, 0x0d, 0xa5, 0xf0, - 0x80, 0x87, 0xa9, 0xf9, 0x77, 0x46, 0x0a, 0x0a, 0xa3, 0x4d, 0x19, 0x52, 0x38, 0x46, 0x2a, 0xc8, - 0x0d, 0x00, 0x26, 0x2c, 0x5b, 0x90, 0xb7, 0x1b, 0x4b, 0x66, 0xae, 0x57, 0x35, 0x07, 0x63, 0x52, - 0xcf, 0x3e, 0xe1, 0x90, 0x7d, 0x45, 0x4f, 0x3c, 0x95, 0x2b, 0xfa, 0xea, 0xb9, 0x5f, 0xd1, 0x2f, - 0x3e, 0xfd, 0x2b, 0x3a, 0x16, 0x90, 0xe4, 0x47, 0x08, 0x48, 0x3e, 0x82, 0x4b, 0xc1, 0x9f, 0xcb, - 0x5d, 0x6a, 0xf5, 0xf4, 0x7e, 0x51, 0xe5, 0x44, 0x5f, 0xcd, 0xbc, 0x98, 0x99, 0xc7, 0x2d, 0xee, - 0x33, 0xdb, 0x7f, 0x10, 0xb5, 0x8c, 0xde, 0xa2, 0x1f, 0x64, 0xc0, 0x61, 0xa6, 0x92, 0xb4, 0x07, - 0x3b, 0x79, 0x06, 0x0f, 0xf6, 0x87, 0x39, 0xb8, 0x4c, 0xb3, 0xbe, 0x68, 0x54, 0x79, 0x8c, 0xdb, - 0x23, 0xc5, 0x13, 0x09, 0x44, 0x15, 0x0f, 0x64, 0xb1, 0x30, 0xbb, 0x0f, 0xe4, 0xe5, 0x28, 0x24, - 0x2d, 0xc9, 0x4d, 0x95, 0x1d, 0x4c, 0x7e, 0x3f, 0x9d, 0x0a, 0x02, 0x39, 0xdb, 0xcd, 0x91, 0x0d, - 0xf6, 0x39, 0xa4, 0x83, 0xca, 0x23, 0xa4, 0x83, 0x52, 0xe1, 0xc5, 0xd4, 0x39, 0x85, 0x17, 0x36, - 0xcc, 0x59, 0x3d, 0xda, 0x66, 0xdb, 0xfd, 0x6e, 0x37, 0xc8, 0x7e, 0xf3, 0xca, 0xb4, 0xc4, 0xce, - 0xac, 0x01, 0x15, 0xe1, 0x5e, 0x37, 0xb8, 0x1f, 0xf5, 0x83, 0x50, 0xf4, 0x60, 0xb3, 0x91, 0x42, - 0xc2, 0x01, 0x6c, 0xb1, 0x2d, 0x85, 0xdb, 0xba, 0xc5, 0x7c, 0x31, 0xdb, 0x32, 0x53, 0xa2, 0xbe, - 0xdc, 0xbe, 0x15, 0x91, 0x31, 0x2e, 0x43, 0xee, 0x40, 0xa9, 0x65, 0x73, 0xf5, 0x31, 0xd6, 0xac, - 0xb4, 0x52, 0xaf, 0x09, 0xdb, 0xb6, 0xb2, 0xd5, 0xd4, 0x1f, 0x60, 0x5d, 0x1d, 0xfc, 0xaf, 0x29, - 0x6a, 0x9a, 0x8f, 0x51, 0x7b, 0xb2, 0x29, 0xc1, 0x54, 0x41, 0x74, 0x90, 0xda, 0xb8, 0x76, 0x8a, - 0x87, 0xbc, 0xb2, 0x15, 0xd6, 0x6f, 0x4f, 0x2b, 0x75, 0xaa, 0xcc, 0x39, 0x42, 0x20, 0xaf, 0x40, - 0xc1, 0xb1, 0x57, 0x3f, 0xb4, 0xfc, 0xca, 0xc5, 0x64, 0xf6, 0xfb, 0x9e, 0xa4, 0xa2, 0xe2, 0x92, - 0xfb, 0x70, 0xc5, 0xf7, 0xbb, 0x2a, 0xb4, 0xad, 0xef, 0xf9, 0xcc, 0x0b, 0x8b, 0x1e, 0x64, 0xe1, - 0x4a, 0x3e, 0xf8, 0x6a, 0x6b, 0x67, 0xe7, 0x6e, 0x96, 0x08, 0x9e, 0xd6, 0xf6, 0xf4, 0xa0, 0x7b, - 0x7e, 0xc8, 0xa0, 0x3b, 0x1e, 0xe7, 0x5d, 0xfa, 0xc2, 0x38, 0x6f, 0x20, 0x2e, 0xbd, 0xfc, 0x04, - 0x71, 0xe9, 0xfb, 0xb2, 0xb4, 0x63, 0x7d, 0x59, 0xc5, 0xf4, 0x6f, 0x0d, 0x97, 0x4a, 0x14, 0x08, - 0xc1, 0x0b, 0x9f, 0xfc, 0x13, 0x03, 0x4c, 0xb2, 0x0d, 0x97, 0x5c, 0xa7, 0x35, 0x10, 0xd6, 0xca, - 0x20, 0x3e, 0x56, 0xd7, 0xb3, 0x9d, 0x21, 0x83, 0x99, 0x2d, 0xa5, 0x2d, 0x8d, 0xe8, 0x95, 0x8a, - 0x9c, 0x98, 0xc0, 0x96, 0x46, 0x64, 0x8c, 0xcb, 0xa4, 0xa3, 0xbc, 0xe7, 0x9f, 0x5a, 0x94, 0xb7, - 0xf0, 0x0c, 0xa2, 0xbc, 0x17, 0x9e, 0x5d, 0x94, 0xf7, 0x59, 0x11, 0x66, 0x52, 0xdf, 0x20, 0xea, - 0xaa, 0xaa, 0xdc, 0x59, 0xab, 0xaa, 0x12, 0x65, 0x4f, 0x63, 0x4f, 0xb5, 0xec, 0x69, 0xfc, 0xdc, - 0xcb, 0x9e, 0x62, 0xe5, 0x5d, 0x13, 0x5f, 0x52, 0xde, 0x55, 0x87, 0x59, 0xd3, 0xe9, 0xb9, 0xf2, - 0x0b, 0x0a, 0x55, 0xe4, 0x13, 0x3c, 0xc4, 0xeb, 0xa7, 0xce, 0xe5, 0x24, 0x1b, 0xd3, 0xf2, 0x84, - 0x43, 0xde, 0x96, 0x0d, 0x0b, 0x23, 0x94, 0x86, 0x26, 0x17, 0x4c, 0x5e, 0x94, 0xaa, 0x3a, 0x53, - 0xbb, 0xe9, 0x81, 0xfa, 0x40, 0x97, 0x70, 0x34, 0x66, 0x93, 0xe5, 0x78, 0xbc, 0x52, 0x92, 0xfa, - 0x7f, 0xe9, 0x3c, 0xf4, 0x27, 0x6b, 0xff, 0x54, 0x4f, 0xa2, 0xd7, 0xdf, 0x24, 0x17, 0xd3, 0x3d, - 0x21, 0x1e, 0x3c, 0xe7, 0x66, 0xb9, 0x61, 0x5c, 0xbd, 0x2a, 0x7d, 0x91, 0x33, 0xb8, 0xa8, 0xb4, - 0x3c, 0x97, 0xe9, 0xc8, 0x71, 0x3c, 0x05, 0x39, 0x5e, 0x3b, 0x56, 0x7c, 0x5a, 0xb5, 0x63, 0x0b, - 0x47, 0x41, 0x59, 0xea, 0xa9, 0x15, 0xad, 0xf7, 0x93, 0x55, 0xe6, 0xef, 0x0d, 0xf9, 0x9f, 0x15, - 0x85, 0x85, 0xaf, 0xf1, 0x6a, 0xda, 0x5f, 0xcf, 0xc1, 0xa5, 0xac, 0x65, 0xc9, 0xe8, 0x45, 0x33, - 0xd9, 0x8b, 0xd1, 0xc2, 0xb5, 0xb8, 0x69, 0xf9, 0xb7, 0x7c, 0x2c, 0x38, 0xf4, 0x99, 0xfb, 0xd3, - 0x97, 0xe3, 0xa1, 0x5e, 0x8e, 0x13, 0x5f, 0x0a, 0xe7, 0x9f, 0xe1, 0x97, 0xc2, 0x85, 0x21, 0xbe, - 0x14, 0x9e, 0x7c, 0x96, 0x5f, 0x0a, 0x17, 0xcf, 0xf8, 0xa5, 0x70, 0xe9, 0xe9, 0x7f, 0x29, 0xfc, - 0x79, 0x0e, 0xe6, 0xd2, 0x85, 0xcb, 0xcf, 0x20, 0x49, 0xb6, 0x9f, 0x48, 0x92, 0x6d, 0x8c, 0x64, - 0xcc, 0xc3, 0x6e, 0x9f, 0x96, 0x2c, 0x33, 0x7e, 0x9c, 0x83, 0x81, 0xe2, 0xec, 0x67, 0x90, 0xc7, - 0x7a, 0x94, 0xcc, 0x63, 0xad, 0x9e, 0xcb, 0x20, 0x4f, 0xc9, 0x67, 0xfd, 0x77, 0xc6, 0x10, 0xff, - 0x57, 0xf2, 0x5a, 0x09, 0xd3, 0x36, 0xf6, 0xf4, 0x4d, 0x5b, 0xa3, 0xf6, 0xc9, 0xe7, 0x8b, 0x17, - 0x3e, 0xfd, 0x7c, 0xf1, 0xc2, 0x67, 0x9f, 0x2f, 0x5e, 0xf8, 0xf8, 0x64, 0x31, 0xf7, 0xc9, 0xc9, - 0x62, 0xee, 0xd3, 0x93, 0xc5, 0xdc, 0x67, 0x27, 0x8b, 0xb9, 0x1f, 0x9f, 0x2c, 0xe6, 0x7e, 0xef, - 0x5f, 0x16, 0x2f, 0xfc, 0x72, 0x31, 0xc4, 0xfd, 0x9f, 0x00, 0x00, 0x00, 0xff, 0xff, 0xde, 0x00, - 0x4c, 0xbf, 0x45, 0x51, 0x00, 0x00, + // 4961 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xec, 0x7c, 0x4d, 0x6c, 0x1c, 0x47, + 0x76, 0xbf, 0x86, 0xe4, 0x0c, 0x67, 0xde, 0xf0, 0x4b, 0x45, 0x7d, 0x8c, 0x69, 0x99, 0xa3, 0x6d, + 0xc3, 0xfe, 0x6b, 0xff, 0x6b, 0x0f, 0x6d, 0x69, 0x37, 0xf1, 0xda, 0xb1, 0xbd, 0x33, 0xfc, 0x12, + 0x25, 0x91, 0x62, 0xde, 0x50, 0x52, 0x36, 0x5e, 0xec, 0xa6, 0xd9, 0x5d, 0x33, 0xd3, 0xe2, 0x4c, + 0x77, 0xbb, 0xab, 0x87, 0x34, 0xe1, 0x43, 0x9c, 0x20, 0x9b, 0x0f, 0x04, 0x0b, 0x24, 0x97, 0x64, + 0x91, 0xbd, 0x04, 0x39, 0x24, 0x97, 0x5c, 0x72, 0x4d, 0x82, 0x0d, 0x10, 0xe4, 0x60, 0xe4, 0x12, + 0xdf, 0xe2, 0x43, 0x40, 0xac, 0x99, 0x4b, 0x82, 0x04, 0x08, 0x90, 0x4b, 0x00, 0x9d, 0x82, 0xaa, + 0xae, 0xae, 0xfe, 0x98, 0xa6, 0x4c, 0xce, 0x50, 0x0a, 0x92, 0xdd, 0x93, 0x38, 0xef, 0xbd, 0xfa, + 0xbd, 0xfa, 0x7c, 0xf5, 0xde, 0xab, 0xd7, 0x82, 0xe5, 0xb6, 0xe5, 0x77, 0xfa, 0xbb, 0x35, 0xc3, + 0xe9, 0x2d, 0xe9, 0x5e, 0xdb, 0x71, 0x3d, 0xe7, 0xb1, 0xf8, 0x63, 0xc9, 0xdd, 0x6b, 0x2f, 0xe9, + 0xae, 0xc5, 0x96, 0x0e, 0x1c, 0x6f, 0xaf, 0xd5, 0x75, 0x0e, 0x96, 0xf6, 0xdf, 0xd4, 0xbb, 0x6e, + 0x47, 0x7f, 0x73, 0xa9, 0x4d, 0x6d, 0xea, 0xe9, 0x3e, 0x35, 0x6b, 0xae, 0xe7, 0xf8, 0x0e, 0xb9, + 0x15, 0x81, 0xd4, 0x42, 0x10, 0xf1, 0x47, 0xcd, 0xdd, 0x6b, 0xd7, 0x38, 0x48, 0x2d, 0x04, 0xa9, + 0x85, 0x20, 0x0b, 0xaf, 0xc7, 0x34, 0xb7, 0x1d, 0xae, 0x90, 0x63, 0xed, 0xf6, 0x5b, 0xe2, 0x97, + 0xf8, 0x21, 0xfe, 0x0a, 0x74, 0x2c, 0x68, 0x7b, 0x6f, 0xb1, 0x9a, 0xe5, 0xf0, 0x2e, 0x2d, 0x19, + 0x8e, 0x47, 0x97, 0xf6, 0x07, 0xfa, 0xb1, 0xf0, 0xf5, 0x48, 0xa6, 0xa7, 0x1b, 0x1d, 0xcb, 0xa6, + 0xde, 0x61, 0x34, 0x8e, 0x1e, 0xf5, 0xf5, 0xac, 0x56, 0x4b, 0x27, 0xb5, 0xf2, 0xfa, 0xb6, 0x6f, + 0xf5, 0xe8, 0x40, 0x83, 0x9f, 0xfb, 0xb2, 0x06, 0xcc, 0xe8, 0xd0, 0x9e, 0x9e, 0x6e, 0xa7, 0xfd, + 0x43, 0x0e, 0x66, 0xeb, 0x9e, 0xd1, 0xb1, 0xf6, 0x69, 0xd3, 0xe7, 0x8c, 0xf6, 0x21, 0xf9, 0x00, + 0xc6, 0x7d, 0xdd, 0xab, 0xe4, 0xae, 0xe7, 0x6e, 0x94, 0x6f, 0x7e, 0xab, 0x36, 0xc4, 0x44, 0xd6, + 0x76, 0x74, 0x2f, 0x84, 0x6b, 0x4c, 0x1e, 0x1f, 0x55, 0xc7, 0x77, 0x74, 0x0f, 0x39, 0x2a, 0xf9, + 0x1e, 0x4c, 0xd8, 0x8e, 0x4d, 0x2b, 0x63, 0x02, 0xbd, 0x3e, 0x14, 0xfa, 0x96, 0x63, 0xab, 0xde, + 0x36, 0x8a, 0xc7, 0x47, 0xd5, 0x09, 0x4e, 0x41, 0x01, 0xac, 0xfd, 0x47, 0x0e, 0x4a, 0x75, 0xaf, + 0xdd, 0xef, 0x51, 0xdb, 0x67, 0xc4, 0x03, 0x70, 0x75, 0x4f, 0xef, 0x51, 0x9f, 0x7a, 0xac, 0x92, + 0xbb, 0x3e, 0x7e, 0xa3, 0x7c, 0xf3, 0xbd, 0xa1, 0x94, 0x6e, 0x87, 0x30, 0x0d, 0xf2, 0xe9, 0x51, + 0xf5, 0xc2, 0xf1, 0x51, 0x15, 0x14, 0x89, 0x61, 0x4c, 0x0b, 0xb1, 0xa1, 0xa4, 0x7b, 0xbe, 0xd5, + 0xd2, 0x0d, 0x9f, 0x55, 0xc6, 0x84, 0xca, 0x77, 0x87, 0x52, 0x59, 0x97, 0x28, 0x8d, 0x8b, 0x52, + 0x63, 0x29, 0xa4, 0x30, 0x8c, 0x54, 0x68, 0xff, 0x36, 0x0e, 0xc5, 0x90, 0x41, 0xae, 0xc3, 0x84, + 0xad, 0xf7, 0xa8, 0x58, 0xbd, 0x52, 0x63, 0x4a, 0x36, 0x9c, 0xd8, 0xd2, 0x7b, 0x7c, 0x82, 0xf4, + 0x1e, 0xe5, 0x12, 0xae, 0xee, 0x77, 0xc4, 0x0a, 0xc4, 0x24, 0xb6, 0x75, 0xbf, 0x83, 0x82, 0x43, + 0xae, 0xc1, 0x44, 0xcf, 0x31, 0x69, 0x65, 0xfc, 0x7a, 0xee, 0x46, 0x3e, 0x98, 0xe0, 0x4d, 0xc7, + 0xa4, 0x28, 0xa8, 0xbc, 0x7d, 0xcb, 0x73, 0x7a, 0x95, 0x89, 0x64, 0xfb, 0x35, 0xcf, 0xe9, 0xa1, + 0xe0, 0x90, 0xdf, 0xcd, 0xc1, 0x5c, 0xd8, 0xbd, 0x7b, 0x8e, 0xa1, 0xfb, 0x96, 0x63, 0x57, 0xf2, + 0x62, 0xc1, 0x57, 0x47, 0x9a, 0x88, 0x10, 0xac, 0x51, 0x91, 0x5a, 0xe7, 0xd2, 0x1c, 0x1c, 0x50, + 0x4c, 0x6e, 0x02, 0xb4, 0xbb, 0xce, 0xae, 0xde, 0xe5, 0x73, 0x50, 0x29, 0x88, 0x5e, 0xab, 0x25, + 0x5c, 0x57, 0x1c, 0x8c, 0x49, 0x91, 0x3d, 0x98, 0xd4, 0x83, 0x53, 0x51, 0x99, 0x14, 0xfd, 0x5e, + 0x19, 0xb2, 0xdf, 0x89, 0x93, 0xd5, 0x28, 0x1f, 0x1f, 0x55, 0x27, 0x25, 0x11, 0x43, 0x0d, 0xe4, + 0x35, 0x28, 0x3a, 0x2e, 0xef, 0xaa, 0xde, 0xad, 0x14, 0xaf, 0xe7, 0x6e, 0x14, 0x1b, 0x73, 0xb2, + 0x7b, 0xc5, 0xfb, 0x92, 0x8e, 0x4a, 0x42, 0xfb, 0xc3, 0x3c, 0x0c, 0x8c, 0x9a, 0xbc, 0x09, 0x65, + 0x89, 0x76, 0xcf, 0x69, 0x33, 0xb1, 0xf8, 0xc5, 0xc6, 0xec, 0xf1, 0x51, 0xb5, 0x5c, 0x8f, 0xc8, + 0x18, 0x97, 0x21, 0x8f, 0x60, 0x8c, 0xdd, 0x92, 0xc7, 0xf0, 0xfd, 0xa1, 0x46, 0xd7, 0xbc, 0xa5, + 0x36, 0x68, 0xe1, 0xf8, 0xa8, 0x3a, 0xd6, 0xbc, 0x85, 0x63, 0xec, 0x16, 0x37, 0x1f, 0x6d, 0xcb, + 0x17, 0x9b, 0x67, 0x58, 0xf3, 0xb1, 0x6e, 0xf9, 0x0a, 0x5a, 0x98, 0x8f, 0x75, 0xcb, 0x47, 0x8e, + 0xca, 0xcd, 0x47, 0xc7, 0xf7, 0x5d, 0xb1, 0xf9, 0x86, 0x35, 0x1f, 0xb7, 0x77, 0x76, 0xb6, 0x15, + 0xbc, 0xd8, 0xdd, 0x9c, 0x82, 0x02, 0x98, 0x7c, 0xcc, 0x67, 0x32, 0xe0, 0x39, 0xde, 0xa1, 0xdc, + 0xb5, 0xb7, 0x47, 0xda, 0xb5, 0x8e, 0x77, 0xa8, 0xd4, 0xc9, 0x35, 0x51, 0x0c, 0x8c, 0x6b, 0x13, + 0xa3, 0x33, 0x5b, 0x4c, 0x6c, 0xd2, 0xa1, 0x47, 0xb7, 0xb2, 0xd6, 0x4c, 0x8d, 0x6e, 0x65, 0xad, + 0x89, 0x02, 0x98, 0xaf, 0x8d, 0xa7, 0x1f, 0xc8, 0x3d, 0x3d, 0xdc, 0xda, 0xa0, 0x7e, 0x90, 0x5c, + 0x1b, 0xd4, 0x0f, 0x90, 0xa3, 0x6a, 0x6d, 0xb8, 0x1c, 0x72, 0x90, 0xba, 0x0e, 0xb3, 0xc4, 0x00, + 0x69, 0x8b, 0x2c, 0x41, 0xc9, 0x70, 0xec, 0x96, 0xd5, 0xde, 0xd4, 0x5d, 0x69, 0x98, 0x94, 0x45, + 0x5b, 0x0e, 0x19, 0x18, 0xc9, 0x90, 0x97, 0x60, 0x7c, 0x8f, 0x1e, 0x4a, 0x0b, 0x55, 0x96, 0xa2, + 0xe3, 0x77, 0xe9, 0x21, 0x72, 0xba, 0xf6, 0xe3, 0x1c, 0xcc, 0x67, 0x4c, 0x2e, 0x6f, 0xd6, 0xf7, + 0xba, 0x52, 0x83, 0x6a, 0xf6, 0x00, 0xef, 0x21, 0xa7, 0x93, 0xdf, 0xca, 0xc1, 0x6c, 0x6c, 0xb6, + 0xeb, 0x7d, 0x69, 0x04, 0x87, 0x3f, 0xdd, 0x09, 0xac, 0xc6, 0x55, 0xa9, 0x71, 0x36, 0xc5, 0xc0, + 0xb4, 0x56, 0xed, 0x1f, 0xc5, 0xad, 0x9b, 0xa0, 0x11, 0x1d, 0x66, 0xfa, 0x8c, 0x7a, 0xdc, 0x44, + 0x37, 0xa9, 0xe1, 0x51, 0x5f, 0x5e, 0xc0, 0xaf, 0xd4, 0x82, 0xab, 0x9d, 0xf7, 0xa2, 0xc6, 0xbd, + 0x8c, 0xda, 0xfe, 0x9b, 0xb5, 0x40, 0xe2, 0x2e, 0x3d, 0x6c, 0xd2, 0x2e, 0xe5, 0x18, 0x0d, 0x72, + 0x7c, 0x54, 0x9d, 0x79, 0x90, 0x00, 0xc0, 0x14, 0x20, 0x57, 0xe1, 0xea, 0x8c, 0x1d, 0x38, 0x9e, + 0x29, 0x55, 0x8c, 0x9d, 0x59, 0xc5, 0x76, 0x02, 0x00, 0x53, 0x80, 0xda, 0xb7, 0x01, 0x96, 0x1d, + 0xdb, 0xb7, 0xec, 0x3e, 0xbd, 0x6f, 0x93, 0x97, 0x21, 0x4f, 0x3d, 0xcf, 0xf1, 0xa4, 0x41, 0x9a, + 0x96, 0x13, 0x94, 0x5f, 0xe5, 0x44, 0x0c, 0x78, 0xe4, 0x55, 0x28, 0xb4, 0x74, 0xab, 0x4b, 0x4d, + 0xd1, 0x9b, 0x62, 0x63, 0x46, 0x4a, 0x15, 0xd6, 0x04, 0x15, 0x25, 0x57, 0xfb, 0xab, 0x71, 0x98, + 0x5a, 0xf6, 0x1c, 0xfb, 0x91, 0x5c, 0x08, 0xf2, 0x2b, 0x50, 0xe4, 0xfe, 0x93, 0xa9, 0xfb, 0xba, + 0x9c, 0xab, 0x37, 0x62, 0x03, 0x51, 0x6e, 0x50, 0xb4, 0x84, 0x5c, 0x9a, 0x0f, 0xed, 0xfe, 0xee, + 0x63, 0x6a, 0xf8, 0x9b, 0xd4, 0xd7, 0xa3, 0x8b, 0x20, 0xa2, 0xa1, 0x42, 0x25, 0x06, 0x4c, 0x30, + 0x97, 0x1a, 0x23, 0x39, 0x2b, 0x61, 0x77, 0x9b, 0x2e, 0x35, 0xa2, 0xdb, 0x92, 0xff, 0x42, 0x01, + 0x4e, 0x1c, 0x28, 0x30, 0x5f, 0xf7, 0xfb, 0x4c, 0x9a, 0xcc, 0xf5, 0xa1, 0xd4, 0xc4, 0x67, 0xa6, + 0x29, 0xe0, 0xa2, 0x89, 0x0c, 0x7e, 0xa3, 0x54, 0x43, 0x18, 0x4c, 0x06, 0xb7, 0x09, 0x93, 0x66, + 0xf4, 0xf6, 0xc8, 0x1a, 0x83, 0x7b, 0x8a, 0x35, 0x66, 0xa5, 0xca, 0x49, 0x49, 0xc0, 0x50, 0x93, + 0xf6, 0x79, 0x0e, 0xe6, 0xe2, 0x2d, 0xee, 0x59, 0xcc, 0x27, 0xdf, 0x19, 0x58, 0xc1, 0xda, 0xe9, + 0x56, 0x90, 0xb7, 0x16, 0xeb, 0xa7, 0x6e, 0xca, 0x90, 0x12, 0x5b, 0xbd, 0x16, 0xe4, 0x2d, 0x9f, + 0xf6, 0x42, 0x1f, 0xac, 0x3e, 0xf2, 0x28, 0xa3, 0x0d, 0xbc, 0xc1, 0x71, 0x31, 0x80, 0xd7, 0x7e, + 0x33, 0x0f, 0xf3, 0x19, 0x93, 0xc1, 0xef, 0x75, 0xee, 0x75, 0x9b, 0xfd, 0x6e, 0xe8, 0x8e, 0xa9, + 0xde, 0x36, 0x25, 0x1d, 0x95, 0x04, 0x59, 0x81, 0x39, 0xe9, 0xab, 0x73, 0x0f, 0x84, 0xb9, 0xba, + 0x41, 0xa5, 0x01, 0x54, 0xce, 0x0e, 0xa6, 0xf8, 0x38, 0xd0, 0x82, 0x6c, 0xc2, 0xbc, 0xa4, 0xad, + 0x4b, 0x4f, 0x5f, 0x78, 0x3d, 0xe3, 0x02, 0xe8, 0x45, 0x09, 0x34, 0x8f, 0x83, 0x22, 0x98, 0xd5, + 0x8e, 0xec, 0xc3, 0x45, 0xc3, 0xb1, 0x8d, 0xbe, 0xe7, 0x51, 0xdb, 0x38, 0xdc, 0x76, 0xba, 0x96, + 0x71, 0x28, 0x1d, 0xbf, 0xdb, 0x12, 0xec, 0xe2, 0x72, 0x5a, 0xe0, 0xc9, 0x51, 0xf5, 0x6b, 0xb1, + 0xc8, 0x68, 0x57, 0xf7, 0x8d, 0xce, 0xd2, 0xfe, 0xcd, 0x70, 0x42, 0xd3, 0xe2, 0x38, 0xa8, 0x82, + 0x7c, 0x15, 0x26, 0x59, 0x9f, 0xb9, 0xd4, 0x36, 0xc5, 0x0d, 0x5c, 0x8c, 0x36, 0x56, 0x33, 0x20, + 0x63, 0xc8, 0x27, 0x0f, 0xe0, 0x2a, 0xf3, 0xb9, 0x81, 0xb5, 0xdb, 0x2b, 0x54, 0x37, 0xbb, 0x96, + 0xcd, 0xcd, 0x9d, 0x63, 0x9b, 0xc1, 0x35, 0x3a, 0xde, 0x78, 0xf1, 0xf8, 0xa8, 0x7a, 0xb5, 0x99, + 0x2d, 0x82, 0x27, 0xb5, 0x25, 0xdf, 0x85, 0x05, 0xd6, 0x37, 0x0c, 0xca, 0x58, 0xab, 0xdf, 0xbd, + 0xe3, 0xec, 0xb2, 0xdb, 0x16, 0xe3, 0xb6, 0xfa, 0x9e, 0xd5, 0xb3, 0x7c, 0x71, 0x81, 0xe6, 0x1b, + 0x8b, 0xc7, 0x47, 0xd5, 0x85, 0xe6, 0x89, 0x52, 0xf8, 0x14, 0x04, 0x82, 0x70, 0x25, 0xb0, 0x6b, + 0x03, 0xd8, 0x45, 0x81, 0xbd, 0x70, 0x7c, 0x54, 0xbd, 0xb2, 0x96, 0x29, 0x81, 0x27, 0xb4, 0xd4, + 0xbe, 0x9f, 0x03, 0x32, 0x68, 0x07, 0x88, 0x03, 0x17, 0xbb, 0x3a, 0xf3, 0xc3, 0x3d, 0x67, 0xee, + 0x58, 0x32, 0x3e, 0x28, 0xdf, 0xfc, 0xff, 0xa7, 0x3b, 0x6e, 0xbc, 0x45, 0xe3, 0x32, 0x5f, 0xec, + 0x7b, 0x69, 0x20, 0x1c, 0xc4, 0xd6, 0xfe, 0xa8, 0x00, 0x93, 0x2b, 0xf5, 0xf5, 0x1d, 0x9d, 0xed, + 0x9d, 0x22, 0x1e, 0x79, 0x0d, 0x8a, 0x3e, 0xed, 0xb9, 0x5d, 0xdd, 0x0f, 0x37, 0xbc, 0x3a, 0x26, + 0x3b, 0x92, 0x8e, 0x4a, 0x82, 0x38, 0x3c, 0xb8, 0x92, 0xd1, 0x9d, 0x34, 0x98, 0xef, 0x0d, 0x79, + 0x7b, 0x4b, 0x94, 0x78, 0x74, 0x25, 0x49, 0x18, 0xe9, 0x20, 0x0c, 0xca, 0xa1, 0x72, 0xa4, 0x2d, + 0x69, 0x31, 0x87, 0x8c, 0x8a, 0x23, 0x9c, 0xc0, 0x11, 0x8c, 0x11, 0x30, 0xae, 0x85, 0x7c, 0x1d, + 0xa6, 0x4c, 0xca, 0xb7, 0x37, 0xb5, 0x0d, 0x8b, 0xb2, 0x4a, 0xfe, 0xfa, 0x38, 0x9f, 0x97, 0xe3, + 0xa3, 0xea, 0xd4, 0x4a, 0x8c, 0x8e, 0x09, 0x29, 0xf2, 0x18, 0x4a, 0x07, 0x96, 0xdf, 0x11, 0xc6, + 0xa9, 0x52, 0x10, 0x46, 0xef, 0x9b, 0x43, 0x75, 0x94, 0x23, 0x44, 0xd3, 0xf2, 0x28, 0xc4, 0xc4, + 0x08, 0x9e, 0xfb, 0x74, 0xfc, 0x87, 0x08, 0x81, 0xc5, 0x71, 0x28, 0x25, 0x1b, 0x08, 0x06, 0x46, + 0x32, 0x84, 0xc1, 0x14, 0xff, 0xd1, 0xa4, 0x1f, 0xf6, 0xa9, 0x6d, 0x50, 0xb1, 0xcd, 0x87, 0x0d, + 0x8c, 0x43, 0x90, 0x60, 0x46, 0x1e, 0xc5, 0x60, 0x31, 0xa1, 0x84, 0xef, 0xbe, 0x83, 0x0e, 0xb5, + 0x2b, 0xa5, 0xe4, 0xee, 0x7b, 0xd4, 0xa1, 0x36, 0x0a, 0x0e, 0x71, 0x00, 0x0c, 0xe5, 0xb0, 0x54, + 0x60, 0x84, 0x70, 0x28, 0xf2, 0x7b, 0x1a, 0x33, 0xdc, 0xa3, 0x88, 0x7e, 0x63, 0x4c, 0x85, 0xf6, + 0xb7, 0x39, 0x28, 0xf3, 0xc3, 0x11, 0x6e, 0xe8, 0x57, 0xa1, 0xe0, 0xeb, 0x5e, 0x5b, 0xfa, 0x7b, + 0xa5, 0xe8, 0xd6, 0xde, 0x11, 0x54, 0x94, 0x5c, 0xa2, 0x43, 0xde, 0xd7, 0xd9, 0x5e, 0x78, 0x9b, + 0xfd, 0xc2, 0x50, 0x7d, 0x94, 0xa7, 0x32, 0xba, 0xc8, 0xf8, 0x2f, 0x86, 0x01, 0x32, 0xb9, 0x01, + 0x45, 0x6e, 0x59, 0xd6, 0x74, 0x16, 0x84, 0x6f, 0xc5, 0xc6, 0x14, 0x3f, 0x85, 0x6b, 0x92, 0x86, + 0x8a, 0xab, 0x7d, 0x07, 0x66, 0x56, 0x3f, 0xa2, 0x46, 0xdf, 0x77, 0xbc, 0xc0, 0x81, 0x27, 0x77, + 0x80, 0x30, 0xea, 0xed, 0x5b, 0x06, 0xad, 0x1b, 0x86, 0xd3, 0xb7, 0xfd, 0xad, 0xe8, 0xd4, 0x2f, + 0x48, 0x6d, 0xa4, 0x39, 0x20, 0x81, 0x19, 0xad, 0xb4, 0x3f, 0x9f, 0x80, 0x72, 0x2c, 0x04, 0xe4, + 0xab, 0xe8, 0x51, 0xd7, 0x49, 0xdb, 0x10, 0x1e, 0x64, 0xa0, 0xe0, 0x70, 0x1b, 0xe2, 0xd1, 0x7d, + 0x8b, 0x59, 0x8e, 0x9d, 0xb6, 0x21, 0x28, 0xe9, 0xa8, 0x24, 0x48, 0x15, 0xf2, 0x26, 0x75, 0xfd, + 0x8e, 0x18, 0xe4, 0x44, 0xa3, 0xc4, 0x27, 0x62, 0x85, 0x13, 0x30, 0xa0, 0x73, 0x81, 0x16, 0xf5, + 0x8d, 0x4e, 0x65, 0x42, 0x9c, 0x3b, 0x21, 0xb0, 0xc6, 0x09, 0x18, 0xd0, 0x33, 0x9c, 0xf5, 0xfc, + 0xb3, 0x77, 0xd6, 0x0b, 0xe7, 0xec, 0xac, 0x13, 0x17, 0xe6, 0x19, 0xeb, 0x6c, 0x7b, 0xd6, 0xbe, + 0xee, 0x53, 0xd1, 0x58, 0xe8, 0x99, 0x3c, 0x8b, 0x9e, 0xab, 0xdc, 0x9f, 0x68, 0x36, 0x6f, 0xa7, + 0x51, 0x30, 0x0b, 0x9a, 0x34, 0xe1, 0xb2, 0x65, 0x33, 0x6a, 0xf4, 0x3d, 0xba, 0xd1, 0xb6, 0x1d, + 0x8f, 0xde, 0x76, 0x18, 0x87, 0x93, 0x79, 0x8f, 0x97, 0xe4, 0xa2, 0x5d, 0xde, 0xc8, 0x12, 0xc2, + 0xec, 0xb6, 0xda, 0xdf, 0xe7, 0x60, 0x2a, 0x1e, 0xf5, 0x12, 0x06, 0xd0, 0x59, 0x59, 0x6b, 0x06, + 0x3b, 0x53, 0xde, 0x74, 0xef, 0x0f, 0x1d, 0x4c, 0x07, 0x30, 0x51, 0xa4, 0x10, 0xd1, 0x30, 0xa6, + 0xe6, 0x14, 0x69, 0xb5, 0x97, 0x21, 0xdf, 0x72, 0x3c, 0x83, 0xca, 0xb3, 0xa5, 0xce, 0xe0, 0x1a, + 0x27, 0x62, 0xc0, 0xd3, 0xfe, 0x25, 0x07, 0x31, 0x0d, 0xe4, 0x57, 0x61, 0x9a, 0xeb, 0xb8, 0xeb, + 0xed, 0x26, 0x46, 0xd3, 0x18, 0x7a, 0x34, 0x0a, 0xa9, 0x71, 0x59, 0xea, 0x9f, 0x4e, 0x90, 0x31, + 0xa9, 0x8f, 0x7c, 0x0d, 0x4a, 0xba, 0x69, 0x7a, 0x94, 0x31, 0x1a, 0x98, 0x9e, 0x52, 0x63, 0x5a, + 0xdc, 0x95, 0x21, 0x11, 0x23, 0x3e, 0x3f, 0x86, 0x1d, 0xb3, 0xc5, 0xf8, 0xce, 0x96, 0x2e, 0xa7, + 0x3a, 0x86, 0x5c, 0x09, 0xa7, 0xa3, 0x92, 0xd0, 0x7e, 0x30, 0x01, 0x49, 0xdd, 0xc4, 0x84, 0xd9, + 0x3d, 0x6f, 0x77, 0x79, 0x59, 0x37, 0x3a, 0x43, 0x05, 0xc1, 0xf3, 0x3c, 0xfa, 0xbe, 0x9b, 0x44, + 0xc0, 0x34, 0xa4, 0xd4, 0x72, 0x97, 0x1e, 0xfa, 0xfa, 0xee, 0x30, 0x71, 0x70, 0xa8, 0x25, 0x8e, + 0x80, 0x69, 0x48, 0xf2, 0x0d, 0x28, 0xef, 0x79, 0xbb, 0xe1, 0x21, 0x97, 0xd3, 0x31, 0x2f, 0xa7, + 0xa3, 0x7c, 0x37, 0x62, 0x61, 0x5c, 0x8e, 0x4f, 0xe1, 0x9e, 0xb7, 0x8b, 0x54, 0xef, 0x86, 0x19, + 0x56, 0x35, 0x85, 0x77, 0x25, 0x1d, 0x95, 0x04, 0x71, 0x81, 0xec, 0x85, 0xb3, 0xa7, 0x32, 0x29, + 0xd2, 0x16, 0xdd, 0xc8, 0x1a, 0x8d, 0x12, 0x8a, 0x0f, 0xe8, 0x0a, 0xb7, 0xcd, 0x77, 0x07, 0x70, + 0x30, 0x03, 0x9b, 0x7c, 0x1b, 0xae, 0xee, 0x79, 0xbb, 0xd2, 0x90, 0x6f, 0x7b, 0x96, 0x6d, 0x58, + 0x6e, 0x22, 0xb5, 0x5a, 0x95, 0xdd, 0xbd, 0x7a, 0x37, 0x5b, 0x0c, 0x4f, 0x6a, 0xaf, 0xbd, 0x0e, + 0x53, 0xf1, 0xd4, 0xdc, 0x97, 0xa4, 0x73, 0xb4, 0x7f, 0xcf, 0x41, 0x61, 0xc3, 0x76, 0xfb, 0x3f, + 0x25, 0x59, 0xfe, 0x3f, 0x99, 0x80, 0x09, 0xee, 0x7a, 0x91, 0x1b, 0x30, 0xe1, 0x1f, 0xba, 0xc1, + 0xdd, 0x3a, 0xde, 0xb8, 0x14, 0x1a, 0x9a, 0x9d, 0x43, 0x97, 0x3e, 0x91, 0xff, 0xa2, 0x90, 0x20, + 0xef, 0x41, 0xc1, 0xee, 0xf7, 0x1e, 0xea, 0x5d, 0x69, 0x94, 0x5e, 0x0d, 0x5d, 0x8b, 0x2d, 0x41, + 0x7d, 0x72, 0x54, 0xbd, 0x44, 0x6d, 0xc3, 0x31, 0x2d, 0xbb, 0xbd, 0xf4, 0x98, 0x39, 0x76, 0x6d, + 0xab, 0xdf, 0xdb, 0xa5, 0x1e, 0xca, 0x56, 0x3c, 0x0a, 0xdb, 0x75, 0x9c, 0x2e, 0x07, 0x18, 0x4f, + 0x46, 0x61, 0x8d, 0x80, 0x8c, 0x21, 0x9f, 0x7b, 0x31, 0xcc, 0xf7, 0xb8, 0xe4, 0x44, 0xd2, 0x8b, + 0x69, 0x0a, 0x2a, 0x4a, 0x2e, 0xe9, 0x41, 0xa1, 0xa7, 0xbb, 0x5c, 0x2e, 0x2f, 0xa6, 0x6c, 0x75, + 0x68, 0xff, 0xb4, 0xb6, 0x29, 0x70, 0x56, 0x6d, 0xdf, 0x3b, 0x8c, 0xd4, 0x05, 0x44, 0x94, 0x4a, + 0x88, 0x05, 0x93, 0x5d, 0x8b, 0xf9, 0x5c, 0x5f, 0x61, 0x84, 0x5d, 0xc1, 0xf5, 0x3d, 0xd4, 0xbb, + 0x7d, 0x1a, 0xcd, 0xc0, 0xbd, 0x00, 0x16, 0x43, 0xfc, 0x85, 0x43, 0x28, 0xc7, 0x7a, 0x44, 0xe6, + 0x82, 0x14, 0xa6, 0xd8, 0xbc, 0x22, 0x6b, 0x49, 0x76, 0x20, 0xbf, 0xcf, 0x31, 0xa4, 0xb1, 0x19, + 0xb1, 0x27, 0x18, 0x80, 0xbd, 0x3d, 0xf6, 0x56, 0xee, 0xed, 0xe2, 0x0f, 0xff, 0xb8, 0x7a, 0xe1, + 0x93, 0x7f, 0xba, 0x7e, 0x41, 0xfb, 0xbb, 0x71, 0x28, 0x29, 0x91, 0xff, 0xdd, 0x3b, 0xc5, 0x4b, + 0xed, 0x94, 0x3b, 0xa3, 0xcd, 0xd7, 0xa9, 0xb6, 0x4b, 0x3d, 0xb9, 0x5d, 0xa6, 0x1a, 0xff, 0x2f, + 0xb6, 0xd4, 0x4f, 0x8e, 0xaa, 0x95, 0xe4, 0x24, 0xa0, 0x7e, 0xb0, 0x49, 0x19, 0xd3, 0xdb, 0x34, + 0xda, 0x06, 0xdf, 0xfc, 0xb2, 0x6d, 0x70, 0x29, 0xbe, 0x0d, 0x4a, 0xd9, 0xcb, 0xf8, 0xc9, 0x38, + 0x14, 0x37, 0xc3, 0x34, 0xd6, 0xf7, 0x73, 0x50, 0xd6, 0x6d, 0xdb, 0xf1, 0xf5, 0x20, 0x67, 0x17, + 0x98, 0xb7, 0xad, 0xa1, 0xa6, 0x23, 0x04, 0xad, 0xd5, 0x23, 0xc0, 0x60, 0x4a, 0xd4, 0xcd, 0x14, + 0xe3, 0x60, 0x5c, 0x2f, 0xf9, 0x10, 0x0a, 0x5d, 0x7d, 0x97, 0x76, 0x43, 0x6b, 0xb7, 0x31, 0x5a, + 0x0f, 0xee, 0x09, 0xac, 0xd4, 0x7a, 0x04, 0x44, 0x94, 0x8a, 0x16, 0xde, 0x83, 0xb9, 0x74, 0x47, + 0xcf, 0x32, 0xa3, 0x7c, 0x31, 0x62, 0x6a, 0xce, 0xd2, 0x54, 0xfb, 0xeb, 0x12, 0xc0, 0x96, 0x63, + 0x52, 0x99, 0x43, 0x59, 0x80, 0x31, 0xcb, 0x94, 0x57, 0x11, 0xc8, 0xde, 0x8e, 0x6d, 0xac, 0xe0, + 0x98, 0x65, 0xaa, 0x14, 0xc7, 0xd8, 0x89, 0x29, 0x8e, 0x6f, 0x40, 0xd9, 0xb4, 0x98, 0xdb, 0xd5, + 0x0f, 0xb7, 0x32, 0x7c, 0x81, 0x95, 0x88, 0x85, 0x71, 0x39, 0xf2, 0x9a, 0x3c, 0xbf, 0x13, 0x89, + 0x34, 0x60, 0x78, 0x7e, 0x8b, 0xbc, 0x7b, 0xb1, 0x33, 0xfc, 0x16, 0x4c, 0x85, 0x29, 0x04, 0xa1, + 0x25, 0x2f, 0x5a, 0x85, 0xa7, 0x7e, 0x6a, 0x27, 0xc6, 0xc3, 0x84, 0x64, 0x3a, 0xc5, 0x51, 0x78, + 0x2e, 0x29, 0x8e, 0x15, 0x98, 0x63, 0xbe, 0xe3, 0x51, 0x33, 0x94, 0xd8, 0x58, 0xa9, 0x90, 0x64, + 0xbe, 0xb3, 0x99, 0xe2, 0xe3, 0x40, 0x0b, 0xb2, 0x0d, 0x97, 0xc2, 0x4e, 0xc4, 0x07, 0x58, 0x99, + 0x17, 0x48, 0xd7, 0x24, 0xd2, 0xa5, 0x47, 0x19, 0x32, 0x98, 0xd9, 0x92, 0xbc, 0x01, 0x79, 0xb7, + 0xa3, 0x33, 0x2a, 0x93, 0x1a, 0x61, 0xec, 0x9a, 0xdf, 0xe6, 0xc4, 0x27, 0x47, 0xd5, 0x12, 0x9f, + 0x76, 0xf1, 0x03, 0x03, 0x41, 0x72, 0x13, 0x60, 0xd7, 0xe9, 0xdb, 0xa6, 0xee, 0x1d, 0x6e, 0xac, + 0x88, 0x48, 0x26, 0xf6, 0xc0, 0xdc, 0x50, 0x1c, 0x8c, 0x49, 0x71, 0x83, 0xd9, 0x0b, 0x4c, 0x87, + 0xcc, 0x4d, 0x28, 0x83, 0xa9, 0x2c, 0x8a, 0xe4, 0x93, 0x0f, 0xa0, 0x24, 0x92, 0x94, 0xd4, 0xac, + 0xfb, 0x32, 0x41, 0x71, 0x96, 0xb4, 0x9d, 0xf2, 0x2a, 0x9a, 0x21, 0x08, 0x46, 0x78, 0xe4, 0xbb, + 0x00, 0x2d, 0xcb, 0xb6, 0x58, 0x47, 0xa0, 0x97, 0xcf, 0x8c, 0xae, 0xc6, 0xb9, 0xa6, 0x50, 0x30, + 0x86, 0xc8, 0x63, 0x1e, 0xd7, 0x31, 0x37, 0xb6, 0x2b, 0x53, 0x62, 0x94, 0x2a, 0xe6, 0xd9, 0xe6, + 0x44, 0x0c, 0x78, 0xe4, 0x06, 0x14, 0x4d, 0x9d, 0xf6, 0x1c, 0x9b, 0x9a, 0x95, 0xe9, 0x28, 0xef, + 0xb0, 0x22, 0x69, 0xa8, 0xb8, 0xe4, 0x7b, 0x50, 0xb0, 0x84, 0xcb, 0x57, 0x99, 0x11, 0x5d, 0x7d, + 0x67, 0xb8, 0x4b, 0x41, 0x40, 0x34, 0x80, 0x5b, 0x9c, 0xe0, 0x6f, 0x94, 0xb0, 0xc4, 0x80, 0x49, + 0xa7, 0xef, 0x0b, 0x0d, 0xb3, 0x42, 0xc3, 0x70, 0x79, 0x96, 0xfb, 0x01, 0x46, 0xf0, 0xe0, 0x2f, + 0x7f, 0x60, 0x88, 0xcc, 0xc7, 0x6b, 0x74, 0xac, 0xae, 0xe9, 0x51, 0xbb, 0x32, 0x27, 0x42, 0x2a, + 0x31, 0xde, 0x65, 0x49, 0x43, 0xc5, 0x25, 0x3f, 0x0f, 0xd3, 0x4e, 0xdf, 0x17, 0xfb, 0x86, 0x6f, + 0x3b, 0x56, 0xb9, 0x28, 0xc4, 0x2f, 0xf2, 0xb0, 0xed, 0x7e, 0x9c, 0x81, 0x49, 0x39, 0x6d, 0x06, + 0xa6, 0xe2, 0x55, 0x32, 0xda, 0xef, 0x8f, 0x41, 0xd8, 0x8f, 0x9f, 0x06, 0x6f, 0x99, 0x68, 0x50, + 0xf0, 0x28, 0xeb, 0x77, 0x7d, 0x69, 0x6c, 0xc5, 0x5a, 0xa3, 0xa0, 0xa0, 0xe4, 0x68, 0x07, 0x30, + 0xcd, 0x7b, 0xdb, 0xed, 0xd2, 0x6e, 0xd3, 0xa7, 0x2e, 0x23, 0x2d, 0xc8, 0x33, 0xfe, 0x87, 0x9c, + 0x93, 0x11, 0xdf, 0xfb, 0x7c, 0xea, 0x46, 0xfb, 0x5d, 0x28, 0xc0, 0x00, 0x5e, 0xfb, 0x83, 0x31, + 0x28, 0xa9, 0x79, 0x3a, 0x45, 0x86, 0xfc, 0x15, 0x98, 0x34, 0x69, 0x4b, 0xe7, 0xa3, 0x91, 0x4f, + 0xe2, 0x7c, 0x5b, 0xad, 0x04, 0x24, 0x0c, 0x79, 0xa4, 0x1a, 0x5e, 0x66, 0xc1, 0x90, 0x45, 0xd6, + 0x2a, 0xee, 0x2b, 0x92, 0x3d, 0x28, 0x89, 0x3f, 0xd6, 0xc2, 0xf2, 0x9d, 0x61, 0xd7, 0xfd, 0x61, + 0x88, 0x12, 0xe4, 0x02, 0xd4, 0x4f, 0x8c, 0xf0, 0x53, 0x65, 0x37, 0xf9, 0xd3, 0x94, 0xdd, 0x68, + 0x6b, 0xc0, 0x0d, 0xc3, 0xfa, 0x32, 0x79, 0x17, 0x8a, 0x4c, 0x6e, 0x5d, 0x39, 0x2f, 0x5f, 0x51, + 0x4f, 0x67, 0x92, 0xfe, 0xe4, 0xa8, 0x3a, 0x2d, 0x84, 0x43, 0x02, 0xaa, 0x26, 0xda, 0x12, 0x94, + 0x63, 0x65, 0x0a, 0x7c, 0x86, 0xd5, 0x13, 0x63, 0x6c, 0x86, 0x57, 0x74, 0x5f, 0x47, 0xc1, 0xd1, + 0x9e, 0x8c, 0xc1, 0x1c, 0x52, 0xe6, 0xf4, 0x3d, 0x83, 0xc6, 0x33, 0xb3, 0xba, 0x21, 0x6a, 0x97, + 0x52, 0x99, 0xd9, 0xba, 0xa0, 0xa2, 0xe4, 0x92, 0x77, 0x60, 0xba, 0x47, 0xbd, 0xb6, 0x3a, 0x6c, + 0x72, 0x91, 0x54, 0x7e, 0x65, 0x33, 0xce, 0xc4, 0xa4, 0x2c, 0x8f, 0xf7, 0x7b, 0xba, 0x6d, 0xb5, + 0x28, 0xf3, 0xd3, 0x29, 0x93, 0x4d, 0x49, 0x47, 0x25, 0x41, 0xd6, 0xe1, 0x22, 0xa3, 0xfe, 0xfd, + 0x03, 0x9b, 0x7a, 0x48, 0x5b, 0xd4, 0x13, 0x99, 0xf4, 0x09, 0x61, 0x32, 0x5f, 0x08, 0xdf, 0xe3, + 0x9a, 0x69, 0x01, 0x1c, 0x6c, 0x23, 0x6e, 0xdf, 0xe0, 0x71, 0x6a, 0xd9, 0xb1, 0x4d, 0x4b, 0x55, + 0x68, 0xc5, 0x6f, 0xdf, 0x14, 0x1f, 0x07, 0x5a, 0x70, 0x94, 0x96, 0x6e, 0x75, 0xfb, 0x1e, 0x8d, + 0x50, 0x0a, 0x49, 0x94, 0xb5, 0x14, 0x1f, 0x07, 0x5a, 0x68, 0x6f, 0xc0, 0x34, 0x52, 0xdf, 0x3b, + 0x54, 0x73, 0x52, 0x85, 0x7c, 0x57, 0x3c, 0x85, 0xe5, 0xc4, 0x53, 0x98, 0xd8, 0xc8, 0xc1, 0xcb, + 0x57, 0x40, 0xd7, 0x7e, 0x98, 0x03, 0x88, 0xaa, 0x8f, 0xc8, 0x1e, 0x14, 0xd9, 0xad, 0x46, 0xdf, + 0xd8, 0x53, 0xf9, 0xa2, 0x21, 0x9f, 0x15, 0x24, 0x48, 0xec, 0x9d, 0x56, 0x52, 0x50, 0x29, 0xf8, + 0xb2, 0xda, 0x94, 0xbf, 0x18, 0x07, 0xd5, 0x8a, 0x2f, 0x2e, 0xb5, 0x4d, 0xd7, 0xb1, 0x6c, 0x3f, + 0xfd, 0x02, 0xbc, 0x2a, 0xe9, 0xa8, 0x24, 0xf8, 0x7e, 0xdb, 0x0d, 0x06, 0x31, 0x96, 0xdc, 0x6f, + 0xb2, 0x0f, 0x92, 0xcb, 0xe5, 0x3c, 0xda, 0xe6, 0x73, 0x3d, 0x9e, 0x94, 0x43, 0x41, 0x45, 0xc9, + 0xe5, 0xd7, 0x4c, 0x98, 0x30, 0x95, 0x7b, 0x44, 0x5c, 0x33, 0x61, 0x6e, 0x15, 0x15, 0x97, 0x74, + 0x60, 0x56, 0x17, 0x4b, 0x1b, 0x25, 0x81, 0xcf, 0x94, 0xcf, 0x8e, 0x2a, 0x5f, 0x92, 0x28, 0x98, + 0x86, 0xe5, 0x9a, 0x58, 0xd4, 0xfc, 0xec, 0x69, 0x6d, 0xa5, 0xa9, 0x99, 0x44, 0xc1, 0x34, 0x2c, + 0xf7, 0xb0, 0x3c, 0xa7, 0x4b, 0xeb, 0xb8, 0x25, 0x3d, 0x39, 0xe5, 0x61, 0x61, 0x40, 0xc6, 0x90, + 0xaf, 0xfd, 0x76, 0x0e, 0x66, 0x9a, 0x86, 0x67, 0xb9, 0xbe, 0x3a, 0xfb, 0x5b, 0xa2, 0x64, 0xc9, + 0xd7, 0xb9, 0xef, 0x23, 0xf7, 0xd4, 0x4b, 0x27, 0xe4, 0xd3, 0x02, 0xa1, 0x44, 0x45, 0x53, 0x40, + 0xc2, 0x08, 0x42, 0x44, 0xbd, 0xc2, 0xba, 0xa4, 0xd7, 0xb6, 0x29, 0xa8, 0x28, 0xb9, 0xda, 0x8f, + 0x72, 0x50, 0x54, 0xaf, 0x57, 0x2f, 0x43, 0x5e, 0x3c, 0x8a, 0xc8, 0xbd, 0xa3, 0x2e, 0x93, 0x65, + 0x4e, 0xc4, 0x80, 0xc7, 0x85, 0x84, 0x3b, 0x27, 0x81, 0x63, 0x37, 0x8e, 0xee, 0xf9, 0x18, 0xf0, + 0xf8, 0xa6, 0xa5, 0xb6, 0x29, 0xf7, 0x8b, 0xda, 0xb4, 0xab, 0xb6, 0x89, 0x9c, 0x2e, 0x4a, 0x70, + 0x1c, 0xaf, 0xa7, 0xfb, 0xe9, 0x98, 0x7c, 0x4d, 0x50, 0x51, 0x72, 0xb5, 0x77, 0x60, 0x56, 0xbe, + 0xbf, 0xab, 0x89, 0xe2, 0xbe, 0x5b, 0xdf, 0xd3, 0x95, 0x99, 0xcc, 0x4b, 0xdf, 0x4d, 0xd2, 0x50, + 0x71, 0xb5, 0x69, 0x28, 0xc7, 0xca, 0x82, 0xb5, 0xff, 0xbc, 0x0a, 0xea, 0x7d, 0xf7, 0x67, 0xaf, + 0xc4, 0x43, 0x85, 0x50, 0x86, 0xf2, 0x86, 0xf3, 0xa3, 0x7b, 0xc3, 0x6a, 0xcd, 0x53, 0x1e, 0x71, + 0x3b, 0xf2, 0x88, 0x0b, 0xe7, 0xe0, 0x11, 0x47, 0x15, 0x42, 0x69, 0xaf, 0xf8, 0x77, 0x72, 0x30, + 0x65, 0xf3, 0x88, 0x5b, 0x9e, 0xf5, 0xca, 0xa4, 0xf0, 0xc2, 0xee, 0x8f, 0x34, 0x89, 0xb5, 0xad, + 0x18, 0x62, 0x90, 0x6c, 0x50, 0x11, 0x71, 0x9c, 0x85, 0x09, 0xd5, 0x64, 0x0d, 0x8a, 0x7a, 0x8b, + 0x87, 0x31, 0xfe, 0xa1, 0x7c, 0xa8, 0xbe, 0x96, 0x75, 0xfa, 0xeb, 0x52, 0x26, 0xd8, 0xf3, 0xe1, + 0x2f, 0x54, 0x6d, 0xf9, 0xcd, 0xa4, 0x0a, 0x9c, 0x4a, 0x23, 0xdc, 0x4c, 0x61, 0xd6, 0x24, 0xe6, + 0x1c, 0x48, 0x4a, 0xac, 0xde, 0x49, 0x83, 0x42, 0x10, 0x28, 0x89, 0x28, 0xb1, 0x18, 0xf8, 0xbc, + 0x41, 0x10, 0x85, 0x92, 0x43, 0xda, 0xa1, 0x8b, 0x5b, 0x16, 0x93, 0xdb, 0x18, 0xda, 0xed, 0x57, + 0x5e, 0x73, 0xb6, 0x8f, 0x4b, 0xee, 0xc4, 0x0d, 0xe8, 0xd4, 0x69, 0x0c, 0xe8, 0xf4, 0x89, 0xc6, + 0xb3, 0x0d, 0x05, 0x26, 0xcc, 0xb3, 0x88, 0x0e, 0xcb, 0x37, 0x97, 0x87, 0xbb, 0xdd, 0x13, 0x16, + 0x3e, 0x98, 0x9d, 0x80, 0x86, 0x12, 0x9e, 0x38, 0x50, 0xf4, 0xa4, 0x17, 0x28, 0x03, 0xcc, 0xe1, + 0xf2, 0xd3, 0x69, 0x57, 0x32, 0xd8, 0x1f, 0x21, 0x15, 0x95, 0x12, 0xf2, 0x01, 0x8c, 0x9b, 0x7a, + 0x5b, 0x86, 0x9a, 0xdf, 0x1a, 0xfa, 0x49, 0x3f, 0x54, 0x23, 0xea, 0x71, 0x57, 0xea, 0xeb, 0xc8, + 0x51, 0xc9, 0x5e, 0x54, 0x44, 0x35, 0x37, 0x42, 0x99, 0x6b, 0xca, 0xe2, 0x07, 0xc1, 0xc7, 0x40, + 0x19, 0xd6, 0x2a, 0x4c, 0xee, 0x3b, 0xdd, 0x7e, 0x4f, 0xc6, 0xa8, 0xe5, 0x9b, 0x0b, 0x59, 0xab, + 0xfd, 0x50, 0x88, 0x44, 0x46, 0x20, 0xf8, 0xcd, 0x30, 0x6c, 0x4b, 0x7e, 0x3d, 0x07, 0x33, 0xfc, + 0xe8, 0xa8, 0x7d, 0xc0, 0x2a, 0x64, 0x84, 0x9d, 0xfa, 0x80, 0x51, 0x2f, 0xda, 0x61, 0x57, 0xa4, + 0xda, 0x99, 0x8d, 0x84, 0x06, 0x4c, 0x69, 0x24, 0x2e, 0x14, 0x99, 0x65, 0x52, 0x43, 0xf7, 0x58, + 0x65, 0xfe, 0xdc, 0xb4, 0x47, 0x4e, 0xa5, 0xc4, 0x46, 0xa5, 0x85, 0xfc, 0x86, 0x28, 0x4d, 0x96, + 0xc5, 0xf9, 0xf2, 0x83, 0x89, 0x4b, 0xe7, 0xf9, 0xc1, 0xc4, 0x7c, 0x50, 0x97, 0x9c, 0xd0, 0x80, + 0x69, 0x95, 0xe4, 0x3e, 0x5c, 0xe6, 0x31, 0xcd, 0x3e, 0x4d, 0x57, 0xd2, 0x5d, 0x16, 0x2f, 0x08, + 0x2f, 0x1c, 0x1f, 0x55, 0x2f, 0xd7, 0xb3, 0x04, 0x30, 0xbb, 0x1d, 0xf9, 0x18, 0xa6, 0xbd, 0xb8, + 0x6b, 0x5f, 0xb9, 0x32, 0xc2, 0xf3, 0x75, 0x22, 0x48, 0x08, 0x72, 0x20, 0x09, 0x12, 0x26, 0x75, + 0x91, 0x37, 0xa1, 0xec, 0x4a, 0x4b, 0x65, 0xb1, 0x5e, 0xe5, 0xaa, 0x18, 0x83, 0xb8, 0x51, 0xb7, + 0x23, 0x32, 0xc6, 0x65, 0xc8, 0x03, 0x28, 0xfb, 0x4e, 0x97, 0x7a, 0x32, 0xd5, 0x5e, 0x11, 0x8b, + 0xbf, 0x98, 0xb5, 0x93, 0x77, 0x94, 0x58, 0x94, 0xc8, 0x8d, 0x68, 0x0c, 0xe3, 0x38, 0x3c, 0x42, + 0x0c, 0xeb, 0x3c, 0x3d, 0x11, 0x0e, 0xbf, 0x90, 0x8c, 0x10, 0x9b, 0x71, 0x26, 0x26, 0x65, 0x79, + 0xcc, 0xe7, 0x7a, 0x96, 0xe3, 0x59, 0xfe, 0xe1, 0x72, 0x57, 0x67, 0x4c, 0x00, 0x2c, 0x08, 0x00, + 0x15, 0xf3, 0x6d, 0xa7, 0x05, 0x70, 0xb0, 0x0d, 0x77, 0xd5, 0x42, 0x62, 0xe5, 0xc5, 0xc8, 0x55, + 0x0b, 0xdb, 0xa2, 0xe2, 0x9e, 0x50, 0xcc, 0x73, 0x6d, 0x98, 0x62, 0x1e, 0x62, 0xc2, 0x35, 0xbd, + 0xef, 0x3b, 0x3d, 0x4e, 0x48, 0x36, 0xd9, 0x71, 0xf6, 0xa8, 0x5d, 0xb9, 0x2e, 0xee, 0xaa, 0xeb, + 0xc7, 0x47, 0xd5, 0x6b, 0xf5, 0xa7, 0xc8, 0xe1, 0x53, 0x51, 0x48, 0x0f, 0x8a, 0x54, 0x16, 0x24, + 0x55, 0xbe, 0x32, 0xc2, 0x25, 0x91, 0xac, 0x6a, 0x0a, 0x26, 0x28, 0xa4, 0xa1, 0x52, 0x41, 0x76, + 0xa0, 0xdc, 0x71, 0x98, 0x5f, 0xef, 0x5a, 0x3a, 0xa3, 0xac, 0xf2, 0x92, 0xd8, 0x27, 0x99, 0xf7, + 0xdb, 0xed, 0x50, 0x2c, 0xda, 0x26, 0xb7, 0xa3, 0x96, 0x18, 0x87, 0x21, 0x54, 0x04, 0x47, 0x7d, + 0xb1, 0x6a, 0x8e, 0xed, 0xd3, 0x8f, 0xfc, 0xca, 0xa2, 0x18, 0xcb, 0xab, 0x59, 0xc8, 0xdb, 0x8e, + 0xd9, 0x4c, 0x4a, 0x07, 0xa7, 0x3c, 0x45, 0xc4, 0x34, 0x26, 0x79, 0x0b, 0xa6, 0x5c, 0xc7, 0x6c, + 0xba, 0xd4, 0xd8, 0xd6, 0x7d, 0xa3, 0x53, 0xa9, 0x26, 0x1f, 0x0a, 0xb6, 0x63, 0x3c, 0x4c, 0x48, + 0x2e, 0xbc, 0x0f, 0x17, 0x07, 0xfc, 0xa9, 0x33, 0xbd, 0xaa, 0xfc, 0x69, 0x0e, 0xe2, 0xee, 0xec, + 0xb9, 0xfb, 0xfd, 0xeb, 0x70, 0x51, 0x96, 0x31, 0xf3, 0xcb, 0xb6, 0xdb, 0xf7, 0xc3, 0x28, 0x39, + 0x96, 0x1f, 0xc1, 0xb4, 0x00, 0x0e, 0xb6, 0xd1, 0xfe, 0x2c, 0x07, 0xd3, 0x09, 0xf3, 0x7d, 0xee, + 0x11, 0xe1, 0x1a, 0x90, 0x9e, 0xe5, 0x79, 0x8e, 0x17, 0xdc, 0x81, 0x9b, 0x7c, 0x2f, 0x33, 0xf9, + 0x09, 0x84, 0x28, 0xc8, 0xd8, 0x1c, 0xe0, 0x62, 0x46, 0x0b, 0xed, 0x2f, 0x73, 0x10, 0x25, 0xe0, + 0x54, 0x15, 0x52, 0xee, 0xc4, 0x2a, 0xa4, 0xd7, 0xa0, 0xf8, 0x98, 0x39, 0xf6, 0x76, 0x54, 0xab, + 0xa4, 0x26, 0xf4, 0x4e, 0xf3, 0xfe, 0x96, 0x90, 0x54, 0x12, 0x42, 0xfa, 0xc3, 0x35, 0xab, 0xeb, + 0x0f, 0x56, 0xf4, 0xdc, 0xf9, 0xc5, 0x80, 0x8e, 0x4a, 0x82, 0x2c, 0x41, 0x49, 0xe5, 0x7c, 0x65, + 0x28, 0xa9, 0x26, 0x41, 0x25, 0x3c, 0x31, 0x92, 0xd1, 0x7e, 0x3c, 0x06, 0xc5, 0xff, 0x6b, 0xdf, + 0x73, 0xec, 0xa5, 0xbe, 0xe7, 0x58, 0x1e, 0x31, 0x8d, 0xfc, 0xb4, 0x6f, 0x39, 0xb4, 0xcf, 0x72, + 0x30, 0xf5, 0x1c, 0x3f, 0xa9, 0xd8, 0x4d, 0x7e, 0x52, 0xf1, 0xee, 0x48, 0x43, 0x3b, 0xe1, 0x73, + 0x8a, 0xbf, 0x99, 0x8f, 0x86, 0xc4, 0xa7, 0x95, 0xd8, 0x50, 0x0a, 0x0f, 0x78, 0x98, 0x9a, 0x7f, + 0x77, 0xa4, 0xa0, 0x30, 0xda, 0x94, 0x21, 0x85, 0x61, 0xa4, 0x82, 0xdc, 0x04, 0xa0, 0xdc, 0xb2, + 0x05, 0x79, 0xbb, 0xb1, 0x64, 0xe6, 0x7a, 0x55, 0x71, 0x30, 0x26, 0xf5, 0xfc, 0x13, 0x0e, 0xd9, + 0x57, 0xf4, 0xc4, 0x33, 0xb9, 0xa2, 0xaf, 0x9d, 0xfb, 0x15, 0xfd, 0xd2, 0xb3, 0xbf, 0xa2, 0x63, + 0x01, 0x49, 0x7e, 0x84, 0x80, 0xe4, 0x63, 0xb8, 0x14, 0xfc, 0xb9, 0xdc, 0xd5, 0xad, 0x9e, 0xda, + 0x2f, 0xb2, 0x9c, 0xe8, 0xab, 0x99, 0x17, 0x33, 0xf5, 0x98, 0xc5, 0x7c, 0x6a, 0xfb, 0x0f, 0xa3, + 0x96, 0xd1, 0x5b, 0xf4, 0xc3, 0x0c, 0x38, 0xcc, 0x54, 0x92, 0xf6, 0x60, 0x27, 0x4f, 0xe1, 0xc1, + 0xfe, 0x28, 0x07, 0x97, 0xf5, 0xac, 0xaf, 0x30, 0x65, 0x1e, 0xe3, 0xce, 0x48, 0xf1, 0x44, 0x02, + 0x51, 0xc6, 0x03, 0x59, 0x2c, 0xcc, 0xee, 0x03, 0x79, 0x25, 0x0a, 0x49, 0x4b, 0x62, 0x53, 0x65, + 0x07, 0x93, 0x3f, 0x48, 0xa7, 0x82, 0x40, 0xcc, 0x76, 0x73, 0x64, 0x83, 0x7d, 0x0e, 0xe9, 0xa0, + 0xf2, 0x08, 0xe9, 0xa0, 0x54, 0x78, 0x31, 0x75, 0x4e, 0xe1, 0x85, 0x0d, 0x73, 0x56, 0x4f, 0x6f, + 0xd3, 0xed, 0x7e, 0xb7, 0x1b, 0x64, 0xbf, 0x59, 0x65, 0x5a, 0x60, 0x67, 0xd6, 0x80, 0xf2, 0x70, + 0xaf, 0x1b, 0xdc, 0x8f, 0xea, 0x41, 0x28, 0x7a, 0xb0, 0xd9, 0x48, 0x21, 0xe1, 0x00, 0x36, 0xdf, + 0x96, 0xdc, 0x6d, 0xdd, 0xa2, 0x3e, 0x9f, 0x6d, 0x91, 0x29, 0x91, 0x5f, 0x9b, 0xdf, 0x8e, 0xc8, + 0x18, 0x97, 0x21, 0x77, 0xa1, 0x64, 0xda, 0x4c, 0x7e, 0x40, 0x36, 0x2b, 0xac, 0xd4, 0xeb, 0xdc, + 0xb6, 0xad, 0x6c, 0x35, 0xd5, 0x47, 0x63, 0xd7, 0x06, 0xff, 0x3b, 0x8d, 0x9a, 0xe2, 0x63, 0xd4, + 0x9e, 0x6c, 0x0a, 0x30, 0x59, 0x10, 0x1d, 0xa4, 0x36, 0xae, 0x9f, 0xe0, 0x21, 0xaf, 0x6c, 0x85, + 0xf5, 0xdb, 0xd3, 0x52, 0x9d, 0x2c, 0x73, 0x8e, 0x10, 0xc8, 0xab, 0x50, 0x70, 0xec, 0xd5, 0x8f, + 0x2c, 0xbf, 0x72, 0x31, 0x99, 0xfd, 0xbe, 0x2f, 0xa8, 0x28, 0xb9, 0xe4, 0x01, 0x5c, 0xf5, 0xfd, + 0xae, 0x0c, 0x6d, 0xeb, 0x2d, 0x9f, 0x7a, 0x61, 0xd1, 0x83, 0x28, 0x5c, 0xc9, 0x07, 0x5f, 0x9a, + 0xed, 0xec, 0xdc, 0xcb, 0x12, 0xc1, 0x93, 0xda, 0x9e, 0x1c, 0x74, 0xcf, 0x0f, 0x19, 0x74, 0xc7, + 0xe3, 0xbc, 0x4b, 0x4f, 0x8d, 0xf3, 0x06, 0xe2, 0xd2, 0xcb, 0x67, 0x88, 0x4b, 0x3f, 0x10, 0xa5, + 0x1d, 0xeb, 0xcb, 0x32, 0xa6, 0x7f, 0x7b, 0xb8, 0x54, 0x22, 0x47, 0x08, 0x5e, 0xf8, 0xc4, 0x9f, + 0x18, 0x60, 0x92, 0x6d, 0xb8, 0xe4, 0x3a, 0xe6, 0x40, 0x58, 0x2b, 0x82, 0xf8, 0x58, 0x5d, 0xcf, + 0x76, 0x86, 0x0c, 0x66, 0xb6, 0x14, 0xb6, 0x34, 0xa2, 0x57, 0x2a, 0x62, 0x62, 0x02, 0x5b, 0x1a, + 0x91, 0x31, 0x2e, 0x93, 0x8e, 0xf2, 0x5e, 0x78, 0x66, 0x51, 0xde, 0xc2, 0x73, 0x88, 0xf2, 0x5e, + 0x7c, 0x7e, 0x51, 0xde, 0xe7, 0x45, 0x98, 0x49, 0x7d, 0x83, 0xa8, 0xaa, 0xaa, 0x72, 0xa7, 0xad, + 0xaa, 0x4a, 0x94, 0x3d, 0x8d, 0x3d, 0xd3, 0xb2, 0xa7, 0xf1, 0x73, 0x2f, 0x7b, 0x8a, 0x95, 0x77, + 0x4d, 0x7c, 0x49, 0x79, 0x57, 0x1d, 0x66, 0x0d, 0xa7, 0xe7, 0x8a, 0x2f, 0x28, 0x64, 0x91, 0x4f, + 0xf0, 0x10, 0xaf, 0x9e, 0x3a, 0x97, 0x93, 0x6c, 0x4c, 0xcb, 0x13, 0x06, 0x79, 0x5b, 0x34, 0x2c, + 0x8c, 0x50, 0x1a, 0x9a, 0x5c, 0x30, 0x71, 0x51, 0xca, 0xea, 0x4c, 0xe5, 0xa6, 0x07, 0xea, 0x03, + 0x5d, 0xdc, 0xd1, 0x98, 0x4d, 0x96, 0xe3, 0xb1, 0x4a, 0x49, 0xe8, 0xff, 0xa5, 0xf3, 0xd0, 0x9f, + 0xac, 0xfd, 0x93, 0x3d, 0x89, 0x5e, 0x7f, 0x93, 0x5c, 0x4c, 0xf7, 0x84, 0x78, 0x70, 0xc5, 0xcd, + 0x72, 0xc3, 0x98, 0x7c, 0x55, 0x7a, 0x9a, 0x33, 0xb8, 0x28, 0xb5, 0x5c, 0xc9, 0x74, 0xe4, 0x18, + 0x9e, 0x80, 0x1c, 0xaf, 0x1d, 0x2b, 0x3e, 0xab, 0xda, 0xb1, 0x85, 0xc3, 0xa0, 0x2c, 0xf5, 0xc4, + 0x8a, 0xd6, 0x07, 0xc9, 0x2a, 0xf3, 0xf7, 0x87, 0xfc, 0x0f, 0x96, 0xc2, 0xc2, 0xd7, 0x78, 0x35, + 0xed, 0xaf, 0xe5, 0xe0, 0x52, 0xd6, 0xb2, 0x64, 0xf4, 0xa2, 0x99, 0xec, 0xc5, 0x68, 0xe1, 0x5a, + 0xdc, 0xb4, 0xfc, 0x6b, 0x3e, 0x16, 0x1c, 0xfa, 0xd4, 0xfd, 0xd9, 0xcb, 0xf1, 0x50, 0x2f, 0xc7, + 0x89, 0x2f, 0x85, 0xf3, 0xcf, 0xf1, 0x4b, 0xe1, 0xc2, 0x10, 0x5f, 0x0a, 0x4f, 0x3e, 0xcf, 0x2f, + 0x85, 0x8b, 0xa7, 0xfc, 0x52, 0xb8, 0xf4, 0xec, 0xbf, 0x14, 0xfe, 0x22, 0x07, 0x73, 0xe9, 0xc2, + 0xe5, 0xe7, 0x90, 0x24, 0xdb, 0x4b, 0x24, 0xc9, 0x36, 0x46, 0x32, 0xe6, 0x61, 0xb7, 0x4f, 0x4a, + 0x96, 0x69, 0x3f, 0xc9, 0xc1, 0x40, 0x71, 0xf6, 0x73, 0xc8, 0x63, 0x3d, 0x4e, 0xe6, 0xb1, 0x56, + 0xcf, 0x65, 0x90, 0x27, 0xe4, 0xb3, 0xfe, 0x2b, 0x63, 0x88, 0xff, 0x23, 0x79, 0xad, 0x84, 0x69, + 0x1b, 0x7b, 0xf6, 0xa6, 0xad, 0x51, 0xfb, 0xf4, 0x8b, 0xc5, 0x0b, 0x9f, 0x7d, 0xb1, 0x78, 0xe1, + 0xf3, 0x2f, 0x16, 0x2f, 0x7c, 0x72, 0xbc, 0x98, 0xfb, 0xf4, 0x78, 0x31, 0xf7, 0xd9, 0xf1, 0x62, + 0xee, 0xf3, 0xe3, 0xc5, 0xdc, 0x4f, 0x8e, 0x17, 0x73, 0xbf, 0xf7, 0xcf, 0x8b, 0x17, 0x7e, 0xb9, + 0x18, 0xe2, 0xfe, 0x77, 0x00, 0x00, 0x00, 0xff, 0xff, 0xba, 0x64, 0xb5, 0xba, 0xf9, 0x51, 0x00, + 0x00, } func (m *ArchiveStrategy) Marshal() (dAtA []byte, err error) { @@ -2406,6 +2410,16 @@ func (m *CronWorkflowOptions) MarshalToSizedBuffer(dAtA []byte) (int, error) { _ = i var l int _ = l + if m.FailedJobsHistoryLimit != nil { + i = encodeVarintGenerated(dAtA, i, uint64(*m.FailedJobsHistoryLimit)) + i-- + dAtA[i] = 0x40 + } + if m.SuccessfulJobsHistoryLimit != nil { + i = encodeVarintGenerated(dAtA, i, uint64(*m.SuccessfulJobsHistoryLimit)) + i-- + dAtA[i] = 0x38 + } if m.StartingDeadlineSeconds != nil { i = encodeVarintGenerated(dAtA, i, uint64(*m.StartingDeadlineSeconds)) i-- @@ -5535,6 +5549,12 @@ func (m *CronWorkflowOptions) Size() (n int) { if m.StartingDeadlineSeconds != nil { n += 1 + sovGenerated(uint64(*m.StartingDeadlineSeconds)) } + if m.SuccessfulJobsHistoryLimit != nil { + n += 1 + sovGenerated(uint64(*m.SuccessfulJobsHistoryLimit)) + } + if m.FailedJobsHistoryLimit != nil { + n += 1 + sovGenerated(uint64(*m.FailedJobsHistoryLimit)) + } return n } @@ -6728,6 +6748,8 @@ func (this *CronWorkflowOptions) String() string { `ConcurrencyPolicy:` + fmt.Sprintf("%v", this.ConcurrencyPolicy) + `,`, `Suspend:` + fmt.Sprintf("%v", this.Suspend) + `,`, `StartingDeadlineSeconds:` + valueToStringGenerated(this.StartingDeadlineSeconds) + `,`, + `SuccessfulJobsHistoryLimit:` + valueToStringGenerated(this.SuccessfulJobsHistoryLimit) + `,`, + `FailedJobsHistoryLimit:` + valueToStringGenerated(this.FailedJobsHistoryLimit) + `,`, `}`, }, "") return s @@ -9236,6 +9258,46 @@ func (m *CronWorkflowOptions) Unmarshal(dAtA []byte) error { } } m.StartingDeadlineSeconds = &v + case 7: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field SuccessfulJobsHistoryLimit", wireType) + } + var v int32 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + v |= int32(b&0x7F) << shift + if b < 0x80 { + break + } + } + m.SuccessfulJobsHistoryLimit = &v + case 8: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field FailedJobsHistoryLimit", wireType) + } + var v int32 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + v |= int32(b&0x7F) << shift + if b < 0x80 { + break + } + } + m.FailedJobsHistoryLimit = &v default: iNdEx = preIndex skippy, err := skipGenerated(dAtA[iNdEx:]) diff --git a/pkg/apis/workflow/v1alpha1/generated.proto b/pkg/apis/workflow/v1alpha1/generated.proto index d49ca8b96164..a2bd5796dd5a 100644 --- a/pkg/apis/workflow/v1alpha1/generated.proto +++ b/pkg/apis/workflow/v1alpha1/generated.proto @@ -144,7 +144,6 @@ message CronWorkflowList { repeated CronWorkflow items = 2; } -// TODO: Consider replacing this with the K8s API CronJobSpec. This spec is only available starting on v2alpha1. // CronWorkflowOptions is the schedule of when to run CronWorkflows message CronWorkflowOptions { // Schedule is a schedule to run the Workflow in Cron format @@ -165,6 +164,12 @@ message CronWorkflowOptions { // StartingDeadlineSeconds is the K8s-style deadline that will limit the time a CronWorkflow will be run after its // original scheduled time if it is missed. optional int64 startingDeadlineSeconds = 6; + + // SuccessfulJobsHistoryLimit is the K8s-style number of successful jobs that will be persisted + optional int32 successfulJobsHistoryLimit = 7; + + // FailedJobsHistoryLimit is the K8s-style number of failed jobs that will be persisted + optional int32 failedJobsHistoryLimit = 8; } message CronWorkflowStatus { diff --git a/pkg/apis/workflow/v1alpha1/openapi_generated.go b/pkg/apis/workflow/v1alpha1/openapi_generated.go index f2b1a461eb7b..ffa295d824a5 100644 --- a/pkg/apis/workflow/v1alpha1/openapi_generated.go +++ b/pkg/apis/workflow/v1alpha1/openapi_generated.go @@ -567,6 +567,20 @@ func schema_pkg_apis_workflow_v1alpha1_CronWorkflowOptions(ref common.ReferenceC Format: "int64", }, }, + "successfulJobsHistoryLimit": { + SchemaProps: spec.SchemaProps{ + Description: "SuccessfulJobsHistoryLimit is the K8s-style number of successful jobs that will be persisted", + Type: []string{"integer"}, + Format: "int32", + }, + }, + "failedJobsHistoryLimit": { + SchemaProps: spec.SchemaProps{ + Description: "FailedJobsHistoryLimit is the K8s-style number of failed jobs that will be persisted", + Type: []string{"integer"}, + Format: "int32", + }, + }, }, Required: []string{"schedule", "runtimeNamespace", "runtimeGenerateName"}, }, diff --git a/pkg/apis/workflow/v1alpha1/zz_generated.deepcopy.go b/pkg/apis/workflow/v1alpha1/zz_generated.deepcopy.go index 7282c581d7fe..8597119a2e8a 100644 --- a/pkg/apis/workflow/v1alpha1/zz_generated.deepcopy.go +++ b/pkg/apis/workflow/v1alpha1/zz_generated.deepcopy.go @@ -290,6 +290,16 @@ func (in *CronWorkflowOptions) DeepCopyInto(out *CronWorkflowOptions) { *out = new(int64) **out = **in } + if in.SuccessfulJobsHistoryLimit != nil { + in, out := &in.SuccessfulJobsHistoryLimit, &out.SuccessfulJobsHistoryLimit + *out = new(int32) + **out = **in + } + if in.FailedJobsHistoryLimit != nil { + in, out := &in.FailedJobsHistoryLimit, &out.FailedJobsHistoryLimit + *out = new(int32) + **out = **in + } return } diff --git a/workflow/cron/controller.go b/workflow/cron/controller.go index 7e33034e9418..b16cb7a721f4 100644 --- a/workflow/cron/controller.go +++ b/workflow/cron/controller.go @@ -69,10 +69,9 @@ func (cc *Controller) startCronWorkflow(cronWorkflow *v1alpha1.CronWorkflow) err cc.cron.Remove(entryId) delete(cc.nameEntryIDMap, cronWorkflow.Name) } - // TODO: Almost sure the wfClientset should be passed as reference and not value cronWfIf := cc.wfClientset.ArgoprojV1alpha1().CronWorkflows(cc.namespace) - cronWorkflowJob, err := NewCronWorkflowJob(cronWorkflow, cc.wfClientset, cronWfIf) + cronWorkflowJob, err := NewCronWorkflowWrapper(cronWorkflow, cc.wfClientset, cronWfIf) if err != nil { return err } @@ -81,6 +80,16 @@ func (cc *Controller) startCronWorkflow(cronWorkflow *v1alpha1.CronWorkflow) err return fmt.Errorf("could not parse schedule '%s': %w", cronWorkflow.Options.Schedule, err) } + runWorkflowIfMissed(cronWorkflow, cronSchedule, cronWorkflowJob) + + entryId := cc.cron.Schedule(cronSchedule, cronWorkflowJob) + cc.nameEntryIDMap[cronWorkflow.Name] = entryId + + log.Infof("CronWorkflow %s added", cronWorkflow.Name) + return nil +} + +func runWorkflowIfMissed(cronWorkflow *v1alpha1.CronWorkflow, cronSchedule cron.Schedule, cronWorkflowJob *CronWorkflowWrapper) { // If this CronWorkflow has been run before, check if we have missed any scheduled executions if cronWorkflow.Status.LastScheduledTime != nil { now := time.Now() @@ -94,19 +103,12 @@ func (cc *Controller) startCronWorkflow(cronWorkflow *v1alpha1.CronWorkflow) err // We missed the latest execution time if !missedExecutionTime.IsZero() { // If StartingDeadlineSeconds is not set, or we are still within the deadline window, run the Workflow - if cronWorkflow.Options.StartingDeadlineSeconds == nil || now.Before(missedExecutionTime.Add(time.Duration(*cronWorkflow.Options.StartingDeadlineSeconds) * time.Second)) { + if cronWorkflow.Options.StartingDeadlineSeconds == nil || now.Before(missedExecutionTime.Add(time.Duration(*cronWorkflow.Options.StartingDeadlineSeconds)*time.Second)) { log.Infof("%s missed an execution at %s and is within StartingDeadline", cronWorkflow.Name, missedExecutionTime.Format("Mon Jan _2 15:04:05 2006")) cronWorkflowJob.Run() } } } - - - entryId := cc.cron.Schedule(cronSchedule, cronWorkflowJob) - cc.nameEntryIDMap[cronWorkflow.Name] = entryId - - log.Infof("CronWorkflow %s added", cronWorkflow.Name) - return nil } func (cc *Controller) stopCronWorkflow(cronWorkflowName string) error { @@ -128,7 +130,6 @@ func (cc *Controller) stopCronWorkflow(cronWorkflowName string) error { func (cc *Controller) addCronWorkflowInformerHandler() { cc.wfCronInformer.Informer().AddEventHandler(cache.ResourceEventHandlerFuncs{ AddFunc: func(obj interface{}) { - log.Infof("SIMON Adding object: %v", obj) cronWf, err := convertToWorkflow(obj) if err != nil { log.Error(err) @@ -140,7 +141,6 @@ func (cc *Controller) addCronWorkflowInformerHandler() { } }, UpdateFunc: func(old, new interface{}) { - log.Infof("SIMON Updating object: %v", new) cronWf, err := convertToWorkflow(new) if err != nil { log.Error(err) diff --git a/workflow/cron/cron_workflow_job.go b/workflow/cron/cron_workflow_wrapper.go similarity index 67% rename from workflow/cron/cron_workflow_job.go rename to workflow/cron/cron_workflow_wrapper.go index cd1d6dc6ed3f..452cb1659919 100644 --- a/workflow/cron/cron_workflow_job.go +++ b/workflow/cron/cron_workflow_wrapper.go @@ -21,14 +21,17 @@ type CronWorkflowWrapper struct { name string cronWf *v1alpha1.CronWorkflow wfClientset versioned.Interface + wfClient typed.WorkflowInterface cronWfIf typed.CronWorkflowInterface } -func NewCronWorkflowJob(cronWorkflow *v1alpha1.CronWorkflow, wfClientset versioned.Interface, cronWfIf typed.CronWorkflowInterface) (*CronWorkflowWrapper, error) { +func NewCronWorkflowWrapper(cronWorkflow *v1alpha1.CronWorkflow, wfClientset versioned.Interface, cronWfIf typed.CronWorkflowInterface) (*CronWorkflowWrapper, error) { + runtimeNamespace := cronWorkflow.Options.RuntimeNamespace return &CronWorkflowWrapper{ name: cronWorkflow.ObjectMeta.Name, cronWf: cronWorkflow, wfClientset: wfClientset, + wfClient: wfClientset.ArgoprojV1alpha1().Workflows(runtimeNamespace), cronWfIf: cronWfIf, }, nil } @@ -36,13 +39,47 @@ func NewCronWorkflowJob(cronWorkflow *v1alpha1.CronWorkflow, wfClientset version func (cronWfWrp *CronWorkflowWrapper) Run() { log.Infof("Running %s", cronWfWrp.name) - if cronWfWrp.cronWf.Options.Suspend { - log.Infof("%s is suspended, skipping execution", cronWfWrp.name) + ok, err := cronWfWrp.enforceRuntimePolicy() + if err != nil { + log.Errorf("Concurrency policy error: %s", err) return + } else if !ok { + return + } + + wf, err := castToWorkflow(cronWfWrp.cronWf) + if err != nil { + log.Errorf("Unable to create Workflow for CronWorkflow %s", cronWfWrp.name) + return + } + + _, err = util.SubmitWorkflow(cronWfWrp.wfClient, cronWfWrp.wfClientset, cronWfWrp.cronWf.Options.RuntimeNamespace, wf, &util.SubmitOpts{}) + if err != nil { + log.Errorf("Failed to run CronWorkflow: %v", err) } - runtimeNamespace := cronWfWrp.cronWf.Options.RuntimeNamespace - wfClient := cronWfWrp.wfClientset.ArgoprojV1alpha1().Workflows(runtimeNamespace) + cronWfWrp.cronWf.Status.LastScheduledTime = &v1.Time{Time: time.Now().UTC()} + err = cronWfWrp.persistUpdate() + if err != nil { + log.Error(err) + } + + log.Infof("Created %s", cronWfWrp.cronWf.ObjectMeta.Name) +} + +func (cronWfWrp *CronWorkflowWrapper) persistUpdate() error { + _, err := cronWfWrp.cronWfIf.Update(cronWfWrp.cronWf) + if err != nil { + return fmt.Errorf("failed to update CronWorkflow: %w", err) + } + return nil +} + +func (cronWfWrp *CronWorkflowWrapper) enforceRuntimePolicy() (bool, error) { + if cronWfWrp.cronWf.Options.Suspend { + log.Infof("%s is suspended, skipping execution", cronWfWrp.name) + return false, nil + } if cronWfWrp.cronWf.Options.ConcurrencyPolicy != "" { switch cronWfWrp.cronWf.Options.ConcurrencyPolicy { @@ -51,51 +88,29 @@ func (cronWfWrp *CronWorkflowWrapper) Run() { case v2alpha1.ForbidConcurrent: runningWorkflows, err := cronWfWrp.getRunningWorkflows() if err != nil { - log.Errorf("Error in running CronWorkflow %s: %s", cronWfWrp.name, err) - return + return false, fmt.Errorf("error in running CronWorkflow %s: %w", cronWfWrp.name, err) } if len(runningWorkflows) > 0 { - log.Infof("%s has ConcurrencyPolicy: Forbid and has an active Workflow so it was not run", cronWfWrp.name) - return + log.Infof("%s has 'ConcurrencyPolicy: Forbid' and has an active Workflow so it was not run", cronWfWrp.name) + return false, nil } case v2alpha1.ReplaceConcurrent: runningWorkflows, err := cronWfWrp.getRunningWorkflows() if err != nil { - log.Errorf("Error in running CronWorkflow %s: %s", cronWfWrp.name, err) - return + return false, fmt.Errorf("error in running CronWorkflow %s: %w", cronWfWrp.name, err) } for _, wf := range runningWorkflows { - log.Infof("%s has ConcurrencyPolicy: Replace and has active Workflows. Stopping %s...", cronWfWrp.name, wf.Name) - err := util.TerminateWorkflow(wfClient, wf.Name) + log.Infof("%s has 'ConcurrencyPolicy: Replace' and has active Workflows. Stopping %s...", cronWfWrp.name, wf.Name) + err := util.TerminateWorkflow(cronWfWrp.wfClient, wf.Name) if err != nil { - log.Errorf("Error stopping workflow %s: %s", wf.Name, err) - return + return false, fmt.Errorf("error stopping workflow %s: %w", wf.Name, err) } } default: - log.Errorf("Invalid ConcurrencyPolicy: %s", cronWfWrp.cronWf.Options.ConcurrencyPolicy) - return + return false, fmt.Errorf("invalid ConcurrencyPolicy: %s", cronWfWrp.cronWf.Options.ConcurrencyPolicy) } } - - wf, err := castToWorkflow(cronWfWrp.cronWf) - if err != nil { - log.Errorf("Unable to create Workflow for CronWorkflow %s", cronWfWrp.name) - return - } - - // TODO: SubmitOpts is currently always nil - _, err = util.SubmitWorkflow(wfClient, cronWfWrp.wfClientset, runtimeNamespace, wf, &util.SubmitOpts{}) - if err != nil { - log.Errorf("Failed to run CronWorkflow: %v", err) - } - - cronWfWrp.cronWf.Status.LastScheduledTime = &v1.Time{Time: time.Now().UTC()} - _, err = cronWfWrp.cronWfIf.Update(cronWfWrp.cronWf) - if err != nil { - log.Errorf("Failed to run update CronWorkflow: %v", err) - } - log.Infof("Created %s", cronWfWrp.cronWf.ObjectMeta.Name) + return true, nil } func (cronWfWrp *CronWorkflowWrapper) getRunningWorkflows() ([]v1alpha1.Workflow, error) { From 0ee75735b4fac05c445f7e3ee53bfe5778918123 Mon Sep 17 00:00:00 2001 From: Simon Behar Date: Thu, 14 Nov 2019 10:15:48 -0800 Subject: [PATCH 14/44] WIP: Working on WF informer --- api/openapi-spec/swagger.json | 10 - cmd/workflow-controller/main.go | 2 +- .../workflow/v1alpha1/cron_workflow_types.go | 4 - pkg/apis/workflow/v1alpha1/generated.pb.go | 678 ++++++++---------- pkg/apis/workflow/v1alpha1/generated.proto | 6 - .../workflow/v1alpha1/openapi_generated.go | 14 - .../v1alpha1/zz_generated.deepcopy.go | 10 - workflow/controller/controller.go | 3 + workflow/cron/controller.go | 46 +- workflow/cron/cron_workflow_wrapper.go | 4 +- workflow/util/util.go | 2 + 11 files changed, 358 insertions(+), 421 deletions(-) diff --git a/api/openapi-spec/swagger.json b/api/openapi-spec/swagger.json index 77691c7ffed7..a66bbbef76af 100644 --- a/api/openapi-spec/swagger.json +++ b/api/openapi-spec/swagger.json @@ -271,11 +271,6 @@ "description": "ConcurrencyPolicy is the K8s-style concurrency policy that will be used", "type": "string" }, - "failedJobsHistoryLimit": { - "description": "FailedJobsHistoryLimit is the K8s-style number of failed jobs that will be persisted", - "type": "integer", - "format": "int32" - }, "runtimeGenerateName": { "description": "RuntimeGenerateName is the name generator the Workflow will be run with. Mutually exclusive with RuntimeName", "type": "string" @@ -293,11 +288,6 @@ "type": "integer", "format": "int64" }, - "successfulJobsHistoryLimit": { - "description": "SuccessfulJobsHistoryLimit is the K8s-style number of successful jobs that will be persisted", - "type": "integer", - "format": "int32" - }, "suspend": { "description": "Suspend is a flag that will stop new CronWorkflows from running if set to true", "type": "boolean" diff --git a/cmd/workflow-controller/main.go b/cmd/workflow-controller/main.go index 751e6d4dbb83..03e863fa5b7a 100644 --- a/cmd/workflow-controller/main.go +++ b/cmd/workflow-controller/main.go @@ -71,7 +71,7 @@ func NewRootCommand() *cobra.Command { return err } - cronController := cron.NewCronController(kubeclientset, wfclientset, namespace) + cronController := cron.NewCronController(wfclientset, config, namespace) ctx, cancel := context.WithCancel(context.Background()) defer cancel() diff --git a/pkg/apis/workflow/v1alpha1/cron_workflow_types.go b/pkg/apis/workflow/v1alpha1/cron_workflow_types.go index cdd54b270efd..f028f4b4e27f 100644 --- a/pkg/apis/workflow/v1alpha1/cron_workflow_types.go +++ b/pkg/apis/workflow/v1alpha1/cron_workflow_types.go @@ -45,8 +45,4 @@ type CronWorkflowOptions struct { // StartingDeadlineSeconds is the K8s-style deadline that will limit the time a CronWorkflow will be run after its // original scheduled time if it is missed. StartingDeadlineSeconds *int64 `json:"startingDeadlineSeconds,omitempty" protobuf:"varint,6,opt,name=startingDeadlineSeconds"` - // SuccessfulJobsHistoryLimit is the K8s-style number of successful jobs that will be persisted - SuccessfulJobsHistoryLimit *int32 `json:"successfulJobsHistoryLimit,omitempty" protobuf:"varint,7,opt,name=successfulJobsHistoryLimit"` - // FailedJobsHistoryLimit is the K8s-style number of failed jobs that will be persisted - FailedJobsHistoryLimit *int32 `json:"failedJobsHistoryLimit,omitempty" protobuf:"varint,8,opt,name=failedJobsHistoryLimit"` } diff --git a/pkg/apis/workflow/v1alpha1/generated.pb.go b/pkg/apis/workflow/v1alpha1/generated.pb.go index 1ff34e315ebc..c374291cf759 100644 --- a/pkg/apis/workflow/v1alpha1/generated.pb.go +++ b/pkg/apis/workflow/v1alpha1/generated.pb.go @@ -1528,318 +1528,314 @@ func init() { } var fileDescriptor_c23edafa7e7ea072 = []byte{ - // 4961 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xec, 0x7c, 0x4d, 0x6c, 0x1c, 0x47, - 0x76, 0xbf, 0x86, 0xe4, 0x0c, 0x67, 0xde, 0xf0, 0x4b, 0x45, 0x7d, 0x8c, 0x69, 0x99, 0xa3, 0x6d, - 0xc3, 0xfe, 0x6b, 0xff, 0x6b, 0x0f, 0x6d, 0x69, 0x37, 0xf1, 0xda, 0xb1, 0xbd, 0x33, 0xfc, 0x12, - 0x25, 0x91, 0x62, 0xde, 0x50, 0x52, 0x36, 0x5e, 0xec, 0xa6, 0xd9, 0x5d, 0x33, 0xd3, 0xe2, 0x4c, - 0x77, 0xbb, 0xab, 0x87, 0x34, 0xe1, 0x43, 0x9c, 0x20, 0x9b, 0x0f, 0x04, 0x0b, 0x24, 0x97, 0x64, - 0x91, 0xbd, 0x04, 0x39, 0x24, 0x97, 0x5c, 0x72, 0x4d, 0x82, 0x0d, 0x10, 0xe4, 0x60, 0xe4, 0x12, - 0xdf, 0xe2, 0x43, 0x40, 0xac, 0x99, 0x4b, 0x82, 0x04, 0x08, 0x90, 0x4b, 0x00, 0x9d, 0x82, 0xaa, - 0xae, 0xae, 0xfe, 0x98, 0xa6, 0x4c, 0xce, 0x50, 0x0a, 0x92, 0xdd, 0x93, 0x38, 0xef, 0xbd, 0xfa, - 0xbd, 0xfa, 0x7c, 0xf5, 0xde, 0xab, 0xd7, 0x82, 0xe5, 0xb6, 0xe5, 0x77, 0xfa, 0xbb, 0x35, 0xc3, - 0xe9, 0x2d, 0xe9, 0x5e, 0xdb, 0x71, 0x3d, 0xe7, 0xb1, 0xf8, 0x63, 0xc9, 0xdd, 0x6b, 0x2f, 0xe9, - 0xae, 0xc5, 0x96, 0x0e, 0x1c, 0x6f, 0xaf, 0xd5, 0x75, 0x0e, 0x96, 0xf6, 0xdf, 0xd4, 0xbb, 0x6e, - 0x47, 0x7f, 0x73, 0xa9, 0x4d, 0x6d, 0xea, 0xe9, 0x3e, 0x35, 0x6b, 0xae, 0xe7, 0xf8, 0x0e, 0xb9, - 0x15, 0x81, 0xd4, 0x42, 0x10, 0xf1, 0x47, 0xcd, 0xdd, 0x6b, 0xd7, 0x38, 0x48, 0x2d, 0x04, 0xa9, - 0x85, 0x20, 0x0b, 0xaf, 0xc7, 0x34, 0xb7, 0x1d, 0xae, 0x90, 0x63, 0xed, 0xf6, 0x5b, 0xe2, 0x97, - 0xf8, 0x21, 0xfe, 0x0a, 0x74, 0x2c, 0x68, 0x7b, 0x6f, 0xb1, 0x9a, 0xe5, 0xf0, 0x2e, 0x2d, 0x19, - 0x8e, 0x47, 0x97, 0xf6, 0x07, 0xfa, 0xb1, 0xf0, 0xf5, 0x48, 0xa6, 0xa7, 0x1b, 0x1d, 0xcb, 0xa6, - 0xde, 0x61, 0x34, 0x8e, 0x1e, 0xf5, 0xf5, 0xac, 0x56, 0x4b, 0x27, 0xb5, 0xf2, 0xfa, 0xb6, 0x6f, - 0xf5, 0xe8, 0x40, 0x83, 0x9f, 0xfb, 0xb2, 0x06, 0xcc, 0xe8, 0xd0, 0x9e, 0x9e, 0x6e, 0xa7, 0xfd, - 0x43, 0x0e, 0x66, 0xeb, 0x9e, 0xd1, 0xb1, 0xf6, 0x69, 0xd3, 0xe7, 0x8c, 0xf6, 0x21, 0xf9, 0x00, - 0xc6, 0x7d, 0xdd, 0xab, 0xe4, 0xae, 0xe7, 0x6e, 0x94, 0x6f, 0x7e, 0xab, 0x36, 0xc4, 0x44, 0xd6, - 0x76, 0x74, 0x2f, 0x84, 0x6b, 0x4c, 0x1e, 0x1f, 0x55, 0xc7, 0x77, 0x74, 0x0f, 0x39, 0x2a, 0xf9, - 0x1e, 0x4c, 0xd8, 0x8e, 0x4d, 0x2b, 0x63, 0x02, 0xbd, 0x3e, 0x14, 0xfa, 0x96, 0x63, 0xab, 0xde, - 0x36, 0x8a, 0xc7, 0x47, 0xd5, 0x09, 0x4e, 0x41, 0x01, 0xac, 0xfd, 0x47, 0x0e, 0x4a, 0x75, 0xaf, - 0xdd, 0xef, 0x51, 0xdb, 0x67, 0xc4, 0x03, 0x70, 0x75, 0x4f, 0xef, 0x51, 0x9f, 0x7a, 0xac, 0x92, - 0xbb, 0x3e, 0x7e, 0xa3, 0x7c, 0xf3, 0xbd, 0xa1, 0x94, 0x6e, 0x87, 0x30, 0x0d, 0xf2, 0xe9, 0x51, - 0xf5, 0xc2, 0xf1, 0x51, 0x15, 0x14, 0x89, 0x61, 0x4c, 0x0b, 0xb1, 0xa1, 0xa4, 0x7b, 0xbe, 0xd5, - 0xd2, 0x0d, 0x9f, 0x55, 0xc6, 0x84, 0xca, 0x77, 0x87, 0x52, 0x59, 0x97, 0x28, 0x8d, 0x8b, 0x52, - 0x63, 0x29, 0xa4, 0x30, 0x8c, 0x54, 0x68, 0xff, 0x36, 0x0e, 0xc5, 0x90, 0x41, 0xae, 0xc3, 0x84, - 0xad, 0xf7, 0xa8, 0x58, 0xbd, 0x52, 0x63, 0x4a, 0x36, 0x9c, 0xd8, 0xd2, 0x7b, 0x7c, 0x82, 0xf4, - 0x1e, 0xe5, 0x12, 0xae, 0xee, 0x77, 0xc4, 0x0a, 0xc4, 0x24, 0xb6, 0x75, 0xbf, 0x83, 0x82, 0x43, - 0xae, 0xc1, 0x44, 0xcf, 0x31, 0x69, 0x65, 0xfc, 0x7a, 0xee, 0x46, 0x3e, 0x98, 0xe0, 0x4d, 0xc7, - 0xa4, 0x28, 0xa8, 0xbc, 0x7d, 0xcb, 0x73, 0x7a, 0x95, 0x89, 0x64, 0xfb, 0x35, 0xcf, 0xe9, 0xa1, - 0xe0, 0x90, 0xdf, 0xcd, 0xc1, 0x5c, 0xd8, 0xbd, 0x7b, 0x8e, 0xa1, 0xfb, 0x96, 0x63, 0x57, 0xf2, - 0x62, 0xc1, 0x57, 0x47, 0x9a, 0x88, 0x10, 0xac, 0x51, 0x91, 0x5a, 0xe7, 0xd2, 0x1c, 0x1c, 0x50, - 0x4c, 0x6e, 0x02, 0xb4, 0xbb, 0xce, 0xae, 0xde, 0xe5, 0x73, 0x50, 0x29, 0x88, 0x5e, 0xab, 0x25, - 0x5c, 0x57, 0x1c, 0x8c, 0x49, 0x91, 0x3d, 0x98, 0xd4, 0x83, 0x53, 0x51, 0x99, 0x14, 0xfd, 0x5e, - 0x19, 0xb2, 0xdf, 0x89, 0x93, 0xd5, 0x28, 0x1f, 0x1f, 0x55, 0x27, 0x25, 0x11, 0x43, 0x0d, 0xe4, - 0x35, 0x28, 0x3a, 0x2e, 0xef, 0xaa, 0xde, 0xad, 0x14, 0xaf, 0xe7, 0x6e, 0x14, 0x1b, 0x73, 0xb2, - 0x7b, 0xc5, 0xfb, 0x92, 0x8e, 0x4a, 0x42, 0xfb, 0xc3, 0x3c, 0x0c, 0x8c, 0x9a, 0xbc, 0x09, 0x65, - 0x89, 0x76, 0xcf, 0x69, 0x33, 0xb1, 0xf8, 0xc5, 0xc6, 0xec, 0xf1, 0x51, 0xb5, 0x5c, 0x8f, 0xc8, - 0x18, 0x97, 0x21, 0x8f, 0x60, 0x8c, 0xdd, 0x92, 0xc7, 0xf0, 0xfd, 0xa1, 0x46, 0xd7, 0xbc, 0xa5, - 0x36, 0x68, 0xe1, 0xf8, 0xa8, 0x3a, 0xd6, 0xbc, 0x85, 0x63, 0xec, 0x16, 0x37, 0x1f, 0x6d, 0xcb, - 0x17, 0x9b, 0x67, 0x58, 0xf3, 0xb1, 0x6e, 0xf9, 0x0a, 0x5a, 0x98, 0x8f, 0x75, 0xcb, 0x47, 0x8e, - 0xca, 0xcd, 0x47, 0xc7, 0xf7, 0x5d, 0xb1, 0xf9, 0x86, 0x35, 0x1f, 0xb7, 0x77, 0x76, 0xb6, 0x15, - 0xbc, 0xd8, 0xdd, 0x9c, 0x82, 0x02, 0x98, 0x7c, 0xcc, 0x67, 0x32, 0xe0, 0x39, 0xde, 0xa1, 0xdc, - 0xb5, 0xb7, 0x47, 0xda, 0xb5, 0x8e, 0x77, 0xa8, 0xd4, 0xc9, 0x35, 0x51, 0x0c, 0x8c, 0x6b, 0x13, - 0xa3, 0x33, 0x5b, 0x4c, 0x6c, 0xd2, 0xa1, 0x47, 0xb7, 0xb2, 0xd6, 0x4c, 0x8d, 0x6e, 0x65, 0xad, - 0x89, 0x02, 0x98, 0xaf, 0x8d, 0xa7, 0x1f, 0xc8, 0x3d, 0x3d, 0xdc, 0xda, 0xa0, 0x7e, 0x90, 0x5c, - 0x1b, 0xd4, 0x0f, 0x90, 0xa3, 0x6a, 0x6d, 0xb8, 0x1c, 0x72, 0x90, 0xba, 0x0e, 0xb3, 0xc4, 0x00, - 0x69, 0x8b, 0x2c, 0x41, 0xc9, 0x70, 0xec, 0x96, 0xd5, 0xde, 0xd4, 0x5d, 0x69, 0x98, 0x94, 0x45, - 0x5b, 0x0e, 0x19, 0x18, 0xc9, 0x90, 0x97, 0x60, 0x7c, 0x8f, 0x1e, 0x4a, 0x0b, 0x55, 0x96, 0xa2, - 0xe3, 0x77, 0xe9, 0x21, 0x72, 0xba, 0xf6, 0xe3, 0x1c, 0xcc, 0x67, 0x4c, 0x2e, 0x6f, 0xd6, 0xf7, - 0xba, 0x52, 0x83, 0x6a, 0xf6, 0x00, 0xef, 0x21, 0xa7, 0x93, 0xdf, 0xca, 0xc1, 0x6c, 0x6c, 0xb6, - 0xeb, 0x7d, 0x69, 0x04, 0x87, 0x3f, 0xdd, 0x09, 0xac, 0xc6, 0x55, 0xa9, 0x71, 0x36, 0xc5, 0xc0, - 0xb4, 0x56, 0xed, 0x1f, 0xc5, 0xad, 0x9b, 0xa0, 0x11, 0x1d, 0x66, 0xfa, 0x8c, 0x7a, 0xdc, 0x44, - 0x37, 0xa9, 0xe1, 0x51, 0x5f, 0x5e, 0xc0, 0xaf, 0xd4, 0x82, 0xab, 0x9d, 0xf7, 0xa2, 0xc6, 0xbd, - 0x8c, 0xda, 0xfe, 0x9b, 0xb5, 0x40, 0xe2, 0x2e, 0x3d, 0x6c, 0xd2, 0x2e, 0xe5, 0x18, 0x0d, 0x72, - 0x7c, 0x54, 0x9d, 0x79, 0x90, 0x00, 0xc0, 0x14, 0x20, 0x57, 0xe1, 0xea, 0x8c, 0x1d, 0x38, 0x9e, - 0x29, 0x55, 0x8c, 0x9d, 0x59, 0xc5, 0x76, 0x02, 0x00, 0x53, 0x80, 0xda, 0xb7, 0x01, 0x96, 0x1d, - 0xdb, 0xb7, 0xec, 0x3e, 0xbd, 0x6f, 0x93, 0x97, 0x21, 0x4f, 0x3d, 0xcf, 0xf1, 0xa4, 0x41, 0x9a, - 0x96, 0x13, 0x94, 0x5f, 0xe5, 0x44, 0x0c, 0x78, 0xe4, 0x55, 0x28, 0xb4, 0x74, 0xab, 0x4b, 0x4d, - 0xd1, 0x9b, 0x62, 0x63, 0x46, 0x4a, 0x15, 0xd6, 0x04, 0x15, 0x25, 0x57, 0xfb, 0xab, 0x71, 0x98, - 0x5a, 0xf6, 0x1c, 0xfb, 0x91, 0x5c, 0x08, 0xf2, 0x2b, 0x50, 0xe4, 0xfe, 0x93, 0xa9, 0xfb, 0xba, - 0x9c, 0xab, 0x37, 0x62, 0x03, 0x51, 0x6e, 0x50, 0xb4, 0x84, 0x5c, 0x9a, 0x0f, 0xed, 0xfe, 0xee, - 0x63, 0x6a, 0xf8, 0x9b, 0xd4, 0xd7, 0xa3, 0x8b, 0x20, 0xa2, 0xa1, 0x42, 0x25, 0x06, 0x4c, 0x30, - 0x97, 0x1a, 0x23, 0x39, 0x2b, 0x61, 0x77, 0x9b, 0x2e, 0x35, 0xa2, 0xdb, 0x92, 0xff, 0x42, 0x01, - 0x4e, 0x1c, 0x28, 0x30, 0x5f, 0xf7, 0xfb, 0x4c, 0x9a, 0xcc, 0xf5, 0xa1, 0xd4, 0xc4, 0x67, 0xa6, - 0x29, 0xe0, 0xa2, 0x89, 0x0c, 0x7e, 0xa3, 0x54, 0x43, 0x18, 0x4c, 0x06, 0xb7, 0x09, 0x93, 0x66, - 0xf4, 0xf6, 0xc8, 0x1a, 0x83, 0x7b, 0x8a, 0x35, 0x66, 0xa5, 0xca, 0x49, 0x49, 0xc0, 0x50, 0x93, - 0xf6, 0x79, 0x0e, 0xe6, 0xe2, 0x2d, 0xee, 0x59, 0xcc, 0x27, 0xdf, 0x19, 0x58, 0xc1, 0xda, 0xe9, - 0x56, 0x90, 0xb7, 0x16, 0xeb, 0xa7, 0x6e, 0xca, 0x90, 0x12, 0x5b, 0xbd, 0x16, 0xe4, 0x2d, 0x9f, - 0xf6, 0x42, 0x1f, 0xac, 0x3e, 0xf2, 0x28, 0xa3, 0x0d, 0xbc, 0xc1, 0x71, 0x31, 0x80, 0xd7, 0x7e, - 0x33, 0x0f, 0xf3, 0x19, 0x93, 0xc1, 0xef, 0x75, 0xee, 0x75, 0x9b, 0xfd, 0x6e, 0xe8, 0x8e, 0xa9, - 0xde, 0x36, 0x25, 0x1d, 0x95, 0x04, 0x59, 0x81, 0x39, 0xe9, 0xab, 0x73, 0x0f, 0x84, 0xb9, 0xba, - 0x41, 0xa5, 0x01, 0x54, 0xce, 0x0e, 0xa6, 0xf8, 0x38, 0xd0, 0x82, 0x6c, 0xc2, 0xbc, 0xa4, 0xad, - 0x4b, 0x4f, 0x5f, 0x78, 0x3d, 0xe3, 0x02, 0xe8, 0x45, 0x09, 0x34, 0x8f, 0x83, 0x22, 0x98, 0xd5, - 0x8e, 0xec, 0xc3, 0x45, 0xc3, 0xb1, 0x8d, 0xbe, 0xe7, 0x51, 0xdb, 0x38, 0xdc, 0x76, 0xba, 0x96, - 0x71, 0x28, 0x1d, 0xbf, 0xdb, 0x12, 0xec, 0xe2, 0x72, 0x5a, 0xe0, 0xc9, 0x51, 0xf5, 0x6b, 0xb1, - 0xc8, 0x68, 0x57, 0xf7, 0x8d, 0xce, 0xd2, 0xfe, 0xcd, 0x70, 0x42, 0xd3, 0xe2, 0x38, 0xa8, 0x82, - 0x7c, 0x15, 0x26, 0x59, 0x9f, 0xb9, 0xd4, 0x36, 0xc5, 0x0d, 0x5c, 0x8c, 0x36, 0x56, 0x33, 0x20, - 0x63, 0xc8, 0x27, 0x0f, 0xe0, 0x2a, 0xf3, 0xb9, 0x81, 0xb5, 0xdb, 0x2b, 0x54, 0x37, 0xbb, 0x96, - 0xcd, 0xcd, 0x9d, 0x63, 0x9b, 0xc1, 0x35, 0x3a, 0xde, 0x78, 0xf1, 0xf8, 0xa8, 0x7a, 0xb5, 0x99, - 0x2d, 0x82, 0x27, 0xb5, 0x25, 0xdf, 0x85, 0x05, 0xd6, 0x37, 0x0c, 0xca, 0x58, 0xab, 0xdf, 0xbd, - 0xe3, 0xec, 0xb2, 0xdb, 0x16, 0xe3, 0xb6, 0xfa, 0x9e, 0xd5, 0xb3, 0x7c, 0x71, 0x81, 0xe6, 0x1b, - 0x8b, 0xc7, 0x47, 0xd5, 0x85, 0xe6, 0x89, 0x52, 0xf8, 0x14, 0x04, 0x82, 0x70, 0x25, 0xb0, 0x6b, - 0x03, 0xd8, 0x45, 0x81, 0xbd, 0x70, 0x7c, 0x54, 0xbd, 0xb2, 0x96, 0x29, 0x81, 0x27, 0xb4, 0xd4, - 0xbe, 0x9f, 0x03, 0x32, 0x68, 0x07, 0x88, 0x03, 0x17, 0xbb, 0x3a, 0xf3, 0xc3, 0x3d, 0x67, 0xee, - 0x58, 0x32, 0x3e, 0x28, 0xdf, 0xfc, 0xff, 0xa7, 0x3b, 0x6e, 0xbc, 0x45, 0xe3, 0x32, 0x5f, 0xec, - 0x7b, 0x69, 0x20, 0x1c, 0xc4, 0xd6, 0xfe, 0xa8, 0x00, 0x93, 0x2b, 0xf5, 0xf5, 0x1d, 0x9d, 0xed, - 0x9d, 0x22, 0x1e, 0x79, 0x0d, 0x8a, 0x3e, 0xed, 0xb9, 0x5d, 0xdd, 0x0f, 0x37, 0xbc, 0x3a, 0x26, - 0x3b, 0x92, 0x8e, 0x4a, 0x82, 0x38, 0x3c, 0xb8, 0x92, 0xd1, 0x9d, 0x34, 0x98, 0xef, 0x0d, 0x79, - 0x7b, 0x4b, 0x94, 0x78, 0x74, 0x25, 0x49, 0x18, 0xe9, 0x20, 0x0c, 0xca, 0xa1, 0x72, 0xa4, 0x2d, - 0x69, 0x31, 0x87, 0x8c, 0x8a, 0x23, 0x9c, 0xc0, 0x11, 0x8c, 0x11, 0x30, 0xae, 0x85, 0x7c, 0x1d, - 0xa6, 0x4c, 0xca, 0xb7, 0x37, 0xb5, 0x0d, 0x8b, 0xb2, 0x4a, 0xfe, 0xfa, 0x38, 0x9f, 0x97, 0xe3, - 0xa3, 0xea, 0xd4, 0x4a, 0x8c, 0x8e, 0x09, 0x29, 0xf2, 0x18, 0x4a, 0x07, 0x96, 0xdf, 0x11, 0xc6, - 0xa9, 0x52, 0x10, 0x46, 0xef, 0x9b, 0x43, 0x75, 0x94, 0x23, 0x44, 0xd3, 0xf2, 0x28, 0xc4, 0xc4, - 0x08, 0x9e, 0xfb, 0x74, 0xfc, 0x87, 0x08, 0x81, 0xc5, 0x71, 0x28, 0x25, 0x1b, 0x08, 0x06, 0x46, - 0x32, 0x84, 0xc1, 0x14, 0xff, 0xd1, 0xa4, 0x1f, 0xf6, 0xa9, 0x6d, 0x50, 0xb1, 0xcd, 0x87, 0x0d, - 0x8c, 0x43, 0x90, 0x60, 0x46, 0x1e, 0xc5, 0x60, 0x31, 0xa1, 0x84, 0xef, 0xbe, 0x83, 0x0e, 0xb5, - 0x2b, 0xa5, 0xe4, 0xee, 0x7b, 0xd4, 0xa1, 0x36, 0x0a, 0x0e, 0x71, 0x00, 0x0c, 0xe5, 0xb0, 0x54, - 0x60, 0x84, 0x70, 0x28, 0xf2, 0x7b, 0x1a, 0x33, 0xdc, 0xa3, 0x88, 0x7e, 0x63, 0x4c, 0x85, 0xf6, - 0xb7, 0x39, 0x28, 0xf3, 0xc3, 0x11, 0x6e, 0xe8, 0x57, 0xa1, 0xe0, 0xeb, 0x5e, 0x5b, 0xfa, 0x7b, - 0xa5, 0xe8, 0xd6, 0xde, 0x11, 0x54, 0x94, 0x5c, 0xa2, 0x43, 0xde, 0xd7, 0xd9, 0x5e, 0x78, 0x9b, - 0xfd, 0xc2, 0x50, 0x7d, 0x94, 0xa7, 0x32, 0xba, 0xc8, 0xf8, 0x2f, 0x86, 0x01, 0x32, 0xb9, 0x01, - 0x45, 0x6e, 0x59, 0xd6, 0x74, 0x16, 0x84, 0x6f, 0xc5, 0xc6, 0x14, 0x3f, 0x85, 0x6b, 0x92, 0x86, - 0x8a, 0xab, 0x7d, 0x07, 0x66, 0x56, 0x3f, 0xa2, 0x46, 0xdf, 0x77, 0xbc, 0xc0, 0x81, 0x27, 0x77, - 0x80, 0x30, 0xea, 0xed, 0x5b, 0x06, 0xad, 0x1b, 0x86, 0xd3, 0xb7, 0xfd, 0xad, 0xe8, 0xd4, 0x2f, - 0x48, 0x6d, 0xa4, 0x39, 0x20, 0x81, 0x19, 0xad, 0xb4, 0x3f, 0x9f, 0x80, 0x72, 0x2c, 0x04, 0xe4, - 0xab, 0xe8, 0x51, 0xd7, 0x49, 0xdb, 0x10, 0x1e, 0x64, 0xa0, 0xe0, 0x70, 0x1b, 0xe2, 0xd1, 0x7d, - 0x8b, 0x59, 0x8e, 0x9d, 0xb6, 0x21, 0x28, 0xe9, 0xa8, 0x24, 0x48, 0x15, 0xf2, 0x26, 0x75, 0xfd, - 0x8e, 0x18, 0xe4, 0x44, 0xa3, 0xc4, 0x27, 0x62, 0x85, 0x13, 0x30, 0xa0, 0x73, 0x81, 0x16, 0xf5, - 0x8d, 0x4e, 0x65, 0x42, 0x9c, 0x3b, 0x21, 0xb0, 0xc6, 0x09, 0x18, 0xd0, 0x33, 0x9c, 0xf5, 0xfc, - 0xb3, 0x77, 0xd6, 0x0b, 0xe7, 0xec, 0xac, 0x13, 0x17, 0xe6, 0x19, 0xeb, 0x6c, 0x7b, 0xd6, 0xbe, - 0xee, 0x53, 0xd1, 0x58, 0xe8, 0x99, 0x3c, 0x8b, 0x9e, 0xab, 0xdc, 0x9f, 0x68, 0x36, 0x6f, 0xa7, - 0x51, 0x30, 0x0b, 0x9a, 0x34, 0xe1, 0xb2, 0x65, 0x33, 0x6a, 0xf4, 0x3d, 0xba, 0xd1, 0xb6, 0x1d, - 0x8f, 0xde, 0x76, 0x18, 0x87, 0x93, 0x79, 0x8f, 0x97, 0xe4, 0xa2, 0x5d, 0xde, 0xc8, 0x12, 0xc2, - 0xec, 0xb6, 0xda, 0xdf, 0xe7, 0x60, 0x2a, 0x1e, 0xf5, 0x12, 0x06, 0xd0, 0x59, 0x59, 0x6b, 0x06, - 0x3b, 0x53, 0xde, 0x74, 0xef, 0x0f, 0x1d, 0x4c, 0x07, 0x30, 0x51, 0xa4, 0x10, 0xd1, 0x30, 0xa6, - 0xe6, 0x14, 0x69, 0xb5, 0x97, 0x21, 0xdf, 0x72, 0x3c, 0x83, 0xca, 0xb3, 0xa5, 0xce, 0xe0, 0x1a, - 0x27, 0x62, 0xc0, 0xd3, 0xfe, 0x25, 0x07, 0x31, 0x0d, 0xe4, 0x57, 0x61, 0x9a, 0xeb, 0xb8, 0xeb, - 0xed, 0x26, 0x46, 0xd3, 0x18, 0x7a, 0x34, 0x0a, 0xa9, 0x71, 0x59, 0xea, 0x9f, 0x4e, 0x90, 0x31, - 0xa9, 0x8f, 0x7c, 0x0d, 0x4a, 0xba, 0x69, 0x7a, 0x94, 0x31, 0x1a, 0x98, 0x9e, 0x52, 0x63, 0x5a, - 0xdc, 0x95, 0x21, 0x11, 0x23, 0x3e, 0x3f, 0x86, 0x1d, 0xb3, 0xc5, 0xf8, 0xce, 0x96, 0x2e, 0xa7, - 0x3a, 0x86, 0x5c, 0x09, 0xa7, 0xa3, 0x92, 0xd0, 0x7e, 0x30, 0x01, 0x49, 0xdd, 0xc4, 0x84, 0xd9, - 0x3d, 0x6f, 0x77, 0x79, 0x59, 0x37, 0x3a, 0x43, 0x05, 0xc1, 0xf3, 0x3c, 0xfa, 0xbe, 0x9b, 0x44, - 0xc0, 0x34, 0xa4, 0xd4, 0x72, 0x97, 0x1e, 0xfa, 0xfa, 0xee, 0x30, 0x71, 0x70, 0xa8, 0x25, 0x8e, - 0x80, 0x69, 0x48, 0xf2, 0x0d, 0x28, 0xef, 0x79, 0xbb, 0xe1, 0x21, 0x97, 0xd3, 0x31, 0x2f, 0xa7, - 0xa3, 0x7c, 0x37, 0x62, 0x61, 0x5c, 0x8e, 0x4f, 0xe1, 0x9e, 0xb7, 0x8b, 0x54, 0xef, 0x86, 0x19, - 0x56, 0x35, 0x85, 0x77, 0x25, 0x1d, 0x95, 0x04, 0x71, 0x81, 0xec, 0x85, 0xb3, 0xa7, 0x32, 0x29, - 0xd2, 0x16, 0xdd, 0xc8, 0x1a, 0x8d, 0x12, 0x8a, 0x0f, 0xe8, 0x0a, 0xb7, 0xcd, 0x77, 0x07, 0x70, - 0x30, 0x03, 0x9b, 0x7c, 0x1b, 0xae, 0xee, 0x79, 0xbb, 0xd2, 0x90, 0x6f, 0x7b, 0x96, 0x6d, 0x58, - 0x6e, 0x22, 0xb5, 0x5a, 0x95, 0xdd, 0xbd, 0x7a, 0x37, 0x5b, 0x0c, 0x4f, 0x6a, 0xaf, 0xbd, 0x0e, - 0x53, 0xf1, 0xd4, 0xdc, 0x97, 0xa4, 0x73, 0xb4, 0x7f, 0xcf, 0x41, 0x61, 0xc3, 0x76, 0xfb, 0x3f, - 0x25, 0x59, 0xfe, 0x3f, 0x99, 0x80, 0x09, 0xee, 0x7a, 0x91, 0x1b, 0x30, 0xe1, 0x1f, 0xba, 0xc1, - 0xdd, 0x3a, 0xde, 0xb8, 0x14, 0x1a, 0x9a, 0x9d, 0x43, 0x97, 0x3e, 0x91, 0xff, 0xa2, 0x90, 0x20, - 0xef, 0x41, 0xc1, 0xee, 0xf7, 0x1e, 0xea, 0x5d, 0x69, 0x94, 0x5e, 0x0d, 0x5d, 0x8b, 0x2d, 0x41, - 0x7d, 0x72, 0x54, 0xbd, 0x44, 0x6d, 0xc3, 0x31, 0x2d, 0xbb, 0xbd, 0xf4, 0x98, 0x39, 0x76, 0x6d, - 0xab, 0xdf, 0xdb, 0xa5, 0x1e, 0xca, 0x56, 0x3c, 0x0a, 0xdb, 0x75, 0x9c, 0x2e, 0x07, 0x18, 0x4f, - 0x46, 0x61, 0x8d, 0x80, 0x8c, 0x21, 0x9f, 0x7b, 0x31, 0xcc, 0xf7, 0xb8, 0xe4, 0x44, 0xd2, 0x8b, - 0x69, 0x0a, 0x2a, 0x4a, 0x2e, 0xe9, 0x41, 0xa1, 0xa7, 0xbb, 0x5c, 0x2e, 0x2f, 0xa6, 0x6c, 0x75, - 0x68, 0xff, 0xb4, 0xb6, 0x29, 0x70, 0x56, 0x6d, 0xdf, 0x3b, 0x8c, 0xd4, 0x05, 0x44, 0x94, 0x4a, - 0x88, 0x05, 0x93, 0x5d, 0x8b, 0xf9, 0x5c, 0x5f, 0x61, 0x84, 0x5d, 0xc1, 0xf5, 0x3d, 0xd4, 0xbb, - 0x7d, 0x1a, 0xcd, 0xc0, 0xbd, 0x00, 0x16, 0x43, 0xfc, 0x85, 0x43, 0x28, 0xc7, 0x7a, 0x44, 0xe6, - 0x82, 0x14, 0xa6, 0xd8, 0xbc, 0x22, 0x6b, 0x49, 0x76, 0x20, 0xbf, 0xcf, 0x31, 0xa4, 0xb1, 0x19, - 0xb1, 0x27, 0x18, 0x80, 0xbd, 0x3d, 0xf6, 0x56, 0xee, 0xed, 0xe2, 0x0f, 0xff, 0xb8, 0x7a, 0xe1, - 0x93, 0x7f, 0xba, 0x7e, 0x41, 0xfb, 0xbb, 0x71, 0x28, 0x29, 0x91, 0xff, 0xdd, 0x3b, 0xc5, 0x4b, - 0xed, 0x94, 0x3b, 0xa3, 0xcd, 0xd7, 0xa9, 0xb6, 0x4b, 0x3d, 0xb9, 0x5d, 0xa6, 0x1a, 0xff, 0x2f, - 0xb6, 0xd4, 0x4f, 0x8e, 0xaa, 0x95, 0xe4, 0x24, 0xa0, 0x7e, 0xb0, 0x49, 0x19, 0xd3, 0xdb, 0x34, - 0xda, 0x06, 0xdf, 0xfc, 0xb2, 0x6d, 0x70, 0x29, 0xbe, 0x0d, 0x4a, 0xd9, 0xcb, 0xf8, 0xc9, 0x38, - 0x14, 0x37, 0xc3, 0x34, 0xd6, 0xf7, 0x73, 0x50, 0xd6, 0x6d, 0xdb, 0xf1, 0xf5, 0x20, 0x67, 0x17, - 0x98, 0xb7, 0xad, 0xa1, 0xa6, 0x23, 0x04, 0xad, 0xd5, 0x23, 0xc0, 0x60, 0x4a, 0xd4, 0xcd, 0x14, - 0xe3, 0x60, 0x5c, 0x2f, 0xf9, 0x10, 0x0a, 0x5d, 0x7d, 0x97, 0x76, 0x43, 0x6b, 0xb7, 0x31, 0x5a, - 0x0f, 0xee, 0x09, 0xac, 0xd4, 0x7a, 0x04, 0x44, 0x94, 0x8a, 0x16, 0xde, 0x83, 0xb9, 0x74, 0x47, - 0xcf, 0x32, 0xa3, 0x7c, 0x31, 0x62, 0x6a, 0xce, 0xd2, 0x54, 0xfb, 0xeb, 0x12, 0xc0, 0x96, 0x63, - 0x52, 0x99, 0x43, 0x59, 0x80, 0x31, 0xcb, 0x94, 0x57, 0x11, 0xc8, 0xde, 0x8e, 0x6d, 0xac, 0xe0, - 0x98, 0x65, 0xaa, 0x14, 0xc7, 0xd8, 0x89, 0x29, 0x8e, 0x6f, 0x40, 0xd9, 0xb4, 0x98, 0xdb, 0xd5, - 0x0f, 0xb7, 0x32, 0x7c, 0x81, 0x95, 0x88, 0x85, 0x71, 0x39, 0xf2, 0x9a, 0x3c, 0xbf, 0x13, 0x89, - 0x34, 0x60, 0x78, 0x7e, 0x8b, 0xbc, 0x7b, 0xb1, 0x33, 0xfc, 0x16, 0x4c, 0x85, 0x29, 0x04, 0xa1, - 0x25, 0x2f, 0x5a, 0x85, 0xa7, 0x7e, 0x6a, 0x27, 0xc6, 0xc3, 0x84, 0x64, 0x3a, 0xc5, 0x51, 0x78, - 0x2e, 0x29, 0x8e, 0x15, 0x98, 0x63, 0xbe, 0xe3, 0x51, 0x33, 0x94, 0xd8, 0x58, 0xa9, 0x90, 0x64, - 0xbe, 0xb3, 0x99, 0xe2, 0xe3, 0x40, 0x0b, 0xb2, 0x0d, 0x97, 0xc2, 0x4e, 0xc4, 0x07, 0x58, 0x99, - 0x17, 0x48, 0xd7, 0x24, 0xd2, 0xa5, 0x47, 0x19, 0x32, 0x98, 0xd9, 0x92, 0xbc, 0x01, 0x79, 0xb7, - 0xa3, 0x33, 0x2a, 0x93, 0x1a, 0x61, 0xec, 0x9a, 0xdf, 0xe6, 0xc4, 0x27, 0x47, 0xd5, 0x12, 0x9f, - 0x76, 0xf1, 0x03, 0x03, 0x41, 0x72, 0x13, 0x60, 0xd7, 0xe9, 0xdb, 0xa6, 0xee, 0x1d, 0x6e, 0xac, - 0x88, 0x48, 0x26, 0xf6, 0xc0, 0xdc, 0x50, 0x1c, 0x8c, 0x49, 0x71, 0x83, 0xd9, 0x0b, 0x4c, 0x87, - 0xcc, 0x4d, 0x28, 0x83, 0xa9, 0x2c, 0x8a, 0xe4, 0x93, 0x0f, 0xa0, 0x24, 0x92, 0x94, 0xd4, 0xac, - 0xfb, 0x32, 0x41, 0x71, 0x96, 0xb4, 0x9d, 0xf2, 0x2a, 0x9a, 0x21, 0x08, 0x46, 0x78, 0xe4, 0xbb, - 0x00, 0x2d, 0xcb, 0xb6, 0x58, 0x47, 0xa0, 0x97, 0xcf, 0x8c, 0xae, 0xc6, 0xb9, 0xa6, 0x50, 0x30, - 0x86, 0xc8, 0x63, 0x1e, 0xd7, 0x31, 0x37, 0xb6, 0x2b, 0x53, 0x62, 0x94, 0x2a, 0xe6, 0xd9, 0xe6, - 0x44, 0x0c, 0x78, 0xe4, 0x06, 0x14, 0x4d, 0x9d, 0xf6, 0x1c, 0x9b, 0x9a, 0x95, 0xe9, 0x28, 0xef, - 0xb0, 0x22, 0x69, 0xa8, 0xb8, 0xe4, 0x7b, 0x50, 0xb0, 0x84, 0xcb, 0x57, 0x99, 0x11, 0x5d, 0x7d, - 0x67, 0xb8, 0x4b, 0x41, 0x40, 0x34, 0x80, 0x5b, 0x9c, 0xe0, 0x6f, 0x94, 0xb0, 0xc4, 0x80, 0x49, - 0xa7, 0xef, 0x0b, 0x0d, 0xb3, 0x42, 0xc3, 0x70, 0x79, 0x96, 0xfb, 0x01, 0x46, 0xf0, 0xe0, 0x2f, - 0x7f, 0x60, 0x88, 0xcc, 0xc7, 0x6b, 0x74, 0xac, 0xae, 0xe9, 0x51, 0xbb, 0x32, 0x27, 0x42, 0x2a, - 0x31, 0xde, 0x65, 0x49, 0x43, 0xc5, 0x25, 0x3f, 0x0f, 0xd3, 0x4e, 0xdf, 0x17, 0xfb, 0x86, 0x6f, - 0x3b, 0x56, 0xb9, 0x28, 0xc4, 0x2f, 0xf2, 0xb0, 0xed, 0x7e, 0x9c, 0x81, 0x49, 0x39, 0x6d, 0x06, - 0xa6, 0xe2, 0x55, 0x32, 0xda, 0xef, 0x8f, 0x41, 0xd8, 0x8f, 0x9f, 0x06, 0x6f, 0x99, 0x68, 0x50, - 0xf0, 0x28, 0xeb, 0x77, 0x7d, 0x69, 0x6c, 0xc5, 0x5a, 0xa3, 0xa0, 0xa0, 0xe4, 0x68, 0x07, 0x30, - 0xcd, 0x7b, 0xdb, 0xed, 0xd2, 0x6e, 0xd3, 0xa7, 0x2e, 0x23, 0x2d, 0xc8, 0x33, 0xfe, 0x87, 0x9c, - 0x93, 0x11, 0xdf, 0xfb, 0x7c, 0xea, 0x46, 0xfb, 0x5d, 0x28, 0xc0, 0x00, 0x5e, 0xfb, 0x83, 0x31, - 0x28, 0xa9, 0x79, 0x3a, 0x45, 0x86, 0xfc, 0x15, 0x98, 0x34, 0x69, 0x4b, 0xe7, 0xa3, 0x91, 0x4f, - 0xe2, 0x7c, 0x5b, 0xad, 0x04, 0x24, 0x0c, 0x79, 0xa4, 0x1a, 0x5e, 0x66, 0xc1, 0x90, 0x45, 0xd6, - 0x2a, 0xee, 0x2b, 0x92, 0x3d, 0x28, 0x89, 0x3f, 0xd6, 0xc2, 0xf2, 0x9d, 0x61, 0xd7, 0xfd, 0x61, - 0x88, 0x12, 0xe4, 0x02, 0xd4, 0x4f, 0x8c, 0xf0, 0x53, 0x65, 0x37, 0xf9, 0xd3, 0x94, 0xdd, 0x68, - 0x6b, 0xc0, 0x0d, 0xc3, 0xfa, 0x32, 0x79, 0x17, 0x8a, 0x4c, 0x6e, 0x5d, 0x39, 0x2f, 0x5f, 0x51, - 0x4f, 0x67, 0x92, 0xfe, 0xe4, 0xa8, 0x3a, 0x2d, 0x84, 0x43, 0x02, 0xaa, 0x26, 0xda, 0x12, 0x94, - 0x63, 0x65, 0x0a, 0x7c, 0x86, 0xd5, 0x13, 0x63, 0x6c, 0x86, 0x57, 0x74, 0x5f, 0x47, 0xc1, 0xd1, - 0x9e, 0x8c, 0xc1, 0x1c, 0x52, 0xe6, 0xf4, 0x3d, 0x83, 0xc6, 0x33, 0xb3, 0xba, 0x21, 0x6a, 0x97, - 0x52, 0x99, 0xd9, 0xba, 0xa0, 0xa2, 0xe4, 0x92, 0x77, 0x60, 0xba, 0x47, 0xbd, 0xb6, 0x3a, 0x6c, - 0x72, 0x91, 0x54, 0x7e, 0x65, 0x33, 0xce, 0xc4, 0xa4, 0x2c, 0x8f, 0xf7, 0x7b, 0xba, 0x6d, 0xb5, - 0x28, 0xf3, 0xd3, 0x29, 0x93, 0x4d, 0x49, 0x47, 0x25, 0x41, 0xd6, 0xe1, 0x22, 0xa3, 0xfe, 0xfd, - 0x03, 0x9b, 0x7a, 0x48, 0x5b, 0xd4, 0x13, 0x99, 0xf4, 0x09, 0x61, 0x32, 0x5f, 0x08, 0xdf, 0xe3, - 0x9a, 0x69, 0x01, 0x1c, 0x6c, 0x23, 0x6e, 0xdf, 0xe0, 0x71, 0x6a, 0xd9, 0xb1, 0x4d, 0x4b, 0x55, - 0x68, 0xc5, 0x6f, 0xdf, 0x14, 0x1f, 0x07, 0x5a, 0x70, 0x94, 0x96, 0x6e, 0x75, 0xfb, 0x1e, 0x8d, - 0x50, 0x0a, 0x49, 0x94, 0xb5, 0x14, 0x1f, 0x07, 0x5a, 0x68, 0x6f, 0xc0, 0x34, 0x52, 0xdf, 0x3b, - 0x54, 0x73, 0x52, 0x85, 0x7c, 0x57, 0x3c, 0x85, 0xe5, 0xc4, 0x53, 0x98, 0xd8, 0xc8, 0xc1, 0xcb, - 0x57, 0x40, 0xd7, 0x7e, 0x98, 0x03, 0x88, 0xaa, 0x8f, 0xc8, 0x1e, 0x14, 0xd9, 0xad, 0x46, 0xdf, - 0xd8, 0x53, 0xf9, 0xa2, 0x21, 0x9f, 0x15, 0x24, 0x48, 0xec, 0x9d, 0x56, 0x52, 0x50, 0x29, 0xf8, - 0xb2, 0xda, 0x94, 0xbf, 0x18, 0x07, 0xd5, 0x8a, 0x2f, 0x2e, 0xb5, 0x4d, 0xd7, 0xb1, 0x6c, 0x3f, - 0xfd, 0x02, 0xbc, 0x2a, 0xe9, 0xa8, 0x24, 0xf8, 0x7e, 0xdb, 0x0d, 0x06, 0x31, 0x96, 0xdc, 0x6f, - 0xb2, 0x0f, 0x92, 0xcb, 0xe5, 0x3c, 0xda, 0xe6, 0x73, 0x3d, 0x9e, 0x94, 0x43, 0x41, 0x45, 0xc9, - 0xe5, 0xd7, 0x4c, 0x98, 0x30, 0x95, 0x7b, 0x44, 0x5c, 0x33, 0x61, 0x6e, 0x15, 0x15, 0x97, 0x74, - 0x60, 0x56, 0x17, 0x4b, 0x1b, 0x25, 0x81, 0xcf, 0x94, 0xcf, 0x8e, 0x2a, 0x5f, 0x92, 0x28, 0x98, - 0x86, 0xe5, 0x9a, 0x58, 0xd4, 0xfc, 0xec, 0x69, 0x6d, 0xa5, 0xa9, 0x99, 0x44, 0xc1, 0x34, 0x2c, - 0xf7, 0xb0, 0x3c, 0xa7, 0x4b, 0xeb, 0xb8, 0x25, 0x3d, 0x39, 0xe5, 0x61, 0x61, 0x40, 0xc6, 0x90, - 0xaf, 0xfd, 0x76, 0x0e, 0x66, 0x9a, 0x86, 0x67, 0xb9, 0xbe, 0x3a, 0xfb, 0x5b, 0xa2, 0x64, 0xc9, - 0xd7, 0xb9, 0xef, 0x23, 0xf7, 0xd4, 0x4b, 0x27, 0xe4, 0xd3, 0x02, 0xa1, 0x44, 0x45, 0x53, 0x40, - 0xc2, 0x08, 0x42, 0x44, 0xbd, 0xc2, 0xba, 0xa4, 0xd7, 0xb6, 0x29, 0xa8, 0x28, 0xb9, 0xda, 0x8f, - 0x72, 0x50, 0x54, 0xaf, 0x57, 0x2f, 0x43, 0x5e, 0x3c, 0x8a, 0xc8, 0xbd, 0xa3, 0x2e, 0x93, 0x65, - 0x4e, 0xc4, 0x80, 0xc7, 0x85, 0x84, 0x3b, 0x27, 0x81, 0x63, 0x37, 0x8e, 0xee, 0xf9, 0x18, 0xf0, - 0xf8, 0xa6, 0xa5, 0xb6, 0x29, 0xf7, 0x8b, 0xda, 0xb4, 0xab, 0xb6, 0x89, 0x9c, 0x2e, 0x4a, 0x70, - 0x1c, 0xaf, 0xa7, 0xfb, 0xe9, 0x98, 0x7c, 0x4d, 0x50, 0x51, 0x72, 0xb5, 0x77, 0x60, 0x56, 0xbe, - 0xbf, 0xab, 0x89, 0xe2, 0xbe, 0x5b, 0xdf, 0xd3, 0x95, 0x99, 0xcc, 0x4b, 0xdf, 0x4d, 0xd2, 0x50, - 0x71, 0xb5, 0x69, 0x28, 0xc7, 0xca, 0x82, 0xb5, 0xff, 0xbc, 0x0a, 0xea, 0x7d, 0xf7, 0x67, 0xaf, - 0xc4, 0x43, 0x85, 0x50, 0x86, 0xf2, 0x86, 0xf3, 0xa3, 0x7b, 0xc3, 0x6a, 0xcd, 0x53, 0x1e, 0x71, - 0x3b, 0xf2, 0x88, 0x0b, 0xe7, 0xe0, 0x11, 0x47, 0x15, 0x42, 0x69, 0xaf, 0xf8, 0x77, 0x72, 0x30, - 0x65, 0xf3, 0x88, 0x5b, 0x9e, 0xf5, 0xca, 0xa4, 0xf0, 0xc2, 0xee, 0x8f, 0x34, 0x89, 0xb5, 0xad, - 0x18, 0x62, 0x90, 0x6c, 0x50, 0x11, 0x71, 0x9c, 0x85, 0x09, 0xd5, 0x64, 0x0d, 0x8a, 0x7a, 0x8b, - 0x87, 0x31, 0xfe, 0xa1, 0x7c, 0xa8, 0xbe, 0x96, 0x75, 0xfa, 0xeb, 0x52, 0x26, 0xd8, 0xf3, 0xe1, - 0x2f, 0x54, 0x6d, 0xf9, 0xcd, 0xa4, 0x0a, 0x9c, 0x4a, 0x23, 0xdc, 0x4c, 0x61, 0xd6, 0x24, 0xe6, - 0x1c, 0x48, 0x4a, 0xac, 0xde, 0x49, 0x83, 0x42, 0x10, 0x28, 0x89, 0x28, 0xb1, 0x18, 0xf8, 0xbc, - 0x41, 0x10, 0x85, 0x92, 0x43, 0xda, 0xa1, 0x8b, 0x5b, 0x16, 0x93, 0xdb, 0x18, 0xda, 0xed, 0x57, - 0x5e, 0x73, 0xb6, 0x8f, 0x4b, 0xee, 0xc4, 0x0d, 0xe8, 0xd4, 0x69, 0x0c, 0xe8, 0xf4, 0x89, 0xc6, - 0xb3, 0x0d, 0x05, 0x26, 0xcc, 0xb3, 0x88, 0x0e, 0xcb, 0x37, 0x97, 0x87, 0xbb, 0xdd, 0x13, 0x16, - 0x3e, 0x98, 0x9d, 0x80, 0x86, 0x12, 0x9e, 0x38, 0x50, 0xf4, 0xa4, 0x17, 0x28, 0x03, 0xcc, 0xe1, - 0xf2, 0xd3, 0x69, 0x57, 0x32, 0xd8, 0x1f, 0x21, 0x15, 0x95, 0x12, 0xf2, 0x01, 0x8c, 0x9b, 0x7a, - 0x5b, 0x86, 0x9a, 0xdf, 0x1a, 0xfa, 0x49, 0x3f, 0x54, 0x23, 0xea, 0x71, 0x57, 0xea, 0xeb, 0xc8, - 0x51, 0xc9, 0x5e, 0x54, 0x44, 0x35, 0x37, 0x42, 0x99, 0x6b, 0xca, 0xe2, 0x07, 0xc1, 0xc7, 0x40, - 0x19, 0xd6, 0x2a, 0x4c, 0xee, 0x3b, 0xdd, 0x7e, 0x4f, 0xc6, 0xa8, 0xe5, 0x9b, 0x0b, 0x59, 0xab, - 0xfd, 0x50, 0x88, 0x44, 0x46, 0x20, 0xf8, 0xcd, 0x30, 0x6c, 0x4b, 0x7e, 0x3d, 0x07, 0x33, 0xfc, - 0xe8, 0xa8, 0x7d, 0xc0, 0x2a, 0x64, 0x84, 0x9d, 0xfa, 0x80, 0x51, 0x2f, 0xda, 0x61, 0x57, 0xa4, - 0xda, 0x99, 0x8d, 0x84, 0x06, 0x4c, 0x69, 0x24, 0x2e, 0x14, 0x99, 0x65, 0x52, 0x43, 0xf7, 0x58, - 0x65, 0xfe, 0xdc, 0xb4, 0x47, 0x4e, 0xa5, 0xc4, 0x46, 0xa5, 0x85, 0xfc, 0x86, 0x28, 0x4d, 0x96, - 0xc5, 0xf9, 0xf2, 0x83, 0x89, 0x4b, 0xe7, 0xf9, 0xc1, 0xc4, 0x7c, 0x50, 0x97, 0x9c, 0xd0, 0x80, - 0x69, 0x95, 0xe4, 0x3e, 0x5c, 0xe6, 0x31, 0xcd, 0x3e, 0x4d, 0x57, 0xd2, 0x5d, 0x16, 0x2f, 0x08, - 0x2f, 0x1c, 0x1f, 0x55, 0x2f, 0xd7, 0xb3, 0x04, 0x30, 0xbb, 0x1d, 0xf9, 0x18, 0xa6, 0xbd, 0xb8, - 0x6b, 0x5f, 0xb9, 0x32, 0xc2, 0xf3, 0x75, 0x22, 0x48, 0x08, 0x72, 0x20, 0x09, 0x12, 0x26, 0x75, - 0x91, 0x37, 0xa1, 0xec, 0x4a, 0x4b, 0x65, 0xb1, 0x5e, 0xe5, 0xaa, 0x18, 0x83, 0xb8, 0x51, 0xb7, - 0x23, 0x32, 0xc6, 0x65, 0xc8, 0x03, 0x28, 0xfb, 0x4e, 0x97, 0x7a, 0x32, 0xd5, 0x5e, 0x11, 0x8b, - 0xbf, 0x98, 0xb5, 0x93, 0x77, 0x94, 0x58, 0x94, 0xc8, 0x8d, 0x68, 0x0c, 0xe3, 0x38, 0x3c, 0x42, - 0x0c, 0xeb, 0x3c, 0x3d, 0x11, 0x0e, 0xbf, 0x90, 0x8c, 0x10, 0x9b, 0x71, 0x26, 0x26, 0x65, 0x79, - 0xcc, 0xe7, 0x7a, 0x96, 0xe3, 0x59, 0xfe, 0xe1, 0x72, 0x57, 0x67, 0x4c, 0x00, 0x2c, 0x08, 0x00, - 0x15, 0xf3, 0x6d, 0xa7, 0x05, 0x70, 0xb0, 0x0d, 0x77, 0xd5, 0x42, 0x62, 0xe5, 0xc5, 0xc8, 0x55, - 0x0b, 0xdb, 0xa2, 0xe2, 0x9e, 0x50, 0xcc, 0x73, 0x6d, 0x98, 0x62, 0x1e, 0x62, 0xc2, 0x35, 0xbd, - 0xef, 0x3b, 0x3d, 0x4e, 0x48, 0x36, 0xd9, 0x71, 0xf6, 0xa8, 0x5d, 0xb9, 0x2e, 0xee, 0xaa, 0xeb, - 0xc7, 0x47, 0xd5, 0x6b, 0xf5, 0xa7, 0xc8, 0xe1, 0x53, 0x51, 0x48, 0x0f, 0x8a, 0x54, 0x16, 0x24, - 0x55, 0xbe, 0x32, 0xc2, 0x25, 0x91, 0xac, 0x6a, 0x0a, 0x26, 0x28, 0xa4, 0xa1, 0x52, 0x41, 0x76, - 0xa0, 0xdc, 0x71, 0x98, 0x5f, 0xef, 0x5a, 0x3a, 0xa3, 0xac, 0xf2, 0x92, 0xd8, 0x27, 0x99, 0xf7, - 0xdb, 0xed, 0x50, 0x2c, 0xda, 0x26, 0xb7, 0xa3, 0x96, 0x18, 0x87, 0x21, 0x54, 0x04, 0x47, 0x7d, - 0xb1, 0x6a, 0x8e, 0xed, 0xd3, 0x8f, 0xfc, 0xca, 0xa2, 0x18, 0xcb, 0xab, 0x59, 0xc8, 0xdb, 0x8e, - 0xd9, 0x4c, 0x4a, 0x07, 0xa7, 0x3c, 0x45, 0xc4, 0x34, 0x26, 0x79, 0x0b, 0xa6, 0x5c, 0xc7, 0x6c, - 0xba, 0xd4, 0xd8, 0xd6, 0x7d, 0xa3, 0x53, 0xa9, 0x26, 0x1f, 0x0a, 0xb6, 0x63, 0x3c, 0x4c, 0x48, - 0x2e, 0xbc, 0x0f, 0x17, 0x07, 0xfc, 0xa9, 0x33, 0xbd, 0xaa, 0xfc, 0x69, 0x0e, 0xe2, 0xee, 0xec, - 0xb9, 0xfb, 0xfd, 0xeb, 0x70, 0x51, 0x96, 0x31, 0xf3, 0xcb, 0xb6, 0xdb, 0xf7, 0xc3, 0x28, 0x39, - 0x96, 0x1f, 0xc1, 0xb4, 0x00, 0x0e, 0xb6, 0xd1, 0xfe, 0x2c, 0x07, 0xd3, 0x09, 0xf3, 0x7d, 0xee, - 0x11, 0xe1, 0x1a, 0x90, 0x9e, 0xe5, 0x79, 0x8e, 0x17, 0xdc, 0x81, 0x9b, 0x7c, 0x2f, 0x33, 0xf9, - 0x09, 0x84, 0x28, 0xc8, 0xd8, 0x1c, 0xe0, 0x62, 0x46, 0x0b, 0xed, 0x2f, 0x73, 0x10, 0x25, 0xe0, - 0x54, 0x15, 0x52, 0xee, 0xc4, 0x2a, 0xa4, 0xd7, 0xa0, 0xf8, 0x98, 0x39, 0xf6, 0x76, 0x54, 0xab, - 0xa4, 0x26, 0xf4, 0x4e, 0xf3, 0xfe, 0x96, 0x90, 0x54, 0x12, 0x42, 0xfa, 0xc3, 0x35, 0xab, 0xeb, - 0x0f, 0x56, 0xf4, 0xdc, 0xf9, 0xc5, 0x80, 0x8e, 0x4a, 0x82, 0x2c, 0x41, 0x49, 0xe5, 0x7c, 0x65, - 0x28, 0xa9, 0x26, 0x41, 0x25, 0x3c, 0x31, 0x92, 0xd1, 0x7e, 0x3c, 0x06, 0xc5, 0xff, 0x6b, 0xdf, - 0x73, 0xec, 0xa5, 0xbe, 0xe7, 0x58, 0x1e, 0x31, 0x8d, 0xfc, 0xb4, 0x6f, 0x39, 0xb4, 0xcf, 0x72, - 0x30, 0xf5, 0x1c, 0x3f, 0xa9, 0xd8, 0x4d, 0x7e, 0x52, 0xf1, 0xee, 0x48, 0x43, 0x3b, 0xe1, 0x73, - 0x8a, 0xbf, 0x99, 0x8f, 0x86, 0xc4, 0xa7, 0x95, 0xd8, 0x50, 0x0a, 0x0f, 0x78, 0x98, 0x9a, 0x7f, - 0x77, 0xa4, 0xa0, 0x30, 0xda, 0x94, 0x21, 0x85, 0x61, 0xa4, 0x82, 0xdc, 0x04, 0xa0, 0xdc, 0xb2, - 0x05, 0x79, 0xbb, 0xb1, 0x64, 0xe6, 0x7a, 0x55, 0x71, 0x30, 0x26, 0xf5, 0xfc, 0x13, 0x0e, 0xd9, - 0x57, 0xf4, 0xc4, 0x33, 0xb9, 0xa2, 0xaf, 0x9d, 0xfb, 0x15, 0xfd, 0xd2, 0xb3, 0xbf, 0xa2, 0x63, - 0x01, 0x49, 0x7e, 0x84, 0x80, 0xe4, 0x63, 0xb8, 0x14, 0xfc, 0xb9, 0xdc, 0xd5, 0xad, 0x9e, 0xda, - 0x2f, 0xb2, 0x9c, 0xe8, 0xab, 0x99, 0x17, 0x33, 0xf5, 0x98, 0xc5, 0x7c, 0x6a, 0xfb, 0x0f, 0xa3, - 0x96, 0xd1, 0x5b, 0xf4, 0xc3, 0x0c, 0x38, 0xcc, 0x54, 0x92, 0xf6, 0x60, 0x27, 0x4f, 0xe1, 0xc1, - 0xfe, 0x28, 0x07, 0x97, 0xf5, 0xac, 0xaf, 0x30, 0x65, 0x1e, 0xe3, 0xce, 0x48, 0xf1, 0x44, 0x02, - 0x51, 0xc6, 0x03, 0x59, 0x2c, 0xcc, 0xee, 0x03, 0x79, 0x25, 0x0a, 0x49, 0x4b, 0x62, 0x53, 0x65, - 0x07, 0x93, 0x3f, 0x48, 0xa7, 0x82, 0x40, 0xcc, 0x76, 0x73, 0x64, 0x83, 0x7d, 0x0e, 0xe9, 0xa0, - 0xf2, 0x08, 0xe9, 0xa0, 0x54, 0x78, 0x31, 0x75, 0x4e, 0xe1, 0x85, 0x0d, 0x73, 0x56, 0x4f, 0x6f, - 0xd3, 0xed, 0x7e, 0xb7, 0x1b, 0x64, 0xbf, 0x59, 0x65, 0x5a, 0x60, 0x67, 0xd6, 0x80, 0xf2, 0x70, - 0xaf, 0x1b, 0xdc, 0x8f, 0xea, 0x41, 0x28, 0x7a, 0xb0, 0xd9, 0x48, 0x21, 0xe1, 0x00, 0x36, 0xdf, - 0x96, 0xdc, 0x6d, 0xdd, 0xa2, 0x3e, 0x9f, 0x6d, 0x91, 0x29, 0x91, 0x5f, 0x9b, 0xdf, 0x8e, 0xc8, - 0x18, 0x97, 0x21, 0x77, 0xa1, 0x64, 0xda, 0x4c, 0x7e, 0x40, 0x36, 0x2b, 0xac, 0xd4, 0xeb, 0xdc, - 0xb6, 0xad, 0x6c, 0x35, 0xd5, 0x47, 0x63, 0xd7, 0x06, 0xff, 0x3b, 0x8d, 0x9a, 0xe2, 0x63, 0xd4, - 0x9e, 0x6c, 0x0a, 0x30, 0x59, 0x10, 0x1d, 0xa4, 0x36, 0xae, 0x9f, 0xe0, 0x21, 0xaf, 0x6c, 0x85, - 0xf5, 0xdb, 0xd3, 0x52, 0x9d, 0x2c, 0x73, 0x8e, 0x10, 0xc8, 0xab, 0x50, 0x70, 0xec, 0xd5, 0x8f, - 0x2c, 0xbf, 0x72, 0x31, 0x99, 0xfd, 0xbe, 0x2f, 0xa8, 0x28, 0xb9, 0xe4, 0x01, 0x5c, 0xf5, 0xfd, - 0xae, 0x0c, 0x6d, 0xeb, 0x2d, 0x9f, 0x7a, 0x61, 0xd1, 0x83, 0x28, 0x5c, 0xc9, 0x07, 0x5f, 0x9a, - 0xed, 0xec, 0xdc, 0xcb, 0x12, 0xc1, 0x93, 0xda, 0x9e, 0x1c, 0x74, 0xcf, 0x0f, 0x19, 0x74, 0xc7, - 0xe3, 0xbc, 0x4b, 0x4f, 0x8d, 0xf3, 0x06, 0xe2, 0xd2, 0xcb, 0x67, 0x88, 0x4b, 0x3f, 0x10, 0xa5, - 0x1d, 0xeb, 0xcb, 0x32, 0xa6, 0x7f, 0x7b, 0xb8, 0x54, 0x22, 0x47, 0x08, 0x5e, 0xf8, 0xc4, 0x9f, - 0x18, 0x60, 0x92, 0x6d, 0xb8, 0xe4, 0x3a, 0xe6, 0x40, 0x58, 0x2b, 0x82, 0xf8, 0x58, 0x5d, 0xcf, - 0x76, 0x86, 0x0c, 0x66, 0xb6, 0x14, 0xb6, 0x34, 0xa2, 0x57, 0x2a, 0x62, 0x62, 0x02, 0x5b, 0x1a, - 0x91, 0x31, 0x2e, 0x93, 0x8e, 0xf2, 0x5e, 0x78, 0x66, 0x51, 0xde, 0xc2, 0x73, 0x88, 0xf2, 0x5e, - 0x7c, 0x7e, 0x51, 0xde, 0xe7, 0x45, 0x98, 0x49, 0x7d, 0x83, 0xa8, 0xaa, 0xaa, 0x72, 0xa7, 0xad, - 0xaa, 0x4a, 0x94, 0x3d, 0x8d, 0x3d, 0xd3, 0xb2, 0xa7, 0xf1, 0x73, 0x2f, 0x7b, 0x8a, 0x95, 0x77, - 0x4d, 0x7c, 0x49, 0x79, 0x57, 0x1d, 0x66, 0x0d, 0xa7, 0xe7, 0x8a, 0x2f, 0x28, 0x64, 0x91, 0x4f, - 0xf0, 0x10, 0xaf, 0x9e, 0x3a, 0x97, 0x93, 0x6c, 0x4c, 0xcb, 0x13, 0x06, 0x79, 0x5b, 0x34, 0x2c, - 0x8c, 0x50, 0x1a, 0x9a, 0x5c, 0x30, 0x71, 0x51, 0xca, 0xea, 0x4c, 0xe5, 0xa6, 0x07, 0xea, 0x03, - 0x5d, 0xdc, 0xd1, 0x98, 0x4d, 0x96, 0xe3, 0xb1, 0x4a, 0x49, 0xe8, 0xff, 0xa5, 0xf3, 0xd0, 0x9f, - 0xac, 0xfd, 0x93, 0x3d, 0x89, 0x5e, 0x7f, 0x93, 0x5c, 0x4c, 0xf7, 0x84, 0x78, 0x70, 0xc5, 0xcd, - 0x72, 0xc3, 0x98, 0x7c, 0x55, 0x7a, 0x9a, 0x33, 0xb8, 0x28, 0xb5, 0x5c, 0xc9, 0x74, 0xe4, 0x18, - 0x9e, 0x80, 0x1c, 0xaf, 0x1d, 0x2b, 0x3e, 0xab, 0xda, 0xb1, 0x85, 0xc3, 0xa0, 0x2c, 0xf5, 0xc4, - 0x8a, 0xd6, 0x07, 0xc9, 0x2a, 0xf3, 0xf7, 0x87, 0xfc, 0x0f, 0x96, 0xc2, 0xc2, 0xd7, 0x78, 0x35, - 0xed, 0xaf, 0xe5, 0xe0, 0x52, 0xd6, 0xb2, 0x64, 0xf4, 0xa2, 0x99, 0xec, 0xc5, 0x68, 0xe1, 0x5a, - 0xdc, 0xb4, 0xfc, 0x6b, 0x3e, 0x16, 0x1c, 0xfa, 0xd4, 0xfd, 0xd9, 0xcb, 0xf1, 0x50, 0x2f, 0xc7, - 0x89, 0x2f, 0x85, 0xf3, 0xcf, 0xf1, 0x4b, 0xe1, 0xc2, 0x10, 0x5f, 0x0a, 0x4f, 0x3e, 0xcf, 0x2f, - 0x85, 0x8b, 0xa7, 0xfc, 0x52, 0xb8, 0xf4, 0xec, 0xbf, 0x14, 0xfe, 0x22, 0x07, 0x73, 0xe9, 0xc2, - 0xe5, 0xe7, 0x90, 0x24, 0xdb, 0x4b, 0x24, 0xc9, 0x36, 0x46, 0x32, 0xe6, 0x61, 0xb7, 0x4f, 0x4a, - 0x96, 0x69, 0x3f, 0xc9, 0xc1, 0x40, 0x71, 0xf6, 0x73, 0xc8, 0x63, 0x3d, 0x4e, 0xe6, 0xb1, 0x56, - 0xcf, 0x65, 0x90, 0x27, 0xe4, 0xb3, 0xfe, 0x2b, 0x63, 0x88, 0xff, 0x23, 0x79, 0xad, 0x84, 0x69, - 0x1b, 0x7b, 0xf6, 0xa6, 0xad, 0x51, 0xfb, 0xf4, 0x8b, 0xc5, 0x0b, 0x9f, 0x7d, 0xb1, 0x78, 0xe1, - 0xf3, 0x2f, 0x16, 0x2f, 0x7c, 0x72, 0xbc, 0x98, 0xfb, 0xf4, 0x78, 0x31, 0xf7, 0xd9, 0xf1, 0x62, - 0xee, 0xf3, 0xe3, 0xc5, 0xdc, 0x4f, 0x8e, 0x17, 0x73, 0xbf, 0xf7, 0xcf, 0x8b, 0x17, 0x7e, 0xb9, - 0x18, 0xe2, 0xfe, 0x77, 0x00, 0x00, 0x00, 0xff, 0xff, 0xba, 0x64, 0xb5, 0xba, 0xf9, 0x51, 0x00, - 0x00, + // 4902 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xec, 0x5c, 0x4d, 0x6c, 0x64, 0x57, + 0x56, 0xee, 0xb2, 0x5d, 0xe5, 0xaa, 0x53, 0xfe, 0xeb, 0xeb, 0xee, 0x74, 0xc5, 0xe9, 0xb8, 0x7a, + 0x5e, 0x94, 0xd0, 0xc3, 0x24, 0xe5, 0xa4, 0x7b, 0x06, 0x32, 0x09, 0x49, 0xa6, 0xca, 0x7f, 0xed, + 0xee, 0xb6, 0xdb, 0x9c, 0x72, 0x77, 0x33, 0x64, 0xc4, 0x70, 0xfd, 0xea, 0xba, 0xea, 0xb5, 0xab, + 0xde, 0x7b, 0x79, 0xf7, 0x95, 0x1d, 0x2b, 0x0b, 0x02, 0x62, 0x04, 0x08, 0x8d, 0x04, 0x1b, 0x18, + 0x31, 0x1b, 0xc4, 0x02, 0x36, 0x6c, 0xd8, 0x02, 0x1a, 0x24, 0xc4, 0x22, 0x62, 0x43, 0xc4, 0x86, + 0x2c, 0x90, 0x35, 0x31, 0x1b, 0x10, 0x48, 0x48, 0x6c, 0x90, 0x7a, 0x85, 0xee, 0x7d, 0xf7, 0xdd, + 0xf7, 0x53, 0xcf, 0x89, 0xbb, 0xca, 0xdd, 0x08, 0x66, 0x56, 0xed, 0x3a, 0xe7, 0xdc, 0xef, 0xdc, + 0xdf, 0x73, 0xcf, 0x39, 0xf7, 0xbc, 0x86, 0xe5, 0xb6, 0xe5, 0x77, 0xfa, 0xbb, 0x35, 0xd3, 0xe9, + 0x2d, 0x51, 0xaf, 0xed, 0xb8, 0x9e, 0xf3, 0x48, 0xfe, 0xb1, 0xe4, 0xee, 0xb7, 0x97, 0xa8, 0x6b, + 0xf1, 0xa5, 0x43, 0xc7, 0xdb, 0xdf, 0xeb, 0x3a, 0x87, 0x4b, 0x07, 0x6f, 0xd0, 0xae, 0xdb, 0xa1, + 0x6f, 0x2c, 0xb5, 0x99, 0xcd, 0x3c, 0xea, 0xb3, 0x56, 0xcd, 0xf5, 0x1c, 0xdf, 0x21, 0x37, 0x23, + 0x90, 0x5a, 0x08, 0x22, 0xff, 0xa8, 0xb9, 0xfb, 0xed, 0x9a, 0x00, 0xa9, 0x85, 0x20, 0xb5, 0x10, + 0x64, 0xe1, 0xb5, 0x98, 0xe6, 0xb6, 0x23, 0x14, 0x0a, 0xac, 0xdd, 0xfe, 0x9e, 0xfc, 0x25, 0x7f, + 0xc8, 0xbf, 0x02, 0x1d, 0x0b, 0xc6, 0xfe, 0x9b, 0xbc, 0x66, 0x39, 0xa2, 0x4b, 0x4b, 0xa6, 0xe3, + 0xb1, 0xa5, 0x83, 0x81, 0x7e, 0x2c, 0x7c, 0x3d, 0x92, 0xe9, 0x51, 0xb3, 0x63, 0xd9, 0xcc, 0x3b, + 0x8a, 0xc6, 0xd1, 0x63, 0x3e, 0xcd, 0x6a, 0xb5, 0x74, 0x5a, 0x2b, 0xaf, 0x6f, 0xfb, 0x56, 0x8f, + 0x0d, 0x34, 0xf8, 0xb9, 0x2f, 0x6b, 0xc0, 0xcd, 0x0e, 0xeb, 0xd1, 0x74, 0x3b, 0xe3, 0x1f, 0x72, + 0x30, 0x5b, 0xf7, 0xcc, 0x8e, 0x75, 0xc0, 0x9a, 0xbe, 0x60, 0xb4, 0x8f, 0xc8, 0xfb, 0x30, 0xee, + 0x53, 0xaf, 0x92, 0xbb, 0x96, 0xbb, 0x5e, 0xbe, 0xf1, 0xad, 0xda, 0x10, 0x13, 0x59, 0xdb, 0xa1, + 0x5e, 0x08, 0xd7, 0x98, 0x3c, 0x39, 0xae, 0x8e, 0xef, 0x50, 0x0f, 0x05, 0x2a, 0xf9, 0x2e, 0x4c, + 0xd8, 0x8e, 0xcd, 0x2a, 0x63, 0x12, 0xbd, 0x3e, 0x14, 0xfa, 0x96, 0x63, 0xeb, 0xde, 0x36, 0x8a, + 0x27, 0xc7, 0xd5, 0x09, 0x41, 0x41, 0x09, 0x6c, 0xfc, 0x67, 0x0e, 0x4a, 0x75, 0xaf, 0xdd, 0xef, + 0x31, 0xdb, 0xe7, 0xc4, 0x03, 0x70, 0xa9, 0x47, 0x7b, 0xcc, 0x67, 0x1e, 0xaf, 0xe4, 0xae, 0x8d, + 0x5f, 0x2f, 0xdf, 0x78, 0x77, 0x28, 0xa5, 0xdb, 0x21, 0x4c, 0x83, 0x7c, 0x72, 0x5c, 0xbd, 0x70, + 0x72, 0x5c, 0x05, 0x4d, 0xe2, 0x18, 0xd3, 0x42, 0x6c, 0x28, 0x51, 0xcf, 0xb7, 0xf6, 0xa8, 0xe9, + 0xf3, 0xca, 0x98, 0x54, 0xf9, 0xce, 0x50, 0x2a, 0xeb, 0x0a, 0xa5, 0x71, 0x51, 0x69, 0x2c, 0x85, + 0x14, 0x8e, 0x91, 0x0a, 0xe3, 0xdf, 0xc7, 0xa1, 0x18, 0x32, 0xc8, 0x35, 0x98, 0xb0, 0x69, 0x8f, + 0xc9, 0xd5, 0x2b, 0x35, 0xa6, 0x54, 0xc3, 0x89, 0x2d, 0xda, 0x13, 0x13, 0x44, 0x7b, 0x4c, 0x48, + 0xb8, 0xd4, 0xef, 0xc8, 0x15, 0x88, 0x49, 0x6c, 0x53, 0xbf, 0x83, 0x92, 0x43, 0xae, 0xc2, 0x44, + 0xcf, 0x69, 0xb1, 0xca, 0xf8, 0xb5, 0xdc, 0xf5, 0x7c, 0x30, 0xc1, 0x9b, 0x4e, 0x8b, 0xa1, 0xa4, + 0x8a, 0xf6, 0x7b, 0x9e, 0xd3, 0xab, 0x4c, 0x24, 0xdb, 0xaf, 0x79, 0x4e, 0x0f, 0x25, 0x87, 0xfc, + 0x6e, 0x0e, 0xe6, 0xc2, 0xee, 0xdd, 0x75, 0x4c, 0xea, 0x5b, 0x8e, 0x5d, 0xc9, 0xcb, 0x05, 0x5f, + 0x1d, 0x69, 0x22, 0x42, 0xb0, 0x46, 0x45, 0x69, 0x9d, 0x4b, 0x73, 0x70, 0x40, 0x31, 0xb9, 0x01, + 0xd0, 0xee, 0x3a, 0xbb, 0xb4, 0x2b, 0xe6, 0xa0, 0x52, 0x90, 0xbd, 0xd6, 0x4b, 0xb8, 0xae, 0x39, + 0x18, 0x93, 0x22, 0xfb, 0x30, 0x49, 0x83, 0x53, 0x51, 0x99, 0x94, 0xfd, 0x5e, 0x19, 0xb2, 0xdf, + 0x89, 0x93, 0xd5, 0x28, 0x9f, 0x1c, 0x57, 0x27, 0x15, 0x11, 0x43, 0x0d, 0xe4, 0x55, 0x28, 0x3a, + 0xae, 0xe8, 0x2a, 0xed, 0x56, 0x8a, 0xd7, 0x72, 0xd7, 0x8b, 0x8d, 0x39, 0xd5, 0xbd, 0xe2, 0x3d, + 0x45, 0x47, 0x2d, 0x61, 0xfc, 0x61, 0x1e, 0x06, 0x46, 0x4d, 0xde, 0x80, 0xb2, 0x42, 0xbb, 0xeb, + 0xb4, 0xb9, 0x5c, 0xfc, 0x62, 0x63, 0xf6, 0xe4, 0xb8, 0x5a, 0xae, 0x47, 0x64, 0x8c, 0xcb, 0x90, + 0x87, 0x30, 0xc6, 0x6f, 0xaa, 0x63, 0xf8, 0xde, 0x50, 0xa3, 0x6b, 0xde, 0xd4, 0x1b, 0xb4, 0x70, + 0x72, 0x5c, 0x1d, 0x6b, 0xde, 0xc4, 0x31, 0x7e, 0x53, 0x98, 0x8f, 0xb6, 0xe5, 0xcb, 0xcd, 0x33, + 0xac, 0xf9, 0x58, 0xb7, 0x7c, 0x0d, 0x2d, 0xcd, 0xc7, 0xba, 0xe5, 0xa3, 0x40, 0x15, 0xe6, 0xa3, + 0xe3, 0xfb, 0xae, 0xdc, 0x7c, 0xc3, 0x9a, 0x8f, 0x5b, 0x3b, 0x3b, 0xdb, 0x1a, 0x5e, 0xee, 0x6e, + 0x41, 0x41, 0x09, 0x4c, 0x3e, 0x12, 0x33, 0x19, 0xf0, 0x1c, 0xef, 0x48, 0xed, 0xda, 0x5b, 0x23, + 0xed, 0x5a, 0xc7, 0x3b, 0xd2, 0xea, 0xd4, 0x9a, 0x68, 0x06, 0xc6, 0xb5, 0xc9, 0xd1, 0xb5, 0xf6, + 0xb8, 0xdc, 0xa4, 0x43, 0x8f, 0x6e, 0x65, 0xad, 0x99, 0x1a, 0xdd, 0xca, 0x5a, 0x13, 0x25, 0xb0, + 0x58, 0x1b, 0x8f, 0x1e, 0xaa, 0x3d, 0x3d, 0xdc, 0xda, 0x20, 0x3d, 0x4c, 0xae, 0x0d, 0xd2, 0x43, + 0x14, 0xa8, 0x46, 0x1b, 0x2e, 0x87, 0x1c, 0x64, 0xae, 0xc3, 0x2d, 0x39, 0x40, 0xb6, 0x47, 0x96, + 0xa0, 0x64, 0x3a, 0xf6, 0x9e, 0xd5, 0xde, 0xa4, 0xae, 0x32, 0x4c, 0xda, 0xa2, 0x2d, 0x87, 0x0c, + 0x8c, 0x64, 0xc8, 0x8b, 0x30, 0xbe, 0xcf, 0x8e, 0x94, 0x85, 0x2a, 0x2b, 0xd1, 0xf1, 0x3b, 0xec, + 0x08, 0x05, 0xdd, 0xf8, 0x51, 0x0e, 0xe6, 0x33, 0x26, 0x57, 0x34, 0xeb, 0x7b, 0x5d, 0xa5, 0x41, + 0x37, 0xbb, 0x8f, 0x77, 0x51, 0xd0, 0xc9, 0x6f, 0xe5, 0x60, 0x36, 0x36, 0xdb, 0xf5, 0xbe, 0x32, + 0x82, 0xc3, 0x9f, 0xee, 0x04, 0x56, 0xe3, 0x8a, 0xd2, 0x38, 0x9b, 0x62, 0x60, 0x5a, 0xab, 0xf1, + 0x4f, 0xf2, 0xd6, 0x4d, 0xd0, 0x08, 0x85, 0x99, 0x3e, 0x67, 0x9e, 0x30, 0xd1, 0x4d, 0x66, 0x7a, + 0xcc, 0x57, 0x17, 0xf0, 0xcb, 0xb5, 0xe0, 0x6a, 0x17, 0xbd, 0xa8, 0x09, 0x2f, 0xa3, 0x76, 0xf0, + 0x46, 0x2d, 0x90, 0xb8, 0xc3, 0x8e, 0x9a, 0xac, 0xcb, 0x04, 0x46, 0x83, 0x9c, 0x1c, 0x57, 0x67, + 0xee, 0x27, 0x00, 0x30, 0x05, 0x28, 0x54, 0xb8, 0x94, 0xf3, 0x43, 0xc7, 0x6b, 0x29, 0x15, 0x63, + 0x4f, 0xac, 0x62, 0x3b, 0x01, 0x80, 0x29, 0x40, 0xe3, 0xdb, 0x00, 0xcb, 0x8e, 0xed, 0x5b, 0x76, + 0x9f, 0xdd, 0xb3, 0xc9, 0x4b, 0x90, 0x67, 0x9e, 0xe7, 0x78, 0xca, 0x20, 0x4d, 0xab, 0x09, 0xca, + 0xaf, 0x0a, 0x22, 0x06, 0x3c, 0xf2, 0x0a, 0x14, 0xf6, 0xa8, 0xd5, 0x65, 0x2d, 0xd9, 0x9b, 0x62, + 0x63, 0x46, 0x49, 0x15, 0xd6, 0x24, 0x15, 0x15, 0xd7, 0xf8, 0xab, 0x71, 0x98, 0x5a, 0xf6, 0x1c, + 0xfb, 0xa1, 0x5a, 0x08, 0xf2, 0xab, 0x50, 0x14, 0xfe, 0x53, 0x8b, 0xfa, 0x54, 0xcd, 0xd5, 0xeb, + 0xb1, 0x81, 0x68, 0x37, 0x28, 0x5a, 0x42, 0x21, 0x2d, 0x86, 0x76, 0x6f, 0xf7, 0x11, 0x33, 0xfd, + 0x4d, 0xe6, 0xd3, 0xe8, 0x22, 0x88, 0x68, 0xa8, 0x51, 0x89, 0x09, 0x13, 0xdc, 0x65, 0xe6, 0x48, + 0xce, 0x4a, 0xd8, 0xdd, 0xa6, 0xcb, 0xcc, 0xe8, 0xb6, 0x14, 0xbf, 0x50, 0x82, 0x13, 0x07, 0x0a, + 0xdc, 0xa7, 0x7e, 0x9f, 0x2b, 0x93, 0xb9, 0x3e, 0x94, 0x9a, 0xf8, 0xcc, 0x34, 0x25, 0x5c, 0x34, + 0x91, 0xc1, 0x6f, 0x54, 0x6a, 0x08, 0x87, 0xc9, 0xe0, 0x36, 0xe1, 0xca, 0x8c, 0xde, 0x1a, 0x59, + 0x63, 0x70, 0x4f, 0xf1, 0xc6, 0xac, 0x52, 0x39, 0xa9, 0x08, 0x18, 0x6a, 0x32, 0x3e, 0xcb, 0xc1, + 0x5c, 0xbc, 0xc5, 0x5d, 0x8b, 0xfb, 0xe4, 0x3b, 0x03, 0x2b, 0x58, 0x3b, 0xdb, 0x0a, 0x8a, 0xd6, + 0x72, 0xfd, 0xf4, 0x4d, 0x19, 0x52, 0x62, 0xab, 0xb7, 0x07, 0x79, 0xcb, 0x67, 0xbd, 0xd0, 0x07, + 0xab, 0x8f, 0x3c, 0xca, 0x68, 0x03, 0x6f, 0x08, 0x5c, 0x0c, 0xe0, 0x8d, 0x7f, 0x1c, 0x87, 0xf9, + 0x8c, 0xc9, 0x10, 0xf7, 0xba, 0xf0, 0xba, 0x5b, 0xfd, 0x6e, 0xe8, 0x8e, 0xe9, 0xde, 0x36, 0x15, + 0x1d, 0xb5, 0x04, 0x59, 0x81, 0x39, 0xe5, 0xab, 0x0b, 0x0f, 0x84, 0xbb, 0xd4, 0x64, 0xca, 0x00, + 0x6a, 0x67, 0x07, 0x53, 0x7c, 0x1c, 0x68, 0x41, 0x36, 0x61, 0x5e, 0xd1, 0xd6, 0x95, 0xa7, 0x2f, + 0xbd, 0x9e, 0x71, 0x09, 0xf4, 0x82, 0x02, 0x9a, 0xc7, 0x41, 0x11, 0xcc, 0x6a, 0x47, 0x0e, 0xe0, + 0xa2, 0xe9, 0xd8, 0x66, 0xdf, 0xf3, 0x98, 0x6d, 0x1e, 0x6d, 0x3b, 0x5d, 0xcb, 0x3c, 0x52, 0x8e, + 0xdf, 0x2d, 0x05, 0x76, 0x71, 0x39, 0x2d, 0xf0, 0xf8, 0xb8, 0xfa, 0xb5, 0x58, 0x64, 0xb4, 0x4b, + 0x7d, 0xb3, 0xb3, 0x74, 0x70, 0x23, 0x9c, 0xd0, 0xb4, 0x38, 0x0e, 0xaa, 0x20, 0x5f, 0x85, 0x49, + 0xde, 0xe7, 0x2e, 0xb3, 0x5b, 0xf2, 0x06, 0x2e, 0x46, 0x1b, 0xab, 0x19, 0x90, 0x31, 0xe4, 0x93, + 0xfb, 0x70, 0x85, 0xfb, 0xc2, 0xc0, 0xda, 0xed, 0x15, 0x46, 0x5b, 0x5d, 0xcb, 0x16, 0xe6, 0xce, + 0xb1, 0x5b, 0xc1, 0x35, 0x3a, 0xde, 0x78, 0xe1, 0xe4, 0xb8, 0x7a, 0xa5, 0x99, 0x2d, 0x82, 0xa7, + 0xb5, 0x35, 0xbe, 0x97, 0x03, 0x32, 0x78, 0xa6, 0x88, 0x03, 0x17, 0xbb, 0x94, 0xfb, 0xe1, 0xfa, + 0xb5, 0x76, 0x2c, 0xe5, 0x6b, 0x97, 0x6f, 0xfc, 0xec, 0xd9, 0xb6, 0xae, 0x68, 0xd1, 0xb8, 0x2c, + 0x26, 0xee, 0x6e, 0x1a, 0x08, 0x07, 0xb1, 0x8d, 0x3f, 0x2a, 0xc0, 0xe4, 0x4a, 0x7d, 0x7d, 0x87, + 0xf2, 0xfd, 0x33, 0xf8, 0xf6, 0xaf, 0x42, 0xd1, 0x67, 0x3d, 0xb7, 0x4b, 0xfd, 0x70, 0xf3, 0xe8, + 0x2d, 0xb7, 0xa3, 0xe8, 0xa8, 0x25, 0x88, 0x23, 0x02, 0x15, 0x15, 0x29, 0x29, 0xe3, 0xf3, 0xee, + 0x90, 0x37, 0xa1, 0x42, 0x89, 0x47, 0x2a, 0x8a, 0x84, 0x91, 0x0e, 0xc2, 0xa1, 0x1c, 0x2a, 0x47, + 0xb6, 0xa7, 0xac, 0xcf, 0x90, 0x11, 0x66, 0x84, 0x13, 0x38, 0x55, 0x31, 0x02, 0xc6, 0xb5, 0x90, + 0xaf, 0xc3, 0x54, 0x8b, 0x89, 0xad, 0xc2, 0x6c, 0xd3, 0x62, 0xbc, 0x92, 0xbf, 0x36, 0x2e, 0xe6, + 0xe5, 0xe4, 0xb8, 0x3a, 0xb5, 0x12, 0xa3, 0x63, 0x42, 0x8a, 0x3c, 0x82, 0xd2, 0xa1, 0xe5, 0x77, + 0xe4, 0x41, 0xaf, 0x14, 0xa4, 0x01, 0xf9, 0xe6, 0x50, 0x1d, 0x15, 0x08, 0xd1, 0xb4, 0x3c, 0x0c, + 0x31, 0x31, 0x82, 0x17, 0xfe, 0x91, 0xf8, 0x21, 0xc3, 0x49, 0xe9, 0x9b, 0x95, 0x92, 0x0d, 0x24, + 0x03, 0x23, 0x19, 0xc2, 0x61, 0x4a, 0xfc, 0x68, 0xb2, 0x0f, 0xfa, 0xcc, 0x36, 0x99, 0x8c, 0x1a, + 0x86, 0x0d, 0x32, 0x43, 0x90, 0x60, 0x46, 0x1e, 0xc6, 0x60, 0x31, 0xa1, 0x44, 0xec, 0xbe, 0xc3, + 0x0e, 0xb3, 0x2b, 0xa5, 0xe4, 0xee, 0x7b, 0xd8, 0x61, 0x36, 0x4a, 0x0e, 0x71, 0x00, 0x4c, 0x7d, + 0xf9, 0x57, 0x60, 0x84, 0xd0, 0x22, 0xf2, 0x21, 0x1a, 0x33, 0xe2, 0x76, 0x8e, 0x7e, 0x63, 0x4c, + 0x85, 0xf1, 0xb7, 0x39, 0x28, 0x8b, 0xc3, 0x11, 0x6e, 0xe8, 0x57, 0xa0, 0xe0, 0x53, 0xaf, 0xad, + 0x7c, 0xa7, 0x52, 0x74, 0x03, 0xee, 0x48, 0x2a, 0x2a, 0x2e, 0xa1, 0x90, 0xf7, 0x29, 0xdf, 0x0f, + 0x6f, 0x86, 0x5f, 0x18, 0xaa, 0x8f, 0xea, 0x54, 0x46, 0x97, 0x82, 0xf8, 0xc5, 0x31, 0x40, 0x26, + 0xd7, 0xa1, 0x28, 0xfc, 0x96, 0x35, 0xca, 0x83, 0x50, 0xa8, 0xd8, 0x98, 0x12, 0xa7, 0x70, 0x4d, + 0xd1, 0x50, 0x73, 0x8d, 0xef, 0xc0, 0xcc, 0xea, 0x87, 0xcc, 0xec, 0xfb, 0x8e, 0x17, 0x38, 0xc3, + 0xe4, 0x36, 0x10, 0xce, 0xbc, 0x03, 0xcb, 0x64, 0x75, 0xd3, 0x74, 0xfa, 0xb6, 0xbf, 0x15, 0x9d, + 0xfa, 0x05, 0xa5, 0x8d, 0x34, 0x07, 0x24, 0x30, 0xa3, 0x95, 0xf1, 0xe7, 0x13, 0x50, 0x8e, 0x85, + 0x53, 0x62, 0x15, 0x3d, 0xe6, 0x3a, 0x69, 0x1b, 0x22, 0x1c, 0x76, 0x94, 0x1c, 0x61, 0x43, 0x3c, + 0x76, 0x60, 0x71, 0x11, 0xb4, 0xa7, 0x6c, 0x08, 0x2a, 0x3a, 0x6a, 0x09, 0x52, 0x85, 0x7c, 0x8b, + 0xb9, 0x7e, 0x47, 0x0e, 0x72, 0xa2, 0x51, 0x12, 0x13, 0xb1, 0x22, 0x08, 0x18, 0xd0, 0x85, 0xc0, + 0x1e, 0xf3, 0xcd, 0x4e, 0x65, 0x42, 0x9e, 0x3b, 0x29, 0xb0, 0x26, 0x08, 0x18, 0xd0, 0x33, 0x1c, + 0xdf, 0xfc, 0xd3, 0x77, 0x7c, 0x0b, 0xe7, 0xec, 0xf8, 0x12, 0x17, 0xe6, 0x39, 0xef, 0x6c, 0x7b, + 0xd6, 0x01, 0xf5, 0x99, 0x6c, 0x2c, 0xf5, 0x4c, 0x3e, 0x89, 0x9e, 0x2b, 0xe2, 0x6e, 0x6e, 0x36, + 0x6f, 0xa5, 0x51, 0x30, 0x0b, 0x9a, 0x34, 0xe1, 0xb2, 0x65, 0x73, 0x66, 0xf6, 0x3d, 0xb6, 0xd1, + 0xb6, 0x1d, 0x8f, 0xdd, 0x72, 0xb8, 0x80, 0x53, 0x39, 0x84, 0x17, 0xd5, 0xa2, 0x5d, 0xde, 0xc8, + 0x12, 0xc2, 0xec, 0xb6, 0xc6, 0xdf, 0xe7, 0x60, 0x2a, 0x1e, 0x41, 0x12, 0x0e, 0xd0, 0x59, 0x59, + 0x6b, 0x06, 0x3b, 0x53, 0xdd, 0x74, 0xef, 0x0d, 0x1d, 0x98, 0x06, 0x30, 0x91, 0xd7, 0x1d, 0xd1, + 0x30, 0xa6, 0xe6, 0x0c, 0x29, 0xaa, 0x97, 0x20, 0xbf, 0xe7, 0x78, 0x26, 0x53, 0x67, 0x4b, 0x9f, + 0xc1, 0x35, 0x41, 0xc4, 0x80, 0x67, 0xfc, 0x6b, 0x0e, 0x62, 0x1a, 0xc8, 0xaf, 0xc1, 0xb4, 0xd0, + 0x71, 0xc7, 0xdb, 0x4d, 0x8c, 0xa6, 0x31, 0xf4, 0x68, 0x34, 0x52, 0xe3, 0xb2, 0xd2, 0x3f, 0x9d, + 0x20, 0x63, 0x52, 0x1f, 0xf9, 0x1a, 0x94, 0x68, 0xab, 0xe5, 0x31, 0xce, 0x59, 0x60, 0x7a, 0x4a, + 0x8d, 0x69, 0x79, 0x57, 0x86, 0x44, 0x8c, 0xf8, 0xe2, 0x18, 0x8a, 0x90, 0x5d, 0xec, 0x6c, 0xe5, + 0xbe, 0xe9, 0x63, 0x28, 0x94, 0x08, 0x3a, 0x6a, 0x09, 0xe3, 0xfb, 0x13, 0x90, 0xd4, 0x4d, 0x5a, + 0x30, 0xbb, 0xef, 0xed, 0x2e, 0x2f, 0x53, 0xb3, 0x33, 0x54, 0x40, 0x39, 0x2f, 0x22, 0xd9, 0x3b, + 0x49, 0x04, 0x4c, 0x43, 0x2a, 0x2d, 0x77, 0xd8, 0x91, 0x4f, 0x77, 0x87, 0x89, 0x29, 0x43, 0x2d, + 0x71, 0x04, 0x4c, 0x43, 0x92, 0x6f, 0x40, 0x79, 0xdf, 0xdb, 0x0d, 0x0f, 0xb9, 0x9a, 0x8e, 0x79, + 0x35, 0x1d, 0xe5, 0x3b, 0x11, 0x0b, 0xe3, 0x72, 0x62, 0x0a, 0xf7, 0xbd, 0x5d, 0x64, 0xb4, 0x1b, + 0x66, 0x2b, 0xf5, 0x14, 0xde, 0x51, 0x74, 0xd4, 0x12, 0xc4, 0x05, 0xb2, 0x1f, 0xce, 0x9e, 0xce, + 0x4a, 0x28, 0x5b, 0x74, 0x3d, 0x6b, 0x34, 0x5a, 0x28, 0x3e, 0xa0, 0xe7, 0x84, 0x6d, 0xbe, 0x33, + 0x80, 0x83, 0x19, 0xd8, 0xe4, 0xdb, 0x70, 0x65, 0xdf, 0xdb, 0x55, 0x86, 0x7c, 0xdb, 0xb3, 0x6c, + 0xd3, 0x72, 0x13, 0x69, 0xca, 0xaa, 0xea, 0xee, 0x95, 0x3b, 0xd9, 0x62, 0x78, 0x5a, 0x7b, 0xe3, + 0x35, 0x98, 0x8a, 0xa7, 0xb9, 0xbe, 0x24, 0x35, 0x62, 0xfc, 0x47, 0x0e, 0x0a, 0x1b, 0xb6, 0xdb, + 0xff, 0x09, 0xc9, 0x98, 0xff, 0xc9, 0x04, 0x4c, 0x08, 0xd7, 0x8b, 0x5c, 0x87, 0x09, 0xff, 0xc8, + 0x0d, 0xee, 0xd6, 0xf1, 0xc6, 0xa5, 0xd0, 0xd0, 0xec, 0x1c, 0xb9, 0xec, 0xb1, 0xfa, 0x17, 0xa5, + 0x04, 0x79, 0x17, 0x0a, 0x76, 0xbf, 0xf7, 0x80, 0x76, 0x95, 0x51, 0x7a, 0x25, 0x74, 0x2d, 0xb6, + 0x24, 0xf5, 0xf1, 0x71, 0xf5, 0x12, 0xb3, 0x4d, 0xa7, 0x65, 0xd9, 0xed, 0xa5, 0x47, 0xdc, 0xb1, + 0x6b, 0x5b, 0xfd, 0xde, 0x2e, 0xf3, 0x50, 0xb5, 0x12, 0x11, 0xcd, 0xae, 0xe3, 0x74, 0x05, 0xc0, + 0x78, 0x32, 0xa2, 0x69, 0x04, 0x64, 0x0c, 0xf9, 0xc2, 0x8b, 0xe1, 0xbe, 0x27, 0x24, 0x27, 0x92, + 0x5e, 0x4c, 0x53, 0x52, 0x51, 0x71, 0x49, 0x0f, 0x0a, 0x3d, 0xea, 0x0a, 0xb9, 0xbc, 0x9c, 0xb2, + 0xd5, 0xa1, 0xfd, 0xd3, 0xda, 0xa6, 0xc4, 0x59, 0xb5, 0x7d, 0xef, 0x28, 0x52, 0x17, 0x10, 0x51, + 0x29, 0x21, 0x16, 0x4c, 0x76, 0x2d, 0xee, 0x0b, 0x7d, 0x85, 0x11, 0x76, 0x85, 0xd0, 0xf7, 0x80, + 0x76, 0xfb, 0x2c, 0x9a, 0x81, 0xbb, 0x01, 0x2c, 0x86, 0xf8, 0x0b, 0x47, 0x50, 0x8e, 0xf5, 0x88, + 0xcc, 0x05, 0xe9, 0x40, 0xb9, 0x79, 0x65, 0x06, 0x90, 0xec, 0x40, 0xfe, 0x40, 0x60, 0x28, 0x63, + 0x33, 0x62, 0x4f, 0x30, 0x00, 0x7b, 0x6b, 0xec, 0xcd, 0xdc, 0x5b, 0xc5, 0x1f, 0xfc, 0x71, 0xf5, + 0xc2, 0xc7, 0xff, 0x7c, 0xed, 0x82, 0xf1, 0x77, 0xe3, 0x50, 0xd2, 0x22, 0xff, 0xb7, 0x77, 0x8a, + 0x97, 0xda, 0x29, 0xb7, 0x47, 0x9b, 0xaf, 0x33, 0x6d, 0x97, 0x7a, 0x72, 0xbb, 0x4c, 0x35, 0x7e, + 0x26, 0xb6, 0xd4, 0x8f, 0x8f, 0xab, 0x95, 0xe4, 0x24, 0x20, 0x3d, 0xdc, 0x64, 0x9c, 0xd3, 0x36, + 0x8b, 0xb6, 0xc1, 0x37, 0xbf, 0x6c, 0x1b, 0x5c, 0x8a, 0x6f, 0x83, 0x52, 0xf6, 0x32, 0x7e, 0x3c, + 0x0e, 0xc5, 0xcd, 0x30, 0x25, 0xf4, 0xbd, 0x1c, 0x94, 0xa9, 0x6d, 0x3b, 0x3e, 0x0d, 0xf2, 0x5f, + 0x81, 0x79, 0xdb, 0x1a, 0x6a, 0x3a, 0x42, 0xd0, 0x5a, 0x3d, 0x02, 0x0c, 0xa6, 0x44, 0xdf, 0x4c, + 0x31, 0x0e, 0xc6, 0xf5, 0x92, 0x0f, 0xa0, 0xd0, 0xa5, 0xbb, 0xac, 0x1b, 0x5a, 0xbb, 0x8d, 0xd1, + 0x7a, 0x70, 0x57, 0x62, 0xa5, 0xd6, 0x23, 0x20, 0xa2, 0x52, 0xb4, 0xf0, 0x2e, 0xcc, 0xa5, 0x3b, + 0xfa, 0x24, 0x33, 0x2a, 0x16, 0x23, 0xa6, 0xe6, 0x49, 0x9a, 0x1a, 0x7f, 0x5d, 0x02, 0xd8, 0x72, + 0x5a, 0x4c, 0xe5, 0x50, 0x16, 0x60, 0xcc, 0x6a, 0xa9, 0xab, 0x08, 0x54, 0x6f, 0xc7, 0x36, 0x56, + 0x70, 0xcc, 0x6a, 0xe9, 0x14, 0xc7, 0xd8, 0xa9, 0x29, 0x8e, 0x6f, 0x40, 0xb9, 0x65, 0x71, 0xb7, + 0x4b, 0x8f, 0xb6, 0x32, 0x7c, 0x81, 0x95, 0x88, 0x85, 0x71, 0x39, 0xf2, 0xaa, 0x3a, 0xbf, 0x13, + 0x89, 0x94, 0x5a, 0x78, 0x7e, 0x8b, 0xa2, 0x7b, 0xb1, 0x33, 0xfc, 0x26, 0x4c, 0x85, 0x29, 0x04, + 0xa9, 0x25, 0x2f, 0x5b, 0x85, 0xa7, 0x7e, 0x6a, 0x27, 0xc6, 0xc3, 0x84, 0x64, 0x3a, 0xc5, 0x51, + 0x78, 0x26, 0x29, 0x8e, 0x15, 0x98, 0xe3, 0xbe, 0xe3, 0xb1, 0x56, 0x28, 0xb1, 0xb1, 0x52, 0x21, + 0xc9, 0xdc, 0x61, 0x33, 0xc5, 0xc7, 0x81, 0x16, 0x64, 0x1b, 0x2e, 0x85, 0x9d, 0x88, 0x0f, 0xb0, + 0x32, 0x2f, 0x91, 0xae, 0x2a, 0xa4, 0x4b, 0x0f, 0x33, 0x64, 0x30, 0xb3, 0x25, 0x79, 0x1d, 0xf2, + 0x6e, 0x87, 0x72, 0xa6, 0x92, 0x1a, 0x61, 0xec, 0x9a, 0xdf, 0x16, 0xc4, 0xc7, 0xc7, 0xd5, 0x92, + 0x98, 0x76, 0xf9, 0x03, 0x03, 0x41, 0x72, 0x03, 0x60, 0xd7, 0xe9, 0xdb, 0x2d, 0xea, 0x1d, 0x6d, + 0xac, 0xc8, 0x48, 0x26, 0xf6, 0x58, 0xdb, 0xd0, 0x1c, 0x8c, 0x49, 0x09, 0x83, 0xd9, 0x0b, 0x4c, + 0x87, 0xca, 0x4d, 0x68, 0x83, 0xa9, 0x2d, 0x8a, 0xe2, 0x93, 0xf7, 0xa1, 0x24, 0x13, 0x7e, 0xac, + 0x55, 0xf7, 0x55, 0x82, 0xe2, 0x49, 0xd2, 0x76, 0xda, 0xab, 0x68, 0x86, 0x20, 0x18, 0xe1, 0x91, + 0x5f, 0x01, 0xd8, 0xb3, 0x6c, 0x8b, 0x77, 0x24, 0x7a, 0xf9, 0x89, 0xd1, 0xf5, 0x38, 0xd7, 0x34, + 0x0a, 0xc6, 0x10, 0x45, 0xcc, 0xe3, 0x3a, 0xad, 0x8d, 0xed, 0xca, 0x94, 0x1c, 0xa5, 0x8e, 0x79, + 0xb6, 0x05, 0x11, 0x03, 0x1e, 0xb9, 0x0e, 0xc5, 0x16, 0x65, 0x3d, 0xc7, 0x66, 0xad, 0xca, 0x74, + 0x94, 0x77, 0x58, 0x51, 0x34, 0xd4, 0x5c, 0xf2, 0x5d, 0x28, 0x58, 0xd2, 0xe5, 0xab, 0xcc, 0xc8, + 0xae, 0xbe, 0x3d, 0xdc, 0xa5, 0x20, 0x21, 0x1a, 0x20, 0x2c, 0x4e, 0xf0, 0x37, 0x2a, 0x58, 0x62, + 0xc2, 0xa4, 0xd3, 0xf7, 0xa5, 0x86, 0x59, 0xa9, 0x61, 0xb8, 0x3c, 0xcb, 0xbd, 0x00, 0x23, 0x78, + 0x3c, 0x57, 0x3f, 0x30, 0x44, 0x16, 0xe3, 0x35, 0x3b, 0x56, 0xb7, 0xe5, 0x31, 0xbb, 0x32, 0x27, + 0x43, 0x2a, 0x39, 0xde, 0x65, 0x45, 0x43, 0xcd, 0x25, 0x3f, 0x0f, 0xd3, 0x4e, 0xdf, 0x97, 0xfb, + 0x46, 0x6c, 0x3b, 0x5e, 0xb9, 0x28, 0xc5, 0x2f, 0x8a, 0xb0, 0xed, 0x5e, 0x9c, 0x81, 0x49, 0x39, + 0x63, 0x06, 0xa6, 0xe2, 0x15, 0x27, 0xc6, 0xef, 0x8f, 0x41, 0xd8, 0x8f, 0x9f, 0x04, 0x6f, 0x99, + 0x18, 0x50, 0xf0, 0x18, 0xef, 0x77, 0x7d, 0x65, 0x6c, 0xe5, 0x5a, 0xa3, 0xa4, 0xa0, 0xe2, 0x18, + 0x87, 0x30, 0x2d, 0x7a, 0xdb, 0xed, 0xb2, 0x6e, 0xd3, 0x67, 0x2e, 0x27, 0x7b, 0x90, 0xe7, 0xe2, + 0x0f, 0x35, 0x27, 0x23, 0xbe, 0x9d, 0xf9, 0xcc, 0x8d, 0xf6, 0xbb, 0x54, 0x80, 0x01, 0xbc, 0xf1, + 0x07, 0x63, 0x50, 0xd2, 0xf3, 0x74, 0x86, 0x0c, 0xf9, 0xcb, 0x30, 0xd9, 0x62, 0x7b, 0x54, 0x8c, + 0x46, 0x3d, 0x2f, 0x8b, 0x6d, 0xb5, 0x12, 0x90, 0x30, 0xe4, 0x91, 0x6a, 0x78, 0x99, 0x05, 0x43, + 0x96, 0x59, 0xab, 0xb8, 0xaf, 0x48, 0xf6, 0xa1, 0x24, 0xff, 0x58, 0x0b, 0x4b, 0x61, 0x86, 0x5d, + 0xf7, 0x07, 0x21, 0x4a, 0x90, 0x0b, 0xd0, 0x3f, 0x31, 0xc2, 0x4f, 0x95, 0xb0, 0xe4, 0xcf, 0x52, + 0xc2, 0x62, 0xac, 0x81, 0x30, 0x0c, 0xeb, 0xcb, 0xe4, 0x1d, 0x28, 0x72, 0xb5, 0x75, 0xd5, 0xbc, + 0x7c, 0x45, 0x3f, 0x43, 0x29, 0xfa, 0xe3, 0xe3, 0xea, 0xb4, 0x14, 0x0e, 0x09, 0xa8, 0x9b, 0x18, + 0x4b, 0x50, 0x8e, 0x3d, 0xf9, 0x8b, 0x19, 0xd6, 0xcf, 0x75, 0xb1, 0x19, 0x5e, 0xa1, 0x3e, 0x45, + 0xc9, 0x31, 0x1e, 0x8f, 0xc1, 0x1c, 0x32, 0xee, 0xf4, 0x3d, 0x93, 0xc5, 0x33, 0xb3, 0xd4, 0x94, + 0x75, 0x40, 0xa9, 0xcc, 0x6c, 0x5d, 0x52, 0x51, 0x71, 0xc9, 0xdb, 0x30, 0xdd, 0x63, 0x5e, 0x5b, + 0x1f, 0x36, 0xb5, 0x48, 0x3a, 0xbf, 0xb2, 0x19, 0x67, 0x62, 0x52, 0x56, 0xc4, 0xfb, 0x3d, 0x6a, + 0x5b, 0x7b, 0x8c, 0xfb, 0xe9, 0x94, 0xc9, 0xa6, 0xa2, 0xa3, 0x96, 0x20, 0xeb, 0x70, 0x91, 0x33, + 0xff, 0xde, 0xa1, 0xcd, 0x3c, 0x64, 0x7b, 0xcc, 0x93, 0x99, 0xf4, 0x09, 0x69, 0x32, 0x9f, 0x0f, + 0xdf, 0xb6, 0x9a, 0x69, 0x01, 0x1c, 0x6c, 0x23, 0x6f, 0xdf, 0xbe, 0x69, 0x32, 0xce, 0x97, 0x1d, + 0xbb, 0x65, 0xe9, 0x6a, 0xa7, 0xf8, 0xed, 0x9b, 0xe2, 0xe3, 0x40, 0x0b, 0x81, 0xb2, 0x47, 0xad, + 0x6e, 0xdf, 0x63, 0x11, 0x4a, 0x21, 0x89, 0xb2, 0x96, 0xe2, 0xe3, 0x40, 0x0b, 0xe3, 0x75, 0x98, + 0x46, 0xe6, 0x7b, 0x47, 0x7a, 0x4e, 0xaa, 0x90, 0xef, 0x5a, 0x3d, 0x2b, 0x48, 0xfe, 0xe4, 0x83, + 0x8d, 0x7c, 0x57, 0x10, 0x30, 0xa0, 0x1b, 0x3f, 0xc8, 0x01, 0x44, 0x95, 0x3c, 0x64, 0x1f, 0x8a, + 0xfc, 0x66, 0xa3, 0x6f, 0xee, 0xeb, 0x7c, 0xd1, 0x90, 0xcf, 0x0a, 0x0a, 0x24, 0xf6, 0xe6, 0xa9, + 0x28, 0xa8, 0x15, 0x7c, 0x59, 0x9d, 0xc7, 0x5f, 0x8c, 0x83, 0x6e, 0x25, 0x16, 0x97, 0xd9, 0x2d, + 0xd7, 0xb1, 0x6c, 0x3f, 0xfd, 0x9a, 0xba, 0xaa, 0xe8, 0xa8, 0x25, 0xc4, 0x7e, 0xdb, 0x0d, 0x06, + 0x31, 0x96, 0xdc, 0x6f, 0xaa, 0x0f, 0x8a, 0x2b, 0xe4, 0x3c, 0xd6, 0x16, 0x73, 0x3d, 0x9e, 0x94, + 0x43, 0x49, 0x45, 0xc5, 0x15, 0xd7, 0x4c, 0x98, 0x30, 0x55, 0x7b, 0x44, 0x5e, 0x33, 0x61, 0x6e, + 0x15, 0x35, 0x97, 0x74, 0x60, 0x96, 0xca, 0xa5, 0x8d, 0x92, 0xc0, 0x4f, 0x94, 0xcf, 0x8e, 0xaa, + 0x48, 0x92, 0x28, 0x98, 0x86, 0x15, 0x9a, 0x78, 0xd4, 0xfc, 0xc9, 0xd3, 0xda, 0x5a, 0x53, 0x33, + 0x89, 0x82, 0x69, 0x58, 0xe1, 0x61, 0x79, 0x4e, 0x97, 0xd5, 0x71, 0x4b, 0x79, 0x72, 0xda, 0xc3, + 0xc2, 0x80, 0x8c, 0x21, 0xdf, 0xf8, 0xed, 0x1c, 0xcc, 0x34, 0x4d, 0xcf, 0x72, 0x7d, 0x7d, 0xf6, + 0xb7, 0x64, 0xf9, 0x8f, 0x4f, 0x85, 0xef, 0xa3, 0xf6, 0xd4, 0x8b, 0xa7, 0xe4, 0xd3, 0x02, 0xa1, + 0x44, 0x75, 0x50, 0x40, 0xc2, 0x08, 0x42, 0x46, 0xbd, 0xd2, 0xba, 0xa4, 0xd7, 0xb6, 0x29, 0xa9, + 0xa8, 0xb8, 0xc6, 0x0f, 0x73, 0x50, 0xd4, 0xaf, 0x57, 0x2f, 0x41, 0x5e, 0x3e, 0x8a, 0xa8, 0xbd, + 0xa3, 0x2f, 0x93, 0x65, 0x41, 0xc4, 0x80, 0x27, 0x84, 0xa4, 0x3b, 0xa7, 0x80, 0x63, 0x37, 0x0e, + 0xf5, 0x7c, 0x0c, 0x78, 0x62, 0xd3, 0x32, 0xbb, 0xa5, 0xf6, 0x8b, 0xde, 0xb4, 0xab, 0x76, 0x0b, + 0x05, 0x5d, 0x96, 0xb3, 0x38, 0x5e, 0x8f, 0xfa, 0xe9, 0x98, 0x7c, 0x4d, 0x52, 0x51, 0x71, 0x8d, + 0xb7, 0x61, 0x56, 0xbd, 0x65, 0xeb, 0x89, 0x12, 0xbe, 0x5b, 0xdf, 0xa3, 0xda, 0x4c, 0xe6, 0x95, + 0xef, 0xa6, 0x68, 0xa8, 0xb9, 0xc6, 0x34, 0x94, 0x63, 0x25, 0xb6, 0xc6, 0x7f, 0x5d, 0x01, 0xfd, + 0xbe, 0xfb, 0xd3, 0x57, 0xe2, 0xa1, 0x42, 0x28, 0x53, 0x7b, 0xc3, 0xf9, 0xd1, 0xbd, 0x61, 0xbd, + 0xe6, 0x29, 0x8f, 0xb8, 0x1d, 0x79, 0xc4, 0x85, 0x73, 0xf0, 0x88, 0xa3, 0x6a, 0x9b, 0xb4, 0x57, + 0xfc, 0x3b, 0x39, 0x98, 0xb2, 0x45, 0xc4, 0xad, 0xce, 0x7a, 0x65, 0x52, 0x7a, 0x61, 0xf7, 0x46, + 0x9a, 0xc4, 0xda, 0x56, 0x0c, 0x31, 0x48, 0x36, 0xe8, 0x88, 0x38, 0xce, 0xc2, 0x84, 0x6a, 0xb2, + 0x06, 0x45, 0xba, 0x27, 0xc2, 0x18, 0xff, 0x48, 0x3d, 0x54, 0x5f, 0xcd, 0x3a, 0xfd, 0x75, 0x25, + 0x13, 0xec, 0xf9, 0xf0, 0x17, 0xea, 0xb6, 0xe2, 0x66, 0xd2, 0xc5, 0x42, 0xa5, 0x11, 0x6e, 0xa6, + 0x30, 0x6b, 0x12, 0x73, 0x0e, 0x14, 0x25, 0x56, 0x3b, 0x64, 0x40, 0x21, 0x08, 0x94, 0x64, 0x94, + 0x58, 0x0c, 0x7c, 0xde, 0x20, 0x88, 0x42, 0xc5, 0x21, 0xed, 0xd0, 0xc5, 0x2d, 0xcb, 0xc9, 0x6d, + 0x0c, 0xed, 0xf6, 0x6b, 0xaf, 0x39, 0xdb, 0xc7, 0x25, 0xb7, 0xe3, 0x06, 0x74, 0xea, 0x2c, 0x06, + 0x74, 0xfa, 0x54, 0xe3, 0xd9, 0x86, 0x02, 0x97, 0xe6, 0x59, 0x46, 0x87, 0xe5, 0x1b, 0xcb, 0xc3, + 0xdd, 0xee, 0x09, 0x0b, 0x1f, 0xcc, 0x4e, 0x40, 0x43, 0x05, 0x4f, 0x1c, 0x28, 0x7a, 0xca, 0x0b, + 0x54, 0x01, 0xe6, 0x70, 0xf9, 0xe9, 0xb4, 0x2b, 0x19, 0xec, 0x8f, 0x90, 0x8a, 0x5a, 0x09, 0x79, + 0x1f, 0xc6, 0x5b, 0xb4, 0xad, 0x42, 0xcd, 0x6f, 0x0d, 0xfd, 0xa4, 0x1f, 0xaa, 0x91, 0xb5, 0xad, + 0x2b, 0xf5, 0x75, 0x14, 0xa8, 0x64, 0x3f, 0x2a, 0x48, 0x9a, 0x1b, 0xa1, 0x64, 0x34, 0x65, 0xf1, + 0x83, 0xe0, 0x63, 0xa0, 0xa4, 0x69, 0x15, 0x26, 0x0f, 0x9c, 0x6e, 0xbf, 0xa7, 0x62, 0xd4, 0xf2, + 0x8d, 0x85, 0xac, 0xd5, 0x7e, 0x20, 0x45, 0x22, 0x23, 0x10, 0xfc, 0xe6, 0x18, 0xb6, 0x25, 0xbf, + 0x91, 0x83, 0x19, 0x71, 0x74, 0xf4, 0x3e, 0xe0, 0x15, 0x32, 0xc2, 0x4e, 0xbd, 0xcf, 0x99, 0x17, + 0xed, 0xb0, 0xe7, 0x94, 0xda, 0x99, 0x8d, 0x84, 0x06, 0x4c, 0x69, 0x24, 0x2e, 0x14, 0xb9, 0xd5, + 0x62, 0x26, 0xf5, 0x78, 0x65, 0xfe, 0xdc, 0xb4, 0x47, 0x4e, 0xa5, 0xc2, 0x46, 0xad, 0x85, 0xfc, + 0xa6, 0x2c, 0xf3, 0x55, 0x85, 0xee, 0xea, 0xe3, 0x83, 0x4b, 0xe7, 0xf9, 0xf1, 0xc1, 0x7c, 0x50, + 0xe3, 0x9b, 0xd0, 0x80, 0x69, 0x95, 0xe4, 0x1e, 0x5c, 0x16, 0x31, 0xcd, 0x01, 0x4b, 0x57, 0xa5, + 0x5d, 0x96, 0x2f, 0x08, 0xcf, 0x9f, 0x1c, 0x57, 0x2f, 0xd7, 0xb3, 0x04, 0x30, 0xbb, 0x1d, 0xf9, + 0x08, 0xa6, 0xbd, 0xb8, 0x6b, 0x5f, 0x79, 0x6e, 0x84, 0xe7, 0xeb, 0x44, 0x90, 0x10, 0xe4, 0x40, + 0x12, 0x24, 0x4c, 0xea, 0x22, 0x6f, 0x40, 0xd9, 0x55, 0x96, 0xca, 0xe2, 0xbd, 0xca, 0x15, 0x39, + 0x06, 0x79, 0xa3, 0x6e, 0x47, 0x64, 0x8c, 0xcb, 0x90, 0xfb, 0x50, 0xf6, 0x9d, 0x2e, 0xf3, 0x54, + 0xaa, 0xbd, 0x22, 0x17, 0x7f, 0x31, 0x6b, 0x27, 0xef, 0x68, 0xb1, 0x28, 0x91, 0x1b, 0xd1, 0x38, + 0xc6, 0x71, 0x44, 0x84, 0x18, 0xd6, 0x4c, 0x7a, 0x32, 0x1c, 0x7e, 0x3e, 0x19, 0x21, 0x36, 0xe3, + 0x4c, 0x4c, 0xca, 0x8a, 0x98, 0xcf, 0xf5, 0x2c, 0xc7, 0xb3, 0xfc, 0xa3, 0xe5, 0x2e, 0xe5, 0x5c, + 0x02, 0x2c, 0x48, 0x00, 0x1d, 0xf3, 0x6d, 0xa7, 0x05, 0x70, 0xb0, 0x8d, 0x70, 0xd5, 0x42, 0x62, + 0xe5, 0x85, 0xc8, 0x55, 0x0b, 0xdb, 0xa2, 0xe6, 0x9e, 0x52, 0xcc, 0x73, 0x75, 0x98, 0x62, 0x1e, + 0xd2, 0x82, 0xab, 0xb4, 0xef, 0x3b, 0x3d, 0x41, 0x48, 0x36, 0xd9, 0x71, 0xf6, 0x99, 0x5d, 0xb9, + 0x26, 0xef, 0xaa, 0x6b, 0x27, 0xc7, 0xd5, 0xab, 0xf5, 0x2f, 0x90, 0xc3, 0x2f, 0x44, 0x21, 0x3d, + 0x28, 0x32, 0x55, 0x90, 0x54, 0xf9, 0xca, 0x08, 0x97, 0x44, 0xb2, 0xaa, 0x29, 0x98, 0xa0, 0x90, + 0x86, 0x5a, 0x05, 0xd9, 0x81, 0x72, 0xc7, 0xe1, 0x7e, 0xbd, 0x6b, 0x51, 0xce, 0x78, 0xe5, 0x45, + 0xb9, 0x4f, 0x32, 0xef, 0xb7, 0x5b, 0xa1, 0x58, 0xb4, 0x4d, 0x6e, 0x45, 0x2d, 0x31, 0x0e, 0x43, + 0x98, 0x0c, 0x8e, 0xfa, 0x72, 0xd5, 0x1c, 0xdb, 0x67, 0x1f, 0xfa, 0x95, 0x45, 0x39, 0x96, 0x57, + 0xb2, 0x90, 0xb7, 0x9d, 0x56, 0x33, 0x29, 0x1d, 0x9c, 0xf2, 0x14, 0x11, 0xd3, 0x98, 0xe4, 0x4d, + 0x98, 0x72, 0x9d, 0x56, 0xd3, 0x65, 0xe6, 0x36, 0xf5, 0xcd, 0x4e, 0xa5, 0x9a, 0x7c, 0x28, 0xd8, + 0x8e, 0xf1, 0x30, 0x21, 0xb9, 0xf0, 0x1e, 0x5c, 0x1c, 0xf0, 0xa7, 0x9e, 0xe8, 0x55, 0xe5, 0x4f, + 0x73, 0x10, 0x77, 0x67, 0xcf, 0xdd, 0xef, 0x5f, 0x87, 0x8b, 0xaa, 0x24, 0x58, 0x5c, 0xb6, 0xdd, + 0xbe, 0x1f, 0x46, 0xc9, 0xb1, 0xfc, 0x08, 0xa6, 0x05, 0x70, 0xb0, 0x8d, 0xf1, 0x67, 0x39, 0x98, + 0x4e, 0x98, 0xef, 0x73, 0x8f, 0x08, 0xd7, 0x80, 0xf4, 0x2c, 0xcf, 0x73, 0xbc, 0xe0, 0x0e, 0xdc, + 0x14, 0x7b, 0x99, 0xab, 0xcf, 0x09, 0x64, 0x41, 0xc6, 0xe6, 0x00, 0x17, 0x33, 0x5a, 0x18, 0x7f, + 0x99, 0x83, 0x28, 0x01, 0xa7, 0xab, 0x90, 0x72, 0xa7, 0x56, 0x21, 0xbd, 0x0a, 0xc5, 0x47, 0xdc, + 0xb1, 0xb7, 0xa3, 0x5a, 0x25, 0x3d, 0xa1, 0xb7, 0x9b, 0xf7, 0xb6, 0xa4, 0xa4, 0x96, 0x90, 0xd2, + 0x1f, 0xac, 0x59, 0x5d, 0x7f, 0xb0, 0xa2, 0xe7, 0xf6, 0x2f, 0x06, 0x74, 0xd4, 0x12, 0x64, 0x09, + 0x4a, 0x3a, 0xe7, 0xab, 0x42, 0x49, 0x3d, 0x09, 0x3a, 0xe1, 0x89, 0x91, 0x8c, 0xf1, 0xa3, 0x31, + 0x28, 0xfe, 0x7f, 0xfb, 0x36, 0x62, 0x3f, 0xf5, 0x6d, 0xc4, 0xf2, 0x88, 0x69, 0xe4, 0x2f, 0xfa, + 0x2e, 0xc2, 0xf8, 0x34, 0x07, 0x53, 0xcf, 0xf0, 0xf3, 0x84, 0xdd, 0xe4, 0xe7, 0x09, 0xef, 0x8c, + 0x34, 0xb4, 0x53, 0x3e, 0x4d, 0xf8, 0x9b, 0xf9, 0x68, 0x48, 0x62, 0x5a, 0x89, 0x0d, 0xa5, 0xf0, + 0x80, 0x87, 0xa9, 0xf9, 0x77, 0x46, 0x0a, 0x0a, 0xa3, 0x4d, 0x19, 0x52, 0x38, 0x46, 0x2a, 0xc8, + 0x0d, 0x00, 0x26, 0x2c, 0x5b, 0x90, 0xb7, 0x1b, 0x4b, 0x66, 0xae, 0x57, 0x35, 0x07, 0x63, 0x52, + 0xcf, 0x3e, 0xe1, 0x90, 0x7d, 0x45, 0x4f, 0x3c, 0x95, 0x2b, 0xfa, 0xea, 0xb9, 0x5f, 0xd1, 0x2f, + 0x3e, 0xfd, 0x2b, 0x3a, 0x16, 0x90, 0xe4, 0x47, 0x08, 0x48, 0x3e, 0x82, 0x4b, 0xc1, 0x9f, 0xcb, + 0x5d, 0x6a, 0xf5, 0xf4, 0x7e, 0x51, 0xe5, 0x44, 0x5f, 0xcd, 0xbc, 0x98, 0x99, 0xc7, 0x2d, 0xee, + 0x33, 0xdb, 0x7f, 0x10, 0xb5, 0x8c, 0xde, 0xa2, 0x1f, 0x64, 0xc0, 0x61, 0xa6, 0x92, 0xb4, 0x07, + 0x3b, 0x79, 0x06, 0x0f, 0xf6, 0x87, 0x39, 0xb8, 0x4c, 0xb3, 0xbe, 0x68, 0x54, 0x79, 0x8c, 0xdb, + 0x23, 0xc5, 0x13, 0x09, 0x44, 0x15, 0x0f, 0x64, 0xb1, 0x30, 0xbb, 0x0f, 0xe4, 0xe5, 0x28, 0x24, + 0x2d, 0xc9, 0x4d, 0x95, 0x1d, 0x4c, 0x7e, 0x3f, 0x9d, 0x0a, 0x02, 0x39, 0xdb, 0xcd, 0x91, 0x0d, + 0xf6, 0x39, 0xa4, 0x83, 0xca, 0x23, 0xa4, 0x83, 0x52, 0xe1, 0xc5, 0xd4, 0x39, 0x85, 0x17, 0x36, + 0xcc, 0x59, 0x3d, 0xda, 0x66, 0xdb, 0xfd, 0x6e, 0x37, 0xc8, 0x7e, 0xf3, 0xca, 0xb4, 0xc4, 0xce, + 0xac, 0x01, 0x15, 0xe1, 0x5e, 0x37, 0xb8, 0x1f, 0xf5, 0x83, 0x50, 0xf4, 0x60, 0xb3, 0x91, 0x42, + 0xc2, 0x01, 0x6c, 0xb1, 0x2d, 0x85, 0xdb, 0xba, 0xc5, 0x7c, 0x31, 0xdb, 0x32, 0x53, 0xa2, 0xbe, + 0xdc, 0xbe, 0x15, 0x91, 0x31, 0x2e, 0x43, 0xee, 0x40, 0xa9, 0x65, 0x73, 0xf5, 0x31, 0xd6, 0xac, + 0xb4, 0x52, 0xaf, 0x09, 0xdb, 0xb6, 0xb2, 0xd5, 0xd4, 0x1f, 0x60, 0x5d, 0x1d, 0xfc, 0xaf, 0x29, + 0x6a, 0x9a, 0x8f, 0x51, 0x7b, 0xb2, 0x29, 0xc1, 0x54, 0x41, 0x74, 0x90, 0xda, 0xb8, 0x76, 0x8a, + 0x87, 0xbc, 0xb2, 0x15, 0xd6, 0x6f, 0x4f, 0x2b, 0x75, 0xaa, 0xcc, 0x39, 0x42, 0x20, 0xaf, 0x40, + 0xc1, 0xb1, 0x57, 0x3f, 0xb4, 0xfc, 0xca, 0xc5, 0x64, 0xf6, 0xfb, 0x9e, 0xa4, 0xa2, 0xe2, 0x92, + 0xfb, 0x70, 0xc5, 0xf7, 0xbb, 0x2a, 0xb4, 0xad, 0xef, 0xf9, 0xcc, 0x0b, 0x8b, 0x1e, 0x64, 0xe1, + 0x4a, 0x3e, 0xf8, 0x6a, 0x6b, 0x67, 0xe7, 0x6e, 0x96, 0x08, 0x9e, 0xd6, 0xf6, 0xf4, 0xa0, 0x7b, + 0x7e, 0xc8, 0xa0, 0x3b, 0x1e, 0xe7, 0x5d, 0xfa, 0xc2, 0x38, 0x6f, 0x20, 0x2e, 0xbd, 0xfc, 0x04, + 0x71, 0xe9, 0xfb, 0xb2, 0xb4, 0x63, 0x7d, 0x59, 0xc5, 0xf4, 0x6f, 0x0d, 0x97, 0x4a, 0x14, 0x08, + 0xc1, 0x0b, 0x9f, 0xfc, 0x13, 0x03, 0x4c, 0xb2, 0x0d, 0x97, 0x5c, 0xa7, 0x35, 0x10, 0xd6, 0xca, + 0x20, 0x3e, 0x56, 0xd7, 0xb3, 0x9d, 0x21, 0x83, 0x99, 0x2d, 0xa5, 0x2d, 0x8d, 0xe8, 0x95, 0x8a, + 0x9c, 0x98, 0xc0, 0x96, 0x46, 0x64, 0x8c, 0xcb, 0xa4, 0xa3, 0xbc, 0xe7, 0x9f, 0x5a, 0x94, 0xb7, + 0xf0, 0x0c, 0xa2, 0xbc, 0x17, 0x9e, 0x5d, 0x94, 0xf7, 0x59, 0x11, 0x66, 0x52, 0xdf, 0x20, 0xea, + 0xaa, 0xaa, 0xdc, 0x59, 0xab, 0xaa, 0x12, 0x65, 0x4f, 0x63, 0x4f, 0xb5, 0xec, 0x69, 0xfc, 0xdc, + 0xcb, 0x9e, 0x62, 0xe5, 0x5d, 0x13, 0x5f, 0x52, 0xde, 0x55, 0x87, 0x59, 0xd3, 0xe9, 0xb9, 0xf2, + 0x0b, 0x0a, 0x55, 0xe4, 0x13, 0x3c, 0xc4, 0xeb, 0xa7, 0xce, 0xe5, 0x24, 0x1b, 0xd3, 0xf2, 0x84, + 0x43, 0xde, 0x96, 0x0d, 0x0b, 0x23, 0x94, 0x86, 0x26, 0x17, 0x4c, 0x5e, 0x94, 0xaa, 0x3a, 0x53, + 0xbb, 0xe9, 0x81, 0xfa, 0x40, 0x97, 0x70, 0x34, 0x66, 0x93, 0xe5, 0x78, 0xbc, 0x52, 0x92, 0xfa, + 0x7f, 0xe9, 0x3c, 0xf4, 0x27, 0x6b, 0xff, 0x54, 0x4f, 0xa2, 0xd7, 0xdf, 0x24, 0x17, 0xd3, 0x3d, + 0x21, 0x1e, 0x3c, 0xe7, 0x66, 0xb9, 0x61, 0x5c, 0xbd, 0x2a, 0x7d, 0x91, 0x33, 0xb8, 0xa8, 0xb4, + 0x3c, 0x97, 0xe9, 0xc8, 0x71, 0x3c, 0x05, 0x39, 0x5e, 0x3b, 0x56, 0x7c, 0x5a, 0xb5, 0x63, 0x0b, + 0x47, 0x41, 0x59, 0xea, 0xa9, 0x15, 0xad, 0xf7, 0x93, 0x55, 0xe6, 0xef, 0x0d, 0xf9, 0x9f, 0x15, + 0x85, 0x85, 0xaf, 0xf1, 0x6a, 0xda, 0x5f, 0xcf, 0xc1, 0xa5, 0xac, 0x65, 0xc9, 0xe8, 0x45, 0x33, + 0xd9, 0x8b, 0xd1, 0xc2, 0xb5, 0xb8, 0x69, 0xf9, 0xb7, 0x7c, 0x2c, 0x38, 0xf4, 0x99, 0xfb, 0xd3, + 0x97, 0xe3, 0xa1, 0x5e, 0x8e, 0x13, 0x5f, 0x0a, 0xe7, 0x9f, 0xe1, 0x97, 0xc2, 0x85, 0x21, 0xbe, + 0x14, 0x9e, 0x7c, 0x96, 0x5f, 0x0a, 0x17, 0xcf, 0xf8, 0xa5, 0x70, 0xe9, 0xe9, 0x7f, 0x29, 0xfc, + 0x79, 0x0e, 0xe6, 0xd2, 0x85, 0xcb, 0xcf, 0x20, 0x49, 0xb6, 0x9f, 0x48, 0x92, 0x6d, 0x8c, 0x64, + 0xcc, 0xc3, 0x6e, 0x9f, 0x96, 0x2c, 0x33, 0x7e, 0x9c, 0x83, 0x81, 0xe2, 0xec, 0x67, 0x90, 0xc7, + 0x7a, 0x94, 0xcc, 0x63, 0xad, 0x9e, 0xcb, 0x20, 0x4f, 0xc9, 0x67, 0xfd, 0x77, 0xc6, 0x10, 0xff, + 0x57, 0xf2, 0x5a, 0x09, 0xd3, 0x36, 0xf6, 0xf4, 0x4d, 0x5b, 0xa3, 0xf6, 0xc9, 0xe7, 0x8b, 0x17, + 0x3e, 0xfd, 0x7c, 0xf1, 0xc2, 0x67, 0x9f, 0x2f, 0x5e, 0xf8, 0xf8, 0x64, 0x31, 0xf7, 0xc9, 0xc9, + 0x62, 0xee, 0xd3, 0x93, 0xc5, 0xdc, 0x67, 0x27, 0x8b, 0xb9, 0x1f, 0x9f, 0x2c, 0xe6, 0x7e, 0xef, + 0x5f, 0x16, 0x2f, 0xfc, 0x72, 0x31, 0xc4, 0xfd, 0x9f, 0x00, 0x00, 0x00, 0xff, 0xff, 0xde, 0x00, + 0x4c, 0xbf, 0x45, 0x51, 0x00, 0x00, } func (m *ArchiveStrategy) Marshal() (dAtA []byte, err error) { @@ -2410,16 +2406,6 @@ func (m *CronWorkflowOptions) MarshalToSizedBuffer(dAtA []byte) (int, error) { _ = i var l int _ = l - if m.FailedJobsHistoryLimit != nil { - i = encodeVarintGenerated(dAtA, i, uint64(*m.FailedJobsHistoryLimit)) - i-- - dAtA[i] = 0x40 - } - if m.SuccessfulJobsHistoryLimit != nil { - i = encodeVarintGenerated(dAtA, i, uint64(*m.SuccessfulJobsHistoryLimit)) - i-- - dAtA[i] = 0x38 - } if m.StartingDeadlineSeconds != nil { i = encodeVarintGenerated(dAtA, i, uint64(*m.StartingDeadlineSeconds)) i-- @@ -5549,12 +5535,6 @@ func (m *CronWorkflowOptions) Size() (n int) { if m.StartingDeadlineSeconds != nil { n += 1 + sovGenerated(uint64(*m.StartingDeadlineSeconds)) } - if m.SuccessfulJobsHistoryLimit != nil { - n += 1 + sovGenerated(uint64(*m.SuccessfulJobsHistoryLimit)) - } - if m.FailedJobsHistoryLimit != nil { - n += 1 + sovGenerated(uint64(*m.FailedJobsHistoryLimit)) - } return n } @@ -6748,8 +6728,6 @@ func (this *CronWorkflowOptions) String() string { `ConcurrencyPolicy:` + fmt.Sprintf("%v", this.ConcurrencyPolicy) + `,`, `Suspend:` + fmt.Sprintf("%v", this.Suspend) + `,`, `StartingDeadlineSeconds:` + valueToStringGenerated(this.StartingDeadlineSeconds) + `,`, - `SuccessfulJobsHistoryLimit:` + valueToStringGenerated(this.SuccessfulJobsHistoryLimit) + `,`, - `FailedJobsHistoryLimit:` + valueToStringGenerated(this.FailedJobsHistoryLimit) + `,`, `}`, }, "") return s @@ -9258,46 +9236,6 @@ func (m *CronWorkflowOptions) Unmarshal(dAtA []byte) error { } } m.StartingDeadlineSeconds = &v - case 7: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field SuccessfulJobsHistoryLimit", wireType) - } - var v int32 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowGenerated - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - v |= int32(b&0x7F) << shift - if b < 0x80 { - break - } - } - m.SuccessfulJobsHistoryLimit = &v - case 8: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field FailedJobsHistoryLimit", wireType) - } - var v int32 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowGenerated - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - v |= int32(b&0x7F) << shift - if b < 0x80 { - break - } - } - m.FailedJobsHistoryLimit = &v default: iNdEx = preIndex skippy, err := skipGenerated(dAtA[iNdEx:]) diff --git a/pkg/apis/workflow/v1alpha1/generated.proto b/pkg/apis/workflow/v1alpha1/generated.proto index a2bd5796dd5a..f44985f692dd 100644 --- a/pkg/apis/workflow/v1alpha1/generated.proto +++ b/pkg/apis/workflow/v1alpha1/generated.proto @@ -164,12 +164,6 @@ message CronWorkflowOptions { // StartingDeadlineSeconds is the K8s-style deadline that will limit the time a CronWorkflow will be run after its // original scheduled time if it is missed. optional int64 startingDeadlineSeconds = 6; - - // SuccessfulJobsHistoryLimit is the K8s-style number of successful jobs that will be persisted - optional int32 successfulJobsHistoryLimit = 7; - - // FailedJobsHistoryLimit is the K8s-style number of failed jobs that will be persisted - optional int32 failedJobsHistoryLimit = 8; } message CronWorkflowStatus { diff --git a/pkg/apis/workflow/v1alpha1/openapi_generated.go b/pkg/apis/workflow/v1alpha1/openapi_generated.go index ffa295d824a5..f2b1a461eb7b 100644 --- a/pkg/apis/workflow/v1alpha1/openapi_generated.go +++ b/pkg/apis/workflow/v1alpha1/openapi_generated.go @@ -567,20 +567,6 @@ func schema_pkg_apis_workflow_v1alpha1_CronWorkflowOptions(ref common.ReferenceC Format: "int64", }, }, - "successfulJobsHistoryLimit": { - SchemaProps: spec.SchemaProps{ - Description: "SuccessfulJobsHistoryLimit is the K8s-style number of successful jobs that will be persisted", - Type: []string{"integer"}, - Format: "int32", - }, - }, - "failedJobsHistoryLimit": { - SchemaProps: spec.SchemaProps{ - Description: "FailedJobsHistoryLimit is the K8s-style number of failed jobs that will be persisted", - Type: []string{"integer"}, - Format: "int32", - }, - }, }, Required: []string{"schedule", "runtimeNamespace", "runtimeGenerateName"}, }, diff --git a/pkg/apis/workflow/v1alpha1/zz_generated.deepcopy.go b/pkg/apis/workflow/v1alpha1/zz_generated.deepcopy.go index 8597119a2e8a..7282c581d7fe 100644 --- a/pkg/apis/workflow/v1alpha1/zz_generated.deepcopy.go +++ b/pkg/apis/workflow/v1alpha1/zz_generated.deepcopy.go @@ -290,16 +290,6 @@ func (in *CronWorkflowOptions) DeepCopyInto(out *CronWorkflowOptions) { *out = new(int64) **out = **in } - if in.SuccessfulJobsHistoryLimit != nil { - in, out := &in.SuccessfulJobsHistoryLimit, &out.SuccessfulJobsHistoryLimit - *out = new(int32) - **out = **in - } - if in.FailedJobsHistoryLimit != nil { - in, out := &in.FailedJobsHistoryLimit, &out.FailedJobsHistoryLimit - *out = new(int32) - **out = **in - } return } diff --git a/workflow/controller/controller.go b/workflow/controller/controller.go index bc051ad47876..3d850ac46025 100644 --- a/workflow/controller/controller.go +++ b/workflow/controller/controller.go @@ -418,6 +418,7 @@ func (wfc *WorkflowController) addWorkflowInformerHandler() { wfc.wfInformer.AddEventHandler( cache.ResourceEventHandlerFuncs{ AddFunc: func(obj interface{}) { + log.Infof("SIMON GOOD FOUND A WF") key, err := cache.MetaNamespaceKeyFunc(obj) if err == nil { wfc.wfQueue.Add(key) @@ -426,6 +427,7 @@ func (wfc *WorkflowController) addWorkflowInformerHandler() { } }, UpdateFunc: func(old, new interface{}) { + log.Infof("SIMON GOOD FOUND A WF") key, err := cache.MetaNamespaceKeyFunc(new) if err == nil { wfc.wfQueue.Add(key) @@ -434,6 +436,7 @@ func (wfc *WorkflowController) addWorkflowInformerHandler() { } }, DeleteFunc: func(obj interface{}) { + log.Infof("SIMON GOOD FOUND A WF") // IndexerInformer uses a delta queue, therefore for deletes we have to use this // key function. key, err := cache.DeletionHandlingMetaNamespaceKeyFunc(obj) diff --git a/workflow/cron/controller.go b/workflow/cron/controller.go index b16cb7a721f4..9e44b10d29ce 100644 --- a/workflow/cron/controller.go +++ b/workflow/cron/controller.go @@ -7,9 +7,15 @@ import ( "github.com/argoproj/argo/pkg/client/clientset/versioned" "github.com/argoproj/argo/pkg/client/informers/externalversions" extv1alpha1 "github.com/argoproj/argo/pkg/client/informers/externalversions/workflow/v1alpha1" + "github.com/argoproj/argo/workflow/common" + "github.com/argoproj/argo/workflow/util" "github.com/robfig/cron" log "github.com/sirupsen/logrus" - "k8s.io/client-go/kubernetes" + v1 "k8s.io/apimachinery/pkg/apis/meta/v1" + "k8s.io/apimachinery/pkg/fields" + "k8s.io/apimachinery/pkg/labels" + "k8s.io/apimachinery/pkg/selection" + "k8s.io/client-go/rest" "k8s.io/client-go/tools/cache" "sync" "time" @@ -20,9 +26,10 @@ type Controller struct { namespace string cron *cron.Cron nameEntryIDMap map[string]cron.EntryID - kubeClientset kubernetes.Interface wfClientset versioned.Interface + wfInformer cache.SharedIndexInformer wfCronInformer extv1alpha1.CronWorkflowInformer + restConfig *rest.Config cronLock sync.Mutex } @@ -31,15 +38,15 @@ const ( ) func NewCronController( - kubeclientset kubernetes.Interface, wfclientset versioned.Interface, + restConfig *rest.Config, namespace string, ) *Controller { return &Controller{ - kubeClientset: kubeclientset, wfClientset: wfclientset, namespace: namespace, cron: cron.New(), + restConfig: restConfig, nameEntryIDMap: make(map[string]cron.EntryID), } } @@ -50,6 +57,9 @@ func (cc *Controller) Run(ctx context.Context) { cc.wfCronInformer = cc.newCronWorkflowInformer() cc.addCronWorkflowInformerHandler() + cc.wfInformer = util.NewWorkflowInformer(cc.restConfig, "", cronWorkflowResyncPeriod, wfInformerListOptionsFunc) + cc.addWorkflowInformerHandler() + cc.cron.Start() defer cc.cron.Stop() @@ -166,6 +176,24 @@ func (cc *Controller) addCronWorkflowInformerHandler() { }) } +func (cc *Controller) addWorkflowInformerHandler() { + log.Infof("SIMON adding informer") + cc.wfInformer.AddEventHandler( + cache.ResourceEventHandlerFuncs{ + AddFunc: func(obj interface{}) { + log.Infof("SIMON FOUND A WF: %s", obj.(v1alpha1.Workflow).Name) + }, + UpdateFunc: func(old, new interface{}) { + log.Infof("SIMON FOUND U WF: %s", new.(v1alpha1.Workflow).Name) + + }, + DeleteFunc: func(obj interface{}) { + log.Infof("SIMON FOUND D WF: %s", obj.(v1alpha1.Workflow).Name) + }, + }, + ) +} + func (cc *Controller) newCronWorkflowInformer() extv1alpha1.CronWorkflowInformer { var informerFactory externalversions.SharedInformerFactory informerFactory = externalversions.NewSharedInformerFactory(cc.wfClientset, cronWorkflowResyncPeriod) @@ -179,3 +207,13 @@ func convertToWorkflow(obj interface{}) (*v1alpha1.CronWorkflow, error) { } return cronWf, nil } + +func wfInformerListOptionsFunc(options *v1.ListOptions) { + options.FieldSelector = fields.Everything().String() + incompleteReq, err := labels.NewRequirement(common.LabelKeyCompleted, selection.NotIn, []string{"true"}) + if err != nil { + panic(err) + } + labelSelector := labels.NewSelector().Add(*incompleteReq) + options.LabelSelector = labelSelector.String() +} diff --git a/workflow/cron/cron_workflow_wrapper.go b/workflow/cron/cron_workflow_wrapper.go index 452cb1659919..3c8a883258d3 100644 --- a/workflow/cron/cron_workflow_wrapper.go +++ b/workflow/cron/cron_workflow_wrapper.go @@ -21,7 +21,7 @@ type CronWorkflowWrapper struct { name string cronWf *v1alpha1.CronWorkflow wfClientset versioned.Interface - wfClient typed.WorkflowInterface + wfClient typed.WorkflowInterface cronWfIf typed.CronWorkflowInterface } @@ -31,7 +31,7 @@ func NewCronWorkflowWrapper(cronWorkflow *v1alpha1.CronWorkflow, wfClientset ver name: cronWorkflow.ObjectMeta.Name, cronWf: cronWorkflow, wfClientset: wfClientset, - wfClient: wfClientset.ArgoprojV1alpha1().Workflows(runtimeNamespace), + wfClient: wfClientset.ArgoprojV1alpha1().Workflows(runtimeNamespace), cronWfIf: cronWfIf, }, nil } diff --git a/workflow/util/util.go b/workflow/util/util.go index 5c3b10c8ec31..f1ac0ca0340a 100644 --- a/workflow/util/util.go +++ b/workflow/util/util.go @@ -56,6 +56,8 @@ func NewWorkflowInformer(cfg *rest.Config, ns string, resyncPeriod time.Duration if err != nil { panic(err) } + + log.Infof("SIMON creating informer") resource := schema.GroupVersionResource{ Group: workflow.Group, Version: "v1alpha1", From 3af4e0e4d7eda445a30f04552b686ae82292862b Mon Sep 17 00:00:00 2001 From: Simon Behar Date: Thu, 14 Nov 2019 11:31:52 -0800 Subject: [PATCH 15/44] WIP: Informer working --- workflow/controller/controller.go | 3 --- workflow/cron/controller.go | 16 +++++++++++----- workflow/util/util.go | 1 - 3 files changed, 11 insertions(+), 9 deletions(-) diff --git a/workflow/controller/controller.go b/workflow/controller/controller.go index 3d850ac46025..bc051ad47876 100644 --- a/workflow/controller/controller.go +++ b/workflow/controller/controller.go @@ -418,7 +418,6 @@ func (wfc *WorkflowController) addWorkflowInformerHandler() { wfc.wfInformer.AddEventHandler( cache.ResourceEventHandlerFuncs{ AddFunc: func(obj interface{}) { - log.Infof("SIMON GOOD FOUND A WF") key, err := cache.MetaNamespaceKeyFunc(obj) if err == nil { wfc.wfQueue.Add(key) @@ -427,7 +426,6 @@ func (wfc *WorkflowController) addWorkflowInformerHandler() { } }, UpdateFunc: func(old, new interface{}) { - log.Infof("SIMON GOOD FOUND A WF") key, err := cache.MetaNamespaceKeyFunc(new) if err == nil { wfc.wfQueue.Add(key) @@ -436,7 +434,6 @@ func (wfc *WorkflowController) addWorkflowInformerHandler() { } }, DeleteFunc: func(obj interface{}) { - log.Infof("SIMON GOOD FOUND A WF") // IndexerInformer uses a delta queue, therefore for deletes we have to use this // key function. key, err := cache.DeletionHandlingMetaNamespaceKeyFunc(obj) diff --git a/workflow/cron/controller.go b/workflow/cron/controller.go index 9e44b10d29ce..c624a656b3ee 100644 --- a/workflow/cron/controller.go +++ b/workflow/cron/controller.go @@ -12,6 +12,7 @@ import ( "github.com/robfig/cron" log "github.com/sirupsen/logrus" v1 "k8s.io/apimachinery/pkg/apis/meta/v1" + "k8s.io/apimachinery/pkg/apis/meta/v1/unstructured" "k8s.io/apimachinery/pkg/fields" "k8s.io/apimachinery/pkg/labels" "k8s.io/apimachinery/pkg/selection" @@ -58,12 +59,14 @@ func (cc *Controller) Run(ctx context.Context) { cc.addCronWorkflowInformerHandler() cc.wfInformer = util.NewWorkflowInformer(cc.restConfig, "", cronWorkflowResyncPeriod, wfInformerListOptionsFunc) + log.Infof("SIMON CRON WFINF: %v", cc.wfInformer) cc.addWorkflowInformerHandler() cc.cron.Start() defer cc.cron.Stop() go cc.wfCronInformer.Informer().Run(ctx.Done()) + go cc.wfInformer.Run(ctx.Done()) <-ctx.Done() } @@ -181,14 +184,13 @@ func (cc *Controller) addWorkflowInformerHandler() { cc.wfInformer.AddEventHandler( cache.ResourceEventHandlerFuncs{ AddFunc: func(obj interface{}) { - log.Infof("SIMON FOUND A WF: %s", obj.(v1alpha1.Workflow).Name) + log.Infof("SIMON FOUND A WF: %v", obj.(*unstructured.Unstructured)) }, UpdateFunc: func(old, new interface{}) { - log.Infof("SIMON FOUND U WF: %s", new.(v1alpha1.Workflow).Name) - + log.Infof("SIMON FOUND U WF: %v", new.(*unstructured.Unstructured)) }, DeleteFunc: func(obj interface{}) { - log.Infof("SIMON FOUND D WF: %s", obj.(v1alpha1.Workflow).Name) + log.Infof("SIMON FOUND D WF: %v", obj.(*unstructured.Unstructured)) }, }, ) @@ -214,6 +216,10 @@ func wfInformerListOptionsFunc(options *v1.ListOptions) { if err != nil { panic(err) } - labelSelector := labels.NewSelector().Add(*incompleteReq) + isCronWorkflowChildReq, err := labels.NewRequirement(common.LabelCronWorkflowParent, selection.Exists, []string{}) + if err != nil { + panic(err) + } + labelSelector := labels.NewSelector().Add(*incompleteReq, *isCronWorkflowChildReq) options.LabelSelector = labelSelector.String() } diff --git a/workflow/util/util.go b/workflow/util/util.go index f1ac0ca0340a..fbf0d2921e88 100644 --- a/workflow/util/util.go +++ b/workflow/util/util.go @@ -57,7 +57,6 @@ func NewWorkflowInformer(cfg *rest.Config, ns string, resyncPeriod time.Duration panic(err) } - log.Infof("SIMON creating informer") resource := schema.GroupVersionResource{ Group: workflow.Group, Version: "v1alpha1", From 2b65ae984248a76948690d672b73e19e5cb03bf6 Mon Sep 17 00:00:00 2001 From: Simon Behar Date: Thu, 14 Nov 2019 14:30:17 -0800 Subject: [PATCH 16/44] WIP: Major refactor, should be way cleaner now --- workflow/cron/controller.go | 190 +++++++++--------- .../{cron_workflow_wrapper.go => operator.go} | 91 ++++++--- 2 files changed, 155 insertions(+), 126 deletions(-) rename workflow/cron/{cron_workflow_wrapper.go => operator.go} (52%) diff --git a/workflow/cron/controller.go b/workflow/cron/controller.go index c624a656b3ee..1faa116977d2 100644 --- a/workflow/cron/controller.go +++ b/workflow/cron/controller.go @@ -2,7 +2,6 @@ package cron import ( "context" - "fmt" "github.com/argoproj/argo/pkg/apis/workflow/v1alpha1" "github.com/argoproj/argo/pkg/client/clientset/versioned" "github.com/argoproj/argo/pkg/client/informers/externalversions" @@ -15,9 +14,13 @@ import ( "k8s.io/apimachinery/pkg/apis/meta/v1/unstructured" "k8s.io/apimachinery/pkg/fields" "k8s.io/apimachinery/pkg/labels" + "k8s.io/apimachinery/pkg/runtime" "k8s.io/apimachinery/pkg/selection" + "k8s.io/apimachinery/pkg/util/wait" "k8s.io/client-go/rest" "k8s.io/client-go/tools/cache" + "k8s.io/client-go/util/workqueue" + "math/rand" "sync" "time" ) @@ -29,7 +32,9 @@ type Controller struct { nameEntryIDMap map[string]cron.EntryID wfClientset versioned.Interface wfInformer cache.SharedIndexInformer - wfCronInformer extv1alpha1.CronWorkflowInformer + wfQueue workqueue.RateLimitingInterface + cronWfInformer extv1alpha1.CronWorkflowInformer + cronWfQueue workqueue.RateLimitingInterface restConfig *rest.Config cronLock sync.Mutex } @@ -49,13 +54,16 @@ func NewCronController( cron: cron.New(), restConfig: restConfig, nameEntryIDMap: make(map[string]cron.EntryID), + wfQueue: workqueue.NewRateLimitingQueue(workqueue.DefaultControllerRateLimiter()), + cronWfQueue: workqueue.NewRateLimitingQueue(workqueue.DefaultControllerRateLimiter()), } } func (cc *Controller) Run(ctx context.Context) { + defer cc.cronWfQueue.ShutDown() log.Infof("Starting CronWorkflow controller") - cc.wfCronInformer = cc.newCronWorkflowInformer() + cc.cronWfInformer = cc.newCronWorkflowInformer() cc.addCronWorkflowInformerHandler() cc.wfInformer = util.NewWorkflowInformer(cc.restConfig, "", cronWorkflowResyncPeriod, wfInformerListOptionsFunc) @@ -65,149 +73,139 @@ func (cc *Controller) Run(ctx context.Context) { cc.cron.Start() defer cc.cron.Stop() - go cc.wfCronInformer.Informer().Run(ctx.Done()) + go cc.cronWfInformer.Informer().Run(ctx.Done()) go cc.wfInformer.Run(ctx.Done()) + for i := 0; i < 8; i++ { + go wait.Until(cc.runCronWorker, time.Second, ctx.Done()) + } + <-ctx.Done() } -func (cc *Controller) startCronWorkflow(cronWorkflow *v1alpha1.CronWorkflow) error { - cc.cronLock.Lock() - defer cc.cronLock.Unlock() - - log.Infof("Parsing CronWorkflow %s", cronWorkflow.Name) +func (cc *Controller) runCronWorker() { + for cc.processNextCronItem() { + } +} - if entryId, ok := cc.nameEntryIDMap[cronWorkflow.Name]; ok { - // The job is currently scheduled, remove it and re add it. - cc.cron.Remove(entryId) - delete(cc.nameEntryIDMap, cronWorkflow.Name) +func (cc *Controller) processNextCronItem() bool { + key, quit := cc.cronWfQueue.Get() + if quit { + return false } + defer cc.cronWfQueue.Done(key) + log.Infof("Processing %s", key) - cronWfIf := cc.wfClientset.ArgoprojV1alpha1().CronWorkflows(cc.namespace) - cronWorkflowJob, err := NewCronWorkflowWrapper(cronWorkflow, cc.wfClientset, cronWfIf) + obj, exists, err := cc.cronWfInformer.Informer().GetIndexer().GetByKey(key.(string)) if err != nil { - return err + log.Errorf("Failed to get CronWorkflow '%s' from informer index: %+v", key, err) + return true } - cronSchedule, err := cron.ParseStandard(cronWorkflow.Options.Schedule) - if err != nil { - return fmt.Errorf("could not parse schedule '%s': %w", cronWorkflow.Options.Schedule, err) + if !exists { + if entryId, ok := cc.nameEntryIDMap[key.(string)]; ok { + log.Infof("Deleting '%s'", key) + cc.cron.Remove(entryId) + delete(cc.nameEntryIDMap, key.(string)) + } + return true } - runWorkflowIfMissed(cronWorkflow, cronSchedule, cronWorkflowJob) - - entryId := cc.cron.Schedule(cronSchedule, cronWorkflowJob) - cc.nameEntryIDMap[cronWorkflow.Name] = entryId + // The workflow informer receives unstructured objects to deal with the possibility of invalid + // workflow manifests that are unable to unmarshal to workflow objects + cronWf, ok := obj.(*v1alpha1.CronWorkflow) + if !ok { + log.Warnf("Key '%s' in index is not a CronWorkflow", key) + return true + } - log.Infof("CronWorkflow %s added", cronWorkflow.Name) - return nil -} + cronWfIf := cc.wfClientset.ArgoprojV1alpha1().CronWorkflows(cc.namespace) + cronWorkflowOperationCtx, err := newCronWfOperationCtx(cronWf, cc.wfClientset, cronWfIf) + if err != nil { + log.Error(err) + return false + } -func runWorkflowIfMissed(cronWorkflow *v1alpha1.CronWorkflow, cronSchedule cron.Schedule, cronWorkflowJob *CronWorkflowWrapper) { - // If this CronWorkflow has been run before, check if we have missed any scheduled executions - if cronWorkflow.Status.LastScheduledTime != nil { - now := time.Now() - var missedExecutionTime time.Time - nextScheduledRunTime := cronSchedule.Next(cronWorkflow.Status.LastScheduledTime.Time) - // Workflow should have ran - for nextScheduledRunTime.Before(now) { - missedExecutionTime = nextScheduledRunTime - nextScheduledRunTime = cronSchedule.Next(missedExecutionTime) - } - // We missed the latest execution time - if !missedExecutionTime.IsZero() { - // If StartingDeadlineSeconds is not set, or we are still within the deadline window, run the Workflow - if cronWorkflow.Options.StartingDeadlineSeconds == nil || now.Before(missedExecutionTime.Add(time.Duration(*cronWorkflow.Options.StartingDeadlineSeconds)*time.Second)) { - log.Infof("%s missed an execution at %s and is within StartingDeadline", cronWorkflow.Name, missedExecutionTime.Format("Mon Jan _2 15:04:05 2006")) - cronWorkflowJob.Run() - } - } + err = cronWorkflowOperationCtx.runOutstandingWorkflows() + if err != nil { + log.Errorf("could not run outstanding Workflow: %w", err) + return false } -} -func (cc *Controller) stopCronWorkflow(cronWorkflowName string) error { - cc.cronLock.Lock() - defer cc.cronLock.Unlock() + // The job is currently scheduled, remove it and re add it. + if entryId, ok := cc.nameEntryIDMap[key.(string)]; ok { + cc.cron.Remove(entryId) + delete(cc.nameEntryIDMap, key.(string)) + } - entryId, ok := cc.nameEntryIDMap[cronWorkflowName] - if !ok { - return fmt.Errorf("unable to remove workflow: workflow %s does not exist", cronWorkflowName) + entryId, err := cc.cron.AddJob(cronWf.Options.Schedule, cronWorkflowOperationCtx) + if err != nil { + log.Errorf("could not schedule CronWorkflow: %w", err) + return false } + cc.nameEntryIDMap[key.(string)] = entryId - cc.cron.Remove(entryId) - delete(cc.nameEntryIDMap, cronWorkflowName) + log.Infof("CronWorkflow %s added", key.(string)) - log.Infof("CronWorkflow %s removed", cronWorkflowName) - return nil + return false +} + +func (cc *Controller) newCronWorkflowInformer() extv1alpha1.CronWorkflowInformer { + var informerFactory externalversions.SharedInformerFactory + informerFactory = externalversions.NewSharedInformerFactory(cc.wfClientset, cronWorkflowResyncPeriod) + return informerFactory.Argoproj().V1alpha1().CronWorkflows() } func (cc *Controller) addCronWorkflowInformerHandler() { - cc.wfCronInformer.Informer().AddEventHandler(cache.ResourceEventHandlerFuncs{ + cc.cronWfInformer.Informer().AddEventHandler(cache.ResourceEventHandlerFuncs{ AddFunc: func(obj interface{}) { - cronWf, err := convertToWorkflow(obj) - if err != nil { - log.Error(err) - return - } - err = cc.startCronWorkflow(cronWf) - if err != nil { - log.Errorf("Error starting CronWorkflow %s: %s", cronWf.Name, err) + key, err := cache.MetaNamespaceKeyFunc(obj) + if err == nil { + cc.cronWfQueue.Add(key) } }, UpdateFunc: func(old, new interface{}) { - cronWf, err := convertToWorkflow(new) - if err != nil { - log.Error(err) - return - } - err = cc.startCronWorkflow(cronWf) - if err != nil { - log.Errorf("Error starting CronWorkflow %s: %s", cronWf.Name, err) + key, err := cache.MetaNamespaceKeyFunc(new) + if err == nil { + cc.cronWfQueue.Add(key) } }, DeleteFunc: func(obj interface{}) { - log.Infof("SIMON Deleting object: %v", obj) - cronWf, err := convertToWorkflow(obj) - if err != nil { - log.Error(err) - return - } - err = cc.stopCronWorkflow(cronWf.Name) - if err != nil { - log.Errorf("Error stopping CronWorkflow %s: %s", cronWf.Name, err) + key, err := cache.DeletionHandlingMetaNamespaceKeyFunc(obj) + if err == nil { + cc.cronWfQueue.Add(key) } }, }) } func (cc *Controller) addWorkflowInformerHandler() { - log.Infof("SIMON adding informer") cc.wfInformer.AddEventHandler( cache.ResourceEventHandlerFuncs{ AddFunc: func(obj interface{}) { - log.Infof("SIMON FOUND A WF: %v", obj.(*unstructured.Unstructured)) }, UpdateFunc: func(old, new interface{}) { - log.Infof("SIMON FOUND U WF: %v", new.(*unstructured.Unstructured)) }, DeleteFunc: func(obj interface{}) { - log.Infof("SIMON FOUND D WF: %v", obj.(*unstructured.Unstructured)) }, }, ) } -func (cc *Controller) newCronWorkflowInformer() extv1alpha1.CronWorkflowInformer { - var informerFactory externalversions.SharedInformerFactory - informerFactory = externalversions.NewSharedInformerFactory(cc.wfClientset, cronWorkflowResyncPeriod) - return informerFactory.Argoproj().V1alpha1().CronWorkflows() -} +const letterBytes = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ" -func convertToWorkflow(obj interface{}) (*v1alpha1.CronWorkflow, error) { - cronWf, ok := obj.(*v1alpha1.CronWorkflow) - if !ok { - return nil, fmt.Errorf("error casting object") +func RandStringBytes(n int) string { + b := make([]byte, n) + for i := range b { + b[i] = letterBytes[rand.Intn(len(letterBytes))] } - return cronWf, nil + return string(b) +} + +// The equivalent function for Workflows lives in util.go. If necessary, this could be moved there +func fromUnstructured(obj *unstructured.Unstructured) (*v1alpha1.CronWorkflow, error) { + var cronWf v1alpha1.CronWorkflow + err := runtime.DefaultUnstructuredConverter.FromUnstructured(obj.Object, &cronWf) + return &cronWf, err } func wfInformerListOptionsFunc(options *v1.ListOptions) { diff --git a/workflow/cron/cron_workflow_wrapper.go b/workflow/cron/operator.go similarity index 52% rename from workflow/cron/cron_workflow_wrapper.go rename to workflow/cron/operator.go index 3c8a883258d3..93fd66c27bb0 100644 --- a/workflow/cron/cron_workflow_wrapper.go +++ b/workflow/cron/operator.go @@ -9,6 +9,7 @@ import ( "github.com/argoproj/argo/workflow/common" "github.com/argoproj/argo/workflow/util" "github.com/prometheus/common/log" + "github.com/robfig/cron" "k8s.io/api/batch/v2alpha1" v1 "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/apimachinery/pkg/labels" @@ -16,7 +17,7 @@ import ( "time" ) -type CronWorkflowWrapper struct { +type cronWfOperationCtx struct { // CronWorkflow is the CronWorkflow to be run name string cronWf *v1alpha1.CronWorkflow @@ -25,9 +26,9 @@ type CronWorkflowWrapper struct { cronWfIf typed.CronWorkflowInterface } -func NewCronWorkflowWrapper(cronWorkflow *v1alpha1.CronWorkflow, wfClientset versioned.Interface, cronWfIf typed.CronWorkflowInterface) (*CronWorkflowWrapper, error) { +func newCronWfOperationCtx(cronWorkflow *v1alpha1.CronWorkflow, wfClientset versioned.Interface, cronWfIf typed.CronWorkflowInterface) (*cronWfOperationCtx, error) { runtimeNamespace := cronWorkflow.Options.RuntimeNamespace - return &CronWorkflowWrapper{ + return &cronWfOperationCtx{ name: cronWorkflow.ObjectMeta.Name, cronWf: cronWorkflow, wfClientset: wfClientset, @@ -36,10 +37,10 @@ func NewCronWorkflowWrapper(cronWorkflow *v1alpha1.CronWorkflow, wfClientset ver }, nil } -func (cronWfWrp *CronWorkflowWrapper) Run() { - log.Infof("Running %s", cronWfWrp.name) +func (woc *cronWfOperationCtx) Run() { + log.Infof("Running %s", woc.name) - ok, err := cronWfWrp.enforceRuntimePolicy() + ok, err := woc.enforceRuntimePolicy() if err != nil { log.Errorf("Concurrency policy error: %s", err) return @@ -47,75 +48,105 @@ func (cronWfWrp *CronWorkflowWrapper) Run() { return } - wf, err := castToWorkflow(cronWfWrp.cronWf) + wf, err := castToWorkflow(woc.cronWf) if err != nil { - log.Errorf("Unable to create Workflow for CronWorkflow %s", cronWfWrp.name) + log.Errorf("Unable to create Workflow for CronWorkflow %s", woc.name) return } - _, err = util.SubmitWorkflow(cronWfWrp.wfClient, cronWfWrp.wfClientset, cronWfWrp.cronWf.Options.RuntimeNamespace, wf, &util.SubmitOpts{}) + _, err = util.SubmitWorkflow(woc.wfClient, woc.wfClientset, woc.cronWf.Options.RuntimeNamespace, wf, &util.SubmitOpts{}) if err != nil { log.Errorf("Failed to run CronWorkflow: %v", err) } - cronWfWrp.cronWf.Status.LastScheduledTime = &v1.Time{Time: time.Now().UTC()} - err = cronWfWrp.persistUpdate() + woc.cronWf.Status.LastScheduledTime = &v1.Time{Time: time.Now().UTC()} + err = woc.persistUpdate() if err != nil { log.Error(err) } - log.Infof("Created %s", cronWfWrp.cronWf.ObjectMeta.Name) + log.Infof("Created %s", woc.cronWf.ObjectMeta.Name) } -func (cronWfWrp *CronWorkflowWrapper) persistUpdate() error { - _, err := cronWfWrp.cronWfIf.Update(cronWfWrp.cronWf) +func (woc *cronWfOperationCtx) persistUpdate() error { + _, err := woc.cronWfIf.Update(woc.cronWf) if err != nil { return fmt.Errorf("failed to update CronWorkflow: %w", err) } return nil } -func (cronWfWrp *CronWorkflowWrapper) enforceRuntimePolicy() (bool, error) { - if cronWfWrp.cronWf.Options.Suspend { - log.Infof("%s is suspended, skipping execution", cronWfWrp.name) +func (woc *cronWfOperationCtx) enforceRuntimePolicy() (bool, error) { + if woc.cronWf.Options.Suspend { + log.Infof("%s is suspended, skipping execution", woc.name) return false, nil } - if cronWfWrp.cronWf.Options.ConcurrencyPolicy != "" { - switch cronWfWrp.cronWf.Options.ConcurrencyPolicy { + if woc.cronWf.Options.ConcurrencyPolicy != "" { + switch woc.cronWf.Options.ConcurrencyPolicy { case v2alpha1.AllowConcurrent, "": // Do nothing case v2alpha1.ForbidConcurrent: - runningWorkflows, err := cronWfWrp.getRunningWorkflows() + runningWorkflows, err := woc.getRunningWorkflows() if err != nil { - return false, fmt.Errorf("error in running CronWorkflow %s: %w", cronWfWrp.name, err) + return false, fmt.Errorf("error in running CronWorkflow %s: %w", woc.name, err) } if len(runningWorkflows) > 0 { - log.Infof("%s has 'ConcurrencyPolicy: Forbid' and has an active Workflow so it was not run", cronWfWrp.name) + log.Infof("%s has 'ConcurrencyPolicy: Forbid' and has an active Workflow so it was not run", woc.name) return false, nil } case v2alpha1.ReplaceConcurrent: - runningWorkflows, err := cronWfWrp.getRunningWorkflows() + runningWorkflows, err := woc.getRunningWorkflows() if err != nil { - return false, fmt.Errorf("error in running CronWorkflow %s: %w", cronWfWrp.name, err) + return false, fmt.Errorf("error in running CronWorkflow %s: %w", woc.name, err) } for _, wf := range runningWorkflows { - log.Infof("%s has 'ConcurrencyPolicy: Replace' and has active Workflows. Stopping %s...", cronWfWrp.name, wf.Name) - err := util.TerminateWorkflow(cronWfWrp.wfClient, wf.Name) + log.Infof("%s has 'ConcurrencyPolicy: Replace' and has active Workflows. Stopping %s...", woc.name, wf.Name) + err := util.TerminateWorkflow(woc.wfClient, wf.Name) if err != nil { return false, fmt.Errorf("error stopping workflow %s: %w", wf.Name, err) } } default: - return false, fmt.Errorf("invalid ConcurrencyPolicy: %s", cronWfWrp.cronWf.Options.ConcurrencyPolicy) + return false, fmt.Errorf("invalid ConcurrencyPolicy: %s", woc.cronWf.Options.ConcurrencyPolicy) } } return true, nil } -func (cronWfWrp *CronWorkflowWrapper) getRunningWorkflows() ([]v1alpha1.Workflow, error) { +func (woc *cronWfOperationCtx) runOutstandingWorkflows() error { + + // If this CronWorkflow has been run before, check if we have missed any scheduled executions + if woc.cronWf.Status.LastScheduledTime != nil { + now := time.Now() + var missedExecutionTime time.Time + cronSchedule, err := cron.ParseStandard(woc.cronWf.Options.Schedule) + if err != nil { + return err + } + + nextScheduledRunTime := cronSchedule.Next(woc.cronWf.Status.LastScheduledTime.Time) + // Workflow should have ran + for nextScheduledRunTime.Before(now) { + missedExecutionTime = nextScheduledRunTime + nextScheduledRunTime = cronSchedule.Next(missedExecutionTime) + } + + // We missed the latest execution time + if !missedExecutionTime.IsZero() { + // If StartingDeadlineSeconds is not set, or we are still within the deadline window, run the Workflow + if woc.cronWf.Options.StartingDeadlineSeconds == nil || now.Before(missedExecutionTime.Add(time.Duration(*woc.cronWf.Options.StartingDeadlineSeconds)*time.Second)) { + log.Infof("%s missed an execution at %s and is within StartingDeadline", woc.cronWf.Name, missedExecutionTime.Format("Mon Jan _2 15:04:05 2006")) + woc.Run() + } + } + } + return nil +} + +func (woc *cronWfOperationCtx) getRunningWorkflows() ([]v1alpha1.Workflow, error) { labelSelector := labels.NewSelector() - req, err := labels.NewRequirement(common.LabelCronWorkflowParent, selection.Equals, []string{cronWfWrp.cronWf.Name}) + req, err := labels.NewRequirement(common.LabelCronWorkflowParent, selection.Equals, []string{woc.cronWf.Name}) if err != nil { return nil, err } @@ -125,7 +156,7 @@ func (cronWfWrp *CronWorkflowWrapper) getRunningWorkflows() ([]v1alpha1.Workflow return nil, err } labelSelector = labelSelector.Add(*req) - wfList, err := cronWfWrp.wfClientset.ArgoprojV1alpha1().Workflows(cronWfWrp.cronWf.Options.RuntimeNamespace).List(v1.ListOptions{ + wfList, err := woc.wfClientset.ArgoprojV1alpha1().Workflows(woc.cronWf.Options.RuntimeNamespace).List(v1.ListOptions{ LabelSelector: labelSelector.String(), }) if err != nil { From c1bfe835c8207a4e13a986d6c786fd866bada9fb Mon Sep 17 00:00:00 2001 From: Simon Behar Date: Thu, 14 Nov 2019 15:01:58 -0800 Subject: [PATCH 17/44] WIP: Lint --- workflow/cron/controller.go | 29 +++-------------------------- 1 file changed, 3 insertions(+), 26 deletions(-) diff --git a/workflow/cron/controller.go b/workflow/cron/controller.go index 1faa116977d2..9db4455a045c 100644 --- a/workflow/cron/controller.go +++ b/workflow/cron/controller.go @@ -11,17 +11,13 @@ import ( "github.com/robfig/cron" log "github.com/sirupsen/logrus" v1 "k8s.io/apimachinery/pkg/apis/meta/v1" - "k8s.io/apimachinery/pkg/apis/meta/v1/unstructured" "k8s.io/apimachinery/pkg/fields" "k8s.io/apimachinery/pkg/labels" - "k8s.io/apimachinery/pkg/runtime" "k8s.io/apimachinery/pkg/selection" "k8s.io/apimachinery/pkg/util/wait" "k8s.io/client-go/rest" "k8s.io/client-go/tools/cache" "k8s.io/client-go/util/workqueue" - "math/rand" - "sync" "time" ) @@ -36,7 +32,6 @@ type Controller struct { cronWfInformer extv1alpha1.CronWorkflowInformer cronWfQueue workqueue.RateLimitingInterface restConfig *rest.Config - cronLock sync.Mutex } const ( @@ -127,7 +122,7 @@ func (cc *Controller) processNextCronItem() bool { err = cronWorkflowOperationCtx.runOutstandingWorkflows() if err != nil { - log.Errorf("could not run outstanding Workflow: %w", err) + log.Errorf("could not run outstanding Workflow: %s", err) return false } @@ -139,7 +134,7 @@ func (cc *Controller) processNextCronItem() bool { entryId, err := cc.cron.AddJob(cronWf.Options.Schedule, cronWorkflowOperationCtx) if err != nil { - log.Errorf("could not schedule CronWorkflow: %w", err) + log.Errorf("could not schedule CronWorkflow: %s", err) return false } cc.nameEntryIDMap[key.(string)] = entryId @@ -150,8 +145,7 @@ func (cc *Controller) processNextCronItem() bool { } func (cc *Controller) newCronWorkflowInformer() extv1alpha1.CronWorkflowInformer { - var informerFactory externalversions.SharedInformerFactory - informerFactory = externalversions.NewSharedInformerFactory(cc.wfClientset, cronWorkflowResyncPeriod) + informerFactory := externalversions.NewSharedInformerFactory(cc.wfClientset, cronWorkflowResyncPeriod) return informerFactory.Argoproj().V1alpha1().CronWorkflows() } @@ -191,23 +185,6 @@ func (cc *Controller) addWorkflowInformerHandler() { ) } -const letterBytes = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ" - -func RandStringBytes(n int) string { - b := make([]byte, n) - for i := range b { - b[i] = letterBytes[rand.Intn(len(letterBytes))] - } - return string(b) -} - -// The equivalent function for Workflows lives in util.go. If necessary, this could be moved there -func fromUnstructured(obj *unstructured.Unstructured) (*v1alpha1.CronWorkflow, error) { - var cronWf v1alpha1.CronWorkflow - err := runtime.DefaultUnstructuredConverter.FromUnstructured(obj.Object, &cronWf) - return &cronWf, err -} - func wfInformerListOptionsFunc(options *v1.ListOptions) { options.FieldSelector = fields.Everything().String() incompleteReq, err := labels.NewRequirement(common.LabelKeyCompleted, selection.NotIn, []string{"true"}) From 67f4ab8cfba19ecb8438d8a7b612dcb8ebbc6c63 Mon Sep 17 00:00:00 2001 From: Simon Behar Date: Thu, 14 Nov 2019 17:02:21 -0800 Subject: [PATCH 18/44] WIP: First CLI commands --- cmd/argo/commands/cron/common.go | 59 ++++++++++++++++++++++++ cmd/argo/commands/cron/get.go | 77 +++++++++++++++++++++++++++++++ cmd/argo/commands/cron/list.go | 79 ++++++++++++++++++++++++++++++++ cmd/argo/commands/cron/root.go | 38 +++++++++++++++ cmd/argo/commands/root.go | 2 + workflow/cron/controller.go | 7 +-- 6 files changed, 256 insertions(+), 6 deletions(-) create mode 100644 cmd/argo/commands/cron/common.go create mode 100644 cmd/argo/commands/cron/get.go create mode 100644 cmd/argo/commands/cron/list.go create mode 100644 cmd/argo/commands/cron/root.go diff --git a/cmd/argo/commands/cron/common.go b/cmd/argo/commands/cron/common.go new file mode 100644 index 000000000000..9ff6556b2010 --- /dev/null +++ b/cmd/argo/commands/cron/common.go @@ -0,0 +1,59 @@ +package cron + +import ( + "log" + + versioned "github.com/argoproj/argo/pkg/client/clientset/versioned" + "github.com/argoproj/argo/pkg/client/clientset/versioned/typed/workflow/v1alpha1" + "k8s.io/client-go/kubernetes" + "k8s.io/client-go/rest" + "k8s.io/client-go/tools/clientcmd" +) + +// Global variables +var ( + restConfig *rest.Config + clientConfig clientcmd.ClientConfig + clientset *kubernetes.Clientset + wfClientset *versioned.Clientset + wftmplClient v1alpha1.CronWorkflowInterface + namespace string +) + +func initKubeClient() *kubernetes.Clientset { + if clientset != nil { + return clientset + } + var err error + restConfig, err = clientConfig.ClientConfig() + if err != nil { + log.Fatal(err) + } + + // create the clientset + clientset, err = kubernetes.NewForConfig(restConfig) + if err != nil { + log.Fatal(err) + } + return clientset +} + +// InitCronWorkflowClient creates a new client for the Kubernetes WorkflowTemplate CRD. +func InitCronWorkflowClient(ns ...string) v1alpha1.CronWorkflowInterface { + if wftmplClient != nil { + return wftmplClient + } + initKubeClient() + var err error + if len(ns) > 0 { + namespace = ns[0] + } else { + namespace, _, err = clientConfig.Namespace() + if err != nil { + log.Fatal(err) + } + } + wfClientset = versioned.NewForConfigOrDie(restConfig) + wftmplClient = wfClientset.ArgoprojV1alpha1().CronWorkflows(namespace) + return wftmplClient +} diff --git a/cmd/argo/commands/cron/get.go b/cmd/argo/commands/cron/get.go new file mode 100644 index 000000000000..aa4d022244fa --- /dev/null +++ b/cmd/argo/commands/cron/get.go @@ -0,0 +1,77 @@ +package cron + +import ( + "encoding/json" + "fmt" + "log" + "os" + + wfv1 "github.com/argoproj/argo/pkg/apis/workflow/v1alpha1" + "github.com/argoproj/pkg/humanize" + "github.com/spf13/cobra" + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" + "sigs.k8s.io/yaml" +) + +func NewGetCommand() *cobra.Command { + var ( + output string + ) + + var command = &cobra.Command{ + Use: "get CRON_WORKFLOW", + Short: "display details about a CronWorkflow", + Run: func(cmd *cobra.Command, args []string) { + if len(args) == 0 { + cmd.HelpFunc()(cmd, args) + os.Exit(1) + } + cronWfClient := InitCronWorkflowClient() + for _, arg := range args { + wftmpl, err := cronWfClient.Get(arg, metav1.GetOptions{}) + if err != nil { + log.Fatal(err) + } + printCronWorkflow(wftmpl, output) + } + }, + } + + command.Flags().StringVarP(&output, "output", "o", "", "Output format. One of: json|yaml|wide") + return command +} + +func printCronWorkflow(wf *wfv1.CronWorkflow, outFmt string) { + switch outFmt { + case "name": + fmt.Println(wf.ObjectMeta.Name) + case "json": + outBytes, _ := json.MarshalIndent(wf, "", " ") + fmt.Println(string(outBytes)) + case "yaml": + outBytes, _ := yaml.Marshal(wf) + fmt.Print(string(outBytes)) + case "wide", "": + printCronWorkflowTemplate(wf, outFmt) + default: + log.Fatalf("Unknown output format: %s", outFmt) + } +} + +func printCronWorkflowTemplate(wf *wfv1.CronWorkflow, outFmt string) { + const fmtStr = "%-30s %v\n" + fmt.Printf(fmtStr, "Name:", wf.ObjectMeta.Name) + fmt.Printf(fmtStr, "Namespace:", wf.ObjectMeta.Namespace) + fmt.Printf(fmtStr, "Created:", humanize.Timestamp(wf.ObjectMeta.CreationTimestamp.Time)) + fmt.Printf(fmtStr, "LastScheduledTime:", humanize.Timestamp(wf.Status.LastScheduledTime.Time)) + fmt.Printf(fmtStr, "Schedule:", wf.Options.Schedule) + fmt.Printf(fmtStr, "Suspended:", wf.Options.Suspend) + fmt.Printf(fmtStr, "RuntimeGenerateName:", wf.Options.RuntimeGenerateName) + fmt.Printf(fmtStr, "RuntimeNamespace:", wf.Options.RuntimeNamespace) + if wf.Options.StartingDeadlineSeconds != nil { + fmt.Printf(fmtStr, "StartingDeadlineSeconds:", *wf.Options.StartingDeadlineSeconds) + } + if wf.Options.ConcurrencyPolicy != "" { + fmt.Printf(fmtStr, "ConcurrencyPolicy:", wf.Options.ConcurrencyPolicy) + } +} diff --git a/cmd/argo/commands/cron/list.go b/cmd/argo/commands/cron/list.go new file mode 100644 index 000000000000..abbe616ac386 --- /dev/null +++ b/cmd/argo/commands/cron/list.go @@ -0,0 +1,79 @@ +package cron + +import ( + "fmt" + "github.com/argoproj/pkg/humanize" + "log" + "os" + "text/tabwriter" + "time" + + "github.com/spf13/cobra" + apiv1 "k8s.io/api/core/v1" + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" + "k8s.io/apimachinery/pkg/labels" + + wfv1 "github.com/argoproj/argo/pkg/apis/workflow/v1alpha1" + "github.com/argoproj/argo/pkg/client/clientset/versioned/typed/workflow/v1alpha1" +) + +type listFlags struct { + allNamespaces bool // --all-namespaces + output string // --output +} + +func NewListCommand() *cobra.Command { + var ( + listArgs listFlags + ) + var command = &cobra.Command{ + Use: "list", + Short: "list CronWorkflows", + Run: func(cmd *cobra.Command, args []string) { + var cronWfClient v1alpha1.CronWorkflowInterface + if listArgs.allNamespaces { + cronWfClient = InitCronWorkflowClient(apiv1.NamespaceAll) + } else { + cronWfClient = InitCronWorkflowClient() + } + listOpts := metav1.ListOptions{} + labelSelector := labels.NewSelector() + listOpts.LabelSelector = labelSelector.String() + cronWfList, err := cronWfClient.List(listOpts) + if err != nil { + log.Fatal(err) + } + + switch listArgs.output { + case "", "wide": + printTable(cronWfList.Items, &listArgs) + case "name": + for _, cronWf := range cronWfList.Items { + fmt.Println(cronWf.ObjectMeta.Name) + } + default: + log.Fatalf("Unknown output mode: %s", listArgs.output) + } + }, + } + command.Flags().BoolVar(&listArgs.allNamespaces, "all-namespaces", false, "Show workflows from all namespaces") + command.Flags().StringVarP(&listArgs.output, "output", "o", "", "Output format. One of: wide|name") + return command +} + +func printTable(wfList []wfv1.CronWorkflow, listArgs *listFlags) { + w := tabwriter.NewWriter(os.Stdout, 0, 0, 3, ' ', 0) + if listArgs.allNamespaces { + fmt.Fprint(w, "NAMESPACE\t") + } + fmt.Fprint(w, "NAME\tAGE\tLAST RUN\tSCHEDULE\tSUSPENDED") + fmt.Fprint(w, "\n") + for _, wf := range wfList { + if listArgs.allNamespaces { + fmt.Fprintf(w, "%s\t", wf.ObjectMeta.Namespace) + } + fmt.Fprintf(w, "%s\t%s\t%s\t%s\t%t", wf.ObjectMeta.Name, humanize.RelativeDurationShort(wf.ObjectMeta.CreationTimestamp.Time, time.Now()), humanize.RelativeDurationShort(wf.Status.LastScheduledTime.Time, time.Now()), wf.Options.Schedule, wf.Options.Suspend) + fmt.Fprintf(w, "\n") + } + _ = w.Flush() +} diff --git a/cmd/argo/commands/cron/root.go b/cmd/argo/commands/cron/root.go new file mode 100644 index 000000000000..b676b9caec0f --- /dev/null +++ b/cmd/argo/commands/cron/root.go @@ -0,0 +1,38 @@ +package cron + +import ( + "os" + + "github.com/spf13/cobra" + "k8s.io/client-go/tools/clientcmd" +) + +func NewCronWorkflowCommand() *cobra.Command { + var command = &cobra.Command{ + Use: "cron", + Short: "manage CronWorkflows", + Run: func(cmd *cobra.Command, args []string) { + cmd.HelpFunc()(cmd, args) + }, + } + + command.AddCommand(NewGetCommand()) + command.AddCommand(NewListCommand()) + //command.AddCommand(NewCreateCommand()) + //command.AddCommand(NewDeleteCommand()) + //command.AddCommand(NewLintCommand()) + + addKubectlFlagsToCmd(command) + return command +} + +func addKubectlFlagsToCmd(cmd *cobra.Command) { + // The "usual" clientcmd/kubectl flags + loadingRules := clientcmd.NewDefaultClientConfigLoadingRules() + loadingRules.DefaultClientConfig = &clientcmd.DefaultClientConfig + overrides := clientcmd.ConfigOverrides{} + kflags := clientcmd.RecommendedConfigOverrideFlags("") + cmd.PersistentFlags().StringVar(&loadingRules.ExplicitPath, "kubeconfig", "", "Path to a kube config. Only required if out-of-cluster") + clientcmd.BindOverrideFlags(&overrides, cmd.PersistentFlags(), kflags) + clientConfig = clientcmd.NewInteractiveDeferredLoadingClientConfig(loadingRules, &overrides, os.Stdin) +} diff --git a/cmd/argo/commands/root.go b/cmd/argo/commands/root.go index a7cb6bc2d57b..911078e9f125 100644 --- a/cmd/argo/commands/root.go +++ b/cmd/argo/commands/root.go @@ -1,6 +1,7 @@ package commands import ( + "github.com/argoproj/argo/cmd/argo/commands/cron" "os" "github.com/argoproj/argo/cmd/argo/commands/template" @@ -40,6 +41,7 @@ func NewCommand() *cobra.Command { command.AddCommand(NewTerminateCommand()) command.AddCommand(cmd.NewVersionCmd(CLIName)) command.AddCommand(template.NewTemplateCommand()) + command.AddCommand(cron.NewCronWorkflowCommand()) addKubectlFlagsToCmd(command) return command diff --git a/workflow/cron/controller.go b/workflow/cron/controller.go index 9db4455a045c..6fbb0942a134 100644 --- a/workflow/cron/controller.go +++ b/workflow/cron/controller.go @@ -62,7 +62,6 @@ func (cc *Controller) Run(ctx context.Context) { cc.addCronWorkflowInformerHandler() cc.wfInformer = util.NewWorkflowInformer(cc.restConfig, "", cronWorkflowResyncPeriod, wfInformerListOptionsFunc) - log.Infof("SIMON CRON WFINF: %v", cc.wfInformer) cc.addWorkflowInformerHandler() cc.cron.Start() @@ -187,14 +186,10 @@ func (cc *Controller) addWorkflowInformerHandler() { func wfInformerListOptionsFunc(options *v1.ListOptions) { options.FieldSelector = fields.Everything().String() - incompleteReq, err := labels.NewRequirement(common.LabelKeyCompleted, selection.NotIn, []string{"true"}) - if err != nil { - panic(err) - } isCronWorkflowChildReq, err := labels.NewRequirement(common.LabelCronWorkflowParent, selection.Exists, []string{}) if err != nil { panic(err) } - labelSelector := labels.NewSelector().Add(*incompleteReq, *isCronWorkflowChildReq) + labelSelector := labels.NewSelector().Add(*isCronWorkflowChildReq) options.LabelSelector = labelSelector.String() } From acb4188bf37a176c04f2223eaf778e2dd85ec533 Mon Sep 17 00:00:00 2001 From: Simon Behar Date: Fri, 15 Nov 2019 11:17:38 -0800 Subject: [PATCH 19/44] WIP: Almost done with CLI --- cmd/argo/commands/cron/create.go | 98 ++++++++++++++++++++++++++++++++ cmd/argo/commands/cron/delete.go | 59 +++++++++++++++++++ cmd/argo/commands/cron/get.go | 3 +- cmd/argo/commands/cron/list.go | 2 +- cmd/argo/commands/cron/root.go | 6 +- pkg/apis/workflow/register.go | 5 ++ workflow/common/util.go | 51 +++++++++++++++++ workflow/cron/operator.go | 25 +------- workflow/util/util.go | 2 +- workflow/validate/validate.go | 44 ++++++++++++++ 10 files changed, 264 insertions(+), 31 deletions(-) create mode 100644 cmd/argo/commands/cron/create.go create mode 100644 cmd/argo/commands/cron/delete.go diff --git a/cmd/argo/commands/cron/create.go b/cmd/argo/commands/cron/create.go new file mode 100644 index 000000000000..7b6512ed5cfb --- /dev/null +++ b/cmd/argo/commands/cron/create.go @@ -0,0 +1,98 @@ +package cron + +import ( + "log" + "os" + + "github.com/argoproj/pkg/json" + "github.com/spf13/cobra" + + wfv1 "github.com/argoproj/argo/pkg/apis/workflow/v1alpha1" + "github.com/argoproj/argo/workflow/common" + "github.com/argoproj/argo/workflow/util" + "github.com/argoproj/argo/workflow/validate" +) + +type cliCreateOpts struct { + output string // --output + strict bool // --strict +} + +func NewCreateCommand() *cobra.Command { + var ( + cliCreateOpts cliCreateOpts + ) + var command = &cobra.Command{ + Use: "create FILE1 FILE2...", + Short: "create a cron workflow", + Run: func(cmd *cobra.Command, args []string) { + if len(args) == 0 { + cmd.HelpFunc()(cmd, args) + os.Exit(1) + } + + CreateCronWorkflows(args, &cliCreateOpts) + }, + } + command.Flags().StringVarP(&cliCreateOpts.output, "output", "o", "", "Output format. One of: name|json|yaml|wide") + command.Flags().BoolVar(&cliCreateOpts.strict, "strict", true, "perform strict workflow validation") + return command +} + +func CreateCronWorkflows(filePaths []string, cliOpts *cliCreateOpts) { + if cliOpts == nil { + cliOpts = &cliCreateOpts{} + } + defaultCronWfClient := InitCronWorkflowClient() + + fileContents, err := util.ReadManifest(filePaths...) + if err != nil { + log.Fatal(err) + } + + var cronWorkflows []wfv1.CronWorkflow + for _, body := range fileContents { + cronWfs := unmarshalCronWorkflows(body, cliOpts.strict) + cronWorkflows = append(cronWorkflows, cronWfs...) + } + + if len(cronWorkflows) == 0 { + log.Println("No CronWorkflows found in given files") + os.Exit(1) + } + + for _, cronWf := range cronWorkflows { + err := validate.ValidateCronWorkflow(wfClientset, namespace, &cronWf) + if err != nil { + log.Fatalf("Failed to create cron workflow: %v", err) + } + cronWfClient := defaultCronWfClient + if cronWf.Namespace != "" { + cronWfClient = InitCronWorkflowClient(cronWf.Namespace) + } + created, err := cronWfClient.Create(&cronWf) + if err != nil { + log.Fatalf("Failed to create workflow template: %v", err) + } + printCronWorkflowTemplate(created, cliOpts.output) + } +} + +// unmarshalCronWorkflows unmarshals the input bytes as either json or yaml +func unmarshalCronWorkflows(wfBytes []byte, strict bool) []wfv1.CronWorkflow { + var cronWf wfv1.CronWorkflow + var jsonOpts []json.JSONOpt + if strict { + jsonOpts = append(jsonOpts, json.DisallowUnknownFields) + } + err := json.Unmarshal(wfBytes, &cronWf, jsonOpts...) + if err == nil { + return []wfv1.CronWorkflow{cronWf} + } + yamlWfs, err := common.SplitCronWorkflowYAMLFile(wfBytes, strict) + if err == nil { + return yamlWfs + } + log.Fatalf("Failed to parse workflow template: %v", err) + return nil +} diff --git a/cmd/argo/commands/cron/delete.go b/cmd/argo/commands/cron/delete.go new file mode 100644 index 000000000000..f122293a99a2 --- /dev/null +++ b/cmd/argo/commands/cron/delete.go @@ -0,0 +1,59 @@ +package cron + +import ( + "fmt" + "log" + "os" + + "github.com/spf13/cobra" + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" + + "github.com/argoproj/argo/pkg/client/clientset/versioned/typed/workflow/v1alpha1" +) + +// NewDeleteCommand returns a new instance of an `argo delete` command +func NewDeleteCommand() *cobra.Command { + var ( + all bool + ) + + var command = &cobra.Command{ + Use: "delete CRON_WORKFLOW", + Short: "delete a cron workflow", + Run: func(cmd *cobra.Command, args []string) { + cronWfClient := InitCronWorkflowClient() + if all { + deleteCronWorkflows(cronWfClient, metav1.ListOptions{}) + } else { + if len(args) == 0 { + cmd.HelpFunc()(cmd, args) + os.Exit(1) + } + for _, wftmplName := range args { + deleCronWorkflow(cronWfClient, wftmplName) + } + } + }, + } + + command.Flags().BoolVar(&all, "all", false, "Delete all workflow templates") + return command +} + +func deleCronWorkflow(cronWfClient v1alpha1.CronWorkflowInterface, cronWf string) { + err := cronWfClient.Delete(cronWf, &metav1.DeleteOptions{}) + if err != nil { + log.Fatal(err) + } + fmt.Printf("CronWorkflow '%s' deleted\n", cronWf) +} + +func deleteCronWorkflows(cronWfClient v1alpha1.CronWorkflowInterface, options metav1.ListOptions) { + cronWfList, err := cronWfClient.List(options) + if err != nil { + log.Fatal(err) + } + for _, cronWf := range cronWfList.Items { + deleCronWorkflow(cronWfClient, cronWf.ObjectMeta.Name) + } +} diff --git a/cmd/argo/commands/cron/get.go b/cmd/argo/commands/cron/get.go index aa4d022244fa..a86eed36aaf6 100644 --- a/cmd/argo/commands/cron/get.go +++ b/cmd/argo/commands/cron/get.go @@ -20,7 +20,7 @@ func NewGetCommand() *cobra.Command { var command = &cobra.Command{ Use: "get CRON_WORKFLOW", - Short: "display details about a CronWorkflow", + Short: "display details about a cron workflow", Run: func(cmd *cobra.Command, args []string) { if len(args) == 0 { cmd.HelpFunc()(cmd, args) @@ -63,7 +63,6 @@ func printCronWorkflowTemplate(wf *wfv1.CronWorkflow, outFmt string) { fmt.Printf(fmtStr, "Name:", wf.ObjectMeta.Name) fmt.Printf(fmtStr, "Namespace:", wf.ObjectMeta.Namespace) fmt.Printf(fmtStr, "Created:", humanize.Timestamp(wf.ObjectMeta.CreationTimestamp.Time)) - fmt.Printf(fmtStr, "LastScheduledTime:", humanize.Timestamp(wf.Status.LastScheduledTime.Time)) fmt.Printf(fmtStr, "Schedule:", wf.Options.Schedule) fmt.Printf(fmtStr, "Suspended:", wf.Options.Suspend) fmt.Printf(fmtStr, "RuntimeGenerateName:", wf.Options.RuntimeGenerateName) diff --git a/cmd/argo/commands/cron/list.go b/cmd/argo/commands/cron/list.go index abbe616ac386..1d37d0287093 100644 --- a/cmd/argo/commands/cron/list.go +++ b/cmd/argo/commands/cron/list.go @@ -28,7 +28,7 @@ func NewListCommand() *cobra.Command { ) var command = &cobra.Command{ Use: "list", - Short: "list CronWorkflows", + Short: "list cron workflows", Run: func(cmd *cobra.Command, args []string) { var cronWfClient v1alpha1.CronWorkflowInterface if listArgs.allNamespaces { diff --git a/cmd/argo/commands/cron/root.go b/cmd/argo/commands/cron/root.go index b676b9caec0f..68e336b21337 100644 --- a/cmd/argo/commands/cron/root.go +++ b/cmd/argo/commands/cron/root.go @@ -10,7 +10,7 @@ import ( func NewCronWorkflowCommand() *cobra.Command { var command = &cobra.Command{ Use: "cron", - Short: "manage CronWorkflows", + Short: "manage cron workflows", Run: func(cmd *cobra.Command, args []string) { cmd.HelpFunc()(cmd, args) }, @@ -18,8 +18,8 @@ func NewCronWorkflowCommand() *cobra.Command { command.AddCommand(NewGetCommand()) command.AddCommand(NewListCommand()) - //command.AddCommand(NewCreateCommand()) - //command.AddCommand(NewDeleteCommand()) + command.AddCommand(NewCreateCommand()) + command.AddCommand(NewDeleteCommand()) //command.AddCommand(NewLintCommand()) addKubectlFlagsToCmd(command) diff --git a/pkg/apis/workflow/register.go b/pkg/apis/workflow/register.go index a595e15b148a..0aade43f5998 100644 --- a/pkg/apis/workflow/register.go +++ b/pkg/apis/workflow/register.go @@ -13,4 +13,9 @@ const ( WorkflowTemplatePlural string = "workflowtemplates" WorkflowTemplateShortName string = "wftmpl" WorkflowTemplateFullName string = WorkflowTemplatePlural + "." + Group + CronWorkflowKind string = "CronWorkflow" + CronWorkflowSingular string = "cronworkflow" + CronWorkflowPlural string = "cronworkflows" + CronWorkflowShortName string = "cronwf" + CronWorkflowFullName string = WorkflowTemplatePlural + "." + Group ) diff --git a/workflow/common/util.go b/workflow/common/util.go index 87900f660297..1dfddfe10576 100644 --- a/workflow/common/util.go +++ b/workflow/common/util.go @@ -531,6 +531,34 @@ func SplitWorkflowTemplateYAMLFile(body []byte, strict bool) ([]wfv1.WorkflowTem return manifests, nil } +// SplitCronWorkflowYAMLFile is a helper to split a body into multiple workflow template objects +func SplitCronWorkflowYAMLFile(body []byte, strict bool) ([]wfv1.CronWorkflow, error) { + manifestsStrings := yamlSeparator.Split(string(body), -1) + manifests := make([]wfv1.CronWorkflow, 0) + for _, manifestStr := range manifestsStrings { + if strings.TrimSpace(manifestStr) == "" { + continue + } + var cronWf wfv1.CronWorkflow + var opts []yaml.JSONOpt + if strict { + opts = append(opts, yaml.DisallowUnknownFields) // nolint + } + err := yaml.Unmarshal([]byte(manifestStr), &cronWf, opts...) + if cronWf.Kind != "" && cronWf.Kind != workflow.CronWorkflowKind { + log.Warnf("%s is not a cron workflow", cronWf.Kind) + // If we get here, it was a k8s manifest which was not of type 'CronWorkflow' + // We ignore these since we only care about CronWorkflow manifests. + continue + } + if err != nil { + return nil, errors.New(errors.CodeBadRequest, err.Error()) + } + manifests = append(manifests, cronWf) + } + return manifests, nil +} + // MergeReferredTemplate merges a referred template to the receiver template. func MergeReferredTemplate(tmpl *wfv1.Template, referred *wfv1.Template) (*wfv1.Template, error) { // Copy the referred template to deep copy template types. @@ -619,3 +647,26 @@ func GetTemplateHolderString(tmplHolder wfv1.TemplateHolder) string { return fmt.Sprintf("%T (%s)", tmplHolder, tmplName) } } + +func CastToWorkflow(cronWf *wfv1.CronWorkflow) (*wfv1.Workflow, error) { + newTypeMeta := metav1.TypeMeta{ + Kind: workflow.WorkflowKind, + APIVersion: cronWf.TypeMeta.APIVersion, + } + + newObjectMeta := metav1.ObjectMeta{} + if cronWf.Options.RuntimeGenerateName != "" { + newObjectMeta.GenerateName = cronWf.Options.RuntimeGenerateName + } else { + return nil, fmt.Errorf("CronWorkflow should have runtimeGenerateName defined") + } + + newObjectMeta.Labels = make(map[string]string) + newObjectMeta.Labels[LabelCronWorkflowParent] = cronWf.Name + + return &wfv1.Workflow{ + TypeMeta: newTypeMeta, + ObjectMeta: newObjectMeta, + Spec: cronWf.Spec, + }, nil +} \ No newline at end of file diff --git a/workflow/cron/operator.go b/workflow/cron/operator.go index 93fd66c27bb0..1444d980c068 100644 --- a/workflow/cron/operator.go +++ b/workflow/cron/operator.go @@ -48,7 +48,7 @@ func (woc *cronWfOperationCtx) Run() { return } - wf, err := castToWorkflow(woc.cronWf) + wf, err := common.CastToWorkflow(woc.cronWf) if err != nil { log.Errorf("Unable to create Workflow for CronWorkflow %s", woc.name) return @@ -164,26 +164,3 @@ func (woc *cronWfOperationCtx) getRunningWorkflows() ([]v1alpha1.Workflow, error } return wfList.Items, nil } - -func castToWorkflow(cronWf *v1alpha1.CronWorkflow) (*v1alpha1.Workflow, error) { - newTypeMeta := v1.TypeMeta{ - Kind: workflow.WorkflowKind, - APIVersion: cronWf.TypeMeta.APIVersion, - } - - newObjectMeta := v1.ObjectMeta{} - if cronWf.Options.RuntimeGenerateName != "" { - newObjectMeta.GenerateName = cronWf.Options.RuntimeGenerateName - } else { - return nil, fmt.Errorf("CronWorkflow should have runtimeGenerateName defined") - } - - newObjectMeta.Labels = make(map[string]string) - newObjectMeta.Labels[common.LabelCronWorkflowParent] = cronWf.Name - - return &v1alpha1.Workflow{ - TypeMeta: newTypeMeta, - ObjectMeta: newObjectMeta, - Spec: cronWf.Spec, - }, nil -} diff --git a/workflow/util/util.go b/workflow/util/util.go index fbf0d2921e88..15ae22f943d9 100644 --- a/workflow/util/util.go +++ b/workflow/util/util.go @@ -60,7 +60,7 @@ func NewWorkflowInformer(cfg *rest.Config, ns string, resyncPeriod time.Duration resource := schema.GroupVersionResource{ Group: workflow.Group, Version: "v1alpha1", - Resource: "workflows", + Resource: workflow.WorkflowPlural, } informer := unstructutil.NewFilteredUnstructuredInformer( resource, diff --git a/workflow/validate/validate.go b/workflow/validate/validate.go index 572d3487342d..fa3fb697ada2 100644 --- a/workflow/validate/validate.go +++ b/workflow/validate/validate.go @@ -3,7 +3,9 @@ package validate import ( "encoding/json" "fmt" + "github.com/robfig/cron" "io" + "k8s.io/api/batch/v2alpha1" "reflect" "regexp" "strconv" @@ -180,6 +182,48 @@ func ValidateWorkflowTemplate(wfClientset wfclientset.Interface, namespace strin return nil } +// ValidateCronWorkflow validates a CronWorkflow +func ValidateCronWorkflow(wfClientset wfclientset.Interface, namespace string, cronWf *wfv1.CronWorkflow) error { + if cronWf.Namespace != "" { + namespace = cronWf.Namespace + } + + if _, err := cron.ParseStandard(cronWf.Options.Schedule); err != nil { + return errors.Errorf(errors.CodeBadRequest, "cron schedule is malformed: %s", err) + } + + if cronWf.Options.RuntimeGenerateName == "" { + return errors.Errorf(errors.CodeBadRequest, "runtimeGenerateName is empty") + } + + switch cronWf.Options.ConcurrencyPolicy { + case v2alpha1.AllowConcurrent, v2alpha1.ForbidConcurrent, v2alpha1.ReplaceConcurrent, "": + // Do nothing + default: + return errors.Errorf(errors.CodeBadRequest, "'%s' is not a valid concurrencyPolicy", cronWf.Options.ConcurrencyPolicy) + } + + if cronWf.Options.StartingDeadlineSeconds != nil && *cronWf.Options.StartingDeadlineSeconds < 0 { + return errors.Errorf(errors.CodeBadRequest, "startingDeadlineSeconds must be positive") + } + + ctx := newTemplateValidationCtx(wfClientset, namespace, nil, ValidateOpts{}) + wf, err := common.CastToWorkflow(cronWf) + if err != nil { + return errors.Errorf(errors.CodeBadRequest, "cannot convert to Workflow: %s", err) + } + tmplCtx := templateresolution.NewContextFromClientset(wfClientset.ArgoprojV1alpha1().WorkflowTemplates(namespace), wf) + + // Check if all templates can be resolved. + for _, template := range cronWf.Spec.Templates { + _, err := ctx.validateTemplateHolder(&wfv1.Template{Template: template.Name}, tmplCtx, &FakeArguments{}, map[string]interface{}{}) + if err != nil { + return errors.Errorf(errors.CodeBadRequest, "templates.%s %s", template.Name, err.Error()) + } + } + return nil +} + func (ctx *templateValidationCtx) validateTemplate(tmpl *wfv1.Template, tmplCtx *templateresolution.Context, args wfv1.ArgumentsProvider, extraScope map[string]interface{}) error { tmplID := getTemplateID(tmpl) _, ok := ctx.results[tmplID] From 0d2dce048702ed4ee0e4777af7a7f451f4a2444c Mon Sep 17 00:00:00 2001 From: Simon Behar Date: Fri, 15 Nov 2019 12:45:05 -0800 Subject: [PATCH 20/44] Done with CLI --- cmd/argo/commands/cron/lint.go | 65 ++++++++++++++++++++++++++++++ cmd/argo/commands/cron/root.go | 2 +- cmd/argo/commands/lint.go | 2 +- cmd/argo/commands/template/lint.go | 2 +- workflow/cron/operator.go | 1 - workflow/validate/lint.go | 56 +++++++++++++++++++++++++ 6 files changed, 124 insertions(+), 4 deletions(-) create mode 100644 cmd/argo/commands/cron/lint.go diff --git a/cmd/argo/commands/cron/lint.go b/cmd/argo/commands/cron/lint.go new file mode 100644 index 000000000000..1b3ab850336d --- /dev/null +++ b/cmd/argo/commands/cron/lint.go @@ -0,0 +1,65 @@ +package cron + +import ( + "fmt" + "os" + + log "github.com/sirupsen/logrus" + "github.com/spf13/cobra" + + cmdutil "github.com/argoproj/argo/util/cmd" + "github.com/argoproj/argo/workflow/validate" +) + +func NewLintCommand() *cobra.Command { + var ( + strict bool + ) + var command = &cobra.Command{ + Use: "lint (DIRECTORY | FILE1 FILE2 FILE3...)", + Short: "validate a file or directory of cron workflow manifests", + Run: func(cmd *cobra.Command, args []string) { + if len(args) == 0 { + cmd.HelpFunc()(cmd, args) + os.Exit(1) + } + + namespace, _, err := clientConfig.Namespace() + if err != nil { + log.Fatal(err) + } + + _ = InitCronWorkflowClient() + validateDir := cmdutil.MustIsDir(args[0]) + if validateDir { + if len(args) > 1 { + fmt.Printf("Validation of a single directory supported") + os.Exit(1) + } + fmt.Printf("Verifying all cron workflow manifests in directory: %s\n", args[0]) + err = validate.LintCronWorkflowDir(wfClientset, namespace, args[0], strict) + } else { + yamlFiles := make([]string, 0) + for _, filePath := range args { + if cmdutil.MustIsDir(filePath) { + fmt.Printf("Validate against a list of files or a single directory, not both") + os.Exit(1) + } + yamlFiles = append(yamlFiles, filePath) + } + for _, yamlFile := range yamlFiles { + err = validate.LintCronWorkflowFile(wfClientset, namespace, yamlFile, strict) + if err != nil { + break + } + } + } + if err != nil { + log.Fatal(err) + } + fmt.Printf("CronWorkflow manifests validated\n") + }, + } + command.Flags().BoolVar(&strict, "strict", true, "perform strict workflow validation") + return command +} diff --git a/cmd/argo/commands/cron/root.go b/cmd/argo/commands/cron/root.go index 68e336b21337..219d957dfdaa 100644 --- a/cmd/argo/commands/cron/root.go +++ b/cmd/argo/commands/cron/root.go @@ -20,7 +20,7 @@ func NewCronWorkflowCommand() *cobra.Command { command.AddCommand(NewListCommand()) command.AddCommand(NewCreateCommand()) command.AddCommand(NewDeleteCommand()) - //command.AddCommand(NewLintCommand()) + command.AddCommand(NewLintCommand()) addKubectlFlagsToCmd(command) return command diff --git a/cmd/argo/commands/lint.go b/cmd/argo/commands/lint.go index 297c3fa5fcb1..d896f8e0132c 100644 --- a/cmd/argo/commands/lint.go +++ b/cmd/argo/commands/lint.go @@ -60,6 +60,6 @@ func NewLintCommand() *cobra.Command { fmt.Printf("Workflow manifests validated\n") }, } - command.Flags().BoolVar(&strict, "strict", true, "perform strict workflow validatation") + command.Flags().BoolVar(&strict, "strict", true, "perform strict workflow validation") return command } diff --git a/cmd/argo/commands/template/lint.go b/cmd/argo/commands/template/lint.go index 33535b004caf..ff069a3805eb 100644 --- a/cmd/argo/commands/template/lint.go +++ b/cmd/argo/commands/template/lint.go @@ -60,6 +60,6 @@ func NewLintCommand() *cobra.Command { fmt.Printf("Workflow manifests validated\n") }, } - command.Flags().BoolVar(&strict, "strict", true, "perform strict workflow validatation") + command.Flags().BoolVar(&strict, "strict", true, "perform strict workflow validation") return command } diff --git a/workflow/cron/operator.go b/workflow/cron/operator.go index 1444d980c068..62c8a14a1fbd 100644 --- a/workflow/cron/operator.go +++ b/workflow/cron/operator.go @@ -2,7 +2,6 @@ package cron import ( "fmt" - "github.com/argoproj/argo/pkg/apis/workflow" "github.com/argoproj/argo/pkg/apis/workflow/v1alpha1" "github.com/argoproj/argo/pkg/client/clientset/versioned" typed "github.com/argoproj/argo/pkg/client/clientset/versioned/typed/workflow/v1alpha1" diff --git a/workflow/validate/lint.go b/workflow/validate/lint.go index 087ef5a7efb9..b75954006314 100644 --- a/workflow/validate/lint.go +++ b/workflow/validate/lint.go @@ -125,3 +125,59 @@ func LintWorkflowTemplateFile(wfClientset wfclientset.Interface, namespace, file } return nil } + +// LintCronWorkflowDir validates all cron workflow manifests in a directory. Ignores non-workflow template manifests +func LintCronWorkflowDir(wfClientset wfclientset.Interface, namespace, dirPath string, strict bool) error { + walkFunc := func(path string, info os.FileInfo, err error) error { + if info == nil || info.IsDir() { + return nil + } + fileExt := filepath.Ext(info.Name()) + switch fileExt { + case ".yaml", ".yml", ".json": + default: + return nil + } + return LintCronWorkflowFile(wfClientset, namespace, path, strict) + } + return filepath.Walk(dirPath, walkFunc) +} + +// LintCronWorkflowFile lints a json file, or multiple cron workflow manifest in a single yaml file. Ignores +// non-cron workflow manifests +func LintCronWorkflowFile(wfClientset wfclientset.Interface, namespace, filePath string, strict bool) error { + body, err := ioutil.ReadFile(filePath) + if err != nil { + return errors.Errorf(errors.CodeBadRequest, "Can't read from file: %s, err: %v", filePath, err) + } + var cronWorkflows []wfv1.CronWorkflow + if json.IsJSON(body) { + var cronWf wfv1.CronWorkflow + if strict { + err = json.UnmarshalStrict(body, &cronWf) + } else { + err = json.Unmarshal(body, &cronWf) + } + if err == nil { + cronWorkflows = []wfv1.CronWorkflow{cronWf} + } else { + if cronWf.Kind != "" && cronWf.Kind != workflow.CronWorkflowKind { + // If we get here, it was a k8s manifest which was not of type 'Workflow' + // We ignore these since we only care about validating Workflow manifests. + return nil + } + } + } else { + cronWorkflows, err = common.SplitCronWorkflowYAMLFile(body, strict) + } + if err != nil { + return errors.Errorf(errors.CodeBadRequest, "%s failed to parse: %v", filePath, err) + } + for _, cronWf := range cronWorkflows { + err = ValidateCronWorkflow(wfClientset, namespace, &cronWf) + if err != nil { + return errors.Errorf(errors.CodeBadRequest, "%s: %s", filePath, err.Error()) + } + } + return nil +} From d129c994bf25d87c6d4171134cb438cdd09ee1dc Mon Sep 17 00:00:00 2001 From: Simon Behar Date: Sun, 17 Nov 2019 15:15:20 -0800 Subject: [PATCH 21/44] WIP --- api/openapi-spec/swagger.json | 7 + cmd/argo/commands/cron/create.go | 2 +- pkg/apis/api-rules/violation_exceptions.list | 1 + .../workflow/v1alpha1/cron_workflow_types.go | 5 +- pkg/apis/workflow/v1alpha1/generated.pb.go | 677 ++++++++++-------- pkg/apis/workflow/v1alpha1/generated.proto | 5 +- .../workflow/v1alpha1/openapi_generated.go | 15 +- pkg/apis/workflow/v1alpha1/register.go | 2 + .../v1alpha1/zz_generated.deepcopy.go | 5 + workflow/common/common.go | 2 +- workflow/common/util.go | 8 +- workflow/cron/controller.go | 97 ++- workflow/cron/operator.go | 70 +- 13 files changed, 541 insertions(+), 355 deletions(-) diff --git a/api/openapi-spec/swagger.json b/api/openapi-spec/swagger.json index a66bbbef76af..1d4c93e8ef19 100644 --- a/api/openapi-spec/swagger.json +++ b/api/openapi-spec/swagger.json @@ -297,6 +297,13 @@ "io.argoproj.workflow.v1alpha1.CronWorkflowStatus": { "type": "object", "properties": { + "active": { + "description": "Active is a list of active workflows stemming from this CronWorkflow", + "type": "array", + "items": { + "$ref": "#/definitions/io.k8s.api.core.v1.ObjectReference" + } + }, "lastScheduledTime": { "description": "LastScheduleTime is the last time the CronWorkflow was scheduled", "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Time" diff --git a/cmd/argo/commands/cron/create.go b/cmd/argo/commands/cron/create.go index 7b6512ed5cfb..0269166ae71a 100644 --- a/cmd/argo/commands/cron/create.go +++ b/cmd/argo/commands/cron/create.go @@ -64,7 +64,7 @@ func CreateCronWorkflows(filePaths []string, cliOpts *cliCreateOpts) { for _, cronWf := range cronWorkflows { err := validate.ValidateCronWorkflow(wfClientset, namespace, &cronWf) if err != nil { - log.Fatalf("Failed to create cron workflow: %v", err) + log.Fatalf("Failed to validate cron workflow: %v", err) } cronWfClient := defaultCronWfClient if cronWf.Namespace != "" { diff --git a/pkg/apis/api-rules/violation_exceptions.list b/pkg/apis/api-rules/violation_exceptions.list index 2f7ddc168cd7..f280a573c1c8 100644 --- a/pkg/apis/api-rules/violation_exceptions.list +++ b/pkg/apis/api-rules/violation_exceptions.list @@ -1,6 +1,7 @@ API rule violation: list_type_missing,github.com/argoproj/argo/pkg/apis/workflow/v1alpha1,Arguments,Artifacts API rule violation: list_type_missing,github.com/argoproj/argo/pkg/apis/workflow/v1alpha1,Arguments,Parameters API rule violation: list_type_missing,github.com/argoproj/argo/pkg/apis/workflow/v1alpha1,CronWorkflowList,Items +API rule violation: list_type_missing,github.com/argoproj/argo/pkg/apis/workflow/v1alpha1,CronWorkflowStatus,Active API rule violation: list_type_missing,github.com/argoproj/argo/pkg/apis/workflow/v1alpha1,DAGTask,Dependencies API rule violation: list_type_missing,github.com/argoproj/argo/pkg/apis/workflow/v1alpha1,DAGTask,WithItems API rule violation: list_type_missing,github.com/argoproj/argo/pkg/apis/workflow/v1alpha1,DAGTemplate,Tasks diff --git a/pkg/apis/workflow/v1alpha1/cron_workflow_types.go b/pkg/apis/workflow/v1alpha1/cron_workflow_types.go index f028f4b4e27f..4e68df6b4427 100644 --- a/pkg/apis/workflow/v1alpha1/cron_workflow_types.go +++ b/pkg/apis/workflow/v1alpha1/cron_workflow_types.go @@ -2,6 +2,7 @@ package v1alpha1 import ( "k8s.io/api/batch/v2alpha1" + v1 "k8s.io/api/core/v1" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" ) @@ -26,8 +27,10 @@ type CronWorkflowList struct { } type CronWorkflowStatus struct { + // Active is a list of active workflows stemming from this CronWorkflow + Active []v1.ObjectReference `json:"active,omitempty" protobuf:"bytes,1,rep,name=active"` // LastScheduleTime is the last time the CronWorkflow was scheduled - LastScheduledTime *metav1.Time `json:"lastScheduledTime,omitempty" protobuf:"bytes,1,opt,name=lastScheduledTime"` + LastScheduledTime *metav1.Time `json:"lastScheduledTime,omitempty" protobuf:"bytes,2,opt,name=lastScheduledTime"` } // CronWorkflowOptions is the schedule of when to run CronWorkflows diff --git a/pkg/apis/workflow/v1alpha1/generated.pb.go b/pkg/apis/workflow/v1alpha1/generated.pb.go index c374291cf759..7da1c47e203c 100644 --- a/pkg/apis/workflow/v1alpha1/generated.pb.go +++ b/pkg/apis/workflow/v1alpha1/generated.pb.go @@ -1528,314 +1528,315 @@ func init() { } var fileDescriptor_c23edafa7e7ea072 = []byte{ - // 4902 bytes of a gzipped FileDescriptorProto + // 4922 bytes of a gzipped FileDescriptorProto 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xec, 0x5c, 0x4d, 0x6c, 0x64, 0x57, - 0x56, 0xee, 0xb2, 0x5d, 0xe5, 0xaa, 0x53, 0xfe, 0xeb, 0xeb, 0xee, 0x74, 0xc5, 0xe9, 0xb8, 0x7a, - 0x5e, 0x94, 0xd0, 0xc3, 0x24, 0xe5, 0xa4, 0x7b, 0x06, 0x32, 0x09, 0x49, 0xa6, 0xca, 0x7f, 0xed, - 0xee, 0xb6, 0xdb, 0x9c, 0x72, 0x77, 0x33, 0x64, 0xc4, 0x70, 0xfd, 0xea, 0xba, 0xea, 0xb5, 0xab, - 0xde, 0x7b, 0x79, 0xf7, 0x95, 0x1d, 0x2b, 0x0b, 0x02, 0x62, 0x04, 0x08, 0x8d, 0x04, 0x1b, 0x18, - 0x31, 0x1b, 0xc4, 0x02, 0x36, 0x6c, 0xd8, 0x02, 0x1a, 0x24, 0xc4, 0x22, 0x62, 0x43, 0xc4, 0x86, - 0x2c, 0x90, 0x35, 0x31, 0x1b, 0x10, 0x48, 0x48, 0x6c, 0x90, 0x7a, 0x85, 0xee, 0x7d, 0xf7, 0xdd, - 0xf7, 0x53, 0xcf, 0x89, 0xbb, 0xca, 0xdd, 0x08, 0x66, 0x56, 0xed, 0x3a, 0xe7, 0xdc, 0xef, 0xdc, - 0xdf, 0x73, 0xcf, 0x39, 0xf7, 0xbc, 0x86, 0xe5, 0xb6, 0xe5, 0x77, 0xfa, 0xbb, 0x35, 0xd3, 0xe9, - 0x2d, 0x51, 0xaf, 0xed, 0xb8, 0x9e, 0xf3, 0x48, 0xfe, 0xb1, 0xe4, 0xee, 0xb7, 0x97, 0xa8, 0x6b, - 0xf1, 0xa5, 0x43, 0xc7, 0xdb, 0xdf, 0xeb, 0x3a, 0x87, 0x4b, 0x07, 0x6f, 0xd0, 0xae, 0xdb, 0xa1, - 0x6f, 0x2c, 0xb5, 0x99, 0xcd, 0x3c, 0xea, 0xb3, 0x56, 0xcd, 0xf5, 0x1c, 0xdf, 0x21, 0x37, 0x23, - 0x90, 0x5a, 0x08, 0x22, 0xff, 0xa8, 0xb9, 0xfb, 0xed, 0x9a, 0x00, 0xa9, 0x85, 0x20, 0xb5, 0x10, - 0x64, 0xe1, 0xb5, 0x98, 0xe6, 0xb6, 0x23, 0x14, 0x0a, 0xac, 0xdd, 0xfe, 0x9e, 0xfc, 0x25, 0x7f, - 0xc8, 0xbf, 0x02, 0x1d, 0x0b, 0xc6, 0xfe, 0x9b, 0xbc, 0x66, 0x39, 0xa2, 0x4b, 0x4b, 0xa6, 0xe3, - 0xb1, 0xa5, 0x83, 0x81, 0x7e, 0x2c, 0x7c, 0x3d, 0x92, 0xe9, 0x51, 0xb3, 0x63, 0xd9, 0xcc, 0x3b, - 0x8a, 0xc6, 0xd1, 0x63, 0x3e, 0xcd, 0x6a, 0xb5, 0x74, 0x5a, 0x2b, 0xaf, 0x6f, 0xfb, 0x56, 0x8f, - 0x0d, 0x34, 0xf8, 0xb9, 0x2f, 0x6b, 0xc0, 0xcd, 0x0e, 0xeb, 0xd1, 0x74, 0x3b, 0xe3, 0x1f, 0x72, - 0x30, 0x5b, 0xf7, 0xcc, 0x8e, 0x75, 0xc0, 0x9a, 0xbe, 0x60, 0xb4, 0x8f, 0xc8, 0xfb, 0x30, 0xee, - 0x53, 0xaf, 0x92, 0xbb, 0x96, 0xbb, 0x5e, 0xbe, 0xf1, 0xad, 0xda, 0x10, 0x13, 0x59, 0xdb, 0xa1, - 0x5e, 0x08, 0xd7, 0x98, 0x3c, 0x39, 0xae, 0x8e, 0xef, 0x50, 0x0f, 0x05, 0x2a, 0xf9, 0x2e, 0x4c, - 0xd8, 0x8e, 0xcd, 0x2a, 0x63, 0x12, 0xbd, 0x3e, 0x14, 0xfa, 0x96, 0x63, 0xeb, 0xde, 0x36, 0x8a, - 0x27, 0xc7, 0xd5, 0x09, 0x41, 0x41, 0x09, 0x6c, 0xfc, 0x67, 0x0e, 0x4a, 0x75, 0xaf, 0xdd, 0xef, - 0x31, 0xdb, 0xe7, 0xc4, 0x03, 0x70, 0xa9, 0x47, 0x7b, 0xcc, 0x67, 0x1e, 0xaf, 0xe4, 0xae, 0x8d, - 0x5f, 0x2f, 0xdf, 0x78, 0x77, 0x28, 0xa5, 0xdb, 0x21, 0x4c, 0x83, 0x7c, 0x72, 0x5c, 0xbd, 0x70, - 0x72, 0x5c, 0x05, 0x4d, 0xe2, 0x18, 0xd3, 0x42, 0x6c, 0x28, 0x51, 0xcf, 0xb7, 0xf6, 0xa8, 0xe9, - 0xf3, 0xca, 0x98, 0x54, 0xf9, 0xce, 0x50, 0x2a, 0xeb, 0x0a, 0xa5, 0x71, 0x51, 0x69, 0x2c, 0x85, - 0x14, 0x8e, 0x91, 0x0a, 0xe3, 0xdf, 0xc7, 0xa1, 0x18, 0x32, 0xc8, 0x35, 0x98, 0xb0, 0x69, 0x8f, - 0xc9, 0xd5, 0x2b, 0x35, 0xa6, 0x54, 0xc3, 0x89, 0x2d, 0xda, 0x13, 0x13, 0x44, 0x7b, 0x4c, 0x48, - 0xb8, 0xd4, 0xef, 0xc8, 0x15, 0x88, 0x49, 0x6c, 0x53, 0xbf, 0x83, 0x92, 0x43, 0xae, 0xc2, 0x44, - 0xcf, 0x69, 0xb1, 0xca, 0xf8, 0xb5, 0xdc, 0xf5, 0x7c, 0x30, 0xc1, 0x9b, 0x4e, 0x8b, 0xa1, 0xa4, - 0x8a, 0xf6, 0x7b, 0x9e, 0xd3, 0xab, 0x4c, 0x24, 0xdb, 0xaf, 0x79, 0x4e, 0x0f, 0x25, 0x87, 0xfc, - 0x6e, 0x0e, 0xe6, 0xc2, 0xee, 0xdd, 0x75, 0x4c, 0xea, 0x5b, 0x8e, 0x5d, 0xc9, 0xcb, 0x05, 0x5f, - 0x1d, 0x69, 0x22, 0x42, 0xb0, 0x46, 0x45, 0x69, 0x9d, 0x4b, 0x73, 0x70, 0x40, 0x31, 0xb9, 0x01, - 0xd0, 0xee, 0x3a, 0xbb, 0xb4, 0x2b, 0xe6, 0xa0, 0x52, 0x90, 0xbd, 0xd6, 0x4b, 0xb8, 0xae, 0x39, - 0x18, 0x93, 0x22, 0xfb, 0x30, 0x49, 0x83, 0x53, 0x51, 0x99, 0x94, 0xfd, 0x5e, 0x19, 0xb2, 0xdf, - 0x89, 0x93, 0xd5, 0x28, 0x9f, 0x1c, 0x57, 0x27, 0x15, 0x11, 0x43, 0x0d, 0xe4, 0x55, 0x28, 0x3a, - 0xae, 0xe8, 0x2a, 0xed, 0x56, 0x8a, 0xd7, 0x72, 0xd7, 0x8b, 0x8d, 0x39, 0xd5, 0xbd, 0xe2, 0x3d, - 0x45, 0x47, 0x2d, 0x61, 0xfc, 0x61, 0x1e, 0x06, 0x46, 0x4d, 0xde, 0x80, 0xb2, 0x42, 0xbb, 0xeb, - 0xb4, 0xb9, 0x5c, 0xfc, 0x62, 0x63, 0xf6, 0xe4, 0xb8, 0x5a, 0xae, 0x47, 0x64, 0x8c, 0xcb, 0x90, - 0x87, 0x30, 0xc6, 0x6f, 0xaa, 0x63, 0xf8, 0xde, 0x50, 0xa3, 0x6b, 0xde, 0xd4, 0x1b, 0xb4, 0x70, - 0x72, 0x5c, 0x1d, 0x6b, 0xde, 0xc4, 0x31, 0x7e, 0x53, 0x98, 0x8f, 0xb6, 0xe5, 0xcb, 0xcd, 0x33, - 0xac, 0xf9, 0x58, 0xb7, 0x7c, 0x0d, 0x2d, 0xcd, 0xc7, 0xba, 0xe5, 0xa3, 0x40, 0x15, 0xe6, 0xa3, - 0xe3, 0xfb, 0xae, 0xdc, 0x7c, 0xc3, 0x9a, 0x8f, 0x5b, 0x3b, 0x3b, 0xdb, 0x1a, 0x5e, 0xee, 0x6e, - 0x41, 0x41, 0x09, 0x4c, 0x3e, 0x12, 0x33, 0x19, 0xf0, 0x1c, 0xef, 0x48, 0xed, 0xda, 0x5b, 0x23, - 0xed, 0x5a, 0xc7, 0x3b, 0xd2, 0xea, 0xd4, 0x9a, 0x68, 0x06, 0xc6, 0xb5, 0xc9, 0xd1, 0xb5, 0xf6, - 0xb8, 0xdc, 0xa4, 0x43, 0x8f, 0x6e, 0x65, 0xad, 0x99, 0x1a, 0xdd, 0xca, 0x5a, 0x13, 0x25, 0xb0, - 0x58, 0x1b, 0x8f, 0x1e, 0xaa, 0x3d, 0x3d, 0xdc, 0xda, 0x20, 0x3d, 0x4c, 0xae, 0x0d, 0xd2, 0x43, - 0x14, 0xa8, 0x46, 0x1b, 0x2e, 0x87, 0x1c, 0x64, 0xae, 0xc3, 0x2d, 0x39, 0x40, 0xb6, 0x47, 0x96, - 0xa0, 0x64, 0x3a, 0xf6, 0x9e, 0xd5, 0xde, 0xa4, 0xae, 0x32, 0x4c, 0xda, 0xa2, 0x2d, 0x87, 0x0c, - 0x8c, 0x64, 0xc8, 0x8b, 0x30, 0xbe, 0xcf, 0x8e, 0x94, 0x85, 0x2a, 0x2b, 0xd1, 0xf1, 0x3b, 0xec, - 0x08, 0x05, 0xdd, 0xf8, 0x51, 0x0e, 0xe6, 0x33, 0x26, 0x57, 0x34, 0xeb, 0x7b, 0x5d, 0xa5, 0x41, - 0x37, 0xbb, 0x8f, 0x77, 0x51, 0xd0, 0xc9, 0x6f, 0xe5, 0x60, 0x36, 0x36, 0xdb, 0xf5, 0xbe, 0x32, - 0x82, 0xc3, 0x9f, 0xee, 0x04, 0x56, 0xe3, 0x8a, 0xd2, 0x38, 0x9b, 0x62, 0x60, 0x5a, 0xab, 0xf1, - 0x4f, 0xf2, 0xd6, 0x4d, 0xd0, 0x08, 0x85, 0x99, 0x3e, 0x67, 0x9e, 0x30, 0xd1, 0x4d, 0x66, 0x7a, - 0xcc, 0x57, 0x17, 0xf0, 0xcb, 0xb5, 0xe0, 0x6a, 0x17, 0xbd, 0xa8, 0x09, 0x2f, 0xa3, 0x76, 0xf0, - 0x46, 0x2d, 0x90, 0xb8, 0xc3, 0x8e, 0x9a, 0xac, 0xcb, 0x04, 0x46, 0x83, 0x9c, 0x1c, 0x57, 0x67, - 0xee, 0x27, 0x00, 0x30, 0x05, 0x28, 0x54, 0xb8, 0x94, 0xf3, 0x43, 0xc7, 0x6b, 0x29, 0x15, 0x63, - 0x4f, 0xac, 0x62, 0x3b, 0x01, 0x80, 0x29, 0x40, 0xe3, 0xdb, 0x00, 0xcb, 0x8e, 0xed, 0x5b, 0x76, - 0x9f, 0xdd, 0xb3, 0xc9, 0x4b, 0x90, 0x67, 0x9e, 0xe7, 0x78, 0xca, 0x20, 0x4d, 0xab, 0x09, 0xca, - 0xaf, 0x0a, 0x22, 0x06, 0x3c, 0xf2, 0x0a, 0x14, 0xf6, 0xa8, 0xd5, 0x65, 0x2d, 0xd9, 0x9b, 0x62, - 0x63, 0x46, 0x49, 0x15, 0xd6, 0x24, 0x15, 0x15, 0xd7, 0xf8, 0xab, 0x71, 0x98, 0x5a, 0xf6, 0x1c, - 0xfb, 0xa1, 0x5a, 0x08, 0xf2, 0xab, 0x50, 0x14, 0xfe, 0x53, 0x8b, 0xfa, 0x54, 0xcd, 0xd5, 0xeb, - 0xb1, 0x81, 0x68, 0x37, 0x28, 0x5a, 0x42, 0x21, 0x2d, 0x86, 0x76, 0x6f, 0xf7, 0x11, 0x33, 0xfd, - 0x4d, 0xe6, 0xd3, 0xe8, 0x22, 0x88, 0x68, 0xa8, 0x51, 0x89, 0x09, 0x13, 0xdc, 0x65, 0xe6, 0x48, - 0xce, 0x4a, 0xd8, 0xdd, 0xa6, 0xcb, 0xcc, 0xe8, 0xb6, 0x14, 0xbf, 0x50, 0x82, 0x13, 0x07, 0x0a, - 0xdc, 0xa7, 0x7e, 0x9f, 0x2b, 0x93, 0xb9, 0x3e, 0x94, 0x9a, 0xf8, 0xcc, 0x34, 0x25, 0x5c, 0x34, - 0x91, 0xc1, 0x6f, 0x54, 0x6a, 0x08, 0x87, 0xc9, 0xe0, 0x36, 0xe1, 0xca, 0x8c, 0xde, 0x1a, 0x59, - 0x63, 0x70, 0x4f, 0xf1, 0xc6, 0xac, 0x52, 0x39, 0xa9, 0x08, 0x18, 0x6a, 0x32, 0x3e, 0xcb, 0xc1, - 0x5c, 0xbc, 0xc5, 0x5d, 0x8b, 0xfb, 0xe4, 0x3b, 0x03, 0x2b, 0x58, 0x3b, 0xdb, 0x0a, 0x8a, 0xd6, - 0x72, 0xfd, 0xf4, 0x4d, 0x19, 0x52, 0x62, 0xab, 0xb7, 0x07, 0x79, 0xcb, 0x67, 0xbd, 0xd0, 0x07, - 0xab, 0x8f, 0x3c, 0xca, 0x68, 0x03, 0x6f, 0x08, 0x5c, 0x0c, 0xe0, 0x8d, 0x7f, 0x1c, 0x87, 0xf9, - 0x8c, 0xc9, 0x10, 0xf7, 0xba, 0xf0, 0xba, 0x5b, 0xfd, 0x6e, 0xe8, 0x8e, 0xe9, 0xde, 0x36, 0x15, - 0x1d, 0xb5, 0x04, 0x59, 0x81, 0x39, 0xe5, 0xab, 0x0b, 0x0f, 0x84, 0xbb, 0xd4, 0x64, 0xca, 0x00, - 0x6a, 0x67, 0x07, 0x53, 0x7c, 0x1c, 0x68, 0x41, 0x36, 0x61, 0x5e, 0xd1, 0xd6, 0x95, 0xa7, 0x2f, - 0xbd, 0x9e, 0x71, 0x09, 0xf4, 0x82, 0x02, 0x9a, 0xc7, 0x41, 0x11, 0xcc, 0x6a, 0x47, 0x0e, 0xe0, - 0xa2, 0xe9, 0xd8, 0x66, 0xdf, 0xf3, 0x98, 0x6d, 0x1e, 0x6d, 0x3b, 0x5d, 0xcb, 0x3c, 0x52, 0x8e, - 0xdf, 0x2d, 0x05, 0x76, 0x71, 0x39, 0x2d, 0xf0, 0xf8, 0xb8, 0xfa, 0xb5, 0x58, 0x64, 0xb4, 0x4b, - 0x7d, 0xb3, 0xb3, 0x74, 0x70, 0x23, 0x9c, 0xd0, 0xb4, 0x38, 0x0e, 0xaa, 0x20, 0x5f, 0x85, 0x49, - 0xde, 0xe7, 0x2e, 0xb3, 0x5b, 0xf2, 0x06, 0x2e, 0x46, 0x1b, 0xab, 0x19, 0x90, 0x31, 0xe4, 0x93, - 0xfb, 0x70, 0x85, 0xfb, 0xc2, 0xc0, 0xda, 0xed, 0x15, 0x46, 0x5b, 0x5d, 0xcb, 0x16, 0xe6, 0xce, - 0xb1, 0x5b, 0xc1, 0x35, 0x3a, 0xde, 0x78, 0xe1, 0xe4, 0xb8, 0x7a, 0xa5, 0x99, 0x2d, 0x82, 0xa7, - 0xb5, 0x35, 0xbe, 0x97, 0x03, 0x32, 0x78, 0xa6, 0x88, 0x03, 0x17, 0xbb, 0x94, 0xfb, 0xe1, 0xfa, - 0xb5, 0x76, 0x2c, 0xe5, 0x6b, 0x97, 0x6f, 0xfc, 0xec, 0xd9, 0xb6, 0xae, 0x68, 0xd1, 0xb8, 0x2c, - 0x26, 0xee, 0x6e, 0x1a, 0x08, 0x07, 0xb1, 0x8d, 0x3f, 0x2a, 0xc0, 0xe4, 0x4a, 0x7d, 0x7d, 0x87, - 0xf2, 0xfd, 0x33, 0xf8, 0xf6, 0xaf, 0x42, 0xd1, 0x67, 0x3d, 0xb7, 0x4b, 0xfd, 0x70, 0xf3, 0xe8, - 0x2d, 0xb7, 0xa3, 0xe8, 0xa8, 0x25, 0x88, 0x23, 0x02, 0x15, 0x15, 0x29, 0x29, 0xe3, 0xf3, 0xee, - 0x90, 0x37, 0xa1, 0x42, 0x89, 0x47, 0x2a, 0x8a, 0x84, 0x91, 0x0e, 0xc2, 0xa1, 0x1c, 0x2a, 0x47, - 0xb6, 0xa7, 0xac, 0xcf, 0x90, 0x11, 0x66, 0x84, 0x13, 0x38, 0x55, 0x31, 0x02, 0xc6, 0xb5, 0x90, - 0xaf, 0xc3, 0x54, 0x8b, 0x89, 0xad, 0xc2, 0x6c, 0xd3, 0x62, 0xbc, 0x92, 0xbf, 0x36, 0x2e, 0xe6, - 0xe5, 0xe4, 0xb8, 0x3a, 0xb5, 0x12, 0xa3, 0x63, 0x42, 0x8a, 0x3c, 0x82, 0xd2, 0xa1, 0xe5, 0x77, - 0xe4, 0x41, 0xaf, 0x14, 0xa4, 0x01, 0xf9, 0xe6, 0x50, 0x1d, 0x15, 0x08, 0xd1, 0xb4, 0x3c, 0x0c, - 0x31, 0x31, 0x82, 0x17, 0xfe, 0x91, 0xf8, 0x21, 0xc3, 0x49, 0xe9, 0x9b, 0x95, 0x92, 0x0d, 0x24, - 0x03, 0x23, 0x19, 0xc2, 0x61, 0x4a, 0xfc, 0x68, 0xb2, 0x0f, 0xfa, 0xcc, 0x36, 0x99, 0x8c, 0x1a, - 0x86, 0x0d, 0x32, 0x43, 0x90, 0x60, 0x46, 0x1e, 0xc6, 0x60, 0x31, 0xa1, 0x44, 0xec, 0xbe, 0xc3, - 0x0e, 0xb3, 0x2b, 0xa5, 0xe4, 0xee, 0x7b, 0xd8, 0x61, 0x36, 0x4a, 0x0e, 0x71, 0x00, 0x4c, 0x7d, - 0xf9, 0x57, 0x60, 0x84, 0xd0, 0x22, 0xf2, 0x21, 0x1a, 0x33, 0xe2, 0x76, 0x8e, 0x7e, 0x63, 0x4c, - 0x85, 0xf1, 0xb7, 0x39, 0x28, 0x8b, 0xc3, 0x11, 0x6e, 0xe8, 0x57, 0xa0, 0xe0, 0x53, 0xaf, 0xad, - 0x7c, 0xa7, 0x52, 0x74, 0x03, 0xee, 0x48, 0x2a, 0x2a, 0x2e, 0xa1, 0x90, 0xf7, 0x29, 0xdf, 0x0f, - 0x6f, 0x86, 0x5f, 0x18, 0xaa, 0x8f, 0xea, 0x54, 0x46, 0x97, 0x82, 0xf8, 0xc5, 0x31, 0x40, 0x26, - 0xd7, 0xa1, 0x28, 0xfc, 0x96, 0x35, 0xca, 0x83, 0x50, 0xa8, 0xd8, 0x98, 0x12, 0xa7, 0x70, 0x4d, - 0xd1, 0x50, 0x73, 0x8d, 0xef, 0xc0, 0xcc, 0xea, 0x87, 0xcc, 0xec, 0xfb, 0x8e, 0x17, 0x38, 0xc3, - 0xe4, 0x36, 0x10, 0xce, 0xbc, 0x03, 0xcb, 0x64, 0x75, 0xd3, 0x74, 0xfa, 0xb6, 0xbf, 0x15, 0x9d, - 0xfa, 0x05, 0xa5, 0x8d, 0x34, 0x07, 0x24, 0x30, 0xa3, 0x95, 0xf1, 0xe7, 0x13, 0x50, 0x8e, 0x85, - 0x53, 0x62, 0x15, 0x3d, 0xe6, 0x3a, 0x69, 0x1b, 0x22, 0x1c, 0x76, 0x94, 0x1c, 0x61, 0x43, 0x3c, - 0x76, 0x60, 0x71, 0x11, 0xb4, 0xa7, 0x6c, 0x08, 0x2a, 0x3a, 0x6a, 0x09, 0x52, 0x85, 0x7c, 0x8b, - 0xb9, 0x7e, 0x47, 0x0e, 0x72, 0xa2, 0x51, 0x12, 0x13, 0xb1, 0x22, 0x08, 0x18, 0xd0, 0x85, 0xc0, - 0x1e, 0xf3, 0xcd, 0x4e, 0x65, 0x42, 0x9e, 0x3b, 0x29, 0xb0, 0x26, 0x08, 0x18, 0xd0, 0x33, 0x1c, - 0xdf, 0xfc, 0xd3, 0x77, 0x7c, 0x0b, 0xe7, 0xec, 0xf8, 0x12, 0x17, 0xe6, 0x39, 0xef, 0x6c, 0x7b, - 0xd6, 0x01, 0xf5, 0x99, 0x6c, 0x2c, 0xf5, 0x4c, 0x3e, 0x89, 0x9e, 0x2b, 0xe2, 0x6e, 0x6e, 0x36, - 0x6f, 0xa5, 0x51, 0x30, 0x0b, 0x9a, 0x34, 0xe1, 0xb2, 0x65, 0x73, 0x66, 0xf6, 0x3d, 0xb6, 0xd1, - 0xb6, 0x1d, 0x8f, 0xdd, 0x72, 0xb8, 0x80, 0x53, 0x39, 0x84, 0x17, 0xd5, 0xa2, 0x5d, 0xde, 0xc8, - 0x12, 0xc2, 0xec, 0xb6, 0xc6, 0xdf, 0xe7, 0x60, 0x2a, 0x1e, 0x41, 0x12, 0x0e, 0xd0, 0x59, 0x59, - 0x6b, 0x06, 0x3b, 0x53, 0xdd, 0x74, 0xef, 0x0d, 0x1d, 0x98, 0x06, 0x30, 0x91, 0xd7, 0x1d, 0xd1, - 0x30, 0xa6, 0xe6, 0x0c, 0x29, 0xaa, 0x97, 0x20, 0xbf, 0xe7, 0x78, 0x26, 0x53, 0x67, 0x4b, 0x9f, - 0xc1, 0x35, 0x41, 0xc4, 0x80, 0x67, 0xfc, 0x6b, 0x0e, 0x62, 0x1a, 0xc8, 0xaf, 0xc1, 0xb4, 0xd0, - 0x71, 0xc7, 0xdb, 0x4d, 0x8c, 0xa6, 0x31, 0xf4, 0x68, 0x34, 0x52, 0xe3, 0xb2, 0xd2, 0x3f, 0x9d, - 0x20, 0x63, 0x52, 0x1f, 0xf9, 0x1a, 0x94, 0x68, 0xab, 0xe5, 0x31, 0xce, 0x59, 0x60, 0x7a, 0x4a, - 0x8d, 0x69, 0x79, 0x57, 0x86, 0x44, 0x8c, 0xf8, 0xe2, 0x18, 0x8a, 0x90, 0x5d, 0xec, 0x6c, 0xe5, - 0xbe, 0xe9, 0x63, 0x28, 0x94, 0x08, 0x3a, 0x6a, 0x09, 0xe3, 0xfb, 0x13, 0x90, 0xd4, 0x4d, 0x5a, - 0x30, 0xbb, 0xef, 0xed, 0x2e, 0x2f, 0x53, 0xb3, 0x33, 0x54, 0x40, 0x39, 0x2f, 0x22, 0xd9, 0x3b, - 0x49, 0x04, 0x4c, 0x43, 0x2a, 0x2d, 0x77, 0xd8, 0x91, 0x4f, 0x77, 0x87, 0x89, 0x29, 0x43, 0x2d, - 0x71, 0x04, 0x4c, 0x43, 0x92, 0x6f, 0x40, 0x79, 0xdf, 0xdb, 0x0d, 0x0f, 0xb9, 0x9a, 0x8e, 0x79, - 0x35, 0x1d, 0xe5, 0x3b, 0x11, 0x0b, 0xe3, 0x72, 0x62, 0x0a, 0xf7, 0xbd, 0x5d, 0x64, 0xb4, 0x1b, - 0x66, 0x2b, 0xf5, 0x14, 0xde, 0x51, 0x74, 0xd4, 0x12, 0xc4, 0x05, 0xb2, 0x1f, 0xce, 0x9e, 0xce, - 0x4a, 0x28, 0x5b, 0x74, 0x3d, 0x6b, 0x34, 0x5a, 0x28, 0x3e, 0xa0, 0xe7, 0x84, 0x6d, 0xbe, 0x33, - 0x80, 0x83, 0x19, 0xd8, 0xe4, 0xdb, 0x70, 0x65, 0xdf, 0xdb, 0x55, 0x86, 0x7c, 0xdb, 0xb3, 0x6c, - 0xd3, 0x72, 0x13, 0x69, 0xca, 0xaa, 0xea, 0xee, 0x95, 0x3b, 0xd9, 0x62, 0x78, 0x5a, 0x7b, 0xe3, - 0x35, 0x98, 0x8a, 0xa7, 0xb9, 0xbe, 0x24, 0x35, 0x62, 0xfc, 0x47, 0x0e, 0x0a, 0x1b, 0xb6, 0xdb, - 0xff, 0x09, 0xc9, 0x98, 0xff, 0xc9, 0x04, 0x4c, 0x08, 0xd7, 0x8b, 0x5c, 0x87, 0x09, 0xff, 0xc8, - 0x0d, 0xee, 0xd6, 0xf1, 0xc6, 0xa5, 0xd0, 0xd0, 0xec, 0x1c, 0xb9, 0xec, 0xb1, 0xfa, 0x17, 0xa5, - 0x04, 0x79, 0x17, 0x0a, 0x76, 0xbf, 0xf7, 0x80, 0x76, 0x95, 0x51, 0x7a, 0x25, 0x74, 0x2d, 0xb6, - 0x24, 0xf5, 0xf1, 0x71, 0xf5, 0x12, 0xb3, 0x4d, 0xa7, 0x65, 0xd9, 0xed, 0xa5, 0x47, 0xdc, 0xb1, - 0x6b, 0x5b, 0xfd, 0xde, 0x2e, 0xf3, 0x50, 0xb5, 0x12, 0x11, 0xcd, 0xae, 0xe3, 0x74, 0x05, 0xc0, - 0x78, 0x32, 0xa2, 0x69, 0x04, 0x64, 0x0c, 0xf9, 0xc2, 0x8b, 0xe1, 0xbe, 0x27, 0x24, 0x27, 0x92, - 0x5e, 0x4c, 0x53, 0x52, 0x51, 0x71, 0x49, 0x0f, 0x0a, 0x3d, 0xea, 0x0a, 0xb9, 0xbc, 0x9c, 0xb2, - 0xd5, 0xa1, 0xfd, 0xd3, 0xda, 0xa6, 0xc4, 0x59, 0xb5, 0x7d, 0xef, 0x28, 0x52, 0x17, 0x10, 0x51, - 0x29, 0x21, 0x16, 0x4c, 0x76, 0x2d, 0xee, 0x0b, 0x7d, 0x85, 0x11, 0x76, 0x85, 0xd0, 0xf7, 0x80, - 0x76, 0xfb, 0x2c, 0x9a, 0x81, 0xbb, 0x01, 0x2c, 0x86, 0xf8, 0x0b, 0x47, 0x50, 0x8e, 0xf5, 0x88, - 0xcc, 0x05, 0xe9, 0x40, 0xb9, 0x79, 0x65, 0x06, 0x90, 0xec, 0x40, 0xfe, 0x40, 0x60, 0x28, 0x63, - 0x33, 0x62, 0x4f, 0x30, 0x00, 0x7b, 0x6b, 0xec, 0xcd, 0xdc, 0x5b, 0xc5, 0x1f, 0xfc, 0x71, 0xf5, - 0xc2, 0xc7, 0xff, 0x7c, 0xed, 0x82, 0xf1, 0x77, 0xe3, 0x50, 0xd2, 0x22, 0xff, 0xb7, 0x77, 0x8a, - 0x97, 0xda, 0x29, 0xb7, 0x47, 0x9b, 0xaf, 0x33, 0x6d, 0x97, 0x7a, 0x72, 0xbb, 0x4c, 0x35, 0x7e, - 0x26, 0xb6, 0xd4, 0x8f, 0x8f, 0xab, 0x95, 0xe4, 0x24, 0x20, 0x3d, 0xdc, 0x64, 0x9c, 0xd3, 0x36, - 0x8b, 0xb6, 0xc1, 0x37, 0xbf, 0x6c, 0x1b, 0x5c, 0x8a, 0x6f, 0x83, 0x52, 0xf6, 0x32, 0x7e, 0x3c, - 0x0e, 0xc5, 0xcd, 0x30, 0x25, 0xf4, 0xbd, 0x1c, 0x94, 0xa9, 0x6d, 0x3b, 0x3e, 0x0d, 0xf2, 0x5f, - 0x81, 0x79, 0xdb, 0x1a, 0x6a, 0x3a, 0x42, 0xd0, 0x5a, 0x3d, 0x02, 0x0c, 0xa6, 0x44, 0xdf, 0x4c, - 0x31, 0x0e, 0xc6, 0xf5, 0x92, 0x0f, 0xa0, 0xd0, 0xa5, 0xbb, 0xac, 0x1b, 0x5a, 0xbb, 0x8d, 0xd1, - 0x7a, 0x70, 0x57, 0x62, 0xa5, 0xd6, 0x23, 0x20, 0xa2, 0x52, 0xb4, 0xf0, 0x2e, 0xcc, 0xa5, 0x3b, - 0xfa, 0x24, 0x33, 0x2a, 0x16, 0x23, 0xa6, 0xe6, 0x49, 0x9a, 0x1a, 0x7f, 0x5d, 0x02, 0xd8, 0x72, - 0x5a, 0x4c, 0xe5, 0x50, 0x16, 0x60, 0xcc, 0x6a, 0xa9, 0xab, 0x08, 0x54, 0x6f, 0xc7, 0x36, 0x56, - 0x70, 0xcc, 0x6a, 0xe9, 0x14, 0xc7, 0xd8, 0xa9, 0x29, 0x8e, 0x6f, 0x40, 0xb9, 0x65, 0x71, 0xb7, - 0x4b, 0x8f, 0xb6, 0x32, 0x7c, 0x81, 0x95, 0x88, 0x85, 0x71, 0x39, 0xf2, 0xaa, 0x3a, 0xbf, 0x13, - 0x89, 0x94, 0x5a, 0x78, 0x7e, 0x8b, 0xa2, 0x7b, 0xb1, 0x33, 0xfc, 0x26, 0x4c, 0x85, 0x29, 0x04, - 0xa9, 0x25, 0x2f, 0x5b, 0x85, 0xa7, 0x7e, 0x6a, 0x27, 0xc6, 0xc3, 0x84, 0x64, 0x3a, 0xc5, 0x51, - 0x78, 0x26, 0x29, 0x8e, 0x15, 0x98, 0xe3, 0xbe, 0xe3, 0xb1, 0x56, 0x28, 0xb1, 0xb1, 0x52, 0x21, - 0xc9, 0xdc, 0x61, 0x33, 0xc5, 0xc7, 0x81, 0x16, 0x64, 0x1b, 0x2e, 0x85, 0x9d, 0x88, 0x0f, 0xb0, - 0x32, 0x2f, 0x91, 0xae, 0x2a, 0xa4, 0x4b, 0x0f, 0x33, 0x64, 0x30, 0xb3, 0x25, 0x79, 0x1d, 0xf2, - 0x6e, 0x87, 0x72, 0xa6, 0x92, 0x1a, 0x61, 0xec, 0x9a, 0xdf, 0x16, 0xc4, 0xc7, 0xc7, 0xd5, 0x92, - 0x98, 0x76, 0xf9, 0x03, 0x03, 0x41, 0x72, 0x03, 0x60, 0xd7, 0xe9, 0xdb, 0x2d, 0xea, 0x1d, 0x6d, - 0xac, 0xc8, 0x48, 0x26, 0xf6, 0x58, 0xdb, 0xd0, 0x1c, 0x8c, 0x49, 0x09, 0x83, 0xd9, 0x0b, 0x4c, - 0x87, 0xca, 0x4d, 0x68, 0x83, 0xa9, 0x2d, 0x8a, 0xe2, 0x93, 0xf7, 0xa1, 0x24, 0x13, 0x7e, 0xac, - 0x55, 0xf7, 0x55, 0x82, 0xe2, 0x49, 0xd2, 0x76, 0xda, 0xab, 0x68, 0x86, 0x20, 0x18, 0xe1, 0x91, - 0x5f, 0x01, 0xd8, 0xb3, 0x6c, 0x8b, 0x77, 0x24, 0x7a, 0xf9, 0x89, 0xd1, 0xf5, 0x38, 0xd7, 0x34, - 0x0a, 0xc6, 0x10, 0x45, 0xcc, 0xe3, 0x3a, 0xad, 0x8d, 0xed, 0xca, 0x94, 0x1c, 0xa5, 0x8e, 0x79, - 0xb6, 0x05, 0x11, 0x03, 0x1e, 0xb9, 0x0e, 0xc5, 0x16, 0x65, 0x3d, 0xc7, 0x66, 0xad, 0xca, 0x74, - 0x94, 0x77, 0x58, 0x51, 0x34, 0xd4, 0x5c, 0xf2, 0x5d, 0x28, 0x58, 0xd2, 0xe5, 0xab, 0xcc, 0xc8, - 0xae, 0xbe, 0x3d, 0xdc, 0xa5, 0x20, 0x21, 0x1a, 0x20, 0x2c, 0x4e, 0xf0, 0x37, 0x2a, 0x58, 0x62, - 0xc2, 0xa4, 0xd3, 0xf7, 0xa5, 0x86, 0x59, 0xa9, 0x61, 0xb8, 0x3c, 0xcb, 0xbd, 0x00, 0x23, 0x78, - 0x3c, 0x57, 0x3f, 0x30, 0x44, 0x16, 0xe3, 0x35, 0x3b, 0x56, 0xb7, 0xe5, 0x31, 0xbb, 0x32, 0x27, - 0x43, 0x2a, 0x39, 0xde, 0x65, 0x45, 0x43, 0xcd, 0x25, 0x3f, 0x0f, 0xd3, 0x4e, 0xdf, 0x97, 0xfb, - 0x46, 0x6c, 0x3b, 0x5e, 0xb9, 0x28, 0xc5, 0x2f, 0x8a, 0xb0, 0xed, 0x5e, 0x9c, 0x81, 0x49, 0x39, - 0x63, 0x06, 0xa6, 0xe2, 0x15, 0x27, 0xc6, 0xef, 0x8f, 0x41, 0xd8, 0x8f, 0x9f, 0x04, 0x6f, 0x99, - 0x18, 0x50, 0xf0, 0x18, 0xef, 0x77, 0x7d, 0x65, 0x6c, 0xe5, 0x5a, 0xa3, 0xa4, 0xa0, 0xe2, 0x18, - 0x87, 0x30, 0x2d, 0x7a, 0xdb, 0xed, 0xb2, 0x6e, 0xd3, 0x67, 0x2e, 0x27, 0x7b, 0x90, 0xe7, 0xe2, - 0x0f, 0x35, 0x27, 0x23, 0xbe, 0x9d, 0xf9, 0xcc, 0x8d, 0xf6, 0xbb, 0x54, 0x80, 0x01, 0xbc, 0xf1, - 0x07, 0x63, 0x50, 0xd2, 0xf3, 0x74, 0x86, 0x0c, 0xf9, 0xcb, 0x30, 0xd9, 0x62, 0x7b, 0x54, 0x8c, - 0x46, 0x3d, 0x2f, 0x8b, 0x6d, 0xb5, 0x12, 0x90, 0x30, 0xe4, 0x91, 0x6a, 0x78, 0x99, 0x05, 0x43, - 0x96, 0x59, 0xab, 0xb8, 0xaf, 0x48, 0xf6, 0xa1, 0x24, 0xff, 0x58, 0x0b, 0x4b, 0x61, 0x86, 0x5d, - 0xf7, 0x07, 0x21, 0x4a, 0x90, 0x0b, 0xd0, 0x3f, 0x31, 0xc2, 0x4f, 0x95, 0xb0, 0xe4, 0xcf, 0x52, - 0xc2, 0x62, 0xac, 0x81, 0x30, 0x0c, 0xeb, 0xcb, 0xe4, 0x1d, 0x28, 0x72, 0xb5, 0x75, 0xd5, 0xbc, - 0x7c, 0x45, 0x3f, 0x43, 0x29, 0xfa, 0xe3, 0xe3, 0xea, 0xb4, 0x14, 0x0e, 0x09, 0xa8, 0x9b, 0x18, - 0x4b, 0x50, 0x8e, 0x3d, 0xf9, 0x8b, 0x19, 0xd6, 0xcf, 0x75, 0xb1, 0x19, 0x5e, 0xa1, 0x3e, 0x45, - 0xc9, 0x31, 0x1e, 0x8f, 0xc1, 0x1c, 0x32, 0xee, 0xf4, 0x3d, 0x93, 0xc5, 0x33, 0xb3, 0xd4, 0x94, - 0x75, 0x40, 0xa9, 0xcc, 0x6c, 0x5d, 0x52, 0x51, 0x71, 0xc9, 0xdb, 0x30, 0xdd, 0x63, 0x5e, 0x5b, - 0x1f, 0x36, 0xb5, 0x48, 0x3a, 0xbf, 0xb2, 0x19, 0x67, 0x62, 0x52, 0x56, 0xc4, 0xfb, 0x3d, 0x6a, - 0x5b, 0x7b, 0x8c, 0xfb, 0xe9, 0x94, 0xc9, 0xa6, 0xa2, 0xa3, 0x96, 0x20, 0xeb, 0x70, 0x91, 0x33, - 0xff, 0xde, 0xa1, 0xcd, 0x3c, 0x64, 0x7b, 0xcc, 0x93, 0x99, 0xf4, 0x09, 0x69, 0x32, 0x9f, 0x0f, - 0xdf, 0xb6, 0x9a, 0x69, 0x01, 0x1c, 0x6c, 0x23, 0x6f, 0xdf, 0xbe, 0x69, 0x32, 0xce, 0x97, 0x1d, - 0xbb, 0x65, 0xe9, 0x6a, 0xa7, 0xf8, 0xed, 0x9b, 0xe2, 0xe3, 0x40, 0x0b, 0x81, 0xb2, 0x47, 0xad, - 0x6e, 0xdf, 0x63, 0x11, 0x4a, 0x21, 0x89, 0xb2, 0x96, 0xe2, 0xe3, 0x40, 0x0b, 0xe3, 0x75, 0x98, - 0x46, 0xe6, 0x7b, 0x47, 0x7a, 0x4e, 0xaa, 0x90, 0xef, 0x5a, 0x3d, 0x2b, 0x48, 0xfe, 0xe4, 0x83, - 0x8d, 0x7c, 0x57, 0x10, 0x30, 0xa0, 0x1b, 0x3f, 0xc8, 0x01, 0x44, 0x95, 0x3c, 0x64, 0x1f, 0x8a, - 0xfc, 0x66, 0xa3, 0x6f, 0xee, 0xeb, 0x7c, 0xd1, 0x90, 0xcf, 0x0a, 0x0a, 0x24, 0xf6, 0xe6, 0xa9, - 0x28, 0xa8, 0x15, 0x7c, 0x59, 0x9d, 0xc7, 0x5f, 0x8c, 0x83, 0x6e, 0x25, 0x16, 0x97, 0xd9, 0x2d, - 0xd7, 0xb1, 0x6c, 0x3f, 0xfd, 0x9a, 0xba, 0xaa, 0xe8, 0xa8, 0x25, 0xc4, 0x7e, 0xdb, 0x0d, 0x06, - 0x31, 0x96, 0xdc, 0x6f, 0xaa, 0x0f, 0x8a, 0x2b, 0xe4, 0x3c, 0xd6, 0x16, 0x73, 0x3d, 0x9e, 0x94, - 0x43, 0x49, 0x45, 0xc5, 0x15, 0xd7, 0x4c, 0x98, 0x30, 0x55, 0x7b, 0x44, 0x5e, 0x33, 0x61, 0x6e, - 0x15, 0x35, 0x97, 0x74, 0x60, 0x96, 0xca, 0xa5, 0x8d, 0x92, 0xc0, 0x4f, 0x94, 0xcf, 0x8e, 0xaa, - 0x48, 0x92, 0x28, 0x98, 0x86, 0x15, 0x9a, 0x78, 0xd4, 0xfc, 0xc9, 0xd3, 0xda, 0x5a, 0x53, 0x33, - 0x89, 0x82, 0x69, 0x58, 0xe1, 0x61, 0x79, 0x4e, 0x97, 0xd5, 0x71, 0x4b, 0x79, 0x72, 0xda, 0xc3, - 0xc2, 0x80, 0x8c, 0x21, 0xdf, 0xf8, 0xed, 0x1c, 0xcc, 0x34, 0x4d, 0xcf, 0x72, 0x7d, 0x7d, 0xf6, - 0xb7, 0x64, 0xf9, 0x8f, 0x4f, 0x85, 0xef, 0xa3, 0xf6, 0xd4, 0x8b, 0xa7, 0xe4, 0xd3, 0x02, 0xa1, - 0x44, 0x75, 0x50, 0x40, 0xc2, 0x08, 0x42, 0x46, 0xbd, 0xd2, 0xba, 0xa4, 0xd7, 0xb6, 0x29, 0xa9, - 0xa8, 0xb8, 0xc6, 0x0f, 0x73, 0x50, 0xd4, 0xaf, 0x57, 0x2f, 0x41, 0x5e, 0x3e, 0x8a, 0xa8, 0xbd, - 0xa3, 0x2f, 0x93, 0x65, 0x41, 0xc4, 0x80, 0x27, 0x84, 0xa4, 0x3b, 0xa7, 0x80, 0x63, 0x37, 0x0e, - 0xf5, 0x7c, 0x0c, 0x78, 0x62, 0xd3, 0x32, 0xbb, 0xa5, 0xf6, 0x8b, 0xde, 0xb4, 0xab, 0x76, 0x0b, - 0x05, 0x5d, 0x96, 0xb3, 0x38, 0x5e, 0x8f, 0xfa, 0xe9, 0x98, 0x7c, 0x4d, 0x52, 0x51, 0x71, 0x8d, - 0xb7, 0x61, 0x56, 0xbd, 0x65, 0xeb, 0x89, 0x12, 0xbe, 0x5b, 0xdf, 0xa3, 0xda, 0x4c, 0xe6, 0x95, - 0xef, 0xa6, 0x68, 0xa8, 0xb9, 0xc6, 0x34, 0x94, 0x63, 0x25, 0xb6, 0xc6, 0x7f, 0x5d, 0x01, 0xfd, - 0xbe, 0xfb, 0xd3, 0x57, 0xe2, 0xa1, 0x42, 0x28, 0x53, 0x7b, 0xc3, 0xf9, 0xd1, 0xbd, 0x61, 0xbd, - 0xe6, 0x29, 0x8f, 0xb8, 0x1d, 0x79, 0xc4, 0x85, 0x73, 0xf0, 0x88, 0xa3, 0x6a, 0x9b, 0xb4, 0x57, - 0xfc, 0x3b, 0x39, 0x98, 0xb2, 0x45, 0xc4, 0xad, 0xce, 0x7a, 0x65, 0x52, 0x7a, 0x61, 0xf7, 0x46, - 0x9a, 0xc4, 0xda, 0x56, 0x0c, 0x31, 0x48, 0x36, 0xe8, 0x88, 0x38, 0xce, 0xc2, 0x84, 0x6a, 0xb2, - 0x06, 0x45, 0xba, 0x27, 0xc2, 0x18, 0xff, 0x48, 0x3d, 0x54, 0x5f, 0xcd, 0x3a, 0xfd, 0x75, 0x25, - 0x13, 0xec, 0xf9, 0xf0, 0x17, 0xea, 0xb6, 0xe2, 0x66, 0xd2, 0xc5, 0x42, 0xa5, 0x11, 0x6e, 0xa6, - 0x30, 0x6b, 0x12, 0x73, 0x0e, 0x14, 0x25, 0x56, 0x3b, 0x64, 0x40, 0x21, 0x08, 0x94, 0x64, 0x94, - 0x58, 0x0c, 0x7c, 0xde, 0x20, 0x88, 0x42, 0xc5, 0x21, 0xed, 0xd0, 0xc5, 0x2d, 0xcb, 0xc9, 0x6d, - 0x0c, 0xed, 0xf6, 0x6b, 0xaf, 0x39, 0xdb, 0xc7, 0x25, 0xb7, 0xe3, 0x06, 0x74, 0xea, 0x2c, 0x06, - 0x74, 0xfa, 0x54, 0xe3, 0xd9, 0x86, 0x02, 0x97, 0xe6, 0x59, 0x46, 0x87, 0xe5, 0x1b, 0xcb, 0xc3, - 0xdd, 0xee, 0x09, 0x0b, 0x1f, 0xcc, 0x4e, 0x40, 0x43, 0x05, 0x4f, 0x1c, 0x28, 0x7a, 0xca, 0x0b, - 0x54, 0x01, 0xe6, 0x70, 0xf9, 0xe9, 0xb4, 0x2b, 0x19, 0xec, 0x8f, 0x90, 0x8a, 0x5a, 0x09, 0x79, - 0x1f, 0xc6, 0x5b, 0xb4, 0xad, 0x42, 0xcd, 0x6f, 0x0d, 0xfd, 0xa4, 0x1f, 0xaa, 0x91, 0xb5, 0xad, - 0x2b, 0xf5, 0x75, 0x14, 0xa8, 0x64, 0x3f, 0x2a, 0x48, 0x9a, 0x1b, 0xa1, 0x64, 0x34, 0x65, 0xf1, - 0x83, 0xe0, 0x63, 0xa0, 0xa4, 0x69, 0x15, 0x26, 0x0f, 0x9c, 0x6e, 0xbf, 0xa7, 0x62, 0xd4, 0xf2, - 0x8d, 0x85, 0xac, 0xd5, 0x7e, 0x20, 0x45, 0x22, 0x23, 0x10, 0xfc, 0xe6, 0x18, 0xb6, 0x25, 0xbf, - 0x91, 0x83, 0x19, 0x71, 0x74, 0xf4, 0x3e, 0xe0, 0x15, 0x32, 0xc2, 0x4e, 0xbd, 0xcf, 0x99, 0x17, - 0xed, 0xb0, 0xe7, 0x94, 0xda, 0x99, 0x8d, 0x84, 0x06, 0x4c, 0x69, 0x24, 0x2e, 0x14, 0xb9, 0xd5, - 0x62, 0x26, 0xf5, 0x78, 0x65, 0xfe, 0xdc, 0xb4, 0x47, 0x4e, 0xa5, 0xc2, 0x46, 0xad, 0x85, 0xfc, - 0xa6, 0x2c, 0xf3, 0x55, 0x85, 0xee, 0xea, 0xe3, 0x83, 0x4b, 0xe7, 0xf9, 0xf1, 0xc1, 0x7c, 0x50, - 0xe3, 0x9b, 0xd0, 0x80, 0x69, 0x95, 0xe4, 0x1e, 0x5c, 0x16, 0x31, 0xcd, 0x01, 0x4b, 0x57, 0xa5, - 0x5d, 0x96, 0x2f, 0x08, 0xcf, 0x9f, 0x1c, 0x57, 0x2f, 0xd7, 0xb3, 0x04, 0x30, 0xbb, 0x1d, 0xf9, - 0x08, 0xa6, 0xbd, 0xb8, 0x6b, 0x5f, 0x79, 0x6e, 0x84, 0xe7, 0xeb, 0x44, 0x90, 0x10, 0xe4, 0x40, - 0x12, 0x24, 0x4c, 0xea, 0x22, 0x6f, 0x40, 0xd9, 0x55, 0x96, 0xca, 0xe2, 0xbd, 0xca, 0x15, 0x39, - 0x06, 0x79, 0xa3, 0x6e, 0x47, 0x64, 0x8c, 0xcb, 0x90, 0xfb, 0x50, 0xf6, 0x9d, 0x2e, 0xf3, 0x54, - 0xaa, 0xbd, 0x22, 0x17, 0x7f, 0x31, 0x6b, 0x27, 0xef, 0x68, 0xb1, 0x28, 0x91, 0x1b, 0xd1, 0x38, - 0xc6, 0x71, 0x44, 0x84, 0x18, 0xd6, 0x4c, 0x7a, 0x32, 0x1c, 0x7e, 0x3e, 0x19, 0x21, 0x36, 0xe3, - 0x4c, 0x4c, 0xca, 0x8a, 0x98, 0xcf, 0xf5, 0x2c, 0xc7, 0xb3, 0xfc, 0xa3, 0xe5, 0x2e, 0xe5, 0x5c, - 0x02, 0x2c, 0x48, 0x00, 0x1d, 0xf3, 0x6d, 0xa7, 0x05, 0x70, 0xb0, 0x8d, 0x70, 0xd5, 0x42, 0x62, - 0xe5, 0x85, 0xc8, 0x55, 0x0b, 0xdb, 0xa2, 0xe6, 0x9e, 0x52, 0xcc, 0x73, 0x75, 0x98, 0x62, 0x1e, - 0xd2, 0x82, 0xab, 0xb4, 0xef, 0x3b, 0x3d, 0x41, 0x48, 0x36, 0xd9, 0x71, 0xf6, 0x99, 0x5d, 0xb9, - 0x26, 0xef, 0xaa, 0x6b, 0x27, 0xc7, 0xd5, 0xab, 0xf5, 0x2f, 0x90, 0xc3, 0x2f, 0x44, 0x21, 0x3d, - 0x28, 0x32, 0x55, 0x90, 0x54, 0xf9, 0xca, 0x08, 0x97, 0x44, 0xb2, 0xaa, 0x29, 0x98, 0xa0, 0x90, - 0x86, 0x5a, 0x05, 0xd9, 0x81, 0x72, 0xc7, 0xe1, 0x7e, 0xbd, 0x6b, 0x51, 0xce, 0x78, 0xe5, 0x45, - 0xb9, 0x4f, 0x32, 0xef, 0xb7, 0x5b, 0xa1, 0x58, 0xb4, 0x4d, 0x6e, 0x45, 0x2d, 0x31, 0x0e, 0x43, - 0x98, 0x0c, 0x8e, 0xfa, 0x72, 0xd5, 0x1c, 0xdb, 0x67, 0x1f, 0xfa, 0x95, 0x45, 0x39, 0x96, 0x57, - 0xb2, 0x90, 0xb7, 0x9d, 0x56, 0x33, 0x29, 0x1d, 0x9c, 0xf2, 0x14, 0x11, 0xd3, 0x98, 0xe4, 0x4d, - 0x98, 0x72, 0x9d, 0x56, 0xd3, 0x65, 0xe6, 0x36, 0xf5, 0xcd, 0x4e, 0xa5, 0x9a, 0x7c, 0x28, 0xd8, - 0x8e, 0xf1, 0x30, 0x21, 0xb9, 0xf0, 0x1e, 0x5c, 0x1c, 0xf0, 0xa7, 0x9e, 0xe8, 0x55, 0xe5, 0x4f, - 0x73, 0x10, 0x77, 0x67, 0xcf, 0xdd, 0xef, 0x5f, 0x87, 0x8b, 0xaa, 0x24, 0x58, 0x5c, 0xb6, 0xdd, - 0xbe, 0x1f, 0x46, 0xc9, 0xb1, 0xfc, 0x08, 0xa6, 0x05, 0x70, 0xb0, 0x8d, 0xf1, 0x67, 0x39, 0x98, - 0x4e, 0x98, 0xef, 0x73, 0x8f, 0x08, 0xd7, 0x80, 0xf4, 0x2c, 0xcf, 0x73, 0xbc, 0xe0, 0x0e, 0xdc, - 0x14, 0x7b, 0x99, 0xab, 0xcf, 0x09, 0x64, 0x41, 0xc6, 0xe6, 0x00, 0x17, 0x33, 0x5a, 0x18, 0x7f, - 0x99, 0x83, 0x28, 0x01, 0xa7, 0xab, 0x90, 0x72, 0xa7, 0x56, 0x21, 0xbd, 0x0a, 0xc5, 0x47, 0xdc, - 0xb1, 0xb7, 0xa3, 0x5a, 0x25, 0x3d, 0xa1, 0xb7, 0x9b, 0xf7, 0xb6, 0xa4, 0xa4, 0x96, 0x90, 0xd2, - 0x1f, 0xac, 0x59, 0x5d, 0x7f, 0xb0, 0xa2, 0xe7, 0xf6, 0x2f, 0x06, 0x74, 0xd4, 0x12, 0x64, 0x09, - 0x4a, 0x3a, 0xe7, 0xab, 0x42, 0x49, 0x3d, 0x09, 0x3a, 0xe1, 0x89, 0x91, 0x8c, 0xf1, 0xa3, 0x31, - 0x28, 0xfe, 0x7f, 0xfb, 0x36, 0x62, 0x3f, 0xf5, 0x6d, 0xc4, 0xf2, 0x88, 0x69, 0xe4, 0x2f, 0xfa, - 0x2e, 0xc2, 0xf8, 0x34, 0x07, 0x53, 0xcf, 0xf0, 0xf3, 0x84, 0xdd, 0xe4, 0xe7, 0x09, 0xef, 0x8c, - 0x34, 0xb4, 0x53, 0x3e, 0x4d, 0xf8, 0x9b, 0xf9, 0x68, 0x48, 0x62, 0x5a, 0x89, 0x0d, 0xa5, 0xf0, - 0x80, 0x87, 0xa9, 0xf9, 0x77, 0x46, 0x0a, 0x0a, 0xa3, 0x4d, 0x19, 0x52, 0x38, 0x46, 0x2a, 0xc8, - 0x0d, 0x00, 0x26, 0x2c, 0x5b, 0x90, 0xb7, 0x1b, 0x4b, 0x66, 0xae, 0x57, 0x35, 0x07, 0x63, 0x52, - 0xcf, 0x3e, 0xe1, 0x90, 0x7d, 0x45, 0x4f, 0x3c, 0x95, 0x2b, 0xfa, 0xea, 0xb9, 0x5f, 0xd1, 0x2f, - 0x3e, 0xfd, 0x2b, 0x3a, 0x16, 0x90, 0xe4, 0x47, 0x08, 0x48, 0x3e, 0x82, 0x4b, 0xc1, 0x9f, 0xcb, - 0x5d, 0x6a, 0xf5, 0xf4, 0x7e, 0x51, 0xe5, 0x44, 0x5f, 0xcd, 0xbc, 0x98, 0x99, 0xc7, 0x2d, 0xee, - 0x33, 0xdb, 0x7f, 0x10, 0xb5, 0x8c, 0xde, 0xa2, 0x1f, 0x64, 0xc0, 0x61, 0xa6, 0x92, 0xb4, 0x07, - 0x3b, 0x79, 0x06, 0x0f, 0xf6, 0x87, 0x39, 0xb8, 0x4c, 0xb3, 0xbe, 0x68, 0x54, 0x79, 0x8c, 0xdb, - 0x23, 0xc5, 0x13, 0x09, 0x44, 0x15, 0x0f, 0x64, 0xb1, 0x30, 0xbb, 0x0f, 0xe4, 0xe5, 0x28, 0x24, - 0x2d, 0xc9, 0x4d, 0x95, 0x1d, 0x4c, 0x7e, 0x3f, 0x9d, 0x0a, 0x02, 0x39, 0xdb, 0xcd, 0x91, 0x0d, - 0xf6, 0x39, 0xa4, 0x83, 0xca, 0x23, 0xa4, 0x83, 0x52, 0xe1, 0xc5, 0xd4, 0x39, 0x85, 0x17, 0x36, - 0xcc, 0x59, 0x3d, 0xda, 0x66, 0xdb, 0xfd, 0x6e, 0x37, 0xc8, 0x7e, 0xf3, 0xca, 0xb4, 0xc4, 0xce, - 0xac, 0x01, 0x15, 0xe1, 0x5e, 0x37, 0xb8, 0x1f, 0xf5, 0x83, 0x50, 0xf4, 0x60, 0xb3, 0x91, 0x42, - 0xc2, 0x01, 0x6c, 0xb1, 0x2d, 0x85, 0xdb, 0xba, 0xc5, 0x7c, 0x31, 0xdb, 0x32, 0x53, 0xa2, 0xbe, - 0xdc, 0xbe, 0x15, 0x91, 0x31, 0x2e, 0x43, 0xee, 0x40, 0xa9, 0x65, 0x73, 0xf5, 0x31, 0xd6, 0xac, - 0xb4, 0x52, 0xaf, 0x09, 0xdb, 0xb6, 0xb2, 0xd5, 0xd4, 0x1f, 0x60, 0x5d, 0x1d, 0xfc, 0xaf, 0x29, - 0x6a, 0x9a, 0x8f, 0x51, 0x7b, 0xb2, 0x29, 0xc1, 0x54, 0x41, 0x74, 0x90, 0xda, 0xb8, 0x76, 0x8a, - 0x87, 0xbc, 0xb2, 0x15, 0xd6, 0x6f, 0x4f, 0x2b, 0x75, 0xaa, 0xcc, 0x39, 0x42, 0x20, 0xaf, 0x40, - 0xc1, 0xb1, 0x57, 0x3f, 0xb4, 0xfc, 0xca, 0xc5, 0x64, 0xf6, 0xfb, 0x9e, 0xa4, 0xa2, 0xe2, 0x92, - 0xfb, 0x70, 0xc5, 0xf7, 0xbb, 0x2a, 0xb4, 0xad, 0xef, 0xf9, 0xcc, 0x0b, 0x8b, 0x1e, 0x64, 0xe1, - 0x4a, 0x3e, 0xf8, 0x6a, 0x6b, 0x67, 0xe7, 0x6e, 0x96, 0x08, 0x9e, 0xd6, 0xf6, 0xf4, 0xa0, 0x7b, - 0x7e, 0xc8, 0xa0, 0x3b, 0x1e, 0xe7, 0x5d, 0xfa, 0xc2, 0x38, 0x6f, 0x20, 0x2e, 0xbd, 0xfc, 0x04, - 0x71, 0xe9, 0xfb, 0xb2, 0xb4, 0x63, 0x7d, 0x59, 0xc5, 0xf4, 0x6f, 0x0d, 0x97, 0x4a, 0x14, 0x08, - 0xc1, 0x0b, 0x9f, 0xfc, 0x13, 0x03, 0x4c, 0xb2, 0x0d, 0x97, 0x5c, 0xa7, 0x35, 0x10, 0xd6, 0xca, - 0x20, 0x3e, 0x56, 0xd7, 0xb3, 0x9d, 0x21, 0x83, 0x99, 0x2d, 0xa5, 0x2d, 0x8d, 0xe8, 0x95, 0x8a, - 0x9c, 0x98, 0xc0, 0x96, 0x46, 0x64, 0x8c, 0xcb, 0xa4, 0xa3, 0xbc, 0xe7, 0x9f, 0x5a, 0x94, 0xb7, - 0xf0, 0x0c, 0xa2, 0xbc, 0x17, 0x9e, 0x5d, 0x94, 0xf7, 0x59, 0x11, 0x66, 0x52, 0xdf, 0x20, 0xea, - 0xaa, 0xaa, 0xdc, 0x59, 0xab, 0xaa, 0x12, 0x65, 0x4f, 0x63, 0x4f, 0xb5, 0xec, 0x69, 0xfc, 0xdc, - 0xcb, 0x9e, 0x62, 0xe5, 0x5d, 0x13, 0x5f, 0x52, 0xde, 0x55, 0x87, 0x59, 0xd3, 0xe9, 0xb9, 0xf2, - 0x0b, 0x0a, 0x55, 0xe4, 0x13, 0x3c, 0xc4, 0xeb, 0xa7, 0xce, 0xe5, 0x24, 0x1b, 0xd3, 0xf2, 0x84, - 0x43, 0xde, 0x96, 0x0d, 0x0b, 0x23, 0x94, 0x86, 0x26, 0x17, 0x4c, 0x5e, 0x94, 0xaa, 0x3a, 0x53, - 0xbb, 0xe9, 0x81, 0xfa, 0x40, 0x97, 0x70, 0x34, 0x66, 0x93, 0xe5, 0x78, 0xbc, 0x52, 0x92, 0xfa, - 0x7f, 0xe9, 0x3c, 0xf4, 0x27, 0x6b, 0xff, 0x54, 0x4f, 0xa2, 0xd7, 0xdf, 0x24, 0x17, 0xd3, 0x3d, - 0x21, 0x1e, 0x3c, 0xe7, 0x66, 0xb9, 0x61, 0x5c, 0xbd, 0x2a, 0x7d, 0x91, 0x33, 0xb8, 0xa8, 0xb4, - 0x3c, 0x97, 0xe9, 0xc8, 0x71, 0x3c, 0x05, 0x39, 0x5e, 0x3b, 0x56, 0x7c, 0x5a, 0xb5, 0x63, 0x0b, - 0x47, 0x41, 0x59, 0xea, 0xa9, 0x15, 0xad, 0xf7, 0x93, 0x55, 0xe6, 0xef, 0x0d, 0xf9, 0x9f, 0x15, - 0x85, 0x85, 0xaf, 0xf1, 0x6a, 0xda, 0x5f, 0xcf, 0xc1, 0xa5, 0xac, 0x65, 0xc9, 0xe8, 0x45, 0x33, - 0xd9, 0x8b, 0xd1, 0xc2, 0xb5, 0xb8, 0x69, 0xf9, 0xb7, 0x7c, 0x2c, 0x38, 0xf4, 0x99, 0xfb, 0xd3, - 0x97, 0xe3, 0xa1, 0x5e, 0x8e, 0x13, 0x5f, 0x0a, 0xe7, 0x9f, 0xe1, 0x97, 0xc2, 0x85, 0x21, 0xbe, - 0x14, 0x9e, 0x7c, 0x96, 0x5f, 0x0a, 0x17, 0xcf, 0xf8, 0xa5, 0x70, 0xe9, 0xe9, 0x7f, 0x29, 0xfc, - 0x79, 0x0e, 0xe6, 0xd2, 0x85, 0xcb, 0xcf, 0x20, 0x49, 0xb6, 0x9f, 0x48, 0x92, 0x6d, 0x8c, 0x64, - 0xcc, 0xc3, 0x6e, 0x9f, 0x96, 0x2c, 0x33, 0x7e, 0x9c, 0x83, 0x81, 0xe2, 0xec, 0x67, 0x90, 0xc7, - 0x7a, 0x94, 0xcc, 0x63, 0xad, 0x9e, 0xcb, 0x20, 0x4f, 0xc9, 0x67, 0xfd, 0x77, 0xc6, 0x10, 0xff, - 0x57, 0xf2, 0x5a, 0x09, 0xd3, 0x36, 0xf6, 0xf4, 0x4d, 0x5b, 0xa3, 0xf6, 0xc9, 0xe7, 0x8b, 0x17, - 0x3e, 0xfd, 0x7c, 0xf1, 0xc2, 0x67, 0x9f, 0x2f, 0x5e, 0xf8, 0xf8, 0x64, 0x31, 0xf7, 0xc9, 0xc9, - 0x62, 0xee, 0xd3, 0x93, 0xc5, 0xdc, 0x67, 0x27, 0x8b, 0xb9, 0x1f, 0x9f, 0x2c, 0xe6, 0x7e, 0xef, - 0x5f, 0x16, 0x2f, 0xfc, 0x72, 0x31, 0xc4, 0xfd, 0x9f, 0x00, 0x00, 0x00, 0xff, 0xff, 0xde, 0x00, - 0x4c, 0xbf, 0x45, 0x51, 0x00, 0x00, + 0x56, 0xee, 0xb2, 0x5d, 0xe5, 0xaa, 0x53, 0x76, 0xdb, 0x7d, 0xdd, 0x9d, 0xae, 0x38, 0x1d, 0x57, + 0xcf, 0x8b, 0x12, 0x7a, 0x98, 0xa4, 0x9c, 0x74, 0xcf, 0x40, 0x26, 0x21, 0xc9, 0x54, 0xf9, 0xaf, + 0xdd, 0x6e, 0xbb, 0xcd, 0x29, 0x77, 0x37, 0x43, 0x46, 0x0c, 0xcf, 0xaf, 0xae, 0xab, 0x5e, 0xbb, + 0xea, 0xbd, 0x97, 0x77, 0x5f, 0xd9, 0xb1, 0xb2, 0x20, 0x20, 0x10, 0x20, 0x34, 0x12, 0x6c, 0x60, + 0xc4, 0x6c, 0x10, 0x0b, 0xd8, 0xb0, 0x61, 0x0b, 0x68, 0x90, 0x10, 0x8b, 0x88, 0x0d, 0xd1, 0x6c, + 0xc8, 0x02, 0x59, 0x13, 0xb3, 0x01, 0x81, 0x84, 0xc4, 0x06, 0xa9, 0x57, 0xe8, 0xfe, 0xbc, 0xfb, + 0x7e, 0xea, 0x39, 0x71, 0x57, 0xb9, 0x1b, 0xc1, 0xcc, 0xaa, 0x5d, 0xe7, 0x9c, 0xfb, 0x9d, 0xfb, + 0x7b, 0xee, 0x39, 0xe7, 0x9e, 0xd7, 0xb0, 0xd4, 0xb6, 0x83, 0x4e, 0x7f, 0xb7, 0x66, 0xb9, 0xbd, + 0x45, 0xd3, 0x6f, 0xbb, 0x9e, 0xef, 0x3e, 0x12, 0x7f, 0x2c, 0x7a, 0xfb, 0xed, 0x45, 0xd3, 0xb3, + 0xd9, 0xe2, 0xa1, 0xeb, 0xef, 0xef, 0x75, 0xdd, 0xc3, 0xc5, 0x83, 0x37, 0xcc, 0xae, 0xd7, 0x31, + 0xdf, 0x58, 0x6c, 0x53, 0x87, 0xfa, 0x66, 0x40, 0x5b, 0x35, 0xcf, 0x77, 0x03, 0x97, 0xdc, 0x8a, + 0x40, 0x6a, 0x21, 0x88, 0xf8, 0xa3, 0xe6, 0xed, 0xb7, 0x6b, 0x1c, 0xa4, 0x16, 0x82, 0xd4, 0x42, + 0x90, 0xf9, 0xd7, 0x62, 0x9a, 0xdb, 0x2e, 0x57, 0xc8, 0xb1, 0x76, 0xfb, 0x7b, 0xe2, 0x97, 0xf8, + 0x21, 0xfe, 0x92, 0x3a, 0xe6, 0x8d, 0xfd, 0x37, 0x59, 0xcd, 0x76, 0x79, 0x97, 0x16, 0x2d, 0xd7, + 0xa7, 0x8b, 0x07, 0x03, 0xfd, 0x98, 0xff, 0x7a, 0x24, 0xd3, 0x33, 0xad, 0x8e, 0xed, 0x50, 0xff, + 0x28, 0x1a, 0x47, 0x8f, 0x06, 0x66, 0x56, 0xab, 0xc5, 0xd3, 0x5a, 0xf9, 0x7d, 0x27, 0xb0, 0x7b, + 0x74, 0xa0, 0xc1, 0xcf, 0x7d, 0x59, 0x03, 0x66, 0x75, 0x68, 0xcf, 0x4c, 0xb7, 0x33, 0xfe, 0x31, + 0x07, 0x33, 0x75, 0xdf, 0xea, 0xd8, 0x07, 0xb4, 0x19, 0x70, 0x46, 0xfb, 0x88, 0xbc, 0x0f, 0xe3, + 0x81, 0xe9, 0x57, 0x72, 0xd7, 0x73, 0x37, 0xca, 0x37, 0xbf, 0x55, 0x1b, 0x62, 0x22, 0x6b, 0x3b, + 0xa6, 0x1f, 0xc2, 0x35, 0x26, 0x4f, 0x8e, 0xab, 0xe3, 0x3b, 0xa6, 0x8f, 0x1c, 0x95, 0x7c, 0x17, + 0x26, 0x1c, 0xd7, 0xa1, 0x95, 0x31, 0x81, 0x5e, 0x1f, 0x0a, 0x7d, 0xcb, 0x75, 0x74, 0x6f, 0x1b, + 0xc5, 0x93, 0xe3, 0xea, 0x04, 0xa7, 0xa0, 0x00, 0x36, 0xfe, 0x33, 0x07, 0xa5, 0xba, 0xdf, 0xee, + 0xf7, 0xa8, 0x13, 0x30, 0xe2, 0x03, 0x78, 0xa6, 0x6f, 0xf6, 0x68, 0x40, 0x7d, 0x56, 0xc9, 0x5d, + 0x1f, 0xbf, 0x51, 0xbe, 0xf9, 0xee, 0x50, 0x4a, 0xb7, 0x43, 0x98, 0x06, 0xf9, 0xe4, 0xb8, 0x7a, + 0xe1, 0xe4, 0xb8, 0x0a, 0x9a, 0xc4, 0x30, 0xa6, 0x85, 0x38, 0x50, 0x32, 0xfd, 0xc0, 0xde, 0x33, + 0xad, 0x80, 0x55, 0xc6, 0x84, 0xca, 0x77, 0x86, 0x52, 0x59, 0x57, 0x28, 0x8d, 0x4b, 0x4a, 0x63, + 0x29, 0xa4, 0x30, 0x8c, 0x54, 0x18, 0xff, 0x3e, 0x0e, 0xc5, 0x90, 0x41, 0xae, 0xc3, 0x84, 0x63, + 0xf6, 0xa8, 0x58, 0xbd, 0x52, 0x63, 0x4a, 0x35, 0x9c, 0xd8, 0x32, 0x7b, 0x7c, 0x82, 0xcc, 0x1e, + 0xe5, 0x12, 0x9e, 0x19, 0x74, 0xc4, 0x0a, 0xc4, 0x24, 0xb6, 0xcd, 0xa0, 0x83, 0x82, 0x43, 0xae, + 0xc1, 0x44, 0xcf, 0x6d, 0xd1, 0xca, 0xf8, 0xf5, 0xdc, 0x8d, 0xbc, 0x9c, 0xe0, 0x4d, 0xb7, 0x45, + 0x51, 0x50, 0x79, 0xfb, 0x3d, 0xdf, 0xed, 0x55, 0x26, 0x92, 0xed, 0x57, 0x7d, 0xb7, 0x87, 0x82, + 0x43, 0x7e, 0x2f, 0x07, 0xb3, 0x61, 0xf7, 0xee, 0xba, 0x96, 0x19, 0xd8, 0xae, 0x53, 0xc9, 0x8b, + 0x05, 0x5f, 0x19, 0x69, 0x22, 0x42, 0xb0, 0x46, 0x45, 0x69, 0x9d, 0x4d, 0x73, 0x70, 0x40, 0x31, + 0xb9, 0x09, 0xd0, 0xee, 0xba, 0xbb, 0x66, 0x97, 0xcf, 0x41, 0xa5, 0x20, 0x7a, 0xad, 0x97, 0x70, + 0x4d, 0x73, 0x30, 0x26, 0x45, 0xf6, 0x61, 0xd2, 0x94, 0xa7, 0xa2, 0x32, 0x29, 0xfa, 0xbd, 0x3c, + 0x64, 0xbf, 0x13, 0x27, 0xab, 0x51, 0x3e, 0x39, 0xae, 0x4e, 0x2a, 0x22, 0x86, 0x1a, 0xc8, 0xab, + 0x50, 0x74, 0x3d, 0xde, 0x55, 0xb3, 0x5b, 0x29, 0x5e, 0xcf, 0xdd, 0x28, 0x36, 0x66, 0x55, 0xf7, + 0x8a, 0xf7, 0x14, 0x1d, 0xb5, 0x84, 0xf1, 0x47, 0x79, 0x18, 0x18, 0x35, 0x79, 0x03, 0xca, 0x0a, + 0xed, 0xae, 0xdb, 0x66, 0x62, 0xf1, 0x8b, 0x8d, 0x99, 0x93, 0xe3, 0x6a, 0xb9, 0x1e, 0x91, 0x31, + 0x2e, 0x43, 0x1e, 0xc2, 0x18, 0xbb, 0xa5, 0x8e, 0xe1, 0x7b, 0x43, 0x8d, 0xae, 0x79, 0x4b, 0x6f, + 0xd0, 0xc2, 0xc9, 0x71, 0x75, 0xac, 0x79, 0x0b, 0xc7, 0xd8, 0x2d, 0x6e, 0x3e, 0xda, 0x76, 0x20, + 0x36, 0xcf, 0xb0, 0xe6, 0x63, 0xcd, 0x0e, 0x34, 0xb4, 0x30, 0x1f, 0x6b, 0x76, 0x80, 0x1c, 0x95, + 0x9b, 0x8f, 0x4e, 0x10, 0x78, 0x62, 0xf3, 0x0d, 0x6b, 0x3e, 0x6e, 0xef, 0xec, 0x6c, 0x6b, 0x78, + 0xb1, 0xbb, 0x39, 0x05, 0x05, 0x30, 0xf9, 0x88, 0xcf, 0xa4, 0xe4, 0xb9, 0xfe, 0x91, 0xda, 0xb5, + 0xb7, 0x47, 0xda, 0xb5, 0xae, 0x7f, 0xa4, 0xd5, 0xa9, 0x35, 0xd1, 0x0c, 0x8c, 0x6b, 0x13, 0xa3, + 0x6b, 0xed, 0x31, 0xb1, 0x49, 0x87, 0x1e, 0xdd, 0xf2, 0x6a, 0x33, 0x35, 0xba, 0xe5, 0xd5, 0x26, + 0x0a, 0x60, 0xbe, 0x36, 0xbe, 0x79, 0xa8, 0xf6, 0xf4, 0x70, 0x6b, 0x83, 0xe6, 0x61, 0x72, 0x6d, + 0xd0, 0x3c, 0x44, 0x8e, 0x6a, 0xb4, 0xe1, 0x4a, 0xc8, 0x41, 0xea, 0xb9, 0xcc, 0x16, 0x03, 0xa4, + 0x7b, 0x64, 0x11, 0x4a, 0x96, 0xeb, 0xec, 0xd9, 0xed, 0x4d, 0xd3, 0x53, 0x86, 0x49, 0x5b, 0xb4, + 0xa5, 0x90, 0x81, 0x91, 0x0c, 0x79, 0x11, 0xc6, 0xf7, 0xe9, 0x91, 0xb2, 0x50, 0x65, 0x25, 0x3a, + 0xbe, 0x41, 0x8f, 0x90, 0xd3, 0x8d, 0x1f, 0xe6, 0x60, 0x2e, 0x63, 0x72, 0x79, 0xb3, 0xbe, 0xdf, + 0x55, 0x1a, 0x74, 0xb3, 0xfb, 0x78, 0x17, 0x39, 0x9d, 0xfc, 0x76, 0x0e, 0x66, 0x62, 0xb3, 0x5d, + 0xef, 0x2b, 0x23, 0x38, 0xfc, 0xe9, 0x4e, 0x60, 0x35, 0xae, 0x2a, 0x8d, 0x33, 0x29, 0x06, 0xa6, + 0xb5, 0x1a, 0xff, 0x24, 0x6e, 0xdd, 0x04, 0x8d, 0x98, 0x70, 0xb1, 0xcf, 0xa8, 0xcf, 0x4d, 0x74, + 0x93, 0x5a, 0x3e, 0x0d, 0xd4, 0x05, 0xfc, 0x72, 0x4d, 0x5e, 0xed, 0xbc, 0x17, 0x35, 0xee, 0x65, + 0xd4, 0x0e, 0xde, 0xa8, 0x49, 0x89, 0x0d, 0x7a, 0xd4, 0xa4, 0x5d, 0xca, 0x31, 0x1a, 0xe4, 0xe4, + 0xb8, 0x7a, 0xf1, 0x7e, 0x02, 0x00, 0x53, 0x80, 0x5c, 0x85, 0x67, 0x32, 0x76, 0xe8, 0xfa, 0x2d, + 0xa5, 0x62, 0xec, 0x89, 0x55, 0x6c, 0x27, 0x00, 0x30, 0x05, 0x68, 0x7c, 0x1b, 0x60, 0xc9, 0x75, + 0x02, 0xdb, 0xe9, 0xd3, 0x7b, 0x0e, 0x79, 0x09, 0xf2, 0xd4, 0xf7, 0x5d, 0x5f, 0x19, 0xa4, 0x69, + 0x35, 0x41, 0xf9, 0x15, 0x4e, 0x44, 0xc9, 0x23, 0xaf, 0x40, 0x61, 0xcf, 0xb4, 0xbb, 0xb4, 0x25, + 0x7a, 0x53, 0x6c, 0x5c, 0x54, 0x52, 0x85, 0x55, 0x41, 0x45, 0xc5, 0x35, 0xfe, 0x7a, 0x1c, 0xa6, + 0x96, 0x7c, 0xd7, 0x79, 0xa8, 0x16, 0x82, 0xfc, 0x2a, 0x14, 0xb9, 0xff, 0xd4, 0x32, 0x03, 0x53, + 0xcd, 0xd5, 0xeb, 0xb1, 0x81, 0x68, 0x37, 0x28, 0x5a, 0x42, 0x2e, 0xcd, 0x87, 0x76, 0x6f, 0xf7, + 0x11, 0xb5, 0x82, 0x4d, 0x1a, 0x98, 0xd1, 0x45, 0x10, 0xd1, 0x50, 0xa3, 0x12, 0x0b, 0x26, 0x98, + 0x47, 0xad, 0x91, 0x9c, 0x95, 0xb0, 0xbb, 0x4d, 0x8f, 0x5a, 0xd1, 0x6d, 0xc9, 0x7f, 0xa1, 0x00, + 0x27, 0x2e, 0x14, 0x58, 0x60, 0x06, 0x7d, 0xa6, 0x4c, 0xe6, 0xda, 0x50, 0x6a, 0xe2, 0x33, 0xd3, + 0x14, 0x70, 0xd1, 0x44, 0xca, 0xdf, 0xa8, 0xd4, 0x10, 0x06, 0x93, 0xf2, 0x36, 0x61, 0xca, 0x8c, + 0xde, 0x1e, 0x59, 0xa3, 0xbc, 0xa7, 0x58, 0x63, 0x46, 0xa9, 0x9c, 0x54, 0x04, 0x0c, 0x35, 0x19, + 0x9f, 0xe5, 0x60, 0x36, 0xde, 0xe2, 0xae, 0xcd, 0x02, 0xf2, 0x9d, 0x81, 0x15, 0xac, 0x9d, 0x6d, + 0x05, 0x79, 0x6b, 0xb1, 0x7e, 0xfa, 0xa6, 0x0c, 0x29, 0xb1, 0xd5, 0xdb, 0x83, 0xbc, 0x1d, 0xd0, + 0x5e, 0xe8, 0x83, 0xd5, 0x47, 0x1e, 0x65, 0xb4, 0x81, 0xd7, 0x39, 0x2e, 0x4a, 0x78, 0xe3, 0x47, + 0xe3, 0x30, 0x97, 0x31, 0x19, 0xfc, 0x5e, 0xe7, 0x5e, 0x77, 0xab, 0xdf, 0x0d, 0xdd, 0x31, 0xdd, + 0xdb, 0xa6, 0xa2, 0xa3, 0x96, 0x20, 0xcb, 0x30, 0xab, 0x7c, 0x75, 0xee, 0x81, 0x30, 0xcf, 0xb4, + 0xa8, 0x32, 0x80, 0xda, 0xd9, 0xc1, 0x14, 0x1f, 0x07, 0x5a, 0x90, 0x4d, 0x98, 0x53, 0xb4, 0x35, + 0xe5, 0xe9, 0x0b, 0xaf, 0x67, 0x5c, 0x00, 0xbd, 0xa0, 0x80, 0xe6, 0x70, 0x50, 0x04, 0xb3, 0xda, + 0x91, 0x03, 0xb8, 0x64, 0xb9, 0x8e, 0xd5, 0xf7, 0x7d, 0xea, 0x58, 0x47, 0xdb, 0x6e, 0xd7, 0xb6, + 0x8e, 0x94, 0xe3, 0x77, 0x5b, 0x81, 0x5d, 0x5a, 0x4a, 0x0b, 0x3c, 0x3e, 0xae, 0x7e, 0x2d, 0x16, + 0x19, 0xed, 0x9a, 0x81, 0xd5, 0x59, 0x3c, 0xb8, 0x19, 0x4e, 0x68, 0x5a, 0x1c, 0x07, 0x55, 0x90, + 0xaf, 0xc2, 0x24, 0xeb, 0x33, 0x8f, 0x3a, 0x2d, 0x71, 0x03, 0x17, 0xa3, 0x8d, 0xd5, 0x94, 0x64, + 0x0c, 0xf9, 0xe4, 0x3e, 0x5c, 0x65, 0x01, 0x37, 0xb0, 0x4e, 0x7b, 0x99, 0x9a, 0xad, 0xae, 0xed, + 0x70, 0x73, 0xe7, 0x3a, 0x2d, 0x79, 0x8d, 0x8e, 0x37, 0x5e, 0x38, 0x39, 0xae, 0x5e, 0x6d, 0x66, + 0x8b, 0xe0, 0x69, 0x6d, 0x8d, 0x1f, 0xe5, 0x80, 0x0c, 0x9e, 0x29, 0xb2, 0x01, 0x05, 0xd3, 0x0a, + 0xb8, 0x5f, 0x28, 0x63, 0x89, 0x97, 0xb2, 0x4c, 0xa7, 0xb4, 0x25, 0x48, 0xf7, 0x28, 0x1f, 0x13, + 0x8d, 0x0e, 0x62, 0x5d, 0x34, 0x45, 0x05, 0x41, 0x5c, 0xb8, 0xd4, 0x35, 0x59, 0x10, 0x6e, 0x86, + 0xd6, 0x8e, 0xdd, 0x0b, 0x03, 0xa3, 0x9f, 0x3d, 0xdb, 0x39, 0xe0, 0x2d, 0x1a, 0x57, 0xf8, 0x2a, + 0xdc, 0x4d, 0x03, 0xe1, 0x20, 0xb6, 0xf1, 0xc7, 0x05, 0x98, 0x5c, 0xae, 0xaf, 0xed, 0x98, 0x6c, + 0xff, 0x0c, 0x81, 0xc2, 0xab, 0x50, 0x0c, 0x68, 0xcf, 0xeb, 0x9a, 0x41, 0xb8, 0x13, 0xf5, 0xfe, + 0xdd, 0x51, 0x74, 0xd4, 0x12, 0xc4, 0xe5, 0x51, 0x8f, 0x0a, 0xbb, 0x94, 0x25, 0x7b, 0x77, 0xc8, + 0x6b, 0x55, 0xa1, 0xc4, 0xc3, 0x1e, 0x45, 0xc2, 0x48, 0x07, 0x61, 0x50, 0x0e, 0x95, 0x23, 0xdd, + 0x53, 0xa6, 0x6c, 0xc8, 0x70, 0x35, 0xc2, 0x91, 0x1e, 0x5a, 0x8c, 0x80, 0x71, 0x2d, 0xe4, 0xeb, + 0x30, 0xd5, 0xa2, 0x7c, 0xdf, 0x51, 0xc7, 0xb2, 0x29, 0xab, 0xe4, 0xaf, 0x8f, 0xf3, 0x79, 0x39, + 0x39, 0xae, 0x4e, 0x2d, 0xc7, 0xe8, 0x98, 0x90, 0x22, 0x8f, 0xa0, 0x74, 0x68, 0x07, 0x1d, 0x61, + 0x35, 0x2a, 0x05, 0xb1, 0x71, 0xbe, 0x39, 0x54, 0x47, 0x39, 0x42, 0x34, 0x2d, 0x0f, 0x43, 0x4c, + 0x8c, 0xe0, 0xb9, 0xb3, 0xc5, 0x7f, 0x88, 0xd8, 0x54, 0x38, 0x7a, 0xa5, 0x64, 0x03, 0xc1, 0xc0, + 0x48, 0x86, 0x30, 0x98, 0xe2, 0x3f, 0x9a, 0xf4, 0x83, 0x3e, 0xdf, 0xad, 0x22, 0x04, 0x19, 0x36, + 0x62, 0x0d, 0x41, 0xe4, 0x8c, 0x3c, 0x8c, 0xc1, 0x62, 0x42, 0x09, 0xdf, 0x7d, 0x87, 0x1d, 0xea, + 0x54, 0x4a, 0xc9, 0xdd, 0xf7, 0xb0, 0x43, 0x1d, 0x14, 0x1c, 0xe2, 0x02, 0x58, 0xda, 0x93, 0xa8, + 0xc0, 0x08, 0x71, 0x4a, 0xe4, 0x90, 0x34, 0x2e, 0xf2, 0xab, 0x3e, 0xfa, 0x8d, 0x31, 0x15, 0xc6, + 0xdf, 0xe5, 0xa0, 0xcc, 0x0f, 0x47, 0xb8, 0xa1, 0x5f, 0x81, 0x42, 0x60, 0xfa, 0x6d, 0xe5, 0x88, + 0x95, 0xa2, 0x53, 0xbc, 0x23, 0xa8, 0xa8, 0xb8, 0xc4, 0x84, 0x7c, 0x60, 0xb2, 0xfd, 0xf0, 0x9a, + 0xf9, 0x85, 0xa1, 0xfa, 0xa8, 0x4e, 0x65, 0x74, 0xc3, 0xf0, 0x5f, 0x0c, 0x25, 0x32, 0xb9, 0x01, + 0x45, 0xee, 0x04, 0xad, 0x9a, 0x4c, 0xc6, 0x55, 0xc5, 0xc6, 0x14, 0x3f, 0x85, 0xab, 0x8a, 0x86, + 0x9a, 0x6b, 0x7c, 0x07, 0x2e, 0xae, 0x7c, 0x48, 0xad, 0x7e, 0xe0, 0xfa, 0xd2, 0xb3, 0x26, 0x77, + 0x80, 0x30, 0xea, 0x1f, 0xd8, 0x16, 0xad, 0x5b, 0x96, 0xdb, 0x77, 0x82, 0xad, 0xe8, 0xd4, 0xcf, + 0x2b, 0x6d, 0xa4, 0x39, 0x20, 0x81, 0x19, 0xad, 0x8c, 0xbf, 0x98, 0x80, 0x72, 0x2c, 0x36, 0xe3, + 0xab, 0xe8, 0x53, 0xcf, 0x4d, 0xdb, 0x10, 0xee, 0xfd, 0xa3, 0xe0, 0x70, 0x1b, 0xe2, 0xd3, 0x03, + 0x9b, 0xd9, 0xae, 0x93, 0xb6, 0x21, 0xa8, 0xe8, 0xa8, 0x25, 0x48, 0x15, 0xf2, 0x2d, 0xea, 0x05, + 0x1d, 0x31, 0xc8, 0x89, 0x46, 0x89, 0x4f, 0xc4, 0x32, 0x27, 0xa0, 0xa4, 0x73, 0x81, 0x3d, 0x1a, + 0x58, 0x9d, 0xca, 0x84, 0x38, 0x77, 0x42, 0x60, 0x95, 0x13, 0x50, 0xd2, 0x33, 0xbc, 0xe8, 0xfc, + 0xd3, 0xf7, 0xa2, 0x0b, 0xe7, 0xec, 0x45, 0x13, 0x0f, 0xe6, 0x18, 0xeb, 0x6c, 0xfb, 0xf6, 0x81, + 0x19, 0x50, 0xd1, 0x58, 0xe8, 0x99, 0x7c, 0x12, 0x3d, 0x57, 0xf9, 0x45, 0xdf, 0x6c, 0xde, 0x4e, + 0xa3, 0x60, 0x16, 0x34, 0x69, 0xc2, 0x15, 0xdb, 0x61, 0xd4, 0xea, 0xfb, 0x74, 0xbd, 0xed, 0xb8, + 0x3e, 0xbd, 0xed, 0x32, 0x0e, 0xa7, 0x12, 0x12, 0x2f, 0xaa, 0x45, 0xbb, 0xb2, 0x9e, 0x25, 0x84, + 0xd9, 0x6d, 0x8d, 0x7f, 0xc8, 0xc1, 0x54, 0x3c, 0x1c, 0x25, 0x0c, 0xa0, 0xb3, 0xbc, 0xda, 0x94, + 0x3b, 0x53, 0x79, 0x7c, 0xef, 0x0d, 0x1d, 0xe5, 0x4a, 0x98, 0xc8, 0x85, 0x8f, 0x68, 0x18, 0x53, + 0x73, 0x86, 0x7c, 0xd7, 0x4b, 0x90, 0xdf, 0x73, 0x7d, 0x8b, 0xaa, 0xb3, 0xa5, 0xcf, 0xe0, 0x2a, + 0x27, 0xa2, 0xe4, 0x19, 0xff, 0x9a, 0x83, 0x98, 0x06, 0xf2, 0x6b, 0x30, 0xcd, 0x75, 0x6c, 0xf8, + 0xbb, 0x89, 0xd1, 0x34, 0x86, 0x1e, 0x8d, 0x46, 0x6a, 0x5c, 0x51, 0xfa, 0xa7, 0x13, 0x64, 0x4c, + 0xea, 0x23, 0x5f, 0x83, 0x92, 0xd9, 0x6a, 0xf9, 0x94, 0x31, 0x2a, 0x4d, 0x4f, 0xa9, 0x31, 0x2d, + 0xee, 0xca, 0x90, 0x88, 0x11, 0x9f, 0x1f, 0x43, 0x1e, 0xff, 0xf3, 0x9d, 0xad, 0x7c, 0x41, 0x7d, + 0x0c, 0xb9, 0x12, 0x4e, 0x47, 0x2d, 0x61, 0x7c, 0x6f, 0x02, 0x92, 0xba, 0x49, 0x0b, 0x66, 0xf6, + 0xfd, 0xdd, 0xa5, 0x25, 0xd3, 0xea, 0x0c, 0x15, 0x9d, 0xce, 0xf1, 0xb0, 0x78, 0x23, 0x89, 0x80, + 0x69, 0x48, 0xa5, 0x65, 0x83, 0x1e, 0x05, 0xe6, 0xee, 0x30, 0x01, 0x6a, 0xa8, 0x25, 0x8e, 0x80, + 0x69, 0x48, 0xf2, 0x0d, 0x28, 0xef, 0xfb, 0xbb, 0xe1, 0x21, 0x57, 0xd3, 0x31, 0xa7, 0xa6, 0xa3, + 0xbc, 0x11, 0xb1, 0x30, 0x2e, 0xc7, 0xa7, 0x70, 0xdf, 0xdf, 0x45, 0x6a, 0x76, 0xc3, 0xd4, 0xa7, + 0x9e, 0xc2, 0x0d, 0x45, 0x47, 0x2d, 0x41, 0x3c, 0x20, 0xfb, 0xe1, 0xec, 0xe9, 0x14, 0x87, 0xb2, + 0x45, 0x37, 0xb2, 0x46, 0xa3, 0x85, 0xe2, 0x03, 0x7a, 0x8e, 0xdb, 0xe6, 0x8d, 0x01, 0x1c, 0xcc, + 0xc0, 0x26, 0xdf, 0x86, 0xab, 0xfb, 0xfe, 0xae, 0x32, 0xe4, 0xdb, 0xbe, 0xed, 0x58, 0xb6, 0x97, + 0xc8, 0x79, 0x56, 0x55, 0x77, 0xaf, 0x6e, 0x64, 0x8b, 0xe1, 0x69, 0xed, 0x8d, 0xd7, 0x60, 0x2a, + 0x9e, 0x33, 0xfb, 0x92, 0x3c, 0x8b, 0xf1, 0x1f, 0x39, 0x28, 0xac, 0x3b, 0x5e, 0xff, 0x27, 0x24, + 0xfd, 0xfe, 0xa7, 0x13, 0x30, 0xc1, 0x5d, 0x2f, 0x72, 0x03, 0x26, 0x82, 0x23, 0x4f, 0xde, 0xad, + 0xe3, 0x8d, 0xcb, 0xa1, 0xa1, 0xd9, 0x39, 0xf2, 0xe8, 0x63, 0xf5, 0x2f, 0x0a, 0x09, 0xf2, 0x2e, + 0x14, 0x9c, 0x7e, 0xef, 0x81, 0xd9, 0x55, 0x46, 0xe9, 0x95, 0xd0, 0xb5, 0xd8, 0x12, 0xd4, 0xc7, + 0xc7, 0xd5, 0xcb, 0xd4, 0xb1, 0xdc, 0x96, 0xed, 0xb4, 0x17, 0x1f, 0x31, 0xd7, 0xa9, 0x6d, 0xf5, + 0x7b, 0xbb, 0xd4, 0x47, 0xd5, 0x8a, 0x87, 0x47, 0xbb, 0xae, 0xdb, 0xe5, 0x00, 0xe3, 0xc9, 0xf0, + 0xa8, 0x21, 0xc9, 0x18, 0xf2, 0xb9, 0x17, 0xc3, 0x02, 0x9f, 0x4b, 0x4e, 0x24, 0xbd, 0x98, 0xa6, + 0xa0, 0xa2, 0xe2, 0x92, 0x1e, 0x14, 0x7a, 0xa6, 0xc7, 0xe5, 0xf2, 0x62, 0xca, 0x56, 0x86, 0xf6, + 0x4f, 0x6b, 0x9b, 0x02, 0x67, 0xc5, 0x09, 0xfc, 0xa3, 0x48, 0x9d, 0x24, 0xa2, 0x52, 0x42, 0x6c, + 0x98, 0xec, 0xda, 0x2c, 0xe0, 0xfa, 0x0a, 0x23, 0xec, 0x0a, 0xae, 0xef, 0x81, 0xd9, 0xed, 0xd3, + 0x68, 0x06, 0xee, 0x4a, 0x58, 0x0c, 0xf1, 0xe7, 0x8f, 0xa0, 0x1c, 0xeb, 0x11, 0x99, 0x95, 0xb9, + 0x45, 0xb1, 0x79, 0x45, 0x3a, 0x91, 0xec, 0x40, 0xfe, 0x80, 0x63, 0x28, 0x63, 0x33, 0x62, 0x4f, + 0x50, 0x82, 0xbd, 0x35, 0xf6, 0x66, 0xee, 0xad, 0xe2, 0xf7, 0xff, 0xa4, 0x7a, 0xe1, 0xe3, 0x7f, + 0xbe, 0x7e, 0xc1, 0xf8, 0xfb, 0x71, 0x28, 0x69, 0x91, 0xff, 0xdb, 0x3b, 0xc5, 0x4f, 0xed, 0x94, + 0x3b, 0xa3, 0xcd, 0xd7, 0x99, 0xb6, 0x4b, 0x3d, 0xb9, 0x5d, 0xa6, 0x1a, 0x3f, 0x13, 0x5b, 0xea, + 0xc7, 0xc7, 0xd5, 0x4a, 0x72, 0x12, 0xd0, 0x3c, 0xdc, 0xa4, 0x8c, 0x99, 0x6d, 0x1a, 0x6d, 0x83, + 0x6f, 0x7e, 0xd9, 0x36, 0xb8, 0x1c, 0xdf, 0x06, 0xa5, 0xec, 0x65, 0xfc, 0x78, 0x1c, 0x8a, 0x9b, + 0x61, 0x7e, 0xe9, 0xb7, 0x72, 0x50, 0x36, 0x1d, 0xc7, 0x0d, 0x4c, 0x99, 0x4c, 0x93, 0xe6, 0x6d, + 0x6b, 0xa8, 0xe9, 0x08, 0x41, 0x6b, 0xf5, 0x08, 0x50, 0x4e, 0x89, 0xbe, 0x99, 0x62, 0x1c, 0x8c, + 0xeb, 0x25, 0x1f, 0x40, 0xa1, 0x6b, 0xee, 0xd2, 0x6e, 0x68, 0xed, 0xd6, 0x47, 0xeb, 0xc1, 0x5d, + 0x81, 0x95, 0x5a, 0x0f, 0x49, 0x44, 0xa5, 0x68, 0xfe, 0x5d, 0x98, 0x4d, 0x77, 0xf4, 0x49, 0x66, + 0x94, 0x2f, 0x46, 0x4c, 0xcd, 0x93, 0x34, 0x35, 0xfe, 0xa6, 0x04, 0xb0, 0xe5, 0xb6, 0xa8, 0x4a, + 0xc8, 0xcc, 0xc3, 0x98, 0xdd, 0x52, 0x57, 0x11, 0xa8, 0xde, 0x8e, 0xad, 0x2f, 0xe3, 0x98, 0xdd, + 0xd2, 0x29, 0x8e, 0xb1, 0x53, 0x53, 0x1c, 0xdf, 0x80, 0x72, 0xcb, 0x66, 0x5e, 0xd7, 0x3c, 0xda, + 0xca, 0xf0, 0x05, 0x96, 0x23, 0x16, 0xc6, 0xe5, 0xc8, 0xab, 0xea, 0xfc, 0x4e, 0x24, 0xf2, 0x73, + 0xe1, 0xf9, 0x2d, 0xf2, 0xee, 0xc5, 0xce, 0xf0, 0x9b, 0x30, 0x15, 0xa6, 0x10, 0x84, 0x96, 0xbc, + 0x68, 0x15, 0x9e, 0xfa, 0xa9, 0x9d, 0x18, 0x0f, 0x13, 0x92, 0xe9, 0x14, 0x47, 0xe1, 0x99, 0xa4, + 0x38, 0x96, 0x61, 0x96, 0x05, 0xae, 0x4f, 0x5b, 0xa1, 0xc4, 0xfa, 0x72, 0x85, 0x24, 0x13, 0x91, + 0xcd, 0x14, 0x1f, 0x07, 0x5a, 0x90, 0x6d, 0xb8, 0x1c, 0x76, 0x22, 0x3e, 0xc0, 0xca, 0x9c, 0x40, + 0xba, 0xa6, 0x90, 0x2e, 0x3f, 0xcc, 0x90, 0xc1, 0xcc, 0x96, 0xe4, 0x75, 0xc8, 0x7b, 0x1d, 0x93, + 0x51, 0x95, 0xd4, 0x08, 0x63, 0xd7, 0xfc, 0x36, 0x27, 0x3e, 0x3e, 0xae, 0x96, 0xf8, 0xb4, 0x8b, + 0x1f, 0x28, 0x05, 0xc9, 0x4d, 0x80, 0x5d, 0xb7, 0xef, 0xb4, 0x4c, 0xff, 0x68, 0x7d, 0x59, 0x44, + 0x32, 0xb1, 0x97, 0xdf, 0x86, 0xe6, 0x60, 0x4c, 0x8a, 0x1b, 0xcc, 0x9e, 0x34, 0x1d, 0x2a, 0x37, + 0xa1, 0x0d, 0xa6, 0xb6, 0x28, 0x8a, 0x4f, 0xde, 0x87, 0x92, 0xc8, 0x1e, 0xd2, 0x56, 0x3d, 0x50, + 0x09, 0x8a, 0x27, 0x49, 0xdb, 0x69, 0xaf, 0xa2, 0x19, 0x82, 0x60, 0x84, 0x47, 0x7e, 0x05, 0x60, + 0xcf, 0x76, 0x6c, 0xd6, 0x11, 0xe8, 0xe5, 0x27, 0x46, 0xd7, 0xe3, 0x5c, 0xd5, 0x28, 0x18, 0x43, + 0xe4, 0x31, 0x8f, 0xe7, 0xb6, 0xd6, 0xb7, 0x2b, 0x53, 0x62, 0x94, 0x3a, 0xe6, 0xd9, 0xe6, 0x44, + 0x94, 0x3c, 0x72, 0x03, 0x8a, 0x2d, 0x93, 0xf6, 0x5c, 0x87, 0xb6, 0x2a, 0xd3, 0x51, 0xde, 0x61, + 0x59, 0xd1, 0x50, 0x73, 0xc9, 0x77, 0xa1, 0x60, 0x0b, 0x97, 0xaf, 0x72, 0x51, 0x74, 0xf5, 0xed, + 0xe1, 0x2e, 0x05, 0x01, 0xd1, 0x00, 0x6e, 0x71, 0xe4, 0xdf, 0xa8, 0x60, 0x89, 0x05, 0x93, 0x6e, + 0x3f, 0x10, 0x1a, 0x66, 0x84, 0x86, 0xe1, 0xf2, 0x2c, 0xf7, 0x24, 0x86, 0x7c, 0x89, 0x57, 0x3f, + 0x30, 0x44, 0xe6, 0xe3, 0xb5, 0x3a, 0x76, 0xb7, 0xe5, 0x53, 0xa7, 0x32, 0x2b, 0x42, 0x2a, 0x31, + 0xde, 0x25, 0x45, 0x43, 0xcd, 0x25, 0x3f, 0x0f, 0xd3, 0x6e, 0x3f, 0x10, 0xfb, 0x86, 0x6f, 0x3b, + 0x56, 0xb9, 0x24, 0xc4, 0x2f, 0xf1, 0xb0, 0xed, 0x5e, 0x9c, 0x81, 0x49, 0x39, 0xe3, 0x22, 0x4c, + 0xc5, 0xcb, 0x57, 0x8c, 0x3f, 0x18, 0x83, 0xb0, 0x1f, 0x3f, 0x09, 0xde, 0x32, 0x31, 0xa0, 0xe0, + 0x53, 0xd6, 0xef, 0x06, 0xca, 0xd8, 0x8a, 0xb5, 0x46, 0x41, 0x41, 0xc5, 0x31, 0x0e, 0x61, 0x9a, + 0xf7, 0xb6, 0xdb, 0xa5, 0xdd, 0x66, 0x40, 0x3d, 0x46, 0xf6, 0x20, 0xcf, 0xf8, 0x1f, 0x6a, 0x4e, + 0x46, 0x7c, 0x88, 0x0b, 0xa8, 0x17, 0xed, 0x77, 0xa1, 0x00, 0x25, 0xbc, 0xf1, 0x87, 0x63, 0x50, + 0xd2, 0xf3, 0x74, 0x86, 0x0c, 0xf9, 0xcb, 0x30, 0xd9, 0xa2, 0x7b, 0x26, 0x1f, 0x8d, 0x7a, 0xab, + 0xe6, 0xdb, 0x6a, 0x59, 0x92, 0x30, 0xe4, 0x91, 0x6a, 0x78, 0x99, 0xc9, 0x21, 0x8b, 0xac, 0x55, + 0xdc, 0x57, 0x24, 0xfb, 0x50, 0x12, 0x7f, 0xac, 0x86, 0x75, 0x35, 0xc3, 0xae, 0xfb, 0x83, 0x10, + 0x45, 0xe6, 0x02, 0xf4, 0x4f, 0x8c, 0xf0, 0x53, 0xf5, 0x30, 0xf9, 0xb3, 0xd4, 0xc3, 0x18, 0xab, + 0xc0, 0x0d, 0xc3, 0xda, 0x12, 0x79, 0x07, 0x8a, 0x4c, 0x6d, 0x5d, 0x35, 0x2f, 0x5f, 0xd1, 0x6f, + 0x5a, 0x8a, 0xfe, 0xf8, 0xb8, 0x3a, 0x2d, 0x84, 0x43, 0x02, 0xea, 0x26, 0xc6, 0x22, 0x94, 0x63, + 0xf5, 0x03, 0x7c, 0x86, 0xf5, 0xdb, 0x5f, 0x6c, 0x86, 0x97, 0xcd, 0xc0, 0x44, 0xc1, 0x31, 0x1e, + 0x8f, 0xc1, 0x2c, 0x52, 0xe6, 0xf6, 0x7d, 0x8b, 0xc6, 0x33, 0xb3, 0xa6, 0x25, 0x8a, 0x8a, 0x52, + 0x99, 0xd9, 0xba, 0xa0, 0xa2, 0xe2, 0x92, 0xb7, 0x61, 0xba, 0x47, 0xfd, 0xb6, 0x3e, 0x6c, 0x6a, + 0x91, 0x74, 0x7e, 0x65, 0x33, 0xce, 0xc4, 0xa4, 0x2c, 0x8f, 0xf7, 0x7b, 0xa6, 0x63, 0xef, 0x51, + 0x16, 0xa4, 0x53, 0x26, 0x9b, 0x8a, 0x8e, 0x5a, 0x82, 0xac, 0xc1, 0x25, 0x46, 0x83, 0x7b, 0x87, + 0x0e, 0xf5, 0xf5, 0xbb, 0x8f, 0x58, 0xc9, 0x62, 0xe3, 0xf9, 0xf0, 0xa1, 0xac, 0x99, 0x16, 0xc0, + 0xc1, 0x36, 0xe2, 0xf6, 0xed, 0x5b, 0x16, 0x65, 0x6c, 0xc9, 0x75, 0x5a, 0xb6, 0x2e, 0x9d, 0x8a, + 0xdf, 0xbe, 0x29, 0x3e, 0x0e, 0xb4, 0xe0, 0x28, 0x7b, 0xa6, 0xdd, 0xed, 0xfb, 0x34, 0x42, 0x29, + 0x24, 0x51, 0x56, 0x53, 0x7c, 0x1c, 0x68, 0x61, 0xbc, 0x0e, 0xd3, 0x48, 0x03, 0xff, 0x48, 0xcf, + 0x49, 0x15, 0xf2, 0x5d, 0xbb, 0x67, 0xcb, 0xe4, 0x4f, 0x5e, 0x6e, 0xe4, 0xbb, 0x9c, 0x80, 0x92, + 0x6e, 0x7c, 0x3f, 0x07, 0x10, 0x95, 0x05, 0x91, 0x7d, 0x28, 0xb2, 0x5b, 0x8d, 0xbe, 0xb5, 0xaf, + 0xf3, 0x45, 0x43, 0x3e, 0x2b, 0x28, 0x90, 0xd8, 0x03, 0xaa, 0xa2, 0xa0, 0x56, 0xf0, 0x65, 0x45, + 0x23, 0x7f, 0x39, 0x0e, 0xba, 0x15, 0x5f, 0x5c, 0xea, 0xb4, 0x3c, 0xd7, 0x76, 0x82, 0xf4, 0xd3, + 0xec, 0x8a, 0xa2, 0xa3, 0x96, 0xe0, 0xfb, 0x6d, 0x57, 0x0e, 0x62, 0x2c, 0xb9, 0xdf, 0x54, 0x1f, + 0x14, 0x97, 0xcb, 0xf9, 0xb4, 0xcd, 0xe7, 0x7a, 0x3c, 0x29, 0x87, 0x82, 0x8a, 0x8a, 0xcb, 0xaf, + 0x99, 0x30, 0x61, 0xaa, 0xf6, 0x88, 0xb8, 0x66, 0xc2, 0xdc, 0x2a, 0x6a, 0x2e, 0xe9, 0xc0, 0x8c, + 0x29, 0x96, 0x36, 0x4a, 0x02, 0x3f, 0x51, 0x3e, 0x3b, 0x2a, 0x49, 0x49, 0xa2, 0x60, 0x1a, 0x96, + 0x6b, 0x62, 0x51, 0xf3, 0x27, 0x4f, 0x6b, 0x6b, 0x4d, 0xcd, 0x24, 0x0a, 0xa6, 0x61, 0xb9, 0x87, + 0xe5, 0xbb, 0x5d, 0x5a, 0xc7, 0x2d, 0xe5, 0xc9, 0x69, 0x0f, 0x0b, 0x25, 0x19, 0x43, 0xbe, 0xf1, + 0x3b, 0x39, 0xb8, 0xd8, 0xb4, 0x7c, 0xdb, 0x0b, 0xf4, 0xd9, 0xdf, 0x12, 0xb5, 0x44, 0x81, 0xc9, + 0x7d, 0x1f, 0xb5, 0xa7, 0x5e, 0x3c, 0x25, 0x9f, 0x26, 0x85, 0x12, 0xa5, 0x46, 0x92, 0x84, 0x11, + 0x84, 0x88, 0x7a, 0x85, 0x75, 0x49, 0xaf, 0x6d, 0x53, 0x50, 0x51, 0x71, 0x8d, 0x1f, 0xe4, 0xa0, + 0xa8, 0x5f, 0xaf, 0x5e, 0x82, 0xbc, 0x78, 0x14, 0x51, 0x7b, 0x47, 0x5f, 0x26, 0x4b, 0x9c, 0x88, + 0x92, 0xc7, 0x85, 0x84, 0x3b, 0xa7, 0x80, 0x63, 0x37, 0x8e, 0xe9, 0x07, 0x28, 0x79, 0x7c, 0xd3, + 0x52, 0xa7, 0xa5, 0xf6, 0x8b, 0xde, 0xb4, 0x2b, 0x4e, 0x0b, 0x39, 0x5d, 0xd4, 0xc6, 0xb8, 0x7e, + 0xcf, 0x0c, 0xd2, 0x31, 0xf9, 0xaa, 0xa0, 0xa2, 0xe2, 0x1a, 0x6f, 0xc3, 0x8c, 0x7a, 0x18, 0xd7, + 0x13, 0xc5, 0x7d, 0xb7, 0xbe, 0x6f, 0x6a, 0x33, 0x99, 0x57, 0xbe, 0x9b, 0xa2, 0xa1, 0xe6, 0x1a, + 0xd3, 0x50, 0x8e, 0xd5, 0xeb, 0x1a, 0xff, 0x75, 0x15, 0xf4, 0xfb, 0xee, 0x4f, 0x5f, 0x89, 0x87, + 0x0a, 0xa1, 0x2c, 0xed, 0x0d, 0xe7, 0x47, 0xf7, 0x86, 0xf5, 0x9a, 0xa7, 0x3c, 0xe2, 0x76, 0xe4, + 0x11, 0x17, 0xce, 0xc1, 0x23, 0x8e, 0x4a, 0x77, 0xd2, 0x5e, 0xf1, 0xef, 0xe6, 0x60, 0xca, 0xe1, + 0x11, 0xb7, 0x3a, 0xeb, 0x95, 0x49, 0xe1, 0x85, 0xdd, 0x1b, 0x69, 0x12, 0x6b, 0x5b, 0x31, 0x44, + 0x99, 0x6c, 0xd0, 0x11, 0x71, 0x9c, 0x85, 0x09, 0xd5, 0x64, 0x15, 0x8a, 0xe6, 0x1e, 0x0f, 0x63, + 0x82, 0x23, 0xf5, 0x50, 0x7d, 0x2d, 0xeb, 0xf4, 0xd7, 0x95, 0x8c, 0xdc, 0xf3, 0xe1, 0x2f, 0xd4, + 0x6d, 0xf9, 0xcd, 0xa4, 0x2b, 0x8f, 0x4a, 0x23, 0xdc, 0x4c, 0x61, 0xd6, 0x24, 0xe6, 0x1c, 0x28, + 0x4a, 0xac, 0x10, 0xc9, 0x80, 0x82, 0x0c, 0x94, 0x44, 0x94, 0x58, 0x94, 0x3e, 0xaf, 0x0c, 0xa2, + 0x50, 0x71, 0x48, 0x3b, 0x74, 0x71, 0xcb, 0x62, 0x72, 0x1b, 0x43, 0xbb, 0xfd, 0xda, 0x6b, 0xce, + 0xf6, 0x71, 0xc9, 0x9d, 0xb8, 0x01, 0x9d, 0x3a, 0x8b, 0x01, 0x9d, 0x3e, 0xd5, 0x78, 0xb6, 0xa1, + 0xc0, 0x84, 0x79, 0x16, 0xd1, 0x61, 0xf9, 0xe6, 0xd2, 0x70, 0xb7, 0x7b, 0xc2, 0xc2, 0xcb, 0xd9, + 0x91, 0x34, 0x54, 0xf0, 0xc4, 0x85, 0xa2, 0xaf, 0xbc, 0x40, 0x15, 0x60, 0x0e, 0x97, 0x9f, 0x4e, + 0xbb, 0x92, 0x72, 0x7f, 0x84, 0x54, 0xd4, 0x4a, 0xc8, 0xfb, 0x30, 0xde, 0x32, 0xdb, 0x2a, 0xd4, + 0xfc, 0xd6, 0xd0, 0x4f, 0xfa, 0xa1, 0x1a, 0x51, 0x28, 0xbb, 0x5c, 0x5f, 0x43, 0x8e, 0x4a, 0xf6, + 0xa3, 0xea, 0xa6, 0xd9, 0x11, 0xea, 0x4f, 0x53, 0x16, 0x5f, 0x06, 0x1f, 0x03, 0xf5, 0x51, 0x2b, + 0x30, 0x79, 0xe0, 0x76, 0xfb, 0x3d, 0x15, 0xa3, 0x96, 0x6f, 0xce, 0x67, 0xad, 0xf6, 0x03, 0x21, + 0x12, 0x19, 0x01, 0xf9, 0x9b, 0x61, 0xd8, 0x96, 0xfc, 0x46, 0x0e, 0x2e, 0xf2, 0xa3, 0xa3, 0xf7, + 0x01, 0xab, 0x90, 0x11, 0x76, 0xea, 0x7d, 0x46, 0xfd, 0x68, 0x87, 0x3d, 0xa7, 0xd4, 0x5e, 0x5c, + 0x4f, 0x68, 0xc0, 0x94, 0x46, 0xe2, 0x41, 0x91, 0xd9, 0x2d, 0x6a, 0x99, 0x3e, 0xab, 0xcc, 0x9d, + 0x9b, 0xf6, 0xc8, 0xa9, 0x54, 0xd8, 0xa8, 0xb5, 0x90, 0xdf, 0x14, 0x35, 0xc3, 0xaa, 0x6a, 0x5e, + 0x7d, 0xc9, 0x70, 0xf9, 0x3c, 0xbf, 0x64, 0x98, 0x93, 0x05, 0xc3, 0x09, 0x0d, 0x98, 0x56, 0x49, + 0xee, 0xc1, 0x15, 0x59, 0x33, 0x96, 0x2e, 0x71, 0xbb, 0x22, 0x5e, 0x10, 0x9e, 0x3f, 0x39, 0xae, + 0x5e, 0xa9, 0x67, 0x09, 0x60, 0x76, 0x3b, 0xf2, 0x11, 0x4c, 0xfb, 0x71, 0xd7, 0xbe, 0xf2, 0xdc, + 0x08, 0xcf, 0xd7, 0x89, 0x20, 0x41, 0xe6, 0x40, 0x12, 0x24, 0x4c, 0xea, 0x22, 0x6f, 0x40, 0xd9, + 0x53, 0x96, 0xca, 0x66, 0xbd, 0xca, 0x55, 0x31, 0x06, 0x71, 0xa3, 0x6e, 0x47, 0x64, 0x8c, 0xcb, + 0x90, 0xfb, 0x50, 0x0e, 0xdc, 0x2e, 0xf5, 0x55, 0xaa, 0xbd, 0x22, 0x16, 0x7f, 0x21, 0x6b, 0x27, + 0xef, 0x68, 0xb1, 0x28, 0x91, 0x1b, 0xd1, 0x18, 0xc6, 0x71, 0x78, 0x84, 0x18, 0x16, 0x60, 0xfa, + 0x22, 0x1c, 0x7e, 0x3e, 0x19, 0x21, 0x36, 0xe3, 0x4c, 0x4c, 0xca, 0xf2, 0x98, 0xcf, 0xf3, 0x6d, + 0xd7, 0xb7, 0x83, 0xa3, 0xa5, 0xae, 0xc9, 0x98, 0x00, 0x98, 0x17, 0x00, 0x3a, 0xe6, 0xdb, 0x4e, + 0x0b, 0xe0, 0x60, 0x1b, 0xee, 0xaa, 0x85, 0xc4, 0xca, 0x0b, 0x91, 0xab, 0x16, 0xb6, 0x45, 0xcd, + 0x3d, 0xa5, 0x98, 0xe7, 0xda, 0x30, 0xc5, 0x3c, 0xa4, 0x05, 0xd7, 0xcc, 0x7e, 0xe0, 0xf6, 0x38, + 0x21, 0xd9, 0x64, 0xc7, 0xdd, 0xa7, 0x4e, 0xe5, 0xba, 0xb8, 0xab, 0xae, 0x9f, 0x1c, 0x57, 0xaf, + 0xd5, 0xbf, 0x40, 0x0e, 0xbf, 0x10, 0x85, 0xf4, 0xa0, 0x48, 0x55, 0x41, 0x52, 0xe5, 0x2b, 0x23, + 0x5c, 0x12, 0xc9, 0xaa, 0x26, 0x39, 0x41, 0x21, 0x0d, 0xb5, 0x0a, 0xb2, 0x03, 0xe5, 0x8e, 0xcb, + 0x82, 0x7a, 0xd7, 0x36, 0x19, 0x65, 0x95, 0x17, 0xc5, 0x3e, 0xc9, 0xbc, 0xdf, 0x6e, 0x87, 0x62, + 0xd1, 0x36, 0xb9, 0x1d, 0xb5, 0xc4, 0x38, 0x0c, 0xa1, 0x22, 0x38, 0xea, 0x8b, 0x55, 0x73, 0x9d, + 0x80, 0x7e, 0x18, 0x54, 0x16, 0xc4, 0x58, 0x5e, 0xc9, 0x42, 0xde, 0x76, 0x5b, 0xcd, 0xa4, 0xb4, + 0x3c, 0xe5, 0x29, 0x22, 0xa6, 0x31, 0xc9, 0x9b, 0x30, 0xe5, 0xb9, 0xad, 0xa6, 0x47, 0xad, 0x6d, + 0x33, 0xb0, 0x3a, 0x95, 0x6a, 0xf2, 0xa1, 0x60, 0x3b, 0xc6, 0xc3, 0x84, 0xe4, 0xfc, 0x7b, 0x70, + 0x69, 0xc0, 0x9f, 0x7a, 0xa2, 0x57, 0x95, 0x3f, 0xcb, 0x41, 0xdc, 0x9d, 0x3d, 0x77, 0xbf, 0x7f, + 0x0d, 0x2e, 0xa9, 0xfa, 0x62, 0x7e, 0xd9, 0x76, 0xfb, 0x41, 0x18, 0x25, 0xc7, 0xf2, 0x23, 0x98, + 0x16, 0xc0, 0xc1, 0x36, 0xc6, 0x9f, 0xe7, 0x60, 0x3a, 0x61, 0xbe, 0xcf, 0x3d, 0x22, 0x5c, 0x05, + 0xd2, 0xb3, 0x7d, 0xdf, 0xf5, 0xe5, 0x1d, 0xb8, 0xc9, 0xf7, 0x32, 0x53, 0xdf, 0x26, 0x88, 0x82, + 0x8c, 0xcd, 0x01, 0x2e, 0x66, 0xb4, 0x30, 0xfe, 0x2a, 0x07, 0x51, 0x02, 0x4e, 0x57, 0x21, 0xe5, + 0x4e, 0xad, 0x42, 0x7a, 0x15, 0x8a, 0x8f, 0x98, 0xeb, 0x6c, 0x47, 0xb5, 0x4a, 0x7a, 0x42, 0xef, + 0x34, 0xef, 0x6d, 0x09, 0x49, 0x2d, 0x21, 0xa4, 0x3f, 0x58, 0xb5, 0xbb, 0xc1, 0x60, 0x45, 0xcf, + 0x9d, 0x5f, 0x94, 0x74, 0xd4, 0x12, 0x64, 0x11, 0x4a, 0x3a, 0xe7, 0xab, 0x42, 0x49, 0x3d, 0x09, + 0x3a, 0xe1, 0x89, 0x91, 0x8c, 0xf1, 0xc3, 0x31, 0x28, 0xfe, 0x7f, 0xfb, 0xd0, 0x62, 0x3f, 0xf5, + 0xa1, 0xc5, 0xd2, 0x88, 0x69, 0xe4, 0x2f, 0xfa, 0xc8, 0xc2, 0xf8, 0x34, 0x07, 0x53, 0xcf, 0xf0, + 0x5b, 0x87, 0xdd, 0xe4, 0xb7, 0x0e, 0xef, 0x8c, 0x34, 0xb4, 0x53, 0xbe, 0x73, 0xf8, 0xdb, 0xb9, + 0x68, 0x48, 0x7c, 0x5a, 0x89, 0x03, 0xa5, 0xf0, 0x80, 0x87, 0xa9, 0xf9, 0x77, 0x46, 0x0a, 0x0a, + 0xa3, 0x4d, 0x19, 0x52, 0x18, 0x46, 0x2a, 0xc8, 0x4d, 0x00, 0xca, 0x2d, 0x9b, 0xcc, 0xdb, 0x8d, + 0x25, 0x33, 0xd7, 0x2b, 0x9a, 0x83, 0x31, 0xa9, 0x67, 0x9f, 0x70, 0xc8, 0xbe, 0xa2, 0x27, 0x9e, + 0xca, 0x15, 0x7d, 0xed, 0xdc, 0xaf, 0xe8, 0x17, 0x9f, 0xfe, 0x15, 0x1d, 0x0b, 0x48, 0xf2, 0x23, + 0x04, 0x24, 0x1f, 0xc1, 0x65, 0xf9, 0xe7, 0x52, 0xd7, 0xb4, 0x7b, 0x7a, 0xbf, 0xa8, 0x72, 0xa2, + 0xaf, 0x66, 0x5e, 0xcc, 0xd4, 0x67, 0x36, 0x0b, 0xa8, 0x13, 0x3c, 0x88, 0x5a, 0x46, 0x6f, 0xd1, + 0x0f, 0x32, 0xe0, 0x30, 0x53, 0x49, 0xda, 0x83, 0x9d, 0x3c, 0x83, 0x07, 0xfb, 0x83, 0x1c, 0x5c, + 0x31, 0xb3, 0x3e, 0x8f, 0x54, 0x79, 0x8c, 0x3b, 0x23, 0xc5, 0x13, 0x09, 0x44, 0x15, 0x0f, 0x64, + 0xb1, 0x30, 0xbb, 0x0f, 0xe4, 0xe5, 0x28, 0x24, 0x2d, 0x89, 0x4d, 0x95, 0x1d, 0x4c, 0x7e, 0x2f, + 0x9d, 0x0a, 0x02, 0x31, 0xdb, 0xcd, 0x91, 0x0d, 0xf6, 0x39, 0xa4, 0x83, 0xca, 0x23, 0xa4, 0x83, + 0x52, 0xe1, 0xc5, 0xd4, 0x39, 0x85, 0x17, 0x0e, 0xcc, 0xda, 0x3d, 0xb3, 0x4d, 0xb7, 0xfb, 0xdd, + 0xae, 0xcc, 0x7e, 0xb3, 0xca, 0xb4, 0xc0, 0xce, 0xac, 0x01, 0xe5, 0xe1, 0x5e, 0x37, 0xfd, 0xf1, + 0x90, 0x7e, 0xb0, 0x59, 0x4f, 0x21, 0xe1, 0x00, 0x36, 0xdf, 0x96, 0xdc, 0x6d, 0xdd, 0xa2, 0x01, + 0x9f, 0x6d, 0x91, 0x29, 0x51, 0x9f, 0x81, 0xdf, 0x8e, 0xc8, 0x18, 0x97, 0x21, 0x1b, 0x50, 0x6a, + 0x39, 0x4c, 0x7d, 0xd9, 0x35, 0x23, 0xac, 0xd4, 0x6b, 0xdc, 0xb6, 0x2d, 0x6f, 0x35, 0xf5, 0xd7, + 0x5c, 0xd7, 0x06, 0xff, 0x9f, 0x8b, 0x9a, 0xe6, 0x63, 0xd4, 0x9e, 0x6c, 0x0a, 0x30, 0x55, 0x10, + 0x2d, 0x53, 0x1b, 0xd7, 0x4f, 0xf1, 0x90, 0x97, 0xb7, 0xc2, 0xfa, 0xed, 0x69, 0xa5, 0x4e, 0x95, + 0x39, 0x47, 0x08, 0xe4, 0x15, 0x28, 0xb8, 0xce, 0xca, 0x87, 0x76, 0x50, 0xb9, 0x94, 0xcc, 0x7e, + 0xdf, 0x13, 0x54, 0x54, 0x5c, 0x72, 0x1f, 0xae, 0x06, 0x41, 0x57, 0x85, 0xb6, 0xf5, 0xbd, 0x80, + 0xfa, 0x61, 0xd1, 0x83, 0x28, 0x5c, 0xc9, 0xcb, 0x4f, 0xc0, 0x76, 0x76, 0xee, 0x66, 0x89, 0xe0, + 0x69, 0x6d, 0x4f, 0x0f, 0xba, 0xe7, 0x86, 0x0c, 0xba, 0xe3, 0x71, 0xde, 0xe5, 0x2f, 0x8c, 0xf3, + 0x06, 0xe2, 0xd2, 0x2b, 0x4f, 0x10, 0x97, 0xbe, 0x2f, 0x4a, 0x3b, 0xd6, 0x96, 0x54, 0x4c, 0xff, + 0xd6, 0x70, 0xa9, 0x44, 0x8e, 0x20, 0x5f, 0xf8, 0xc4, 0x9f, 0x28, 0x31, 0xc9, 0x36, 0x5c, 0xf6, + 0xdc, 0xd6, 0x40, 0x58, 0x2b, 0x82, 0xf8, 0x58, 0x5d, 0xcf, 0x76, 0x86, 0x0c, 0x66, 0xb6, 0x14, + 0xb6, 0x34, 0xa2, 0x57, 0x2a, 0x62, 0x62, 0xa4, 0x2d, 0x8d, 0xc8, 0x18, 0x97, 0x49, 0x47, 0x79, + 0xcf, 0x3f, 0xb5, 0x28, 0x6f, 0xfe, 0x19, 0x44, 0x79, 0x2f, 0x3c, 0xbb, 0x28, 0xef, 0xb3, 0x22, + 0x5c, 0x4c, 0x7d, 0xd0, 0xa8, 0xab, 0xaa, 0x72, 0x67, 0xad, 0xaa, 0x4a, 0x94, 0x3d, 0x8d, 0x3d, + 0xd5, 0xb2, 0xa7, 0xf1, 0x73, 0x2f, 0x7b, 0x8a, 0x95, 0x77, 0x4d, 0x7c, 0x49, 0x79, 0x57, 0x1d, + 0x66, 0x2c, 0xb7, 0xe7, 0x89, 0x2f, 0x28, 0x54, 0x91, 0x8f, 0x7c, 0x88, 0xd7, 0x4f, 0x9d, 0x4b, + 0x49, 0x36, 0xa6, 0xe5, 0x09, 0x83, 0xbc, 0x23, 0x1a, 0x16, 0x46, 0x28, 0x0d, 0x4d, 0x2e, 0x98, + 0xb8, 0x28, 0x55, 0x75, 0xa6, 0x76, 0xd3, 0xa5, 0x7a, 0xa9, 0x8b, 0x3b, 0x1a, 0x33, 0xc9, 0x72, + 0x3c, 0x56, 0x29, 0x09, 0xfd, 0xbf, 0x74, 0x1e, 0xfa, 0x93, 0xb5, 0x7f, 0xaa, 0x27, 0xd1, 0xeb, + 0x6f, 0x92, 0x8b, 0xe9, 0x9e, 0x10, 0x1f, 0x9e, 0xf3, 0xb2, 0xdc, 0x30, 0xa6, 0x5e, 0x95, 0xbe, + 0xc8, 0x19, 0x5c, 0x50, 0x5a, 0x9e, 0xcb, 0x74, 0xe4, 0x18, 0x9e, 0x82, 0x1c, 0xaf, 0x1d, 0x2b, + 0x3e, 0xad, 0xda, 0xb1, 0xf9, 0x23, 0x59, 0x96, 0x7a, 0x6a, 0x45, 0xeb, 0xfd, 0x64, 0x95, 0xf9, + 0x7b, 0x43, 0xfe, 0xcf, 0x47, 0x61, 0xe1, 0x6b, 0xbc, 0x9a, 0xf6, 0xd7, 0x73, 0x70, 0x39, 0x6b, + 0x59, 0x32, 0x7a, 0xd1, 0x4c, 0xf6, 0x62, 0xb4, 0x70, 0x2d, 0x6e, 0x5a, 0xfe, 0x2d, 0x1f, 0x0b, + 0x0e, 0x03, 0xea, 0xfd, 0xf4, 0xe5, 0x78, 0xa8, 0x97, 0xe3, 0xc4, 0x97, 0xc2, 0xf9, 0x67, 0xf8, + 0xa5, 0x70, 0x61, 0x88, 0x2f, 0x85, 0x27, 0x9f, 0xe5, 0x97, 0xc2, 0xc5, 0x33, 0x7e, 0x29, 0x5c, + 0x7a, 0xfa, 0x5f, 0x0a, 0x7f, 0x9e, 0x83, 0xd9, 0x74, 0xe1, 0xf2, 0x33, 0x48, 0x92, 0xed, 0x27, + 0x92, 0x64, 0xeb, 0x23, 0x19, 0xf3, 0xb0, 0xdb, 0xa7, 0x25, 0xcb, 0x8c, 0x1f, 0xe7, 0x60, 0xa0, + 0x38, 0xfb, 0x19, 0xe4, 0xb1, 0x1e, 0x25, 0xf3, 0x58, 0x2b, 0xe7, 0x32, 0xc8, 0x53, 0xf2, 0x59, + 0xff, 0x9d, 0x31, 0xc4, 0xff, 0x95, 0xbc, 0x56, 0xc2, 0xb4, 0x8d, 0x3d, 0x7d, 0xd3, 0xd6, 0xa8, + 0x7d, 0xf2, 0xf9, 0xc2, 0x85, 0x4f, 0x3f, 0x5f, 0xb8, 0xf0, 0xd9, 0xe7, 0x0b, 0x17, 0x3e, 0x3e, + 0x59, 0xc8, 0x7d, 0x72, 0xb2, 0x90, 0xfb, 0xf4, 0x64, 0x21, 0xf7, 0xd9, 0xc9, 0x42, 0xee, 0xc7, + 0x27, 0x0b, 0xb9, 0xdf, 0xff, 0x97, 0x85, 0x0b, 0xbf, 0x5c, 0x0c, 0x71, 0xff, 0x27, 0x00, 0x00, + 0xff, 0xff, 0x91, 0x73, 0x29, 0xfa, 0x92, 0x51, 0x00, 0x00, } func (m *ArchiveStrategy) Marshal() (dAtA []byte, err error) { @@ -2472,7 +2473,21 @@ func (m *CronWorkflowStatus) MarshalToSizedBuffer(dAtA []byte) (int, error) { i = encodeVarintGenerated(dAtA, i, uint64(size)) } i-- - dAtA[i] = 0xa + dAtA[i] = 0x12 + } + if len(m.Active) > 0 { + for iNdEx := len(m.Active) - 1; iNdEx >= 0; iNdEx-- { + { + size, err := m.Active[iNdEx].MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0xa + } } return len(dAtA) - i, nil } @@ -5544,6 +5559,12 @@ func (m *CronWorkflowStatus) Size() (n int) { } var l int _ = l + if len(m.Active) > 0 { + for _, e := range m.Active { + l = e.Size() + n += 1 + l + sovGenerated(uint64(l)) + } + } if m.LastScheduledTime != nil { l = m.LastScheduledTime.Size() n += 1 + l + sovGenerated(uint64(l)) @@ -6736,7 +6757,13 @@ func (this *CronWorkflowStatus) String() string { if this == nil { return "nil" } + repeatedStringForActive := "[]ObjectReference{" + for _, f := range this.Active { + repeatedStringForActive += fmt.Sprintf("%v", f) + "," + } + repeatedStringForActive += "}" s := strings.Join([]string{`&CronWorkflowStatus{`, + `Active:` + repeatedStringForActive + `,`, `LastScheduledTime:` + strings.Replace(fmt.Sprintf("%v", this.LastScheduledTime), "Time", "v11.Time", 1) + `,`, `}`, }, "") @@ -9290,6 +9317,40 @@ func (m *CronWorkflowStatus) Unmarshal(dAtA []byte) error { } switch fieldNum { case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Active", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Active = append(m.Active, v1.ObjectReference{}) + if err := m.Active[len(m.Active)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 2: if wireType != 2 { return fmt.Errorf("proto: wrong wireType = %d for field LastScheduledTime", wireType) } diff --git a/pkg/apis/workflow/v1alpha1/generated.proto b/pkg/apis/workflow/v1alpha1/generated.proto index f44985f692dd..614035c5b7c5 100644 --- a/pkg/apis/workflow/v1alpha1/generated.proto +++ b/pkg/apis/workflow/v1alpha1/generated.proto @@ -167,8 +167,11 @@ message CronWorkflowOptions { } message CronWorkflowStatus { + // Active is a list of active workflows stemming from this CronWorkflow + repeated k8s.io.api.core.v1.ObjectReference active = 1; + // LastScheduleTime is the last time the CronWorkflow was scheduled - optional k8s.io.apimachinery.pkg.apis.meta.v1.Time lastScheduledTime = 1; + optional k8s.io.apimachinery.pkg.apis.meta.v1.Time lastScheduledTime = 2; } // DAGTask represents a node in the graph during DAG execution diff --git a/pkg/apis/workflow/v1alpha1/openapi_generated.go b/pkg/apis/workflow/v1alpha1/openapi_generated.go index f2b1a461eb7b..d2111006a00f 100644 --- a/pkg/apis/workflow/v1alpha1/openapi_generated.go +++ b/pkg/apis/workflow/v1alpha1/openapi_generated.go @@ -580,6 +580,19 @@ func schema_pkg_apis_workflow_v1alpha1_CronWorkflowStatus(ref common.ReferenceCa SchemaProps: spec.SchemaProps{ Type: []string{"object"}, Properties: map[string]spec.Schema{ + "active": { + SchemaProps: spec.SchemaProps{ + Description: "Active is a list of active workflows stemming from this CronWorkflow", + Type: []string{"array"}, + Items: &spec.SchemaOrArray{ + Schema: &spec.Schema{ + SchemaProps: spec.SchemaProps{ + Ref: ref("k8s.io/api/core/v1.ObjectReference"), + }, + }, + }, + }, + }, "lastScheduledTime": { SchemaProps: spec.SchemaProps{ Description: "LastScheduleTime is the last time the CronWorkflow was scheduled", @@ -590,7 +603,7 @@ func schema_pkg_apis_workflow_v1alpha1_CronWorkflowStatus(ref common.ReferenceCa }, }, Dependencies: []string{ - "k8s.io/apimachinery/pkg/apis/meta/v1.Time"}, + "k8s.io/api/core/v1.ObjectReference", "k8s.io/apimachinery/pkg/apis/meta/v1.Time"}, } } diff --git a/pkg/apis/workflow/v1alpha1/register.go b/pkg/apis/workflow/v1alpha1/register.go index 9a62469fa783..06e5f8d6a807 100644 --- a/pkg/apis/workflow/v1alpha1/register.go +++ b/pkg/apis/workflow/v1alpha1/register.go @@ -35,6 +35,8 @@ func addKnownTypes(scheme *runtime.Scheme) error { &WorkflowList{}, &WorkflowTemplate{}, &WorkflowTemplateList{}, + &CronWorkflow{}, + &CronWorkflowList{}, ) metav1.AddToGroupVersion(scheme, SchemeGroupVersion) return nil diff --git a/pkg/apis/workflow/v1alpha1/zz_generated.deepcopy.go b/pkg/apis/workflow/v1alpha1/zz_generated.deepcopy.go index 7282c581d7fe..0d904d8774b4 100644 --- a/pkg/apis/workflow/v1alpha1/zz_generated.deepcopy.go +++ b/pkg/apis/workflow/v1alpha1/zz_generated.deepcopy.go @@ -306,6 +306,11 @@ func (in *CronWorkflowOptions) DeepCopy() *CronWorkflowOptions { // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. func (in *CronWorkflowStatus) DeepCopyInto(out *CronWorkflowStatus) { *out = *in + if in.Active != nil { + in, out := &in.Active, &out.Active + *out = make([]v1.ObjectReference, len(*in)) + copy(*out, *in) + } if in.LastScheduledTime != nil { in, out := &in.LastScheduledTime, &out.LastScheduledTime *out = (*in).DeepCopy() diff --git a/workflow/common/common.go b/workflow/common/common.go index 89103edfda67..69f1350a7ae0 100644 --- a/workflow/common/common.go +++ b/workflow/common/common.go @@ -58,7 +58,7 @@ const ( // LabelKeyPhase is a label applied to workflows to indicate the current phase of the workflow (for filtering purposes) LabelKeyPhase = workflow.WorkflowFullName + "/phase" // LabelKeyPhase is a label applied to workflows to indicate the current phase of the workflow (for filtering purposes) - LabelCronWorkflowParent = workflow.WorkflowFullName + "/cron-workflow-parent" + LabelCronWorkflow = workflow.WorkflowFullName + "/cron-workflow" // ExecutorArtifactBaseDir is the base directory in the init container in which artifacts will be copied to. // Each artifact will be named according to its input name (e.g: /argo/inputs/artifacts/CODE) diff --git a/workflow/common/util.go b/workflow/common/util.go index 1dfddfe10576..405ac376275a 100644 --- a/workflow/common/util.go +++ b/workflow/common/util.go @@ -662,11 +662,13 @@ func CastToWorkflow(cronWf *wfv1.CronWorkflow) (*wfv1.Workflow, error) { } newObjectMeta.Labels = make(map[string]string) - newObjectMeta.Labels[LabelCronWorkflowParent] = cronWf.Name + newObjectMeta.Labels[LabelCronWorkflow] = "true" - return &wfv1.Workflow{ + wf := &wfv1.Workflow{ TypeMeta: newTypeMeta, ObjectMeta: newObjectMeta, Spec: cronWf.Spec, - }, nil + } + wf.SetOwnerReferences(append(wf.GetOwnerReferences(), *metav1.NewControllerRef(cronWf, wfv1.SchemeGroupVersion.WithKind(workflow.CronWorkflowKind)))) + return wf, nil } \ No newline at end of file diff --git a/workflow/cron/controller.go b/workflow/cron/controller.go index 6fbb0942a134..c575d14b8651 100644 --- a/workflow/cron/controller.go +++ b/workflow/cron/controller.go @@ -36,6 +36,8 @@ type Controller struct { const ( cronWorkflowResyncPeriod = 20 * time.Minute + cronWorkflowWorkers = 2 + cronWorkflowWorkflowWorkers = 2 ) func NewCronController( @@ -56,6 +58,7 @@ func NewCronController( func (cc *Controller) Run(ctx context.Context) { defer cc.cronWfQueue.ShutDown() + defer cc.wfQueue.ShutDown() log.Infof("Starting CronWorkflow controller") cc.cronWfInformer = cc.newCronWorkflowInformer() @@ -70,10 +73,14 @@ func (cc *Controller) Run(ctx context.Context) { go cc.cronWfInformer.Informer().Run(ctx.Done()) go cc.wfInformer.Run(ctx.Done()) - for i := 0; i < 8; i++ { + for i := 0; i < cronWorkflowWorkers; i++ { go wait.Until(cc.runCronWorker, time.Second, ctx.Done()) } + for i := 0; i < cronWorkflowWorkflowWorkers; i++ { + go wait.Until(cc.runWorkflowWorker, time.Second, ctx.Done()) + } + <-ctx.Done() } @@ -143,6 +150,80 @@ func (cc *Controller) processNextCronItem() bool { return false } +func (cc *Controller) runWorkflowWorker() { + //for cc.processNextWorkflowItem() { + //} +} + +func (cc *Controller) processNextWorkflowItem() bool { + //key, quit := cc.wfQueue.Get() + //if quit { + // return false + //} + //defer cc.wfQueue.Done(key) + // + //rawWf, wfExists, err := cc.wfInformer.GetIndexer().GetByKey(key.(string)) + //if err != nil { + // log.Errorf("Failed to get Workflow '%s' from informer index: %+v", key, err) + // return true + //} + // + //wf, ok := rawWf.(*v1alpha1.Workflow) + //if !ok { + // log.Warnf("Key '%s' in index is not a Workflow", key) + // return true + //} + // + //parentCronWfName := wf.Labels[common.LabelCronWorkflow] + //var woc *cronWfOperationCtx + //if entryId, ok := cc.nameEntryIDMap[parentCronWfName]; ok { + // woc, ok = cc.cron.Entry(entryId).Job.(*cronWfOperationCtx) + // if !ok { + // log.Errorf("Parent CronWorkflow '%s' is malformed", parentCronWfName) + // return true + // } + //} else { + // log.Errorf("Parent CronWorkflow '%s' no longer exists", parentCronWfName) + // return true + //} + // + //if wf.Status.Completed() || !wfExists { + // for i, objectRef := range woc.cronWf.Status.Active { + // if objectRef.UID == wf.ObjectMeta.UID { + // woc.cronWf.Status.Active = append(woc.cronWf.Status.Active[:i], woc.cronWf.Status.Active[i + 1:]...) + // err = woc.persistUpdate() + // if err != nil { + // log.Errorf("Unable to update CronWorkflow '%s': %s", parentCronWfName, wf.Name, err) + // return true + // } + // return true + // } + // } + //} else { + // for _, objectRef := range woc.cronWf.Status.Active { + // if objectRef.UID == wf.ObjectMeta.UID { + // // Workflow is already reflected on Active + // return true + // } + // } + // // ObjectReference does not exist, add it + // newObjectRef, err := reference.GetReference(runtime.NewScheme(), wf) + // if err != nil { + // log.Errorf("Parent CronWorkflow '%s' cannot create ObjectReference for '%s': %s", parentCronWfName, wf.Name, err) + // return true + // } + // woc.cronWf.Status.Active = append(woc.cronWf.Status.Active, *newObjectRef) + // err = woc.persistUpdate() + // if err != nil { + // log.Errorf("Unable to update CronWorkflow '%s': %s", parentCronWfName, wf.Name, err) + // return true + // } + // return true + //} + + return false +} + func (cc *Controller) newCronWorkflowInformer() extv1alpha1.CronWorkflowInformer { informerFactory := externalversions.NewSharedInformerFactory(cc.wfClientset, cronWorkflowResyncPeriod) return informerFactory.Argoproj().V1alpha1().CronWorkflows() @@ -175,10 +256,22 @@ func (cc *Controller) addWorkflowInformerHandler() { cc.wfInformer.AddEventHandler( cache.ResourceEventHandlerFuncs{ AddFunc: func(obj interface{}) { + key, err := cache.MetaNamespaceKeyFunc(obj) + if err == nil { + cc.wfQueue.Add(key) + } }, UpdateFunc: func(old, new interface{}) { + key, err := cache.MetaNamespaceKeyFunc(new) + if err == nil { + cc.wfQueue.Add(key) + } }, DeleteFunc: func(obj interface{}) { + key, err := cache.MetaNamespaceKeyFunc(obj) + if err == nil { + cc.wfQueue.Add(key) + } }, }, ) @@ -186,7 +279,7 @@ func (cc *Controller) addWorkflowInformerHandler() { func wfInformerListOptionsFunc(options *v1.ListOptions) { options.FieldSelector = fields.Everything().String() - isCronWorkflowChildReq, err := labels.NewRequirement(common.LabelCronWorkflowParent, selection.Exists, []string{}) + isCronWorkflowChildReq, err := labels.NewRequirement(common.LabelCronWorkflow, selection.Equals, []string{"true"}) if err != nil { panic(err) } diff --git a/workflow/cron/operator.go b/workflow/cron/operator.go index 62c8a14a1fbd..d1eb7c717306 100644 --- a/workflow/cron/operator.go +++ b/workflow/cron/operator.go @@ -10,9 +10,8 @@ import ( "github.com/prometheus/common/log" "github.com/robfig/cron" "k8s.io/api/batch/v2alpha1" + v12 "k8s.io/api/core/v1" v1 "k8s.io/apimachinery/pkg/apis/meta/v1" - "k8s.io/apimachinery/pkg/labels" - "k8s.io/apimachinery/pkg/selection" "time" ) @@ -53,11 +52,13 @@ func (woc *cronWfOperationCtx) Run() { return } - _, err = util.SubmitWorkflow(woc.wfClient, woc.wfClientset, woc.cronWf.Options.RuntimeNamespace, wf, &util.SubmitOpts{}) + runWf, err := util.SubmitWorkflow(woc.wfClient, woc.wfClientset, woc.cronWf.Options.RuntimeNamespace, wf, &util.SubmitOpts{}) if err != nil { log.Errorf("Failed to run CronWorkflow: %v", err) + return } + woc.cronWf.Status.Active = append(woc.cronWf.Status.Active, *getWorkflowObjectReference(wf, runWf)) woc.cronWf.Status.LastScheduledTime = &v1.Time{Time: time.Now().UTC()} err = woc.persistUpdate() if err != nil { @@ -67,6 +68,19 @@ func (woc *cronWfOperationCtx) Run() { log.Infof("Created %s", woc.cronWf.ObjectMeta.Name) } +func getWorkflowObjectReference(wf *v1alpha1.Workflow, runWf *v1alpha1.Workflow) *v12.ObjectReference { + // This is a bit of a hack. Ideally we'd use ref.GetReference, but for some reason the `runWf` object is coming back + // without `Kind` and `APIVersion` set (even though it it set on `wf`). To fix this, we hard code those values. + return &v12.ObjectReference{ + Kind: wf.Kind, + APIVersion: wf.APIVersion, + Name: runWf.GetName(), + Namespace: runWf.GetNamespace(), + UID: runWf.GetUID(), + ResourceVersion: runWf.GetResourceVersion(), + } +} + func (woc *cronWfOperationCtx) persistUpdate() error { _, err := woc.cronWfIf.Update(woc.cronWf) if err != nil { @@ -86,24 +100,16 @@ func (woc *cronWfOperationCtx) enforceRuntimePolicy() (bool, error) { case v2alpha1.AllowConcurrent, "": // Do nothing case v2alpha1.ForbidConcurrent: - runningWorkflows, err := woc.getRunningWorkflows() - if err != nil { - return false, fmt.Errorf("error in running CronWorkflow %s: %w", woc.name, err) - } - if len(runningWorkflows) > 0 { + if len(woc.cronWf.Status.Active) > 0 { log.Infof("%s has 'ConcurrencyPolicy: Forbid' and has an active Workflow so it was not run", woc.name) return false, nil } case v2alpha1.ReplaceConcurrent: - runningWorkflows, err := woc.getRunningWorkflows() - if err != nil { - return false, fmt.Errorf("error in running CronWorkflow %s: %w", woc.name, err) - } - for _, wf := range runningWorkflows { - log.Infof("%s has 'ConcurrencyPolicy: Replace' and has active Workflows. Stopping %s...", woc.name, wf.Name) - err := util.TerminateWorkflow(woc.wfClient, wf.Name) + if len(woc.cronWf.Status.Active) > 0 { + log.Infof("%s has 'ConcurrencyPolicy: Replace' and has active Workflows", woc.name) + err := woc.terminateOutstandingWorkflows() if err != nil { - return false, fmt.Errorf("error stopping workflow %s: %w", wf.Name, err) + return false, err } } default: @@ -113,6 +119,17 @@ func (woc *cronWfOperationCtx) enforceRuntimePolicy() (bool, error) { return true, nil } +func (woc *cronWfOperationCtx) terminateOutstandingWorkflows() error { + for _, wfObjectRef := range woc.cronWf.Status.Active { + log.Infof("stopping '%s'", wfObjectRef.Name) + err := util.TerminateWorkflow(woc.wfClient, wfObjectRef.Name) + if err != nil { + return fmt.Errorf("error stopping workflow %s: %e", wfObjectRef.Name, err) + } + } + return nil +} + func (woc *cronWfOperationCtx) runOutstandingWorkflows() error { // If this CronWorkflow has been run before, check if we have missed any scheduled executions @@ -142,24 +159,3 @@ func (woc *cronWfOperationCtx) runOutstandingWorkflows() error { } return nil } - -func (woc *cronWfOperationCtx) getRunningWorkflows() ([]v1alpha1.Workflow, error) { - labelSelector := labels.NewSelector() - req, err := labels.NewRequirement(common.LabelCronWorkflowParent, selection.Equals, []string{woc.cronWf.Name}) - if err != nil { - return nil, err - } - labelSelector = labelSelector.Add(*req) - req, err = labels.NewRequirement(common.LabelKeyPhase, selection.Equals, []string{string(v1alpha1.NodeRunning)}) - if err != nil { - return nil, err - } - labelSelector = labelSelector.Add(*req) - wfList, err := woc.wfClientset.ArgoprojV1alpha1().Workflows(woc.cronWf.Options.RuntimeNamespace).List(v1.ListOptions{ - LabelSelector: labelSelector.String(), - }) - if err != nil { - return nil, err - } - return wfList.Items, nil -} From 2e7b2abd1ad54f5550522de6de3f665ed4df7c5d Mon Sep 17 00:00:00 2001 From: Simon Behar Date: Mon, 18 Nov 2019 08:18:03 -0800 Subject: [PATCH 22/44] WIP: Reworked parent/child relationship --- api/openapi-spec/swagger.json | 5 - .../workflow/v1alpha1/cron_workflow_types.go | 19 +- pkg/apis/workflow/v1alpha1/generated.pb.go | 667 ++++++++---------- pkg/apis/workflow/v1alpha1/generated.proto | 11 +- .../workflow/v1alpha1/openapi_generated.go | 9 +- workflow/cron/controller.go | 132 ++-- workflow/cron/operator.go | 18 +- workflow/validate/validate.go | 3 +- 8 files changed, 397 insertions(+), 467 deletions(-) diff --git a/api/openapi-spec/swagger.json b/api/openapi-spec/swagger.json index a0288fc010cf..102828651873 100644 --- a/api/openapi-spec/swagger.json +++ b/api/openapi-spec/swagger.json @@ -263,7 +263,6 @@ "type": "object", "required": [ "schedule", - "runtimeNamespace", "runtimeGenerateName" ], "properties": { @@ -275,10 +274,6 @@ "description": "RuntimeGenerateName is the name generator the Workflow will be run with. Mutually exclusive with RuntimeName", "type": "string" }, - "runtimeNamespace": { - "description": "RuntimeNamespace is the namespace where the CronWorkflow will run", - "type": "string" - }, "schedule": { "description": "Schedule is a schedule to run the Workflow in Cron format", "type": "string" diff --git a/pkg/apis/workflow/v1alpha1/cron_workflow_types.go b/pkg/apis/workflow/v1alpha1/cron_workflow_types.go index 4e68df6b4427..1ace5cf39f5a 100644 --- a/pkg/apis/workflow/v1alpha1/cron_workflow_types.go +++ b/pkg/apis/workflow/v1alpha1/cron_workflow_types.go @@ -1,7 +1,6 @@ package v1alpha1 import ( - "k8s.io/api/batch/v2alpha1" v1 "k8s.io/api/core/v1" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" ) @@ -37,15 +36,21 @@ type CronWorkflowStatus struct { type CronWorkflowOptions struct { // Schedule is a schedule to run the Workflow in Cron format Schedule string `json:"schedule" protobuf:"bytes,1,opt,name=schedule"` - // RuntimeNamespace is the namespace where the CronWorkflow will run - RuntimeNamespace string `json:"runtimeNamespace" protobuf:"bytes,2,opt,name=runtimeNamespace"` // RuntimeGenerateName is the name generator the Workflow will be run with. Mutually exclusive with RuntimeName - RuntimeGenerateName string `json:"runtimeGenerateName" protobuf:"bytes,3,opt,name=runtimeGenerateName"` + RuntimeGenerateName string `json:"runtimeGenerateName" protobuf:"bytes,2,opt,name=runtimeGenerateName"` // ConcurrencyPolicy is the K8s-style concurrency policy that will be used - ConcurrencyPolicy v2alpha1.ConcurrencyPolicy `json:"concurrencyPolicy,omitempty" protobuf:"bytes,4,opt,name=concurrencyPolicy,casttype=ConcurrencyPolicy"` + ConcurrencyPolicy ConcurrencyPolicy `json:"concurrencyPolicy,omitempty" protobuf:"bytes,3,opt,name=concurrencyPolicy,casttype=ConcurrencyPolicy"` // Suspend is a flag that will stop new CronWorkflows from running if set to true - Suspend bool `json:"suspend,omitempty" protobuf:"varint,5,opt,name=suspend"` + Suspend bool `json:"suspend,omitempty" protobuf:"varint,4,opt,name=suspend"` // StartingDeadlineSeconds is the K8s-style deadline that will limit the time a CronWorkflow will be run after its // original scheduled time if it is missed. - StartingDeadlineSeconds *int64 `json:"startingDeadlineSeconds,omitempty" protobuf:"varint,6,opt,name=startingDeadlineSeconds"` + StartingDeadlineSeconds *int64 `json:"startingDeadlineSeconds,omitempty" protobuf:"varint,5,opt,name=startingDeadlineSeconds"` } + +type ConcurrencyPolicy string + +const ( + AllowConcurrent ConcurrencyPolicy = "Allow" + ForbidConcurrent ConcurrencyPolicy = "Forbid" + ReplaceConcurrent ConcurrencyPolicy = "Replace" +) diff --git a/pkg/apis/workflow/v1alpha1/generated.pb.go b/pkg/apis/workflow/v1alpha1/generated.pb.go index 947e3a768449..be7384f829fb 100644 --- a/pkg/apis/workflow/v1alpha1/generated.pb.go +++ b/pkg/apis/workflow/v1alpha1/generated.pb.go @@ -11,7 +11,6 @@ import ( proto "github.com/gogo/protobuf/proto" github_com_gogo_protobuf_sortkeys "github.com/gogo/protobuf/sortkeys" - k8s_io_api_batch_v2alpha1 "k8s.io/api/batch/v2alpha1" k8s_io_api_core_v1 "k8s.io/api/core/v1" v1 "k8s.io/api/core/v1" v11 "k8s.io/apimachinery/pkg/apis/meta/v1" @@ -1528,315 +1527,313 @@ func init() { } var fileDescriptor_c23edafa7e7ea072 = []byte{ - // 4926 bytes of a gzipped FileDescriptorProto + // 4891 bytes of a gzipped FileDescriptorProto 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xec, 0x5c, 0x4d, 0x6c, 0x64, 0x57, 0x56, 0xee, 0xb2, 0x5d, 0xe5, 0xaa, 0x53, 0xfe, 0xeb, 0xeb, 0xee, 0x74, 0xc5, 0xe9, 0xb8, 0x7a, - 0x5e, 0x34, 0xa1, 0x87, 0xc9, 0xd8, 0x93, 0xee, 0x19, 0xc8, 0x64, 0x48, 0x32, 0x55, 0x2e, 0xdb, - 0xed, 0x76, 0xdb, 0x6d, 0x4e, 0xb9, 0xbb, 0x19, 0x32, 0x62, 0x78, 0x7e, 0x75, 0x5d, 0xf5, 0xda, - 0x55, 0xef, 0xbd, 0xbc, 0xfb, 0xca, 0x8e, 0x95, 0x05, 0x01, 0x81, 0x00, 0xa1, 0x91, 0x60, 0x03, - 0x23, 0x66, 0x83, 0x58, 0xc0, 0x86, 0x0d, 0x5b, 0x40, 0x83, 0x84, 0x58, 0x44, 0x6c, 0x88, 0x66, - 0x43, 0x16, 0xc8, 0x9a, 0x98, 0x0d, 0x08, 0x24, 0x24, 0x36, 0x48, 0xbd, 0x42, 0xf7, 0xe7, 0xdd, - 0xf7, 0x53, 0xcf, 0x89, 0xbb, 0xca, 0xdd, 0x08, 0x66, 0x56, 0xed, 0x3a, 0xe7, 0xdc, 0xef, 0xdc, - 0xdf, 0x73, 0xcf, 0x39, 0xf7, 0xbc, 0x86, 0x95, 0xb6, 0x1d, 0x74, 0xfa, 0x7b, 0x4b, 0x96, 0xdb, - 0x5b, 0x36, 0xfd, 0xb6, 0xeb, 0xf9, 0xee, 0x63, 0xf1, 0xc7, 0xb2, 0x77, 0xd0, 0x5e, 0x36, 0x3d, - 0x9b, 0x2d, 0x1f, 0xb9, 0xfe, 0xc1, 0x7e, 0xd7, 0x3d, 0x5a, 0x3e, 0x7c, 0xdd, 0xec, 0x7a, 0x1d, - 0xf3, 0xf5, 0xe5, 0x36, 0x75, 0xa8, 0x6f, 0x06, 0xb4, 0xb5, 0xe4, 0xf9, 0x6e, 0xe0, 0x92, 0xdb, - 0x11, 0xc8, 0x52, 0x08, 0x22, 0xfe, 0x58, 0xf2, 0x0e, 0xda, 0x4b, 0x1c, 0x64, 0x29, 0x04, 0x59, - 0x0a, 0x41, 0x16, 0xbe, 0x12, 0xd3, 0xdc, 0x76, 0xb9, 0x42, 0x8e, 0xb5, 0xd7, 0xdf, 0x17, 0xbf, - 0xc4, 0x0f, 0xf1, 0x97, 0xd4, 0xb1, 0x60, 0x1c, 0xbc, 0xc1, 0x96, 0x6c, 0x97, 0x77, 0x69, 0xd9, - 0x72, 0x7d, 0xba, 0x7c, 0x38, 0xd0, 0x8f, 0x85, 0xaf, 0x45, 0x32, 0x3d, 0xd3, 0xea, 0xd8, 0x0e, - 0xf5, 0x8f, 0xa3, 0x71, 0xf4, 0x68, 0x60, 0x66, 0xb5, 0x5a, 0x3e, 0xab, 0x95, 0xdf, 0x77, 0x02, - 0xbb, 0x47, 0x07, 0x1a, 0xfc, 0xdc, 0xe7, 0x35, 0x60, 0x56, 0x87, 0xf6, 0xcc, 0x74, 0x3b, 0xe3, - 0x1f, 0x73, 0x30, 0x5b, 0xf3, 0xad, 0x8e, 0x7d, 0x48, 0x9b, 0x01, 0x67, 0xb4, 0x8f, 0xc9, 0xbb, - 0x30, 0x1e, 0x98, 0x7e, 0x25, 0x77, 0x23, 0x77, 0xb3, 0x7c, 0xeb, 0x5b, 0x4b, 0x43, 0x4c, 0xe4, - 0xd2, 0xae, 0xe9, 0x87, 0x70, 0xf5, 0xc9, 0xd3, 0x93, 0xea, 0xf8, 0xae, 0xe9, 0x23, 0x47, 0x25, - 0xdf, 0x85, 0x09, 0xc7, 0x75, 0x68, 0x65, 0x4c, 0xa0, 0xd7, 0x86, 0x42, 0xdf, 0x76, 0x1d, 0xdd, - 0xdb, 0x7a, 0xf1, 0xf4, 0xa4, 0x3a, 0xc1, 0x29, 0x28, 0x80, 0x8d, 0xff, 0xcc, 0x41, 0xa9, 0xe6, - 0xb7, 0xfb, 0x3d, 0xea, 0x04, 0x8c, 0xf8, 0x00, 0x9e, 0xe9, 0x9b, 0x3d, 0x1a, 0x50, 0x9f, 0x55, - 0x72, 0x37, 0xc6, 0x6f, 0x96, 0x6f, 0xbd, 0x3d, 0x94, 0xd2, 0x9d, 0x10, 0xa6, 0x4e, 0x3e, 0x3a, - 0xa9, 0x5e, 0x3a, 0x3d, 0xa9, 0x82, 0x26, 0x31, 0x8c, 0x69, 0x21, 0x0e, 0x94, 0x4c, 0x3f, 0xb0, - 0xf7, 0x4d, 0x2b, 0x60, 0x95, 0x31, 0xa1, 0xf2, 0xad, 0xa1, 0x54, 0xd6, 0x14, 0x4a, 0xfd, 0xb2, - 0xd2, 0x58, 0x0a, 0x29, 0x0c, 0x23, 0x15, 0xc6, 0xbf, 0x8f, 0x43, 0x31, 0x64, 0x90, 0x1b, 0x30, - 0xe1, 0x98, 0x3d, 0x2a, 0x56, 0xaf, 0x54, 0x9f, 0x52, 0x0d, 0x27, 0xb6, 0xcd, 0x1e, 0x9f, 0x20, - 0xb3, 0x47, 0xb9, 0x84, 0x67, 0x06, 0x1d, 0xb1, 0x02, 0x31, 0x89, 0x1d, 0x33, 0xe8, 0xa0, 0xe0, - 0x90, 0xeb, 0x30, 0xd1, 0x73, 0x5b, 0xb4, 0x32, 0x7e, 0x23, 0x77, 0x33, 0x2f, 0x27, 0x78, 0xcb, - 0x6d, 0x51, 0x14, 0x54, 0xde, 0x7e, 0xdf, 0x77, 0x7b, 0x95, 0x89, 0x64, 0xfb, 0x35, 0xdf, 0xed, - 0xa1, 0xe0, 0x90, 0xdf, 0xcb, 0xc1, 0x5c, 0xd8, 0xbd, 0x7b, 0xae, 0x65, 0x06, 0xb6, 0xeb, 0x54, - 0xf2, 0x62, 0xc1, 0x57, 0x47, 0x9a, 0x88, 0x10, 0xac, 0x5e, 0x51, 0x5a, 0xe7, 0xd2, 0x1c, 0x1c, - 0x50, 0x4c, 0x6e, 0x01, 0xb4, 0xbb, 0xee, 0x9e, 0xd9, 0xe5, 0x73, 0x50, 0x29, 0x88, 0x5e, 0xeb, - 0x25, 0x5c, 0xd7, 0x1c, 0x8c, 0x49, 0x91, 0x03, 0x98, 0x34, 0xe5, 0xa9, 0xa8, 0x4c, 0x8a, 0x7e, - 0x37, 0x86, 0xec, 0x77, 0xe2, 0x64, 0xd5, 0xcb, 0xa7, 0x27, 0xd5, 0x49, 0x45, 0xc4, 0x50, 0x03, - 0x79, 0x0d, 0x8a, 0xae, 0xc7, 0xbb, 0x6a, 0x76, 0x2b, 0xc5, 0x1b, 0xb9, 0x9b, 0xc5, 0xfa, 0x9c, - 0xea, 0x5e, 0xf1, 0xbe, 0xa2, 0xa3, 0x96, 0x30, 0xfe, 0x28, 0x0f, 0x03, 0xa3, 0x26, 0xaf, 0x43, - 0x59, 0xa1, 0xdd, 0x73, 0xdb, 0x4c, 0x2c, 0x7e, 0xb1, 0x3e, 0x7b, 0x7a, 0x52, 0x2d, 0xd7, 0x22, - 0x32, 0xc6, 0x65, 0xc8, 0x23, 0x18, 0x63, 0xb7, 0xd5, 0x31, 0x7c, 0x67, 0xa8, 0xd1, 0x35, 0x6f, - 0xeb, 0x0d, 0x5a, 0x38, 0x3d, 0xa9, 0x8e, 0x35, 0x6f, 0xe3, 0x18, 0xbb, 0xcd, 0xcd, 0x47, 0xdb, - 0x0e, 0xc4, 0xe6, 0x19, 0xd6, 0x7c, 0xac, 0xdb, 0x81, 0x86, 0x16, 0xe6, 0x63, 0xdd, 0x0e, 0x90, - 0xa3, 0x72, 0xf3, 0xd1, 0x09, 0x02, 0x4f, 0x6c, 0xbe, 0x61, 0xcd, 0xc7, 0x9d, 0xdd, 0xdd, 0x1d, - 0x0d, 0x2f, 0x76, 0x37, 0xa7, 0xa0, 0x00, 0x26, 0x1f, 0xf0, 0x99, 0x94, 0x3c, 0xd7, 0x3f, 0x56, - 0xbb, 0xf6, 0xce, 0x48, 0xbb, 0xd6, 0xf5, 0x8f, 0xb5, 0x3a, 0xb5, 0x26, 0x9a, 0x81, 0x71, 0x6d, - 0x62, 0x74, 0xad, 0x7d, 0x26, 0x36, 0xe9, 0xd0, 0xa3, 0x6b, 0xac, 0x35, 0x53, 0xa3, 0x6b, 0xac, - 0x35, 0x51, 0x00, 0xf3, 0xb5, 0xf1, 0xcd, 0x23, 0xb5, 0xa7, 0x87, 0x5b, 0x1b, 0x34, 0x8f, 0x92, - 0x6b, 0x83, 0xe6, 0x11, 0x72, 0x54, 0xa3, 0x0d, 0x57, 0x43, 0x0e, 0x52, 0xcf, 0x65, 0xb6, 0x18, - 0x20, 0xdd, 0x27, 0xcb, 0x50, 0xb2, 0x5c, 0x67, 0xdf, 0x6e, 0x6f, 0x99, 0x9e, 0x32, 0x4c, 0xda, - 0xa2, 0xad, 0x84, 0x0c, 0x8c, 0x64, 0xc8, 0xcb, 0x30, 0x7e, 0x40, 0x8f, 0x95, 0x85, 0x2a, 0x2b, - 0xd1, 0xf1, 0x4d, 0x7a, 0x8c, 0x9c, 0x6e, 0xfc, 0x30, 0x07, 0xf3, 0x19, 0x93, 0xcb, 0x9b, 0xf5, - 0xfd, 0xae, 0xd2, 0xa0, 0x9b, 0x3d, 0xc0, 0x7b, 0xc8, 0xe9, 0xe4, 0xb7, 0x73, 0x30, 0x1b, 0x9b, - 0xed, 0x5a, 0x5f, 0x19, 0xc1, 0xe1, 0x4f, 0x77, 0x02, 0xab, 0x7e, 0x4d, 0x69, 0x9c, 0x4d, 0x31, - 0x30, 0xad, 0xd5, 0xf8, 0x27, 0x71, 0xeb, 0x26, 0x68, 0xc4, 0x84, 0x99, 0x3e, 0xa3, 0x3e, 0x37, - 0xd1, 0x4d, 0x6a, 0xf9, 0x34, 0x50, 0x17, 0xf0, 0x17, 0x97, 0xe4, 0xd5, 0xce, 0x7b, 0xb1, 0xc4, - 0xbd, 0x8c, 0xa5, 0xc3, 0xd7, 0x97, 0xa4, 0xc4, 0x26, 0x3d, 0x6e, 0xd2, 0x2e, 0xe5, 0x18, 0x75, - 0x72, 0x7a, 0x52, 0x9d, 0x79, 0x90, 0x00, 0xc0, 0x14, 0x20, 0x57, 0xe1, 0x99, 0x8c, 0x1d, 0xb9, - 0x7e, 0x4b, 0xa9, 0x18, 0x7b, 0x6a, 0x15, 0x3b, 0x09, 0x00, 0x4c, 0x01, 0x1a, 0xdf, 0x06, 0x58, - 0x71, 0x9d, 0xc0, 0x76, 0xfa, 0xf4, 0xbe, 0x43, 0x5e, 0x81, 0x3c, 0xf5, 0x7d, 0xd7, 0x57, 0x06, - 0x69, 0x5a, 0x4d, 0x50, 0x7e, 0x95, 0x13, 0x51, 0xf2, 0xc8, 0xab, 0x50, 0xd8, 0x37, 0xed, 0x2e, - 0x6d, 0x89, 0xde, 0x14, 0xeb, 0x33, 0x4a, 0xaa, 0xb0, 0x26, 0xa8, 0xa8, 0xb8, 0xc6, 0x5f, 0x8f, - 0xc3, 0xd4, 0x8a, 0xef, 0x3a, 0x8f, 0xd4, 0x42, 0x90, 0x5f, 0x85, 0x22, 0xf7, 0x9f, 0x5a, 0x66, - 0x60, 0xaa, 0xb9, 0xfa, 0x6a, 0x6c, 0x20, 0xda, 0x0d, 0x8a, 0x96, 0x90, 0x4b, 0xf3, 0xa1, 0xdd, - 0xdf, 0x7b, 0x4c, 0xad, 0x60, 0x8b, 0x06, 0x66, 0x74, 0x11, 0x44, 0x34, 0xd4, 0xa8, 0xc4, 0x82, - 0x09, 0xe6, 0x51, 0x6b, 0x24, 0x67, 0x25, 0xec, 0x6e, 0xd3, 0xa3, 0x56, 0x74, 0x5b, 0xf2, 0x5f, - 0x28, 0xc0, 0x89, 0x0b, 0x05, 0x16, 0x98, 0x41, 0x9f, 0x29, 0x93, 0xb9, 0x3e, 0x94, 0x9a, 0xf8, - 0xcc, 0x34, 0x05, 0x5c, 0x34, 0x91, 0xf2, 0x37, 0x2a, 0x35, 0x84, 0xc1, 0xa4, 0xbc, 0x4d, 0x98, - 0x32, 0xa3, 0x77, 0x46, 0xd6, 0x28, 0xef, 0x29, 0x56, 0x9f, 0x55, 0x2a, 0x27, 0x15, 0x01, 0x43, - 0x4d, 0xc6, 0x27, 0x39, 0x98, 0x8b, 0xb7, 0xb8, 0x67, 0xb3, 0x80, 0x7c, 0x67, 0x60, 0x05, 0x97, - 0xce, 0xb7, 0x82, 0xbc, 0xb5, 0x58, 0x3f, 0x7d, 0x53, 0x86, 0x94, 0xd8, 0xea, 0xed, 0x43, 0xde, - 0x0e, 0x68, 0x2f, 0xf4, 0xc1, 0x6a, 0x23, 0x8f, 0x32, 0xda, 0xc0, 0x1b, 0x1c, 0x17, 0x25, 0xbc, - 0xf1, 0xa3, 0x71, 0x98, 0xcf, 0x98, 0x0c, 0x7e, 0xaf, 0x73, 0xaf, 0xbb, 0xd5, 0xef, 0x86, 0xee, - 0x98, 0xee, 0x6d, 0x53, 0xd1, 0x51, 0x4b, 0x90, 0x06, 0xcc, 0x29, 0x5f, 0x9d, 0x7b, 0x20, 0xcc, - 0x33, 0x2d, 0xaa, 0x0c, 0xa0, 0x76, 0x76, 0x30, 0xc5, 0xc7, 0x81, 0x16, 0x64, 0x0b, 0xe6, 0x15, - 0x6d, 0x5d, 0x79, 0xfa, 0xc2, 0xeb, 0x19, 0x17, 0x40, 0x2f, 0x29, 0xa0, 0x79, 0x1c, 0x14, 0xc1, - 0xac, 0x76, 0xe4, 0x10, 0x2e, 0x5b, 0xae, 0x63, 0xf5, 0x7d, 0x9f, 0x3a, 0xd6, 0xf1, 0x8e, 0xdb, - 0xb5, 0xad, 0x63, 0xe5, 0xf8, 0xdd, 0x51, 0x60, 0x97, 0x57, 0xd2, 0x02, 0x4f, 0x4e, 0xaa, 0x5f, - 0x8e, 0x45, 0x46, 0x7b, 0x66, 0x60, 0x75, 0x96, 0x0f, 0x6f, 0x85, 0x13, 0x9a, 0x16, 0xc7, 0x41, - 0x15, 0xe4, 0x4b, 0x30, 0xc9, 0xfa, 0xcc, 0xa3, 0x4e, 0x4b, 0xdc, 0xc0, 0xc5, 0x68, 0x63, 0x35, - 0x25, 0x19, 0x43, 0x3e, 0x79, 0x00, 0xd7, 0x58, 0xc0, 0x0d, 0xac, 0xd3, 0x6e, 0x50, 0xb3, 0xd5, - 0xb5, 0x1d, 0x6e, 0xee, 0x5c, 0xa7, 0x25, 0xaf, 0xd1, 0xf1, 0xfa, 0x4b, 0xa7, 0x27, 0xd5, 0x6b, - 0xcd, 0x6c, 0x11, 0x3c, 0xab, 0xad, 0xf1, 0xa3, 0x1c, 0x90, 0xc1, 0x33, 0x45, 0x36, 0xa1, 0x60, - 0x5a, 0x01, 0xf7, 0x0b, 0x65, 0x2c, 0xf1, 0x4a, 0x96, 0xe9, 0x94, 0xb6, 0x04, 0xe9, 0x3e, 0xe5, - 0x63, 0xa2, 0xd1, 0x41, 0xac, 0x89, 0xa6, 0xa8, 0x20, 0x88, 0x0b, 0x97, 0xbb, 0x26, 0x0b, 0xc2, - 0xcd, 0xd0, 0xda, 0xb5, 0x7b, 0x61, 0x60, 0xf4, 0xb3, 0xe7, 0x3b, 0x07, 0xbc, 0x45, 0xfd, 0x2a, - 0x5f, 0x85, 0x7b, 0x69, 0x20, 0x1c, 0xc4, 0x36, 0xfe, 0xb8, 0x00, 0x93, 0x8d, 0xda, 0xfa, 0xae, - 0xc9, 0x0e, 0xce, 0x11, 0x28, 0xbc, 0x06, 0xc5, 0x80, 0xf6, 0xbc, 0xae, 0x19, 0x84, 0x3b, 0x51, - 0xef, 0xdf, 0x5d, 0x45, 0x47, 0x2d, 0x41, 0x5c, 0x1e, 0xf5, 0xa8, 0xb0, 0x4b, 0x59, 0xb2, 0xb7, - 0x87, 0xbc, 0x56, 0x15, 0x4a, 0x3c, 0xec, 0x51, 0x24, 0x8c, 0x74, 0x10, 0x06, 0xe5, 0x50, 0x39, - 0xd2, 0x7d, 0x65, 0xca, 0x86, 0x0c, 0x57, 0x23, 0x1c, 0xe9, 0xa1, 0xc5, 0x08, 0x18, 0xd7, 0x42, - 0xbe, 0x06, 0x53, 0x2d, 0xca, 0xf7, 0x1d, 0x75, 0x2c, 0x9b, 0xb2, 0x4a, 0xfe, 0xc6, 0x38, 0x9f, - 0x97, 0xd3, 0x93, 0xea, 0x54, 0x23, 0x46, 0xc7, 0x84, 0x14, 0x79, 0x0c, 0xa5, 0x23, 0x3b, 0xe8, - 0x08, 0xab, 0x51, 0x29, 0x88, 0x8d, 0xf3, 0x8d, 0xa1, 0x3a, 0xca, 0x11, 0xa2, 0x69, 0x79, 0x14, - 0x62, 0x62, 0x04, 0xcf, 0x9d, 0x2d, 0xfe, 0x43, 0xc4, 0xa6, 0xc2, 0xd1, 0x2b, 0x25, 0x1b, 0x08, - 0x06, 0x46, 0x32, 0x84, 0xc1, 0x14, 0xff, 0xd1, 0xa4, 0xef, 0xf5, 0xf9, 0x6e, 0x15, 0x21, 0xc8, - 0xb0, 0x11, 0x6b, 0x08, 0x22, 0x67, 0xe4, 0x51, 0x0c, 0x16, 0x13, 0x4a, 0xf8, 0xee, 0x3b, 0xea, - 0x50, 0xa7, 0x52, 0x4a, 0xee, 0xbe, 0x47, 0x1d, 0xea, 0xa0, 0xe0, 0x10, 0x17, 0xc0, 0xd2, 0x9e, - 0x44, 0x05, 0x46, 0x88, 0x53, 0x22, 0x87, 0xa4, 0x3e, 0xc3, 0xaf, 0xfa, 0xe8, 0x37, 0xc6, 0x54, - 0x18, 0x7f, 0x97, 0x83, 0x32, 0x3f, 0x1c, 0xe1, 0x86, 0x7e, 0x15, 0x0a, 0x81, 0xe9, 0xb7, 0x95, - 0x23, 0x56, 0x8a, 0x4e, 0xf1, 0xae, 0xa0, 0xa2, 0xe2, 0x12, 0x13, 0xf2, 0x81, 0xc9, 0x0e, 0xc2, - 0x6b, 0xe6, 0x17, 0x86, 0xea, 0xa3, 0x3a, 0x95, 0xd1, 0x0d, 0xc3, 0x7f, 0x31, 0x94, 0xc8, 0xe4, - 0x26, 0x14, 0xb9, 0x13, 0xb4, 0x66, 0x32, 0x19, 0x57, 0x15, 0xeb, 0x53, 0xfc, 0x14, 0xae, 0x29, - 0x1a, 0x6a, 0xae, 0xf1, 0x1d, 0x98, 0x59, 0x7d, 0x9f, 0x5a, 0xfd, 0xc0, 0xf5, 0xa5, 0x67, 0x4d, - 0xee, 0x02, 0x61, 0xd4, 0x3f, 0xb4, 0x2d, 0x5a, 0xb3, 0x2c, 0xb7, 0xef, 0x04, 0xdb, 0xd1, 0xa9, - 0x5f, 0x50, 0xda, 0x48, 0x73, 0x40, 0x02, 0x33, 0x5a, 0x19, 0x7f, 0x31, 0x01, 0xe5, 0x58, 0x6c, - 0xc6, 0x57, 0xd1, 0xa7, 0x9e, 0x9b, 0xb6, 0x21, 0xdc, 0xfb, 0x47, 0xc1, 0xe1, 0x36, 0xc4, 0xa7, - 0x87, 0x36, 0xb3, 0x5d, 0x27, 0x6d, 0x43, 0x50, 0xd1, 0x51, 0x4b, 0x90, 0x2a, 0xe4, 0x5b, 0xd4, - 0x0b, 0x3a, 0x62, 0x90, 0x13, 0xf5, 0x12, 0x9f, 0x88, 0x06, 0x27, 0xa0, 0xa4, 0x73, 0x81, 0x7d, - 0x1a, 0x58, 0x9d, 0xca, 0x84, 0x38, 0x77, 0x42, 0x60, 0x8d, 0x13, 0x50, 0xd2, 0x33, 0xbc, 0xe8, - 0xfc, 0xb3, 0xf7, 0xa2, 0x0b, 0x17, 0xec, 0x45, 0x13, 0x0f, 0xe6, 0x19, 0xeb, 0xec, 0xf8, 0xf6, - 0xa1, 0x19, 0x50, 0xd1, 0x58, 0xe8, 0x99, 0x7c, 0x1a, 0x3d, 0xd7, 0xf8, 0x45, 0xdf, 0x6c, 0xde, - 0x49, 0xa3, 0x60, 0x16, 0x34, 0x69, 0xc2, 0x55, 0xdb, 0x61, 0xd4, 0xea, 0xfb, 0x74, 0xa3, 0xed, - 0xb8, 0x3e, 0xbd, 0xe3, 0x32, 0x0e, 0xa7, 0x12, 0x12, 0x2f, 0xab, 0x45, 0xbb, 0xba, 0x91, 0x25, - 0x84, 0xd9, 0x6d, 0x8d, 0x7f, 0xc8, 0xc1, 0x54, 0x3c, 0x1c, 0x25, 0x0c, 0xa0, 0xd3, 0x58, 0x6b, - 0xca, 0x9d, 0xa9, 0x3c, 0xbe, 0x77, 0x86, 0x8e, 0x72, 0x25, 0x4c, 0xe4, 0xc2, 0x47, 0x34, 0x8c, - 0xa9, 0x39, 0x47, 0xbe, 0xeb, 0x15, 0xc8, 0xef, 0xbb, 0xbe, 0x45, 0xd5, 0xd9, 0xd2, 0x67, 0x70, - 0x8d, 0x13, 0x51, 0xf2, 0x8c, 0x7f, 0xcd, 0x41, 0x4c, 0x03, 0xf9, 0x35, 0x98, 0xe6, 0x3a, 0x36, - 0xfd, 0xbd, 0xc4, 0x68, 0xea, 0x43, 0x8f, 0x46, 0x23, 0xd5, 0xaf, 0x2a, 0xfd, 0xd3, 0x09, 0x32, - 0x26, 0xf5, 0x91, 0x2f, 0x43, 0xc9, 0x6c, 0xb5, 0x7c, 0xca, 0x18, 0x95, 0xa6, 0xa7, 0x54, 0x9f, - 0x16, 0x77, 0x65, 0x48, 0xc4, 0x88, 0xcf, 0x8f, 0x21, 0x8f, 0xff, 0xf9, 0xce, 0x56, 0xbe, 0xa0, - 0x3e, 0x86, 0x5c, 0x09, 0xa7, 0xa3, 0x96, 0x30, 0xbe, 0x37, 0x01, 0x49, 0xdd, 0xa4, 0x05, 0xb3, - 0x07, 0xfe, 0xde, 0xca, 0x8a, 0x69, 0x75, 0x86, 0x8a, 0x4e, 0xe7, 0x79, 0x58, 0xbc, 0x99, 0x44, - 0xc0, 0x34, 0xa4, 0xd2, 0xb2, 0x49, 0x8f, 0x03, 0x73, 0x6f, 0x98, 0x00, 0x35, 0xd4, 0x12, 0x47, - 0xc0, 0x34, 0x24, 0xf9, 0x3a, 0x94, 0x0f, 0xfc, 0xbd, 0xf0, 0x90, 0xab, 0xe9, 0x98, 0x57, 0xd3, - 0x51, 0xde, 0x8c, 0x58, 0x18, 0x97, 0xe3, 0x53, 0x78, 0xe0, 0xef, 0x21, 0x35, 0xbb, 0x61, 0xea, - 0x53, 0x4f, 0xe1, 0xa6, 0xa2, 0xa3, 0x96, 0x20, 0x1e, 0x90, 0x83, 0x70, 0xf6, 0x74, 0x8a, 0x43, - 0xd9, 0xa2, 0x9b, 0x59, 0xa3, 0xd1, 0x42, 0xf1, 0x01, 0xbd, 0xc0, 0x6d, 0xf3, 0xe6, 0x00, 0x0e, - 0x66, 0x60, 0x93, 0x6f, 0xc3, 0xb5, 0x03, 0x7f, 0x4f, 0x19, 0xf2, 0x1d, 0xdf, 0x76, 0x2c, 0xdb, - 0x4b, 0xe4, 0x3c, 0xab, 0xaa, 0xbb, 0xd7, 0x36, 0xb3, 0xc5, 0xf0, 0xac, 0xf6, 0xc6, 0x57, 0x60, - 0x2a, 0x9e, 0x33, 0xfb, 0x9c, 0x3c, 0x8b, 0xf1, 0x1f, 0x39, 0x28, 0x6c, 0x38, 0x5e, 0xff, 0x27, - 0x24, 0xfd, 0xfe, 0xa7, 0x13, 0x30, 0xc1, 0x5d, 0x2f, 0x72, 0x13, 0x26, 0x82, 0x63, 0x4f, 0xde, - 0xad, 0xe3, 0xf5, 0x2b, 0xa1, 0xa1, 0xd9, 0x3d, 0xf6, 0xe8, 0x13, 0xf5, 0x2f, 0x0a, 0x09, 0xf2, - 0x36, 0x14, 0x9c, 0x7e, 0xef, 0xa1, 0xd9, 0x55, 0x46, 0xe9, 0xd5, 0xd0, 0xb5, 0xd8, 0x16, 0xd4, - 0x27, 0x27, 0xd5, 0x2b, 0xd4, 0xb1, 0xdc, 0x96, 0xed, 0xb4, 0x97, 0x1f, 0x33, 0xd7, 0x59, 0xda, - 0xee, 0xf7, 0xf6, 0xa8, 0x8f, 0xaa, 0x15, 0x0f, 0x8f, 0xf6, 0x5c, 0xb7, 0xcb, 0x01, 0xc6, 0x93, - 0xe1, 0x51, 0x5d, 0x92, 0x31, 0xe4, 0x73, 0x2f, 0x86, 0x05, 0x3e, 0x97, 0x9c, 0x48, 0x7a, 0x31, - 0x4d, 0x41, 0x45, 0xc5, 0x25, 0x3d, 0x28, 0xf4, 0x4c, 0x8f, 0xcb, 0xe5, 0xc5, 0x94, 0xad, 0x0e, - 0xed, 0x9f, 0x2e, 0x6d, 0x09, 0x9c, 0x55, 0x27, 0xf0, 0x8f, 0x23, 0x75, 0x92, 0x88, 0x4a, 0x09, - 0xb1, 0x61, 0xb2, 0x6b, 0xb3, 0x80, 0xeb, 0x2b, 0x8c, 0xb0, 0x2b, 0xb8, 0xbe, 0x87, 0x66, 0xb7, - 0x4f, 0xa3, 0x19, 0xb8, 0x27, 0x61, 0x31, 0xc4, 0x5f, 0x38, 0x86, 0x72, 0xac, 0x47, 0x64, 0x4e, - 0xe6, 0x16, 0xc5, 0xe6, 0x15, 0xe9, 0x44, 0xb2, 0x0b, 0xf9, 0x43, 0x8e, 0xa1, 0x8c, 0xcd, 0x88, - 0x3d, 0x41, 0x09, 0xf6, 0xe6, 0xd8, 0x1b, 0xb9, 0x37, 0x8b, 0xdf, 0xff, 0x93, 0xea, 0xa5, 0x0f, - 0xff, 0xf9, 0xc6, 0x25, 0xe3, 0xef, 0xc7, 0xa1, 0xa4, 0x45, 0xfe, 0x6f, 0xef, 0x14, 0x3f, 0xb5, - 0x53, 0xee, 0x8e, 0x36, 0x5f, 0xe7, 0xda, 0x2e, 0xb5, 0xe4, 0x76, 0x99, 0xaa, 0xff, 0x4c, 0x6c, - 0xa9, 0x9f, 0x9c, 0x54, 0x2b, 0xc9, 0x49, 0x40, 0xf3, 0x68, 0x8b, 0x32, 0x66, 0xb6, 0x69, 0xb4, - 0x0d, 0xbe, 0xf1, 0x79, 0xdb, 0xe0, 0x4a, 0x7c, 0x1b, 0x94, 0xb2, 0x97, 0xf1, 0xc3, 0x71, 0x28, - 0x6e, 0x85, 0xf9, 0xa5, 0xdf, 0xca, 0x41, 0xd9, 0x74, 0x1c, 0x37, 0x30, 0x65, 0x32, 0x4d, 0x9a, - 0xb7, 0xed, 0xa1, 0xa6, 0x23, 0x04, 0x5d, 0xaa, 0x45, 0x80, 0x72, 0x4a, 0xf4, 0xcd, 0x14, 0xe3, - 0x60, 0x5c, 0x2f, 0x79, 0x0f, 0x0a, 0x5d, 0x73, 0x8f, 0x76, 0x43, 0x6b, 0xb7, 0x31, 0x5a, 0x0f, - 0xee, 0x09, 0xac, 0xd4, 0x7a, 0x48, 0x22, 0x2a, 0x45, 0x0b, 0x6f, 0xc3, 0x5c, 0xba, 0xa3, 0x4f, - 0x33, 0xa3, 0x7c, 0x31, 0x62, 0x6a, 0x9e, 0xa6, 0xa9, 0xf1, 0x37, 0x25, 0x80, 0x6d, 0xb7, 0x45, - 0x55, 0x42, 0x66, 0x01, 0xc6, 0xec, 0x96, 0xba, 0x8a, 0x40, 0xf5, 0x76, 0x6c, 0xa3, 0x81, 0x63, - 0x76, 0x4b, 0xa7, 0x38, 0xc6, 0xce, 0x4c, 0x71, 0x7c, 0x1d, 0xca, 0x2d, 0x9b, 0x79, 0x5d, 0xf3, - 0x78, 0x3b, 0xc3, 0x17, 0x68, 0x44, 0x2c, 0x8c, 0xcb, 0x91, 0xd7, 0xd4, 0xf9, 0x9d, 0x48, 0xe4, - 0xe7, 0xc2, 0xf3, 0x5b, 0xe4, 0xdd, 0x8b, 0x9d, 0xe1, 0x37, 0x60, 0x2a, 0x4c, 0x21, 0x08, 0x2d, - 0x79, 0xd1, 0x2a, 0x3c, 0xf5, 0x53, 0xbb, 0x31, 0x1e, 0x26, 0x24, 0xd3, 0x29, 0x8e, 0xc2, 0x73, - 0x49, 0x71, 0x34, 0x60, 0x8e, 0x05, 0xae, 0x4f, 0x5b, 0xa1, 0xc4, 0x46, 0xa3, 0x42, 0x92, 0x89, - 0xc8, 0x66, 0x8a, 0x8f, 0x03, 0x2d, 0xc8, 0x0e, 0x5c, 0x09, 0x3b, 0x11, 0x1f, 0x60, 0x65, 0x5e, - 0x20, 0x5d, 0x57, 0x48, 0x57, 0x1e, 0x65, 0xc8, 0x60, 0x66, 0x4b, 0xf2, 0x55, 0xc8, 0x7b, 0x1d, - 0x93, 0x51, 0x95, 0xd4, 0x08, 0x63, 0xd7, 0xfc, 0x0e, 0x27, 0x3e, 0x39, 0xa9, 0x96, 0xf8, 0xb4, - 0x8b, 0x1f, 0x28, 0x05, 0xc9, 0x2d, 0x80, 0x3d, 0xb7, 0xef, 0xb4, 0x4c, 0xff, 0x78, 0xa3, 0x21, - 0x22, 0x99, 0xd8, 0xcb, 0x6f, 0x5d, 0x73, 0x30, 0x26, 0xc5, 0x0d, 0x66, 0x4f, 0x9a, 0x0e, 0x95, - 0x9b, 0xd0, 0x06, 0x53, 0x5b, 0x14, 0xc5, 0x27, 0xef, 0x42, 0x49, 0x64, 0x0f, 0x69, 0xab, 0x16, - 0xa8, 0x04, 0xc5, 0xd3, 0xa4, 0xed, 0xb4, 0x57, 0xd1, 0x0c, 0x41, 0x30, 0xc2, 0x23, 0xbf, 0x02, - 0xb0, 0x6f, 0x3b, 0x36, 0xeb, 0x08, 0xf4, 0xf2, 0x53, 0xa3, 0xeb, 0x71, 0xae, 0x69, 0x14, 0x8c, - 0x21, 0xf2, 0x98, 0xc7, 0x73, 0x5b, 0x1b, 0x3b, 0x95, 0x29, 0x31, 0x4a, 0x1d, 0xf3, 0xec, 0x70, - 0x22, 0x4a, 0x1e, 0xb9, 0x09, 0xc5, 0x96, 0x49, 0x7b, 0xae, 0x43, 0x5b, 0x95, 0xe9, 0x28, 0xef, - 0xd0, 0x50, 0x34, 0xd4, 0x5c, 0xf2, 0x5d, 0x28, 0xd8, 0xc2, 0xe5, 0xab, 0xcc, 0x88, 0xae, 0x7e, - 0x73, 0xb8, 0x4b, 0x41, 0x40, 0xd4, 0x81, 0x5b, 0x1c, 0xf9, 0x37, 0x2a, 0x58, 0x62, 0xc1, 0xa4, - 0xdb, 0x0f, 0x84, 0x86, 0x59, 0xa1, 0x61, 0xb8, 0x3c, 0xcb, 0x7d, 0x89, 0x21, 0x5f, 0xe2, 0xd5, - 0x0f, 0x0c, 0x91, 0xf9, 0x78, 0xad, 0x8e, 0xdd, 0x6d, 0xf9, 0xd4, 0xa9, 0xcc, 0x89, 0x90, 0x4a, - 0x8c, 0x77, 0x45, 0xd1, 0x50, 0x73, 0xc9, 0xcf, 0xc3, 0xb4, 0xdb, 0x0f, 0xc4, 0xbe, 0xe1, 0xdb, - 0x8e, 0x55, 0x2e, 0x0b, 0xf1, 0xcb, 0x3c, 0x6c, 0xbb, 0x1f, 0x67, 0x60, 0x52, 0xce, 0x98, 0x81, - 0xa9, 0x78, 0xf9, 0x8a, 0xf1, 0x07, 0x63, 0x10, 0xf6, 0xe3, 0x27, 0xc1, 0x5b, 0x26, 0x06, 0x14, - 0x7c, 0xca, 0xfa, 0xdd, 0x40, 0x19, 0x5b, 0xb1, 0xd6, 0x28, 0x28, 0xa8, 0x38, 0xc6, 0x11, 0x4c, - 0xf3, 0xde, 0x76, 0xbb, 0xb4, 0xdb, 0x0c, 0xa8, 0xc7, 0xc8, 0x3e, 0xe4, 0x19, 0xff, 0x43, 0xcd, - 0xc9, 0x88, 0x0f, 0x71, 0x01, 0xf5, 0xa2, 0xfd, 0x2e, 0x14, 0xa0, 0x84, 0x37, 0xfe, 0x70, 0x0c, - 0x4a, 0x7a, 0x9e, 0xce, 0x91, 0x21, 0xff, 0x22, 0x4c, 0xb6, 0xe8, 0xbe, 0xc9, 0x47, 0xa3, 0xde, - 0xaa, 0xf9, 0xb6, 0x6a, 0x48, 0x12, 0x86, 0x3c, 0x52, 0x0d, 0x2f, 0x33, 0x39, 0x64, 0x91, 0xb5, - 0x8a, 0xfb, 0x8a, 0xe4, 0x00, 0x4a, 0xe2, 0x8f, 0xb5, 0xb0, 0xae, 0x66, 0xd8, 0x75, 0x7f, 0x18, - 0xa2, 0xc8, 0x5c, 0x80, 0xfe, 0x89, 0x11, 0x7e, 0xaa, 0x1e, 0x26, 0x7f, 0x9e, 0x7a, 0x18, 0x63, - 0x0d, 0xb8, 0x61, 0x58, 0x5f, 0x21, 0x6f, 0x41, 0x91, 0xa9, 0xad, 0xab, 0xe6, 0xe5, 0x0b, 0xfa, - 0x4d, 0x4b, 0xd1, 0x9f, 0x9c, 0x54, 0xa7, 0x85, 0x70, 0x48, 0x40, 0xdd, 0xc4, 0x58, 0x86, 0x72, - 0xac, 0x7e, 0x80, 0xcf, 0xb0, 0x7e, 0xfb, 0x8b, 0xcd, 0x70, 0xc3, 0x0c, 0x4c, 0x14, 0x1c, 0xe3, - 0xc9, 0x18, 0xcc, 0x21, 0x65, 0x6e, 0xdf, 0xb7, 0x68, 0x3c, 0x33, 0x6b, 0x5a, 0xa2, 0xa8, 0x28, - 0x95, 0x99, 0xad, 0x09, 0x2a, 0x2a, 0x2e, 0xf9, 0x26, 0x4c, 0xf7, 0xa8, 0xdf, 0xd6, 0x87, 0x4d, - 0x2d, 0x92, 0xce, 0xaf, 0x6c, 0xc5, 0x99, 0x98, 0x94, 0xe5, 0xf1, 0x7e, 0xcf, 0x74, 0xec, 0x7d, - 0xca, 0x82, 0x74, 0xca, 0x64, 0x4b, 0xd1, 0x51, 0x4b, 0x90, 0x75, 0xb8, 0xcc, 0x68, 0x70, 0xff, - 0xc8, 0xa1, 0xbe, 0x7e, 0xf7, 0x11, 0x2b, 0x59, 0xac, 0xbf, 0x18, 0x3e, 0x94, 0x35, 0xd3, 0x02, - 0x38, 0xd8, 0x46, 0xdc, 0xbe, 0x7d, 0xcb, 0xa2, 0x8c, 0xad, 0xb8, 0x4e, 0xcb, 0xd6, 0xa5, 0x53, - 0xf1, 0xdb, 0x37, 0xc5, 0xc7, 0x81, 0x16, 0x1c, 0x65, 0xdf, 0xb4, 0xbb, 0x7d, 0x9f, 0x46, 0x28, - 0x85, 0x24, 0xca, 0x5a, 0x8a, 0x8f, 0x03, 0x2d, 0x8c, 0xaf, 0xc2, 0x34, 0xd2, 0xc0, 0x3f, 0xd6, - 0x73, 0x52, 0x85, 0x7c, 0xd7, 0xee, 0xd9, 0x32, 0xf9, 0x93, 0x97, 0x1b, 0xf9, 0x1e, 0x27, 0xa0, - 0xa4, 0x1b, 0xdf, 0xcf, 0x01, 0x44, 0x65, 0x41, 0xe4, 0x00, 0x8a, 0xec, 0x76, 0xbd, 0x6f, 0x1d, - 0xe8, 0x7c, 0xd1, 0x90, 0xcf, 0x0a, 0x0a, 0x24, 0xf6, 0x80, 0xaa, 0x28, 0xa8, 0x15, 0x7c, 0x5e, - 0xd1, 0xc8, 0x5f, 0x8e, 0x83, 0x6e, 0xc5, 0x17, 0x97, 0x3a, 0x2d, 0xcf, 0xb5, 0x9d, 0x20, 0xfd, - 0x34, 0xbb, 0xaa, 0xe8, 0xa8, 0x25, 0xf8, 0x7e, 0xdb, 0x93, 0x83, 0x18, 0x4b, 0xee, 0x37, 0xd5, - 0x07, 0xc5, 0xe5, 0x72, 0x3e, 0x6d, 0xf3, 0xb9, 0x1e, 0x4f, 0xca, 0xa1, 0xa0, 0xa2, 0xe2, 0xf2, - 0x6b, 0x26, 0x4c, 0x98, 0xaa, 0x3d, 0x22, 0xae, 0x99, 0x30, 0xb7, 0x8a, 0x9a, 0x4b, 0x3a, 0x30, - 0x6b, 0x8a, 0xa5, 0x8d, 0x92, 0xc0, 0x4f, 0x95, 0xcf, 0x8e, 0x4a, 0x52, 0x92, 0x28, 0x98, 0x86, - 0xe5, 0x9a, 0x58, 0xd4, 0xfc, 0xe9, 0xd3, 0xda, 0x5a, 0x53, 0x33, 0x89, 0x82, 0x69, 0x58, 0xee, - 0x61, 0xf9, 0x6e, 0x97, 0xd6, 0x70, 0x5b, 0x79, 0x72, 0xda, 0xc3, 0x42, 0x49, 0xc6, 0x90, 0x6f, - 0xfc, 0x4e, 0x0e, 0x66, 0x9a, 0x96, 0x6f, 0x7b, 0x81, 0x3e, 0xfb, 0xdb, 0xa2, 0x96, 0x28, 0x30, - 0xb9, 0xef, 0xa3, 0xf6, 0xd4, 0xcb, 0x67, 0xe4, 0xd3, 0xa4, 0x50, 0xa2, 0xd4, 0x48, 0x92, 0x30, - 0x82, 0x10, 0x51, 0xaf, 0xb0, 0x2e, 0xe9, 0xb5, 0x6d, 0x0a, 0x2a, 0x2a, 0xae, 0xf1, 0x83, 0x1c, - 0x14, 0xf5, 0xeb, 0xd5, 0x2b, 0x90, 0x17, 0x8f, 0x22, 0x6a, 0xef, 0xe8, 0xcb, 0x64, 0x85, 0x13, - 0x51, 0xf2, 0xb8, 0x90, 0x70, 0xe7, 0x14, 0x70, 0xec, 0xc6, 0x31, 0xfd, 0x00, 0x25, 0x8f, 0x6f, - 0x5a, 0xea, 0xb4, 0xd4, 0x7e, 0xd1, 0x9b, 0x76, 0xd5, 0x69, 0x21, 0xa7, 0x8b, 0xda, 0x18, 0xd7, - 0xef, 0x99, 0x41, 0x3a, 0x26, 0x5f, 0x13, 0x54, 0x54, 0x5c, 0xe3, 0x1d, 0x98, 0x55, 0x0f, 0xe3, - 0x7a, 0xa2, 0x5e, 0x83, 0x62, 0xab, 0xef, 0x9b, 0x31, 0x33, 0xa9, 0xb7, 0x78, 0x43, 0xd1, 0x51, - 0x4b, 0x18, 0xd3, 0x50, 0x8e, 0xd5, 0xec, 0x1a, 0xff, 0x75, 0x0d, 0xf4, 0x1b, 0xef, 0x4f, 0x5f, - 0x8a, 0x87, 0x0a, 0xa3, 0x2c, 0xed, 0x11, 0xe7, 0x47, 0xf7, 0x88, 0xf5, 0xba, 0xa7, 0xbc, 0xe2, - 0x76, 0xe4, 0x15, 0x17, 0x2e, 0xc0, 0x2b, 0x8e, 0xca, 0x77, 0xd2, 0x9e, 0xf1, 0xef, 0xe6, 0x60, - 0xca, 0xe1, 0x51, 0xb7, 0x3a, 0xef, 0x95, 0x49, 0xe1, 0x89, 0xdd, 0x1f, 0x69, 0x12, 0x97, 0xb6, - 0x63, 0x88, 0x32, 0xe1, 0xa0, 0xa3, 0xe2, 0x38, 0x0b, 0x13, 0xaa, 0xc9, 0x1a, 0x14, 0xcd, 0x7d, - 0x1e, 0xca, 0x04, 0xc7, 0xea, 0xb1, 0xfa, 0x7a, 0x96, 0x05, 0xa8, 0x29, 0x19, 0x69, 0x5c, 0xc3, - 0x5f, 0xa8, 0xdb, 0xf2, 0xdb, 0x49, 0x57, 0x1f, 0x95, 0x46, 0xb8, 0x9d, 0xc2, 0xcc, 0x49, 0xcc, - 0x41, 0x50, 0x94, 0x58, 0x31, 0x92, 0x01, 0x05, 0x19, 0x2c, 0x89, 0x48, 0xb1, 0x28, 0xfd, 0x5e, - 0x19, 0x48, 0xa1, 0xe2, 0x90, 0x76, 0xe8, 0xe6, 0x96, 0xc5, 0xe4, 0xd6, 0x87, 0x76, 0xfd, 0xb5, - 0xe7, 0x9c, 0xed, 0xe7, 0x92, 0xbb, 0x71, 0x23, 0x3a, 0x75, 0x1e, 0x23, 0x3a, 0x7d, 0xa6, 0x01, - 0x6d, 0x43, 0x81, 0x09, 0x13, 0x2d, 0x22, 0xc4, 0xf2, 0xad, 0x95, 0xe1, 0x6e, 0xf8, 0x84, 0x95, - 0x97, 0xb3, 0x23, 0x69, 0xa8, 0xe0, 0x89, 0x0b, 0x45, 0x5f, 0x79, 0x82, 0x2a, 0xc8, 0x1c, 0x2e, - 0x47, 0x9d, 0x76, 0x27, 0xe5, 0xfe, 0x08, 0xa9, 0xa8, 0x95, 0x90, 0x77, 0x61, 0xbc, 0x65, 0xb6, - 0x55, 0xb8, 0xf9, 0xad, 0xa1, 0x9f, 0xf5, 0x43, 0x35, 0xa2, 0x58, 0xb6, 0x51, 0x5b, 0x47, 0x8e, - 0x4a, 0x0e, 0xa2, 0x0a, 0xa7, 0xb9, 0x11, 0x6a, 0x50, 0x53, 0x56, 0x5f, 0x06, 0x20, 0x03, 0x35, - 0x52, 0xab, 0x30, 0x79, 0xe8, 0x76, 0xfb, 0x3d, 0x15, 0xa7, 0x96, 0x6f, 0x2d, 0x64, 0xad, 0xf6, - 0x43, 0x21, 0x12, 0x19, 0x01, 0xf9, 0x9b, 0x61, 0xd8, 0x96, 0xfc, 0x46, 0x0e, 0x66, 0xf8, 0xd1, - 0xd1, 0xfb, 0x80, 0x55, 0xc8, 0x08, 0x3b, 0xf5, 0x01, 0xa3, 0x7e, 0xb4, 0xc3, 0x5e, 0x50, 0x6a, - 0x67, 0x36, 0x12, 0x1a, 0x30, 0xa5, 0x91, 0x78, 0x50, 0x64, 0x76, 0x8b, 0x5a, 0xa6, 0xcf, 0x2a, - 0xf3, 0x17, 0xa6, 0x3d, 0x72, 0x2c, 0x15, 0x36, 0x6a, 0x2d, 0xe4, 0x37, 0x45, 0xdd, 0xb0, 0xaa, - 0x9c, 0x57, 0x5f, 0x33, 0x5c, 0xb9, 0xc8, 0xaf, 0x19, 0xe6, 0x65, 0xd1, 0x70, 0x42, 0x03, 0xa6, - 0x55, 0x92, 0xfb, 0x70, 0x55, 0xd6, 0x8d, 0xa5, 0xcb, 0xdc, 0xae, 0x8a, 0x57, 0x84, 0x17, 0x4f, - 0x4f, 0xaa, 0x57, 0x6b, 0x59, 0x02, 0x98, 0xdd, 0x8e, 0x7c, 0x00, 0xd3, 0x7e, 0xdc, 0xbd, 0xaf, - 0xbc, 0x30, 0xc2, 0x13, 0x76, 0x22, 0x50, 0x90, 0x79, 0x90, 0x04, 0x09, 0x93, 0xba, 0xc8, 0xeb, - 0x50, 0xf6, 0x94, 0xa5, 0xb2, 0x59, 0xaf, 0x72, 0x4d, 0x8c, 0x41, 0xdc, 0xa8, 0x3b, 0x11, 0x19, - 0xe3, 0x32, 0xe4, 0x01, 0x94, 0x03, 0xb7, 0x4b, 0x7d, 0x95, 0x6e, 0xaf, 0x88, 0xc5, 0x5f, 0xcc, - 0xda, 0xc9, 0xbb, 0x5a, 0x2c, 0x4a, 0xe6, 0x46, 0x34, 0x86, 0x71, 0x1c, 0x1e, 0x25, 0x86, 0x45, - 0x98, 0xbe, 0x08, 0x89, 0x5f, 0x4c, 0x46, 0x89, 0xcd, 0x38, 0x13, 0x93, 0xb2, 0x3c, 0xee, 0xf3, - 0x7c, 0xdb, 0xf5, 0xed, 0xe0, 0x78, 0xa5, 0x6b, 0x32, 0x26, 0x00, 0x16, 0x04, 0x80, 0x8e, 0xfb, - 0x76, 0xd2, 0x02, 0x38, 0xd8, 0x86, 0xc7, 0x04, 0x21, 0xb1, 0xf2, 0x92, 0x88, 0xae, 0x84, 0x59, - 0x0a, 0xdb, 0xa2, 0xe6, 0x9e, 0x51, 0xd0, 0x73, 0x7d, 0x98, 0x82, 0x1e, 0xd2, 0x82, 0xeb, 0x66, - 0x3f, 0x70, 0x7b, 0x9c, 0x90, 0x6c, 0xb2, 0xeb, 0x1e, 0x50, 0xa7, 0x72, 0x43, 0xdc, 0x55, 0x37, - 0x4e, 0x4f, 0xaa, 0xd7, 0x6b, 0x9f, 0x21, 0x87, 0x9f, 0x89, 0x42, 0x7a, 0x50, 0xa4, 0xaa, 0x28, - 0xa9, 0xf2, 0x85, 0x11, 0x2e, 0x89, 0x64, 0x65, 0x93, 0x9c, 0xa0, 0x90, 0x86, 0x5a, 0x05, 0xd9, - 0x85, 0x72, 0xc7, 0x65, 0x41, 0xad, 0x6b, 0x9b, 0x8c, 0xb2, 0xca, 0xcb, 0x62, 0x9f, 0x64, 0xde, - 0x6f, 0x77, 0x42, 0xb1, 0x68, 0x9b, 0xdc, 0x89, 0x5a, 0x62, 0x1c, 0x86, 0x50, 0x11, 0x20, 0xf5, - 0xc5, 0xaa, 0xb9, 0x4e, 0x40, 0xdf, 0x0f, 0x2a, 0x8b, 0x62, 0x2c, 0xaf, 0x66, 0x21, 0xef, 0xb8, - 0xad, 0x66, 0x52, 0x5a, 0x9e, 0xf2, 0x14, 0x11, 0xd3, 0x98, 0xe4, 0x0d, 0x98, 0xf2, 0xdc, 0x56, - 0xd3, 0xa3, 0xd6, 0x8e, 0x19, 0x58, 0x9d, 0x4a, 0x35, 0xf9, 0x58, 0xb0, 0x13, 0xe3, 0x61, 0x42, - 0x72, 0xe1, 0x1d, 0xb8, 0x3c, 0xe0, 0x4f, 0x3d, 0xd5, 0xcb, 0xca, 0x9f, 0xe5, 0x20, 0xee, 0xce, - 0x5e, 0xb8, 0xdf, 0xbf, 0x0e, 0x97, 0x55, 0x8d, 0x31, 0xbf, 0x6c, 0xbb, 0xfd, 0x20, 0x8c, 0x94, - 0x63, 0x39, 0x12, 0x4c, 0x0b, 0xe0, 0x60, 0x1b, 0xe3, 0xcf, 0x73, 0x30, 0x9d, 0x30, 0xdf, 0x17, - 0x1e, 0x15, 0xae, 0x01, 0xe9, 0xd9, 0xbe, 0xef, 0xfa, 0xf2, 0x0e, 0xdc, 0xe2, 0x7b, 0x99, 0xa9, - 0xef, 0x13, 0x44, 0x51, 0xc6, 0xd6, 0x00, 0x17, 0x33, 0x5a, 0x18, 0x7f, 0x95, 0x83, 0x28, 0x09, - 0xa7, 0x2b, 0x91, 0x72, 0x67, 0x56, 0x22, 0xbd, 0x06, 0xc5, 0xc7, 0xcc, 0x75, 0x76, 0xa2, 0x7a, - 0x25, 0x3d, 0xa1, 0x77, 0x9b, 0xf7, 0xb7, 0x85, 0xa4, 0x96, 0x10, 0xd2, 0xef, 0xad, 0xd9, 0xdd, - 0x60, 0xb0, 0xaa, 0xe7, 0xee, 0x2f, 0x4a, 0x3a, 0x6a, 0x09, 0xb2, 0x0c, 0x25, 0x9d, 0xf7, 0x55, - 0xe1, 0xa4, 0x9e, 0x04, 0x9d, 0xf4, 0xc4, 0x48, 0xc6, 0xf8, 0xe1, 0x18, 0x14, 0xff, 0xbf, 0x7d, - 0x6c, 0x71, 0x90, 0xfa, 0xd8, 0x62, 0x65, 0xc4, 0x54, 0xf2, 0x67, 0x7d, 0x68, 0x61, 0x7c, 0x9c, - 0x83, 0xa9, 0xe7, 0xf8, 0xbd, 0xc3, 0x5e, 0xf2, 0x7b, 0x87, 0xb7, 0x46, 0x1a, 0xda, 0x19, 0xdf, - 0x3a, 0xfc, 0xed, 0x7c, 0x34, 0x24, 0x3e, 0xad, 0xc4, 0x81, 0x52, 0x78, 0xc0, 0xc3, 0xf4, 0xfc, - 0x5b, 0x23, 0x05, 0x85, 0xd1, 0xa6, 0x0c, 0x29, 0x0c, 0x23, 0x15, 0xe4, 0x16, 0x00, 0xe5, 0x96, - 0x4d, 0xe6, 0xee, 0xc6, 0x92, 0xd9, 0xeb, 0x55, 0xcd, 0xc1, 0x98, 0xd4, 0xf3, 0x4f, 0x38, 0x64, - 0x5f, 0xd1, 0x13, 0xcf, 0xe4, 0x8a, 0xbe, 0x7e, 0xe1, 0x57, 0xf4, 0xcb, 0xcf, 0xfe, 0x8a, 0x8e, - 0x05, 0x24, 0xf9, 0x11, 0x02, 0x92, 0x0f, 0xe0, 0x8a, 0xfc, 0x73, 0xa5, 0x6b, 0xda, 0x3d, 0xbd, - 0x5f, 0x54, 0x49, 0xd1, 0x97, 0x32, 0x2f, 0x66, 0xea, 0x33, 0x9b, 0x05, 0xd4, 0x09, 0x1e, 0x46, - 0x2d, 0xa3, 0xf7, 0xe8, 0x87, 0x19, 0x70, 0x98, 0xa9, 0x24, 0xed, 0xc1, 0x4e, 0x9e, 0xc3, 0x83, - 0xfd, 0x41, 0x0e, 0xae, 0x9a, 0x59, 0x9f, 0x48, 0xaa, 0x3c, 0xc6, 0xdd, 0x91, 0xe2, 0x89, 0x04, - 0xa2, 0x8a, 0x07, 0xb2, 0x58, 0x98, 0xdd, 0x07, 0xf2, 0xc5, 0x28, 0x24, 0x2d, 0x89, 0x4d, 0x95, - 0x1d, 0x4c, 0x7e, 0x2f, 0x9d, 0x0a, 0x02, 0x31, 0xdb, 0xcd, 0x91, 0x0d, 0xf6, 0x05, 0xa4, 0x83, - 0xca, 0x23, 0xa4, 0x83, 0x52, 0xe1, 0xc5, 0xd4, 0x05, 0x85, 0x17, 0x0e, 0xcc, 0xd9, 0x3d, 0xb3, - 0x4d, 0x77, 0xfa, 0xdd, 0xae, 0xcc, 0x80, 0xb3, 0xca, 0xb4, 0xc0, 0xce, 0xac, 0x03, 0xe5, 0xe1, - 0x5e, 0x37, 0xfd, 0x01, 0x91, 0x7e, 0xb4, 0xd9, 0x48, 0x21, 0xe1, 0x00, 0x36, 0xdf, 0x96, 0xdc, - 0x6d, 0xdd, 0xa6, 0x01, 0x9f, 0x6d, 0x91, 0x29, 0x51, 0x9f, 0x82, 0xdf, 0x89, 0xc8, 0x18, 0x97, - 0x21, 0x9b, 0x50, 0x6a, 0x39, 0x4c, 0x7d, 0xdd, 0x35, 0x2b, 0xac, 0xd4, 0x57, 0xb8, 0x6d, 0x6b, - 0x6c, 0x37, 0xf5, 0x17, 0x5d, 0xd7, 0x07, 0xff, 0xaf, 0x8b, 0x25, 0xcd, 0xc7, 0xa8, 0x3d, 0xd9, - 0x12, 0x60, 0xaa, 0x28, 0x5a, 0xa6, 0x36, 0x6e, 0x9c, 0xe1, 0x21, 0x37, 0xb6, 0xc3, 0x1a, 0xee, - 0x69, 0xa5, 0x4e, 0x95, 0x3a, 0x47, 0x08, 0xe4, 0x55, 0x28, 0xb8, 0xce, 0xea, 0xfb, 0x76, 0x50, - 0xb9, 0x9c, 0xcc, 0x80, 0xdf, 0x17, 0x54, 0x54, 0x5c, 0xf2, 0x00, 0xae, 0x05, 0x41, 0x57, 0x85, - 0xb6, 0xb5, 0xfd, 0x80, 0xfa, 0x61, 0xe1, 0x83, 0x28, 0x5e, 0xc9, 0xcb, 0xcf, 0xc0, 0x76, 0x77, - 0xef, 0x65, 0x89, 0xe0, 0x59, 0x6d, 0xcf, 0x0e, 0xba, 0xe7, 0x87, 0x0c, 0xba, 0xe3, 0x71, 0xde, - 0x95, 0xcf, 0x8c, 0xf3, 0x06, 0xe2, 0xd2, 0xab, 0x4f, 0x11, 0x97, 0xbe, 0x2b, 0xca, 0x3b, 0xd6, - 0x57, 0x54, 0x4c, 0xff, 0xe6, 0x70, 0xa9, 0x44, 0x8e, 0x20, 0x5f, 0xf9, 0xc4, 0x9f, 0x28, 0x31, - 0xc9, 0x0e, 0x5c, 0xf1, 0xdc, 0xd6, 0x40, 0x58, 0x2b, 0x82, 0xf8, 0x58, 0x6d, 0xcf, 0x4e, 0x86, - 0x0c, 0x66, 0xb6, 0x14, 0xb6, 0x34, 0xa2, 0x57, 0x2a, 0x62, 0x62, 0xa4, 0x2d, 0x8d, 0xc8, 0x18, - 0x97, 0x49, 0x47, 0x79, 0x2f, 0x3e, 0xb3, 0x28, 0x6f, 0xe1, 0x39, 0x44, 0x79, 0x2f, 0x3d, 0xbf, - 0x28, 0xef, 0x93, 0x22, 0xcc, 0xa4, 0x3e, 0x6a, 0xd4, 0x95, 0x55, 0xb9, 0xf3, 0x56, 0x56, 0x25, - 0x4a, 0x9f, 0xc6, 0x9e, 0x69, 0xe9, 0xd3, 0xf8, 0x85, 0x97, 0x3e, 0xc5, 0x4a, 0xbc, 0x26, 0x3e, - 0xa7, 0xc4, 0xab, 0x06, 0xb3, 0x96, 0xdb, 0xf3, 0xc4, 0x57, 0x14, 0xaa, 0xd0, 0x47, 0x3e, 0xc6, - 0xeb, 0xe7, 0xce, 0x95, 0x24, 0x1b, 0xd3, 0xf2, 0x84, 0x41, 0xde, 0x11, 0x0d, 0x0b, 0x23, 0x94, - 0x87, 0x26, 0x17, 0x4c, 0x5c, 0x94, 0xaa, 0x42, 0x53, 0xbb, 0xe9, 0x52, 0xbd, 0xd4, 0xc5, 0x1d, - 0x8d, 0xd9, 0x64, 0x49, 0x1e, 0xab, 0x94, 0x84, 0xfe, 0x5f, 0xba, 0x08, 0xfd, 0xc9, 0xfa, 0x3f, - 0xd5, 0x93, 0xe8, 0x05, 0x38, 0xc9, 0xc5, 0x74, 0x4f, 0x88, 0x0f, 0x2f, 0x78, 0x59, 0x6e, 0x18, - 0x53, 0xaf, 0x4a, 0x9f, 0xe5, 0x0c, 0x2e, 0x2a, 0x2d, 0x2f, 0x64, 0x3a, 0x72, 0x0c, 0xcf, 0x40, - 0x8e, 0xd7, 0x8f, 0x15, 0x9f, 0x55, 0xfd, 0xd8, 0xc2, 0xb1, 0x2c, 0x4d, 0x3d, 0xb3, 0xaa, 0xf5, - 0x41, 0xb2, 0xd2, 0xfc, 0x9d, 0x21, 0xff, 0xf7, 0xa3, 0xb0, 0xf8, 0x35, 0x5e, 0x51, 0xfb, 0xeb, - 0x39, 0xb8, 0x92, 0xb5, 0x2c, 0x19, 0xbd, 0x68, 0x26, 0x7b, 0x31, 0x5a, 0xb8, 0x16, 0x37, 0x2d, - 0xff, 0x96, 0x8f, 0x05, 0x87, 0x01, 0xf5, 0x7e, 0xfa, 0x72, 0x3c, 0xd4, 0xcb, 0x71, 0xe2, 0x6b, - 0xe1, 0xfc, 0x73, 0xfc, 0x5a, 0xb8, 0x30, 0xc4, 0xd7, 0xc2, 0x93, 0xcf, 0xf3, 0x6b, 0xe1, 0xe2, - 0x39, 0xbf, 0x16, 0x2e, 0x3d, 0xfb, 0xaf, 0x85, 0x3f, 0xcd, 0xc1, 0x5c, 0xba, 0x78, 0xf9, 0x39, - 0x24, 0xc9, 0x0e, 0x12, 0x49, 0xb2, 0x8d, 0x91, 0x8c, 0x79, 0xd8, 0xed, 0xb3, 0x92, 0x65, 0xc6, - 0x8f, 0x73, 0x30, 0x50, 0xa0, 0xfd, 0x1c, 0xf2, 0x58, 0x8f, 0x93, 0x79, 0xac, 0xd5, 0x0b, 0x19, - 0xe4, 0x19, 0xf9, 0xac, 0xff, 0xce, 0x18, 0xe2, 0xff, 0x4a, 0x5e, 0x2b, 0x61, 0xda, 0xc6, 0x9e, - 0xbd, 0x69, 0xab, 0x2f, 0x7d, 0xf4, 0xe9, 0xe2, 0xa5, 0x8f, 0x3f, 0x5d, 0xbc, 0xf4, 0xc9, 0xa7, - 0x8b, 0x97, 0x3e, 0x3c, 0x5d, 0xcc, 0x7d, 0x74, 0xba, 0x98, 0xfb, 0xf8, 0x74, 0x31, 0xf7, 0xc9, - 0xe9, 0x62, 0xee, 0xc7, 0xa7, 0x8b, 0xb9, 0xdf, 0xff, 0x97, 0xc5, 0x4b, 0xbf, 0x5c, 0x0c, 0x71, - 0xff, 0x27, 0x00, 0x00, 0xff, 0xff, 0xb5, 0x86, 0xb1, 0x1b, 0x96, 0x51, 0x00, 0x00, + 0x5e, 0x94, 0xd0, 0x03, 0x49, 0x39, 0xe9, 0x9e, 0x81, 0x4c, 0x86, 0x24, 0x53, 0xe5, 0xbf, 0x76, + 0xbb, 0xed, 0x36, 0xa7, 0xdc, 0xdd, 0x0c, 0x89, 0x18, 0x9e, 0x5f, 0x5d, 0x57, 0xbd, 0x76, 0xd5, + 0x7b, 0x2f, 0xef, 0xbe, 0x6a, 0xc7, 0xca, 0x82, 0x80, 0x40, 0x80, 0xd0, 0x48, 0xb0, 0x81, 0x11, + 0xb3, 0x41, 0x2c, 0x60, 0xc3, 0x86, 0x2d, 0xa0, 0x41, 0x42, 0x2c, 0x22, 0x36, 0x44, 0x6c, 0xc8, + 0x02, 0x59, 0x13, 0xb3, 0x01, 0x81, 0x84, 0x34, 0x1b, 0xa4, 0x5e, 0xa1, 0xfb, 0xf3, 0xee, 0xfb, + 0xa9, 0xe7, 0xc4, 0x5d, 0xe5, 0x6e, 0xc4, 0xcc, 0xac, 0xda, 0x75, 0xce, 0xb9, 0xdf, 0xb9, 0xef, + 0xde, 0xf3, 0xce, 0x3d, 0xe7, 0xdc, 0xf3, 0x1a, 0x96, 0xdb, 0x76, 0xd0, 0xe9, 0xef, 0xd5, 0x2c, + 0xb7, 0xb7, 0x64, 0xfa, 0x6d, 0xd7, 0xf3, 0xdd, 0x87, 0xe2, 0x8f, 0x25, 0xef, 0xa0, 0xbd, 0x64, + 0x7a, 0x36, 0x5b, 0x3a, 0x74, 0xfd, 0x83, 0xfd, 0xae, 0x7b, 0xb8, 0xf4, 0xe8, 0x0d, 0xb3, 0xeb, + 0x75, 0xcc, 0x37, 0x96, 0xda, 0xd4, 0xa1, 0xbe, 0x19, 0xd0, 0x56, 0xcd, 0xf3, 0xdd, 0xc0, 0x25, + 0x37, 0x23, 0x90, 0x5a, 0x08, 0x22, 0xfe, 0xa8, 0x79, 0x07, 0xed, 0x1a, 0x07, 0xa9, 0x85, 0x20, + 0xb5, 0x10, 0x64, 0xe1, 0xb5, 0x98, 0xe6, 0xb6, 0xcb, 0x15, 0x72, 0xac, 0xbd, 0xfe, 0xbe, 0xf8, + 0x25, 0x7e, 0x88, 0xbf, 0xa4, 0x8e, 0x05, 0xe3, 0xe0, 0x4d, 0x56, 0xb3, 0x5d, 0x3e, 0xa5, 0x25, + 0xcb, 0xf5, 0xe9, 0xd2, 0xa3, 0x81, 0x79, 0x2c, 0x7c, 0x2d, 0x92, 0xe9, 0x99, 0x56, 0xc7, 0x76, + 0xa8, 0x7f, 0x14, 0x3d, 0x47, 0x8f, 0x06, 0x66, 0xd6, 0xa8, 0xa5, 0xd3, 0x46, 0xf9, 0x7d, 0x27, + 0xb0, 0x7b, 0x74, 0x60, 0xc0, 0xcf, 0x7f, 0xd9, 0x00, 0x66, 0x75, 0x68, 0xcf, 0x4c, 0x8f, 0x33, + 0xfe, 0x29, 0x07, 0xb3, 0x75, 0xdf, 0xea, 0xd8, 0x8f, 0x68, 0x33, 0xe0, 0x8c, 0xf6, 0x11, 0x79, + 0x0f, 0xc6, 0x03, 0xd3, 0xaf, 0xe4, 0xae, 0xe5, 0xae, 0x97, 0x6f, 0x7c, 0xab, 0x36, 0xc4, 0x42, + 0xd6, 0x76, 0x4d, 0x3f, 0x84, 0x6b, 0x4c, 0x9e, 0x1c, 0x57, 0xc7, 0x77, 0x4d, 0x1f, 0x39, 0x2a, + 0xf9, 0x0e, 0x4c, 0x38, 0xae, 0x43, 0x2b, 0x63, 0x02, 0xbd, 0x3e, 0x14, 0xfa, 0xb6, 0xeb, 0xe8, + 0xd9, 0x36, 0x8a, 0x27, 0xc7, 0xd5, 0x09, 0x4e, 0x41, 0x01, 0x6c, 0xfc, 0x77, 0x0e, 0x4a, 0x75, + 0xbf, 0xdd, 0xef, 0x51, 0x27, 0x60, 0xc4, 0x07, 0xf0, 0x4c, 0xdf, 0xec, 0xd1, 0x80, 0xfa, 0xac, + 0x92, 0xbb, 0x36, 0x7e, 0xbd, 0x7c, 0xe3, 0x9d, 0xa1, 0x94, 0xee, 0x84, 0x30, 0x0d, 0xf2, 0xc9, + 0x71, 0xf5, 0xc2, 0xc9, 0x71, 0x15, 0x34, 0x89, 0x61, 0x4c, 0x0b, 0x71, 0xa0, 0x64, 0xfa, 0x81, + 0xbd, 0x6f, 0x5a, 0x01, 0xab, 0x8c, 0x09, 0x95, 0x6f, 0x0f, 0xa5, 0xb2, 0xae, 0x50, 0x1a, 0x17, + 0x95, 0xc6, 0x52, 0x48, 0x61, 0x18, 0xa9, 0x30, 0xfe, 0x73, 0x1c, 0x8a, 0x21, 0x83, 0x5c, 0x83, + 0x09, 0xc7, 0xec, 0x51, 0xb1, 0x7b, 0xa5, 0xc6, 0x94, 0x1a, 0x38, 0xb1, 0x6d, 0xf6, 0xf8, 0x02, + 0x99, 0x3d, 0xca, 0x25, 0x3c, 0x33, 0xe8, 0x88, 0x1d, 0x88, 0x49, 0xec, 0x98, 0x41, 0x07, 0x05, + 0x87, 0x5c, 0x85, 0x89, 0x9e, 0xdb, 0xa2, 0x95, 0xf1, 0x6b, 0xb9, 0xeb, 0x79, 0xb9, 0xc0, 0x5b, + 0x6e, 0x8b, 0xa2, 0xa0, 0xf2, 0xf1, 0xfb, 0xbe, 0xdb, 0xab, 0x4c, 0x24, 0xc7, 0xaf, 0xf9, 0x6e, + 0x0f, 0x05, 0x87, 0xfc, 0x7e, 0x0e, 0xe6, 0xc2, 0xe9, 0xdd, 0x71, 0x2d, 0x33, 0xb0, 0x5d, 0xa7, + 0x92, 0x17, 0x1b, 0xbe, 0x3a, 0xd2, 0x42, 0x84, 0x60, 0x8d, 0x8a, 0xd2, 0x3a, 0x97, 0xe6, 0xe0, + 0x80, 0x62, 0x72, 0x03, 0xa0, 0xdd, 0x75, 0xf7, 0xcc, 0x2e, 0x5f, 0x83, 0x4a, 0x41, 0xcc, 0x5a, + 0x6f, 0xe1, 0xba, 0xe6, 0x60, 0x4c, 0x8a, 0x1c, 0xc0, 0xa4, 0x29, 0xdf, 0x8a, 0xca, 0xa4, 0x98, + 0xf7, 0xca, 0x90, 0xf3, 0x4e, 0xbc, 0x59, 0x8d, 0xf2, 0xc9, 0x71, 0x75, 0x52, 0x11, 0x31, 0xd4, + 0x40, 0x5e, 0x85, 0xa2, 0xeb, 0xf1, 0xa9, 0x9a, 0xdd, 0x4a, 0xf1, 0x5a, 0xee, 0x7a, 0xb1, 0x31, + 0xa7, 0xa6, 0x57, 0xbc, 0xab, 0xe8, 0xa8, 0x25, 0x8c, 0x3f, 0xce, 0xc3, 0xc0, 0x53, 0x93, 0x37, + 0xa0, 0xac, 0xd0, 0xee, 0xb8, 0x6d, 0x26, 0x36, 0xbf, 0xd8, 0x98, 0x3d, 0x39, 0xae, 0x96, 0xeb, + 0x11, 0x19, 0xe3, 0x32, 0xe4, 0x01, 0x8c, 0xb1, 0x9b, 0xea, 0x35, 0x7c, 0x77, 0xa8, 0xa7, 0x6b, + 0xde, 0xd4, 0x06, 0x5a, 0x38, 0x39, 0xae, 0x8e, 0x35, 0x6f, 0xe2, 0x18, 0xbb, 0xc9, 0xdd, 0x47, + 0xdb, 0x0e, 0x84, 0xf1, 0x0c, 0xeb, 0x3e, 0xd6, 0xed, 0x40, 0x43, 0x0b, 0xf7, 0xb1, 0x6e, 0x07, + 0xc8, 0x51, 0xb9, 0xfb, 0xe8, 0x04, 0x81, 0x27, 0x8c, 0x6f, 0x58, 0xf7, 0x71, 0x6b, 0x77, 0x77, + 0x47, 0xc3, 0x0b, 0xeb, 0xe6, 0x14, 0x14, 0xc0, 0xe4, 0x23, 0xbe, 0x92, 0x92, 0xe7, 0xfa, 0x47, + 0xca, 0x6a, 0x6f, 0x8d, 0x64, 0xb5, 0xae, 0x7f, 0xa4, 0xd5, 0xa9, 0x3d, 0xd1, 0x0c, 0x8c, 0x6b, + 0x13, 0x4f, 0xd7, 0xda, 0x67, 0xc2, 0x48, 0x87, 0x7e, 0xba, 0x95, 0xb5, 0x66, 0xea, 0xe9, 0x56, + 0xd6, 0x9a, 0x28, 0x80, 0xf9, 0xde, 0xf8, 0xe6, 0xa1, 0xb2, 0xe9, 0xe1, 0xf6, 0x06, 0xcd, 0xc3, + 0xe4, 0xde, 0xa0, 0x79, 0x88, 0x1c, 0xd5, 0x68, 0xc3, 0xe5, 0x90, 0x83, 0xd4, 0x73, 0x99, 0x2d, + 0x1e, 0x90, 0xee, 0x93, 0x25, 0x28, 0x59, 0xae, 0xb3, 0x6f, 0xb7, 0xb7, 0x4c, 0x4f, 0x39, 0x26, + 0xed, 0xd1, 0x96, 0x43, 0x06, 0x46, 0x32, 0xe4, 0x45, 0x18, 0x3f, 0xa0, 0x47, 0xca, 0x43, 0x95, + 0x95, 0xe8, 0xf8, 0x26, 0x3d, 0x42, 0x4e, 0x37, 0x7e, 0x90, 0x83, 0xf9, 0x8c, 0xc5, 0xe5, 0xc3, + 0xfa, 0x7e, 0x57, 0x69, 0xd0, 0xc3, 0xee, 0xe1, 0x1d, 0xe4, 0x74, 0xf2, 0x3b, 0x39, 0x98, 0x8d, + 0xad, 0x76, 0xbd, 0xaf, 0x9c, 0xe0, 0xf0, 0x6f, 0x77, 0x02, 0xab, 0x71, 0x45, 0x69, 0x9c, 0x4d, + 0x31, 0x30, 0xad, 0xd5, 0xf8, 0x17, 0x71, 0xea, 0x26, 0x68, 0xc4, 0x84, 0x99, 0x3e, 0xa3, 0x3e, + 0x77, 0xd1, 0x4d, 0x6a, 0xf9, 0x34, 0x50, 0x07, 0xf0, 0xcb, 0x35, 0x79, 0xb4, 0xf3, 0x59, 0xd4, + 0x78, 0x94, 0x51, 0x7b, 0xf4, 0x46, 0x4d, 0x4a, 0x6c, 0xd2, 0xa3, 0x26, 0xed, 0x52, 0x8e, 0xd1, + 0x20, 0x27, 0xc7, 0xd5, 0x99, 0x7b, 0x09, 0x00, 0x4c, 0x01, 0x72, 0x15, 0x9e, 0xc9, 0xd8, 0xa1, + 0xeb, 0xb7, 0x94, 0x8a, 0xb1, 0x27, 0x56, 0xb1, 0x93, 0x00, 0xc0, 0x14, 0xa0, 0xf1, 0x6d, 0x80, + 0x65, 0xd7, 0x09, 0x6c, 0xa7, 0x4f, 0xef, 0x3a, 0xe4, 0x25, 0xc8, 0x53, 0xdf, 0x77, 0x7d, 0xe5, + 0x90, 0xa6, 0xd5, 0x02, 0xe5, 0x57, 0x39, 0x11, 0x25, 0x8f, 0xbc, 0x02, 0x85, 0x7d, 0xd3, 0xee, + 0xd2, 0x96, 0x98, 0x4d, 0xb1, 0x31, 0xa3, 0xa4, 0x0a, 0x6b, 0x82, 0x8a, 0x8a, 0x6b, 0xfc, 0xcd, + 0x38, 0x4c, 0x2d, 0xfb, 0xae, 0xf3, 0x40, 0x6d, 0x04, 0xf9, 0x35, 0x28, 0xf2, 0xf8, 0xa9, 0x65, + 0x06, 0xa6, 0x5a, 0xab, 0xd7, 0x63, 0x0f, 0xa2, 0xc3, 0xa0, 0x68, 0x0b, 0xb9, 0x34, 0x7f, 0xb4, + 0xbb, 0x7b, 0x0f, 0xa9, 0x15, 0x6c, 0xd1, 0xc0, 0x8c, 0x0e, 0x82, 0x88, 0x86, 0x1a, 0x95, 0x58, + 0x30, 0xc1, 0x3c, 0x6a, 0x8d, 0x14, 0xac, 0x84, 0xd3, 0x6d, 0x7a, 0xd4, 0x8a, 0x4e, 0x4b, 0xfe, + 0x0b, 0x05, 0x38, 0x71, 0xa1, 0xc0, 0x02, 0x33, 0xe8, 0x33, 0xe5, 0x32, 0xd7, 0x87, 0x52, 0x13, + 0x5f, 0x99, 0xa6, 0x80, 0x8b, 0x16, 0x52, 0xfe, 0x46, 0xa5, 0x86, 0x30, 0x98, 0x94, 0xa7, 0x09, + 0x53, 0x6e, 0xf4, 0xd6, 0xc8, 0x1a, 0xe5, 0x39, 0xc5, 0x1a, 0xb3, 0x4a, 0xe5, 0xa4, 0x22, 0x60, + 0xa8, 0xc9, 0xf8, 0x2c, 0x07, 0x73, 0xf1, 0x11, 0x77, 0x6c, 0x16, 0x90, 0xf7, 0x07, 0x76, 0xb0, + 0x76, 0xb6, 0x1d, 0xe4, 0xa3, 0xc5, 0xfe, 0xe9, 0x93, 0x32, 0xa4, 0xc4, 0x76, 0x6f, 0x1f, 0xf2, + 0x76, 0x40, 0x7b, 0x61, 0x0c, 0x56, 0x1f, 0xf9, 0x29, 0x23, 0x03, 0xde, 0xe0, 0xb8, 0x28, 0xe1, + 0x8d, 0x1f, 0x8d, 0xc1, 0x7c, 0xc6, 0x62, 0xf0, 0x73, 0x9d, 0x47, 0xdd, 0xad, 0x7e, 0x37, 0x0c, + 0xc7, 0xf4, 0x6c, 0x9b, 0x8a, 0x8e, 0x5a, 0x82, 0x6c, 0xc1, 0xbc, 0x8a, 0xd5, 0xd7, 0x55, 0x8c, + 0x2e, 0xe2, 0x15, 0xe9, 0x03, 0x5f, 0x50, 0x03, 0xe7, 0x71, 0x50, 0x04, 0xb3, 0xc6, 0x91, 0xf7, + 0xe1, 0xa2, 0xe5, 0x3a, 0x56, 0xdf, 0xf7, 0xa9, 0x63, 0x1d, 0xed, 0xb8, 0x5d, 0xdb, 0x3a, 0x12, + 0x06, 0x56, 0x6a, 0xd4, 0x14, 0xd8, 0xc5, 0xe5, 0xb4, 0xc0, 0xe3, 0x2c, 0x22, 0x0e, 0x02, 0x91, + 0xaf, 0xc2, 0x24, 0xeb, 0x33, 0x8f, 0x3a, 0x2d, 0x61, 0x42, 0xc5, 0x68, 0xe3, 0x9b, 0x92, 0x8c, + 0x21, 0x9f, 0xdc, 0x83, 0x2b, 0x2c, 0xe0, 0x0e, 0xd0, 0x69, 0xaf, 0x50, 0xb3, 0xd5, 0xb5, 0x1d, + 0xee, 0x8e, 0x5c, 0xa7, 0xc5, 0xc4, 0xe1, 0x3a, 0xde, 0x78, 0xe1, 0xe4, 0xb8, 0x7a, 0xa5, 0x99, + 0x2d, 0x82, 0xa7, 0x8d, 0x35, 0xfe, 0x39, 0x07, 0x64, 0xd0, 0xe6, 0xc9, 0x26, 0x14, 0x4c, 0x2b, + 0xe0, 0x71, 0x9b, 0x8c, 0xf5, 0x5f, 0xca, 0x72, 0x6d, 0xf2, 0x5d, 0x47, 0xba, 0x4f, 0xf9, 0x33, + 0xd1, 0xe8, 0x45, 0xa9, 0x8b, 0xa1, 0xa8, 0x20, 0x88, 0x0b, 0x17, 0xbb, 0x26, 0x0b, 0xc2, 0xcd, + 0x6a, 0xed, 0xda, 0xbd, 0x30, 0x71, 0xf9, 0xd9, 0xb3, 0xd9, 0x29, 0x1f, 0xd1, 0xb8, 0xcc, 0xd7, + 0xfa, 0x4e, 0x1a, 0x08, 0x07, 0xb1, 0x8d, 0x3f, 0x29, 0xc0, 0xe4, 0x4a, 0x7d, 0x7d, 0xd7, 0x64, + 0x07, 0x67, 0x08, 0xe4, 0x5f, 0x85, 0x62, 0x40, 0x7b, 0x5e, 0xd7, 0x0c, 0x42, 0x33, 0xd1, 0xf6, + 0xb5, 0xab, 0xe8, 0xa8, 0x25, 0x88, 0xcb, 0xb3, 0x12, 0x95, 0x16, 0x29, 0x4f, 0xf3, 0xce, 0x90, + 0xc7, 0x9e, 0x42, 0x89, 0xa7, 0x25, 0x8a, 0x84, 0x91, 0x0e, 0xc2, 0xa0, 0x1c, 0x2a, 0x47, 0xba, + 0xaf, 0x5c, 0xcd, 0x90, 0xe9, 0x64, 0x84, 0x23, 0x23, 0xa8, 0x18, 0x01, 0xe3, 0x5a, 0xc8, 0xd7, + 0x60, 0xaa, 0x45, 0xb9, 0xdd, 0x51, 0xc7, 0xb2, 0x29, 0x37, 0xb1, 0x71, 0xbe, 0x2e, 0x27, 0xc7, + 0xd5, 0xa9, 0x95, 0x18, 0x1d, 0x13, 0x52, 0xe4, 0x21, 0x94, 0x0e, 0xed, 0xa0, 0x23, 0xde, 0xea, + 0x4a, 0x41, 0x18, 0xce, 0x37, 0x86, 0x9a, 0x28, 0x47, 0x88, 0x96, 0xe5, 0x41, 0x88, 0x89, 0x11, + 0x3c, 0x0f, 0x86, 0xf8, 0x0f, 0x91, 0x3b, 0x8a, 0x40, 0xac, 0x94, 0x1c, 0x20, 0x18, 0x18, 0xc9, + 0x10, 0x06, 0x53, 0xfc, 0x47, 0x93, 0x7e, 0xd0, 0xe7, 0xd6, 0x2a, 0x52, 0x84, 0x61, 0x33, 0xca, + 0x10, 0x44, 0xae, 0xc8, 0x83, 0x18, 0x2c, 0x26, 0x94, 0x70, 0xeb, 0x3b, 0xec, 0x50, 0xa7, 0x52, + 0x4a, 0x5a, 0xdf, 0x83, 0x0e, 0x75, 0x50, 0x70, 0x88, 0x0b, 0x60, 0xe9, 0x93, 0xbe, 0x02, 0x23, + 0xe4, 0x11, 0x51, 0xc0, 0xd0, 0x98, 0xe1, 0x47, 0x71, 0xf4, 0x1b, 0x63, 0x2a, 0x8c, 0xbf, 0xcf, + 0x41, 0x99, 0xbf, 0x1c, 0xa1, 0x41, 0xbf, 0x02, 0x85, 0xc0, 0xf4, 0xdb, 0x2a, 0x50, 0x2a, 0x45, + 0x6f, 0xf1, 0xae, 0xa0, 0xa2, 0xe2, 0x12, 0x13, 0xf2, 0x81, 0xc9, 0x0e, 0xc2, 0x63, 0xe0, 0x17, + 0x87, 0x9a, 0xa3, 0x7a, 0x2b, 0xa3, 0x13, 0x80, 0xff, 0x62, 0x28, 0x91, 0xc9, 0x75, 0x28, 0xf2, + 0x20, 0x65, 0xcd, 0x64, 0x32, 0xef, 0x29, 0x36, 0xa6, 0xf8, 0x5b, 0xb8, 0xa6, 0x68, 0xa8, 0xb9, + 0xc6, 0xfb, 0x30, 0xb3, 0xfa, 0x21, 0xb5, 0xfa, 0x81, 0xeb, 0xcb, 0xc8, 0x97, 0xdc, 0x06, 0xc2, + 0xa8, 0xff, 0xc8, 0xb6, 0x68, 0xdd, 0xb2, 0xdc, 0xbe, 0x13, 0x6c, 0x47, 0x6f, 0xfd, 0x82, 0xd2, + 0x46, 0x9a, 0x03, 0x12, 0x98, 0x31, 0xca, 0xf8, 0xcb, 0x09, 0x28, 0xc7, 0x72, 0x27, 0xbe, 0x8b, + 0x3e, 0xf5, 0xdc, 0xb4, 0x0f, 0xe1, 0xd1, 0x39, 0x0a, 0x0e, 0xf7, 0x21, 0x3e, 0x7d, 0x64, 0x33, + 0x9e, 0xa1, 0xa7, 0x7c, 0x08, 0x2a, 0x3a, 0x6a, 0x09, 0x52, 0x85, 0x7c, 0x8b, 0x7a, 0x41, 0x47, + 0x3c, 0xe4, 0x44, 0xa3, 0xc4, 0x17, 0x62, 0x85, 0x13, 0x50, 0xd2, 0xb9, 0xc0, 0x3e, 0x0d, 0xac, + 0x4e, 0x65, 0x42, 0xbc, 0x77, 0x42, 0x60, 0x8d, 0x13, 0x50, 0xd2, 0x33, 0xa2, 0xdc, 0xfc, 0xd3, + 0x8f, 0x72, 0x0b, 0xe7, 0x1c, 0xe5, 0x12, 0x0f, 0xe6, 0x19, 0xeb, 0xec, 0xf8, 0xf6, 0x23, 0x33, + 0xa0, 0x62, 0xb0, 0xd0, 0x33, 0xf9, 0x24, 0x7a, 0xae, 0xf0, 0xe3, 0xbc, 0xd9, 0xbc, 0x95, 0x46, + 0xc1, 0x2c, 0x68, 0xd2, 0x84, 0xcb, 0xb6, 0xc3, 0xa8, 0xd5, 0xf7, 0xe9, 0x46, 0xdb, 0x71, 0x7d, + 0x7a, 0xcb, 0x65, 0x1c, 0x4e, 0x15, 0x0c, 0x5e, 0x54, 0x9b, 0x76, 0x79, 0x23, 0x4b, 0x08, 0xb3, + 0xc7, 0x1a, 0xff, 0x98, 0x83, 0xa9, 0x78, 0xba, 0x48, 0x18, 0x40, 0x67, 0x65, 0xad, 0x29, 0x2d, + 0x53, 0x45, 0x64, 0xef, 0x0e, 0x9d, 0x85, 0x4a, 0x98, 0x28, 0xc4, 0x8e, 0x68, 0x18, 0x53, 0x73, + 0x86, 0x7a, 0xd4, 0x4b, 0x90, 0xdf, 0x77, 0x7d, 0x8b, 0xaa, 0x77, 0x4b, 0xbf, 0x83, 0x6b, 0x9c, + 0x88, 0x92, 0x67, 0xfc, 0x7b, 0x0e, 0x62, 0x1a, 0xc8, 0xaf, 0xc3, 0x34, 0xd7, 0xb1, 0xe9, 0xef, + 0x25, 0x9e, 0xa6, 0x31, 0xf4, 0xd3, 0x68, 0xa4, 0xc6, 0x65, 0xa5, 0x7f, 0x3a, 0x41, 0xc6, 0xa4, + 0x3e, 0xf2, 0x73, 0x50, 0x32, 0x5b, 0x2d, 0x9f, 0x32, 0x46, 0xa5, 0xeb, 0x29, 0x35, 0xa6, 0xc5, + 0x59, 0x19, 0x12, 0x31, 0xe2, 0xf3, 0xd7, 0x90, 0xe7, 0xe7, 0xdc, 0xb2, 0x55, 0x90, 0xa6, 0x5f, + 0x43, 0xae, 0x84, 0xd3, 0x51, 0x4b, 0x18, 0xdf, 0x9d, 0x80, 0xa4, 0x6e, 0xd2, 0x82, 0xd9, 0x03, + 0x7f, 0x6f, 0x79, 0xd9, 0xb4, 0x3a, 0x43, 0x65, 0x8f, 0xf3, 0x3c, 0x6d, 0xdd, 0x4c, 0x22, 0x60, + 0x1a, 0x52, 0x69, 0xd9, 0xa4, 0x47, 0x81, 0xb9, 0x37, 0x4c, 0x02, 0x19, 0x6a, 0x89, 0x23, 0x60, + 0x1a, 0x92, 0x7c, 0x1d, 0xca, 0x07, 0xfe, 0x5e, 0xf8, 0x92, 0xab, 0xe5, 0x98, 0x57, 0xcb, 0x51, + 0xde, 0x8c, 0x58, 0x18, 0x97, 0xe3, 0x4b, 0x78, 0xe0, 0xef, 0x21, 0x35, 0xbb, 0x61, 0x69, 0x52, + 0x2f, 0xe1, 0xa6, 0xa2, 0xa3, 0x96, 0x20, 0x1e, 0x90, 0x83, 0x70, 0xf5, 0x74, 0x09, 0x42, 0xf9, + 0xa2, 0xeb, 0x59, 0x4f, 0xa3, 0x85, 0xe2, 0x0f, 0xf4, 0x1c, 0xf7, 0xcd, 0x9b, 0x03, 0x38, 0x98, + 0x81, 0x4d, 0xbe, 0x0d, 0x57, 0x0e, 0xfc, 0x3d, 0xe5, 0xc8, 0x77, 0x7c, 0xdb, 0xb1, 0x6c, 0x2f, + 0x51, 0x93, 0xac, 0xaa, 0xe9, 0x5e, 0xd9, 0xcc, 0x16, 0xc3, 0xd3, 0xc6, 0x1b, 0xaf, 0xc1, 0x54, + 0xbc, 0xa6, 0xf5, 0x25, 0x75, 0x10, 0xe3, 0xbf, 0x72, 0x50, 0xd8, 0x70, 0xbc, 0xfe, 0x4f, 0x48, + 0x79, 0xfc, 0xcf, 0x26, 0x60, 0x82, 0x87, 0x5e, 0xe4, 0x3a, 0x4c, 0x04, 0x47, 0x9e, 0x3c, 0x5b, + 0xc7, 0x1b, 0x97, 0x42, 0x47, 0xb3, 0x7b, 0xe4, 0xd1, 0xc7, 0xea, 0x5f, 0x14, 0x12, 0xe4, 0x1d, + 0x28, 0x38, 0xfd, 0xde, 0x7d, 0xb3, 0xab, 0x9c, 0xd2, 0x2b, 0x61, 0x68, 0xb1, 0x2d, 0xa8, 0x8f, + 0x8f, 0xab, 0x97, 0xa8, 0x63, 0xb9, 0x2d, 0xdb, 0x69, 0x2f, 0x3d, 0x64, 0xae, 0x53, 0xdb, 0xee, + 0xf7, 0xf6, 0xa8, 0x8f, 0x6a, 0x14, 0x4f, 0x8f, 0xf6, 0x5c, 0xb7, 0xcb, 0x01, 0xc6, 0x93, 0xe9, + 0x51, 0x43, 0x92, 0x31, 0xe4, 0xf3, 0x28, 0x86, 0x05, 0x3e, 0x97, 0x9c, 0x48, 0x46, 0x31, 0x4d, + 0x41, 0x45, 0xc5, 0x25, 0x3d, 0x28, 0xf4, 0x4c, 0x8f, 0xcb, 0xe5, 0xc5, 0x92, 0xad, 0x0e, 0x1d, + 0x9f, 0xd6, 0xb6, 0x04, 0xce, 0xaa, 0x13, 0xf8, 0x47, 0x91, 0x3a, 0x49, 0x44, 0xa5, 0x84, 0xd8, + 0x30, 0xd9, 0xb5, 0x59, 0xc0, 0xf5, 0x15, 0x46, 0xb0, 0x0a, 0xae, 0xef, 0xbe, 0xd9, 0xed, 0xd3, + 0x68, 0x05, 0xee, 0x48, 0x58, 0x0c, 0xf1, 0x17, 0x8e, 0xa0, 0x1c, 0x9b, 0x11, 0x99, 0x93, 0xb5, + 0x3f, 0x61, 0xbc, 0xa2, 0xdc, 0x47, 0x76, 0x21, 0xff, 0x88, 0x63, 0x28, 0x67, 0x33, 0xe2, 0x4c, + 0x50, 0x82, 0xbd, 0x35, 0xf6, 0x66, 0xee, 0xad, 0xe2, 0xf7, 0xfe, 0xb4, 0x7a, 0xe1, 0xe3, 0x7f, + 0xbd, 0x76, 0xc1, 0xf8, 0x87, 0x71, 0x28, 0x69, 0x91, 0xff, 0xdf, 0x96, 0xe2, 0xa7, 0x2c, 0xe5, + 0xf6, 0x68, 0xeb, 0x75, 0x26, 0x73, 0xa9, 0x27, 0xcd, 0x65, 0xaa, 0xf1, 0x33, 0xb1, 0xad, 0x7e, + 0x7c, 0x5c, 0xad, 0x24, 0x17, 0x01, 0xcd, 0xc3, 0x2d, 0xca, 0x98, 0xd9, 0xa6, 0x91, 0x19, 0x7c, + 0xe3, 0xcb, 0xcc, 0xe0, 0x52, 0xdc, 0x0c, 0x4a, 0xd9, 0xdb, 0xf8, 0xf1, 0x38, 0x14, 0xb7, 0xc2, + 0xfa, 0xcf, 0x6f, 0xe7, 0xa0, 0x6c, 0x3a, 0x8e, 0x1b, 0x98, 0xb2, 0xd8, 0x25, 0xdd, 0xdb, 0xf6, + 0x50, 0xcb, 0x11, 0x82, 0xd6, 0xea, 0x11, 0xa0, 0x5c, 0x12, 0x7d, 0x32, 0xc5, 0x38, 0x18, 0xd7, + 0x4b, 0x3e, 0x80, 0x42, 0xd7, 0xdc, 0xa3, 0xdd, 0xd0, 0xdb, 0x6d, 0x8c, 0x36, 0x83, 0x3b, 0x02, + 0x2b, 0xb5, 0x1f, 0x92, 0x88, 0x4a, 0xd1, 0xc2, 0x3b, 0x30, 0x97, 0x9e, 0xe8, 0x93, 0xac, 0x28, + 0xdf, 0x8c, 0x98, 0x9a, 0x27, 0x19, 0x6a, 0xfc, 0x6d, 0x09, 0x60, 0xdb, 0x6d, 0x51, 0x55, 0x90, + 0x59, 0x80, 0x31, 0xbb, 0xa5, 0x8e, 0x22, 0x50, 0xb3, 0x1d, 0xdb, 0x58, 0xc1, 0x31, 0xbb, 0xa5, + 0x4b, 0x1c, 0x63, 0xa7, 0x96, 0x38, 0xbe, 0x0e, 0xe5, 0x96, 0xcd, 0xbc, 0xae, 0x79, 0xb4, 0x9d, + 0x11, 0x0b, 0xac, 0x44, 0x2c, 0x8c, 0xcb, 0x91, 0x57, 0xd5, 0xfb, 0x2b, 0x5f, 0x94, 0x4a, 0xea, + 0xfd, 0x2d, 0xf2, 0xe9, 0xc5, 0xde, 0xe1, 0x37, 0x61, 0x2a, 0x2c, 0x21, 0x08, 0x2d, 0x79, 0x31, + 0x2a, 0x7c, 0xeb, 0xa7, 0x76, 0x63, 0x3c, 0x4c, 0x48, 0xa6, 0x4b, 0x1c, 0x85, 0x67, 0x52, 0xe2, + 0x58, 0x81, 0x39, 0x16, 0xb8, 0x3e, 0x6d, 0x85, 0x12, 0x1b, 0x2b, 0x15, 0x92, 0x78, 0xd0, 0xb9, + 0x66, 0x8a, 0x8f, 0x03, 0x23, 0xc8, 0x0e, 0x5c, 0x0a, 0x27, 0x11, 0x7f, 0xc0, 0xca, 0xbc, 0x40, + 0xba, 0xaa, 0x90, 0x2e, 0x3d, 0xc8, 0x90, 0xc1, 0xcc, 0x91, 0xe4, 0x75, 0xc8, 0x7b, 0x1d, 0x93, + 0x51, 0x55, 0xd4, 0x08, 0x73, 0xd7, 0xfc, 0x0e, 0x27, 0x3e, 0x3e, 0xae, 0x96, 0xf8, 0xb2, 0x8b, + 0x1f, 0x28, 0x05, 0xc9, 0x0d, 0x80, 0x3d, 0xb7, 0xef, 0xb4, 0x4c, 0xff, 0x68, 0x63, 0x45, 0x64, + 0x32, 0xb1, 0x9b, 0xd9, 0x86, 0xe6, 0x60, 0x4c, 0x8a, 0x3b, 0xcc, 0x9e, 0x74, 0x1d, 0xaa, 0x36, + 0xa1, 0x1d, 0xa6, 0xf6, 0x28, 0x8a, 0x4f, 0xde, 0x83, 0x92, 0xa8, 0x1e, 0xd2, 0x56, 0x3d, 0x50, + 0x05, 0x8a, 0x27, 0x29, 0xdb, 0xe9, 0xa8, 0xa2, 0x19, 0x82, 0x60, 0x84, 0x47, 0x7e, 0x15, 0x60, + 0xdf, 0x76, 0x6c, 0xd6, 0x11, 0xe8, 0xe5, 0x27, 0x46, 0xd7, 0xcf, 0xb9, 0xa6, 0x51, 0x30, 0x86, + 0xc8, 0x73, 0x1e, 0xcf, 0x6d, 0x6d, 0xec, 0x54, 0xa6, 0xc4, 0x53, 0xea, 0x9c, 0x67, 0x87, 0x13, + 0x51, 0xf2, 0xc8, 0x75, 0x28, 0xb6, 0x4c, 0xda, 0x73, 0x1d, 0xda, 0xaa, 0x4c, 0x47, 0x75, 0x87, + 0x15, 0x45, 0x43, 0xcd, 0x25, 0xdf, 0x81, 0x82, 0x2d, 0x42, 0xbe, 0xca, 0x8c, 0x98, 0xea, 0x37, + 0x87, 0x3b, 0x14, 0x04, 0x44, 0x03, 0xb8, 0xc7, 0x91, 0x7f, 0xa3, 0x82, 0x25, 0x16, 0x4c, 0xba, + 0xfd, 0x40, 0x68, 0x98, 0x15, 0x1a, 0x86, 0xab, 0xb3, 0xdc, 0x95, 0x18, 0xf2, 0xa6, 0x5c, 0xfd, + 0xc0, 0x10, 0x99, 0x3f, 0xaf, 0xd5, 0xb1, 0xbb, 0x2d, 0x9f, 0x3a, 0x95, 0x39, 0x91, 0x52, 0x89, + 0xe7, 0x5d, 0x56, 0x34, 0xd4, 0x5c, 0xf2, 0x0b, 0x30, 0xed, 0xf6, 0x03, 0x61, 0x37, 0xdc, 0xec, + 0x58, 0xe5, 0xa2, 0x10, 0xbf, 0xc8, 0xd3, 0xb6, 0xbb, 0x71, 0x06, 0x26, 0xe5, 0x8c, 0x19, 0x98, + 0x8a, 0xb7, 0x97, 0x18, 0x7f, 0x38, 0x06, 0xe1, 0x3c, 0x7e, 0x12, 0xa2, 0x65, 0x62, 0x40, 0xc1, + 0xa7, 0xac, 0xdf, 0x0d, 0x94, 0xb3, 0x15, 0x7b, 0x8d, 0x82, 0x82, 0x8a, 0x63, 0x1c, 0xc2, 0x34, + 0x9f, 0x6d, 0xb7, 0x4b, 0xbb, 0xcd, 0x80, 0x7a, 0x8c, 0xec, 0x43, 0x9e, 0xf1, 0x3f, 0xd4, 0x9a, + 0x8c, 0x78, 0x51, 0x16, 0x50, 0x2f, 0xb2, 0x77, 0xa1, 0x00, 0x25, 0xbc, 0xf1, 0x47, 0x63, 0x50, + 0xd2, 0xeb, 0x74, 0x86, 0x0a, 0xf9, 0xcb, 0x30, 0xd9, 0xa2, 0xfb, 0x26, 0x7f, 0x1a, 0x75, 0x97, + 0xcc, 0xcd, 0x6a, 0x45, 0x92, 0x30, 0xe4, 0x91, 0x6a, 0x78, 0x98, 0xc9, 0x47, 0x16, 0x55, 0xab, + 0x78, 0xac, 0x48, 0x0e, 0xa0, 0x24, 0xfe, 0x58, 0x0b, 0xfb, 0x5e, 0x86, 0xdd, 0xf7, 0xfb, 0x21, + 0x8a, 0xac, 0x05, 0xe8, 0x9f, 0x18, 0xe1, 0xa7, 0xfa, 0x55, 0xf2, 0x67, 0xe9, 0x57, 0x31, 0xd6, + 0x80, 0x3b, 0x86, 0xf5, 0x65, 0xf2, 0x36, 0x14, 0x99, 0x32, 0x5d, 0xb5, 0x2e, 0x5f, 0xd1, 0x77, + 0x4e, 0x8a, 0xfe, 0xf8, 0xb8, 0x3a, 0x2d, 0x84, 0x43, 0x02, 0xea, 0x21, 0xc6, 0x12, 0x94, 0x63, + 0xf7, 0xfb, 0x7c, 0x85, 0xf5, 0xdd, 0x5c, 0x6c, 0x85, 0x57, 0xcc, 0xc0, 0x44, 0xc1, 0x31, 0x1e, + 0x8f, 0xc1, 0x1c, 0x52, 0xe6, 0xf6, 0x7d, 0x8b, 0xc6, 0x2b, 0xb3, 0xa6, 0x25, 0x9a, 0x7e, 0x52, + 0x95, 0xd9, 0xba, 0xa0, 0xa2, 0xe2, 0x92, 0x6f, 0xc2, 0x74, 0x8f, 0xfa, 0x6d, 0xfd, 0xb2, 0xa9, + 0x4d, 0xd2, 0xf5, 0x95, 0xad, 0x38, 0x13, 0x93, 0xb2, 0x3c, 0xdf, 0xef, 0x99, 0x8e, 0xbd, 0x4f, + 0x59, 0x90, 0x2e, 0x99, 0x6c, 0x29, 0x3a, 0x6a, 0x09, 0xb2, 0x0e, 0x17, 0x19, 0x0d, 0xee, 0x1e, + 0x3a, 0xd4, 0xd7, 0xf7, 0x3e, 0xea, 0xea, 0xea, 0xf9, 0xf0, 0x3a, 0xac, 0x99, 0x16, 0xc0, 0xc1, + 0x31, 0xe2, 0xf4, 0xed, 0x5b, 0x16, 0x65, 0x6c, 0xd9, 0x75, 0x5a, 0xb6, 0x6e, 0x6d, 0x8a, 0x9f, + 0xbe, 0x29, 0x3e, 0x0e, 0x8c, 0xe0, 0x28, 0xfb, 0xa6, 0xdd, 0xed, 0xfb, 0x34, 0x42, 0x29, 0x24, + 0x51, 0xd6, 0x52, 0x7c, 0x1c, 0x18, 0x61, 0xbc, 0x0e, 0xd3, 0x48, 0x03, 0xff, 0x48, 0xaf, 0x49, + 0x15, 0xf2, 0x5d, 0xbb, 0x67, 0xcb, 0xe2, 0x4f, 0x5e, 0x1a, 0xf2, 0x1d, 0x4e, 0x40, 0x49, 0x37, + 0xbe, 0x97, 0x03, 0x88, 0xda, 0x76, 0xc8, 0x01, 0x14, 0xd9, 0xcd, 0x46, 0xdf, 0x3a, 0xd0, 0xf5, + 0xa2, 0x21, 0xaf, 0x15, 0x14, 0x48, 0xec, 0x82, 0x53, 0x51, 0x50, 0x2b, 0xf8, 0xb2, 0xa6, 0x8e, + 0xbf, 0x1a, 0x07, 0x3d, 0x8a, 0x6f, 0x2e, 0x75, 0x5a, 0x9e, 0x6b, 0x3b, 0x41, 0xfa, 0xea, 0x74, + 0x55, 0xd1, 0x51, 0x4b, 0x70, 0x7b, 0xdb, 0x93, 0x0f, 0x31, 0x96, 0xb4, 0x37, 0x35, 0x07, 0xc5, + 0xe5, 0x72, 0x3e, 0x6d, 0xf3, 0xb5, 0x1e, 0x4f, 0xca, 0xa1, 0xa0, 0xa2, 0xe2, 0xf2, 0x63, 0x26, + 0x2c, 0x98, 0x2a, 0x1b, 0x11, 0xc7, 0x4c, 0x58, 0x5b, 0x45, 0xcd, 0x25, 0x1d, 0x98, 0x35, 0xc5, + 0xd6, 0x46, 0x45, 0xe0, 0x27, 0xaa, 0x67, 0x47, 0x2d, 0x23, 0x49, 0x14, 0x4c, 0xc3, 0x72, 0x4d, + 0x2c, 0x1a, 0xfe, 0xe4, 0x65, 0x6d, 0xad, 0xa9, 0x99, 0x44, 0xc1, 0x34, 0x2c, 0x8f, 0xb0, 0x7c, + 0xb7, 0x4b, 0xeb, 0xb8, 0xad, 0x22, 0x39, 0x1d, 0x61, 0xa1, 0x24, 0x63, 0xc8, 0x37, 0x7e, 0x37, + 0x07, 0x33, 0x4d, 0xcb, 0xb7, 0xbd, 0x40, 0xbf, 0xfb, 0xdb, 0xa2, 0xd7, 0x27, 0x30, 0x79, 0xec, + 0xa3, 0x6c, 0xea, 0xc5, 0x53, 0xea, 0x69, 0x52, 0x28, 0xd1, 0x0a, 0x24, 0x49, 0x18, 0x41, 0x88, + 0xac, 0x57, 0x78, 0x97, 0xf4, 0xde, 0x36, 0x05, 0x15, 0x15, 0xd7, 0xf8, 0x7e, 0x0e, 0x8a, 0xfa, + 0xf6, 0xea, 0x25, 0xc8, 0x8b, 0x4b, 0x11, 0x65, 0x3b, 0xfa, 0x30, 0x59, 0xe6, 0x44, 0x94, 0x3c, + 0x2e, 0x24, 0xc2, 0x39, 0x05, 0x1c, 0x3b, 0x71, 0x4c, 0x3f, 0x40, 0xc9, 0xe3, 0x46, 0x4b, 0x9d, + 0x96, 0xb2, 0x17, 0x6d, 0xb4, 0xab, 0x4e, 0x0b, 0x39, 0x5d, 0xf4, 0xae, 0xb8, 0x7e, 0xcf, 0x0c, + 0xd2, 0x39, 0xf9, 0x9a, 0xa0, 0xa2, 0xe2, 0x1a, 0xef, 0xc2, 0xac, 0xba, 0x18, 0xd7, 0x0b, 0xf5, + 0x2a, 0x14, 0x5b, 0x7d, 0xdf, 0x8c, 0xb9, 0x49, 0x6d, 0xe2, 0x2b, 0x8a, 0x8e, 0x5a, 0xc2, 0x98, + 0x86, 0x72, 0xac, 0xa7, 0xd6, 0xf8, 0xd1, 0x15, 0xd0, 0x77, 0xbc, 0x3f, 0xbd, 0x29, 0x1e, 0x2a, + 0x8d, 0xb2, 0x74, 0x44, 0x9c, 0x1f, 0x3d, 0x22, 0xd6, 0xfb, 0x9e, 0x8a, 0x8a, 0xdb, 0x51, 0x54, + 0x5c, 0x38, 0x87, 0xa8, 0x38, 0x6a, 0xaf, 0x49, 0x47, 0xc6, 0xbf, 0x97, 0x83, 0x29, 0x87, 0x67, + 0xdd, 0xea, 0x7d, 0xaf, 0x4c, 0x8a, 0x48, 0xec, 0xee, 0x48, 0x8b, 0x58, 0xdb, 0x8e, 0x21, 0xca, + 0x82, 0x83, 0xce, 0x8a, 0xe3, 0x2c, 0x4c, 0xa8, 0x26, 0x6b, 0x50, 0x34, 0xf7, 0x79, 0x2a, 0x13, + 0x1c, 0xa9, 0xcb, 0xea, 0xab, 0x59, 0x1e, 0xa0, 0xae, 0x64, 0xa4, 0x73, 0x0d, 0x7f, 0xa1, 0x1e, + 0xcb, 0x4f, 0x27, 0xdd, 0x1d, 0x54, 0x1a, 0xe1, 0x74, 0x0a, 0x2b, 0x27, 0xb1, 0x00, 0x41, 0x51, + 0x62, 0xcd, 0x42, 0x06, 0x14, 0x64, 0xb2, 0x24, 0x32, 0xc5, 0xa2, 0x8c, 0x7b, 0x65, 0x22, 0x85, + 0x8a, 0x43, 0xda, 0x61, 0x98, 0x5b, 0x16, 0x8b, 0xdb, 0x18, 0x3a, 0xf4, 0xd7, 0x91, 0x73, 0x76, + 0x9c, 0x4b, 0x6e, 0xc7, 0x9d, 0xe8, 0xd4, 0x59, 0x9c, 0xe8, 0xf4, 0xa9, 0x0e, 0xb4, 0x0d, 0x05, + 0x26, 0x5c, 0xb4, 0xc8, 0x10, 0xcb, 0x37, 0x96, 0x87, 0x3b, 0xe1, 0x13, 0x5e, 0x5e, 0xae, 0x8e, + 0xa4, 0xa1, 0x82, 0x27, 0x2e, 0x14, 0x7d, 0x15, 0x09, 0xaa, 0x24, 0x73, 0xb8, 0x1a, 0x75, 0x3a, + 0x9c, 0x94, 0xf6, 0x11, 0x52, 0x51, 0x2b, 0x21, 0xef, 0xc1, 0x78, 0xcb, 0x6c, 0xab, 0x74, 0xf3, + 0x5b, 0x43, 0x5f, 0xeb, 0x87, 0x6a, 0x44, 0x33, 0xeb, 0x4a, 0x7d, 0x1d, 0x39, 0x2a, 0x39, 0x88, + 0x3a, 0x9c, 0xe6, 0x46, 0xe8, 0x11, 0x4d, 0x79, 0x7d, 0x99, 0x80, 0x0c, 0xf4, 0x48, 0xad, 0xc2, + 0xe4, 0x23, 0xb7, 0xdb, 0xef, 0xa9, 0x3c, 0xb5, 0x7c, 0x63, 0x21, 0x6b, 0xb7, 0xef, 0x0b, 0x91, + 0xc8, 0x09, 0xc8, 0xdf, 0x0c, 0xc3, 0xb1, 0xe4, 0x37, 0x73, 0x30, 0xc3, 0x5f, 0x1d, 0x6d, 0x07, + 0xac, 0x42, 0x46, 0xb0, 0xd4, 0x7b, 0x8c, 0xfa, 0x91, 0x85, 0x3d, 0xa7, 0xd4, 0xce, 0x6c, 0x24, + 0x34, 0x60, 0x4a, 0x23, 0xf1, 0xa0, 0xc8, 0xec, 0x16, 0xb5, 0x4c, 0x9f, 0x55, 0xe6, 0xcf, 0x4d, + 0x7b, 0x14, 0x58, 0x2a, 0x6c, 0xd4, 0x5a, 0xc8, 0x6f, 0x89, 0xbe, 0x5e, 0xd5, 0xd9, 0xae, 0xbe, + 0x36, 0xb8, 0x74, 0x9e, 0x5f, 0x1b, 0xcc, 0xcb, 0xa6, 0xde, 0x84, 0x06, 0x4c, 0xab, 0x24, 0x77, + 0xe1, 0xb2, 0xec, 0x1b, 0x4b, 0xb7, 0xb9, 0x5d, 0x16, 0xb7, 0x08, 0xcf, 0x9f, 0x1c, 0x57, 0x2f, + 0xd7, 0xb3, 0x04, 0x30, 0x7b, 0x1c, 0xf9, 0x08, 0xa6, 0xfd, 0x78, 0x78, 0x5f, 0x79, 0x6e, 0x84, + 0x2b, 0xec, 0x44, 0xa2, 0x20, 0xeb, 0x20, 0x09, 0x12, 0x26, 0x75, 0x91, 0x37, 0xa0, 0xec, 0x29, + 0x4f, 0x65, 0xb3, 0x5e, 0xe5, 0x8a, 0x78, 0x06, 0x71, 0xa2, 0xee, 0x44, 0x64, 0x8c, 0xcb, 0x90, + 0x7b, 0x50, 0x0e, 0xdc, 0x2e, 0xf5, 0x55, 0xb9, 0xbd, 0x22, 0x36, 0x7f, 0x31, 0xcb, 0x92, 0x77, + 0xb5, 0x58, 0x54, 0xcc, 0x8d, 0x68, 0x0c, 0xe3, 0x38, 0x3c, 0x4b, 0x0c, 0x9b, 0x24, 0x7d, 0x91, + 0x12, 0x3f, 0x9f, 0xcc, 0x12, 0x9b, 0x71, 0x26, 0x26, 0x65, 0x79, 0xde, 0xe7, 0xf9, 0xb6, 0xeb, + 0xdb, 0xc1, 0xd1, 0x72, 0xd7, 0x64, 0x4c, 0x00, 0x2c, 0x08, 0x00, 0x9d, 0xf7, 0xed, 0xa4, 0x05, + 0x70, 0x70, 0x0c, 0xcf, 0x09, 0x42, 0x62, 0xe5, 0x05, 0x91, 0x5d, 0x09, 0xb7, 0x14, 0x8e, 0x45, + 0xcd, 0x3d, 0xa5, 0xa1, 0xe7, 0xea, 0x30, 0x0d, 0x3d, 0xa4, 0x05, 0x57, 0xcd, 0x7e, 0xe0, 0xf6, + 0x38, 0x21, 0x39, 0x64, 0xd7, 0x3d, 0xa0, 0x4e, 0xe5, 0x9a, 0x38, 0xab, 0xae, 0x9d, 0x1c, 0x57, + 0xaf, 0xd6, 0xbf, 0x40, 0x0e, 0xbf, 0x10, 0x85, 0xf4, 0xa0, 0x48, 0x55, 0x53, 0x52, 0xe5, 0x2b, + 0x23, 0x1c, 0x12, 0xc9, 0xce, 0x26, 0xb9, 0x40, 0x21, 0x0d, 0xb5, 0x0a, 0xb2, 0x0b, 0xe5, 0x8e, + 0xcb, 0x82, 0x7a, 0xd7, 0x36, 0x19, 0x65, 0x95, 0x17, 0x85, 0x9d, 0x64, 0x9e, 0x6f, 0xb7, 0x42, + 0xb1, 0xc8, 0x4c, 0x6e, 0x45, 0x23, 0x31, 0x0e, 0x43, 0xa8, 0x48, 0x90, 0xfa, 0x62, 0xd7, 0x5c, + 0x27, 0xa0, 0x1f, 0x06, 0x95, 0x45, 0xf1, 0x2c, 0xaf, 0x64, 0x21, 0xef, 0xb8, 0xad, 0x66, 0x52, + 0x5a, 0xbe, 0xe5, 0x29, 0x22, 0xa6, 0x31, 0xc9, 0x9b, 0x30, 0xe5, 0xb9, 0xad, 0xa6, 0x47, 0xad, + 0x1d, 0x33, 0xb0, 0x3a, 0x95, 0x6a, 0xf2, 0xb2, 0x60, 0x27, 0xc6, 0xc3, 0x84, 0xe4, 0xc2, 0xbb, + 0x70, 0x71, 0x20, 0x9e, 0x7a, 0xa2, 0x9b, 0x95, 0x3f, 0xcf, 0x41, 0x3c, 0x9c, 0x3d, 0xf7, 0xb8, + 0x7f, 0x1d, 0x2e, 0xaa, 0x4e, 0x62, 0x7e, 0xd8, 0x76, 0xfb, 0x41, 0x98, 0x29, 0xc7, 0x6a, 0x24, + 0x98, 0x16, 0xc0, 0xc1, 0x31, 0xc6, 0x5f, 0xe4, 0x60, 0x3a, 0xe1, 0xbe, 0xcf, 0x3d, 0x2b, 0x5c, + 0x03, 0xd2, 0xb3, 0x7d, 0xdf, 0xf5, 0xe5, 0x19, 0xb8, 0xc5, 0x6d, 0x99, 0xa9, 0xef, 0x07, 0x44, + 0x53, 0xc6, 0xd6, 0x00, 0x17, 0x33, 0x46, 0x18, 0x7f, 0x9d, 0x83, 0xa8, 0x08, 0xa7, 0x3b, 0x91, + 0x72, 0xa7, 0x76, 0x22, 0xbd, 0x0a, 0xc5, 0x87, 0xcc, 0x75, 0x76, 0xa2, 0x7e, 0x25, 0xbd, 0xa0, + 0xb7, 0x9b, 0x77, 0xb7, 0x85, 0xa4, 0x96, 0x10, 0xd2, 0x1f, 0xac, 0xd9, 0xdd, 0x60, 0xb0, 0xab, + 0xe7, 0xf6, 0x2f, 0x49, 0x3a, 0x6a, 0x09, 0xb2, 0x04, 0x25, 0x5d, 0xf7, 0x55, 0xe9, 0xa4, 0x5e, + 0x04, 0x5d, 0xf4, 0xc4, 0x48, 0xc6, 0xf8, 0xc1, 0x18, 0x14, 0x7f, 0xdc, 0x3e, 0x86, 0x38, 0x48, + 0x7d, 0x0c, 0xb1, 0x3c, 0x62, 0x29, 0xf9, 0x8b, 0x3e, 0x84, 0x30, 0x3e, 0xcd, 0xc1, 0xd4, 0x33, + 0xfc, 0x1e, 0x61, 0x2f, 0xf9, 0x3d, 0xc2, 0xdb, 0x23, 0x3d, 0xda, 0x29, 0xdf, 0x22, 0xfc, 0xdd, + 0x7c, 0xf4, 0x48, 0x7c, 0x59, 0x89, 0x03, 0xa5, 0xf0, 0x05, 0x0f, 0xcb, 0xf3, 0x6f, 0x8f, 0x94, + 0x14, 0x46, 0x46, 0x19, 0x52, 0x18, 0x46, 0x2a, 0xc8, 0x0d, 0x00, 0xca, 0x3d, 0x9b, 0xac, 0xdd, + 0x8d, 0x25, 0xab, 0xd7, 0xab, 0x9a, 0x83, 0x31, 0xa9, 0x67, 0x5f, 0x70, 0xc8, 0x3e, 0xa2, 0x27, + 0x9e, 0xca, 0x11, 0x7d, 0xf5, 0xdc, 0x8f, 0xe8, 0x17, 0x9f, 0xfe, 0x11, 0x1d, 0x4b, 0x48, 0xf2, + 0x23, 0x24, 0x24, 0x1f, 0xc1, 0x25, 0xf9, 0xe7, 0x72, 0xd7, 0xb4, 0x7b, 0xda, 0x5e, 0x54, 0x4b, + 0xd1, 0x57, 0x33, 0x0f, 0x66, 0xea, 0x33, 0x9b, 0x05, 0xd4, 0x09, 0xee, 0x47, 0x23, 0xa3, 0xfb, + 0xe8, 0xfb, 0x19, 0x70, 0x98, 0xa9, 0x24, 0x1d, 0xc1, 0x4e, 0x9e, 0x21, 0x82, 0xfd, 0x7e, 0x0e, + 0x2e, 0x9b, 0x59, 0x9f, 0x30, 0xaa, 0x3a, 0xc6, 0xed, 0x91, 0xf2, 0x89, 0x04, 0xa2, 0xca, 0x07, + 0xb2, 0x58, 0x98, 0x3d, 0x07, 0xf2, 0x72, 0x94, 0x92, 0x96, 0x84, 0x51, 0x65, 0x27, 0x93, 0xdf, + 0x4d, 0x97, 0x82, 0x40, 0xac, 0x76, 0x73, 0x64, 0x87, 0x7d, 0x0e, 0xe5, 0xa0, 0xf2, 0x08, 0xe5, + 0xa0, 0x54, 0x7a, 0x31, 0x75, 0x4e, 0xe9, 0x85, 0x03, 0x73, 0x76, 0xcf, 0x6c, 0xd3, 0x9d, 0x7e, + 0xb7, 0x2b, 0x2b, 0xe0, 0xac, 0x32, 0x2d, 0xb0, 0x33, 0xfb, 0x40, 0x79, 0xba, 0xd7, 0x4d, 0x7f, + 0x40, 0xa4, 0x2f, 0x6d, 0x36, 0x52, 0x48, 0x38, 0x80, 0xcd, 0xcd, 0x92, 0x87, 0xad, 0xdb, 0x34, + 0xe0, 0xab, 0x2d, 0x2a, 0x25, 0xea, 0x53, 0xed, 0x5b, 0x11, 0x19, 0xe3, 0x32, 0x64, 0x13, 0x4a, + 0x2d, 0x87, 0xa9, 0x6f, 0xb8, 0x66, 0x85, 0x97, 0x7a, 0x8d, 0xfb, 0xb6, 0x95, 0xed, 0xa6, 0xfe, + 0x6e, 0xeb, 0xea, 0xe0, 0xff, 0x45, 0x51, 0xd3, 0x7c, 0x8c, 0xc6, 0x93, 0x2d, 0x01, 0xa6, 0x9a, + 0xa2, 0x65, 0x69, 0xe3, 0xda, 0x29, 0x11, 0xf2, 0xca, 0x76, 0xd8, 0xc3, 0x3d, 0xad, 0xd4, 0xa9, + 0x56, 0xe7, 0x08, 0x81, 0xbc, 0x02, 0x05, 0xd7, 0x59, 0xfd, 0xd0, 0x0e, 0x2a, 0x17, 0x93, 0x15, + 0xf0, 0xbb, 0x82, 0x8a, 0x8a, 0x4b, 0xee, 0xc1, 0x95, 0x20, 0xe8, 0xaa, 0xd4, 0xb6, 0xbe, 0x1f, + 0x50, 0x3f, 0x6c, 0x7c, 0x10, 0xcd, 0x2b, 0x79, 0xf9, 0x19, 0xd8, 0xee, 0xee, 0x9d, 0x2c, 0x11, + 0x3c, 0x6d, 0xec, 0xe9, 0x49, 0xf7, 0xfc, 0x90, 0x49, 0x77, 0x3c, 0xcf, 0xbb, 0xf4, 0x85, 0x79, + 0xde, 0x40, 0x5e, 0x7a, 0xf9, 0x09, 0xf2, 0xd2, 0xf7, 0x44, 0x7b, 0xc7, 0xfa, 0xb2, 0xca, 0xe9, + 0xdf, 0x1a, 0xae, 0x94, 0xc8, 0x11, 0xe4, 0x2d, 0x9f, 0xf8, 0x13, 0x25, 0x26, 0xd9, 0x81, 0x4b, + 0x9e, 0xdb, 0x1a, 0x48, 0x6b, 0x45, 0x12, 0x1f, 0xeb, 0xed, 0xd9, 0xc9, 0x90, 0xc1, 0xcc, 0x91, + 0xc2, 0x97, 0x46, 0xf4, 0x4a, 0x45, 0x2c, 0x8c, 0xf4, 0xa5, 0x11, 0x19, 0xe3, 0x32, 0xe9, 0x2c, + 0xef, 0xf9, 0xa7, 0x96, 0xe5, 0x2d, 0x3c, 0x83, 0x2c, 0xef, 0x85, 0x67, 0x97, 0xe5, 0x7d, 0x56, + 0x84, 0x99, 0xd4, 0x47, 0x8d, 0xba, 0xb3, 0x2a, 0x77, 0xd6, 0xce, 0xaa, 0x44, 0xeb, 0xd3, 0xd8, + 0x53, 0x6d, 0x7d, 0x1a, 0x3f, 0xf7, 0xd6, 0xa7, 0x58, 0x8b, 0xd7, 0xc4, 0x97, 0xb4, 0x78, 0xd5, + 0x61, 0xd6, 0x72, 0x7b, 0x9e, 0xf8, 0x8a, 0x42, 0x35, 0xfa, 0xc8, 0xcb, 0x78, 0x7d, 0xdd, 0xb9, + 0x9c, 0x64, 0x63, 0x5a, 0x9e, 0x30, 0xc8, 0x3b, 0x62, 0x60, 0x61, 0x84, 0xf6, 0xd0, 0xe4, 0x86, + 0x89, 0x83, 0x52, 0x75, 0x68, 0xea, 0x30, 0x5d, 0xaa, 0x97, 0xba, 0x78, 0xa0, 0x31, 0x9b, 0x6c, + 0xc9, 0x63, 0x95, 0x92, 0xd0, 0xff, 0xcb, 0xe7, 0xa1, 0x3f, 0xd9, 0xff, 0xa7, 0x66, 0x12, 0xdd, + 0x00, 0x27, 0xb9, 0x98, 0x9e, 0x09, 0xf1, 0xe1, 0x39, 0x2f, 0x2b, 0x0c, 0x63, 0xea, 0x56, 0xe9, + 0x8b, 0x82, 0xc1, 0x45, 0xa5, 0xe5, 0xb9, 0xcc, 0x40, 0x8e, 0xe1, 0x29, 0xc8, 0xf1, 0xfe, 0xb1, + 0xe2, 0xd3, 0xea, 0x1f, 0x5b, 0x38, 0x92, 0xad, 0xa9, 0xa7, 0x76, 0xb5, 0xde, 0x4b, 0x76, 0x9a, + 0xbf, 0x3b, 0xe4, 0xff, 0x4e, 0x14, 0x36, 0xbf, 0xc6, 0x3b, 0x6a, 0x7f, 0x23, 0x07, 0x97, 0xb2, + 0xb6, 0x25, 0x63, 0x16, 0xcd, 0xe4, 0x2c, 0x46, 0x4b, 0xd7, 0xe2, 0xae, 0xe5, 0x3f, 0xf2, 0xb1, + 0xe4, 0x30, 0xa0, 0xde, 0x4f, 0x6f, 0x8e, 0x87, 0xba, 0x39, 0x4e, 0x7c, 0x2d, 0x9c, 0x7f, 0x86, + 0x5f, 0x0b, 0x17, 0x86, 0xf8, 0x5a, 0x78, 0xf2, 0x59, 0x7e, 0x2d, 0x5c, 0x3c, 0xe3, 0xd7, 0xc2, + 0xa5, 0xa7, 0xff, 0xb5, 0xf0, 0xe7, 0x39, 0x98, 0x4b, 0x37, 0x2f, 0x3f, 0x83, 0x22, 0xd9, 0x41, + 0xa2, 0x48, 0xb6, 0x31, 0x92, 0x33, 0x0f, 0xa7, 0x7d, 0x5a, 0xb1, 0xcc, 0xf8, 0x61, 0x0e, 0x06, + 0x1a, 0xb4, 0x9f, 0x41, 0x1d, 0xeb, 0x61, 0xb2, 0x8e, 0xb5, 0x7a, 0x2e, 0x0f, 0x79, 0x4a, 0x3d, + 0xeb, 0x7f, 0x32, 0x1e, 0xf1, 0xff, 0xa4, 0xae, 0x95, 0x70, 0x6d, 0x63, 0x4f, 0xdf, 0xb5, 0x35, + 0x6a, 0x9f, 0x7c, 0xbe, 0x78, 0xe1, 0xd3, 0xcf, 0x17, 0x2f, 0x7c, 0xf6, 0xf9, 0xe2, 0x85, 0x8f, + 0x4f, 0x16, 0x73, 0x9f, 0x9c, 0x2c, 0xe6, 0x3e, 0x3d, 0x59, 0xcc, 0x7d, 0x76, 0xb2, 0x98, 0xfb, + 0xe1, 0xc9, 0x62, 0xee, 0x0f, 0xfe, 0x6d, 0xf1, 0xc2, 0xaf, 0x14, 0x43, 0xdc, 0xff, 0x0d, 0x00, + 0x00, 0xff, 0xff, 0x52, 0x9f, 0x88, 0x20, 0x36, 0x51, 0x00, 0x00, } func (m *ArchiveStrategy) Marshal() (dAtA []byte, err error) { @@ -2410,7 +2407,7 @@ func (m *CronWorkflowOptions) MarshalToSizedBuffer(dAtA []byte) (int, error) { if m.StartingDeadlineSeconds != nil { i = encodeVarintGenerated(dAtA, i, uint64(*m.StartingDeadlineSeconds)) i-- - dAtA[i] = 0x30 + dAtA[i] = 0x28 } i-- if m.Suspend { @@ -2419,21 +2416,16 @@ func (m *CronWorkflowOptions) MarshalToSizedBuffer(dAtA []byte) (int, error) { dAtA[i] = 0 } i-- - dAtA[i] = 0x28 + dAtA[i] = 0x20 i -= len(m.ConcurrencyPolicy) copy(dAtA[i:], m.ConcurrencyPolicy) i = encodeVarintGenerated(dAtA, i, uint64(len(m.ConcurrencyPolicy))) i-- - dAtA[i] = 0x22 + dAtA[i] = 0x1a i -= len(m.RuntimeGenerateName) copy(dAtA[i:], m.RuntimeGenerateName) i = encodeVarintGenerated(dAtA, i, uint64(len(m.RuntimeGenerateName))) i-- - dAtA[i] = 0x1a - i -= len(m.RuntimeNamespace) - copy(dAtA[i:], m.RuntimeNamespace) - i = encodeVarintGenerated(dAtA, i, uint64(len(m.RuntimeNamespace))) - i-- dAtA[i] = 0x12 i -= len(m.Schedule) copy(dAtA[i:], m.Schedule) @@ -5540,8 +5532,6 @@ func (m *CronWorkflowOptions) Size() (n int) { _ = l l = len(m.Schedule) n += 1 + l + sovGenerated(uint64(l)) - l = len(m.RuntimeNamespace) - n += 1 + l + sovGenerated(uint64(l)) l = len(m.RuntimeGenerateName) n += 1 + l + sovGenerated(uint64(l)) l = len(m.ConcurrencyPolicy) @@ -6743,7 +6733,6 @@ func (this *CronWorkflowOptions) String() string { } s := strings.Join([]string{`&CronWorkflowOptions{`, `Schedule:` + fmt.Sprintf("%v", this.Schedule) + `,`, - `RuntimeNamespace:` + fmt.Sprintf("%v", this.RuntimeNamespace) + `,`, `RuntimeGenerateName:` + fmt.Sprintf("%v", this.RuntimeGenerateName) + `,`, `ConcurrencyPolicy:` + fmt.Sprintf("%v", this.ConcurrencyPolicy) + `,`, `Suspend:` + fmt.Sprintf("%v", this.Suspend) + `,`, @@ -9127,38 +9116,6 @@ func (m *CronWorkflowOptions) Unmarshal(dAtA []byte) error { m.Schedule = string(dAtA[iNdEx:postIndex]) iNdEx = postIndex case 2: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field RuntimeNamespace", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowGenerated - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - stringLen |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - intStringLen := int(stringLen) - if intStringLen < 0 { - return ErrInvalidLengthGenerated - } - postIndex := iNdEx + intStringLen - if postIndex < 0 { - return ErrInvalidLengthGenerated - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.RuntimeNamespace = string(dAtA[iNdEx:postIndex]) - iNdEx = postIndex - case 3: if wireType != 2 { return fmt.Errorf("proto: wrong wireType = %d for field RuntimeGenerateName", wireType) } @@ -9190,7 +9147,7 @@ func (m *CronWorkflowOptions) Unmarshal(dAtA []byte) error { } m.RuntimeGenerateName = string(dAtA[iNdEx:postIndex]) iNdEx = postIndex - case 4: + case 3: if wireType != 2 { return fmt.Errorf("proto: wrong wireType = %d for field ConcurrencyPolicy", wireType) } @@ -9220,9 +9177,9 @@ func (m *CronWorkflowOptions) Unmarshal(dAtA []byte) error { if postIndex > l { return io.ErrUnexpectedEOF } - m.ConcurrencyPolicy = k8s_io_api_batch_v2alpha1.ConcurrencyPolicy(dAtA[iNdEx:postIndex]) + m.ConcurrencyPolicy = ConcurrencyPolicy(dAtA[iNdEx:postIndex]) iNdEx = postIndex - case 5: + case 4: if wireType != 0 { return fmt.Errorf("proto: wrong wireType = %d for field Suspend", wireType) } @@ -9242,7 +9199,7 @@ func (m *CronWorkflowOptions) Unmarshal(dAtA []byte) error { } } m.Suspend = bool(v != 0) - case 6: + case 5: if wireType != 0 { return fmt.Errorf("proto: wrong wireType = %d for field StartingDeadlineSeconds", wireType) } diff --git a/pkg/apis/workflow/v1alpha1/generated.proto b/pkg/apis/workflow/v1alpha1/generated.proto index 1732a0a0dd65..dbc0b8a97d45 100644 --- a/pkg/apis/workflow/v1alpha1/generated.proto +++ b/pkg/apis/workflow/v1alpha1/generated.proto @@ -149,21 +149,18 @@ message CronWorkflowOptions { // Schedule is a schedule to run the Workflow in Cron format optional string schedule = 1; - // RuntimeNamespace is the namespace where the CronWorkflow will run - optional string runtimeNamespace = 2; - // RuntimeGenerateName is the name generator the Workflow will be run with. Mutually exclusive with RuntimeName - optional string runtimeGenerateName = 3; + optional string runtimeGenerateName = 2; // ConcurrencyPolicy is the K8s-style concurrency policy that will be used - optional string concurrencyPolicy = 4; + optional string concurrencyPolicy = 3; // Suspend is a flag that will stop new CronWorkflows from running if set to true - optional bool suspend = 5; + optional bool suspend = 4; // StartingDeadlineSeconds is the K8s-style deadline that will limit the time a CronWorkflow will be run after its // original scheduled time if it is missed. - optional int64 startingDeadlineSeconds = 6; + optional int64 startingDeadlineSeconds = 5; } message CronWorkflowStatus { diff --git a/pkg/apis/workflow/v1alpha1/openapi_generated.go b/pkg/apis/workflow/v1alpha1/openapi_generated.go index e57ebcd08062..3785fa9fa4c3 100644 --- a/pkg/apis/workflow/v1alpha1/openapi_generated.go +++ b/pkg/apis/workflow/v1alpha1/openapi_generated.go @@ -532,13 +532,6 @@ func schema_pkg_apis_workflow_v1alpha1_CronWorkflowOptions(ref common.ReferenceC Format: "", }, }, - "runtimeNamespace": { - SchemaProps: spec.SchemaProps{ - Description: "RuntimeNamespace is the namespace where the CronWorkflow will run", - Type: []string{"string"}, - Format: "", - }, - }, "runtimeGenerateName": { SchemaProps: spec.SchemaProps{ Description: "RuntimeGenerateName is the name generator the Workflow will be run with. Mutually exclusive with RuntimeName", @@ -568,7 +561,7 @@ func schema_pkg_apis_workflow_v1alpha1_CronWorkflowOptions(ref common.ReferenceC }, }, }, - Required: []string{"schedule", "runtimeNamespace", "runtimeGenerateName"}, + Required: []string{"schedule", "runtimeGenerateName"}, }, }, } diff --git a/workflow/cron/controller.go b/workflow/cron/controller.go index c575d14b8651..24911d967548 100644 --- a/workflow/cron/controller.go +++ b/workflow/cron/controller.go @@ -119,17 +119,17 @@ func (cc *Controller) processNextCronItem() bool { return true } - cronWfIf := cc.wfClientset.ArgoprojV1alpha1().CronWorkflows(cc.namespace) + cronWfIf := cc.wfClientset.ArgoprojV1alpha1().CronWorkflows(cronWf.Namespace) cronWorkflowOperationCtx, err := newCronWfOperationCtx(cronWf, cc.wfClientset, cronWfIf) if err != nil { log.Error(err) - return false + return true } err = cronWorkflowOperationCtx.runOutstandingWorkflows() if err != nil { log.Errorf("could not run outstanding Workflow: %s", err) - return false + return true } // The job is currently scheduled, remove it and re add it. @@ -141,87 +141,73 @@ func (cc *Controller) processNextCronItem() bool { entryId, err := cc.cron.AddJob(cronWf.Options.Schedule, cronWorkflowOperationCtx) if err != nil { log.Errorf("could not schedule CronWorkflow: %s", err) - return false + return true } cc.nameEntryIDMap[key.(string)] = entryId log.Infof("CronWorkflow %s added", key.(string)) - return false + return true } func (cc *Controller) runWorkflowWorker() { - //for cc.processNextWorkflowItem() { - //} + for cc.processNextWorkflowItem() { + } } func (cc *Controller) processNextWorkflowItem() bool { - //key, quit := cc.wfQueue.Get() - //if quit { - // return false - //} - //defer cc.wfQueue.Done(key) - // - //rawWf, wfExists, err := cc.wfInformer.GetIndexer().GetByKey(key.(string)) - //if err != nil { - // log.Errorf("Failed to get Workflow '%s' from informer index: %+v", key, err) - // return true - //} - // - //wf, ok := rawWf.(*v1alpha1.Workflow) - //if !ok { - // log.Warnf("Key '%s' in index is not a Workflow", key) - // return true - //} - // - //parentCronWfName := wf.Labels[common.LabelCronWorkflow] - //var woc *cronWfOperationCtx - //if entryId, ok := cc.nameEntryIDMap[parentCronWfName]; ok { - // woc, ok = cc.cron.Entry(entryId).Job.(*cronWfOperationCtx) - // if !ok { - // log.Errorf("Parent CronWorkflow '%s' is malformed", parentCronWfName) - // return true - // } - //} else { - // log.Errorf("Parent CronWorkflow '%s' no longer exists", parentCronWfName) - // return true - //} - // - //if wf.Status.Completed() || !wfExists { - // for i, objectRef := range woc.cronWf.Status.Active { - // if objectRef.UID == wf.ObjectMeta.UID { - // woc.cronWf.Status.Active = append(woc.cronWf.Status.Active[:i], woc.cronWf.Status.Active[i + 1:]...) - // err = woc.persistUpdate() - // if err != nil { - // log.Errorf("Unable to update CronWorkflow '%s': %s", parentCronWfName, wf.Name, err) - // return true - // } - // return true - // } - // } - //} else { - // for _, objectRef := range woc.cronWf.Status.Active { - // if objectRef.UID == wf.ObjectMeta.UID { - // // Workflow is already reflected on Active - // return true - // } - // } - // // ObjectReference does not exist, add it - // newObjectRef, err := reference.GetReference(runtime.NewScheme(), wf) - // if err != nil { - // log.Errorf("Parent CronWorkflow '%s' cannot create ObjectReference for '%s': %s", parentCronWfName, wf.Name, err) - // return true - // } - // woc.cronWf.Status.Active = append(woc.cronWf.Status.Active, *newObjectRef) - // err = woc.persistUpdate() - // if err != nil { - // log.Errorf("Unable to update CronWorkflow '%s': %s", parentCronWfName, wf.Name, err) - // return true - // } - // return true - //} - - return false + key, quit := cc.wfQueue.Get() + if quit { + return false + } + defer cc.wfQueue.Done(key) + + rawWf, wfExists, err := cc.wfInformer.GetIndexer().GetByKey(key.(string)) + if err != nil { + log.Errorf("Failed to get Workflow '%s' from informer index: %+v", key, err) + return true + } + + wf, ok := rawWf.(*v1alpha1.Workflow) + if !ok { + log.Warnf("Key '%s' in index is not a Workflow", key) + return true + } + + if wf.OwnerReferences == nil || len(wf.OwnerReferences) != 1 { + log.Warnf("Workflow '%s' stemming from CronWorkflow is malformed", wf.Name) + return true + } + + // Workflows are run in the same namespace as CronWorkflow + nameEntryIdMapKey := wf.Namespace + "/" + wf.OwnerReferences[0].Name + var woc *cronWfOperationCtx + if entryId, ok := cc.nameEntryIDMap[nameEntryIdMapKey]; ok { + woc, ok = cc.cron.Entry(entryId).Job.(*cronWfOperationCtx) + if !ok { + log.Errorf("Parent CronWorkflow '%s' is malformed", nameEntryIdMapKey) + return true + } + } else { + log.Errorf("Parent CronWorkflow '%s' no longer exists", nameEntryIdMapKey) + return true + } + + // If the workflow is completed or was deleted, remove it from Active Workflows + if wf.Status.Completed() || !wfExists { + for i, objectRef := range woc.cronWf.Status.Active { + if objectRef.UID == wf.ObjectMeta.UID { + woc.cronWf.Status.Active = append(woc.cronWf.Status.Active[:i], woc.cronWf.Status.Active[i + 1:]...) + err = woc.persistUpdate() + if err != nil { + log.Errorf("Unable to update CronWorkflow '%s': %s", nameEntryIdMapKey, wf.Name, err) + return true + } + return true + } + } + } + return true } func (cc *Controller) newCronWorkflowInformer() extv1alpha1.CronWorkflowInformer { diff --git a/workflow/cron/operator.go b/workflow/cron/operator.go index d1eb7c717306..fe0fb4672d84 100644 --- a/workflow/cron/operator.go +++ b/workflow/cron/operator.go @@ -9,7 +9,6 @@ import ( "github.com/argoproj/argo/workflow/util" "github.com/prometheus/common/log" "github.com/robfig/cron" - "k8s.io/api/batch/v2alpha1" v12 "k8s.io/api/core/v1" v1 "k8s.io/apimachinery/pkg/apis/meta/v1" "time" @@ -25,12 +24,11 @@ type cronWfOperationCtx struct { } func newCronWfOperationCtx(cronWorkflow *v1alpha1.CronWorkflow, wfClientset versioned.Interface, cronWfIf typed.CronWorkflowInterface) (*cronWfOperationCtx, error) { - runtimeNamespace := cronWorkflow.Options.RuntimeNamespace return &cronWfOperationCtx{ name: cronWorkflow.ObjectMeta.Name, cronWf: cronWorkflow, wfClientset: wfClientset, - wfClient: wfClientset.ArgoprojV1alpha1().Workflows(runtimeNamespace), + wfClient: wfClientset.ArgoprojV1alpha1().Workflows(cronWorkflow.Namespace), cronWfIf: cronWfIf, }, nil } @@ -52,13 +50,13 @@ func (woc *cronWfOperationCtx) Run() { return } - runWf, err := util.SubmitWorkflow(woc.wfClient, woc.wfClientset, woc.cronWf.Options.RuntimeNamespace, wf, &util.SubmitOpts{}) + runWf, err := util.SubmitWorkflow(woc.wfClient, woc.wfClientset, woc.cronWf.Namespace, wf, &util.SubmitOpts{}) if err != nil { log.Errorf("Failed to run CronWorkflow: %v", err) return } - woc.cronWf.Status.Active = append(woc.cronWf.Status.Active, *getWorkflowObjectReference(wf, runWf)) + woc.cronWf.Status.Active = append(woc.cronWf.Status.Active, getWorkflowObjectReference(wf, runWf)) woc.cronWf.Status.LastScheduledTime = &v1.Time{Time: time.Now().UTC()} err = woc.persistUpdate() if err != nil { @@ -68,10 +66,10 @@ func (woc *cronWfOperationCtx) Run() { log.Infof("Created %s", woc.cronWf.ObjectMeta.Name) } -func getWorkflowObjectReference(wf *v1alpha1.Workflow, runWf *v1alpha1.Workflow) *v12.ObjectReference { +func getWorkflowObjectReference(wf *v1alpha1.Workflow, runWf *v1alpha1.Workflow) v12.ObjectReference { // This is a bit of a hack. Ideally we'd use ref.GetReference, but for some reason the `runWf` object is coming back // without `Kind` and `APIVersion` set (even though it it set on `wf`). To fix this, we hard code those values. - return &v12.ObjectReference{ + return v12.ObjectReference{ Kind: wf.Kind, APIVersion: wf.APIVersion, Name: runWf.GetName(), @@ -97,14 +95,14 @@ func (woc *cronWfOperationCtx) enforceRuntimePolicy() (bool, error) { if woc.cronWf.Options.ConcurrencyPolicy != "" { switch woc.cronWf.Options.ConcurrencyPolicy { - case v2alpha1.AllowConcurrent, "": + case v1alpha1.AllowConcurrent, "": // Do nothing - case v2alpha1.ForbidConcurrent: + case v1alpha1.ForbidConcurrent: if len(woc.cronWf.Status.Active) > 0 { log.Infof("%s has 'ConcurrencyPolicy: Forbid' and has an active Workflow so it was not run", woc.name) return false, nil } - case v2alpha1.ReplaceConcurrent: + case v1alpha1.ReplaceConcurrent: if len(woc.cronWf.Status.Active) > 0 { log.Infof("%s has 'ConcurrencyPolicy: Replace' and has active Workflows", woc.name) err := woc.terminateOutstandingWorkflows() diff --git a/workflow/validate/validate.go b/workflow/validate/validate.go index fa3fb697ada2..b07b92d6a616 100644 --- a/workflow/validate/validate.go +++ b/workflow/validate/validate.go @@ -5,7 +5,6 @@ import ( "fmt" "github.com/robfig/cron" "io" - "k8s.io/api/batch/v2alpha1" "reflect" "regexp" "strconv" @@ -197,7 +196,7 @@ func ValidateCronWorkflow(wfClientset wfclientset.Interface, namespace string, c } switch cronWf.Options.ConcurrencyPolicy { - case v2alpha1.AllowConcurrent, v2alpha1.ForbidConcurrent, v2alpha1.ReplaceConcurrent, "": + case wfv1.AllowConcurrent, wfv1.ForbidConcurrent, wfv1.ReplaceConcurrent, "": // Do nothing default: return errors.Errorf(errors.CodeBadRequest, "'%s' is not a valid concurrencyPolicy", cronWf.Options.ConcurrencyPolicy) From 497a1685d8e4276b37e63d4c0eb5fae1a33e2d46 Mon Sep 17 00:00:00 2001 From: Simon Behar Date: Mon, 18 Nov 2019 08:21:35 -0800 Subject: [PATCH 23/44] WIP: Lint --- cmd/argo/commands/cron/get.go | 1 - workflow/common/util.go | 2 +- workflow/cron/controller.go | 12 ++++++------ workflow/validate/validate_test.go | 5 +---- 4 files changed, 8 insertions(+), 12 deletions(-) diff --git a/cmd/argo/commands/cron/get.go b/cmd/argo/commands/cron/get.go index a86eed36aaf6..3dfa41546bfc 100644 --- a/cmd/argo/commands/cron/get.go +++ b/cmd/argo/commands/cron/get.go @@ -66,7 +66,6 @@ func printCronWorkflowTemplate(wf *wfv1.CronWorkflow, outFmt string) { fmt.Printf(fmtStr, "Schedule:", wf.Options.Schedule) fmt.Printf(fmtStr, "Suspended:", wf.Options.Suspend) fmt.Printf(fmtStr, "RuntimeGenerateName:", wf.Options.RuntimeGenerateName) - fmt.Printf(fmtStr, "RuntimeNamespace:", wf.Options.RuntimeNamespace) if wf.Options.StartingDeadlineSeconds != nil { fmt.Printf(fmtStr, "StartingDeadlineSeconds:", *wf.Options.StartingDeadlineSeconds) } diff --git a/workflow/common/util.go b/workflow/common/util.go index 405ac376275a..96b9c359c778 100644 --- a/workflow/common/util.go +++ b/workflow/common/util.go @@ -671,4 +671,4 @@ func CastToWorkflow(cronWf *wfv1.CronWorkflow) (*wfv1.Workflow, error) { } wf.SetOwnerReferences(append(wf.GetOwnerReferences(), *metav1.NewControllerRef(cronWf, wfv1.SchemeGroupVersion.WithKind(workflow.CronWorkflowKind)))) return wf, nil -} \ No newline at end of file +} diff --git a/workflow/cron/controller.go b/workflow/cron/controller.go index 24911d967548..9c7900aa6055 100644 --- a/workflow/cron/controller.go +++ b/workflow/cron/controller.go @@ -35,8 +35,8 @@ type Controller struct { } const ( - cronWorkflowResyncPeriod = 20 * time.Minute - cronWorkflowWorkers = 2 + cronWorkflowResyncPeriod = 20 * time.Minute + cronWorkflowWorkers = 2 cronWorkflowWorkflowWorkers = 2 ) @@ -51,8 +51,8 @@ func NewCronController( cron: cron.New(), restConfig: restConfig, nameEntryIDMap: make(map[string]cron.EntryID), - wfQueue: workqueue.NewRateLimitingQueue(workqueue.DefaultControllerRateLimiter()), - cronWfQueue: workqueue.NewRateLimitingQueue(workqueue.DefaultControllerRateLimiter()), + wfQueue: workqueue.NewRateLimitingQueue(workqueue.DefaultControllerRateLimiter()), + cronWfQueue: workqueue.NewRateLimitingQueue(workqueue.DefaultControllerRateLimiter()), } } @@ -197,10 +197,10 @@ func (cc *Controller) processNextWorkflowItem() bool { if wf.Status.Completed() || !wfExists { for i, objectRef := range woc.cronWf.Status.Active { if objectRef.UID == wf.ObjectMeta.UID { - woc.cronWf.Status.Active = append(woc.cronWf.Status.Active[:i], woc.cronWf.Status.Active[i + 1:]...) + woc.cronWf.Status.Active = append(woc.cronWf.Status.Active[:i], woc.cronWf.Status.Active[i+1:]...) err = woc.persistUpdate() if err != nil { - log.Errorf("Unable to update CronWorkflow '%s': %s", nameEntryIdMapKey, wf.Name, err) + log.Errorf("Unable to update CronWorkflow '%s': %s", nameEntryIdMapKey, err) return true } return true diff --git a/workflow/validate/validate_test.go b/workflow/validate/validate_test.go index ff13ff701443..90d028b224bf 100644 --- a/workflow/validate/validate_test.go +++ b/workflow/validate/validate_test.go @@ -3,10 +3,10 @@ package validate import ( "testing" - "sigs.k8s.io/yaml" "github.com/stretchr/testify/assert" apierr "k8s.io/apimachinery/pkg/api/errors" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" + "sigs.k8s.io/yaml" wfv1 "github.com/argoproj/argo/pkg/apis/workflow/v1alpha1" fakewfclientset "github.com/argoproj/argo/pkg/client/clientset/versioned/fake" @@ -301,7 +301,6 @@ func TestStepOutputReference(t *testing.T) { assert.NoError(t, err) } - var stepStatusReferences = ` apiVersion: argoproj.io/v1alpha1 kind: Workflow @@ -340,7 +339,6 @@ func TestStepStatusReference(t *testing.T) { assert.NoError(t, err) } - var stepStatusReferencesNoFutureReference = ` apiVersion: argoproj.io/v1alpha1 kind: Workflow @@ -974,7 +972,6 @@ func TestPriorityVariable(t *testing.T) { assert.NoError(t, err) } - var volumeMountArtifactPathCollision = ` apiVersion: argoproj.io/v1alpha1 kind: Workflow From 82c692cae9ee273fd80d9db7e3c4eaba794a2bf1 Mon Sep 17 00:00:00 2001 From: Simon Behar Date: Mon, 18 Nov 2019 10:00:31 -0800 Subject: [PATCH 24/44] WIP: Removing from Active now works --- workflow/cron/controller.go | 28 ++++++++++++++-------------- workflow/cron/operator.go | 15 +++++++++++++++ 2 files changed, 29 insertions(+), 14 deletions(-) diff --git a/workflow/cron/controller.go b/workflow/cron/controller.go index 9c7900aa6055..d9e9e73c0f10 100644 --- a/workflow/cron/controller.go +++ b/workflow/cron/controller.go @@ -11,6 +11,7 @@ import ( "github.com/robfig/cron" log "github.com/sirupsen/logrus" v1 "k8s.io/apimachinery/pkg/apis/meta/v1" + "k8s.io/apimachinery/pkg/apis/meta/v1/unstructured" "k8s.io/apimachinery/pkg/fields" "k8s.io/apimachinery/pkg/labels" "k8s.io/apimachinery/pkg/selection" @@ -162,15 +163,23 @@ func (cc *Controller) processNextWorkflowItem() bool { } defer cc.wfQueue.Done(key) - rawWf, wfExists, err := cc.wfInformer.GetIndexer().GetByKey(key.(string)) + obj, wfExists, err := cc.wfInformer.GetIndexer().GetByKey(key.(string)) if err != nil { log.Errorf("Failed to get Workflow '%s' from informer index: %+v", key, err) return true } - wf, ok := rawWf.(*v1alpha1.Workflow) + // The workflow informer receives unstructured objects to deal with the possibility of invalid + // workflow manifests that are unable to unmarshal to workflow objects + un, ok := obj.(*unstructured.Unstructured) if !ok { - log.Warnf("Key '%s' in index is not a Workflow", key) + log.Warnf("Key '%s' in index is not an unstructured", key) + return true + } + + wf, err := util.FromUnstructured(un) + if err != nil { + log.Warnf("Failed to unmarshal key '%s' to workflow object: %v", key, err) return true } @@ -195,17 +204,8 @@ func (cc *Controller) processNextWorkflowItem() bool { // If the workflow is completed or was deleted, remove it from Active Workflows if wf.Status.Completed() || !wfExists { - for i, objectRef := range woc.cronWf.Status.Active { - if objectRef.UID == wf.ObjectMeta.UID { - woc.cronWf.Status.Active = append(woc.cronWf.Status.Active[:i], woc.cronWf.Status.Active[i+1:]...) - err = woc.persistUpdate() - if err != nil { - log.Errorf("Unable to update CronWorkflow '%s': %s", nameEntryIdMapKey, err) - return true - } - return true - } - } + log.Warnf("Workflow '%s' from CronWorkflow '%s' completed", wf.Name, woc.cronWf.Name) + woc.removeActiveWf(wf) } return true } diff --git a/workflow/cron/operator.go b/workflow/cron/operator.go index fe0fb4672d84..7dc3f2ac9085 100644 --- a/workflow/cron/operator.go +++ b/workflow/cron/operator.go @@ -157,3 +157,18 @@ func (woc *cronWfOperationCtx) runOutstandingWorkflows() error { } return nil } + +func (woc *cronWfOperationCtx) removeActiveWf(wf *v1alpha1.Workflow) { + if wf == nil || wf.ObjectMeta.UID == "" { + return + } + for i, objectRef := range woc.cronWf.Status.Active { + if objectRef.UID == wf.ObjectMeta.UID { + woc.cronWf.Status.Active = append(woc.cronWf.Status.Active[:i], woc.cronWf.Status.Active[i+1:]...) + err := woc.persistUpdate() + if err != nil { + log.Errorf("Unable to update CronWorkflow '%s': %s", woc.cronWf.Name, err) + } + } + } +} From 9c26d270dbc9d20f22fd3151e55be5852d8e643f Mon Sep 17 00:00:00 2001 From: Simon Behar Date: Mon, 18 Nov 2019 10:03:39 -0800 Subject: [PATCH 25/44] WIP: Remove runtimeGenerateName --- api/openapi-spec/swagger.json | 7 +- cmd/argo/commands/cron/get.go | 1 - .../workflow/v1alpha1/cron_workflow_types.go | 8 +- pkg/apis/workflow/v1alpha1/generated.pb.go | 656 ++++++++---------- pkg/apis/workflow/v1alpha1/generated.proto | 9 +- .../workflow/v1alpha1/openapi_generated.go | 9 +- workflow/common/util.go | 6 +- workflow/validate/validate.go | 4 - 8 files changed, 316 insertions(+), 384 deletions(-) diff --git a/api/openapi-spec/swagger.json b/api/openapi-spec/swagger.json index 102828651873..d3ab7d2e693a 100644 --- a/api/openapi-spec/swagger.json +++ b/api/openapi-spec/swagger.json @@ -262,18 +262,13 @@ "description": "CronWorkflowOptions is the schedule of when to run CronWorkflows", "type": "object", "required": [ - "schedule", - "runtimeGenerateName" + "schedule" ], "properties": { "concurrencyPolicy": { "description": "ConcurrencyPolicy is the K8s-style concurrency policy that will be used", "type": "string" }, - "runtimeGenerateName": { - "description": "RuntimeGenerateName is the name generator the Workflow will be run with. Mutually exclusive with RuntimeName", - "type": "string" - }, "schedule": { "description": "Schedule is a schedule to run the Workflow in Cron format", "type": "string" diff --git a/cmd/argo/commands/cron/get.go b/cmd/argo/commands/cron/get.go index 3dfa41546bfc..0e77151af697 100644 --- a/cmd/argo/commands/cron/get.go +++ b/cmd/argo/commands/cron/get.go @@ -65,7 +65,6 @@ func printCronWorkflowTemplate(wf *wfv1.CronWorkflow, outFmt string) { fmt.Printf(fmtStr, "Created:", humanize.Timestamp(wf.ObjectMeta.CreationTimestamp.Time)) fmt.Printf(fmtStr, "Schedule:", wf.Options.Schedule) fmt.Printf(fmtStr, "Suspended:", wf.Options.Suspend) - fmt.Printf(fmtStr, "RuntimeGenerateName:", wf.Options.RuntimeGenerateName) if wf.Options.StartingDeadlineSeconds != nil { fmt.Printf(fmtStr, "StartingDeadlineSeconds:", *wf.Options.StartingDeadlineSeconds) } diff --git a/pkg/apis/workflow/v1alpha1/cron_workflow_types.go b/pkg/apis/workflow/v1alpha1/cron_workflow_types.go index 1ace5cf39f5a..5af51b7f5518 100644 --- a/pkg/apis/workflow/v1alpha1/cron_workflow_types.go +++ b/pkg/apis/workflow/v1alpha1/cron_workflow_types.go @@ -36,15 +36,13 @@ type CronWorkflowStatus struct { type CronWorkflowOptions struct { // Schedule is a schedule to run the Workflow in Cron format Schedule string `json:"schedule" protobuf:"bytes,1,opt,name=schedule"` - // RuntimeGenerateName is the name generator the Workflow will be run with. Mutually exclusive with RuntimeName - RuntimeGenerateName string `json:"runtimeGenerateName" protobuf:"bytes,2,opt,name=runtimeGenerateName"` // ConcurrencyPolicy is the K8s-style concurrency policy that will be used - ConcurrencyPolicy ConcurrencyPolicy `json:"concurrencyPolicy,omitempty" protobuf:"bytes,3,opt,name=concurrencyPolicy,casttype=ConcurrencyPolicy"` + ConcurrencyPolicy ConcurrencyPolicy `json:"concurrencyPolicy,omitempty" protobuf:"bytes,2,opt,name=concurrencyPolicy,casttype=ConcurrencyPolicy"` // Suspend is a flag that will stop new CronWorkflows from running if set to true - Suspend bool `json:"suspend,omitempty" protobuf:"varint,4,opt,name=suspend"` + Suspend bool `json:"suspend,omitempty" protobuf:"varint,3,opt,name=suspend"` // StartingDeadlineSeconds is the K8s-style deadline that will limit the time a CronWorkflow will be run after its // original scheduled time if it is missed. - StartingDeadlineSeconds *int64 `json:"startingDeadlineSeconds,omitempty" protobuf:"varint,5,opt,name=startingDeadlineSeconds"` + StartingDeadlineSeconds *int64 `json:"startingDeadlineSeconds,omitempty" protobuf:"varint,4,opt,name=startingDeadlineSeconds"` } type ConcurrencyPolicy string diff --git a/pkg/apis/workflow/v1alpha1/generated.pb.go b/pkg/apis/workflow/v1alpha1/generated.pb.go index be7384f829fb..f5ee0c90578f 100644 --- a/pkg/apis/workflow/v1alpha1/generated.pb.go +++ b/pkg/apis/workflow/v1alpha1/generated.pb.go @@ -1527,313 +1527,311 @@ func init() { } var fileDescriptor_c23edafa7e7ea072 = []byte{ - // 4891 bytes of a gzipped FileDescriptorProto + // 4864 bytes of a gzipped FileDescriptorProto 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xec, 0x5c, 0x4d, 0x6c, 0x64, 0x57, 0x56, 0xee, 0xb2, 0x5d, 0xe5, 0xaa, 0x53, 0xfe, 0xeb, 0xeb, 0xee, 0x74, 0xc5, 0xe9, 0xb8, 0x7a, - 0x5e, 0x94, 0xd0, 0x03, 0x49, 0x39, 0xe9, 0x9e, 0x81, 0x4c, 0x86, 0x24, 0x53, 0xe5, 0xbf, 0x76, - 0xbb, 0xed, 0x36, 0xa7, 0xdc, 0xdd, 0x0c, 0x89, 0x18, 0x9e, 0x5f, 0x5d, 0x57, 0xbd, 0x76, 0xd5, - 0x7b, 0x2f, 0xef, 0xbe, 0x6a, 0xc7, 0xca, 0x82, 0x80, 0x40, 0x80, 0xd0, 0x48, 0xb0, 0x81, 0x11, - 0xb3, 0x41, 0x2c, 0x60, 0xc3, 0x86, 0x2d, 0xa0, 0x41, 0x42, 0x2c, 0x22, 0x36, 0x44, 0x6c, 0xc8, - 0x02, 0x59, 0x13, 0xb3, 0x01, 0x81, 0x84, 0x34, 0x1b, 0xa4, 0x5e, 0xa1, 0xfb, 0xf3, 0xee, 0xfb, - 0xa9, 0xe7, 0xc4, 0x5d, 0xe5, 0x6e, 0xc4, 0xcc, 0xac, 0xda, 0x75, 0xce, 0xb9, 0xdf, 0xb9, 0xef, - 0xde, 0xf3, 0xce, 0x3d, 0xe7, 0xdc, 0xf3, 0x1a, 0x96, 0xdb, 0x76, 0xd0, 0xe9, 0xef, 0xd5, 0x2c, - 0xb7, 0xb7, 0x64, 0xfa, 0x6d, 0xd7, 0xf3, 0xdd, 0x87, 0xe2, 0x8f, 0x25, 0xef, 0xa0, 0xbd, 0x64, - 0x7a, 0x36, 0x5b, 0x3a, 0x74, 0xfd, 0x83, 0xfd, 0xae, 0x7b, 0xb8, 0xf4, 0xe8, 0x0d, 0xb3, 0xeb, - 0x75, 0xcc, 0x37, 0x96, 0xda, 0xd4, 0xa1, 0xbe, 0x19, 0xd0, 0x56, 0xcd, 0xf3, 0xdd, 0xc0, 0x25, - 0x37, 0x23, 0x90, 0x5a, 0x08, 0x22, 0xfe, 0xa8, 0x79, 0x07, 0xed, 0x1a, 0x07, 0xa9, 0x85, 0x20, - 0xb5, 0x10, 0x64, 0xe1, 0xb5, 0x98, 0xe6, 0xb6, 0xcb, 0x15, 0x72, 0xac, 0xbd, 0xfe, 0xbe, 0xf8, - 0x25, 0x7e, 0x88, 0xbf, 0xa4, 0x8e, 0x05, 0xe3, 0xe0, 0x4d, 0x56, 0xb3, 0x5d, 0x3e, 0xa5, 0x25, - 0xcb, 0xf5, 0xe9, 0xd2, 0xa3, 0x81, 0x79, 0x2c, 0x7c, 0x2d, 0x92, 0xe9, 0x99, 0x56, 0xc7, 0x76, - 0xa8, 0x7f, 0x14, 0x3d, 0x47, 0x8f, 0x06, 0x66, 0xd6, 0xa8, 0xa5, 0xd3, 0x46, 0xf9, 0x7d, 0x27, - 0xb0, 0x7b, 0x74, 0x60, 0xc0, 0xcf, 0x7f, 0xd9, 0x00, 0x66, 0x75, 0x68, 0xcf, 0x4c, 0x8f, 0x33, - 0xfe, 0x29, 0x07, 0xb3, 0x75, 0xdf, 0xea, 0xd8, 0x8f, 0x68, 0x33, 0xe0, 0x8c, 0xf6, 0x11, 0x79, - 0x0f, 0xc6, 0x03, 0xd3, 0xaf, 0xe4, 0xae, 0xe5, 0xae, 0x97, 0x6f, 0x7c, 0xab, 0x36, 0xc4, 0x42, - 0xd6, 0x76, 0x4d, 0x3f, 0x84, 0x6b, 0x4c, 0x9e, 0x1c, 0x57, 0xc7, 0x77, 0x4d, 0x1f, 0x39, 0x2a, - 0xf9, 0x0e, 0x4c, 0x38, 0xae, 0x43, 0x2b, 0x63, 0x02, 0xbd, 0x3e, 0x14, 0xfa, 0xb6, 0xeb, 0xe8, - 0xd9, 0x36, 0x8a, 0x27, 0xc7, 0xd5, 0x09, 0x4e, 0x41, 0x01, 0x6c, 0xfc, 0x77, 0x0e, 0x4a, 0x75, - 0xbf, 0xdd, 0xef, 0x51, 0x27, 0x60, 0xc4, 0x07, 0xf0, 0x4c, 0xdf, 0xec, 0xd1, 0x80, 0xfa, 0xac, - 0x92, 0xbb, 0x36, 0x7e, 0xbd, 0x7c, 0xe3, 0x9d, 0xa1, 0x94, 0xee, 0x84, 0x30, 0x0d, 0xf2, 0xc9, - 0x71, 0xf5, 0xc2, 0xc9, 0x71, 0x15, 0x34, 0x89, 0x61, 0x4c, 0x0b, 0x71, 0xa0, 0x64, 0xfa, 0x81, - 0xbd, 0x6f, 0x5a, 0x01, 0xab, 0x8c, 0x09, 0x95, 0x6f, 0x0f, 0xa5, 0xb2, 0xae, 0x50, 0x1a, 0x17, - 0x95, 0xc6, 0x52, 0x48, 0x61, 0x18, 0xa9, 0x30, 0xfe, 0x73, 0x1c, 0x8a, 0x21, 0x83, 0x5c, 0x83, - 0x09, 0xc7, 0xec, 0x51, 0xb1, 0x7b, 0xa5, 0xc6, 0x94, 0x1a, 0x38, 0xb1, 0x6d, 0xf6, 0xf8, 0x02, - 0x99, 0x3d, 0xca, 0x25, 0x3c, 0x33, 0xe8, 0x88, 0x1d, 0x88, 0x49, 0xec, 0x98, 0x41, 0x07, 0x05, - 0x87, 0x5c, 0x85, 0x89, 0x9e, 0xdb, 0xa2, 0x95, 0xf1, 0x6b, 0xb9, 0xeb, 0x79, 0xb9, 0xc0, 0x5b, - 0x6e, 0x8b, 0xa2, 0xa0, 0xf2, 0xf1, 0xfb, 0xbe, 0xdb, 0xab, 0x4c, 0x24, 0xc7, 0xaf, 0xf9, 0x6e, - 0x0f, 0x05, 0x87, 0xfc, 0x7e, 0x0e, 0xe6, 0xc2, 0xe9, 0xdd, 0x71, 0x2d, 0x33, 0xb0, 0x5d, 0xa7, - 0x92, 0x17, 0x1b, 0xbe, 0x3a, 0xd2, 0x42, 0x84, 0x60, 0x8d, 0x8a, 0xd2, 0x3a, 0x97, 0xe6, 0xe0, - 0x80, 0x62, 0x72, 0x03, 0xa0, 0xdd, 0x75, 0xf7, 0xcc, 0x2e, 0x5f, 0x83, 0x4a, 0x41, 0xcc, 0x5a, - 0x6f, 0xe1, 0xba, 0xe6, 0x60, 0x4c, 0x8a, 0x1c, 0xc0, 0xa4, 0x29, 0xdf, 0x8a, 0xca, 0xa4, 0x98, - 0xf7, 0xca, 0x90, 0xf3, 0x4e, 0xbc, 0x59, 0x8d, 0xf2, 0xc9, 0x71, 0x75, 0x52, 0x11, 0x31, 0xd4, - 0x40, 0x5e, 0x85, 0xa2, 0xeb, 0xf1, 0xa9, 0x9a, 0xdd, 0x4a, 0xf1, 0x5a, 0xee, 0x7a, 0xb1, 0x31, - 0xa7, 0xa6, 0x57, 0xbc, 0xab, 0xe8, 0xa8, 0x25, 0x8c, 0x3f, 0xce, 0xc3, 0xc0, 0x53, 0x93, 0x37, - 0xa0, 0xac, 0xd0, 0xee, 0xb8, 0x6d, 0x26, 0x36, 0xbf, 0xd8, 0x98, 0x3d, 0x39, 0xae, 0x96, 0xeb, - 0x11, 0x19, 0xe3, 0x32, 0xe4, 0x01, 0x8c, 0xb1, 0x9b, 0xea, 0x35, 0x7c, 0x77, 0xa8, 0xa7, 0x6b, - 0xde, 0xd4, 0x06, 0x5a, 0x38, 0x39, 0xae, 0x8e, 0x35, 0x6f, 0xe2, 0x18, 0xbb, 0xc9, 0xdd, 0x47, - 0xdb, 0x0e, 0x84, 0xf1, 0x0c, 0xeb, 0x3e, 0xd6, 0xed, 0x40, 0x43, 0x0b, 0xf7, 0xb1, 0x6e, 0x07, - 0xc8, 0x51, 0xb9, 0xfb, 0xe8, 0x04, 0x81, 0x27, 0x8c, 0x6f, 0x58, 0xf7, 0x71, 0x6b, 0x77, 0x77, - 0x47, 0xc3, 0x0b, 0xeb, 0xe6, 0x14, 0x14, 0xc0, 0xe4, 0x23, 0xbe, 0x92, 0x92, 0xe7, 0xfa, 0x47, - 0xca, 0x6a, 0x6f, 0x8d, 0x64, 0xb5, 0xae, 0x7f, 0xa4, 0xd5, 0xa9, 0x3d, 0xd1, 0x0c, 0x8c, 0x6b, - 0x13, 0x4f, 0xd7, 0xda, 0x67, 0xc2, 0x48, 0x87, 0x7e, 0xba, 0x95, 0xb5, 0x66, 0xea, 0xe9, 0x56, - 0xd6, 0x9a, 0x28, 0x80, 0xf9, 0xde, 0xf8, 0xe6, 0xa1, 0xb2, 0xe9, 0xe1, 0xf6, 0x06, 0xcd, 0xc3, - 0xe4, 0xde, 0xa0, 0x79, 0x88, 0x1c, 0xd5, 0x68, 0xc3, 0xe5, 0x90, 0x83, 0xd4, 0x73, 0x99, 0x2d, - 0x1e, 0x90, 0xee, 0x93, 0x25, 0x28, 0x59, 0xae, 0xb3, 0x6f, 0xb7, 0xb7, 0x4c, 0x4f, 0x39, 0x26, - 0xed, 0xd1, 0x96, 0x43, 0x06, 0x46, 0x32, 0xe4, 0x45, 0x18, 0x3f, 0xa0, 0x47, 0xca, 0x43, 0x95, - 0x95, 0xe8, 0xf8, 0x26, 0x3d, 0x42, 0x4e, 0x37, 0x7e, 0x90, 0x83, 0xf9, 0x8c, 0xc5, 0xe5, 0xc3, - 0xfa, 0x7e, 0x57, 0x69, 0xd0, 0xc3, 0xee, 0xe1, 0x1d, 0xe4, 0x74, 0xf2, 0x3b, 0x39, 0x98, 0x8d, - 0xad, 0x76, 0xbd, 0xaf, 0x9c, 0xe0, 0xf0, 0x6f, 0x77, 0x02, 0xab, 0x71, 0x45, 0x69, 0x9c, 0x4d, - 0x31, 0x30, 0xad, 0xd5, 0xf8, 0x17, 0x71, 0xea, 0x26, 0x68, 0xc4, 0x84, 0x99, 0x3e, 0xa3, 0x3e, - 0x77, 0xd1, 0x4d, 0x6a, 0xf9, 0x34, 0x50, 0x07, 0xf0, 0xcb, 0x35, 0x79, 0xb4, 0xf3, 0x59, 0xd4, - 0x78, 0x94, 0x51, 0x7b, 0xf4, 0x46, 0x4d, 0x4a, 0x6c, 0xd2, 0xa3, 0x26, 0xed, 0x52, 0x8e, 0xd1, - 0x20, 0x27, 0xc7, 0xd5, 0x99, 0x7b, 0x09, 0x00, 0x4c, 0x01, 0x72, 0x15, 0x9e, 0xc9, 0xd8, 0xa1, - 0xeb, 0xb7, 0x94, 0x8a, 0xb1, 0x27, 0x56, 0xb1, 0x93, 0x00, 0xc0, 0x14, 0xa0, 0xf1, 0x6d, 0x80, - 0x65, 0xd7, 0x09, 0x6c, 0xa7, 0x4f, 0xef, 0x3a, 0xe4, 0x25, 0xc8, 0x53, 0xdf, 0x77, 0x7d, 0xe5, - 0x90, 0xa6, 0xd5, 0x02, 0xe5, 0x57, 0x39, 0x11, 0x25, 0x8f, 0xbc, 0x02, 0x85, 0x7d, 0xd3, 0xee, - 0xd2, 0x96, 0x98, 0x4d, 0xb1, 0x31, 0xa3, 0xa4, 0x0a, 0x6b, 0x82, 0x8a, 0x8a, 0x6b, 0xfc, 0xcd, - 0x38, 0x4c, 0x2d, 0xfb, 0xae, 0xf3, 0x40, 0x6d, 0x04, 0xf9, 0x35, 0x28, 0xf2, 0xf8, 0xa9, 0x65, - 0x06, 0xa6, 0x5a, 0xab, 0xd7, 0x63, 0x0f, 0xa2, 0xc3, 0xa0, 0x68, 0x0b, 0xb9, 0x34, 0x7f, 0xb4, - 0xbb, 0x7b, 0x0f, 0xa9, 0x15, 0x6c, 0xd1, 0xc0, 0x8c, 0x0e, 0x82, 0x88, 0x86, 0x1a, 0x95, 0x58, - 0x30, 0xc1, 0x3c, 0x6a, 0x8d, 0x14, 0xac, 0x84, 0xd3, 0x6d, 0x7a, 0xd4, 0x8a, 0x4e, 0x4b, 0xfe, - 0x0b, 0x05, 0x38, 0x71, 0xa1, 0xc0, 0x02, 0x33, 0xe8, 0x33, 0xe5, 0x32, 0xd7, 0x87, 0x52, 0x13, - 0x5f, 0x99, 0xa6, 0x80, 0x8b, 0x16, 0x52, 0xfe, 0x46, 0xa5, 0x86, 0x30, 0x98, 0x94, 0xa7, 0x09, - 0x53, 0x6e, 0xf4, 0xd6, 0xc8, 0x1a, 0xe5, 0x39, 0xc5, 0x1a, 0xb3, 0x4a, 0xe5, 0xa4, 0x22, 0x60, - 0xa8, 0xc9, 0xf8, 0x2c, 0x07, 0x73, 0xf1, 0x11, 0x77, 0x6c, 0x16, 0x90, 0xf7, 0x07, 0x76, 0xb0, - 0x76, 0xb6, 0x1d, 0xe4, 0xa3, 0xc5, 0xfe, 0xe9, 0x93, 0x32, 0xa4, 0xc4, 0x76, 0x6f, 0x1f, 0xf2, - 0x76, 0x40, 0x7b, 0x61, 0x0c, 0x56, 0x1f, 0xf9, 0x29, 0x23, 0x03, 0xde, 0xe0, 0xb8, 0x28, 0xe1, - 0x8d, 0x1f, 0x8d, 0xc1, 0x7c, 0xc6, 0x62, 0xf0, 0x73, 0x9d, 0x47, 0xdd, 0xad, 0x7e, 0x37, 0x0c, - 0xc7, 0xf4, 0x6c, 0x9b, 0x8a, 0x8e, 0x5a, 0x82, 0x6c, 0xc1, 0xbc, 0x8a, 0xd5, 0xd7, 0x55, 0x8c, - 0x2e, 0xe2, 0x15, 0xe9, 0x03, 0x5f, 0x50, 0x03, 0xe7, 0x71, 0x50, 0x04, 0xb3, 0xc6, 0x91, 0xf7, - 0xe1, 0xa2, 0xe5, 0x3a, 0x56, 0xdf, 0xf7, 0xa9, 0x63, 0x1d, 0xed, 0xb8, 0x5d, 0xdb, 0x3a, 0x12, - 0x06, 0x56, 0x6a, 0xd4, 0x14, 0xd8, 0xc5, 0xe5, 0xb4, 0xc0, 0xe3, 0x2c, 0x22, 0x0e, 0x02, 0x91, - 0xaf, 0xc2, 0x24, 0xeb, 0x33, 0x8f, 0x3a, 0x2d, 0x61, 0x42, 0xc5, 0x68, 0xe3, 0x9b, 0x92, 0x8c, - 0x21, 0x9f, 0xdc, 0x83, 0x2b, 0x2c, 0xe0, 0x0e, 0xd0, 0x69, 0xaf, 0x50, 0xb3, 0xd5, 0xb5, 0x1d, - 0xee, 0x8e, 0x5c, 0xa7, 0xc5, 0xc4, 0xe1, 0x3a, 0xde, 0x78, 0xe1, 0xe4, 0xb8, 0x7a, 0xa5, 0x99, - 0x2d, 0x82, 0xa7, 0x8d, 0x35, 0xfe, 0x39, 0x07, 0x64, 0xd0, 0xe6, 0xc9, 0x26, 0x14, 0x4c, 0x2b, - 0xe0, 0x71, 0x9b, 0x8c, 0xf5, 0x5f, 0xca, 0x72, 0x6d, 0xf2, 0x5d, 0x47, 0xba, 0x4f, 0xf9, 0x33, - 0xd1, 0xe8, 0x45, 0xa9, 0x8b, 0xa1, 0xa8, 0x20, 0x88, 0x0b, 0x17, 0xbb, 0x26, 0x0b, 0xc2, 0xcd, - 0x6a, 0xed, 0xda, 0xbd, 0x30, 0x71, 0xf9, 0xd9, 0xb3, 0xd9, 0x29, 0x1f, 0xd1, 0xb8, 0xcc, 0xd7, - 0xfa, 0x4e, 0x1a, 0x08, 0x07, 0xb1, 0x8d, 0x3f, 0x29, 0xc0, 0xe4, 0x4a, 0x7d, 0x7d, 0xd7, 0x64, - 0x07, 0x67, 0x08, 0xe4, 0x5f, 0x85, 0x62, 0x40, 0x7b, 0x5e, 0xd7, 0x0c, 0x42, 0x33, 0xd1, 0xf6, - 0xb5, 0xab, 0xe8, 0xa8, 0x25, 0x88, 0xcb, 0xb3, 0x12, 0x95, 0x16, 0x29, 0x4f, 0xf3, 0xce, 0x90, - 0xc7, 0x9e, 0x42, 0x89, 0xa7, 0x25, 0x8a, 0x84, 0x91, 0x0e, 0xc2, 0xa0, 0x1c, 0x2a, 0x47, 0xba, - 0xaf, 0x5c, 0xcd, 0x90, 0xe9, 0x64, 0x84, 0x23, 0x23, 0xa8, 0x18, 0x01, 0xe3, 0x5a, 0xc8, 0xd7, - 0x60, 0xaa, 0x45, 0xb9, 0xdd, 0x51, 0xc7, 0xb2, 0x29, 0x37, 0xb1, 0x71, 0xbe, 0x2e, 0x27, 0xc7, - 0xd5, 0xa9, 0x95, 0x18, 0x1d, 0x13, 0x52, 0xe4, 0x21, 0x94, 0x0e, 0xed, 0xa0, 0x23, 0xde, 0xea, - 0x4a, 0x41, 0x18, 0xce, 0x37, 0x86, 0x9a, 0x28, 0x47, 0x88, 0x96, 0xe5, 0x41, 0x88, 0x89, 0x11, - 0x3c, 0x0f, 0x86, 0xf8, 0x0f, 0x91, 0x3b, 0x8a, 0x40, 0xac, 0x94, 0x1c, 0x20, 0x18, 0x18, 0xc9, - 0x10, 0x06, 0x53, 0xfc, 0x47, 0x93, 0x7e, 0xd0, 0xe7, 0xd6, 0x2a, 0x52, 0x84, 0x61, 0x33, 0xca, - 0x10, 0x44, 0xae, 0xc8, 0x83, 0x18, 0x2c, 0x26, 0x94, 0x70, 0xeb, 0x3b, 0xec, 0x50, 0xa7, 0x52, - 0x4a, 0x5a, 0xdf, 0x83, 0x0e, 0x75, 0x50, 0x70, 0x88, 0x0b, 0x60, 0xe9, 0x93, 0xbe, 0x02, 0x23, - 0xe4, 0x11, 0x51, 0xc0, 0xd0, 0x98, 0xe1, 0x47, 0x71, 0xf4, 0x1b, 0x63, 0x2a, 0x8c, 0xbf, 0xcf, - 0x41, 0x99, 0xbf, 0x1c, 0xa1, 0x41, 0xbf, 0x02, 0x85, 0xc0, 0xf4, 0xdb, 0x2a, 0x50, 0x2a, 0x45, - 0x6f, 0xf1, 0xae, 0xa0, 0xa2, 0xe2, 0x12, 0x13, 0xf2, 0x81, 0xc9, 0x0e, 0xc2, 0x63, 0xe0, 0x17, - 0x87, 0x9a, 0xa3, 0x7a, 0x2b, 0xa3, 0x13, 0x80, 0xff, 0x62, 0x28, 0x91, 0xc9, 0x75, 0x28, 0xf2, - 0x20, 0x65, 0xcd, 0x64, 0x32, 0xef, 0x29, 0x36, 0xa6, 0xf8, 0x5b, 0xb8, 0xa6, 0x68, 0xa8, 0xb9, - 0xc6, 0xfb, 0x30, 0xb3, 0xfa, 0x21, 0xb5, 0xfa, 0x81, 0xeb, 0xcb, 0xc8, 0x97, 0xdc, 0x06, 0xc2, - 0xa8, 0xff, 0xc8, 0xb6, 0x68, 0xdd, 0xb2, 0xdc, 0xbe, 0x13, 0x6c, 0x47, 0x6f, 0xfd, 0x82, 0xd2, - 0x46, 0x9a, 0x03, 0x12, 0x98, 0x31, 0xca, 0xf8, 0xcb, 0x09, 0x28, 0xc7, 0x72, 0x27, 0xbe, 0x8b, - 0x3e, 0xf5, 0xdc, 0xb4, 0x0f, 0xe1, 0xd1, 0x39, 0x0a, 0x0e, 0xf7, 0x21, 0x3e, 0x7d, 0x64, 0x33, - 0x9e, 0xa1, 0xa7, 0x7c, 0x08, 0x2a, 0x3a, 0x6a, 0x09, 0x52, 0x85, 0x7c, 0x8b, 0x7a, 0x41, 0x47, - 0x3c, 0xe4, 0x44, 0xa3, 0xc4, 0x17, 0x62, 0x85, 0x13, 0x50, 0xd2, 0xb9, 0xc0, 0x3e, 0x0d, 0xac, - 0x4e, 0x65, 0x42, 0xbc, 0x77, 0x42, 0x60, 0x8d, 0x13, 0x50, 0xd2, 0x33, 0xa2, 0xdc, 0xfc, 0xd3, - 0x8f, 0x72, 0x0b, 0xe7, 0x1c, 0xe5, 0x12, 0x0f, 0xe6, 0x19, 0xeb, 0xec, 0xf8, 0xf6, 0x23, 0x33, - 0xa0, 0x62, 0xb0, 0xd0, 0x33, 0xf9, 0x24, 0x7a, 0xae, 0xf0, 0xe3, 0xbc, 0xd9, 0xbc, 0x95, 0x46, - 0xc1, 0x2c, 0x68, 0xd2, 0x84, 0xcb, 0xb6, 0xc3, 0xa8, 0xd5, 0xf7, 0xe9, 0x46, 0xdb, 0x71, 0x7d, - 0x7a, 0xcb, 0x65, 0x1c, 0x4e, 0x15, 0x0c, 0x5e, 0x54, 0x9b, 0x76, 0x79, 0x23, 0x4b, 0x08, 0xb3, - 0xc7, 0x1a, 0xff, 0x98, 0x83, 0xa9, 0x78, 0xba, 0x48, 0x18, 0x40, 0x67, 0x65, 0xad, 0x29, 0x2d, - 0x53, 0x45, 0x64, 0xef, 0x0e, 0x9d, 0x85, 0x4a, 0x98, 0x28, 0xc4, 0x8e, 0x68, 0x18, 0x53, 0x73, - 0x86, 0x7a, 0xd4, 0x4b, 0x90, 0xdf, 0x77, 0x7d, 0x8b, 0xaa, 0x77, 0x4b, 0xbf, 0x83, 0x6b, 0x9c, - 0x88, 0x92, 0x67, 0xfc, 0x7b, 0x0e, 0x62, 0x1a, 0xc8, 0xaf, 0xc3, 0x34, 0xd7, 0xb1, 0xe9, 0xef, - 0x25, 0x9e, 0xa6, 0x31, 0xf4, 0xd3, 0x68, 0xa4, 0xc6, 0x65, 0xa5, 0x7f, 0x3a, 0x41, 0xc6, 0xa4, - 0x3e, 0xf2, 0x73, 0x50, 0x32, 0x5b, 0x2d, 0x9f, 0x32, 0x46, 0xa5, 0xeb, 0x29, 0x35, 0xa6, 0xc5, - 0x59, 0x19, 0x12, 0x31, 0xe2, 0xf3, 0xd7, 0x90, 0xe7, 0xe7, 0xdc, 0xb2, 0x55, 0x90, 0xa6, 0x5f, - 0x43, 0xae, 0x84, 0xd3, 0x51, 0x4b, 0x18, 0xdf, 0x9d, 0x80, 0xa4, 0x6e, 0xd2, 0x82, 0xd9, 0x03, - 0x7f, 0x6f, 0x79, 0xd9, 0xb4, 0x3a, 0x43, 0x65, 0x8f, 0xf3, 0x3c, 0x6d, 0xdd, 0x4c, 0x22, 0x60, - 0x1a, 0x52, 0x69, 0xd9, 0xa4, 0x47, 0x81, 0xb9, 0x37, 0x4c, 0x02, 0x19, 0x6a, 0x89, 0x23, 0x60, - 0x1a, 0x92, 0x7c, 0x1d, 0xca, 0x07, 0xfe, 0x5e, 0xf8, 0x92, 0xab, 0xe5, 0x98, 0x57, 0xcb, 0x51, - 0xde, 0x8c, 0x58, 0x18, 0x97, 0xe3, 0x4b, 0x78, 0xe0, 0xef, 0x21, 0x35, 0xbb, 0x61, 0x69, 0x52, - 0x2f, 0xe1, 0xa6, 0xa2, 0xa3, 0x96, 0x20, 0x1e, 0x90, 0x83, 0x70, 0xf5, 0x74, 0x09, 0x42, 0xf9, - 0xa2, 0xeb, 0x59, 0x4f, 0xa3, 0x85, 0xe2, 0x0f, 0xf4, 0x1c, 0xf7, 0xcd, 0x9b, 0x03, 0x38, 0x98, - 0x81, 0x4d, 0xbe, 0x0d, 0x57, 0x0e, 0xfc, 0x3d, 0xe5, 0xc8, 0x77, 0x7c, 0xdb, 0xb1, 0x6c, 0x2f, - 0x51, 0x93, 0xac, 0xaa, 0xe9, 0x5e, 0xd9, 0xcc, 0x16, 0xc3, 0xd3, 0xc6, 0x1b, 0xaf, 0xc1, 0x54, - 0xbc, 0xa6, 0xf5, 0x25, 0x75, 0x10, 0xe3, 0xbf, 0x72, 0x50, 0xd8, 0x70, 0xbc, 0xfe, 0x4f, 0x48, - 0x79, 0xfc, 0xcf, 0x26, 0x60, 0x82, 0x87, 0x5e, 0xe4, 0x3a, 0x4c, 0x04, 0x47, 0x9e, 0x3c, 0x5b, - 0xc7, 0x1b, 0x97, 0x42, 0x47, 0xb3, 0x7b, 0xe4, 0xd1, 0xc7, 0xea, 0x5f, 0x14, 0x12, 0xe4, 0x1d, - 0x28, 0x38, 0xfd, 0xde, 0x7d, 0xb3, 0xab, 0x9c, 0xd2, 0x2b, 0x61, 0x68, 0xb1, 0x2d, 0xa8, 0x8f, - 0x8f, 0xab, 0x97, 0xa8, 0x63, 0xb9, 0x2d, 0xdb, 0x69, 0x2f, 0x3d, 0x64, 0xae, 0x53, 0xdb, 0xee, - 0xf7, 0xf6, 0xa8, 0x8f, 0x6a, 0x14, 0x4f, 0x8f, 0xf6, 0x5c, 0xb7, 0xcb, 0x01, 0xc6, 0x93, 0xe9, - 0x51, 0x43, 0x92, 0x31, 0xe4, 0xf3, 0x28, 0x86, 0x05, 0x3e, 0x97, 0x9c, 0x48, 0x46, 0x31, 0x4d, - 0x41, 0x45, 0xc5, 0x25, 0x3d, 0x28, 0xf4, 0x4c, 0x8f, 0xcb, 0xe5, 0xc5, 0x92, 0xad, 0x0e, 0x1d, - 0x9f, 0xd6, 0xb6, 0x04, 0xce, 0xaa, 0x13, 0xf8, 0x47, 0x91, 0x3a, 0x49, 0x44, 0xa5, 0x84, 0xd8, - 0x30, 0xd9, 0xb5, 0x59, 0xc0, 0xf5, 0x15, 0x46, 0xb0, 0x0a, 0xae, 0xef, 0xbe, 0xd9, 0xed, 0xd3, - 0x68, 0x05, 0xee, 0x48, 0x58, 0x0c, 0xf1, 0x17, 0x8e, 0xa0, 0x1c, 0x9b, 0x11, 0x99, 0x93, 0xb5, - 0x3f, 0x61, 0xbc, 0xa2, 0xdc, 0x47, 0x76, 0x21, 0xff, 0x88, 0x63, 0x28, 0x67, 0x33, 0xe2, 0x4c, - 0x50, 0x82, 0xbd, 0x35, 0xf6, 0x66, 0xee, 0xad, 0xe2, 0xf7, 0xfe, 0xb4, 0x7a, 0xe1, 0xe3, 0x7f, - 0xbd, 0x76, 0xc1, 0xf8, 0x87, 0x71, 0x28, 0x69, 0x91, 0xff, 0xdf, 0x96, 0xe2, 0xa7, 0x2c, 0xe5, - 0xf6, 0x68, 0xeb, 0x75, 0x26, 0x73, 0xa9, 0x27, 0xcd, 0x65, 0xaa, 0xf1, 0x33, 0xb1, 0xad, 0x7e, - 0x7c, 0x5c, 0xad, 0x24, 0x17, 0x01, 0xcd, 0xc3, 0x2d, 0xca, 0x98, 0xd9, 0xa6, 0x91, 0x19, 0x7c, - 0xe3, 0xcb, 0xcc, 0xe0, 0x52, 0xdc, 0x0c, 0x4a, 0xd9, 0xdb, 0xf8, 0xf1, 0x38, 0x14, 0xb7, 0xc2, - 0xfa, 0xcf, 0x6f, 0xe7, 0xa0, 0x6c, 0x3a, 0x8e, 0x1b, 0x98, 0xb2, 0xd8, 0x25, 0xdd, 0xdb, 0xf6, - 0x50, 0xcb, 0x11, 0x82, 0xd6, 0xea, 0x11, 0xa0, 0x5c, 0x12, 0x7d, 0x32, 0xc5, 0x38, 0x18, 0xd7, - 0x4b, 0x3e, 0x80, 0x42, 0xd7, 0xdc, 0xa3, 0xdd, 0xd0, 0xdb, 0x6d, 0x8c, 0x36, 0x83, 0x3b, 0x02, - 0x2b, 0xb5, 0x1f, 0x92, 0x88, 0x4a, 0xd1, 0xc2, 0x3b, 0x30, 0x97, 0x9e, 0xe8, 0x93, 0xac, 0x28, - 0xdf, 0x8c, 0x98, 0x9a, 0x27, 0x19, 0x6a, 0xfc, 0x6d, 0x09, 0x60, 0xdb, 0x6d, 0x51, 0x55, 0x90, - 0x59, 0x80, 0x31, 0xbb, 0xa5, 0x8e, 0x22, 0x50, 0xb3, 0x1d, 0xdb, 0x58, 0xc1, 0x31, 0xbb, 0xa5, - 0x4b, 0x1c, 0x63, 0xa7, 0x96, 0x38, 0xbe, 0x0e, 0xe5, 0x96, 0xcd, 0xbc, 0xae, 0x79, 0xb4, 0x9d, - 0x11, 0x0b, 0xac, 0x44, 0x2c, 0x8c, 0xcb, 0x91, 0x57, 0xd5, 0xfb, 0x2b, 0x5f, 0x94, 0x4a, 0xea, - 0xfd, 0x2d, 0xf2, 0xe9, 0xc5, 0xde, 0xe1, 0x37, 0x61, 0x2a, 0x2c, 0x21, 0x08, 0x2d, 0x79, 0x31, - 0x2a, 0x7c, 0xeb, 0xa7, 0x76, 0x63, 0x3c, 0x4c, 0x48, 0xa6, 0x4b, 0x1c, 0x85, 0x67, 0x52, 0xe2, - 0x58, 0x81, 0x39, 0x16, 0xb8, 0x3e, 0x6d, 0x85, 0x12, 0x1b, 0x2b, 0x15, 0x92, 0x78, 0xd0, 0xb9, - 0x66, 0x8a, 0x8f, 0x03, 0x23, 0xc8, 0x0e, 0x5c, 0x0a, 0x27, 0x11, 0x7f, 0xc0, 0xca, 0xbc, 0x40, - 0xba, 0xaa, 0x90, 0x2e, 0x3d, 0xc8, 0x90, 0xc1, 0xcc, 0x91, 0xe4, 0x75, 0xc8, 0x7b, 0x1d, 0x93, - 0x51, 0x55, 0xd4, 0x08, 0x73, 0xd7, 0xfc, 0x0e, 0x27, 0x3e, 0x3e, 0xae, 0x96, 0xf8, 0xb2, 0x8b, - 0x1f, 0x28, 0x05, 0xc9, 0x0d, 0x80, 0x3d, 0xb7, 0xef, 0xb4, 0x4c, 0xff, 0x68, 0x63, 0x45, 0x64, - 0x32, 0xb1, 0x9b, 0xd9, 0x86, 0xe6, 0x60, 0x4c, 0x8a, 0x3b, 0xcc, 0x9e, 0x74, 0x1d, 0xaa, 0x36, - 0xa1, 0x1d, 0xa6, 0xf6, 0x28, 0x8a, 0x4f, 0xde, 0x83, 0x92, 0xa8, 0x1e, 0xd2, 0x56, 0x3d, 0x50, - 0x05, 0x8a, 0x27, 0x29, 0xdb, 0xe9, 0xa8, 0xa2, 0x19, 0x82, 0x60, 0x84, 0x47, 0x7e, 0x15, 0x60, - 0xdf, 0x76, 0x6c, 0xd6, 0x11, 0xe8, 0xe5, 0x27, 0x46, 0xd7, 0xcf, 0xb9, 0xa6, 0x51, 0x30, 0x86, - 0xc8, 0x73, 0x1e, 0xcf, 0x6d, 0x6d, 0xec, 0x54, 0xa6, 0xc4, 0x53, 0xea, 0x9c, 0x67, 0x87, 0x13, - 0x51, 0xf2, 0xc8, 0x75, 0x28, 0xb6, 0x4c, 0xda, 0x73, 0x1d, 0xda, 0xaa, 0x4c, 0x47, 0x75, 0x87, - 0x15, 0x45, 0x43, 0xcd, 0x25, 0xdf, 0x81, 0x82, 0x2d, 0x42, 0xbe, 0xca, 0x8c, 0x98, 0xea, 0x37, - 0x87, 0x3b, 0x14, 0x04, 0x44, 0x03, 0xb8, 0xc7, 0x91, 0x7f, 0xa3, 0x82, 0x25, 0x16, 0x4c, 0xba, - 0xfd, 0x40, 0x68, 0x98, 0x15, 0x1a, 0x86, 0xab, 0xb3, 0xdc, 0x95, 0x18, 0xf2, 0xa6, 0x5c, 0xfd, - 0xc0, 0x10, 0x99, 0x3f, 0xaf, 0xd5, 0xb1, 0xbb, 0x2d, 0x9f, 0x3a, 0x95, 0x39, 0x91, 0x52, 0x89, - 0xe7, 0x5d, 0x56, 0x34, 0xd4, 0x5c, 0xf2, 0x0b, 0x30, 0xed, 0xf6, 0x03, 0x61, 0x37, 0xdc, 0xec, - 0x58, 0xe5, 0xa2, 0x10, 0xbf, 0xc8, 0xd3, 0xb6, 0xbb, 0x71, 0x06, 0x26, 0xe5, 0x8c, 0x19, 0x98, - 0x8a, 0xb7, 0x97, 0x18, 0x7f, 0x38, 0x06, 0xe1, 0x3c, 0x7e, 0x12, 0xa2, 0x65, 0x62, 0x40, 0xc1, - 0xa7, 0xac, 0xdf, 0x0d, 0x94, 0xb3, 0x15, 0x7b, 0x8d, 0x82, 0x82, 0x8a, 0x63, 0x1c, 0xc2, 0x34, - 0x9f, 0x6d, 0xb7, 0x4b, 0xbb, 0xcd, 0x80, 0x7a, 0x8c, 0xec, 0x43, 0x9e, 0xf1, 0x3f, 0xd4, 0x9a, - 0x8c, 0x78, 0x51, 0x16, 0x50, 0x2f, 0xb2, 0x77, 0xa1, 0x00, 0x25, 0xbc, 0xf1, 0x47, 0x63, 0x50, - 0xd2, 0xeb, 0x74, 0x86, 0x0a, 0xf9, 0xcb, 0x30, 0xd9, 0xa2, 0xfb, 0x26, 0x7f, 0x1a, 0x75, 0x97, - 0xcc, 0xcd, 0x6a, 0x45, 0x92, 0x30, 0xe4, 0x91, 0x6a, 0x78, 0x98, 0xc9, 0x47, 0x16, 0x55, 0xab, - 0x78, 0xac, 0x48, 0x0e, 0xa0, 0x24, 0xfe, 0x58, 0x0b, 0xfb, 0x5e, 0x86, 0xdd, 0xf7, 0xfb, 0x21, - 0x8a, 0xac, 0x05, 0xe8, 0x9f, 0x18, 0xe1, 0xa7, 0xfa, 0x55, 0xf2, 0x67, 0xe9, 0x57, 0x31, 0xd6, - 0x80, 0x3b, 0x86, 0xf5, 0x65, 0xf2, 0x36, 0x14, 0x99, 0x32, 0x5d, 0xb5, 0x2e, 0x5f, 0xd1, 0x77, - 0x4e, 0x8a, 0xfe, 0xf8, 0xb8, 0x3a, 0x2d, 0x84, 0x43, 0x02, 0xea, 0x21, 0xc6, 0x12, 0x94, 0x63, - 0xf7, 0xfb, 0x7c, 0x85, 0xf5, 0xdd, 0x5c, 0x6c, 0x85, 0x57, 0xcc, 0xc0, 0x44, 0xc1, 0x31, 0x1e, - 0x8f, 0xc1, 0x1c, 0x52, 0xe6, 0xf6, 0x7d, 0x8b, 0xc6, 0x2b, 0xb3, 0xa6, 0x25, 0x9a, 0x7e, 0x52, - 0x95, 0xd9, 0xba, 0xa0, 0xa2, 0xe2, 0x92, 0x6f, 0xc2, 0x74, 0x8f, 0xfa, 0x6d, 0xfd, 0xb2, 0xa9, - 0x4d, 0xd2, 0xf5, 0x95, 0xad, 0x38, 0x13, 0x93, 0xb2, 0x3c, 0xdf, 0xef, 0x99, 0x8e, 0xbd, 0x4f, - 0x59, 0x90, 0x2e, 0x99, 0x6c, 0x29, 0x3a, 0x6a, 0x09, 0xb2, 0x0e, 0x17, 0x19, 0x0d, 0xee, 0x1e, - 0x3a, 0xd4, 0xd7, 0xf7, 0x3e, 0xea, 0xea, 0xea, 0xf9, 0xf0, 0x3a, 0xac, 0x99, 0x16, 0xc0, 0xc1, - 0x31, 0xe2, 0xf4, 0xed, 0x5b, 0x16, 0x65, 0x6c, 0xd9, 0x75, 0x5a, 0xb6, 0x6e, 0x6d, 0x8a, 0x9f, - 0xbe, 0x29, 0x3e, 0x0e, 0x8c, 0xe0, 0x28, 0xfb, 0xa6, 0xdd, 0xed, 0xfb, 0x34, 0x42, 0x29, 0x24, - 0x51, 0xd6, 0x52, 0x7c, 0x1c, 0x18, 0x61, 0xbc, 0x0e, 0xd3, 0x48, 0x03, 0xff, 0x48, 0xaf, 0x49, - 0x15, 0xf2, 0x5d, 0xbb, 0x67, 0xcb, 0xe2, 0x4f, 0x5e, 0x1a, 0xf2, 0x1d, 0x4e, 0x40, 0x49, 0x37, - 0xbe, 0x97, 0x03, 0x88, 0xda, 0x76, 0xc8, 0x01, 0x14, 0xd9, 0xcd, 0x46, 0xdf, 0x3a, 0xd0, 0xf5, - 0xa2, 0x21, 0xaf, 0x15, 0x14, 0x48, 0xec, 0x82, 0x53, 0x51, 0x50, 0x2b, 0xf8, 0xb2, 0xa6, 0x8e, - 0xbf, 0x1a, 0x07, 0x3d, 0x8a, 0x6f, 0x2e, 0x75, 0x5a, 0x9e, 0x6b, 0x3b, 0x41, 0xfa, 0xea, 0x74, - 0x55, 0xd1, 0x51, 0x4b, 0x70, 0x7b, 0xdb, 0x93, 0x0f, 0x31, 0x96, 0xb4, 0x37, 0x35, 0x07, 0xc5, - 0xe5, 0x72, 0x3e, 0x6d, 0xf3, 0xb5, 0x1e, 0x4f, 0xca, 0xa1, 0xa0, 0xa2, 0xe2, 0xf2, 0x63, 0x26, - 0x2c, 0x98, 0x2a, 0x1b, 0x11, 0xc7, 0x4c, 0x58, 0x5b, 0x45, 0xcd, 0x25, 0x1d, 0x98, 0x35, 0xc5, - 0xd6, 0x46, 0x45, 0xe0, 0x27, 0xaa, 0x67, 0x47, 0x2d, 0x23, 0x49, 0x14, 0x4c, 0xc3, 0x72, 0x4d, - 0x2c, 0x1a, 0xfe, 0xe4, 0x65, 0x6d, 0xad, 0xa9, 0x99, 0x44, 0xc1, 0x34, 0x2c, 0x8f, 0xb0, 0x7c, - 0xb7, 0x4b, 0xeb, 0xb8, 0xad, 0x22, 0x39, 0x1d, 0x61, 0xa1, 0x24, 0x63, 0xc8, 0x37, 0x7e, 0x37, - 0x07, 0x33, 0x4d, 0xcb, 0xb7, 0xbd, 0x40, 0xbf, 0xfb, 0xdb, 0xa2, 0xd7, 0x27, 0x30, 0x79, 0xec, - 0xa3, 0x6c, 0xea, 0xc5, 0x53, 0xea, 0x69, 0x52, 0x28, 0xd1, 0x0a, 0x24, 0x49, 0x18, 0x41, 0x88, - 0xac, 0x57, 0x78, 0x97, 0xf4, 0xde, 0x36, 0x05, 0x15, 0x15, 0xd7, 0xf8, 0x7e, 0x0e, 0x8a, 0xfa, - 0xf6, 0xea, 0x25, 0xc8, 0x8b, 0x4b, 0x11, 0x65, 0x3b, 0xfa, 0x30, 0x59, 0xe6, 0x44, 0x94, 0x3c, - 0x2e, 0x24, 0xc2, 0x39, 0x05, 0x1c, 0x3b, 0x71, 0x4c, 0x3f, 0x40, 0xc9, 0xe3, 0x46, 0x4b, 0x9d, - 0x96, 0xb2, 0x17, 0x6d, 0xb4, 0xab, 0x4e, 0x0b, 0x39, 0x5d, 0xf4, 0xae, 0xb8, 0x7e, 0xcf, 0x0c, - 0xd2, 0x39, 0xf9, 0x9a, 0xa0, 0xa2, 0xe2, 0x1a, 0xef, 0xc2, 0xac, 0xba, 0x18, 0xd7, 0x0b, 0xf5, - 0x2a, 0x14, 0x5b, 0x7d, 0xdf, 0x8c, 0xb9, 0x49, 0x6d, 0xe2, 0x2b, 0x8a, 0x8e, 0x5a, 0xc2, 0x98, - 0x86, 0x72, 0xac, 0xa7, 0xd6, 0xf8, 0xd1, 0x15, 0xd0, 0x77, 0xbc, 0x3f, 0xbd, 0x29, 0x1e, 0x2a, - 0x8d, 0xb2, 0x74, 0x44, 0x9c, 0x1f, 0x3d, 0x22, 0xd6, 0xfb, 0x9e, 0x8a, 0x8a, 0xdb, 0x51, 0x54, - 0x5c, 0x38, 0x87, 0xa8, 0x38, 0x6a, 0xaf, 0x49, 0x47, 0xc6, 0xbf, 0x97, 0x83, 0x29, 0x87, 0x67, - 0xdd, 0xea, 0x7d, 0xaf, 0x4c, 0x8a, 0x48, 0xec, 0xee, 0x48, 0x8b, 0x58, 0xdb, 0x8e, 0x21, 0xca, - 0x82, 0x83, 0xce, 0x8a, 0xe3, 0x2c, 0x4c, 0xa8, 0x26, 0x6b, 0x50, 0x34, 0xf7, 0x79, 0x2a, 0x13, - 0x1c, 0xa9, 0xcb, 0xea, 0xab, 0x59, 0x1e, 0xa0, 0xae, 0x64, 0xa4, 0x73, 0x0d, 0x7f, 0xa1, 0x1e, - 0xcb, 0x4f, 0x27, 0xdd, 0x1d, 0x54, 0x1a, 0xe1, 0x74, 0x0a, 0x2b, 0x27, 0xb1, 0x00, 0x41, 0x51, - 0x62, 0xcd, 0x42, 0x06, 0x14, 0x64, 0xb2, 0x24, 0x32, 0xc5, 0xa2, 0x8c, 0x7b, 0x65, 0x22, 0x85, - 0x8a, 0x43, 0xda, 0x61, 0x98, 0x5b, 0x16, 0x8b, 0xdb, 0x18, 0x3a, 0xf4, 0xd7, 0x91, 0x73, 0x76, - 0x9c, 0x4b, 0x6e, 0xc7, 0x9d, 0xe8, 0xd4, 0x59, 0x9c, 0xe8, 0xf4, 0xa9, 0x0e, 0xb4, 0x0d, 0x05, - 0x26, 0x5c, 0xb4, 0xc8, 0x10, 0xcb, 0x37, 0x96, 0x87, 0x3b, 0xe1, 0x13, 0x5e, 0x5e, 0xae, 0x8e, - 0xa4, 0xa1, 0x82, 0x27, 0x2e, 0x14, 0x7d, 0x15, 0x09, 0xaa, 0x24, 0x73, 0xb8, 0x1a, 0x75, 0x3a, - 0x9c, 0x94, 0xf6, 0x11, 0x52, 0x51, 0x2b, 0x21, 0xef, 0xc1, 0x78, 0xcb, 0x6c, 0xab, 0x74, 0xf3, - 0x5b, 0x43, 0x5f, 0xeb, 0x87, 0x6a, 0x44, 0x33, 0xeb, 0x4a, 0x7d, 0x1d, 0x39, 0x2a, 0x39, 0x88, - 0x3a, 0x9c, 0xe6, 0x46, 0xe8, 0x11, 0x4d, 0x79, 0x7d, 0x99, 0x80, 0x0c, 0xf4, 0x48, 0xad, 0xc2, - 0xe4, 0x23, 0xb7, 0xdb, 0xef, 0xa9, 0x3c, 0xb5, 0x7c, 0x63, 0x21, 0x6b, 0xb7, 0xef, 0x0b, 0x91, - 0xc8, 0x09, 0xc8, 0xdf, 0x0c, 0xc3, 0xb1, 0xe4, 0x37, 0x73, 0x30, 0xc3, 0x5f, 0x1d, 0x6d, 0x07, - 0xac, 0x42, 0x46, 0xb0, 0xd4, 0x7b, 0x8c, 0xfa, 0x91, 0x85, 0x3d, 0xa7, 0xd4, 0xce, 0x6c, 0x24, - 0x34, 0x60, 0x4a, 0x23, 0xf1, 0xa0, 0xc8, 0xec, 0x16, 0xb5, 0x4c, 0x9f, 0x55, 0xe6, 0xcf, 0x4d, - 0x7b, 0x14, 0x58, 0x2a, 0x6c, 0xd4, 0x5a, 0xc8, 0x6f, 0x89, 0xbe, 0x5e, 0xd5, 0xd9, 0xae, 0xbe, - 0x36, 0xb8, 0x74, 0x9e, 0x5f, 0x1b, 0xcc, 0xcb, 0xa6, 0xde, 0x84, 0x06, 0x4c, 0xab, 0x24, 0x77, - 0xe1, 0xb2, 0xec, 0x1b, 0x4b, 0xb7, 0xb9, 0x5d, 0x16, 0xb7, 0x08, 0xcf, 0x9f, 0x1c, 0x57, 0x2f, - 0xd7, 0xb3, 0x04, 0x30, 0x7b, 0x1c, 0xf9, 0x08, 0xa6, 0xfd, 0x78, 0x78, 0x5f, 0x79, 0x6e, 0x84, - 0x2b, 0xec, 0x44, 0xa2, 0x20, 0xeb, 0x20, 0x09, 0x12, 0x26, 0x75, 0x91, 0x37, 0xa0, 0xec, 0x29, - 0x4f, 0x65, 0xb3, 0x5e, 0xe5, 0x8a, 0x78, 0x06, 0x71, 0xa2, 0xee, 0x44, 0x64, 0x8c, 0xcb, 0x90, - 0x7b, 0x50, 0x0e, 0xdc, 0x2e, 0xf5, 0x55, 0xb9, 0xbd, 0x22, 0x36, 0x7f, 0x31, 0xcb, 0x92, 0x77, - 0xb5, 0x58, 0x54, 0xcc, 0x8d, 0x68, 0x0c, 0xe3, 0x38, 0x3c, 0x4b, 0x0c, 0x9b, 0x24, 0x7d, 0x91, - 0x12, 0x3f, 0x9f, 0xcc, 0x12, 0x9b, 0x71, 0x26, 0x26, 0x65, 0x79, 0xde, 0xe7, 0xf9, 0xb6, 0xeb, - 0xdb, 0xc1, 0xd1, 0x72, 0xd7, 0x64, 0x4c, 0x00, 0x2c, 0x08, 0x00, 0x9d, 0xf7, 0xed, 0xa4, 0x05, - 0x70, 0x70, 0x0c, 0xcf, 0x09, 0x42, 0x62, 0xe5, 0x05, 0x91, 0x5d, 0x09, 0xb7, 0x14, 0x8e, 0x45, - 0xcd, 0x3d, 0xa5, 0xa1, 0xe7, 0xea, 0x30, 0x0d, 0x3d, 0xa4, 0x05, 0x57, 0xcd, 0x7e, 0xe0, 0xf6, - 0x38, 0x21, 0x39, 0x64, 0xd7, 0x3d, 0xa0, 0x4e, 0xe5, 0x9a, 0x38, 0xab, 0xae, 0x9d, 0x1c, 0x57, - 0xaf, 0xd6, 0xbf, 0x40, 0x0e, 0xbf, 0x10, 0x85, 0xf4, 0xa0, 0x48, 0x55, 0x53, 0x52, 0xe5, 0x2b, - 0x23, 0x1c, 0x12, 0xc9, 0xce, 0x26, 0xb9, 0x40, 0x21, 0x0d, 0xb5, 0x0a, 0xb2, 0x0b, 0xe5, 0x8e, - 0xcb, 0x82, 0x7a, 0xd7, 0x36, 0x19, 0x65, 0x95, 0x17, 0x85, 0x9d, 0x64, 0x9e, 0x6f, 0xb7, 0x42, - 0xb1, 0xc8, 0x4c, 0x6e, 0x45, 0x23, 0x31, 0x0e, 0x43, 0xa8, 0x48, 0x90, 0xfa, 0x62, 0xd7, 0x5c, - 0x27, 0xa0, 0x1f, 0x06, 0x95, 0x45, 0xf1, 0x2c, 0xaf, 0x64, 0x21, 0xef, 0xb8, 0xad, 0x66, 0x52, - 0x5a, 0xbe, 0xe5, 0x29, 0x22, 0xa6, 0x31, 0xc9, 0x9b, 0x30, 0xe5, 0xb9, 0xad, 0xa6, 0x47, 0xad, - 0x1d, 0x33, 0xb0, 0x3a, 0x95, 0x6a, 0xf2, 0xb2, 0x60, 0x27, 0xc6, 0xc3, 0x84, 0xe4, 0xc2, 0xbb, - 0x70, 0x71, 0x20, 0x9e, 0x7a, 0xa2, 0x9b, 0x95, 0x3f, 0xcf, 0x41, 0x3c, 0x9c, 0x3d, 0xf7, 0xb8, - 0x7f, 0x1d, 0x2e, 0xaa, 0x4e, 0x62, 0x7e, 0xd8, 0x76, 0xfb, 0x41, 0x98, 0x29, 0xc7, 0x6a, 0x24, - 0x98, 0x16, 0xc0, 0xc1, 0x31, 0xc6, 0x5f, 0xe4, 0x60, 0x3a, 0xe1, 0xbe, 0xcf, 0x3d, 0x2b, 0x5c, - 0x03, 0xd2, 0xb3, 0x7d, 0xdf, 0xf5, 0xe5, 0x19, 0xb8, 0xc5, 0x6d, 0x99, 0xa9, 0xef, 0x07, 0x44, - 0x53, 0xc6, 0xd6, 0x00, 0x17, 0x33, 0x46, 0x18, 0x7f, 0x9d, 0x83, 0xa8, 0x08, 0xa7, 0x3b, 0x91, - 0x72, 0xa7, 0x76, 0x22, 0xbd, 0x0a, 0xc5, 0x87, 0xcc, 0x75, 0x76, 0xa2, 0x7e, 0x25, 0xbd, 0xa0, - 0xb7, 0x9b, 0x77, 0xb7, 0x85, 0xa4, 0x96, 0x10, 0xd2, 0x1f, 0xac, 0xd9, 0xdd, 0x60, 0xb0, 0xab, - 0xe7, 0xf6, 0x2f, 0x49, 0x3a, 0x6a, 0x09, 0xb2, 0x04, 0x25, 0x5d, 0xf7, 0x55, 0xe9, 0xa4, 0x5e, - 0x04, 0x5d, 0xf4, 0xc4, 0x48, 0xc6, 0xf8, 0xc1, 0x18, 0x14, 0x7f, 0xdc, 0x3e, 0x86, 0x38, 0x48, - 0x7d, 0x0c, 0xb1, 0x3c, 0x62, 0x29, 0xf9, 0x8b, 0x3e, 0x84, 0x30, 0x3e, 0xcd, 0xc1, 0xd4, 0x33, - 0xfc, 0x1e, 0x61, 0x2f, 0xf9, 0x3d, 0xc2, 0xdb, 0x23, 0x3d, 0xda, 0x29, 0xdf, 0x22, 0xfc, 0xdd, - 0x7c, 0xf4, 0x48, 0x7c, 0x59, 0x89, 0x03, 0xa5, 0xf0, 0x05, 0x0f, 0xcb, 0xf3, 0x6f, 0x8f, 0x94, - 0x14, 0x46, 0x46, 0x19, 0x52, 0x18, 0x46, 0x2a, 0xc8, 0x0d, 0x00, 0xca, 0x3d, 0x9b, 0xac, 0xdd, - 0x8d, 0x25, 0xab, 0xd7, 0xab, 0x9a, 0x83, 0x31, 0xa9, 0x67, 0x5f, 0x70, 0xc8, 0x3e, 0xa2, 0x27, - 0x9e, 0xca, 0x11, 0x7d, 0xf5, 0xdc, 0x8f, 0xe8, 0x17, 0x9f, 0xfe, 0x11, 0x1d, 0x4b, 0x48, 0xf2, - 0x23, 0x24, 0x24, 0x1f, 0xc1, 0x25, 0xf9, 0xe7, 0x72, 0xd7, 0xb4, 0x7b, 0xda, 0x5e, 0x54, 0x4b, - 0xd1, 0x57, 0x33, 0x0f, 0x66, 0xea, 0x33, 0x9b, 0x05, 0xd4, 0x09, 0xee, 0x47, 0x23, 0xa3, 0xfb, - 0xe8, 0xfb, 0x19, 0x70, 0x98, 0xa9, 0x24, 0x1d, 0xc1, 0x4e, 0x9e, 0x21, 0x82, 0xfd, 0x7e, 0x0e, - 0x2e, 0x9b, 0x59, 0x9f, 0x30, 0xaa, 0x3a, 0xc6, 0xed, 0x91, 0xf2, 0x89, 0x04, 0xa2, 0xca, 0x07, - 0xb2, 0x58, 0x98, 0x3d, 0x07, 0xf2, 0x72, 0x94, 0x92, 0x96, 0x84, 0x51, 0x65, 0x27, 0x93, 0xdf, - 0x4d, 0x97, 0x82, 0x40, 0xac, 0x76, 0x73, 0x64, 0x87, 0x7d, 0x0e, 0xe5, 0xa0, 0xf2, 0x08, 0xe5, - 0xa0, 0x54, 0x7a, 0x31, 0x75, 0x4e, 0xe9, 0x85, 0x03, 0x73, 0x76, 0xcf, 0x6c, 0xd3, 0x9d, 0x7e, - 0xb7, 0x2b, 0x2b, 0xe0, 0xac, 0x32, 0x2d, 0xb0, 0x33, 0xfb, 0x40, 0x79, 0xba, 0xd7, 0x4d, 0x7f, - 0x40, 0xa4, 0x2f, 0x6d, 0x36, 0x52, 0x48, 0x38, 0x80, 0xcd, 0xcd, 0x92, 0x87, 0xad, 0xdb, 0x34, - 0xe0, 0xab, 0x2d, 0x2a, 0x25, 0xea, 0x53, 0xed, 0x5b, 0x11, 0x19, 0xe3, 0x32, 0x64, 0x13, 0x4a, - 0x2d, 0x87, 0xa9, 0x6f, 0xb8, 0x66, 0x85, 0x97, 0x7a, 0x8d, 0xfb, 0xb6, 0x95, 0xed, 0xa6, 0xfe, - 0x6e, 0xeb, 0xea, 0xe0, 0xff, 0x45, 0x51, 0xd3, 0x7c, 0x8c, 0xc6, 0x93, 0x2d, 0x01, 0xa6, 0x9a, - 0xa2, 0x65, 0x69, 0xe3, 0xda, 0x29, 0x11, 0xf2, 0xca, 0x76, 0xd8, 0xc3, 0x3d, 0xad, 0xd4, 0xa9, - 0x56, 0xe7, 0x08, 0x81, 0xbc, 0x02, 0x05, 0xd7, 0x59, 0xfd, 0xd0, 0x0e, 0x2a, 0x17, 0x93, 0x15, - 0xf0, 0xbb, 0x82, 0x8a, 0x8a, 0x4b, 0xee, 0xc1, 0x95, 0x20, 0xe8, 0xaa, 0xd4, 0xb6, 0xbe, 0x1f, - 0x50, 0x3f, 0x6c, 0x7c, 0x10, 0xcd, 0x2b, 0x79, 0xf9, 0x19, 0xd8, 0xee, 0xee, 0x9d, 0x2c, 0x11, - 0x3c, 0x6d, 0xec, 0xe9, 0x49, 0xf7, 0xfc, 0x90, 0x49, 0x77, 0x3c, 0xcf, 0xbb, 0xf4, 0x85, 0x79, - 0xde, 0x40, 0x5e, 0x7a, 0xf9, 0x09, 0xf2, 0xd2, 0xf7, 0x44, 0x7b, 0xc7, 0xfa, 0xb2, 0xca, 0xe9, - 0xdf, 0x1a, 0xae, 0x94, 0xc8, 0x11, 0xe4, 0x2d, 0x9f, 0xf8, 0x13, 0x25, 0x26, 0xd9, 0x81, 0x4b, - 0x9e, 0xdb, 0x1a, 0x48, 0x6b, 0x45, 0x12, 0x1f, 0xeb, 0xed, 0xd9, 0xc9, 0x90, 0xc1, 0xcc, 0x91, - 0xc2, 0x97, 0x46, 0xf4, 0x4a, 0x45, 0x2c, 0x8c, 0xf4, 0xa5, 0x11, 0x19, 0xe3, 0x32, 0xe9, 0x2c, - 0xef, 0xf9, 0xa7, 0x96, 0xe5, 0x2d, 0x3c, 0x83, 0x2c, 0xef, 0x85, 0x67, 0x97, 0xe5, 0x7d, 0x56, - 0x84, 0x99, 0xd4, 0x47, 0x8d, 0xba, 0xb3, 0x2a, 0x77, 0xd6, 0xce, 0xaa, 0x44, 0xeb, 0xd3, 0xd8, - 0x53, 0x6d, 0x7d, 0x1a, 0x3f, 0xf7, 0xd6, 0xa7, 0x58, 0x8b, 0xd7, 0xc4, 0x97, 0xb4, 0x78, 0xd5, - 0x61, 0xd6, 0x72, 0x7b, 0x9e, 0xf8, 0x8a, 0x42, 0x35, 0xfa, 0xc8, 0xcb, 0x78, 0x7d, 0xdd, 0xb9, - 0x9c, 0x64, 0x63, 0x5a, 0x9e, 0x30, 0xc8, 0x3b, 0x62, 0x60, 0x61, 0x84, 0xf6, 0xd0, 0xe4, 0x86, - 0x89, 0x83, 0x52, 0x75, 0x68, 0xea, 0x30, 0x5d, 0xaa, 0x97, 0xba, 0x78, 0xa0, 0x31, 0x9b, 0x6c, - 0xc9, 0x63, 0x95, 0x92, 0xd0, 0xff, 0xcb, 0xe7, 0xa1, 0x3f, 0xd9, 0xff, 0xa7, 0x66, 0x12, 0xdd, - 0x00, 0x27, 0xb9, 0x98, 0x9e, 0x09, 0xf1, 0xe1, 0x39, 0x2f, 0x2b, 0x0c, 0x63, 0xea, 0x56, 0xe9, - 0x8b, 0x82, 0xc1, 0x45, 0xa5, 0xe5, 0xb9, 0xcc, 0x40, 0x8e, 0xe1, 0x29, 0xc8, 0xf1, 0xfe, 0xb1, - 0xe2, 0xd3, 0xea, 0x1f, 0x5b, 0x38, 0x92, 0xad, 0xa9, 0xa7, 0x76, 0xb5, 0xde, 0x4b, 0x76, 0x9a, - 0xbf, 0x3b, 0xe4, 0xff, 0x4e, 0x14, 0x36, 0xbf, 0xc6, 0x3b, 0x6a, 0x7f, 0x23, 0x07, 0x97, 0xb2, - 0xb6, 0x25, 0x63, 0x16, 0xcd, 0xe4, 0x2c, 0x46, 0x4b, 0xd7, 0xe2, 0xae, 0xe5, 0x3f, 0xf2, 0xb1, - 0xe4, 0x30, 0xa0, 0xde, 0x4f, 0x6f, 0x8e, 0x87, 0xba, 0x39, 0x4e, 0x7c, 0x2d, 0x9c, 0x7f, 0x86, - 0x5f, 0x0b, 0x17, 0x86, 0xf8, 0x5a, 0x78, 0xf2, 0x59, 0x7e, 0x2d, 0x5c, 0x3c, 0xe3, 0xd7, 0xc2, - 0xa5, 0xa7, 0xff, 0xb5, 0xf0, 0xe7, 0x39, 0x98, 0x4b, 0x37, 0x2f, 0x3f, 0x83, 0x22, 0xd9, 0x41, - 0xa2, 0x48, 0xb6, 0x31, 0x92, 0x33, 0x0f, 0xa7, 0x7d, 0x5a, 0xb1, 0xcc, 0xf8, 0x61, 0x0e, 0x06, - 0x1a, 0xb4, 0x9f, 0x41, 0x1d, 0xeb, 0x61, 0xb2, 0x8e, 0xb5, 0x7a, 0x2e, 0x0f, 0x79, 0x4a, 0x3d, - 0xeb, 0x7f, 0x32, 0x1e, 0xf1, 0xff, 0xa4, 0xae, 0x95, 0x70, 0x6d, 0x63, 0x4f, 0xdf, 0xb5, 0x35, - 0x6a, 0x9f, 0x7c, 0xbe, 0x78, 0xe1, 0xd3, 0xcf, 0x17, 0x2f, 0x7c, 0xf6, 0xf9, 0xe2, 0x85, 0x8f, - 0x4f, 0x16, 0x73, 0x9f, 0x9c, 0x2c, 0xe6, 0x3e, 0x3d, 0x59, 0xcc, 0x7d, 0x76, 0xb2, 0x98, 0xfb, - 0xe1, 0xc9, 0x62, 0xee, 0x0f, 0xfe, 0x6d, 0xf1, 0xc2, 0xaf, 0x14, 0x43, 0xdc, 0xff, 0x0d, 0x00, - 0x00, 0xff, 0xff, 0x52, 0x9f, 0x88, 0x20, 0x36, 0x51, 0x00, 0x00, + 0x5e, 0x94, 0xd0, 0x03, 0x49, 0x39, 0xe9, 0x9e, 0x81, 0x4c, 0x86, 0x24, 0x53, 0xe5, 0x9f, 0x6e, + 0xb7, 0xdb, 0x6e, 0x73, 0xca, 0xdd, 0xcd, 0x90, 0x88, 0xe1, 0xf9, 0xd5, 0x75, 0xd5, 0x6b, 0x57, + 0xbd, 0xf7, 0xf2, 0xee, 0xab, 0x76, 0xac, 0x2c, 0x08, 0x08, 0x04, 0x08, 0x8d, 0x04, 0x1b, 0x18, + 0x31, 0x1b, 0x04, 0x12, 0x6c, 0xd8, 0xb0, 0x05, 0x34, 0x48, 0x88, 0x45, 0xc4, 0x86, 0x88, 0x0d, + 0x59, 0x20, 0x6b, 0x62, 0x36, 0x20, 0x90, 0x90, 0xd8, 0x20, 0xf5, 0x0a, 0xdd, 0x9f, 0x77, 0xdf, + 0x4f, 0x3d, 0x27, 0x76, 0x95, 0xbb, 0x11, 0x33, 0xb3, 0x6a, 0xd7, 0x39, 0xe7, 0x7e, 0xe7, 0xfe, + 0x9e, 0x7b, 0xce, 0xb9, 0xe7, 0x35, 0x2c, 0xb7, 0xed, 0xa0, 0xd3, 0xdf, 0xad, 0x59, 0x6e, 0x6f, + 0xc9, 0xf4, 0xdb, 0xae, 0xe7, 0xbb, 0x8f, 0xc4, 0x1f, 0x4b, 0xde, 0x7e, 0x7b, 0xc9, 0xf4, 0x6c, + 0xb6, 0x74, 0xe0, 0xfa, 0xfb, 0x7b, 0x5d, 0xf7, 0x60, 0xe9, 0xf1, 0x1b, 0x66, 0xd7, 0xeb, 0x98, + 0x6f, 0x2c, 0xb5, 0xa9, 0x43, 0x7d, 0x33, 0xa0, 0xad, 0x9a, 0xe7, 0xbb, 0x81, 0x4b, 0x6e, 0x46, + 0x20, 0xb5, 0x10, 0x44, 0xfc, 0x51, 0xf3, 0xf6, 0xdb, 0x35, 0x0e, 0x52, 0x0b, 0x41, 0x6a, 0x21, + 0xc8, 0xc2, 0x6b, 0x31, 0xcd, 0x6d, 0x97, 0x2b, 0xe4, 0x58, 0xbb, 0xfd, 0x3d, 0xf1, 0x4b, 0xfc, + 0x10, 0x7f, 0x49, 0x1d, 0x0b, 0xc6, 0xfe, 0x9b, 0xac, 0x66, 0xbb, 0xbc, 0x4b, 0x4b, 0x96, 0xeb, + 0xd3, 0xa5, 0xc7, 0x03, 0xfd, 0x58, 0xf8, 0x5a, 0x24, 0xd3, 0x33, 0xad, 0x8e, 0xed, 0x50, 0xff, + 0x30, 0x1a, 0x47, 0x8f, 0x06, 0x66, 0x56, 0xab, 0xa5, 0x93, 0x5a, 0xf9, 0x7d, 0x27, 0xb0, 0x7b, + 0x74, 0xa0, 0xc1, 0xcf, 0x7e, 0x59, 0x03, 0x66, 0x75, 0x68, 0xcf, 0x4c, 0xb7, 0x33, 0xfe, 0x31, + 0x07, 0xb3, 0x75, 0xdf, 0xea, 0xd8, 0x8f, 0x69, 0x33, 0xe0, 0x8c, 0xf6, 0x21, 0x79, 0x0f, 0xc6, + 0x03, 0xd3, 0xaf, 0xe4, 0xae, 0xe5, 0xae, 0x97, 0x6f, 0x7c, 0xab, 0x36, 0xc4, 0x44, 0xd6, 0x76, + 0x4c, 0x3f, 0x84, 0x6b, 0x4c, 0x1e, 0x1f, 0x55, 0xc7, 0x77, 0x4c, 0x1f, 0x39, 0x2a, 0xf9, 0x0e, + 0x4c, 0x38, 0xae, 0x43, 0x2b, 0x63, 0x02, 0xbd, 0x3e, 0x14, 0xfa, 0x96, 0xeb, 0xe8, 0xde, 0x36, + 0x8a, 0xc7, 0x47, 0xd5, 0x09, 0x4e, 0x41, 0x01, 0x6c, 0xfc, 0x57, 0x0e, 0x4a, 0x75, 0xbf, 0xdd, + 0xef, 0x51, 0x27, 0x60, 0xc4, 0x07, 0xf0, 0x4c, 0xdf, 0xec, 0xd1, 0x80, 0xfa, 0xac, 0x92, 0xbb, + 0x36, 0x7e, 0xbd, 0x7c, 0xe3, 0x9d, 0xa1, 0x94, 0x6e, 0x87, 0x30, 0x0d, 0xf2, 0xc9, 0x51, 0xf5, + 0xc2, 0xf1, 0x51, 0x15, 0x34, 0x89, 0x61, 0x4c, 0x0b, 0x71, 0xa0, 0x64, 0xfa, 0x81, 0xbd, 0x67, + 0x5a, 0x01, 0xab, 0x8c, 0x09, 0x95, 0x6f, 0x0f, 0xa5, 0xb2, 0xae, 0x50, 0x1a, 0x17, 0x95, 0xc6, + 0x52, 0x48, 0x61, 0x18, 0xa9, 0x30, 0xfe, 0x63, 0x1c, 0x8a, 0x21, 0x83, 0x5c, 0x83, 0x09, 0xc7, + 0xec, 0x51, 0xb1, 0x7a, 0xa5, 0xc6, 0x94, 0x6a, 0x38, 0xb1, 0x65, 0xf6, 0xf8, 0x04, 0x99, 0x3d, + 0xca, 0x25, 0x3c, 0x33, 0xe8, 0x88, 0x15, 0x88, 0x49, 0x6c, 0x9b, 0x41, 0x07, 0x05, 0x87, 0x5c, + 0x85, 0x89, 0x9e, 0xdb, 0xa2, 0x95, 0xf1, 0x6b, 0xb9, 0xeb, 0x79, 0x39, 0xc1, 0x9b, 0x6e, 0x8b, + 0xa2, 0xa0, 0xf2, 0xf6, 0x7b, 0xbe, 0xdb, 0xab, 0x4c, 0x24, 0xdb, 0xaf, 0xf9, 0x6e, 0x0f, 0x05, + 0x87, 0xfc, 0x6e, 0x0e, 0xe6, 0xc2, 0xee, 0xdd, 0x75, 0x2d, 0x33, 0xb0, 0x5d, 0xa7, 0x92, 0x17, + 0x0b, 0xbe, 0x3a, 0xd2, 0x44, 0x84, 0x60, 0x8d, 0x8a, 0xd2, 0x3a, 0x97, 0xe6, 0xe0, 0x80, 0x62, + 0x72, 0x03, 0xa0, 0xdd, 0x75, 0x77, 0xcd, 0x2e, 0x9f, 0x83, 0x4a, 0x41, 0xf4, 0x5a, 0x2f, 0xe1, + 0x2d, 0xcd, 0xc1, 0x98, 0x14, 0xd9, 0x87, 0x49, 0x53, 0x9e, 0x8a, 0xca, 0xa4, 0xe8, 0xf7, 0xca, + 0x90, 0xfd, 0x4e, 0x9c, 0xac, 0x46, 0xf9, 0xf8, 0xa8, 0x3a, 0xa9, 0x88, 0x18, 0x6a, 0x20, 0xaf, + 0x42, 0xd1, 0xf5, 0x78, 0x57, 0xcd, 0x6e, 0xa5, 0x78, 0x2d, 0x77, 0xbd, 0xd8, 0x98, 0x53, 0xdd, + 0x2b, 0xde, 0x53, 0x74, 0xd4, 0x12, 0xc6, 0x1f, 0xe6, 0x61, 0x60, 0xd4, 0xe4, 0x0d, 0x28, 0x2b, + 0xb4, 0xbb, 0x6e, 0x9b, 0x89, 0xc5, 0x2f, 0x36, 0x66, 0x8f, 0x8f, 0xaa, 0xe5, 0x7a, 0x44, 0xc6, + 0xb8, 0x0c, 0x79, 0x08, 0x63, 0xec, 0xa6, 0x3a, 0x86, 0xef, 0x0e, 0x35, 0xba, 0xe6, 0x4d, 0xbd, + 0x41, 0x0b, 0xc7, 0x47, 0xd5, 0xb1, 0xe6, 0x4d, 0x1c, 0x63, 0x37, 0xb9, 0xf9, 0x68, 0xdb, 0x81, + 0xd8, 0x3c, 0xc3, 0x9a, 0x8f, 0x5b, 0x76, 0xa0, 0xa1, 0x85, 0xf9, 0xb8, 0x65, 0x07, 0xc8, 0x51, + 0xb9, 0xf9, 0xe8, 0x04, 0x81, 0x27, 0x36, 0xdf, 0xb0, 0xe6, 0xe3, 0xf6, 0xce, 0xce, 0xb6, 0x86, + 0x17, 0xbb, 0x9b, 0x53, 0x50, 0x00, 0x93, 0x8f, 0xf8, 0x4c, 0x4a, 0x9e, 0xeb, 0x1f, 0xaa, 0x5d, + 0x7b, 0x7b, 0xa4, 0x5d, 0xeb, 0xfa, 0x87, 0x5a, 0x9d, 0x5a, 0x13, 0xcd, 0xc0, 0xb8, 0x36, 0x31, + 0xba, 0xd6, 0x1e, 0x13, 0x9b, 0x74, 0xe8, 0xd1, 0xad, 0xac, 0x35, 0x53, 0xa3, 0x5b, 0x59, 0x6b, + 0xa2, 0x00, 0xe6, 0x6b, 0xe3, 0x9b, 0x07, 0x6a, 0x4f, 0x0f, 0xb7, 0x36, 0x68, 0x1e, 0x24, 0xd7, + 0x06, 0xcd, 0x03, 0xe4, 0xa8, 0x46, 0x1b, 0x2e, 0x87, 0x1c, 0xa4, 0x9e, 0xcb, 0x6c, 0x31, 0x40, + 0xba, 0x47, 0x96, 0xa0, 0x64, 0xb9, 0xce, 0x9e, 0xdd, 0xde, 0x34, 0x3d, 0x65, 0x98, 0xb4, 0x45, + 0x5b, 0x0e, 0x19, 0x18, 0xc9, 0x90, 0x17, 0x61, 0x7c, 0x9f, 0x1e, 0x2a, 0x0b, 0x55, 0x56, 0xa2, + 0xe3, 0x1b, 0xf4, 0x10, 0x39, 0xdd, 0xf8, 0x41, 0x0e, 0xe6, 0x33, 0x26, 0x97, 0x37, 0xeb, 0xfb, + 0x5d, 0xa5, 0x41, 0x37, 0xbb, 0x8f, 0x77, 0x91, 0xd3, 0xc9, 0x6f, 0xe5, 0x60, 0x36, 0x36, 0xdb, + 0xf5, 0xbe, 0x32, 0x82, 0xc3, 0x9f, 0xee, 0x04, 0x56, 0xe3, 0x8a, 0xd2, 0x38, 0x9b, 0x62, 0x60, + 0x5a, 0xab, 0xf1, 0xcf, 0xe2, 0xd6, 0x4d, 0xd0, 0x88, 0x09, 0x33, 0x7d, 0x46, 0x7d, 0x6e, 0xa2, + 0x9b, 0xd4, 0xf2, 0x69, 0xa0, 0x2e, 0xe0, 0x97, 0x6b, 0xf2, 0x6a, 0xe7, 0xbd, 0xa8, 0x71, 0x2f, + 0xa3, 0xf6, 0xf8, 0x8d, 0x9a, 0x94, 0xd8, 0xa0, 0x87, 0x4d, 0xda, 0xa5, 0x1c, 0xa3, 0x41, 0x8e, + 0x8f, 0xaa, 0x33, 0xf7, 0x13, 0x00, 0x98, 0x02, 0xe4, 0x2a, 0x3c, 0x93, 0xb1, 0x03, 0xd7, 0x6f, + 0x29, 0x15, 0x63, 0x67, 0x56, 0xb1, 0x9d, 0x00, 0xc0, 0x14, 0xa0, 0xf1, 0x6d, 0x80, 0x65, 0xd7, + 0x09, 0x6c, 0xa7, 0x4f, 0xef, 0x39, 0xe4, 0x25, 0xc8, 0x53, 0xdf, 0x77, 0x7d, 0x65, 0x90, 0xa6, + 0xd5, 0x04, 0xe5, 0x57, 0x39, 0x11, 0x25, 0x8f, 0xbc, 0x02, 0x85, 0x3d, 0xd3, 0xee, 0xd2, 0x96, + 0xe8, 0x4d, 0xb1, 0x31, 0xa3, 0xa4, 0x0a, 0x6b, 0x82, 0x8a, 0x8a, 0x6b, 0xfc, 0xf5, 0x38, 0x4c, + 0x2d, 0xfb, 0xae, 0xf3, 0x50, 0x2d, 0x04, 0xf9, 0x15, 0x28, 0x72, 0xff, 0xa9, 0x65, 0x06, 0xa6, + 0x9a, 0xab, 0xd7, 0x63, 0x03, 0xd1, 0x6e, 0x50, 0xb4, 0x84, 0x5c, 0x9a, 0x0f, 0xed, 0xde, 0xee, + 0x23, 0x6a, 0x05, 0x9b, 0x34, 0x30, 0xa3, 0x8b, 0x20, 0xa2, 0xa1, 0x46, 0x25, 0x16, 0x4c, 0x30, + 0x8f, 0x5a, 0x23, 0x39, 0x2b, 0x61, 0x77, 0x9b, 0x1e, 0xb5, 0xa2, 0xdb, 0x92, 0xff, 0x42, 0x01, + 0x4e, 0x5c, 0x28, 0xb0, 0xc0, 0x0c, 0xfa, 0x4c, 0x99, 0xcc, 0x5b, 0x43, 0xa9, 0x89, 0xcf, 0x4c, + 0x53, 0xc0, 0x45, 0x13, 0x29, 0x7f, 0xa3, 0x52, 0x43, 0x18, 0x4c, 0xca, 0xdb, 0x84, 0x29, 0x33, + 0x7a, 0x7b, 0x64, 0x8d, 0xf2, 0x9e, 0x62, 0x8d, 0x59, 0xa5, 0x72, 0x52, 0x11, 0x30, 0xd4, 0x64, + 0x7c, 0x96, 0x83, 0xb9, 0x78, 0x8b, 0xbb, 0x36, 0x0b, 0xc8, 0xfb, 0x03, 0x2b, 0x58, 0x3b, 0xdd, + 0x0a, 0xf2, 0xd6, 0x62, 0xfd, 0xf4, 0x4d, 0x19, 0x52, 0x62, 0xab, 0xb7, 0x07, 0x79, 0x3b, 0xa0, + 0xbd, 0xd0, 0x07, 0xab, 0x8f, 0x3c, 0xca, 0x68, 0x03, 0xaf, 0x73, 0x5c, 0x94, 0xf0, 0xc6, 0x9f, + 0x8e, 0xc1, 0x7c, 0xc6, 0x64, 0xf0, 0x7b, 0x9d, 0x7b, 0xdd, 0xad, 0x7e, 0x37, 0x74, 0xc7, 0x74, + 0x6f, 0x9b, 0x8a, 0x8e, 0x5a, 0x82, 0xbc, 0x0f, 0x17, 0x2d, 0xd7, 0xb1, 0xfa, 0xbe, 0x4f, 0x1d, + 0xeb, 0x70, 0xdb, 0xed, 0xda, 0x56, 0x68, 0x01, 0x6b, 0xaa, 0xd9, 0xc5, 0xe5, 0xb4, 0xc0, 0x93, + 0x2c, 0x22, 0x0e, 0x02, 0x91, 0xaf, 0xc2, 0x24, 0xeb, 0x33, 0x8f, 0x3a, 0x2d, 0xb1, 0xcb, 0x8a, + 0xd1, 0x4a, 0x35, 0x25, 0x19, 0x43, 0x3e, 0xb9, 0x0f, 0x57, 0x58, 0xc0, 0x2d, 0x96, 0xd3, 0x5e, + 0xa1, 0x66, 0xab, 0x6b, 0x3b, 0xdc, 0x7e, 0xb8, 0x4e, 0x4b, 0x6e, 0x97, 0xf1, 0xc6, 0x0b, 0xc7, + 0x47, 0xd5, 0x2b, 0xcd, 0x6c, 0x11, 0x3c, 0xa9, 0xad, 0xf1, 0x4f, 0x39, 0x20, 0x83, 0x9b, 0x94, + 0x6c, 0x40, 0xc1, 0xb4, 0x02, 0xee, 0x68, 0x49, 0xe7, 0xfc, 0xa5, 0x2c, 0x5b, 0x24, 0x0f, 0x27, + 0xd2, 0x3d, 0xca, 0xc7, 0x44, 0xa3, 0x9d, 0x5d, 0x17, 0x4d, 0x51, 0x41, 0x10, 0x17, 0x2e, 0x76, + 0x4d, 0x16, 0x84, 0xb3, 0xdb, 0xda, 0xb1, 0x7b, 0x61, 0xa4, 0xf1, 0xd3, 0xa7, 0xdb, 0x58, 0xbc, + 0x45, 0xe3, 0x32, 0x9f, 0xeb, 0xbb, 0x69, 0x20, 0x1c, 0xc4, 0x36, 0xfe, 0xa8, 0x00, 0x93, 0x2b, + 0xf5, 0x5b, 0x3b, 0x26, 0xdb, 0x3f, 0x85, 0xe7, 0xfd, 0x2a, 0x14, 0x03, 0xda, 0xf3, 0xba, 0x66, + 0x40, 0xd5, 0xca, 0xea, 0x0d, 0xb1, 0xa3, 0xe8, 0xa8, 0x25, 0x88, 0xcb, 0xc3, 0x08, 0x15, 0xc7, + 0x28, 0xd3, 0xf0, 0xce, 0x90, 0xf7, 0x94, 0x42, 0x89, 0xc7, 0x11, 0x8a, 0x84, 0x91, 0x0e, 0xc2, + 0xa0, 0x1c, 0x2a, 0x47, 0xba, 0xa7, 0x6c, 0xc3, 0x90, 0xf1, 0x5f, 0x84, 0x23, 0x5d, 0x9e, 0x18, + 0x01, 0xe3, 0x5a, 0xc8, 0xd7, 0x60, 0xaa, 0x45, 0xf9, 0xbe, 0xa3, 0x8e, 0x65, 0x53, 0x56, 0xc9, + 0x5f, 0x1b, 0xe7, 0xf3, 0x72, 0x7c, 0x54, 0x9d, 0x5a, 0x89, 0xd1, 0x31, 0x21, 0x45, 0x1e, 0x41, + 0xe9, 0xc0, 0x0e, 0x3a, 0xe2, 0x18, 0x56, 0x0a, 0x62, 0xe3, 0x7c, 0x63, 0xa8, 0x8e, 0x72, 0x84, + 0x68, 0x5a, 0x1e, 0x86, 0x98, 0x18, 0xc1, 0x73, 0xef, 0x85, 0xff, 0x10, 0xc1, 0x9e, 0xf0, 0x9c, + 0x4a, 0xc9, 0x06, 0x82, 0x81, 0x91, 0x0c, 0x61, 0x30, 0xc5, 0x7f, 0x34, 0xe9, 0x07, 0x7d, 0xbe, + 0x5b, 0x85, 0x4f, 0x3f, 0x6c, 0x08, 0x18, 0x82, 0xc8, 0x19, 0x79, 0x18, 0x83, 0xc5, 0x84, 0x12, + 0xbe, 0xfb, 0x0e, 0x3a, 0xd4, 0xa9, 0x94, 0x92, 0xbb, 0xef, 0x61, 0x87, 0x3a, 0x28, 0x38, 0xc4, + 0x05, 0xb0, 0xf4, 0xd5, 0x5c, 0x81, 0x11, 0x1c, 0xff, 0xe8, 0x86, 0x6f, 0xcc, 0xf0, 0xbb, 0x33, + 0xfa, 0x8d, 0x31, 0x15, 0xc6, 0xdf, 0xe5, 0xa0, 0xcc, 0x0f, 0x47, 0xb8, 0xa1, 0x5f, 0x81, 0x42, + 0x60, 0xfa, 0x6d, 0xe5, 0xd9, 0x94, 0xa2, 0x53, 0xbc, 0x23, 0xa8, 0xa8, 0xb8, 0xc4, 0x84, 0x7c, + 0x60, 0xb2, 0xfd, 0xd0, 0x6e, 0xff, 0xfc, 0x50, 0x7d, 0x54, 0xa7, 0x32, 0x32, 0xd9, 0xfc, 0x17, + 0x43, 0x89, 0x4c, 0xae, 0x43, 0x91, 0x7b, 0x15, 0x6b, 0x26, 0x0b, 0x94, 0x3d, 0x9c, 0xe2, 0xa7, + 0x70, 0x4d, 0xd1, 0x50, 0x73, 0x8d, 0xf7, 0x61, 0x66, 0xf5, 0x43, 0x6a, 0xf5, 0x03, 0xd7, 0x97, + 0xae, 0x2a, 0xb9, 0x03, 0x84, 0x51, 0xff, 0xb1, 0x6d, 0xd1, 0xba, 0x65, 0xb9, 0x7d, 0x27, 0xd8, + 0x8a, 0x4e, 0xfd, 0x82, 0xd2, 0x46, 0x9a, 0x03, 0x12, 0x98, 0xd1, 0xca, 0xf8, 0x8b, 0x09, 0x28, + 0xc7, 0x82, 0x1d, 0xbe, 0x8a, 0x3e, 0xf5, 0xdc, 0xb4, 0x0d, 0xe1, 0xee, 0x34, 0x0a, 0x0e, 0xb7, + 0x21, 0x3e, 0x7d, 0x6c, 0x33, 0x1e, 0x52, 0xa7, 0x6c, 0x08, 0x2a, 0x3a, 0x6a, 0x09, 0x52, 0x85, + 0x7c, 0x8b, 0x7a, 0x41, 0x47, 0x0c, 0x72, 0xa2, 0x51, 0xe2, 0x13, 0xb1, 0xc2, 0x09, 0x28, 0xe9, + 0x5c, 0x60, 0x8f, 0x06, 0x56, 0xa7, 0x32, 0x21, 0xce, 0x9d, 0x10, 0x58, 0xe3, 0x04, 0x94, 0xf4, + 0x0c, 0xb7, 0x34, 0xff, 0xf4, 0xdd, 0xd2, 0xc2, 0x39, 0xbb, 0xa5, 0xc4, 0x83, 0x79, 0xc6, 0x3a, + 0xdb, 0xbe, 0xfd, 0xd8, 0x0c, 0xa8, 0x68, 0x2c, 0xf4, 0x4c, 0x9e, 0x45, 0xcf, 0x95, 0xe3, 0xa3, + 0xea, 0x7c, 0xb3, 0x79, 0x3b, 0x8d, 0x82, 0x59, 0xd0, 0xa4, 0x09, 0x97, 0x6d, 0x87, 0x51, 0xab, + 0xef, 0xd3, 0xf5, 0xb6, 0xe3, 0xfa, 0xf4, 0xb6, 0xcb, 0x38, 0x9c, 0x8a, 0xf0, 0x5f, 0x54, 0x8b, + 0x76, 0x79, 0x3d, 0x4b, 0x08, 0xb3, 0xdb, 0x1a, 0xff, 0x90, 0x83, 0xa9, 0x78, 0x7c, 0x47, 0x18, + 0x40, 0x67, 0x65, 0xad, 0x29, 0x77, 0xa6, 0x72, 0xa1, 0xde, 0x1d, 0x3a, 0x6c, 0x94, 0x30, 0x91, + 0x4f, 0x1c, 0xd1, 0x30, 0xa6, 0xe6, 0x14, 0x09, 0xa4, 0x97, 0x20, 0xbf, 0xe7, 0xfa, 0x16, 0x55, + 0x67, 0x4b, 0x9f, 0xc1, 0x35, 0x4e, 0x44, 0xc9, 0x33, 0xfe, 0x2d, 0x07, 0x31, 0x0d, 0xe4, 0x57, + 0x61, 0x9a, 0xeb, 0xd8, 0xf0, 0x77, 0x13, 0xa3, 0x69, 0x0c, 0x3d, 0x1a, 0x8d, 0xd4, 0xb8, 0xac, + 0xf4, 0x4f, 0x27, 0xc8, 0x98, 0xd4, 0x47, 0x7e, 0x06, 0x4a, 0x66, 0xab, 0xe5, 0x53, 0xc6, 0xa8, + 0x34, 0x3d, 0xa5, 0xc6, 0xb4, 0xb8, 0x2b, 0x43, 0x22, 0x46, 0x7c, 0x7e, 0x0c, 0x79, 0x40, 0xcd, + 0x77, 0xb6, 0x18, 0x64, 0xec, 0x18, 0x72, 0x25, 0x9c, 0x8e, 0x5a, 0xc2, 0xf8, 0xee, 0x04, 0x24, + 0x75, 0x93, 0x16, 0xcc, 0xee, 0xfb, 0xbb, 0xcb, 0xcb, 0xa6, 0xd5, 0x19, 0x2a, 0xdc, 0x9b, 0xe7, + 0x71, 0xe6, 0x46, 0x12, 0x01, 0xd3, 0x90, 0x4a, 0xcb, 0x06, 0x3d, 0x0c, 0xcc, 0xdd, 0x61, 0x22, + 0xbe, 0x50, 0x4b, 0x1c, 0x01, 0xd3, 0x90, 0xe4, 0xeb, 0x50, 0xde, 0xf7, 0x77, 0xc3, 0x43, 0xae, + 0xa6, 0x63, 0x5e, 0x4d, 0x47, 0x79, 0x23, 0x62, 0x61, 0x5c, 0x8e, 0x4f, 0xe1, 0xbe, 0xbf, 0x8b, + 0xd4, 0xec, 0x86, 0xb9, 0x44, 0x3d, 0x85, 0x1b, 0x8a, 0x8e, 0x5a, 0x82, 0x78, 0x40, 0xf6, 0xc3, + 0xd9, 0xd3, 0x39, 0x03, 0x65, 0x8b, 0xae, 0x67, 0x8d, 0x46, 0x0b, 0xc5, 0x07, 0xf4, 0x1c, 0xb7, + 0xcd, 0x1b, 0x03, 0x38, 0x98, 0x81, 0x4d, 0xbe, 0x0d, 0x57, 0xf6, 0xfd, 0x5d, 0x65, 0xc8, 0xb7, + 0x7d, 0xdb, 0xb1, 0x6c, 0x2f, 0x91, 0x44, 0xac, 0xaa, 0xee, 0x5e, 0xd9, 0xc8, 0x16, 0xc3, 0x93, + 0xda, 0x1b, 0xaf, 0xc1, 0x54, 0x3c, 0x09, 0xf5, 0x25, 0x89, 0x0b, 0xe3, 0x3f, 0x73, 0x50, 0x58, + 0x77, 0xbc, 0xfe, 0x8f, 0x49, 0x3e, 0xfb, 0x4f, 0x26, 0x60, 0x82, 0xbb, 0x5e, 0xe4, 0x3a, 0x4c, + 0x04, 0x87, 0x9e, 0xbc, 0x5b, 0xc7, 0x1b, 0x97, 0x42, 0x43, 0xb3, 0x73, 0xe8, 0xd1, 0x27, 0xea, + 0x5f, 0x14, 0x12, 0xe4, 0x1d, 0x28, 0x38, 0xfd, 0xde, 0x03, 0xb3, 0xab, 0x8c, 0xd2, 0x2b, 0xa1, + 0x6b, 0xb1, 0x25, 0xa8, 0x4f, 0x8e, 0xaa, 0x97, 0xa8, 0x63, 0xb9, 0x2d, 0xdb, 0x69, 0x2f, 0x3d, + 0x62, 0xae, 0x53, 0xdb, 0xea, 0xf7, 0x76, 0xa9, 0x8f, 0xaa, 0x15, 0x0f, 0x8f, 0x76, 0x5d, 0xb7, + 0xcb, 0x01, 0x52, 0xe1, 0x51, 0x43, 0x92, 0x31, 0xe4, 0x73, 0x2f, 0x86, 0x05, 0x3e, 0x97, 0x9c, + 0x48, 0x7a, 0x31, 0x4d, 0x41, 0x45, 0xc5, 0x25, 0x3d, 0x28, 0xf4, 0x4c, 0x8f, 0xcb, 0xe5, 0xc5, + 0x94, 0xad, 0x0e, 0xed, 0x9f, 0xd6, 0x36, 0x05, 0xce, 0xaa, 0x13, 0xf8, 0x87, 0x91, 0x3a, 0x49, + 0x44, 0xa5, 0x84, 0xd8, 0x30, 0xd9, 0xb5, 0x59, 0xc0, 0xf5, 0x15, 0x46, 0xd8, 0x15, 0x5c, 0xdf, + 0x03, 0xb3, 0xdb, 0xa7, 0xd1, 0x0c, 0xdc, 0x95, 0xb0, 0x18, 0xe2, 0x2f, 0x1c, 0x42, 0x39, 0xd6, + 0x23, 0x32, 0x27, 0x93, 0x75, 0x62, 0xf3, 0x8a, 0xfc, 0x1c, 0xd9, 0x81, 0xfc, 0x63, 0x8e, 0xa1, + 0x8c, 0xcd, 0x88, 0x3d, 0x41, 0x09, 0xf6, 0xd6, 0xd8, 0x9b, 0xb9, 0xb7, 0x8a, 0xdf, 0xfb, 0xe3, + 0xea, 0x85, 0x8f, 0xff, 0xe5, 0xda, 0x05, 0xe3, 0xef, 0xc7, 0xa1, 0xa4, 0x45, 0xfe, 0x7f, 0xef, + 0x14, 0x3f, 0xb5, 0x53, 0xee, 0x8c, 0x36, 0x5f, 0xa7, 0xda, 0x2e, 0xf5, 0xe4, 0x76, 0x99, 0x6a, + 0xfc, 0x54, 0x6c, 0xa9, 0x9f, 0x1c, 0x55, 0x2b, 0xc9, 0x49, 0x40, 0xf3, 0x60, 0x93, 0x32, 0x66, + 0xb6, 0x69, 0xb4, 0x0d, 0xbe, 0xf1, 0x65, 0xdb, 0xe0, 0x52, 0x7c, 0x1b, 0x94, 0xb2, 0x97, 0xf1, + 0xe3, 0x71, 0x28, 0x6e, 0x86, 0x09, 0x9b, 0xdf, 0xcc, 0x41, 0xd9, 0x74, 0x1c, 0x37, 0x30, 0x65, + 0x76, 0x4a, 0x9a, 0xb7, 0xad, 0xa1, 0xa6, 0x23, 0x04, 0xad, 0xd5, 0x23, 0x40, 0x39, 0x25, 0xfa, + 0x66, 0x8a, 0x71, 0x30, 0xae, 0x97, 0x7c, 0x00, 0x85, 0xae, 0xb9, 0x4b, 0xbb, 0xa1, 0xb5, 0x5b, + 0x1f, 0xad, 0x07, 0x77, 0x05, 0x56, 0x6a, 0x3d, 0x24, 0x11, 0x95, 0xa2, 0x85, 0x77, 0x60, 0x2e, + 0xdd, 0xd1, 0xb3, 0xcc, 0x28, 0x5f, 0x8c, 0x98, 0x9a, 0xb3, 0x34, 0x35, 0xfe, 0xa6, 0x04, 0xb0, + 0xe5, 0xb6, 0xa8, 0x4a, 0xc8, 0x2c, 0xc0, 0x98, 0xdd, 0x52, 0x57, 0x11, 0xa8, 0xde, 0x8e, 0xad, + 0xaf, 0xe0, 0x98, 0xdd, 0xd2, 0x29, 0x8e, 0xb1, 0x13, 0x53, 0x1c, 0x5f, 0x87, 0x72, 0xcb, 0x66, + 0x5e, 0xd7, 0x3c, 0xdc, 0xca, 0xf0, 0x05, 0x56, 0x22, 0x16, 0xc6, 0xe5, 0xc8, 0xab, 0xea, 0xfc, + 0xca, 0x83, 0x52, 0x49, 0x9d, 0xdf, 0x22, 0xef, 0x5e, 0xec, 0x0c, 0xbf, 0x09, 0x53, 0x61, 0x0a, + 0x41, 0x68, 0xc9, 0x8b, 0x56, 0xe1, 0xa9, 0x9f, 0xda, 0x89, 0xf1, 0x30, 0x21, 0x99, 0x4e, 0x71, + 0x14, 0x9e, 0x49, 0x8a, 0x63, 0x05, 0xe6, 0x58, 0xe0, 0xfa, 0xb4, 0x15, 0x4a, 0xac, 0xaf, 0x54, + 0x48, 0x62, 0xa0, 0x73, 0xcd, 0x14, 0x1f, 0x07, 0x5a, 0x90, 0x6d, 0xb8, 0x14, 0x76, 0x22, 0x3e, + 0xc0, 0xca, 0xbc, 0x40, 0xba, 0xaa, 0x90, 0x2e, 0x3d, 0xcc, 0x90, 0xc1, 0xcc, 0x96, 0xe4, 0x75, + 0xc8, 0x7b, 0x1d, 0x93, 0x51, 0x95, 0xd4, 0x08, 0x63, 0xd7, 0xfc, 0x36, 0x27, 0x3e, 0x39, 0xaa, + 0x96, 0xf8, 0xb4, 0x8b, 0x1f, 0x28, 0x05, 0xc9, 0x0d, 0x80, 0x5d, 0xb7, 0xef, 0xb4, 0x4c, 0xff, + 0x70, 0x7d, 0x45, 0x44, 0x32, 0xb1, 0xa7, 0xd4, 0x86, 0xe6, 0x60, 0x4c, 0x8a, 0x1b, 0xcc, 0x9e, + 0x34, 0x1d, 0x2a, 0x37, 0xa1, 0x0d, 0xa6, 0xb6, 0x28, 0x8a, 0x4f, 0xde, 0x83, 0x92, 0xc8, 0x1e, + 0xd2, 0x56, 0x3d, 0x50, 0x09, 0x8a, 0xb3, 0xa4, 0xed, 0xb4, 0x57, 0xd1, 0x0c, 0x41, 0x30, 0xc2, + 0x23, 0xbf, 0x0c, 0xb0, 0x67, 0x3b, 0x36, 0xeb, 0x08, 0xf4, 0xf2, 0x99, 0xd1, 0xf5, 0x38, 0xd7, + 0x34, 0x0a, 0xc6, 0x10, 0x79, 0xcc, 0xe3, 0xb9, 0xad, 0xf5, 0xed, 0xca, 0x94, 0x18, 0xa5, 0x8e, + 0x79, 0xb6, 0x39, 0x11, 0x25, 0x8f, 0x5c, 0x87, 0x62, 0xcb, 0xa4, 0x3d, 0xd7, 0xa1, 0xad, 0xca, + 0x74, 0x94, 0x77, 0x58, 0x51, 0x34, 0xd4, 0x5c, 0xf2, 0x1d, 0x28, 0xd8, 0xc2, 0xe5, 0xab, 0xcc, + 0x88, 0xae, 0x7e, 0x73, 0xb8, 0x4b, 0x41, 0x40, 0x34, 0x80, 0x5b, 0x1c, 0xf9, 0x37, 0x2a, 0x58, + 0x62, 0xc1, 0xa4, 0xdb, 0x0f, 0x84, 0x86, 0x59, 0xa1, 0x61, 0xb8, 0x3c, 0xcb, 0x3d, 0x89, 0x21, + 0x9f, 0xb6, 0xd5, 0x0f, 0x0c, 0x91, 0xf9, 0x78, 0xad, 0x8e, 0xdd, 0x6d, 0xf9, 0xd4, 0xa9, 0xcc, + 0x89, 0x90, 0x4a, 0x8c, 0x77, 0x59, 0xd1, 0x50, 0x73, 0xc9, 0xcf, 0xc1, 0xb4, 0xdb, 0x0f, 0xc4, + 0xbe, 0xe1, 0xdb, 0x8e, 0x55, 0x2e, 0x0a, 0xf1, 0x8b, 0x3c, 0x6c, 0xbb, 0x17, 0x67, 0x60, 0x52, + 0xce, 0x98, 0x81, 0xa9, 0x78, 0x3d, 0x88, 0xf1, 0xfb, 0x63, 0x10, 0xf6, 0xe3, 0xc7, 0xc1, 0x5b, + 0x26, 0x06, 0x14, 0x7c, 0xca, 0xfa, 0xdd, 0x40, 0x19, 0x5b, 0xb1, 0xd6, 0x28, 0x28, 0xa8, 0x38, + 0xc6, 0x01, 0x4c, 0xf3, 0xde, 0x76, 0xbb, 0xb4, 0xdb, 0x0c, 0xa8, 0xc7, 0xc8, 0x1e, 0xe4, 0x19, + 0xff, 0x43, 0xcd, 0xc9, 0x88, 0x2f, 0x5b, 0x01, 0xf5, 0xa2, 0xfd, 0x2e, 0x14, 0xa0, 0x84, 0x37, + 0xfe, 0x60, 0x0c, 0x4a, 0x7a, 0x9e, 0x4e, 0x91, 0x21, 0x7f, 0x19, 0x26, 0x5b, 0x74, 0xcf, 0xe4, + 0xa3, 0x51, 0x8f, 0xbf, 0x7c, 0x5b, 0xad, 0x48, 0x12, 0x86, 0x3c, 0x52, 0x0d, 0x2f, 0x33, 0x39, + 0x64, 0x91, 0xb5, 0x8a, 0xfb, 0x8a, 0x64, 0x1f, 0x4a, 0xe2, 0x8f, 0xb5, 0xb0, 0x50, 0x65, 0xd8, + 0x75, 0x7f, 0x10, 0xa2, 0xc8, 0x5c, 0x80, 0xfe, 0x89, 0x11, 0x7e, 0xaa, 0xc0, 0x24, 0x7f, 0x9a, + 0x02, 0x13, 0x63, 0x0d, 0xb8, 0x61, 0xb8, 0xb5, 0x4c, 0xde, 0x86, 0x22, 0x53, 0x5b, 0x57, 0xcd, + 0xcb, 0x57, 0xf4, 0x23, 0x91, 0xa2, 0x3f, 0x39, 0xaa, 0x4e, 0x0b, 0xe1, 0x90, 0x80, 0xba, 0x89, + 0xb1, 0x04, 0xe5, 0xd8, 0x83, 0x3c, 0x9f, 0x61, 0xfd, 0x98, 0x16, 0x9b, 0xe1, 0x15, 0x33, 0x30, + 0x51, 0x70, 0x8c, 0x27, 0x63, 0x30, 0x87, 0x94, 0xb9, 0x7d, 0xdf, 0xa2, 0xf1, 0xcc, 0xac, 0x69, + 0x89, 0x2a, 0x9d, 0x54, 0x66, 0xb6, 0x2e, 0xa8, 0xa8, 0xb8, 0xe4, 0x9b, 0x30, 0xdd, 0xa3, 0x7e, + 0x5b, 0x1f, 0x36, 0xb5, 0x48, 0x3a, 0xbf, 0xb2, 0x19, 0x67, 0x62, 0x52, 0x96, 0xc7, 0xfb, 0x3d, + 0xd3, 0xb1, 0xf7, 0x28, 0x0b, 0xd2, 0x29, 0x93, 0x4d, 0x45, 0x47, 0x2d, 0x41, 0x6e, 0xc1, 0x45, + 0x46, 0x83, 0x7b, 0x07, 0x0e, 0xf5, 0xf5, 0xbb, 0x8f, 0x58, 0xc9, 0x62, 0xe3, 0xf9, 0xf0, 0x39, + 0xac, 0x99, 0x16, 0xc0, 0xc1, 0x36, 0xe2, 0xf6, 0xed, 0x5b, 0x16, 0x65, 0x6c, 0xd9, 0x75, 0x5a, + 0xb6, 0xae, 0x45, 0x8a, 0xdf, 0xbe, 0x29, 0x3e, 0x0e, 0xb4, 0xe0, 0x28, 0x7b, 0xa6, 0xdd, 0xed, + 0xfb, 0x34, 0x42, 0x29, 0x24, 0x51, 0xd6, 0x52, 0x7c, 0x1c, 0x68, 0x61, 0xbc, 0x0e, 0xd3, 0x48, + 0x03, 0xff, 0x50, 0xcf, 0x49, 0x15, 0xf2, 0x5d, 0xbb, 0x67, 0xcb, 0xe4, 0x4f, 0x5e, 0x6e, 0xe4, + 0xbb, 0x9c, 0x80, 0x92, 0x6e, 0x7c, 0x2f, 0x07, 0x10, 0xd5, 0xd9, 0x90, 0x7d, 0x28, 0xb2, 0x9b, + 0x8d, 0xbe, 0xb5, 0xaf, 0xf3, 0x45, 0x43, 0x3e, 0x2b, 0x28, 0x90, 0xd8, 0x8b, 0xa4, 0xa2, 0xa0, + 0x56, 0xf0, 0x65, 0x55, 0x18, 0x7f, 0x39, 0x0e, 0xba, 0x15, 0x5f, 0x5c, 0xea, 0xb4, 0x3c, 0xd7, + 0x76, 0x82, 0xf4, 0x5b, 0xe7, 0xaa, 0xa2, 0xa3, 0x96, 0xe0, 0xfb, 0x6d, 0x57, 0x0e, 0x62, 0x2c, + 0xb9, 0xdf, 0x54, 0x1f, 0x14, 0x97, 0xcb, 0xf9, 0xb4, 0xcd, 0xe7, 0x7a, 0x3c, 0x29, 0x87, 0x82, + 0x8a, 0x8a, 0xcb, 0xaf, 0x99, 0x30, 0x61, 0xaa, 0xf6, 0x88, 0xb8, 0x66, 0xc2, 0xdc, 0x2a, 0x6a, + 0x2e, 0xe9, 0xc0, 0xac, 0x29, 0x96, 0x36, 0x4a, 0x02, 0x9f, 0x29, 0x9f, 0x1d, 0xd5, 0x78, 0x24, + 0x51, 0x30, 0x0d, 0xcb, 0x35, 0xb1, 0xa8, 0xf9, 0xd9, 0xd3, 0xda, 0x5a, 0x53, 0x33, 0x89, 0x82, + 0x69, 0x58, 0xee, 0x61, 0xf9, 0x6e, 0x97, 0xd6, 0x71, 0x4b, 0x79, 0x72, 0xda, 0xc3, 0x42, 0x49, + 0xc6, 0x90, 0x6f, 0xfc, 0x76, 0x0e, 0x66, 0x9a, 0x96, 0x6f, 0x7b, 0x81, 0x3e, 0xfb, 0x5b, 0xa2, + 0x38, 0x27, 0x30, 0xb9, 0xef, 0xa3, 0xf6, 0xd4, 0x8b, 0x27, 0xe4, 0xd3, 0xa4, 0x50, 0xa2, 0x76, + 0x47, 0x92, 0x30, 0x82, 0x10, 0x51, 0xaf, 0xb0, 0x2e, 0xe9, 0xb5, 0x6d, 0x0a, 0x2a, 0x2a, 0xae, + 0xf1, 0xfd, 0x1c, 0x14, 0xf5, 0xeb, 0xd5, 0x4b, 0x90, 0x17, 0x8f, 0x22, 0x6a, 0xef, 0xe8, 0xcb, + 0x64, 0x99, 0x13, 0x51, 0xf2, 0xb8, 0x90, 0x70, 0xe7, 0x14, 0x70, 0xec, 0xc6, 0x31, 0xfd, 0x00, + 0x25, 0x8f, 0x6f, 0xda, 0xf0, 0x91, 0x3b, 0xb6, 0x69, 0x57, 0x9d, 0x16, 0x72, 0xba, 0x28, 0x36, + 0x71, 0xfd, 0x9e, 0x19, 0xa4, 0x63, 0xf2, 0x35, 0x41, 0x45, 0xc5, 0x35, 0xde, 0x85, 0x59, 0xf5, + 0x30, 0xae, 0x27, 0xea, 0x55, 0x28, 0xb6, 0xfa, 0xbe, 0x19, 0x33, 0x93, 0x7a, 0x8b, 0xaf, 0x28, + 0x3a, 0x6a, 0x09, 0x63, 0x1a, 0xca, 0xb1, 0x22, 0x58, 0xe3, 0xbf, 0xaf, 0x80, 0x7e, 0xe3, 0xfd, + 0xc9, 0x4b, 0xf1, 0x50, 0x61, 0x94, 0xa5, 0x3d, 0xe2, 0xfc, 0xe8, 0x1e, 0xb1, 0x5e, 0xf7, 0x94, + 0x57, 0xdc, 0x8e, 0xbc, 0xe2, 0xc2, 0x39, 0x78, 0xc5, 0x51, 0x3d, 0x4c, 0xda, 0x33, 0xfe, 0x9d, + 0x1c, 0x4c, 0x39, 0x3c, 0xea, 0x56, 0xe7, 0xbd, 0x32, 0x29, 0x3c, 0xb1, 0x7b, 0x23, 0x4d, 0x62, + 0x6d, 0x2b, 0x86, 0x28, 0x13, 0x0e, 0x3a, 0x2a, 0x8e, 0xb3, 0x30, 0xa1, 0x9a, 0xac, 0x41, 0xd1, + 0xdc, 0xe3, 0xa1, 0x4c, 0x70, 0xa8, 0x1e, 0xab, 0xaf, 0x66, 0x59, 0x80, 0xba, 0x92, 0x91, 0xc6, + 0x35, 0xfc, 0x85, 0xba, 0x2d, 0xbf, 0x9d, 0x74, 0x39, 0x4f, 0x69, 0x84, 0xdb, 0x29, 0xcc, 0x9c, + 0xc4, 0x1c, 0x04, 0x45, 0x89, 0x55, 0xf7, 0x18, 0x50, 0x90, 0xc1, 0x92, 0x88, 0x14, 0x8b, 0xd2, + 0xef, 0x95, 0x81, 0x14, 0x2a, 0x0e, 0x69, 0x87, 0x6e, 0x6e, 0x59, 0x4c, 0x6e, 0x63, 0x68, 0xd7, + 0x5f, 0x7b, 0xce, 0xd9, 0x7e, 0x2e, 0xb9, 0x13, 0x37, 0xa2, 0x53, 0xa7, 0x31, 0xa2, 0xd3, 0x27, + 0x1a, 0xd0, 0x36, 0x14, 0x98, 0x30, 0xd1, 0x22, 0x42, 0x2c, 0xdf, 0x58, 0x1e, 0xee, 0x86, 0x4f, + 0x58, 0x79, 0x39, 0x3b, 0x92, 0x86, 0x0a, 0x9e, 0xb8, 0x50, 0xf4, 0x95, 0x27, 0xa8, 0x82, 0xcc, + 0xe1, 0x72, 0xd4, 0x69, 0x77, 0x52, 0xee, 0x8f, 0x90, 0x8a, 0x5a, 0x09, 0x79, 0x0f, 0xc6, 0x5b, + 0x66, 0x5b, 0x85, 0x9b, 0xdf, 0x1a, 0xfa, 0x59, 0x3f, 0x54, 0x23, 0xaa, 0x4f, 0x57, 0xea, 0xb7, + 0x90, 0xa3, 0x92, 0xfd, 0xa8, 0xc2, 0x69, 0x6e, 0x84, 0xa2, 0xce, 0x94, 0xd5, 0x97, 0x01, 0xc8, + 0x40, 0x8d, 0xd4, 0x2a, 0x4c, 0x3e, 0x76, 0xbb, 0xfd, 0x9e, 0x8a, 0x53, 0xcb, 0x37, 0x16, 0xb2, + 0x56, 0xfb, 0x81, 0x10, 0x89, 0x8c, 0x80, 0xfc, 0xcd, 0x30, 0x6c, 0x4b, 0x7e, 0x3d, 0x07, 0x33, + 0xfc, 0xe8, 0xe8, 0x7d, 0xc0, 0x2a, 0x64, 0x84, 0x9d, 0x7a, 0x9f, 0x51, 0x3f, 0xda, 0x61, 0xcf, + 0x29, 0xb5, 0x33, 0xeb, 0x09, 0x0d, 0x98, 0xd2, 0x48, 0x3c, 0x28, 0x32, 0xbb, 0x45, 0x2d, 0xd3, + 0x67, 0x95, 0xf9, 0x73, 0xd3, 0x1e, 0x39, 0x96, 0x0a, 0x1b, 0xb5, 0x16, 0xf2, 0x1b, 0xa2, 0x10, + 0x57, 0x95, 0xa2, 0xab, 0xcf, 0x03, 0x2e, 0x9d, 0xe7, 0xe7, 0x01, 0xf3, 0xb2, 0x0a, 0x37, 0xa1, + 0x01, 0xd3, 0x2a, 0xc9, 0x3d, 0xb8, 0x2c, 0xeb, 0xc6, 0xd2, 0x65, 0x6e, 0x97, 0xc5, 0x2b, 0xc2, + 0xf3, 0xc7, 0x47, 0xd5, 0xcb, 0xf5, 0x2c, 0x01, 0xcc, 0x6e, 0x47, 0x3e, 0x82, 0x69, 0x3f, 0xee, + 0xde, 0x57, 0x9e, 0x1b, 0xe1, 0x09, 0x3b, 0x11, 0x28, 0xc8, 0x3c, 0x48, 0x82, 0x84, 0x49, 0x5d, + 0xe4, 0x0d, 0x28, 0x7b, 0xca, 0x52, 0xd9, 0xac, 0x57, 0xb9, 0x22, 0xc6, 0x20, 0x6e, 0xd4, 0xed, + 0x88, 0x8c, 0x71, 0x19, 0x72, 0x1f, 0xca, 0x81, 0xdb, 0xa5, 0xbe, 0x4a, 0xb7, 0x57, 0xc4, 0xe2, + 0x2f, 0x66, 0xed, 0xe4, 0x1d, 0x2d, 0x16, 0x25, 0x73, 0x23, 0x1a, 0xc3, 0x38, 0x0e, 0x8f, 0x12, + 0xc3, 0xaa, 0x46, 0x5f, 0x84, 0xc4, 0xcf, 0x27, 0xa3, 0xc4, 0x66, 0x9c, 0x89, 0x49, 0x59, 0x1e, + 0xf7, 0x79, 0xbe, 0xed, 0xfa, 0x76, 0x70, 0xb8, 0xdc, 0x35, 0x19, 0x13, 0x00, 0x0b, 0x02, 0x40, + 0xc7, 0x7d, 0xdb, 0x69, 0x01, 0x1c, 0x6c, 0xc3, 0x63, 0x82, 0x90, 0x58, 0x79, 0x41, 0x44, 0x57, + 0xc2, 0x2c, 0x85, 0x6d, 0x51, 0x73, 0x4f, 0x28, 0xe8, 0xb9, 0x3a, 0x4c, 0x41, 0x0f, 0x69, 0xc1, + 0x55, 0xb3, 0x1f, 0xb8, 0x3d, 0x4e, 0x48, 0x36, 0xd9, 0x71, 0xf7, 0xa9, 0x53, 0xb9, 0x26, 0xee, + 0xaa, 0x6b, 0xc7, 0x47, 0xd5, 0xab, 0xf5, 0x2f, 0x90, 0xc3, 0x2f, 0x44, 0x21, 0x3d, 0x28, 0x52, + 0x55, 0x94, 0x54, 0xf9, 0xca, 0x08, 0x97, 0x44, 0xb2, 0xb2, 0x49, 0x4e, 0x50, 0x48, 0x43, 0xad, + 0x82, 0xec, 0x40, 0xb9, 0xe3, 0xb2, 0xa0, 0xde, 0xb5, 0x4d, 0x46, 0x59, 0xe5, 0x45, 0xb1, 0x4f, + 0x32, 0xef, 0xb7, 0xdb, 0xa1, 0x58, 0xb4, 0x4d, 0x6e, 0x47, 0x2d, 0x31, 0x0e, 0x43, 0xa8, 0x08, + 0x90, 0xfa, 0x62, 0xd5, 0x5c, 0x27, 0xa0, 0x1f, 0x06, 0x95, 0x45, 0x31, 0x96, 0x57, 0xb2, 0x90, + 0xb7, 0xdd, 0x56, 0x33, 0x29, 0x2d, 0x4f, 0x79, 0x8a, 0x88, 0x69, 0x4c, 0xf2, 0x26, 0x4c, 0x79, + 0x6e, 0xab, 0xe9, 0x51, 0x6b, 0xdb, 0x0c, 0xac, 0x4e, 0xa5, 0x9a, 0x7c, 0x2c, 0xd8, 0x8e, 0xf1, + 0x30, 0x21, 0xb9, 0xf0, 0x2e, 0x5c, 0x1c, 0xf0, 0xa7, 0xce, 0xf4, 0xb2, 0xf2, 0x67, 0x39, 0x88, + 0xbb, 0xb3, 0xe7, 0xee, 0xf7, 0xdf, 0x82, 0x8b, 0xea, 0xf3, 0x3e, 0x7e, 0xd9, 0x76, 0xfb, 0x41, + 0x18, 0x29, 0xc7, 0x72, 0x24, 0x98, 0x16, 0xc0, 0xc1, 0x36, 0xc6, 0x9f, 0xe7, 0x60, 0x3a, 0x61, + 0xbe, 0xcf, 0x3d, 0x2a, 0x5c, 0x03, 0xd2, 0xb3, 0x7d, 0xdf, 0xf5, 0xe5, 0x1d, 0xb8, 0xc9, 0xf7, + 0x32, 0x53, 0x05, 0xff, 0xa2, 0x28, 0x63, 0x73, 0x80, 0x8b, 0x19, 0x2d, 0x8c, 0xbf, 0xca, 0x41, + 0x94, 0x84, 0xd3, 0x95, 0x48, 0xb9, 0x13, 0x2b, 0x91, 0x5e, 0x85, 0xe2, 0x23, 0xe6, 0x3a, 0xdb, + 0x51, 0xbd, 0x92, 0x9e, 0xd0, 0x3b, 0xcd, 0x7b, 0x5b, 0x42, 0x52, 0x4b, 0x08, 0xe9, 0x0f, 0xd6, + 0xec, 0x6e, 0x30, 0x58, 0xd5, 0x73, 0xe7, 0x17, 0x24, 0x1d, 0xb5, 0x04, 0x59, 0x82, 0x92, 0xce, + 0xfb, 0xaa, 0x70, 0x52, 0x4f, 0x82, 0x4e, 0x7a, 0x62, 0x24, 0x63, 0xfc, 0x60, 0x0c, 0x8a, 0x3f, + 0x6a, 0x5f, 0x2f, 0xec, 0xa7, 0xbe, 0x5e, 0x58, 0x1e, 0x31, 0x95, 0xfc, 0x45, 0x5f, 0x2e, 0x18, + 0x9f, 0xe6, 0x60, 0xea, 0x19, 0x7e, 0x40, 0xb0, 0x9b, 0xfc, 0x80, 0xe0, 0xed, 0x91, 0x86, 0x76, + 0xc2, 0xc7, 0x03, 0x7f, 0x3b, 0x1f, 0x0d, 0x89, 0x4f, 0x2b, 0x71, 0xa0, 0x14, 0x1e, 0xf0, 0x30, + 0x3d, 0xff, 0xf6, 0x48, 0x41, 0x61, 0xb4, 0x29, 0x43, 0x0a, 0xc3, 0x48, 0x05, 0xb9, 0x01, 0x40, + 0xb9, 0x65, 0x93, 0xb9, 0xbb, 0xb1, 0x64, 0xf6, 0x7a, 0x55, 0x73, 0x30, 0x26, 0xf5, 0xec, 0x13, + 0x0e, 0xd9, 0x57, 0xf4, 0xc4, 0x53, 0xb9, 0xa2, 0xaf, 0x9e, 0xfb, 0x15, 0xfd, 0xe2, 0xd3, 0xbf, + 0xa2, 0x63, 0x01, 0x49, 0x7e, 0x84, 0x80, 0xe4, 0x23, 0xb8, 0x24, 0xff, 0x5c, 0xee, 0x9a, 0x76, + 0x4f, 0xef, 0x17, 0x55, 0x52, 0xf4, 0xd5, 0xcc, 0x8b, 0x99, 0xfa, 0xcc, 0x66, 0x01, 0x75, 0x82, + 0x07, 0x51, 0xcb, 0xe8, 0x3d, 0xfa, 0x41, 0x06, 0x1c, 0x66, 0x2a, 0x49, 0x7b, 0xb0, 0x93, 0xa7, + 0xf0, 0x60, 0xbf, 0x9f, 0x83, 0xcb, 0x66, 0xd6, 0x37, 0x87, 0x2a, 0x8f, 0x71, 0x67, 0xa4, 0x78, + 0x22, 0x81, 0xa8, 0xe2, 0x81, 0x2c, 0x16, 0x66, 0xf7, 0x81, 0xbc, 0x1c, 0x85, 0xa4, 0x25, 0xb1, + 0xa9, 0xb2, 0x83, 0xc9, 0xef, 0xa6, 0x53, 0x41, 0x20, 0x66, 0xbb, 0x39, 0xb2, 0xc1, 0x3e, 0x87, + 0x74, 0x50, 0x79, 0x84, 0x74, 0x50, 0x2a, 0xbc, 0x98, 0x3a, 0xa7, 0xf0, 0xc2, 0x81, 0x39, 0xbb, + 0x67, 0xb6, 0xe9, 0x76, 0xbf, 0xdb, 0x95, 0x19, 0x70, 0x56, 0x99, 0x16, 0xd8, 0x99, 0x75, 0xa0, + 0x3c, 0xdc, 0xeb, 0xa6, 0x3f, 0x20, 0xd2, 0x8f, 0x36, 0xeb, 0x29, 0x24, 0x1c, 0xc0, 0xe6, 0xdb, + 0x92, 0xbb, 0xad, 0x5b, 0x34, 0xe0, 0xb3, 0x2d, 0x32, 0x25, 0xea, 0xdb, 0xea, 0xdb, 0x11, 0x19, + 0xe3, 0x32, 0x64, 0x03, 0x4a, 0x2d, 0x87, 0xa9, 0x6f, 0xb8, 0x66, 0x85, 0x95, 0x7a, 0x8d, 0xdb, + 0xb6, 0x95, 0xad, 0xa6, 0xfe, 0x6e, 0xeb, 0xea, 0xe0, 0x7f, 0x1e, 0x51, 0xd3, 0x7c, 0x8c, 0xda, + 0x93, 0x4d, 0x01, 0xa6, 0x8a, 0xa2, 0x65, 0x6a, 0xe3, 0xda, 0x09, 0x1e, 0xf2, 0xca, 0x56, 0x58, + 0xc3, 0x3d, 0xad, 0xd4, 0xa9, 0x52, 0xe7, 0x08, 0x81, 0xbc, 0x02, 0x05, 0xd7, 0x59, 0xfd, 0xd0, + 0x0e, 0x2a, 0x17, 0x93, 0x19, 0xf0, 0x7b, 0x82, 0x8a, 0x8a, 0x4b, 0xee, 0xc3, 0x95, 0x20, 0xe8, + 0xaa, 0xd0, 0xb6, 0xbe, 0x17, 0x50, 0x3f, 0x2c, 0x7c, 0x10, 0xc5, 0x2b, 0x79, 0xf9, 0x19, 0xd8, + 0xce, 0xce, 0xdd, 0x2c, 0x11, 0x3c, 0xa9, 0xed, 0xc9, 0x41, 0xf7, 0xfc, 0x90, 0x41, 0x77, 0x3c, + 0xce, 0xbb, 0xf4, 0x85, 0x71, 0xde, 0x40, 0x5c, 0x7a, 0xf9, 0x0c, 0x71, 0xe9, 0x7b, 0xa2, 0xbc, + 0xe3, 0xd6, 0xb2, 0x8a, 0xe9, 0xdf, 0x1a, 0x2e, 0x95, 0xc8, 0x11, 0xe4, 0x2b, 0x9f, 0xf8, 0x13, + 0x25, 0x26, 0xd9, 0x86, 0x4b, 0x9e, 0xdb, 0x1a, 0x08, 0x6b, 0x45, 0x10, 0x1f, 0xab, 0xed, 0xd9, + 0xce, 0x90, 0xc1, 0xcc, 0x96, 0xc2, 0x96, 0x46, 0xf4, 0x4a, 0x45, 0x4c, 0x8c, 0xb4, 0xa5, 0x11, + 0x19, 0xe3, 0x32, 0xe9, 0x28, 0xef, 0xf9, 0xa7, 0x16, 0xe5, 0x2d, 0x3c, 0x83, 0x28, 0xef, 0x85, + 0x67, 0x17, 0xe5, 0x7d, 0x56, 0x84, 0x99, 0xd4, 0x47, 0x8d, 0xba, 0xb2, 0x2a, 0x77, 0xda, 0xca, + 0xaa, 0x44, 0xe9, 0xd3, 0xd8, 0x53, 0x2d, 0x7d, 0x1a, 0x3f, 0xf7, 0xd2, 0xa7, 0x58, 0x89, 0xd7, + 0xc4, 0x97, 0x94, 0x78, 0xd5, 0x61, 0xd6, 0x72, 0x7b, 0x9e, 0xf8, 0x8a, 0x42, 0x15, 0xfa, 0xc8, + 0xc7, 0x78, 0xfd, 0xdc, 0xb9, 0x9c, 0x64, 0x63, 0x5a, 0x9e, 0x30, 0xc8, 0x3b, 0xa2, 0x61, 0x61, + 0x84, 0xf2, 0xd0, 0xe4, 0x82, 0x89, 0x8b, 0x52, 0x55, 0x68, 0x6a, 0x37, 0x5d, 0xaa, 0x97, 0xba, + 0xb8, 0xa3, 0x31, 0x9b, 0x2c, 0xc9, 0x63, 0x95, 0x92, 0xd0, 0xff, 0x8b, 0xe7, 0xa1, 0x3f, 0x59, + 0xff, 0xa7, 0x7a, 0x12, 0xbd, 0x00, 0x27, 0xb9, 0x98, 0xee, 0x09, 0xf1, 0xe1, 0x39, 0x2f, 0xcb, + 0x0d, 0x63, 0xea, 0x55, 0xe9, 0x8b, 0x9c, 0xc1, 0x45, 0xa5, 0xe5, 0xb9, 0x4c, 0x47, 0x8e, 0xe1, + 0x09, 0xc8, 0xf1, 0xfa, 0xb1, 0xe2, 0xd3, 0xaa, 0x1f, 0x5b, 0x38, 0x94, 0xa5, 0xa9, 0x27, 0x56, + 0xb5, 0xde, 0x4f, 0x56, 0x9a, 0xbf, 0x3b, 0xe4, 0x7f, 0x27, 0x14, 0x16, 0xbf, 0xc6, 0x2b, 0x6a, + 0x7f, 0x2d, 0x07, 0x97, 0xb2, 0x96, 0x25, 0xa3, 0x17, 0xcd, 0x64, 0x2f, 0x46, 0x0b, 0xd7, 0xe2, + 0xa6, 0xe5, 0xdf, 0xf3, 0xb1, 0xe0, 0x30, 0xa0, 0xde, 0x4f, 0x5e, 0x8e, 0x87, 0x7a, 0x39, 0x4e, + 0x7c, 0x2d, 0x9c, 0x7f, 0x86, 0x5f, 0x0b, 0x17, 0x86, 0xf8, 0x5a, 0x78, 0xf2, 0x59, 0x7e, 0x2d, + 0x5c, 0x3c, 0xe5, 0xd7, 0xc2, 0xa5, 0xa7, 0xff, 0xb5, 0xf0, 0xe7, 0x39, 0x98, 0x4b, 0x17, 0x2f, + 0x3f, 0x83, 0x24, 0xd9, 0x7e, 0x22, 0x49, 0xb6, 0x3e, 0x92, 0x31, 0x0f, 0xbb, 0x7d, 0x52, 0xb2, + 0xcc, 0xf8, 0x61, 0x0e, 0x06, 0x0a, 0xb4, 0x9f, 0x41, 0x1e, 0xeb, 0x51, 0x32, 0x8f, 0xb5, 0x7a, + 0x2e, 0x83, 0x3c, 0x21, 0x9f, 0xf5, 0x3f, 0x19, 0x43, 0xfc, 0x3f, 0xc9, 0x6b, 0x25, 0x4c, 0xdb, + 0xd8, 0xd3, 0x37, 0x6d, 0x8d, 0xda, 0x27, 0x9f, 0x2f, 0x5e, 0xf8, 0xf4, 0xf3, 0xc5, 0x0b, 0x9f, + 0x7d, 0xbe, 0x78, 0xe1, 0xe3, 0xe3, 0xc5, 0xdc, 0x27, 0xc7, 0x8b, 0xb9, 0x4f, 0x8f, 0x17, 0x73, + 0x9f, 0x1d, 0x2f, 0xe6, 0x7e, 0x78, 0xbc, 0x98, 0xfb, 0xbd, 0x7f, 0x5d, 0xbc, 0xf0, 0x4b, 0xc5, + 0x10, 0xf7, 0x7f, 0x03, 0x00, 0x00, 0xff, 0xff, 0x31, 0x26, 0xd6, 0xa8, 0xe7, 0x50, 0x00, 0x00, } func (m *ArchiveStrategy) Marshal() (dAtA []byte, err error) { @@ -2407,7 +2405,7 @@ func (m *CronWorkflowOptions) MarshalToSizedBuffer(dAtA []byte) (int, error) { if m.StartingDeadlineSeconds != nil { i = encodeVarintGenerated(dAtA, i, uint64(*m.StartingDeadlineSeconds)) i-- - dAtA[i] = 0x28 + dAtA[i] = 0x20 } i-- if m.Suspend { @@ -2416,16 +2414,11 @@ func (m *CronWorkflowOptions) MarshalToSizedBuffer(dAtA []byte) (int, error) { dAtA[i] = 0 } i-- - dAtA[i] = 0x20 + dAtA[i] = 0x18 i -= len(m.ConcurrencyPolicy) copy(dAtA[i:], m.ConcurrencyPolicy) i = encodeVarintGenerated(dAtA, i, uint64(len(m.ConcurrencyPolicy))) i-- - dAtA[i] = 0x1a - i -= len(m.RuntimeGenerateName) - copy(dAtA[i:], m.RuntimeGenerateName) - i = encodeVarintGenerated(dAtA, i, uint64(len(m.RuntimeGenerateName))) - i-- dAtA[i] = 0x12 i -= len(m.Schedule) copy(dAtA[i:], m.Schedule) @@ -5532,8 +5525,6 @@ func (m *CronWorkflowOptions) Size() (n int) { _ = l l = len(m.Schedule) n += 1 + l + sovGenerated(uint64(l)) - l = len(m.RuntimeGenerateName) - n += 1 + l + sovGenerated(uint64(l)) l = len(m.ConcurrencyPolicy) n += 1 + l + sovGenerated(uint64(l)) n += 2 @@ -6733,7 +6724,6 @@ func (this *CronWorkflowOptions) String() string { } s := strings.Join([]string{`&CronWorkflowOptions{`, `Schedule:` + fmt.Sprintf("%v", this.Schedule) + `,`, - `RuntimeGenerateName:` + fmt.Sprintf("%v", this.RuntimeGenerateName) + `,`, `ConcurrencyPolicy:` + fmt.Sprintf("%v", this.ConcurrencyPolicy) + `,`, `Suspend:` + fmt.Sprintf("%v", this.Suspend) + `,`, `StartingDeadlineSeconds:` + valueToStringGenerated(this.StartingDeadlineSeconds) + `,`, @@ -9116,38 +9106,6 @@ func (m *CronWorkflowOptions) Unmarshal(dAtA []byte) error { m.Schedule = string(dAtA[iNdEx:postIndex]) iNdEx = postIndex case 2: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field RuntimeGenerateName", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowGenerated - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - stringLen |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - intStringLen := int(stringLen) - if intStringLen < 0 { - return ErrInvalidLengthGenerated - } - postIndex := iNdEx + intStringLen - if postIndex < 0 { - return ErrInvalidLengthGenerated - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.RuntimeGenerateName = string(dAtA[iNdEx:postIndex]) - iNdEx = postIndex - case 3: if wireType != 2 { return fmt.Errorf("proto: wrong wireType = %d for field ConcurrencyPolicy", wireType) } @@ -9179,7 +9137,7 @@ func (m *CronWorkflowOptions) Unmarshal(dAtA []byte) error { } m.ConcurrencyPolicy = ConcurrencyPolicy(dAtA[iNdEx:postIndex]) iNdEx = postIndex - case 4: + case 3: if wireType != 0 { return fmt.Errorf("proto: wrong wireType = %d for field Suspend", wireType) } @@ -9199,7 +9157,7 @@ func (m *CronWorkflowOptions) Unmarshal(dAtA []byte) error { } } m.Suspend = bool(v != 0) - case 5: + case 4: if wireType != 0 { return fmt.Errorf("proto: wrong wireType = %d for field StartingDeadlineSeconds", wireType) } diff --git a/pkg/apis/workflow/v1alpha1/generated.proto b/pkg/apis/workflow/v1alpha1/generated.proto index dbc0b8a97d45..bfffaf007c7a 100644 --- a/pkg/apis/workflow/v1alpha1/generated.proto +++ b/pkg/apis/workflow/v1alpha1/generated.proto @@ -149,18 +149,15 @@ message CronWorkflowOptions { // Schedule is a schedule to run the Workflow in Cron format optional string schedule = 1; - // RuntimeGenerateName is the name generator the Workflow will be run with. Mutually exclusive with RuntimeName - optional string runtimeGenerateName = 2; - // ConcurrencyPolicy is the K8s-style concurrency policy that will be used - optional string concurrencyPolicy = 3; + optional string concurrencyPolicy = 2; // Suspend is a flag that will stop new CronWorkflows from running if set to true - optional bool suspend = 4; + optional bool suspend = 3; // StartingDeadlineSeconds is the K8s-style deadline that will limit the time a CronWorkflow will be run after its // original scheduled time if it is missed. - optional int64 startingDeadlineSeconds = 5; + optional int64 startingDeadlineSeconds = 4; } message CronWorkflowStatus { diff --git a/pkg/apis/workflow/v1alpha1/openapi_generated.go b/pkg/apis/workflow/v1alpha1/openapi_generated.go index 3785fa9fa4c3..36b8eae0341c 100644 --- a/pkg/apis/workflow/v1alpha1/openapi_generated.go +++ b/pkg/apis/workflow/v1alpha1/openapi_generated.go @@ -532,13 +532,6 @@ func schema_pkg_apis_workflow_v1alpha1_CronWorkflowOptions(ref common.ReferenceC Format: "", }, }, - "runtimeGenerateName": { - SchemaProps: spec.SchemaProps{ - Description: "RuntimeGenerateName is the name generator the Workflow will be run with. Mutually exclusive with RuntimeName", - Type: []string{"string"}, - Format: "", - }, - }, "concurrencyPolicy": { SchemaProps: spec.SchemaProps{ Description: "ConcurrencyPolicy is the K8s-style concurrency policy that will be used", @@ -561,7 +554,7 @@ func schema_pkg_apis_workflow_v1alpha1_CronWorkflowOptions(ref common.ReferenceC }, }, }, - Required: []string{"schedule", "runtimeGenerateName"}, + Required: []string{"schedule"}, }, }, } diff --git a/workflow/common/util.go b/workflow/common/util.go index 96b9c359c778..23226ea48065 100644 --- a/workflow/common/util.go +++ b/workflow/common/util.go @@ -655,11 +655,7 @@ func CastToWorkflow(cronWf *wfv1.CronWorkflow) (*wfv1.Workflow, error) { } newObjectMeta := metav1.ObjectMeta{} - if cronWf.Options.RuntimeGenerateName != "" { - newObjectMeta.GenerateName = cronWf.Options.RuntimeGenerateName - } else { - return nil, fmt.Errorf("CronWorkflow should have runtimeGenerateName defined") - } + newObjectMeta.GenerateName = cronWf.Name + "-" newObjectMeta.Labels = make(map[string]string) newObjectMeta.Labels[LabelCronWorkflow] = "true" diff --git a/workflow/validate/validate.go b/workflow/validate/validate.go index b07b92d6a616..42d0f99b715c 100644 --- a/workflow/validate/validate.go +++ b/workflow/validate/validate.go @@ -191,10 +191,6 @@ func ValidateCronWorkflow(wfClientset wfclientset.Interface, namespace string, c return errors.Errorf(errors.CodeBadRequest, "cron schedule is malformed: %s", err) } - if cronWf.Options.RuntimeGenerateName == "" { - return errors.Errorf(errors.CodeBadRequest, "runtimeGenerateName is empty") - } - switch cronWf.Options.ConcurrencyPolicy { case wfv1.AllowConcurrent, wfv1.ForbidConcurrent, wfv1.ReplaceConcurrent, "": // Do nothing From 9ac51b49a11f937a4f444dbd9209b3d6358a8301 Mon Sep 17 00:00:00 2001 From: Simon Behar Date: Mon, 18 Nov 2019 10:18:14 -0800 Subject: [PATCH 26/44] MVP Done --- cmd/argo/commands/cron/get.go | 11 +++++++++++ cmd/argo/commands/cron/list.go | 8 +++++++- 2 files changed, 18 insertions(+), 1 deletion(-) diff --git a/cmd/argo/commands/cron/get.go b/cmd/argo/commands/cron/get.go index 0e77151af697..ee9f146ec700 100644 --- a/cmd/argo/commands/cron/get.go +++ b/cmd/argo/commands/cron/get.go @@ -5,6 +5,7 @@ import ( "fmt" "log" "os" + "strings" wfv1 "github.com/argoproj/argo/pkg/apis/workflow/v1alpha1" "github.com/argoproj/pkg/humanize" @@ -71,4 +72,14 @@ func printCronWorkflowTemplate(wf *wfv1.CronWorkflow, outFmt string) { if wf.Options.ConcurrencyPolicy != "" { fmt.Printf(fmtStr, "ConcurrencyPolicy:", wf.Options.ConcurrencyPolicy) } + if wf.Status.LastScheduledTime != nil{ + fmt.Printf(fmtStr, "LastScheduledTime:", humanize.Timestamp(wf.Status.LastScheduledTime.Time)) + } + if len(wf.Status.Active) > 0 { + var activeWfNames []string + for _, activeWf := range wf.Status.Active { + activeWfNames = append(activeWfNames, activeWf.Name) + } + fmt.Printf(fmtStr, "Active Workflows:", strings.Join(activeWfNames, ", ")) + } } diff --git a/cmd/argo/commands/cron/list.go b/cmd/argo/commands/cron/list.go index 1d37d0287093..5088a21e4a8e 100644 --- a/cmd/argo/commands/cron/list.go +++ b/cmd/argo/commands/cron/list.go @@ -72,7 +72,13 @@ func printTable(wfList []wfv1.CronWorkflow, listArgs *listFlags) { if listArgs.allNamespaces { fmt.Fprintf(w, "%s\t", wf.ObjectMeta.Namespace) } - fmt.Fprintf(w, "%s\t%s\t%s\t%s\t%t", wf.ObjectMeta.Name, humanize.RelativeDurationShort(wf.ObjectMeta.CreationTimestamp.Time, time.Now()), humanize.RelativeDurationShort(wf.Status.LastScheduledTime.Time, time.Now()), wf.Options.Schedule, wf.Options.Suspend) + var cleanLastScheduledTime string + if wf.Status.LastScheduledTime != nil { + cleanLastScheduledTime = humanize.RelativeDurationShort(wf.Status.LastScheduledTime.Time, time.Now()) + } else { + cleanLastScheduledTime = "N/A" + } + fmt.Fprintf(w, "%s\t%s\t%s\t%s\t%t", wf.ObjectMeta.Name, humanize.RelativeDurationShort(wf.ObjectMeta.CreationTimestamp.Time, time.Now()), cleanLastScheduledTime, wf.Options.Schedule, wf.Options.Suspend) fmt.Fprintf(w, "\n") } _ = w.Flush() From 220f2eb1b2769bdac284e190bdbe43363c68d93b Mon Sep 17 00:00:00 2001 From: Simon Behar Date: Mon, 18 Nov 2019 10:18:45 -0800 Subject: [PATCH 27/44] Lint --- cmd/argo/commands/cron/get.go | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/cmd/argo/commands/cron/get.go b/cmd/argo/commands/cron/get.go index ee9f146ec700..6de37bdae9c6 100644 --- a/cmd/argo/commands/cron/get.go +++ b/cmd/argo/commands/cron/get.go @@ -72,8 +72,8 @@ func printCronWorkflowTemplate(wf *wfv1.CronWorkflow, outFmt string) { if wf.Options.ConcurrencyPolicy != "" { fmt.Printf(fmtStr, "ConcurrencyPolicy:", wf.Options.ConcurrencyPolicy) } - if wf.Status.LastScheduledTime != nil{ - fmt.Printf(fmtStr, "LastScheduledTime:", humanize.Timestamp(wf.Status.LastScheduledTime.Time)) + if wf.Status.LastScheduledTime != nil { + fmt.Printf(fmtStr, "LastScheduledTime:", humanize.Timestamp(wf.Status.LastScheduledTime.Time)) } if len(wf.Status.Active) > 0 { var activeWfNames []string From bcc35e8e0efc62f971413e37204122d7775c6bdf Mon Sep 17 00:00:00 2001 From: Simon Behar Date: Tue, 26 Nov 2019 09:26:30 -0800 Subject: [PATCH 28/44] Move Options under Spec and Spec under WorkflowSpec --- api/openapi-spec/swagger.json | 15 +- cmd/argo/commands/cron/get.go | 12 +- cmd/argo/commands/cron/list.go | 2 +- .../workflow/v1alpha1/cron_workflow_types.go | 32 +- pkg/apis/workflow/v1alpha1/generated.pb.go | 801 +++++++++--------- pkg/apis/workflow/v1alpha1/generated.proto | 21 +- .../workflow/v1alpha1/openapi_generated.go | 26 +- .../v1alpha1/zz_generated.deepcopy.go | 10 +- workflow/common/util.go | 2 +- workflow/cron/controller.go | 2 +- workflow/cron/operator.go | 12 +- workflow/validate/validate.go | 10 +- 12 files changed, 496 insertions(+), 449 deletions(-) diff --git a/api/openapi-spec/swagger.json b/api/openapi-spec/swagger.json index 157d2f2abf83..6d60a88eeab3 100644 --- a/api/openapi-spec/swagger.json +++ b/api/openapi-spec/swagger.json @@ -205,8 +205,7 @@ "type": "object", "required": [ "spec", - "status", - "options" + "status" ], "properties": { "apiVersion": { @@ -220,11 +219,8 @@ "metadata": { "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ObjectMeta" }, - "options": { - "$ref": "#/definitions/io.argoproj.workflow.v1alpha1.CronWorkflowOptions" - }, "spec": { - "$ref": "#/definitions/io.argoproj.workflow.v1alpha1.WorkflowSpec" + "$ref": "#/definitions/io.argoproj.workflow.v1alpha1.CronWorkflowSpec" }, "status": { "$ref": "#/definitions/io.argoproj.workflow.v1alpha1.CronWorkflowStatus" @@ -258,8 +254,7 @@ } } }, - "io.argoproj.workflow.v1alpha1.CronWorkflowOptions": { - "description": "CronWorkflowOptions is the schedule of when to run CronWorkflows", + "io.argoproj.workflow.v1alpha1.CronWorkflowSpec": { "type": "object", "required": [ "schedule" @@ -281,6 +276,10 @@ "suspend": { "description": "Suspend is a flag that will stop new CronWorkflows from running if set to true", "type": "boolean" + }, + "workflowSpec": { + "description": "WorkflowSpec is the spec of the workflow to be run", + "$ref": "#/definitions/io.argoproj.workflow.v1alpha1.WorkflowSpec" } } }, diff --git a/cmd/argo/commands/cron/get.go b/cmd/argo/commands/cron/get.go index 6de37bdae9c6..c489315a80c9 100644 --- a/cmd/argo/commands/cron/get.go +++ b/cmd/argo/commands/cron/get.go @@ -64,13 +64,13 @@ func printCronWorkflowTemplate(wf *wfv1.CronWorkflow, outFmt string) { fmt.Printf(fmtStr, "Name:", wf.ObjectMeta.Name) fmt.Printf(fmtStr, "Namespace:", wf.ObjectMeta.Namespace) fmt.Printf(fmtStr, "Created:", humanize.Timestamp(wf.ObjectMeta.CreationTimestamp.Time)) - fmt.Printf(fmtStr, "Schedule:", wf.Options.Schedule) - fmt.Printf(fmtStr, "Suspended:", wf.Options.Suspend) - if wf.Options.StartingDeadlineSeconds != nil { - fmt.Printf(fmtStr, "StartingDeadlineSeconds:", *wf.Options.StartingDeadlineSeconds) + fmt.Printf(fmtStr, "Schedule:", wf.Spec.Schedule) + fmt.Printf(fmtStr, "Suspended:", wf.Spec.Suspend) + if wf.Spec.StartingDeadlineSeconds != nil { + fmt.Printf(fmtStr, "StartingDeadlineSeconds:", *wf.Spec.StartingDeadlineSeconds) } - if wf.Options.ConcurrencyPolicy != "" { - fmt.Printf(fmtStr, "ConcurrencyPolicy:", wf.Options.ConcurrencyPolicy) + if wf.Spec.ConcurrencyPolicy != "" { + fmt.Printf(fmtStr, "ConcurrencyPolicy:", wf.Spec.ConcurrencyPolicy) } if wf.Status.LastScheduledTime != nil { fmt.Printf(fmtStr, "LastScheduledTime:", humanize.Timestamp(wf.Status.LastScheduledTime.Time)) diff --git a/cmd/argo/commands/cron/list.go b/cmd/argo/commands/cron/list.go index 5088a21e4a8e..63d55bfe5b0a 100644 --- a/cmd/argo/commands/cron/list.go +++ b/cmd/argo/commands/cron/list.go @@ -78,7 +78,7 @@ func printTable(wfList []wfv1.CronWorkflow, listArgs *listFlags) { } else { cleanLastScheduledTime = "N/A" } - fmt.Fprintf(w, "%s\t%s\t%s\t%s\t%t", wf.ObjectMeta.Name, humanize.RelativeDurationShort(wf.ObjectMeta.CreationTimestamp.Time, time.Now()), cleanLastScheduledTime, wf.Options.Schedule, wf.Options.Suspend) + fmt.Fprintf(w, "%s\t%s\t%s\t%s\t%t", wf.ObjectMeta.Name, humanize.RelativeDurationShort(wf.ObjectMeta.CreationTimestamp.Time, time.Now()), cleanLastScheduledTime, wf.Spec.Schedule, wf.Spec.Suspend) fmt.Fprintf(w, "\n") } _ = w.Flush() diff --git a/pkg/apis/workflow/v1alpha1/cron_workflow_types.go b/pkg/apis/workflow/v1alpha1/cron_workflow_types.go index 5af51b7f5518..2ca47e6f1418 100644 --- a/pkg/apis/workflow/v1alpha1/cron_workflow_types.go +++ b/pkg/apis/workflow/v1alpha1/cron_workflow_types.go @@ -12,9 +12,8 @@ import ( type CronWorkflow struct { metav1.TypeMeta `json:",inline"` metav1.ObjectMeta `json:"metadata,omitempty" protobuf:"bytes,1,opt,name=metadata"` - Spec WorkflowSpec `json:"spec" protobuf:"bytes,2,opt,name=spec"` - Status CronWorkflowStatus `json:"status" protobuf:"bytes,3,opt,name=status"` - Options CronWorkflowOptions `json:"options" protobuf:"bytes,4,opt,name=options"` + Spec CronWorkflowSpec `json:"spec" protobuf:"bytes,2,opt,name=spec"` + Status CronWorkflowStatus `json:"status" protobuf:"bytes,3,opt,name=status"` } // CronWorkflowList is list of CronWorkflow resources @@ -25,24 +24,25 @@ type CronWorkflowList struct { Items []CronWorkflow `json:"items" protobuf:"bytes,2,rep,name=items"` } -type CronWorkflowStatus struct { - // Active is a list of active workflows stemming from this CronWorkflow - Active []v1.ObjectReference `json:"active,omitempty" protobuf:"bytes,1,rep,name=active"` - // LastScheduleTime is the last time the CronWorkflow was scheduled - LastScheduledTime *metav1.Time `json:"lastScheduledTime,omitempty" protobuf:"bytes,2,opt,name=lastScheduledTime"` -} - -// CronWorkflowOptions is the schedule of when to run CronWorkflows -type CronWorkflowOptions struct { +type CronWorkflowSpec struct { + // WorkflowSpec is the spec of the workflow to be run + WorkflowSpec WorkflowSpec `json:"workflowSpec,omitempty" protobuf:"bytes,1,opt,name=workflowSpec,casttype=WorkflowSpec"` // Schedule is a schedule to run the Workflow in Cron format - Schedule string `json:"schedule" protobuf:"bytes,1,opt,name=schedule"` + Schedule string `json:"schedule" protobuf:"bytes,2,opt,name=schedule"` // ConcurrencyPolicy is the K8s-style concurrency policy that will be used - ConcurrencyPolicy ConcurrencyPolicy `json:"concurrencyPolicy,omitempty" protobuf:"bytes,2,opt,name=concurrencyPolicy,casttype=ConcurrencyPolicy"` + ConcurrencyPolicy ConcurrencyPolicy `json:"concurrencyPolicy,omitempty" protobuf:"bytes,3,opt,name=concurrencyPolicy,casttype=ConcurrencyPolicy"` // Suspend is a flag that will stop new CronWorkflows from running if set to true - Suspend bool `json:"suspend,omitempty" protobuf:"varint,3,opt,name=suspend"` + Suspend bool `json:"suspend,omitempty" protobuf:"varint,4,opt,name=suspend"` // StartingDeadlineSeconds is the K8s-style deadline that will limit the time a CronWorkflow will be run after its // original scheduled time if it is missed. - StartingDeadlineSeconds *int64 `json:"startingDeadlineSeconds,omitempty" protobuf:"varint,4,opt,name=startingDeadlineSeconds"` + StartingDeadlineSeconds *int64 `json:"startingDeadlineSeconds,omitempty" protobuf:"varint,5,opt,name=startingDeadlineSeconds"` +} + +type CronWorkflowStatus struct { + // Active is a list of active workflows stemming from this CronWorkflow + Active []v1.ObjectReference `json:"active,omitempty" protobuf:"bytes,1,rep,name=active"` + // LastScheduleTime is the last time the CronWorkflow was scheduled + LastScheduledTime *metav1.Time `json:"lastScheduledTime,omitempty" protobuf:"bytes,2,opt,name=lastScheduledTime"` } type ConcurrencyPolicy string diff --git a/pkg/apis/workflow/v1alpha1/generated.pb.go b/pkg/apis/workflow/v1alpha1/generated.pb.go index f5ee0c90578f..b06752b4de85 100644 --- a/pkg/apis/workflow/v1alpha1/generated.pb.go +++ b/pkg/apis/workflow/v1alpha1/generated.pb.go @@ -312,15 +312,15 @@ func (m *CronWorkflowList) XXX_DiscardUnknown() { var xxx_messageInfo_CronWorkflowList proto.InternalMessageInfo -func (m *CronWorkflowOptions) Reset() { *m = CronWorkflowOptions{} } -func (*CronWorkflowOptions) ProtoMessage() {} -func (*CronWorkflowOptions) Descriptor() ([]byte, []int) { +func (m *CronWorkflowSpec) Reset() { *m = CronWorkflowSpec{} } +func (*CronWorkflowSpec) ProtoMessage() {} +func (*CronWorkflowSpec) Descriptor() ([]byte, []int) { return fileDescriptor_c23edafa7e7ea072, []int{10} } -func (m *CronWorkflowOptions) XXX_Unmarshal(b []byte) error { +func (m *CronWorkflowSpec) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) } -func (m *CronWorkflowOptions) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { +func (m *CronWorkflowSpec) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { b = b[:cap(b)] n, err := m.MarshalToSizedBuffer(b) if err != nil { @@ -328,17 +328,17 @@ func (m *CronWorkflowOptions) XXX_Marshal(b []byte, deterministic bool) ([]byte, } return b[:n], nil } -func (m *CronWorkflowOptions) XXX_Merge(src proto.Message) { - xxx_messageInfo_CronWorkflowOptions.Merge(m, src) +func (m *CronWorkflowSpec) XXX_Merge(src proto.Message) { + xxx_messageInfo_CronWorkflowSpec.Merge(m, src) } -func (m *CronWorkflowOptions) XXX_Size() int { +func (m *CronWorkflowSpec) XXX_Size() int { return m.Size() } -func (m *CronWorkflowOptions) XXX_DiscardUnknown() { - xxx_messageInfo_CronWorkflowOptions.DiscardUnknown(m) +func (m *CronWorkflowSpec) XXX_DiscardUnknown() { + xxx_messageInfo_CronWorkflowSpec.DiscardUnknown(m) } -var xxx_messageInfo_CronWorkflowOptions proto.InternalMessageInfo +var xxx_messageInfo_CronWorkflowSpec proto.InternalMessageInfo func (m *CronWorkflowStatus) Reset() { *m = CronWorkflowStatus{} } func (*CronWorkflowStatus) ProtoMessage() {} @@ -1471,7 +1471,7 @@ func init() { proto.RegisterType((*ContinueOn)(nil), "github.com.argoproj.argo.pkg.apis.workflow.v1alpha1.ContinueOn") proto.RegisterType((*CronWorkflow)(nil), "github.com.argoproj.argo.pkg.apis.workflow.v1alpha1.CronWorkflow") proto.RegisterType((*CronWorkflowList)(nil), "github.com.argoproj.argo.pkg.apis.workflow.v1alpha1.CronWorkflowList") - proto.RegisterType((*CronWorkflowOptions)(nil), "github.com.argoproj.argo.pkg.apis.workflow.v1alpha1.CronWorkflowOptions") + proto.RegisterType((*CronWorkflowSpec)(nil), "github.com.argoproj.argo.pkg.apis.workflow.v1alpha1.CronWorkflowSpec") proto.RegisterType((*CronWorkflowStatus)(nil), "github.com.argoproj.argo.pkg.apis.workflow.v1alpha1.CronWorkflowStatus") proto.RegisterType((*DAGTask)(nil), "github.com.argoproj.argo.pkg.apis.workflow.v1alpha1.DAGTask") proto.RegisterType((*DAGTemplate)(nil), "github.com.argoproj.argo.pkg.apis.workflow.v1alpha1.DAGTemplate") @@ -1527,311 +1527,314 @@ func init() { } var fileDescriptor_c23edafa7e7ea072 = []byte{ - // 4864 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xec, 0x5c, 0x4d, 0x6c, 0x64, 0x57, - 0x56, 0xee, 0xb2, 0x5d, 0xe5, 0xaa, 0x53, 0xfe, 0xeb, 0xeb, 0xee, 0x74, 0xc5, 0xe9, 0xb8, 0x7a, - 0x5e, 0x94, 0xd0, 0x03, 0x49, 0x39, 0xe9, 0x9e, 0x81, 0x4c, 0x86, 0x24, 0x53, 0xe5, 0x9f, 0x6e, - 0xb7, 0xdb, 0x6e, 0x73, 0xca, 0xdd, 0xcd, 0x90, 0x88, 0xe1, 0xf9, 0xd5, 0x75, 0xd5, 0x6b, 0x57, - 0xbd, 0xf7, 0xf2, 0xee, 0xab, 0x76, 0xac, 0x2c, 0x08, 0x08, 0x04, 0x08, 0x8d, 0x04, 0x1b, 0x18, - 0x31, 0x1b, 0x04, 0x12, 0x6c, 0xd8, 0xb0, 0x05, 0x34, 0x48, 0x88, 0x45, 0xc4, 0x86, 0x88, 0x0d, - 0x59, 0x20, 0x6b, 0x62, 0x36, 0x20, 0x90, 0x90, 0xd8, 0x20, 0xf5, 0x0a, 0xdd, 0x9f, 0x77, 0xdf, - 0x4f, 0x3d, 0x27, 0x76, 0x95, 0xbb, 0x11, 0x33, 0xb3, 0x6a, 0xd7, 0x39, 0xe7, 0x7e, 0xe7, 0xfe, - 0x9e, 0x7b, 0xce, 0xb9, 0xe7, 0x35, 0x2c, 0xb7, 0xed, 0xa0, 0xd3, 0xdf, 0xad, 0x59, 0x6e, 0x6f, - 0xc9, 0xf4, 0xdb, 0xae, 0xe7, 0xbb, 0x8f, 0xc4, 0x1f, 0x4b, 0xde, 0x7e, 0x7b, 0xc9, 0xf4, 0x6c, - 0xb6, 0x74, 0xe0, 0xfa, 0xfb, 0x7b, 0x5d, 0xf7, 0x60, 0xe9, 0xf1, 0x1b, 0x66, 0xd7, 0xeb, 0x98, - 0x6f, 0x2c, 0xb5, 0xa9, 0x43, 0x7d, 0x33, 0xa0, 0xad, 0x9a, 0xe7, 0xbb, 0x81, 0x4b, 0x6e, 0x46, - 0x20, 0xb5, 0x10, 0x44, 0xfc, 0x51, 0xf3, 0xf6, 0xdb, 0x35, 0x0e, 0x52, 0x0b, 0x41, 0x6a, 0x21, - 0xc8, 0xc2, 0x6b, 0x31, 0xcd, 0x6d, 0x97, 0x2b, 0xe4, 0x58, 0xbb, 0xfd, 0x3d, 0xf1, 0x4b, 0xfc, - 0x10, 0x7f, 0x49, 0x1d, 0x0b, 0xc6, 0xfe, 0x9b, 0xac, 0x66, 0xbb, 0xbc, 0x4b, 0x4b, 0x96, 0xeb, - 0xd3, 0xa5, 0xc7, 0x03, 0xfd, 0x58, 0xf8, 0x5a, 0x24, 0xd3, 0x33, 0xad, 0x8e, 0xed, 0x50, 0xff, - 0x30, 0x1a, 0x47, 0x8f, 0x06, 0x66, 0x56, 0xab, 0xa5, 0x93, 0x5a, 0xf9, 0x7d, 0x27, 0xb0, 0x7b, - 0x74, 0xa0, 0xc1, 0xcf, 0x7e, 0x59, 0x03, 0x66, 0x75, 0x68, 0xcf, 0x4c, 0xb7, 0x33, 0xfe, 0x31, - 0x07, 0xb3, 0x75, 0xdf, 0xea, 0xd8, 0x8f, 0x69, 0x33, 0xe0, 0x8c, 0xf6, 0x21, 0x79, 0x0f, 0xc6, - 0x03, 0xd3, 0xaf, 0xe4, 0xae, 0xe5, 0xae, 0x97, 0x6f, 0x7c, 0xab, 0x36, 0xc4, 0x44, 0xd6, 0x76, - 0x4c, 0x3f, 0x84, 0x6b, 0x4c, 0x1e, 0x1f, 0x55, 0xc7, 0x77, 0x4c, 0x1f, 0x39, 0x2a, 0xf9, 0x0e, - 0x4c, 0x38, 0xae, 0x43, 0x2b, 0x63, 0x02, 0xbd, 0x3e, 0x14, 0xfa, 0x96, 0xeb, 0xe8, 0xde, 0x36, - 0x8a, 0xc7, 0x47, 0xd5, 0x09, 0x4e, 0x41, 0x01, 0x6c, 0xfc, 0x57, 0x0e, 0x4a, 0x75, 0xbf, 0xdd, - 0xef, 0x51, 0x27, 0x60, 0xc4, 0x07, 0xf0, 0x4c, 0xdf, 0xec, 0xd1, 0x80, 0xfa, 0xac, 0x92, 0xbb, - 0x36, 0x7e, 0xbd, 0x7c, 0xe3, 0x9d, 0xa1, 0x94, 0x6e, 0x87, 0x30, 0x0d, 0xf2, 0xc9, 0x51, 0xf5, - 0xc2, 0xf1, 0x51, 0x15, 0x34, 0x89, 0x61, 0x4c, 0x0b, 0x71, 0xa0, 0x64, 0xfa, 0x81, 0xbd, 0x67, - 0x5a, 0x01, 0xab, 0x8c, 0x09, 0x95, 0x6f, 0x0f, 0xa5, 0xb2, 0xae, 0x50, 0x1a, 0x17, 0x95, 0xc6, - 0x52, 0x48, 0x61, 0x18, 0xa9, 0x30, 0xfe, 0x63, 0x1c, 0x8a, 0x21, 0x83, 0x5c, 0x83, 0x09, 0xc7, - 0xec, 0x51, 0xb1, 0x7a, 0xa5, 0xc6, 0x94, 0x6a, 0x38, 0xb1, 0x65, 0xf6, 0xf8, 0x04, 0x99, 0x3d, - 0xca, 0x25, 0x3c, 0x33, 0xe8, 0x88, 0x15, 0x88, 0x49, 0x6c, 0x9b, 0x41, 0x07, 0x05, 0x87, 0x5c, - 0x85, 0x89, 0x9e, 0xdb, 0xa2, 0x95, 0xf1, 0x6b, 0xb9, 0xeb, 0x79, 0x39, 0xc1, 0x9b, 0x6e, 0x8b, - 0xa2, 0xa0, 0xf2, 0xf6, 0x7b, 0xbe, 0xdb, 0xab, 0x4c, 0x24, 0xdb, 0xaf, 0xf9, 0x6e, 0x0f, 0x05, - 0x87, 0xfc, 0x6e, 0x0e, 0xe6, 0xc2, 0xee, 0xdd, 0x75, 0x2d, 0x33, 0xb0, 0x5d, 0xa7, 0x92, 0x17, - 0x0b, 0xbe, 0x3a, 0xd2, 0x44, 0x84, 0x60, 0x8d, 0x8a, 0xd2, 0x3a, 0x97, 0xe6, 0xe0, 0x80, 0x62, - 0x72, 0x03, 0xa0, 0xdd, 0x75, 0x77, 0xcd, 0x2e, 0x9f, 0x83, 0x4a, 0x41, 0xf4, 0x5a, 0x2f, 0xe1, - 0x2d, 0xcd, 0xc1, 0x98, 0x14, 0xd9, 0x87, 0x49, 0x53, 0x9e, 0x8a, 0xca, 0xa4, 0xe8, 0xf7, 0xca, - 0x90, 0xfd, 0x4e, 0x9c, 0xac, 0x46, 0xf9, 0xf8, 0xa8, 0x3a, 0xa9, 0x88, 0x18, 0x6a, 0x20, 0xaf, - 0x42, 0xd1, 0xf5, 0x78, 0x57, 0xcd, 0x6e, 0xa5, 0x78, 0x2d, 0x77, 0xbd, 0xd8, 0x98, 0x53, 0xdd, - 0x2b, 0xde, 0x53, 0x74, 0xd4, 0x12, 0xc6, 0x1f, 0xe6, 0x61, 0x60, 0xd4, 0xe4, 0x0d, 0x28, 0x2b, - 0xb4, 0xbb, 0x6e, 0x9b, 0x89, 0xc5, 0x2f, 0x36, 0x66, 0x8f, 0x8f, 0xaa, 0xe5, 0x7a, 0x44, 0xc6, - 0xb8, 0x0c, 0x79, 0x08, 0x63, 0xec, 0xa6, 0x3a, 0x86, 0xef, 0x0e, 0x35, 0xba, 0xe6, 0x4d, 0xbd, - 0x41, 0x0b, 0xc7, 0x47, 0xd5, 0xb1, 0xe6, 0x4d, 0x1c, 0x63, 0x37, 0xb9, 0xf9, 0x68, 0xdb, 0x81, - 0xd8, 0x3c, 0xc3, 0x9a, 0x8f, 0x5b, 0x76, 0xa0, 0xa1, 0x85, 0xf9, 0xb8, 0x65, 0x07, 0xc8, 0x51, - 0xb9, 0xf9, 0xe8, 0x04, 0x81, 0x27, 0x36, 0xdf, 0xb0, 0xe6, 0xe3, 0xf6, 0xce, 0xce, 0xb6, 0x86, - 0x17, 0xbb, 0x9b, 0x53, 0x50, 0x00, 0x93, 0x8f, 0xf8, 0x4c, 0x4a, 0x9e, 0xeb, 0x1f, 0xaa, 0x5d, - 0x7b, 0x7b, 0xa4, 0x5d, 0xeb, 0xfa, 0x87, 0x5a, 0x9d, 0x5a, 0x13, 0xcd, 0xc0, 0xb8, 0x36, 0x31, - 0xba, 0xd6, 0x1e, 0x13, 0x9b, 0x74, 0xe8, 0xd1, 0xad, 0xac, 0x35, 0x53, 0xa3, 0x5b, 0x59, 0x6b, - 0xa2, 0x00, 0xe6, 0x6b, 0xe3, 0x9b, 0x07, 0x6a, 0x4f, 0x0f, 0xb7, 0x36, 0x68, 0x1e, 0x24, 0xd7, - 0x06, 0xcd, 0x03, 0xe4, 0xa8, 0x46, 0x1b, 0x2e, 0x87, 0x1c, 0xa4, 0x9e, 0xcb, 0x6c, 0x31, 0x40, - 0xba, 0x47, 0x96, 0xa0, 0x64, 0xb9, 0xce, 0x9e, 0xdd, 0xde, 0x34, 0x3d, 0x65, 0x98, 0xb4, 0x45, - 0x5b, 0x0e, 0x19, 0x18, 0xc9, 0x90, 0x17, 0x61, 0x7c, 0x9f, 0x1e, 0x2a, 0x0b, 0x55, 0x56, 0xa2, - 0xe3, 0x1b, 0xf4, 0x10, 0x39, 0xdd, 0xf8, 0x41, 0x0e, 0xe6, 0x33, 0x26, 0x97, 0x37, 0xeb, 0xfb, - 0x5d, 0xa5, 0x41, 0x37, 0xbb, 0x8f, 0x77, 0x91, 0xd3, 0xc9, 0x6f, 0xe5, 0x60, 0x36, 0x36, 0xdb, - 0xf5, 0xbe, 0x32, 0x82, 0xc3, 0x9f, 0xee, 0x04, 0x56, 0xe3, 0x8a, 0xd2, 0x38, 0x9b, 0x62, 0x60, - 0x5a, 0xab, 0xf1, 0xcf, 0xe2, 0xd6, 0x4d, 0xd0, 0x88, 0x09, 0x33, 0x7d, 0x46, 0x7d, 0x6e, 0xa2, - 0x9b, 0xd4, 0xf2, 0x69, 0xa0, 0x2e, 0xe0, 0x97, 0x6b, 0xf2, 0x6a, 0xe7, 0xbd, 0xa8, 0x71, 0x2f, - 0xa3, 0xf6, 0xf8, 0x8d, 0x9a, 0x94, 0xd8, 0xa0, 0x87, 0x4d, 0xda, 0xa5, 0x1c, 0xa3, 0x41, 0x8e, - 0x8f, 0xaa, 0x33, 0xf7, 0x13, 0x00, 0x98, 0x02, 0xe4, 0x2a, 0x3c, 0x93, 0xb1, 0x03, 0xd7, 0x6f, - 0x29, 0x15, 0x63, 0x67, 0x56, 0xb1, 0x9d, 0x00, 0xc0, 0x14, 0xa0, 0xf1, 0x6d, 0x80, 0x65, 0xd7, - 0x09, 0x6c, 0xa7, 0x4f, 0xef, 0x39, 0xe4, 0x25, 0xc8, 0x53, 0xdf, 0x77, 0x7d, 0x65, 0x90, 0xa6, - 0xd5, 0x04, 0xe5, 0x57, 0x39, 0x11, 0x25, 0x8f, 0xbc, 0x02, 0x85, 0x3d, 0xd3, 0xee, 0xd2, 0x96, - 0xe8, 0x4d, 0xb1, 0x31, 0xa3, 0xa4, 0x0a, 0x6b, 0x82, 0x8a, 0x8a, 0x6b, 0xfc, 0xf5, 0x38, 0x4c, - 0x2d, 0xfb, 0xae, 0xf3, 0x50, 0x2d, 0x04, 0xf9, 0x15, 0x28, 0x72, 0xff, 0xa9, 0x65, 0x06, 0xa6, - 0x9a, 0xab, 0xd7, 0x63, 0x03, 0xd1, 0x6e, 0x50, 0xb4, 0x84, 0x5c, 0x9a, 0x0f, 0xed, 0xde, 0xee, - 0x23, 0x6a, 0x05, 0x9b, 0x34, 0x30, 0xa3, 0x8b, 0x20, 0xa2, 0xa1, 0x46, 0x25, 0x16, 0x4c, 0x30, - 0x8f, 0x5a, 0x23, 0x39, 0x2b, 0x61, 0x77, 0x9b, 0x1e, 0xb5, 0xa2, 0xdb, 0x92, 0xff, 0x42, 0x01, - 0x4e, 0x5c, 0x28, 0xb0, 0xc0, 0x0c, 0xfa, 0x4c, 0x99, 0xcc, 0x5b, 0x43, 0xa9, 0x89, 0xcf, 0x4c, - 0x53, 0xc0, 0x45, 0x13, 0x29, 0x7f, 0xa3, 0x52, 0x43, 0x18, 0x4c, 0xca, 0xdb, 0x84, 0x29, 0x33, - 0x7a, 0x7b, 0x64, 0x8d, 0xf2, 0x9e, 0x62, 0x8d, 0x59, 0xa5, 0x72, 0x52, 0x11, 0x30, 0xd4, 0x64, - 0x7c, 0x96, 0x83, 0xb9, 0x78, 0x8b, 0xbb, 0x36, 0x0b, 0xc8, 0xfb, 0x03, 0x2b, 0x58, 0x3b, 0xdd, - 0x0a, 0xf2, 0xd6, 0x62, 0xfd, 0xf4, 0x4d, 0x19, 0x52, 0x62, 0xab, 0xb7, 0x07, 0x79, 0x3b, 0xa0, - 0xbd, 0xd0, 0x07, 0xab, 0x8f, 0x3c, 0xca, 0x68, 0x03, 0xaf, 0x73, 0x5c, 0x94, 0xf0, 0xc6, 0x9f, - 0x8e, 0xc1, 0x7c, 0xc6, 0x64, 0xf0, 0x7b, 0x9d, 0x7b, 0xdd, 0xad, 0x7e, 0x37, 0x74, 0xc7, 0x74, - 0x6f, 0x9b, 0x8a, 0x8e, 0x5a, 0x82, 0xbc, 0x0f, 0x17, 0x2d, 0xd7, 0xb1, 0xfa, 0xbe, 0x4f, 0x1d, - 0xeb, 0x70, 0xdb, 0xed, 0xda, 0x56, 0x68, 0x01, 0x6b, 0xaa, 0xd9, 0xc5, 0xe5, 0xb4, 0xc0, 0x93, - 0x2c, 0x22, 0x0e, 0x02, 0x91, 0xaf, 0xc2, 0x24, 0xeb, 0x33, 0x8f, 0x3a, 0x2d, 0xb1, 0xcb, 0x8a, - 0xd1, 0x4a, 0x35, 0x25, 0x19, 0x43, 0x3e, 0xb9, 0x0f, 0x57, 0x58, 0xc0, 0x2d, 0x96, 0xd3, 0x5e, - 0xa1, 0x66, 0xab, 0x6b, 0x3b, 0xdc, 0x7e, 0xb8, 0x4e, 0x4b, 0x6e, 0x97, 0xf1, 0xc6, 0x0b, 0xc7, - 0x47, 0xd5, 0x2b, 0xcd, 0x6c, 0x11, 0x3c, 0xa9, 0xad, 0xf1, 0x4f, 0x39, 0x20, 0x83, 0x9b, 0x94, - 0x6c, 0x40, 0xc1, 0xb4, 0x02, 0xee, 0x68, 0x49, 0xe7, 0xfc, 0xa5, 0x2c, 0x5b, 0x24, 0x0f, 0x27, - 0xd2, 0x3d, 0xca, 0xc7, 0x44, 0xa3, 0x9d, 0x5d, 0x17, 0x4d, 0x51, 0x41, 0x10, 0x17, 0x2e, 0x76, - 0x4d, 0x16, 0x84, 0xb3, 0xdb, 0xda, 0xb1, 0x7b, 0x61, 0xa4, 0xf1, 0xd3, 0xa7, 0xdb, 0x58, 0xbc, - 0x45, 0xe3, 0x32, 0x9f, 0xeb, 0xbb, 0x69, 0x20, 0x1c, 0xc4, 0x36, 0xfe, 0xa8, 0x00, 0x93, 0x2b, - 0xf5, 0x5b, 0x3b, 0x26, 0xdb, 0x3f, 0x85, 0xe7, 0xfd, 0x2a, 0x14, 0x03, 0xda, 0xf3, 0xba, 0x66, - 0x40, 0xd5, 0xca, 0xea, 0x0d, 0xb1, 0xa3, 0xe8, 0xa8, 0x25, 0x88, 0xcb, 0xc3, 0x08, 0x15, 0xc7, - 0x28, 0xd3, 0xf0, 0xce, 0x90, 0xf7, 0x94, 0x42, 0x89, 0xc7, 0x11, 0x8a, 0x84, 0x91, 0x0e, 0xc2, - 0xa0, 0x1c, 0x2a, 0x47, 0xba, 0xa7, 0x6c, 0xc3, 0x90, 0xf1, 0x5f, 0x84, 0x23, 0x5d, 0x9e, 0x18, - 0x01, 0xe3, 0x5a, 0xc8, 0xd7, 0x60, 0xaa, 0x45, 0xf9, 0xbe, 0xa3, 0x8e, 0x65, 0x53, 0x56, 0xc9, - 0x5f, 0x1b, 0xe7, 0xf3, 0x72, 0x7c, 0x54, 0x9d, 0x5a, 0x89, 0xd1, 0x31, 0x21, 0x45, 0x1e, 0x41, - 0xe9, 0xc0, 0x0e, 0x3a, 0xe2, 0x18, 0x56, 0x0a, 0x62, 0xe3, 0x7c, 0x63, 0xa8, 0x8e, 0x72, 0x84, - 0x68, 0x5a, 0x1e, 0x86, 0x98, 0x18, 0xc1, 0x73, 0xef, 0x85, 0xff, 0x10, 0xc1, 0x9e, 0xf0, 0x9c, - 0x4a, 0xc9, 0x06, 0x82, 0x81, 0x91, 0x0c, 0x61, 0x30, 0xc5, 0x7f, 0x34, 0xe9, 0x07, 0x7d, 0xbe, - 0x5b, 0x85, 0x4f, 0x3f, 0x6c, 0x08, 0x18, 0x82, 0xc8, 0x19, 0x79, 0x18, 0x83, 0xc5, 0x84, 0x12, - 0xbe, 0xfb, 0x0e, 0x3a, 0xd4, 0xa9, 0x94, 0x92, 0xbb, 0xef, 0x61, 0x87, 0x3a, 0x28, 0x38, 0xc4, - 0x05, 0xb0, 0xf4, 0xd5, 0x5c, 0x81, 0x11, 0x1c, 0xff, 0xe8, 0x86, 0x6f, 0xcc, 0xf0, 0xbb, 0x33, - 0xfa, 0x8d, 0x31, 0x15, 0xc6, 0xdf, 0xe5, 0xa0, 0xcc, 0x0f, 0x47, 0xb8, 0xa1, 0x5f, 0x81, 0x42, - 0x60, 0xfa, 0x6d, 0xe5, 0xd9, 0x94, 0xa2, 0x53, 0xbc, 0x23, 0xa8, 0xa8, 0xb8, 0xc4, 0x84, 0x7c, - 0x60, 0xb2, 0xfd, 0xd0, 0x6e, 0xff, 0xfc, 0x50, 0x7d, 0x54, 0xa7, 0x32, 0x32, 0xd9, 0xfc, 0x17, - 0x43, 0x89, 0x4c, 0xae, 0x43, 0x91, 0x7b, 0x15, 0x6b, 0x26, 0x0b, 0x94, 0x3d, 0x9c, 0xe2, 0xa7, - 0x70, 0x4d, 0xd1, 0x50, 0x73, 0x8d, 0xf7, 0x61, 0x66, 0xf5, 0x43, 0x6a, 0xf5, 0x03, 0xd7, 0x97, - 0xae, 0x2a, 0xb9, 0x03, 0x84, 0x51, 0xff, 0xb1, 0x6d, 0xd1, 0xba, 0x65, 0xb9, 0x7d, 0x27, 0xd8, - 0x8a, 0x4e, 0xfd, 0x82, 0xd2, 0x46, 0x9a, 0x03, 0x12, 0x98, 0xd1, 0xca, 0xf8, 0x8b, 0x09, 0x28, - 0xc7, 0x82, 0x1d, 0xbe, 0x8a, 0x3e, 0xf5, 0xdc, 0xb4, 0x0d, 0xe1, 0xee, 0x34, 0x0a, 0x0e, 0xb7, - 0x21, 0x3e, 0x7d, 0x6c, 0x33, 0x1e, 0x52, 0xa7, 0x6c, 0x08, 0x2a, 0x3a, 0x6a, 0x09, 0x52, 0x85, - 0x7c, 0x8b, 0x7a, 0x41, 0x47, 0x0c, 0x72, 0xa2, 0x51, 0xe2, 0x13, 0xb1, 0xc2, 0x09, 0x28, 0xe9, - 0x5c, 0x60, 0x8f, 0x06, 0x56, 0xa7, 0x32, 0x21, 0xce, 0x9d, 0x10, 0x58, 0xe3, 0x04, 0x94, 0xf4, - 0x0c, 0xb7, 0x34, 0xff, 0xf4, 0xdd, 0xd2, 0xc2, 0x39, 0xbb, 0xa5, 0xc4, 0x83, 0x79, 0xc6, 0x3a, - 0xdb, 0xbe, 0xfd, 0xd8, 0x0c, 0xa8, 0x68, 0x2c, 0xf4, 0x4c, 0x9e, 0x45, 0xcf, 0x95, 0xe3, 0xa3, - 0xea, 0x7c, 0xb3, 0x79, 0x3b, 0x8d, 0x82, 0x59, 0xd0, 0xa4, 0x09, 0x97, 0x6d, 0x87, 0x51, 0xab, - 0xef, 0xd3, 0xf5, 0xb6, 0xe3, 0xfa, 0xf4, 0xb6, 0xcb, 0x38, 0x9c, 0x8a, 0xf0, 0x5f, 0x54, 0x8b, - 0x76, 0x79, 0x3d, 0x4b, 0x08, 0xb3, 0xdb, 0x1a, 0xff, 0x90, 0x83, 0xa9, 0x78, 0x7c, 0x47, 0x18, - 0x40, 0x67, 0x65, 0xad, 0x29, 0x77, 0xa6, 0x72, 0xa1, 0xde, 0x1d, 0x3a, 0x6c, 0x94, 0x30, 0x91, - 0x4f, 0x1c, 0xd1, 0x30, 0xa6, 0xe6, 0x14, 0x09, 0xa4, 0x97, 0x20, 0xbf, 0xe7, 0xfa, 0x16, 0x55, - 0x67, 0x4b, 0x9f, 0xc1, 0x35, 0x4e, 0x44, 0xc9, 0x33, 0xfe, 0x2d, 0x07, 0x31, 0x0d, 0xe4, 0x57, - 0x61, 0x9a, 0xeb, 0xd8, 0xf0, 0x77, 0x13, 0xa3, 0x69, 0x0c, 0x3d, 0x1a, 0x8d, 0xd4, 0xb8, 0xac, - 0xf4, 0x4f, 0x27, 0xc8, 0x98, 0xd4, 0x47, 0x7e, 0x06, 0x4a, 0x66, 0xab, 0xe5, 0x53, 0xc6, 0xa8, - 0x34, 0x3d, 0xa5, 0xc6, 0xb4, 0xb8, 0x2b, 0x43, 0x22, 0x46, 0x7c, 0x7e, 0x0c, 0x79, 0x40, 0xcd, - 0x77, 0xb6, 0x18, 0x64, 0xec, 0x18, 0x72, 0x25, 0x9c, 0x8e, 0x5a, 0xc2, 0xf8, 0xee, 0x04, 0x24, - 0x75, 0x93, 0x16, 0xcc, 0xee, 0xfb, 0xbb, 0xcb, 0xcb, 0xa6, 0xd5, 0x19, 0x2a, 0xdc, 0x9b, 0xe7, - 0x71, 0xe6, 0x46, 0x12, 0x01, 0xd3, 0x90, 0x4a, 0xcb, 0x06, 0x3d, 0x0c, 0xcc, 0xdd, 0x61, 0x22, - 0xbe, 0x50, 0x4b, 0x1c, 0x01, 0xd3, 0x90, 0xe4, 0xeb, 0x50, 0xde, 0xf7, 0x77, 0xc3, 0x43, 0xae, - 0xa6, 0x63, 0x5e, 0x4d, 0x47, 0x79, 0x23, 0x62, 0x61, 0x5c, 0x8e, 0x4f, 0xe1, 0xbe, 0xbf, 0x8b, - 0xd4, 0xec, 0x86, 0xb9, 0x44, 0x3d, 0x85, 0x1b, 0x8a, 0x8e, 0x5a, 0x82, 0x78, 0x40, 0xf6, 0xc3, - 0xd9, 0xd3, 0x39, 0x03, 0x65, 0x8b, 0xae, 0x67, 0x8d, 0x46, 0x0b, 0xc5, 0x07, 0xf4, 0x1c, 0xb7, - 0xcd, 0x1b, 0x03, 0x38, 0x98, 0x81, 0x4d, 0xbe, 0x0d, 0x57, 0xf6, 0xfd, 0x5d, 0x65, 0xc8, 0xb7, - 0x7d, 0xdb, 0xb1, 0x6c, 0x2f, 0x91, 0x44, 0xac, 0xaa, 0xee, 0x5e, 0xd9, 0xc8, 0x16, 0xc3, 0x93, - 0xda, 0x1b, 0xaf, 0xc1, 0x54, 0x3c, 0x09, 0xf5, 0x25, 0x89, 0x0b, 0xe3, 0x3f, 0x73, 0x50, 0x58, - 0x77, 0xbc, 0xfe, 0x8f, 0x49, 0x3e, 0xfb, 0x4f, 0x26, 0x60, 0x82, 0xbb, 0x5e, 0xe4, 0x3a, 0x4c, - 0x04, 0x87, 0x9e, 0xbc, 0x5b, 0xc7, 0x1b, 0x97, 0x42, 0x43, 0xb3, 0x73, 0xe8, 0xd1, 0x27, 0xea, - 0x5f, 0x14, 0x12, 0xe4, 0x1d, 0x28, 0x38, 0xfd, 0xde, 0x03, 0xb3, 0xab, 0x8c, 0xd2, 0x2b, 0xa1, - 0x6b, 0xb1, 0x25, 0xa8, 0x4f, 0x8e, 0xaa, 0x97, 0xa8, 0x63, 0xb9, 0x2d, 0xdb, 0x69, 0x2f, 0x3d, - 0x62, 0xae, 0x53, 0xdb, 0xea, 0xf7, 0x76, 0xa9, 0x8f, 0xaa, 0x15, 0x0f, 0x8f, 0x76, 0x5d, 0xb7, - 0xcb, 0x01, 0x52, 0xe1, 0x51, 0x43, 0x92, 0x31, 0xe4, 0x73, 0x2f, 0x86, 0x05, 0x3e, 0x97, 0x9c, - 0x48, 0x7a, 0x31, 0x4d, 0x41, 0x45, 0xc5, 0x25, 0x3d, 0x28, 0xf4, 0x4c, 0x8f, 0xcb, 0xe5, 0xc5, - 0x94, 0xad, 0x0e, 0xed, 0x9f, 0xd6, 0x36, 0x05, 0xce, 0xaa, 0x13, 0xf8, 0x87, 0x91, 0x3a, 0x49, - 0x44, 0xa5, 0x84, 0xd8, 0x30, 0xd9, 0xb5, 0x59, 0xc0, 0xf5, 0x15, 0x46, 0xd8, 0x15, 0x5c, 0xdf, - 0x03, 0xb3, 0xdb, 0xa7, 0xd1, 0x0c, 0xdc, 0x95, 0xb0, 0x18, 0xe2, 0x2f, 0x1c, 0x42, 0x39, 0xd6, - 0x23, 0x32, 0x27, 0x93, 0x75, 0x62, 0xf3, 0x8a, 0xfc, 0x1c, 0xd9, 0x81, 0xfc, 0x63, 0x8e, 0xa1, - 0x8c, 0xcd, 0x88, 0x3d, 0x41, 0x09, 0xf6, 0xd6, 0xd8, 0x9b, 0xb9, 0xb7, 0x8a, 0xdf, 0xfb, 0xe3, - 0xea, 0x85, 0x8f, 0xff, 0xe5, 0xda, 0x05, 0xe3, 0xef, 0xc7, 0xa1, 0xa4, 0x45, 0xfe, 0x7f, 0xef, - 0x14, 0x3f, 0xb5, 0x53, 0xee, 0x8c, 0x36, 0x5f, 0xa7, 0xda, 0x2e, 0xf5, 0xe4, 0x76, 0x99, 0x6a, - 0xfc, 0x54, 0x6c, 0xa9, 0x9f, 0x1c, 0x55, 0x2b, 0xc9, 0x49, 0x40, 0xf3, 0x60, 0x93, 0x32, 0x66, - 0xb6, 0x69, 0xb4, 0x0d, 0xbe, 0xf1, 0x65, 0xdb, 0xe0, 0x52, 0x7c, 0x1b, 0x94, 0xb2, 0x97, 0xf1, - 0xe3, 0x71, 0x28, 0x6e, 0x86, 0x09, 0x9b, 0xdf, 0xcc, 0x41, 0xd9, 0x74, 0x1c, 0x37, 0x30, 0x65, - 0x76, 0x4a, 0x9a, 0xb7, 0xad, 0xa1, 0xa6, 0x23, 0x04, 0xad, 0xd5, 0x23, 0x40, 0x39, 0x25, 0xfa, - 0x66, 0x8a, 0x71, 0x30, 0xae, 0x97, 0x7c, 0x00, 0x85, 0xae, 0xb9, 0x4b, 0xbb, 0xa1, 0xb5, 0x5b, - 0x1f, 0xad, 0x07, 0x77, 0x05, 0x56, 0x6a, 0x3d, 0x24, 0x11, 0x95, 0xa2, 0x85, 0x77, 0x60, 0x2e, - 0xdd, 0xd1, 0xb3, 0xcc, 0x28, 0x5f, 0x8c, 0x98, 0x9a, 0xb3, 0x34, 0x35, 0xfe, 0xa6, 0x04, 0xb0, - 0xe5, 0xb6, 0xa8, 0x4a, 0xc8, 0x2c, 0xc0, 0x98, 0xdd, 0x52, 0x57, 0x11, 0xa8, 0xde, 0x8e, 0xad, - 0xaf, 0xe0, 0x98, 0xdd, 0xd2, 0x29, 0x8e, 0xb1, 0x13, 0x53, 0x1c, 0x5f, 0x87, 0x72, 0xcb, 0x66, - 0x5e, 0xd7, 0x3c, 0xdc, 0xca, 0xf0, 0x05, 0x56, 0x22, 0x16, 0xc6, 0xe5, 0xc8, 0xab, 0xea, 0xfc, - 0xca, 0x83, 0x52, 0x49, 0x9d, 0xdf, 0x22, 0xef, 0x5e, 0xec, 0x0c, 0xbf, 0x09, 0x53, 0x61, 0x0a, - 0x41, 0x68, 0xc9, 0x8b, 0x56, 0xe1, 0xa9, 0x9f, 0xda, 0x89, 0xf1, 0x30, 0x21, 0x99, 0x4e, 0x71, - 0x14, 0x9e, 0x49, 0x8a, 0x63, 0x05, 0xe6, 0x58, 0xe0, 0xfa, 0xb4, 0x15, 0x4a, 0xac, 0xaf, 0x54, - 0x48, 0x62, 0xa0, 0x73, 0xcd, 0x14, 0x1f, 0x07, 0x5a, 0x90, 0x6d, 0xb8, 0x14, 0x76, 0x22, 0x3e, - 0xc0, 0xca, 0xbc, 0x40, 0xba, 0xaa, 0x90, 0x2e, 0x3d, 0xcc, 0x90, 0xc1, 0xcc, 0x96, 0xe4, 0x75, - 0xc8, 0x7b, 0x1d, 0x93, 0x51, 0x95, 0xd4, 0x08, 0x63, 0xd7, 0xfc, 0x36, 0x27, 0x3e, 0x39, 0xaa, - 0x96, 0xf8, 0xb4, 0x8b, 0x1f, 0x28, 0x05, 0xc9, 0x0d, 0x80, 0x5d, 0xb7, 0xef, 0xb4, 0x4c, 0xff, - 0x70, 0x7d, 0x45, 0x44, 0x32, 0xb1, 0xa7, 0xd4, 0x86, 0xe6, 0x60, 0x4c, 0x8a, 0x1b, 0xcc, 0x9e, - 0x34, 0x1d, 0x2a, 0x37, 0xa1, 0x0d, 0xa6, 0xb6, 0x28, 0x8a, 0x4f, 0xde, 0x83, 0x92, 0xc8, 0x1e, - 0xd2, 0x56, 0x3d, 0x50, 0x09, 0x8a, 0xb3, 0xa4, 0xed, 0xb4, 0x57, 0xd1, 0x0c, 0x41, 0x30, 0xc2, - 0x23, 0xbf, 0x0c, 0xb0, 0x67, 0x3b, 0x36, 0xeb, 0x08, 0xf4, 0xf2, 0x99, 0xd1, 0xf5, 0x38, 0xd7, - 0x34, 0x0a, 0xc6, 0x10, 0x79, 0xcc, 0xe3, 0xb9, 0xad, 0xf5, 0xed, 0xca, 0x94, 0x18, 0xa5, 0x8e, - 0x79, 0xb6, 0x39, 0x11, 0x25, 0x8f, 0x5c, 0x87, 0x62, 0xcb, 0xa4, 0x3d, 0xd7, 0xa1, 0xad, 0xca, - 0x74, 0x94, 0x77, 0x58, 0x51, 0x34, 0xd4, 0x5c, 0xf2, 0x1d, 0x28, 0xd8, 0xc2, 0xe5, 0xab, 0xcc, - 0x88, 0xae, 0x7e, 0x73, 0xb8, 0x4b, 0x41, 0x40, 0x34, 0x80, 0x5b, 0x1c, 0xf9, 0x37, 0x2a, 0x58, - 0x62, 0xc1, 0xa4, 0xdb, 0x0f, 0x84, 0x86, 0x59, 0xa1, 0x61, 0xb8, 0x3c, 0xcb, 0x3d, 0x89, 0x21, - 0x9f, 0xb6, 0xd5, 0x0f, 0x0c, 0x91, 0xf9, 0x78, 0xad, 0x8e, 0xdd, 0x6d, 0xf9, 0xd4, 0xa9, 0xcc, - 0x89, 0x90, 0x4a, 0x8c, 0x77, 0x59, 0xd1, 0x50, 0x73, 0xc9, 0xcf, 0xc1, 0xb4, 0xdb, 0x0f, 0xc4, - 0xbe, 0xe1, 0xdb, 0x8e, 0x55, 0x2e, 0x0a, 0xf1, 0x8b, 0x3c, 0x6c, 0xbb, 0x17, 0x67, 0x60, 0x52, - 0xce, 0x98, 0x81, 0xa9, 0x78, 0x3d, 0x88, 0xf1, 0xfb, 0x63, 0x10, 0xf6, 0xe3, 0xc7, 0xc1, 0x5b, - 0x26, 0x06, 0x14, 0x7c, 0xca, 0xfa, 0xdd, 0x40, 0x19, 0x5b, 0xb1, 0xd6, 0x28, 0x28, 0xa8, 0x38, - 0xc6, 0x01, 0x4c, 0xf3, 0xde, 0x76, 0xbb, 0xb4, 0xdb, 0x0c, 0xa8, 0xc7, 0xc8, 0x1e, 0xe4, 0x19, - 0xff, 0x43, 0xcd, 0xc9, 0x88, 0x2f, 0x5b, 0x01, 0xf5, 0xa2, 0xfd, 0x2e, 0x14, 0xa0, 0x84, 0x37, - 0xfe, 0x60, 0x0c, 0x4a, 0x7a, 0x9e, 0x4e, 0x91, 0x21, 0x7f, 0x19, 0x26, 0x5b, 0x74, 0xcf, 0xe4, - 0xa3, 0x51, 0x8f, 0xbf, 0x7c, 0x5b, 0xad, 0x48, 0x12, 0x86, 0x3c, 0x52, 0x0d, 0x2f, 0x33, 0x39, - 0x64, 0x91, 0xb5, 0x8a, 0xfb, 0x8a, 0x64, 0x1f, 0x4a, 0xe2, 0x8f, 0xb5, 0xb0, 0x50, 0x65, 0xd8, - 0x75, 0x7f, 0x10, 0xa2, 0xc8, 0x5c, 0x80, 0xfe, 0x89, 0x11, 0x7e, 0xaa, 0xc0, 0x24, 0x7f, 0x9a, - 0x02, 0x13, 0x63, 0x0d, 0xb8, 0x61, 0xb8, 0xb5, 0x4c, 0xde, 0x86, 0x22, 0x53, 0x5b, 0x57, 0xcd, - 0xcb, 0x57, 0xf4, 0x23, 0x91, 0xa2, 0x3f, 0x39, 0xaa, 0x4e, 0x0b, 0xe1, 0x90, 0x80, 0xba, 0x89, - 0xb1, 0x04, 0xe5, 0xd8, 0x83, 0x3c, 0x9f, 0x61, 0xfd, 0x98, 0x16, 0x9b, 0xe1, 0x15, 0x33, 0x30, - 0x51, 0x70, 0x8c, 0x27, 0x63, 0x30, 0x87, 0x94, 0xb9, 0x7d, 0xdf, 0xa2, 0xf1, 0xcc, 0xac, 0x69, - 0x89, 0x2a, 0x9d, 0x54, 0x66, 0xb6, 0x2e, 0xa8, 0xa8, 0xb8, 0xe4, 0x9b, 0x30, 0xdd, 0xa3, 0x7e, - 0x5b, 0x1f, 0x36, 0xb5, 0x48, 0x3a, 0xbf, 0xb2, 0x19, 0x67, 0x62, 0x52, 0x96, 0xc7, 0xfb, 0x3d, - 0xd3, 0xb1, 0xf7, 0x28, 0x0b, 0xd2, 0x29, 0x93, 0x4d, 0x45, 0x47, 0x2d, 0x41, 0x6e, 0xc1, 0x45, - 0x46, 0x83, 0x7b, 0x07, 0x0e, 0xf5, 0xf5, 0xbb, 0x8f, 0x58, 0xc9, 0x62, 0xe3, 0xf9, 0xf0, 0x39, - 0xac, 0x99, 0x16, 0xc0, 0xc1, 0x36, 0xe2, 0xf6, 0xed, 0x5b, 0x16, 0x65, 0x6c, 0xd9, 0x75, 0x5a, - 0xb6, 0xae, 0x45, 0x8a, 0xdf, 0xbe, 0x29, 0x3e, 0x0e, 0xb4, 0xe0, 0x28, 0x7b, 0xa6, 0xdd, 0xed, - 0xfb, 0x34, 0x42, 0x29, 0x24, 0x51, 0xd6, 0x52, 0x7c, 0x1c, 0x68, 0x61, 0xbc, 0x0e, 0xd3, 0x48, - 0x03, 0xff, 0x50, 0xcf, 0x49, 0x15, 0xf2, 0x5d, 0xbb, 0x67, 0xcb, 0xe4, 0x4f, 0x5e, 0x6e, 0xe4, - 0xbb, 0x9c, 0x80, 0x92, 0x6e, 0x7c, 0x2f, 0x07, 0x10, 0xd5, 0xd9, 0x90, 0x7d, 0x28, 0xb2, 0x9b, - 0x8d, 0xbe, 0xb5, 0xaf, 0xf3, 0x45, 0x43, 0x3e, 0x2b, 0x28, 0x90, 0xd8, 0x8b, 0xa4, 0xa2, 0xa0, - 0x56, 0xf0, 0x65, 0x55, 0x18, 0x7f, 0x39, 0x0e, 0xba, 0x15, 0x5f, 0x5c, 0xea, 0xb4, 0x3c, 0xd7, - 0x76, 0x82, 0xf4, 0x5b, 0xe7, 0xaa, 0xa2, 0xa3, 0x96, 0xe0, 0xfb, 0x6d, 0x57, 0x0e, 0x62, 0x2c, - 0xb9, 0xdf, 0x54, 0x1f, 0x14, 0x97, 0xcb, 0xf9, 0xb4, 0xcd, 0xe7, 0x7a, 0x3c, 0x29, 0x87, 0x82, - 0x8a, 0x8a, 0xcb, 0xaf, 0x99, 0x30, 0x61, 0xaa, 0xf6, 0x88, 0xb8, 0x66, 0xc2, 0xdc, 0x2a, 0x6a, - 0x2e, 0xe9, 0xc0, 0xac, 0x29, 0x96, 0x36, 0x4a, 0x02, 0x9f, 0x29, 0x9f, 0x1d, 0xd5, 0x78, 0x24, - 0x51, 0x30, 0x0d, 0xcb, 0x35, 0xb1, 0xa8, 0xf9, 0xd9, 0xd3, 0xda, 0x5a, 0x53, 0x33, 0x89, 0x82, - 0x69, 0x58, 0xee, 0x61, 0xf9, 0x6e, 0x97, 0xd6, 0x71, 0x4b, 0x79, 0x72, 0xda, 0xc3, 0x42, 0x49, - 0xc6, 0x90, 0x6f, 0xfc, 0x76, 0x0e, 0x66, 0x9a, 0x96, 0x6f, 0x7b, 0x81, 0x3e, 0xfb, 0x5b, 0xa2, - 0x38, 0x27, 0x30, 0xb9, 0xef, 0xa3, 0xf6, 0xd4, 0x8b, 0x27, 0xe4, 0xd3, 0xa4, 0x50, 0xa2, 0x76, - 0x47, 0x92, 0x30, 0x82, 0x10, 0x51, 0xaf, 0xb0, 0x2e, 0xe9, 0xb5, 0x6d, 0x0a, 0x2a, 0x2a, 0xae, - 0xf1, 0xfd, 0x1c, 0x14, 0xf5, 0xeb, 0xd5, 0x4b, 0x90, 0x17, 0x8f, 0x22, 0x6a, 0xef, 0xe8, 0xcb, - 0x64, 0x99, 0x13, 0x51, 0xf2, 0xb8, 0x90, 0x70, 0xe7, 0x14, 0x70, 0xec, 0xc6, 0x31, 0xfd, 0x00, - 0x25, 0x8f, 0x6f, 0xda, 0xf0, 0x91, 0x3b, 0xb6, 0x69, 0x57, 0x9d, 0x16, 0x72, 0xba, 0x28, 0x36, - 0x71, 0xfd, 0x9e, 0x19, 0xa4, 0x63, 0xf2, 0x35, 0x41, 0x45, 0xc5, 0x35, 0xde, 0x85, 0x59, 0xf5, - 0x30, 0xae, 0x27, 0xea, 0x55, 0x28, 0xb6, 0xfa, 0xbe, 0x19, 0x33, 0x93, 0x7a, 0x8b, 0xaf, 0x28, - 0x3a, 0x6a, 0x09, 0x63, 0x1a, 0xca, 0xb1, 0x22, 0x58, 0xe3, 0xbf, 0xaf, 0x80, 0x7e, 0xe3, 0xfd, - 0xc9, 0x4b, 0xf1, 0x50, 0x61, 0x94, 0xa5, 0x3d, 0xe2, 0xfc, 0xe8, 0x1e, 0xb1, 0x5e, 0xf7, 0x94, - 0x57, 0xdc, 0x8e, 0xbc, 0xe2, 0xc2, 0x39, 0x78, 0xc5, 0x51, 0x3d, 0x4c, 0xda, 0x33, 0xfe, 0x9d, - 0x1c, 0x4c, 0x39, 0x3c, 0xea, 0x56, 0xe7, 0xbd, 0x32, 0x29, 0x3c, 0xb1, 0x7b, 0x23, 0x4d, 0x62, - 0x6d, 0x2b, 0x86, 0x28, 0x13, 0x0e, 0x3a, 0x2a, 0x8e, 0xb3, 0x30, 0xa1, 0x9a, 0xac, 0x41, 0xd1, - 0xdc, 0xe3, 0xa1, 0x4c, 0x70, 0xa8, 0x1e, 0xab, 0xaf, 0x66, 0x59, 0x80, 0xba, 0x92, 0x91, 0xc6, - 0x35, 0xfc, 0x85, 0xba, 0x2d, 0xbf, 0x9d, 0x74, 0x39, 0x4f, 0x69, 0x84, 0xdb, 0x29, 0xcc, 0x9c, - 0xc4, 0x1c, 0x04, 0x45, 0x89, 0x55, 0xf7, 0x18, 0x50, 0x90, 0xc1, 0x92, 0x88, 0x14, 0x8b, 0xd2, - 0xef, 0x95, 0x81, 0x14, 0x2a, 0x0e, 0x69, 0x87, 0x6e, 0x6e, 0x59, 0x4c, 0x6e, 0x63, 0x68, 0xd7, - 0x5f, 0x7b, 0xce, 0xd9, 0x7e, 0x2e, 0xb9, 0x13, 0x37, 0xa2, 0x53, 0xa7, 0x31, 0xa2, 0xd3, 0x27, - 0x1a, 0xd0, 0x36, 0x14, 0x98, 0x30, 0xd1, 0x22, 0x42, 0x2c, 0xdf, 0x58, 0x1e, 0xee, 0x86, 0x4f, - 0x58, 0x79, 0x39, 0x3b, 0x92, 0x86, 0x0a, 0x9e, 0xb8, 0x50, 0xf4, 0x95, 0x27, 0xa8, 0x82, 0xcc, - 0xe1, 0x72, 0xd4, 0x69, 0x77, 0x52, 0xee, 0x8f, 0x90, 0x8a, 0x5a, 0x09, 0x79, 0x0f, 0xc6, 0x5b, - 0x66, 0x5b, 0x85, 0x9b, 0xdf, 0x1a, 0xfa, 0x59, 0x3f, 0x54, 0x23, 0xaa, 0x4f, 0x57, 0xea, 0xb7, - 0x90, 0xa3, 0x92, 0xfd, 0xa8, 0xc2, 0x69, 0x6e, 0x84, 0xa2, 0xce, 0x94, 0xd5, 0x97, 0x01, 0xc8, - 0x40, 0x8d, 0xd4, 0x2a, 0x4c, 0x3e, 0x76, 0xbb, 0xfd, 0x9e, 0x8a, 0x53, 0xcb, 0x37, 0x16, 0xb2, - 0x56, 0xfb, 0x81, 0x10, 0x89, 0x8c, 0x80, 0xfc, 0xcd, 0x30, 0x6c, 0x4b, 0x7e, 0x3d, 0x07, 0x33, - 0xfc, 0xe8, 0xe8, 0x7d, 0xc0, 0x2a, 0x64, 0x84, 0x9d, 0x7a, 0x9f, 0x51, 0x3f, 0xda, 0x61, 0xcf, - 0x29, 0xb5, 0x33, 0xeb, 0x09, 0x0d, 0x98, 0xd2, 0x48, 0x3c, 0x28, 0x32, 0xbb, 0x45, 0x2d, 0xd3, - 0x67, 0x95, 0xf9, 0x73, 0xd3, 0x1e, 0x39, 0x96, 0x0a, 0x1b, 0xb5, 0x16, 0xf2, 0x1b, 0xa2, 0x10, - 0x57, 0x95, 0xa2, 0xab, 0xcf, 0x03, 0x2e, 0x9d, 0xe7, 0xe7, 0x01, 0xf3, 0xb2, 0x0a, 0x37, 0xa1, - 0x01, 0xd3, 0x2a, 0xc9, 0x3d, 0xb8, 0x2c, 0xeb, 0xc6, 0xd2, 0x65, 0x6e, 0x97, 0xc5, 0x2b, 0xc2, - 0xf3, 0xc7, 0x47, 0xd5, 0xcb, 0xf5, 0x2c, 0x01, 0xcc, 0x6e, 0x47, 0x3e, 0x82, 0x69, 0x3f, 0xee, - 0xde, 0x57, 0x9e, 0x1b, 0xe1, 0x09, 0x3b, 0x11, 0x28, 0xc8, 0x3c, 0x48, 0x82, 0x84, 0x49, 0x5d, - 0xe4, 0x0d, 0x28, 0x7b, 0xca, 0x52, 0xd9, 0xac, 0x57, 0xb9, 0x22, 0xc6, 0x20, 0x6e, 0xd4, 0xed, - 0x88, 0x8c, 0x71, 0x19, 0x72, 0x1f, 0xca, 0x81, 0xdb, 0xa5, 0xbe, 0x4a, 0xb7, 0x57, 0xc4, 0xe2, - 0x2f, 0x66, 0xed, 0xe4, 0x1d, 0x2d, 0x16, 0x25, 0x73, 0x23, 0x1a, 0xc3, 0x38, 0x0e, 0x8f, 0x12, - 0xc3, 0xaa, 0x46, 0x5f, 0x84, 0xc4, 0xcf, 0x27, 0xa3, 0xc4, 0x66, 0x9c, 0x89, 0x49, 0x59, 0x1e, - 0xf7, 0x79, 0xbe, 0xed, 0xfa, 0x76, 0x70, 0xb8, 0xdc, 0x35, 0x19, 0x13, 0x00, 0x0b, 0x02, 0x40, - 0xc7, 0x7d, 0xdb, 0x69, 0x01, 0x1c, 0x6c, 0xc3, 0x63, 0x82, 0x90, 0x58, 0x79, 0x41, 0x44, 0x57, - 0xc2, 0x2c, 0x85, 0x6d, 0x51, 0x73, 0x4f, 0x28, 0xe8, 0xb9, 0x3a, 0x4c, 0x41, 0x0f, 0x69, 0xc1, - 0x55, 0xb3, 0x1f, 0xb8, 0x3d, 0x4e, 0x48, 0x36, 0xd9, 0x71, 0xf7, 0xa9, 0x53, 0xb9, 0x26, 0xee, - 0xaa, 0x6b, 0xc7, 0x47, 0xd5, 0xab, 0xf5, 0x2f, 0x90, 0xc3, 0x2f, 0x44, 0x21, 0x3d, 0x28, 0x52, - 0x55, 0x94, 0x54, 0xf9, 0xca, 0x08, 0x97, 0x44, 0xb2, 0xb2, 0x49, 0x4e, 0x50, 0x48, 0x43, 0xad, - 0x82, 0xec, 0x40, 0xb9, 0xe3, 0xb2, 0xa0, 0xde, 0xb5, 0x4d, 0x46, 0x59, 0xe5, 0x45, 0xb1, 0x4f, - 0x32, 0xef, 0xb7, 0xdb, 0xa1, 0x58, 0xb4, 0x4d, 0x6e, 0x47, 0x2d, 0x31, 0x0e, 0x43, 0xa8, 0x08, - 0x90, 0xfa, 0x62, 0xd5, 0x5c, 0x27, 0xa0, 0x1f, 0x06, 0x95, 0x45, 0x31, 0x96, 0x57, 0xb2, 0x90, - 0xb7, 0xdd, 0x56, 0x33, 0x29, 0x2d, 0x4f, 0x79, 0x8a, 0x88, 0x69, 0x4c, 0xf2, 0x26, 0x4c, 0x79, - 0x6e, 0xab, 0xe9, 0x51, 0x6b, 0xdb, 0x0c, 0xac, 0x4e, 0xa5, 0x9a, 0x7c, 0x2c, 0xd8, 0x8e, 0xf1, - 0x30, 0x21, 0xb9, 0xf0, 0x2e, 0x5c, 0x1c, 0xf0, 0xa7, 0xce, 0xf4, 0xb2, 0xf2, 0x67, 0x39, 0x88, - 0xbb, 0xb3, 0xe7, 0xee, 0xf7, 0xdf, 0x82, 0x8b, 0xea, 0xf3, 0x3e, 0x7e, 0xd9, 0x76, 0xfb, 0x41, - 0x18, 0x29, 0xc7, 0x72, 0x24, 0x98, 0x16, 0xc0, 0xc1, 0x36, 0xc6, 0x9f, 0xe7, 0x60, 0x3a, 0x61, - 0xbe, 0xcf, 0x3d, 0x2a, 0x5c, 0x03, 0xd2, 0xb3, 0x7d, 0xdf, 0xf5, 0xe5, 0x1d, 0xb8, 0xc9, 0xf7, - 0x32, 0x53, 0x05, 0xff, 0xa2, 0x28, 0x63, 0x73, 0x80, 0x8b, 0x19, 0x2d, 0x8c, 0xbf, 0xca, 0x41, - 0x94, 0x84, 0xd3, 0x95, 0x48, 0xb9, 0x13, 0x2b, 0x91, 0x5e, 0x85, 0xe2, 0x23, 0xe6, 0x3a, 0xdb, - 0x51, 0xbd, 0x92, 0x9e, 0xd0, 0x3b, 0xcd, 0x7b, 0x5b, 0x42, 0x52, 0x4b, 0x08, 0xe9, 0x0f, 0xd6, - 0xec, 0x6e, 0x30, 0x58, 0xd5, 0x73, 0xe7, 0x17, 0x24, 0x1d, 0xb5, 0x04, 0x59, 0x82, 0x92, 0xce, - 0xfb, 0xaa, 0x70, 0x52, 0x4f, 0x82, 0x4e, 0x7a, 0x62, 0x24, 0x63, 0xfc, 0x60, 0x0c, 0x8a, 0x3f, - 0x6a, 0x5f, 0x2f, 0xec, 0xa7, 0xbe, 0x5e, 0x58, 0x1e, 0x31, 0x95, 0xfc, 0x45, 0x5f, 0x2e, 0x18, - 0x9f, 0xe6, 0x60, 0xea, 0x19, 0x7e, 0x40, 0xb0, 0x9b, 0xfc, 0x80, 0xe0, 0xed, 0x91, 0x86, 0x76, - 0xc2, 0xc7, 0x03, 0x7f, 0x3b, 0x1f, 0x0d, 0x89, 0x4f, 0x2b, 0x71, 0xa0, 0x14, 0x1e, 0xf0, 0x30, - 0x3d, 0xff, 0xf6, 0x48, 0x41, 0x61, 0xb4, 0x29, 0x43, 0x0a, 0xc3, 0x48, 0x05, 0xb9, 0x01, 0x40, - 0xb9, 0x65, 0x93, 0xb9, 0xbb, 0xb1, 0x64, 0xf6, 0x7a, 0x55, 0x73, 0x30, 0x26, 0xf5, 0xec, 0x13, - 0x0e, 0xd9, 0x57, 0xf4, 0xc4, 0x53, 0xb9, 0xa2, 0xaf, 0x9e, 0xfb, 0x15, 0xfd, 0xe2, 0xd3, 0xbf, - 0xa2, 0x63, 0x01, 0x49, 0x7e, 0x84, 0x80, 0xe4, 0x23, 0xb8, 0x24, 0xff, 0x5c, 0xee, 0x9a, 0x76, - 0x4f, 0xef, 0x17, 0x55, 0x52, 0xf4, 0xd5, 0xcc, 0x8b, 0x99, 0xfa, 0xcc, 0x66, 0x01, 0x75, 0x82, - 0x07, 0x51, 0xcb, 0xe8, 0x3d, 0xfa, 0x41, 0x06, 0x1c, 0x66, 0x2a, 0x49, 0x7b, 0xb0, 0x93, 0xa7, - 0xf0, 0x60, 0xbf, 0x9f, 0x83, 0xcb, 0x66, 0xd6, 0x37, 0x87, 0x2a, 0x8f, 0x71, 0x67, 0xa4, 0x78, - 0x22, 0x81, 0xa8, 0xe2, 0x81, 0x2c, 0x16, 0x66, 0xf7, 0x81, 0xbc, 0x1c, 0x85, 0xa4, 0x25, 0xb1, - 0xa9, 0xb2, 0x83, 0xc9, 0xef, 0xa6, 0x53, 0x41, 0x20, 0x66, 0xbb, 0x39, 0xb2, 0xc1, 0x3e, 0x87, - 0x74, 0x50, 0x79, 0x84, 0x74, 0x50, 0x2a, 0xbc, 0x98, 0x3a, 0xa7, 0xf0, 0xc2, 0x81, 0x39, 0xbb, - 0x67, 0xb6, 0xe9, 0x76, 0xbf, 0xdb, 0x95, 0x19, 0x70, 0x56, 0x99, 0x16, 0xd8, 0x99, 0x75, 0xa0, - 0x3c, 0xdc, 0xeb, 0xa6, 0x3f, 0x20, 0xd2, 0x8f, 0x36, 0xeb, 0x29, 0x24, 0x1c, 0xc0, 0xe6, 0xdb, - 0x92, 0xbb, 0xad, 0x5b, 0x34, 0xe0, 0xb3, 0x2d, 0x32, 0x25, 0xea, 0xdb, 0xea, 0xdb, 0x11, 0x19, - 0xe3, 0x32, 0x64, 0x03, 0x4a, 0x2d, 0x87, 0xa9, 0x6f, 0xb8, 0x66, 0x85, 0x95, 0x7a, 0x8d, 0xdb, - 0xb6, 0x95, 0xad, 0xa6, 0xfe, 0x6e, 0xeb, 0xea, 0xe0, 0x7f, 0x1e, 0x51, 0xd3, 0x7c, 0x8c, 0xda, - 0x93, 0x4d, 0x01, 0xa6, 0x8a, 0xa2, 0x65, 0x6a, 0xe3, 0xda, 0x09, 0x1e, 0xf2, 0xca, 0x56, 0x58, - 0xc3, 0x3d, 0xad, 0xd4, 0xa9, 0x52, 0xe7, 0x08, 0x81, 0xbc, 0x02, 0x05, 0xd7, 0x59, 0xfd, 0xd0, - 0x0e, 0x2a, 0x17, 0x93, 0x19, 0xf0, 0x7b, 0x82, 0x8a, 0x8a, 0x4b, 0xee, 0xc3, 0x95, 0x20, 0xe8, - 0xaa, 0xd0, 0xb6, 0xbe, 0x17, 0x50, 0x3f, 0x2c, 0x7c, 0x10, 0xc5, 0x2b, 0x79, 0xf9, 0x19, 0xd8, - 0xce, 0xce, 0xdd, 0x2c, 0x11, 0x3c, 0xa9, 0xed, 0xc9, 0x41, 0xf7, 0xfc, 0x90, 0x41, 0x77, 0x3c, - 0xce, 0xbb, 0xf4, 0x85, 0x71, 0xde, 0x40, 0x5c, 0x7a, 0xf9, 0x0c, 0x71, 0xe9, 0x7b, 0xa2, 0xbc, - 0xe3, 0xd6, 0xb2, 0x8a, 0xe9, 0xdf, 0x1a, 0x2e, 0x95, 0xc8, 0x11, 0xe4, 0x2b, 0x9f, 0xf8, 0x13, - 0x25, 0x26, 0xd9, 0x86, 0x4b, 0x9e, 0xdb, 0x1a, 0x08, 0x6b, 0x45, 0x10, 0x1f, 0xab, 0xed, 0xd9, - 0xce, 0x90, 0xc1, 0xcc, 0x96, 0xc2, 0x96, 0x46, 0xf4, 0x4a, 0x45, 0x4c, 0x8c, 0xb4, 0xa5, 0x11, - 0x19, 0xe3, 0x32, 0xe9, 0x28, 0xef, 0xf9, 0xa7, 0x16, 0xe5, 0x2d, 0x3c, 0x83, 0x28, 0xef, 0x85, - 0x67, 0x17, 0xe5, 0x7d, 0x56, 0x84, 0x99, 0xd4, 0x47, 0x8d, 0xba, 0xb2, 0x2a, 0x77, 0xda, 0xca, - 0xaa, 0x44, 0xe9, 0xd3, 0xd8, 0x53, 0x2d, 0x7d, 0x1a, 0x3f, 0xf7, 0xd2, 0xa7, 0x58, 0x89, 0xd7, - 0xc4, 0x97, 0x94, 0x78, 0xd5, 0x61, 0xd6, 0x72, 0x7b, 0x9e, 0xf8, 0x8a, 0x42, 0x15, 0xfa, 0xc8, - 0xc7, 0x78, 0xfd, 0xdc, 0xb9, 0x9c, 0x64, 0x63, 0x5a, 0x9e, 0x30, 0xc8, 0x3b, 0xa2, 0x61, 0x61, - 0x84, 0xf2, 0xd0, 0xe4, 0x82, 0x89, 0x8b, 0x52, 0x55, 0x68, 0x6a, 0x37, 0x5d, 0xaa, 0x97, 0xba, - 0xb8, 0xa3, 0x31, 0x9b, 0x2c, 0xc9, 0x63, 0x95, 0x92, 0xd0, 0xff, 0x8b, 0xe7, 0xa1, 0x3f, 0x59, - 0xff, 0xa7, 0x7a, 0x12, 0xbd, 0x00, 0x27, 0xb9, 0x98, 0xee, 0x09, 0xf1, 0xe1, 0x39, 0x2f, 0xcb, - 0x0d, 0x63, 0xea, 0x55, 0xe9, 0x8b, 0x9c, 0xc1, 0x45, 0xa5, 0xe5, 0xb9, 0x4c, 0x47, 0x8e, 0xe1, - 0x09, 0xc8, 0xf1, 0xfa, 0xb1, 0xe2, 0xd3, 0xaa, 0x1f, 0x5b, 0x38, 0x94, 0xa5, 0xa9, 0x27, 0x56, - 0xb5, 0xde, 0x4f, 0x56, 0x9a, 0xbf, 0x3b, 0xe4, 0x7f, 0x27, 0x14, 0x16, 0xbf, 0xc6, 0x2b, 0x6a, - 0x7f, 0x2d, 0x07, 0x97, 0xb2, 0x96, 0x25, 0xa3, 0x17, 0xcd, 0x64, 0x2f, 0x46, 0x0b, 0xd7, 0xe2, - 0xa6, 0xe5, 0xdf, 0xf3, 0xb1, 0xe0, 0x30, 0xa0, 0xde, 0x4f, 0x5e, 0x8e, 0x87, 0x7a, 0x39, 0x4e, - 0x7c, 0x2d, 0x9c, 0x7f, 0x86, 0x5f, 0x0b, 0x17, 0x86, 0xf8, 0x5a, 0x78, 0xf2, 0x59, 0x7e, 0x2d, - 0x5c, 0x3c, 0xe5, 0xd7, 0xc2, 0xa5, 0xa7, 0xff, 0xb5, 0xf0, 0xe7, 0x39, 0x98, 0x4b, 0x17, 0x2f, - 0x3f, 0x83, 0x24, 0xd9, 0x7e, 0x22, 0x49, 0xb6, 0x3e, 0x92, 0x31, 0x0f, 0xbb, 0x7d, 0x52, 0xb2, - 0xcc, 0xf8, 0x61, 0x0e, 0x06, 0x0a, 0xb4, 0x9f, 0x41, 0x1e, 0xeb, 0x51, 0x32, 0x8f, 0xb5, 0x7a, - 0x2e, 0x83, 0x3c, 0x21, 0x9f, 0xf5, 0x3f, 0x19, 0x43, 0xfc, 0x3f, 0xc9, 0x6b, 0x25, 0x4c, 0xdb, - 0xd8, 0xd3, 0x37, 0x6d, 0x8d, 0xda, 0x27, 0x9f, 0x2f, 0x5e, 0xf8, 0xf4, 0xf3, 0xc5, 0x0b, 0x9f, - 0x7d, 0xbe, 0x78, 0xe1, 0xe3, 0xe3, 0xc5, 0xdc, 0x27, 0xc7, 0x8b, 0xb9, 0x4f, 0x8f, 0x17, 0x73, - 0x9f, 0x1d, 0x2f, 0xe6, 0x7e, 0x78, 0xbc, 0x98, 0xfb, 0xbd, 0x7f, 0x5d, 0xbc, 0xf0, 0x4b, 0xc5, - 0x10, 0xf7, 0x7f, 0x03, 0x00, 0x00, 0xff, 0xff, 0x31, 0x26, 0xd6, 0xa8, 0xe7, 0x50, 0x00, 0x00, + // 4903 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xec, 0x7c, 0x4d, 0x6c, 0x1c, 0x47, + 0x76, 0xbf, 0x86, 0xe4, 0x0c, 0x67, 0xde, 0xf0, 0x4b, 0x25, 0xc9, 0x6a, 0xd3, 0x32, 0x47, 0xdb, + 0xfe, 0xdb, 0x7f, 0x6d, 0x62, 0x0f, 0xd7, 0xd2, 0x6e, 0xe2, 0xf5, 0xc6, 0xf6, 0xce, 0x70, 0x48, + 0x89, 0xa2, 0x48, 0x31, 0x6f, 0x28, 0x29, 0x1b, 0x1b, 0xd9, 0x34, 0xbb, 0x8b, 0x33, 0x2d, 0xce, + 0x74, 0xb7, 0xbb, 0x7a, 0x44, 0x13, 0x3e, 0xc4, 0x09, 0x12, 0x24, 0x41, 0xb0, 0x40, 0x72, 0x49, + 0x16, 0xd9, 0x4b, 0x90, 0x43, 0x72, 0x09, 0x02, 0xe4, 0x1a, 0x04, 0x1b, 0x20, 0xc8, 0xc1, 0xd8, + 0x4b, 0x8c, 0x5c, 0xe2, 0x43, 0x40, 0xac, 0x99, 0x4b, 0x82, 0x04, 0x08, 0x90, 0x4b, 0x00, 0x9d, + 0x82, 0xaa, 0xae, 0xae, 0xfe, 0x98, 0xa6, 0x45, 0xcd, 0x50, 0x0a, 0x82, 0xdd, 0x93, 0x38, 0xef, + 0xbd, 0xfa, 0xbd, 0xaa, 0xea, 0xd7, 0xaf, 0xde, 0x7b, 0xf5, 0x5a, 0xb0, 0xd2, 0xb1, 0x83, 0xee, + 0x60, 0xb7, 0x6e, 0xba, 0xfd, 0x65, 0xc3, 0xef, 0xb8, 0x9e, 0xef, 0x3e, 0x14, 0x7f, 0x2c, 0x7b, + 0xfb, 0x9d, 0x65, 0xc3, 0xb3, 0xd9, 0xf2, 0x81, 0xeb, 0xef, 0xef, 0xf5, 0xdc, 0x83, 0xe5, 0x47, + 0x6f, 0x1a, 0x3d, 0xaf, 0x6b, 0xbc, 0xb9, 0xdc, 0xa1, 0x0e, 0xf5, 0x8d, 0x80, 0x5a, 0x75, 0xcf, + 0x77, 0x03, 0x97, 0xdc, 0x88, 0x41, 0xea, 0x11, 0x88, 0xf8, 0xa3, 0xee, 0xed, 0x77, 0xea, 0x1c, + 0xa4, 0x1e, 0x81, 0xd4, 0x23, 0x90, 0xc5, 0x37, 0x12, 0x9a, 0x3b, 0x2e, 0x57, 0xc8, 0xb1, 0x76, + 0x07, 0x7b, 0xe2, 0x97, 0xf8, 0x21, 0xfe, 0x0a, 0x75, 0x2c, 0xea, 0xfb, 0x6f, 0xb1, 0xba, 0xed, + 0xf2, 0x29, 0x2d, 0x9b, 0xae, 0x4f, 0x97, 0x1f, 0x0d, 0xcd, 0x63, 0xf1, 0xeb, 0xb1, 0x4c, 0xdf, + 0x30, 0xbb, 0xb6, 0x43, 0xfd, 0xc3, 0x78, 0x1d, 0x7d, 0x1a, 0x18, 0x79, 0xa3, 0x96, 0x4f, 0x1a, + 0xe5, 0x0f, 0x9c, 0xc0, 0xee, 0xd3, 0xa1, 0x01, 0x3f, 0xf7, 0xa4, 0x01, 0xcc, 0xec, 0xd2, 0xbe, + 0x91, 0x1d, 0xa7, 0xff, 0x43, 0x01, 0xe6, 0x1b, 0xbe, 0xd9, 0xb5, 0x1f, 0xd1, 0x76, 0xc0, 0x19, + 0x9d, 0x43, 0xf2, 0x3e, 0x4c, 0x06, 0x86, 0xaf, 0x15, 0xae, 0x16, 0xae, 0x55, 0xaf, 0x7f, 0xbb, + 0x3e, 0xc2, 0x46, 0xd6, 0x77, 0x0c, 0x3f, 0x82, 0x6b, 0x4e, 0x1f, 0x1f, 0xd5, 0x26, 0x77, 0x0c, + 0x1f, 0x39, 0x2a, 0xf9, 0x2e, 0x4c, 0x39, 0xae, 0x43, 0xb5, 0x09, 0x81, 0xde, 0x18, 0x09, 0x7d, + 0xcb, 0x75, 0xd4, 0x6c, 0x9b, 0xe5, 0xe3, 0xa3, 0xda, 0x14, 0xa7, 0xa0, 0x00, 0xd6, 0xff, 0xb3, + 0x00, 0x95, 0x86, 0xdf, 0x19, 0xf4, 0xa9, 0x13, 0x30, 0xe2, 0x03, 0x78, 0x86, 0x6f, 0xf4, 0x69, + 0x40, 0x7d, 0xa6, 0x15, 0xae, 0x4e, 0x5e, 0xab, 0x5e, 0x7f, 0x77, 0x24, 0xa5, 0xdb, 0x11, 0x4c, + 0x93, 0x7c, 0x7a, 0x54, 0x3b, 0x77, 0x7c, 0x54, 0x03, 0x45, 0x62, 0x98, 0xd0, 0x42, 0x1c, 0xa8, + 0x18, 0x7e, 0x60, 0xef, 0x19, 0x66, 0xc0, 0xb4, 0x09, 0xa1, 0xf2, 0x9d, 0x91, 0x54, 0x36, 0x24, + 0x4a, 0xf3, 0xbc, 0xd4, 0x58, 0x89, 0x28, 0x0c, 0x63, 0x15, 0xfa, 0xbf, 0x4f, 0x42, 0x39, 0x62, + 0x90, 0xab, 0x30, 0xe5, 0x18, 0x7d, 0x2a, 0x9e, 0x5e, 0xa5, 0x39, 0x23, 0x07, 0x4e, 0x6d, 0x19, + 0x7d, 0xbe, 0x41, 0x46, 0x9f, 0x72, 0x09, 0xcf, 0x08, 0xba, 0xe2, 0x09, 0x24, 0x24, 0xb6, 0x8d, + 0xa0, 0x8b, 0x82, 0x43, 0xae, 0xc0, 0x54, 0xdf, 0xb5, 0xa8, 0x36, 0x79, 0xb5, 0x70, 0xad, 0x18, + 0x6e, 0xf0, 0xa6, 0x6b, 0x51, 0x14, 0x54, 0x3e, 0x7e, 0xcf, 0x77, 0xfb, 0xda, 0x54, 0x7a, 0xfc, + 0x9a, 0xef, 0xf6, 0x51, 0x70, 0xc8, 0xef, 0x15, 0x60, 0x21, 0x9a, 0xde, 0x1d, 0xd7, 0x34, 0x02, + 0xdb, 0x75, 0xb4, 0xa2, 0x78, 0xe0, 0xab, 0x63, 0x6d, 0x44, 0x04, 0xd6, 0xd4, 0xa4, 0xd6, 0x85, + 0x2c, 0x07, 0x87, 0x14, 0x93, 0xeb, 0x00, 0x9d, 0x9e, 0xbb, 0x6b, 0xf4, 0xf8, 0x1e, 0x68, 0x25, + 0x31, 0x6b, 0xf5, 0x08, 0x6f, 0x2a, 0x0e, 0x26, 0xa4, 0xc8, 0x3e, 0x4c, 0x1b, 0xe1, 0x5b, 0xa1, + 0x4d, 0x8b, 0x79, 0xb7, 0x46, 0x9c, 0x77, 0xea, 0xcd, 0x6a, 0x56, 0x8f, 0x8f, 0x6a, 0xd3, 0x92, + 0x88, 0x91, 0x06, 0xf2, 0x3a, 0x94, 0x5d, 0x8f, 0x4f, 0xd5, 0xe8, 0x69, 0xe5, 0xab, 0x85, 0x6b, + 0xe5, 0xe6, 0x82, 0x9c, 0x5e, 0xf9, 0xae, 0xa4, 0xa3, 0x92, 0xd0, 0xff, 0xa8, 0x08, 0x43, 0xab, + 0x26, 0x6f, 0x42, 0x55, 0xa2, 0xdd, 0x71, 0x3b, 0x4c, 0x3c, 0xfc, 0x72, 0x73, 0xfe, 0xf8, 0xa8, + 0x56, 0x6d, 0xc4, 0x64, 0x4c, 0xca, 0x90, 0x07, 0x30, 0xc1, 0x6e, 0xc8, 0xd7, 0xf0, 0xbd, 0x91, + 0x56, 0xd7, 0xbe, 0xa1, 0x0c, 0xb4, 0x74, 0x7c, 0x54, 0x9b, 0x68, 0xdf, 0xc0, 0x09, 0x76, 0x83, + 0xbb, 0x8f, 0x8e, 0x1d, 0x08, 0xe3, 0x19, 0xd5, 0x7d, 0xdc, 0xb4, 0x03, 0x05, 0x2d, 0xdc, 0xc7, + 0x4d, 0x3b, 0x40, 0x8e, 0xca, 0xdd, 0x47, 0x37, 0x08, 0x3c, 0x61, 0x7c, 0xa3, 0xba, 0x8f, 0x5b, + 0x3b, 0x3b, 0xdb, 0x0a, 0x5e, 0x58, 0x37, 0xa7, 0xa0, 0x00, 0x26, 0x1f, 0xf3, 0x9d, 0x0c, 0x79, + 0xae, 0x7f, 0x28, 0xad, 0xf6, 0xd6, 0x58, 0x56, 0xeb, 0xfa, 0x87, 0x4a, 0x9d, 0x7c, 0x26, 0x8a, + 0x81, 0x49, 0x6d, 0x62, 0x75, 0xd6, 0x1e, 0x13, 0x46, 0x3a, 0xf2, 0xea, 0x5a, 0x6b, 0xed, 0xcc, + 0xea, 0x5a, 0x6b, 0x6d, 0x14, 0xc0, 0xfc, 0xd9, 0xf8, 0xc6, 0x81, 0xb4, 0xe9, 0xd1, 0x9e, 0x0d, + 0x1a, 0x07, 0xe9, 0x67, 0x83, 0xc6, 0x01, 0x72, 0x54, 0xbd, 0x03, 0x97, 0x22, 0x0e, 0x52, 0xcf, + 0x65, 0xb6, 0x58, 0x20, 0xdd, 0x23, 0xcb, 0x50, 0x31, 0x5d, 0x67, 0xcf, 0xee, 0x6c, 0x1a, 0x9e, + 0x74, 0x4c, 0xca, 0xa3, 0xad, 0x44, 0x0c, 0x8c, 0x65, 0xc8, 0xcb, 0x30, 0xb9, 0x4f, 0x0f, 0xa5, + 0x87, 0xaa, 0x4a, 0xd1, 0xc9, 0x0d, 0x7a, 0x88, 0x9c, 0xae, 0xff, 0xb0, 0x00, 0x17, 0x72, 0x36, + 0x97, 0x0f, 0x1b, 0xf8, 0x3d, 0xa9, 0x41, 0x0d, 0xbb, 0x87, 0x77, 0x90, 0xd3, 0xc9, 0x6f, 0x17, + 0x60, 0x3e, 0xb1, 0xdb, 0x8d, 0x81, 0x74, 0x82, 0xa3, 0xbf, 0xdd, 0x29, 0xac, 0xe6, 0x65, 0xa9, + 0x71, 0x3e, 0xc3, 0xc0, 0xac, 0x56, 0xfd, 0x9f, 0xc4, 0xa9, 0x9b, 0xa2, 0x11, 0x03, 0xe6, 0x06, + 0x8c, 0xfa, 0xdc, 0x45, 0xb7, 0xa9, 0xe9, 0xd3, 0x40, 0x1e, 0xc0, 0xaf, 0xd6, 0xc3, 0xa3, 0x9d, + 0xcf, 0xa2, 0xce, 0xa3, 0x8c, 0xfa, 0xa3, 0x37, 0xeb, 0xa1, 0xc4, 0x06, 0x3d, 0x6c, 0xd3, 0x1e, + 0xe5, 0x18, 0x4d, 0x72, 0x7c, 0x54, 0x9b, 0xbb, 0x97, 0x02, 0xc0, 0x0c, 0x20, 0x57, 0xe1, 0x19, + 0x8c, 0x1d, 0xb8, 0xbe, 0x25, 0x55, 0x4c, 0x3c, 0xb5, 0x8a, 0xed, 0x14, 0x00, 0x66, 0x00, 0xf5, + 0xef, 0x00, 0xac, 0xb8, 0x4e, 0x60, 0x3b, 0x03, 0x7a, 0xd7, 0x21, 0xaf, 0x40, 0x91, 0xfa, 0xbe, + 0xeb, 0x4b, 0x87, 0x34, 0x2b, 0x37, 0xa8, 0xb8, 0xca, 0x89, 0x18, 0xf2, 0xc8, 0x6b, 0x50, 0xda, + 0x33, 0xec, 0x1e, 0xb5, 0xc4, 0x6c, 0xca, 0xcd, 0x39, 0x29, 0x55, 0x5a, 0x13, 0x54, 0x94, 0x5c, + 0xfd, 0x47, 0x13, 0x30, 0xb3, 0xe2, 0xbb, 0xce, 0x03, 0xf9, 0x20, 0xc8, 0xaf, 0x42, 0x99, 0xc7, + 0x4f, 0x96, 0x11, 0x18, 0x72, 0xaf, 0xbe, 0x96, 0x58, 0x88, 0x0a, 0x83, 0xe2, 0x47, 0xc8, 0xa5, + 0xf9, 0xd2, 0xee, 0xee, 0x3e, 0xa4, 0x66, 0xb0, 0x49, 0x03, 0x23, 0x3e, 0x08, 0x62, 0x1a, 0x2a, + 0x54, 0xd2, 0x81, 0x29, 0xe6, 0x51, 0x53, 0x6e, 0xd3, 0x68, 0x67, 0x57, 0x72, 0xca, 0x6d, 0x8f, + 0x9a, 0xf1, 0x89, 0xc9, 0x7f, 0xa1, 0x50, 0x40, 0x5c, 0x28, 0xb1, 0xc0, 0x08, 0x06, 0x4c, 0xba, + 0xcd, 0x9b, 0xe3, 0xab, 0x12, 0x70, 0xf1, 0x66, 0x86, 0xbf, 0x51, 0xaa, 0xd1, 0x3f, 0x2f, 0xc0, + 0x42, 0x52, 0xfc, 0x8e, 0xcd, 0x02, 0xf2, 0xc1, 0xd0, 0x86, 0xd6, 0x4f, 0xb7, 0xa1, 0x7c, 0xb4, + 0xd8, 0x4e, 0x75, 0x70, 0x45, 0x94, 0xc4, 0x66, 0xee, 0x41, 0xd1, 0x0e, 0x68, 0x3f, 0x0a, 0x89, + 0x1a, 0x63, 0x2f, 0x31, 0xb6, 0xa7, 0x75, 0x8e, 0x8b, 0x21, 0xbc, 0xfe, 0x97, 0x93, 0xe9, 0xa5, + 0xf1, 0x6d, 0xe6, 0x21, 0xc9, 0xcc, 0x41, 0x82, 0x20, 0xd7, 0x37, 0xda, 0x24, 0x52, 0x8f, 0xf3, + 0xff, 0xc9, 0x49, 0xcc, 0x24, 0xa9, 0x8f, 0x33, 0xbf, 0x31, 0xa5, 0x9c, 0x9f, 0xf8, 0x3c, 0x1e, + 0xb7, 0x06, 0x3d, 0x2a, 0x9d, 0x9c, 0xda, 0xb8, 0xb6, 0xa4, 0xa3, 0x92, 0x20, 0x1f, 0xc0, 0x79, + 0xd3, 0x75, 0xcc, 0x81, 0xef, 0x53, 0xc7, 0x3c, 0xdc, 0x76, 0x7b, 0xb6, 0x79, 0x28, 0xec, 0xa4, + 0xd2, 0xac, 0xcb, 0x61, 0xe7, 0x57, 0xb2, 0x02, 0x8f, 0xf3, 0x88, 0x38, 0x0c, 0x44, 0xbe, 0x0a, + 0xd3, 0x6c, 0xc0, 0x3c, 0xea, 0x58, 0xe2, 0x50, 0x2d, 0x37, 0xe7, 0x25, 0xe6, 0x74, 0x3b, 0x24, + 0x63, 0xc4, 0x27, 0xf7, 0xe0, 0x32, 0x0b, 0xb8, 0x2f, 0x73, 0x3a, 0x2d, 0x6a, 0x58, 0x3d, 0xdb, + 0xe1, 0x9e, 0xc5, 0x75, 0x2c, 0x26, 0xce, 0xc9, 0xc9, 0xe6, 0x4b, 0xc7, 0x47, 0xb5, 0xcb, 0xed, + 0x7c, 0x11, 0x3c, 0x69, 0xac, 0xfe, 0x8f, 0x05, 0x20, 0xc3, 0xa6, 0x4b, 0x36, 0xa0, 0x64, 0x98, + 0x01, 0x0f, 0xc1, 0xc2, 0xb0, 0xfd, 0x95, 0x3c, 0x2f, 0x15, 0xbe, 0xb6, 0x48, 0xf7, 0x28, 0x5f, + 0x13, 0x8d, 0xed, 0xbd, 0x21, 0x86, 0xa2, 0x84, 0x20, 0x2e, 0x9c, 0xef, 0x19, 0x2c, 0x88, 0x76, + 0xd7, 0xda, 0xb1, 0xfb, 0x51, 0x0e, 0xf2, 0x33, 0xa7, 0xb3, 0x71, 0x3e, 0xa2, 0x79, 0x89, 0xef, + 0xf5, 0x9d, 0x2c, 0x10, 0x0e, 0x63, 0xeb, 0x7f, 0x5c, 0x82, 0xe9, 0x56, 0xe3, 0xe6, 0x8e, 0xc1, + 0xf6, 0x4f, 0x11, 0x93, 0xbf, 0x0e, 0xe5, 0x80, 0xf6, 0xbd, 0x9e, 0x11, 0x0c, 0x19, 0xc4, 0x8e, + 0xa4, 0xa3, 0x92, 0x20, 0x2e, 0x4f, 0x30, 0x64, 0x86, 0x23, 0x1d, 0xc6, 0xbb, 0x23, 0x9e, 0x60, + 0x12, 0x25, 0x99, 0x61, 0x48, 0x12, 0xc6, 0x3a, 0x08, 0x83, 0x6a, 0xa4, 0x1c, 0xe9, 0x9e, 0x0c, + 0xbe, 0x46, 0xcc, 0x0c, 0x63, 0x9c, 0x30, 0x18, 0x4a, 0x10, 0x30, 0xa9, 0x85, 0x7c, 0x1d, 0x66, + 0x2c, 0xca, 0xed, 0x8e, 0x3a, 0xa6, 0x4d, 0xb9, 0x89, 0x4d, 0xf2, 0x7d, 0xe1, 0xaf, 0x5a, 0x2b, + 0x41, 0xc7, 0x94, 0x14, 0x79, 0x08, 0x95, 0x03, 0x3b, 0xe8, 0x0a, 0x8f, 0xa0, 0x95, 0x84, 0xe1, + 0x7c, 0x73, 0xa4, 0x89, 0x72, 0x84, 0x78, 0x5b, 0x1e, 0x44, 0x98, 0x18, 0xc3, 0xf3, 0xb8, 0x86, + 0xff, 0x10, 0x69, 0xa0, 0x88, 0xa9, 0x2a, 0xe9, 0x01, 0x82, 0x81, 0xb1, 0x0c, 0x61, 0x30, 0xc3, + 0x7f, 0xb4, 0xe9, 0x87, 0x03, 0x6e, 0xad, 0x22, 0xda, 0x1f, 0x35, 0x39, 0x8c, 0x40, 0xc2, 0x1d, + 0x79, 0x90, 0x80, 0xc5, 0x94, 0x12, 0x6e, 0x7d, 0x07, 0x5d, 0xea, 0x68, 0x95, 0xb4, 0xf5, 0x3d, + 0xe8, 0x52, 0x07, 0x05, 0x87, 0xb8, 0x00, 0xa6, 0x3a, 0xb4, 0x35, 0x18, 0x23, 0x25, 0x88, 0xcf, + 0xfe, 0xe6, 0x1c, 0x3f, 0x55, 0xe3, 0xdf, 0x98, 0x50, 0xa1, 0xff, 0x5d, 0x01, 0xaa, 0xfc, 0xe5, + 0x88, 0x0c, 0xfa, 0x35, 0x28, 0x05, 0x86, 0xdf, 0x91, 0x31, 0x4f, 0x25, 0x7e, 0x8b, 0x77, 0x04, + 0x15, 0x25, 0x97, 0x18, 0x50, 0x0c, 0x0c, 0xb6, 0x1f, 0x1d, 0x21, 0xbf, 0x30, 0xd2, 0x1c, 0xe5, + 0x5b, 0x19, 0x9f, 0x1e, 0xfc, 0x17, 0xc3, 0x10, 0x99, 0x5c, 0x83, 0x32, 0x8f, 0x37, 0xd6, 0x0c, + 0x16, 0xa6, 0x30, 0xe5, 0xe6, 0x0c, 0x7f, 0x0b, 0xd7, 0x24, 0x0d, 0x15, 0x57, 0xff, 0x00, 0xe6, + 0x56, 0x3f, 0xa2, 0xe6, 0x20, 0x70, 0xfd, 0x30, 0x88, 0x25, 0xb7, 0x81, 0x30, 0xea, 0x3f, 0xb2, + 0x4d, 0xda, 0x30, 0x4d, 0x77, 0xe0, 0x04, 0x5b, 0xf1, 0x5b, 0xbf, 0x28, 0xb5, 0x91, 0xf6, 0x90, + 0x04, 0xe6, 0x8c, 0xd2, 0xff, 0x62, 0x0a, 0xaa, 0x89, 0x34, 0x88, 0x3f, 0x45, 0x9f, 0x7a, 0x6e, + 0xd6, 0x87, 0xf0, 0x40, 0x1b, 0x05, 0x87, 0xfb, 0x10, 0x9f, 0x3e, 0xb2, 0x19, 0x4f, 0xb6, 0x33, + 0x3e, 0x04, 0x25, 0x1d, 0x95, 0x04, 0xa9, 0x41, 0xd1, 0xa2, 0x5e, 0xd0, 0x15, 0x8b, 0x9c, 0x6a, + 0x56, 0xf8, 0x46, 0xb4, 0x38, 0x01, 0x43, 0x3a, 0x17, 0xd8, 0xa3, 0x81, 0xd9, 0xd5, 0xa6, 0xc4, + 0x7b, 0x27, 0x04, 0xd6, 0x38, 0x01, 0x43, 0x7a, 0x4e, 0xc0, 0x5a, 0x7c, 0xf6, 0x01, 0x6b, 0xe9, + 0x8c, 0x03, 0x56, 0xe2, 0xc1, 0x05, 0xc6, 0xba, 0xdb, 0xbe, 0xfd, 0xc8, 0x08, 0xa8, 0x18, 0x2c, + 0xf4, 0x4c, 0x3f, 0x8d, 0x9e, 0xcb, 0xc7, 0x47, 0xb5, 0x0b, 0xed, 0xf6, 0xad, 0x2c, 0x0a, 0xe6, + 0x41, 0x93, 0x36, 0x5c, 0xb2, 0x1d, 0x46, 0xcd, 0x81, 0x4f, 0xd7, 0x3b, 0x8e, 0xeb, 0xd3, 0x5b, + 0x2e, 0xe3, 0x70, 0x32, 0xf7, 0x7f, 0x59, 0x3e, 0xb4, 0x4b, 0xeb, 0x79, 0x42, 0x98, 0x3f, 0x56, + 0xff, 0x51, 0x01, 0x66, 0x92, 0x99, 0x1f, 0x61, 0x00, 0xdd, 0xd6, 0x5a, 0x3b, 0xb4, 0x4c, 0x19, + 0xed, 0xbc, 0x37, 0x72, 0x42, 0x19, 0xc2, 0xc4, 0xd1, 0x72, 0x4c, 0xc3, 0x84, 0x9a, 0x53, 0x94, + 0x96, 0x5e, 0x81, 0xe2, 0x9e, 0xeb, 0x9b, 0x54, 0xbe, 0x5b, 0xea, 0x1d, 0x5c, 0xe3, 0x44, 0x0c, + 0x79, 0xfa, 0xbf, 0x16, 0x20, 0xa1, 0x81, 0xfc, 0x1a, 0xcc, 0x72, 0x1d, 0x1b, 0xfe, 0x6e, 0x6a, + 0x35, 0xcd, 0x91, 0x57, 0xa3, 0x90, 0x9a, 0x97, 0xa4, 0xfe, 0xd9, 0x14, 0x19, 0xd3, 0xfa, 0xc8, + 0xcf, 0x42, 0xc5, 0xb0, 0x2c, 0x9f, 0x32, 0x46, 0x43, 0xd7, 0x53, 0x69, 0xce, 0x8a, 0xb3, 0x32, + 0x22, 0x62, 0xcc, 0xe7, 0xaf, 0x21, 0x4f, 0xb5, 0xb9, 0x65, 0xcb, 0x20, 0x4d, 0xbd, 0x86, 0x5c, + 0x09, 0xa7, 0xa3, 0x92, 0xd0, 0xbf, 0x37, 0x05, 0x69, 0xdd, 0xc4, 0x82, 0xf9, 0x7d, 0x7f, 0x77, + 0x65, 0xc5, 0x30, 0xbb, 0x23, 0x25, 0x82, 0x17, 0x78, 0x06, 0xba, 0x91, 0x46, 0xc0, 0x2c, 0xa4, + 0xd4, 0xb2, 0x41, 0x0f, 0x03, 0x63, 0x77, 0x94, 0x5c, 0x30, 0xd2, 0x92, 0x44, 0xc0, 0x2c, 0x24, + 0xf9, 0x06, 0x54, 0xf7, 0xfd, 0xdd, 0xe8, 0x25, 0x97, 0xdb, 0x71, 0x41, 0x6e, 0x47, 0x75, 0x23, + 0x66, 0x61, 0x52, 0x8e, 0x6f, 0xe1, 0xbe, 0xbf, 0x8b, 0xd4, 0xe8, 0x45, 0x55, 0x46, 0xb5, 0x85, + 0x1b, 0x92, 0x8e, 0x4a, 0x82, 0x78, 0x40, 0xf6, 0xa3, 0xdd, 0x53, 0xd5, 0x04, 0xe9, 0x8b, 0xae, + 0xe5, 0xad, 0x46, 0x09, 0x25, 0x17, 0xf4, 0x02, 0xf7, 0xcd, 0x1b, 0x43, 0x38, 0x98, 0x83, 0x4d, + 0xbe, 0x03, 0x97, 0xf7, 0xfd, 0x5d, 0xe9, 0xc8, 0xb7, 0x7d, 0xdb, 0x31, 0x6d, 0x2f, 0x55, 0x5e, + 0xac, 0xc9, 0xe9, 0x5e, 0xde, 0xc8, 0x17, 0xc3, 0x93, 0xc6, 0xeb, 0x6f, 0xc0, 0x4c, 0xb2, 0x3c, + 0xf5, 0x84, 0x92, 0x86, 0xfe, 0x1f, 0x05, 0x28, 0xad, 0x3b, 0xde, 0xe0, 0x27, 0xa4, 0xd2, 0xfd, + 0xa7, 0x53, 0x30, 0xc5, 0x43, 0x2f, 0x72, 0x0d, 0xa6, 0x82, 0x43, 0x2f, 0x3c, 0x5b, 0x27, 0x9b, + 0x17, 0x23, 0x47, 0xb3, 0x73, 0xe8, 0xd1, 0xc7, 0xf2, 0x5f, 0x14, 0x12, 0xe4, 0x5d, 0x28, 0x39, + 0x83, 0xfe, 0x7d, 0xa3, 0x27, 0x9d, 0xd2, 0x6b, 0x51, 0x68, 0xb1, 0x25, 0xa8, 0x8f, 0x8f, 0x6a, + 0x17, 0xa9, 0x63, 0xba, 0x96, 0xed, 0x74, 0x96, 0x1f, 0x32, 0xd7, 0xa9, 0x6f, 0x0d, 0xfa, 0xbb, + 0xd4, 0x47, 0x39, 0x8a, 0xa7, 0x47, 0xbb, 0xae, 0xdb, 0xe3, 0x00, 0x93, 0xe9, 0xf4, 0xa8, 0x19, + 0x92, 0x31, 0xe2, 0xf3, 0x28, 0x86, 0x05, 0x3e, 0x97, 0x9c, 0x4a, 0x47, 0x31, 0x6d, 0x41, 0x45, + 0xc9, 0x25, 0x7d, 0x28, 0xf5, 0x0d, 0x8f, 0xcb, 0x15, 0xc5, 0x96, 0xad, 0x8e, 0x1c, 0x9f, 0xd6, + 0x37, 0x05, 0xce, 0xaa, 0x13, 0xf8, 0x87, 0xb1, 0xba, 0x90, 0x88, 0x52, 0x09, 0xb1, 0x61, 0xba, + 0x67, 0xb3, 0x80, 0xeb, 0x2b, 0x8d, 0x61, 0x15, 0x5c, 0xdf, 0x7d, 0xa3, 0x37, 0xa0, 0xf1, 0x0e, + 0xdc, 0x09, 0x61, 0x31, 0xc2, 0x5f, 0x3c, 0x84, 0x6a, 0x62, 0x46, 0x64, 0x21, 0x2c, 0xe3, 0x09, + 0xe3, 0x15, 0x95, 0x3b, 0xb2, 0x03, 0xc5, 0x47, 0x1c, 0x43, 0x3a, 0x9b, 0x31, 0x67, 0x82, 0x21, + 0xd8, 0xdb, 0x13, 0x6f, 0x15, 0xde, 0x2e, 0x7f, 0xff, 0x4f, 0x6a, 0xe7, 0x3e, 0xf9, 0xe7, 0xab, + 0xe7, 0xf4, 0xbf, 0x9f, 0x84, 0x8a, 0x12, 0xf9, 0xbf, 0x6d, 0x29, 0x7e, 0xc6, 0x52, 0x6e, 0x8f, + 0xb7, 0x5f, 0xa7, 0x32, 0x97, 0x46, 0xda, 0x5c, 0x66, 0x9a, 0xff, 0x3f, 0xf1, 0xa8, 0x1f, 0x1f, + 0xd5, 0xb4, 0xf4, 0x26, 0xa0, 0x71, 0xb0, 0x49, 0x19, 0x33, 0x3a, 0x34, 0x36, 0x83, 0x6f, 0x3e, + 0xc9, 0x0c, 0x2e, 0x26, 0xcd, 0xa0, 0x92, 0xff, 0x18, 0x3f, 0x99, 0x84, 0xf2, 0x66, 0x54, 0x3b, + 0xfa, 0xad, 0x02, 0x54, 0x0d, 0xc7, 0x71, 0x03, 0x71, 0xdd, 0x11, 0xb9, 0xb7, 0xad, 0x91, 0xb6, + 0x23, 0x02, 0xad, 0x37, 0x62, 0xc0, 0x70, 0x4b, 0xd4, 0xc9, 0x94, 0xe0, 0x60, 0x52, 0x2f, 0xf9, + 0x10, 0x4a, 0x3d, 0x63, 0x97, 0xf6, 0x22, 0x6f, 0xb7, 0x3e, 0xde, 0x0c, 0xee, 0x08, 0xac, 0xcc, + 0xf3, 0x08, 0x89, 0x28, 0x15, 0x2d, 0xbe, 0x0b, 0x0b, 0xd9, 0x89, 0x3e, 0xcd, 0x8e, 0xf2, 0x87, + 0x91, 0x50, 0xf3, 0x34, 0x43, 0xf5, 0xbf, 0xa9, 0x00, 0x6c, 0xb9, 0x16, 0x95, 0x05, 0x99, 0x45, + 0x98, 0xb0, 0x2d, 0x79, 0x14, 0x81, 0x9c, 0xed, 0xc4, 0x7a, 0x0b, 0x27, 0x6c, 0x4b, 0x95, 0x38, + 0x26, 0x4e, 0x2c, 0x71, 0x7c, 0x03, 0xaa, 0x96, 0xcd, 0xbc, 0x9e, 0x71, 0xb8, 0x95, 0x13, 0x0b, + 0xb4, 0x62, 0x16, 0x26, 0xe5, 0xc8, 0xeb, 0xf2, 0xfd, 0x0d, 0x5f, 0x14, 0x2d, 0xf3, 0xfe, 0x96, + 0xf9, 0xf4, 0x12, 0xef, 0xf0, 0x5b, 0x30, 0x13, 0x95, 0x10, 0x84, 0x96, 0xa2, 0x18, 0x15, 0xbd, + 0xf5, 0x33, 0x3b, 0x09, 0x1e, 0xa6, 0x24, 0xb3, 0x25, 0x8e, 0xd2, 0x73, 0x29, 0x71, 0xb4, 0x60, + 0x81, 0x05, 0xae, 0x4f, 0xad, 0x48, 0x62, 0xbd, 0xa5, 0x91, 0xd4, 0x42, 0x17, 0xda, 0x19, 0x3e, + 0x0e, 0x8d, 0x20, 0xdb, 0x70, 0x31, 0x9a, 0x44, 0x72, 0x81, 0xda, 0x05, 0x81, 0x74, 0x45, 0x22, + 0x5d, 0x7c, 0x90, 0x23, 0x83, 0xb9, 0x23, 0xc9, 0xd7, 0xa0, 0xe8, 0x75, 0x0d, 0x46, 0x65, 0x51, + 0x23, 0xca, 0x5d, 0x8b, 0xdb, 0x9c, 0xf8, 0xf8, 0xa8, 0x56, 0xe1, 0xdb, 0x2e, 0x7e, 0x60, 0x28, + 0x48, 0xae, 0x03, 0xec, 0xba, 0x03, 0xc7, 0x32, 0xfc, 0xc3, 0xf5, 0x96, 0xc8, 0x64, 0x12, 0x97, + 0xac, 0x4d, 0xc5, 0xc1, 0x84, 0x14, 0x77, 0x98, 0xfd, 0xd0, 0x75, 0xc8, 0xda, 0x84, 0x72, 0x98, + 0xca, 0xa3, 0x48, 0x3e, 0x79, 0x1f, 0x2a, 0xa2, 0x7a, 0x48, 0xad, 0x46, 0x20, 0x0b, 0x14, 0x4f, + 0x53, 0xb6, 0x53, 0x51, 0x45, 0x3b, 0x02, 0xc1, 0x18, 0x8f, 0xfc, 0x0a, 0xc0, 0x9e, 0xed, 0xd8, + 0xac, 0x2b, 0xd0, 0xab, 0x4f, 0x8d, 0xae, 0xd6, 0xb9, 0xa6, 0x50, 0x30, 0x81, 0xc8, 0x73, 0x1e, + 0xcf, 0xb5, 0xd6, 0xb7, 0xb5, 0x19, 0xb1, 0x4a, 0x95, 0xf3, 0x6c, 0x73, 0x22, 0x86, 0x3c, 0x72, + 0x0d, 0xca, 0x96, 0x41, 0xfb, 0xae, 0x43, 0x2d, 0x6d, 0x36, 0xae, 0x3b, 0xb4, 0x24, 0x0d, 0x15, + 0x97, 0x7c, 0x17, 0x4a, 0xb6, 0x08, 0xf9, 0xb4, 0x39, 0x31, 0xd5, 0x6f, 0x8d, 0x76, 0x28, 0x08, + 0x88, 0x26, 0x70, 0x8f, 0x13, 0xfe, 0x8d, 0x12, 0x96, 0x98, 0x30, 0xed, 0x0e, 0x02, 0xa1, 0x61, + 0x5e, 0x68, 0x18, 0xad, 0xce, 0x72, 0x37, 0xc4, 0x08, 0x2f, 0xbd, 0xe5, 0x0f, 0x8c, 0x90, 0xf9, + 0x7a, 0xcd, 0xae, 0xdd, 0xb3, 0x7c, 0xea, 0x68, 0x0b, 0x22, 0xa5, 0x12, 0xeb, 0x5d, 0x91, 0x34, + 0x54, 0x5c, 0xf2, 0xf3, 0x30, 0xeb, 0x0e, 0x02, 0x61, 0x37, 0xdc, 0xec, 0x98, 0x76, 0x5e, 0x88, + 0x9f, 0xe7, 0x69, 0xdb, 0xdd, 0x24, 0x03, 0xd3, 0x72, 0xfa, 0x1c, 0xcc, 0x24, 0x3b, 0x45, 0xf4, + 0x3f, 0x98, 0x80, 0x68, 0x1e, 0x3f, 0x09, 0xd1, 0x32, 0xd1, 0xa1, 0xe4, 0x53, 0x36, 0xe8, 0x05, + 0xd2, 0xd9, 0x8a, 0x67, 0x8d, 0x82, 0x82, 0x92, 0xa3, 0x1f, 0xc0, 0x2c, 0x9f, 0x6d, 0xaf, 0x47, + 0x7b, 0xed, 0x80, 0x7a, 0x8c, 0xec, 0x41, 0x91, 0xf1, 0x3f, 0xe4, 0x9e, 0x8c, 0x79, 0x41, 0x12, + 0x50, 0x2f, 0xb6, 0x77, 0xa1, 0x00, 0x43, 0x78, 0xfd, 0x0f, 0x27, 0xa0, 0xa2, 0xf6, 0xe9, 0x14, + 0x15, 0xf2, 0x57, 0x61, 0xda, 0xa2, 0x7b, 0x06, 0x5f, 0x8d, 0xbc, 0x16, 0xe6, 0x66, 0xd5, 0x0a, + 0x49, 0x18, 0xf1, 0x48, 0x2d, 0x3a, 0xcc, 0xc2, 0x25, 0x8b, 0xaa, 0x55, 0x32, 0x56, 0x24, 0xfb, + 0x50, 0x11, 0x7f, 0xac, 0x45, 0x2d, 0x2c, 0xa3, 0x3e, 0xf7, 0xfb, 0x11, 0x4a, 0x58, 0x0b, 0x50, + 0x3f, 0x31, 0xc6, 0xcf, 0xb4, 0x9e, 0x14, 0x4f, 0xd3, 0x7a, 0xa2, 0xaf, 0x01, 0x77, 0x0c, 0x37, + 0x57, 0xc8, 0x3b, 0x50, 0x66, 0xd2, 0x74, 0xe5, 0xbe, 0x7c, 0x45, 0x5d, 0x12, 0x49, 0xfa, 0xe3, + 0xa3, 0xda, 0xac, 0x10, 0x8e, 0x08, 0xa8, 0x86, 0xe8, 0xcb, 0x50, 0x4d, 0x5c, 0xd5, 0xf3, 0x1d, + 0x56, 0xf7, 0x7a, 0x89, 0x1d, 0x6e, 0x19, 0x81, 0x81, 0x82, 0xa3, 0x3f, 0x9e, 0x80, 0x05, 0xa4, + 0xcc, 0x1d, 0xf8, 0x26, 0x4d, 0x56, 0x66, 0x0d, 0x53, 0xf4, 0xef, 0x64, 0x2a, 0xb3, 0x0d, 0x41, + 0x45, 0xc9, 0x25, 0xdf, 0x82, 0xd9, 0x3e, 0xf5, 0x3b, 0xea, 0x65, 0x93, 0x0f, 0x49, 0xd5, 0x57, + 0x36, 0x93, 0x4c, 0x4c, 0xcb, 0xf2, 0x7c, 0xbf, 0x6f, 0x38, 0xf6, 0x1e, 0x65, 0x41, 0xb6, 0x64, + 0xb2, 0x29, 0xe9, 0xa8, 0x24, 0xc8, 0x4d, 0x38, 0xcf, 0x68, 0x70, 0xf7, 0xc0, 0xa1, 0xbe, 0xba, + 0xf7, 0x91, 0x57, 0x57, 0x2f, 0x46, 0xd7, 0x61, 0xed, 0xac, 0x00, 0x0e, 0x8f, 0x11, 0xa7, 0xef, + 0xc0, 0x34, 0x29, 0x63, 0x2b, 0xae, 0x63, 0xd9, 0xaa, 0x4b, 0x29, 0x79, 0xfa, 0x66, 0xf8, 0x38, + 0x34, 0x82, 0xa3, 0xec, 0x19, 0x76, 0x6f, 0xe0, 0xd3, 0x18, 0xa5, 0x94, 0x46, 0x59, 0xcb, 0xf0, + 0x71, 0x68, 0x84, 0xfe, 0x08, 0x66, 0x91, 0x06, 0xfe, 0xa1, 0xda, 0x93, 0x1a, 0x14, 0x7b, 0x76, + 0xdf, 0x0e, 0x8b, 0x3f, 0xc5, 0xd0, 0x90, 0xef, 0x70, 0x02, 0x86, 0x74, 0xd2, 0x82, 0xaa, 0xcf, + 0x47, 0xc8, 0xfb, 0xc0, 0x70, 0xbf, 0xf5, 0x28, 0x9e, 0xc2, 0x98, 0xf5, 0x38, 0xfd, 0x13, 0x93, + 0xc3, 0xf4, 0xef, 0x17, 0x00, 0xe2, 0x3e, 0x1e, 0xb2, 0x0f, 0x65, 0x76, 0xa3, 0x39, 0x30, 0xf7, + 0x55, 0xd5, 0x69, 0xc4, 0xcb, 0x09, 0x09, 0x92, 0xb8, 0xd7, 0x94, 0x14, 0x54, 0x0a, 0x9e, 0xd4, + 0xe5, 0xf1, 0x57, 0x93, 0xa0, 0x46, 0x71, 0x13, 0xa1, 0x8e, 0xe5, 0xb9, 0xb6, 0x13, 0xdd, 0x11, + 0x28, 0xe4, 0x55, 0x49, 0x47, 0x25, 0xc1, 0xad, 0x76, 0x37, 0x5c, 0xc4, 0x44, 0xda, 0x6a, 0xe5, + 0x1c, 0x24, 0x97, 0xcb, 0xf9, 0xb4, 0xc3, 0x9f, 0xd8, 0x64, 0x5a, 0x0e, 0x05, 0x15, 0x25, 0x97, + 0x1f, 0x56, 0x51, 0xd9, 0x55, 0x5a, 0x9a, 0x38, 0xac, 0xa2, 0x0a, 0x2d, 0x2a, 0x2e, 0xe9, 0xc2, + 0xbc, 0x21, 0x0c, 0x24, 0x2e, 0x25, 0x3f, 0x55, 0x55, 0x3c, 0xee, 0x21, 0x49, 0xa3, 0x60, 0x16, + 0x96, 0x6b, 0x62, 0xf1, 0xf0, 0xa7, 0x2f, 0x8e, 0x2b, 0x4d, 0xed, 0x34, 0x0a, 0x66, 0x61, 0x79, + 0x9c, 0xe6, 0xbb, 0x3d, 0xda, 0xc0, 0x2d, 0x19, 0x0f, 0xaa, 0x38, 0x0d, 0x43, 0x32, 0x46, 0x7c, + 0xfd, 0x77, 0x0a, 0x30, 0xd7, 0x36, 0x7d, 0xdb, 0x0b, 0x94, 0x07, 0xd9, 0x12, 0xcd, 0x3f, 0x81, + 0xc1, 0x23, 0x28, 0x69, 0x53, 0x2f, 0x9f, 0x50, 0x95, 0x0b, 0x85, 0x52, 0xbd, 0x41, 0x21, 0x09, + 0x63, 0x08, 0x91, 0x3b, 0x0b, 0x1f, 0x95, 0x7d, 0xb6, 0x6d, 0x41, 0x45, 0xc9, 0xd5, 0x7f, 0x50, + 0x80, 0xb2, 0xba, 0x03, 0x7b, 0x05, 0x8a, 0xe2, 0x6a, 0x45, 0xda, 0x8e, 0x3a, 0x92, 0x56, 0x38, + 0x11, 0x43, 0x1e, 0x17, 0x12, 0x41, 0xa1, 0x04, 0x4e, 0x9c, 0x5b, 0x86, 0x1f, 0x60, 0xc8, 0xe3, + 0x46, 0x4b, 0x1d, 0x4b, 0xda, 0x8b, 0x32, 0xda, 0x55, 0xc7, 0x42, 0x4e, 0x17, 0xcd, 0x2c, 0xae, + 0xdf, 0x37, 0x82, 0x6c, 0x66, 0xbf, 0x26, 0xa8, 0x28, 0xb9, 0xfa, 0x7b, 0x30, 0x2f, 0xaf, 0xd7, + 0xd5, 0x46, 0xbd, 0x0e, 0x65, 0x6b, 0xe0, 0x1b, 0x09, 0x67, 0xab, 0x4c, 0xbc, 0x25, 0xe9, 0xa8, + 0x24, 0xf4, 0x59, 0xa8, 0x26, 0x9a, 0x6c, 0xf5, 0xff, 0xba, 0x0c, 0xea, 0xa6, 0xf8, 0xa7, 0xf7, + 0xcd, 0x23, 0x25, 0x63, 0xa6, 0x8a, 0xab, 0x8b, 0xe3, 0xc7, 0xd5, 0xea, 0xb9, 0x67, 0x62, 0xeb, + 0x4e, 0x1c, 0x5b, 0x97, 0xce, 0x20, 0xb6, 0x56, 0x6f, 0xe2, 0x50, 0x7c, 0xfd, 0xbb, 0x05, 0x98, + 0x71, 0x78, 0xee, 0x2e, 0xdf, 0x77, 0x6d, 0x5a, 0xc4, 0x73, 0x77, 0xc7, 0xda, 0xc4, 0xfa, 0x56, + 0x02, 0x31, 0x2c, 0x5b, 0xa8, 0xdc, 0x3a, 0xc9, 0xc2, 0x94, 0x6a, 0xb2, 0x06, 0x65, 0x63, 0x8f, + 0x27, 0x44, 0xc1, 0xa1, 0xbc, 0xf2, 0xbe, 0x92, 0xe7, 0x01, 0x1a, 0x52, 0x26, 0x74, 0xae, 0xd1, + 0x2f, 0x54, 0x63, 0xf9, 0xe9, 0xa4, 0xfa, 0x93, 0x2a, 0x63, 0x9c, 0x4e, 0x51, 0xfd, 0x25, 0x11, + 0x66, 0x48, 0x4a, 0xa2, 0x5d, 0x49, 0x87, 0x52, 0x98, 0x72, 0x89, 0x7c, 0xb3, 0x1c, 0x46, 0xcf, + 0x61, 0x3a, 0x86, 0x92, 0x43, 0x3a, 0x51, 0xb0, 0x5c, 0x15, 0x9b, 0xdb, 0x1c, 0x39, 0x81, 0x50, + 0xf1, 0x77, 0x7e, 0xb4, 0x4c, 0x6e, 0x27, 0x9d, 0xe8, 0xcc, 0x69, 0x9c, 0xe8, 0xec, 0x89, 0x0e, + 0xb4, 0x03, 0x25, 0x26, 0x5c, 0xb4, 0xc8, 0x33, 0xab, 0xd7, 0x57, 0x46, 0x3b, 0xe1, 0x53, 0x5e, + 0x3e, 0xdc, 0x9d, 0x90, 0x86, 0x12, 0x9e, 0xb8, 0x50, 0xf6, 0x65, 0x3c, 0x29, 0x53, 0xd5, 0xd1, + 0x2a, 0xdd, 0xd9, 0xa0, 0x34, 0xb4, 0x8f, 0x88, 0x8a, 0x4a, 0x09, 0x79, 0x1f, 0x26, 0x2d, 0xa3, + 0x23, 0x93, 0xd6, 0x6f, 0x8f, 0xdc, 0x1c, 0x10, 0xa9, 0x11, 0xdd, 0xad, 0xad, 0xc6, 0x4d, 0xe4, + 0xa8, 0x64, 0x3f, 0xee, 0x93, 0x5a, 0x18, 0xa3, 0x69, 0x34, 0xe3, 0xf5, 0xc3, 0x34, 0x66, 0xa8, + 0xd3, 0x6a, 0x15, 0xa6, 0x1f, 0xb9, 0xbd, 0x41, 0x5f, 0x66, 0xbb, 0xd5, 0xeb, 0x8b, 0x79, 0x4f, + 0xfb, 0xbe, 0x10, 0x89, 0x9d, 0x40, 0xf8, 0x9b, 0x61, 0x34, 0x96, 0xfc, 0x46, 0x01, 0xe6, 0xf8, + 0xab, 0xa3, 0xec, 0x80, 0x69, 0x64, 0x0c, 0x4b, 0xbd, 0xc7, 0xa8, 0x1f, 0x5b, 0xd8, 0x0b, 0x52, + 0xed, 0xdc, 0x7a, 0x4a, 0x03, 0x66, 0x34, 0x12, 0x0f, 0xca, 0xcc, 0xb6, 0xa8, 0x69, 0xf8, 0x4c, + 0xbb, 0x70, 0x66, 0xda, 0xe3, 0xc0, 0x52, 0x62, 0xa3, 0xd2, 0x42, 0x7e, 0x53, 0x34, 0xfa, 0xca, + 0x56, 0x77, 0xf9, 0xf9, 0xc1, 0xc5, 0xb3, 0xfc, 0xfc, 0xe0, 0x42, 0xd8, 0xe5, 0x9b, 0xd2, 0x80, + 0x59, 0x95, 0xe4, 0x2e, 0x5c, 0x0a, 0xbb, 0xcf, 0xb2, 0xcd, 0x72, 0x97, 0xc4, 0x5d, 0xc4, 0x8b, + 0xc7, 0x47, 0xb5, 0x4b, 0x8d, 0x3c, 0x01, 0xcc, 0x1f, 0x47, 0x3e, 0x86, 0x59, 0x3f, 0x99, 0x24, + 0x68, 0x2f, 0x8c, 0x71, 0x11, 0x9e, 0x4a, 0x37, 0xc2, 0x6a, 0x4a, 0x8a, 0x84, 0x69, 0x5d, 0xe4, + 0x4d, 0xa8, 0x7a, 0xd2, 0x53, 0xd9, 0xac, 0xaf, 0x5d, 0x16, 0x6b, 0x10, 0x27, 0xea, 0x76, 0x4c, + 0xc6, 0xa4, 0x0c, 0xb9, 0x07, 0xd5, 0xc0, 0xed, 0x51, 0x5f, 0x16, 0xed, 0x35, 0xf1, 0xf0, 0x97, + 0xf2, 0x2c, 0x79, 0x47, 0x89, 0xc5, 0x25, 0xe1, 0x98, 0xc6, 0x30, 0x89, 0xc3, 0x73, 0xcd, 0xa8, + 0x37, 0xd2, 0x17, 0x89, 0xf5, 0x8b, 0xe9, 0x5c, 0xb3, 0x9d, 0x64, 0x62, 0x5a, 0x96, 0x67, 0x8f, + 0x9e, 0x6f, 0xbb, 0xbe, 0x1d, 0x1c, 0xae, 0xf4, 0x0c, 0xc6, 0x04, 0xc0, 0xa2, 0x00, 0x50, 0xd9, + 0xe3, 0x76, 0x56, 0x00, 0x87, 0xc7, 0xf0, 0x9c, 0x20, 0x22, 0x6a, 0x2f, 0x89, 0x1c, 0x4d, 0xb8, + 0xa5, 0x68, 0x2c, 0x2a, 0xee, 0x09, 0x6d, 0x41, 0x57, 0x46, 0x69, 0x0b, 0x22, 0x16, 0x5c, 0x31, + 0x06, 0x81, 0xdb, 0xe7, 0x84, 0xf4, 0x90, 0x1d, 0x77, 0x9f, 0x3a, 0xda, 0x55, 0x71, 0x56, 0x5d, + 0x3d, 0x3e, 0xaa, 0x5d, 0x69, 0x7c, 0x89, 0x1c, 0x7e, 0x29, 0x0a, 0xe9, 0x43, 0x99, 0xca, 0xd6, + 0x26, 0xed, 0x2b, 0x63, 0x1c, 0x12, 0xe9, 0xfe, 0xa8, 0x70, 0x83, 0x22, 0x1a, 0x2a, 0x15, 0x64, + 0x07, 0xaa, 0x5d, 0x97, 0x05, 0x8d, 0x9e, 0x6d, 0x30, 0xca, 0xb4, 0x97, 0x85, 0x9d, 0xe4, 0x9e, + 0x6f, 0xb7, 0x22, 0xb1, 0xd8, 0x4c, 0x6e, 0xc5, 0x23, 0x31, 0x09, 0x43, 0xa8, 0x48, 0x90, 0x06, + 0xe2, 0xa9, 0xb9, 0x4e, 0x40, 0x3f, 0x0a, 0xb4, 0x25, 0xb1, 0x96, 0xd7, 0xf2, 0x90, 0xb7, 0x5d, + 0xab, 0x9d, 0x96, 0x0e, 0xdf, 0xf2, 0x0c, 0x11, 0xb3, 0x98, 0xe4, 0x2d, 0x98, 0xf1, 0x5c, 0xab, + 0xed, 0x51, 0x73, 0xdb, 0x08, 0xcc, 0xae, 0x56, 0x4b, 0x5f, 0x39, 0x6c, 0x27, 0x78, 0x98, 0x92, + 0x5c, 0x7c, 0x0f, 0xce, 0x0f, 0xc5, 0x53, 0x4f, 0x75, 0x3f, 0xf3, 0x67, 0x05, 0x48, 0x86, 0xb3, + 0x67, 0x1e, 0xf7, 0xdf, 0x84, 0xf3, 0xf2, 0xf3, 0x41, 0x7e, 0xd8, 0xf6, 0x06, 0x41, 0x94, 0x29, + 0x27, 0x2a, 0x2d, 0x98, 0x15, 0xc0, 0xe1, 0x31, 0xfa, 0x9f, 0x17, 0x60, 0x36, 0xe5, 0xbe, 0xcf, + 0x3c, 0x2b, 0x5c, 0x03, 0xd2, 0xb7, 0x7d, 0xdf, 0xf5, 0xc3, 0x33, 0x70, 0x93, 0xdb, 0x32, 0x93, + 0x1f, 0x14, 0x88, 0xd6, 0x8e, 0xcd, 0x21, 0x2e, 0xe6, 0x8c, 0xd0, 0xff, 0xba, 0x00, 0x71, 0x29, + 0x4f, 0xf5, 0x33, 0x15, 0x4e, 0xec, 0x67, 0x7a, 0x1d, 0xca, 0x0f, 0x99, 0xeb, 0x6c, 0xc7, 0x5d, + 0x4f, 0x6a, 0x43, 0x6f, 0xb7, 0xef, 0x6e, 0x09, 0x49, 0x25, 0x21, 0xa4, 0x3f, 0x5c, 0xb3, 0x7b, + 0xc1, 0x70, 0x6f, 0xd0, 0xed, 0x5f, 0x0c, 0xe9, 0xa8, 0x24, 0xc8, 0x32, 0x54, 0x54, 0xf5, 0x58, + 0xa6, 0x93, 0x6a, 0x13, 0x54, 0xe9, 0x14, 0x63, 0x19, 0xfd, 0x87, 0x13, 0x50, 0x7e, 0x8e, 0x5f, + 0x47, 0x98, 0xa9, 0xaf, 0x23, 0xce, 0xa0, 0x95, 0x3e, 0xef, 0xcb, 0x88, 0xfd, 0xcc, 0x97, 0x11, + 0x2b, 0x63, 0x16, 0xa4, 0xbf, 0xf4, 0xab, 0x88, 0xcf, 0x0a, 0x30, 0xf3, 0x1c, 0xbf, 0x88, 0xd8, + 0x4d, 0x7f, 0x11, 0xf1, 0xce, 0x58, 0x4b, 0x3b, 0xe1, 0x6b, 0x88, 0xbf, 0xbd, 0x00, 0xa9, 0x2f, + 0x11, 0x88, 0x03, 0x95, 0xe8, 0x05, 0x8f, 0x8a, 0xfc, 0xef, 0x8c, 0x95, 0x14, 0xc6, 0x46, 0x19, + 0x51, 0x18, 0xc6, 0x2a, 0xc8, 0x75, 0x00, 0xca, 0x3d, 0x5b, 0x58, 0xbb, 0x9b, 0x48, 0xd7, 0xc0, + 0x57, 0x15, 0x07, 0x13, 0x52, 0xcf, 0xbf, 0xe0, 0x90, 0x7f, 0x44, 0x4f, 0x3d, 0x93, 0x23, 0xfa, + 0xca, 0x99, 0x1f, 0xd1, 0x2f, 0x3f, 0xfb, 0x23, 0x3a, 0x91, 0x90, 0x14, 0xc7, 0x48, 0x48, 0x3e, + 0x86, 0x8b, 0xe1, 0x9f, 0x2b, 0x3d, 0xc3, 0xee, 0x2b, 0x7b, 0x91, 0x8d, 0x49, 0x5f, 0xcd, 0x3d, + 0x98, 0xa9, 0xcf, 0x6c, 0x16, 0x50, 0x27, 0xb8, 0x1f, 0x8f, 0x8c, 0x6f, 0xb5, 0xef, 0xe7, 0xc0, + 0x61, 0xae, 0x92, 0x6c, 0x04, 0x3b, 0x7d, 0x8a, 0x08, 0xf6, 0x07, 0x05, 0xb8, 0x64, 0xe4, 0x7d, + 0xd3, 0x28, 0xeb, 0x18, 0xb7, 0xc7, 0xca, 0x27, 0x52, 0x88, 0x32, 0x1f, 0xc8, 0x63, 0x61, 0xfe, + 0x1c, 0xc8, 0xab, 0x71, 0x4a, 0x5a, 0x11, 0x46, 0x95, 0x9f, 0x4c, 0x7e, 0x2f, 0x5b, 0x0a, 0x02, + 0xb1, 0xdb, 0xed, 0xb1, 0x1d, 0xf6, 0x19, 0x94, 0x83, 0xaa, 0x63, 0x94, 0x83, 0x32, 0xe9, 0xc5, + 0xcc, 0x19, 0xa5, 0x17, 0x0e, 0x2c, 0xd8, 0x7d, 0xa3, 0x43, 0xb7, 0x07, 0xbd, 0x5e, 0x58, 0x01, + 0x67, 0xda, 0xac, 0xc0, 0xce, 0xed, 0x26, 0xe5, 0xe9, 0x5e, 0x2f, 0xfb, 0x19, 0x92, 0xba, 0xfa, + 0x59, 0xcf, 0x20, 0xe1, 0x10, 0x36, 0x37, 0x4b, 0x1e, 0xb6, 0x6e, 0xd1, 0x80, 0xef, 0xb6, 0xa8, + 0x94, 0xc8, 0x6f, 0xb7, 0x6f, 0xc5, 0x64, 0x4c, 0xca, 0x90, 0x0d, 0xa8, 0x58, 0x0e, 0x93, 0x37, + 0x3f, 0xf3, 0xc2, 0x4b, 0xbd, 0xc1, 0x7d, 0x5b, 0x6b, 0xab, 0xad, 0xee, 0x7c, 0xae, 0x0c, 0xff, + 0xe7, 0x14, 0x75, 0xc5, 0xc7, 0x78, 0x3c, 0xd9, 0x14, 0x60, 0xb2, 0xb5, 0x3a, 0x2c, 0x6d, 0x5c, + 0x3d, 0x21, 0x42, 0x6e, 0x6d, 0x45, 0x9d, 0xe0, 0xb3, 0x52, 0x9d, 0x6c, 0x98, 0x8e, 0x11, 0xc8, + 0x6b, 0x50, 0x72, 0x9d, 0xd5, 0x8f, 0xec, 0x40, 0x3b, 0x9f, 0xae, 0x80, 0xdf, 0x15, 0x54, 0x94, + 0x5c, 0x72, 0x0f, 0x2e, 0x07, 0x41, 0x4f, 0xa6, 0xb6, 0x8d, 0xbd, 0x80, 0xfa, 0x51, 0xfb, 0x84, + 0x68, 0x81, 0x29, 0x86, 0x1f, 0x93, 0xed, 0xec, 0xdc, 0xc9, 0x13, 0xc1, 0x93, 0xc6, 0x9e, 0x9c, + 0x74, 0x5f, 0x18, 0x31, 0xe9, 0x4e, 0xe6, 0x79, 0x17, 0xbf, 0x34, 0xcf, 0x1b, 0xca, 0x4b, 0x2f, + 0x3d, 0x45, 0x5e, 0xfa, 0xbe, 0x68, 0x12, 0xb9, 0xb9, 0x22, 0x73, 0xfa, 0xb7, 0x47, 0x2b, 0x25, + 0x72, 0x84, 0xf0, 0xae, 0x50, 0xfc, 0x89, 0x21, 0x26, 0xd9, 0x86, 0x8b, 0x9e, 0x6b, 0x0d, 0xa5, + 0xb5, 0x22, 0x89, 0x4f, 0x74, 0x08, 0x6d, 0xe7, 0xc8, 0x60, 0xee, 0x48, 0xe1, 0x4b, 0x63, 0xba, + 0xa6, 0x89, 0x8d, 0x09, 0x7d, 0x69, 0x4c, 0xc6, 0xa4, 0x4c, 0x36, 0xcb, 0x7b, 0xf1, 0x99, 0x65, + 0x79, 0x8b, 0xcf, 0x21, 0xcb, 0x7b, 0xe9, 0xf9, 0x65, 0x79, 0x9f, 0x97, 0x61, 0x2e, 0xf3, 0x69, + 0xa4, 0xea, 0xcf, 0x2a, 0x9c, 0xb6, 0x3f, 0x2b, 0xd5, 0x40, 0x35, 0xf1, 0x4c, 0x1b, 0xa8, 0x26, + 0xcf, 0xbc, 0x81, 0x2a, 0xd1, 0x28, 0x36, 0xf5, 0x84, 0x46, 0xb1, 0x06, 0xcc, 0x9b, 0x6e, 0xdf, + 0x13, 0xdf, 0x62, 0xc8, 0x76, 0xa1, 0xf0, 0x4a, 0x5f, 0x5d, 0x77, 0xae, 0xa4, 0xd9, 0x98, 0x95, + 0x27, 0x0c, 0x8a, 0x8e, 0x18, 0x58, 0x1a, 0xa3, 0xc9, 0x34, 0xfd, 0xc0, 0xc4, 0x41, 0x29, 0xfb, + 0x3c, 0x55, 0x98, 0x1e, 0xaa, 0x0f, 0x75, 0xf1, 0x40, 0x63, 0x3e, 0xdd, 0xd8, 0xc7, 0xb4, 0x8a, + 0xd0, 0xff, 0x4b, 0x67, 0xa1, 0x3f, 0xdd, 0x45, 0x28, 0x67, 0x12, 0xdf, 0x00, 0xa7, 0xb9, 0x98, + 0x9d, 0x09, 0xf1, 0xe1, 0x05, 0x2f, 0x2f, 0x0c, 0x63, 0xf2, 0x56, 0xe9, 0xcb, 0x82, 0xc1, 0x25, + 0xa9, 0xe5, 0x85, 0xdc, 0x40, 0x8e, 0xe1, 0x09, 0xc8, 0xc9, 0x2e, 0xb4, 0xf2, 0xb3, 0xea, 0x42, + 0x5b, 0x3c, 0x0c, 0x1b, 0x5c, 0x4f, 0xec, 0x8d, 0xbd, 0x97, 0xee, 0x57, 0x7f, 0x6f, 0xc4, 0xff, + 0xae, 0x28, 0x6a, 0xa1, 0x4d, 0xf6, 0xe5, 0xfe, 0x7a, 0x01, 0x2e, 0xe6, 0x3d, 0x96, 0x9c, 0x59, + 0xb4, 0xd3, 0xb3, 0x18, 0x2f, 0x5d, 0x4b, 0xba, 0x96, 0x7f, 0x2b, 0x26, 0x92, 0xc3, 0x80, 0x7a, + 0x3f, 0xbd, 0x39, 0x1e, 0xe9, 0xe6, 0x38, 0xf5, 0xcd, 0x71, 0xf1, 0x39, 0x7e, 0x73, 0x5c, 0x1a, + 0xe1, 0x9b, 0xe3, 0xe9, 0xe7, 0xf9, 0xcd, 0x71, 0xf9, 0x94, 0xdf, 0x1c, 0x57, 0x9e, 0xfd, 0x37, + 0xc7, 0x5f, 0x14, 0x60, 0x21, 0xdb, 0x02, 0xfd, 0x1c, 0x8a, 0x64, 0xfb, 0xa9, 0x22, 0xd9, 0xfa, + 0x58, 0xce, 0x3c, 0x9a, 0xf6, 0x49, 0xc5, 0x32, 0xfd, 0xc7, 0x05, 0x18, 0x6a, 0xf3, 0x7e, 0x0e, + 0x75, 0xac, 0x87, 0xe9, 0x3a, 0xd6, 0xea, 0x99, 0x2c, 0xf2, 0x84, 0x7a, 0xd6, 0x7f, 0xe7, 0x2c, + 0xf1, 0x7f, 0xa5, 0xae, 0x95, 0x72, 0x6d, 0x13, 0xcf, 0xde, 0xb5, 0x35, 0xeb, 0x9f, 0x7e, 0xb1, + 0x74, 0xee, 0xb3, 0x2f, 0x96, 0xce, 0x7d, 0xfe, 0xc5, 0xd2, 0xb9, 0x4f, 0x8e, 0x97, 0x0a, 0x9f, + 0x1e, 0x2f, 0x15, 0x3e, 0x3b, 0x5e, 0x2a, 0x7c, 0x7e, 0xbc, 0x54, 0xf8, 0xf1, 0xf1, 0x52, 0xe1, + 0xf7, 0xff, 0x65, 0xe9, 0xdc, 0x2f, 0x97, 0x23, 0xdc, 0xff, 0x09, 0x00, 0x00, 0xff, 0xff, 0x45, + 0x7e, 0x2b, 0xe0, 0x47, 0x51, 0x00, 0x00, } func (m *ArchiveStrategy) Marshal() (dAtA []byte, err error) { @@ -2292,16 +2295,6 @@ func (m *CronWorkflow) MarshalToSizedBuffer(dAtA []byte) (int, error) { _ = i var l int _ = l - { - size, err := m.Options.MarshalToSizedBuffer(dAtA[:i]) - if err != nil { - return 0, err - } - i -= size - i = encodeVarintGenerated(dAtA, i, uint64(size)) - } - i-- - dAtA[i] = 0x22 { size, err := m.Status.MarshalToSizedBuffer(dAtA[:i]) if err != nil { @@ -2382,7 +2375,7 @@ func (m *CronWorkflowList) MarshalToSizedBuffer(dAtA []byte) (int, error) { return len(dAtA) - i, nil } -func (m *CronWorkflowOptions) Marshal() (dAtA []byte, err error) { +func (m *CronWorkflowSpec) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) n, err := m.MarshalToSizedBuffer(dAtA[:size]) @@ -2392,12 +2385,12 @@ func (m *CronWorkflowOptions) Marshal() (dAtA []byte, err error) { return dAtA[:n], nil } -func (m *CronWorkflowOptions) MarshalTo(dAtA []byte) (int, error) { +func (m *CronWorkflowSpec) MarshalTo(dAtA []byte) (int, error) { size := m.Size() return m.MarshalToSizedBuffer(dAtA[:size]) } -func (m *CronWorkflowOptions) MarshalToSizedBuffer(dAtA []byte) (int, error) { +func (m *CronWorkflowSpec) MarshalToSizedBuffer(dAtA []byte) (int, error) { i := len(dAtA) _ = i var l int @@ -2405,7 +2398,7 @@ func (m *CronWorkflowOptions) MarshalToSizedBuffer(dAtA []byte) (int, error) { if m.StartingDeadlineSeconds != nil { i = encodeVarintGenerated(dAtA, i, uint64(*m.StartingDeadlineSeconds)) i-- - dAtA[i] = 0x20 + dAtA[i] = 0x28 } i-- if m.Suspend { @@ -2414,16 +2407,26 @@ func (m *CronWorkflowOptions) MarshalToSizedBuffer(dAtA []byte) (int, error) { dAtA[i] = 0 } i-- - dAtA[i] = 0x18 + dAtA[i] = 0x20 i -= len(m.ConcurrencyPolicy) copy(dAtA[i:], m.ConcurrencyPolicy) i = encodeVarintGenerated(dAtA, i, uint64(len(m.ConcurrencyPolicy))) i-- - dAtA[i] = 0x12 + dAtA[i] = 0x1a i -= len(m.Schedule) copy(dAtA[i:], m.Schedule) i = encodeVarintGenerated(dAtA, i, uint64(len(m.Schedule))) i-- + dAtA[i] = 0x12 + { + size, err := m.WorkflowSpec.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- dAtA[i] = 0xa return len(dAtA) - i, nil } @@ -3720,6 +3723,11 @@ func (m *RetryStrategy) MarshalToSizedBuffer(dAtA []byte) (int, error) { _ = i var l int _ = l + i -= len(m.RetryPolicy) + copy(dAtA[i:], m.RetryPolicy) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.RetryPolicy))) + i-- + dAtA[i] = 0x12 if m.Limit != nil { i = encodeVarintGenerated(dAtA, i, uint64(*m.Limit)) i-- @@ -5495,8 +5503,6 @@ func (m *CronWorkflow) Size() (n int) { n += 1 + l + sovGenerated(uint64(l)) l = m.Status.Size() n += 1 + l + sovGenerated(uint64(l)) - l = m.Options.Size() - n += 1 + l + sovGenerated(uint64(l)) return n } @@ -5517,12 +5523,14 @@ func (m *CronWorkflowList) Size() (n int) { return n } -func (m *CronWorkflowOptions) Size() (n int) { +func (m *CronWorkflowSpec) Size() (n int) { if m == nil { return 0 } var l int _ = l + l = m.WorkflowSpec.Size() + n += 1 + l + sovGenerated(uint64(l)) l = len(m.Schedule) n += 1 + l + sovGenerated(uint64(l)) l = len(m.ConcurrencyPolicy) @@ -6025,6 +6033,8 @@ func (m *RetryStrategy) Size() (n int) { if m.Limit != nil { n += 1 + sovGenerated(uint64(*m.Limit)) } + l = len(m.RetryPolicy) + n += 1 + l + sovGenerated(uint64(l)) return n } @@ -6695,9 +6705,8 @@ func (this *CronWorkflow) String() string { } s := strings.Join([]string{`&CronWorkflow{`, `ObjectMeta:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.ObjectMeta), "ObjectMeta", "v11.ObjectMeta", 1), `&`, ``, 1) + `,`, - `Spec:` + strings.Replace(strings.Replace(this.Spec.String(), "WorkflowSpec", "WorkflowSpec", 1), `&`, ``, 1) + `,`, + `Spec:` + strings.Replace(strings.Replace(this.Spec.String(), "CronWorkflowSpec", "CronWorkflowSpec", 1), `&`, ``, 1) + `,`, `Status:` + strings.Replace(strings.Replace(this.Status.String(), "CronWorkflowStatus", "CronWorkflowStatus", 1), `&`, ``, 1) + `,`, - `Options:` + strings.Replace(strings.Replace(this.Options.String(), "CronWorkflowOptions", "CronWorkflowOptions", 1), `&`, ``, 1) + `,`, `}`, }, "") return s @@ -6718,11 +6727,12 @@ func (this *CronWorkflowList) String() string { }, "") return s } -func (this *CronWorkflowOptions) String() string { +func (this *CronWorkflowSpec) String() string { if this == nil { return "nil" } - s := strings.Join([]string{`&CronWorkflowOptions{`, + s := strings.Join([]string{`&CronWorkflowSpec{`, + `WorkflowSpec:` + strings.Replace(strings.Replace(this.WorkflowSpec.String(), "WorkflowSpec", "WorkflowSpec", 1), `&`, ``, 1) + `,`, `Schedule:` + fmt.Sprintf("%v", this.Schedule) + `,`, `ConcurrencyPolicy:` + fmt.Sprintf("%v", this.ConcurrencyPolicy) + `,`, `Suspend:` + fmt.Sprintf("%v", this.Suspend) + `,`, @@ -7045,6 +7055,7 @@ func (this *RetryStrategy) String() string { } s := strings.Join([]string{`&RetryStrategy{`, `Limit:` + valueToStringGenerated(this.Limit) + `,`, + `RetryPolicy:` + fmt.Sprintf("%v", this.RetryPolicy) + `,`, `}`, }, "") return s @@ -8867,39 +8878,6 @@ func (m *CronWorkflow) Unmarshal(dAtA []byte) error { return err } iNdEx = postIndex - case 4: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Options", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowGenerated - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthGenerated - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthGenerated - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - if err := m.Options.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex default: iNdEx = preIndex skippy, err := skipGenerated(dAtA[iNdEx:]) @@ -9044,7 +9022,7 @@ func (m *CronWorkflowList) Unmarshal(dAtA []byte) error { } return nil } -func (m *CronWorkflowOptions) Unmarshal(dAtA []byte) error { +func (m *CronWorkflowSpec) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 for iNdEx < l { @@ -9067,13 +9045,46 @@ func (m *CronWorkflowOptions) Unmarshal(dAtA []byte) error { fieldNum := int32(wire >> 3) wireType := int(wire & 0x7) if wireType == 4 { - return fmt.Errorf("proto: CronWorkflowOptions: wiretype end group for non-group") + return fmt.Errorf("proto: CronWorkflowSpec: wiretype end group for non-group") } if fieldNum <= 0 { - return fmt.Errorf("proto: CronWorkflowOptions: illegal tag %d (wire type %d)", fieldNum, wire) + return fmt.Errorf("proto: CronWorkflowSpec: illegal tag %d (wire type %d)", fieldNum, wire) } switch fieldNum { case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field WorkflowSpec", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.WorkflowSpec.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 2: if wireType != 2 { return fmt.Errorf("proto: wrong wireType = %d for field Schedule", wireType) } @@ -9105,7 +9116,7 @@ func (m *CronWorkflowOptions) Unmarshal(dAtA []byte) error { } m.Schedule = string(dAtA[iNdEx:postIndex]) iNdEx = postIndex - case 2: + case 3: if wireType != 2 { return fmt.Errorf("proto: wrong wireType = %d for field ConcurrencyPolicy", wireType) } @@ -9137,7 +9148,7 @@ func (m *CronWorkflowOptions) Unmarshal(dAtA []byte) error { } m.ConcurrencyPolicy = ConcurrencyPolicy(dAtA[iNdEx:postIndex]) iNdEx = postIndex - case 3: + case 4: if wireType != 0 { return fmt.Errorf("proto: wrong wireType = %d for field Suspend", wireType) } @@ -9157,7 +9168,7 @@ func (m *CronWorkflowOptions) Unmarshal(dAtA []byte) error { } } m.Suspend = bool(v != 0) - case 4: + case 5: if wireType != 0 { return fmt.Errorf("proto: wrong wireType = %d for field StartingDeadlineSeconds", wireType) } @@ -13555,6 +13566,38 @@ func (m *RetryStrategy) Unmarshal(dAtA []byte) error { } } m.Limit = &v + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field RetryPolicy", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.RetryPolicy = RetryPolicy(dAtA[iNdEx:postIndex]) + iNdEx = postIndex default: iNdEx = preIndex skippy, err := skipGenerated(dAtA[iNdEx:]) diff --git a/pkg/apis/workflow/v1alpha1/generated.proto b/pkg/apis/workflow/v1alpha1/generated.proto index bfffaf007c7a..42000dc39331 100644 --- a/pkg/apis/workflow/v1alpha1/generated.proto +++ b/pkg/apis/workflow/v1alpha1/generated.proto @@ -129,11 +129,9 @@ message ContinueOn { message CronWorkflow { optional k8s.io.apimachinery.pkg.apis.meta.v1.ObjectMeta metadata = 1; - optional WorkflowSpec spec = 2; + optional CronWorkflowSpec spec = 2; optional CronWorkflowStatus status = 3; - - optional CronWorkflowOptions options = 4; } // CronWorkflowList is list of CronWorkflow resources @@ -144,20 +142,22 @@ message CronWorkflowList { repeated CronWorkflow items = 2; } -// CronWorkflowOptions is the schedule of when to run CronWorkflows -message CronWorkflowOptions { +message CronWorkflowSpec { + // WorkflowSpec is the spec of the workflow to be run + optional WorkflowSpec workflowSpec = 1; + // Schedule is a schedule to run the Workflow in Cron format - optional string schedule = 1; + optional string schedule = 2; // ConcurrencyPolicy is the K8s-style concurrency policy that will be used - optional string concurrencyPolicy = 2; + optional string concurrencyPolicy = 3; // Suspend is a flag that will stop new CronWorkflows from running if set to true - optional bool suspend = 3; + optional bool suspend = 4; // StartingDeadlineSeconds is the K8s-style deadline that will limit the time a CronWorkflow will be run after its // original scheduled time if it is missed. - optional int64 startingDeadlineSeconds = 4; + optional int64 startingDeadlineSeconds = 5; } message CronWorkflowStatus { @@ -530,6 +530,9 @@ message ResourceTemplate { message RetryStrategy { // Limit is the maximum number of attempts when retrying a container optional int32 limit = 1; + + // RetryOn is a list of NodePhase statuses that will be retried + optional string retryPolicy = 2; } // S3Artifact is the location of an S3 artifact diff --git a/pkg/apis/workflow/v1alpha1/openapi_generated.go b/pkg/apis/workflow/v1alpha1/openapi_generated.go index 79e67eea1f99..1b90177b80fd 100644 --- a/pkg/apis/workflow/v1alpha1/openapi_generated.go +++ b/pkg/apis/workflow/v1alpha1/openapi_generated.go @@ -23,7 +23,7 @@ func GetOpenAPIDefinitions(ref common.ReferenceCallback) map[string]common.OpenA "github.com/argoproj/argo/pkg/apis/workflow/v1alpha1.ContinueOn": schema_pkg_apis_workflow_v1alpha1_ContinueOn(ref), "github.com/argoproj/argo/pkg/apis/workflow/v1alpha1.CronWorkflow": schema_pkg_apis_workflow_v1alpha1_CronWorkflow(ref), "github.com/argoproj/argo/pkg/apis/workflow/v1alpha1.CronWorkflowList": schema_pkg_apis_workflow_v1alpha1_CronWorkflowList(ref), - "github.com/argoproj/argo/pkg/apis/workflow/v1alpha1.CronWorkflowOptions": schema_pkg_apis_workflow_v1alpha1_CronWorkflowOptions(ref), + "github.com/argoproj/argo/pkg/apis/workflow/v1alpha1.CronWorkflowSpec": schema_pkg_apis_workflow_v1alpha1_CronWorkflowSpec(ref), "github.com/argoproj/argo/pkg/apis/workflow/v1alpha1.CronWorkflowStatus": schema_pkg_apis_workflow_v1alpha1_CronWorkflowStatus(ref), "github.com/argoproj/argo/pkg/apis/workflow/v1alpha1.DAGTask": schema_pkg_apis_workflow_v1alpha1_DAGTask(ref), "github.com/argoproj/argo/pkg/apis/workflow/v1alpha1.DAGTemplate": schema_pkg_apis_workflow_v1alpha1_DAGTemplate(ref), @@ -449,7 +449,7 @@ func schema_pkg_apis_workflow_v1alpha1_CronWorkflow(ref common.ReferenceCallback }, "spec": { SchemaProps: spec.SchemaProps{ - Ref: ref("github.com/argoproj/argo/pkg/apis/workflow/v1alpha1.WorkflowSpec"), + Ref: ref("github.com/argoproj/argo/pkg/apis/workflow/v1alpha1.CronWorkflowSpec"), }, }, "status": { @@ -457,17 +457,12 @@ func schema_pkg_apis_workflow_v1alpha1_CronWorkflow(ref common.ReferenceCallback Ref: ref("github.com/argoproj/argo/pkg/apis/workflow/v1alpha1.CronWorkflowStatus"), }, }, - "options": { - SchemaProps: spec.SchemaProps{ - Ref: ref("github.com/argoproj/argo/pkg/apis/workflow/v1alpha1.CronWorkflowOptions"), - }, - }, }, - Required: []string{"spec", "status", "options"}, + Required: []string{"spec", "status"}, }, }, Dependencies: []string{ - "github.com/argoproj/argo/pkg/apis/workflow/v1alpha1.CronWorkflowOptions", "github.com/argoproj/argo/pkg/apis/workflow/v1alpha1.CronWorkflowStatus", "github.com/argoproj/argo/pkg/apis/workflow/v1alpha1.WorkflowSpec", "k8s.io/apimachinery/pkg/apis/meta/v1.ObjectMeta"}, + "github.com/argoproj/argo/pkg/apis/workflow/v1alpha1.CronWorkflowSpec", "github.com/argoproj/argo/pkg/apis/workflow/v1alpha1.CronWorkflowStatus", "k8s.io/apimachinery/pkg/apis/meta/v1.ObjectMeta"}, } } @@ -518,13 +513,18 @@ func schema_pkg_apis_workflow_v1alpha1_CronWorkflowList(ref common.ReferenceCall } } -func schema_pkg_apis_workflow_v1alpha1_CronWorkflowOptions(ref common.ReferenceCallback) common.OpenAPIDefinition { +func schema_pkg_apis_workflow_v1alpha1_CronWorkflowSpec(ref common.ReferenceCallback) common.OpenAPIDefinition { return common.OpenAPIDefinition{ Schema: spec.Schema{ SchemaProps: spec.SchemaProps{ - Description: "CronWorkflowOptions is the schedule of when to run CronWorkflows", - Type: []string{"object"}, + Type: []string{"object"}, Properties: map[string]spec.Schema{ + "workflowSpec": { + SchemaProps: spec.SchemaProps{ + Description: "WorkflowSpec is the spec of the workflow to be run", + Ref: ref("github.com/argoproj/argo/pkg/apis/workflow/v1alpha1.WorkflowSpec"), + }, + }, "schedule": { SchemaProps: spec.SchemaProps{ Description: "Schedule is a schedule to run the Workflow in Cron format", @@ -557,6 +557,8 @@ func schema_pkg_apis_workflow_v1alpha1_CronWorkflowOptions(ref common.ReferenceC Required: []string{"schedule"}, }, }, + Dependencies: []string{ + "github.com/argoproj/argo/pkg/apis/workflow/v1alpha1.WorkflowSpec"}, } } diff --git a/pkg/apis/workflow/v1alpha1/zz_generated.deepcopy.go b/pkg/apis/workflow/v1alpha1/zz_generated.deepcopy.go index 174faac1f40e..59d57176bd69 100644 --- a/pkg/apis/workflow/v1alpha1/zz_generated.deepcopy.go +++ b/pkg/apis/workflow/v1alpha1/zz_generated.deepcopy.go @@ -227,7 +227,6 @@ func (in *CronWorkflow) DeepCopyInto(out *CronWorkflow) { in.ObjectMeta.DeepCopyInto(&out.ObjectMeta) in.Spec.DeepCopyInto(&out.Spec) in.Status.DeepCopyInto(&out.Status) - in.Options.DeepCopyInto(&out.Options) return } @@ -283,8 +282,9 @@ func (in *CronWorkflowList) DeepCopyObject() runtime.Object { } // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *CronWorkflowOptions) DeepCopyInto(out *CronWorkflowOptions) { +func (in *CronWorkflowSpec) DeepCopyInto(out *CronWorkflowSpec) { *out = *in + in.WorkflowSpec.DeepCopyInto(&out.WorkflowSpec) if in.StartingDeadlineSeconds != nil { in, out := &in.StartingDeadlineSeconds, &out.StartingDeadlineSeconds *out = new(int64) @@ -293,12 +293,12 @@ func (in *CronWorkflowOptions) DeepCopyInto(out *CronWorkflowOptions) { return } -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new CronWorkflowOptions. -func (in *CronWorkflowOptions) DeepCopy() *CronWorkflowOptions { +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new CronWorkflowSpec. +func (in *CronWorkflowSpec) DeepCopy() *CronWorkflowSpec { if in == nil { return nil } - out := new(CronWorkflowOptions) + out := new(CronWorkflowSpec) in.DeepCopyInto(out) return out } diff --git a/workflow/common/util.go b/workflow/common/util.go index 23226ea48065..8fa5700e4ae4 100644 --- a/workflow/common/util.go +++ b/workflow/common/util.go @@ -663,7 +663,7 @@ func CastToWorkflow(cronWf *wfv1.CronWorkflow) (*wfv1.Workflow, error) { wf := &wfv1.Workflow{ TypeMeta: newTypeMeta, ObjectMeta: newObjectMeta, - Spec: cronWf.Spec, + Spec: cronWf.Spec.WorkflowSpec, } wf.SetOwnerReferences(append(wf.GetOwnerReferences(), *metav1.NewControllerRef(cronWf, wfv1.SchemeGroupVersion.WithKind(workflow.CronWorkflowKind)))) return wf, nil diff --git a/workflow/cron/controller.go b/workflow/cron/controller.go index d9e9e73c0f10..0b8f0c831905 100644 --- a/workflow/cron/controller.go +++ b/workflow/cron/controller.go @@ -139,7 +139,7 @@ func (cc *Controller) processNextCronItem() bool { delete(cc.nameEntryIDMap, key.(string)) } - entryId, err := cc.cron.AddJob(cronWf.Options.Schedule, cronWorkflowOperationCtx) + entryId, err := cc.cron.AddJob(cronWf.Spec.Schedule, cronWorkflowOperationCtx) if err != nil { log.Errorf("could not schedule CronWorkflow: %s", err) return true diff --git a/workflow/cron/operator.go b/workflow/cron/operator.go index 7dc3f2ac9085..4ea62f614a0a 100644 --- a/workflow/cron/operator.go +++ b/workflow/cron/operator.go @@ -88,13 +88,13 @@ func (woc *cronWfOperationCtx) persistUpdate() error { } func (woc *cronWfOperationCtx) enforceRuntimePolicy() (bool, error) { - if woc.cronWf.Options.Suspend { + if woc.cronWf.Spec.Suspend { log.Infof("%s is suspended, skipping execution", woc.name) return false, nil } - if woc.cronWf.Options.ConcurrencyPolicy != "" { - switch woc.cronWf.Options.ConcurrencyPolicy { + if woc.cronWf.Spec.ConcurrencyPolicy != "" { + switch woc.cronWf.Spec.ConcurrencyPolicy { case v1alpha1.AllowConcurrent, "": // Do nothing case v1alpha1.ForbidConcurrent: @@ -111,7 +111,7 @@ func (woc *cronWfOperationCtx) enforceRuntimePolicy() (bool, error) { } } default: - return false, fmt.Errorf("invalid ConcurrencyPolicy: %s", woc.cronWf.Options.ConcurrencyPolicy) + return false, fmt.Errorf("invalid ConcurrencyPolicy: %s", woc.cronWf.Spec.ConcurrencyPolicy) } } return true, nil @@ -134,7 +134,7 @@ func (woc *cronWfOperationCtx) runOutstandingWorkflows() error { if woc.cronWf.Status.LastScheduledTime != nil { now := time.Now() var missedExecutionTime time.Time - cronSchedule, err := cron.ParseStandard(woc.cronWf.Options.Schedule) + cronSchedule, err := cron.ParseStandard(woc.cronWf.Spec.Schedule) if err != nil { return err } @@ -149,7 +149,7 @@ func (woc *cronWfOperationCtx) runOutstandingWorkflows() error { // We missed the latest execution time if !missedExecutionTime.IsZero() { // If StartingDeadlineSeconds is not set, or we are still within the deadline window, run the Workflow - if woc.cronWf.Options.StartingDeadlineSeconds == nil || now.Before(missedExecutionTime.Add(time.Duration(*woc.cronWf.Options.StartingDeadlineSeconds)*time.Second)) { + if woc.cronWf.Spec.StartingDeadlineSeconds == nil || now.Before(missedExecutionTime.Add(time.Duration(*woc.cronWf.Spec.StartingDeadlineSeconds)*time.Second)) { log.Infof("%s missed an execution at %s and is within StartingDeadline", woc.cronWf.Name, missedExecutionTime.Format("Mon Jan _2 15:04:05 2006")) woc.Run() } diff --git a/workflow/validate/validate.go b/workflow/validate/validate.go index 2b0a47216cff..d0da9d9b6e9d 100644 --- a/workflow/validate/validate.go +++ b/workflow/validate/validate.go @@ -187,18 +187,18 @@ func ValidateCronWorkflow(wfClientset wfclientset.Interface, namespace string, c namespace = cronWf.Namespace } - if _, err := cron.ParseStandard(cronWf.Options.Schedule); err != nil { + if _, err := cron.ParseStandard(cronWf.Spec.Schedule); err != nil { return errors.Errorf(errors.CodeBadRequest, "cron schedule is malformed: %s", err) } - switch cronWf.Options.ConcurrencyPolicy { + switch cronWf.Spec.ConcurrencyPolicy { case wfv1.AllowConcurrent, wfv1.ForbidConcurrent, wfv1.ReplaceConcurrent, "": // Do nothing default: - return errors.Errorf(errors.CodeBadRequest, "'%s' is not a valid concurrencyPolicy", cronWf.Options.ConcurrencyPolicy) + return errors.Errorf(errors.CodeBadRequest, "'%s' is not a valid concurrencyPolicy", cronWf.Spec.ConcurrencyPolicy) } - if cronWf.Options.StartingDeadlineSeconds != nil && *cronWf.Options.StartingDeadlineSeconds < 0 { + if cronWf.Spec.StartingDeadlineSeconds != nil && *cronWf.Spec.StartingDeadlineSeconds < 0 { return errors.Errorf(errors.CodeBadRequest, "startingDeadlineSeconds must be positive") } @@ -210,7 +210,7 @@ func ValidateCronWorkflow(wfClientset wfclientset.Interface, namespace string, c tmplCtx := templateresolution.NewContextFromClientset(wfClientset.ArgoprojV1alpha1().WorkflowTemplates(namespace), wf) // Check if all templates can be resolved. - for _, template := range cronWf.Spec.Templates { + for _, template := range cronWf.Spec.WorkflowSpec.Templates { _, err := ctx.validateTemplateHolder(&wfv1.Template{Template: template.Name}, tmplCtx, &FakeArguments{}, map[string]interface{}{}) if err != nil { return errors.Errorf(errors.CodeBadRequest, "templates.%s %s", template.Name, err.Error()) From 4c4d618da68e185b6aa84994d539a3deeee46ec7 Mon Sep 17 00:00:00 2001 From: Simon Behar Date: Tue, 10 Dec 2019 14:23:29 -0800 Subject: [PATCH 29/44] WIP: History limit --- api/openapi-spec/swagger.json | 10 + cmd/argo/commands/cron/common.go | 10 +- .../workflow/v1alpha1/cron_workflow_types.go | 4 + pkg/apis/workflow/v1alpha1/generated.pb.go | 688 ++++++++++-------- pkg/apis/workflow/v1alpha1/generated.proto | 6 + .../workflow/v1alpha1/openapi_generated.go | 14 + .../v1alpha1/zz_generated.deepcopy.go | 10 + workflow/common/common.go | 2 +- workflow/cron/controller.go | 4 +- workflow/cron/operator.go | 74 ++ 10 files changed, 501 insertions(+), 321 deletions(-) diff --git a/api/openapi-spec/swagger.json b/api/openapi-spec/swagger.json index 27909669b8c9..7d8f707edfde 100644 --- a/api/openapi-spec/swagger.json +++ b/api/openapi-spec/swagger.json @@ -279,6 +279,11 @@ "description": "ConcurrencyPolicy is the K8s-style concurrency policy that will be used", "type": "string" }, + "failedJobsHistoryLimit": { + "description": "FailedJobsHistoryLimit is the number of successful jobs to be kept at a time", + "type": "integer", + "format": "int32" + }, "schedule": { "description": "Schedule is a schedule to run the Workflow in Cron format", "type": "string" @@ -288,6 +293,11 @@ "type": "integer", "format": "int64" }, + "successfulJobsHistoryLimit": { + "description": "SuccessfulJobsHistoryLimit is the number of successful jobs to be kept at a time", + "type": "integer", + "format": "int32" + }, "suspend": { "description": "Suspend is a flag that will stop new CronWorkflows from running if set to true", "type": "boolean" diff --git a/cmd/argo/commands/cron/common.go b/cmd/argo/commands/cron/common.go index 9ff6556b2010..36fc4b6f6d16 100644 --- a/cmd/argo/commands/cron/common.go +++ b/cmd/argo/commands/cron/common.go @@ -16,7 +16,7 @@ var ( clientConfig clientcmd.ClientConfig clientset *kubernetes.Clientset wfClientset *versioned.Clientset - wftmplClient v1alpha1.CronWorkflowInterface + cronWfClient v1alpha1.CronWorkflowInterface namespace string ) @@ -40,8 +40,8 @@ func initKubeClient() *kubernetes.Clientset { // InitCronWorkflowClient creates a new client for the Kubernetes WorkflowTemplate CRD. func InitCronWorkflowClient(ns ...string) v1alpha1.CronWorkflowInterface { - if wftmplClient != nil { - return wftmplClient + if cronWfClient != nil { + return cronWfClient } initKubeClient() var err error @@ -54,6 +54,6 @@ func InitCronWorkflowClient(ns ...string) v1alpha1.CronWorkflowInterface { } } wfClientset = versioned.NewForConfigOrDie(restConfig) - wftmplClient = wfClientset.ArgoprojV1alpha1().CronWorkflows(namespace) - return wftmplClient + cronWfClient = wfClientset.ArgoprojV1alpha1().CronWorkflows(namespace) + return cronWfClient } diff --git a/pkg/apis/workflow/v1alpha1/cron_workflow_types.go b/pkg/apis/workflow/v1alpha1/cron_workflow_types.go index 2ca47e6f1418..21072ac6bd6a 100644 --- a/pkg/apis/workflow/v1alpha1/cron_workflow_types.go +++ b/pkg/apis/workflow/v1alpha1/cron_workflow_types.go @@ -36,6 +36,10 @@ type CronWorkflowSpec struct { // StartingDeadlineSeconds is the K8s-style deadline that will limit the time a CronWorkflow will be run after its // original scheduled time if it is missed. StartingDeadlineSeconds *int64 `json:"startingDeadlineSeconds,omitempty" protobuf:"varint,5,opt,name=startingDeadlineSeconds"` + // SuccessfulJobsHistoryLimit is the number of successful jobs to be kept at a time + SuccessfulJobsHistoryLimit *int32 `json:"successfulJobsHistoryLimit,omitempty" protobuf:"varint,6,opt,name=successfulJobsHistoryLimit"` + // FailedJobsHistoryLimit is the number of successful jobs to be kept at a time + FailedJobsHistoryLimit *int32 `json:"failedJobsHistoryLimit,omitempty" protobuf:"varint,7,opt,name=failedJobsHistoryLimit"` } type CronWorkflowStatus struct { diff --git a/pkg/apis/workflow/v1alpha1/generated.pb.go b/pkg/apis/workflow/v1alpha1/generated.pb.go index a3582481ecb8..08516c92480f 100644 --- a/pkg/apis/workflow/v1alpha1/generated.pb.go +++ b/pkg/apis/workflow/v1alpha1/generated.pb.go @@ -1556,319 +1556,323 @@ func init() { } var fileDescriptor_c23edafa7e7ea072 = []byte{ - // 4986 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xec, 0x3c, 0x4b, 0x6c, 0x64, 0x57, - 0x56, 0x5d, 0xb6, 0xab, 0x5c, 0x75, 0xca, 0xbf, 0xbe, 0xed, 0x4e, 0x57, 0x9c, 0x8e, 0xab, 0xe7, - 0x85, 0x84, 0x1e, 0x48, 0xca, 0x93, 0xee, 0x19, 0xc8, 0x64, 0x48, 0x32, 0x2e, 0x7f, 0xba, 0xdd, - 0x6e, 0xbb, 0xcd, 0x29, 0x77, 0x37, 0x43, 0x22, 0x86, 0xe7, 0xf7, 0x6e, 0x55, 0xbd, 0x76, 0xd5, - 0x7b, 0x95, 0x77, 0x5f, 0xb5, 0x63, 0x65, 0x41, 0x40, 0x20, 0x40, 0x68, 0x24, 0xd8, 0x0c, 0x23, - 0x66, 0x83, 0x58, 0xc0, 0x06, 0x21, 0xb1, 0x65, 0x31, 0x48, 0x88, 0x45, 0x34, 0x1b, 0x22, 0x36, - 0x64, 0x81, 0xac, 0x89, 0x91, 0x10, 0x08, 0x24, 0x24, 0x36, 0x88, 0x5e, 0xa1, 0xfb, 0x79, 0xf7, - 0x7d, 0xea, 0x39, 0xb1, 0xab, 0xdc, 0x8d, 0x46, 0x33, 0x2b, 0xd7, 0x3b, 0xe7, 0xdc, 0x73, 0xee, - 0xe7, 0xdc, 0x73, 0xcf, 0x39, 0xf7, 0x5c, 0xc3, 0x4a, 0xcb, 0x09, 0xda, 0xfd, 0xbd, 0x9a, 0xe5, - 0x75, 0x97, 0x4c, 0xbf, 0xe5, 0xf5, 0x7c, 0xef, 0x91, 0xf8, 0xb1, 0xd4, 0xdb, 0x6f, 0x2d, 0x99, - 0x3d, 0x87, 0x2d, 0x1d, 0x78, 0xfe, 0x7e, 0xb3, 0xe3, 0x1d, 0x2c, 0x3d, 0x7e, 0xdd, 0xec, 0xf4, - 0xda, 0xe6, 0xeb, 0x4b, 0x2d, 0xea, 0x52, 0xdf, 0x0c, 0xa8, 0x5d, 0xeb, 0xf9, 0x5e, 0xe0, 0x91, - 0x9b, 0x11, 0x93, 0x5a, 0xc8, 0x44, 0xfc, 0xa8, 0xf5, 0xf6, 0x5b, 0x35, 0xce, 0xa4, 0x16, 0x32, - 0xa9, 0x85, 0x4c, 0x16, 0x5e, 0x8b, 0x49, 0x6e, 0x79, 0x5c, 0x20, 0xe7, 0xb5, 0xd7, 0x6f, 0x8a, - 0x2f, 0xf1, 0x21, 0x7e, 0x49, 0x19, 0x0b, 0xc6, 0xfe, 0x1b, 0xac, 0xe6, 0x78, 0xbc, 0x4b, 0x4b, - 0x96, 0xe7, 0xd3, 0xa5, 0xc7, 0x03, 0xfd, 0x58, 0xf8, 0x6a, 0x44, 0xd3, 0x35, 0xad, 0xb6, 0xe3, - 0x52, 0xff, 0x30, 0x1a, 0x47, 0x97, 0x06, 0x66, 0x56, 0xab, 0xa5, 0x93, 0x5a, 0xf9, 0x7d, 0x37, - 0x70, 0xba, 0x74, 0xa0, 0xc1, 0x2f, 0x7c, 0x51, 0x03, 0x66, 0xb5, 0x69, 0xd7, 0x4c, 0xb7, 0x33, - 0xfe, 0x21, 0x07, 0xb3, 0xcb, 0xbe, 0xd5, 0x76, 0x1e, 0xd3, 0x46, 0xc0, 0x11, 0xad, 0x43, 0xf2, - 0x2e, 0x8c, 0x07, 0xa6, 0x5f, 0xc9, 0x5d, 0xcb, 0x5d, 0x2f, 0xdf, 0xf8, 0x66, 0x6d, 0x88, 0x89, - 0xac, 0xed, 0x9a, 0x7e, 0xc8, 0xae, 0x3e, 0x79, 0x7c, 0x54, 0x1d, 0xdf, 0x35, 0x7d, 0xe4, 0x5c, - 0xc9, 0xb7, 0x61, 0xc2, 0xf5, 0x5c, 0x5a, 0x19, 0x13, 0xdc, 0x97, 0x87, 0xe2, 0xbe, 0xed, 0xb9, - 0xba, 0xb7, 0xf5, 0xe2, 0xf1, 0x51, 0x75, 0x82, 0x43, 0x50, 0x30, 0x36, 0xfe, 0x2b, 0x07, 0xa5, - 0x65, 0xbf, 0xd5, 0xef, 0x52, 0x37, 0x60, 0xc4, 0x07, 0xe8, 0x99, 0xbe, 0xd9, 0xa5, 0x01, 0xf5, - 0x59, 0x25, 0x77, 0x6d, 0xfc, 0x7a, 0xf9, 0xc6, 0xdb, 0x43, 0x09, 0xdd, 0x09, 0xd9, 0xd4, 0xc9, - 0xc7, 0x47, 0xd5, 0x0b, 0xc7, 0x47, 0x55, 0xd0, 0x20, 0x86, 0x31, 0x29, 0xc4, 0x85, 0x92, 0xe9, - 0x07, 0x4e, 0xd3, 0xb4, 0x02, 0x56, 0x19, 0x13, 0x22, 0xdf, 0x1a, 0x4a, 0xe4, 0xb2, 0xe2, 0x52, - 0xbf, 0xa8, 0x24, 0x96, 0x42, 0x08, 0xc3, 0x48, 0x84, 0xf1, 0x1f, 0xe3, 0x50, 0x0c, 0x11, 0xe4, - 0x1a, 0x4c, 0xb8, 0x66, 0x97, 0x8a, 0xd5, 0x2b, 0xd5, 0xa7, 0x54, 0xc3, 0x89, 0x6d, 0xb3, 0xcb, - 0x27, 0xc8, 0xec, 0x52, 0x4e, 0xd1, 0x33, 0x83, 0xb6, 0x58, 0x81, 0x18, 0xc5, 0x8e, 0x19, 0xb4, - 0x51, 0x60, 0xc8, 0x55, 0x98, 0xe8, 0x7a, 0x36, 0xad, 0x8c, 0x5f, 0xcb, 0x5d, 0xcf, 0xcb, 0x09, - 0xde, 0xf2, 0x6c, 0x8a, 0x02, 0xca, 0xdb, 0x37, 0x7d, 0xaf, 0x5b, 0x99, 0x48, 0xb6, 0x5f, 0xf7, - 0xbd, 0x2e, 0x0a, 0x0c, 0xf9, 0x83, 0x1c, 0xcc, 0x85, 0xdd, 0xbb, 0xeb, 0x59, 0x66, 0xe0, 0x78, - 0x6e, 0x25, 0x2f, 0x16, 0x7c, 0x6d, 0xa4, 0x89, 0x08, 0x99, 0xd5, 0x2b, 0x4a, 0xea, 0x5c, 0x1a, - 0x83, 0x03, 0x82, 0xc9, 0x0d, 0x80, 0x56, 0xc7, 0xdb, 0x33, 0x3b, 0x7c, 0x0e, 0x2a, 0x05, 0xd1, - 0x6b, 0xbd, 0x84, 0xb7, 0x34, 0x06, 0x63, 0x54, 0x64, 0x1f, 0x26, 0x4d, 0xb9, 0x2b, 0x2a, 0x93, - 0xa2, 0xdf, 0xab, 0x43, 0xf6, 0x3b, 0xb1, 0xb3, 0xea, 0xe5, 0xe3, 0xa3, 0xea, 0xa4, 0x02, 0x62, - 0x28, 0x81, 0xbc, 0x0a, 0x45, 0xaf, 0xc7, 0xbb, 0x6a, 0x76, 0x2a, 0xc5, 0x6b, 0xb9, 0xeb, 0xc5, - 0xfa, 0x9c, 0xea, 0x5e, 0xf1, 0x9e, 0x82, 0xa3, 0xa6, 0x30, 0xfe, 0x38, 0x0f, 0x03, 0xa3, 0x26, - 0xaf, 0x43, 0x59, 0x71, 0xbb, 0xeb, 0xb5, 0x98, 0x58, 0xfc, 0x62, 0x7d, 0xf6, 0xf8, 0xa8, 0x5a, - 0x5e, 0x8e, 0xc0, 0x18, 0xa7, 0x21, 0x0f, 0x61, 0x8c, 0xdd, 0x54, 0xdb, 0xf0, 0x9d, 0xa1, 0x46, - 0xd7, 0xb8, 0xa9, 0x15, 0xb4, 0x70, 0x7c, 0x54, 0x1d, 0x6b, 0xdc, 0xc4, 0x31, 0x76, 0x93, 0x9b, - 0x8f, 0x96, 0x13, 0x08, 0xe5, 0x19, 0xd6, 0x7c, 0xdc, 0x72, 0x02, 0xcd, 0x5a, 0x98, 0x8f, 0x5b, - 0x4e, 0x80, 0x9c, 0x2b, 0x37, 0x1f, 0xed, 0x20, 0xe8, 0x09, 0xe5, 0x1b, 0xd6, 0x7c, 0xdc, 0xde, - 0xdd, 0xdd, 0xd1, 0xec, 0x85, 0x76, 0x73, 0x08, 0x0a, 0xc6, 0xe4, 0x43, 0x3e, 0x93, 0x12, 0xe7, - 0xf9, 0x87, 0x4a, 0x6b, 0x6f, 0x8f, 0xa4, 0xb5, 0x9e, 0x7f, 0xa8, 0xc5, 0xa9, 0x35, 0xd1, 0x08, - 0x8c, 0x4b, 0x13, 0xa3, 0xb3, 0x9b, 0x4c, 0x28, 0xe9, 0xd0, 0xa3, 0x5b, 0x5d, 0x6f, 0xa4, 0x46, - 0xb7, 0xba, 0xde, 0x40, 0xc1, 0x98, 0xaf, 0x8d, 0x6f, 0x1e, 0x28, 0x9d, 0x1e, 0x6e, 0x6d, 0xd0, - 0x3c, 0x48, 0xae, 0x0d, 0x9a, 0x07, 0xc8, 0xb9, 0x1a, 0x2d, 0xb8, 0x1c, 0x62, 0x90, 0xf6, 0x3c, - 0xe6, 0x88, 0x01, 0xd2, 0x26, 0x59, 0x82, 0x92, 0xe5, 0xb9, 0x4d, 0xa7, 0xb5, 0x65, 0xf6, 0x94, - 0x61, 0xd2, 0x16, 0x6d, 0x25, 0x44, 0x60, 0x44, 0x43, 0x5e, 0x84, 0xf1, 0x7d, 0x7a, 0xa8, 0x2c, - 0x54, 0x59, 0x91, 0x8e, 0x6f, 0xd2, 0x43, 0xe4, 0x70, 0xe3, 0x07, 0x39, 0xb8, 0x94, 0x31, 0xb9, - 0xbc, 0x59, 0xdf, 0xef, 0x28, 0x09, 0xba, 0xd9, 0x7d, 0xbc, 0x8b, 0x1c, 0x4e, 0x7e, 0x37, 0x07, - 0xb3, 0xb1, 0xd9, 0x5e, 0xee, 0x2b, 0x23, 0x38, 0xfc, 0xee, 0x4e, 0xf0, 0xaa, 0x5f, 0x51, 0x12, - 0x67, 0x53, 0x08, 0x4c, 0x4b, 0x35, 0xfe, 0x49, 0x9c, 0xba, 0x09, 0x18, 0x31, 0x61, 0xa6, 0xcf, - 0xa8, 0xcf, 0x4d, 0x74, 0x83, 0x5a, 0x3e, 0x0d, 0xd4, 0x01, 0xfc, 0x72, 0x4d, 0x1e, 0xed, 0xbc, - 0x17, 0x35, 0xee, 0x65, 0xd4, 0x1e, 0xbf, 0x5e, 0x93, 0x14, 0x9b, 0xf4, 0xb0, 0x41, 0x3b, 0x94, - 0xf3, 0xa8, 0x93, 0xe3, 0xa3, 0xea, 0xcc, 0xfd, 0x04, 0x03, 0x4c, 0x31, 0xe4, 0x22, 0x7a, 0x26, - 0x63, 0x07, 0x9e, 0x6f, 0x2b, 0x11, 0x63, 0x67, 0x16, 0xb1, 0x93, 0x60, 0x80, 0x29, 0x86, 0xc6, - 0x77, 0x73, 0x30, 0x59, 0x37, 0xad, 0x7d, 0xaf, 0xd9, 0xe4, 0x76, 0xcd, 0xee, 0xfb, 0xd2, 0xfa, - 0xcb, 0x35, 0xd1, 0x76, 0x6d, 0x55, 0xc1, 0x51, 0x53, 0x90, 0x57, 0xa0, 0x20, 0xa7, 0x43, 0x74, - 0x2a, 0x5f, 0x9f, 0x51, 0xb4, 0x85, 0x75, 0x01, 0x45, 0x85, 0x25, 0x5f, 0x83, 0x72, 0xd7, 0xfc, - 0x20, 0x64, 0x20, 0xcc, 0x4c, 0xa9, 0x7e, 0x49, 0x11, 0x97, 0xb7, 0x22, 0x14, 0xc6, 0xe9, 0x8c, - 0x6f, 0x01, 0xac, 0x78, 0x6e, 0xe0, 0xb8, 0x7d, 0x7a, 0xcf, 0x25, 0x2f, 0x41, 0x9e, 0xfa, 0xbe, - 0xe7, 0x2b, 0x4b, 0x39, 0xad, 0x9a, 0xe7, 0xd7, 0x38, 0x10, 0x25, 0x4e, 0xf6, 0xc8, 0xe9, 0x50, - 0x5b, 0xf4, 0xa8, 0x18, 0xef, 0x11, 0x87, 0xa2, 0xc2, 0x1a, 0x3f, 0x1c, 0x83, 0xa9, 0x15, 0xdf, - 0x73, 0x1f, 0x2a, 0x0d, 0x21, 0xbf, 0x0e, 0x45, 0xee, 0xd8, 0xd9, 0x66, 0x60, 0xaa, 0x45, 0xfc, - 0x4a, 0x6c, 0x86, 0xb5, 0x7f, 0x16, 0xe9, 0x16, 0xa7, 0xe6, 0x73, 0x7e, 0x6f, 0xef, 0x11, 0xb5, - 0x82, 0x2d, 0x1a, 0x98, 0xd1, 0x09, 0x15, 0xc1, 0x50, 0x73, 0x25, 0x2d, 0x98, 0x60, 0x3d, 0x6a, - 0xa9, 0xf5, 0x1b, 0xee, 0x50, 0x8d, 0x77, 0xb9, 0xd1, 0xa3, 0x56, 0x74, 0x94, 0xf3, 0x2f, 0x14, - 0x02, 0x88, 0x07, 0x05, 0x16, 0x98, 0x41, 0x9f, 0x29, 0x7b, 0x7e, 0x6b, 0x74, 0x51, 0x82, 0x5d, - 0x34, 0x99, 0xf2, 0x1b, 0x95, 0x18, 0xe3, 0xd3, 0x1c, 0xcc, 0xc5, 0xc9, 0xef, 0x3a, 0x2c, 0x20, - 0xef, 0x0d, 0x4c, 0x68, 0xed, 0x74, 0x13, 0xca, 0x5b, 0x8b, 0xe9, 0xd4, 0x9a, 0x17, 0x42, 0x62, - 0x93, 0xd9, 0x84, 0xbc, 0x13, 0xd0, 0x6e, 0xe8, 0xab, 0x2d, 0x8f, 0x3c, 0xc4, 0x48, 0x9f, 0x36, - 0x38, 0x5f, 0x94, 0xec, 0x8d, 0xbf, 0x1a, 0x4f, 0x0e, 0x8d, 0x4f, 0x33, 0xf7, 0x95, 0xa6, 0x0e, - 0x62, 0x00, 0x35, 0xbe, 0xe1, 0x3a, 0x91, 0x58, 0xce, 0x9f, 0x51, 0x9d, 0x98, 0x8a, 0x43, 0x9f, - 0xa4, 0xbe, 0x31, 0x21, 0x9c, 0x6f, 0x59, 0x1e, 0x28, 0xd8, 0xfd, 0x0e, 0x55, 0xd6, 0x57, 0x4f, - 0x5c, 0x43, 0xc1, 0x51, 0x53, 0x90, 0xf7, 0xe0, 0xa2, 0xe5, 0xb9, 0x56, 0xdf, 0xf7, 0xa9, 0x6b, - 0x1d, 0xee, 0x78, 0x1d, 0xc7, 0x3a, 0x54, 0x1b, 0xb2, 0xa6, 0x9a, 0x5d, 0x5c, 0x49, 0x13, 0x3c, - 0xc9, 0x02, 0xe2, 0x20, 0x23, 0xf2, 0x65, 0x98, 0x64, 0x7d, 0xd6, 0xa3, 0xae, 0x2d, 0x4e, 0xfb, - 0x62, 0x7d, 0x56, 0xf1, 0x9c, 0x6c, 0x48, 0x30, 0x86, 0x78, 0x72, 0x1f, 0xae, 0xb0, 0x80, 0x1b, - 0x59, 0xb7, 0xb5, 0x4a, 0x4d, 0xbb, 0xe3, 0xb8, 0xdc, 0xe4, 0x79, 0xae, 0xcd, 0xc4, 0x01, 0x3e, - 0x5e, 0x7f, 0xe1, 0xf8, 0xa8, 0x7a, 0xa5, 0x91, 0x4d, 0x82, 0x27, 0xb5, 0x35, 0xfe, 0x31, 0x07, - 0x64, 0x50, 0x75, 0xc9, 0x26, 0x14, 0x4c, 0x2b, 0xe0, 0xbe, 0xa1, 0x8c, 0x27, 0x5e, 0xca, 0x32, - 0x9f, 0x72, 0xdb, 0x22, 0x6d, 0x52, 0x3e, 0x26, 0x1a, 0xe9, 0xfb, 0xb2, 0x68, 0x8a, 0x8a, 0x05, - 0xf1, 0xe0, 0x62, 0xc7, 0x64, 0x41, 0x38, 0xbb, 0xf6, 0xae, 0xd3, 0x0d, 0x83, 0xa3, 0x9f, 0x3b, - 0x9d, 0x8e, 0xf3, 0x16, 0xf5, 0xcb, 0x7c, 0xae, 0xef, 0xa6, 0x19, 0xe1, 0x20, 0x6f, 0xe3, 0x4f, - 0x0a, 0x30, 0xb9, 0xba, 0x7c, 0x6b, 0xd7, 0x64, 0xfb, 0xa7, 0x08, 0x16, 0x5e, 0x85, 0x62, 0x40, - 0xbb, 0xbd, 0x8e, 0x19, 0x0c, 0x28, 0xc4, 0xae, 0x82, 0xa3, 0xa6, 0x20, 0x1e, 0x8f, 0x7c, 0x54, - 0xe8, 0xa5, 0x0c, 0xc6, 0xdb, 0x43, 0x1e, 0xad, 0x8a, 0x4b, 0x3c, 0xf4, 0x51, 0x20, 0x8c, 0x64, - 0x10, 0x06, 0xe5, 0x50, 0x38, 0xd2, 0xa6, 0xf2, 0x0a, 0x87, 0x0c, 0x59, 0x23, 0x3e, 0xd2, 0x4b, - 0x8b, 0x01, 0x30, 0x2e, 0x85, 0x7c, 0x15, 0xa6, 0x6c, 0xca, 0xf5, 0x8e, 0xba, 0x96, 0x43, 0xb9, - 0x8a, 0x8d, 0xf3, 0x79, 0xe1, 0x5b, 0x6d, 0x35, 0x06, 0xc7, 0x04, 0x15, 0x79, 0x04, 0xa5, 0x03, - 0x27, 0x68, 0x0b, 0x8b, 0x50, 0x29, 0x08, 0xc5, 0xf9, 0xfa, 0x50, 0x1d, 0xe5, 0x1c, 0xa2, 0x69, - 0x79, 0x18, 0xf2, 0xc4, 0x88, 0x3d, 0x77, 0xb8, 0xf8, 0x87, 0x88, 0x4f, 0x85, 0xb3, 0x57, 0x4a, - 0x36, 0x10, 0x08, 0x8c, 0x68, 0x08, 0x83, 0x29, 0xfe, 0xd1, 0xa0, 0xef, 0xf7, 0xb9, 0xb6, 0x8a, - 0x30, 0x64, 0xd8, 0xa8, 0x35, 0x64, 0x22, 0x67, 0xe4, 0x61, 0x8c, 0x2d, 0x26, 0x84, 0x70, 0xed, - 0x3b, 0x68, 0x53, 0xb7, 0x52, 0x4a, 0x6a, 0xdf, 0xc3, 0x36, 0x75, 0x51, 0x60, 0x88, 0x07, 0x60, - 0xe9, 0x43, 0xbb, 0x02, 0x23, 0xc4, 0x2a, 0xd1, 0xd9, 0x5f, 0x9f, 0xe1, 0xa7, 0x6a, 0xf4, 0x8d, - 0x31, 0x11, 0xc6, 0xdf, 0xe5, 0xa0, 0xcc, 0x37, 0x47, 0xa8, 0xd0, 0xaf, 0x40, 0x21, 0x30, 0xfd, - 0x96, 0x72, 0xc6, 0x4a, 0xd1, 0x2e, 0xde, 0x15, 0x50, 0x54, 0x58, 0x62, 0x42, 0x3e, 0x30, 0xd9, - 0x7e, 0x78, 0x84, 0xfc, 0xd2, 0x50, 0x7d, 0x54, 0xbb, 0x32, 0x3a, 0x3d, 0xf8, 0x17, 0x43, 0xc9, - 0x99, 0x5c, 0x87, 0x22, 0xf7, 0x37, 0xd6, 0x4d, 0x26, 0x63, 0xab, 0x62, 0x7d, 0x8a, 0xef, 0xc2, - 0x75, 0x05, 0x43, 0x8d, 0x35, 0xde, 0x83, 0x99, 0xb5, 0x0f, 0xa8, 0xd5, 0x0f, 0x3c, 0x5f, 0x7a, - 0xd7, 0xe4, 0x0e, 0x10, 0x46, 0xfd, 0xc7, 0x8e, 0x45, 0x97, 0x2d, 0xcb, 0xeb, 0xbb, 0xc1, 0x76, - 0xb4, 0xeb, 0x17, 0x94, 0x34, 0xd2, 0x18, 0xa0, 0xc0, 0x8c, 0x56, 0xc6, 0x5f, 0x4e, 0x40, 0x39, - 0x16, 0x9f, 0xf1, 0x55, 0xf4, 0x69, 0xcf, 0x4b, 0xdb, 0x10, 0x1e, 0x01, 0xa0, 0xc0, 0x70, 0x1b, - 0xe2, 0xd3, 0xc7, 0x0e, 0xe3, 0xee, 0x5a, 0xca, 0x86, 0xa0, 0x82, 0xa3, 0xa6, 0x20, 0x55, 0xc8, - 0xdb, 0xb4, 0x17, 0xb4, 0xc5, 0x20, 0x27, 0xea, 0x25, 0x3e, 0x11, 0xab, 0x1c, 0x80, 0x12, 0xce, - 0x09, 0x9a, 0x34, 0xb0, 0xda, 0x95, 0x09, 0xb1, 0xef, 0x04, 0xc1, 0x3a, 0x07, 0xa0, 0x84, 0x67, - 0x78, 0xd2, 0xf9, 0xa7, 0xef, 0x49, 0x17, 0xce, 0xd9, 0x93, 0x26, 0x3d, 0xb8, 0xc4, 0x58, 0x7b, - 0xc7, 0x77, 0x1e, 0x9b, 0x01, 0x15, 0x8d, 0x85, 0x9c, 0xc9, 0xb3, 0xc8, 0xb9, 0x72, 0x7c, 0x54, - 0xbd, 0xd4, 0x68, 0xdc, 0x4e, 0x73, 0xc1, 0x2c, 0xd6, 0xa4, 0x01, 0x97, 0x1d, 0x97, 0x51, 0xab, - 0xef, 0xd3, 0x8d, 0x96, 0xeb, 0xf9, 0xf4, 0xb6, 0xc7, 0x38, 0x3b, 0x95, 0x94, 0x78, 0x51, 0x2d, - 0xda, 0xe5, 0x8d, 0x2c, 0x22, 0xcc, 0x6e, 0x6b, 0xfc, 0x30, 0x07, 0x53, 0xf1, 0x90, 0x94, 0x30, - 0x80, 0xf6, 0xea, 0x7a, 0x43, 0x6a, 0xa6, 0xf2, 0x76, 0xde, 0x19, 0x3a, 0xd2, 0x95, 0x6c, 0x22, - 0x6f, 0x39, 0x82, 0x61, 0x4c, 0xcc, 0x29, 0x72, 0x5e, 0x2f, 0x41, 0xbe, 0xe9, 0xf9, 0x16, 0x55, - 0x7b, 0x4b, 0xef, 0xc1, 0x75, 0x0e, 0x44, 0x89, 0x33, 0xfe, 0x2d, 0x07, 0x31, 0x09, 0xe4, 0x37, - 0x60, 0x9a, 0xcb, 0xd8, 0xf4, 0xf7, 0x12, 0xa3, 0xa9, 0x0f, 0x3d, 0x1a, 0xcd, 0xa9, 0x7e, 0x59, - 0xc9, 0x9f, 0x4e, 0x80, 0x31, 0x29, 0x8f, 0xfc, 0x3c, 0x94, 0x4c, 0xdb, 0xf6, 0x29, 0x63, 0x54, - 0x9a, 0x9e, 0x52, 0x7d, 0x5a, 0x9c, 0x95, 0x21, 0x10, 0x23, 0x3c, 0xdf, 0x86, 0x6d, 0xbb, 0xc9, - 0xb8, 0x66, 0x2b, 0x27, 0x4d, 0x6f, 0x43, 0x2e, 0x84, 0xc3, 0x51, 0x53, 0x18, 0xdf, 0x99, 0x80, - 0xa4, 0x6c, 0x62, 0xc3, 0xec, 0xbe, 0xbf, 0xb7, 0xb2, 0x62, 0x5a, 0xed, 0xa1, 0x22, 0xd4, 0x4b, - 0x3c, 0x34, 0xde, 0x4c, 0x72, 0xc0, 0x34, 0x4b, 0x25, 0x65, 0x93, 0x1e, 0x06, 0xe6, 0xde, 0x30, - 0x41, 0x6a, 0x28, 0x25, 0xce, 0x01, 0xd3, 0x2c, 0x79, 0x10, 0xb9, 0xef, 0xef, 0x85, 0x9b, 0x3c, - 0x1d, 0x44, 0x6e, 0x46, 0x28, 0x8c, 0xd3, 0xf1, 0x29, 0xdc, 0xf7, 0xf7, 0x90, 0x9a, 0x9d, 0x30, - 0xfd, 0xa9, 0xa7, 0x70, 0x53, 0xc1, 0x51, 0x53, 0x90, 0x1e, 0x90, 0xfd, 0x70, 0xf6, 0x74, 0x9a, - 0x43, 0xd9, 0xa2, 0xeb, 0x59, 0xa3, 0xd1, 0x44, 0xf1, 0x01, 0x3d, 0xc7, 0x6d, 0xf3, 0xe6, 0x00, - 0x1f, 0xcc, 0xe0, 0x4d, 0xbe, 0x05, 0x57, 0xf6, 0xfd, 0x3d, 0x65, 0xc8, 0x77, 0x7c, 0xc7, 0xb5, - 0x9c, 0x5e, 0x22, 0xef, 0x59, 0x55, 0xdd, 0xbd, 0xb2, 0x99, 0x4d, 0x86, 0x27, 0xb5, 0x37, 0x5e, - 0x83, 0xa9, 0x78, 0xde, 0xec, 0x0b, 0x72, 0x2d, 0xc6, 0x7f, 0xe6, 0xa0, 0xb0, 0xe1, 0xf6, 0xfa, - 0x3f, 0x21, 0x29, 0xf8, 0x3f, 0x9b, 0x80, 0x09, 0xee, 0x7a, 0x91, 0xeb, 0x30, 0x11, 0x1c, 0xf6, - 0xe4, 0xd9, 0x3a, 0x5e, 0x9f, 0x0f, 0x0d, 0xcd, 0xee, 0x61, 0x8f, 0x3e, 0x51, 0x7f, 0x51, 0x50, - 0x90, 0xb7, 0xa1, 0xe0, 0xf6, 0xbb, 0x0f, 0xcc, 0x8e, 0x32, 0x4a, 0xaf, 0x84, 0xae, 0xc5, 0xb6, - 0x80, 0x3e, 0x39, 0xaa, 0xce, 0x53, 0xd7, 0xf2, 0x6c, 0xc7, 0x6d, 0x2d, 0x3d, 0x62, 0x9e, 0x5b, - 0xdb, 0xee, 0x77, 0xf7, 0xa8, 0x8f, 0xaa, 0x15, 0x0f, 0x8f, 0xf6, 0x3c, 0xaf, 0xc3, 0x19, 0x8c, - 0x27, 0xc3, 0xa3, 0xba, 0x04, 0x63, 0x88, 0xe7, 0x5e, 0x0c, 0x0b, 0x7c, 0x4e, 0x39, 0x91, 0xf4, - 0x62, 0x1a, 0x02, 0x8a, 0x0a, 0x4b, 0xba, 0x50, 0xe8, 0x9a, 0x3d, 0x4e, 0x97, 0x17, 0x53, 0xb6, - 0x36, 0xb4, 0x7f, 0x5a, 0xdb, 0x12, 0x7c, 0xd6, 0xdc, 0xc0, 0x3f, 0x8c, 0xc4, 0x49, 0x20, 0x2a, - 0x21, 0xc4, 0x81, 0xc9, 0x8e, 0xc3, 0x02, 0x2e, 0xaf, 0x30, 0x82, 0x56, 0x70, 0x79, 0x0f, 0xcc, - 0x4e, 0x9f, 0x46, 0x33, 0x70, 0x57, 0xb2, 0xc5, 0x90, 0xff, 0xc2, 0x21, 0x94, 0x63, 0x3d, 0x22, - 0x73, 0x32, 0xbf, 0x28, 0x94, 0x57, 0xa4, 0x14, 0xc9, 0x2e, 0xe4, 0x1f, 0x73, 0x1e, 0xca, 0xd8, - 0x8c, 0xd8, 0x13, 0x94, 0xcc, 0xde, 0x1c, 0x7b, 0x23, 0xf7, 0x66, 0xf1, 0x7b, 0x7f, 0x5a, 0xbd, - 0xf0, 0xd1, 0x3f, 0x5f, 0xbb, 0x60, 0xfc, 0xfd, 0x38, 0x94, 0x34, 0xc9, 0x8f, 0xb7, 0xa6, 0xf8, - 0x29, 0x4d, 0xb9, 0x33, 0xda, 0x7c, 0x9d, 0x4a, 0x5d, 0x96, 0x93, 0xea, 0x32, 0x55, 0xff, 0xd9, - 0xd8, 0x52, 0x3f, 0x39, 0xaa, 0x56, 0x92, 0x93, 0x80, 0xe6, 0xc1, 0x16, 0x65, 0xcc, 0x6c, 0xd1, - 0x48, 0x0d, 0xbe, 0xfe, 0x45, 0x6a, 0x30, 0x1f, 0x57, 0x83, 0x52, 0xf6, 0x32, 0x7e, 0x34, 0x0e, - 0xc5, 0xad, 0x30, 0x77, 0xf4, 0x3b, 0x39, 0x28, 0x9b, 0xae, 0xeb, 0x05, 0x22, 0xcb, 0x18, 0x9a, - 0xb7, 0xed, 0xa1, 0xa6, 0x23, 0x64, 0x5a, 0x5b, 0x8e, 0x18, 0xca, 0x29, 0xd1, 0x27, 0x53, 0x0c, - 0x83, 0x71, 0xb9, 0xe4, 0x7d, 0x28, 0x74, 0xcc, 0x3d, 0xda, 0x09, 0xad, 0xdd, 0xc6, 0x68, 0x3d, - 0xb8, 0x2b, 0x78, 0xa5, 0xd6, 0x43, 0x02, 0x51, 0x09, 0x5a, 0x78, 0x1b, 0xe6, 0xd2, 0x1d, 0x3d, - 0xcb, 0x8c, 0xf2, 0xc5, 0x88, 0x89, 0x39, 0x4b, 0x53, 0xe3, 0x7f, 0x4b, 0x00, 0xdb, 0x9e, 0x4d, - 0x55, 0x42, 0x66, 0x01, 0xc6, 0x1c, 0x5b, 0x1d, 0x45, 0xa0, 0x7a, 0x3b, 0xb6, 0xb1, 0x8a, 0x63, - 0x8e, 0xad, 0x53, 0x1c, 0x63, 0x27, 0xa6, 0x38, 0xbe, 0x06, 0x65, 0xdb, 0x61, 0xbd, 0x8e, 0x79, - 0xb8, 0x9d, 0xe1, 0x0b, 0xac, 0x46, 0x28, 0x8c, 0xd3, 0x91, 0x57, 0xd5, 0xfe, 0x95, 0x1b, 0xa5, - 0x92, 0xda, 0xbf, 0x45, 0xde, 0xbd, 0xd8, 0x1e, 0x7e, 0x03, 0xa6, 0xc2, 0x14, 0x82, 0x90, 0x92, - 0x17, 0xad, 0xc2, 0x5d, 0x3f, 0xb5, 0x1b, 0xc3, 0x61, 0x82, 0x32, 0x9d, 0xe2, 0x28, 0x3c, 0x93, - 0x14, 0xc7, 0x2a, 0xcc, 0xb1, 0xc0, 0xf3, 0xa9, 0x1d, 0x52, 0x6c, 0xac, 0x56, 0x48, 0x62, 0xa0, - 0x73, 0x8d, 0x14, 0x1e, 0x07, 0x5a, 0x90, 0x1d, 0x98, 0x0f, 0x3b, 0x11, 0x1f, 0x60, 0xe5, 0x92, - 0xe0, 0x74, 0x55, 0x71, 0x9a, 0x7f, 0x98, 0x41, 0x83, 0x99, 0x2d, 0xc9, 0x37, 0x60, 0x3a, 0xec, - 0x66, 0xc3, 0xf2, 0x7a, 0xb4, 0x32, 0x2f, 0x58, 0x69, 0x6f, 0x79, 0x37, 0x8e, 0xc4, 0x24, 0x2d, - 0xf9, 0x0a, 0xe4, 0x7b, 0x6d, 0x93, 0x51, 0x95, 0x11, 0x09, 0x03, 0xdf, 0xfc, 0x0e, 0x07, 0x3e, - 0x39, 0xaa, 0x96, 0xf8, 0x9a, 0x89, 0x0f, 0x94, 0x84, 0xe4, 0x06, 0xc0, 0x9e, 0xd7, 0x77, 0x6d, - 0xd3, 0x3f, 0xdc, 0x58, 0x15, 0x61, 0x50, 0xec, 0xea, 0xb8, 0xae, 0x31, 0x18, 0xa3, 0xe2, 0xd6, - 0xb6, 0x2b, 0xed, 0x8e, 0x4a, 0x6c, 0x68, 0x6b, 0xab, 0xcd, 0x91, 0xc2, 0x93, 0x77, 0xa1, 0x24, - 0x52, 0x8f, 0xd4, 0x5e, 0x0e, 0x54, 0x76, 0xe3, 0x2c, 0x39, 0x3f, 0xed, 0x92, 0x34, 0x42, 0x26, - 0x18, 0xf1, 0x23, 0xbf, 0x06, 0xd0, 0x74, 0x5c, 0x87, 0xb5, 0x05, 0xf7, 0xf2, 0x99, 0xb9, 0xeb, - 0x71, 0xae, 0x6b, 0x2e, 0x18, 0xe3, 0xc8, 0x03, 0xa6, 0x9e, 0x67, 0x6f, 0xec, 0x54, 0xa6, 0xc4, - 0x28, 0x75, 0xc0, 0xb4, 0xc3, 0x81, 0x28, 0x71, 0xe4, 0x3a, 0x14, 0x6d, 0x93, 0x76, 0x3d, 0x97, - 0xda, 0x95, 0xe9, 0x28, 0x69, 0xb1, 0xaa, 0x60, 0xa8, 0xb1, 0xe4, 0xdb, 0x50, 0x70, 0x84, 0xbf, - 0x58, 0x99, 0x11, 0x5d, 0xfd, 0xc6, 0x70, 0x27, 0x8a, 0x60, 0x51, 0x07, 0x6e, 0xae, 0xe4, 0x6f, - 0x54, 0x6c, 0x89, 0x05, 0x93, 0x5e, 0x3f, 0x10, 0x12, 0x66, 0x85, 0x84, 0xe1, 0x92, 0x34, 0xf7, - 0x24, 0x0f, 0x79, 0x95, 0xaf, 0x3e, 0x30, 0xe4, 0xcc, 0xc7, 0x6b, 0xb5, 0x9d, 0x8e, 0xed, 0x53, - 0xb7, 0x32, 0x27, 0xe2, 0x31, 0x31, 0xde, 0x15, 0x05, 0x43, 0x8d, 0x25, 0xbf, 0x08, 0xd3, 0x5e, - 0x3f, 0x10, 0x7a, 0xc3, 0xd5, 0x8e, 0x55, 0x2e, 0x0a, 0xf2, 0x8b, 0x5c, 0x8b, 0xef, 0xc5, 0x11, - 0x98, 0xa4, 0x33, 0x66, 0x60, 0x2a, 0x5e, 0xff, 0x62, 0xfc, 0xd1, 0x18, 0x84, 0xfd, 0xf8, 0x49, - 0x70, 0xb5, 0x89, 0x01, 0x05, 0x9f, 0xb2, 0x7e, 0x27, 0x50, 0x96, 0x5a, 0xac, 0x35, 0x0a, 0x08, - 0x2a, 0x8c, 0x71, 0x00, 0xd3, 0xbc, 0xb7, 0x9d, 0x0e, 0xed, 0x34, 0x02, 0xda, 0x63, 0xa4, 0x09, - 0x79, 0xc6, 0x7f, 0xa8, 0x39, 0x19, 0xf1, 0x76, 0x25, 0xa0, 0xbd, 0x48, 0xdf, 0x85, 0x00, 0x94, - 0xec, 0x8d, 0xef, 0x8e, 0x41, 0x49, 0xcf, 0xd3, 0x29, 0xd2, 0xeb, 0x2f, 0xc3, 0xa4, 0x4d, 0x9b, - 0x26, 0x1f, 0x8d, 0xba, 0xec, 0xe6, 0x6a, 0xb5, 0x2a, 0x41, 0x18, 0xe2, 0x48, 0x35, 0x3c, 0x09, - 0xe5, 0x90, 0x45, 0xca, 0x2b, 0xee, 0x68, 0x92, 0x7d, 0x28, 0x89, 0x1f, 0xeb, 0x61, 0x61, 0xce, - 0xb0, 0xeb, 0xfe, 0x20, 0xe4, 0x22, 0x13, 0x09, 0xfa, 0x13, 0x23, 0xfe, 0xa9, 0x82, 0x9a, 0xfc, - 0x69, 0x0a, 0x6a, 0x8c, 0x75, 0xe0, 0x86, 0xe1, 0xd6, 0x0a, 0x79, 0x0b, 0x8a, 0x4c, 0xa9, 0xae, - 0x9a, 0x97, 0x2f, 0xe9, 0x1b, 0x26, 0x05, 0x7f, 0x72, 0x54, 0x9d, 0x16, 0xc4, 0x21, 0x00, 0x75, - 0x13, 0x63, 0x09, 0xca, 0xb1, 0x02, 0x04, 0x3e, 0xc3, 0xfa, 0x52, 0x30, 0x36, 0xc3, 0xab, 0x66, - 0x60, 0xa2, 0xc0, 0x18, 0x4f, 0xc6, 0x60, 0x0e, 0x29, 0xf3, 0xfa, 0xbe, 0x45, 0xe3, 0x69, 0x5d, - 0xd3, 0x8a, 0xdd, 0x4b, 0x27, 0x2e, 0x67, 0x3c, 0x17, 0x15, 0x96, 0x1f, 0x37, 0x5d, 0xea, 0xb7, - 0xf4, 0x66, 0x53, 0x8b, 0xa4, 0x8f, 0x9b, 0xad, 0x38, 0x12, 0x93, 0xb4, 0xe4, 0x55, 0x28, 0x76, - 0x4d, 0xd7, 0x69, 0x52, 0x16, 0xa4, 0xf3, 0x2d, 0x5b, 0x0a, 0x8e, 0x9a, 0x82, 0xdc, 0x82, 0x8b, - 0x8c, 0x06, 0xf7, 0x0e, 0x5c, 0xea, 0xeb, 0x4b, 0x23, 0x75, 0xef, 0xf5, 0x7c, 0x78, 0x97, 0xd6, - 0x48, 0x13, 0xe0, 0x60, 0x1b, 0x71, 0x74, 0xf7, 0x2d, 0x8b, 0x32, 0xb6, 0xe2, 0xb9, 0xb6, 0xa3, - 0x6b, 0xaf, 0xe2, 0x47, 0x77, 0x0a, 0x8f, 0x03, 0x2d, 0x38, 0x97, 0xa6, 0xe9, 0x74, 0xfa, 0x3e, - 0x8d, 0xb8, 0x14, 0x92, 0x5c, 0xd6, 0x53, 0x78, 0x1c, 0x68, 0x61, 0xfc, 0x6b, 0x0e, 0xa6, 0x91, - 0x06, 0xfe, 0xa1, 0x9e, 0x94, 0x2a, 0xe4, 0x3b, 0x4e, 0xd7, 0x91, 0xa9, 0xa3, 0xbc, 0xd4, 0xe4, - 0xbb, 0x1c, 0x80, 0x12, 0x4e, 0x56, 0xa1, 0xec, 0xf3, 0x16, 0xea, 0x36, 0x51, 0x4e, 0xb8, 0x11, - 0x7a, 0x63, 0x18, 0xa1, 0x9e, 0x24, 0x3f, 0x31, 0xde, 0x8c, 0xb8, 0x30, 0xb9, 0x27, 0xab, 0x10, - 0xd4, 0x35, 0xd4, 0x70, 0xc6, 0x5e, 0x55, 0x32, 0x88, 0x1c, 0x4c, 0x58, 0xd6, 0xf0, 0x24, 0xfa, - 0x89, 0xa1, 0x10, 0xe3, 0x7b, 0x39, 0x80, 0xa8, 0x1c, 0x8a, 0xec, 0x43, 0x91, 0xdd, 0xac, 0xf7, - 0xad, 0x7d, 0x9d, 0x23, 0x1b, 0xf2, 0x2a, 0x45, 0x31, 0x89, 0xdd, 0xc2, 0x2a, 0x08, 0x6a, 0x01, - 0x5f, 0x54, 0x2c, 0xf3, 0xd7, 0xe3, 0xa0, 0x5b, 0x71, 0x9d, 0xa4, 0xae, 0xdd, 0xf3, 0x1c, 0x37, - 0x48, 0x97, 0x64, 0xac, 0x29, 0x38, 0x6a, 0x0a, 0xbe, 0x4d, 0xf6, 0xe4, 0x20, 0xc6, 0x92, 0xdb, - 0x44, 0xf5, 0x41, 0x61, 0x39, 0x9d, 0x4f, 0x5b, 0x51, 0x35, 0x86, 0xa6, 0x43, 0x01, 0x45, 0x85, - 0xe5, 0xa7, 0x63, 0x98, 0x24, 0x56, 0xaa, 0x2d, 0x4e, 0xc7, 0x30, 0x9f, 0x8c, 0x1a, 0x4b, 0xda, - 0x30, 0x6b, 0x0a, 0x8d, 0x8c, 0x12, 0xdf, 0x67, 0xca, 0xe1, 0x47, 0xa5, 0x38, 0x49, 0x2e, 0x98, - 0x66, 0xcb, 0x25, 0xb1, 0xa8, 0xf9, 0xd9, 0x53, 0xf9, 0x5a, 0x52, 0x23, 0xc9, 0x05, 0xd3, 0x6c, - 0xb9, 0x63, 0xe8, 0x7b, 0x1d, 0xba, 0x8c, 0xdb, 0xca, 0x01, 0xd5, 0x8e, 0x21, 0x4a, 0x30, 0x86, - 0x78, 0xe3, 0xf7, 0x72, 0x30, 0xd3, 0xb0, 0x7c, 0xa7, 0x17, 0x68, 0x93, 0xb5, 0x2d, 0x6a, 0xa8, - 0x02, 0x93, 0xbb, 0x6c, 0x4a, 0xa7, 0x5e, 0x3c, 0x21, 0x87, 0x28, 0x89, 0x12, 0x25, 0x56, 0x12, - 0x84, 0x11, 0x0b, 0x11, 0xe9, 0x0b, 0xa3, 0x98, 0x5e, 0xdb, 0x86, 0x80, 0xa2, 0xc2, 0x1a, 0xdf, - 0xcf, 0x41, 0x51, 0xdf, 0xd8, 0xbd, 0x04, 0x79, 0x71, 0x11, 0xa4, 0x74, 0x47, 0x9f, 0x81, 0x2b, - 0x1c, 0x88, 0x12, 0xc7, 0x89, 0x84, 0x17, 0xaa, 0x18, 0xc7, 0x0e, 0x4a, 0xd3, 0x0f, 0x50, 0xe2, - 0xb8, 0xd2, 0x52, 0xd7, 0x56, 0xfa, 0xa2, 0x95, 0x76, 0xcd, 0xb5, 0x91, 0xc3, 0x45, 0xe9, 0x8d, - 0xe7, 0x77, 0xcd, 0x20, 0x9d, 0x87, 0x58, 0x17, 0x50, 0x54, 0x58, 0xe3, 0x1d, 0x98, 0x55, 0xc5, - 0x00, 0x7a, 0xa2, 0xce, 0x54, 0x75, 0x64, 0x4c, 0x43, 0x39, 0x56, 0xab, 0x6c, 0xfc, 0xf7, 0x15, - 0xd0, 0xf7, 0xda, 0x3f, 0xbd, 0x1d, 0x1f, 0x2a, 0x74, 0xb4, 0xb4, 0x23, 0x9f, 0x1f, 0xdd, 0x91, - 0xd7, 0xeb, 0x9e, 0x72, 0xe6, 0x5b, 0x91, 0x33, 0x5f, 0x38, 0x07, 0x67, 0x5e, 0xef, 0xc4, 0x01, - 0x87, 0xfe, 0xf7, 0x73, 0x30, 0xe5, 0x7a, 0x36, 0x0d, 0xf7, 0x7b, 0x65, 0x52, 0x38, 0x90, 0xf7, - 0x46, 0x9a, 0xc4, 0xda, 0x76, 0x8c, 0xa3, 0x4c, 0xb2, 0xe8, 0x4c, 0x40, 0x1c, 0x85, 0x09, 0xd1, - 0x64, 0x1d, 0x8a, 0x66, 0x93, 0x47, 0x60, 0xc1, 0xa1, 0xba, 0xa0, 0xbf, 0x9a, 0x65, 0x01, 0x96, - 0x15, 0x8d, 0x34, 0xae, 0xe1, 0x17, 0xea, 0xb6, 0xfc, 0x74, 0xd2, 0xd5, 0x54, 0xa5, 0x11, 0x4e, - 0xa7, 0x30, 0x5b, 0x14, 0xf3, 0x6b, 0x14, 0x24, 0x56, 0x5c, 0x65, 0x40, 0x41, 0xc6, 0x78, 0x22, - 0xc0, 0x2d, 0x4a, 0x77, 0x5d, 0xc6, 0x7f, 0xa8, 0x30, 0xa4, 0x15, 0x7a, 0xe7, 0x65, 0x31, 0xb9, - 0xf5, 0xa1, 0x23, 0x16, 0xed, 0xf0, 0x67, 0xbb, 0xe7, 0xe4, 0x4e, 0xdc, 0x88, 0x4e, 0x9d, 0xc6, - 0x88, 0x4e, 0x9f, 0x68, 0x40, 0x5b, 0x50, 0x60, 0xc2, 0x44, 0x8b, 0xc0, 0xb6, 0x7c, 0x63, 0x65, - 0xb8, 0x13, 0x3e, 0x61, 0xe5, 0xe5, 0xec, 0x48, 0x18, 0x2a, 0xf6, 0xc4, 0x83, 0xa2, 0xaf, 0x1c, - 0x58, 0x15, 0x1b, 0x0f, 0x97, 0x97, 0x4f, 0x7b, 0xc1, 0x52, 0x3f, 0x42, 0x28, 0x6a, 0x21, 0xe4, - 0x5d, 0x18, 0xb7, 0xcd, 0x96, 0x8a, 0x92, 0xbf, 0x39, 0x74, 0x29, 0x43, 0x28, 0x46, 0x14, 0x09, - 0xaf, 0x2e, 0xdf, 0x42, 0xce, 0x95, 0xec, 0x47, 0x55, 0x5d, 0x73, 0x23, 0xd4, 0xde, 0xa6, 0xac, - 0xbe, 0x8c, 0x9b, 0x06, 0xea, 0xc2, 0xd6, 0x60, 0xf2, 0xb1, 0xd7, 0xe9, 0x77, 0x55, 0x78, 0x5d, - 0xbe, 0xb1, 0x90, 0xb5, 0xda, 0x0f, 0x04, 0x49, 0x64, 0x04, 0xe4, 0x37, 0xc3, 0xb0, 0x2d, 0xf9, - 0xad, 0x1c, 0xcc, 0xf0, 0xad, 0xa3, 0xf5, 0x80, 0x55, 0xc8, 0x08, 0x9a, 0x7a, 0x9f, 0x51, 0x3f, - 0xd2, 0xb0, 0xe7, 0x94, 0xd8, 0x99, 0x8d, 0x84, 0x04, 0x4c, 0x49, 0x24, 0x3d, 0x28, 0x32, 0xc7, - 0xa6, 0x96, 0xe9, 0xb3, 0xca, 0xa5, 0x73, 0x93, 0x1e, 0x39, 0x96, 0x8a, 0x37, 0x6a, 0x29, 0xe4, - 0xb7, 0x45, 0xbd, 0xb4, 0x7a, 0x31, 0xa0, 0x5e, 0x71, 0xcc, 0x9f, 0xe7, 0x2b, 0x8e, 0x4b, 0xb2, - 0x58, 0x3a, 0x21, 0x01, 0xd3, 0x22, 0xc9, 0x3d, 0xb8, 0x2c, 0x6b, 0xe5, 0xd2, 0xa5, 0x7d, 0x97, - 0xc5, 0xcd, 0xc9, 0xf3, 0xc7, 0x47, 0xd5, 0xcb, 0xcb, 0x59, 0x04, 0x98, 0xdd, 0x8e, 0x7c, 0x08, - 0xd3, 0x7e, 0x3c, 0x28, 0xa9, 0x3c, 0x37, 0xc2, 0xb5, 0x7d, 0x22, 0xbc, 0x91, 0xe9, 0x9b, 0x04, - 0x08, 0x93, 0xb2, 0xc8, 0xeb, 0x50, 0xee, 0x29, 0x4b, 0xe5, 0xb0, 0x6e, 0xe5, 0x8a, 0x18, 0x83, - 0x38, 0x51, 0x77, 0x22, 0x30, 0xc6, 0x69, 0xc8, 0x7d, 0x28, 0x07, 0x5e, 0x87, 0xfa, 0xea, 0x8a, - 0xa1, 0x22, 0x16, 0x7f, 0x31, 0x4b, 0x93, 0x77, 0x35, 0x59, 0x94, 0xc0, 0x8e, 0x60, 0x0c, 0xe3, - 0x7c, 0x78, 0x70, 0x1b, 0x56, 0x72, 0xfa, 0x22, 0x92, 0x7f, 0x3e, 0x19, 0xdc, 0x36, 0xe2, 0x48, - 0x4c, 0xd2, 0xf2, 0x70, 0xb5, 0xe7, 0x3b, 0x9e, 0xef, 0x04, 0x87, 0x2b, 0x1d, 0x93, 0x31, 0xc1, - 0x60, 0x41, 0x30, 0xd0, 0xe1, 0xea, 0x4e, 0x9a, 0x00, 0x07, 0xdb, 0xf0, 0x98, 0x20, 0x04, 0x56, - 0x5e, 0x10, 0x31, 0xa1, 0x30, 0x4b, 0x61, 0x5b, 0xd4, 0xd8, 0x13, 0x8a, 0x98, 0xae, 0x0e, 0x53, - 0xc4, 0x44, 0x6c, 0xb8, 0x6a, 0xf6, 0x03, 0xaf, 0xcb, 0x01, 0xc9, 0x26, 0xbb, 0xde, 0x3e, 0x75, - 0x2b, 0xd7, 0xc4, 0x59, 0x75, 0xed, 0xf8, 0xa8, 0x7a, 0x75, 0xf9, 0x73, 0xe8, 0xf0, 0x73, 0xb9, - 0x90, 0x2e, 0x14, 0xa9, 0x2a, 0xc4, 0xaa, 0x7c, 0x69, 0x84, 0x43, 0x22, 0x59, 0xcd, 0x25, 0x27, - 0x28, 0x84, 0xa1, 0x16, 0x41, 0x76, 0xa1, 0xdc, 0xf6, 0x58, 0xb0, 0xdc, 0x71, 0x4c, 0x46, 0x59, - 0xe5, 0x45, 0xa1, 0x27, 0x99, 0xe7, 0xdb, 0xed, 0x90, 0x2c, 0x52, 0x93, 0xdb, 0x51, 0x4b, 0x8c, - 0xb3, 0x21, 0x54, 0x04, 0x48, 0x7d, 0xb1, 0x6a, 0x9e, 0x1b, 0xd0, 0x0f, 0x82, 0xca, 0xa2, 0x18, - 0xcb, 0x2b, 0x59, 0x9c, 0x77, 0x3c, 0xbb, 0x91, 0xa4, 0x96, 0xbb, 0x3c, 0x05, 0xc4, 0x34, 0x4f, - 0xf2, 0x06, 0x4c, 0xf5, 0x3c, 0xbb, 0xd1, 0xa3, 0xd6, 0x8e, 0x19, 0x58, 0xed, 0x4a, 0x35, 0x79, - 0x41, 0xb2, 0x13, 0xc3, 0x61, 0x82, 0x72, 0xe1, 0x1d, 0xb8, 0x38, 0xe0, 0x4f, 0x9d, 0xe9, 0x36, - 0xe9, 0xcf, 0x73, 0x10, 0x77, 0x67, 0xcf, 0xdd, 0xef, 0xbf, 0x05, 0x17, 0xd5, 0x2b, 0x4c, 0x7e, - 0xd8, 0x76, 0xfa, 0xfa, 0xdd, 0x42, 0x2c, 0xb5, 0x83, 0x69, 0x02, 0x1c, 0x6c, 0x63, 0xfc, 0x45, - 0x0e, 0xa6, 0x13, 0xe6, 0xfb, 0xdc, 0xa3, 0xc2, 0x75, 0x20, 0x5d, 0xc7, 0xf7, 0x3d, 0x5f, 0x9e, - 0x81, 0x5b, 0x5c, 0x97, 0x99, 0x7a, 0xfe, 0x20, 0x0a, 0x51, 0xb6, 0x06, 0xb0, 0x98, 0xd1, 0xc2, - 0xf8, 0x9b, 0x1c, 0x44, 0xb9, 0x43, 0x5d, 0x7d, 0x95, 0x3b, 0xb1, 0xfa, 0xea, 0x55, 0x28, 0x3e, - 0x62, 0x9e, 0xbb, 0x13, 0xd5, 0x68, 0xe9, 0x09, 0xbd, 0xd3, 0xb8, 0xb7, 0x2d, 0x28, 0x35, 0x85, - 0xa0, 0x7e, 0x7f, 0xdd, 0xe9, 0x04, 0x83, 0x95, 0x4c, 0x77, 0x7e, 0x59, 0xc2, 0x51, 0x53, 0x90, - 0x25, 0x28, 0xe9, 0x74, 0xb5, 0x0a, 0x27, 0xf5, 0x24, 0xe8, 0x5c, 0x2d, 0x46, 0x34, 0xc6, 0x0f, - 0xc6, 0xa0, 0xf8, 0x0c, 0xdf, 0x72, 0x58, 0x89, 0xb7, 0x1c, 0xe7, 0x50, 0xf8, 0x9f, 0xf5, 0x8e, - 0x63, 0x3f, 0xf5, 0x8e, 0x63, 0x65, 0xc4, 0x0c, 0xf8, 0xe7, 0xbe, 0xe1, 0xf8, 0x24, 0x07, 0x53, - 0xcf, 0xf0, 0xfd, 0xc6, 0x5e, 0xf2, 0xfd, 0xc6, 0x5b, 0x23, 0x0d, 0xed, 0x84, 0xb7, 0x1b, 0x7f, - 0x7b, 0x09, 0x12, 0xef, 0x26, 0x88, 0x0b, 0xa5, 0x70, 0x83, 0x87, 0xb7, 0x0a, 0x6f, 0x8d, 0x14, - 0x14, 0x46, 0x4a, 0x19, 0x42, 0x18, 0x46, 0x22, 0xc8, 0x0d, 0x00, 0xca, 0x2d, 0x9b, 0xcc, 0xdd, - 0x8d, 0x25, 0x93, 0xee, 0x6b, 0x1a, 0x83, 0x31, 0xaa, 0x67, 0x9f, 0x70, 0xc8, 0x3e, 0xa2, 0x27, - 0x9e, 0xca, 0x11, 0x7d, 0xf5, 0xdc, 0x8f, 0xe8, 0x17, 0x9f, 0xfe, 0x11, 0x1d, 0x0b, 0x48, 0xf2, - 0x23, 0x04, 0x24, 0x1f, 0xc2, 0xbc, 0xfc, 0xb9, 0xd2, 0x31, 0x9d, 0xae, 0xd6, 0x17, 0x55, 0x46, - 0xf5, 0xe5, 0xcc, 0x83, 0x99, 0xfa, 0xcc, 0x61, 0x01, 0x75, 0x83, 0x07, 0x51, 0xcb, 0xe8, 0x0e, - 0xfe, 0x41, 0x06, 0x3b, 0xcc, 0x14, 0x92, 0xf6, 0x60, 0x27, 0x4f, 0xe1, 0xc1, 0x7e, 0x3f, 0x07, - 0x97, 0xcd, 0xac, 0xa7, 0xa1, 0x2a, 0x8f, 0x71, 0x67, 0xa4, 0x78, 0x22, 0xc1, 0x51, 0xc5, 0x03, - 0x59, 0x28, 0xcc, 0xee, 0x03, 0x79, 0x39, 0x0a, 0x49, 0x4b, 0x42, 0xa9, 0xb2, 0x83, 0xc9, 0xef, - 0xa4, 0x53, 0x41, 0x20, 0x66, 0xbb, 0x31, 0xb2, 0xc1, 0x3e, 0x87, 0x74, 0x50, 0x79, 0x84, 0x74, - 0x50, 0x2a, 0xbc, 0x98, 0x3a, 0xa7, 0xf0, 0xc2, 0x85, 0x39, 0xa7, 0x6b, 0xb6, 0xe8, 0x4e, 0xbf, - 0xd3, 0x91, 0x19, 0x70, 0x56, 0x99, 0x16, 0xbc, 0x33, 0x6b, 0x5f, 0x79, 0xb8, 0xd7, 0x49, 0x3f, - 0x9a, 0xd2, 0x77, 0x4d, 0x1b, 0x29, 0x4e, 0x38, 0xc0, 0x9b, 0xab, 0x25, 0x77, 0x5b, 0xb7, 0x69, - 0xc0, 0x67, 0x5b, 0x64, 0x4a, 0xd4, 0x13, 0xf8, 0xdb, 0x11, 0x18, 0xe3, 0x34, 0x64, 0x13, 0x4a, - 0xb6, 0xcb, 0xd4, 0x4d, 0xd3, 0xac, 0xb0, 0x52, 0xaf, 0x71, 0xdb, 0xb6, 0xba, 0xdd, 0xd0, 0x77, - 0x4c, 0x57, 0x07, 0xff, 0xc7, 0x47, 0x4d, 0xe3, 0x31, 0x6a, 0x4f, 0xb6, 0x04, 0x33, 0x55, 0x08, - 0x2e, 0x53, 0x1b, 0xd7, 0x4e, 0xf0, 0x90, 0x57, 0xb7, 0xc3, 0xba, 0xf5, 0x69, 0x25, 0x4e, 0x95, - 0x77, 0x47, 0x1c, 0xc8, 0x2b, 0x50, 0xf0, 0xdc, 0xb5, 0x0f, 0x9c, 0xa0, 0x72, 0x31, 0x99, 0x01, - 0xbf, 0x27, 0xa0, 0xa8, 0xb0, 0xe4, 0x3e, 0x5c, 0x09, 0x82, 0x8e, 0x0a, 0x6d, 0x97, 0x9b, 0x01, - 0xf5, 0xc3, 0x7a, 0x0d, 0x51, 0xb0, 0x93, 0x97, 0x4f, 0xdf, 0x76, 0x77, 0xef, 0x66, 0x91, 0xe0, - 0x49, 0x6d, 0x4f, 0x0e, 0xba, 0x2f, 0x0d, 0x19, 0x74, 0xc7, 0xe3, 0xbc, 0xf9, 0xcf, 0x8d, 0xf3, - 0x06, 0xe2, 0xd2, 0xcb, 0x67, 0x88, 0x4b, 0xdf, 0x15, 0x55, 0x29, 0xb7, 0x56, 0x54, 0x4c, 0xff, - 0xe6, 0x70, 0xa9, 0x44, 0xce, 0x41, 0xde, 0x4d, 0x8a, 0x9f, 0x28, 0x79, 0x92, 0x1d, 0x98, 0xef, - 0x79, 0xf6, 0x40, 0x58, 0x2b, 0x82, 0xf8, 0x58, 0x3d, 0xd3, 0x4e, 0x06, 0x0d, 0x66, 0xb6, 0x14, - 0xb6, 0x34, 0x82, 0x57, 0x2a, 0x62, 0x62, 0xa4, 0x2d, 0x8d, 0xc0, 0x18, 0xa7, 0x49, 0x47, 0x79, - 0xcf, 0x3f, 0xb5, 0x28, 0x6f, 0xe1, 0x19, 0x44, 0x79, 0x2f, 0x3c, 0xbb, 0x28, 0xef, 0xd3, 0x22, - 0xcc, 0xa4, 0x1e, 0x72, 0xea, 0x82, 0xb0, 0xdc, 0x69, 0x0b, 0xc2, 0x12, 0x15, 0x5b, 0x63, 0x4f, - 0xb5, 0x62, 0x6b, 0xfc, 0xdc, 0x2b, 0xb6, 0x62, 0x95, 0x69, 0x13, 0x5f, 0x50, 0x99, 0xb6, 0x0c, - 0xb3, 0x96, 0xd7, 0xed, 0x89, 0x97, 0x23, 0xaa, 0x3e, 0x49, 0xd6, 0x10, 0xe8, 0xeb, 0xce, 0x95, - 0x24, 0x1a, 0xd3, 0xf4, 0x84, 0x41, 0xde, 0x15, 0x0d, 0x0b, 0x23, 0x94, 0xc4, 0x26, 0x17, 0x4c, - 0x1c, 0x94, 0xaa, 0x2a, 0x55, 0xbb, 0xe9, 0x52, 0xbc, 0x94, 0xc5, 0x1d, 0x8d, 0xd9, 0x64, 0x19, - 0x22, 0xab, 0x94, 0x84, 0xfc, 0x5f, 0x39, 0x0f, 0xf9, 0xc9, 0x9a, 0x47, 0xd5, 0x93, 0xe8, 0x06, - 0x38, 0x89, 0xc5, 0x74, 0x4f, 0x88, 0x0f, 0xcf, 0xf5, 0xb2, 0xdc, 0x30, 0xa6, 0x6e, 0x95, 0x3e, - 0xcf, 0x19, 0x5c, 0x54, 0x52, 0x9e, 0xcb, 0x74, 0xe4, 0x18, 0x9e, 0xc0, 0x39, 0x5e, 0xf6, 0x56, - 0x7c, 0x5a, 0x65, 0x6f, 0x0b, 0x87, 0xb2, 0x1c, 0xf7, 0xc4, 0x4a, 0xde, 0xfb, 0xc9, 0xea, 0xfa, - 0x77, 0x86, 0xfc, 0xaf, 0x4f, 0x61, 0xc1, 0x6f, 0xbc, 0x8a, 0xf8, 0x37, 0x73, 0x30, 0x9f, 0xb5, - 0x2c, 0x19, 0xbd, 0x68, 0x24, 0x7b, 0x31, 0x5a, 0xb8, 0x16, 0x37, 0x2d, 0xff, 0x9e, 0x8f, 0x05, - 0x87, 0x01, 0xed, 0xfd, 0xf4, 0xe6, 0x78, 0xa8, 0x9b, 0xe3, 0xc4, 0x0b, 0xe9, 0xfc, 0x33, 0x7c, - 0x21, 0x5d, 0x18, 0xe2, 0x85, 0xf4, 0xe4, 0xb3, 0x7c, 0x21, 0x5d, 0x3c, 0xe5, 0x0b, 0xe9, 0xd2, - 0xd3, 0x7f, 0x21, 0xfd, 0x59, 0x0e, 0xe6, 0xd2, 0x05, 0xdb, 0xcf, 0x20, 0x49, 0xb6, 0x9f, 0x48, - 0x92, 0x6d, 0x8c, 0x64, 0xcc, 0x75, 0x91, 0xf8, 0x09, 0xc9, 0x32, 0xe3, 0x47, 0x39, 0x18, 0x28, - 0x4a, 0x7f, 0x06, 0x79, 0xac, 0x47, 0xc9, 0x3c, 0xd6, 0xda, 0xb9, 0x0c, 0xf2, 0x84, 0x7c, 0xd6, - 0xff, 0x64, 0x0c, 0xf1, 0xff, 0x25, 0xaf, 0x95, 0x30, 0x6d, 0x63, 0x4f, 0xdf, 0xb4, 0xd5, 0x6b, - 0x1f, 0x7f, 0xb6, 0x78, 0xe1, 0x93, 0xcf, 0x16, 0x2f, 0x7c, 0xfa, 0xd9, 0xe2, 0x85, 0x8f, 0x8e, - 0x17, 0x73, 0x1f, 0x1f, 0x2f, 0xe6, 0x3e, 0x39, 0x5e, 0xcc, 0x7d, 0x7a, 0xbc, 0x98, 0xfb, 0xd1, - 0xf1, 0x62, 0xee, 0x0f, 0xff, 0x65, 0xf1, 0xc2, 0xaf, 0x16, 0x43, 0xbe, 0xff, 0x17, 0x00, 0x00, - 0xff, 0xff, 0x1d, 0x3e, 0xb1, 0x4f, 0x8e, 0x52, 0x00, 0x00, + // 5044 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xec, 0x5c, 0x4d, 0x6c, 0x5c, 0x59, + 0x56, 0x4e, 0xd9, 0xae, 0x72, 0xd5, 0x29, 0x3b, 0x76, 0x6e, 0x9c, 0xa4, 0xda, 0x9d, 0x76, 0x65, + 0x5e, 0xd3, 0x4d, 0x06, 0xba, 0xcb, 0xd3, 0xc9, 0x0c, 0xf4, 0xf4, 0xd0, 0xdd, 0xe3, 0xf2, 0x4f, + 0xe2, 0x38, 0x76, 0xcc, 0x29, 0x27, 0x61, 0xe8, 0xd6, 0x0c, 0xcf, 0xef, 0xdd, 0xaa, 0x7a, 0x71, + 0xd5, 0x7b, 0xd5, 0xef, 0xbe, 0x8a, 0xdb, 0xea, 0x05, 0x0d, 0x02, 0x01, 0x42, 0x23, 0xc1, 0x66, + 0x18, 0x31, 0x1b, 0xc4, 0x02, 0x36, 0x6c, 0xd8, 0xb2, 0x18, 0x24, 0xc4, 0xa2, 0x35, 0x1b, 0x5a, + 0x6c, 0xe8, 0x05, 0xb2, 0xa6, 0x8d, 0x84, 0x40, 0x20, 0x21, 0xb1, 0x41, 0x64, 0x85, 0xee, 0xcf, + 0xbb, 0xef, 0xa7, 0x9e, 0xd3, 0x76, 0x95, 0x13, 0x34, 0x9a, 0x59, 0xc5, 0x75, 0xce, 0xb9, 0xdf, + 0xb9, 0xbf, 0xe7, 0x9e, 0x73, 0xee, 0x79, 0x81, 0xe5, 0x96, 0x13, 0xb4, 0xfb, 0xbb, 0x35, 0xcb, + 0xeb, 0x2e, 0x9a, 0x7e, 0xcb, 0xeb, 0xf9, 0xde, 0x23, 0xf1, 0xc7, 0x62, 0x6f, 0xaf, 0xb5, 0x68, + 0xf6, 0x1c, 0xb6, 0xb8, 0xef, 0xf9, 0x7b, 0xcd, 0x8e, 0xb7, 0xbf, 0xf8, 0xf8, 0x0d, 0xb3, 0xd3, + 0x6b, 0x9b, 0x6f, 0x2c, 0xb6, 0xa8, 0x4b, 0x7d, 0x33, 0xa0, 0x76, 0xad, 0xe7, 0x7b, 0x81, 0x47, + 0x6e, 0x46, 0x20, 0xb5, 0x10, 0x44, 0xfc, 0x51, 0xeb, 0xed, 0xb5, 0x6a, 0x1c, 0xa4, 0x16, 0x82, + 0xd4, 0x42, 0x90, 0xf9, 0xd7, 0x63, 0x9a, 0x5b, 0x1e, 0x57, 0xc8, 0xb1, 0x76, 0xfb, 0x4d, 0xf1, + 0x4b, 0xfc, 0x10, 0x7f, 0x49, 0x1d, 0xf3, 0xc6, 0xde, 0x9b, 0xac, 0xe6, 0x78, 0xbc, 0x4b, 0x8b, + 0x96, 0xe7, 0xd3, 0xc5, 0xc7, 0x03, 0xfd, 0x98, 0xff, 0x6a, 0x24, 0xd3, 0x35, 0xad, 0xb6, 0xe3, + 0x52, 0xff, 0x20, 0x1a, 0x47, 0x97, 0x06, 0x66, 0x56, 0xab, 0xc5, 0xe3, 0x5a, 0xf9, 0x7d, 0x37, + 0x70, 0xba, 0x74, 0xa0, 0xc1, 0x2f, 0x7d, 0x51, 0x03, 0x66, 0xb5, 0x69, 0xd7, 0x4c, 0xb7, 0x33, + 0xfe, 0x21, 0x07, 0x33, 0x4b, 0xbe, 0xd5, 0x76, 0x1e, 0xd3, 0x46, 0xc0, 0x19, 0xad, 0x03, 0xf2, + 0x1e, 0x8c, 0x07, 0xa6, 0x5f, 0xc9, 0x5d, 0xcb, 0x5d, 0x2f, 0xdf, 0xf8, 0x66, 0x6d, 0x88, 0x89, + 0xac, 0xed, 0x98, 0x7e, 0x08, 0x57, 0x9f, 0x3c, 0x3a, 0xac, 0x8e, 0xef, 0x98, 0x3e, 0x72, 0x54, + 0xf2, 0x1d, 0x98, 0x70, 0x3d, 0x97, 0x56, 0xc6, 0x04, 0xfa, 0xd2, 0x50, 0xe8, 0x5b, 0x9e, 0xab, + 0x7b, 0x5b, 0x2f, 0x1e, 0x1d, 0x56, 0x27, 0x38, 0x05, 0x05, 0xb0, 0xf1, 0x5f, 0x39, 0x28, 0x2d, + 0xf9, 0xad, 0x7e, 0x97, 0xba, 0x01, 0x23, 0x3e, 0x40, 0xcf, 0xf4, 0xcd, 0x2e, 0x0d, 0xa8, 0xcf, + 0x2a, 0xb9, 0x6b, 0xe3, 0xd7, 0xcb, 0x37, 0xde, 0x19, 0x4a, 0xe9, 0x76, 0x08, 0x53, 0x27, 0x9f, + 0x1c, 0x56, 0xcf, 0x1d, 0x1d, 0x56, 0x41, 0x93, 0x18, 0xc6, 0xb4, 0x10, 0x17, 0x4a, 0xa6, 0x1f, + 0x38, 0x4d, 0xd3, 0x0a, 0x58, 0x65, 0x4c, 0xa8, 0x7c, 0x7b, 0x28, 0x95, 0x4b, 0x0a, 0xa5, 0x7e, + 0x41, 0x69, 0x2c, 0x85, 0x14, 0x86, 0x91, 0x0a, 0xe3, 0x3f, 0xc6, 0xa1, 0x18, 0x32, 0xc8, 0x35, + 0x98, 0x70, 0xcd, 0x2e, 0x15, 0xab, 0x57, 0xaa, 0x4f, 0xa9, 0x86, 0x13, 0x5b, 0x66, 0x97, 0x4f, + 0x90, 0xd9, 0xa5, 0x5c, 0xa2, 0x67, 0x06, 0x6d, 0xb1, 0x02, 0x31, 0x89, 0x6d, 0x33, 0x68, 0xa3, + 0xe0, 0x90, 0xab, 0x30, 0xd1, 0xf5, 0x6c, 0x5a, 0x19, 0xbf, 0x96, 0xbb, 0x9e, 0x97, 0x13, 0xbc, + 0xe9, 0xd9, 0x14, 0x05, 0x95, 0xb7, 0x6f, 0xfa, 0x5e, 0xb7, 0x32, 0x91, 0x6c, 0xbf, 0xe6, 0x7b, + 0x5d, 0x14, 0x1c, 0xf2, 0x87, 0x39, 0x98, 0x0d, 0xbb, 0x77, 0xd7, 0xb3, 0xcc, 0xc0, 0xf1, 0xdc, + 0x4a, 0x5e, 0x2c, 0xf8, 0xea, 0x48, 0x13, 0x11, 0x82, 0xd5, 0x2b, 0x4a, 0xeb, 0x6c, 0x9a, 0x83, + 0x03, 0x8a, 0xc9, 0x0d, 0x80, 0x56, 0xc7, 0xdb, 0x35, 0x3b, 0x7c, 0x0e, 0x2a, 0x05, 0xd1, 0x6b, + 0xbd, 0x84, 0xb7, 0x34, 0x07, 0x63, 0x52, 0x64, 0x0f, 0x26, 0x4d, 0x79, 0x2a, 0x2a, 0x93, 0xa2, + 0xdf, 0x2b, 0x43, 0xf6, 0x3b, 0x71, 0xb2, 0xea, 0xe5, 0xa3, 0xc3, 0xea, 0xa4, 0x22, 0x62, 0xa8, + 0x81, 0xbc, 0x06, 0x45, 0xaf, 0xc7, 0xbb, 0x6a, 0x76, 0x2a, 0xc5, 0x6b, 0xb9, 0xeb, 0xc5, 0xfa, + 0xac, 0xea, 0x5e, 0xf1, 0x9e, 0xa2, 0xa3, 0x96, 0x30, 0xfe, 0x24, 0x0f, 0x03, 0xa3, 0x26, 0x6f, + 0x40, 0x59, 0xa1, 0xdd, 0xf5, 0x5a, 0x4c, 0x2c, 0x7e, 0xb1, 0x3e, 0x73, 0x74, 0x58, 0x2d, 0x2f, + 0x45, 0x64, 0x8c, 0xcb, 0x90, 0x87, 0x30, 0xc6, 0x6e, 0xaa, 0x63, 0xf8, 0xee, 0x50, 0xa3, 0x6b, + 0xdc, 0xd4, 0x1b, 0xb4, 0x70, 0x74, 0x58, 0x1d, 0x6b, 0xdc, 0xc4, 0x31, 0x76, 0x93, 0x9b, 0x8f, + 0x96, 0x13, 0x88, 0xcd, 0x33, 0xac, 0xf9, 0xb8, 0xe5, 0x04, 0x1a, 0x5a, 0x98, 0x8f, 0x5b, 0x4e, + 0x80, 0x1c, 0x95, 0x9b, 0x8f, 0x76, 0x10, 0xf4, 0xc4, 0xe6, 0x1b, 0xd6, 0x7c, 0xdc, 0xde, 0xd9, + 0xd9, 0xd6, 0xf0, 0x62, 0x77, 0x73, 0x0a, 0x0a, 0x60, 0xf2, 0x11, 0x9f, 0x49, 0xc9, 0xf3, 0xfc, + 0x03, 0xb5, 0x6b, 0x6f, 0x8f, 0xb4, 0x6b, 0x3d, 0xff, 0x40, 0xab, 0x53, 0x6b, 0xa2, 0x19, 0x18, + 0xd7, 0x26, 0x46, 0x67, 0x37, 0x99, 0xd8, 0xa4, 0x43, 0x8f, 0x6e, 0x65, 0xad, 0x91, 0x1a, 0xdd, + 0xca, 0x5a, 0x03, 0x05, 0x30, 0x5f, 0x1b, 0xdf, 0xdc, 0x57, 0x7b, 0x7a, 0xb8, 0xb5, 0x41, 0x73, + 0x3f, 0xb9, 0x36, 0x68, 0xee, 0x23, 0x47, 0x35, 0x5a, 0x70, 0x29, 0xe4, 0x20, 0xed, 0x79, 0xcc, + 0x11, 0x03, 0xa4, 0x4d, 0xb2, 0x08, 0x25, 0xcb, 0x73, 0x9b, 0x4e, 0x6b, 0xd3, 0xec, 0x29, 0xc3, + 0xa4, 0x2d, 0xda, 0x72, 0xc8, 0xc0, 0x48, 0x86, 0xbc, 0x04, 0xe3, 0x7b, 0xf4, 0x40, 0x59, 0xa8, + 0xb2, 0x12, 0x1d, 0xdf, 0xa0, 0x07, 0xc8, 0xe9, 0xc6, 0x0f, 0x73, 0x70, 0x31, 0x63, 0x72, 0x79, + 0xb3, 0xbe, 0xdf, 0x51, 0x1a, 0x74, 0xb3, 0xfb, 0x78, 0x17, 0x39, 0x9d, 0xfc, 0x5e, 0x0e, 0x66, + 0x62, 0xb3, 0xbd, 0xd4, 0x57, 0x46, 0x70, 0xf8, 0xd3, 0x9d, 0xc0, 0xaa, 0x5f, 0x51, 0x1a, 0x67, + 0x52, 0x0c, 0x4c, 0x6b, 0x35, 0xfe, 0x49, 0xdc, 0xba, 0x09, 0x1a, 0x31, 0xe1, 0x7c, 0x9f, 0x51, + 0x9f, 0x9b, 0xe8, 0x06, 0xb5, 0x7c, 0x1a, 0xa8, 0x0b, 0xf8, 0x95, 0x9a, 0xbc, 0xda, 0x79, 0x2f, + 0x6a, 0xdc, 0xcb, 0xa8, 0x3d, 0x7e, 0xa3, 0x26, 0x25, 0x36, 0xe8, 0x41, 0x83, 0x76, 0x28, 0xc7, + 0xa8, 0x93, 0xa3, 0xc3, 0xea, 0xf9, 0xfb, 0x09, 0x00, 0x4c, 0x01, 0x72, 0x15, 0x3d, 0x93, 0xb1, + 0x7d, 0xcf, 0xb7, 0x95, 0x8a, 0xb1, 0x53, 0xab, 0xd8, 0x4e, 0x00, 0x60, 0x0a, 0xd0, 0xf8, 0x5e, + 0x0e, 0x26, 0xeb, 0xa6, 0xb5, 0xe7, 0x35, 0x9b, 0xdc, 0xae, 0xd9, 0x7d, 0x5f, 0x5a, 0x7f, 0xb9, + 0x26, 0xda, 0xae, 0xad, 0x28, 0x3a, 0x6a, 0x09, 0xf2, 0x2a, 0x14, 0xe4, 0x74, 0x88, 0x4e, 0xe5, + 0xeb, 0xe7, 0x95, 0x6c, 0x61, 0x4d, 0x50, 0x51, 0x71, 0xc9, 0xd7, 0xa0, 0xdc, 0x35, 0x3f, 0x0c, + 0x01, 0x84, 0x99, 0x29, 0xd5, 0x2f, 0x2a, 0xe1, 0xf2, 0x66, 0xc4, 0xc2, 0xb8, 0x9c, 0xf1, 0x2d, + 0x80, 0x65, 0xcf, 0x0d, 0x1c, 0xb7, 0x4f, 0xef, 0xb9, 0xe4, 0x65, 0xc8, 0x53, 0xdf, 0xf7, 0x7c, + 0x65, 0x29, 0xa7, 0x55, 0xf3, 0xfc, 0x2a, 0x27, 0xa2, 0xe4, 0xc9, 0x1e, 0x39, 0x1d, 0x6a, 0x8b, + 0x1e, 0x15, 0xe3, 0x3d, 0xe2, 0x54, 0x54, 0x5c, 0xe3, 0x47, 0x63, 0x30, 0xb5, 0xec, 0x7b, 0xee, + 0x43, 0xb5, 0x43, 0xc8, 0x6f, 0x40, 0x91, 0x3b, 0x76, 0xb6, 0x19, 0x98, 0x6a, 0x11, 0xbf, 0x12, + 0x9b, 0x61, 0xed, 0x9f, 0x45, 0x7b, 0x8b, 0x4b, 0xf3, 0x39, 0xbf, 0xb7, 0xfb, 0x88, 0x5a, 0xc1, + 0x26, 0x0d, 0xcc, 0xe8, 0x86, 0x8a, 0x68, 0xa8, 0x51, 0x49, 0x0b, 0x26, 0x58, 0x8f, 0x5a, 0x6a, + 0xfd, 0x86, 0xbb, 0x54, 0xe3, 0x5d, 0x6e, 0xf4, 0xa8, 0x15, 0x5d, 0xe5, 0xfc, 0x17, 0x0a, 0x05, + 0xc4, 0x83, 0x02, 0x0b, 0xcc, 0xa0, 0xcf, 0x94, 0x3d, 0xbf, 0x35, 0xba, 0x2a, 0x01, 0x17, 0x4d, + 0xa6, 0xfc, 0x8d, 0x4a, 0x8d, 0xf1, 0x59, 0x0e, 0x66, 0xe3, 0xe2, 0x77, 0x1d, 0x16, 0x90, 0xf7, + 0x07, 0x26, 0xb4, 0x76, 0xb2, 0x09, 0xe5, 0xad, 0xc5, 0x74, 0xea, 0x9d, 0x17, 0x52, 0x62, 0x93, + 0xd9, 0x84, 0xbc, 0x13, 0xd0, 0x6e, 0xe8, 0xab, 0x2d, 0x8d, 0x3c, 0xc4, 0x68, 0x3f, 0xad, 0x73, + 0x5c, 0x94, 0xf0, 0xc6, 0xd1, 0x44, 0x72, 0x68, 0x7c, 0x9a, 0xb9, 0xaf, 0x34, 0xb5, 0x1f, 0x23, + 0xa8, 0xf1, 0x0d, 0xd7, 0x89, 0xc4, 0x72, 0xfe, 0x9c, 0xea, 0xc4, 0x54, 0x9c, 0xfa, 0x24, 0xf5, + 0x1b, 0x13, 0xca, 0xf9, 0x91, 0xe5, 0x81, 0x82, 0xdd, 0xef, 0x50, 0x65, 0x7d, 0xf5, 0xc4, 0x35, + 0x14, 0x1d, 0xb5, 0x04, 0x79, 0x1f, 0x2e, 0x58, 0x9e, 0x6b, 0xf5, 0x7d, 0x9f, 0xba, 0xd6, 0xc1, + 0xb6, 0xd7, 0x71, 0xac, 0x03, 0x75, 0x20, 0x6b, 0xaa, 0xd9, 0x85, 0xe5, 0xb4, 0xc0, 0x93, 0x2c, + 0x22, 0x0e, 0x02, 0x91, 0x2f, 0xc3, 0x24, 0xeb, 0xb3, 0x1e, 0x75, 0x6d, 0x71, 0xdb, 0x17, 0xeb, + 0x33, 0x0a, 0x73, 0xb2, 0x21, 0xc9, 0x18, 0xf2, 0xc9, 0x7d, 0xb8, 0xc2, 0x02, 0x6e, 0x64, 0xdd, + 0xd6, 0x0a, 0x35, 0xed, 0x8e, 0xe3, 0x72, 0x93, 0xe7, 0xb9, 0x36, 0x13, 0x17, 0xf8, 0x78, 0xfd, + 0xc5, 0xa3, 0xc3, 0xea, 0x95, 0x46, 0xb6, 0x08, 0x1e, 0xd7, 0x96, 0x7c, 0x1b, 0xe6, 0x59, 0xdf, + 0xb2, 0x28, 0x63, 0xcd, 0x7e, 0xe7, 0x8e, 0xb7, 0xcb, 0x6e, 0x3b, 0x8c, 0xdb, 0xeb, 0xbb, 0x4e, + 0xd7, 0x09, 0xc4, 0x25, 0x9d, 0xaf, 0x2f, 0x1c, 0x1d, 0x56, 0xe7, 0x1b, 0xc7, 0x4a, 0xe1, 0x53, + 0x10, 0x08, 0xc2, 0x65, 0x69, 0x42, 0x06, 0xb0, 0x27, 0x05, 0xf6, 0xfc, 0xd1, 0x61, 0xf5, 0xf2, + 0x5a, 0xa6, 0x04, 0x1e, 0xd3, 0xd2, 0xf8, 0xc7, 0x1c, 0x90, 0xc1, 0xe3, 0x46, 0x36, 0xa0, 0x60, + 0x5a, 0x01, 0xf7, 0x67, 0x65, 0x0c, 0xf4, 0x72, 0x96, 0xc9, 0x97, 0xa6, 0x06, 0x69, 0x93, 0xf2, + 0x75, 0xa0, 0xd1, 0x19, 0x5d, 0x12, 0x4d, 0x51, 0x41, 0x10, 0x0f, 0x2e, 0x74, 0x4c, 0x16, 0x84, + 0x3b, 0xc2, 0xde, 0x71, 0xba, 0x61, 0x40, 0xf7, 0x0b, 0x27, 0x3b, 0x97, 0xbc, 0x45, 0xfd, 0x12, + 0xdf, 0x1f, 0x77, 0xd3, 0x40, 0x38, 0x88, 0x6d, 0xfc, 0x69, 0x01, 0x26, 0x57, 0x96, 0x6e, 0xed, + 0x98, 0x6c, 0xef, 0x04, 0x01, 0xce, 0x6b, 0x50, 0x0c, 0x68, 0xb7, 0xd7, 0x31, 0x83, 0x81, 0x4d, + 0xbc, 0xa3, 0xe8, 0xa8, 0x25, 0x88, 0xc7, 0xa3, 0x35, 0x15, 0x2e, 0x2a, 0x23, 0xf7, 0xce, 0x90, + 0xee, 0x80, 0x42, 0x89, 0x87, 0x6b, 0x8a, 0x84, 0x91, 0x0e, 0xc2, 0xa0, 0x1c, 0x2a, 0x47, 0xda, + 0x54, 0x9e, 0xec, 0x90, 0x61, 0x76, 0x84, 0x23, 0x3d, 0xcb, 0x18, 0x01, 0xe3, 0x5a, 0xc8, 0x57, + 0x61, 0xca, 0xa6, 0xfc, 0xac, 0x50, 0xd7, 0x72, 0x28, 0x3f, 0x16, 0xe3, 0x7c, 0x5e, 0xb8, 0x79, + 0x58, 0x89, 0xd1, 0x31, 0x21, 0x45, 0x1e, 0x41, 0x69, 0xdf, 0x09, 0xda, 0xc2, 0x8a, 0x55, 0x0a, + 0x62, 0xe3, 0x7c, 0x7d, 0xa8, 0x8e, 0x72, 0x84, 0x68, 0x5a, 0x1e, 0x86, 0x98, 0x18, 0xc1, 0x73, + 0x27, 0x91, 0xff, 0x10, 0x31, 0xb5, 0xd8, 0xff, 0xa5, 0x64, 0x03, 0xc1, 0xc0, 0x48, 0x86, 0x30, + 0x98, 0xe2, 0x3f, 0x1a, 0xf4, 0x83, 0x3e, 0xdf, 0xad, 0x22, 0x74, 0x1a, 0x36, 0xd2, 0x0e, 0x41, + 0xe4, 0x8c, 0x3c, 0x8c, 0xc1, 0x62, 0x42, 0x09, 0xdf, 0x7d, 0xfb, 0x6d, 0xea, 0x56, 0x4a, 0xc9, + 0xdd, 0xf7, 0xb0, 0x4d, 0x5d, 0x14, 0x1c, 0xe2, 0x01, 0x58, 0xda, 0xd1, 0xa8, 0xc0, 0x08, 0xf1, + 0x55, 0xe4, 0xaf, 0xd4, 0xcf, 0x73, 0x4f, 0x20, 0xfa, 0x8d, 0x31, 0x15, 0xc6, 0xdf, 0xe5, 0xa0, + 0xcc, 0x0f, 0x47, 0xb8, 0xa1, 0x5f, 0x85, 0x42, 0x60, 0xfa, 0x2d, 0xe5, 0x40, 0x96, 0xa2, 0x53, + 0xbc, 0x23, 0xa8, 0xa8, 0xb8, 0xc4, 0x84, 0x7c, 0x60, 0xb2, 0xbd, 0xf0, 0xda, 0xfb, 0x95, 0xa1, + 0xfa, 0xa8, 0x4e, 0x65, 0x74, 0xe3, 0xf1, 0x5f, 0x0c, 0x25, 0x32, 0xb9, 0x0e, 0x45, 0x6e, 0xa6, + 0xd6, 0x4c, 0x26, 0xe3, 0xc1, 0x62, 0x7d, 0x8a, 0x9f, 0xc2, 0x35, 0x45, 0x43, 0xcd, 0x35, 0xde, + 0x87, 0xf3, 0xab, 0x1f, 0x52, 0xab, 0x1f, 0x78, 0xbe, 0x8c, 0x08, 0xc8, 0x1d, 0x20, 0x8c, 0xfa, + 0x8f, 0x1d, 0x8b, 0x2e, 0x59, 0x96, 0xd7, 0x77, 0x83, 0xad, 0xe8, 0xd4, 0xcf, 0x2b, 0x6d, 0xa4, + 0x31, 0x20, 0x81, 0x19, 0xad, 0x8c, 0xbf, 0x9a, 0x80, 0x72, 0x2c, 0xa6, 0xe4, 0xab, 0xe8, 0xd3, + 0x9e, 0x97, 0xb6, 0x21, 0x3c, 0x6a, 0x41, 0xc1, 0xe1, 0x36, 0xc4, 0xa7, 0x8f, 0x1d, 0xc6, 0x5d, + 0xcc, 0x94, 0x0d, 0x41, 0x45, 0x47, 0x2d, 0x41, 0xaa, 0x90, 0xb7, 0x69, 0x2f, 0x68, 0x8b, 0x41, + 0x4e, 0xd4, 0x4b, 0x7c, 0x22, 0x56, 0x38, 0x01, 0x25, 0x9d, 0x0b, 0x34, 0x69, 0x60, 0xb5, 0x2b, + 0x13, 0xe2, 0xdc, 0x09, 0x81, 0x35, 0x4e, 0x40, 0x49, 0xcf, 0xf0, 0xfe, 0xf3, 0xcf, 0xde, 0xfb, + 0x2f, 0x9c, 0xb1, 0xf7, 0x4f, 0x7a, 0x70, 0x91, 0xb1, 0xf6, 0xb6, 0xef, 0x3c, 0x36, 0x03, 0x2a, + 0x1a, 0x0b, 0x3d, 0x93, 0xa7, 0xd1, 0x73, 0xe5, 0xe8, 0xb0, 0x7a, 0xb1, 0xd1, 0xb8, 0x9d, 0x46, + 0xc1, 0x2c, 0x68, 0xd2, 0x80, 0x4b, 0x8e, 0xcb, 0xa8, 0xd5, 0xf7, 0xe9, 0x7a, 0xcb, 0xf5, 0x7c, + 0x7a, 0xdb, 0x63, 0x1c, 0x4e, 0x25, 0x52, 0x5e, 0x52, 0x8b, 0x76, 0x69, 0x3d, 0x4b, 0x08, 0xb3, + 0xdb, 0x1a, 0x3f, 0xca, 0xc1, 0x54, 0x3c, 0x8c, 0x26, 0x0c, 0xa0, 0xbd, 0xb2, 0xd6, 0x90, 0x3b, + 0x53, 0x79, 0x68, 0xef, 0x0e, 0x1d, 0x9d, 0x4b, 0x98, 0xc8, 0xc3, 0x8f, 0x68, 0x18, 0x53, 0x73, + 0x82, 0x3c, 0xdd, 0xcb, 0x90, 0x6f, 0x7a, 0xbe, 0x45, 0xd5, 0xd9, 0xd2, 0x67, 0x70, 0x8d, 0x13, + 0x51, 0xf2, 0x8c, 0x7f, 0xcb, 0x41, 0x4c, 0x03, 0xf9, 0x4d, 0x98, 0xe6, 0x3a, 0x36, 0xfc, 0xdd, + 0xc4, 0x68, 0xea, 0x43, 0x8f, 0x46, 0x23, 0xd5, 0x2f, 0x29, 0xfd, 0xd3, 0x09, 0x32, 0x26, 0xf5, + 0x91, 0x5f, 0x84, 0x92, 0x69, 0xdb, 0x3e, 0x65, 0x8c, 0x4a, 0xd3, 0x53, 0xaa, 0x4f, 0x8b, 0xbb, + 0x32, 0x24, 0x62, 0xc4, 0xe7, 0xc7, 0xb0, 0x6d, 0x37, 0x19, 0xdf, 0xd9, 0xca, 0xb1, 0xd4, 0xc7, + 0x90, 0x2b, 0xe1, 0x74, 0xd4, 0x12, 0xc6, 0x77, 0x27, 0x20, 0xa9, 0x9b, 0xd8, 0x30, 0xb3, 0xe7, + 0xef, 0x2e, 0x2f, 0x9b, 0x56, 0x7b, 0xa8, 0xa8, 0xfa, 0x22, 0x0f, 0xe7, 0x37, 0x92, 0x08, 0x98, + 0x86, 0x54, 0x5a, 0x36, 0xe8, 0x41, 0x60, 0xee, 0x0e, 0x13, 0x58, 0x87, 0x5a, 0xe2, 0x08, 0x98, + 0x86, 0xe4, 0x81, 0xef, 0x9e, 0xbf, 0x1b, 0x1e, 0xf2, 0x74, 0xe0, 0xbb, 0x11, 0xb1, 0x30, 0x2e, + 0xc7, 0xa7, 0x70, 0xcf, 0xdf, 0x45, 0x6a, 0x76, 0xc2, 0x94, 0xad, 0x9e, 0xc2, 0x0d, 0x45, 0x47, + 0x2d, 0x41, 0x7a, 0x40, 0xf6, 0xc2, 0xd9, 0xd3, 0xa9, 0x19, 0x65, 0x8b, 0xae, 0x67, 0x8d, 0x46, + 0x0b, 0xc5, 0x07, 0x74, 0x99, 0xdb, 0xe6, 0x8d, 0x01, 0x1c, 0xcc, 0xc0, 0x26, 0xdf, 0x82, 0x2b, + 0x7b, 0xfe, 0xae, 0x32, 0xe4, 0xdb, 0xbe, 0xe3, 0x5a, 0x4e, 0x2f, 0x91, 0xab, 0xad, 0xaa, 0xee, + 0x5e, 0xd9, 0xc8, 0x16, 0xc3, 0xe3, 0xda, 0x1b, 0xaf, 0xc3, 0x54, 0x3c, 0xd7, 0xf7, 0x05, 0xf9, + 0x21, 0xe3, 0x3f, 0x73, 0x50, 0x58, 0x77, 0x7b, 0xfd, 0x9f, 0x92, 0x67, 0x83, 0x3f, 0x9f, 0x80, + 0x09, 0xee, 0x7a, 0x91, 0xeb, 0x30, 0x11, 0x1c, 0xf4, 0xe4, 0xdd, 0x3a, 0x5e, 0x9f, 0x0b, 0x0d, + 0xcd, 0xce, 0x41, 0x8f, 0x3e, 0x51, 0xff, 0xa2, 0x90, 0x20, 0xef, 0x40, 0xc1, 0xed, 0x77, 0x1f, + 0x98, 0x1d, 0x65, 0x94, 0x5e, 0x0d, 0x5d, 0x8b, 0x2d, 0x41, 0x7d, 0x72, 0x58, 0x9d, 0xa3, 0xae, + 0xe5, 0xd9, 0x8e, 0xdb, 0x5a, 0x7c, 0xc4, 0x3c, 0xb7, 0xb6, 0xd5, 0xef, 0xee, 0x52, 0x1f, 0x55, + 0x2b, 0x1e, 0xd2, 0xed, 0x7a, 0x5e, 0x87, 0x03, 0x8c, 0x27, 0x43, 0xba, 0xba, 0x24, 0x63, 0xc8, + 0xe7, 0x5e, 0x0c, 0x0b, 0x7c, 0x2e, 0x39, 0x91, 0xf4, 0x62, 0x1a, 0x82, 0x8a, 0x8a, 0x4b, 0xba, + 0x50, 0xe8, 0x9a, 0x3d, 0x2e, 0x97, 0x17, 0x53, 0xb6, 0x3a, 0xb4, 0x7f, 0x5a, 0xdb, 0x14, 0x38, + 0xab, 0x6e, 0xe0, 0x1f, 0x44, 0xea, 0x24, 0x11, 0x95, 0x12, 0xe2, 0xc0, 0x64, 0xc7, 0x61, 0x01, + 0xd7, 0x57, 0x18, 0x61, 0x57, 0x70, 0x7d, 0x0f, 0xcc, 0x4e, 0x9f, 0x46, 0x33, 0x70, 0x57, 0xc2, + 0x62, 0x88, 0x3f, 0x7f, 0x00, 0xe5, 0x58, 0x8f, 0xc8, 0xac, 0xcc, 0x89, 0x8a, 0xcd, 0x2b, 0xd2, + 0xa0, 0x64, 0x07, 0xf2, 0x8f, 0x39, 0x86, 0x32, 0x36, 0x23, 0xf6, 0x04, 0x25, 0xd8, 0x5b, 0x63, + 0x6f, 0xe6, 0xde, 0x2a, 0x7e, 0xff, 0xcf, 0xaa, 0xe7, 0x3e, 0xfe, 0xe7, 0x6b, 0xe7, 0x8c, 0xbf, + 0x1f, 0x87, 0x92, 0x16, 0xf9, 0xc9, 0xde, 0x29, 0x7e, 0x6a, 0xa7, 0xdc, 0x19, 0x6d, 0xbe, 0x4e, + 0xb4, 0x5d, 0x96, 0x92, 0xdb, 0x65, 0xaa, 0xfe, 0xf3, 0xb1, 0xa5, 0x7e, 0x72, 0x58, 0xad, 0x24, + 0x27, 0x01, 0xcd, 0xfd, 0x4d, 0xca, 0x98, 0xd9, 0xa2, 0xd1, 0x36, 0xf8, 0xfa, 0x17, 0x6d, 0x83, + 0xb9, 0xf8, 0x36, 0x28, 0x65, 0x2f, 0xe3, 0xc7, 0xe3, 0x50, 0xdc, 0x0c, 0xf3, 0x5d, 0xbf, 0x9b, + 0x83, 0xb2, 0xe9, 0xba, 0x5e, 0x20, 0x32, 0xa3, 0xa1, 0x79, 0xdb, 0x1a, 0x6a, 0x3a, 0x42, 0xd0, + 0xda, 0x52, 0x04, 0x28, 0xa7, 0x44, 0xdf, 0x4c, 0x31, 0x0e, 0xc6, 0xf5, 0x92, 0x0f, 0xa0, 0xd0, + 0x31, 0x77, 0x69, 0x27, 0xb4, 0x76, 0xeb, 0xa3, 0xf5, 0xe0, 0xae, 0xc0, 0x4a, 0xad, 0x87, 0x24, + 0xa2, 0x52, 0x34, 0xff, 0x0e, 0xcc, 0xa6, 0x3b, 0x7a, 0x9a, 0x19, 0xe5, 0x8b, 0x11, 0x53, 0x73, + 0x9a, 0xa6, 0xc6, 0xff, 0x96, 0x00, 0xb6, 0x3c, 0x9b, 0xaa, 0x84, 0xcc, 0x3c, 0x8c, 0x39, 0xb6, + 0xba, 0x8a, 0x40, 0xf5, 0x76, 0x6c, 0x7d, 0x05, 0xc7, 0x1c, 0x5b, 0xa7, 0x38, 0xc6, 0x8e, 0x4d, + 0x71, 0x7c, 0x0d, 0xca, 0xb6, 0xc3, 0x7a, 0x1d, 0xf3, 0x60, 0x2b, 0xc3, 0x17, 0x58, 0x89, 0x58, + 0x18, 0x97, 0x23, 0xaf, 0xa9, 0xf3, 0x2b, 0x0f, 0x4a, 0x25, 0x75, 0x7e, 0x8b, 0xbc, 0x7b, 0xb1, + 0x33, 0xfc, 0x26, 0x4c, 0x85, 0x29, 0x04, 0xa1, 0x25, 0x2f, 0x5a, 0x85, 0xa7, 0x7e, 0x6a, 0x27, + 0xc6, 0xc3, 0x84, 0x64, 0x3a, 0xc5, 0x51, 0x78, 0x2e, 0x29, 0x8e, 0x15, 0x98, 0x65, 0x81, 0xe7, + 0x53, 0x3b, 0x94, 0x58, 0x5f, 0xa9, 0x90, 0xc4, 0x40, 0x67, 0x1b, 0x29, 0x3e, 0x0e, 0xb4, 0x20, + 0xdb, 0x30, 0x17, 0x76, 0x22, 0x3e, 0xc0, 0xca, 0x45, 0x81, 0x74, 0x55, 0x21, 0xcd, 0x3d, 0xcc, + 0x90, 0xc1, 0xcc, 0x96, 0xe4, 0x1b, 0x30, 0x1d, 0x76, 0xb3, 0x61, 0x79, 0x3d, 0x5a, 0x99, 0x13, + 0x50, 0xda, 0x5b, 0xde, 0x89, 0x33, 0x31, 0x29, 0x4b, 0xbe, 0x02, 0xf9, 0x5e, 0xdb, 0x64, 0x54, + 0x65, 0x44, 0xc2, 0xc0, 0x37, 0xbf, 0xcd, 0x89, 0x4f, 0x0e, 0xab, 0x25, 0xbe, 0x66, 0xe2, 0x07, + 0x4a, 0x41, 0x72, 0x03, 0x60, 0xd7, 0xeb, 0xbb, 0xb6, 0xe9, 0x1f, 0xac, 0xaf, 0x88, 0x30, 0x28, + 0xf6, 0xdc, 0x5d, 0xd7, 0x1c, 0x8c, 0x49, 0x71, 0x6b, 0xdb, 0x95, 0x76, 0x47, 0x25, 0x36, 0xb4, + 0xb5, 0xd5, 0xe6, 0x48, 0xf1, 0xc9, 0x7b, 0x50, 0x12, 0xe9, 0x52, 0x6a, 0x2f, 0x05, 0x2a, 0xbb, + 0x71, 0x9a, 0x9c, 0x9f, 0x76, 0x49, 0x1a, 0x21, 0x08, 0x46, 0x78, 0xe4, 0xdb, 0x00, 0x4d, 0xc7, + 0x75, 0x58, 0x5b, 0xa0, 0x97, 0x4f, 0x8d, 0xae, 0xc7, 0xb9, 0xa6, 0x51, 0x30, 0x86, 0xc8, 0x03, + 0xa6, 0x9e, 0x67, 0xaf, 0x6f, 0x57, 0xa6, 0xc4, 0x28, 0x75, 0xc0, 0xb4, 0xcd, 0x89, 0x28, 0x79, + 0xe4, 0x3a, 0x14, 0x6d, 0x93, 0x76, 0x3d, 0x97, 0xda, 0x95, 0xe9, 0x28, 0x69, 0xb1, 0xa2, 0x68, + 0xa8, 0xb9, 0xe4, 0x3b, 0x50, 0x70, 0x84, 0xbf, 0x58, 0x39, 0x2f, 0xba, 0xfa, 0x8d, 0xe1, 0x6e, + 0x14, 0x01, 0x51, 0x07, 0x6e, 0xae, 0xe4, 0xdf, 0xa8, 0x60, 0x89, 0x05, 0x93, 0x5e, 0x3f, 0x10, + 0x1a, 0x66, 0x84, 0x86, 0xe1, 0x92, 0x34, 0xf7, 0x24, 0x86, 0x2c, 0x3f, 0x50, 0x3f, 0x30, 0x44, + 0xe6, 0xe3, 0xb5, 0xda, 0x4e, 0xc7, 0xf6, 0xa9, 0x5b, 0x99, 0x15, 0xf1, 0x98, 0x18, 0xef, 0xb2, + 0xa2, 0xa1, 0xe6, 0x92, 0x5f, 0x86, 0x69, 0xaf, 0x1f, 0x88, 0x7d, 0xc3, 0xb7, 0x1d, 0xab, 0x5c, + 0x10, 0xe2, 0x17, 0xf8, 0x2e, 0xbe, 0x17, 0x67, 0x60, 0x52, 0xce, 0x38, 0x0f, 0x53, 0xf1, 0x9a, + 0x1d, 0xe3, 0x8f, 0xc7, 0x20, 0xec, 0xc7, 0x4f, 0x83, 0xab, 0x4d, 0x0c, 0x28, 0xf8, 0x94, 0xf5, + 0x3b, 0x81, 0xb2, 0xd4, 0x62, 0xad, 0x51, 0x50, 0x50, 0x71, 0x8c, 0x7d, 0x98, 0xe6, 0xbd, 0xed, + 0x74, 0x68, 0xa7, 0x11, 0xd0, 0x1e, 0x23, 0x4d, 0xc8, 0x33, 0xfe, 0x87, 0x9a, 0x93, 0x11, 0x5f, + 0x84, 0x02, 0xda, 0x8b, 0xf6, 0xbb, 0x50, 0x80, 0x12, 0xde, 0xf8, 0xde, 0x18, 0x94, 0xf4, 0x3c, + 0x9d, 0x20, 0xbd, 0xfe, 0x0a, 0x4c, 0xda, 0xb4, 0x69, 0xf2, 0xd1, 0xa8, 0x07, 0x7a, 0xbe, 0xad, + 0x56, 0x24, 0x09, 0x43, 0x1e, 0xa9, 0x86, 0x37, 0xa1, 0x1c, 0xb2, 0x48, 0x79, 0xc5, 0x1d, 0x4d, + 0xb2, 0x07, 0x25, 0xf1, 0xc7, 0x5a, 0x58, 0x4c, 0x34, 0xec, 0xba, 0x3f, 0x08, 0x51, 0x64, 0x22, + 0x41, 0xff, 0xc4, 0x08, 0x3f, 0x55, 0x04, 0x94, 0x3f, 0x49, 0x11, 0x90, 0xb1, 0x06, 0xdc, 0x30, + 0xdc, 0x5a, 0x26, 0x6f, 0x43, 0x91, 0xa9, 0xad, 0xab, 0xe6, 0xe5, 0x4b, 0xfa, 0x55, 0x4c, 0xd1, + 0x9f, 0x1c, 0x56, 0xa7, 0x85, 0x70, 0x48, 0x40, 0xdd, 0xc4, 0x58, 0x84, 0x72, 0xac, 0x68, 0x82, + 0xcf, 0xb0, 0x7e, 0xc8, 0x8c, 0xcd, 0xf0, 0x8a, 0x19, 0x98, 0x28, 0x38, 0xc6, 0x93, 0x31, 0x98, + 0x45, 0xca, 0xbc, 0xbe, 0x6f, 0xd1, 0x78, 0x5a, 0xd7, 0xb4, 0x62, 0x6f, 0xe9, 0x89, 0xc7, 0x19, + 0xcf, 0x45, 0xc5, 0xe5, 0xd7, 0x4d, 0x97, 0xfa, 0x2d, 0x7d, 0xd8, 0xd4, 0x22, 0xe9, 0xeb, 0x66, + 0x33, 0xce, 0xc4, 0xa4, 0x2c, 0x79, 0x0d, 0x8a, 0x5d, 0xd3, 0x75, 0x9a, 0x94, 0x05, 0xe9, 0x7c, + 0xcb, 0xa6, 0xa2, 0xa3, 0x96, 0x20, 0xb7, 0xe0, 0x02, 0xa3, 0xc1, 0xbd, 0x7d, 0x97, 0xfa, 0xfa, + 0xd1, 0x48, 0xbd, 0xd5, 0xbd, 0x10, 0xbe, 0xff, 0x35, 0xd2, 0x02, 0x38, 0xd8, 0x46, 0x5c, 0xdd, + 0xf2, 0x99, 0x6c, 0xd9, 0x73, 0x6d, 0x47, 0xd7, 0x8b, 0xc5, 0xaf, 0xee, 0x14, 0x1f, 0x07, 0x5a, + 0x70, 0x94, 0xa6, 0xe9, 0x74, 0xfa, 0x3e, 0x8d, 0x50, 0x0a, 0x49, 0x94, 0xb5, 0x14, 0x1f, 0x07, + 0x5a, 0x18, 0xff, 0x9a, 0x83, 0x69, 0xa4, 0x81, 0x7f, 0xa0, 0x27, 0xa5, 0x0a, 0xf9, 0x8e, 0x78, + 0x95, 0xcb, 0x89, 0x57, 0x39, 0xb1, 0x93, 0xe5, 0x23, 0x9c, 0xa4, 0x93, 0x15, 0x28, 0xfb, 0xbc, + 0x85, 0x7a, 0x01, 0x95, 0x13, 0x6e, 0x84, 0xde, 0x18, 0x46, 0xac, 0x27, 0xc9, 0x9f, 0x18, 0x6f, + 0x46, 0x5c, 0x98, 0xdc, 0x95, 0x95, 0x13, 0xea, 0x19, 0x6a, 0x38, 0x63, 0xaf, 0xaa, 0x2f, 0x44, + 0x0e, 0x26, 0x2c, 0xc5, 0x78, 0x12, 0xfd, 0x89, 0xa1, 0x12, 0xe3, 0xfb, 0x39, 0x80, 0xa8, 0x84, + 0x8b, 0xec, 0x41, 0x91, 0xdd, 0xac, 0xf7, 0xad, 0x3d, 0x9d, 0x23, 0x1b, 0xf2, 0x29, 0x45, 0x81, + 0xc4, 0x5e, 0x8e, 0x15, 0x05, 0xb5, 0x82, 0x2f, 0x2a, 0xf0, 0xf9, 0xeb, 0x71, 0xd0, 0xad, 0xf8, + 0x9e, 0xa4, 0xae, 0xdd, 0xf3, 0x1c, 0x37, 0x48, 0x97, 0x91, 0xac, 0x2a, 0x3a, 0x6a, 0x09, 0x7e, + 0x4c, 0x76, 0xe5, 0x20, 0xc6, 0x92, 0xc7, 0x44, 0xf5, 0x41, 0x71, 0xb9, 0x9c, 0x4f, 0x5b, 0x51, + 0x05, 0x89, 0x96, 0x43, 0x41, 0x45, 0xc5, 0xe5, 0xb7, 0x63, 0x98, 0x24, 0x56, 0x5b, 0x5b, 0xdc, + 0x8e, 0x61, 0x3e, 0x19, 0x35, 0x97, 0xb4, 0x61, 0xc6, 0x14, 0x3b, 0x32, 0x4a, 0x7c, 0x9f, 0x2a, + 0x87, 0x1f, 0x95, 0x0f, 0x25, 0x51, 0x30, 0x0d, 0xcb, 0x35, 0xb1, 0xa8, 0xf9, 0xe9, 0x53, 0xf9, + 0x5a, 0x53, 0x23, 0x89, 0x82, 0x69, 0x58, 0xee, 0x18, 0xfa, 0x5e, 0x87, 0x2e, 0xe1, 0x96, 0x72, + 0x40, 0xb5, 0x63, 0x88, 0x92, 0x8c, 0x21, 0xdf, 0xf8, 0xfd, 0x1c, 0x9c, 0x6f, 0x58, 0xbe, 0xd3, + 0x0b, 0xb4, 0xc9, 0xda, 0x12, 0x75, 0x5f, 0x81, 0xc9, 0x5d, 0x36, 0xb5, 0xa7, 0x5e, 0x3a, 0x26, + 0x87, 0x28, 0x85, 0x12, 0x65, 0x61, 0x92, 0x84, 0x11, 0x84, 0x88, 0xf4, 0x85, 0x51, 0x4c, 0xaf, + 0x6d, 0x43, 0x50, 0x51, 0x71, 0x8d, 0x1f, 0xe4, 0xa0, 0xa8, 0x5f, 0xec, 0x5e, 0x86, 0xbc, 0x78, + 0x08, 0x52, 0x7b, 0x47, 0xdf, 0x81, 0xcb, 0x9c, 0x88, 0x92, 0xc7, 0x85, 0x84, 0x17, 0xaa, 0x80, + 0x63, 0x17, 0xa5, 0xe9, 0x07, 0x28, 0x79, 0x7c, 0xd3, 0x52, 0xd7, 0x56, 0xfb, 0x45, 0x6f, 0xda, + 0x55, 0xd7, 0x46, 0x4e, 0x17, 0xe5, 0x42, 0x9e, 0xdf, 0x35, 0x83, 0x74, 0x1e, 0x62, 0x4d, 0x50, + 0x51, 0x71, 0x8d, 0x77, 0x61, 0x46, 0x15, 0x30, 0xe8, 0x89, 0x3a, 0x55, 0xa5, 0x94, 0x31, 0x0d, + 0xe5, 0x58, 0x7d, 0xb5, 0xf1, 0xdf, 0x57, 0x40, 0xbf, 0x6b, 0xff, 0xec, 0x75, 0x7c, 0xa8, 0xd0, + 0xd1, 0xd2, 0x8e, 0x7c, 0x7e, 0x74, 0x47, 0x5e, 0xaf, 0x7b, 0xca, 0x99, 0x6f, 0x45, 0xce, 0x7c, + 0xe1, 0x0c, 0x9c, 0x79, 0x7d, 0x12, 0x07, 0x1c, 0xfa, 0x3f, 0xc8, 0xc1, 0x94, 0xeb, 0xd9, 0x34, + 0x3c, 0xef, 0x95, 0x49, 0xe1, 0x40, 0xde, 0x1b, 0x69, 0x12, 0x6b, 0x5b, 0x31, 0x44, 0x99, 0x64, + 0xd1, 0x99, 0x80, 0x38, 0x0b, 0x13, 0xaa, 0xc9, 0x1a, 0x14, 0xcd, 0x26, 0x8f, 0xc0, 0x82, 0x03, + 0xf5, 0x40, 0x7f, 0x35, 0xcb, 0x02, 0x2c, 0x29, 0x19, 0x69, 0x5c, 0xc3, 0x5f, 0xa8, 0xdb, 0xf2, + 0xdb, 0x49, 0x57, 0x80, 0x95, 0x46, 0xb8, 0x9d, 0xc2, 0x6c, 0x51, 0xcc, 0xaf, 0x51, 0x94, 0x58, + 0x41, 0x98, 0x01, 0x05, 0x19, 0xe3, 0x89, 0x00, 0xb7, 0x28, 0xdd, 0x75, 0x19, 0xff, 0xa1, 0xe2, + 0x90, 0x56, 0xe8, 0x9d, 0x97, 0xc5, 0xe4, 0xd6, 0x87, 0x8e, 0x58, 0xb4, 0xc3, 0x9f, 0xed, 0x9e, + 0x93, 0x3b, 0x71, 0x23, 0x3a, 0x75, 0x12, 0x23, 0x3a, 0x7d, 0xac, 0x01, 0x6d, 0x41, 0x81, 0x09, + 0x13, 0x2d, 0x02, 0xdb, 0xf2, 0x8d, 0xe5, 0xe1, 0x6e, 0xf8, 0x84, 0x95, 0x97, 0xb3, 0x23, 0x69, + 0xa8, 0xe0, 0x89, 0x07, 0x45, 0x5f, 0x39, 0xb0, 0x2a, 0x36, 0x1e, 0x2e, 0x2f, 0x9f, 0xf6, 0x82, + 0xe5, 0xfe, 0x08, 0xa9, 0xa8, 0x95, 0x90, 0xf7, 0x60, 0xdc, 0x36, 0x5b, 0x2a, 0x4a, 0xfe, 0xe6, + 0xd0, 0xa5, 0x0c, 0xa1, 0x1a, 0x51, 0xd8, 0xbc, 0xb2, 0x74, 0x0b, 0x39, 0x2a, 0xd9, 0x8b, 0x2a, + 0xd1, 0x66, 0x47, 0xa8, 0x17, 0x4e, 0x59, 0x7d, 0x19, 0x37, 0x0d, 0xd4, 0xb2, 0xad, 0xc2, 0xe4, + 0x63, 0xaf, 0xd3, 0xef, 0xaa, 0xf0, 0xba, 0x7c, 0x63, 0x3e, 0x6b, 0xb5, 0x1f, 0x08, 0x91, 0xc8, + 0x08, 0xc8, 0xdf, 0x0c, 0xc3, 0xb6, 0xe4, 0xb7, 0x73, 0x70, 0x9e, 0x1f, 0x1d, 0xbd, 0x0f, 0x58, + 0x85, 0x8c, 0xb0, 0x53, 0xef, 0x33, 0xea, 0x47, 0x3b, 0xec, 0xb2, 0x52, 0x7b, 0x7e, 0x3d, 0xa1, + 0x01, 0x53, 0x1a, 0x49, 0x0f, 0x8a, 0xcc, 0xb1, 0xa9, 0x65, 0xfa, 0xac, 0x72, 0xf1, 0xcc, 0xb4, + 0x47, 0x8e, 0xa5, 0xc2, 0x46, 0xad, 0x85, 0xfc, 0x8e, 0xa8, 0xf1, 0x56, 0x5f, 0x39, 0xa8, 0x2f, + 0x4f, 0xe6, 0xce, 0xf2, 0xcb, 0x93, 0x8b, 0xb2, 0xc0, 0x3b, 0xa1, 0x01, 0xd3, 0x2a, 0xc9, 0x3d, + 0xb8, 0x24, 0x6b, 0xe5, 0xd2, 0xe5, 0x88, 0x97, 0xc4, 0xcb, 0xc9, 0x0b, 0x47, 0x87, 0xd5, 0x4b, + 0x4b, 0x59, 0x02, 0x98, 0xdd, 0x8e, 0x7c, 0x04, 0xd3, 0x7e, 0x3c, 0x28, 0xa9, 0x5c, 0x1e, 0xe1, + 0xd9, 0x3e, 0x11, 0xde, 0xc8, 0xf4, 0x4d, 0x82, 0x84, 0x49, 0x5d, 0xe4, 0x0d, 0x28, 0xf7, 0x94, + 0xa5, 0x72, 0x58, 0xb7, 0x72, 0x45, 0x8c, 0x41, 0xdc, 0xa8, 0xdb, 0x11, 0x19, 0xe3, 0x32, 0xe4, + 0x3e, 0x94, 0x03, 0xaf, 0x43, 0x7d, 0xf5, 0xc4, 0x50, 0x11, 0x8b, 0xbf, 0x90, 0xb5, 0x93, 0x77, + 0xb4, 0x58, 0x94, 0xc0, 0x8e, 0x68, 0x0c, 0xe3, 0x38, 0x3c, 0xb8, 0x0d, 0xab, 0x4f, 0x7d, 0x11, + 0xc9, 0xbf, 0x90, 0x0c, 0x6e, 0x1b, 0x71, 0x26, 0x26, 0x65, 0x79, 0xb8, 0xda, 0xf3, 0x1d, 0xcf, + 0x77, 0x82, 0x83, 0xe5, 0x8e, 0xc9, 0x98, 0x00, 0x98, 0x17, 0x00, 0x3a, 0x5c, 0xdd, 0x4e, 0x0b, + 0xe0, 0x60, 0x1b, 0x1e, 0x13, 0x84, 0xc4, 0xca, 0x8b, 0x22, 0x26, 0x14, 0x66, 0x29, 0x6c, 0x8b, + 0x9a, 0x7b, 0x4c, 0x11, 0xd3, 0xd5, 0x61, 0x8a, 0x98, 0x88, 0x0d, 0x57, 0xcd, 0x7e, 0xe0, 0x75, + 0x39, 0x21, 0xd9, 0x64, 0xc7, 0xdb, 0xa3, 0x6e, 0xe5, 0x9a, 0xb8, 0xab, 0xae, 0x1d, 0x1d, 0x56, + 0xaf, 0x2e, 0x3d, 0x45, 0x0e, 0x9f, 0x8a, 0x42, 0xba, 0x50, 0xa4, 0xaa, 0x10, 0xab, 0xf2, 0xa5, + 0x11, 0x2e, 0x89, 0x64, 0x35, 0x97, 0x9c, 0xa0, 0x90, 0x86, 0x5a, 0x05, 0xd9, 0x81, 0x72, 0xdb, + 0x63, 0xc1, 0x52, 0xc7, 0x31, 0x19, 0x65, 0x95, 0x97, 0xc4, 0x3e, 0xc9, 0xbc, 0xdf, 0x6e, 0x87, + 0x62, 0xd1, 0x36, 0xb9, 0x1d, 0xb5, 0xc4, 0x38, 0x0c, 0xa1, 0x22, 0x40, 0xea, 0x8b, 0x55, 0xf3, + 0xdc, 0x80, 0x7e, 0x18, 0x54, 0x16, 0xc4, 0x58, 0x5e, 0xcd, 0x42, 0xde, 0xf6, 0xec, 0x46, 0x52, + 0x5a, 0x9e, 0xf2, 0x14, 0x11, 0xd3, 0x98, 0xe4, 0x4d, 0x98, 0xea, 0x79, 0x76, 0xa3, 0x47, 0xad, + 0x6d, 0x33, 0xb0, 0xda, 0x95, 0x6a, 0xf2, 0x81, 0x64, 0x3b, 0xc6, 0xc3, 0x84, 0xe4, 0xfc, 0xbb, + 0x70, 0x61, 0xc0, 0x9f, 0x3a, 0xd5, 0x6b, 0xd2, 0x5f, 0xe4, 0x20, 0xee, 0xce, 0x9e, 0xb9, 0xdf, + 0x7f, 0x0b, 0x2e, 0xa8, 0x2f, 0x47, 0xf9, 0x65, 0xdb, 0xe9, 0xeb, 0x6f, 0x2d, 0x62, 0xa9, 0x1d, + 0x4c, 0x0b, 0xe0, 0x60, 0x1b, 0xe3, 0x2f, 0x73, 0x30, 0x9d, 0x30, 0xdf, 0x67, 0x1e, 0x15, 0xae, + 0x01, 0xe9, 0x3a, 0xbe, 0xef, 0xf9, 0xf2, 0x0e, 0xdc, 0xe4, 0x7b, 0x99, 0xa9, 0x4f, 0x36, 0x44, + 0x21, 0xca, 0xe6, 0x00, 0x17, 0x33, 0x5a, 0x18, 0x7f, 0x93, 0x83, 0x28, 0x77, 0xa8, 0xab, 0xaf, + 0x72, 0xc7, 0x56, 0x5f, 0xbd, 0x06, 0xc5, 0x47, 0xcc, 0x73, 0xb7, 0xa3, 0x1a, 0x2d, 0x3d, 0xa1, + 0x77, 0x1a, 0xf7, 0xb6, 0x84, 0xa4, 0x96, 0x10, 0xd2, 0x1f, 0xac, 0x39, 0x9d, 0x60, 0xb0, 0x92, + 0xe9, 0xce, 0xaf, 0x4a, 0x3a, 0x6a, 0x09, 0xb2, 0x08, 0x25, 0x9d, 0xae, 0x56, 0xe1, 0xa4, 0x9e, + 0x04, 0x9d, 0xab, 0xc5, 0x48, 0xc6, 0xf8, 0xe1, 0x18, 0x14, 0x9f, 0xe3, 0xf7, 0x27, 0x56, 0xe2, + 0xfb, 0x93, 0x33, 0xf8, 0x58, 0x21, 0xeb, 0xdb, 0x93, 0xbd, 0xd4, 0xb7, 0x27, 0xcb, 0x23, 0x66, + 0xc0, 0x9f, 0xfa, 0xdd, 0xc9, 0xa7, 0x39, 0x98, 0x7a, 0x8e, 0xdf, 0x9c, 0xec, 0x26, 0xbf, 0x39, + 0x79, 0x7b, 0xa4, 0xa1, 0x1d, 0xf3, 0xbd, 0xc9, 0xdf, 0x5e, 0x84, 0xc4, 0xb7, 0x1e, 0xc4, 0x85, + 0x52, 0x78, 0xc0, 0xc3, 0x57, 0x85, 0xb7, 0x47, 0x0a, 0x0a, 0xa3, 0x4d, 0x19, 0x52, 0x18, 0x46, + 0x2a, 0xc8, 0x0d, 0x00, 0xca, 0x2d, 0x9b, 0xcc, 0xdd, 0x8d, 0x25, 0x93, 0xee, 0xab, 0x9a, 0x83, + 0x31, 0xa9, 0xe7, 0x9f, 0x70, 0xc8, 0xbe, 0xa2, 0x27, 0x9e, 0xc9, 0x15, 0x7d, 0xf5, 0xcc, 0xaf, + 0xe8, 0x97, 0x9e, 0xfd, 0x15, 0x1d, 0x0b, 0x48, 0xf2, 0x23, 0x04, 0x24, 0x1f, 0xc1, 0x9c, 0xfc, + 0x73, 0xb9, 0x63, 0x3a, 0x5d, 0xbd, 0x5f, 0x54, 0x19, 0xd5, 0x97, 0x33, 0x2f, 0x66, 0xea, 0x33, + 0x87, 0x05, 0xd4, 0x0d, 0x1e, 0x44, 0x2d, 0xa3, 0x37, 0xf8, 0x07, 0x19, 0x70, 0x98, 0xa9, 0x24, + 0xed, 0xc1, 0x4e, 0x9e, 0xc0, 0x83, 0xfd, 0x41, 0x0e, 0x2e, 0x99, 0x59, 0x9f, 0xb3, 0xaa, 0x3c, + 0xc6, 0x9d, 0x91, 0xe2, 0x89, 0x04, 0xa2, 0x8a, 0x07, 0xb2, 0x58, 0x98, 0xdd, 0x07, 0xf2, 0x4a, + 0x14, 0x92, 0x96, 0xc4, 0xa6, 0xca, 0x0e, 0x26, 0xbf, 0x9b, 0x4e, 0x05, 0x81, 0x98, 0xed, 0xc6, + 0xc8, 0x06, 0xfb, 0x0c, 0xd2, 0x41, 0xe5, 0x11, 0xd2, 0x41, 0xa9, 0xf0, 0x62, 0xea, 0x8c, 0xc2, + 0x0b, 0x17, 0x66, 0x9d, 0xae, 0xd9, 0xa2, 0xdb, 0xfd, 0x4e, 0x47, 0x66, 0xc0, 0x59, 0x65, 0x5a, + 0x60, 0x67, 0xd6, 0xbe, 0xf2, 0x70, 0xaf, 0x93, 0xfe, 0x68, 0x4a, 0xbf, 0x35, 0xad, 0xa7, 0x90, + 0x70, 0x00, 0x9b, 0x6f, 0x4b, 0xee, 0xb6, 0x6e, 0xd1, 0x80, 0xcf, 0xb6, 0xc8, 0x94, 0xa8, 0xcf, + 0xf6, 0x6f, 0x47, 0x64, 0x8c, 0xcb, 0x90, 0x0d, 0x28, 0xd9, 0x2e, 0x53, 0x2f, 0x4d, 0x33, 0xc2, + 0x4a, 0xbd, 0xce, 0x6d, 0xdb, 0xca, 0x56, 0x43, 0xbf, 0x31, 0x5d, 0x1d, 0xfc, 0x7f, 0x49, 0x6a, + 0x9a, 0x8f, 0x51, 0x7b, 0xb2, 0x29, 0xc0, 0x54, 0x21, 0xb8, 0x4c, 0x6d, 0x5c, 0x3b, 0xc6, 0x43, + 0x5e, 0xd9, 0x0a, 0xeb, 0xd6, 0xa7, 0x95, 0x3a, 0x55, 0xde, 0x1d, 0x21, 0x90, 0x57, 0xa1, 0xe0, + 0xb9, 0xab, 0x1f, 0x3a, 0x41, 0xe5, 0x42, 0x32, 0x03, 0x7e, 0x4f, 0x50, 0x51, 0x71, 0xc9, 0x7d, + 0xb8, 0x12, 0x04, 0x1d, 0x15, 0xda, 0x2e, 0x35, 0x03, 0xea, 0x87, 0xf5, 0x1a, 0xa2, 0x60, 0x27, + 0x2f, 0x3f, 0xd7, 0xdb, 0xd9, 0xb9, 0x9b, 0x25, 0x82, 0xc7, 0xb5, 0x3d, 0x3e, 0xe8, 0xbe, 0x38, + 0x64, 0xd0, 0x1d, 0x8f, 0xf3, 0xe6, 0x9e, 0x1a, 0xe7, 0x0d, 0xc4, 0xa5, 0x97, 0x4e, 0x11, 0x97, + 0xbe, 0x27, 0xaa, 0x52, 0x6e, 0x2d, 0xab, 0x98, 0xfe, 0xad, 0xe1, 0x52, 0x89, 0x1c, 0x41, 0xbe, + 0x4d, 0x8a, 0x3f, 0x51, 0x62, 0x92, 0x6d, 0x98, 0xeb, 0x79, 0xf6, 0x40, 0x58, 0x2b, 0x82, 0xf8, + 0x58, 0x3d, 0xd3, 0x76, 0x86, 0x0c, 0x66, 0xb6, 0x14, 0xb6, 0x34, 0xa2, 0x57, 0x2a, 0x62, 0x62, + 0xa4, 0x2d, 0x8d, 0xc8, 0x18, 0x97, 0x49, 0x47, 0x79, 0x2f, 0x3c, 0xb3, 0x28, 0x6f, 0xfe, 0x39, + 0x44, 0x79, 0x2f, 0x3e, 0xbf, 0x28, 0xef, 0xb3, 0x22, 0x9c, 0x4f, 0x7d, 0xc8, 0xa9, 0x0b, 0xc2, + 0x72, 0x27, 0x2d, 0x08, 0x4b, 0x54, 0x6c, 0x8d, 0x3d, 0xd3, 0x8a, 0xad, 0xf1, 0x33, 0xaf, 0xd8, + 0x8a, 0x55, 0xa6, 0x4d, 0x7c, 0x41, 0x65, 0xda, 0x12, 0xcc, 0x58, 0x5e, 0xb7, 0x27, 0xbe, 0x1c, + 0x51, 0xf5, 0x49, 0xb2, 0x86, 0x40, 0x3f, 0x77, 0x2e, 0x27, 0xd9, 0x98, 0x96, 0x27, 0x0c, 0xf2, + 0xae, 0x68, 0x58, 0x18, 0xa1, 0x24, 0x36, 0xb9, 0x60, 0xe2, 0xa2, 0x54, 0x55, 0xa9, 0xda, 0x4d, + 0x97, 0xea, 0xa5, 0x2e, 0xee, 0x68, 0xcc, 0x24, 0xcb, 0x10, 0x59, 0xa5, 0x24, 0xf4, 0xff, 0xda, + 0x59, 0xe8, 0x4f, 0xd6, 0x3c, 0xaa, 0x9e, 0x44, 0x2f, 0xc0, 0x49, 0x2e, 0xa6, 0x7b, 0x42, 0x7c, + 0xb8, 0xdc, 0xcb, 0x72, 0xc3, 0x98, 0x7a, 0x55, 0x7a, 0x9a, 0x33, 0xb8, 0xa0, 0xb4, 0x5c, 0xce, + 0x74, 0xe4, 0x18, 0x1e, 0x83, 0x1c, 0x2f, 0x7b, 0x2b, 0x3e, 0xab, 0xb2, 0xb7, 0xf9, 0x03, 0x59, + 0x8e, 0x7b, 0x6c, 0x25, 0xef, 0xfd, 0x64, 0x75, 0xfd, 0xbb, 0x43, 0xfe, 0x4f, 0x55, 0x61, 0xc1, + 0x6f, 0xbc, 0x8a, 0xf8, 0xb7, 0x72, 0x30, 0x97, 0xb5, 0x2c, 0x19, 0xbd, 0x68, 0x24, 0x7b, 0x31, + 0x5a, 0xb8, 0x16, 0x37, 0x2d, 0xff, 0x9e, 0x8f, 0x05, 0x87, 0x01, 0xed, 0xfd, 0xec, 0xe5, 0x78, + 0xa8, 0x97, 0xe3, 0xc4, 0x17, 0xd2, 0xf9, 0xe7, 0xf8, 0x85, 0x74, 0x61, 0x88, 0x2f, 0xa4, 0x27, + 0x9f, 0xe7, 0x17, 0xd2, 0xc5, 0x13, 0x7e, 0x21, 0x5d, 0x7a, 0xf6, 0x5f, 0x48, 0x7f, 0x9e, 0x83, + 0xd9, 0x74, 0xc1, 0xf6, 0x73, 0x48, 0x92, 0xed, 0x25, 0x92, 0x64, 0xeb, 0x23, 0x19, 0x73, 0x5d, + 0x24, 0x7e, 0x4c, 0xb2, 0xcc, 0xf8, 0x71, 0x0e, 0x06, 0x8a, 0xd2, 0x9f, 0x43, 0x1e, 0xeb, 0x51, + 0x32, 0x8f, 0xb5, 0x7a, 0x26, 0x83, 0x3c, 0x26, 0x9f, 0xf5, 0x3f, 0x19, 0x43, 0xfc, 0x7f, 0xc9, + 0x6b, 0x25, 0x4c, 0xdb, 0xd8, 0xb3, 0x37, 0x6d, 0xf5, 0xda, 0x27, 0x9f, 0x2f, 0x9c, 0xfb, 0xf4, + 0xf3, 0x85, 0x73, 0x9f, 0x7d, 0xbe, 0x70, 0xee, 0xe3, 0xa3, 0x85, 0xdc, 0x27, 0x47, 0x0b, 0xb9, + 0x4f, 0x8f, 0x16, 0x72, 0x9f, 0x1d, 0x2d, 0xe4, 0x7e, 0x7c, 0xb4, 0x90, 0xfb, 0xa3, 0x7f, 0x59, + 0x38, 0xf7, 0xeb, 0xc5, 0x10, 0xf7, 0xff, 0x02, 0x00, 0x00, 0xff, 0xff, 0x9d, 0x04, 0x18, 0x25, + 0x42, 0x53, 0x00, 0x00, } func (m *ArchiveStrategy) Marshal() (dAtA []byte, err error) { @@ -2465,6 +2469,16 @@ func (m *CronWorkflowSpec) MarshalToSizedBuffer(dAtA []byte) (int, error) { _ = i var l int _ = l + if m.FailedJobsHistoryLimit != nil { + i = encodeVarintGenerated(dAtA, i, uint64(*m.FailedJobsHistoryLimit)) + i-- + dAtA[i] = 0x38 + } + if m.SuccessfulJobsHistoryLimit != nil { + i = encodeVarintGenerated(dAtA, i, uint64(*m.SuccessfulJobsHistoryLimit)) + i-- + dAtA[i] = 0x30 + } if m.StartingDeadlineSeconds != nil { i = encodeVarintGenerated(dAtA, i, uint64(*m.StartingDeadlineSeconds)) i-- @@ -5642,6 +5656,12 @@ func (m *CronWorkflowSpec) Size() (n int) { if m.StartingDeadlineSeconds != nil { n += 1 + sovGenerated(uint64(*m.StartingDeadlineSeconds)) } + if m.SuccessfulJobsHistoryLimit != nil { + n += 1 + sovGenerated(uint64(*m.SuccessfulJobsHistoryLimit)) + } + if m.FailedJobsHistoryLimit != nil { + n += 1 + sovGenerated(uint64(*m.FailedJobsHistoryLimit)) + } return n } @@ -6858,6 +6878,8 @@ func (this *CronWorkflowSpec) String() string { `ConcurrencyPolicy:` + fmt.Sprintf("%v", this.ConcurrencyPolicy) + `,`, `Suspend:` + fmt.Sprintf("%v", this.Suspend) + `,`, `StartingDeadlineSeconds:` + valueToStringGenerated(this.StartingDeadlineSeconds) + `,`, + `SuccessfulJobsHistoryLimit:` + valueToStringGenerated(this.SuccessfulJobsHistoryLimit) + `,`, + `FailedJobsHistoryLimit:` + valueToStringGenerated(this.FailedJobsHistoryLimit) + `,`, `}`, }, "") return s @@ -9447,6 +9469,46 @@ func (m *CronWorkflowSpec) Unmarshal(dAtA []byte) error { } } m.StartingDeadlineSeconds = &v + case 6: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field SuccessfulJobsHistoryLimit", wireType) + } + var v int32 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + v |= int32(b&0x7F) << shift + if b < 0x80 { + break + } + } + m.SuccessfulJobsHistoryLimit = &v + case 7: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field FailedJobsHistoryLimit", wireType) + } + var v int32 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + v |= int32(b&0x7F) << shift + if b < 0x80 { + break + } + } + m.FailedJobsHistoryLimit = &v default: iNdEx = preIndex skippy, err := skipGenerated(dAtA[iNdEx:]) diff --git a/pkg/apis/workflow/v1alpha1/generated.proto b/pkg/apis/workflow/v1alpha1/generated.proto index 473f1f6e46e7..e09c1539f1f4 100644 --- a/pkg/apis/workflow/v1alpha1/generated.proto +++ b/pkg/apis/workflow/v1alpha1/generated.proto @@ -166,6 +166,12 @@ message CronWorkflowSpec { // StartingDeadlineSeconds is the K8s-style deadline that will limit the time a CronWorkflow will be run after its // original scheduled time if it is missed. optional int64 startingDeadlineSeconds = 5; + + // SuccessfulJobsHistoryLimit is the number of successful jobs to be kept at a time + optional int32 successfulJobsHistoryLimit = 6; + + // FailedJobsHistoryLimit is the number of successful jobs to be kept at a time + optional int32 failedJobsHistoryLimit = 7; } message CronWorkflowStatus { diff --git a/pkg/apis/workflow/v1alpha1/openapi_generated.go b/pkg/apis/workflow/v1alpha1/openapi_generated.go index dc17ce85d830..d379ea3a0ad3 100644 --- a/pkg/apis/workflow/v1alpha1/openapi_generated.go +++ b/pkg/apis/workflow/v1alpha1/openapi_generated.go @@ -584,6 +584,20 @@ func schema_pkg_apis_workflow_v1alpha1_CronWorkflowSpec(ref common.ReferenceCall Format: "int64", }, }, + "successfulJobsHistoryLimit": { + SchemaProps: spec.SchemaProps{ + Description: "SuccessfulJobsHistoryLimit is the number of successful jobs to be kept at a time", + Type: []string{"integer"}, + Format: "int32", + }, + }, + "failedJobsHistoryLimit": { + SchemaProps: spec.SchemaProps{ + Description: "FailedJobsHistoryLimit is the number of successful jobs to be kept at a time", + Type: []string{"integer"}, + Format: "int32", + }, + }, }, Required: []string{"schedule"}, }, diff --git a/pkg/apis/workflow/v1alpha1/zz_generated.deepcopy.go b/pkg/apis/workflow/v1alpha1/zz_generated.deepcopy.go index 5fa9d6ae68d5..4a9276fa1d7d 100644 --- a/pkg/apis/workflow/v1alpha1/zz_generated.deepcopy.go +++ b/pkg/apis/workflow/v1alpha1/zz_generated.deepcopy.go @@ -306,6 +306,16 @@ func (in *CronWorkflowSpec) DeepCopyInto(out *CronWorkflowSpec) { *out = new(int64) **out = **in } + if in.SuccessfulJobsHistoryLimit != nil { + in, out := &in.SuccessfulJobsHistoryLimit, &out.SuccessfulJobsHistoryLimit + *out = new(int32) + **out = **in + } + if in.FailedJobsHistoryLimit != nil { + in, out := &in.FailedJobsHistoryLimit, &out.FailedJobsHistoryLimit + *out = new(int32) + **out = **in + } return } diff --git a/workflow/common/common.go b/workflow/common/common.go index 69f1350a7ae0..44af2c8944ae 100644 --- a/workflow/common/common.go +++ b/workflow/common/common.go @@ -57,7 +57,7 @@ const ( LabelKeyWorkflow = workflow.WorkflowFullName + "/workflow" // LabelKeyPhase is a label applied to workflows to indicate the current phase of the workflow (for filtering purposes) LabelKeyPhase = workflow.WorkflowFullName + "/phase" - // LabelKeyPhase is a label applied to workflows to indicate the current phase of the workflow (for filtering purposes) + // LabelCronWorkflow is a label applied to Workflows that are started by a CronWorkflow LabelCronWorkflow = workflow.WorkflowFullName + "/cron-workflow" // ExecutorArtifactBaseDir is the base directory in the init container in which artifacts will be copied to. diff --git a/workflow/cron/controller.go b/workflow/cron/controller.go index 0b8f0c831905..6c052718d658 100644 --- a/workflow/cron/controller.go +++ b/workflow/cron/controller.go @@ -112,8 +112,6 @@ func (cc *Controller) processNextCronItem() bool { return true } - // The workflow informer receives unstructured objects to deal with the possibility of invalid - // workflow manifests that are unable to unmarshal to workflow objects cronWf, ok := obj.(*v1alpha1.CronWorkflow) if !ok { log.Warnf("Key '%s' in index is not a CronWorkflow", key) @@ -207,6 +205,8 @@ func (cc *Controller) processNextWorkflowItem() bool { log.Warnf("Workflow '%s' from CronWorkflow '%s' completed", wf.Name, woc.cronWf.Name) woc.removeActiveWf(wf) } + + woc.enforceHistoryLimit() return true } diff --git a/workflow/cron/operator.go b/workflow/cron/operator.go index 4ea62f614a0a..0758044ba712 100644 --- a/workflow/cron/operator.go +++ b/workflow/cron/operator.go @@ -11,6 +11,7 @@ import ( "github.com/robfig/cron" v12 "k8s.io/api/core/v1" v1 "k8s.io/apimachinery/pkg/apis/meta/v1" + "sort" "time" ) @@ -172,3 +173,76 @@ func (woc *cronWfOperationCtx) removeActiveWf(wf *v1alpha1.Workflow) { } } } + +func (woc *cronWfOperationCtx) enforceHistoryLimit() { + listOptions := &v1.ListOptions{} + wfInformerListOptionsFunc(listOptions) + wfList, err := woc.wfClient.List(*listOptions) + if err != nil { + log.Errorf("Unable to enforce history limit for CronWorkflow '%s': %s", woc.cronWf.Name, err) + return + } + + var successfulWorkflows []v1alpha1.Workflow + var failedWorkflows []v1alpha1.Workflow + + for _, wf := range wfList.Items { + if wf.Status.Completed() { + if wf.Status.Successful() { + successfulWorkflows = append(successfulWorkflows, wf) + } else { + failedWorkflows = append(failedWorkflows, wf) + } + } + } + + workflowsToKeep := int32(3) + if woc.cronWf.Spec.SuccessfulJobsHistoryLimit != nil && *woc.cronWf.Spec.SuccessfulJobsHistoryLimit >= 0 { + workflowsToKeep = *woc.cronWf.Spec.SuccessfulJobsHistoryLimit + } + err = woc.deleteOldestWorkflows(successfulWorkflows, int(workflowsToKeep)) + if err != nil { + log.Errorf("Unable to delete Successful Workflows of CronWorkflow '%s': %s", woc.cronWf.Name, err) + return + } + + workflowsToKeep = int32(1) + if woc.cronWf.Spec.FailedJobsHistoryLimit != nil && *woc.cronWf.Spec.FailedJobsHistoryLimit >= 0 { + workflowsToKeep = *woc.cronWf.Spec.SuccessfulJobsHistoryLimit + } + err = woc.deleteOldestWorkflows(successfulWorkflows, int(workflowsToKeep)) + if err != nil { + log.Errorf("Unable to delete Failed Workflows of CronWorkflow '%s': %s", woc.cronWf.Name, err) + return + } + +} + +type newestFirst []v1alpha1.Workflow + +func (n newestFirst) Len() int { + return len(n) +} + +func (n newestFirst) Swap(i, j int) { + n[i], n[j] = n[j], n[i] +} + +func (n newestFirst) Less(i, j int) bool { + return n[i].Status.FinishedAt.Time.Before(n[j].Status.FinishedAt.Time) +} + +func (woc *cronWfOperationCtx) deleteOldestWorkflows(jobList []v1alpha1.Workflow, workflowsToKeep int) error { + if workflowsToKeep >= len(jobList) { + return nil + } + + sort.Sort(newestFirst(jobList)) + for _, wf := range jobList[workflowsToKeep:] { + err := woc.wfClient.Delete(wf.Name, &v1.DeleteOptions{}) + if err != nil { + return fmt.Errorf("error deleting workflow '%s': %e", wf.Name, err) + } + } + return nil +} From e89b4bbac82baea18fc539e2b0559393bc44534d Mon Sep 17 00:00:00 2001 From: Simon Behar Date: Wed, 11 Dec 2019 08:21:06 -0800 Subject: [PATCH 30/44] {successful,failed}JobsHistoryLimit --- cmd/argo/commands/cron/common.go | 20 +++++++++++++++++++- cmd/argo/commands/cron/create.go | 4 +++- cmd/argo/commands/cron/lint.go | 6 +++--- workflow/cron/operator.go | 29 +++++++++-------------------- workflow/validate/lint.go | 8 ++++---- workflow/validate/validate.go | 12 ++++-------- 6 files changed, 42 insertions(+), 37 deletions(-) diff --git a/cmd/argo/commands/cron/common.go b/cmd/argo/commands/cron/common.go index 36fc4b6f6d16..943baaa6d8fe 100644 --- a/cmd/argo/commands/cron/common.go +++ b/cmd/argo/commands/cron/common.go @@ -1,9 +1,11 @@ package cron import ( + wfv1 "github.com/argoproj/argo/pkg/apis/workflow/v1alpha1" + "github.com/argoproj/argo/workflow/templateresolution" "log" - versioned "github.com/argoproj/argo/pkg/client/clientset/versioned" + "github.com/argoproj/argo/pkg/client/clientset/versioned" "github.com/argoproj/argo/pkg/client/clientset/versioned/typed/workflow/v1alpha1" "k8s.io/client-go/kubernetes" "k8s.io/client-go/rest" @@ -17,6 +19,7 @@ var ( clientset *kubernetes.Clientset wfClientset *versioned.Clientset cronWfClient v1alpha1.CronWorkflowInterface + wftmplClient v1alpha1.WorkflowTemplateInterface namespace string ) @@ -55,5 +58,20 @@ func InitCronWorkflowClient(ns ...string) v1alpha1.CronWorkflowInterface { } wfClientset = versioned.NewForConfigOrDie(restConfig) cronWfClient = wfClientset.ArgoprojV1alpha1().CronWorkflows(namespace) + wftmplClient = wfClientset.ArgoprojV1alpha1().WorkflowTemplates(namespace) return cronWfClient } + +// LazyWorkflowTemplateGetter is a wrapper of v1alpha1.WorkflowTemplateInterface which +// supports lazy initialization. +type LazyWorkflowTemplateGetter struct{} + +// Get initializes it just before it's actually used and returns a retrieved workflow template. +func (c LazyWorkflowTemplateGetter) Get(name string) (*wfv1.WorkflowTemplate, error) { + if wftmplClient == nil { + _ = InitCronWorkflowClient() + } + return templateresolution.WrapWorkflowTemplateInterface(wftmplClient).Get(name) +} + +var _ templateresolution.WorkflowTemplateNamespacedGetter = &LazyWorkflowTemplateGetter{} diff --git a/cmd/argo/commands/cron/create.go b/cmd/argo/commands/cron/create.go index 0269166ae71a..029ef734e763 100644 --- a/cmd/argo/commands/cron/create.go +++ b/cmd/argo/commands/cron/create.go @@ -1,6 +1,7 @@ package cron import ( + "github.com/argoproj/argo/workflow/templateresolution" "log" "os" @@ -62,7 +63,8 @@ func CreateCronWorkflows(filePaths []string, cliOpts *cliCreateOpts) { } for _, cronWf := range cronWorkflows { - err := validate.ValidateCronWorkflow(wfClientset, namespace, &cronWf) + wftmplGetter := templateresolution.WrapWorkflowTemplateInterface(wftmplClient) + err := validate.ValidateCronWorkflow(wftmplGetter, &cronWf) if err != nil { log.Fatalf("Failed to validate cron workflow: %v", err) } diff --git a/cmd/argo/commands/cron/lint.go b/cmd/argo/commands/cron/lint.go index 1b3ab850336d..c68a79192f4e 100644 --- a/cmd/argo/commands/cron/lint.go +++ b/cmd/argo/commands/cron/lint.go @@ -29,7 +29,7 @@ func NewLintCommand() *cobra.Command { log.Fatal(err) } - _ = InitCronWorkflowClient() + wftmplGetter := &LazyWorkflowTemplateGetter{} validateDir := cmdutil.MustIsDir(args[0]) if validateDir { if len(args) > 1 { @@ -37,7 +37,7 @@ func NewLintCommand() *cobra.Command { os.Exit(1) } fmt.Printf("Verifying all cron workflow manifests in directory: %s\n", args[0]) - err = validate.LintCronWorkflowDir(wfClientset, namespace, args[0], strict) + err = validate.LintCronWorkflowDir(wftmplGetter, namespace, args[0], strict) } else { yamlFiles := make([]string, 0) for _, filePath := range args { @@ -48,7 +48,7 @@ func NewLintCommand() *cobra.Command { yamlFiles = append(yamlFiles, filePath) } for _, yamlFile := range yamlFiles { - err = validate.LintCronWorkflowFile(wfClientset, namespace, yamlFile, strict) + err = validate.LintCronWorkflowFile(wftmplGetter, namespace, yamlFile, strict) if err != nil { break } diff --git a/workflow/cron/operator.go b/workflow/cron/operator.go index 0758044ba712..6f235fd0af0f 100644 --- a/workflow/cron/operator.go +++ b/workflow/cron/operator.go @@ -63,8 +63,6 @@ func (woc *cronWfOperationCtx) Run() { if err != nil { log.Error(err) } - - log.Infof("Created %s", woc.cronWf.ObjectMeta.Name) } func getWorkflowObjectReference(wf *v1alpha1.Workflow, runWf *v1alpha1.Workflow) v12.ObjectReference { @@ -175,6 +173,8 @@ func (woc *cronWfOperationCtx) removeActiveWf(wf *v1alpha1.Workflow) { } func (woc *cronWfOperationCtx) enforceHistoryLimit() { + log.Infof("Enforcing history limit for '%s'", woc.cronWf.Name) + listOptions := &v1.ListOptions{} wfInformerListOptionsFunc(listOptions) wfList, err := woc.wfClient.List(*listOptions) @@ -185,7 +185,6 @@ func (woc *cronWfOperationCtx) enforceHistoryLimit() { var successfulWorkflows []v1alpha1.Workflow var failedWorkflows []v1alpha1.Workflow - for _, wf := range wfList.Items { if wf.Status.Completed() { if wf.Status.Successful() { @@ -208,9 +207,9 @@ func (woc *cronWfOperationCtx) enforceHistoryLimit() { workflowsToKeep = int32(1) if woc.cronWf.Spec.FailedJobsHistoryLimit != nil && *woc.cronWf.Spec.FailedJobsHistoryLimit >= 0 { - workflowsToKeep = *woc.cronWf.Spec.SuccessfulJobsHistoryLimit + workflowsToKeep = *woc.cronWf.Spec.FailedJobsHistoryLimit } - err = woc.deleteOldestWorkflows(successfulWorkflows, int(workflowsToKeep)) + err = woc.deleteOldestWorkflows(failedWorkflows, int(workflowsToKeep)) if err != nil { log.Errorf("Unable to delete Failed Workflows of CronWorkflow '%s': %s", woc.cronWf.Name, err) return @@ -218,31 +217,21 @@ func (woc *cronWfOperationCtx) enforceHistoryLimit() { } -type newestFirst []v1alpha1.Workflow - -func (n newestFirst) Len() int { - return len(n) -} - -func (n newestFirst) Swap(i, j int) { - n[i], n[j] = n[j], n[i] -} - -func (n newestFirst) Less(i, j int) bool { - return n[i].Status.FinishedAt.Time.Before(n[j].Status.FinishedAt.Time) -} - func (woc *cronWfOperationCtx) deleteOldestWorkflows(jobList []v1alpha1.Workflow, workflowsToKeep int) error { if workflowsToKeep >= len(jobList) { return nil } - sort.Sort(newestFirst(jobList)) + sort.SliceStable(jobList, func(i, j int) bool { + return jobList[i].Status.FinishedAt.Time.After(jobList[j].Status.FinishedAt.Time) + }) + for _, wf := range jobList[workflowsToKeep:] { err := woc.wfClient.Delete(wf.Name, &v1.DeleteOptions{}) if err != nil { return fmt.Errorf("error deleting workflow '%s': %e", wf.Name, err) } + log.Infof("Deleted Workflow '%s' due to CronWorkflow '%s' history limit", wf.Name, woc.cronWf.Name) } return nil } diff --git a/workflow/validate/lint.go b/workflow/validate/lint.go index 1ba987f57629..7ad25b93be6b 100644 --- a/workflow/validate/lint.go +++ b/workflow/validate/lint.go @@ -127,7 +127,7 @@ func LintWorkflowTemplateFile(wftmplGetter templateresolution.WorkflowTemplateNa } // LintCronWorkflowDir validates all cron workflow manifests in a directory. Ignores non-workflow template manifests -func LintCronWorkflowDir(wfClientset wfclientset.Interface, namespace, dirPath string, strict bool) error { +func LintCronWorkflowDir(wftmplGetter templateresolution.WorkflowTemplateNamespacedGetter, namespace, dirPath string, strict bool) error { walkFunc := func(path string, info os.FileInfo, err error) error { if info == nil || info.IsDir() { return nil @@ -138,14 +138,14 @@ func LintCronWorkflowDir(wfClientset wfclientset.Interface, namespace, dirPath s default: return nil } - return LintCronWorkflowFile(wfClientset, namespace, path, strict) + return LintCronWorkflowFile(wftmplGetter, namespace, path, strict) } return filepath.Walk(dirPath, walkFunc) } // LintCronWorkflowFile lints a json file, or multiple cron workflow manifest in a single yaml file. Ignores // non-cron workflow manifests -func LintCronWorkflowFile(wfClientset wfclientset.Interface, namespace, filePath string, strict bool) error { +func LintCronWorkflowFile(wftmplGetter templateresolution.WorkflowTemplateNamespacedGetter, namespace, filePath string, strict bool) error { body, err := ioutil.ReadFile(filePath) if err != nil { return errors.Errorf(errors.CodeBadRequest, "Can't read from file: %s, err: %v", filePath, err) @@ -174,7 +174,7 @@ func LintCronWorkflowFile(wfClientset wfclientset.Interface, namespace, filePath return errors.Errorf(errors.CodeBadRequest, "%s failed to parse: %v", filePath, err) } for _, cronWf := range cronWorkflows { - err = ValidateCronWorkflow(wfClientset, namespace, &cronWf) + err = ValidateCronWorkflow(wftmplGetter, &cronWf) if err != nil { return errors.Errorf(errors.CodeBadRequest, "%s: %s", filePath, err.Error()) } diff --git a/workflow/validate/validate.go b/workflow/validate/validate.go index 2a8b138883bc..21b35b2e7291 100644 --- a/workflow/validate/validate.go +++ b/workflow/validate/validate.go @@ -174,11 +174,7 @@ func ValidateWorkflowTemplate(wftmplGetter templateresolution.WorkflowTemplateNa } // ValidateCronWorkflow validates a CronWorkflow -func ValidateCronWorkflow(wfClientset wfclientset.Interface, namespace string, cronWf *wfv1.CronWorkflow) error { - if cronWf.Namespace != "" { - namespace = cronWf.Namespace - } - +func ValidateCronWorkflow(wftmplGetter templateresolution.WorkflowTemplateNamespacedGetter, cronWf *wfv1.CronWorkflow) error { if _, err := cron.ParseStandard(cronWf.Spec.Schedule); err != nil { return errors.Errorf(errors.CodeBadRequest, "cron schedule is malformed: %s", err) } @@ -194,15 +190,15 @@ func ValidateCronWorkflow(wfClientset wfclientset.Interface, namespace string, c return errors.Errorf(errors.CodeBadRequest, "startingDeadlineSeconds must be positive") } - ctx := newTemplateValidationCtx(wfClientset, namespace, nil, ValidateOpts{}) wf, err := common.CastToWorkflow(cronWf) if err != nil { return errors.Errorf(errors.CodeBadRequest, "cannot convert to Workflow: %s", err) } - tmplCtx := templateresolution.NewContextFromClientset(wfClientset.ArgoprojV1alpha1().WorkflowTemplates(namespace), wf) + ctx := newTemplateValidationCtx(nil, ValidateOpts{}) + tmplCtx := templateresolution.NewContext(wftmplGetter, wf, wf) // Check if all templates can be resolved. - for _, template := range cronWf.Spec.WorkflowSpec.Templates { + for _, template := range wf.Spec.Templates { _, err := ctx.validateTemplateHolder(&wfv1.Template{Template: template.Name}, tmplCtx, &FakeArguments{}, map[string]interface{}{}) if err != nil { return errors.Errorf(errors.CodeBadRequest, "templates.%s %s", template.Name, err.Error()) From 35bc7318f6c4f33d30cc0077ada96f36f4108208 Mon Sep 17 00:00:00 2001 From: Simon Behar Date: Thu, 12 Dec 2019 13:11:09 -0800 Subject: [PATCH 31/44] Fix validation bug --- workflow/validate/validate.go | 12 +++--------- 1 file changed, 3 insertions(+), 9 deletions(-) diff --git a/workflow/validate/validate.go b/workflow/validate/validate.go index 21b35b2e7291..6dedeca0a515 100644 --- a/workflow/validate/validate.go +++ b/workflow/validate/validate.go @@ -194,15 +194,9 @@ func ValidateCronWorkflow(wftmplGetter templateresolution.WorkflowTemplateNamesp if err != nil { return errors.Errorf(errors.CodeBadRequest, "cannot convert to Workflow: %s", err) } - ctx := newTemplateValidationCtx(nil, ValidateOpts{}) - tmplCtx := templateresolution.NewContext(wftmplGetter, wf, wf) - - // Check if all templates can be resolved. - for _, template := range wf.Spec.Templates { - _, err := ctx.validateTemplateHolder(&wfv1.Template{Template: template.Name}, tmplCtx, &FakeArguments{}, map[string]interface{}{}) - if err != nil { - return errors.Errorf(errors.CodeBadRequest, "templates.%s %s", template.Name, err.Error()) - } + err = ValidateWorkflow(wftmplGetter, wf, ValidateOpts{}) + if err != nil { + return errors.Errorf(errors.CodeBadRequest, "cannot validate Workflow: %s", err) } return nil } From 71d073bb79316e250e7657f6a970517d020fcd30 Mon Sep 17 00:00:00 2001 From: Alex Collins Date: Wed, 18 Dec 2019 17:26:36 -0800 Subject: [PATCH 32/44] make codegen manifests --- manifests/install.yaml | 10 + manifests/namespace-install.yaml | 10 + pkg/apis/workflow/v1alpha1/generated.pb.go | 2950 ++++++++++++++------ 3 files changed, 2050 insertions(+), 920 deletions(-) diff --git a/manifests/install.yaml b/manifests/install.yaml index a50675c66f4c..043c8b873574 100644 --- a/manifests/install.yaml +++ b/manifests/install.yaml @@ -18,6 +18,16 @@ kind: CustomResourceDefinition metadata: name: workflows.argoproj.io spec: + additionalPrinterColumns: + - JSONPath: .status.phase + description: Status of the workflow + name: Status + type: string + - JSONPath: .status.startedAt + description: When the workflow was started + format: date-time + name: Age + type: date group: argoproj.io names: kind: Workflow diff --git a/manifests/namespace-install.yaml b/manifests/namespace-install.yaml index 0c79bbeab6dd..a8bd1012452c 100644 --- a/manifests/namespace-install.yaml +++ b/manifests/namespace-install.yaml @@ -18,6 +18,16 @@ kind: CustomResourceDefinition metadata: name: workflows.argoproj.io spec: + additionalPrinterColumns: + - JSONPath: .status.phase + description: Status of the workflow + name: Status + type: string + - JSONPath: .status.startedAt + description: When the workflow was started + format: date-time + name: Age + type: date group: argoproj.io names: kind: Workflow diff --git a/pkg/apis/workflow/v1alpha1/generated.pb.go b/pkg/apis/workflow/v1alpha1/generated.pb.go index ed7a3a0dc0db..fa79a6f713db 100644 --- a/pkg/apis/workflow/v1alpha1/generated.pb.go +++ b/pkg/apis/workflow/v1alpha1/generated.pb.go @@ -13,6 +13,7 @@ import ( github_com_gogo_protobuf_sortkeys "github.com/gogo/protobuf/sortkeys" k8s_io_api_core_v1 "k8s.io/api/core/v1" v1 "k8s.io/api/core/v1" + v11 "k8s.io/apimachinery/pkg/apis/meta/v1" math "math" math_bits "math/bits" @@ -283,10 +284,122 @@ func (m *ContinueOn) XXX_DiscardUnknown() { var xxx_messageInfo_ContinueOn proto.InternalMessageInfo +func (m *CronWorkflow) Reset() { *m = CronWorkflow{} } +func (*CronWorkflow) ProtoMessage() {} +func (*CronWorkflow) Descriptor() ([]byte, []int) { + return fileDescriptor_c23edafa7e7ea072, []int{9} +} +func (m *CronWorkflow) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *CronWorkflow) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *CronWorkflow) XXX_Merge(src proto.Message) { + xxx_messageInfo_CronWorkflow.Merge(m, src) +} +func (m *CronWorkflow) XXX_Size() int { + return m.Size() +} +func (m *CronWorkflow) XXX_DiscardUnknown() { + xxx_messageInfo_CronWorkflow.DiscardUnknown(m) +} + +var xxx_messageInfo_CronWorkflow proto.InternalMessageInfo + +func (m *CronWorkflowList) Reset() { *m = CronWorkflowList{} } +func (*CronWorkflowList) ProtoMessage() {} +func (*CronWorkflowList) Descriptor() ([]byte, []int) { + return fileDescriptor_c23edafa7e7ea072, []int{10} +} +func (m *CronWorkflowList) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *CronWorkflowList) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *CronWorkflowList) XXX_Merge(src proto.Message) { + xxx_messageInfo_CronWorkflowList.Merge(m, src) +} +func (m *CronWorkflowList) XXX_Size() int { + return m.Size() +} +func (m *CronWorkflowList) XXX_DiscardUnknown() { + xxx_messageInfo_CronWorkflowList.DiscardUnknown(m) +} + +var xxx_messageInfo_CronWorkflowList proto.InternalMessageInfo + +func (m *CronWorkflowSpec) Reset() { *m = CronWorkflowSpec{} } +func (*CronWorkflowSpec) ProtoMessage() {} +func (*CronWorkflowSpec) Descriptor() ([]byte, []int) { + return fileDescriptor_c23edafa7e7ea072, []int{11} +} +func (m *CronWorkflowSpec) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *CronWorkflowSpec) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *CronWorkflowSpec) XXX_Merge(src proto.Message) { + xxx_messageInfo_CronWorkflowSpec.Merge(m, src) +} +func (m *CronWorkflowSpec) XXX_Size() int { + return m.Size() +} +func (m *CronWorkflowSpec) XXX_DiscardUnknown() { + xxx_messageInfo_CronWorkflowSpec.DiscardUnknown(m) +} + +var xxx_messageInfo_CronWorkflowSpec proto.InternalMessageInfo + +func (m *CronWorkflowStatus) Reset() { *m = CronWorkflowStatus{} } +func (*CronWorkflowStatus) ProtoMessage() {} +func (*CronWorkflowStatus) Descriptor() ([]byte, []int) { + return fileDescriptor_c23edafa7e7ea072, []int{12} +} +func (m *CronWorkflowStatus) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *CronWorkflowStatus) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *CronWorkflowStatus) XXX_Merge(src proto.Message) { + xxx_messageInfo_CronWorkflowStatus.Merge(m, src) +} +func (m *CronWorkflowStatus) XXX_Size() int { + return m.Size() +} +func (m *CronWorkflowStatus) XXX_DiscardUnknown() { + xxx_messageInfo_CronWorkflowStatus.DiscardUnknown(m) +} + +var xxx_messageInfo_CronWorkflowStatus proto.InternalMessageInfo + func (m *DAGTask) Reset() { *m = DAGTask{} } func (*DAGTask) ProtoMessage() {} func (*DAGTask) Descriptor() ([]byte, []int) { - return fileDescriptor_c23edafa7e7ea072, []int{9} + return fileDescriptor_c23edafa7e7ea072, []int{13} } func (m *DAGTask) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -314,7 +427,7 @@ var xxx_messageInfo_DAGTask proto.InternalMessageInfo func (m *DAGTemplate) Reset() { *m = DAGTemplate{} } func (*DAGTemplate) ProtoMessage() {} func (*DAGTemplate) Descriptor() ([]byte, []int) { - return fileDescriptor_c23edafa7e7ea072, []int{10} + return fileDescriptor_c23edafa7e7ea072, []int{14} } func (m *DAGTemplate) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -342,7 +455,7 @@ var xxx_messageInfo_DAGTemplate proto.InternalMessageInfo func (m *ExecutorConfig) Reset() { *m = ExecutorConfig{} } func (*ExecutorConfig) ProtoMessage() {} func (*ExecutorConfig) Descriptor() ([]byte, []int) { - return fileDescriptor_c23edafa7e7ea072, []int{11} + return fileDescriptor_c23edafa7e7ea072, []int{15} } func (m *ExecutorConfig) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -370,7 +483,7 @@ var xxx_messageInfo_ExecutorConfig proto.InternalMessageInfo func (m *GitArtifact) Reset() { *m = GitArtifact{} } func (*GitArtifact) ProtoMessage() {} func (*GitArtifact) Descriptor() ([]byte, []int) { - return fileDescriptor_c23edafa7e7ea072, []int{12} + return fileDescriptor_c23edafa7e7ea072, []int{16} } func (m *GitArtifact) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -398,7 +511,7 @@ var xxx_messageInfo_GitArtifact proto.InternalMessageInfo func (m *HDFSArtifact) Reset() { *m = HDFSArtifact{} } func (*HDFSArtifact) ProtoMessage() {} func (*HDFSArtifact) Descriptor() ([]byte, []int) { - return fileDescriptor_c23edafa7e7ea072, []int{13} + return fileDescriptor_c23edafa7e7ea072, []int{17} } func (m *HDFSArtifact) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -426,7 +539,7 @@ var xxx_messageInfo_HDFSArtifact proto.InternalMessageInfo func (m *HDFSConfig) Reset() { *m = HDFSConfig{} } func (*HDFSConfig) ProtoMessage() {} func (*HDFSConfig) Descriptor() ([]byte, []int) { - return fileDescriptor_c23edafa7e7ea072, []int{14} + return fileDescriptor_c23edafa7e7ea072, []int{18} } func (m *HDFSConfig) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -454,7 +567,7 @@ var xxx_messageInfo_HDFSConfig proto.InternalMessageInfo func (m *HDFSKrbConfig) Reset() { *m = HDFSKrbConfig{} } func (*HDFSKrbConfig) ProtoMessage() {} func (*HDFSKrbConfig) Descriptor() ([]byte, []int) { - return fileDescriptor_c23edafa7e7ea072, []int{15} + return fileDescriptor_c23edafa7e7ea072, []int{19} } func (m *HDFSKrbConfig) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -482,7 +595,7 @@ var xxx_messageInfo_HDFSKrbConfig proto.InternalMessageInfo func (m *HTTPArtifact) Reset() { *m = HTTPArtifact{} } func (*HTTPArtifact) ProtoMessage() {} func (*HTTPArtifact) Descriptor() ([]byte, []int) { - return fileDescriptor_c23edafa7e7ea072, []int{16} + return fileDescriptor_c23edafa7e7ea072, []int{20} } func (m *HTTPArtifact) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -510,7 +623,7 @@ var xxx_messageInfo_HTTPArtifact proto.InternalMessageInfo func (m *Inputs) Reset() { *m = Inputs{} } func (*Inputs) ProtoMessage() {} func (*Inputs) Descriptor() ([]byte, []int) { - return fileDescriptor_c23edafa7e7ea072, []int{17} + return fileDescriptor_c23edafa7e7ea072, []int{21} } func (m *Inputs) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -538,7 +651,7 @@ var xxx_messageInfo_Inputs proto.InternalMessageInfo func (m *Item) Reset() { *m = Item{} } func (*Item) ProtoMessage() {} func (*Item) Descriptor() ([]byte, []int) { - return fileDescriptor_c23edafa7e7ea072, []int{18} + return fileDescriptor_c23edafa7e7ea072, []int{22} } func (m *Item) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -566,7 +679,7 @@ var xxx_messageInfo_Item proto.InternalMessageInfo func (m *ItemValue) Reset() { *m = ItemValue{} } func (*ItemValue) ProtoMessage() {} func (*ItemValue) Descriptor() ([]byte, []int) { - return fileDescriptor_c23edafa7e7ea072, []int{19} + return fileDescriptor_c23edafa7e7ea072, []int{23} } func (m *ItemValue) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -594,7 +707,7 @@ var xxx_messageInfo_ItemValue proto.InternalMessageInfo func (m *Metadata) Reset() { *m = Metadata{} } func (*Metadata) ProtoMessage() {} func (*Metadata) Descriptor() ([]byte, []int) { - return fileDescriptor_c23edafa7e7ea072, []int{20} + return fileDescriptor_c23edafa7e7ea072, []int{24} } func (m *Metadata) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -622,7 +735,7 @@ var xxx_messageInfo_Metadata proto.InternalMessageInfo func (m *NodeStatus) Reset() { *m = NodeStatus{} } func (*NodeStatus) ProtoMessage() {} func (*NodeStatus) Descriptor() ([]byte, []int) { - return fileDescriptor_c23edafa7e7ea072, []int{21} + return fileDescriptor_c23edafa7e7ea072, []int{25} } func (m *NodeStatus) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -650,7 +763,7 @@ var xxx_messageInfo_NodeStatus proto.InternalMessageInfo func (m *NoneStrategy) Reset() { *m = NoneStrategy{} } func (*NoneStrategy) ProtoMessage() {} func (*NoneStrategy) Descriptor() ([]byte, []int) { - return fileDescriptor_c23edafa7e7ea072, []int{22} + return fileDescriptor_c23edafa7e7ea072, []int{26} } func (m *NoneStrategy) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -678,7 +791,7 @@ var xxx_messageInfo_NoneStrategy proto.InternalMessageInfo func (m *Outputs) Reset() { *m = Outputs{} } func (*Outputs) ProtoMessage() {} func (*Outputs) Descriptor() ([]byte, []int) { - return fileDescriptor_c23edafa7e7ea072, []int{23} + return fileDescriptor_c23edafa7e7ea072, []int{27} } func (m *Outputs) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -706,7 +819,7 @@ var xxx_messageInfo_Outputs proto.InternalMessageInfo func (m *ParallelSteps) Reset() { *m = ParallelSteps{} } func (*ParallelSteps) ProtoMessage() {} func (*ParallelSteps) Descriptor() ([]byte, []int) { - return fileDescriptor_c23edafa7e7ea072, []int{24} + return fileDescriptor_c23edafa7e7ea072, []int{28} } func (m *ParallelSteps) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -734,7 +847,7 @@ var xxx_messageInfo_ParallelSteps proto.InternalMessageInfo func (m *Parameter) Reset() { *m = Parameter{} } func (*Parameter) ProtoMessage() {} func (*Parameter) Descriptor() ([]byte, []int) { - return fileDescriptor_c23edafa7e7ea072, []int{25} + return fileDescriptor_c23edafa7e7ea072, []int{29} } func (m *Parameter) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -762,7 +875,7 @@ var xxx_messageInfo_Parameter proto.InternalMessageInfo func (m *PodGC) Reset() { *m = PodGC{} } func (*PodGC) ProtoMessage() {} func (*PodGC) Descriptor() ([]byte, []int) { - return fileDescriptor_c23edafa7e7ea072, []int{26} + return fileDescriptor_c23edafa7e7ea072, []int{30} } func (m *PodGC) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -790,7 +903,7 @@ var xxx_messageInfo_PodGC proto.InternalMessageInfo func (m *RawArtifact) Reset() { *m = RawArtifact{} } func (*RawArtifact) ProtoMessage() {} func (*RawArtifact) Descriptor() ([]byte, []int) { - return fileDescriptor_c23edafa7e7ea072, []int{27} + return fileDescriptor_c23edafa7e7ea072, []int{31} } func (m *RawArtifact) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -818,7 +931,7 @@ var xxx_messageInfo_RawArtifact proto.InternalMessageInfo func (m *ResourceTemplate) Reset() { *m = ResourceTemplate{} } func (*ResourceTemplate) ProtoMessage() {} func (*ResourceTemplate) Descriptor() ([]byte, []int) { - return fileDescriptor_c23edafa7e7ea072, []int{28} + return fileDescriptor_c23edafa7e7ea072, []int{32} } func (m *ResourceTemplate) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -846,7 +959,7 @@ var xxx_messageInfo_ResourceTemplate proto.InternalMessageInfo func (m *RetryStrategy) Reset() { *m = RetryStrategy{} } func (*RetryStrategy) ProtoMessage() {} func (*RetryStrategy) Descriptor() ([]byte, []int) { - return fileDescriptor_c23edafa7e7ea072, []int{29} + return fileDescriptor_c23edafa7e7ea072, []int{33} } func (m *RetryStrategy) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -874,7 +987,7 @@ var xxx_messageInfo_RetryStrategy proto.InternalMessageInfo func (m *S3Artifact) Reset() { *m = S3Artifact{} } func (*S3Artifact) ProtoMessage() {} func (*S3Artifact) Descriptor() ([]byte, []int) { - return fileDescriptor_c23edafa7e7ea072, []int{30} + return fileDescriptor_c23edafa7e7ea072, []int{34} } func (m *S3Artifact) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -902,7 +1015,7 @@ var xxx_messageInfo_S3Artifact proto.InternalMessageInfo func (m *S3Bucket) Reset() { *m = S3Bucket{} } func (*S3Bucket) ProtoMessage() {} func (*S3Bucket) Descriptor() ([]byte, []int) { - return fileDescriptor_c23edafa7e7ea072, []int{31} + return fileDescriptor_c23edafa7e7ea072, []int{35} } func (m *S3Bucket) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -930,7 +1043,7 @@ var xxx_messageInfo_S3Bucket proto.InternalMessageInfo func (m *ScriptTemplate) Reset() { *m = ScriptTemplate{} } func (*ScriptTemplate) ProtoMessage() {} func (*ScriptTemplate) Descriptor() ([]byte, []int) { - return fileDescriptor_c23edafa7e7ea072, []int{32} + return fileDescriptor_c23edafa7e7ea072, []int{36} } func (m *ScriptTemplate) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -958,7 +1071,7 @@ var xxx_messageInfo_ScriptTemplate proto.InternalMessageInfo func (m *Sequence) Reset() { *m = Sequence{} } func (*Sequence) ProtoMessage() {} func (*Sequence) Descriptor() ([]byte, []int) { - return fileDescriptor_c23edafa7e7ea072, []int{33} + return fileDescriptor_c23edafa7e7ea072, []int{37} } func (m *Sequence) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -986,7 +1099,7 @@ var xxx_messageInfo_Sequence proto.InternalMessageInfo func (m *SuspendTemplate) Reset() { *m = SuspendTemplate{} } func (*SuspendTemplate) ProtoMessage() {} func (*SuspendTemplate) Descriptor() ([]byte, []int) { - return fileDescriptor_c23edafa7e7ea072, []int{34} + return fileDescriptor_c23edafa7e7ea072, []int{38} } func (m *SuspendTemplate) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1014,7 +1127,7 @@ var xxx_messageInfo_SuspendTemplate proto.InternalMessageInfo func (m *TarStrategy) Reset() { *m = TarStrategy{} } func (*TarStrategy) ProtoMessage() {} func (*TarStrategy) Descriptor() ([]byte, []int) { - return fileDescriptor_c23edafa7e7ea072, []int{35} + return fileDescriptor_c23edafa7e7ea072, []int{39} } func (m *TarStrategy) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1042,7 +1155,7 @@ var xxx_messageInfo_TarStrategy proto.InternalMessageInfo func (m *Template) Reset() { *m = Template{} } func (*Template) ProtoMessage() {} func (*Template) Descriptor() ([]byte, []int) { - return fileDescriptor_c23edafa7e7ea072, []int{36} + return fileDescriptor_c23edafa7e7ea072, []int{40} } func (m *Template) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1070,7 +1183,7 @@ var xxx_messageInfo_Template proto.InternalMessageInfo func (m *TemplateRef) Reset() { *m = TemplateRef{} } func (*TemplateRef) ProtoMessage() {} func (*TemplateRef) Descriptor() ([]byte, []int) { - return fileDescriptor_c23edafa7e7ea072, []int{37} + return fileDescriptor_c23edafa7e7ea072, []int{41} } func (m *TemplateRef) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1098,7 +1211,7 @@ var xxx_messageInfo_TemplateRef proto.InternalMessageInfo func (m *UserContainer) Reset() { *m = UserContainer{} } func (*UserContainer) ProtoMessage() {} func (*UserContainer) Descriptor() ([]byte, []int) { - return fileDescriptor_c23edafa7e7ea072, []int{38} + return fileDescriptor_c23edafa7e7ea072, []int{42} } func (m *UserContainer) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1126,7 +1239,7 @@ var xxx_messageInfo_UserContainer proto.InternalMessageInfo func (m *ValueFrom) Reset() { *m = ValueFrom{} } func (*ValueFrom) ProtoMessage() {} func (*ValueFrom) Descriptor() ([]byte, []int) { - return fileDescriptor_c23edafa7e7ea072, []int{39} + return fileDescriptor_c23edafa7e7ea072, []int{43} } func (m *ValueFrom) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1154,7 +1267,7 @@ var xxx_messageInfo_ValueFrom proto.InternalMessageInfo func (m *Workflow) Reset() { *m = Workflow{} } func (*Workflow) ProtoMessage() {} func (*Workflow) Descriptor() ([]byte, []int) { - return fileDescriptor_c23edafa7e7ea072, []int{40} + return fileDescriptor_c23edafa7e7ea072, []int{44} } func (m *Workflow) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1182,7 +1295,7 @@ var xxx_messageInfo_Workflow proto.InternalMessageInfo func (m *WorkflowList) Reset() { *m = WorkflowList{} } func (*WorkflowList) ProtoMessage() {} func (*WorkflowList) Descriptor() ([]byte, []int) { - return fileDescriptor_c23edafa7e7ea072, []int{41} + return fileDescriptor_c23edafa7e7ea072, []int{45} } func (m *WorkflowList) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1210,7 +1323,7 @@ var xxx_messageInfo_WorkflowList proto.InternalMessageInfo func (m *WorkflowSpec) Reset() { *m = WorkflowSpec{} } func (*WorkflowSpec) ProtoMessage() {} func (*WorkflowSpec) Descriptor() ([]byte, []int) { - return fileDescriptor_c23edafa7e7ea072, []int{42} + return fileDescriptor_c23edafa7e7ea072, []int{46} } func (m *WorkflowSpec) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1238,7 +1351,7 @@ var xxx_messageInfo_WorkflowSpec proto.InternalMessageInfo func (m *WorkflowStatus) Reset() { *m = WorkflowStatus{} } func (*WorkflowStatus) ProtoMessage() {} func (*WorkflowStatus) Descriptor() ([]byte, []int) { - return fileDescriptor_c23edafa7e7ea072, []int{43} + return fileDescriptor_c23edafa7e7ea072, []int{47} } func (m *WorkflowStatus) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1266,7 +1379,7 @@ var xxx_messageInfo_WorkflowStatus proto.InternalMessageInfo func (m *WorkflowStep) Reset() { *m = WorkflowStep{} } func (*WorkflowStep) ProtoMessage() {} func (*WorkflowStep) Descriptor() ([]byte, []int) { - return fileDescriptor_c23edafa7e7ea072, []int{44} + return fileDescriptor_c23edafa7e7ea072, []int{48} } func (m *WorkflowStep) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1294,7 +1407,7 @@ var xxx_messageInfo_WorkflowStep proto.InternalMessageInfo func (m *WorkflowTemplate) Reset() { *m = WorkflowTemplate{} } func (*WorkflowTemplate) ProtoMessage() {} func (*WorkflowTemplate) Descriptor() ([]byte, []int) { - return fileDescriptor_c23edafa7e7ea072, []int{45} + return fileDescriptor_c23edafa7e7ea072, []int{49} } func (m *WorkflowTemplate) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1322,7 +1435,7 @@ var xxx_messageInfo_WorkflowTemplate proto.InternalMessageInfo func (m *WorkflowTemplateList) Reset() { *m = WorkflowTemplateList{} } func (*WorkflowTemplateList) ProtoMessage() {} func (*WorkflowTemplateList) Descriptor() ([]byte, []int) { - return fileDescriptor_c23edafa7e7ea072, []int{46} + return fileDescriptor_c23edafa7e7ea072, []int{50} } func (m *WorkflowTemplateList) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1350,7 +1463,7 @@ var xxx_messageInfo_WorkflowTemplateList proto.InternalMessageInfo func (m *WorkflowTemplateSpec) Reset() { *m = WorkflowTemplateSpec{} } func (*WorkflowTemplateSpec) ProtoMessage() {} func (*WorkflowTemplateSpec) Descriptor() ([]byte, []int) { - return fileDescriptor_c23edafa7e7ea072, []int{47} + return fileDescriptor_c23edafa7e7ea072, []int{51} } func (m *WorkflowTemplateSpec) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1385,6 +1498,10 @@ func init() { proto.RegisterType((*ArtifactoryAuth)(nil), "github.com.argoproj.argo.pkg.apis.workflow.v1alpha1.ArtifactoryAuth") proto.RegisterType((*Backoff)(nil), "github.com.argoproj.argo.pkg.apis.workflow.v1alpha1.Backoff") proto.RegisterType((*ContinueOn)(nil), "github.com.argoproj.argo.pkg.apis.workflow.v1alpha1.ContinueOn") + proto.RegisterType((*CronWorkflow)(nil), "github.com.argoproj.argo.pkg.apis.workflow.v1alpha1.CronWorkflow") + proto.RegisterType((*CronWorkflowList)(nil), "github.com.argoproj.argo.pkg.apis.workflow.v1alpha1.CronWorkflowList") + proto.RegisterType((*CronWorkflowSpec)(nil), "github.com.argoproj.argo.pkg.apis.workflow.v1alpha1.CronWorkflowSpec") + proto.RegisterType((*CronWorkflowStatus)(nil), "github.com.argoproj.argo.pkg.apis.workflow.v1alpha1.CronWorkflowStatus") proto.RegisterType((*DAGTask)(nil), "github.com.argoproj.argo.pkg.apis.workflow.v1alpha1.DAGTask") proto.RegisterType((*DAGTemplate)(nil), "github.com.argoproj.argo.pkg.apis.workflow.v1alpha1.DAGTemplate") proto.RegisterType((*ExecutorConfig)(nil), "github.com.argoproj.argo.pkg.apis.workflow.v1alpha1.ExecutorConfig") @@ -1439,306 +1556,323 @@ func init() { } var fileDescriptor_c23edafa7e7ea072 = []byte{ - // 4783 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xec, 0x5c, 0x4f, 0x6c, 0x1c, 0x69, - 0x56, 0x4f, 0xdb, 0xee, 0x76, 0xf7, 0x6b, 0xff, 0xcb, 0x17, 0x67, 0x52, 0xe3, 0xcd, 0xb8, 0xb3, - 0xb5, 0x9a, 0x21, 0x0b, 0x33, 0xf6, 0x4e, 0xb2, 0x0b, 0xb3, 0xb3, 0xcc, 0xcc, 0xba, 0xdd, 0x76, - 0xe2, 0x24, 0x76, 0xcc, 0x6b, 0x27, 0xc3, 0x32, 0x2b, 0x96, 0x72, 0xd5, 0xe7, 0xee, 0x4a, 0x77, - 0x57, 0xd5, 0xd4, 0x57, 0x1d, 0x8f, 0x35, 0x48, 0x0c, 0x08, 0x04, 0x08, 0xad, 0x04, 0x97, 0x65, - 0xc5, 0x5e, 0x10, 0x07, 0xb8, 0x70, 0xe1, 0xca, 0x61, 0x91, 0x10, 0x87, 0x11, 0x17, 0xe6, 0xc6, - 0x1e, 0x90, 0xb5, 0x63, 0x24, 0x04, 0x02, 0x09, 0x89, 0x0b, 0x22, 0x27, 0xf4, 0xfd, 0xa9, 0xaf, - 0xfe, 0x74, 0x7b, 0xc6, 0xe9, 0x76, 0x82, 0xd0, 0xee, 0x29, 0xae, 0xf7, 0xde, 0xf7, 0x7b, 0xdf, - 0xdf, 0xf7, 0xbd, 0xf7, 0xbe, 0xd7, 0x81, 0xf5, 0x96, 0x1b, 0xb5, 0xfb, 0xfb, 0x2b, 0xb6, 0xdf, - 0x5b, 0xb5, 0xc2, 0x96, 0x1f, 0x84, 0xfe, 0x23, 0xf1, 0xc7, 0x6a, 0xd0, 0x69, 0xad, 0x5a, 0x81, - 0xcb, 0x56, 0x0f, 0xfd, 0xb0, 0x73, 0xd0, 0xf5, 0x0f, 0x57, 0x1f, 0xbf, 0x6e, 0x75, 0x83, 0xb6, - 0xf5, 0xfa, 0x6a, 0x8b, 0x7a, 0x34, 0xb4, 0x22, 0xea, 0xac, 0x04, 0xa1, 0x1f, 0xf9, 0xe4, 0x66, - 0x02, 0xb2, 0x12, 0x83, 0x88, 0x3f, 0x56, 0x82, 0x4e, 0x6b, 0x85, 0x83, 0xac, 0xc4, 0x20, 0x2b, - 0x31, 0xc8, 0xd2, 0x6b, 0x29, 0xcd, 0x2d, 0x9f, 0x2b, 0xe4, 0x58, 0xfb, 0xfd, 0x03, 0xf1, 0x25, - 0x3e, 0xc4, 0x5f, 0x52, 0xc7, 0x92, 0xd9, 0x79, 0x83, 0xad, 0xb8, 0x3e, 0xef, 0xd2, 0xaa, 0xed, - 0x87, 0x74, 0xf5, 0xf1, 0x40, 0x3f, 0x96, 0xbe, 0x9a, 0xc8, 0xf4, 0x2c, 0xbb, 0xed, 0x7a, 0x34, - 0x3c, 0x4a, 0xc6, 0xd1, 0xa3, 0x91, 0x35, 0xac, 0xd5, 0xea, 0x69, 0xad, 0xc2, 0xbe, 0x17, 0xb9, - 0x3d, 0x3a, 0xd0, 0xe0, 0xe7, 0x3f, 0xaf, 0x01, 0xb3, 0xdb, 0xb4, 0x67, 0xe5, 0xdb, 0x99, 0xff, - 0x50, 0x80, 0xf9, 0xb5, 0xd0, 0x6e, 0xbb, 0x8f, 0x69, 0x33, 0xe2, 0x8c, 0xd6, 0x11, 0x79, 0x0f, - 0x26, 0x23, 0x2b, 0x34, 0x0a, 0xd7, 0x0a, 0xd7, 0xab, 0x37, 0xbe, 0xb9, 0x32, 0xc2, 0x44, 0xae, - 0xec, 0x59, 0x61, 0x0c, 0x57, 0x9f, 0x3e, 0x39, 0xae, 0x4d, 0xee, 0x59, 0x21, 0x72, 0x54, 0xf2, - 0x1d, 0x98, 0xf2, 0x7c, 0x8f, 0x1a, 0x13, 0x02, 0x7d, 0x6d, 0x24, 0xf4, 0x1d, 0xdf, 0xd3, 0xbd, - 0xad, 0x97, 0x4f, 0x8e, 0x6b, 0x53, 0x9c, 0x82, 0x02, 0xd8, 0xfc, 0xcf, 0x02, 0x54, 0xd6, 0xc2, - 0x56, 0xbf, 0x47, 0xbd, 0x88, 0x91, 0x10, 0x20, 0xb0, 0x42, 0xab, 0x47, 0x23, 0x1a, 0x32, 0xa3, - 0x70, 0x6d, 0xf2, 0x7a, 0xf5, 0xc6, 0xdb, 0x23, 0x29, 0xdd, 0x8d, 0x61, 0xea, 0xe4, 0xe3, 0xe3, - 0xda, 0x85, 0x93, 0xe3, 0x1a, 0x68, 0x12, 0xc3, 0x94, 0x16, 0xe2, 0x41, 0xc5, 0x0a, 0x23, 0xf7, - 0xc0, 0xb2, 0x23, 0x66, 0x4c, 0x08, 0x95, 0x6f, 0x8d, 0xa4, 0x72, 0x4d, 0xa1, 0xd4, 0x2f, 0x2a, - 0x8d, 0x95, 0x98, 0xc2, 0x30, 0x51, 0x61, 0xfe, 0xfb, 0x24, 0x94, 0x63, 0x06, 0xb9, 0x06, 0x53, - 0x9e, 0xd5, 0xa3, 0x62, 0xf5, 0x2a, 0xf5, 0x19, 0xd5, 0x70, 0x6a, 0xc7, 0xea, 0xf1, 0x09, 0xb2, - 0x7a, 0x94, 0x4b, 0x04, 0x56, 0xd4, 0x16, 0x2b, 0x90, 0x92, 0xd8, 0xb5, 0xa2, 0x36, 0x0a, 0x0e, - 0xb9, 0x0a, 0x53, 0x3d, 0xdf, 0xa1, 0xc6, 0xe4, 0xb5, 0xc2, 0xf5, 0xa2, 0x9c, 0xe0, 0x6d, 0xdf, - 0xa1, 0x28, 0xa8, 0xbc, 0xfd, 0x41, 0xe8, 0xf7, 0x8c, 0xa9, 0x6c, 0xfb, 0xcd, 0xd0, 0xef, 0xa1, - 0xe0, 0x90, 0x3f, 0x28, 0xc0, 0x42, 0xdc, 0xbd, 0x7b, 0xbe, 0x6d, 0x45, 0xae, 0xef, 0x19, 0x45, - 0xb1, 0xe0, 0x1b, 0x63, 0x4d, 0x44, 0x0c, 0x56, 0x37, 0x94, 0xd6, 0x85, 0x3c, 0x07, 0x07, 0x14, - 0x93, 0x1b, 0x00, 0xad, 0xae, 0xbf, 0x6f, 0x75, 0xf9, 0x1c, 0x18, 0x25, 0xd1, 0x6b, 0xbd, 0x84, - 0xb7, 0x34, 0x07, 0x53, 0x52, 0xa4, 0x03, 0xd3, 0x96, 0x3c, 0x15, 0xc6, 0xb4, 0xe8, 0x77, 0x63, - 0xc4, 0x7e, 0x67, 0x4e, 0x56, 0xbd, 0x7a, 0x72, 0x5c, 0x9b, 0x56, 0x44, 0x8c, 0x35, 0x90, 0x57, - 0xa1, 0xec, 0x07, 0xbc, 0xab, 0x56, 0xd7, 0x28, 0x5f, 0x2b, 0x5c, 0x2f, 0xd7, 0x17, 0x54, 0xf7, - 0xca, 0xf7, 0x15, 0x1d, 0xb5, 0x84, 0xf9, 0xc7, 0x45, 0x18, 0x18, 0x35, 0x79, 0x1d, 0xaa, 0x0a, - 0xed, 0x9e, 0xdf, 0x62, 0x62, 0xf1, 0xcb, 0xf5, 0xf9, 0x93, 0xe3, 0x5a, 0x75, 0x2d, 0x21, 0x63, - 0x5a, 0x86, 0xbc, 0x0b, 0x13, 0xec, 0xa6, 0x3a, 0x86, 0xef, 0x8c, 0x34, 0xba, 0xe6, 0x4d, 0xbd, - 0x41, 0x4b, 0x27, 0xc7, 0xb5, 0x89, 0xe6, 0x4d, 0x9c, 0x60, 0x37, 0xb9, 0xf9, 0x68, 0xb9, 0x91, - 0xd8, 0x3c, 0xa3, 0x9a, 0x8f, 0x5b, 0x6e, 0xa4, 0xa1, 0x85, 0xf9, 0xb8, 0xe5, 0x46, 0xc8, 0x51, - 0xb9, 0xf9, 0x68, 0x47, 0x51, 0x20, 0x36, 0xdf, 0xa8, 0xe6, 0xe3, 0xf6, 0xde, 0xde, 0xae, 0x86, - 0x17, 0xbb, 0x9b, 0x53, 0x50, 0x00, 0x93, 0x0f, 0xf9, 0x4c, 0x4a, 0x9e, 0x1f, 0x1e, 0xa9, 0x5d, - 0x7b, 0x7b, 0xac, 0x5d, 0xeb, 0x87, 0x47, 0x5a, 0x9d, 0x5a, 0x13, 0xcd, 0xc0, 0xb4, 0x36, 0x31, - 0x3a, 0xe7, 0x80, 0x89, 0x4d, 0x3a, 0xf2, 0xe8, 0x1a, 0x9b, 0xcd, 0xdc, 0xe8, 0x1a, 0x9b, 0x4d, - 0x14, 0xc0, 0x7c, 0x6d, 0x42, 0xeb, 0x50, 0xed, 0xe9, 0xd1, 0xd6, 0x06, 0xad, 0xc3, 0xec, 0xda, - 0xa0, 0x75, 0x88, 0x1c, 0xd5, 0x6c, 0xc1, 0xe5, 0x98, 0x83, 0x34, 0xf0, 0x99, 0x2b, 0x06, 0x48, - 0x0f, 0xc8, 0x2a, 0x54, 0x6c, 0xdf, 0x3b, 0x70, 0x5b, 0xdb, 0x56, 0xa0, 0x0c, 0x93, 0xb6, 0x68, - 0xeb, 0x31, 0x03, 0x13, 0x19, 0xf2, 0x12, 0x4c, 0x76, 0xe8, 0x91, 0xb2, 0x50, 0x55, 0x25, 0x3a, - 0x79, 0x97, 0x1e, 0x21, 0xa7, 0x9b, 0x3f, 0x2c, 0xc0, 0xa5, 0x21, 0x93, 0xcb, 0x9b, 0xf5, 0xc3, - 0xae, 0xd2, 0xa0, 0x9b, 0x3d, 0xc0, 0x7b, 0xc8, 0xe9, 0xe4, 0x77, 0x0b, 0x30, 0x9f, 0x9a, 0xed, - 0xb5, 0xbe, 0x32, 0x82, 0xa3, 0x9f, 0xee, 0x0c, 0x56, 0xfd, 0x8a, 0xd2, 0x38, 0x9f, 0x63, 0x60, - 0x5e, 0xab, 0xf9, 0x8f, 0xe2, 0xd6, 0xcd, 0xd0, 0x88, 0x05, 0x73, 0x7d, 0x46, 0x43, 0x6e, 0xa2, - 0x9b, 0xd4, 0x0e, 0x69, 0xa4, 0x2e, 0xe0, 0x97, 0x57, 0xe4, 0xd5, 0xce, 0x7b, 0xb1, 0xc2, 0xbd, - 0x8c, 0x95, 0xc7, 0xaf, 0xaf, 0x48, 0x89, 0xbb, 0xf4, 0xa8, 0x49, 0xbb, 0x94, 0x63, 0xd4, 0xc9, - 0xc9, 0x71, 0x6d, 0xee, 0x41, 0x06, 0x00, 0x73, 0x80, 0x5c, 0x45, 0x60, 0x31, 0x76, 0xe8, 0x87, - 0x8e, 0x52, 0x31, 0xf1, 0xd4, 0x2a, 0x76, 0x33, 0x00, 0x98, 0x03, 0x34, 0xbf, 0x57, 0x80, 0xe9, - 0xba, 0x65, 0x77, 0xfc, 0x83, 0x03, 0x6e, 0xd7, 0x9c, 0x7e, 0x28, 0xad, 0xbf, 0x5c, 0x13, 0x6d, - 0xd7, 0x1a, 0x8a, 0x8e, 0x5a, 0x82, 0xbc, 0x02, 0x25, 0x39, 0x1d, 0xa2, 0x53, 0xc5, 0xfa, 0x9c, - 0x92, 0x2d, 0x6d, 0x0a, 0x2a, 0x2a, 0x2e, 0xf9, 0x1a, 0x54, 0x7b, 0xd6, 0x07, 0x31, 0x80, 0x30, - 0x33, 0x95, 0xfa, 0x25, 0x25, 0x5c, 0xdd, 0x4e, 0x58, 0x98, 0x96, 0x33, 0xbf, 0x05, 0xb0, 0xee, - 0x7b, 0x91, 0xeb, 0xf5, 0xe9, 0x7d, 0x8f, 0x7c, 0x09, 0x8a, 0x34, 0x0c, 0xfd, 0x50, 0x59, 0xca, - 0x59, 0xd5, 0xbc, 0xb8, 0xc1, 0x89, 0x28, 0x79, 0xb2, 0x47, 0x6e, 0x97, 0x3a, 0xa2, 0x47, 0xe5, - 0x74, 0x8f, 0x38, 0x15, 0x15, 0xd7, 0xfc, 0x93, 0x12, 0x4c, 0x37, 0xd6, 0x6e, 0xed, 0x59, 0xac, - 0x73, 0x86, 0xeb, 0xf7, 0x55, 0x28, 0x47, 0xb4, 0x17, 0x74, 0xad, 0x88, 0xaa, 0x0d, 0xae, 0x67, - 0x65, 0x4f, 0xd1, 0x51, 0x4b, 0x10, 0x9f, 0xfb, 0x12, 0xca, 0x99, 0x51, 0x26, 0xf5, 0xed, 0x11, - 0x37, 0xab, 0x42, 0x49, 0x3b, 0x13, 0x8a, 0x84, 0x89, 0x0e, 0xc2, 0xa0, 0x1a, 0x2b, 0x47, 0x7a, - 0xa0, 0xec, 0xec, 0x88, 0x4e, 0x60, 0x82, 0x23, 0xed, 0x5e, 0x8a, 0x80, 0x69, 0x2d, 0xe4, 0xab, - 0x30, 0xe3, 0xd0, 0x80, 0x7a, 0x0e, 0xf5, 0x6c, 0x97, 0x32, 0xa3, 0x78, 0x6d, 0x92, 0xcf, 0xcb, - 0xc9, 0x71, 0x6d, 0xa6, 0x91, 0xa2, 0x63, 0x46, 0x8a, 0x3c, 0x82, 0xca, 0xa1, 0x1b, 0xb5, 0xb7, - 0x22, 0xda, 0xe3, 0x26, 0x93, 0xfb, 0x59, 0x5f, 0x1f, 0xa9, 0xa3, 0x1c, 0x21, 0x99, 0x96, 0x77, - 0x63, 0x4c, 0x4c, 0xe0, 0xb9, 0x09, 0xe3, 0x1f, 0xc2, 0xe3, 0x13, 0xe6, 0xb3, 0x92, 0x6d, 0x20, - 0x18, 0x98, 0xc8, 0x10, 0x06, 0x33, 0xfc, 0xa3, 0x49, 0xdf, 0xef, 0x53, 0xcf, 0xa6, 0xe2, 0x62, - 0x1f, 0xd5, 0x0f, 0x8c, 0x41, 0xe4, 0x8c, 0xbc, 0x9b, 0x82, 0xc5, 0x8c, 0x12, 0xbe, 0xfb, 0x0e, - 0xdb, 0xd4, 0x33, 0x2a, 0xd9, 0xdd, 0xf7, 0x6e, 0x9b, 0x7a, 0x28, 0x38, 0xc4, 0x07, 0xb0, 0xf5, - 0x31, 0x30, 0x60, 0x8c, 0xdb, 0x3f, 0x39, 0x4d, 0xf5, 0x39, 0xee, 0x49, 0x25, 0xdf, 0x98, 0x52, - 0x61, 0xfe, 0x6d, 0x01, 0xaa, 0xfc, 0x70, 0xc4, 0x1b, 0xfa, 0x15, 0x28, 0x45, 0x56, 0xd8, 0x52, - 0xe6, 0xad, 0x92, 0x1c, 0xaa, 0x3d, 0x41, 0x45, 0xc5, 0x25, 0x16, 0x14, 0x23, 0x8b, 0x75, 0x62, - 0x07, 0xfa, 0x17, 0x47, 0xea, 0xa3, 0x3a, 0x95, 0xc9, 0xf9, 0xe6, 0x5f, 0x0c, 0x25, 0x32, 0xb9, - 0x0e, 0x65, 0x7e, 0x82, 0x37, 0x2d, 0x26, 0xbd, 0x95, 0x72, 0x7d, 0x86, 0x9f, 0xc2, 0x4d, 0x45, - 0x43, 0xcd, 0x35, 0xbf, 0x0d, 0x73, 0x1b, 0x1f, 0x50, 0xbb, 0x1f, 0xf9, 0xa1, 0xbc, 0xaf, 0xc8, - 0x1d, 0x20, 0x8c, 0x86, 0x8f, 0x5d, 0x9b, 0xae, 0xd9, 0xb6, 0xdf, 0xf7, 0xa2, 0x9d, 0xe4, 0xd4, - 0x2f, 0x29, 0x6d, 0xa4, 0x39, 0x20, 0x81, 0x43, 0x5a, 0x99, 0x7f, 0x39, 0x05, 0xd5, 0x94, 0xc7, - 0xc3, 0x57, 0x31, 0xa4, 0x81, 0x9f, 0xb7, 0x21, 0xfc, 0x4e, 0x45, 0xc1, 0xe1, 0x36, 0x24, 0xa4, - 0x8f, 0x5d, 0xc6, 0x0d, 0x60, 0xce, 0x86, 0xa0, 0xa2, 0xa3, 0x96, 0x20, 0x35, 0x28, 0x3a, 0x34, - 0x88, 0xda, 0x62, 0x90, 0x53, 0xf5, 0x0a, 0x9f, 0x88, 0x06, 0x27, 0xa0, 0xa4, 0x73, 0x81, 0x03, - 0x1a, 0xd9, 0x6d, 0x63, 0x4a, 0x9c, 0x3b, 0x21, 0xb0, 0xc9, 0x09, 0x28, 0xe9, 0x43, 0xee, 0xa6, - 0xe2, 0xb3, 0xbf, 0x9b, 0x4a, 0xe7, 0x7c, 0x37, 0x91, 0x00, 0x2e, 0x31, 0xd6, 0xde, 0x0d, 0xdd, - 0xc7, 0x56, 0x44, 0x45, 0x63, 0xa1, 0x67, 0xfa, 0x69, 0xf4, 0x5c, 0x39, 0x39, 0xae, 0x5d, 0x6a, - 0x36, 0x6f, 0xe7, 0x51, 0x70, 0x18, 0x34, 0x69, 0xc2, 0x65, 0xd7, 0x63, 0xd4, 0xee, 0x87, 0x74, - 0xab, 0xe5, 0xf9, 0x21, 0xbd, 0xed, 0x33, 0x0e, 0xa7, 0xdc, 0xfc, 0x97, 0xd4, 0xa2, 0x5d, 0xde, - 0x1a, 0x26, 0x84, 0xc3, 0xdb, 0x9a, 0x7f, 0x5f, 0x80, 0x99, 0xb4, 0x93, 0x47, 0x18, 0x40, 0xbb, - 0xb1, 0xd9, 0x94, 0x3b, 0x53, 0x79, 0x0d, 0xef, 0x8c, 0xec, 0x3b, 0x4a, 0x98, 0x24, 0x42, 0x4a, - 0x68, 0x98, 0x52, 0x73, 0x86, 0x28, 0xf2, 0x4b, 0x50, 0x3c, 0xf0, 0x43, 0x9b, 0xaa, 0xb3, 0xa5, - 0xcf, 0xe0, 0x26, 0x27, 0xa2, 0xe4, 0x99, 0xff, 0x5a, 0x80, 0x94, 0x06, 0xf2, 0x1b, 0x30, 0xcb, - 0x75, 0xdc, 0x0d, 0xf7, 0x33, 0xa3, 0xa9, 0x8f, 0x3c, 0x1a, 0x8d, 0x54, 0xbf, 0xac, 0xf4, 0xcf, - 0x66, 0xc8, 0x98, 0xd5, 0x47, 0x7e, 0x0e, 0x2a, 0x96, 0xe3, 0x84, 0x94, 0x31, 0x2a, 0x4d, 0x4f, - 0xa5, 0x3e, 0x2b, 0xee, 0xca, 0x98, 0x88, 0x09, 0x9f, 0x1f, 0x43, 0xee, 0x55, 0xf3, 0x9d, 0xad, - 0xfc, 0x10, 0x7d, 0x0c, 0xb9, 0x12, 0x4e, 0x47, 0x2d, 0x61, 0x7e, 0x77, 0x0a, 0xb2, 0xba, 0x89, - 0x03, 0xf3, 0x9d, 0x70, 0x7f, 0x7d, 0xdd, 0xb2, 0xdb, 0x23, 0xf9, 0x7c, 0x97, 0xb8, 0xb3, 0x79, - 0x37, 0x8b, 0x80, 0x79, 0x48, 0xa5, 0xe5, 0x2e, 0x3d, 0x8a, 0xac, 0xfd, 0x51, 0xdc, 0xbe, 0x58, - 0x4b, 0x1a, 0x01, 0xf3, 0x90, 0xdc, 0x2d, 0xeb, 0x84, 0xfb, 0xf1, 0x21, 0xcf, 0xbb, 0x65, 0x77, - 0x13, 0x16, 0xa6, 0xe5, 0xf8, 0x14, 0x76, 0xc2, 0x7d, 0xa4, 0x56, 0x37, 0x4e, 0x28, 0xe8, 0x29, - 0xbc, 0xab, 0xe8, 0xa8, 0x25, 0x48, 0x00, 0xa4, 0x13, 0xcf, 0x9e, 0x0e, 0x1c, 0x94, 0x2d, 0xba, - 0x3e, 0x6c, 0x34, 0x5a, 0x28, 0x3d, 0xa0, 0x17, 0xb8, 0x6d, 0xbe, 0x3b, 0x80, 0x83, 0x43, 0xb0, - 0xc9, 0xb7, 0xe0, 0x4a, 0x27, 0xdc, 0x57, 0x86, 0x7c, 0x37, 0x74, 0x3d, 0xdb, 0x0d, 0x32, 0x99, - 0x84, 0x9a, 0xea, 0xee, 0x95, 0xbb, 0xc3, 0xc5, 0xf0, 0xb4, 0xf6, 0xe6, 0x6b, 0x30, 0x93, 0x8e, - 0x44, 0x3f, 0x27, 0x7a, 0x31, 0xff, 0xa3, 0x00, 0xa5, 0x2d, 0x2f, 0xe8, 0xff, 0x84, 0x24, 0xb5, - 0xfe, 0x6c, 0x0a, 0xa6, 0xb8, 0xeb, 0x45, 0xae, 0xc3, 0x54, 0x74, 0x14, 0xc8, 0xbb, 0x75, 0xb2, - 0xbe, 0x18, 0x1b, 0x9a, 0xbd, 0xa3, 0x80, 0x3e, 0x51, 0xff, 0xa2, 0x90, 0x20, 0x6f, 0x43, 0xc9, - 0xeb, 0xf7, 0x1e, 0x5a, 0x5d, 0x65, 0x94, 0x5e, 0x89, 0x5d, 0x8b, 0x1d, 0x41, 0x7d, 0x72, 0x5c, - 0x5b, 0xa4, 0x9e, 0xed, 0x3b, 0xae, 0xd7, 0x5a, 0x7d, 0xc4, 0x7c, 0x6f, 0x65, 0xa7, 0xdf, 0xdb, - 0xa7, 0x21, 0xaa, 0x56, 0xe4, 0xcb, 0x30, 0xbd, 0xef, 0xfb, 0x5d, 0x0e, 0x20, 0x4d, 0xd6, 0xbc, - 0x02, 0x98, 0xae, 0x4b, 0x32, 0xc6, 0x7c, 0xee, 0xc5, 0xb0, 0x28, 0xe4, 0x92, 0x53, 0x59, 0x2f, - 0xa6, 0x29, 0xa8, 0xa8, 0xb8, 0xa4, 0x07, 0xa5, 0x9e, 0x15, 0x70, 0xb9, 0xa2, 0x98, 0xb2, 0x8d, - 0x91, 0xfd, 0xd3, 0x95, 0x6d, 0x81, 0xb3, 0xe1, 0x45, 0xe1, 0x51, 0xa2, 0x4e, 0x12, 0x51, 0x29, - 0x21, 0x2e, 0x4c, 0x77, 0x5d, 0x16, 0x71, 0x7d, 0xa5, 0x31, 0x76, 0x05, 0xd7, 0xf7, 0xd0, 0xea, - 0xf6, 0x69, 0x32, 0x03, 0xf7, 0x24, 0x2c, 0xc6, 0xf8, 0x4b, 0x47, 0x50, 0x4d, 0xf5, 0x88, 0x2c, - 0xc8, 0x88, 0x5d, 0x6c, 0x5e, 0x11, 0xa4, 0x93, 0x3d, 0x28, 0x3e, 0xe6, 0x18, 0xca, 0xd8, 0x8c, - 0xd9, 0x13, 0x94, 0x60, 0x6f, 0x4e, 0xbc, 0x51, 0x78, 0xb3, 0xfc, 0xfd, 0x3f, 0xad, 0x5d, 0xf8, - 0xe8, 0x9f, 0xae, 0x5d, 0x30, 0xff, 0x6e, 0x12, 0x2a, 0x5a, 0xe4, 0xff, 0xf7, 0x4e, 0x09, 0x73, - 0x3b, 0xe5, 0xce, 0x78, 0xf3, 0x75, 0xa6, 0xed, 0xb2, 0x96, 0xdd, 0x2e, 0x33, 0xf5, 0x9f, 0x49, - 0x2d, 0xf5, 0x93, 0xe3, 0x9a, 0x91, 0x9d, 0x04, 0xb4, 0x0e, 0xb7, 0x29, 0x63, 0x56, 0x8b, 0x26, - 0xdb, 0xe0, 0xeb, 0x9f, 0xb7, 0x0d, 0x16, 0xd3, 0xdb, 0xa0, 0x32, 0x7c, 0x19, 0x3f, 0x9a, 0x84, - 0xf2, 0x36, 0x8d, 0x2c, 0xc7, 0x8a, 0x2c, 0xf2, 0x3b, 0x05, 0xa8, 0x5a, 0x9e, 0xe7, 0x47, 0x22, - 0x6e, 0x8f, 0xcd, 0xdb, 0xce, 0x48, 0xd3, 0x11, 0x83, 0xae, 0xac, 0x25, 0x80, 0x72, 0x4a, 0xf4, - 0xcd, 0x94, 0xe2, 0x60, 0x5a, 0x2f, 0x79, 0x1f, 0x4a, 0x5d, 0x6b, 0x9f, 0x76, 0x63, 0x6b, 0xb7, - 0x35, 0x5e, 0x0f, 0xee, 0x09, 0xac, 0xdc, 0x7a, 0x48, 0x22, 0x2a, 0x45, 0x4b, 0x6f, 0xc3, 0x42, - 0xbe, 0xa3, 0x4f, 0x33, 0xa3, 0x7c, 0x31, 0x52, 0x6a, 0x9e, 0xa6, 0xa9, 0xf9, 0x3f, 0x15, 0x80, - 0x1d, 0xdf, 0xa1, 0xcd, 0xc8, 0x8a, 0xfa, 0x8c, 0x2c, 0xc1, 0x84, 0xeb, 0xa8, 0xab, 0x08, 0x54, - 0x6f, 0x27, 0xb6, 0x1a, 0x38, 0xe1, 0x3a, 0x3a, 0xc5, 0x31, 0x71, 0x6a, 0x8a, 0xe3, 0x6b, 0x50, - 0x75, 0x5c, 0x16, 0x74, 0xad, 0xa3, 0x9d, 0x21, 0xbe, 0x40, 0x23, 0x61, 0x61, 0x5a, 0x8e, 0xbc, - 0xaa, 0xce, 0xaf, 0x3c, 0x28, 0x46, 0xee, 0xfc, 0x96, 0x79, 0xf7, 0x52, 0x67, 0xf8, 0x0d, 0x98, - 0x89, 0x53, 0x08, 0x42, 0x4b, 0x51, 0xb4, 0x8a, 0x4f, 0xfd, 0xcc, 0x5e, 0x8a, 0x87, 0x19, 0xc9, - 0x7c, 0x8a, 0xa3, 0xf4, 0x5c, 0x52, 0x1c, 0x0d, 0x58, 0x60, 0x91, 0x1f, 0x52, 0x27, 0x96, 0xd8, - 0x6a, 0x18, 0x24, 0x33, 0xd0, 0x85, 0x66, 0x8e, 0x8f, 0x03, 0x2d, 0xc8, 0x2e, 0x2c, 0xc6, 0x9d, - 0x48, 0x0f, 0xd0, 0xb8, 0x24, 0x90, 0xae, 0x2a, 0xa4, 0xc5, 0x77, 0x87, 0xc8, 0xe0, 0xd0, 0x96, - 0xe4, 0x1b, 0x30, 0x1b, 0x77, 0xb3, 0x69, 0xfb, 0x01, 0x35, 0x16, 0x05, 0x94, 0xf6, 0x96, 0xf7, - 0xd2, 0x4c, 0xcc, 0xca, 0x92, 0xaf, 0x40, 0x31, 0x68, 0x5b, 0x8c, 0xaa, 0x8c, 0x48, 0x1c, 0xf8, - 0x16, 0x77, 0x39, 0xf1, 0xc9, 0x71, 0xad, 0xc2, 0xd7, 0x4c, 0x7c, 0xa0, 0x14, 0x24, 0x37, 0x00, - 0xf6, 0xfd, 0xbe, 0xe7, 0x58, 0xe1, 0xd1, 0x56, 0x43, 0x84, 0x41, 0xa9, 0xc7, 0x98, 0xba, 0xe6, - 0x60, 0x4a, 0x8a, 0x5b, 0xdb, 0x9e, 0xb4, 0x3b, 0x2a, 0xb1, 0xa1, 0xad, 0xad, 0x36, 0x47, 0x8a, - 0x4f, 0xde, 0x83, 0x0a, 0x8b, 0xac, 0x30, 0xa2, 0xce, 0x5a, 0xa4, 0xb2, 0x1b, 0x3f, 0x9b, 0xf2, - 0x0b, 0xf5, 0xd3, 0x68, 0xb2, 0xa6, 0x3d, 0x1a, 0x59, 0xdc, 0x53, 0xdc, 0x73, 0x7b, 0x34, 0x71, - 0x49, 0x9a, 0x31, 0x08, 0x26, 0x78, 0xe4, 0x57, 0x01, 0x0e, 0x5c, 0xcf, 0x65, 0x6d, 0x81, 0x5e, - 0x7d, 0x6a, 0x74, 0x3d, 0xce, 0x4d, 0x8d, 0x82, 0x29, 0x44, 0x1e, 0x30, 0x05, 0xbe, 0xb3, 0xb5, - 0x6b, 0xcc, 0x88, 0x51, 0xea, 0x80, 0x69, 0x97, 0x13, 0x51, 0xf2, 0xc8, 0x75, 0x28, 0x3b, 0x16, - 0xed, 0xf9, 0x1e, 0x75, 0x8c, 0xd9, 0x24, 0x69, 0xd1, 0x50, 0x34, 0xd4, 0x5c, 0xf2, 0x1d, 0x28, - 0xb9, 0xc2, 0x5f, 0x34, 0xe6, 0x44, 0x57, 0xbf, 0x31, 0xda, 0x8d, 0x22, 0x20, 0xea, 0xc0, 0xcd, - 0x95, 0xfc, 0x1b, 0x15, 0x2c, 0xb1, 0x61, 0xda, 0xef, 0x47, 0x42, 0xc3, 0xbc, 0xd0, 0x30, 0x5a, - 0x92, 0xe6, 0xbe, 0xc4, 0x90, 0x8f, 0x63, 0xea, 0x03, 0x63, 0x64, 0x3e, 0x5e, 0xbb, 0xed, 0x76, - 0x9d, 0x90, 0x7a, 0xc6, 0x82, 0x88, 0xc7, 0xc4, 0x78, 0xd7, 0x15, 0x0d, 0x35, 0x97, 0xfc, 0x02, - 0xcc, 0xfa, 0xfd, 0x48, 0xec, 0x1b, 0xbe, 0xed, 0x98, 0x71, 0x51, 0x88, 0x5f, 0xe4, 0xbb, 0xf8, - 0x7e, 0x9a, 0x81, 0x59, 0x39, 0x73, 0x0e, 0x66, 0xd2, 0x2f, 0xca, 0xe6, 0x1f, 0x4d, 0x40, 0xdc, - 0x8f, 0x9f, 0x04, 0x57, 0x9b, 0x98, 0x50, 0x0a, 0x29, 0xeb, 0x77, 0x23, 0x65, 0xa9, 0xc5, 0x5a, - 0xa3, 0xa0, 0xa0, 0xe2, 0x98, 0x87, 0x30, 0xcb, 0x7b, 0xdb, 0xed, 0xd2, 0x6e, 0x33, 0xa2, 0x01, - 0x23, 0x07, 0x50, 0x64, 0xfc, 0x0f, 0x35, 0x27, 0xa3, 0xbd, 0x55, 0xc5, 0x76, 0x8a, 0x43, 0x26, - 0xfb, 0x5d, 0x28, 0x40, 0x09, 0x6f, 0x7e, 0x6f, 0x02, 0x2a, 0x7a, 0x9e, 0xce, 0x90, 0x5e, 0x7f, - 0x19, 0xa6, 0x1d, 0x7a, 0x60, 0xf1, 0xd1, 0xa8, 0xe7, 0x23, 0xbe, 0xad, 0x1a, 0x92, 0x84, 0x31, - 0x8f, 0xd4, 0xe2, 0x9b, 0x50, 0x0e, 0x59, 0xa4, 0xbc, 0xd2, 0x8e, 0x26, 0xe9, 0x40, 0x45, 0xfc, - 0xb1, 0x19, 0x3f, 0x75, 0x8f, 0xba, 0xee, 0x0f, 0x63, 0x14, 0x99, 0x48, 0xd0, 0x9f, 0x98, 0xe0, - 0xe7, 0x9e, 0xa8, 0x8b, 0x67, 0x79, 0xa2, 0x36, 0x37, 0x81, 0x1b, 0x86, 0x5b, 0xeb, 0xe4, 0x2d, - 0x28, 0x33, 0xb5, 0x75, 0xd5, 0xbc, 0x7c, 0x31, 0x0e, 0xa1, 0xe3, 0x2d, 0xfd, 0xe4, 0xb8, 0x36, - 0x2b, 0x84, 0x63, 0x02, 0xea, 0x26, 0xe6, 0x2a, 0x54, 0x53, 0x4f, 0x7a, 0x7c, 0x86, 0xb9, 0xbf, - 0x92, 0x9f, 0xe1, 0x86, 0x15, 0x59, 0x28, 0x38, 0xe6, 0x93, 0x09, 0x58, 0x40, 0xca, 0xfc, 0x7e, - 0x68, 0xd3, 0x74, 0x5a, 0xd7, 0xb2, 0x53, 0x2f, 0x3d, 0xda, 0xc5, 0x59, 0x13, 0x54, 0x54, 0x5c, - 0x7e, 0xdd, 0xf4, 0x68, 0xd8, 0xd2, 0x87, 0x4d, 0x2d, 0x92, 0xbe, 0x6e, 0xb6, 0xd3, 0x4c, 0xcc, - 0xca, 0x92, 0x57, 0xa1, 0xdc, 0xb3, 0x3c, 0xf7, 0x80, 0xb2, 0x28, 0x9f, 0x6f, 0xd9, 0x56, 0x74, - 0xd4, 0x12, 0xe4, 0x16, 0x5c, 0x64, 0x34, 0xba, 0x7f, 0xe8, 0xd1, 0x10, 0xe9, 0x01, 0x0d, 0x45, - 0x1a, 0x7e, 0x4a, 0x98, 0xcc, 0x17, 0x55, 0xb3, 0x8b, 0xcd, 0xbc, 0x00, 0x0e, 0xb6, 0x11, 0x57, - 0x77, 0xdf, 0xb6, 0x29, 0x63, 0xeb, 0xbe, 0xe7, 0xb8, 0xba, 0x9a, 0x21, 0x7d, 0x75, 0xe7, 0xf8, - 0x38, 0xd0, 0x82, 0xa3, 0x1c, 0x58, 0x6e, 0xb7, 0x1f, 0xd2, 0x04, 0xa5, 0x94, 0x45, 0xd9, 0xcc, - 0xf1, 0x71, 0xa0, 0x85, 0xf9, 0x2f, 0x05, 0x98, 0x45, 0x1a, 0x85, 0x47, 0x7a, 0x52, 0x6a, 0x50, - 0xec, 0xba, 0x3d, 0x57, 0xa6, 0x8e, 0x8a, 0x72, 0x27, 0xdf, 0xe3, 0x04, 0x94, 0x74, 0xd2, 0x80, - 0x6a, 0xc8, 0x5b, 0xec, 0xfa, 0x5d, 0xd7, 0x8e, 0x27, 0xdc, 0x8c, 0xbd, 0x31, 0x4c, 0x58, 0x4f, - 0xb2, 0x9f, 0x98, 0x6e, 0x46, 0x3c, 0x98, 0xde, 0x97, 0xef, 0x7a, 0xea, 0x19, 0x6a, 0x34, 0x63, - 0xaf, 0xde, 0x06, 0x45, 0x0e, 0x26, 0x7e, 0x28, 0x7c, 0x92, 0xfc, 0x89, 0xb1, 0x12, 0xf3, 0xfb, - 0x05, 0x80, 0xa4, 0xc0, 0x80, 0x74, 0xa0, 0xcc, 0x6e, 0xd6, 0xfb, 0x76, 0x47, 0xe7, 0xc8, 0x46, - 0x7c, 0x4a, 0x51, 0x20, 0xc9, 0xce, 0x89, 0x29, 0xa8, 0x15, 0x7c, 0xde, 0xf3, 0xf3, 0x5f, 0x4d, - 0x82, 0x6e, 0xc5, 0xf7, 0x24, 0xf5, 0x9c, 0xc0, 0x77, 0xbd, 0x28, 0xff, 0xc8, 0xb9, 0xa1, 0xe8, - 0xa8, 0x25, 0xf8, 0x31, 0xd9, 0x97, 0x83, 0x98, 0xc8, 0x1e, 0x13, 0xd5, 0x07, 0xc5, 0xe5, 0x72, - 0x21, 0x6d, 0x25, 0xef, 0x9b, 0x5a, 0x0e, 0x05, 0x15, 0x15, 0x97, 0xdf, 0x8e, 0x71, 0x92, 0x58, - 0x6d, 0x6d, 0x71, 0x3b, 0xc6, 0xf9, 0x64, 0xd4, 0x5c, 0xd2, 0x86, 0x79, 0x4b, 0xec, 0xc8, 0x24, - 0xf1, 0xfd, 0x54, 0x39, 0xfc, 0xe4, 0x71, 0x3b, 0x8b, 0x82, 0x79, 0x58, 0xae, 0x89, 0x25, 0xcd, - 0x9f, 0x3e, 0x95, 0xaf, 0x35, 0x35, 0xb3, 0x28, 0x98, 0x87, 0xe5, 0x8e, 0x61, 0xe8, 0x77, 0xe9, - 0x1a, 0xee, 0x28, 0x07, 0x54, 0x3b, 0x86, 0x28, 0xc9, 0x18, 0xf3, 0xcd, 0xdf, 0x2b, 0xc0, 0x5c, - 0xd3, 0x0e, 0xdd, 0x20, 0xd2, 0x26, 0x6b, 0x47, 0x54, 0x25, 0x44, 0x16, 0x77, 0xd9, 0xd4, 0x9e, - 0x7a, 0xe9, 0x94, 0x1c, 0xa2, 0x14, 0xca, 0x14, 0x2d, 0x48, 0x12, 0x26, 0x10, 0x22, 0xd2, 0x17, - 0x46, 0x31, 0xbf, 0xb6, 0x4d, 0x41, 0x45, 0xc5, 0x35, 0x7f, 0x50, 0x80, 0xb2, 0x7e, 0xb1, 0xfb, - 0x12, 0x14, 0xc5, 0x43, 0x90, 0xda, 0x3b, 0xfa, 0x0e, 0x5c, 0xe7, 0x44, 0x94, 0x3c, 0x2e, 0x24, - 0xbc, 0x50, 0x05, 0x9c, 0xba, 0x28, 0xad, 0x30, 0x42, 0xc9, 0xe3, 0x9b, 0x96, 0x7a, 0x8e, 0xda, - 0x2f, 0x7a, 0xd3, 0x6e, 0x78, 0x0e, 0x72, 0xba, 0x78, 0xcc, 0xf6, 0xc3, 0x9e, 0x15, 0xe5, 0xf3, - 0x10, 0x9b, 0x82, 0x8a, 0x8a, 0x6b, 0xbe, 0x03, 0xf3, 0xcd, 0x3e, 0x0b, 0xa8, 0xa7, 0xc3, 0x8e, - 0xa7, 0x7b, 0xc7, 0x37, 0x67, 0xa1, 0x9a, 0xaa, 0xfe, 0x33, 0xff, 0xeb, 0x0a, 0xe8, 0x77, 0xed, - 0x9f, 0xbe, 0x8e, 0x8f, 0x14, 0x3a, 0xda, 0xda, 0x91, 0x2f, 0x8e, 0xef, 0xc8, 0xeb, 0x75, 0xcf, - 0x39, 0xf3, 0xad, 0xc4, 0x99, 0x2f, 0x9d, 0x83, 0x33, 0xaf, 0x4f, 0xe2, 0x80, 0x43, 0xff, 0xfb, - 0x05, 0x98, 0xf1, 0x7c, 0x87, 0xc6, 0xe7, 0xdd, 0x98, 0x16, 0x0e, 0xe4, 0xfd, 0xb1, 0x26, 0x71, - 0x65, 0x27, 0x85, 0x28, 0x93, 0x2c, 0x3a, 0x13, 0x90, 0x66, 0x61, 0x46, 0x35, 0xd9, 0x84, 0xb2, - 0x75, 0xc0, 0x23, 0xb0, 0xe8, 0x48, 0x3d, 0xd0, 0x5f, 0x1d, 0x66, 0x01, 0xd6, 0x94, 0x8c, 0x34, - 0xae, 0xf1, 0x17, 0xea, 0xb6, 0xfc, 0x76, 0xea, 0xa9, 0x44, 0x8f, 0x08, 0x51, 0x47, 0xbd, 0x9d, - 0xe2, 0x6c, 0x51, 0xca, 0xaf, 0x51, 0x14, 0xd4, 0x0a, 0xb8, 0xbb, 0x2e, 0x63, 0x3c, 0x11, 0xe0, - 0x96, 0xa5, 0xbb, 0x2e, 0xe3, 0x3f, 0x54, 0x1c, 0xd2, 0x8a, 0xbd, 0xf3, 0xaa, 0x98, 0xdc, 0xfa, - 0xc8, 0x11, 0x8b, 0x76, 0xf8, 0x87, 0xbb, 0xe7, 0xe4, 0x4e, 0xda, 0x88, 0xce, 0x9c, 0xc5, 0x88, - 0xce, 0x9e, 0x6a, 0x40, 0x5b, 0x50, 0x62, 0xc2, 0x44, 0x8b, 0xc0, 0xb6, 0x7a, 0x63, 0x7d, 0xb4, - 0x1b, 0x3e, 0x63, 0xe5, 0xe5, 0xec, 0x48, 0x1a, 0x2a, 0x78, 0xe2, 0x43, 0x39, 0x54, 0x0e, 0xac, - 0x8a, 0x8d, 0x47, 0xcb, 0xcb, 0xe7, 0xbd, 0x60, 0xb9, 0x3f, 0x62, 0x2a, 0x6a, 0x25, 0xe4, 0x3d, - 0x98, 0x74, 0xac, 0x96, 0x8a, 0x92, 0xbf, 0x39, 0x72, 0x29, 0x43, 0xac, 0x46, 0x94, 0xdd, 0x35, - 0xd6, 0x6e, 0x21, 0x47, 0x25, 0x1d, 0x98, 0x66, 0xd2, 0x62, 0x1b, 0x0b, 0x63, 0x54, 0xb3, 0xe5, - 0xac, 0xbe, 0x8c, 0x9b, 0x14, 0x11, 0x63, 0x0d, 0x64, 0x03, 0xa6, 0x1f, 0xfb, 0xdd, 0x7e, 0x4f, - 0x85, 0xd7, 0xd5, 0x1b, 0x4b, 0xc3, 0x56, 0xfb, 0xa1, 0x10, 0x49, 0x8c, 0x80, 0xfc, 0x66, 0x18, - 0xb7, 0x25, 0xbf, 0x55, 0x80, 0x39, 0x7e, 0x74, 0xf4, 0x3e, 0x60, 0x06, 0x19, 0x63, 0xa7, 0x3e, - 0x60, 0x34, 0x4c, 0x76, 0xd8, 0x0b, 0x4a, 0xed, 0xdc, 0x56, 0x46, 0x03, 0xe6, 0x34, 0x92, 0x00, - 0xca, 0xcc, 0x75, 0xa8, 0x6d, 0x85, 0xcc, 0xb8, 0x74, 0x6e, 0xda, 0x13, 0xc7, 0x52, 0x61, 0xa3, - 0xd6, 0x42, 0x7e, 0x5b, 0x54, 0x20, 0xaa, 0x1a, 0x5c, 0x55, 0x17, 0xbd, 0x78, 0x9e, 0x75, 0xd1, - 0x97, 0x64, 0xf9, 0x61, 0x46, 0x03, 0xe6, 0x55, 0x92, 0xfb, 0x70, 0x99, 0x87, 0x63, 0x8f, 0x69, - 0x83, 0x5a, 0x4e, 0xd7, 0xf5, 0x68, 0x93, 0xda, 0xbe, 0xe7, 0x30, 0xe3, 0xb2, 0x78, 0x39, 0x79, - 0xf1, 0xe4, 0xb8, 0x76, 0x79, 0x6d, 0x98, 0x00, 0x0e, 0x6f, 0x47, 0x3e, 0x84, 0xd9, 0x30, 0x1d, - 0x94, 0x18, 0x2f, 0x8c, 0xf1, 0x6c, 0x9f, 0x09, 0x6f, 0x64, 0xfa, 0x26, 0x43, 0xc2, 0xac, 0x2e, - 0xf2, 0x3a, 0x54, 0x03, 0x65, 0xa9, 0x5c, 0xd6, 0x33, 0xae, 0x88, 0x31, 0x88, 0x1b, 0x75, 0x37, - 0x21, 0x63, 0x5a, 0x86, 0x3c, 0x80, 0x6a, 0xe4, 0x77, 0x69, 0xa8, 0x9e, 0x18, 0x0c, 0xb1, 0xf8, - 0xcb, 0xc3, 0x76, 0xf2, 0x9e, 0x16, 0x4b, 0x12, 0xd8, 0x09, 0x8d, 0x61, 0x1a, 0x87, 0x07, 0xb7, - 0xcc, 0x6e, 0x53, 0xa7, 0xdf, 0xa5, 0xa1, 0x88, 0xe4, 0x5f, 0xcc, 0x06, 0xb7, 0xcd, 0x34, 0x13, - 0xb3, 0xb2, 0x3c, 0x5c, 0x0d, 0x42, 0xd7, 0x0f, 0xdd, 0xe8, 0x68, 0xbd, 0x6b, 0x31, 0x26, 0x00, - 0x96, 0x04, 0x80, 0x0e, 0x57, 0x77, 0xf3, 0x02, 0x38, 0xd8, 0x86, 0xc7, 0x04, 0x31, 0xd1, 0xf8, - 0x82, 0x88, 0x09, 0x85, 0x59, 0x8a, 0xdb, 0xa2, 0xe6, 0x9e, 0x52, 0xc4, 0x74, 0x75, 0x94, 0x22, - 0x26, 0xe2, 0xc0, 0x55, 0xab, 0x1f, 0xf9, 0x3d, 0x4e, 0xc8, 0x36, 0xd9, 0xf3, 0x3b, 0xd4, 0x33, - 0xae, 0x89, 0xbb, 0xea, 0xda, 0xc9, 0x71, 0xed, 0xea, 0xda, 0x67, 0xc8, 0xe1, 0x67, 0xa2, 0x90, - 0x1e, 0x94, 0xa9, 0x2a, 0xc4, 0x32, 0xbe, 0x38, 0xc6, 0x25, 0x91, 0xad, 0xe6, 0x92, 0x13, 0x14, - 0xd3, 0x50, 0xab, 0x20, 0x7b, 0x50, 0x6d, 0xfb, 0x2c, 0x5a, 0xeb, 0xba, 0x16, 0xa3, 0xcc, 0x78, - 0x49, 0xec, 0x93, 0xa1, 0xf7, 0xdb, 0xed, 0x58, 0x2c, 0xd9, 0x26, 0xb7, 0x93, 0x96, 0x98, 0x86, - 0x21, 0x54, 0x04, 0x48, 0x7d, 0xb1, 0x6a, 0xbe, 0x17, 0xd1, 0x0f, 0x22, 0x63, 0x59, 0x8c, 0xe5, - 0x95, 0x61, 0xc8, 0xbb, 0xbe, 0xd3, 0xcc, 0x4a, 0xcb, 0x53, 0x9e, 0x23, 0x62, 0x1e, 0x93, 0xbc, - 0x01, 0x33, 0x81, 0xef, 0x34, 0x03, 0x6a, 0xef, 0x5a, 0x91, 0xdd, 0x36, 0x6a, 0xd9, 0x07, 0x92, - 0xdd, 0x14, 0x0f, 0x33, 0x92, 0x4b, 0xef, 0xc0, 0xc5, 0x01, 0x7f, 0xea, 0xa9, 0x5e, 0x93, 0xfe, - 0xbc, 0x00, 0x69, 0x77, 0xf6, 0xdc, 0xfd, 0xfe, 0x5b, 0x70, 0x51, 0xfd, 0xae, 0x89, 0x5f, 0xb6, - 0xdd, 0xbe, 0xae, 0x04, 0x4e, 0xa5, 0x76, 0x30, 0x2f, 0x80, 0x83, 0x6d, 0xcc, 0xbf, 0x28, 0xc0, - 0x6c, 0xc6, 0x7c, 0x9f, 0x7b, 0x54, 0xb8, 0x09, 0xa4, 0xe7, 0x86, 0xa1, 0x1f, 0xca, 0x3b, 0x70, - 0x9b, 0xef, 0x65, 0xa6, 0x0a, 0x8a, 0x45, 0x21, 0xca, 0xf6, 0x00, 0x17, 0x87, 0xb4, 0x30, 0xff, - 0xba, 0x00, 0x49, 0xee, 0x50, 0x57, 0x5f, 0x15, 0x4e, 0xad, 0xbe, 0x7a, 0x15, 0xca, 0x8f, 0x98, - 0xef, 0xed, 0x26, 0x35, 0x5a, 0x7a, 0x42, 0xef, 0x34, 0xef, 0xef, 0x08, 0x49, 0x2d, 0x21, 0xa4, - 0xdf, 0xdf, 0x74, 0xbb, 0xd1, 0x60, 0x25, 0xd3, 0x9d, 0x5f, 0x92, 0x74, 0xd4, 0x12, 0x64, 0x15, - 0x2a, 0x3a, 0x5d, 0xad, 0xc2, 0x49, 0x3d, 0x09, 0x3a, 0x57, 0x8b, 0x89, 0x8c, 0xf9, 0xc3, 0x09, - 0x28, 0xc7, 0xb9, 0x5e, 0xf2, 0x6b, 0x29, 0x67, 0x59, 0x4e, 0xf0, 0x57, 0xce, 0xf6, 0x88, 0x72, - 0x7f, 0xff, 0x11, 0xb5, 0x23, 0xee, 0x11, 0x27, 0xc9, 0xd1, 0x84, 0x96, 0xf2, 0x90, 0x6d, 0x98, - 0x62, 0x01, 0xb5, 0xc7, 0xfa, 0x8d, 0x99, 0x4e, 0x4d, 0x07, 0xd4, 0x4e, 0x26, 0x98, 0x7f, 0xa1, - 0x00, 0x27, 0x1d, 0x28, 0x31, 0xf1, 0x58, 0xaa, 0x02, 0xcf, 0xf5, 0x31, 0x33, 0xe0, 0x1c, 0x2a, - 0x5d, 0x1d, 0xc0, 0xbf, 0x51, 0xa9, 0x30, 0x3f, 0x29, 0xc0, 0x4c, 0x2c, 0x7a, 0xcf, 0x65, 0x11, - 0xf9, 0xf6, 0xc0, 0x24, 0xae, 0x9c, 0x6d, 0x12, 0x79, 0x6b, 0x31, 0x85, 0x7a, 0x81, 0x63, 0x4a, - 0x6a, 0x02, 0xf7, 0xa1, 0xe8, 0x8a, 0xaa, 0xea, 0x71, 0x5e, 0x1f, 0xe2, 0xfe, 0x26, 0x91, 0x83, - 0xac, 0xaa, 0x96, 0xd0, 0xe6, 0xdf, 0x5c, 0x4a, 0x86, 0xc4, 0xa7, 0x95, 0x78, 0x50, 0x89, 0x0f, - 0x78, 0xfc, 0xaa, 0xf0, 0xd6, 0x58, 0x41, 0x61, 0xb2, 0x29, 0x63, 0x0a, 0xc3, 0x44, 0x05, 0xb9, - 0x01, 0x40, 0xb9, 0x65, 0x93, 0xb9, 0xbb, 0x89, 0x6c, 0xd2, 0x7d, 0x43, 0x73, 0x30, 0x25, 0xf5, - 0xfc, 0x13, 0x0e, 0xc3, 0xaf, 0xe8, 0xa9, 0x67, 0x72, 0x45, 0x5f, 0x3d, 0xf7, 0x2b, 0xfa, 0xa5, - 0x67, 0x7f, 0x45, 0xa7, 0x02, 0x92, 0xe2, 0x18, 0x01, 0xc9, 0x87, 0xb0, 0x28, 0xff, 0x5c, 0xef, - 0x5a, 0x6e, 0x4f, 0xef, 0x17, 0x55, 0x46, 0xf5, 0xe5, 0xa1, 0x17, 0x33, 0x0d, 0x99, 0xcb, 0x22, - 0xea, 0x45, 0x0f, 0x93, 0x96, 0xc9, 0x1b, 0xfc, 0xc3, 0x21, 0x70, 0x38, 0x54, 0x49, 0xde, 0x83, - 0x9d, 0x3e, 0x83, 0x07, 0xfb, 0x83, 0x02, 0x5c, 0xb6, 0x86, 0xfd, 0xd8, 0x4a, 0xe5, 0x31, 0xee, - 0x8c, 0x15, 0x4f, 0x64, 0x10, 0x55, 0x3c, 0x30, 0x8c, 0x85, 0xc3, 0xfb, 0x40, 0x5e, 0x4e, 0x42, - 0xd2, 0x8a, 0xd8, 0x54, 0xc3, 0x83, 0xc9, 0xef, 0xe6, 0x53, 0x41, 0x20, 0x66, 0xbb, 0x39, 0xb6, - 0xc1, 0x3e, 0x87, 0x74, 0x50, 0x75, 0x8c, 0x74, 0x50, 0x2e, 0xbc, 0x98, 0x39, 0xa7, 0xf0, 0xc2, - 0x83, 0x05, 0xb7, 0x67, 0xb5, 0xe8, 0x6e, 0xbf, 0xdb, 0x95, 0x19, 0x70, 0x66, 0xcc, 0x0a, 0xec, - 0xa1, 0xb5, 0xaf, 0x3c, 0xdc, 0xeb, 0xca, 0xfb, 0x51, 0xbf, 0x65, 0x25, 0x6f, 0x4d, 0x5b, 0x39, - 0x24, 0x1c, 0xc0, 0xe6, 0xdb, 0x92, 0xbb, 0xad, 0x3b, 0x34, 0xe2, 0xb3, 0x2d, 0x32, 0x25, 0xea, - 0x47, 0xa5, 0xb7, 0x13, 0x32, 0xa6, 0x65, 0xc8, 0x5d, 0xa8, 0x38, 0x1e, 0x53, 0x2f, 0x4d, 0xf3, - 0xc2, 0x4a, 0xbd, 0xc6, 0x6d, 0x5b, 0x63, 0xa7, 0xa9, 0xdf, 0x98, 0xae, 0x0e, 0xfe, 0x6a, 0x7e, - 0x45, 0xf3, 0x31, 0x69, 0x4f, 0xb6, 0x05, 0x98, 0x2a, 0x04, 0x97, 0xa9, 0x8d, 0x6b, 0xa7, 0x78, - 0xc8, 0x8d, 0x9d, 0xb8, 0x6e, 0x7d, 0x56, 0xa9, 0x53, 0xe5, 0xdd, 0x09, 0x02, 0x79, 0x05, 0x4a, - 0xbe, 0xb7, 0xf1, 0x81, 0x1b, 0x19, 0x17, 0xb3, 0x19, 0xf0, 0xfb, 0x82, 0x8a, 0x8a, 0x4b, 0x1e, - 0xc0, 0x95, 0x28, 0xea, 0xaa, 0xd0, 0x76, 0xed, 0x20, 0xa2, 0x61, 0x5c, 0xaf, 0x21, 0x0a, 0x76, - 0x8a, 0xf5, 0x2f, 0x9c, 0x1c, 0xd7, 0xae, 0xec, 0xed, 0xdd, 0x1b, 0x26, 0x82, 0xa7, 0xb5, 0x3d, - 0x3d, 0xe8, 0xbe, 0x34, 0x62, 0xd0, 0x9d, 0x8e, 0xf3, 0x16, 0x3f, 0x33, 0xce, 0x1b, 0x88, 0x4b, - 0x2f, 0x3f, 0x45, 0x5c, 0xfa, 0x9e, 0xa8, 0x4a, 0xb9, 0xb5, 0xae, 0x62, 0xfa, 0x37, 0x47, 0x4b, - 0x25, 0x72, 0x04, 0xf9, 0x36, 0x29, 0xfe, 0x44, 0x89, 0x49, 0x76, 0x61, 0x31, 0xf0, 0x9d, 0x81, - 0xb0, 0x56, 0x04, 0xf1, 0xa9, 0x7a, 0xa6, 0xdd, 0x21, 0x32, 0x38, 0xb4, 0xa5, 0xb0, 0xa5, 0x09, - 0xdd, 0x30, 0xc4, 0xc4, 0x48, 0x5b, 0x9a, 0x90, 0x31, 0x2d, 0x93, 0x8f, 0xf2, 0x5e, 0x7c, 0x66, - 0x51, 0xde, 0xd2, 0x73, 0x88, 0xf2, 0xbe, 0xf0, 0xfc, 0xa2, 0xbc, 0x4f, 0xcb, 0x30, 0x97, 0xf5, - 0x5f, 0x93, 0x82, 0xb0, 0xc2, 0x59, 0x0b, 0xc2, 0x32, 0x15, 0x5b, 0x13, 0xcf, 0xb4, 0x62, 0x6b, - 0xf2, 0xdc, 0x2b, 0xb6, 0x52, 0x95, 0x69, 0x53, 0x9f, 0x53, 0x99, 0xb6, 0x06, 0xf3, 0xb6, 0xdf, - 0x0b, 0xc4, 0x2f, 0x47, 0x54, 0x7d, 0x92, 0xac, 0x21, 0xd0, 0xcf, 0x9d, 0xeb, 0x59, 0x36, 0xe6, - 0xe5, 0xc9, 0xaf, 0x43, 0xd1, 0x13, 0x0d, 0x4b, 0x63, 0x94, 0xc4, 0x66, 0x17, 0x4c, 0x5c, 0x94, - 0xaa, 0x2a, 0x35, 0x4e, 0x9b, 0x16, 0x05, 0xed, 0x49, 0xfc, 0x07, 0x4a, 0xa5, 0xdc, 0xe3, 0x98, - 0xcf, 0xd6, 0x23, 0x32, 0xa3, 0x22, 0x3a, 0xf2, 0xcb, 0xe7, 0xd1, 0x91, 0x6c, 0xf1, 0xa3, 0xea, - 0x52, 0xf2, 0x14, 0x9c, 0xe5, 0x62, 0xbe, 0x27, 0x24, 0x84, 0x17, 0x82, 0x61, 0xfe, 0x18, 0x53, - 0xcf, 0x4b, 0x9f, 0xe5, 0x15, 0x2e, 0x2b, 0x2d, 0x2f, 0x0c, 0xf5, 0xe8, 0x18, 0x9e, 0x82, 0x9c, - 0xae, 0x7f, 0x2b, 0x3f, 0xab, 0xfa, 0xb7, 0xa5, 0x23, 0x59, 0x97, 0x7b, 0x6a, 0x49, 0xef, 0x83, - 0x6c, 0x99, 0xfd, 0x3b, 0x23, 0xfe, 0x87, 0x2a, 0x71, 0xe5, 0x6f, 0xba, 0x9c, 0xf8, 0x37, 0x0b, - 0xb0, 0x38, 0x6c, 0x59, 0x86, 0xf4, 0xa2, 0x99, 0xed, 0xc5, 0x78, 0x71, 0x5b, 0xda, 0xc6, 0xfc, - 0x5b, 0x31, 0x15, 0x25, 0x46, 0x34, 0xf8, 0xe9, 0x13, 0xf2, 0x48, 0x4f, 0xc8, 0x99, 0x9f, 0x4a, - 0x17, 0x9f, 0xe3, 0x4f, 0xa5, 0x4b, 0x23, 0xfc, 0x54, 0x7a, 0xfa, 0x79, 0xfe, 0x54, 0xba, 0x7c, - 0xc6, 0x9f, 0x4a, 0x57, 0x9e, 0xfd, 0x4f, 0xa5, 0x3f, 0x2d, 0xc0, 0x42, 0xbe, 0x72, 0xfb, 0x39, - 0x64, 0xcb, 0x3a, 0x99, 0x6c, 0xd9, 0xd6, 0x58, 0xc6, 0x5c, 0x57, 0x8b, 0x9f, 0x92, 0x35, 0x33, - 0x7f, 0x5c, 0x80, 0x81, 0xea, 0xf4, 0xe7, 0x90, 0xd0, 0x7a, 0x94, 0x4d, 0x68, 0x6d, 0x9c, 0xcb, - 0x20, 0x4f, 0x49, 0x6c, 0xfd, 0xf7, 0x90, 0x21, 0xfe, 0x9f, 0x24, 0xb8, 0x32, 0xa6, 0x6d, 0xe2, - 0xd9, 0x9b, 0xb6, 0xfa, 0xca, 0xc7, 0x9f, 0x2e, 0x5f, 0xf8, 0xe4, 0xd3, 0xe5, 0x0b, 0x3f, 0xfa, - 0x74, 0xf9, 0xc2, 0x47, 0x27, 0xcb, 0x85, 0x8f, 0x4f, 0x96, 0x0b, 0x9f, 0x9c, 0x2c, 0x17, 0x7e, - 0x74, 0xb2, 0x5c, 0xf8, 0xf1, 0xc9, 0x72, 0xe1, 0x0f, 0xff, 0x79, 0xf9, 0xc2, 0xaf, 0x94, 0x63, - 0xdc, 0xff, 0x0d, 0x00, 0x00, 0xff, 0xff, 0x4a, 0x1b, 0x70, 0xfc, 0xe9, 0x4d, 0x00, 0x00, + // 5049 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xec, 0x5c, 0x4d, 0x6c, 0x64, 0x57, + 0x56, 0xee, 0xb2, 0x5d, 0xe5, 0xaa, 0x53, 0x76, 0xdb, 0x7d, 0xfb, 0xaf, 0xe2, 0x74, 0x5c, 0x3d, + 0x2f, 0x24, 0xf4, 0x40, 0x52, 0x9e, 0x74, 0xcf, 0x40, 0x26, 0x43, 0x92, 0x71, 0xf9, 0xa7, 0xdb, + 0xed, 0xb6, 0xdb, 0x9c, 0x72, 0x77, 0x33, 0x24, 0x9a, 0xe1, 0xf9, 0xbd, 0x5b, 0x55, 0xaf, 0x5d, + 0xf5, 0x5e, 0xe5, 0xdd, 0x57, 0xed, 0x58, 0x41, 0x22, 0x20, 0x10, 0x20, 0x34, 0x12, 0x6c, 0x86, + 0x11, 0xb3, 0x41, 0x2c, 0x60, 0xc3, 0x86, 0x2d, 0x8b, 0x41, 0x42, 0x2c, 0xa2, 0xd9, 0x10, 0xb1, + 0x21, 0x0b, 0x64, 0x4d, 0x8c, 0x84, 0x40, 0x20, 0x21, 0xb1, 0x41, 0x78, 0x85, 0xee, 0xcf, 0xbb, + 0xef, 0xa7, 0x9e, 0x3b, 0x76, 0x95, 0xbb, 0x11, 0x9a, 0x59, 0xb5, 0xeb, 0x9c, 0x73, 0xbf, 0x73, + 0x7f, 0xcf, 0x3d, 0xe7, 0xdc, 0xf3, 0x1a, 0x96, 0x5a, 0x4e, 0xd0, 0xee, 0xef, 0xd4, 0x2c, 0xaf, + 0xbb, 0x60, 0xfa, 0x2d, 0xaf, 0xe7, 0x7b, 0x8f, 0xc5, 0x1f, 0x0b, 0xbd, 0xdd, 0xd6, 0x82, 0xd9, + 0x73, 0xd8, 0xc2, 0x9e, 0xe7, 0xef, 0x36, 0x3b, 0xde, 0xde, 0xc2, 0x93, 0x37, 0xcc, 0x4e, 0xaf, + 0x6d, 0xbe, 0xb1, 0xd0, 0xa2, 0x2e, 0xf5, 0xcd, 0x80, 0xda, 0xb5, 0x9e, 0xef, 0x05, 0x1e, 0xb9, + 0x15, 0x81, 0xd4, 0x42, 0x10, 0xf1, 0x47, 0xad, 0xb7, 0xdb, 0xaa, 0x71, 0x90, 0x5a, 0x08, 0x52, + 0x0b, 0x41, 0xe6, 0x5e, 0x8f, 0x69, 0x6e, 0x79, 0x5c, 0x21, 0xc7, 0xda, 0xe9, 0x37, 0xc5, 0x2f, + 0xf1, 0x43, 0xfc, 0x25, 0x75, 0xcc, 0x19, 0xbb, 0x6f, 0xb2, 0x9a, 0xe3, 0xf1, 0x2e, 0x2d, 0x58, + 0x9e, 0x4f, 0x17, 0x9e, 0x0c, 0xf4, 0x63, 0xee, 0xab, 0x91, 0x4c, 0xd7, 0xb4, 0xda, 0x8e, 0x4b, + 0xfd, 0xfd, 0x68, 0x1c, 0x5d, 0x1a, 0x98, 0x59, 0xad, 0x16, 0x8e, 0x6b, 0xe5, 0xf7, 0xdd, 0xc0, + 0xe9, 0xd2, 0x81, 0x06, 0xbf, 0xf0, 0x45, 0x0d, 0x98, 0xd5, 0xa6, 0x5d, 0x33, 0xdd, 0xce, 0xf8, + 0xfb, 0x1c, 0xcc, 0x2c, 0xfa, 0x56, 0xdb, 0x79, 0x42, 0x1b, 0x01, 0x67, 0xb4, 0xf6, 0xc9, 0x7b, + 0x30, 0x1e, 0x98, 0x7e, 0x25, 0x77, 0x3d, 0x77, 0xa3, 0x7c, 0xf3, 0x9b, 0xb5, 0x21, 0x26, 0xb2, + 0xb6, 0x6d, 0xfa, 0x21, 0x5c, 0x7d, 0xf2, 0xf0, 0xa0, 0x3a, 0xbe, 0x6d, 0xfa, 0xc8, 0x51, 0xc9, + 0x77, 0x60, 0xc2, 0xf5, 0x5c, 0x5a, 0x19, 0x13, 0xe8, 0x8b, 0x43, 0xa1, 0x6f, 0x7a, 0xae, 0xee, + 0x6d, 0xbd, 0x78, 0x78, 0x50, 0x9d, 0xe0, 0x14, 0x14, 0xc0, 0xc6, 0x7f, 0xe6, 0xa0, 0xb4, 0xe8, + 0xb7, 0xfa, 0x5d, 0xea, 0x06, 0x8c, 0xf8, 0x00, 0x3d, 0xd3, 0x37, 0xbb, 0x34, 0xa0, 0x3e, 0xab, + 0xe4, 0xae, 0x8f, 0xdf, 0x28, 0xdf, 0x7c, 0x67, 0x28, 0xa5, 0x5b, 0x21, 0x4c, 0x9d, 0x7c, 0x72, + 0x50, 0x3d, 0x77, 0x78, 0x50, 0x05, 0x4d, 0x62, 0x18, 0xd3, 0x42, 0x5c, 0x28, 0x99, 0x7e, 0xe0, + 0x34, 0x4d, 0x2b, 0x60, 0x95, 0x31, 0xa1, 0xf2, 0xed, 0xa1, 0x54, 0x2e, 0x2a, 0x94, 0xfa, 0x05, + 0xa5, 0xb1, 0x14, 0x52, 0x18, 0x46, 0x2a, 0x8c, 0x7f, 0x1f, 0x87, 0x62, 0xc8, 0x20, 0xd7, 0x61, + 0xc2, 0x35, 0xbb, 0x54, 0xac, 0x5e, 0xa9, 0x3e, 0xa5, 0x1a, 0x4e, 0x6c, 0x9a, 0x5d, 0x3e, 0x41, + 0x66, 0x97, 0x72, 0x89, 0x9e, 0x19, 0xb4, 0xc5, 0x0a, 0xc4, 0x24, 0xb6, 0xcc, 0xa0, 0x8d, 0x82, + 0x43, 0xae, 0xc1, 0x44, 0xd7, 0xb3, 0x69, 0x65, 0xfc, 0x7a, 0xee, 0x46, 0x5e, 0x4e, 0xf0, 0x86, + 0x67, 0x53, 0x14, 0x54, 0xde, 0xbe, 0xe9, 0x7b, 0xdd, 0xca, 0x44, 0xb2, 0xfd, 0xaa, 0xef, 0x75, + 0x51, 0x70, 0xc8, 0x1f, 0xe4, 0x60, 0x36, 0xec, 0xde, 0x3d, 0xcf, 0x32, 0x03, 0xc7, 0x73, 0x2b, + 0x79, 0xb1, 0xe0, 0x2b, 0x23, 0x4d, 0x44, 0x08, 0x56, 0xaf, 0x28, 0xad, 0xb3, 0x69, 0x0e, 0x0e, + 0x28, 0x26, 0x37, 0x01, 0x5a, 0x1d, 0x6f, 0xc7, 0xec, 0xf0, 0x39, 0xa8, 0x14, 0x44, 0xaf, 0xf5, + 0x12, 0xde, 0xd6, 0x1c, 0x8c, 0x49, 0x91, 0x5d, 0x98, 0x34, 0xe5, 0xa9, 0xa8, 0x4c, 0x8a, 0x7e, + 0x2f, 0x0f, 0xd9, 0xef, 0xc4, 0xc9, 0xaa, 0x97, 0x0f, 0x0f, 0xaa, 0x93, 0x8a, 0x88, 0xa1, 0x06, + 0xf2, 0x1a, 0x14, 0xbd, 0x1e, 0xef, 0xaa, 0xd9, 0xa9, 0x14, 0xaf, 0xe7, 0x6e, 0x14, 0xeb, 0xb3, + 0xaa, 0x7b, 0xc5, 0xfb, 0x8a, 0x8e, 0x5a, 0xc2, 0xf8, 0xe3, 0x3c, 0x0c, 0x8c, 0x9a, 0xbc, 0x01, + 0x65, 0x85, 0x76, 0xcf, 0x6b, 0x31, 0xb1, 0xf8, 0xc5, 0xfa, 0xcc, 0xe1, 0x41, 0xb5, 0xbc, 0x18, + 0x91, 0x31, 0x2e, 0x43, 0x1e, 0xc1, 0x18, 0xbb, 0xa5, 0x8e, 0xe1, 0xbb, 0x43, 0x8d, 0xae, 0x71, + 0x4b, 0x6f, 0xd0, 0xc2, 0xe1, 0x41, 0x75, 0xac, 0x71, 0x0b, 0xc7, 0xd8, 0x2d, 0x6e, 0x3e, 0x5a, + 0x4e, 0x20, 0x36, 0xcf, 0xb0, 0xe6, 0xe3, 0xb6, 0x13, 0x68, 0x68, 0x61, 0x3e, 0x6e, 0x3b, 0x01, + 0x72, 0x54, 0x6e, 0x3e, 0xda, 0x41, 0xd0, 0x13, 0x9b, 0x6f, 0x58, 0xf3, 0x71, 0x67, 0x7b, 0x7b, + 0x4b, 0xc3, 0x8b, 0xdd, 0xcd, 0x29, 0x28, 0x80, 0xc9, 0x47, 0x7c, 0x26, 0x25, 0xcf, 0xf3, 0xf7, + 0xd5, 0xae, 0xbd, 0x33, 0xd2, 0xae, 0xf5, 0xfc, 0x7d, 0xad, 0x4e, 0xad, 0x89, 0x66, 0x60, 0x5c, + 0x9b, 0x18, 0x9d, 0xdd, 0x64, 0x62, 0x93, 0x0e, 0x3d, 0xba, 0xe5, 0xd5, 0x46, 0x6a, 0x74, 0xcb, + 0xab, 0x0d, 0x14, 0xc0, 0x7c, 0x6d, 0x7c, 0x73, 0x4f, 0xed, 0xe9, 0xe1, 0xd6, 0x06, 0xcd, 0xbd, + 0xe4, 0xda, 0xa0, 0xb9, 0x87, 0x1c, 0xd5, 0x68, 0xc1, 0xe5, 0x90, 0x83, 0xb4, 0xe7, 0x31, 0x47, + 0x0c, 0x90, 0x36, 0xc9, 0x02, 0x94, 0x2c, 0xcf, 0x6d, 0x3a, 0xad, 0x0d, 0xb3, 0xa7, 0x0c, 0x93, + 0xb6, 0x68, 0x4b, 0x21, 0x03, 0x23, 0x19, 0xf2, 0x12, 0x8c, 0xef, 0xd2, 0x7d, 0x65, 0xa1, 0xca, + 0x4a, 0x74, 0x7c, 0x9d, 0xee, 0x23, 0xa7, 0x1b, 0x3f, 0xcc, 0xc1, 0xc5, 0x8c, 0xc9, 0xe5, 0xcd, + 0xfa, 0x7e, 0x47, 0x69, 0xd0, 0xcd, 0x1e, 0xe0, 0x3d, 0xe4, 0x74, 0xf2, 0xbb, 0x39, 0x98, 0x89, + 0xcd, 0xf6, 0x62, 0x5f, 0x19, 0xc1, 0xe1, 0x4f, 0x77, 0x02, 0xab, 0x7e, 0x55, 0x69, 0x9c, 0x49, + 0x31, 0x30, 0xad, 0xd5, 0xf8, 0x47, 0x71, 0xeb, 0x26, 0x68, 0xc4, 0x84, 0xf3, 0x7d, 0x46, 0x7d, + 0x6e, 0xa2, 0x1b, 0xd4, 0xf2, 0x69, 0xa0, 0x2e, 0xe0, 0x57, 0x6a, 0xf2, 0x6a, 0xe7, 0xbd, 0xa8, + 0x71, 0x2f, 0xa3, 0xf6, 0xe4, 0x8d, 0x9a, 0x94, 0x58, 0xa7, 0xfb, 0x0d, 0xda, 0xa1, 0x1c, 0xa3, + 0x4e, 0x0e, 0x0f, 0xaa, 0xe7, 0x1f, 0x24, 0x00, 0x30, 0x05, 0xc8, 0x55, 0xf4, 0x4c, 0xc6, 0xf6, + 0x3c, 0xdf, 0x56, 0x2a, 0xc6, 0x4e, 0xad, 0x62, 0x2b, 0x01, 0x80, 0x29, 0x40, 0xe3, 0x7b, 0x39, + 0x98, 0xac, 0x9b, 0xd6, 0xae, 0xd7, 0x6c, 0x72, 0xbb, 0x66, 0xf7, 0x7d, 0x69, 0xfd, 0xe5, 0x9a, + 0x68, 0xbb, 0xb6, 0xac, 0xe8, 0xa8, 0x25, 0xc8, 0xab, 0x50, 0x90, 0xd3, 0x21, 0x3a, 0x95, 0xaf, + 0x9f, 0x57, 0xb2, 0x85, 0x55, 0x41, 0x45, 0xc5, 0x25, 0x5f, 0x83, 0x72, 0xd7, 0xfc, 0x30, 0x04, + 0x10, 0x66, 0xa6, 0x54, 0xbf, 0xa8, 0x84, 0xcb, 0x1b, 0x11, 0x0b, 0xe3, 0x72, 0xc6, 0xb7, 0x00, + 0x96, 0x3c, 0x37, 0x70, 0xdc, 0x3e, 0xbd, 0xef, 0x92, 0x97, 0x21, 0x4f, 0x7d, 0xdf, 0xf3, 0x95, + 0xa5, 0x9c, 0x56, 0xcd, 0xf3, 0x2b, 0x9c, 0x88, 0x92, 0x27, 0x7b, 0xe4, 0x74, 0xa8, 0x2d, 0x7a, + 0x54, 0x8c, 0xf7, 0x88, 0x53, 0x51, 0x71, 0x8d, 0x1f, 0x8d, 0xc1, 0xd4, 0x92, 0xef, 0xb9, 0x8f, + 0xd4, 0x0e, 0x21, 0xbf, 0x06, 0x45, 0xee, 0xd8, 0xd9, 0x66, 0x60, 0xaa, 0x45, 0xfc, 0x4a, 0x6c, + 0x86, 0xb5, 0x7f, 0x16, 0xed, 0x2d, 0x2e, 0xcd, 0xe7, 0xfc, 0xfe, 0xce, 0x63, 0x6a, 0x05, 0x1b, + 0x34, 0x30, 0xa3, 0x1b, 0x2a, 0xa2, 0xa1, 0x46, 0x25, 0x2d, 0x98, 0x60, 0x3d, 0x6a, 0xa9, 0xf5, + 0x1b, 0xee, 0x52, 0x8d, 0x77, 0xb9, 0xd1, 0xa3, 0x56, 0x74, 0x95, 0xf3, 0x5f, 0x28, 0x14, 0x10, + 0x0f, 0x0a, 0x2c, 0x30, 0x83, 0x3e, 0x53, 0xf6, 0xfc, 0xf6, 0xe8, 0xaa, 0x04, 0x5c, 0x34, 0x99, + 0xf2, 0x37, 0x2a, 0x35, 0xc6, 0x67, 0x39, 0x98, 0x8d, 0x8b, 0xdf, 0x73, 0x58, 0x40, 0xde, 0x1f, + 0x98, 0xd0, 0xda, 0xc9, 0x26, 0x94, 0xb7, 0x16, 0xd3, 0xa9, 0x77, 0x5e, 0x48, 0x89, 0x4d, 0x66, + 0x13, 0xf2, 0x4e, 0x40, 0xbb, 0xa1, 0xaf, 0xb6, 0x38, 0xf2, 0x10, 0xa3, 0xfd, 0xb4, 0xc6, 0x71, + 0x51, 0xc2, 0x1b, 0x87, 0x13, 0xc9, 0xa1, 0xf1, 0x69, 0xe6, 0xbe, 0xd2, 0xd4, 0x5e, 0x8c, 0xa0, + 0xc6, 0x37, 0x5c, 0x27, 0x12, 0xcb, 0xf9, 0x33, 0xaa, 0x13, 0x53, 0x71, 0xea, 0x51, 0xea, 0x37, + 0x26, 0x94, 0xf3, 0x23, 0xcb, 0x03, 0x05, 0xbb, 0xdf, 0xa1, 0xca, 0xfa, 0xea, 0x89, 0x6b, 0x28, + 0x3a, 0x6a, 0x09, 0xf2, 0x3e, 0x5c, 0xb0, 0x3c, 0xd7, 0xea, 0xfb, 0x3e, 0x75, 0xad, 0xfd, 0x2d, + 0xaf, 0xe3, 0x58, 0xfb, 0xea, 0x40, 0xd6, 0x54, 0xb3, 0x0b, 0x4b, 0x69, 0x81, 0xa3, 0x2c, 0x22, + 0x0e, 0x02, 0x91, 0x2f, 0xc3, 0x24, 0xeb, 0xb3, 0x1e, 0x75, 0x6d, 0x71, 0xdb, 0x17, 0xeb, 0x33, + 0x0a, 0x73, 0xb2, 0x21, 0xc9, 0x18, 0xf2, 0xc9, 0x03, 0xb8, 0xca, 0x02, 0x6e, 0x64, 0xdd, 0xd6, + 0x32, 0x35, 0xed, 0x8e, 0xe3, 0x72, 0x93, 0xe7, 0xb9, 0x36, 0x13, 0x17, 0xf8, 0x78, 0xfd, 0xc5, + 0xc3, 0x83, 0xea, 0xd5, 0x46, 0xb6, 0x08, 0x1e, 0xd7, 0x96, 0x7c, 0x1b, 0xe6, 0x58, 0xdf, 0xb2, + 0x28, 0x63, 0xcd, 0x7e, 0xe7, 0xae, 0xb7, 0xc3, 0xee, 0x38, 0x8c, 0xdb, 0xeb, 0x7b, 0x4e, 0xd7, + 0x09, 0xc4, 0x25, 0x9d, 0xaf, 0xcf, 0x1f, 0x1e, 0x54, 0xe7, 0x1a, 0xc7, 0x4a, 0xe1, 0x53, 0x10, + 0x08, 0xc2, 0x15, 0x69, 0x42, 0x06, 0xb0, 0x27, 0x05, 0xf6, 0xdc, 0xe1, 0x41, 0xf5, 0xca, 0x6a, + 0xa6, 0x04, 0x1e, 0xd3, 0xd2, 0xf8, 0x87, 0x1c, 0x90, 0xc1, 0xe3, 0x46, 0xd6, 0xa1, 0x60, 0x5a, + 0x01, 0xf7, 0x67, 0x65, 0x0c, 0xf4, 0x72, 0x96, 0xc9, 0x97, 0xa6, 0x06, 0x69, 0x93, 0xf2, 0x75, + 0xa0, 0xd1, 0x19, 0x5d, 0x14, 0x4d, 0x51, 0x41, 0x10, 0x0f, 0x2e, 0x74, 0x4c, 0x16, 0x84, 0x3b, + 0xc2, 0xde, 0x76, 0xba, 0x61, 0x40, 0xf7, 0x73, 0x27, 0x3b, 0x97, 0xbc, 0x45, 0xfd, 0x32, 0xdf, + 0x1f, 0xf7, 0xd2, 0x40, 0x38, 0x88, 0x6d, 0xfc, 0x49, 0x01, 0x26, 0x97, 0x17, 0x6f, 0x6f, 0x9b, + 0x6c, 0xf7, 0x04, 0x01, 0xce, 0x6b, 0x50, 0x0c, 0x68, 0xb7, 0xd7, 0x31, 0x83, 0x81, 0x4d, 0xbc, + 0xad, 0xe8, 0xa8, 0x25, 0x88, 0xc7, 0xa3, 0x35, 0x15, 0x2e, 0x2a, 0x23, 0xf7, 0xce, 0x90, 0xee, + 0x80, 0x42, 0x89, 0x87, 0x6b, 0x8a, 0x84, 0x91, 0x0e, 0xc2, 0xa0, 0x1c, 0x2a, 0x47, 0xda, 0x54, + 0x9e, 0xec, 0x90, 0x61, 0x76, 0x84, 0x23, 0x3d, 0xcb, 0x18, 0x01, 0xe3, 0x5a, 0xc8, 0x57, 0x61, + 0xca, 0xa6, 0xfc, 0xac, 0x50, 0xd7, 0x72, 0x28, 0x3f, 0x16, 0xe3, 0x7c, 0x5e, 0xb8, 0x79, 0x58, + 0x8e, 0xd1, 0x31, 0x21, 0x45, 0x1e, 0x43, 0x69, 0xcf, 0x09, 0xda, 0xc2, 0x8a, 0x55, 0x0a, 0x62, + 0xe3, 0x7c, 0x7d, 0xa8, 0x8e, 0x72, 0x84, 0x68, 0x5a, 0x1e, 0x85, 0x98, 0x18, 0xc1, 0x73, 0x27, + 0x91, 0xff, 0x10, 0x31, 0xb5, 0xd8, 0xff, 0xa5, 0x64, 0x03, 0xc1, 0xc0, 0x48, 0x86, 0x30, 0x98, + 0xe2, 0x3f, 0x1a, 0xf4, 0x83, 0x3e, 0xdf, 0xad, 0x22, 0x74, 0x1a, 0x36, 0xd2, 0x0e, 0x41, 0xe4, + 0x8c, 0x3c, 0x8a, 0xc1, 0x62, 0x42, 0x09, 0xdf, 0x7d, 0x7b, 0x6d, 0xea, 0x56, 0x4a, 0xc9, 0xdd, + 0xf7, 0xa8, 0x4d, 0x5d, 0x14, 0x1c, 0xe2, 0x01, 0x58, 0xda, 0xd1, 0xa8, 0xc0, 0x08, 0xf1, 0x55, + 0xe4, 0xaf, 0xd4, 0xcf, 0x73, 0x4f, 0x20, 0xfa, 0x8d, 0x31, 0x15, 0xc6, 0xdf, 0xe6, 0xa0, 0xcc, + 0x0f, 0x47, 0xb8, 0xa1, 0x5f, 0x85, 0x42, 0x60, 0xfa, 0x2d, 0xe5, 0x40, 0x96, 0xa2, 0x53, 0xbc, + 0x2d, 0xa8, 0xa8, 0xb8, 0xc4, 0x84, 0x7c, 0x60, 0xb2, 0xdd, 0xf0, 0xda, 0xfb, 0xa5, 0xa1, 0xfa, + 0xa8, 0x4e, 0x65, 0x74, 0xe3, 0xf1, 0x5f, 0x0c, 0x25, 0x32, 0xb9, 0x01, 0x45, 0x6e, 0xa6, 0x56, + 0x4d, 0x26, 0xe3, 0xc1, 0x62, 0x7d, 0x8a, 0x9f, 0xc2, 0x55, 0x45, 0x43, 0xcd, 0x35, 0xde, 0x87, + 0xf3, 0x2b, 0x1f, 0x52, 0xab, 0x1f, 0x78, 0xbe, 0x8c, 0x08, 0xc8, 0x5d, 0x20, 0x8c, 0xfa, 0x4f, + 0x1c, 0x8b, 0x2e, 0x5a, 0x96, 0xd7, 0x77, 0x83, 0xcd, 0xe8, 0xd4, 0xcf, 0x29, 0x6d, 0xa4, 0x31, + 0x20, 0x81, 0x19, 0xad, 0x8c, 0xbf, 0x9c, 0x80, 0x72, 0x2c, 0xa6, 0xe4, 0xab, 0xe8, 0xd3, 0x9e, + 0x97, 0xb6, 0x21, 0x3c, 0x6a, 0x41, 0xc1, 0xe1, 0x36, 0xc4, 0xa7, 0x4f, 0x1c, 0xc6, 0x5d, 0xcc, + 0x94, 0x0d, 0x41, 0x45, 0x47, 0x2d, 0x41, 0xaa, 0x90, 0xb7, 0x69, 0x2f, 0x68, 0x8b, 0x41, 0x4e, + 0xd4, 0x4b, 0x7c, 0x22, 0x96, 0x39, 0x01, 0x25, 0x9d, 0x0b, 0x34, 0x69, 0x60, 0xb5, 0x2b, 0x13, + 0xe2, 0xdc, 0x09, 0x81, 0x55, 0x4e, 0x40, 0x49, 0xcf, 0xf0, 0xfe, 0xf3, 0xcf, 0xde, 0xfb, 0x2f, + 0x9c, 0xb1, 0xf7, 0x4f, 0x7a, 0x70, 0x91, 0xb1, 0xf6, 0x96, 0xef, 0x3c, 0x31, 0x03, 0x2a, 0x1a, + 0x0b, 0x3d, 0x93, 0xa7, 0xd1, 0x73, 0xf5, 0xf0, 0xa0, 0x7a, 0xb1, 0xd1, 0xb8, 0x93, 0x46, 0xc1, + 0x2c, 0x68, 0xd2, 0x80, 0xcb, 0x8e, 0xcb, 0xa8, 0xd5, 0xf7, 0xe9, 0x5a, 0xcb, 0xf5, 0x7c, 0x7a, + 0xc7, 0x63, 0x1c, 0x4e, 0x25, 0x52, 0x5e, 0x52, 0x8b, 0x76, 0x79, 0x2d, 0x4b, 0x08, 0xb3, 0xdb, + 0x1a, 0x3f, 0xca, 0xc1, 0x54, 0x3c, 0x8c, 0x26, 0x0c, 0xa0, 0xbd, 0xbc, 0xda, 0x90, 0x3b, 0x53, + 0x79, 0x68, 0xef, 0x0e, 0x1d, 0x9d, 0x4b, 0x98, 0xc8, 0xc3, 0x8f, 0x68, 0x18, 0x53, 0x73, 0x82, + 0x3c, 0xdd, 0xcb, 0x90, 0x6f, 0x7a, 0xbe, 0x45, 0xd5, 0xd9, 0xd2, 0x67, 0x70, 0x95, 0x13, 0x51, + 0xf2, 0x8c, 0x7f, 0xcd, 0x41, 0x4c, 0x03, 0xf9, 0x0d, 0x98, 0xe6, 0x3a, 0xd6, 0xfd, 0x9d, 0xc4, + 0x68, 0xea, 0x43, 0x8f, 0x46, 0x23, 0xd5, 0x2f, 0x2b, 0xfd, 0xd3, 0x09, 0x32, 0x26, 0xf5, 0x91, + 0x9f, 0x87, 0x92, 0x69, 0xdb, 0x3e, 0x65, 0x8c, 0x4a, 0xd3, 0x53, 0xaa, 0x4f, 0x8b, 0xbb, 0x32, + 0x24, 0x62, 0xc4, 0xe7, 0xc7, 0xb0, 0x6d, 0x37, 0x19, 0xdf, 0xd9, 0xca, 0xb1, 0xd4, 0xc7, 0x90, + 0x2b, 0xe1, 0x74, 0xd4, 0x12, 0xc6, 0x77, 0x27, 0x20, 0xa9, 0x9b, 0xd8, 0x30, 0xb3, 0xeb, 0xef, + 0x2c, 0x2d, 0x99, 0x56, 0x7b, 0xa8, 0xa8, 0xfa, 0x22, 0x0f, 0xe7, 0xd7, 0x93, 0x08, 0x98, 0x86, + 0x54, 0x5a, 0xd6, 0xe9, 0x7e, 0x60, 0xee, 0x0c, 0x13, 0x58, 0x87, 0x5a, 0xe2, 0x08, 0x98, 0x86, + 0xe4, 0x81, 0xef, 0xae, 0xbf, 0x13, 0x1e, 0xf2, 0x74, 0xe0, 0xbb, 0x1e, 0xb1, 0x30, 0x2e, 0xc7, + 0xa7, 0x70, 0xd7, 0xdf, 0x41, 0x6a, 0x76, 0xc2, 0x94, 0xad, 0x9e, 0xc2, 0x75, 0x45, 0x47, 0x2d, + 0x41, 0x7a, 0x40, 0x76, 0xc3, 0xd9, 0xd3, 0xa9, 0x19, 0x65, 0x8b, 0x6e, 0x64, 0x8d, 0x46, 0x0b, + 0xc5, 0x07, 0x74, 0x85, 0xdb, 0xe6, 0xf5, 0x01, 0x1c, 0xcc, 0xc0, 0x26, 0xdf, 0x82, 0xab, 0xbb, + 0xfe, 0x8e, 0x32, 0xe4, 0x5b, 0xbe, 0xe3, 0x5a, 0x4e, 0x2f, 0x91, 0xab, 0xad, 0xaa, 0xee, 0x5e, + 0x5d, 0xcf, 0x16, 0xc3, 0xe3, 0xda, 0x1b, 0xaf, 0xc3, 0x54, 0x3c, 0xd7, 0xf7, 0x05, 0xf9, 0x21, + 0xe3, 0x3f, 0x72, 0x50, 0x58, 0x73, 0x7b, 0xfd, 0x9f, 0x90, 0x67, 0x83, 0x3f, 0x9b, 0x80, 0x09, + 0xee, 0x7a, 0x91, 0x1b, 0x30, 0x11, 0xec, 0xf7, 0xe4, 0xdd, 0x3a, 0x5e, 0xbf, 0x14, 0x1a, 0x9a, + 0xed, 0xfd, 0x1e, 0x3d, 0x52, 0xff, 0xa2, 0x90, 0x20, 0xef, 0x40, 0xc1, 0xed, 0x77, 0x1f, 0x9a, + 0x1d, 0x65, 0x94, 0x5e, 0x0d, 0x5d, 0x8b, 0x4d, 0x41, 0x3d, 0x3a, 0xa8, 0x5e, 0xa2, 0xae, 0xe5, + 0xd9, 0x8e, 0xdb, 0x5a, 0x78, 0xcc, 0x3c, 0xb7, 0xb6, 0xd9, 0xef, 0xee, 0x50, 0x1f, 0x55, 0x2b, + 0x1e, 0xd2, 0xed, 0x78, 0x5e, 0x87, 0x03, 0x8c, 0x27, 0x43, 0xba, 0xba, 0x24, 0x63, 0xc8, 0xe7, + 0x5e, 0x0c, 0x0b, 0x7c, 0x2e, 0x39, 0x91, 0xf4, 0x62, 0x1a, 0x82, 0x8a, 0x8a, 0x4b, 0xba, 0x50, + 0xe8, 0x9a, 0x3d, 0x2e, 0x97, 0x17, 0x53, 0xb6, 0x32, 0xb4, 0x7f, 0x5a, 0xdb, 0x10, 0x38, 0x2b, + 0x6e, 0xe0, 0xef, 0x47, 0xea, 0x24, 0x11, 0x95, 0x12, 0xe2, 0xc0, 0x64, 0xc7, 0x61, 0x01, 0xd7, + 0x57, 0x18, 0x61, 0x57, 0x70, 0x7d, 0x0f, 0xcd, 0x4e, 0x9f, 0x46, 0x33, 0x70, 0x4f, 0xc2, 0x62, + 0x88, 0x3f, 0xb7, 0x0f, 0xe5, 0x58, 0x8f, 0xc8, 0xac, 0xcc, 0x89, 0x8a, 0xcd, 0x2b, 0xd2, 0xa0, + 0x64, 0x1b, 0xf2, 0x4f, 0x38, 0x86, 0x32, 0x36, 0x23, 0xf6, 0x04, 0x25, 0xd8, 0x5b, 0x63, 0x6f, + 0xe6, 0xde, 0x2a, 0x7e, 0xff, 0x4f, 0xab, 0xe7, 0x3e, 0xfe, 0xa7, 0xeb, 0xe7, 0x8c, 0xbf, 0x1b, + 0x87, 0x92, 0x16, 0xf9, 0xff, 0xbd, 0x53, 0xfc, 0xd4, 0x4e, 0xb9, 0x3b, 0xda, 0x7c, 0x9d, 0x68, + 0xbb, 0x2c, 0x26, 0xb7, 0xcb, 0x54, 0xfd, 0x67, 0x63, 0x4b, 0x7d, 0x74, 0x50, 0xad, 0x24, 0x27, + 0x01, 0xcd, 0xbd, 0x0d, 0xca, 0x98, 0xd9, 0xa2, 0xd1, 0x36, 0xf8, 0xfa, 0x17, 0x6d, 0x83, 0x4b, + 0xf1, 0x6d, 0x50, 0xca, 0x5e, 0xc6, 0x8f, 0xc7, 0xa1, 0xb8, 0x11, 0xe6, 0xbb, 0x7e, 0x27, 0x07, + 0x65, 0xd3, 0x75, 0xbd, 0x40, 0x64, 0x46, 0x43, 0xf3, 0xb6, 0x39, 0xd4, 0x74, 0x84, 0xa0, 0xb5, + 0xc5, 0x08, 0x50, 0x4e, 0x89, 0xbe, 0x99, 0x62, 0x1c, 0x8c, 0xeb, 0x25, 0x1f, 0x40, 0xa1, 0x63, + 0xee, 0xd0, 0x4e, 0x68, 0xed, 0xd6, 0x46, 0xeb, 0xc1, 0x3d, 0x81, 0x95, 0x5a, 0x0f, 0x49, 0x44, + 0xa5, 0x68, 0xee, 0x1d, 0x98, 0x4d, 0x77, 0xf4, 0x34, 0x33, 0xca, 0x17, 0x23, 0xa6, 0xe6, 0x34, + 0x4d, 0x8d, 0xff, 0x29, 0x01, 0x6c, 0x7a, 0x36, 0x55, 0x09, 0x99, 0x39, 0x18, 0x73, 0x6c, 0x75, + 0x15, 0x81, 0xea, 0xed, 0xd8, 0xda, 0x32, 0x8e, 0x39, 0xb6, 0x4e, 0x71, 0x8c, 0x1d, 0x9b, 0xe2, + 0xf8, 0x1a, 0x94, 0x6d, 0x87, 0xf5, 0x3a, 0xe6, 0xfe, 0x66, 0x86, 0x2f, 0xb0, 0x1c, 0xb1, 0x30, + 0x2e, 0x47, 0x5e, 0x53, 0xe7, 0x57, 0x1e, 0x94, 0x4a, 0xea, 0xfc, 0x16, 0x79, 0xf7, 0x62, 0x67, + 0xf8, 0x4d, 0x98, 0x0a, 0x53, 0x08, 0x42, 0x4b, 0x5e, 0xb4, 0x0a, 0x4f, 0xfd, 0xd4, 0x76, 0x8c, + 0x87, 0x09, 0xc9, 0x74, 0x8a, 0xa3, 0xf0, 0x5c, 0x52, 0x1c, 0xcb, 0x30, 0xcb, 0x02, 0xcf, 0xa7, + 0x76, 0x28, 0xb1, 0xb6, 0x5c, 0x21, 0x89, 0x81, 0xce, 0x36, 0x52, 0x7c, 0x1c, 0x68, 0x41, 0xb6, + 0xe0, 0x52, 0xd8, 0x89, 0xf8, 0x00, 0x2b, 0x17, 0x05, 0xd2, 0x35, 0x85, 0x74, 0xe9, 0x51, 0x86, + 0x0c, 0x66, 0xb6, 0x24, 0xdf, 0x80, 0xe9, 0xb0, 0x9b, 0x0d, 0xcb, 0xeb, 0xd1, 0xca, 0x25, 0x01, + 0xa5, 0xbd, 0xe5, 0xed, 0x38, 0x13, 0x93, 0xb2, 0xe4, 0x2b, 0x90, 0xef, 0xb5, 0x4d, 0x46, 0x55, + 0x46, 0x24, 0x0c, 0x7c, 0xf3, 0x5b, 0x9c, 0x78, 0x74, 0x50, 0x2d, 0xf1, 0x35, 0x13, 0x3f, 0x50, + 0x0a, 0x92, 0x9b, 0x00, 0x3b, 0x5e, 0xdf, 0xb5, 0x4d, 0x7f, 0x7f, 0x6d, 0x59, 0x84, 0x41, 0xb1, + 0xe7, 0xee, 0xba, 0xe6, 0x60, 0x4c, 0x8a, 0x5b, 0xdb, 0xae, 0xb4, 0x3b, 0x2a, 0xb1, 0xa1, 0xad, + 0xad, 0x36, 0x47, 0x8a, 0x4f, 0xde, 0x83, 0x92, 0x48, 0x97, 0x52, 0x7b, 0x31, 0x50, 0xd9, 0x8d, + 0xd3, 0xe4, 0xfc, 0xb4, 0x4b, 0xd2, 0x08, 0x41, 0x30, 0xc2, 0x23, 0xdf, 0x06, 0x68, 0x3a, 0xae, + 0xc3, 0xda, 0x02, 0xbd, 0x7c, 0x6a, 0x74, 0x3d, 0xce, 0x55, 0x8d, 0x82, 0x31, 0x44, 0x1e, 0x30, + 0xf5, 0x3c, 0x7b, 0x6d, 0xab, 0x32, 0x25, 0x46, 0xa9, 0x03, 0xa6, 0x2d, 0x4e, 0x44, 0xc9, 0x23, + 0x37, 0xa0, 0x68, 0x9b, 0xb4, 0xeb, 0xb9, 0xd4, 0xae, 0x4c, 0x47, 0x49, 0x8b, 0x65, 0x45, 0x43, + 0xcd, 0x25, 0xdf, 0x81, 0x82, 0x23, 0xfc, 0xc5, 0xca, 0x79, 0xd1, 0xd5, 0x6f, 0x0c, 0x77, 0xa3, + 0x08, 0x88, 0x3a, 0x70, 0x73, 0x25, 0xff, 0x46, 0x05, 0x4b, 0x2c, 0x98, 0xf4, 0xfa, 0x81, 0xd0, + 0x30, 0x23, 0x34, 0x0c, 0x97, 0xa4, 0xb9, 0x2f, 0x31, 0x64, 0xf9, 0x81, 0xfa, 0x81, 0x21, 0x32, + 0x1f, 0xaf, 0xd5, 0x76, 0x3a, 0xb6, 0x4f, 0xdd, 0xca, 0xac, 0x88, 0xc7, 0xc4, 0x78, 0x97, 0x14, + 0x0d, 0x35, 0x97, 0xfc, 0x22, 0x4c, 0x7b, 0xfd, 0x40, 0xec, 0x1b, 0xbe, 0xed, 0x58, 0xe5, 0x82, + 0x10, 0xbf, 0xc0, 0x77, 0xf1, 0xfd, 0x38, 0x03, 0x93, 0x72, 0xc6, 0x79, 0x98, 0x8a, 0xd7, 0xec, + 0x18, 0x7f, 0x34, 0x06, 0x61, 0x3f, 0x7e, 0x12, 0x5c, 0x6d, 0x62, 0x40, 0xc1, 0xa7, 0xac, 0xdf, + 0x09, 0x94, 0xa5, 0x16, 0x6b, 0x8d, 0x82, 0x82, 0x8a, 0x63, 0xec, 0xc1, 0x34, 0xef, 0x6d, 0xa7, + 0x43, 0x3b, 0x8d, 0x80, 0xf6, 0x18, 0x69, 0x42, 0x9e, 0xf1, 0x3f, 0xd4, 0x9c, 0x8c, 0xf8, 0x22, + 0x14, 0xd0, 0x5e, 0xb4, 0xdf, 0x85, 0x02, 0x94, 0xf0, 0xc6, 0xf7, 0xc6, 0xa0, 0xa4, 0xe7, 0xe9, + 0x04, 0xe9, 0xf5, 0x57, 0x60, 0xd2, 0xa6, 0x4d, 0x93, 0x8f, 0x46, 0x3d, 0xd0, 0xf3, 0x6d, 0xb5, + 0x2c, 0x49, 0x18, 0xf2, 0x48, 0x35, 0xbc, 0x09, 0xe5, 0x90, 0x45, 0xca, 0x2b, 0xee, 0x68, 0x92, + 0x5d, 0x28, 0x89, 0x3f, 0x56, 0xc3, 0x62, 0xa2, 0x61, 0xd7, 0xfd, 0x61, 0x88, 0x22, 0x13, 0x09, + 0xfa, 0x27, 0x46, 0xf8, 0xa9, 0x22, 0xa0, 0xfc, 0x49, 0x8a, 0x80, 0x8c, 0x55, 0xe0, 0x86, 0xe1, + 0xf6, 0x12, 0x79, 0x1b, 0x8a, 0x4c, 0x6d, 0x5d, 0x35, 0x2f, 0x5f, 0xd2, 0xaf, 0x62, 0x8a, 0x7e, + 0x74, 0x50, 0x9d, 0x16, 0xc2, 0x21, 0x01, 0x75, 0x13, 0x63, 0x01, 0xca, 0xb1, 0xa2, 0x09, 0x3e, + 0xc3, 0xfa, 0x21, 0x33, 0x36, 0xc3, 0xcb, 0x66, 0x60, 0xa2, 0xe0, 0x18, 0x47, 0x63, 0x30, 0x8b, + 0x94, 0x79, 0x7d, 0xdf, 0xa2, 0xf1, 0xb4, 0xae, 0x69, 0xc5, 0xde, 0xd2, 0x13, 0x8f, 0x33, 0x9e, + 0x8b, 0x8a, 0xcb, 0xaf, 0x9b, 0x2e, 0xf5, 0x5b, 0xfa, 0xb0, 0xa9, 0x45, 0xd2, 0xd7, 0xcd, 0x46, + 0x9c, 0x89, 0x49, 0x59, 0xf2, 0x1a, 0x14, 0xbb, 0xa6, 0xeb, 0x34, 0x29, 0x0b, 0xd2, 0xf9, 0x96, + 0x0d, 0x45, 0x47, 0x2d, 0x41, 0x6e, 0xc3, 0x05, 0x46, 0x83, 0xfb, 0x7b, 0x2e, 0xf5, 0xf5, 0xa3, + 0x91, 0x7a, 0xab, 0x7b, 0x21, 0x7c, 0xff, 0x6b, 0xa4, 0x05, 0x70, 0xb0, 0x8d, 0xb8, 0xba, 0xe5, + 0x33, 0xd9, 0x92, 0xe7, 0xda, 0x8e, 0xae, 0x17, 0x8b, 0x5f, 0xdd, 0x29, 0x3e, 0x0e, 0xb4, 0xe0, + 0x28, 0x4d, 0xd3, 0xe9, 0xf4, 0x7d, 0x1a, 0xa1, 0x14, 0x92, 0x28, 0xab, 0x29, 0x3e, 0x0e, 0xb4, + 0x30, 0xfe, 0x25, 0x07, 0xd3, 0x48, 0x03, 0x7f, 0x5f, 0x4f, 0x4a, 0x15, 0xf2, 0x1d, 0xf1, 0x2a, + 0x97, 0x13, 0xaf, 0x72, 0x62, 0x27, 0xcb, 0x47, 0x38, 0x49, 0x27, 0xcb, 0x50, 0xf6, 0x79, 0x0b, + 0xf5, 0x02, 0x2a, 0x27, 0xdc, 0x08, 0xbd, 0x31, 0x8c, 0x58, 0x47, 0xc9, 0x9f, 0x18, 0x6f, 0x46, + 0x5c, 0x98, 0xdc, 0x91, 0x95, 0x13, 0xea, 0x19, 0x6a, 0x38, 0x63, 0xaf, 0xaa, 0x2f, 0x44, 0x0e, + 0x26, 0x2c, 0xc5, 0x38, 0x8a, 0xfe, 0xc4, 0x50, 0x89, 0xf1, 0xfd, 0x1c, 0x40, 0x54, 0xc2, 0x45, + 0x76, 0xa1, 0xc8, 0x6e, 0xd5, 0xfb, 0xd6, 0xae, 0xce, 0x91, 0x0d, 0xf9, 0x94, 0xa2, 0x40, 0x62, + 0x2f, 0xc7, 0x8a, 0x82, 0x5a, 0xc1, 0x17, 0x15, 0xf8, 0xfc, 0xd5, 0x38, 0xe8, 0x56, 0x7c, 0x4f, + 0x52, 0xd7, 0xee, 0x79, 0x8e, 0x1b, 0xa4, 0xcb, 0x48, 0x56, 0x14, 0x1d, 0xb5, 0x04, 0x3f, 0x26, + 0x3b, 0x72, 0x10, 0x63, 0xc9, 0x63, 0xa2, 0xfa, 0xa0, 0xb8, 0x5c, 0xce, 0xa7, 0xad, 0xa8, 0x82, + 0x44, 0xcb, 0xa1, 0xa0, 0xa2, 0xe2, 0xf2, 0xdb, 0x31, 0x4c, 0x12, 0xab, 0xad, 0x2d, 0x6e, 0xc7, + 0x30, 0x9f, 0x8c, 0x9a, 0x4b, 0xda, 0x30, 0x63, 0x8a, 0x1d, 0x19, 0x25, 0xbe, 0x4f, 0x95, 0xc3, + 0x8f, 0xca, 0x87, 0x92, 0x28, 0x98, 0x86, 0xe5, 0x9a, 0x58, 0xd4, 0xfc, 0xf4, 0xa9, 0x7c, 0xad, + 0xa9, 0x91, 0x44, 0xc1, 0x34, 0x2c, 0x77, 0x0c, 0x7d, 0xaf, 0x43, 0x17, 0x71, 0x53, 0x39, 0xa0, + 0xda, 0x31, 0x44, 0x49, 0xc6, 0x90, 0x6f, 0xfc, 0x5e, 0x0e, 0xce, 0x37, 0x2c, 0xdf, 0xe9, 0x05, + 0xda, 0x64, 0x6d, 0x8a, 0xba, 0xaf, 0xc0, 0xe4, 0x2e, 0x9b, 0xda, 0x53, 0x2f, 0x1d, 0x93, 0x43, + 0x94, 0x42, 0x89, 0xb2, 0x30, 0x49, 0xc2, 0x08, 0x42, 0x44, 0xfa, 0xc2, 0x28, 0xa6, 0xd7, 0xb6, + 0x21, 0xa8, 0xa8, 0xb8, 0xc6, 0x0f, 0x72, 0x50, 0xd4, 0x2f, 0x76, 0x2f, 0x43, 0x5e, 0x3c, 0x04, + 0xa9, 0xbd, 0xa3, 0xef, 0xc0, 0x25, 0x4e, 0x44, 0xc9, 0xe3, 0x42, 0xc2, 0x0b, 0x55, 0xc0, 0xb1, + 0x8b, 0xd2, 0xf4, 0x03, 0x94, 0x3c, 0xbe, 0x69, 0xa9, 0x6b, 0xab, 0xfd, 0xa2, 0x37, 0xed, 0x8a, + 0x6b, 0x23, 0xa7, 0x8b, 0x72, 0x21, 0xcf, 0xef, 0x9a, 0x41, 0x3a, 0x0f, 0xb1, 0x2a, 0xa8, 0xa8, + 0xb8, 0xc6, 0xbb, 0x30, 0xa3, 0x0a, 0x18, 0xf4, 0x44, 0x9d, 0xaa, 0x52, 0xca, 0x98, 0x86, 0x72, + 0xac, 0xbe, 0xda, 0xf8, 0xaf, 0xab, 0xa0, 0xdf, 0xb5, 0x7f, 0xfa, 0x3a, 0x3e, 0x54, 0xe8, 0x68, + 0x69, 0x47, 0x3e, 0x3f, 0xba, 0x23, 0xaf, 0xd7, 0x3d, 0xe5, 0xcc, 0xb7, 0x22, 0x67, 0xbe, 0x70, + 0x06, 0xce, 0xbc, 0x3e, 0x89, 0x03, 0x0e, 0xfd, 0xef, 0xe7, 0x60, 0xca, 0xf5, 0x6c, 0x1a, 0x9e, + 0xf7, 0xca, 0xa4, 0x70, 0x20, 0xef, 0x8f, 0x34, 0x89, 0xb5, 0xcd, 0x18, 0xa2, 0x4c, 0xb2, 0xe8, + 0x4c, 0x40, 0x9c, 0x85, 0x09, 0xd5, 0x64, 0x15, 0x8a, 0x66, 0x93, 0x47, 0x60, 0xc1, 0xbe, 0x7a, + 0xa0, 0xbf, 0x96, 0x65, 0x01, 0x16, 0x95, 0x8c, 0x34, 0xae, 0xe1, 0x2f, 0xd4, 0x6d, 0xf9, 0xed, + 0xa4, 0x2b, 0xc0, 0x4a, 0x23, 0xdc, 0x4e, 0x61, 0xb6, 0x28, 0xe6, 0xd7, 0x28, 0x4a, 0xac, 0x20, + 0xcc, 0x80, 0x82, 0x8c, 0xf1, 0x44, 0x80, 0x5b, 0x94, 0xee, 0xba, 0x8c, 0xff, 0x50, 0x71, 0x48, + 0x2b, 0xf4, 0xce, 0xcb, 0x62, 0x72, 0xeb, 0x43, 0x47, 0x2c, 0xda, 0xe1, 0xcf, 0x76, 0xcf, 0xc9, + 0xdd, 0xb8, 0x11, 0x9d, 0x3a, 0x89, 0x11, 0x9d, 0x3e, 0xd6, 0x80, 0xb6, 0xa0, 0xc0, 0x84, 0x89, + 0x16, 0x81, 0x6d, 0xf9, 0xe6, 0xd2, 0x70, 0x37, 0x7c, 0xc2, 0xca, 0xcb, 0xd9, 0x91, 0x34, 0x54, + 0xf0, 0xc4, 0x83, 0xa2, 0xaf, 0x1c, 0x58, 0x15, 0x1b, 0x0f, 0x97, 0x97, 0x4f, 0x7b, 0xc1, 0x72, + 0x7f, 0x84, 0x54, 0xd4, 0x4a, 0xc8, 0x7b, 0x30, 0x6e, 0x9b, 0x2d, 0x15, 0x25, 0x7f, 0x73, 0xe8, + 0x52, 0x86, 0x50, 0x8d, 0x28, 0x6c, 0x5e, 0x5e, 0xbc, 0x8d, 0x1c, 0x95, 0xec, 0x46, 0x95, 0x68, + 0xb3, 0x23, 0xd4, 0x0b, 0xa7, 0xac, 0xbe, 0x8c, 0x9b, 0x06, 0x6a, 0xd9, 0x56, 0x60, 0xf2, 0x89, + 0xd7, 0xe9, 0x77, 0x55, 0x78, 0x5d, 0xbe, 0x39, 0x97, 0xb5, 0xda, 0x0f, 0x85, 0x48, 0x64, 0x04, + 0xe4, 0x6f, 0x86, 0x61, 0x5b, 0xf2, 0x5b, 0x39, 0x38, 0xcf, 0x8f, 0x8e, 0xde, 0x07, 0xac, 0x42, + 0x46, 0xd8, 0xa9, 0x0f, 0x18, 0xf5, 0xa3, 0x1d, 0x76, 0x45, 0xa9, 0x3d, 0xbf, 0x96, 0xd0, 0x80, + 0x29, 0x8d, 0xa4, 0x07, 0x45, 0xe6, 0xd8, 0xd4, 0x32, 0x7d, 0x56, 0xb9, 0x78, 0x66, 0xda, 0x23, + 0xc7, 0x52, 0x61, 0xa3, 0xd6, 0x42, 0x7e, 0x5b, 0xd4, 0x78, 0xab, 0xaf, 0x1c, 0xd4, 0x97, 0x27, + 0x97, 0xce, 0xf2, 0xcb, 0x93, 0x8b, 0xb2, 0xc0, 0x3b, 0xa1, 0x01, 0xd3, 0x2a, 0xc9, 0x7d, 0xb8, + 0x2c, 0x6b, 0xe5, 0xd2, 0xe5, 0x88, 0x97, 0xc5, 0xcb, 0xc9, 0x0b, 0x87, 0x07, 0xd5, 0xcb, 0x8b, + 0x59, 0x02, 0x98, 0xdd, 0x8e, 0x7c, 0x04, 0xd3, 0x7e, 0x3c, 0x28, 0xa9, 0x5c, 0x19, 0xe1, 0xd9, + 0x3e, 0x11, 0xde, 0xc8, 0xf4, 0x4d, 0x82, 0x84, 0x49, 0x5d, 0xe4, 0x0d, 0x28, 0xf7, 0x94, 0xa5, + 0x72, 0x58, 0xb7, 0x72, 0x55, 0x8c, 0x41, 0xdc, 0xa8, 0x5b, 0x11, 0x19, 0xe3, 0x32, 0xe4, 0x01, + 0x94, 0x03, 0xaf, 0x43, 0x7d, 0xf5, 0xc4, 0x50, 0x11, 0x8b, 0x3f, 0x9f, 0xb5, 0x93, 0xb7, 0xb5, + 0x58, 0x94, 0xc0, 0x8e, 0x68, 0x0c, 0xe3, 0x38, 0x3c, 0xb8, 0x0d, 0xab, 0x4f, 0x7d, 0x11, 0xc9, + 0xbf, 0x90, 0x0c, 0x6e, 0x1b, 0x71, 0x26, 0x26, 0x65, 0x79, 0xb8, 0xda, 0xf3, 0x1d, 0xcf, 0x77, + 0x82, 0xfd, 0xa5, 0x8e, 0xc9, 0x98, 0x00, 0x98, 0x13, 0x00, 0x3a, 0x5c, 0xdd, 0x4a, 0x0b, 0xe0, + 0x60, 0x1b, 0x1e, 0x13, 0x84, 0xc4, 0xca, 0x8b, 0x22, 0x26, 0x14, 0x66, 0x29, 0x6c, 0x8b, 0x9a, + 0x7b, 0x4c, 0x11, 0xd3, 0xb5, 0x61, 0x8a, 0x98, 0x88, 0x0d, 0xd7, 0xcc, 0x7e, 0xe0, 0x75, 0x39, + 0x21, 0xd9, 0x64, 0xdb, 0xdb, 0xa5, 0x6e, 0xe5, 0xba, 0xb8, 0xab, 0xae, 0x1f, 0x1e, 0x54, 0xaf, + 0x2d, 0x3e, 0x45, 0x0e, 0x9f, 0x8a, 0x42, 0xba, 0x50, 0xa4, 0xaa, 0x10, 0xab, 0xf2, 0xa5, 0x11, + 0x2e, 0x89, 0x64, 0x35, 0x97, 0x9c, 0xa0, 0x90, 0x86, 0x5a, 0x05, 0xd9, 0x86, 0x72, 0xdb, 0x63, + 0xc1, 0x62, 0xc7, 0x31, 0x19, 0x65, 0x95, 0x97, 0xc4, 0x3e, 0xc9, 0xbc, 0xdf, 0xee, 0x84, 0x62, + 0xd1, 0x36, 0xb9, 0x13, 0xb5, 0xc4, 0x38, 0x0c, 0xa1, 0x22, 0x40, 0xea, 0x8b, 0x55, 0xf3, 0xdc, + 0x80, 0x7e, 0x18, 0x54, 0xe6, 0xc5, 0x58, 0x5e, 0xcd, 0x42, 0xde, 0xf2, 0xec, 0x46, 0x52, 0x5a, + 0x9e, 0xf2, 0x14, 0x11, 0xd3, 0x98, 0xe4, 0x4d, 0x98, 0xea, 0x79, 0x76, 0xa3, 0x47, 0xad, 0x2d, + 0x33, 0xb0, 0xda, 0x95, 0x6a, 0xf2, 0x81, 0x64, 0x2b, 0xc6, 0xc3, 0x84, 0xe4, 0xdc, 0xbb, 0x70, + 0x61, 0xc0, 0x9f, 0x3a, 0xd5, 0x6b, 0xd2, 0x9f, 0xe7, 0x20, 0xee, 0xce, 0x9e, 0xb9, 0xdf, 0x7f, + 0x1b, 0x2e, 0xa8, 0x2f, 0x47, 0xf9, 0x65, 0xdb, 0xe9, 0xeb, 0x6f, 0x2d, 0x62, 0xa9, 0x1d, 0x4c, + 0x0b, 0xe0, 0x60, 0x1b, 0xe3, 0x2f, 0x72, 0x30, 0x9d, 0x30, 0xdf, 0x67, 0x1e, 0x15, 0xae, 0x02, + 0xe9, 0x3a, 0xbe, 0xef, 0xf9, 0xf2, 0x0e, 0xdc, 0xe0, 0x7b, 0x99, 0xa9, 0x4f, 0x36, 0x44, 0x21, + 0xca, 0xc6, 0x00, 0x17, 0x33, 0x5a, 0x18, 0x7f, 0x9d, 0x83, 0x28, 0x77, 0xa8, 0xab, 0xaf, 0x72, + 0xc7, 0x56, 0x5f, 0xbd, 0x06, 0xc5, 0xc7, 0xcc, 0x73, 0xb7, 0xa2, 0x1a, 0x2d, 0x3d, 0xa1, 0x77, + 0x1b, 0xf7, 0x37, 0x85, 0xa4, 0x96, 0x10, 0xd2, 0x1f, 0xac, 0x3a, 0x9d, 0x60, 0xb0, 0x92, 0xe9, + 0xee, 0x2f, 0x4b, 0x3a, 0x6a, 0x09, 0xb2, 0x00, 0x25, 0x9d, 0xae, 0x56, 0xe1, 0xa4, 0x9e, 0x04, + 0x9d, 0xab, 0xc5, 0x48, 0xc6, 0xf8, 0xe1, 0x18, 0x14, 0x9f, 0xe3, 0xf7, 0x27, 0x56, 0xe2, 0xfb, + 0x93, 0x33, 0xf8, 0x58, 0x21, 0xeb, 0xdb, 0x93, 0xdd, 0xd4, 0xb7, 0x27, 0x4b, 0x23, 0x66, 0xc0, + 0x9f, 0xfa, 0xdd, 0xc9, 0xa7, 0x39, 0x98, 0x7a, 0x8e, 0xdf, 0x9c, 0xec, 0x24, 0xbf, 0x39, 0x79, + 0x7b, 0xa4, 0xa1, 0x1d, 0xf3, 0xbd, 0xc9, 0xdf, 0x5c, 0x84, 0xc4, 0xb7, 0x1e, 0xc4, 0x85, 0x52, + 0x78, 0xc0, 0xc3, 0x57, 0x85, 0xb7, 0x47, 0x0a, 0x0a, 0xa3, 0x4d, 0x19, 0x52, 0x18, 0x46, 0x2a, + 0xc8, 0x4d, 0x00, 0xca, 0x2d, 0x9b, 0xcc, 0xdd, 0x8d, 0x25, 0x93, 0xee, 0x2b, 0x9a, 0x83, 0x31, + 0xa9, 0xe7, 0x9f, 0x70, 0xc8, 0xbe, 0xa2, 0x27, 0x9e, 0xc9, 0x15, 0x7d, 0xed, 0xcc, 0xaf, 0xe8, + 0x97, 0x9e, 0xfd, 0x15, 0x1d, 0x0b, 0x48, 0xf2, 0x23, 0x04, 0x24, 0x1f, 0xc1, 0x25, 0xf9, 0xe7, + 0x52, 0xc7, 0x74, 0xba, 0x7a, 0xbf, 0xa8, 0x32, 0xaa, 0x2f, 0x67, 0x5e, 0xcc, 0xd4, 0x67, 0x0e, + 0x0b, 0xa8, 0x1b, 0x3c, 0x8c, 0x5a, 0x46, 0x6f, 0xf0, 0x0f, 0x33, 0xe0, 0x30, 0x53, 0x49, 0xda, + 0x83, 0x9d, 0x3c, 0x81, 0x07, 0xfb, 0x83, 0x1c, 0x5c, 0x36, 0xb3, 0x3e, 0x67, 0x55, 0x79, 0x8c, + 0xbb, 0x23, 0xc5, 0x13, 0x09, 0x44, 0x15, 0x0f, 0x64, 0xb1, 0x30, 0xbb, 0x0f, 0xe4, 0x95, 0x28, + 0x24, 0x2d, 0x89, 0x4d, 0x95, 0x1d, 0x4c, 0x7e, 0x37, 0x9d, 0x0a, 0x02, 0x31, 0xdb, 0x8d, 0x91, + 0x0d, 0xf6, 0x19, 0xa4, 0x83, 0xca, 0x23, 0xa4, 0x83, 0x52, 0xe1, 0xc5, 0xd4, 0x19, 0x85, 0x17, + 0x2e, 0xcc, 0x3a, 0x5d, 0xb3, 0x45, 0xb7, 0xfa, 0x9d, 0x8e, 0xcc, 0x80, 0xb3, 0xca, 0xb4, 0xc0, + 0xce, 0xac, 0x7d, 0xe5, 0xe1, 0x5e, 0x27, 0xfd, 0xd1, 0x94, 0x7e, 0x6b, 0x5a, 0x4b, 0x21, 0xe1, + 0x00, 0x36, 0xdf, 0x96, 0xdc, 0x6d, 0xdd, 0xa4, 0x01, 0x9f, 0x6d, 0x91, 0x29, 0x51, 0x9f, 0xed, + 0xdf, 0x89, 0xc8, 0x18, 0x97, 0x21, 0xeb, 0x50, 0xb2, 0x5d, 0xa6, 0x5e, 0x9a, 0x66, 0x84, 0x95, + 0x7a, 0x9d, 0xdb, 0xb6, 0xe5, 0xcd, 0x86, 0x7e, 0x63, 0xba, 0x36, 0xf8, 0xff, 0x92, 0xd4, 0x34, + 0x1f, 0xa3, 0xf6, 0x64, 0x43, 0x80, 0xa9, 0x42, 0x70, 0x99, 0xda, 0xb8, 0x7e, 0x8c, 0x87, 0xbc, + 0xbc, 0x19, 0xd6, 0xad, 0x4f, 0x2b, 0x75, 0xaa, 0xbc, 0x3b, 0x42, 0x20, 0xaf, 0x42, 0xc1, 0x73, + 0x57, 0x3e, 0x74, 0x82, 0xca, 0x85, 0x64, 0x06, 0xfc, 0xbe, 0xa0, 0xa2, 0xe2, 0x92, 0x07, 0x70, + 0x35, 0x08, 0x3a, 0x2a, 0xb4, 0x5d, 0x6c, 0x06, 0xd4, 0x0f, 0xeb, 0x35, 0x44, 0xc1, 0x4e, 0x5e, + 0x7e, 0xae, 0xb7, 0xbd, 0x7d, 0x2f, 0x4b, 0x04, 0x8f, 0x6b, 0x7b, 0x7c, 0xd0, 0x7d, 0x71, 0xc8, + 0xa0, 0x3b, 0x1e, 0xe7, 0x5d, 0x7a, 0x6a, 0x9c, 0x37, 0x10, 0x97, 0x5e, 0x3e, 0x45, 0x5c, 0xfa, + 0x9e, 0xa8, 0x4a, 0xb9, 0xbd, 0xa4, 0x62, 0xfa, 0xb7, 0x86, 0x4b, 0x25, 0x72, 0x04, 0xf9, 0x36, + 0x29, 0xfe, 0x44, 0x89, 0x49, 0xb6, 0xe0, 0x52, 0xcf, 0xb3, 0x07, 0xc2, 0x5a, 0x11, 0xc4, 0xc7, + 0xea, 0x99, 0xb6, 0x32, 0x64, 0x30, 0xb3, 0xa5, 0xb0, 0xa5, 0x11, 0xbd, 0x52, 0x11, 0x13, 0x23, + 0x6d, 0x69, 0x44, 0xc6, 0xb8, 0x4c, 0x3a, 0xca, 0x7b, 0xe1, 0x99, 0x45, 0x79, 0x73, 0xcf, 0x21, + 0xca, 0x7b, 0xf1, 0xf9, 0x45, 0x79, 0x9f, 0x17, 0xe1, 0x7c, 0xea, 0x43, 0x4e, 0x5d, 0x10, 0x96, + 0x3b, 0x69, 0x41, 0x58, 0xa2, 0x62, 0x6b, 0xec, 0x99, 0x56, 0x6c, 0x8d, 0x9f, 0x79, 0xc5, 0x56, + 0xac, 0x32, 0x6d, 0xe2, 0x0b, 0x2a, 0xd3, 0x16, 0x61, 0xc6, 0xf2, 0xba, 0x3d, 0xf1, 0xe5, 0x88, + 0xaa, 0x4f, 0x92, 0x35, 0x04, 0xfa, 0xb9, 0x73, 0x29, 0xc9, 0xc6, 0xb4, 0x3c, 0xf9, 0x75, 0xc8, + 0xbb, 0xa2, 0x61, 0x61, 0x84, 0x92, 0xd8, 0xe4, 0x82, 0x89, 0x8b, 0x52, 0x55, 0xa5, 0x86, 0x69, + 0xd3, 0xbc, 0xa0, 0x1d, 0x85, 0x7f, 0xa0, 0x54, 0xca, 0x3d, 0x8e, 0x99, 0x64, 0x3d, 0x22, 0xab, + 0x94, 0x44, 0x47, 0x7e, 0xe5, 0x2c, 0x3a, 0x92, 0x2c, 0x7e, 0x54, 0x5d, 0x8a, 0x9e, 0x82, 0x93, + 0x5c, 0x4c, 0xf7, 0x84, 0xf8, 0x70, 0xa5, 0x97, 0xe5, 0x8f, 0x31, 0xf5, 0xbc, 0xf4, 0x34, 0xaf, + 0x70, 0x5e, 0x69, 0xb9, 0x92, 0xe9, 0xd1, 0x31, 0x3c, 0x06, 0x39, 0x5e, 0xff, 0x56, 0x7c, 0x56, + 0xf5, 0x6f, 0x73, 0xfb, 0xb2, 0x2e, 0xf7, 0xd8, 0x92, 0xde, 0x07, 0xc9, 0x32, 0xfb, 0x77, 0x87, + 0xfc, 0x2f, 0xab, 0xc2, 0xca, 0xdf, 0x78, 0x39, 0xf1, 0x6f, 0xe6, 0xe0, 0x52, 0xd6, 0xb2, 0x64, + 0xf4, 0xa2, 0x91, 0xec, 0xc5, 0x68, 0x71, 0x5b, 0xdc, 0xc6, 0xfc, 0x5b, 0x3e, 0x16, 0x25, 0x06, + 0xb4, 0xf7, 0xd3, 0x27, 0xe4, 0xa1, 0x9e, 0x90, 0x13, 0x9f, 0x4a, 0xe7, 0x9f, 0xe3, 0xa7, 0xd2, + 0x85, 0x21, 0x3e, 0x95, 0x9e, 0x7c, 0x9e, 0x9f, 0x4a, 0x17, 0x4f, 0xf8, 0xa9, 0x74, 0xe9, 0xd9, + 0x7f, 0x2a, 0xfd, 0x79, 0x0e, 0x66, 0xd3, 0x95, 0xdb, 0xcf, 0x21, 0x5b, 0xb6, 0x9b, 0xc8, 0x96, + 0xad, 0x8d, 0x64, 0xcc, 0x75, 0xb5, 0xf8, 0x31, 0x59, 0x33, 0xe3, 0xc7, 0x39, 0x18, 0xa8, 0x4e, + 0x7f, 0x0e, 0x09, 0xad, 0xc7, 0xc9, 0x84, 0xd6, 0xca, 0x99, 0x0c, 0xf2, 0x98, 0xc4, 0xd6, 0x7f, + 0x67, 0x0c, 0xf1, 0xff, 0x24, 0xc1, 0x95, 0x30, 0x6d, 0x63, 0xcf, 0xde, 0xb4, 0xd5, 0x6b, 0x9f, + 0x7c, 0x3e, 0x7f, 0xee, 0xd3, 0xcf, 0xe7, 0xcf, 0x7d, 0xf6, 0xf9, 0xfc, 0xb9, 0x8f, 0x0f, 0xe7, + 0x73, 0x9f, 0x1c, 0xce, 0xe7, 0x3e, 0x3d, 0x9c, 0xcf, 0x7d, 0x76, 0x38, 0x9f, 0xfb, 0xf1, 0xe1, + 0x7c, 0xee, 0x0f, 0xff, 0x79, 0xfe, 0xdc, 0xaf, 0x16, 0x43, 0xdc, 0xff, 0x0d, 0x00, 0x00, 0xff, + 0xff, 0xf1, 0xf9, 0x10, 0x2b, 0x4b, 0x53, 0x00, 0x00, } func (m *ArchiveStrategy) Marshal() (dAtA []byte, err error) { @@ -2215,7 +2349,7 @@ func (m *ContinueOn) MarshalToSizedBuffer(dAtA []byte) (int, error) { return len(dAtA) - i, nil } -func (m *DAGTask) Marshal() (dAtA []byte, err error) { +func (m *CronWorkflow) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) n, err := m.MarshalToSizedBuffer(dAtA[:size]) @@ -2225,87 +2359,38 @@ func (m *DAGTask) Marshal() (dAtA []byte, err error) { return dAtA[:n], nil } -func (m *DAGTask) MarshalTo(dAtA []byte) (int, error) { +func (m *CronWorkflow) MarshalTo(dAtA []byte) (int, error) { size := m.Size() return m.MarshalToSizedBuffer(dAtA[:size]) } -func (m *DAGTask) MarshalToSizedBuffer(dAtA []byte) (int, error) { +func (m *CronWorkflow) MarshalToSizedBuffer(dAtA []byte) (int, error) { i := len(dAtA) _ = i var l int _ = l - if m.ContinueOn != nil { - { - size, err := m.ContinueOn.MarshalToSizedBuffer(dAtA[:i]) - if err != nil { - return 0, err - } - i -= size - i = encodeVarintGenerated(dAtA, i, uint64(size)) + { + size, err := m.Status.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err } - i-- - dAtA[i] = 0x52 + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) } - i -= len(m.When) - copy(dAtA[i:], m.When) - i = encodeVarintGenerated(dAtA, i, uint64(len(m.When))) i-- - dAtA[i] = 0x4a - if m.WithSequence != nil { - { - size, err := m.WithSequence.MarshalToSizedBuffer(dAtA[:i]) - if err != nil { - return 0, err - } - i -= size - i = encodeVarintGenerated(dAtA, i, uint64(size)) + dAtA[i] = 0x1a + { + size, err := m.Spec.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err } - i-- - dAtA[i] = 0x42 + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) } - i -= len(m.WithParam) - copy(dAtA[i:], m.WithParam) - i = encodeVarintGenerated(dAtA, i, uint64(len(m.WithParam))) i-- - dAtA[i] = 0x3a - if len(m.WithItems) > 0 { - for iNdEx := len(m.WithItems) - 1; iNdEx >= 0; iNdEx-- { - { - size, err := m.WithItems[iNdEx].MarshalToSizedBuffer(dAtA[:i]) - if err != nil { - return 0, err - } - i -= size - i = encodeVarintGenerated(dAtA, i, uint64(size)) - } - i-- - dAtA[i] = 0x32 - } - } - if len(m.Dependencies) > 0 { - for iNdEx := len(m.Dependencies) - 1; iNdEx >= 0; iNdEx-- { - i -= len(m.Dependencies[iNdEx]) - copy(dAtA[i:], m.Dependencies[iNdEx]) - i = encodeVarintGenerated(dAtA, i, uint64(len(m.Dependencies[iNdEx]))) - i-- - dAtA[i] = 0x2a - } - } - if m.TemplateRef != nil { - { - size, err := m.TemplateRef.MarshalToSizedBuffer(dAtA[:i]) - if err != nil { - return 0, err - } - i -= size - i = encodeVarintGenerated(dAtA, i, uint64(size)) - } - i-- - dAtA[i] = 0x22 - } + dAtA[i] = 0x12 { - size, err := m.Arguments.MarshalToSizedBuffer(dAtA[:i]) + size, err := m.ObjectMeta.MarshalToSizedBuffer(dAtA[:i]) if err != nil { return 0, err } @@ -2313,21 +2398,11 @@ func (m *DAGTask) MarshalToSizedBuffer(dAtA []byte) (int, error) { i = encodeVarintGenerated(dAtA, i, uint64(size)) } i-- - dAtA[i] = 0x1a - i -= len(m.Template) - copy(dAtA[i:], m.Template) - i = encodeVarintGenerated(dAtA, i, uint64(len(m.Template))) - i-- - dAtA[i] = 0x12 - i -= len(m.Name) - copy(dAtA[i:], m.Name) - i = encodeVarintGenerated(dAtA, i, uint64(len(m.Name))) - i-- dAtA[i] = 0xa return len(dAtA) - i, nil } -func (m *DAGTemplate) Marshal() (dAtA []byte, err error) { +func (m *CronWorkflowList) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) n, err := m.MarshalToSizedBuffer(dAtA[:size]) @@ -2337,30 +2412,20 @@ func (m *DAGTemplate) Marshal() (dAtA []byte, err error) { return dAtA[:n], nil } -func (m *DAGTemplate) MarshalTo(dAtA []byte) (int, error) { +func (m *CronWorkflowList) MarshalTo(dAtA []byte) (int, error) { size := m.Size() return m.MarshalToSizedBuffer(dAtA[:size]) } -func (m *DAGTemplate) MarshalToSizedBuffer(dAtA []byte) (int, error) { +func (m *CronWorkflowList) MarshalToSizedBuffer(dAtA []byte) (int, error) { i := len(dAtA) _ = i var l int _ = l - if m.FailFast != nil { - i-- - if *m.FailFast { - dAtA[i] = 1 - } else { - dAtA[i] = 0 - } - i-- - dAtA[i] = 0x18 - } - if len(m.Tasks) > 0 { - for iNdEx := len(m.Tasks) - 1; iNdEx >= 0; iNdEx-- { + if len(m.Items) > 0 { + for iNdEx := len(m.Items) - 1; iNdEx >= 0; iNdEx-- { { - size, err := m.Tasks[iNdEx].MarshalToSizedBuffer(dAtA[:i]) + size, err := m.Items[iNdEx].MarshalToSizedBuffer(dAtA[:i]) if err != nil { return 0, err } @@ -2371,15 +2436,20 @@ func (m *DAGTemplate) MarshalToSizedBuffer(dAtA []byte) (int, error) { dAtA[i] = 0x12 } } - i -= len(m.Target) - copy(dAtA[i:], m.Target) - i = encodeVarintGenerated(dAtA, i, uint64(len(m.Target))) + { + size, err := m.ListMeta.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } i-- dAtA[i] = 0xa return len(dAtA) - i, nil } -func (m *ExecutorConfig) Marshal() (dAtA []byte, err error) { +func (m *CronWorkflowSpec) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) n, err := m.MarshalToSizedBuffer(dAtA[:size]) @@ -2389,25 +2459,63 @@ func (m *ExecutorConfig) Marshal() (dAtA []byte, err error) { return dAtA[:n], nil } -func (m *ExecutorConfig) MarshalTo(dAtA []byte) (int, error) { +func (m *CronWorkflowSpec) MarshalTo(dAtA []byte) (int, error) { size := m.Size() return m.MarshalToSizedBuffer(dAtA[:size]) } -func (m *ExecutorConfig) MarshalToSizedBuffer(dAtA []byte) (int, error) { +func (m *CronWorkflowSpec) MarshalToSizedBuffer(dAtA []byte) (int, error) { i := len(dAtA) _ = i var l int _ = l - i -= len(m.ServiceAccountName) - copy(dAtA[i:], m.ServiceAccountName) - i = encodeVarintGenerated(dAtA, i, uint64(len(m.ServiceAccountName))) + if m.FailedJobsHistoryLimit != nil { + i = encodeVarintGenerated(dAtA, i, uint64(*m.FailedJobsHistoryLimit)) + i-- + dAtA[i] = 0x38 + } + if m.SuccessfulJobsHistoryLimit != nil { + i = encodeVarintGenerated(dAtA, i, uint64(*m.SuccessfulJobsHistoryLimit)) + i-- + dAtA[i] = 0x30 + } + if m.StartingDeadlineSeconds != nil { + i = encodeVarintGenerated(dAtA, i, uint64(*m.StartingDeadlineSeconds)) + i-- + dAtA[i] = 0x28 + } + i-- + if m.Suspend { + dAtA[i] = 1 + } else { + dAtA[i] = 0 + } + i-- + dAtA[i] = 0x20 + i -= len(m.ConcurrencyPolicy) + copy(dAtA[i:], m.ConcurrencyPolicy) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.ConcurrencyPolicy))) + i-- + dAtA[i] = 0x1a + i -= len(m.Schedule) + copy(dAtA[i:], m.Schedule) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.Schedule))) + i-- + dAtA[i] = 0x12 + { + size, err := m.WorkflowSpec.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } i-- dAtA[i] = 0xa return len(dAtA) - i, nil } -func (m *GitArtifact) Marshal() (dAtA []byte, err error) { +func (m *CronWorkflowStatus) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) n, err := m.MarshalToSizedBuffer(dAtA[:size]) @@ -2417,27 +2525,19 @@ func (m *GitArtifact) Marshal() (dAtA []byte, err error) { return dAtA[:n], nil } -func (m *GitArtifact) MarshalTo(dAtA []byte) (int, error) { +func (m *CronWorkflowStatus) MarshalTo(dAtA []byte) (int, error) { size := m.Size() return m.MarshalToSizedBuffer(dAtA[:size]) } -func (m *GitArtifact) MarshalToSizedBuffer(dAtA []byte) (int, error) { +func (m *CronWorkflowStatus) MarshalToSizedBuffer(dAtA []byte) (int, error) { i := len(dAtA) _ = i var l int _ = l - i-- - if m.InsecureIgnoreHostKey { - dAtA[i] = 1 - } else { - dAtA[i] = 0 - } - i-- - dAtA[i] = 0x40 - if m.SSHPrivateKeySecret != nil { + if m.LastScheduledTime != nil { { - size, err := m.SSHPrivateKeySecret.MarshalToSizedBuffer(dAtA[:i]) + size, err := m.LastScheduledTime.MarshalToSizedBuffer(dAtA[:i]) if err != nil { return 0, err } @@ -2445,11 +2545,48 @@ func (m *GitArtifact) MarshalToSizedBuffer(dAtA []byte) (int, error) { i = encodeVarintGenerated(dAtA, i, uint64(size)) } i-- - dAtA[i] = 0x3a + dAtA[i] = 0x12 } - if m.PasswordSecret != nil { + if len(m.Active) > 0 { + for iNdEx := len(m.Active) - 1; iNdEx >= 0; iNdEx-- { + { + size, err := m.Active[iNdEx].MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0xa + } + } + return len(dAtA) - i, nil +} + +func (m *DAGTask) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *DAGTask) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *DAGTask) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if m.ContinueOn != nil { { - size, err := m.PasswordSecret.MarshalToSizedBuffer(dAtA[:i]) + size, err := m.ContinueOn.MarshalToSizedBuffer(dAtA[:i]) if err != nil { return 0, err } @@ -2457,11 +2594,16 @@ func (m *GitArtifact) MarshalToSizedBuffer(dAtA []byte) (int, error) { i = encodeVarintGenerated(dAtA, i, uint64(size)) } i-- - dAtA[i] = 0x32 + dAtA[i] = 0x52 } - if m.UsernameSecret != nil { + i -= len(m.When) + copy(dAtA[i:], m.When) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.When))) + i-- + dAtA[i] = 0x4a + if m.WithSequence != nil { { - size, err := m.UsernameSecret.MarshalToSizedBuffer(dAtA[:i]) + size, err := m.WithSequence.MarshalToSizedBuffer(dAtA[:i]) if err != nil { return 0, err } @@ -2469,36 +2611,72 @@ func (m *GitArtifact) MarshalToSizedBuffer(dAtA []byte) (int, error) { i = encodeVarintGenerated(dAtA, i, uint64(size)) } i-- - dAtA[i] = 0x2a + dAtA[i] = 0x42 } - if len(m.Fetch) > 0 { - for iNdEx := len(m.Fetch) - 1; iNdEx >= 0; iNdEx-- { - i -= len(m.Fetch[iNdEx]) - copy(dAtA[i:], m.Fetch[iNdEx]) - i = encodeVarintGenerated(dAtA, i, uint64(len(m.Fetch[iNdEx]))) + i -= len(m.WithParam) + copy(dAtA[i:], m.WithParam) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.WithParam))) + i-- + dAtA[i] = 0x3a + if len(m.WithItems) > 0 { + for iNdEx := len(m.WithItems) - 1; iNdEx >= 0; iNdEx-- { + { + size, err := m.WithItems[iNdEx].MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } i-- - dAtA[i] = 0x22 + dAtA[i] = 0x32 } } - if m.Depth != nil { - i = encodeVarintGenerated(dAtA, i, uint64(*m.Depth)) + if len(m.Dependencies) > 0 { + for iNdEx := len(m.Dependencies) - 1; iNdEx >= 0; iNdEx-- { + i -= len(m.Dependencies[iNdEx]) + copy(dAtA[i:], m.Dependencies[iNdEx]) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.Dependencies[iNdEx]))) + i-- + dAtA[i] = 0x2a + } + } + if m.TemplateRef != nil { + { + size, err := m.TemplateRef.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } i-- - dAtA[i] = 0x18 + dAtA[i] = 0x22 + } + { + size, err := m.Arguments.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) } - i -= len(m.Revision) - copy(dAtA[i:], m.Revision) - i = encodeVarintGenerated(dAtA, i, uint64(len(m.Revision))) + i-- + dAtA[i] = 0x1a + i -= len(m.Template) + copy(dAtA[i:], m.Template) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.Template))) i-- dAtA[i] = 0x12 - i -= len(m.Repo) - copy(dAtA[i:], m.Repo) - i = encodeVarintGenerated(dAtA, i, uint64(len(m.Repo))) + i -= len(m.Name) + copy(dAtA[i:], m.Name) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.Name))) i-- dAtA[i] = 0xa return len(dAtA) - i, nil } -func (m *HDFSArtifact) Marshal() (dAtA []byte, err error) { +func (m *DAGTemplate) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) n, err := m.MarshalToSizedBuffer(dAtA[:size]) @@ -2508,43 +2686,49 @@ func (m *HDFSArtifact) Marshal() (dAtA []byte, err error) { return dAtA[:n], nil } -func (m *HDFSArtifact) MarshalTo(dAtA []byte) (int, error) { +func (m *DAGTemplate) MarshalTo(dAtA []byte) (int, error) { size := m.Size() return m.MarshalToSizedBuffer(dAtA[:size]) } -func (m *HDFSArtifact) MarshalToSizedBuffer(dAtA []byte) (int, error) { +func (m *DAGTemplate) MarshalToSizedBuffer(dAtA []byte) (int, error) { i := len(dAtA) _ = i var l int _ = l - i-- - if m.Force { - dAtA[i] = 1 - } else { - dAtA[i] = 0 + if m.FailFast != nil { + i-- + if *m.FailFast { + dAtA[i] = 1 + } else { + dAtA[i] = 0 + } + i-- + dAtA[i] = 0x18 } - i-- - dAtA[i] = 0x18 - i -= len(m.Path) - copy(dAtA[i:], m.Path) - i = encodeVarintGenerated(dAtA, i, uint64(len(m.Path))) - i-- - dAtA[i] = 0x12 - { - size, err := m.HDFSConfig.MarshalToSizedBuffer(dAtA[:i]) - if err != nil { - return 0, err + if len(m.Tasks) > 0 { + for iNdEx := len(m.Tasks) - 1; iNdEx >= 0; iNdEx-- { + { + size, err := m.Tasks[iNdEx].MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x12 } - i -= size - i = encodeVarintGenerated(dAtA, i, uint64(size)) } + i -= len(m.Target) + copy(dAtA[i:], m.Target) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.Target))) i-- dAtA[i] = 0xa return len(dAtA) - i, nil } -func (m *HDFSConfig) Marshal() (dAtA []byte, err error) { +func (m *ExecutorConfig) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) n, err := m.MarshalToSizedBuffer(dAtA[:size]) @@ -2554,44 +2738,25 @@ func (m *HDFSConfig) Marshal() (dAtA []byte, err error) { return dAtA[:n], nil } -func (m *HDFSConfig) MarshalTo(dAtA []byte) (int, error) { +func (m *ExecutorConfig) MarshalTo(dAtA []byte) (int, error) { size := m.Size() return m.MarshalToSizedBuffer(dAtA[:size]) } -func (m *HDFSConfig) MarshalToSizedBuffer(dAtA []byte) (int, error) { +func (m *ExecutorConfig) MarshalToSizedBuffer(dAtA []byte) (int, error) { i := len(dAtA) _ = i var l int _ = l - i -= len(m.HDFSUser) - copy(dAtA[i:], m.HDFSUser) - i = encodeVarintGenerated(dAtA, i, uint64(len(m.HDFSUser))) - i-- - dAtA[i] = 0x1a - if len(m.Addresses) > 0 { - for iNdEx := len(m.Addresses) - 1; iNdEx >= 0; iNdEx-- { - i -= len(m.Addresses[iNdEx]) - copy(dAtA[i:], m.Addresses[iNdEx]) - i = encodeVarintGenerated(dAtA, i, uint64(len(m.Addresses[iNdEx]))) - i-- - dAtA[i] = 0x12 - } - } - { - size, err := m.HDFSKrbConfig.MarshalToSizedBuffer(dAtA[:i]) - if err != nil { - return 0, err - } - i -= size - i = encodeVarintGenerated(dAtA, i, uint64(size)) - } + i -= len(m.ServiceAccountName) + copy(dAtA[i:], m.ServiceAccountName) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.ServiceAccountName))) i-- dAtA[i] = 0xa return len(dAtA) - i, nil } -func (m *HDFSKrbConfig) Marshal() (dAtA []byte, err error) { +func (m *GitArtifact) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) n, err := m.MarshalToSizedBuffer(dAtA[:size]) @@ -2601,12 +2766,196 @@ func (m *HDFSKrbConfig) Marshal() (dAtA []byte, err error) { return dAtA[:n], nil } -func (m *HDFSKrbConfig) MarshalTo(dAtA []byte) (int, error) { +func (m *GitArtifact) MarshalTo(dAtA []byte) (int, error) { size := m.Size() return m.MarshalToSizedBuffer(dAtA[:size]) } -func (m *HDFSKrbConfig) MarshalToSizedBuffer(dAtA []byte) (int, error) { +func (m *GitArtifact) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + i-- + if m.InsecureIgnoreHostKey { + dAtA[i] = 1 + } else { + dAtA[i] = 0 + } + i-- + dAtA[i] = 0x40 + if m.SSHPrivateKeySecret != nil { + { + size, err := m.SSHPrivateKeySecret.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x3a + } + if m.PasswordSecret != nil { + { + size, err := m.PasswordSecret.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x32 + } + if m.UsernameSecret != nil { + { + size, err := m.UsernameSecret.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x2a + } + if len(m.Fetch) > 0 { + for iNdEx := len(m.Fetch) - 1; iNdEx >= 0; iNdEx-- { + i -= len(m.Fetch[iNdEx]) + copy(dAtA[i:], m.Fetch[iNdEx]) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.Fetch[iNdEx]))) + i-- + dAtA[i] = 0x22 + } + } + if m.Depth != nil { + i = encodeVarintGenerated(dAtA, i, uint64(*m.Depth)) + i-- + dAtA[i] = 0x18 + } + i -= len(m.Revision) + copy(dAtA[i:], m.Revision) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.Revision))) + i-- + dAtA[i] = 0x12 + i -= len(m.Repo) + copy(dAtA[i:], m.Repo) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.Repo))) + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil +} + +func (m *HDFSArtifact) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *HDFSArtifact) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *HDFSArtifact) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + i-- + if m.Force { + dAtA[i] = 1 + } else { + dAtA[i] = 0 + } + i-- + dAtA[i] = 0x18 + i -= len(m.Path) + copy(dAtA[i:], m.Path) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.Path))) + i-- + dAtA[i] = 0x12 + { + size, err := m.HDFSConfig.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil +} + +func (m *HDFSConfig) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *HDFSConfig) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *HDFSConfig) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + i -= len(m.HDFSUser) + copy(dAtA[i:], m.HDFSUser) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.HDFSUser))) + i-- + dAtA[i] = 0x1a + if len(m.Addresses) > 0 { + for iNdEx := len(m.Addresses) - 1; iNdEx >= 0; iNdEx-- { + i -= len(m.Addresses[iNdEx]) + copy(dAtA[i:], m.Addresses[iNdEx]) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.Addresses[iNdEx]))) + i-- + dAtA[i] = 0x12 + } + } + { + size, err := m.HDFSKrbConfig.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil +} + +func (m *HDFSKrbConfig) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *HDFSKrbConfig) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *HDFSKrbConfig) MarshalToSizedBuffer(dAtA []byte) (int, error) { i := len(dAtA) _ = i var l int @@ -5259,6 +5608,82 @@ func (m *ContinueOn) Size() (n int) { return n } +func (m *CronWorkflow) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = m.ObjectMeta.Size() + n += 1 + l + sovGenerated(uint64(l)) + l = m.Spec.Size() + n += 1 + l + sovGenerated(uint64(l)) + l = m.Status.Size() + n += 1 + l + sovGenerated(uint64(l)) + return n +} + +func (m *CronWorkflowList) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = m.ListMeta.Size() + n += 1 + l + sovGenerated(uint64(l)) + if len(m.Items) > 0 { + for _, e := range m.Items { + l = e.Size() + n += 1 + l + sovGenerated(uint64(l)) + } + } + return n +} + +func (m *CronWorkflowSpec) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = m.WorkflowSpec.Size() + n += 1 + l + sovGenerated(uint64(l)) + l = len(m.Schedule) + n += 1 + l + sovGenerated(uint64(l)) + l = len(m.ConcurrencyPolicy) + n += 1 + l + sovGenerated(uint64(l)) + n += 2 + if m.StartingDeadlineSeconds != nil { + n += 1 + sovGenerated(uint64(*m.StartingDeadlineSeconds)) + } + if m.SuccessfulJobsHistoryLimit != nil { + n += 1 + sovGenerated(uint64(*m.SuccessfulJobsHistoryLimit)) + } + if m.FailedJobsHistoryLimit != nil { + n += 1 + sovGenerated(uint64(*m.FailedJobsHistoryLimit)) + } + return n +} + +func (m *CronWorkflowStatus) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + if len(m.Active) > 0 { + for _, e := range m.Active { + l = e.Size() + n += 1 + l + sovGenerated(uint64(l)) + } + } + if m.LastScheduledTime != nil { + l = m.LastScheduledTime.Size() + n += 1 + l + sovGenerated(uint64(l)) + } + return n +} + func (m *DAGTask) Size() (n int) { if m == nil { return 0 @@ -6415,16 +6840,76 @@ func (this *ContinueOn) String() string { }, "") return s } -func (this *DAGTask) String() string { +func (this *CronWorkflow) String() string { if this == nil { return "nil" } - repeatedStringForWithItems := "[]Item{" - for _, f := range this.WithItems { - repeatedStringForWithItems += fmt.Sprintf("%v", f) + "," + s := strings.Join([]string{`&CronWorkflow{`, + `ObjectMeta:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.ObjectMeta), "ObjectMeta", "v11.ObjectMeta", 1), `&`, ``, 1) + `,`, + `Spec:` + strings.Replace(strings.Replace(this.Spec.String(), "CronWorkflowSpec", "CronWorkflowSpec", 1), `&`, ``, 1) + `,`, + `Status:` + strings.Replace(strings.Replace(this.Status.String(), "CronWorkflowStatus", "CronWorkflowStatus", 1), `&`, ``, 1) + `,`, + `}`, + }, "") + return s +} +func (this *CronWorkflowList) String() string { + if this == nil { + return "nil" } - repeatedStringForWithItems += "}" - s := strings.Join([]string{`&DAGTask{`, + repeatedStringForItems := "[]CronWorkflow{" + for _, f := range this.Items { + repeatedStringForItems += strings.Replace(strings.Replace(f.String(), "CronWorkflow", "CronWorkflow", 1), `&`, ``, 1) + "," + } + repeatedStringForItems += "}" + s := strings.Join([]string{`&CronWorkflowList{`, + `ListMeta:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.ListMeta), "ListMeta", "v11.ListMeta", 1), `&`, ``, 1) + `,`, + `Items:` + repeatedStringForItems + `,`, + `}`, + }, "") + return s +} +func (this *CronWorkflowSpec) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&CronWorkflowSpec{`, + `WorkflowSpec:` + strings.Replace(strings.Replace(this.WorkflowSpec.String(), "WorkflowSpec", "WorkflowSpec", 1), `&`, ``, 1) + `,`, + `Schedule:` + fmt.Sprintf("%v", this.Schedule) + `,`, + `ConcurrencyPolicy:` + fmt.Sprintf("%v", this.ConcurrencyPolicy) + `,`, + `Suspend:` + fmt.Sprintf("%v", this.Suspend) + `,`, + `StartingDeadlineSeconds:` + valueToStringGenerated(this.StartingDeadlineSeconds) + `,`, + `SuccessfulJobsHistoryLimit:` + valueToStringGenerated(this.SuccessfulJobsHistoryLimit) + `,`, + `FailedJobsHistoryLimit:` + valueToStringGenerated(this.FailedJobsHistoryLimit) + `,`, + `}`, + }, "") + return s +} +func (this *CronWorkflowStatus) String() string { + if this == nil { + return "nil" + } + repeatedStringForActive := "[]ObjectReference{" + for _, f := range this.Active { + repeatedStringForActive += fmt.Sprintf("%v", f) + "," + } + repeatedStringForActive += "}" + s := strings.Join([]string{`&CronWorkflowStatus{`, + `Active:` + repeatedStringForActive + `,`, + `LastScheduledTime:` + strings.Replace(fmt.Sprintf("%v", this.LastScheduledTime), "Time", "v11.Time", 1) + `,`, + `}`, + }, "") + return s +} +func (this *DAGTask) String() string { + if this == nil { + return "nil" + } + repeatedStringForWithItems := "[]Item{" + for _, f := range this.WithItems { + repeatedStringForWithItems += fmt.Sprintf("%v", f) + "," + } + repeatedStringForWithItems += "}" + s := strings.Join([]string{`&DAGTask{`, `Name:` + fmt.Sprintf("%v", this.Name) + `,`, `Template:` + fmt.Sprintf("%v", this.Template) + `,`, `Arguments:` + strings.Replace(strings.Replace(this.Arguments.String(), "Arguments", "Arguments", 1), `&`, ``, 1) + `,`, @@ -7141,28 +7626,621 @@ func (m *ArchiveStrategy) Unmarshal(dAtA []byte) error { if shift >= 64 { return ErrIntOverflowGenerated } - if iNdEx >= l { + 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: ArchiveStrategy: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: ArchiveStrategy: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Tar", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.Tar == nil { + m.Tar = &TarStrategy{} + } + if err := m.Tar.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field None", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.None == nil { + m.None = &NoneStrategy{} + } + if err := m.None.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipGenerated(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *Arguments) 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 ErrIntOverflowGenerated + } + 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: Arguments: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: Arguments: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Parameters", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Parameters = append(m.Parameters, Parameter{}) + if err := m.Parameters[len(m.Parameters)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Artifacts", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Artifacts = append(m.Artifacts, Artifact{}) + if err := m.Artifacts[len(m.Artifacts)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipGenerated(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *Artifact) 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 ErrIntOverflowGenerated + } + 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: Artifact: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: Artifact: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Name", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Name = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Path", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Path = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 3: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field Mode", wireType) + } + var v int32 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + v |= int32(b&0x7F) << shift + if b < 0x80 { + break + } + } + m.Mode = &v + case 4: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field From", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.From = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 5: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field ArtifactLocation", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.ArtifactLocation.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 6: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field GlobalName", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.GlobalName = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 7: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Archive", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.Archive == nil { + m.Archive = &ArchiveStrategy{} + } + if err := m.Archive.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 8: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field Optional", wireType) + } + var v int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + v |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + m.Optional = bool(v != 0) + default: + iNdEx = preIndex + skippy, err := skipGenerated(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *ArtifactLocation) 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 ErrIntOverflowGenerated + } + 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: ArtifactLocation: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: ArtifactLocation: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field ArchiveLogs", wireType) + } + var v int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + v |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + b := bool(v != 0) + m.ArchiveLogs = &b + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field S3", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { return io.ErrUnexpectedEOF } - b := dAtA[iNdEx] - iNdEx++ - wire |= uint64(b&0x7F) << shift - if b < 0x80 { - break + if m.S3 == nil { + m.S3 = &S3Artifact{} } - } - fieldNum := int32(wire >> 3) - wireType := int(wire & 0x7) - if wireType == 4 { - return fmt.Errorf("proto: ArchiveStrategy: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: ArchiveStrategy: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: + if err := m.S3.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 3: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Tar", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field Git", wireType) } var msglen int for shift := uint(0); ; shift += 7 { @@ -7189,16 +8267,16 @@ func (m *ArchiveStrategy) Unmarshal(dAtA []byte) error { if postIndex > l { return io.ErrUnexpectedEOF } - if m.Tar == nil { - m.Tar = &TarStrategy{} + if m.Git == nil { + m.Git = &GitArtifact{} } - if err := m.Tar.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + if err := m.Git.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { return err } iNdEx = postIndex - case 2: + case 4: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field None", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field HTTP", wireType) } var msglen int for shift := uint(0); ; shift += 7 { @@ -7225,69 +8303,52 @@ func (m *ArchiveStrategy) Unmarshal(dAtA []byte) error { if postIndex > l { return io.ErrUnexpectedEOF } - if m.None == nil { - m.None = &NoneStrategy{} + if m.HTTP == nil { + m.HTTP = &HTTPArtifact{} } - if err := m.None.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + if err := m.HTTP.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { return err } iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipGenerated(dAtA[iNdEx:]) - if err != nil { - return err + case 5: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Artifactory", wireType) } - if skippy < 0 { + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { return ErrInvalidLengthGenerated } - if (iNdEx + skippy) < 0 { + postIndex := iNdEx + msglen + if postIndex < 0 { return ErrInvalidLengthGenerated } - if (iNdEx + skippy) > l { + if postIndex > l { return io.ErrUnexpectedEOF } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *Arguments) 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 ErrIntOverflowGenerated - } - if iNdEx >= l { - return io.ErrUnexpectedEOF + if m.Artifactory == nil { + m.Artifactory = &ArtifactoryArtifact{} } - b := dAtA[iNdEx] - iNdEx++ - wire |= uint64(b&0x7F) << shift - if b < 0x80 { - break + if err := m.Artifactory.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err } - } - fieldNum := int32(wire >> 3) - wireType := int(wire & 0x7) - if wireType == 4 { - return fmt.Errorf("proto: Arguments: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: Arguments: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: + iNdEx = postIndex + case 6: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Parameters", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field HDFS", wireType) } var msglen int for shift := uint(0); ; shift += 7 { @@ -7314,14 +8375,16 @@ func (m *Arguments) Unmarshal(dAtA []byte) error { if postIndex > l { return io.ErrUnexpectedEOF } - m.Parameters = append(m.Parameters, Parameter{}) - if err := m.Parameters[len(m.Parameters)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + if m.HDFS == nil { + m.HDFS = &HDFSArtifact{} + } + if err := m.HDFS.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { return err } iNdEx = postIndex - case 2: + case 7: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Artifacts", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field Raw", wireType) } var msglen int for shift := uint(0); ; shift += 7 { @@ -7348,8 +8411,10 @@ func (m *Arguments) Unmarshal(dAtA []byte) error { if postIndex > l { return io.ErrUnexpectedEOF } - m.Artifacts = append(m.Artifacts, Artifact{}) - if err := m.Artifacts[len(m.Artifacts)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + if m.Raw == nil { + m.Raw = &RawArtifact{} + } + if err := m.Raw.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { return err } iNdEx = postIndex @@ -7377,7 +8442,7 @@ func (m *Arguments) Unmarshal(dAtA []byte) error { } return nil } -func (m *Artifact) Unmarshal(dAtA []byte) error { +func (m *ArtifactRepositoryRef) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 for iNdEx < l { @@ -7400,15 +8465,15 @@ func (m *Artifact) Unmarshal(dAtA []byte) error { fieldNum := int32(wire >> 3) wireType := int(wire & 0x7) if wireType == 4 { - return fmt.Errorf("proto: Artifact: wiretype end group for non-group") + return fmt.Errorf("proto: ArtifactRepositoryRef: wiretype end group for non-group") } if fieldNum <= 0 { - return fmt.Errorf("proto: Artifact: illegal tag %d (wire type %d)", fieldNum, wire) + return fmt.Errorf("proto: ArtifactRepositoryRef: illegal tag %d (wire type %d)", fieldNum, wire) } switch fieldNum { case 1: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Name", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field ConfigMap", wireType) } var stringLen uint64 for shift := uint(0); ; shift += 7 { @@ -7436,11 +8501,11 @@ func (m *Artifact) Unmarshal(dAtA []byte) error { if postIndex > l { return io.ErrUnexpectedEOF } - m.Name = string(dAtA[iNdEx:postIndex]) + m.ConfigMap = string(dAtA[iNdEx:postIndex]) iNdEx = postIndex case 2: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Path", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field Key", wireType) } var stringLen uint64 for shift := uint(0); ; shift += 7 { @@ -7468,96 +8533,64 @@ func (m *Artifact) Unmarshal(dAtA []byte) error { if postIndex > l { return io.ErrUnexpectedEOF } - m.Path = string(dAtA[iNdEx:postIndex]) + m.Key = string(dAtA[iNdEx:postIndex]) iNdEx = postIndex - case 3: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field Mode", wireType) - } - var v int32 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowGenerated - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - v |= int32(b&0x7F) << shift - if b < 0x80 { - break - } - } - m.Mode = &v - case 4: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field From", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowGenerated - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - stringLen |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } + default: + iNdEx = preIndex + skippy, err := skipGenerated(dAtA[iNdEx:]) + if err != nil { + return err } - intStringLen := int(stringLen) - if intStringLen < 0 { + if skippy < 0 { return ErrInvalidLengthGenerated } - postIndex := iNdEx + intStringLen - if postIndex < 0 { + if (iNdEx + skippy) < 0 { return ErrInvalidLengthGenerated } - if postIndex > l { + if (iNdEx + skippy) > l { return io.ErrUnexpectedEOF } - m.From = string(dAtA[iNdEx:postIndex]) - iNdEx = postIndex - case 5: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field ArtifactLocation", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowGenerated - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthGenerated - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthGenerated + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *ArtifactoryArtifact) 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 ErrIntOverflowGenerated } - if postIndex > l { + if iNdEx >= l { return io.ErrUnexpectedEOF } - if err := m.ArtifactLocation.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 6: + 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: ArtifactoryArtifact: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: ArtifactoryArtifact: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field GlobalName", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field URL", wireType) } var stringLen uint64 for shift := uint(0); ; shift += 7 { @@ -7585,11 +8618,11 @@ func (m *Artifact) Unmarshal(dAtA []byte) error { if postIndex > l { return io.ErrUnexpectedEOF } - m.GlobalName = string(dAtA[iNdEx:postIndex]) + m.URL = string(dAtA[iNdEx:postIndex]) iNdEx = postIndex - case 7: + case 2: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Archive", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field ArtifactoryAuth", wireType) } var msglen int for shift := uint(0); ; shift += 7 { @@ -7616,33 +8649,10 @@ func (m *Artifact) Unmarshal(dAtA []byte) error { if postIndex > l { return io.ErrUnexpectedEOF } - if m.Archive == nil { - m.Archive = &ArchiveStrategy{} - } - if err := m.Archive.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + if err := m.ArtifactoryAuth.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { return err } iNdEx = postIndex - case 8: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field Optional", wireType) - } - var v int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowGenerated - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - v |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - m.Optional = bool(v != 0) default: iNdEx = preIndex skippy, err := skipGenerated(dAtA[iNdEx:]) @@ -7667,7 +8677,7 @@ func (m *Artifact) Unmarshal(dAtA []byte) error { } return nil } -func (m *ArtifactLocation) Unmarshal(dAtA []byte) error { +func (m *ArtifactoryAuth) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 for iNdEx < l { @@ -7690,36 +8700,15 @@ func (m *ArtifactLocation) Unmarshal(dAtA []byte) error { fieldNum := int32(wire >> 3) wireType := int(wire & 0x7) if wireType == 4 { - return fmt.Errorf("proto: ArtifactLocation: wiretype end group for non-group") + return fmt.Errorf("proto: ArtifactoryAuth: wiretype end group for non-group") } if fieldNum <= 0 { - return fmt.Errorf("proto: ArtifactLocation: illegal tag %d (wire type %d)", fieldNum, wire) + return fmt.Errorf("proto: ArtifactoryAuth: illegal tag %d (wire type %d)", fieldNum, wire) } switch fieldNum { case 1: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field ArchiveLogs", wireType) - } - var v int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowGenerated - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - v |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - b := bool(v != 0) - m.ArchiveLogs = &b - case 2: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field S3", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field UsernameSecret", wireType) } var msglen int for shift := uint(0); ; shift += 7 { @@ -7746,16 +8735,16 @@ func (m *ArtifactLocation) Unmarshal(dAtA []byte) error { if postIndex > l { return io.ErrUnexpectedEOF } - if m.S3 == nil { - m.S3 = &S3Artifact{} + if m.UsernameSecret == nil { + m.UsernameSecret = &v1.SecretKeySelector{} } - if err := m.S3.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + if err := m.UsernameSecret.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { return err } iNdEx = postIndex - case 3: + case 2: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Git", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field PasswordSecret", wireType) } var msglen int for shift := uint(0); ; shift += 7 { @@ -7782,54 +8771,71 @@ func (m *ArtifactLocation) Unmarshal(dAtA []byte) error { if postIndex > l { return io.ErrUnexpectedEOF } - if m.Git == nil { - m.Git = &GitArtifact{} + if m.PasswordSecret == nil { + m.PasswordSecret = &v1.SecretKeySelector{} } - if err := m.Git.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + if err := m.PasswordSecret.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { return err } iNdEx = postIndex - case 4: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field HTTP", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowGenerated - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } + default: + iNdEx = preIndex + skippy, err := skipGenerated(dAtA[iNdEx:]) + if err != nil { + return err } - if msglen < 0 { + if skippy < 0 { return ErrInvalidLengthGenerated } - postIndex := iNdEx + msglen - if postIndex < 0 { + if (iNdEx + skippy) < 0 { return ErrInvalidLengthGenerated } - if postIndex > l { + if (iNdEx + skippy) > l { return io.ErrUnexpectedEOF } - if m.HTTP == nil { - m.HTTP = &HTTPArtifact{} + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *Backoff) 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 ErrIntOverflowGenerated } - if err := m.HTTP.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err + if iNdEx >= l { + return io.ErrUnexpectedEOF } - iNdEx = postIndex - case 5: + 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: Backoff: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: Backoff: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Artifactory", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field Duration", wireType) } - var msglen int + var stringLen uint64 for shift := uint(0); ; shift += 7 { if shift >= 64 { return ErrIntOverflowGenerated @@ -7839,33 +8845,29 @@ func (m *ArtifactLocation) Unmarshal(dAtA []byte) error { } b := dAtA[iNdEx] iNdEx++ - msglen |= int(b&0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } } - if msglen < 0 { + intStringLen := int(stringLen) + if intStringLen < 0 { return ErrInvalidLengthGenerated } - postIndex := iNdEx + msglen + postIndex := iNdEx + intStringLen if postIndex < 0 { return ErrInvalidLengthGenerated } if postIndex > l { return io.ErrUnexpectedEOF } - if m.Artifactory == nil { - m.Artifactory = &ArtifactoryArtifact{} - } - if err := m.Artifactory.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } + m.Duration = string(dAtA[iNdEx:postIndex]) iNdEx = postIndex - case 6: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field HDFS", wireType) + case 2: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field Factor", wireType) } - var msglen int + m.Factor = 0 for shift := uint(0); ; shift += 7 { if shift >= 64 { return ErrIntOverflowGenerated @@ -7875,33 +8877,16 @@ func (m *ArtifactLocation) Unmarshal(dAtA []byte) error { } b := dAtA[iNdEx] iNdEx++ - msglen |= int(b&0x7F) << shift + m.Factor |= int32(b&0x7F) << shift if b < 0x80 { break } } - if msglen < 0 { - return ErrInvalidLengthGenerated - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthGenerated - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.HDFS == nil { - m.HDFS = &HDFSArtifact{} - } - if err := m.HDFS.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 7: + case 3: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Raw", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field MaxDuration", wireType) } - var msglen int + var stringLen uint64 for shift := uint(0); ; shift += 7 { if shift >= 64 { return ErrIntOverflowGenerated @@ -7911,27 +8896,23 @@ func (m *ArtifactLocation) Unmarshal(dAtA []byte) error { } b := dAtA[iNdEx] iNdEx++ - msglen |= int(b&0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } } - if msglen < 0 { + intStringLen := int(stringLen) + if intStringLen < 0 { return ErrInvalidLengthGenerated } - postIndex := iNdEx + msglen + postIndex := iNdEx + intStringLen if postIndex < 0 { return ErrInvalidLengthGenerated } if postIndex > l { return io.ErrUnexpectedEOF } - if m.Raw == nil { - m.Raw = &RawArtifact{} - } - if err := m.Raw.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } + m.MaxDuration = string(dAtA[iNdEx:postIndex]) iNdEx = postIndex default: iNdEx = preIndex @@ -7957,7 +8938,7 @@ func (m *ArtifactLocation) Unmarshal(dAtA []byte) error { } return nil } -func (m *ArtifactRepositoryRef) Unmarshal(dAtA []byte) error { +func (m *ContinueOn) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 for iNdEx < l { @@ -7980,17 +8961,17 @@ func (m *ArtifactRepositoryRef) Unmarshal(dAtA []byte) error { fieldNum := int32(wire >> 3) wireType := int(wire & 0x7) if wireType == 4 { - return fmt.Errorf("proto: ArtifactRepositoryRef: wiretype end group for non-group") + return fmt.Errorf("proto: ContinueOn: wiretype end group for non-group") } if fieldNum <= 0 { - return fmt.Errorf("proto: ArtifactRepositoryRef: illegal tag %d (wire type %d)", fieldNum, wire) + return fmt.Errorf("proto: ContinueOn: illegal tag %d (wire type %d)", fieldNum, wire) } switch fieldNum { case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field ConfigMap", wireType) + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field Error", wireType) } - var stringLen uint64 + var v int for shift := uint(0); ; shift += 7 { if shift >= 64 { return ErrIntOverflowGenerated @@ -8000,29 +8981,17 @@ func (m *ArtifactRepositoryRef) Unmarshal(dAtA []byte) error { } b := dAtA[iNdEx] iNdEx++ - stringLen |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - intStringLen := int(stringLen) - if intStringLen < 0 { - return ErrInvalidLengthGenerated - } - postIndex := iNdEx + intStringLen - if postIndex < 0 { - return ErrInvalidLengthGenerated - } - if postIndex > l { - return io.ErrUnexpectedEOF + v |= int(b&0x7F) << shift + if b < 0x80 { + break + } } - m.ConfigMap = string(dAtA[iNdEx:postIndex]) - iNdEx = postIndex + m.Error = bool(v != 0) case 2: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Key", wireType) + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field Failed", wireType) } - var stringLen uint64 + var v int for shift := uint(0); ; shift += 7 { if shift >= 64 { return ErrIntOverflowGenerated @@ -8032,24 +9001,12 @@ func (m *ArtifactRepositoryRef) Unmarshal(dAtA []byte) error { } b := dAtA[iNdEx] iNdEx++ - stringLen |= uint64(b&0x7F) << shift + v |= int(b&0x7F) << shift if b < 0x80 { break } } - intStringLen := int(stringLen) - if intStringLen < 0 { - return ErrInvalidLengthGenerated - } - postIndex := iNdEx + intStringLen - if postIndex < 0 { - return ErrInvalidLengthGenerated - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.Key = string(dAtA[iNdEx:postIndex]) - iNdEx = postIndex + m.Failed = bool(v != 0) default: iNdEx = preIndex skippy, err := skipGenerated(dAtA[iNdEx:]) @@ -8074,7 +9031,7 @@ func (m *ArtifactRepositoryRef) Unmarshal(dAtA []byte) error { } return nil } -func (m *ArtifactoryArtifact) Unmarshal(dAtA []byte) error { +func (m *CronWorkflow) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 for iNdEx < l { @@ -8097,17 +9054,17 @@ func (m *ArtifactoryArtifact) Unmarshal(dAtA []byte) error { fieldNum := int32(wire >> 3) wireType := int(wire & 0x7) if wireType == 4 { - return fmt.Errorf("proto: ArtifactoryArtifact: wiretype end group for non-group") + return fmt.Errorf("proto: CronWorkflow: wiretype end group for non-group") } if fieldNum <= 0 { - return fmt.Errorf("proto: ArtifactoryArtifact: illegal tag %d (wire type %d)", fieldNum, wire) + return fmt.Errorf("proto: CronWorkflow: illegal tag %d (wire type %d)", fieldNum, wire) } switch fieldNum { case 1: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field URL", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field ObjectMeta", wireType) } - var stringLen uint64 + var msglen int for shift := uint(0); ; shift += 7 { if shift >= 64 { return ErrIntOverflowGenerated @@ -8117,27 +9074,28 @@ func (m *ArtifactoryArtifact) Unmarshal(dAtA []byte) error { } b := dAtA[iNdEx] iNdEx++ - stringLen |= uint64(b&0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } } - intStringLen := int(stringLen) - if intStringLen < 0 { + if msglen < 0 { return ErrInvalidLengthGenerated } - postIndex := iNdEx + intStringLen + postIndex := iNdEx + msglen if postIndex < 0 { return ErrInvalidLengthGenerated } if postIndex > l { return io.ErrUnexpectedEOF } - m.URL = string(dAtA[iNdEx:postIndex]) + if err := m.ObjectMeta.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } iNdEx = postIndex case 2: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field ArtifactoryAuth", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field Spec", wireType) } var msglen int for shift := uint(0); ; shift += 7 { @@ -8164,7 +9122,40 @@ func (m *ArtifactoryArtifact) Unmarshal(dAtA []byte) error { if postIndex > l { return io.ErrUnexpectedEOF } - if err := m.ArtifactoryAuth.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + if err := m.Spec.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 3: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Status", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.Status.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { return err } iNdEx = postIndex @@ -8192,7 +9183,7 @@ func (m *ArtifactoryArtifact) Unmarshal(dAtA []byte) error { } return nil } -func (m *ArtifactoryAuth) Unmarshal(dAtA []byte) error { +func (m *CronWorkflowList) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 for iNdEx < l { @@ -8215,15 +9206,15 @@ func (m *ArtifactoryAuth) Unmarshal(dAtA []byte) error { fieldNum := int32(wire >> 3) wireType := int(wire & 0x7) if wireType == 4 { - return fmt.Errorf("proto: ArtifactoryAuth: wiretype end group for non-group") + return fmt.Errorf("proto: CronWorkflowList: wiretype end group for non-group") } if fieldNum <= 0 { - return fmt.Errorf("proto: ArtifactoryAuth: illegal tag %d (wire type %d)", fieldNum, wire) + return fmt.Errorf("proto: CronWorkflowList: illegal tag %d (wire type %d)", fieldNum, wire) } switch fieldNum { case 1: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field UsernameSecret", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field ListMeta", wireType) } var msglen int for shift := uint(0); ; shift += 7 { @@ -8250,16 +9241,13 @@ func (m *ArtifactoryAuth) Unmarshal(dAtA []byte) error { if postIndex > l { return io.ErrUnexpectedEOF } - if m.UsernameSecret == nil { - m.UsernameSecret = &v1.SecretKeySelector{} - } - if err := m.UsernameSecret.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + if err := m.ListMeta.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { return err } iNdEx = postIndex case 2: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field PasswordSecret", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field Items", wireType) } var msglen int for shift := uint(0); ; shift += 7 { @@ -8286,10 +9274,8 @@ func (m *ArtifactoryAuth) Unmarshal(dAtA []byte) error { if postIndex > l { return io.ErrUnexpectedEOF } - if m.PasswordSecret == nil { - m.PasswordSecret = &v1.SecretKeySelector{} - } - if err := m.PasswordSecret.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + m.Items = append(m.Items, CronWorkflow{}) + if err := m.Items[len(m.Items)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { return err } iNdEx = postIndex @@ -8317,7 +9303,7 @@ func (m *ArtifactoryAuth) Unmarshal(dAtA []byte) error { } return nil } -func (m *Backoff) Unmarshal(dAtA []byte) error { +func (m *CronWorkflowSpec) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 for iNdEx < l { @@ -8340,17 +9326,17 @@ func (m *Backoff) Unmarshal(dAtA []byte) error { fieldNum := int32(wire >> 3) wireType := int(wire & 0x7) if wireType == 4 { - return fmt.Errorf("proto: Backoff: wiretype end group for non-group") + return fmt.Errorf("proto: CronWorkflowSpec: wiretype end group for non-group") } if fieldNum <= 0 { - return fmt.Errorf("proto: Backoff: illegal tag %d (wire type %d)", fieldNum, wire) + return fmt.Errorf("proto: CronWorkflowSpec: illegal tag %d (wire type %d)", fieldNum, wire) } switch fieldNum { case 1: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Duration", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field WorkflowSpec", wireType) } - var stringLen uint64 + var msglen int for shift := uint(0); ; shift += 7 { if shift >= 64 { return ErrIntOverflowGenerated @@ -8360,29 +9346,30 @@ func (m *Backoff) Unmarshal(dAtA []byte) error { } b := dAtA[iNdEx] iNdEx++ - stringLen |= uint64(b&0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } } - intStringLen := int(stringLen) - if intStringLen < 0 { + if msglen < 0 { return ErrInvalidLengthGenerated } - postIndex := iNdEx + intStringLen + postIndex := iNdEx + msglen if postIndex < 0 { return ErrInvalidLengthGenerated } if postIndex > l { return io.ErrUnexpectedEOF } - m.Duration = string(dAtA[iNdEx:postIndex]) + if err := m.WorkflowSpec.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } iNdEx = postIndex case 2: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field Factor", wireType) + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Schedule", wireType) } - m.Factor = 0 + var stringLen uint64 for shift := uint(0); ; shift += 7 { if shift >= 64 { return ErrIntOverflowGenerated @@ -8392,14 +9379,27 @@ func (m *Backoff) Unmarshal(dAtA []byte) error { } b := dAtA[iNdEx] iNdEx++ - m.Factor |= int32(b&0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Schedule = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex case 3: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field MaxDuration", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field ConcurrencyPolicy", wireType) } var stringLen uint64 for shift := uint(0); ; shift += 7 { @@ -8427,8 +9427,88 @@ func (m *Backoff) Unmarshal(dAtA []byte) error { if postIndex > l { return io.ErrUnexpectedEOF } - m.MaxDuration = string(dAtA[iNdEx:postIndex]) + m.ConcurrencyPolicy = ConcurrencyPolicy(dAtA[iNdEx:postIndex]) iNdEx = postIndex + case 4: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field Suspend", wireType) + } + var v int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + v |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + m.Suspend = bool(v != 0) + case 5: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field StartingDeadlineSeconds", wireType) + } + var v int64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + v |= int64(b&0x7F) << shift + if b < 0x80 { + break + } + } + m.StartingDeadlineSeconds = &v + case 6: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field SuccessfulJobsHistoryLimit", wireType) + } + var v int32 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + v |= int32(b&0x7F) << shift + if b < 0x80 { + break + } + } + m.SuccessfulJobsHistoryLimit = &v + case 7: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field FailedJobsHistoryLimit", wireType) + } + var v int32 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + v |= int32(b&0x7F) << shift + if b < 0x80 { + break + } + } + m.FailedJobsHistoryLimit = &v default: iNdEx = preIndex skippy, err := skipGenerated(dAtA[iNdEx:]) @@ -8453,7 +9533,7 @@ func (m *Backoff) Unmarshal(dAtA []byte) error { } return nil } -func (m *ContinueOn) Unmarshal(dAtA []byte) error { +func (m *CronWorkflowStatus) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 for iNdEx < l { @@ -8476,17 +9556,17 @@ func (m *ContinueOn) Unmarshal(dAtA []byte) error { fieldNum := int32(wire >> 3) wireType := int(wire & 0x7) if wireType == 4 { - return fmt.Errorf("proto: ContinueOn: wiretype end group for non-group") + return fmt.Errorf("proto: CronWorkflowStatus: wiretype end group for non-group") } if fieldNum <= 0 { - return fmt.Errorf("proto: ContinueOn: illegal tag %d (wire type %d)", fieldNum, wire) + return fmt.Errorf("proto: CronWorkflowStatus: illegal tag %d (wire type %d)", fieldNum, wire) } switch fieldNum { case 1: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field Error", wireType) + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Active", wireType) } - var v int + var msglen int for shift := uint(0); ; shift += 7 { if shift >= 64 { return ErrIntOverflowGenerated @@ -8496,17 +9576,31 @@ func (m *ContinueOn) Unmarshal(dAtA []byte) error { } b := dAtA[iNdEx] iNdEx++ - v |= int(b&0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } } - m.Error = bool(v != 0) + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Active = append(m.Active, v1.ObjectReference{}) + if err := m.Active[len(m.Active)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex case 2: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field Failed", wireType) + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field LastScheduledTime", wireType) } - var v int + var msglen int for shift := uint(0); ; shift += 7 { if shift >= 64 { return ErrIntOverflowGenerated @@ -8516,12 +9610,28 @@ func (m *ContinueOn) Unmarshal(dAtA []byte) error { } b := dAtA[iNdEx] iNdEx++ - v |= int(b&0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } } - m.Failed = bool(v != 0) + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.LastScheduledTime == nil { + m.LastScheduledTime = &v11.Time{} + } + if err := m.LastScheduledTime.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex default: iNdEx = preIndex skippy, err := skipGenerated(dAtA[iNdEx:]) From 134f5733174ea8cab33cf50f37c9ff6034b1d57e Mon Sep 17 00:00:00 2001 From: Simon Behar Date: Thu, 26 Dec 2019 09:51:36 -0800 Subject: [PATCH 33/44] Alex's comments --- cmd/argo/commands/cron/create.go | 3 --- manifests/base/crds/workflow-crd.yaml | 3 ++- 2 files changed, 2 insertions(+), 4 deletions(-) diff --git a/cmd/argo/commands/cron/create.go b/cmd/argo/commands/cron/create.go index 029ef734e763..f6d8afa54cab 100644 --- a/cmd/argo/commands/cron/create.go +++ b/cmd/argo/commands/cron/create.go @@ -41,9 +41,6 @@ func NewCreateCommand() *cobra.Command { } func CreateCronWorkflows(filePaths []string, cliOpts *cliCreateOpts) { - if cliOpts == nil { - cliOpts = &cliCreateOpts{} - } defaultCronWfClient := InitCronWorkflowClient() fileContents, err := util.ReadManifest(filePaths...) diff --git a/manifests/base/crds/workflow-crd.yaml b/manifests/base/crds/workflow-crd.yaml index d74e13322664..f38016e8ac4c 100644 --- a/manifests/base/crds/workflow-crd.yaml +++ b/manifests/base/crds/workflow-crd.yaml @@ -48,4 +48,5 @@ spec: kind: CronWorkflow plural: cronworkflows shortNames: - - cronwf \ No newline at end of file + - cronwf + - cwf \ No newline at end of file From 16789f39e8f37767f08cc254b5a2d4aeaf0ca7a3 Mon Sep 17 00:00:00 2001 From: Simon Behar Date: Fri, 3 Jan 2020 10:54:44 -0800 Subject: [PATCH 34/44] WIP --- manifests/install.yaml | 1 + manifests/namespace-install.yaml | 1 + pkg/apis/workflow/v1alpha1/generated.pb.go | 58 +++------ test/e2e/cron/cron_test.go | 120 +++++++++++++++++++ test/e2e/cron/testdata/always-fail-1.yaml | 18 +++ test/e2e/cron/testdata/always-fail-2.yaml | 18 +++ test/e2e/cron/testdata/always-succeed-1.yaml | 18 +++ test/e2e/cron/testdata/basic-allow.yaml | 18 +++ test/e2e/cron/testdata/basic-forbid.yaml | 18 +++ test/e2e/cron/testdata/basic-replace.yaml | 18 +++ test/e2e/cron/testdata/basic.yaml | 18 +++ test/e2e/fixtures/e2e_suite.go | 17 +++ test/e2e/fixtures/given.go | 55 ++++++++- test/e2e/fixtures/then.go | 38 +++++- test/e2e/fixtures/when.go | 47 ++++++-- workflow/common/util.go | 2 +- workflow/cron/controller.go | 6 +- workflow/cron/operator.go | 9 +- 18 files changed, 414 insertions(+), 66 deletions(-) create mode 100644 test/e2e/cron/cron_test.go create mode 100644 test/e2e/cron/testdata/always-fail-1.yaml create mode 100644 test/e2e/cron/testdata/always-fail-2.yaml create mode 100644 test/e2e/cron/testdata/always-succeed-1.yaml create mode 100644 test/e2e/cron/testdata/basic-allow.yaml create mode 100644 test/e2e/cron/testdata/basic-forbid.yaml create mode 100644 test/e2e/cron/testdata/basic-replace.yaml create mode 100644 test/e2e/cron/testdata/basic.yaml diff --git a/manifests/install.yaml b/manifests/install.yaml index 043c8b873574..8b1d7e782312 100644 --- a/manifests/install.yaml +++ b/manifests/install.yaml @@ -10,6 +10,7 @@ spec: plural: cronworkflows shortNames: - cronwf + - cwf scope: Namespaced version: v1alpha1 --- diff --git a/manifests/namespace-install.yaml b/manifests/namespace-install.yaml index a8bd1012452c..88ae1bd625ae 100644 --- a/manifests/namespace-install.yaml +++ b/manifests/namespace-install.yaml @@ -10,6 +10,7 @@ spec: plural: cronworkflows shortNames: - cronwf + - cwf scope: Namespaced version: v1alpha1 --- diff --git a/pkg/apis/workflow/v1alpha1/generated.pb.go b/pkg/apis/workflow/v1alpha1/generated.pb.go index fa79a6f713db..09cc846415ba 100644 --- a/pkg/apis/workflow/v1alpha1/generated.pb.go +++ b/pkg/apis/workflow/v1alpha1/generated.pb.go @@ -19019,6 +19019,7 @@ func (m *WorkflowTemplateSpec) Unmarshal(dAtA []byte) error { func skipGenerated(dAtA []byte) (n int, err error) { l := len(dAtA) iNdEx := 0 + depth := 0 for iNdEx < l { var wire uint64 for shift := uint(0); ; shift += 7 { @@ -19050,10 +19051,8 @@ func skipGenerated(dAtA []byte) (n int, err error) { break } } - return iNdEx, nil case 1: iNdEx += 8 - return iNdEx, nil case 2: var length int for shift := uint(0); ; shift += 7 { @@ -19074,55 +19073,30 @@ func skipGenerated(dAtA []byte) (n int, err error) { return 0, ErrInvalidLengthGenerated } iNdEx += length - if iNdEx < 0 { - return 0, ErrInvalidLengthGenerated - } - return iNdEx, nil case 3: - for { - var innerWire uint64 - var start int = iNdEx - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return 0, ErrIntOverflowGenerated - } - if iNdEx >= l { - return 0, io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - innerWire |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - innerWireType := int(innerWire & 0x7) - if innerWireType == 4 { - break - } - next, err := skipGenerated(dAtA[start:]) - if err != nil { - return 0, err - } - iNdEx = start + next - if iNdEx < 0 { - return 0, ErrInvalidLengthGenerated - } - } - return iNdEx, nil + depth++ case 4: - return iNdEx, nil + if depth == 0 { + return 0, ErrUnexpectedEndOfGroupGenerated + } + depth-- case 5: iNdEx += 4 - return iNdEx, nil default: return 0, fmt.Errorf("proto: illegal wireType %d", wireType) } + if iNdEx < 0 { + return 0, ErrInvalidLengthGenerated + } + if depth == 0 { + return iNdEx, nil + } } - panic("unreachable") + return 0, io.ErrUnexpectedEOF } var ( - ErrInvalidLengthGenerated = fmt.Errorf("proto: negative length found during unmarshaling") - ErrIntOverflowGenerated = fmt.Errorf("proto: integer overflow") + ErrInvalidLengthGenerated = fmt.Errorf("proto: negative length found during unmarshaling") + ErrIntOverflowGenerated = fmt.Errorf("proto: integer overflow") + ErrUnexpectedEndOfGroupGenerated = fmt.Errorf("proto: unexpected end of group") ) diff --git a/test/e2e/cron/cron_test.go b/test/e2e/cron/cron_test.go new file mode 100644 index 000000000000..633ec202b71c --- /dev/null +++ b/test/e2e/cron/cron_test.go @@ -0,0 +1,120 @@ +package cron + +import ( + wfv1 "github.com/argoproj/argo/pkg/apis/workflow/v1alpha1" + "github.com/argoproj/argo/test/e2e/fixtures" + "github.com/argoproj/argo/workflow/cron" + "github.com/stretchr/testify/assert" + "github.com/stretchr/testify/suite" + v1 "k8s.io/apimachinery/pkg/apis/meta/v1" + "testing" + "time" +) + +type CronSuite struct { + fixtures.E2ESuite +} + +func (s *CronSuite) TestBasic() { + s.T().Parallel() + s.Given(). + CronWorkflow("@testdata/basic.yaml"). + When(). + CreateCronWorkflow(). + Wait(1 * time.Minute). + Then(). + ExpectCron(func(t *testing.T, cronWf *wfv1.CronWorkflowStatus) { + assert.True(t, cronWf.LastScheduledTime.Time.After(time.Now().Add(-1 * time.Minute))) + }) +} + +func (s *CronSuite) TestBasicForbid() { + s.T().Parallel() + s.Given(). + CronWorkflow("@testdata/basic-forbid.yaml"). + When(). + CreateCronWorkflow(). + Wait(2 * time.Minute). + Then(). + ExpectCron(func(t *testing.T, cronWf *wfv1.CronWorkflowStatus) { + assert.Equal(t, 1, len(cronWf.Active)) + }) +} + +func (s *CronSuite) TestBasicAllow() { + s.T().Parallel() + s.Given(). + CronWorkflow("@testdata/basic-allow.yaml"). + When(). + CreateCronWorkflow(). + Wait(2 * time.Minute). + Then(). + ExpectCron(func(t *testing.T, cronWf *wfv1.CronWorkflowStatus) { + assert.Equal(t, 2, len(cronWf.Active)) + }) +} + +func (s *CronSuite) TestBasicReplace() { + s.T().Parallel() + s.Given(). + CronWorkflow("@testdata/basic-replace.yaml"). + When(). + CreateCronWorkflow(). + Wait(2 * time.Minute). + Then(). + ExpectCron(func(t *testing.T, cronWf *wfv1.CronWorkflowStatus) { + assert.Equal(t, 1, len(cronWf.Active)) + }) +} + +func (s *CronSuite) TestSuccessfulJobHistoryLimit() { + var listOptions v1.ListOptions + cron.WfInformerListOptionsFunc(&listOptions) + s.T().Parallel() + s.Given(). + CronWorkflow("@testdata/always-succeed-1.yaml"). + When(). + CreateCronWorkflow(). + Wait(2 * time.Minute). + Then(). + ExpectWorkflowList(listOptions, func(t *testing.T, wfList *wfv1.WorkflowList) { + assert.Equal(t, 1, len(wfList.Items)) + assert.True(t, wfList.Items[0].Status.FinishedAt.Time.After(time.Now().Add(-1 * time.Minute))) + }) +} + +func (s *CronSuite) TestFailedJobHistoryLimit() { + var listOptions v1.ListOptions + cron.WfInformerListOptionsFunc(&listOptions) + s.T().Parallel() + s.Given(). + CronWorkflow("@testdata/always-fail-1.yaml"). + When(). + CreateCronWorkflow(). + Wait(2 * time.Minute). + Then(). + ExpectWorkflowList(listOptions, func(t *testing.T, wfList *wfv1.WorkflowList) { + assert.Equal(t, 1, len(wfList.Items)) + assert.True(t, wfList.Items[0].Status.FinishedAt.Time.After(time.Now().Add(-1 * time.Minute))) + }) +} + +func (s *CronSuite) TestFailedJobHistoryLimitConcurrent() { + var listOptions v1.ListOptions + cron.WfInformerListOptionsFunc(&listOptions) + s.T().Parallel() + s.Given(). + CronWorkflow("@testdata/always-fail-2.yaml"). + When(). + CreateCronWorkflow(). + Wait(2 * time.Minute). + Then(). + ExpectWorkflowList(listOptions, func(t *testing.T, wfList *wfv1.WorkflowList) { + assert.Equal(t, 1, len(wfList.Items)) + assert.True(t, wfList.Items[0].Status.FinishedAt.Time.After(time.Now().Add(-1 * time.Minute))) + }) +} + +func TestCronSuite(t *testing.T) { + suite.Run(t, new(CronSuite)) +} diff --git a/test/e2e/cron/testdata/always-fail-1.yaml b/test/e2e/cron/testdata/always-fail-1.yaml new file mode 100644 index 000000000000..1efdd913f3f4 --- /dev/null +++ b/test/e2e/cron/testdata/always-fail-1.yaml @@ -0,0 +1,18 @@ +apiVersion: argoproj.io/v1alpha1 +kind: CronWorkflow +metadata: + name: test-cron-wf-fail-1 +spec: + schedule: "* * * * *" + concurrencyPolicy: "Forbid" + startingDeadlineSeconds: 0 + successfulJobsHistoryLimit: 4 + failedJobsHistoryLimit: 1 + workflowSpec: + entrypoint: whalesay + templates: + - name: whalesay + container: + image: python:alpine3.6 + command: ["python", -c] + args: ["import random; import sys; exit_code = random.choice([1]); print('exiting with code {}'.format(exit_code)); sys.exit(exit_code)"] diff --git a/test/e2e/cron/testdata/always-fail-2.yaml b/test/e2e/cron/testdata/always-fail-2.yaml new file mode 100644 index 000000000000..8a9a150c6a9b --- /dev/null +++ b/test/e2e/cron/testdata/always-fail-2.yaml @@ -0,0 +1,18 @@ +apiVersion: argoproj.io/v1alpha1 +kind: CronWorkflow +metadata: + name: test-cron-wf-fail-2 +spec: + schedule: "* * * * *" + concurrencyPolicy: "Forbid" + startingDeadlineSeconds: 0 + successfulJobsHistoryLimit: 4 + failedJobsHistoryLimit: 1 + workflowSpec: + entrypoint: whalesay + templates: + - name: whalesay + container: + image: python:alpine3.6 + command: ["python", -c] + args: ["import random; import sys; exit_code = random.choice([1]); print('exiting with code {}'.format(exit_code)); sys.exit(exit_code)"] diff --git a/test/e2e/cron/testdata/always-succeed-1.yaml b/test/e2e/cron/testdata/always-succeed-1.yaml new file mode 100644 index 000000000000..b876efba16d6 --- /dev/null +++ b/test/e2e/cron/testdata/always-succeed-1.yaml @@ -0,0 +1,18 @@ +apiVersion: argoproj.io/v1alpha1 +kind: CronWorkflow +metadata: + name: test-cron-wf-succeed-1 +spec: + schedule: "* * * * *" + concurrencyPolicy: "Forbid" + startingDeadlineSeconds: 0 + successfulJobsHistoryLimit: 1 + failedJobsHistoryLimit: 1 + workflowSpec: + entrypoint: whalesay + templates: + - name: whalesay + container: + image: python:alpine3.6 + command: ["python", -c] + args: ["import random; import sys; exit_code = random.choice([0]); print('exiting with code {}'.format(exit_code)); sys.exit(exit_code)"] diff --git a/test/e2e/cron/testdata/basic-allow.yaml b/test/e2e/cron/testdata/basic-allow.yaml new file mode 100644 index 000000000000..26d5ef3042e3 --- /dev/null +++ b/test/e2e/cron/testdata/basic-allow.yaml @@ -0,0 +1,18 @@ +apiVersion: argoproj.io/v1alpha1 +kind: CronWorkflow +metadata: + name: test-cron-wf-basic-allow +spec: + schedule: "* * * * *" + concurrencyPolicy: "Allow" + startingDeadlineSeconds: 0 + successfulJobsHistoryLimit: 4 + failedJobsHistoryLimit: 2 + workflowSpec: + entrypoint: whalesay + templates: + - name: whalesay + container: + image: python:alpine3.6 + command: ["sh", -c] + args: ["sleep 300"] diff --git a/test/e2e/cron/testdata/basic-forbid.yaml b/test/e2e/cron/testdata/basic-forbid.yaml new file mode 100644 index 000000000000..dbe326d36836 --- /dev/null +++ b/test/e2e/cron/testdata/basic-forbid.yaml @@ -0,0 +1,18 @@ +apiVersion: argoproj.io/v1alpha1 +kind: CronWorkflow +metadata: + name: test-cron-wf-basic-forbid +spec: + schedule: "* * * * *" + concurrencyPolicy: "Forbid" + startingDeadlineSeconds: 0 + successfulJobsHistoryLimit: 4 + failedJobsHistoryLimit: 2 + workflowSpec: + entrypoint: whalesay + templates: + - name: whalesay + container: + image: python:alpine3.6 + command: ["sh", -c] + args: ["sleep 300"] diff --git a/test/e2e/cron/testdata/basic-replace.yaml b/test/e2e/cron/testdata/basic-replace.yaml new file mode 100644 index 000000000000..93c382ccd814 --- /dev/null +++ b/test/e2e/cron/testdata/basic-replace.yaml @@ -0,0 +1,18 @@ +apiVersion: argoproj.io/v1alpha1 +kind: CronWorkflow +metadata: + name: test-cron-wf-basic-replace +spec: + schedule: "* * * * *" + concurrencyPolicy: "Replace" + startingDeadlineSeconds: 0 + successfulJobsHistoryLimit: 4 + failedJobsHistoryLimit: 2 + workflowSpec: + entrypoint: whalesay + templates: + - name: whalesay + container: + image: python:alpine3.6 + command: ["sh", -c] + args: ["sleep 300"] diff --git a/test/e2e/cron/testdata/basic.yaml b/test/e2e/cron/testdata/basic.yaml new file mode 100644 index 000000000000..bfcfe349f2d9 --- /dev/null +++ b/test/e2e/cron/testdata/basic.yaml @@ -0,0 +1,18 @@ +apiVersion: argoproj.io/v1alpha1 +kind: CronWorkflow +metadata: + name: test-cron-wf-basic +spec: + schedule: "* * * * *" + concurrencyPolicy: "Allow" + startingDeadlineSeconds: 0 + successfulJobsHistoryLimit: 4 + failedJobsHistoryLimit: 2 + workflowSpec: + entrypoint: whalesay + templates: + - name: whalesay + container: + image: python:alpine3.6 + command: ["sh", -c] + args: ["echo hello"] diff --git a/test/e2e/fixtures/e2e_suite.go b/test/e2e/fixtures/e2e_suite.go index 1808e5478aa2..712393de3358 100644 --- a/test/e2e/fixtures/e2e_suite.go +++ b/test/e2e/fixtures/e2e_suite.go @@ -3,6 +3,7 @@ package fixtures import ( "bufio" "fmt" + "github.com/argoproj/argo/cmd/argo/commands/cron" alpha1 "github.com/argoproj/argo/pkg/apis/workflow/v1alpha1" "os" "path/filepath" @@ -35,6 +36,7 @@ func init() { type E2ESuite struct { suite.Suite client v1alpha1.WorkflowInterface + cronClient v1alpha1.CronWorkflowInterface kubeClient kubernetes.Interface } @@ -55,6 +57,7 @@ func (s *E2ESuite) BeforeTest(_, _ string) { panic(err) } s.client = commands.InitWorkflowClient() + s.cronClient = cron.InitCronWorkflowClient() // delete all workflows list, err := s.client.List(metav1.ListOptions{LabelSelector: label}) if err != nil { @@ -80,6 +83,19 @@ func (s *E2ESuite) BeforeTest(_, _ string) { time.Sleep(1 * time.Second) } } + // delete all cron workflows + cronList, err := s.cronClient.List(metav1.ListOptions{LabelSelector: label}) + if err != nil { + panic(err) + } + for _, cronWf := range cronList.Items { + logCtx := log.WithFields(log.Fields{"test": s.T().Name(), "cron workflow": cronWf.Name}) + logCtx.Infof("Deleting cron workflow") + err = s.cronClient.Delete(cronWf.Name, nil) + if err != nil { + panic(err) + } + } } func (s *E2ESuite) AfterTest(_, _ string) { @@ -164,5 +180,6 @@ func (s *E2ESuite) Given() *Given { return &Given{ t: s.T(), client: s.client, + cronClient: s.cronClient, } } diff --git a/test/e2e/fixtures/given.go b/test/e2e/fixtures/given.go index be5f5fff24e5..cdd39ccaa304 100644 --- a/test/e2e/fixtures/given.go +++ b/test/e2e/fixtures/given.go @@ -12,9 +12,11 @@ import ( ) type Given struct { - t *testing.T - client v1alpha1.WorkflowInterface - wf *wfv1.Workflow + t *testing.T + client v1alpha1.WorkflowInterface + cronClient v1alpha1.CronWorkflowInterface + wf *wfv1.Workflow + cronWf *wfv1.CronWorkflow } // creates a workflow based on the parameter, this may be: @@ -58,10 +60,51 @@ func (g *Given) Workflow(text string) *Given { } return g } + +func (g *Given) CronWorkflow(text string) *Given { + var file string + if strings.HasPrefix(text, "@") { + file = strings.TrimPrefix(text, "@") + } else { + f, err := ioutil.TempFile("", "argo_e2e") + if err != nil { + g.t.Fatal(err) + } + _, err = f.Write([]byte(text)) + if err != nil { + g.t.Fatal(err) + } + err = f.Close() + if err != nil { + g.t.Fatal(err) + } + file = f.Name() + } + // read the file in + { + file, err := ioutil.ReadFile(file) + if err != nil { + g.t.Fatal(err) + } + g.cronWf = &wfv1.CronWorkflow{} + err = yaml.Unmarshal(file, g.cronWf) + if err != nil { + g.t.Fatal(err) + } + if g.cronWf.GetLabels() == nil { + g.cronWf.SetLabels(map[string]string{}) + } + g.cronWf.GetLabels()[label] = "true" + } + return g +} + func (g *Given) When() *When { return &When{ - t: g.t, - wf: g.wf, - client: g.client, + t: g.t, + wf: g.wf, + cronWf: g.cronWf, + client: g.client, + cronClient: g.cronClient, } } diff --git a/test/e2e/fixtures/then.go b/test/e2e/fixtures/then.go index 4915b2c864ca..512490dd1ab2 100644 --- a/test/e2e/fixtures/then.go +++ b/test/e2e/fixtures/then.go @@ -11,12 +11,17 @@ import ( ) type Then struct { - t *testing.T - workflowName string - client v1alpha1.WorkflowInterface + t *testing.T + workflowName string + cronWorkflowName string + client v1alpha1.WorkflowInterface + cronClient v1alpha1.CronWorkflowInterface } -func (t *Then) Expect(block func(t *testing.T, wf *wfv1.WorkflowStatus)) *Then { +func (t *Then) Expect(block func(*testing.T, *wfv1.WorkflowStatus)) *Then { + if t.workflowName == "" { + t.t.Fatal("No workflow to test") + } log.WithFields(log.Fields{"test": t.t.Name(), "workflow": t.workflowName}).Info("Checking expectation") wf, err := t.client.Get(t.workflowName, metav1.GetOptions{}) if err != nil { @@ -25,3 +30,28 @@ func (t *Then) Expect(block func(t *testing.T, wf *wfv1.WorkflowStatus)) *Then { block(t.t, &wf.Status) return t } + +func (t *Then) ExpectCron(block func(*testing.T, *wfv1.CronWorkflowStatus)) *Then { + if t.cronWorkflowName == "" { + t.t.Fatal("No cron workflow to test") + } + log.WithFields(log.Fields{"test": t.t.Name(), "cron workflow": t.cronWorkflowName}).Info("Checking expectation") + cronWf, err := t.cronClient.Get(t.cronWorkflowName, metav1.GetOptions{}) + if err != nil { + t.t.Fatal(err) + } + block(t.t, &cronWf.Status) + return t +} + +func (t *Then) ExpectWorkflowList(listOptions metav1.ListOptions, block func(*testing.T, *wfv1.WorkflowList)) *Then { + log.WithFields(log.Fields{"test": t.t.Name()}).Info("Getting relevant workflows") + wfList, err := t.client.List(listOptions) + if err != nil { + t.t.Fatal(err) + } + log.WithFields(log.Fields{"test": t.t.Name()}).Info("Got relevant workflows") + log.WithFields(log.Fields{"test": t.t.Name()}).Info("Checking expectation") + block(t.t, wfList) + return t +} diff --git a/test/e2e/fixtures/when.go b/test/e2e/fixtures/when.go index f50370777adc..3c91c508d1fe 100644 --- a/test/e2e/fixtures/when.go +++ b/test/e2e/fixtures/when.go @@ -2,6 +2,7 @@ package fixtures import ( "fmt" + "github.com/argoproj/pkg/humanize" "testing" "time" @@ -14,13 +15,19 @@ import ( ) type When struct { - t *testing.T - wf *wfv1.Workflow - client v1alpha1.WorkflowInterface - workflowName string + t *testing.T + wf *wfv1.Workflow + cronWf *wfv1.CronWorkflow + client v1alpha1.WorkflowInterface + cronClient v1alpha1.CronWorkflowInterface + workflowName string + cronWorkflowName string } func (w *When) SubmitWorkflow() *When { + if w.wf == nil { + w.t.Fatal("No workflow to submit") + } log.WithField("test", w.t.Name()).Info("Submitting workflow") wf, err := w.client.Create(w.wf) if err != nil { @@ -28,6 +35,22 @@ func (w *When) SubmitWorkflow() *When { } else { w.workflowName = wf.Name } + log.WithField("test", w.t.Name()).Info("Workflow submitted") + return w +} + +func (w *When) CreateCronWorkflow() *When { + if w.cronWf == nil { + w.t.Fatal("No cron workflow to create") + } + log.WithField("test", w.t.Name()).Info("Creating cron workflow") + cronWf, err := w.cronClient.Create(w.cronWf) + if err != nil { + w.t.Fatal(err) + } else { + w.cronWorkflowName = cronWf.Name + } + log.WithField("test", w.t.Name()).Info("Cron workflow created") return w } @@ -62,6 +85,14 @@ func (w *When) WaitForWorkflow(timeout time.Duration) *When { } } +func (w *When) Wait(timeout time.Duration) *When { + logCtx := log.WithFields(log.Fields{"test": w.t.Name(), "cron workflow": w.cronWorkflowName}) + logCtx.Infof("Waiting for %s", humanize.Duration(timeout)) + time.Sleep(timeout) + logCtx.Infof("Done waiting") + return w +} + func (w *When) DeleteWorkflow() *When { log.WithField("test", w.t.Name()).WithField("workflow", w.workflowName).Info("Deleting") err := w.client.Delete(w.workflowName, nil) @@ -73,8 +104,10 @@ func (w *When) DeleteWorkflow() *When { func (w *When) Then() *Then { return &Then{ - t: w.t, - workflowName: w.workflowName, - client: w.client, + t: w.t, + workflowName: w.workflowName, + cronWorkflowName: w.cronWorkflowName, + client: w.client, + cronClient: w.cronClient, } } diff --git a/workflow/common/util.go b/workflow/common/util.go index 7b53b591b7b4..b268be390256 100644 --- a/workflow/common/util.go +++ b/workflow/common/util.go @@ -690,7 +690,7 @@ func CastToWorkflow(cronWf *wfv1.CronWorkflow) (*wfv1.Workflow, error) { newObjectMeta.GenerateName = cronWf.Name + "-" newObjectMeta.Labels = make(map[string]string) - newObjectMeta.Labels[LabelCronWorkflow] = "true" + newObjectMeta.Labels[LabelCronWorkflow] = cronWf.Name wf := &wfv1.Workflow{ TypeMeta: newTypeMeta, diff --git a/workflow/cron/controller.go b/workflow/cron/controller.go index 6c052718d658..a53e7a30b1d7 100644 --- a/workflow/cron/controller.go +++ b/workflow/cron/controller.go @@ -65,7 +65,7 @@ func (cc *Controller) Run(ctx context.Context) { cc.cronWfInformer = cc.newCronWorkflowInformer() cc.addCronWorkflowInformerHandler() - cc.wfInformer = util.NewWorkflowInformer(cc.restConfig, "", cronWorkflowResyncPeriod, wfInformerListOptionsFunc) + cc.wfInformer = util.NewWorkflowInformer(cc.restConfig, "", cronWorkflowResyncPeriod, WfInformerListOptionsFunc) cc.addWorkflowInformerHandler() cc.cron.Start() @@ -263,9 +263,9 @@ func (cc *Controller) addWorkflowInformerHandler() { ) } -func wfInformerListOptionsFunc(options *v1.ListOptions) { +func WfInformerListOptionsFunc(options *v1.ListOptions) { options.FieldSelector = fields.Everything().String() - isCronWorkflowChildReq, err := labels.NewRequirement(common.LabelCronWorkflow, selection.Equals, []string{"true"}) + isCronWorkflowChildReq, err := labels.NewRequirement(common.LabelCronWorkflow, selection.Exists, []string{}) if err != nil { panic(err) } diff --git a/workflow/cron/operator.go b/workflow/cron/operator.go index 6f235fd0af0f..fce17b71848c 100644 --- a/workflow/cron/operator.go +++ b/workflow/cron/operator.go @@ -37,11 +37,11 @@ func newCronWfOperationCtx(cronWorkflow *v1alpha1.CronWorkflow, wfClientset vers func (woc *cronWfOperationCtx) Run() { log.Infof("Running %s", woc.name) - ok, err := woc.enforceRuntimePolicy() + proceed, err := woc.enforceRuntimePolicy() if err != nil { log.Errorf("Concurrency policy error: %s", err) return - } else if !ok { + } else if !proceed { return } @@ -176,7 +176,7 @@ func (woc *cronWfOperationCtx) enforceHistoryLimit() { log.Infof("Enforcing history limit for '%s'", woc.cronWf.Name) listOptions := &v1.ListOptions{} - wfInformerListOptionsFunc(listOptions) + WfInformerListOptionsFunc(listOptions) wfList, err := woc.wfClient.List(*listOptions) if err != nil { log.Errorf("Unable to enforce history limit for CronWorkflow '%s': %s", woc.cronWf.Name, err) @@ -186,6 +186,9 @@ func (woc *cronWfOperationCtx) enforceHistoryLimit() { var successfulWorkflows []v1alpha1.Workflow var failedWorkflows []v1alpha1.Workflow for _, wf := range wfList.Items { + if wf.Labels[common.LabelCronWorkflow] != woc.cronWf.Name { + continue + } if wf.Status.Completed() { if wf.Status.Successful() { successfulWorkflows = append(successfulWorkflows, wf) From ec1d26c2a94263f480c2e536ee04c7d067af4cac Mon Sep 17 00:00:00 2001 From: Simon Behar Date: Fri, 3 Jan 2020 11:35:35 -0800 Subject: [PATCH 35/44] Added tests --- .../workflow-controller-clusterrole.yaml | 1 + manifests/install.yaml | 1 + test/e2e/cron/cron_test.go | 33 ++++++++++++++++--- workflow/cron/controller.go | 4 +-- workflow/cron/operator.go | 2 +- 5 files changed, 34 insertions(+), 7 deletions(-) diff --git a/manifests/cluster-install/workflow-controller-rbac/workflow-controller-clusterrole.yaml b/manifests/cluster-install/workflow-controller-rbac/workflow-controller-clusterrole.yaml index c4bc85caae57..2d97444c2245 100644 --- a/manifests/cluster-install/workflow-controller-rbac/workflow-controller-clusterrole.yaml +++ b/manifests/cluster-install/workflow-controller-rbac/workflow-controller-clusterrole.yaml @@ -43,6 +43,7 @@ rules: - update - patch - delete + - create - apiGroups: - argoproj.io resources: diff --git a/manifests/install.yaml b/manifests/install.yaml index 8b1d7e782312..6f606a0d4685 100644 --- a/manifests/install.yaml +++ b/manifests/install.yaml @@ -192,6 +192,7 @@ rules: - update - patch - delete + - create - apiGroups: - argoproj.io resources: diff --git a/test/e2e/cron/cron_test.go b/test/e2e/cron/cron_test.go index 633ec202b71c..1c2b9443c212 100644 --- a/test/e2e/cron/cron_test.go +++ b/test/e2e/cron/cron_test.go @@ -3,10 +3,15 @@ package cron import ( wfv1 "github.com/argoproj/argo/pkg/apis/workflow/v1alpha1" "github.com/argoproj/argo/test/e2e/fixtures" - "github.com/argoproj/argo/workflow/cron" + "github.com/argoproj/argo/workflow/common" + "github.com/argoproj/pkg/humanize" + "github.com/sirupsen/logrus" "github.com/stretchr/testify/assert" "github.com/stretchr/testify/suite" v1 "k8s.io/apimachinery/pkg/apis/meta/v1" + "k8s.io/apimachinery/pkg/fields" + "k8s.io/apimachinery/pkg/labels" + "k8s.io/apimachinery/pkg/selection" "testing" "time" ) @@ -69,7 +74,7 @@ func (s *CronSuite) TestBasicReplace() { func (s *CronSuite) TestSuccessfulJobHistoryLimit() { var listOptions v1.ListOptions - cron.WfInformerListOptionsFunc(&listOptions) + wfInformerListOptionsFunc(&listOptions, "test-cron-wf-succeed-1") s.T().Parallel() s.Given(). CronWorkflow("@testdata/always-succeed-1.yaml"). @@ -85,7 +90,7 @@ func (s *CronSuite) TestSuccessfulJobHistoryLimit() { func (s *CronSuite) TestFailedJobHistoryLimit() { var listOptions v1.ListOptions - cron.WfInformerListOptionsFunc(&listOptions) + wfInformerListOptionsFunc(&listOptions, "test-cron-wf-fail-1") s.T().Parallel() s.Given(). CronWorkflow("@testdata/always-fail-1.yaml"). @@ -101,7 +106,7 @@ func (s *CronSuite) TestFailedJobHistoryLimit() { func (s *CronSuite) TestFailedJobHistoryLimitConcurrent() { var listOptions v1.ListOptions - cron.WfInformerListOptionsFunc(&listOptions) + wfInformerListOptionsFunc(&listOptions, "test-cron-wf-fail-2") s.T().Parallel() s.Given(). CronWorkflow("@testdata/always-fail-2.yaml"). @@ -115,6 +120,26 @@ func (s *CronSuite) TestFailedJobHistoryLimitConcurrent() { }) } +func wfInformerListOptionsFunc(options *v1.ListOptions, cronWfName string) { + options.FieldSelector = fields.Everything().String() + isCronWorkflowChildReq, err := labels.NewRequirement(common.LabelCronWorkflow, selection.Equals, []string{cronWfName}) + if err != nil { + panic(err) + } + labelSelector := labels.NewSelector().Add(*isCronWorkflowChildReq) + options.LabelSelector = labelSelector.String() +} + func TestCronSuite(t *testing.T) { + // To ensure consistency, always start at the next 30 second mark + _, _, sec := time.Now().Clock() + var toWait time.Duration + if sec <= 30 { + toWait = time.Duration(30 - sec) * time.Second + } else { + toWait = time.Duration(90 - sec) * time.Second + } + logrus.Infof("Waiting %s to start", humanize.Duration(toWait)) + time.Sleep(toWait) suite.Run(t, new(CronSuite)) } diff --git a/workflow/cron/controller.go b/workflow/cron/controller.go index a53e7a30b1d7..41b98ae421d9 100644 --- a/workflow/cron/controller.go +++ b/workflow/cron/controller.go @@ -65,7 +65,7 @@ func (cc *Controller) Run(ctx context.Context) { cc.cronWfInformer = cc.newCronWorkflowInformer() cc.addCronWorkflowInformerHandler() - cc.wfInformer = util.NewWorkflowInformer(cc.restConfig, "", cronWorkflowResyncPeriod, WfInformerListOptionsFunc) + cc.wfInformer = util.NewWorkflowInformer(cc.restConfig, "", cronWorkflowResyncPeriod, wfInformerListOptionsFunc) cc.addWorkflowInformerHandler() cc.cron.Start() @@ -263,7 +263,7 @@ func (cc *Controller) addWorkflowInformerHandler() { ) } -func WfInformerListOptionsFunc(options *v1.ListOptions) { +func wfInformerListOptionsFunc(options *v1.ListOptions) { options.FieldSelector = fields.Everything().String() isCronWorkflowChildReq, err := labels.NewRequirement(common.LabelCronWorkflow, selection.Exists, []string{}) if err != nil { diff --git a/workflow/cron/operator.go b/workflow/cron/operator.go index fce17b71848c..ac8e230064d1 100644 --- a/workflow/cron/operator.go +++ b/workflow/cron/operator.go @@ -176,7 +176,7 @@ func (woc *cronWfOperationCtx) enforceHistoryLimit() { log.Infof("Enforcing history limit for '%s'", woc.cronWf.Name) listOptions := &v1.ListOptions{} - WfInformerListOptionsFunc(listOptions) + wfInformerListOptionsFunc(listOptions) wfList, err := woc.wfClient.List(*listOptions) if err != nil { log.Errorf("Unable to enforce history limit for CronWorkflow '%s': %s", woc.cronWf.Name, err) From 192ac2dbfd92f1e58f5864b4ac5bfbb867dbd0b5 Mon Sep 17 00:00:00 2001 From: Simon Behar Date: Fri, 3 Jan 2020 11:44:19 -0800 Subject: [PATCH 36/44] Enhanced test --- test/e2e/cron/cron_test.go | 20 +++++++++++--------- test/e2e/fixtures/e2e_suite.go | 4 ++-- 2 files changed, 13 insertions(+), 11 deletions(-) diff --git a/test/e2e/cron/cron_test.go b/test/e2e/cron/cron_test.go index 1c2b9443c212..dcd89f71c826 100644 --- a/test/e2e/cron/cron_test.go +++ b/test/e2e/cron/cron_test.go @@ -29,7 +29,7 @@ func (s *CronSuite) TestBasic() { Wait(1 * time.Minute). Then(). ExpectCron(func(t *testing.T, cronWf *wfv1.CronWorkflowStatus) { - assert.True(t, cronWf.LastScheduledTime.Time.After(time.Now().Add(-1 * time.Minute))) + assert.True(t, cronWf.LastScheduledTime.Time.After(time.Now().Add(-1*time.Minute))) }) } @@ -43,6 +43,7 @@ func (s *CronSuite) TestBasicForbid() { Then(). ExpectCron(func(t *testing.T, cronWf *wfv1.CronWorkflowStatus) { assert.Equal(t, 1, len(cronWf.Active)) + assert.True(t, cronWf.LastScheduledTime.Time.Before(time.Now().Add(-1*time.Minute))) }) } @@ -69,6 +70,7 @@ func (s *CronSuite) TestBasicReplace() { Then(). ExpectCron(func(t *testing.T, cronWf *wfv1.CronWorkflowStatus) { assert.Equal(t, 1, len(cronWf.Active)) + assert.True(t, cronWf.LastScheduledTime.Time.After(time.Now().Add(-1*time.Minute))) }) } @@ -80,11 +82,11 @@ func (s *CronSuite) TestSuccessfulJobHistoryLimit() { CronWorkflow("@testdata/always-succeed-1.yaml"). When(). CreateCronWorkflow(). - Wait(2 * time.Minute). + Wait(2*time.Minute). Then(). ExpectWorkflowList(listOptions, func(t *testing.T, wfList *wfv1.WorkflowList) { assert.Equal(t, 1, len(wfList.Items)) - assert.True(t, wfList.Items[0].Status.FinishedAt.Time.After(time.Now().Add(-1 * time.Minute))) + assert.True(t, wfList.Items[0].Status.FinishedAt.Time.After(time.Now().Add(-1*time.Minute))) }) } @@ -96,11 +98,11 @@ func (s *CronSuite) TestFailedJobHistoryLimit() { CronWorkflow("@testdata/always-fail-1.yaml"). When(). CreateCronWorkflow(). - Wait(2 * time.Minute). + Wait(2*time.Minute). Then(). ExpectWorkflowList(listOptions, func(t *testing.T, wfList *wfv1.WorkflowList) { assert.Equal(t, 1, len(wfList.Items)) - assert.True(t, wfList.Items[0].Status.FinishedAt.Time.After(time.Now().Add(-1 * time.Minute))) + assert.True(t, wfList.Items[0].Status.FinishedAt.Time.After(time.Now().Add(-1*time.Minute))) }) } @@ -112,11 +114,11 @@ func (s *CronSuite) TestFailedJobHistoryLimitConcurrent() { CronWorkflow("@testdata/always-fail-2.yaml"). When(). CreateCronWorkflow(). - Wait(2 * time.Minute). + Wait(2*time.Minute). Then(). ExpectWorkflowList(listOptions, func(t *testing.T, wfList *wfv1.WorkflowList) { assert.Equal(t, 1, len(wfList.Items)) - assert.True(t, wfList.Items[0].Status.FinishedAt.Time.After(time.Now().Add(-1 * time.Minute))) + assert.True(t, wfList.Items[0].Status.FinishedAt.Time.After(time.Now().Add(-1*time.Minute))) }) } @@ -135,9 +137,9 @@ func TestCronSuite(t *testing.T) { _, _, sec := time.Now().Clock() var toWait time.Duration if sec <= 30 { - toWait = time.Duration(30 - sec) * time.Second + toWait = time.Duration(30-sec) * time.Second } else { - toWait = time.Duration(90 - sec) * time.Second + toWait = time.Duration(90-sec) * time.Second } logrus.Infof("Waiting %s to start", humanize.Duration(toWait)) time.Sleep(toWait) diff --git a/test/e2e/fixtures/e2e_suite.go b/test/e2e/fixtures/e2e_suite.go index 712393de3358..4300b75839b2 100644 --- a/test/e2e/fixtures/e2e_suite.go +++ b/test/e2e/fixtures/e2e_suite.go @@ -178,8 +178,8 @@ func (s *E2ESuite) printPodLogs(logCtx *log.Entry, namespace, pod, container str func (s *E2ESuite) Given() *Given { return &Given{ - t: s.T(), - client: s.client, + t: s.T(), + client: s.client, cronClient: s.cronClient, } } From 6c437917c3eb25a606a7a556812c00bc6b60f366 Mon Sep 17 00:00:00 2001 From: Simon Behar Date: Mon, 6 Jan 2020 08:22:30 -0800 Subject: [PATCH 37/44] Test fixes --- Makefile | 2 +- workflow/cron/operator.go | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/Makefile b/Makefile index a99dc6530a46..70048823c5a7 100644 --- a/Makefile +++ b/Makefile @@ -139,7 +139,7 @@ endif .PHONY: test test: - go test -covermode=count -coverprofile=coverage.out ./... + go test -covermode=count -coverprofile=coverage.out `go list ./... | grep -v 'test/e2e'` .PHONY: cover cover: diff --git a/workflow/cron/operator.go b/workflow/cron/operator.go index ac8e230064d1..8e95c27bebb8 100644 --- a/workflow/cron/operator.go +++ b/workflow/cron/operator.go @@ -81,7 +81,7 @@ func getWorkflowObjectReference(wf *v1alpha1.Workflow, runWf *v1alpha1.Workflow) func (woc *cronWfOperationCtx) persistUpdate() error { _, err := woc.cronWfIf.Update(woc.cronWf) if err != nil { - return fmt.Errorf("failed to update CronWorkflow: %w", err) + return fmt.Errorf("failed to update CronWorkflow: %s", err) } return nil } From 98d79058a5329e8755a5e26f9ef6da070ba8c3e8 Mon Sep 17 00:00:00 2001 From: Simon Behar Date: Mon, 6 Jan 2020 08:35:43 -0800 Subject: [PATCH 38/44] Rename function --- workflow/common/util.go | 2 +- workflow/cron/operator.go | 2 +- workflow/validate/validate.go | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/workflow/common/util.go b/workflow/common/util.go index b268be390256..cfa45b4f1321 100644 --- a/workflow/common/util.go +++ b/workflow/common/util.go @@ -680,7 +680,7 @@ func GetTemplateHolderString(tmplHolder wfv1.TemplateHolder) string { } } -func CastToWorkflow(cronWf *wfv1.CronWorkflow) (*wfv1.Workflow, error) { +func ConvertToWorkflow(cronWf *wfv1.CronWorkflow) (*wfv1.Workflow, error) { newTypeMeta := metav1.TypeMeta{ Kind: workflow.WorkflowKind, APIVersion: cronWf.TypeMeta.APIVersion, diff --git a/workflow/cron/operator.go b/workflow/cron/operator.go index 8e95c27bebb8..dc078a157c26 100644 --- a/workflow/cron/operator.go +++ b/workflow/cron/operator.go @@ -45,7 +45,7 @@ func (woc *cronWfOperationCtx) Run() { return } - wf, err := common.CastToWorkflow(woc.cronWf) + wf, err := common.ConvertToWorkflow(woc.cronWf) if err != nil { log.Errorf("Unable to create Workflow for CronWorkflow %s", woc.name) return diff --git a/workflow/validate/validate.go b/workflow/validate/validate.go index e42d69a3f606..505171dc5184 100644 --- a/workflow/validate/validate.go +++ b/workflow/validate/validate.go @@ -191,7 +191,7 @@ func ValidateCronWorkflow(wftmplGetter templateresolution.WorkflowTemplateNamesp return errors.Errorf(errors.CodeBadRequest, "startingDeadlineSeconds must be positive") } - wf, err := common.CastToWorkflow(cronWf) + wf, err := common.ConvertToWorkflow(cronWf) if err != nil { return errors.Errorf(errors.CodeBadRequest, "cannot convert to Workflow: %s", err) } From c4ec587b81ab17638979475d42387864523a8cd8 Mon Sep 17 00:00:00 2001 From: Simon Behar Date: Mon, 6 Jan 2020 13:15:19 -0800 Subject: [PATCH 39/44] Run CronWorkflow test --- Makefile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Makefile b/Makefile index 70048823c5a7..090fc78a6555 100644 --- a/Makefile +++ b/Makefile @@ -195,7 +195,7 @@ logs-e2e: .PHONY: test-e2e test-e2e: - go test -v -count 1 -p 1 ./test/e2e + go test -v -count 1 -p 1 ./test/e2e/... .PHONY: clean clean: From 898f6ddb896e97ba04bd07959ca9b70730bc76e8 Mon Sep 17 00:00:00 2001 From: Simon Behar Date: Mon, 6 Jan 2020 13:29:27 -0800 Subject: [PATCH 40/44] Run tests in parallel --- Makefile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Makefile b/Makefile index 090fc78a6555..4b0b03d48786 100644 --- a/Makefile +++ b/Makefile @@ -195,7 +195,7 @@ logs-e2e: .PHONY: test-e2e test-e2e: - go test -v -count 1 -p 1 ./test/e2e/... + go test -v -count 1 ./test/e2e/... .PHONY: clean clean: From b3f244a6ef268f10a448efdc6e96705b9b3e7a08 Mon Sep 17 00:00:00 2001 From: Simon Behar Date: Tue, 7 Jan 2020 06:13:24 -0800 Subject: [PATCH 41/44] No parallel tests --- Makefile | 2 +- test/e2e/cron/cron_test.go | 7 ------- 2 files changed, 1 insertion(+), 8 deletions(-) diff --git a/Makefile b/Makefile index 4b0b03d48786..090fc78a6555 100644 --- a/Makefile +++ b/Makefile @@ -195,7 +195,7 @@ logs-e2e: .PHONY: test-e2e test-e2e: - go test -v -count 1 ./test/e2e/... + go test -v -count 1 -p 1 ./test/e2e/... .PHONY: clean clean: diff --git a/test/e2e/cron/cron_test.go b/test/e2e/cron/cron_test.go index dcd89f71c826..4950446ad068 100644 --- a/test/e2e/cron/cron_test.go +++ b/test/e2e/cron/cron_test.go @@ -21,7 +21,6 @@ type CronSuite struct { } func (s *CronSuite) TestBasic() { - s.T().Parallel() s.Given(). CronWorkflow("@testdata/basic.yaml"). When(). @@ -34,7 +33,6 @@ func (s *CronSuite) TestBasic() { } func (s *CronSuite) TestBasicForbid() { - s.T().Parallel() s.Given(). CronWorkflow("@testdata/basic-forbid.yaml"). When(). @@ -48,7 +46,6 @@ func (s *CronSuite) TestBasicForbid() { } func (s *CronSuite) TestBasicAllow() { - s.T().Parallel() s.Given(). CronWorkflow("@testdata/basic-allow.yaml"). When(). @@ -61,7 +58,6 @@ func (s *CronSuite) TestBasicAllow() { } func (s *CronSuite) TestBasicReplace() { - s.T().Parallel() s.Given(). CronWorkflow("@testdata/basic-replace.yaml"). When(). @@ -77,7 +73,6 @@ func (s *CronSuite) TestBasicReplace() { func (s *CronSuite) TestSuccessfulJobHistoryLimit() { var listOptions v1.ListOptions wfInformerListOptionsFunc(&listOptions, "test-cron-wf-succeed-1") - s.T().Parallel() s.Given(). CronWorkflow("@testdata/always-succeed-1.yaml"). When(). @@ -93,7 +88,6 @@ func (s *CronSuite) TestSuccessfulJobHistoryLimit() { func (s *CronSuite) TestFailedJobHistoryLimit() { var listOptions v1.ListOptions wfInformerListOptionsFunc(&listOptions, "test-cron-wf-fail-1") - s.T().Parallel() s.Given(). CronWorkflow("@testdata/always-fail-1.yaml"). When(). @@ -109,7 +103,6 @@ func (s *CronSuite) TestFailedJobHistoryLimit() { func (s *CronSuite) TestFailedJobHistoryLimitConcurrent() { var listOptions v1.ListOptions wfInformerListOptionsFunc(&listOptions, "test-cron-wf-fail-2") - s.T().Parallel() s.Given(). CronWorkflow("@testdata/always-fail-2.yaml"). When(). From 25a035f28da58de970762b94052e174c47ffe73a Mon Sep 17 00:00:00 2001 From: Simon Behar Date: Tue, 7 Jan 2020 06:35:50 -0800 Subject: [PATCH 42/44] Potential fix to test --- test/e2e/cron/cron_test.go | 15 --------------- 1 file changed, 15 deletions(-) diff --git a/test/e2e/cron/cron_test.go b/test/e2e/cron/cron_test.go index 4950446ad068..5045748a8369 100644 --- a/test/e2e/cron/cron_test.go +++ b/test/e2e/cron/cron_test.go @@ -100,21 +100,6 @@ func (s *CronSuite) TestFailedJobHistoryLimit() { }) } -func (s *CronSuite) TestFailedJobHistoryLimitConcurrent() { - var listOptions v1.ListOptions - wfInformerListOptionsFunc(&listOptions, "test-cron-wf-fail-2") - s.Given(). - CronWorkflow("@testdata/always-fail-2.yaml"). - When(). - CreateCronWorkflow(). - Wait(2*time.Minute). - Then(). - ExpectWorkflowList(listOptions, func(t *testing.T, wfList *wfv1.WorkflowList) { - assert.Equal(t, 1, len(wfList.Items)) - assert.True(t, wfList.Items[0].Status.FinishedAt.Time.After(time.Now().Add(-1*time.Minute))) - }) -} - func wfInformerListOptionsFunc(options *v1.ListOptions, cronWfName string) { options.FieldSelector = fields.Everything().String() isCronWorkflowChildReq, err := labels.NewRequirement(common.LabelCronWorkflow, selection.Equals, []string{cronWfName}) From 2f6bec299bf76a9238067e69b353b7b4a8fb3642 Mon Sep 17 00:00:00 2001 From: Simon Behar Date: Tue, 7 Jan 2020 07:15:20 -0800 Subject: [PATCH 43/44] Increase e2e timeout --- Makefile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Makefile b/Makefile index 090fc78a6555..1ab6df257517 100644 --- a/Makefile +++ b/Makefile @@ -195,7 +195,7 @@ logs-e2e: .PHONY: test-e2e test-e2e: - go test -v -count 1 -p 1 ./test/e2e/... + go test -timeout 15m -v -count 1 -p 1 ./test/e2e/... .PHONY: clean clean: From 2c4c7a6e699e3fa3e9bba400b95e1e8868c5a740 Mon Sep 17 00:00:00 2001 From: Simon Behar Date: Tue, 7 Jan 2020 07:16:15 -0800 Subject: [PATCH 44/44] Increase e2e timeout --- Makefile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Makefile b/Makefile index 1ab6df257517..19acbeca5347 100644 --- a/Makefile +++ b/Makefile @@ -195,7 +195,7 @@ logs-e2e: .PHONY: test-e2e test-e2e: - go test -timeout 15m -v -count 1 -p 1 ./test/e2e/... + go test -timeout 20m -v -count 1 -p 1 ./test/e2e/... .PHONY: clean clean: