clusterworkflowtemplate

package
v3.1.0-rc6 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: May 21, 2021 License: Apache-2.0 Imports: 19 Imported by: 12

Documentation

Overview

Package clusterworkflowtemplate is a reverse proxy.

It translates gRPC into RESTful JSON APIs.

Index

Constants

This section is empty.

Variables

View Source
var (
	ErrInvalidLengthClusterWorkflowTemplate        = fmt.Errorf("proto: negative length found during unmarshaling")
	ErrIntOverflowClusterWorkflowTemplate          = fmt.Errorf("proto: integer overflow")
	ErrUnexpectedEndOfGroupClusterWorkflowTemplate = fmt.Errorf("proto: unexpected end of group")
)

Functions

func RegisterClusterWorkflowTemplateServiceHandler

func RegisterClusterWorkflowTemplateServiceHandler(ctx context.Context, mux *runtime.ServeMux, conn *grpc.ClientConn) error

RegisterClusterWorkflowTemplateServiceHandler registers the http handlers for service ClusterWorkflowTemplateService to "mux". The handlers forward requests to the grpc endpoint over "conn".

func RegisterClusterWorkflowTemplateServiceHandlerClient

func RegisterClusterWorkflowTemplateServiceHandlerClient(ctx context.Context, mux *runtime.ServeMux, client ClusterWorkflowTemplateServiceClient) error

RegisterClusterWorkflowTemplateServiceHandlerClient registers the http handlers for service ClusterWorkflowTemplateService to "mux". The handlers forward requests to the grpc endpoint over the given implementation of "ClusterWorkflowTemplateServiceClient". Note: the gRPC framework executes interceptors within the gRPC handler. If the passed in "ClusterWorkflowTemplateServiceClient" doesn't go through the normal gRPC flow (creating a gRPC client etc.) then it will be up to the passed in "ClusterWorkflowTemplateServiceClient" to call the correct interceptors.

func RegisterClusterWorkflowTemplateServiceHandlerFromEndpoint

func RegisterClusterWorkflowTemplateServiceHandlerFromEndpoint(ctx context.Context, mux *runtime.ServeMux, endpoint string, opts []grpc.DialOption) (err error)

RegisterClusterWorkflowTemplateServiceHandlerFromEndpoint is same as RegisterClusterWorkflowTemplateServiceHandler but automatically dials to "endpoint" and closes the connection when "ctx" gets done.

func RegisterClusterWorkflowTemplateServiceHandlerServer

func RegisterClusterWorkflowTemplateServiceHandlerServer(ctx context.Context, mux *runtime.ServeMux, server ClusterWorkflowTemplateServiceServer) error

RegisterClusterWorkflowTemplateServiceHandlerServer registers the http handlers for service ClusterWorkflowTemplateService to "mux". UnaryRPC :call ClusterWorkflowTemplateServiceServer directly. StreamingRPC :currently unsupported pending https://github.com/grpc/grpc-go/issues/906. Note that using this registration option will cause many gRPC library features to stop working. Consider using RegisterClusterWorkflowTemplateServiceHandlerFromEndpoint instead.

func RegisterClusterWorkflowTemplateServiceServer

func RegisterClusterWorkflowTemplateServiceServer(s *grpc.Server, srv ClusterWorkflowTemplateServiceServer)

Types

type ClusterWorkflowTemplateCreateRequest

type ClusterWorkflowTemplateCreateRequest struct {
	Template             *v1alpha1.ClusterWorkflowTemplate `protobuf:"bytes,1,opt,name=template,proto3" json:"template,omitempty"`
	CreateOptions        *v1.CreateOptions                 `protobuf:"bytes,2,opt,name=createOptions,proto3" json:"createOptions,omitempty"`
	XXX_NoUnkeyedLiteral struct{}                          `json:"-"`
	XXX_unrecognized     []byte                            `json:"-"`
	XXX_sizecache        int32                             `json:"-"`
}

func (*ClusterWorkflowTemplateCreateRequest) Descriptor

func (*ClusterWorkflowTemplateCreateRequest) Descriptor() ([]byte, []int)

func (*ClusterWorkflowTemplateCreateRequest) GetCreateOptions

