diff --git a/.github/workflows/codeql.yml b/.github/workflows/codeql.yml deleted file mode 100644 index 8801bd6b..00000000 --- a/.github/workflows/codeql.yml +++ /dev/null @@ -1,82 +0,0 @@ -# For most projects, this workflow file will not need changing; you simply need -# to commit it to your repository. -# -# You may wish to alter this file to override the set of languages analyzed, -# or to provide custom queries or build logic. -# -# ******** NOTE ******** -# We have attempted to detect the languages in your repository. Please check -# the `language` matrix defined below to confirm you have the correct set of -# supported CodeQL languages. -# -name: "CodeQL" - -on: - push: - branches: [ "dev", "Default", "p2p" ] - pull_request: - # The branches below must be a subset of the branches above - branches: [ "dev" ] - schedule: - - cron: '40 17 * * 6' - -jobs: - analyze: - name: Analyze - # Runner size impacts CodeQL analysis time. To learn more, please see: - # - https://gh.io/recommended-hardware-resources-for-running-codeql - # - https://gh.io/supported-runners-and-hardware-resources - # - https://gh.io/using-larger-runners - # Consider using larger runners for possible analysis time improvements. - runs-on: ${{ (matrix.language == 'swift' && 'macos-latest') || 'ubuntu-latest' }} - timeout-minutes: ${{ (matrix.language == 'swift' && 120) || 360 }} - permissions: - actions: read - contents: read - security-events: write - - strategy: - fail-fast: false - matrix: - language: [ 'go' ] - # CodeQL supports [ 'c-cpp', 'csharp', 'go', 'java-kotlin', 'javascript-typescript', 'python', 'ruby', 'swift' ] - # Use only 'java-kotlin' to analyze code written in Java, Kotlin or both - # Use only 'javascript-typescript' to analyze code written in JavaScript, TypeScript or both - # Learn more about CodeQL language support at https://aka.ms/codeql-docs/language-support - - steps: - - name: Checkout repository - uses: actions/checkout@v3 - - # Initializes the CodeQL tools for scanning. - - name: Initialize CodeQL - uses: github/codeql-action/init@v2 - with: - languages: ${{ matrix.language }} - # If you wish to specify custom queries, you can do so here or in a config file. - # By default, queries listed here will override any specified in a config file. - # Prefix the list here with "+" to use these queries and those in the config file. - - # For more details on CodeQL's query packs, refer to: https://docs.github.com/en/code-security/code-scanning/automatically-scanning-your-code-for-vulnerabilities-and-errors/configuring-code-scanning#using-queries-in-ql-packs - # queries: security-extended,security-and-quality - - - # Autobuild attempts to build any compiled languages (C/C++, C#, Go, Java, or Swift). - # If this step fails, then you should remove it and run the build manually (see below) - - name: Autobuild - uses: github/codeql-action/autobuild@v2 - - # ℹī¸ Command-line programs to run using the OS shell. - # 📚 See https://docs.github.com/en/actions/using-workflows/workflow-syntax-for-github-actions#jobsjob_idstepsrun - - # If the Autobuild fails above, remove it and uncomment the following three lines. - # modify them (or add more) to build your code if your project, please refer to the EXAMPLE below for guidance. - - # - run: | - # echo "Run, Build Application using script" - # ./location_of_script_within_repo/buildscript.sh - - - name: Perform CodeQL Analysis - uses: github/codeql-action/analyze@v2 - with: - category: "/language:${{matrix.language}}" diff --git a/.github/workflows/go.yml b/.github/workflows/go.yml new file mode 100644 index 00000000..e6042733 --- /dev/null +++ b/.github/workflows/go.yml @@ -0,0 +1,63 @@ +# This workflow will build a golang project +# For more information see: https://docs.github.com/en/actions/automating-builds-and-tests/building-and-testing-go + +name: "Merlin Server Build & Test" + +on: + push: + pull_request: + +jobs: + + build: + name: 'Build Job' + runs-on: ubuntu-latest + steps: + - name: Checkout Repository + id: checkout + uses: actions/checkout@v3 + + - name: Set up Go + uses: actions/setup-go@v4 + with: + go-version: '1.21' + + - name: 'Build Merlin Server' + id: build + run: 'make distro' + + - name: 'Test Merlin Server' + id: test + run: 'go test ./...' + + - name: GoVulnCheck + id: govulncheck + uses: golang/govulncheck-action@v1 + with: + go-version-input: '1.21' + go-package: './...' + + - name: Gosec Security Scanner + id: gosec + uses: securego/gosec@master + with: + args: '-fmt sarif -out gosec.sarif ./...' + + - name: Upload Gosec SARIF file + id: gosec_upload_sarif + uses: github/codeql-action/upload-sarif@v2 + with: + sarif_file: gosec.sarif + + - name: Go Report Card - Install + id: goreportcard_install + working-directory: /tmp + run: | + git clone https://github.com/gojp/goreportcard.git + cd goreportcard + make install + go install ./cmd/goreportcard-cli + + - name: Go Report Card - Run + id: goreportcard_run + run: 'goreportcard-cli -v' # This renames the files in the ./rpc directory to *.grc.bak causing builds to fail diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml new file mode 100644 index 00000000..7d3517de --- /dev/null +++ b/.github/workflows/release.yml @@ -0,0 +1,105 @@ +name: "Merlin Server Release" + +on: + push: + tags: + - 'v*.*.*' + +defaults: + run: + working-directory: ~/ + +jobs: + release: + name: 'Release Job' + runs-on: ubuntu-latest + steps: + - name: Checkout Merlin + id: checkout_merlin + uses: actions/checkout@v4 + + - name: Checkout Merlin-Agent + id: checkout_merlin_agent + uses: actions/checkout@v4 + with: + repository: 'Ne0nd0g/merlin-agent' + path: 'merlin-agent' + + - name: Checkout Merlin-Agent-DLL + id: checkout_merlin_agent_dll + uses: actions/checkout@v4 + with: + repository: 'Ne0nd0g/merlin-agent-dll' + path: 'merlin-agent-dll' + + - name: Checkout Merlin CLI + id: checkout_merlin_cli + uses: actions/checkout@v4 + with: + repository: 'Ne0nd0g/merlin-cli' + path: 'merlin-cli' + + - name: Set up Go + id: setup_go + uses: actions/setup-go@v4 + with: + go-version: '1.21' + + # Need 7zip installed to package up the release + - name: Install 7zip + id: install_7zip + run: apt-get install p7zip-full + + # Need MingGW installed to build the Agent DLL + - name: Install MingGW + id: install_mingw + run: apt-get install -y -q mingw-w64 + + - name: Build Merlin Agents + id: build_agents + working-directory: merlin-agent + run: | + pwd + make distro + + - name: Build Merlin Agent DLL + id: build_agent_dll + working-directory: merlin-agent-dll + run: make default + + - name: Move Agents + id: move_agents + run: | + mkdir -p data/bin + cp ~/merlin-agent/merlinAgent-* ~/merlin/data/bin + cp ~/merlin-agent-dll/merlinAgent.dll ~/merlin/data/bin + + - name: Build Merlin CLI + id: build_cli + working-directory: merlin-cli + run: make all + + - name: Build Merlin Server + id: build_server + working-directory: merlin + run: make distro + + - name: Package Release + id: package_release + working-directory: merlin + run: | + F="README.MD LICENSE data/modules docs data/README.MD data/agents/README.MD data/log/README.MD data/x509 data/src data/bin" + 7za a -pmerlin -mhe -mx=9 merlinServer-Linux-x64.7z $F merlinCLI-Linux-x64 merlinServer-Linux-x64 + + - name: Create Draft Release + id: create_draft_release + uses: ncipollo/release-action@v1 + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + with: + tag: ${{ github.ref_name }} + name: ${{ github.ref_name }} + draft: true + prerelease: false + artifactErrorsFailBuild: true + artifacts: '*.7z' \ No newline at end of file diff --git a/Makefile b/Makefile index 38f13259..88db2220 100644 --- a/Makefile +++ b/Makefile @@ -21,30 +21,32 @@ default: # Compile Server - Windows x64 windows: - export GOOS=windows;export GOARCH=amd64;go build ${LDFLAGS} -o ${DIR}/merlinServer-Windows-x64.exe main.go + export GOOS=windows && export GOARCH=amd64 && go build ${LDFLAGS} -o ${DIR}/merlinServer-Windows-x64.exe main.go # The SEED must be the exact same that was used when compiling the agent # Garble version 0.5.2 or later must be installed and accessible in the PATH environment variable windows-garble: - export GOGARBLE=${GOGARBLE};export GOOS=windows GOARCH=amd64;garble -tiny -literals -seed ${SEED} build ${LDFLAGS} -o ${DIR}/merlinServer-Windows-x64.exe main.go + export GOGARBLE=${GOGARBLE} && export GOOS=windows GOARCH=amd64 &&garble -tiny -literals -seed ${SEED} build ${LDFLAGS} -o ${DIR}/merlinServer-Windows-x64.exe main.go # Compile Server - Linux x64 linux: - export GOOS=linux;export GOARCH=amd64;go build ${LDFLAGS} -o ${DIR}/merlinServer-Linux-x64 main.go + export GOOS=linux && export GOARCH=amd64 && go build ${LDFLAGS} -o ${DIR}/merlinServer-Linux-x64 main.go # The SEED must be the exact same that was used when compiling the agent # Garble version 0.5.2 or later must be installed and accessible in the PATH environment variable linux-garble: - export GOGARBLE=${GOGARBLE};export GOOS=linux GOARCH=amd64;garble -tiny -literals -seed ${SEED} build ${LDFLAGS} -o ${DIR}/merlinServer-Linux-x64 main.go + export GOGARBLE=${GOGARBLE} && export GOOS=linux GOARCH=amd64 && garble -tiny -literals -seed ${SEED} build ${LDFLAGS} -o ${DIR}/merlinServer-Linux-x64 main.go # Compile Server - Darwin x64 darwin: - export GOOS=darwin;export GOARCH=amd64;go build ${LDFLAGS} -o ${DIR}/merlinServer-Darwin-x64 main.go + export GOOS=darwin && export GOARCH=amd64 && go build ${LDFLAGS} -o ${DIR}/merlinServer-Darwin-x64 main.go # The SEED must be the exact same that was used when compiling the agent # Garble version 0.5.2 or later must be installed and accessible in the PATH environment variable darwin-garble: - export GOGARBLE=${GOGARBLE};export GOOS=darwin GOARCH=amd64;garble -tiny -literals -seed ${SEED} build ${LDFLAGS} -o ${DIR}/merlinServer-Darwin-x64.exe main.go + export GOGARBLE=${GOGARBLE} && export GOOS=darwin GOARCH=amd64 && garble -tiny -literals -seed ${SEED} build ${LDFLAGS} -o ${DIR}/merlinServer-Darwin-x64.exe main.go + +distro: windows linux darwin clean: rm -rf ${DIR}* diff --git a/go.mod b/go.mod index b27af662..4c980744 100644 --- a/go.mod +++ b/go.mod @@ -8,7 +8,7 @@ require ( github.com/cretz/gopaque v0.1.0 github.com/go-jose/go-jose/v3 v3.0.0 github.com/google/uuid v1.4.0 - github.com/quic-go/quic-go v0.39.3 + github.com/quic-go/quic-go v0.40.0 go.dedis.ch/kyber/v3 v3.1.0 golang.org/x/net v0.17.0 golang.org/x/sync v0.4.0 diff --git a/go.sum b/go.sum index 186e233c..90b21a82 100644 --- a/go.sum +++ b/go.sum @@ -38,6 +38,8 @@ github.com/quic-go/qtls-go1-20 v0.4.1 h1:D33340mCNDAIKBqXuAvexTNMUByrYmFYVfKfDN5 github.com/quic-go/qtls-go1-20 v0.4.1/go.mod h1:X9Nh97ZL80Z+bX/gUXMbipO6OxdiDi58b/fMC9mAL+k= github.com/quic-go/quic-go v0.39.3 h1:o3YB6t2SR+HU/pgwF29kJ6g4jJIJEwEZ8CKia1h1TKg= github.com/quic-go/quic-go v0.39.3/go.mod h1:T09QsDQWjLiQ74ZmacDfqZmhY/NLnw5BC40MANNNZ1Q= +github.com/quic-go/quic-go v0.40.0 h1:GYd1iznlKm7dpHD7pOVpUvItgMPo/jrMgDWZhMCecqw= +github.com/quic-go/quic-go v0.40.0/go.mod h1:PeN7kuVJ4xZbxSv/4OX6S1USOX8MJvydwpTx31vx60c= github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI= github.com/stretchr/testify v1.6.1 h1:hDPOHmpOpP40lSULcqw7IrRb/u7w6RpDC9399XyoNd0= diff --git a/pkg/merlin.go b/pkg/merlin.go index 10e55f93..af6b97ae 100644 --- a/pkg/merlin.go +++ b/pkg/merlin.go @@ -21,7 +21,7 @@ along with Merlin. If not, see . package merlin // Version is a constant variable containing the version number for the Merlin package -const Version = "1.6.0" +const Version = "2.0.0" // Build is a hash off the git commit and is stamped it at compile time var Build = "nonRelease" diff --git a/pkg/rpc/rpc.pb.go b/pkg/rpc/rpc.pb.go index 43065d12..f888e927 100644 --- a/pkg/rpc/rpc.pb.go +++ b/pkg/rpc/rpc.pb.go @@ -1656,6 +1656,61 @@ func (x *ModuleRun) GetCommands() []string { return nil } +type Login struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Username string `protobuf:"bytes,1,opt,name=username,proto3" json:"username,omitempty"` + Password string `protobuf:"bytes,2,opt,name=password,proto3" json:"password,omitempty"` +} + +func (x *Login) Reset() { + *x = Login{} + if protoimpl.UnsafeEnabled { + mi := &file_pkg_rpc_rpc_proto_msgTypes[22] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *Login) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*Login) ProtoMessage() {} + +func (x *Login) ProtoReflect() protoreflect.Message { + mi := &file_pkg_rpc_rpc_proto_msgTypes[22] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use Login.ProtoReflect.Descriptor instead. +func (*Login) Descriptor() ([]byte, []int) { + return file_pkg_rpc_rpc_proto_rawDescGZIP(), []int{22} +} + +func (x *Login) GetUsername() string { + if x != nil { + return x.Username + } + return "" +} + +func (x *Login) GetPassword() string { + if x != nil { + return x.Password + } + return "" +} + var File_pkg_rpc_rpc_proto protoreflect.FileDescriptor var file_pkg_rpc_rpc_proto_rawDesc = []byte{ @@ -1829,236 +1884,243 @@ var file_pkg_rpc_rpc_proto_rawDesc = []byte{ 0x6f, 0x6e, 0x73, 0x12, 0x1a, 0x0a, 0x08, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x64, 0x65, 0x64, 0x18, 0x05, 0x20, 0x01, 0x28, 0x08, 0x52, 0x08, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x64, 0x65, 0x64, 0x12, 0x1a, 0x0a, 0x08, 0x43, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x18, 0x06, 0x20, 0x03, 0x28, - 0x09, 0x52, 0x08, 0x43, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x2a, 0x5e, 0x0a, 0x0c, 0x4d, - 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x4c, 0x65, 0x76, 0x65, 0x6c, 0x12, 0x0d, 0x0a, 0x09, 0x55, - 0x4e, 0x44, 0x45, 0x46, 0x49, 0x4e, 0x45, 0x44, 0x10, 0x00, 0x12, 0x08, 0x0a, 0x04, 0x49, 0x4e, - 0x46, 0x4f, 0x10, 0x01, 0x12, 0x08, 0x0a, 0x04, 0x4e, 0x4f, 0x54, 0x45, 0x10, 0x02, 0x12, 0x08, - 0x0a, 0x04, 0x57, 0x41, 0x52, 0x4e, 0x10, 0x03, 0x12, 0x09, 0x0a, 0x05, 0x44, 0x45, 0x42, 0x55, - 0x47, 0x10, 0x04, 0x12, 0x0b, 0x0a, 0x07, 0x53, 0x55, 0x43, 0x43, 0x45, 0x53, 0x53, 0x10, 0x05, - 0x12, 0x09, 0x0a, 0x05, 0x50, 0x4c, 0x41, 0x49, 0x4e, 0x10, 0x06, 0x32, 0xc3, 0x1b, 0x0a, 0x06, - 0x4d, 0x65, 0x72, 0x6c, 0x69, 0x6e, 0x12, 0x1f, 0x0a, 0x09, 0x52, 0x65, 0x63, 0x6f, 0x6e, 0x6e, - 0x65, 0x63, 0x74, 0x12, 0x07, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x49, 0x44, 0x1a, 0x07, 0x2e, 0x72, - 0x70, 0x63, 0x2e, 0x49, 0x44, 0x22, 0x00, 0x12, 0x2d, 0x0a, 0x08, 0x52, 0x65, 0x67, 0x69, 0x73, - 0x74, 0x65, 0x72, 0x12, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, - 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x1a, 0x07, 0x2e, 0x72, 0x70, - 0x63, 0x2e, 0x49, 0x44, 0x22, 0x00, 0x12, 0x23, 0x0a, 0x06, 0x4c, 0x69, 0x73, 0x74, 0x65, 0x6e, - 0x12, 0x07, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x49, 0x44, 0x1a, 0x0c, 0x2e, 0x72, 0x70, 0x63, 0x2e, - 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x22, 0x00, 0x30, 0x01, 0x12, 0x24, 0x0a, 0x03, 0x41, - 0x6e, 0x79, 0x12, 0x0d, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x41, 0x67, 0x65, 0x6e, 0x74, 0x43, 0x4d, - 0x44, 0x1a, 0x0c, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x22, - 0x00, 0x12, 0x23, 0x0a, 0x02, 0x43, 0x44, 0x12, 0x0d, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x41, 0x67, - 0x65, 0x6e, 0x74, 0x43, 0x4d, 0x44, 0x1a, 0x0c, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x4d, 0x65, 0x73, - 0x73, 0x61, 0x67, 0x65, 0x22, 0x00, 0x12, 0x22, 0x0a, 0x07, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x49, + 0x09, 0x52, 0x08, 0x43, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x22, 0x3f, 0x0a, 0x05, 0x4c, + 0x6f, 0x67, 0x69, 0x6e, 0x12, 0x1a, 0x0a, 0x08, 0x75, 0x73, 0x65, 0x72, 0x6e, 0x61, 0x6d, 0x65, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x75, 0x73, 0x65, 0x72, 0x6e, 0x61, 0x6d, 0x65, + 0x12, 0x1a, 0x0a, 0x08, 0x70, 0x61, 0x73, 0x73, 0x77, 0x6f, 0x72, 0x64, 0x18, 0x02, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x08, 0x70, 0x61, 0x73, 0x73, 0x77, 0x6f, 0x72, 0x64, 0x2a, 0x5e, 0x0a, 0x0c, + 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x4c, 0x65, 0x76, 0x65, 0x6c, 0x12, 0x0d, 0x0a, 0x09, + 0x55, 0x4e, 0x44, 0x45, 0x46, 0x49, 0x4e, 0x45, 0x44, 0x10, 0x00, 0x12, 0x08, 0x0a, 0x04, 0x49, + 0x4e, 0x46, 0x4f, 0x10, 0x01, 0x12, 0x08, 0x0a, 0x04, 0x4e, 0x4f, 0x54, 0x45, 0x10, 0x02, 0x12, + 0x08, 0x0a, 0x04, 0x57, 0x41, 0x52, 0x4e, 0x10, 0x03, 0x12, 0x09, 0x0a, 0x05, 0x44, 0x45, 0x42, + 0x55, 0x47, 0x10, 0x04, 0x12, 0x0b, 0x0a, 0x07, 0x53, 0x55, 0x43, 0x43, 0x45, 0x53, 0x53, 0x10, + 0x05, 0x12, 0x09, 0x0a, 0x05, 0x50, 0x4c, 0x41, 0x49, 0x4e, 0x10, 0x06, 0x32, 0xec, 0x1b, 0x0a, + 0x06, 0x4d, 0x65, 0x72, 0x6c, 0x69, 0x6e, 0x12, 0x1f, 0x0a, 0x09, 0x52, 0x65, 0x63, 0x6f, 0x6e, + 0x6e, 0x65, 0x63, 0x74, 0x12, 0x07, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x49, 0x44, 0x1a, 0x07, 0x2e, + 0x72, 0x70, 0x63, 0x2e, 0x49, 0x44, 0x22, 0x00, 0x12, 0x2d, 0x0a, 0x08, 0x52, 0x65, 0x67, 0x69, + 0x73, 0x74, 0x65, 0x72, 0x12, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, + 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x1a, 0x07, 0x2e, 0x72, + 0x70, 0x63, 0x2e, 0x49, 0x44, 0x22, 0x00, 0x12, 0x23, 0x0a, 0x06, 0x4c, 0x69, 0x73, 0x74, 0x65, 0x6e, 0x12, 0x07, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x49, 0x44, 0x1a, 0x0c, 0x2e, 0x72, 0x70, 0x63, - 0x2e, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x22, 0x00, 0x12, 0x24, 0x0a, 0x09, 0x43, 0x6c, - 0x65, 0x61, 0x72, 0x4a, 0x6f, 0x62, 0x73, 0x12, 0x07, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x49, 0x44, - 0x1a, 0x0c, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x22, 0x00, - 0x12, 0x3a, 0x0a, 0x10, 0x43, 0x6c, 0x65, 0x61, 0x72, 0x4a, 0x6f, 0x62, 0x73, 0x43, 0x72, 0x65, - 0x61, 0x74, 0x65, 0x64, 0x12, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, - 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x1a, 0x0c, 0x2e, 0x72, - 0x70, 0x63, 0x2e, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x22, 0x00, 0x12, 0x24, 0x0a, 0x03, - 0x43, 0x4d, 0x44, 0x12, 0x0d, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x41, 0x67, 0x65, 0x6e, 0x74, 0x43, + 0x2e, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x22, 0x00, 0x30, 0x01, 0x12, 0x24, 0x0a, 0x03, + 0x41, 0x6e, 0x79, 0x12, 0x0d, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x41, 0x67, 0x65, 0x6e, 0x74, 0x43, 0x4d, 0x44, 0x1a, 0x0c, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, - 0x22, 0x00, 0x12, 0x28, 0x0a, 0x07, 0x43, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x12, 0x0d, 0x2e, - 0x72, 0x70, 0x63, 0x2e, 0x41, 0x67, 0x65, 0x6e, 0x74, 0x43, 0x4d, 0x44, 0x1a, 0x0c, 0x2e, 0x72, - 0x70, 0x63, 0x2e, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x22, 0x00, 0x12, 0x29, 0x0a, 0x08, - 0x44, 0x6f, 0x77, 0x6e, 0x6c, 0x6f, 0x61, 0x64, 0x12, 0x0d, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x41, + 0x22, 0x00, 0x12, 0x23, 0x0a, 0x02, 0x43, 0x44, 0x12, 0x0d, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x41, 0x67, 0x65, 0x6e, 0x74, 0x43, 0x4d, 0x44, 0x1a, 0x0c, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x4d, 0x65, - 0x73, 0x73, 0x61, 0x67, 0x65, 0x22, 0x00, 0x12, 0x24, 0x0a, 0x03, 0x45, 0x4e, 0x56, 0x12, 0x0d, + 0x73, 0x73, 0x61, 0x67, 0x65, 0x22, 0x00, 0x12, 0x22, 0x0a, 0x07, 0x43, 0x68, 0x65, 0x63, 0x6b, + 0x49, 0x6e, 0x12, 0x07, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x49, 0x44, 0x1a, 0x0c, 0x2e, 0x72, 0x70, + 0x63, 0x2e, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x22, 0x00, 0x12, 0x24, 0x0a, 0x09, 0x43, + 0x6c, 0x65, 0x61, 0x72, 0x4a, 0x6f, 0x62, 0x73, 0x12, 0x07, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x49, + 0x44, 0x1a, 0x0c, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x22, + 0x00, 0x12, 0x3a, 0x0a, 0x10, 0x43, 0x6c, 0x65, 0x61, 0x72, 0x4a, 0x6f, 0x62, 0x73, 0x43, 0x72, + 0x65, 0x61, 0x74, 0x65, 0x64, 0x12, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, + 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x1a, 0x0c, 0x2e, + 0x72, 0x70, 0x63, 0x2e, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x22, 0x00, 0x12, 0x24, 0x0a, + 0x03, 0x43, 0x4d, 0x44, 0x12, 0x0d, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x41, 0x67, 0x65, 0x6e, 0x74, + 0x43, 0x4d, 0x44, 0x1a, 0x0c, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, + 0x65, 0x22, 0x00, 0x12, 0x28, 0x0a, 0x07, 0x43, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x12, 0x0d, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x41, 0x67, 0x65, 0x6e, 0x74, 0x43, 0x4d, 0x44, 0x1a, 0x0c, 0x2e, - 0x72, 0x70, 0x63, 0x2e, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x22, 0x00, 0x12, 0x30, 0x0a, - 0x0f, 0x45, 0x78, 0x65, 0x63, 0x75, 0x74, 0x65, 0x41, 0x73, 0x73, 0x65, 0x6d, 0x62, 0x6c, 0x79, - 0x12, 0x0d, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x41, 0x67, 0x65, 0x6e, 0x74, 0x43, 0x4d, 0x44, 0x1a, - 0x0c, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x22, 0x00, 0x12, - 0x2a, 0x0a, 0x09, 0x45, 0x78, 0x65, 0x63, 0x75, 0x74, 0x65, 0x50, 0x45, 0x12, 0x0d, 0x2e, 0x72, - 0x70, 0x63, 0x2e, 0x41, 0x67, 0x65, 0x6e, 0x74, 0x43, 0x4d, 0x44, 0x1a, 0x0c, 0x2e, 0x72, 0x70, - 0x63, 0x2e, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x22, 0x00, 0x12, 0x31, 0x0a, 0x10, 0x45, - 0x78, 0x65, 0x63, 0x75, 0x74, 0x65, 0x53, 0x68, 0x65, 0x6c, 0x6c, 0x63, 0x6f, 0x64, 0x65, 0x12, + 0x72, 0x70, 0x63, 0x2e, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x22, 0x00, 0x12, 0x29, 0x0a, + 0x08, 0x44, 0x6f, 0x77, 0x6e, 0x6c, 0x6f, 0x61, 0x64, 0x12, 0x0d, 0x2e, 0x72, 0x70, 0x63, 0x2e, + 0x41, 0x67, 0x65, 0x6e, 0x74, 0x43, 0x4d, 0x44, 0x1a, 0x0c, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x4d, + 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x22, 0x00, 0x12, 0x24, 0x0a, 0x03, 0x45, 0x4e, 0x56, 0x12, 0x0d, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x41, 0x67, 0x65, 0x6e, 0x74, 0x43, 0x4d, 0x44, 0x1a, 0x0c, - 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x22, 0x00, 0x12, 0x1f, - 0x0a, 0x04, 0x45, 0x78, 0x69, 0x74, 0x12, 0x07, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x49, 0x44, 0x1a, + 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x22, 0x00, 0x12, 0x30, + 0x0a, 0x0f, 0x45, 0x78, 0x65, 0x63, 0x75, 0x74, 0x65, 0x41, 0x73, 0x73, 0x65, 0x6d, 0x62, 0x6c, + 0x79, 0x12, 0x0d, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x41, 0x67, 0x65, 0x6e, 0x74, 0x43, 0x4d, 0x44, + 0x1a, 0x0c, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x22, 0x00, + 0x12, 0x2a, 0x0a, 0x09, 0x45, 0x78, 0x65, 0x63, 0x75, 0x74, 0x65, 0x50, 0x45, 0x12, 0x0d, 0x2e, + 0x72, 0x70, 0x63, 0x2e, 0x41, 0x67, 0x65, 0x6e, 0x74, 0x43, 0x4d, 0x44, 0x1a, 0x0c, 0x2e, 0x72, + 0x70, 0x63, 0x2e, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x22, 0x00, 0x12, 0x31, 0x0a, 0x10, + 0x45, 0x78, 0x65, 0x63, 0x75, 0x74, 0x65, 0x53, 0x68, 0x65, 0x6c, 0x6c, 0x63, 0x6f, 0x64, 0x65, + 0x12, 0x0d, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x41, 0x67, 0x65, 0x6e, 0x74, 0x43, 0x4d, 0x44, 0x1a, 0x0c, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x22, 0x00, 0x12, - 0x23, 0x0a, 0x08, 0x49, 0x46, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x07, 0x2e, 0x72, 0x70, - 0x63, 0x2e, 0x49, 0x44, 0x1a, 0x0c, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x4d, 0x65, 0x73, 0x73, 0x61, - 0x67, 0x65, 0x22, 0x00, 0x12, 0x2f, 0x0a, 0x0e, 0x49, 0x6e, 0x76, 0x6f, 0x6b, 0x65, 0x41, 0x73, - 0x73, 0x65, 0x6d, 0x62, 0x6c, 0x79, 0x12, 0x0d, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x41, 0x67, 0x65, + 0x1f, 0x0a, 0x04, 0x45, 0x78, 0x69, 0x74, 0x12, 0x07, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x49, 0x44, + 0x1a, 0x0c, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x22, 0x00, + 0x12, 0x23, 0x0a, 0x08, 0x49, 0x46, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x07, 0x2e, 0x72, + 0x70, 0x63, 0x2e, 0x49, 0x44, 0x1a, 0x0c, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x4d, 0x65, 0x73, 0x73, + 0x61, 0x67, 0x65, 0x22, 0x00, 0x12, 0x2f, 0x0a, 0x0e, 0x49, 0x6e, 0x76, 0x6f, 0x6b, 0x65, 0x41, + 0x73, 0x73, 0x65, 0x6d, 0x62, 0x6c, 0x79, 0x12, 0x0d, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x41, 0x67, + 0x65, 0x6e, 0x74, 0x43, 0x4d, 0x44, 0x1a, 0x0c, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x4d, 0x65, 0x73, + 0x73, 0x61, 0x67, 0x65, 0x22, 0x00, 0x12, 0x24, 0x0a, 0x03, 0x4a, 0x41, 0x33, 0x12, 0x0d, 0x2e, + 0x72, 0x70, 0x63, 0x2e, 0x41, 0x67, 0x65, 0x6e, 0x74, 0x43, 0x4d, 0x44, 0x1a, 0x0c, 0x2e, 0x72, + 0x70, 0x63, 0x2e, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x22, 0x00, 0x12, 0x29, 0x0a, 0x08, + 0x4b, 0x69, 0x6c, 0x6c, 0x44, 0x61, 0x74, 0x65, 0x12, 0x0d, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x41, + 0x67, 0x65, 0x6e, 0x74, 0x43, 0x4d, 0x44, 0x1a, 0x0c, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x4d, 0x65, + 0x73, 0x73, 0x61, 0x67, 0x65, 0x22, 0x00, 0x12, 0x2c, 0x0a, 0x0b, 0x4b, 0x69, 0x6c, 0x6c, 0x50, + 0x72, 0x6f, 0x63, 0x65, 0x73, 0x73, 0x12, 0x0d, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x41, 0x67, 0x65, 0x6e, 0x74, 0x43, 0x4d, 0x44, 0x1a, 0x0c, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x4d, 0x65, 0x73, 0x73, - 0x61, 0x67, 0x65, 0x22, 0x00, 0x12, 0x24, 0x0a, 0x03, 0x4a, 0x41, 0x33, 0x12, 0x0d, 0x2e, 0x72, - 0x70, 0x63, 0x2e, 0x41, 0x67, 0x65, 0x6e, 0x74, 0x43, 0x4d, 0x44, 0x1a, 0x0c, 0x2e, 0x72, 0x70, - 0x63, 0x2e, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x22, 0x00, 0x12, 0x29, 0x0a, 0x08, 0x4b, - 0x69, 0x6c, 0x6c, 0x44, 0x61, 0x74, 0x65, 0x12, 0x0d, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x41, 0x67, + 0x61, 0x67, 0x65, 0x22, 0x00, 0x12, 0x2a, 0x0a, 0x09, 0x4c, 0x69, 0x6e, 0x6b, 0x41, 0x67, 0x65, + 0x6e, 0x74, 0x12, 0x0d, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x41, 0x67, 0x65, 0x6e, 0x74, 0x43, 0x4d, + 0x44, 0x1a, 0x0c, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x22, + 0x00, 0x12, 0x29, 0x0a, 0x0e, 0x4c, 0x69, 0x73, 0x74, 0x41, 0x73, 0x73, 0x65, 0x6d, 0x62, 0x6c, + 0x69, 0x65, 0x73, 0x12, 0x07, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x49, 0x44, 0x1a, 0x0c, 0x2e, 0x72, + 0x70, 0x63, 0x2e, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x22, 0x00, 0x12, 0x29, 0x0a, 0x08, + 0x4c, 0x69, 0x73, 0x74, 0x65, 0x6e, 0x65, 0x72, 0x12, 0x0d, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x41, + 0x67, 0x65, 0x6e, 0x74, 0x43, 0x4d, 0x44, 0x1a, 0x0c, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x4d, 0x65, + 0x73, 0x73, 0x61, 0x67, 0x65, 0x22, 0x00, 0x12, 0x2d, 0x0a, 0x0c, 0x4c, 0x6f, 0x61, 0x64, 0x41, + 0x73, 0x73, 0x65, 0x6d, 0x62, 0x6c, 0x79, 0x12, 0x0d, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x41, 0x67, 0x65, 0x6e, 0x74, 0x43, 0x4d, 0x44, 0x1a, 0x0c, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x4d, 0x65, 0x73, - 0x73, 0x61, 0x67, 0x65, 0x22, 0x00, 0x12, 0x2c, 0x0a, 0x0b, 0x4b, 0x69, 0x6c, 0x6c, 0x50, 0x72, - 0x6f, 0x63, 0x65, 0x73, 0x73, 0x12, 0x0d, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x41, 0x67, 0x65, 0x6e, - 0x74, 0x43, 0x4d, 0x44, 0x1a, 0x0c, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x4d, 0x65, 0x73, 0x73, 0x61, - 0x67, 0x65, 0x22, 0x00, 0x12, 0x2a, 0x0a, 0x09, 0x4c, 0x69, 0x6e, 0x6b, 0x41, 0x67, 0x65, 0x6e, + 0x73, 0x61, 0x67, 0x65, 0x22, 0x00, 0x12, 0x28, 0x0a, 0x07, 0x4c, 0x6f, 0x61, 0x64, 0x43, 0x4c, + 0x52, 0x12, 0x0d, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x41, 0x67, 0x65, 0x6e, 0x74, 0x43, 0x4d, 0x44, + 0x1a, 0x0c, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x22, 0x00, + 0x12, 0x23, 0x0a, 0x02, 0x4c, 0x53, 0x12, 0x0d, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x41, 0x67, 0x65, + 0x6e, 0x74, 0x43, 0x4d, 0x44, 0x1a, 0x0c, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x4d, 0x65, 0x73, 0x73, + 0x61, 0x67, 0x65, 0x22, 0x00, 0x12, 0x29, 0x0a, 0x08, 0x4d, 0x61, 0x78, 0x52, 0x65, 0x74, 0x72, + 0x79, 0x12, 0x0d, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x41, 0x67, 0x65, 0x6e, 0x74, 0x43, 0x4d, 0x44, + 0x1a, 0x0c, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x22, 0x00, + 0x12, 0x27, 0x0a, 0x06, 0x4d, 0x65, 0x6d, 0x6f, 0x72, 0x79, 0x12, 0x0d, 0x2e, 0x72, 0x70, 0x63, + 0x2e, 0x41, 0x67, 0x65, 0x6e, 0x74, 0x43, 0x4d, 0x44, 0x1a, 0x0c, 0x2e, 0x72, 0x70, 0x63, 0x2e, + 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x22, 0x00, 0x12, 0x26, 0x0a, 0x05, 0x4d, 0x45, 0x4d, + 0x46, 0x44, 0x12, 0x0d, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x41, 0x67, 0x65, 0x6e, 0x74, 0x43, 0x4d, + 0x44, 0x1a, 0x0c, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x22, + 0x00, 0x12, 0x28, 0x0a, 0x07, 0x4e, 0x65, 0x74, 0x73, 0x74, 0x61, 0x74, 0x12, 0x0d, 0x2e, 0x72, + 0x70, 0x63, 0x2e, 0x41, 0x67, 0x65, 0x6e, 0x74, 0x43, 0x4d, 0x44, 0x1a, 0x0c, 0x2e, 0x72, 0x70, + 0x63, 0x2e, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x22, 0x00, 0x12, 0x25, 0x0a, 0x04, 0x4e, + 0x6f, 0x74, 0x65, 0x12, 0x0d, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x41, 0x67, 0x65, 0x6e, 0x74, 0x43, + 0x4d, 0x44, 0x1a, 0x0c, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, + 0x22, 0x00, 0x12, 0x29, 0x0a, 0x08, 0x4e, 0x73, 0x6c, 0x6f, 0x6f, 0x6b, 0x75, 0x70, 0x12, 0x0d, + 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x41, 0x67, 0x65, 0x6e, 0x74, 0x43, 0x4d, 0x44, 0x1a, 0x0c, 0x2e, + 0x72, 0x70, 0x63, 0x2e, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x22, 0x00, 0x12, 0x28, 0x0a, + 0x07, 0x50, 0x61, 0x64, 0x64, 0x69, 0x6e, 0x67, 0x12, 0x0d, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x41, + 0x67, 0x65, 0x6e, 0x74, 0x43, 0x4d, 0x44, 0x1a, 0x0c, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x4d, 0x65, + 0x73, 0x73, 0x61, 0x67, 0x65, 0x22, 0x00, 0x12, 0x27, 0x0a, 0x06, 0x50, 0x61, 0x72, 0x72, 0x6f, 0x74, 0x12, 0x0d, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x41, 0x67, 0x65, 0x6e, 0x74, 0x43, 0x4d, 0x44, 0x1a, 0x0c, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x22, 0x00, - 0x12, 0x29, 0x0a, 0x0e, 0x4c, 0x69, 0x73, 0x74, 0x41, 0x73, 0x73, 0x65, 0x6d, 0x62, 0x6c, 0x69, - 0x65, 0x73, 0x12, 0x07, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x49, 0x44, 0x1a, 0x0c, 0x2e, 0x72, 0x70, - 0x63, 0x2e, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x22, 0x00, 0x12, 0x29, 0x0a, 0x08, 0x4c, - 0x69, 0x73, 0x74, 0x65, 0x6e, 0x65, 0x72, 0x12, 0x0d, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x41, 0x67, + 0x12, 0x20, 0x0a, 0x05, 0x50, 0x69, 0x70, 0x65, 0x73, 0x12, 0x07, 0x2e, 0x72, 0x70, 0x63, 0x2e, + 0x49, 0x44, 0x1a, 0x0c, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, + 0x22, 0x00, 0x12, 0x1d, 0x0a, 0x02, 0x50, 0x53, 0x12, 0x07, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x49, + 0x44, 0x1a, 0x0c, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x22, + 0x00, 0x12, 0x1e, 0x0a, 0x03, 0x50, 0x57, 0x44, 0x12, 0x07, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x49, + 0x44, 0x1a, 0x0c, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x22, + 0x00, 0x12, 0x23, 0x0a, 0x02, 0x52, 0x4d, 0x12, 0x0d, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x41, 0x67, 0x65, 0x6e, 0x74, 0x43, 0x4d, 0x44, 0x1a, 0x0c, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x4d, 0x65, 0x73, - 0x73, 0x61, 0x67, 0x65, 0x22, 0x00, 0x12, 0x2d, 0x0a, 0x0c, 0x4c, 0x6f, 0x61, 0x64, 0x41, 0x73, - 0x73, 0x65, 0x6d, 0x62, 0x6c, 0x79, 0x12, 0x0d, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x41, 0x67, 0x65, - 0x6e, 0x74, 0x43, 0x4d, 0x44, 0x1a, 0x0c, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x4d, 0x65, 0x73, 0x73, - 0x61, 0x67, 0x65, 0x22, 0x00, 0x12, 0x28, 0x0a, 0x07, 0x4c, 0x6f, 0x61, 0x64, 0x43, 0x4c, 0x52, + 0x73, 0x61, 0x67, 0x65, 0x22, 0x00, 0x12, 0x26, 0x0a, 0x05, 0x52, 0x75, 0x6e, 0x41, 0x73, 0x12, + 0x0d, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x41, 0x67, 0x65, 0x6e, 0x74, 0x43, 0x4d, 0x44, 0x1a, 0x0c, + 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x22, 0x00, 0x12, 0x2d, + 0x0a, 0x0c, 0x53, 0x65, 0x63, 0x75, 0x72, 0x65, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x12, 0x0d, + 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x41, 0x67, 0x65, 0x6e, 0x74, 0x43, 0x4d, 0x44, 0x1a, 0x0c, 0x2e, + 0x72, 0x70, 0x63, 0x2e, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x22, 0x00, 0x12, 0x29, 0x0a, + 0x08, 0x53, 0x68, 0x61, 0x72, 0x70, 0x47, 0x65, 0x6e, 0x12, 0x0d, 0x2e, 0x72, 0x70, 0x63, 0x2e, + 0x41, 0x67, 0x65, 0x6e, 0x74, 0x43, 0x4d, 0x44, 0x1a, 0x0c, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x4d, + 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x22, 0x00, 0x12, 0x25, 0x0a, 0x04, 0x53, 0x6b, 0x65, 0x77, 0x12, 0x0d, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x41, 0x67, 0x65, 0x6e, 0x74, 0x43, 0x4d, 0x44, 0x1a, 0x0c, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x22, 0x00, 0x12, - 0x23, 0x0a, 0x02, 0x4c, 0x53, 0x12, 0x0d, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x41, 0x67, 0x65, 0x6e, - 0x74, 0x43, 0x4d, 0x44, 0x1a, 0x0c, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x4d, 0x65, 0x73, 0x73, 0x61, - 0x67, 0x65, 0x22, 0x00, 0x12, 0x29, 0x0a, 0x08, 0x4d, 0x61, 0x78, 0x52, 0x65, 0x74, 0x72, 0x79, + 0x26, 0x0a, 0x05, 0x53, 0x6c, 0x65, 0x65, 0x70, 0x12, 0x0d, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x41, + 0x67, 0x65, 0x6e, 0x74, 0x43, 0x4d, 0x44, 0x1a, 0x0c, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x4d, 0x65, + 0x73, 0x73, 0x61, 0x67, 0x65, 0x22, 0x00, 0x12, 0x26, 0x0a, 0x05, 0x53, 0x6f, 0x63, 0x6b, 0x73, 0x12, 0x0d, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x41, 0x67, 0x65, 0x6e, 0x74, 0x43, 0x4d, 0x44, 0x1a, 0x0c, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x22, 0x00, 0x12, - 0x27, 0x0a, 0x06, 0x4d, 0x65, 0x6d, 0x6f, 0x72, 0x79, 0x12, 0x0d, 0x2e, 0x72, 0x70, 0x63, 0x2e, - 0x41, 0x67, 0x65, 0x6e, 0x74, 0x43, 0x4d, 0x44, 0x1a, 0x0c, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x4d, - 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x22, 0x00, 0x12, 0x26, 0x0a, 0x05, 0x4d, 0x45, 0x4d, 0x46, - 0x44, 0x12, 0x0d, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x41, 0x67, 0x65, 0x6e, 0x74, 0x43, 0x4d, 0x44, - 0x1a, 0x0c, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x22, 0x00, - 0x12, 0x28, 0x0a, 0x07, 0x4e, 0x65, 0x74, 0x73, 0x74, 0x61, 0x74, 0x12, 0x0d, 0x2e, 0x72, 0x70, - 0x63, 0x2e, 0x41, 0x67, 0x65, 0x6e, 0x74, 0x43, 0x4d, 0x44, 0x1a, 0x0c, 0x2e, 0x72, 0x70, 0x63, - 0x2e, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x22, 0x00, 0x12, 0x25, 0x0a, 0x04, 0x4e, 0x6f, - 0x74, 0x65, 0x12, 0x0d, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x41, 0x67, 0x65, 0x6e, 0x74, 0x43, 0x4d, - 0x44, 0x1a, 0x0c, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x22, - 0x00, 0x12, 0x29, 0x0a, 0x08, 0x4e, 0x73, 0x6c, 0x6f, 0x6f, 0x6b, 0x75, 0x70, 0x12, 0x0d, 0x2e, - 0x72, 0x70, 0x63, 0x2e, 0x41, 0x67, 0x65, 0x6e, 0x74, 0x43, 0x4d, 0x44, 0x1a, 0x0c, 0x2e, 0x72, - 0x70, 0x63, 0x2e, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x22, 0x00, 0x12, 0x28, 0x0a, 0x07, - 0x50, 0x61, 0x64, 0x64, 0x69, 0x6e, 0x67, 0x12, 0x0d, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x41, 0x67, - 0x65, 0x6e, 0x74, 0x43, 0x4d, 0x44, 0x1a, 0x0c, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x4d, 0x65, 0x73, - 0x73, 0x61, 0x67, 0x65, 0x22, 0x00, 0x12, 0x20, 0x0a, 0x05, 0x50, 0x69, 0x70, 0x65, 0x73, 0x12, - 0x07, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x49, 0x44, 0x1a, 0x0c, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x4d, - 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x22, 0x00, 0x12, 0x1d, 0x0a, 0x02, 0x50, 0x53, 0x12, 0x07, - 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x49, 0x44, 0x1a, 0x0c, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x4d, 0x65, - 0x73, 0x73, 0x61, 0x67, 0x65, 0x22, 0x00, 0x12, 0x1e, 0x0a, 0x03, 0x50, 0x57, 0x44, 0x12, 0x07, - 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x49, 0x44, 0x1a, 0x0c, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x4d, 0x65, - 0x73, 0x73, 0x61, 0x67, 0x65, 0x22, 0x00, 0x12, 0x23, 0x0a, 0x02, 0x52, 0x4d, 0x12, 0x0d, 0x2e, - 0x72, 0x70, 0x63, 0x2e, 0x41, 0x67, 0x65, 0x6e, 0x74, 0x43, 0x4d, 0x44, 0x1a, 0x0c, 0x2e, 0x72, - 0x70, 0x63, 0x2e, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x22, 0x00, 0x12, 0x26, 0x0a, 0x05, - 0x52, 0x75, 0x6e, 0x41, 0x73, 0x12, 0x0d, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x41, 0x67, 0x65, 0x6e, - 0x74, 0x43, 0x4d, 0x44, 0x1a, 0x0c, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x4d, 0x65, 0x73, 0x73, 0x61, - 0x67, 0x65, 0x22, 0x00, 0x12, 0x2d, 0x0a, 0x0c, 0x53, 0x65, 0x63, 0x75, 0x72, 0x65, 0x44, 0x65, - 0x6c, 0x65, 0x74, 0x65, 0x12, 0x0d, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x41, 0x67, 0x65, 0x6e, 0x74, - 0x43, 0x4d, 0x44, 0x1a, 0x0c, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, - 0x65, 0x22, 0x00, 0x12, 0x29, 0x0a, 0x08, 0x53, 0x68, 0x61, 0x72, 0x70, 0x47, 0x65, 0x6e, 0x12, - 0x0d, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x41, 0x67, 0x65, 0x6e, 0x74, 0x43, 0x4d, 0x44, 0x1a, 0x0c, - 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x22, 0x00, 0x12, 0x25, - 0x0a, 0x04, 0x53, 0x6b, 0x65, 0x77, 0x12, 0x0d, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x41, 0x67, 0x65, + 0x24, 0x0a, 0x03, 0x53, 0x53, 0x48, 0x12, 0x0d, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x41, 0x67, 0x65, 0x6e, 0x74, 0x43, 0x4d, 0x44, 0x1a, 0x0c, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x4d, 0x65, 0x73, 0x73, - 0x61, 0x67, 0x65, 0x22, 0x00, 0x12, 0x26, 0x0a, 0x05, 0x53, 0x6c, 0x65, 0x65, 0x70, 0x12, 0x0d, + 0x61, 0x67, 0x65, 0x22, 0x00, 0x12, 0x26, 0x0a, 0x05, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x12, 0x0d, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x41, 0x67, 0x65, 0x6e, 0x74, 0x43, 0x4d, 0x44, 0x1a, 0x0c, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x22, 0x00, 0x12, 0x26, 0x0a, - 0x05, 0x53, 0x6f, 0x63, 0x6b, 0x73, 0x12, 0x0d, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x41, 0x67, 0x65, + 0x05, 0x54, 0x6f, 0x75, 0x63, 0x68, 0x12, 0x0d, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x41, 0x67, 0x65, 0x6e, 0x74, 0x43, 0x4d, 0x44, 0x1a, 0x0c, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x4d, 0x65, 0x73, 0x73, - 0x61, 0x67, 0x65, 0x22, 0x00, 0x12, 0x24, 0x0a, 0x03, 0x53, 0x53, 0x48, 0x12, 0x0d, 0x2e, 0x72, - 0x70, 0x63, 0x2e, 0x41, 0x67, 0x65, 0x6e, 0x74, 0x43, 0x4d, 0x44, 0x1a, 0x0c, 0x2e, 0x72, 0x70, - 0x63, 0x2e, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x22, 0x00, 0x12, 0x26, 0x0a, 0x05, 0x54, - 0x6f, 0x6b, 0x65, 0x6e, 0x12, 0x0d, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x41, 0x67, 0x65, 0x6e, 0x74, + 0x61, 0x67, 0x65, 0x22, 0x00, 0x12, 0x2c, 0x0a, 0x0b, 0x55, 0x6e, 0x6c, 0x69, 0x6e, 0x6b, 0x41, + 0x67, 0x65, 0x6e, 0x74, 0x12, 0x0d, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x41, 0x67, 0x65, 0x6e, 0x74, 0x43, 0x4d, 0x44, 0x1a, 0x0c, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, - 0x65, 0x22, 0x00, 0x12, 0x26, 0x0a, 0x05, 0x54, 0x6f, 0x75, 0x63, 0x68, 0x12, 0x0d, 0x2e, 0x72, - 0x70, 0x63, 0x2e, 0x41, 0x67, 0x65, 0x6e, 0x74, 0x43, 0x4d, 0x44, 0x1a, 0x0c, 0x2e, 0x72, 0x70, - 0x63, 0x2e, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x22, 0x00, 0x12, 0x2c, 0x0a, 0x0b, 0x55, - 0x6e, 0x6c, 0x69, 0x6e, 0x6b, 0x41, 0x67, 0x65, 0x6e, 0x74, 0x12, 0x0d, 0x2e, 0x72, 0x70, 0x63, - 0x2e, 0x41, 0x67, 0x65, 0x6e, 0x74, 0x43, 0x4d, 0x44, 0x1a, 0x0c, 0x2e, 0x72, 0x70, 0x63, 0x2e, - 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x22, 0x00, 0x12, 0x27, 0x0a, 0x06, 0x55, 0x70, 0x6c, - 0x6f, 0x61, 0x64, 0x12, 0x0d, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x41, 0x67, 0x65, 0x6e, 0x74, 0x43, - 0x4d, 0x44, 0x1a, 0x0c, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, - 0x22, 0x00, 0x12, 0x21, 0x0a, 0x06, 0x55, 0x70, 0x74, 0x69, 0x6d, 0x65, 0x12, 0x07, 0x2e, 0x72, - 0x70, 0x63, 0x2e, 0x49, 0x44, 0x1a, 0x0c, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x4d, 0x65, 0x73, 0x73, - 0x61, 0x67, 0x65, 0x22, 0x00, 0x12, 0x2e, 0x0a, 0x06, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x73, 0x12, - 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, - 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x1a, 0x0a, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x53, 0x6c, - 0x69, 0x63, 0x65, 0x22, 0x00, 0x12, 0x26, 0x0a, 0x08, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x41, 0x64, - 0x64, 0x12, 0x0a, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x1a, 0x0c, 0x2e, - 0x72, 0x70, 0x63, 0x2e, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x22, 0x00, 0x12, 0x22, 0x0a, - 0x09, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x07, 0x2e, 0x72, 0x70, 0x63, - 0x2e, 0x49, 0x44, 0x1a, 0x0a, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x53, 0x6c, 0x69, 0x63, 0x65, 0x22, - 0x00, 0x12, 0x3b, 0x0a, 0x0c, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x4c, 0x69, 0x73, 0x74, 0x41, 0x6c, - 0x6c, 0x12, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, - 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x1a, 0x11, 0x2e, 0x72, 0x70, 0x63, 0x2e, - 0x47, 0x72, 0x6f, 0x75, 0x70, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x73, 0x22, 0x00, 0x12, 0x29, - 0x0a, 0x0b, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x52, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x12, 0x0a, 0x2e, - 0x72, 0x70, 0x63, 0x2e, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x1a, 0x0c, 0x2e, 0x72, 0x70, 0x63, 0x2e, - 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x22, 0x00, 0x12, 0x25, 0x0a, 0x08, 0x47, 0x65, 0x74, - 0x41, 0x67, 0x65, 0x6e, 0x74, 0x12, 0x07, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x49, 0x44, 0x1a, 0x0e, - 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x41, 0x67, 0x65, 0x6e, 0x74, 0x49, 0x6e, 0x66, 0x6f, 0x22, 0x00, - 0x12, 0x31, 0x0a, 0x09, 0x47, 0x65, 0x74, 0x41, 0x67, 0x65, 0x6e, 0x74, 0x73, 0x12, 0x16, 0x2e, - 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, - 0x45, 0x6d, 0x70, 0x74, 0x79, 0x1a, 0x0a, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x53, 0x6c, 0x69, 0x63, - 0x65, 0x22, 0x00, 0x12, 0x26, 0x0a, 0x0d, 0x47, 0x65, 0x74, 0x41, 0x67, 0x65, 0x6e, 0x74, 0x4c, - 0x69, 0x6e, 0x6b, 0x73, 0x12, 0x07, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x49, 0x44, 0x1a, 0x0a, 0x2e, - 0x72, 0x70, 0x63, 0x2e, 0x53, 0x6c, 0x69, 0x63, 0x65, 0x22, 0x00, 0x12, 0x29, 0x0a, 0x0e, 0x47, - 0x65, 0x74, 0x41, 0x67, 0x65, 0x6e, 0x74, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x07, 0x2e, - 0x72, 0x70, 0x63, 0x2e, 0x49, 0x44, 0x1a, 0x0c, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x4d, 0x65, 0x73, - 0x73, 0x61, 0x67, 0x65, 0x22, 0x00, 0x12, 0x38, 0x0a, 0x0c, 0x47, 0x65, 0x74, 0x41, 0x67, 0x65, - 0x6e, 0x74, 0x52, 0x6f, 0x77, 0x73, 0x12, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, - 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x1a, 0x0e, - 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x44, 0x61, 0x74, 0x61, 0x22, 0x00, - 0x12, 0x21, 0x0a, 0x06, 0x52, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x12, 0x07, 0x2e, 0x72, 0x70, 0x63, - 0x2e, 0x49, 0x44, 0x1a, 0x0c, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, - 0x65, 0x22, 0x00, 0x12, 0x31, 0x0a, 0x0a, 0x47, 0x65, 0x74, 0x41, 0x6c, 0x6c, 0x4a, 0x6f, 0x62, - 0x73, 0x12, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, - 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x1a, 0x09, 0x2e, 0x72, 0x70, 0x63, 0x2e, - 0x4a, 0x6f, 0x62, 0x73, 0x22, 0x00, 0x12, 0x37, 0x0a, 0x10, 0x47, 0x65, 0x74, 0x41, 0x6c, 0x6c, - 0x41, 0x63, 0x74, 0x69, 0x76, 0x65, 0x4a, 0x6f, 0x62, 0x73, 0x12, 0x16, 0x2e, 0x67, 0x6f, 0x6f, - 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, - 0x74, 0x79, 0x1a, 0x09, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x4a, 0x6f, 0x62, 0x73, 0x22, 0x00, 0x12, - 0x24, 0x0a, 0x0c, 0x47, 0x65, 0x74, 0x41, 0x67, 0x65, 0x6e, 0x74, 0x4a, 0x6f, 0x62, 0x73, 0x12, - 0x07, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x49, 0x44, 0x1a, 0x09, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x4a, - 0x6f, 0x62, 0x73, 0x22, 0x00, 0x12, 0x2a, 0x0a, 0x12, 0x47, 0x65, 0x74, 0x41, 0x67, 0x65, 0x6e, - 0x74, 0x41, 0x63, 0x74, 0x69, 0x76, 0x65, 0x4a, 0x6f, 0x62, 0x73, 0x12, 0x07, 0x2e, 0x72, 0x70, - 0x63, 0x2e, 0x49, 0x44, 0x1a, 0x09, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x4a, 0x6f, 0x62, 0x73, 0x22, - 0x00, 0x12, 0x2e, 0x0a, 0x0e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x4c, 0x69, 0x73, 0x74, 0x65, - 0x6e, 0x65, 0x72, 0x12, 0x0c, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, - 0x73, 0x1a, 0x0c, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x22, - 0x00, 0x12, 0x36, 0x0a, 0x0e, 0x47, 0x65, 0x74, 0x4c, 0x69, 0x73, 0x74, 0x65, 0x6e, 0x65, 0x72, - 0x49, 0x44, 0x73, 0x12, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, - 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x1a, 0x0a, 0x2e, 0x72, 0x70, - 0x63, 0x2e, 0x53, 0x6c, 0x69, 0x63, 0x65, 0x22, 0x00, 0x12, 0x38, 0x0a, 0x0c, 0x47, 0x65, 0x74, - 0x4c, 0x69, 0x73, 0x74, 0x65, 0x6e, 0x65, 0x72, 0x73, 0x12, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, + 0x65, 0x22, 0x00, 0x12, 0x27, 0x0a, 0x06, 0x55, 0x70, 0x6c, 0x6f, 0x61, 0x64, 0x12, 0x0d, 0x2e, + 0x72, 0x70, 0x63, 0x2e, 0x41, 0x67, 0x65, 0x6e, 0x74, 0x43, 0x4d, 0x44, 0x1a, 0x0c, 0x2e, 0x72, + 0x70, 0x63, 0x2e, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x22, 0x00, 0x12, 0x21, 0x0a, 0x06, + 0x55, 0x70, 0x74, 0x69, 0x6d, 0x65, 0x12, 0x07, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x49, 0x44, 0x1a, + 0x0c, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x22, 0x00, 0x12, + 0x2e, 0x0a, 0x06, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x73, 0x12, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, - 0x79, 0x1a, 0x0e, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x44, 0x61, 0x74, - 0x61, 0x22, 0x00, 0x12, 0x2d, 0x0a, 0x12, 0x47, 0x65, 0x74, 0x4c, 0x69, 0x73, 0x74, 0x65, 0x6e, - 0x65, 0x72, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x07, 0x2e, 0x72, 0x70, 0x63, 0x2e, - 0x49, 0x44, 0x1a, 0x0c, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, - 0x22, 0x00, 0x12, 0x38, 0x0a, 0x19, 0x47, 0x65, 0x74, 0x4c, 0x69, 0x73, 0x74, 0x65, 0x6e, 0x65, - 0x72, 0x44, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, - 0x0b, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x1a, 0x0c, 0x2e, 0x72, - 0x70, 0x63, 0x2e, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x22, 0x00, 0x12, 0x38, 0x0a, 0x10, - 0x47, 0x65, 0x74, 0x4c, 0x69, 0x73, 0x74, 0x65, 0x6e, 0x65, 0x72, 0x54, 0x79, 0x70, 0x65, 0x73, + 0x79, 0x1a, 0x0a, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x53, 0x6c, 0x69, 0x63, 0x65, 0x22, 0x00, 0x12, + 0x26, 0x0a, 0x08, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x41, 0x64, 0x64, 0x12, 0x0a, 0x2e, 0x72, 0x70, + 0x63, 0x2e, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x1a, 0x0c, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x4d, 0x65, + 0x73, 0x73, 0x61, 0x67, 0x65, 0x22, 0x00, 0x12, 0x22, 0x0a, 0x09, 0x47, 0x72, 0x6f, 0x75, 0x70, + 0x4c, 0x69, 0x73, 0x74, 0x12, 0x07, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x49, 0x44, 0x1a, 0x0a, 0x2e, + 0x72, 0x70, 0x63, 0x2e, 0x53, 0x6c, 0x69, 0x63, 0x65, 0x22, 0x00, 0x12, 0x3b, 0x0a, 0x0c, 0x47, + 0x72, 0x6f, 0x75, 0x70, 0x4c, 0x69, 0x73, 0x74, 0x41, 0x6c, 0x6c, 0x12, 0x16, 0x2e, 0x67, 0x6f, + 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, + 0x70, 0x74, 0x79, 0x1a, 0x11, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x4d, + 0x65, 0x6d, 0x62, 0x65, 0x72, 0x73, 0x22, 0x00, 0x12, 0x29, 0x0a, 0x0b, 0x47, 0x72, 0x6f, 0x75, + 0x70, 0x52, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x12, 0x0a, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x47, 0x72, + 0x6f, 0x75, 0x70, 0x1a, 0x0c, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, + 0x65, 0x22, 0x00, 0x12, 0x25, 0x0a, 0x08, 0x47, 0x65, 0x74, 0x41, 0x67, 0x65, 0x6e, 0x74, 0x12, + 0x07, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x49, 0x44, 0x1a, 0x0e, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x41, + 0x67, 0x65, 0x6e, 0x74, 0x49, 0x6e, 0x66, 0x6f, 0x22, 0x00, 0x12, 0x31, 0x0a, 0x09, 0x47, 0x65, + 0x74, 0x41, 0x67, 0x65, 0x6e, 0x74, 0x73, 0x12, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, + 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x1a, + 0x0a, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x53, 0x6c, 0x69, 0x63, 0x65, 0x22, 0x00, 0x12, 0x26, 0x0a, + 0x0d, 0x47, 0x65, 0x74, 0x41, 0x67, 0x65, 0x6e, 0x74, 0x4c, 0x69, 0x6e, 0x6b, 0x73, 0x12, 0x07, + 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x49, 0x44, 0x1a, 0x0a, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x53, 0x6c, + 0x69, 0x63, 0x65, 0x22, 0x00, 0x12, 0x29, 0x0a, 0x0e, 0x47, 0x65, 0x74, 0x41, 0x67, 0x65, 0x6e, + 0x74, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x07, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x49, 0x44, + 0x1a, 0x0c, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x22, 0x00, + 0x12, 0x38, 0x0a, 0x0c, 0x47, 0x65, 0x74, 0x41, 0x67, 0x65, 0x6e, 0x74, 0x52, 0x6f, 0x77, 0x73, 0x12, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, - 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x1a, 0x0a, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x53, - 0x6c, 0x69, 0x63, 0x65, 0x22, 0x00, 0x12, 0x2c, 0x0a, 0x11, 0x47, 0x65, 0x74, 0x4c, 0x69, 0x73, - 0x74, 0x65, 0x6e, 0x65, 0x72, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x07, 0x2e, 0x72, 0x70, - 0x63, 0x2e, 0x49, 0x44, 0x1a, 0x0c, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x4d, 0x65, 0x73, 0x73, 0x61, - 0x67, 0x65, 0x22, 0x00, 0x12, 0x29, 0x0a, 0x0e, 0x52, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x4c, 0x69, - 0x73, 0x74, 0x65, 0x6e, 0x65, 0x72, 0x12, 0x07, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x49, 0x44, 0x1a, - 0x0c, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x22, 0x00, 0x12, - 0x2a, 0x0a, 0x0f, 0x52, 0x65, 0x73, 0x74, 0x61, 0x72, 0x74, 0x4c, 0x69, 0x73, 0x74, 0x65, 0x6e, - 0x65, 0x72, 0x12, 0x07, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x49, 0x44, 0x1a, 0x0c, 0x2e, 0x72, 0x70, - 0x63, 0x2e, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x22, 0x00, 0x12, 0x32, 0x0a, 0x11, 0x53, - 0x65, 0x74, 0x4c, 0x69, 0x73, 0x74, 0x65, 0x6e, 0x65, 0x72, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, - 0x12, 0x0d, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x41, 0x67, 0x65, 0x6e, 0x74, 0x43, 0x4d, 0x44, 0x1a, - 0x0c, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x22, 0x00, 0x12, - 0x28, 0x0a, 0x0d, 0x53, 0x74, 0x61, 0x72, 0x74, 0x4c, 0x69, 0x73, 0x74, 0x65, 0x6e, 0x65, 0x72, - 0x12, 0x07, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x49, 0x44, 0x1a, 0x0c, 0x2e, 0x72, 0x70, 0x63, 0x2e, - 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x22, 0x00, 0x12, 0x27, 0x0a, 0x0c, 0x53, 0x74, 0x6f, - 0x70, 0x4c, 0x69, 0x73, 0x74, 0x65, 0x6e, 0x65, 0x72, 0x12, 0x07, 0x2e, 0x72, 0x70, 0x63, 0x2e, - 0x49, 0x44, 0x1a, 0x0c, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, - 0x22, 0x00, 0x12, 0x2f, 0x0a, 0x07, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x73, 0x12, 0x16, 0x2e, - 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, - 0x45, 0x6d, 0x70, 0x74, 0x79, 0x1a, 0x0a, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x53, 0x6c, 0x69, 0x63, - 0x65, 0x22, 0x00, 0x12, 0x27, 0x0a, 0x09, 0x47, 0x65, 0x74, 0x4d, 0x6f, 0x64, 0x75, 0x6c, 0x65, - 0x12, 0x0b, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x1a, 0x0b, 0x2e, - 0x72, 0x70, 0x63, 0x2e, 0x4d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x22, 0x00, 0x12, 0x35, 0x0a, 0x0d, - 0x47, 0x65, 0x74, 0x4d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x16, 0x2e, + 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x1a, 0x0e, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x54, + 0x61, 0x62, 0x6c, 0x65, 0x44, 0x61, 0x74, 0x61, 0x22, 0x00, 0x12, 0x21, 0x0a, 0x06, 0x52, 0x65, + 0x6d, 0x6f, 0x76, 0x65, 0x12, 0x07, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x49, 0x44, 0x1a, 0x0c, 0x2e, + 0x72, 0x70, 0x63, 0x2e, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x22, 0x00, 0x12, 0x31, 0x0a, + 0x0a, 0x47, 0x65, 0x74, 0x41, 0x6c, 0x6c, 0x4a, 0x6f, 0x62, 0x73, 0x12, 0x16, 0x2e, 0x67, 0x6f, + 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, + 0x70, 0x74, 0x79, 0x1a, 0x09, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x4a, 0x6f, 0x62, 0x73, 0x22, 0x00, + 0x12, 0x37, 0x0a, 0x10, 0x47, 0x65, 0x74, 0x41, 0x6c, 0x6c, 0x41, 0x63, 0x74, 0x69, 0x76, 0x65, + 0x4a, 0x6f, 0x62, 0x73, 0x12, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, + 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x1a, 0x09, 0x2e, 0x72, + 0x70, 0x63, 0x2e, 0x4a, 0x6f, 0x62, 0x73, 0x22, 0x00, 0x12, 0x24, 0x0a, 0x0c, 0x47, 0x65, 0x74, + 0x41, 0x67, 0x65, 0x6e, 0x74, 0x4a, 0x6f, 0x62, 0x73, 0x12, 0x07, 0x2e, 0x72, 0x70, 0x63, 0x2e, + 0x49, 0x44, 0x1a, 0x09, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x4a, 0x6f, 0x62, 0x73, 0x22, 0x00, 0x12, + 0x2a, 0x0a, 0x12, 0x47, 0x65, 0x74, 0x41, 0x67, 0x65, 0x6e, 0x74, 0x41, 0x63, 0x74, 0x69, 0x76, + 0x65, 0x4a, 0x6f, 0x62, 0x73, 0x12, 0x07, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x49, 0x44, 0x1a, 0x09, + 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x4a, 0x6f, 0x62, 0x73, 0x22, 0x00, 0x12, 0x2e, 0x0a, 0x0e, 0x43, + 0x72, 0x65, 0x61, 0x74, 0x65, 0x4c, 0x69, 0x73, 0x74, 0x65, 0x6e, 0x65, 0x72, 0x12, 0x0c, 0x2e, + 0x72, 0x70, 0x63, 0x2e, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x1a, 0x0c, 0x2e, 0x72, 0x70, + 0x63, 0x2e, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x22, 0x00, 0x12, 0x36, 0x0a, 0x0e, 0x47, + 0x65, 0x74, 0x4c, 0x69, 0x73, 0x74, 0x65, 0x6e, 0x65, 0x72, 0x49, 0x44, 0x73, 0x12, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x1a, 0x0a, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x53, 0x6c, 0x69, 0x63, - 0x65, 0x22, 0x00, 0x12, 0x2c, 0x0a, 0x09, 0x52, 0x75, 0x6e, 0x4d, 0x6f, 0x64, 0x75, 0x6c, 0x65, - 0x12, 0x0e, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x4d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x52, 0x75, 0x6e, - 0x1a, 0x0d, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x73, 0x22, - 0x00, 0x42, 0x23, 0x5a, 0x21, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, - 0x4e, 0x65, 0x30, 0x6e, 0x64, 0x30, 0x67, 0x2f, 0x6d, 0x65, 0x72, 0x6c, 0x69, 0x6e, 0x2f, 0x70, - 0x6b, 0x67, 0x2f, 0x72, 0x70, 0x63, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, + 0x65, 0x22, 0x00, 0x12, 0x38, 0x0a, 0x0c, 0x47, 0x65, 0x74, 0x4c, 0x69, 0x73, 0x74, 0x65, 0x6e, + 0x65, 0x72, 0x73, 0x12, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, + 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x1a, 0x0e, 0x2e, 0x72, 0x70, + 0x63, 0x2e, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x44, 0x61, 0x74, 0x61, 0x22, 0x00, 0x12, 0x2d, 0x0a, + 0x12, 0x47, 0x65, 0x74, 0x4c, 0x69, 0x73, 0x74, 0x65, 0x6e, 0x65, 0x72, 0x4f, 0x70, 0x74, 0x69, + 0x6f, 0x6e, 0x73, 0x12, 0x07, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x49, 0x44, 0x1a, 0x0c, 0x2e, 0x72, + 0x70, 0x63, 0x2e, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x22, 0x00, 0x12, 0x38, 0x0a, 0x19, + 0x47, 0x65, 0x74, 0x4c, 0x69, 0x73, 0x74, 0x65, 0x6e, 0x65, 0x72, 0x44, 0x65, 0x66, 0x61, 0x75, + 0x6c, 0x74, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x0b, 0x2e, 0x72, 0x70, 0x63, 0x2e, + 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x1a, 0x0c, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x4f, 0x70, 0x74, + 0x69, 0x6f, 0x6e, 0x73, 0x22, 0x00, 0x12, 0x38, 0x0a, 0x10, 0x47, 0x65, 0x74, 0x4c, 0x69, 0x73, + 0x74, 0x65, 0x6e, 0x65, 0x72, 0x54, 0x79, 0x70, 0x65, 0x73, 0x12, 0x16, 0x2e, 0x67, 0x6f, 0x6f, + 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, + 0x74, 0x79, 0x1a, 0x0a, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x53, 0x6c, 0x69, 0x63, 0x65, 0x22, 0x00, + 0x12, 0x2c, 0x0a, 0x11, 0x47, 0x65, 0x74, 0x4c, 0x69, 0x73, 0x74, 0x65, 0x6e, 0x65, 0x72, 0x53, + 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x07, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x49, 0x44, 0x1a, 0x0c, + 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x22, 0x00, 0x12, 0x29, + 0x0a, 0x0e, 0x52, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x4c, 0x69, 0x73, 0x74, 0x65, 0x6e, 0x65, 0x72, + 0x12, 0x07, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x49, 0x44, 0x1a, 0x0c, 0x2e, 0x72, 0x70, 0x63, 0x2e, + 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x22, 0x00, 0x12, 0x2a, 0x0a, 0x0f, 0x52, 0x65, 0x73, + 0x74, 0x61, 0x72, 0x74, 0x4c, 0x69, 0x73, 0x74, 0x65, 0x6e, 0x65, 0x72, 0x12, 0x07, 0x2e, 0x72, + 0x70, 0x63, 0x2e, 0x49, 0x44, 0x1a, 0x0c, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x4d, 0x65, 0x73, 0x73, + 0x61, 0x67, 0x65, 0x22, 0x00, 0x12, 0x32, 0x0a, 0x11, 0x53, 0x65, 0x74, 0x4c, 0x69, 0x73, 0x74, + 0x65, 0x6e, 0x65, 0x72, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x0d, 0x2e, 0x72, 0x70, 0x63, + 0x2e, 0x41, 0x67, 0x65, 0x6e, 0x74, 0x43, 0x4d, 0x44, 0x1a, 0x0c, 0x2e, 0x72, 0x70, 0x63, 0x2e, + 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x22, 0x00, 0x12, 0x28, 0x0a, 0x0d, 0x53, 0x74, 0x61, + 0x72, 0x74, 0x4c, 0x69, 0x73, 0x74, 0x65, 0x6e, 0x65, 0x72, 0x12, 0x07, 0x2e, 0x72, 0x70, 0x63, + 0x2e, 0x49, 0x44, 0x1a, 0x0c, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, + 0x65, 0x22, 0x00, 0x12, 0x27, 0x0a, 0x0c, 0x53, 0x74, 0x6f, 0x70, 0x4c, 0x69, 0x73, 0x74, 0x65, + 0x6e, 0x65, 0x72, 0x12, 0x07, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x49, 0x44, 0x1a, 0x0c, 0x2e, 0x72, + 0x70, 0x63, 0x2e, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x22, 0x00, 0x12, 0x2f, 0x0a, 0x07, + 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x73, 0x12, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, + 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x1a, + 0x0a, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x53, 0x6c, 0x69, 0x63, 0x65, 0x22, 0x00, 0x12, 0x27, 0x0a, + 0x09, 0x47, 0x65, 0x74, 0x4d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x12, 0x0b, 0x2e, 0x72, 0x70, 0x63, + 0x2e, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x1a, 0x0b, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x4d, 0x6f, + 0x64, 0x75, 0x6c, 0x65, 0x22, 0x00, 0x12, 0x35, 0x0a, 0x0d, 0x47, 0x65, 0x74, 0x4d, 0x6f, 0x64, + 0x75, 0x6c, 0x65, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, + 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x1a, + 0x0a, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x53, 0x6c, 0x69, 0x63, 0x65, 0x22, 0x00, 0x12, 0x2c, 0x0a, + 0x09, 0x52, 0x75, 0x6e, 0x4d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x12, 0x0e, 0x2e, 0x72, 0x70, 0x63, + 0x2e, 0x4d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x52, 0x75, 0x6e, 0x1a, 0x0d, 0x2e, 0x72, 0x70, 0x63, + 0x2e, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x73, 0x22, 0x00, 0x42, 0x23, 0x5a, 0x21, 0x67, + 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x4e, 0x65, 0x30, 0x6e, 0x64, 0x30, + 0x67, 0x2f, 0x6d, 0x65, 0x72, 0x6c, 0x69, 0x6e, 0x2f, 0x70, 0x6b, 0x67, 0x2f, 0x72, 0x70, 0x63, + 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, } var ( @@ -2074,7 +2136,7 @@ func file_pkg_rpc_rpc_proto_rawDescGZIP() []byte { } var file_pkg_rpc_rpc_proto_enumTypes = make([]protoimpl.EnumInfo, 1) -var file_pkg_rpc_rpc_proto_msgTypes = make([]protoimpl.MessageInfo, 23) +var file_pkg_rpc_rpc_proto_msgTypes = make([]protoimpl.MessageInfo, 24) var file_pkg_rpc_rpc_proto_goTypes = []interface{}{ (MessageLevel)(0), // 0: rpc.MessageLevel (*ID)(nil), // 1: rpc.ID @@ -2099,8 +2161,9 @@ var file_pkg_rpc_rpc_proto_goTypes = []interface{}{ (*ModuleOption)(nil), // 20: rpc.ModuleOption (*Module)(nil), // 21: rpc.Module (*ModuleRun)(nil), // 22: rpc.ModuleRun - nil, // 23: rpc.Options.OptionsEntry - (*emptypb.Empty)(nil), // 24: google.protobuf.Empty + (*Login)(nil), // 23: rpc.Login + nil, // 24: rpc.Options.OptionsEntry + (*emptypb.Empty)(nil), // 25: google.protobuf.Empty } var file_pkg_rpc_rpc_proto_depIdxs = []int32{ 3, // 0: rpc.AgentInfo.Build:type_name -> rpc.Build @@ -2110,19 +2173,19 @@ var file_pkg_rpc_rpc_proto_depIdxs = []int32{ 8, // 4: rpc.Jobs.jobs:type_name -> rpc.Job 0, // 5: rpc.Message.level:type_name -> rpc.MessageLevel 10, // 6: rpc.Messages.messages:type_name -> rpc.Message - 23, // 7: rpc.Options.options:type_name -> rpc.Options.OptionsEntry + 24, // 7: rpc.Options.options:type_name -> rpc.Options.OptionsEntry 13, // 8: rpc.TableData.rows:type_name -> rpc.TableRows 17, // 9: rpc.GroupMembers.members:type_name -> rpc.GroupMember 20, // 10: rpc.Module.Options:type_name -> rpc.ModuleOption 20, // 11: rpc.ModuleRun.Options:type_name -> rpc.ModuleOption 1, // 12: rpc.Merlin.Reconnect:input_type -> rpc.ID - 24, // 13: rpc.Merlin.Register:input_type -> google.protobuf.Empty + 25, // 13: rpc.Merlin.Register:input_type -> google.protobuf.Empty 1, // 14: rpc.Merlin.Listen:input_type -> rpc.ID 7, // 15: rpc.Merlin.Any:input_type -> rpc.AgentCMD 7, // 16: rpc.Merlin.CD:input_type -> rpc.AgentCMD 1, // 17: rpc.Merlin.CheckIn:input_type -> rpc.ID 1, // 18: rpc.Merlin.ClearJobs:input_type -> rpc.ID - 24, // 19: rpc.Merlin.ClearJobsCreated:input_type -> google.protobuf.Empty + 25, // 19: rpc.Merlin.ClearJobsCreated:input_type -> google.protobuf.Empty 7, // 20: rpc.Merlin.CMD:input_type -> rpc.AgentCMD 7, // 21: rpc.Merlin.Connect:input_type -> rpc.AgentCMD 7, // 22: rpc.Merlin.Download:input_type -> rpc.AgentCMD @@ -2149,136 +2212,138 @@ var file_pkg_rpc_rpc_proto_depIdxs = []int32{ 7, // 43: rpc.Merlin.Note:input_type -> rpc.AgentCMD 7, // 44: rpc.Merlin.Nslookup:input_type -> rpc.AgentCMD 7, // 45: rpc.Merlin.Padding:input_type -> rpc.AgentCMD - 1, // 46: rpc.Merlin.Pipes:input_type -> rpc.ID - 1, // 47: rpc.Merlin.PS:input_type -> rpc.ID - 1, // 48: rpc.Merlin.PWD:input_type -> rpc.ID - 7, // 49: rpc.Merlin.RM:input_type -> rpc.AgentCMD - 7, // 50: rpc.Merlin.RunAs:input_type -> rpc.AgentCMD - 7, // 51: rpc.Merlin.SecureDelete:input_type -> rpc.AgentCMD - 7, // 52: rpc.Merlin.SharpGen:input_type -> rpc.AgentCMD - 7, // 53: rpc.Merlin.Skew:input_type -> rpc.AgentCMD - 7, // 54: rpc.Merlin.Sleep:input_type -> rpc.AgentCMD - 7, // 55: rpc.Merlin.Socks:input_type -> rpc.AgentCMD - 7, // 56: rpc.Merlin.SSH:input_type -> rpc.AgentCMD - 7, // 57: rpc.Merlin.Token:input_type -> rpc.AgentCMD - 7, // 58: rpc.Merlin.Touch:input_type -> rpc.AgentCMD - 7, // 59: rpc.Merlin.UnlinkAgent:input_type -> rpc.AgentCMD - 7, // 60: rpc.Merlin.Upload:input_type -> rpc.AgentCMD - 1, // 61: rpc.Merlin.Uptime:input_type -> rpc.ID - 24, // 62: rpc.Merlin.Groups:input_type -> google.protobuf.Empty - 16, // 63: rpc.Merlin.GroupAdd:input_type -> rpc.Group - 1, // 64: rpc.Merlin.GroupList:input_type -> rpc.ID - 24, // 65: rpc.Merlin.GroupListAll:input_type -> google.protobuf.Empty - 16, // 66: rpc.Merlin.GroupRemove:input_type -> rpc.Group - 1, // 67: rpc.Merlin.GetAgent:input_type -> rpc.ID - 24, // 68: rpc.Merlin.GetAgents:input_type -> google.protobuf.Empty - 1, // 69: rpc.Merlin.GetAgentLinks:input_type -> rpc.ID - 1, // 70: rpc.Merlin.GetAgentStatus:input_type -> rpc.ID - 24, // 71: rpc.Merlin.GetAgentRows:input_type -> google.protobuf.Empty - 1, // 72: rpc.Merlin.Remove:input_type -> rpc.ID - 24, // 73: rpc.Merlin.GetAllJobs:input_type -> google.protobuf.Empty - 24, // 74: rpc.Merlin.GetAllActiveJobs:input_type -> google.protobuf.Empty - 1, // 75: rpc.Merlin.GetAgentJobs:input_type -> rpc.ID - 1, // 76: rpc.Merlin.GetAgentActiveJobs:input_type -> rpc.ID - 12, // 77: rpc.Merlin.CreateListener:input_type -> rpc.Options - 24, // 78: rpc.Merlin.GetListenerIDs:input_type -> google.protobuf.Empty - 24, // 79: rpc.Merlin.GetListeners:input_type -> google.protobuf.Empty - 1, // 80: rpc.Merlin.GetListenerOptions:input_type -> rpc.ID - 19, // 81: rpc.Merlin.GetListenerDefaultOptions:input_type -> rpc.String - 24, // 82: rpc.Merlin.GetListenerTypes:input_type -> google.protobuf.Empty - 1, // 83: rpc.Merlin.GetListenerStatus:input_type -> rpc.ID - 1, // 84: rpc.Merlin.RemoveListener:input_type -> rpc.ID - 1, // 85: rpc.Merlin.RestartListener:input_type -> rpc.ID - 7, // 86: rpc.Merlin.SetListenerOption:input_type -> rpc.AgentCMD - 1, // 87: rpc.Merlin.StartListener:input_type -> rpc.ID - 1, // 88: rpc.Merlin.StopListener:input_type -> rpc.ID - 24, // 89: rpc.Merlin.Servers:input_type -> google.protobuf.Empty - 19, // 90: rpc.Merlin.GetModule:input_type -> rpc.String - 24, // 91: rpc.Merlin.GetModuleList:input_type -> google.protobuf.Empty - 22, // 92: rpc.Merlin.RunModule:input_type -> rpc.ModuleRun - 1, // 93: rpc.Merlin.Reconnect:output_type -> rpc.ID - 1, // 94: rpc.Merlin.Register:output_type -> rpc.ID - 10, // 95: rpc.Merlin.Listen:output_type -> rpc.Message - 10, // 96: rpc.Merlin.Any:output_type -> rpc.Message - 10, // 97: rpc.Merlin.CD:output_type -> rpc.Message - 10, // 98: rpc.Merlin.CheckIn:output_type -> rpc.Message - 10, // 99: rpc.Merlin.ClearJobs:output_type -> rpc.Message - 10, // 100: rpc.Merlin.ClearJobsCreated:output_type -> rpc.Message - 10, // 101: rpc.Merlin.CMD:output_type -> rpc.Message - 10, // 102: rpc.Merlin.Connect:output_type -> rpc.Message - 10, // 103: rpc.Merlin.Download:output_type -> rpc.Message - 10, // 104: rpc.Merlin.ENV:output_type -> rpc.Message - 10, // 105: rpc.Merlin.ExecuteAssembly:output_type -> rpc.Message - 10, // 106: rpc.Merlin.ExecutePE:output_type -> rpc.Message - 10, // 107: rpc.Merlin.ExecuteShellcode:output_type -> rpc.Message - 10, // 108: rpc.Merlin.Exit:output_type -> rpc.Message - 10, // 109: rpc.Merlin.IFConfig:output_type -> rpc.Message - 10, // 110: rpc.Merlin.InvokeAssembly:output_type -> rpc.Message - 10, // 111: rpc.Merlin.JA3:output_type -> rpc.Message - 10, // 112: rpc.Merlin.KillDate:output_type -> rpc.Message - 10, // 113: rpc.Merlin.KillProcess:output_type -> rpc.Message - 10, // 114: rpc.Merlin.LinkAgent:output_type -> rpc.Message - 10, // 115: rpc.Merlin.ListAssemblies:output_type -> rpc.Message - 10, // 116: rpc.Merlin.Listener:output_type -> rpc.Message - 10, // 117: rpc.Merlin.LoadAssembly:output_type -> rpc.Message - 10, // 118: rpc.Merlin.LoadCLR:output_type -> rpc.Message - 10, // 119: rpc.Merlin.LS:output_type -> rpc.Message - 10, // 120: rpc.Merlin.MaxRetry:output_type -> rpc.Message - 10, // 121: rpc.Merlin.Memory:output_type -> rpc.Message - 10, // 122: rpc.Merlin.MEMFD:output_type -> rpc.Message - 10, // 123: rpc.Merlin.Netstat:output_type -> rpc.Message - 10, // 124: rpc.Merlin.Note:output_type -> rpc.Message - 10, // 125: rpc.Merlin.Nslookup:output_type -> rpc.Message - 10, // 126: rpc.Merlin.Padding:output_type -> rpc.Message - 10, // 127: rpc.Merlin.Pipes:output_type -> rpc.Message - 10, // 128: rpc.Merlin.PS:output_type -> rpc.Message - 10, // 129: rpc.Merlin.PWD:output_type -> rpc.Message - 10, // 130: rpc.Merlin.RM:output_type -> rpc.Message - 10, // 131: rpc.Merlin.RunAs:output_type -> rpc.Message - 10, // 132: rpc.Merlin.SecureDelete:output_type -> rpc.Message - 10, // 133: rpc.Merlin.SharpGen:output_type -> rpc.Message - 10, // 134: rpc.Merlin.Skew:output_type -> rpc.Message - 10, // 135: rpc.Merlin.Sleep:output_type -> rpc.Message - 10, // 136: rpc.Merlin.Socks:output_type -> rpc.Message - 10, // 137: rpc.Merlin.SSH:output_type -> rpc.Message - 10, // 138: rpc.Merlin.Token:output_type -> rpc.Message - 10, // 139: rpc.Merlin.Touch:output_type -> rpc.Message - 10, // 140: rpc.Merlin.UnlinkAgent:output_type -> rpc.Message - 10, // 141: rpc.Merlin.Upload:output_type -> rpc.Message - 10, // 142: rpc.Merlin.Uptime:output_type -> rpc.Message - 15, // 143: rpc.Merlin.Groups:output_type -> rpc.Slice - 10, // 144: rpc.Merlin.GroupAdd:output_type -> rpc.Message - 15, // 145: rpc.Merlin.GroupList:output_type -> rpc.Slice - 18, // 146: rpc.Merlin.GroupListAll:output_type -> rpc.GroupMembers - 10, // 147: rpc.Merlin.GroupRemove:output_type -> rpc.Message - 2, // 148: rpc.Merlin.GetAgent:output_type -> rpc.AgentInfo - 15, // 149: rpc.Merlin.GetAgents:output_type -> rpc.Slice - 15, // 150: rpc.Merlin.GetAgentLinks:output_type -> rpc.Slice - 10, // 151: rpc.Merlin.GetAgentStatus:output_type -> rpc.Message - 14, // 152: rpc.Merlin.GetAgentRows:output_type -> rpc.TableData - 10, // 153: rpc.Merlin.Remove:output_type -> rpc.Message - 9, // 154: rpc.Merlin.GetAllJobs:output_type -> rpc.Jobs - 9, // 155: rpc.Merlin.GetAllActiveJobs:output_type -> rpc.Jobs - 9, // 156: rpc.Merlin.GetAgentJobs:output_type -> rpc.Jobs - 9, // 157: rpc.Merlin.GetAgentActiveJobs:output_type -> rpc.Jobs - 10, // 158: rpc.Merlin.CreateListener:output_type -> rpc.Message - 15, // 159: rpc.Merlin.GetListenerIDs:output_type -> rpc.Slice - 14, // 160: rpc.Merlin.GetListeners:output_type -> rpc.TableData - 12, // 161: rpc.Merlin.GetListenerOptions:output_type -> rpc.Options - 12, // 162: rpc.Merlin.GetListenerDefaultOptions:output_type -> rpc.Options - 15, // 163: rpc.Merlin.GetListenerTypes:output_type -> rpc.Slice - 10, // 164: rpc.Merlin.GetListenerStatus:output_type -> rpc.Message - 10, // 165: rpc.Merlin.RemoveListener:output_type -> rpc.Message - 10, // 166: rpc.Merlin.RestartListener:output_type -> rpc.Message - 10, // 167: rpc.Merlin.SetListenerOption:output_type -> rpc.Message - 10, // 168: rpc.Merlin.StartListener:output_type -> rpc.Message - 10, // 169: rpc.Merlin.StopListener:output_type -> rpc.Message - 15, // 170: rpc.Merlin.Servers:output_type -> rpc.Slice - 21, // 171: rpc.Merlin.GetModule:output_type -> rpc.Module - 15, // 172: rpc.Merlin.GetModuleList:output_type -> rpc.Slice - 11, // 173: rpc.Merlin.RunModule:output_type -> rpc.Messages - 93, // [93:174] is the sub-list for method output_type - 12, // [12:93] is the sub-list for method input_type + 7, // 46: rpc.Merlin.Parrot:input_type -> rpc.AgentCMD + 1, // 47: rpc.Merlin.Pipes:input_type -> rpc.ID + 1, // 48: rpc.Merlin.PS:input_type -> rpc.ID + 1, // 49: rpc.Merlin.PWD:input_type -> rpc.ID + 7, // 50: rpc.Merlin.RM:input_type -> rpc.AgentCMD + 7, // 51: rpc.Merlin.RunAs:input_type -> rpc.AgentCMD + 7, // 52: rpc.Merlin.SecureDelete:input_type -> rpc.AgentCMD + 7, // 53: rpc.Merlin.SharpGen:input_type -> rpc.AgentCMD + 7, // 54: rpc.Merlin.Skew:input_type -> rpc.AgentCMD + 7, // 55: rpc.Merlin.Sleep:input_type -> rpc.AgentCMD + 7, // 56: rpc.Merlin.Socks:input_type -> rpc.AgentCMD + 7, // 57: rpc.Merlin.SSH:input_type -> rpc.AgentCMD + 7, // 58: rpc.Merlin.Token:input_type -> rpc.AgentCMD + 7, // 59: rpc.Merlin.Touch:input_type -> rpc.AgentCMD + 7, // 60: rpc.Merlin.UnlinkAgent:input_type -> rpc.AgentCMD + 7, // 61: rpc.Merlin.Upload:input_type -> rpc.AgentCMD + 1, // 62: rpc.Merlin.Uptime:input_type -> rpc.ID + 25, // 63: rpc.Merlin.Groups:input_type -> google.protobuf.Empty + 16, // 64: rpc.Merlin.GroupAdd:input_type -> rpc.Group + 1, // 65: rpc.Merlin.GroupList:input_type -> rpc.ID + 25, // 66: rpc.Merlin.GroupListAll:input_type -> google.protobuf.Empty + 16, // 67: rpc.Merlin.GroupRemove:input_type -> rpc.Group + 1, // 68: rpc.Merlin.GetAgent:input_type -> rpc.ID + 25, // 69: rpc.Merlin.GetAgents:input_type -> google.protobuf.Empty + 1, // 70: rpc.Merlin.GetAgentLinks:input_type -> rpc.ID + 1, // 71: rpc.Merlin.GetAgentStatus:input_type -> rpc.ID + 25, // 72: rpc.Merlin.GetAgentRows:input_type -> google.protobuf.Empty + 1, // 73: rpc.Merlin.Remove:input_type -> rpc.ID + 25, // 74: rpc.Merlin.GetAllJobs:input_type -> google.protobuf.Empty + 25, // 75: rpc.Merlin.GetAllActiveJobs:input_type -> google.protobuf.Empty + 1, // 76: rpc.Merlin.GetAgentJobs:input_type -> rpc.ID + 1, // 77: rpc.Merlin.GetAgentActiveJobs:input_type -> rpc.ID + 12, // 78: rpc.Merlin.CreateListener:input_type -> rpc.Options + 25, // 79: rpc.Merlin.GetListenerIDs:input_type -> google.protobuf.Empty + 25, // 80: rpc.Merlin.GetListeners:input_type -> google.protobuf.Empty + 1, // 81: rpc.Merlin.GetListenerOptions:input_type -> rpc.ID + 19, // 82: rpc.Merlin.GetListenerDefaultOptions:input_type -> rpc.String + 25, // 83: rpc.Merlin.GetListenerTypes:input_type -> google.protobuf.Empty + 1, // 84: rpc.Merlin.GetListenerStatus:input_type -> rpc.ID + 1, // 85: rpc.Merlin.RemoveListener:input_type -> rpc.ID + 1, // 86: rpc.Merlin.RestartListener:input_type -> rpc.ID + 7, // 87: rpc.Merlin.SetListenerOption:input_type -> rpc.AgentCMD + 1, // 88: rpc.Merlin.StartListener:input_type -> rpc.ID + 1, // 89: rpc.Merlin.StopListener:input_type -> rpc.ID + 25, // 90: rpc.Merlin.Servers:input_type -> google.protobuf.Empty + 19, // 91: rpc.Merlin.GetModule:input_type -> rpc.String + 25, // 92: rpc.Merlin.GetModuleList:input_type -> google.protobuf.Empty + 22, // 93: rpc.Merlin.RunModule:input_type -> rpc.ModuleRun + 1, // 94: rpc.Merlin.Reconnect:output_type -> rpc.ID + 1, // 95: rpc.Merlin.Register:output_type -> rpc.ID + 10, // 96: rpc.Merlin.Listen:output_type -> rpc.Message + 10, // 97: rpc.Merlin.Any:output_type -> rpc.Message + 10, // 98: rpc.Merlin.CD:output_type -> rpc.Message + 10, // 99: rpc.Merlin.CheckIn:output_type -> rpc.Message + 10, // 100: rpc.Merlin.ClearJobs:output_type -> rpc.Message + 10, // 101: rpc.Merlin.ClearJobsCreated:output_type -> rpc.Message + 10, // 102: rpc.Merlin.CMD:output_type -> rpc.Message + 10, // 103: rpc.Merlin.Connect:output_type -> rpc.Message + 10, // 104: rpc.Merlin.Download:output_type -> rpc.Message + 10, // 105: rpc.Merlin.ENV:output_type -> rpc.Message + 10, // 106: rpc.Merlin.ExecuteAssembly:output_type -> rpc.Message + 10, // 107: rpc.Merlin.ExecutePE:output_type -> rpc.Message + 10, // 108: rpc.Merlin.ExecuteShellcode:output_type -> rpc.Message + 10, // 109: rpc.Merlin.Exit:output_type -> rpc.Message + 10, // 110: rpc.Merlin.IFConfig:output_type -> rpc.Message + 10, // 111: rpc.Merlin.InvokeAssembly:output_type -> rpc.Message + 10, // 112: rpc.Merlin.JA3:output_type -> rpc.Message + 10, // 113: rpc.Merlin.KillDate:output_type -> rpc.Message + 10, // 114: rpc.Merlin.KillProcess:output_type -> rpc.Message + 10, // 115: rpc.Merlin.LinkAgent:output_type -> rpc.Message + 10, // 116: rpc.Merlin.ListAssemblies:output_type -> rpc.Message + 10, // 117: rpc.Merlin.Listener:output_type -> rpc.Message + 10, // 118: rpc.Merlin.LoadAssembly:output_type -> rpc.Message + 10, // 119: rpc.Merlin.LoadCLR:output_type -> rpc.Message + 10, // 120: rpc.Merlin.LS:output_type -> rpc.Message + 10, // 121: rpc.Merlin.MaxRetry:output_type -> rpc.Message + 10, // 122: rpc.Merlin.Memory:output_type -> rpc.Message + 10, // 123: rpc.Merlin.MEMFD:output_type -> rpc.Message + 10, // 124: rpc.Merlin.Netstat:output_type -> rpc.Message + 10, // 125: rpc.Merlin.Note:output_type -> rpc.Message + 10, // 126: rpc.Merlin.Nslookup:output_type -> rpc.Message + 10, // 127: rpc.Merlin.Padding:output_type -> rpc.Message + 10, // 128: rpc.Merlin.Parrot:output_type -> rpc.Message + 10, // 129: rpc.Merlin.Pipes:output_type -> rpc.Message + 10, // 130: rpc.Merlin.PS:output_type -> rpc.Message + 10, // 131: rpc.Merlin.PWD:output_type -> rpc.Message + 10, // 132: rpc.Merlin.RM:output_type -> rpc.Message + 10, // 133: rpc.Merlin.RunAs:output_type -> rpc.Message + 10, // 134: rpc.Merlin.SecureDelete:output_type -> rpc.Message + 10, // 135: rpc.Merlin.SharpGen:output_type -> rpc.Message + 10, // 136: rpc.Merlin.Skew:output_type -> rpc.Message + 10, // 137: rpc.Merlin.Sleep:output_type -> rpc.Message + 10, // 138: rpc.Merlin.Socks:output_type -> rpc.Message + 10, // 139: rpc.Merlin.SSH:output_type -> rpc.Message + 10, // 140: rpc.Merlin.Token:output_type -> rpc.Message + 10, // 141: rpc.Merlin.Touch:output_type -> rpc.Message + 10, // 142: rpc.Merlin.UnlinkAgent:output_type -> rpc.Message + 10, // 143: rpc.Merlin.Upload:output_type -> rpc.Message + 10, // 144: rpc.Merlin.Uptime:output_type -> rpc.Message + 15, // 145: rpc.Merlin.Groups:output_type -> rpc.Slice + 10, // 146: rpc.Merlin.GroupAdd:output_type -> rpc.Message + 15, // 147: rpc.Merlin.GroupList:output_type -> rpc.Slice + 18, // 148: rpc.Merlin.GroupListAll:output_type -> rpc.GroupMembers + 10, // 149: rpc.Merlin.GroupRemove:output_type -> rpc.Message + 2, // 150: rpc.Merlin.GetAgent:output_type -> rpc.AgentInfo + 15, // 151: rpc.Merlin.GetAgents:output_type -> rpc.Slice + 15, // 152: rpc.Merlin.GetAgentLinks:output_type -> rpc.Slice + 10, // 153: rpc.Merlin.GetAgentStatus:output_type -> rpc.Message + 14, // 154: rpc.Merlin.GetAgentRows:output_type -> rpc.TableData + 10, // 155: rpc.Merlin.Remove:output_type -> rpc.Message + 9, // 156: rpc.Merlin.GetAllJobs:output_type -> rpc.Jobs + 9, // 157: rpc.Merlin.GetAllActiveJobs:output_type -> rpc.Jobs + 9, // 158: rpc.Merlin.GetAgentJobs:output_type -> rpc.Jobs + 9, // 159: rpc.Merlin.GetAgentActiveJobs:output_type -> rpc.Jobs + 10, // 160: rpc.Merlin.CreateListener:output_type -> rpc.Message + 15, // 161: rpc.Merlin.GetListenerIDs:output_type -> rpc.Slice + 14, // 162: rpc.Merlin.GetListeners:output_type -> rpc.TableData + 12, // 163: rpc.Merlin.GetListenerOptions:output_type -> rpc.Options + 12, // 164: rpc.Merlin.GetListenerDefaultOptions:output_type -> rpc.Options + 15, // 165: rpc.Merlin.GetListenerTypes:output_type -> rpc.Slice + 10, // 166: rpc.Merlin.GetListenerStatus:output_type -> rpc.Message + 10, // 167: rpc.Merlin.RemoveListener:output_type -> rpc.Message + 10, // 168: rpc.Merlin.RestartListener:output_type -> rpc.Message + 10, // 169: rpc.Merlin.SetListenerOption:output_type -> rpc.Message + 10, // 170: rpc.Merlin.StartListener:output_type -> rpc.Message + 10, // 171: rpc.Merlin.StopListener:output_type -> rpc.Message + 15, // 172: rpc.Merlin.Servers:output_type -> rpc.Slice + 21, // 173: rpc.Merlin.GetModule:output_type -> rpc.Module + 15, // 174: rpc.Merlin.GetModuleList:output_type -> rpc.Slice + 11, // 175: rpc.Merlin.RunModule:output_type -> rpc.Messages + 94, // [94:176] is the sub-list for method output_type + 12, // [12:94] is the sub-list for method input_type 12, // [12:12] is the sub-list for extension type_name 12, // [12:12] is the sub-list for extension extendee 0, // [0:12] is the sub-list for field type_name @@ -2554,6 +2619,18 @@ func file_pkg_rpc_rpc_proto_init() { return nil } } + file_pkg_rpc_rpc_proto_msgTypes[22].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*Login); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } } type x struct{} out := protoimpl.TypeBuilder{ @@ -2561,7 +2638,7 @@ func file_pkg_rpc_rpc_proto_init() { GoPackagePath: reflect.TypeOf(x{}).PkgPath(), RawDescriptor: file_pkg_rpc_rpc_proto_rawDesc, NumEnums: 1, - NumMessages: 23, + NumMessages: 24, NumExtensions: 0, NumServices: 1, }, diff --git a/pkg/rpc/rpc.proto b/pkg/rpc/rpc.proto index 816e0b9b..1e6c33cf 100644 --- a/pkg/rpc/rpc.proto +++ b/pkg/rpc/rpc.proto @@ -6,7 +6,6 @@ import "google/protobuf/empty.proto"; package rpc; service Merlin { - rpc Authenticate() rpc Reconnect(ID) returns (ID) {} rpc Register(google.protobuf.Empty) returns (ID) {} rpc Listen(ID) returns (stream Message) {} @@ -43,6 +42,7 @@ service Merlin { rpc Note(AgentCMD) returns (Message) {} rpc Nslookup(AgentCMD) returns (Message) {} rpc Padding(AgentCMD) returns (Message) {} + rpc Parrot(AgentCMD) returns (Message) {} rpc Pipes(ID) returns (Message) {} rpc PS(ID) returns (Message) {} rpc PWD(ID) returns (Message) {} diff --git a/pkg/rpc/rpc_grpc.pb.go b/pkg/rpc/rpc_grpc.pb.go index f1fe94ae..298bd111 100644 --- a/pkg/rpc/rpc_grpc.pb.go +++ b/pkg/rpc/rpc_grpc.pb.go @@ -54,6 +54,7 @@ type MerlinClient interface { Note(ctx context.Context, in *AgentCMD, opts ...grpc.CallOption) (*Message, error) Nslookup(ctx context.Context, in *AgentCMD, opts ...grpc.CallOption) (*Message, error) Padding(ctx context.Context, in *AgentCMD, opts ...grpc.CallOption) (*Message, error) + Parrot(ctx context.Context, in *AgentCMD, opts ...grpc.CallOption) (*Message, error) Pipes(ctx context.Context, in *ID, opts ...grpc.CallOption) (*Message, error) PS(ctx context.Context, in *ID, opts ...grpc.CallOption) (*Message, error) PWD(ctx context.Context, in *ID, opts ...grpc.CallOption) (*Message, error) @@ -443,6 +444,15 @@ func (c *merlinClient) Padding(ctx context.Context, in *AgentCMD, opts ...grpc.C return out, nil } +func (c *merlinClient) Parrot(ctx context.Context, in *AgentCMD, opts ...grpc.CallOption) (*Message, error) { + out := new(Message) + err := c.cc.Invoke(ctx, "/rpc.Merlin/Parrot", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + func (c *merlinClient) Pipes(ctx context.Context, in *ID, opts ...grpc.CallOption) (*Message, error) { out := new(Message) err := c.cc.Invoke(ctx, "/rpc.Merlin/Pipes", in, out, opts...) @@ -905,6 +915,7 @@ type MerlinServer interface { Note(context.Context, *AgentCMD) (*Message, error) Nslookup(context.Context, *AgentCMD) (*Message, error) Padding(context.Context, *AgentCMD) (*Message, error) + Parrot(context.Context, *AgentCMD) (*Message, error) Pipes(context.Context, *ID) (*Message, error) PS(context.Context, *ID) (*Message, error) PWD(context.Context, *ID) (*Message, error) @@ -1064,6 +1075,9 @@ func (UnimplementedMerlinServer) Nslookup(context.Context, *AgentCMD) (*Message, func (UnimplementedMerlinServer) Padding(context.Context, *AgentCMD) (*Message, error) { return nil, status.Errorf(codes.Unimplemented, "method Padding not implemented") } +func (UnimplementedMerlinServer) Parrot(context.Context, *AgentCMD) (*Message, error) { + return nil, status.Errorf(codes.Unimplemented, "method Parrot not implemented") +} func (UnimplementedMerlinServer) Pipes(context.Context, *ID) (*Message, error) { return nil, status.Errorf(codes.Unimplemented, "method Pipes not implemented") } @@ -1833,6 +1847,24 @@ func _Merlin_Padding_Handler(srv interface{}, ctx context.Context, dec func(inte return interceptor(ctx, in, info, handler) } +func _Merlin_Parrot_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(AgentCMD) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(MerlinServer).Parrot(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/rpc.Merlin/Parrot", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(MerlinServer).Parrot(ctx, req.(*AgentCMD)) + } + return interceptor(ctx, in, info, handler) +} + func _Merlin_Pipes_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { in := new(ID) if err := dec(in); err != nil { @@ -2818,6 +2850,10 @@ var Merlin_ServiceDesc = grpc.ServiceDesc{ MethodName: "Padding", Handler: _Merlin_Padding_Handler, }, + { + MethodName: "Parrot", + Handler: _Merlin_Parrot_Handler, + }, { MethodName: "Pipes", Handler: _Merlin_Pipes_Handler, diff --git a/pkg/services/job/job.go b/pkg/services/job/job.go index e1e4859d..5a4ec65b 100644 --- a/pkg/services/job/job.go +++ b/pkg/services/job/job.go @@ -289,6 +289,13 @@ func (s *Service) Add(agentID uuid.UUID, jobType string, jobArgs []string) (stri Args: jobArgs, } job.Payload = p + case "parrot": + job.Type = jobs.CONTROL + p := jobs.Command{ + Command: jobType, + Args: jobArgs, + } + job.Payload = p case "pipes": job.Type = jobs.MODULE p := jobs.Command{ diff --git a/pkg/services/rpc/agent.go b/pkg/services/rpc/agent.go index 9371ab01..746692d0 100644 --- a/pkg/services/rpc/agent.go +++ b/pkg/services/rpc/agent.go @@ -493,6 +493,13 @@ func (s *Server) Padding(ctx context.Context, in *pb.AgentCMD) (msg *pb.Message, return addJob(in.ID, "padding", in.Arguments) } +// Parrot configures the Agent's HTTP connection to mimic a specific browser +// in.Arguments[0] = the browser to mimic (e.g., HelloChrome_Auto) +func (s *Server) Parrot(ctx context.Context, in *pb.AgentCMD) (msg *pb.Message, err error) { + slog.Log(context.Background(), logging.LevelTrace, "entering into function", "context", ctx, "in", in) + return addJob(in.ID, "parrot", in.Arguments) +} + // Pipes enumerates and displays named pipes on Windows hosts only func (s *Server) Pipes(ctx context.Context, id *pb.ID) (msg *pb.Message, err error) { slog.Log(context.Background(), logging.LevelTrace, "entering into function", "context", ctx, "id", id) diff --git a/pkg/services/rpc/job.go b/pkg/services/rpc/job.go index 3cee6f72..e8c3adda 100644 --- a/pkg/services/rpc/job.go +++ b/pkg/services/rpc/job.go @@ -53,7 +53,7 @@ func addJob(agentID string, jobType string, jobArgs []string) (msg *pb.Message, var result string result, err = service.rpcServer.jobService.Add(agentUUID, jobType, jobArgs) if err != nil { - err = fmt.Errorf("there was an error adding the job: %s", err) + err = fmt.Errorf("there was an error adding the '%s' job: %s", jobType, err) slog.Error(err.Error()) return }