func (m *ClusterWorkflowTemplateCreateRequest) GetCreateOptions() *v1.CreateOptions

func (*ClusterWorkflowTemplateCreateRequest) GetTemplate

func (*ClusterWorkflowTemplateCreateRequest) Marshal

func (m *ClusterWorkflowTemplateCreateRequest) Marshal() (dAtA []byte, err error)

func (*ClusterWorkflowTemplateCreateRequest) MarshalTo

func (m *ClusterWorkflowTemplateCreateRequest) MarshalTo(dAtA []byte) (int, error)

func (*ClusterWorkflowTemplateCreateRequest) MarshalToSizedBuffer

func (m *ClusterWorkflowTemplateCreateRequest) MarshalToSizedBuffer(dAtA []byte) (int, error)

func (*ClusterWorkflowTemplateCreateRequest) ProtoMessage

func (*ClusterWorkflowTemplateCreateRequest) ProtoMessage()

func (*ClusterWorkflowTemplateCreateRequest) Reset

func (*ClusterWorkflowTemplateCreateRequest) Size

func (*ClusterWorkflowTemplateCreateRequest) String

func (*ClusterWorkflowTemplateCreateRequest) Unmarshal

func (m *ClusterWorkflowTemplateCreateRequest) Unmarshal(dAtA []byte) error

func (*ClusterWorkflowTemplateCreateRequest) XXX_DiscardUnknown

func (m *ClusterWorkflowTemplateCreateRequest) XXX_DiscardUnknown()

func (*ClusterWorkflowTemplateCreateRequest) XXX_Marshal

func (m *ClusterWorkflowTemplateCreateRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error)

func (*ClusterWorkflowTemplateCreateRequest) XXX_Merge

func (*ClusterWorkflowTemplateCreateRequest) XXX_Size

func (*ClusterWorkflowTemplateCreateRequest) XXX_Unmarshal

func (m *ClusterWorkflowTemplateCreateRequest) XXX_Unmarshal(b []byte) error

type ClusterWorkflowTemplateDeleteRequest

type ClusterWorkflowTemplateDeleteRequest struct {
	Name                 string            `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"`
	DeleteOptions        *v1.DeleteOptions `protobuf:"bytes,2,opt,name=deleteOptions,proto3" json:"deleteOptions,omitempty"`
	XXX_NoUnkeyedLiteral struct{}          `json:"-"`
	XXX_unrecognized     []byte            `json:"-"`
	XXX_sizecache        int32             `json:"-"`
}

func (*ClusterWorkflowTemplateDeleteRequest) Descriptor

func (*ClusterWorkflowTemplateDeleteRequest) Descriptor() ([]byte, []int)

func (*ClusterWorkflowTemplateDeleteRequest) GetDeleteOptions

func (m *ClusterWorkflowTemplateDeleteRequest) GetDeleteOptions() *v1.DeleteOptions

func (*ClusterWorkflowTemplateDeleteRequest) GetName

func (*ClusterWorkflowTemplateDeleteRequest) Marshal

func (m *ClusterWorkflowTemplateDeleteRequest) Marshal() (dAtA []byte, err error)

func (*ClusterWorkflowTemplateDeleteRequest) MarshalTo

func (m *ClusterWorkflowTemplateDeleteRequest) MarshalTo(dAtA []byte) (int, error)

func (*ClusterWorkflowTemplateDeleteRequest) MarshalToSizedBuffer

func (m *ClusterWorkflowTemplateDeleteRequest) MarshalToSizedBuffer(dAtA []byte) (int, error)

func (*ClusterWorkflowTemplateDeleteRequest) ProtoMessage

func (*ClusterWorkflowTemplateDeleteRequest) ProtoMessage()

func (*ClusterWorkflowTemplateDeleteRequest) Reset

func (*ClusterWorkflowTemplateDeleteRequest) Size

func (*ClusterWorkflowTemplateDeleteRequest) String

func (*ClusterWorkflowTemplateDeleteRequest) Unmarshal

func (m *ClusterWorkflowTemplateDeleteRequest) Unmarshal(dAtA []byte) error

func (*ClusterWorkflowTemplateDeleteRequest) XXX_DiscardUnknown

func (m *ClusterWorkflowTemplateDeleteRequest) XXX_DiscardUnknown()

func (*ClusterWorkflowTemplateDeleteRequest) XXX_Marshal

func (m *ClusterWorkflowTemplateDeleteRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error)

func (*ClusterWorkflowTemplateDeleteRequest) XXX_Merge

func (*ClusterWorkflowTemplateDeleteRequest) XXX_Size

func (*ClusterWorkflowTemplateDeleteRequest) XXX_Unmarshal

func (m *ClusterWorkflowTemplateDeleteRequest) XXX_Unmarshal(b []byte) error

type ClusterWorkflowTemplateDeleteResponse

type ClusterWorkflowTemplateDeleteResponse struct {
	XXX_NoUnkeyedLiteral struct{} `json:"-"`
	XXX_unrecognized     []byte   `json:"-"`
	XXX_sizecache        int32    `json:"-"`
}

func (*ClusterWorkflowTemplateDeleteResponse) Descriptor

func (*ClusterWorkflowTemplateDeleteResponse) Descriptor() ([]byte, []int)

func (*ClusterWorkflowTemplateDeleteResponse) Marshal

func (m *ClusterWorkflowTemplateDeleteResponse) Marshal() (dAtA []byte, err error)

func (*ClusterWorkflowTemplateDeleteResponse) MarshalTo

func (m *ClusterWorkflowTemplateDeleteResponse) MarshalTo(dAtA []byte) (int, error)

func (*ClusterWorkflowTemplateDeleteResponse) MarshalToSizedBuffer

func (m *ClusterWorkflowTemplateDeleteResponse) MarshalToSizedBuffer(dAtA []byte) (int, error)

func (*ClusterWorkflowTemplateDeleteResponse) ProtoMessage

func (*ClusterWorkflowTemplateDeleteResponse) ProtoMessage()

func (*ClusterWorkflowTemplateDeleteResponse) Reset

func (*ClusterWorkflowTemplateDeleteResponse) Size

func (*ClusterWorkflowTemplateDeleteResponse) String

func (*ClusterWorkflowTemplateDeleteResponse) Unmarshal

func (m *ClusterWorkflowTemplateDeleteResponse) Unmarshal(dAtA []byte) error

func (*ClusterWorkflowTemplateDeleteResponse) XXX_DiscardUnknown

func (m *ClusterWorkflowTemplateDeleteResponse) XXX_DiscardUnknown()

func (*ClusterWorkflowTemplateDeleteResponse) XXX_Marshal

func (m *ClusterWorkflowTemplateDeleteResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error)

func (*ClusterWorkflowTemplateDeleteResponse) XXX_Merge

func (*ClusterWorkflowTemplateDeleteResponse) XXX_Size

func (*ClusterWorkflowTemplateDeleteResponse) XXX_Unmarshal

func (m *ClusterWorkflowTemplateDeleteResponse) XXX_Unmarshal(b []byte) error

type ClusterWorkflowTemplateGetRequest

type ClusterWorkflowTemplateGetRequest struct {
	Name                 string         `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"`
	GetOptions           *v1.GetOptions `protobuf:"bytes,2,opt,name=getOptions,proto3" json:"getOptions,omitempty"`
	XXX_NoUnkeyedLiteral struct{}       `json:"-"`
	XXX_unrecognized     []byte         `json:"-"`
	XXX_sizecache        int32          `json:"-"`
}

func (*ClusterWorkflowTemplateGetRequest) Descriptor

func (*ClusterWorkflowTemplateGetRequest) Descriptor() ([]byte, []int)

func (*ClusterWorkflowTemplateGetRequest) GetGetOptions

func (m *ClusterWorkflowTemplateGetRequest) GetGetOptions() *v1.GetOptions

func (*ClusterWorkflowTemplateGetRequest) GetName

func (*ClusterWorkflowTemplateGetRequest) Marshal

func (m *ClusterWorkflowTemplateGetRequest) Marshal() (dAtA []byte, err error)

func (*ClusterWorkflowTemplateGetRequest) MarshalTo

func (m *ClusterWorkflowTemplateGetRequest) MarshalTo(dAtA []byte) (int, error)

func (*ClusterWorkflowTemplateGetRequest) MarshalToSizedBuffer

func (m *ClusterWorkflowTemplateGetRequest) MarshalToSizedBuffer(dAtA []byte) (int, error)

func (*ClusterWorkflowTemplateGetRequest) ProtoMessage

func (*ClusterWorkflowTemplateGetRequest) ProtoMessage()

func (*ClusterWorkflowTemplateGetRequest) Reset

func (*ClusterWorkflowTemplateGetRequest) Size

func (m *ClusterWorkflowTemplateGetRequest) Size() (n int)

func (*ClusterWorkflowTemplateGetRequest) String

func (*ClusterWorkflowTemplateGetRequest) Unmarshal

func (m *ClusterWorkflowTemplateGetRequest) Unmarshal(dAtA []byte) error

func (*ClusterWorkflowTemplateGetRequest) XXX_DiscardUnknown

func (m *ClusterWorkflowTemplateGetRequest) XXX_DiscardUnknown()

func (*ClusterWorkflowTemplateGetRequest) XXX_Marshal

func (m *ClusterWorkflowTemplateGetRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error)

func (*ClusterWorkflowTemplateGetRequest) XXX_Merge

func (*ClusterWorkflowTemplateGetRequest) XXX_Size

func (m *ClusterWorkflowTemplateGetRequest) XXX_Size() int

func (*ClusterWorkflowTemplateGetRequest) XXX_Unmarshal

func (m *ClusterWorkflowTemplateGetRequest) XXX_Unmarshal(b []byte) error

type ClusterWorkflowTemplateLintRequest

type ClusterWorkflowTemplateLintRequest struct {
	Template             *v1alpha1.ClusterWorkflowTemplate `protobuf:"bytes,1,opt,name=template,proto3" json:"template,omitempty"`
	CreateOptions        *v1.CreateOptions                 `protobuf:"bytes,2,opt,name=createOptions,proto3" json:"createOptions,omitempty"`
	XXX_NoUnkeyedLiteral struct{}                          `json:"-"`
	XXX_unrecognized     []byte                            `json:"-"`
	XXX_sizecache        int32                             `json:"-"`
}

func (*ClusterWorkflowTemplateLintRequest) Descriptor

func (*ClusterWorkflowTemplateLintRequest) Descriptor() ([]byte, []int)

func (*ClusterWorkflowTemplateLintRequest) GetCreateOptions

func (m *ClusterWorkflowTemplateLintRequest) GetCreateOptions() *v1.CreateOptions

func (*ClusterWorkflowTemplateLintRequest) GetTemplate

func (*ClusterWorkflowTemplateLintRequest) Marshal

func (m *ClusterWorkflowTemplateLintRequest) Marshal() (dAtA []byte, err error)

func (*ClusterWorkflowTemplateLintRequest) MarshalTo

func (m *ClusterWorkflowTemplateLintRequest) MarshalTo(dAtA []byte) (int, error)

func (*ClusterWorkflowTemplateLintRequest) MarshalToSizedBuffer

func (m *ClusterWorkflowTemplateLintRequest) MarshalToSizedBuffer(dAtA []byte) (int, error)

func (*ClusterWorkflowTemplateLintRequest) ProtoMessage

func (*ClusterWorkflowTemplateLintRequest) ProtoMessage()

func (*ClusterWorkflowTemplateLintRequest) Reset

func (*ClusterWorkflowTemplateLintRequest) Size

func (*ClusterWorkflowTemplateLintRequest) String

func (*ClusterWorkflowTemplateLintRequest) Unmarshal

func (m *ClusterWorkflowTemplateLintRequest) Unmarshal(dAtA []byte) error

func (*ClusterWorkflowTemplateLintRequest) XXX_DiscardUnknown

func (m *ClusterWorkflowTemplateLintRequest) XXX_DiscardUnknown()

func (*ClusterWorkflowTemplateLintRequest) XXX_Marshal

func (m *ClusterWorkflowTemplateLintRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error)

func (*ClusterWorkflowTemplateLintRequest) XXX_Merge

func (*ClusterWorkflowTemplateLintRequest) XXX_Size

func (*ClusterWorkflowTemplateLintRequest) XXX_Unmarshal

func (m *ClusterWorkflowTemplateLintRequest) XXX_Unmarshal(b []byte) error

type ClusterWorkflowTemplateListRequest

type ClusterWorkflowTemplateListRequest struct {
	ListOptions          *v1.ListOptions `protobuf:"bytes,1,opt,name=listOptions,proto3" json:"listOptions,omitempty"`
	XXX_NoUnkeyedLiteral struct{}        `json:"-"`
	XXX_unrecognized     []byte          `json:"-"`
	XXX_sizecache        int32           `json:"-"`
}

func (*ClusterWorkflowTemplateListRequest) Descriptor

func (*ClusterWorkflowTemplateListRequest) Descriptor() ([]byte, []int)

func (*ClusterWorkflowTemplateListRequest) GetListOptions

func (m *ClusterWorkflowTemplateListRequest) GetListOptions() *v1.ListOptions

func (*ClusterWorkflowTemplateListRequest) Marshal

func (m *ClusterWorkflowTemplateListRequest) Marshal() (dAtA []byte, err error)

func (*ClusterWorkflowTemplateListRequest) MarshalTo

func (m *ClusterWorkflowTemplateListRequest) MarshalTo(dAtA []byte) (int, error)

func (*ClusterWorkflowTemplateListRequest) MarshalToSizedBuffer

func (m *ClusterWorkflowTemplateListRequest) MarshalToSizedBuffer(dAtA []byte) (int, error)

func (*ClusterWorkflowTemplateListRequest) ProtoMessage

func (*ClusterWorkflowTemplateListRequest) ProtoMessage()

func (*ClusterWorkflowTemplateListRequest) Reset

func (*ClusterWorkflowTemplateListRequest) Size

func (*ClusterWorkflowTemplateListRequest) String

func (*ClusterWorkflowTemplateListRequest) Unmarshal

func (m *ClusterWorkflowTemplateListRequest) Unmarshal(dAtA []byte) error

func (*ClusterWorkflowTemplateListRequest) XXX_DiscardUnknown

func (m *ClusterWorkflowTemplateListRequest) XXX_DiscardUnknown()

func (*ClusterWorkflowTemplateListRequest) XXX_Marshal

func (m *ClusterWorkflowTemplateListRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error)

func (*ClusterWorkflowTemplateListRequest) XXX_Merge

func (*ClusterWorkflowTemplateListRequest) XXX_Size

func (*ClusterWorkflowTemplateListRequest) XXX_Unmarshal

func (m *ClusterWorkflowTemplateListRequest) XXX_Unmarshal(b []byte) error

type ClusterWorkflowTemplateServiceClient

type ClusterWorkflowTemplateServiceClient interface {
	CreateClusterWorkflowTemplate(ctx context.Context, in *ClusterWorkflowTemplateCreateRequest, opts ...grpc.CallOption) (*v1alpha1.ClusterWorkflowTemplate, error)
	GetClusterWorkflowTemplate(ctx context.Context, in *ClusterWorkflowTemplateGetRequest, opts ...grpc.CallOption) (*v1alpha1.ClusterWorkflowTemplate, error)
	ListClusterWorkflowTemplates(ctx context.Context, in *ClusterWorkflowTemplateListRequest, opts ...grpc.CallOption) (*v1alpha1.ClusterWorkflowTemplateList, error)
	UpdateClusterWorkflowTemplate(ctx context.Context, in *ClusterWorkflowTemplateUpdateRequest, opts ...grpc.CallOption) (*v1alpha1.ClusterWorkflowTemplate, error)
	DeleteClusterWorkflowTemplate(ctx context.Context, in *ClusterWorkflowTemplateDeleteRequest, opts ...grpc.CallOption) (*ClusterWorkflowTemplateDeleteResponse, error)
	LintClusterWorkflowTemplate(ctx context.Context, in *ClusterWorkflowTemplateLintRequest, opts ...grpc.CallOption) (*v1alpha1.ClusterWorkflowTemplate, error)
}

ClusterWorkflowTemplateServiceClient is the client API for ClusterWorkflowTemplateService service.

For semantics around ctx use and closing/ending streaming RPCs, please refer to https://godoc.org/google.golang.org/grpc#ClientConn.NewStream.

func NewClusterWorkflowTemplateServiceClient

func NewClusterWorkflowTemplateServiceClient(cc *grpc.ClientConn) ClusterWorkflowTemplateServiceClient

type ClusterWorkflowTemplateServiceServer

ClusterWorkflowTemplateServiceServer is the server API for ClusterWorkflowTemplateService service.

type ClusterWorkflowTemplateUpdateRequest

type ClusterWorkflowTemplateUpdateRequest struct {
	// DEPRECATED: This field is ignored.
	Name                 string                            `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` // Deprecated: Do not use.
	Template             *v1alpha1.ClusterWorkflowTemplate `protobuf:"bytes,2,opt,name=template,proto3" json:"template,omitempty"`
	XXX_NoUnkeyedLiteral struct{}                          `json:"-"`
	XXX_unrecognized     []byte                            `json:"-"`
	XXX_sizecache        int32                             `json:"-"`
}

func (*ClusterWorkflowTemplateUpdateRequest) Descriptor

func (*ClusterWorkflowTemplateUpdateRequest) Descriptor() ([]byte, []int)

func (*ClusterWorkflowTemplateUpdateRequest) GetName deprecated

Deprecated: Do not use.

func (*ClusterWorkflowTemplateUpdateRequest) GetTemplate

func (*ClusterWorkflowTemplateUpdateRequest) Marshal

func (m *ClusterWorkflowTemplateUpdateRequest) Marshal() (dAtA []byte, err error)

func (*ClusterWorkflowTemplateUpdateRequest) MarshalTo

func (m *ClusterWorkflowTemplateUpdateRequest) MarshalTo(dAtA []byte) (int, error)

func (*ClusterWorkflowTemplateUpdateRequest) MarshalToSizedBuffer

func (m *ClusterWorkflowTemplateUpdateRequest) MarshalToSizedBuffer(dAtA []byte) (int, error)

func (*ClusterWorkflowTemplateUpdateRequest) ProtoMessage

func (*ClusterWorkflowTemplateUpdateRequest) ProtoMessage()

func (*ClusterWorkflowTemplateUpdateRequest) Reset

func (*ClusterWorkflowTemplateUpdateRequest) Size

func (*ClusterWorkflowTemplateUpdateRequest) String

func (*ClusterWorkflowTemplateUpdateRequest) Unmarshal

func (m *ClusterWorkflowTemplateUpdateRequest) Unmarshal(dAtA []byte) error

func (*ClusterWorkflowTemplateUpdateRequest) XXX_DiscardUnknown

func (m *ClusterWorkflowTemplateUpdateRequest) XXX_DiscardUnknown()

func (*ClusterWorkflowTemplateUpdateRequest) XXX_Marshal

func (m *ClusterWorkflowTemplateUpdateRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error)

func (*ClusterWorkflowTemplateUpdateRequest) XXX_Merge

func (*ClusterWorkflowTemplateUpdateRequest) XXX_Size

func (*ClusterWorkflowTemplateUpdateRequest) XXX_Unmarshal

func (m *ClusterWorkflowTemplateUpdateRequest) XXX_Unmarshal(b []byte) error

type UnimplementedClusterWorkflowTemplateServiceServer

type UnimplementedClusterWorkflowTemplateServiceServer struct {
}

UnimplementedClusterWorkflowTemplateServiceServer can be embedded to have forward compatible implementations.

func (*UnimplementedClusterWorkflowTemplateServiceServer) CreateClusterWorkflowTemplate

func (*UnimplementedClusterWorkflowTemplateServiceServer) DeleteClusterWorkflowTemplate

func (*UnimplementedClusterWorkflowTemplateServiceServer) GetClusterWorkflowTemplate

func (*UnimplementedClusterWorkflowTemplateServiceServer) LintClusterWorkflowTemplate

func (*UnimplementedClusterWorkflowTemplateServiceServer) ListClusterWorkflowTemplates

func (*UnimplementedClusterWorkflowTemplateServiceServer) UpdateClusterWorkflowTemplate

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL