From ab799171fed40ba0d8f5b17ea8e42d00d47baa86 Mon Sep 17 00:00:00 2001 From: Chris Czub Date: Wed, 6 Sep 2023 20:20:02 -0400 Subject: [PATCH] Re-enable sweeping of unclaimed swaps (#2965) Re-enable sweeping of unclaimed swaps (#2965) --------- Co-authored-by: aubrey --- Cargo.lock | 3 + .../proto/src/gen/penumbra.view.v1alpha1.rs | 90 ++ .../src/gen/penumbra.view.v1alpha1.serde.rs | 183 +++ crates/proto/src/gen/proto_descriptor.bin | 4 +- crates/view/src/client.rs | 35 + crates/view/src/service.rs | 32 + crates/view/src/storage.rs | 25 +- crates/wallet/Cargo.toml | 7 +- crates/wallet/src/plan.rs | 112 +- .../go/gen/penumbra/view/v1alpha1/view.pb.go | 1344 +++++++++-------- .../penumbra/view/v1alpha1/view.proto | 12 + 11 files changed, 1164 insertions(+), 683 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index af112497b7..36344276e9 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -5548,14 +5548,17 @@ name = "penumbra-wallet" version = "0.59.0" dependencies = [ "anyhow", + "ark-std", "bincode", "bytes", + "decaf377 0.5.0", "hex", "once_cell", "penumbra-app", "penumbra-asset", "penumbra-chain", "penumbra-custody", + "penumbra-dex", "penumbra-fee", "penumbra-keys", "penumbra-num", diff --git a/crates/proto/src/gen/penumbra.view.v1alpha1.rs b/crates/proto/src/gen/penumbra.view.v1alpha1.rs index 82c5f408d5..569b922281 100644 --- a/crates/proto/src/gen/penumbra.view.v1alpha1.rs +++ b/crates/proto/src/gen/penumbra.view.v1alpha1.rs @@ -553,6 +553,21 @@ pub struct SwapByCommitmentResponse { } #[allow(clippy::derive_partial_eq_without_eq)] #[derive(Clone, PartialEq, ::prost::Message)] +pub struct UnclaimedSwapsRequest { + /// Identifies the account group to query. + #[prost(message, optional, tag = "1")] + pub account_group_id: ::core::option::Option< + super::super::core::crypto::v1alpha1::AccountGroupId, + >, +} +#[allow(clippy::derive_partial_eq_without_eq)] +#[derive(Clone, PartialEq, ::prost::Message)] +pub struct UnclaimedSwapsResponse { + #[prost(message, optional, tag = "1")] + pub swap: ::core::option::Option, +} +#[allow(clippy::derive_partial_eq_without_eq)] +#[derive(Clone, PartialEq, ::prost::Message)] pub struct NullifierStatusRequest { #[prost(message, optional, tag = "2")] pub nullifier: ::core::option::Option< @@ -1123,6 +1138,29 @@ pub mod view_protocol_service_client { ); self.inner.unary(request.into_request(), path, codec).await } + /// Query for all unclaimed swaps. + pub async fn unclaimed_swaps( + &mut self, + request: impl tonic::IntoRequest, + ) -> Result< + tonic::Response>, + tonic::Status, + > { + self.inner + .ready() + .await + .map_err(|e| { + tonic::Status::new( + tonic::Code::Unknown, + format!("Service was not ready: {}", e.into()), + ) + })?; + let codec = tonic::codec::ProstCodec::default(); + let path = http::uri::PathAndQuery::from_static( + "/penumbra.view.v1alpha1.ViewProtocolService/UnclaimedSwaps", + ); + self.inner.server_streaming(request.into_request(), path, codec).await + } /// Query for whether a nullifier has been spent, optionally waiting until it is spent. pub async fn nullifier_status( &mut self, @@ -1490,6 +1528,17 @@ pub mod view_protocol_service_server { &self, request: tonic::Request, ) -> Result, tonic::Status>; + /// Server streaming response type for the UnclaimedSwaps method. + type UnclaimedSwapsStream: futures_core::Stream< + Item = Result, + > + + Send + + 'static; + /// Query for all unclaimed swaps. + async fn unclaimed_swaps( + &self, + request: tonic::Request, + ) -> Result, tonic::Status>; /// Query for whether a nullifier has been spent, optionally waiting until it is spent. async fn nullifier_status( &self, @@ -2203,6 +2252,47 @@ pub mod view_protocol_service_server { }; Box::pin(fut) } + "/penumbra.view.v1alpha1.ViewProtocolService/UnclaimedSwaps" => { + #[allow(non_camel_case_types)] + struct UnclaimedSwapsSvc(pub Arc); + impl< + T: ViewProtocolService, + > tonic::server::ServerStreamingService + for UnclaimedSwapsSvc { + type Response = super::UnclaimedSwapsResponse; + type ResponseStream = T::UnclaimedSwapsStream; + type Future = BoxFuture< + tonic::Response, + tonic::Status, + >; + fn call( + &mut self, + request: tonic::Request, + ) -> Self::Future { + let inner = self.0.clone(); + let fut = async move { + (*inner).unclaimed_swaps(request).await + }; + Box::pin(fut) + } + } + let accept_compression_encodings = self.accept_compression_encodings; + let send_compression_encodings = self.send_compression_encodings; + let inner = self.inner.clone(); + let fut = async move { + let inner = inner.0; + let method = UnclaimedSwapsSvc(inner); + let codec = tonic::codec::ProstCodec::default(); + let mut grpc = tonic::server::Grpc::new(codec) + .apply_compression_config( + accept_compression_encodings, + send_compression_encodings, + ); + let res = grpc.server_streaming(method, req).await; + Ok(res) + }; + Box::pin(fut) + } "/penumbra.view.v1alpha1.ViewProtocolService/NullifierStatus" => { #[allow(non_camel_case_types)] struct NullifierStatusSvc(pub Arc); diff --git a/crates/proto/src/gen/penumbra.view.v1alpha1.serde.rs b/crates/proto/src/gen/penumbra.view.v1alpha1.serde.rs index f98c975cec..effc02d255 100644 --- a/crates/proto/src/gen/penumbra.view.v1alpha1.serde.rs +++ b/crates/proto/src/gen/penumbra.view.v1alpha1.serde.rs @@ -5839,6 +5839,189 @@ impl<'de> serde::Deserialize<'de> for TransactionPlannerResponse { deserializer.deserialize_struct("penumbra.view.v1alpha1.TransactionPlannerResponse", FIELDS, GeneratedVisitor) } } +impl serde::Serialize for UnclaimedSwapsRequest { + #[allow(deprecated)] + fn serialize(&self, serializer: S) -> std::result::Result + where + S: serde::Serializer, + { + use serde::ser::SerializeStruct; + let mut len = 0; + if self.account_group_id.is_some() { + len += 1; + } + let mut struct_ser = serializer.serialize_struct("penumbra.view.v1alpha1.UnclaimedSwapsRequest", len)?; + if let Some(v) = self.account_group_id.as_ref() { + struct_ser.serialize_field("accountGroupId", v)?; + } + struct_ser.end() + } +} +impl<'de> serde::Deserialize<'de> for UnclaimedSwapsRequest { + #[allow(deprecated)] + fn deserialize(deserializer: D) -> std::result::Result + where + D: serde::Deserializer<'de>, + { + const FIELDS: &[&str] = &[ + "account_group_id", + "accountGroupId", + ]; + + #[allow(clippy::enum_variant_names)] + enum GeneratedField { + AccountGroupId, + } + impl<'de> serde::Deserialize<'de> for GeneratedField { + fn deserialize(deserializer: D) -> std::result::Result + where + D: serde::Deserializer<'de>, + { + struct GeneratedVisitor; + + impl<'de> serde::de::Visitor<'de> for GeneratedVisitor { + type Value = GeneratedField; + + fn expecting(&self, formatter: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { + write!(formatter, "expected one of: {:?}", &FIELDS) + } + + #[allow(unused_variables)] + fn visit_str(self, value: &str) -> std::result::Result + where + E: serde::de::Error, + { + match value { + "accountGroupId" | "account_group_id" => Ok(GeneratedField::AccountGroupId), + _ => Err(serde::de::Error::unknown_field(value, FIELDS)), + } + } + } + deserializer.deserialize_identifier(GeneratedVisitor) + } + } + struct GeneratedVisitor; + impl<'de> serde::de::Visitor<'de> for GeneratedVisitor { + type Value = UnclaimedSwapsRequest; + + fn expecting(&self, formatter: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { + formatter.write_str("struct penumbra.view.v1alpha1.UnclaimedSwapsRequest") + } + + fn visit_map(self, mut map: V) -> std::result::Result + where + V: serde::de::MapAccess<'de>, + { + let mut account_group_id__ = None; + while let Some(k) = map.next_key()? { + match k { + GeneratedField::AccountGroupId => { + if account_group_id__.is_some() { + return Err(serde::de::Error::duplicate_field("accountGroupId")); + } + account_group_id__ = map.next_value()?; + } + } + } + Ok(UnclaimedSwapsRequest { + account_group_id: account_group_id__, + }) + } + } + deserializer.deserialize_struct("penumbra.view.v1alpha1.UnclaimedSwapsRequest", FIELDS, GeneratedVisitor) + } +} +impl serde::Serialize for UnclaimedSwapsResponse { + #[allow(deprecated)] + fn serialize(&self, serializer: S) -> std::result::Result + where + S: serde::Serializer, + { + use serde::ser::SerializeStruct; + let mut len = 0; + if self.swap.is_some() { + len += 1; + } + let mut struct_ser = serializer.serialize_struct("penumbra.view.v1alpha1.UnclaimedSwapsResponse", len)?; + if let Some(v) = self.swap.as_ref() { + struct_ser.serialize_field("swap", v)?; + } + struct_ser.end() + } +} +impl<'de> serde::Deserialize<'de> for UnclaimedSwapsResponse { + #[allow(deprecated)] + fn deserialize(deserializer: D) -> std::result::Result + where + D: serde::Deserializer<'de>, + { + const FIELDS: &[&str] = &[ + "swap", + ]; + + #[allow(clippy::enum_variant_names)] + enum GeneratedField { + Swap, + } + impl<'de> serde::Deserialize<'de> for GeneratedField { + fn deserialize(deserializer: D) -> std::result::Result + where + D: serde::Deserializer<'de>, + { + struct GeneratedVisitor; + + impl<'de> serde::de::Visitor<'de> for GeneratedVisitor { + type Value = GeneratedField; + + fn expecting(&self, formatter: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { + write!(formatter, "expected one of: {:?}", &FIELDS) + } + + #[allow(unused_variables)] + fn visit_str(self, value: &str) -> std::result::Result + where + E: serde::de::Error, + { + match value { + "swap" => Ok(GeneratedField::Swap), + _ => Err(serde::de::Error::unknown_field(value, FIELDS)), + } + } + } + deserializer.deserialize_identifier(GeneratedVisitor) + } + } + struct GeneratedVisitor; + impl<'de> serde::de::Visitor<'de> for GeneratedVisitor { + type Value = UnclaimedSwapsResponse; + + fn expecting(&self, formatter: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { + formatter.write_str("struct penumbra.view.v1alpha1.UnclaimedSwapsResponse") + } + + fn visit_map(self, mut map: V) -> std::result::Result + where + V: serde::de::MapAccess<'de>, + { + let mut swap__ = None; + while let Some(k) = map.next_key()? { + match k { + GeneratedField::Swap => { + if swap__.is_some() { + return Err(serde::de::Error::duplicate_field("swap")); + } + swap__ = map.next_value()?; + } + } + } + Ok(UnclaimedSwapsResponse { + swap: swap__, + }) + } + } + deserializer.deserialize_struct("penumbra.view.v1alpha1.UnclaimedSwapsResponse", FIELDS, GeneratedVisitor) + } +} impl serde::Serialize for ViewAuthRequest { #[allow(deprecated)] fn serialize(&self, serializer: S) -> std::result::Result diff --git a/crates/proto/src/gen/proto_descriptor.bin b/crates/proto/src/gen/proto_descriptor.bin index cd4af81fcd..d688b7817b 100644 --- a/crates/proto/src/gen/proto_descriptor.bin +++ b/crates/proto/src/gen/proto_descriptor.bin @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:ec4fa959275e05cc80e15210c873776afd485a540756ea4ea38077d08605b9b5 -size 332261 +oid sha256:97d6c81ceb721d33c01bef68c4d6e4d3b9157aca2ba019df26b7470fa1776572 +size 339437 diff --git a/crates/view/src/client.rs b/crates/view/src/client.rs index 8e38e543b6..f6ba93fb06 100644 --- a/crates/view/src/client.rs +++ b/crates/view/src/client.rs @@ -267,6 +267,11 @@ pub trait ViewClient { &mut self, address_index: AddressIndex, ) -> Pin> + Send + 'static>>; + + /// Queries for unclaimed Swaps. + fn unclaimed_swaps( + &mut self, + ) -> Pin>> + Send + 'static>>; } // We need to tell `async_trait` not to add a `Send` bound to the boxed @@ -872,4 +877,34 @@ where } .boxed() } + + fn unclaimed_swaps( + &mut self, + ) -> Pin>> + Send + 'static>> { + let mut self2 = self.clone(); + async move { + let swaps_response = ViewProtocolServiceClient::unclaimed_swaps( + &mut self2, + tonic::Request::new(pb::UnclaimedSwapsRequest { + ..Default::default() + }), + ); + let pb_swaps: Vec<_> = swaps_response.await?.into_inner().try_collect().await?; + + pb_swaps + .into_iter() + .map(|swap_rsp| { + let swap_record = swap_rsp + .swap + .ok_or_else(|| anyhow::anyhow!("empty UnclaimedSwapsResponse message")); + + match swap_record { + Ok(swap) => swap.try_into(), + Err(e) => Err(e), + } + }) + .collect() + } + .boxed() + } } diff --git a/crates/view/src/service.rs b/crates/view/src/service.rs index f3ad4a6ccf..fe7539a686 100644 --- a/crates/view/src/service.rs +++ b/crates/view/src/service.rs @@ -309,6 +309,9 @@ impl ViewProtocolService for ViewService { type OwnedPositionIdsStream = Pin< Box> + Send>, >; + type UnclaimedSwapsStream = Pin< + Box> + Send>, + >; async fn broadcast_transaction( &self, @@ -1458,4 +1461,33 @@ impl ViewProtocolService for ViewService { ) -> Result, tonic::Status> { unimplemented!("authorize_and_build") } + + async fn unclaimed_swaps( + &self, + request: tonic::Request, + ) -> Result, tonic::Status> { + self.check_worker().await?; + self.check_account_group_id(request.get_ref().account_group_id.as_ref()) + .await?; + + let swaps = self.storage.unclaimed_swaps().await.map_err(|e| { + tonic::Status::unavailable(format!("error fetching unclaimed swaps: {e}")) + })?; + + let stream = try_stream! { + for swap in swaps { + yield pb::UnclaimedSwapsResponse{ + swap: Some(swap.into()), + } + } + }; + + Ok(tonic::Response::new( + stream + .map_err(|e: anyhow::Error| { + tonic::Status::unavailable(format!("error getting unclaimed swaps: {e}")) + }) + .boxed(), + )) + } } diff --git a/crates/view/src/storage.rs b/crates/view/src/storage.rs index d12f860243..d1ec4eca7a 100644 --- a/crates/view/src/storage.rs +++ b/crates/view/src/storage.rs @@ -429,6 +429,24 @@ impl Storage { } } + /// Query for all unclaimed swaps. + pub async fn unclaimed_swaps(&self) -> anyhow::Result> { + let pool = self.pool.clone(); + + let records = spawn_blocking(move || { + // Check if we already have the swap record + pool.get()? + .prepare(&format!( + "SELECT * FROM swaps WHERE swaps.height_claimed is NULL" + ))? + .query_and_then((), |record| record.try_into())? + .collect::>>() + }) + .await??; + + Ok(records) + } + /// Query for a nullifier's status, optionally waiting until the nullifier is detected. pub async fn nullifier_status( &self, @@ -1161,7 +1179,7 @@ impl Storage { spawn_blocking(move || { pool.get()? .prepare(&format!( - "SELECT nullifier FROM spendable_notes WHERE nullifier IN ({})", + "SELECT nullifier FROM (SELECT nullifier FROM spendable_notes UNION SELECT nullifier FROM swaps) WHERE nullifier IN ({})", nullifiers .iter() .map(|x| format!("x'{}'", hex::encode(x.0.to_bytes()))) @@ -1314,7 +1332,8 @@ impl Storage { .transpose()?; // Check denom type - let spent_denom: String = dbtx.prepare_cached( + let spent_denom: String + = dbtx.prepare_cached( "SELECT assets.denom FROM spendable_notes JOIN notes LEFT JOIN assets ON notes.asset_id == assets.asset_id WHERE nullifier = ?1" @@ -1325,7 +1344,7 @@ impl Storage { )? .next() .transpose()? - .ok_or_else(|| anyhow!("denom must exist for note we know about"))?; + .unwrap_or("unknown".to_string()); // Mark spent notes as spent if let Some(spent_commitment) = spent_commitment { diff --git a/crates/wallet/Cargo.toml b/crates/wallet/Cargo.toml index c900911c84..548570e65d 100644 --- a/crates/wallet/Cargo.toml +++ b/crates/wallet/Cargo.toml @@ -19,6 +19,7 @@ penumbra-num = { path = "../core/num" } penumbra-asset = { path = "../core/asset" } penumbra-keys = { path = "../core/keys" } penumbra-chain = { path = "../core/component/chain" } +penumbra-dex = { path = "../core/component/dex" } penumbra-transaction = { path = "../core/transaction" } penumbra-app = { path = "../core/app" } penumbra-stake = { path = "../core/component/stake" } @@ -29,8 +30,10 @@ penumbra-custody = { path = "../custody" } # External dependencies bytes = "1" bincode = "1.3.3" -tokio = { version = "1.21.1", features = ["full"]} -tower = { version = "0.4", features = ["full"]} +ark-std = { version = "0.4", default_features = false } +decaf377 = { version = "0.5" } +tokio = { version = "1.21.1", features = ["full"] } +tower = { version = "0.4", features = ["full"] } tonic = "0.8.1" tracing = "0.1" pin-project = "1" diff --git a/crates/wallet/src/plan.rs b/crates/wallet/src/plan.rs index 16bd79f56a..b6f54ffc5e 100644 --- a/crates/wallet/src/plan.rs +++ b/crates/wallet/src/plan.rs @@ -1,18 +1,21 @@ +use penumbra_dex::swap_claim::SwapClaimPlan; +use penumbra_proto::{ + client::v1alpha1::specific_query_service_client::SpecificQueryServiceClient, + view::v1alpha1::NotesRequest, +}; use std::collections::BTreeMap; use tonic::transport::Channel; use anyhow::{Context, Result}; +use ark_std::UniformRand; +use decaf377::Fq; use penumbra_asset::Value; use penumbra_fee::Fee; use penumbra_keys::{ keys::{AccountGroupId, AddressIndex}, - Address, FullViewingKey, + Address, }; use penumbra_num::Amount; -use penumbra_proto::{ - client::v1alpha1::specific_query_service_client::SpecificQueryServiceClient, - view::v1alpha1::NotesRequest, -}; use penumbra_stake::rate::RateData; use penumbra_stake::validator; use penumbra_transaction::{ @@ -150,8 +153,7 @@ where let mut plans = Vec::new(); // First, find any un-claimed swaps and add `SwapClaim` plans for them. - // TODO: re-enable - //plans.extend(claim_unclaimed_swaps(fvk, view, &mut rng, specific_client).await?); + plans.extend(claim_unclaimed_swaps(view, &mut rng).await?); // Finally, sweep dust notes by spending them to their owner's address. // This will consolidate small-value notes into larger ones. @@ -160,18 +162,15 @@ where Ok(plans) } -//#[instrument(skip(_fvk, _view, _rng))] +#[instrument(skip(view, rng))] pub async fn claim_unclaimed_swaps( - _fvk: &FullViewingKey, - _view: &mut V, - mut _rng: R, - mut _specific_client: SpecificQueryServiceClient, + view: &mut V, + mut rng: R, ) -> anyhow::Result> where V: ViewClient, R: RngCore + CryptoRng, { - /* let mut plans = Vec::new(); // fetch all transactions // check if they contain Swap actions @@ -181,74 +180,35 @@ where let chain_params = view.chain_params().await?; let epoch_duration = chain_params.clone().epoch_duration; - // Unclaimed swaps will appear as Swap NFT notes. - // We can find unclaimed swaps by first searching for all transactions containing a swap, - // then finding all unspent notes associated with a swap transaction. - let txs = view.transactions(None, None).await?; + let unclaimed_swaps = view.unclaimed_swaps().await?; - // TODO: should we do some tokio magic to make this concurrent? - // Fetch all spendable notes ahead of time so we can see which swap NFTs are unspent. - let all_notes = view - .notes(NotesRequest { - account_group_id: Some(fvk.hash().into()), + for swap in unclaimed_swaps { + // We found an unspent swap NFT, so we can claim it. + let swap_plaintext = swap.swap; + + let output_data = swap.output_data; + + let mut plan = TransactionPlan { + chain_id: chain_params.clone().chain_id, + fee: swap_plaintext.claim_fee.clone(), + // The transaction doesn't need a memo, because it's to ourselves. + memo_plan: None, ..Default::default() - }) - .await?; - for (block_height, tx) in txs.iter() { - for swap in tx.swaps() { - // See if the swap is unspent. - let swap_nft = swap.body.swap_nft.clone(); - let swap_nft_record = all_notes - .iter() - .find(|note_record| note_record.note_commitment == swap_nft.note_commitment) - .cloned(); - - if let Some(swap_nft_record) = swap_nft_record { - assert!(*block_height == swap_nft_record.height_created); - // We found an unspent swap NFT, so we can claim it. - // Decrypt the swap ciphertext and construct a SwapClaim. - let swap_ciphertext = swap.body.swap_ciphertext.clone(); - let epk = swap.body.swap_nft.ephemeral_key; - let ivk = fvk.incoming(); - let swap_plaintext = swap_ciphertext.decrypt2(ivk, &epk)?; - - let output_data = specific_client - .batch_swap_output_data(BatchSwapOutputDataRequest { - height: swap_nft_record.height_created, - trading_pair: Some(swap_plaintext.trading_pair.into()), - }) - .await? - .into_inner() - .data - .ok_or_else(|| anyhow::anyhow!("empty BatchSwapOutputResponse message"))? - .try_into() - .context("cannot parse batch swap output data")?; - - let mut plan = TransactionPlan { - chain_id: chain_params.clone().chain_id, - fee: swap_plaintext.claim_fee.clone(), - // The transaction doesn't need a memo, because it's to ourselves. - memo_plan: None, - ..Default::default() - }; - let action_plan = SwapClaimPlan::new( - &mut rng, - swap_plaintext, - swap_nft_record.note, - swap_nft_record.position, - epoch_duration, - output_data, - ) - .into(); - plan.actions.push(action_plan); - plans.push(plan); - } - } + }; + + let action_plan = SwapClaimPlan { + swap_plaintext, + position: swap.position, + output_data, + epoch_duration, + proof_blinding_r: Fq::rand(&mut rng), + proof_blinding_s: Fq::rand(&mut rng), + }; + plan.actions.push(action_plan.into()); + plans.push(plan); } Ok(plans) - */ - unimplemented!("This function has not been implemented since we changed the swap mechanism to auto-claim in scanning.") } #[instrument(skip(account_group_id, view, rng))] diff --git a/proto/go/gen/penumbra/view/v1alpha1/view.pb.go b/proto/go/gen/penumbra/view/v1alpha1/view.pb.go index 1b2abe8dd5..96dee9429d 100644 --- a/proto/go/gen/penumbra/view/v1alpha1/view.pb.go +++ b/proto/go/gen/penumbra/view/v1alpha1/view.pb.go @@ -2127,6 +2127,101 @@ func (x *SwapByCommitmentResponse) GetSwap() *SwapRecord { return nil } +type UnclaimedSwapsRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // Identifies the account group to query. + AccountGroupId *v1alpha11.AccountGroupId `protobuf:"bytes,1,opt,name=account_group_id,json=accountGroupId,proto3" json:"account_group_id,omitempty"` +} + +func (x *UnclaimedSwapsRequest) Reset() { + *x = UnclaimedSwapsRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_penumbra_view_v1alpha1_view_proto_msgTypes[37] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *UnclaimedSwapsRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*UnclaimedSwapsRequest) ProtoMessage() {} + +func (x *UnclaimedSwapsRequest) ProtoReflect() protoreflect.Message { + mi := &file_penumbra_view_v1alpha1_view_proto_msgTypes[37] + 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 UnclaimedSwapsRequest.ProtoReflect.Descriptor instead. +func (*UnclaimedSwapsRequest) Descriptor() ([]byte, []int) { + return file_penumbra_view_v1alpha1_view_proto_rawDescGZIP(), []int{37} +} + +func (x *UnclaimedSwapsRequest) GetAccountGroupId() *v1alpha11.AccountGroupId { + if x != nil { + return x.AccountGroupId + } + return nil +} + +type UnclaimedSwapsResponse struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Swap *SwapRecord `protobuf:"bytes,1,opt,name=swap,proto3" json:"swap,omitempty"` +} + +func (x *UnclaimedSwapsResponse) Reset() { + *x = UnclaimedSwapsResponse{} + if protoimpl.UnsafeEnabled { + mi := &file_penumbra_view_v1alpha1_view_proto_msgTypes[38] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *UnclaimedSwapsResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*UnclaimedSwapsResponse) ProtoMessage() {} + +func (x *UnclaimedSwapsResponse) ProtoReflect() protoreflect.Message { + mi := &file_penumbra_view_v1alpha1_view_proto_msgTypes[38] + 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 UnclaimedSwapsResponse.ProtoReflect.Descriptor instead. +func (*UnclaimedSwapsResponse) Descriptor() ([]byte, []int) { + return file_penumbra_view_v1alpha1_view_proto_rawDescGZIP(), []int{38} +} + +func (x *UnclaimedSwapsResponse) GetSwap() *SwapRecord { + if x != nil { + return x.Swap + } + return nil +} + type NullifierStatusRequest struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache @@ -2141,7 +2236,7 @@ type NullifierStatusRequest struct { func (x *NullifierStatusRequest) Reset() { *x = NullifierStatusRequest{} if protoimpl.UnsafeEnabled { - mi := &file_penumbra_view_v1alpha1_view_proto_msgTypes[37] + mi := &file_penumbra_view_v1alpha1_view_proto_msgTypes[39] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2154,7 +2249,7 @@ func (x *NullifierStatusRequest) String() string { func (*NullifierStatusRequest) ProtoMessage() {} func (x *NullifierStatusRequest) ProtoReflect() protoreflect.Message { - mi := &file_penumbra_view_v1alpha1_view_proto_msgTypes[37] + mi := &file_penumbra_view_v1alpha1_view_proto_msgTypes[39] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2167,7 +2262,7 @@ func (x *NullifierStatusRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use NullifierStatusRequest.ProtoReflect.Descriptor instead. func (*NullifierStatusRequest) Descriptor() ([]byte, []int) { - return file_penumbra_view_v1alpha1_view_proto_rawDescGZIP(), []int{37} + return file_penumbra_view_v1alpha1_view_proto_rawDescGZIP(), []int{39} } func (x *NullifierStatusRequest) GetNullifier() *v1alpha11.Nullifier { @@ -2202,7 +2297,7 @@ type NullifierStatusResponse struct { func (x *NullifierStatusResponse) Reset() { *x = NullifierStatusResponse{} if protoimpl.UnsafeEnabled { - mi := &file_penumbra_view_v1alpha1_view_proto_msgTypes[38] + mi := &file_penumbra_view_v1alpha1_view_proto_msgTypes[40] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2215,7 +2310,7 @@ func (x *NullifierStatusResponse) String() string { func (*NullifierStatusResponse) ProtoMessage() {} func (x *NullifierStatusResponse) ProtoReflect() protoreflect.Message { - mi := &file_penumbra_view_v1alpha1_view_proto_msgTypes[38] + mi := &file_penumbra_view_v1alpha1_view_proto_msgTypes[40] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2228,7 +2323,7 @@ func (x *NullifierStatusResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use NullifierStatusResponse.ProtoReflect.Descriptor instead. func (*NullifierStatusResponse) Descriptor() ([]byte, []int) { - return file_penumbra_view_v1alpha1_view_proto_rawDescGZIP(), []int{38} + return file_penumbra_view_v1alpha1_view_proto_rawDescGZIP(), []int{40} } func (x *NullifierStatusResponse) GetSpent() bool { @@ -2250,7 +2345,7 @@ type TransactionInfoByHashRequest struct { func (x *TransactionInfoByHashRequest) Reset() { *x = TransactionInfoByHashRequest{} if protoimpl.UnsafeEnabled { - mi := &file_penumbra_view_v1alpha1_view_proto_msgTypes[39] + mi := &file_penumbra_view_v1alpha1_view_proto_msgTypes[41] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2263,7 +2358,7 @@ func (x *TransactionInfoByHashRequest) String() string { func (*TransactionInfoByHashRequest) ProtoMessage() {} func (x *TransactionInfoByHashRequest) ProtoReflect() protoreflect.Message { - mi := &file_penumbra_view_v1alpha1_view_proto_msgTypes[39] + mi := &file_penumbra_view_v1alpha1_view_proto_msgTypes[41] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2276,7 +2371,7 @@ func (x *TransactionInfoByHashRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use TransactionInfoByHashRequest.ProtoReflect.Descriptor instead. func (*TransactionInfoByHashRequest) Descriptor() ([]byte, []int) { - return file_penumbra_view_v1alpha1_view_proto_rawDescGZIP(), []int{39} + return file_penumbra_view_v1alpha1_view_proto_rawDescGZIP(), []int{41} } func (x *TransactionInfoByHashRequest) GetId() *v1alpha1.Id { @@ -2300,7 +2395,7 @@ type TransactionInfoRequest struct { func (x *TransactionInfoRequest) Reset() { *x = TransactionInfoRequest{} if protoimpl.UnsafeEnabled { - mi := &file_penumbra_view_v1alpha1_view_proto_msgTypes[40] + mi := &file_penumbra_view_v1alpha1_view_proto_msgTypes[42] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2313,7 +2408,7 @@ func (x *TransactionInfoRequest) String() string { func (*TransactionInfoRequest) ProtoMessage() {} func (x *TransactionInfoRequest) ProtoReflect() protoreflect.Message { - mi := &file_penumbra_view_v1alpha1_view_proto_msgTypes[40] + mi := &file_penumbra_view_v1alpha1_view_proto_msgTypes[42] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2326,7 +2421,7 @@ func (x *TransactionInfoRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use TransactionInfoRequest.ProtoReflect.Descriptor instead. func (*TransactionInfoRequest) Descriptor() ([]byte, []int) { - return file_penumbra_view_v1alpha1_view_proto_rawDescGZIP(), []int{40} + return file_penumbra_view_v1alpha1_view_proto_rawDescGZIP(), []int{42} } func (x *TransactionInfoRequest) GetStartHeight() uint64 { @@ -2363,7 +2458,7 @@ type TransactionInfo struct { func (x *TransactionInfo) Reset() { *x = TransactionInfo{} if protoimpl.UnsafeEnabled { - mi := &file_penumbra_view_v1alpha1_view_proto_msgTypes[41] + mi := &file_penumbra_view_v1alpha1_view_proto_msgTypes[43] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2376,7 +2471,7 @@ func (x *TransactionInfo) String() string { func (*TransactionInfo) ProtoMessage() {} func (x *TransactionInfo) ProtoReflect() protoreflect.Message { - mi := &file_penumbra_view_v1alpha1_view_proto_msgTypes[41] + mi := &file_penumbra_view_v1alpha1_view_proto_msgTypes[43] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2389,7 +2484,7 @@ func (x *TransactionInfo) ProtoReflect() protoreflect.Message { // Deprecated: Use TransactionInfo.ProtoReflect.Descriptor instead. func (*TransactionInfo) Descriptor() ([]byte, []int) { - return file_penumbra_view_v1alpha1_view_proto_rawDescGZIP(), []int{41} + return file_penumbra_view_v1alpha1_view_proto_rawDescGZIP(), []int{43} } func (x *TransactionInfo) GetHeight() uint64 { @@ -2438,7 +2533,7 @@ type TransactionInfoResponse struct { func (x *TransactionInfoResponse) Reset() { *x = TransactionInfoResponse{} if protoimpl.UnsafeEnabled { - mi := &file_penumbra_view_v1alpha1_view_proto_msgTypes[42] + mi := &file_penumbra_view_v1alpha1_view_proto_msgTypes[44] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2451,7 +2546,7 @@ func (x *TransactionInfoResponse) String() string { func (*TransactionInfoResponse) ProtoMessage() {} func (x *TransactionInfoResponse) ProtoReflect() protoreflect.Message { - mi := &file_penumbra_view_v1alpha1_view_proto_msgTypes[42] + mi := &file_penumbra_view_v1alpha1_view_proto_msgTypes[44] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2464,7 +2559,7 @@ func (x *TransactionInfoResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use TransactionInfoResponse.ProtoReflect.Descriptor instead. func (*TransactionInfoResponse) Descriptor() ([]byte, []int) { - return file_penumbra_view_v1alpha1_view_proto_rawDescGZIP(), []int{42} + return file_penumbra_view_v1alpha1_view_proto_rawDescGZIP(), []int{44} } func (x *TransactionInfoResponse) GetTxInfo() *TransactionInfo { @@ -2485,7 +2580,7 @@ type TransactionInfoByHashResponse struct { func (x *TransactionInfoByHashResponse) Reset() { *x = TransactionInfoByHashResponse{} if protoimpl.UnsafeEnabled { - mi := &file_penumbra_view_v1alpha1_view_proto_msgTypes[43] + mi := &file_penumbra_view_v1alpha1_view_proto_msgTypes[45] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2498,7 +2593,7 @@ func (x *TransactionInfoByHashResponse) String() string { func (*TransactionInfoByHashResponse) ProtoMessage() {} func (x *TransactionInfoByHashResponse) ProtoReflect() protoreflect.Message { - mi := &file_penumbra_view_v1alpha1_view_proto_msgTypes[43] + mi := &file_penumbra_view_v1alpha1_view_proto_msgTypes[45] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2511,7 +2606,7 @@ func (x *TransactionInfoByHashResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use TransactionInfoByHashResponse.ProtoReflect.Descriptor instead. func (*TransactionInfoByHashResponse) Descriptor() ([]byte, []int) { - return file_penumbra_view_v1alpha1_view_proto_rawDescGZIP(), []int{43} + return file_penumbra_view_v1alpha1_view_proto_rawDescGZIP(), []int{45} } func (x *TransactionInfoByHashResponse) GetTxInfo() *TransactionInfo { @@ -2532,7 +2627,7 @@ type NotesResponse struct { func (x *NotesResponse) Reset() { *x = NotesResponse{} if protoimpl.UnsafeEnabled { - mi := &file_penumbra_view_v1alpha1_view_proto_msgTypes[44] + mi := &file_penumbra_view_v1alpha1_view_proto_msgTypes[46] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2545,7 +2640,7 @@ func (x *NotesResponse) String() string { func (*NotesResponse) ProtoMessage() {} func (x *NotesResponse) ProtoReflect() protoreflect.Message { - mi := &file_penumbra_view_v1alpha1_view_proto_msgTypes[44] + mi := &file_penumbra_view_v1alpha1_view_proto_msgTypes[46] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2558,7 +2653,7 @@ func (x *NotesResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use NotesResponse.ProtoReflect.Descriptor instead. func (*NotesResponse) Descriptor() ([]byte, []int) { - return file_penumbra_view_v1alpha1_view_proto_rawDescGZIP(), []int{44} + return file_penumbra_view_v1alpha1_view_proto_rawDescGZIP(), []int{46} } func (x *NotesResponse) GetNoteRecord() *SpendableNoteRecord { @@ -2580,7 +2675,7 @@ type NotesForVotingResponse struct { func (x *NotesForVotingResponse) Reset() { *x = NotesForVotingResponse{} if protoimpl.UnsafeEnabled { - mi := &file_penumbra_view_v1alpha1_view_proto_msgTypes[45] + mi := &file_penumbra_view_v1alpha1_view_proto_msgTypes[47] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2593,7 +2688,7 @@ func (x *NotesForVotingResponse) String() string { func (*NotesForVotingResponse) ProtoMessage() {} func (x *NotesForVotingResponse) ProtoReflect() protoreflect.Message { - mi := &file_penumbra_view_v1alpha1_view_proto_msgTypes[45] + mi := &file_penumbra_view_v1alpha1_view_proto_msgTypes[47] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2606,7 +2701,7 @@ func (x *NotesForVotingResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use NotesForVotingResponse.ProtoReflect.Descriptor instead. func (*NotesForVotingResponse) Descriptor() ([]byte, []int) { - return file_penumbra_view_v1alpha1_view_proto_rawDescGZIP(), []int{45} + return file_penumbra_view_v1alpha1_view_proto_rawDescGZIP(), []int{47} } func (x *NotesForVotingResponse) GetNoteRecord() *SpendableNoteRecord { @@ -2650,7 +2745,7 @@ type SpendableNoteRecord struct { func (x *SpendableNoteRecord) Reset() { *x = SpendableNoteRecord{} if protoimpl.UnsafeEnabled { - mi := &file_penumbra_view_v1alpha1_view_proto_msgTypes[46] + mi := &file_penumbra_view_v1alpha1_view_proto_msgTypes[48] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2663,7 +2758,7 @@ func (x *SpendableNoteRecord) String() string { func (*SpendableNoteRecord) ProtoMessage() {} func (x *SpendableNoteRecord) ProtoReflect() protoreflect.Message { - mi := &file_penumbra_view_v1alpha1_view_proto_msgTypes[46] + mi := &file_penumbra_view_v1alpha1_view_proto_msgTypes[48] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2676,7 +2771,7 @@ func (x *SpendableNoteRecord) ProtoReflect() protoreflect.Message { // Deprecated: Use SpendableNoteRecord.ProtoReflect.Descriptor instead. func (*SpendableNoteRecord) Descriptor() ([]byte, []int) { - return file_penumbra_view_v1alpha1_view_proto_rawDescGZIP(), []int{46} + return file_penumbra_view_v1alpha1_view_proto_rawDescGZIP(), []int{48} } func (x *SpendableNoteRecord) GetNoteCommitment() *v1alpha11.StateCommitment { @@ -2752,7 +2847,7 @@ type SwapRecord struct { func (x *SwapRecord) Reset() { *x = SwapRecord{} if protoimpl.UnsafeEnabled { - mi := &file_penumbra_view_v1alpha1_view_proto_msgTypes[47] + mi := &file_penumbra_view_v1alpha1_view_proto_msgTypes[49] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2765,7 +2860,7 @@ func (x *SwapRecord) String() string { func (*SwapRecord) ProtoMessage() {} func (x *SwapRecord) ProtoReflect() protoreflect.Message { - mi := &file_penumbra_view_v1alpha1_view_proto_msgTypes[47] + mi := &file_penumbra_view_v1alpha1_view_proto_msgTypes[49] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2778,7 +2873,7 @@ func (x *SwapRecord) ProtoReflect() protoreflect.Message { // Deprecated: Use SwapRecord.ProtoReflect.Descriptor instead. func (*SwapRecord) Descriptor() ([]byte, []int) { - return file_penumbra_view_v1alpha1_view_proto_rawDescGZIP(), []int{47} + return file_penumbra_view_v1alpha1_view_proto_rawDescGZIP(), []int{49} } func (x *SwapRecord) GetSwapCommitment() *v1alpha11.StateCommitment { @@ -2844,7 +2939,7 @@ type OwnedPositionIdsRequest struct { func (x *OwnedPositionIdsRequest) Reset() { *x = OwnedPositionIdsRequest{} if protoimpl.UnsafeEnabled { - mi := &file_penumbra_view_v1alpha1_view_proto_msgTypes[48] + mi := &file_penumbra_view_v1alpha1_view_proto_msgTypes[50] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2857,7 +2952,7 @@ func (x *OwnedPositionIdsRequest) String() string { func (*OwnedPositionIdsRequest) ProtoMessage() {} func (x *OwnedPositionIdsRequest) ProtoReflect() protoreflect.Message { - mi := &file_penumbra_view_v1alpha1_view_proto_msgTypes[48] + mi := &file_penumbra_view_v1alpha1_view_proto_msgTypes[50] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2870,7 +2965,7 @@ func (x *OwnedPositionIdsRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use OwnedPositionIdsRequest.ProtoReflect.Descriptor instead. func (*OwnedPositionIdsRequest) Descriptor() ([]byte, []int) { - return file_penumbra_view_v1alpha1_view_proto_rawDescGZIP(), []int{48} + return file_penumbra_view_v1alpha1_view_proto_rawDescGZIP(), []int{50} } func (x *OwnedPositionIdsRequest) GetPositionState() *v1alpha14.PositionState { @@ -2898,7 +2993,7 @@ type OwnedPositionIdsResponse struct { func (x *OwnedPositionIdsResponse) Reset() { *x = OwnedPositionIdsResponse{} if protoimpl.UnsafeEnabled { - mi := &file_penumbra_view_v1alpha1_view_proto_msgTypes[49] + mi := &file_penumbra_view_v1alpha1_view_proto_msgTypes[51] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2911,7 +3006,7 @@ func (x *OwnedPositionIdsResponse) String() string { func (*OwnedPositionIdsResponse) ProtoMessage() {} func (x *OwnedPositionIdsResponse) ProtoReflect() protoreflect.Message { - mi := &file_penumbra_view_v1alpha1_view_proto_msgTypes[49] + mi := &file_penumbra_view_v1alpha1_view_proto_msgTypes[51] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2924,7 +3019,7 @@ func (x *OwnedPositionIdsResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use OwnedPositionIdsResponse.ProtoReflect.Descriptor instead. func (*OwnedPositionIdsResponse) Descriptor() ([]byte, []int) { - return file_penumbra_view_v1alpha1_view_proto_rawDescGZIP(), []int{49} + return file_penumbra_view_v1alpha1_view_proto_rawDescGZIP(), []int{51} } func (x *OwnedPositionIdsResponse) GetPositionId() *v1alpha14.PositionId { @@ -2949,7 +3044,7 @@ type TransactionPlannerRequest_Output struct { func (x *TransactionPlannerRequest_Output) Reset() { *x = TransactionPlannerRequest_Output{} if protoimpl.UnsafeEnabled { - mi := &file_penumbra_view_v1alpha1_view_proto_msgTypes[50] + mi := &file_penumbra_view_v1alpha1_view_proto_msgTypes[52] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2962,7 +3057,7 @@ func (x *TransactionPlannerRequest_Output) String() string { func (*TransactionPlannerRequest_Output) ProtoMessage() {} func (x *TransactionPlannerRequest_Output) ProtoReflect() protoreflect.Message { - mi := &file_penumbra_view_v1alpha1_view_proto_msgTypes[50] + mi := &file_penumbra_view_v1alpha1_view_proto_msgTypes[52] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3010,7 +3105,7 @@ type TransactionPlannerRequest_Swap struct { func (x *TransactionPlannerRequest_Swap) Reset() { *x = TransactionPlannerRequest_Swap{} if protoimpl.UnsafeEnabled { - mi := &file_penumbra_view_v1alpha1_view_proto_msgTypes[51] + mi := &file_penumbra_view_v1alpha1_view_proto_msgTypes[53] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3023,7 +3118,7 @@ func (x *TransactionPlannerRequest_Swap) String() string { func (*TransactionPlannerRequest_Swap) ProtoMessage() {} func (x *TransactionPlannerRequest_Swap) ProtoReflect() protoreflect.Message { - mi := &file_penumbra_view_v1alpha1_view_proto_msgTypes[51] + mi := &file_penumbra_view_v1alpha1_view_proto_msgTypes[53] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3081,7 +3176,7 @@ type TransactionPlannerRequest_SwapClaim struct { func (x *TransactionPlannerRequest_SwapClaim) Reset() { *x = TransactionPlannerRequest_SwapClaim{} if protoimpl.UnsafeEnabled { - mi := &file_penumbra_view_v1alpha1_view_proto_msgTypes[52] + mi := &file_penumbra_view_v1alpha1_view_proto_msgTypes[54] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3094,7 +3189,7 @@ func (x *TransactionPlannerRequest_SwapClaim) String() string { func (*TransactionPlannerRequest_SwapClaim) ProtoMessage() {} func (x *TransactionPlannerRequest_SwapClaim) ProtoReflect() protoreflect.Message { - mi := &file_penumbra_view_v1alpha1_view_proto_msgTypes[52] + mi := &file_penumbra_view_v1alpha1_view_proto_msgTypes[54] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3129,7 +3224,7 @@ type TransactionPlannerRequest_Delegate struct { func (x *TransactionPlannerRequest_Delegate) Reset() { *x = TransactionPlannerRequest_Delegate{} if protoimpl.UnsafeEnabled { - mi := &file_penumbra_view_v1alpha1_view_proto_msgTypes[53] + mi := &file_penumbra_view_v1alpha1_view_proto_msgTypes[55] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3142,7 +3237,7 @@ func (x *TransactionPlannerRequest_Delegate) String() string { func (*TransactionPlannerRequest_Delegate) ProtoMessage() {} func (x *TransactionPlannerRequest_Delegate) ProtoReflect() protoreflect.Message { - mi := &file_penumbra_view_v1alpha1_view_proto_msgTypes[53] + mi := &file_penumbra_view_v1alpha1_view_proto_msgTypes[55] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3184,7 +3279,7 @@ type TransactionPlannerRequest_Undelegate struct { func (x *TransactionPlannerRequest_Undelegate) Reset() { *x = TransactionPlannerRequest_Undelegate{} if protoimpl.UnsafeEnabled { - mi := &file_penumbra_view_v1alpha1_view_proto_msgTypes[54] + mi := &file_penumbra_view_v1alpha1_view_proto_msgTypes[56] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3197,7 +3292,7 @@ func (x *TransactionPlannerRequest_Undelegate) String() string { func (*TransactionPlannerRequest_Undelegate) ProtoMessage() {} func (x *TransactionPlannerRequest_Undelegate) ProtoReflect() protoreflect.Message { - mi := &file_penumbra_view_v1alpha1_view_proto_msgTypes[54] + mi := &file_penumbra_view_v1alpha1_view_proto_msgTypes[56] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3242,7 +3337,7 @@ type TransactionPlannerRequest_PositionOpen struct { func (x *TransactionPlannerRequest_PositionOpen) Reset() { *x = TransactionPlannerRequest_PositionOpen{} if protoimpl.UnsafeEnabled { - mi := &file_penumbra_view_v1alpha1_view_proto_msgTypes[55] + mi := &file_penumbra_view_v1alpha1_view_proto_msgTypes[57] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3255,7 +3350,7 @@ func (x *TransactionPlannerRequest_PositionOpen) String() string { func (*TransactionPlannerRequest_PositionOpen) ProtoMessage() {} func (x *TransactionPlannerRequest_PositionOpen) ProtoReflect() protoreflect.Message { - mi := &file_penumbra_view_v1alpha1_view_proto_msgTypes[55] + mi := &file_penumbra_view_v1alpha1_view_proto_msgTypes[57] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3290,7 +3385,7 @@ type TransactionPlannerRequest_PositionClose struct { func (x *TransactionPlannerRequest_PositionClose) Reset() { *x = TransactionPlannerRequest_PositionClose{} if protoimpl.UnsafeEnabled { - mi := &file_penumbra_view_v1alpha1_view_proto_msgTypes[56] + mi := &file_penumbra_view_v1alpha1_view_proto_msgTypes[58] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3303,7 +3398,7 @@ func (x *TransactionPlannerRequest_PositionClose) String() string { func (*TransactionPlannerRequest_PositionClose) ProtoMessage() {} func (x *TransactionPlannerRequest_PositionClose) ProtoReflect() protoreflect.Message { - mi := &file_penumbra_view_v1alpha1_view_proto_msgTypes[56] + mi := &file_penumbra_view_v1alpha1_view_proto_msgTypes[58] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3342,7 +3437,7 @@ type TransactionPlannerRequest_PositionWithdraw struct { func (x *TransactionPlannerRequest_PositionWithdraw) Reset() { *x = TransactionPlannerRequest_PositionWithdraw{} if protoimpl.UnsafeEnabled { - mi := &file_penumbra_view_v1alpha1_view_proto_msgTypes[57] + mi := &file_penumbra_view_v1alpha1_view_proto_msgTypes[59] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3355,7 +3450,7 @@ func (x *TransactionPlannerRequest_PositionWithdraw) String() string { func (*TransactionPlannerRequest_PositionWithdraw) ProtoMessage() {} func (x *TransactionPlannerRequest_PositionWithdraw) ProtoReflect() protoreflect.Message { - mi := &file_penumbra_view_v1alpha1_view_proto_msgTypes[57] + mi := &file_penumbra_view_v1alpha1_view_proto_msgTypes[59] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3886,343 +3981,362 @@ var file_penumbra_view_v1alpha1_view_proto_rawDesc = []byte{ 0x77, 0x61, 0x70, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x76, 0x69, 0x65, 0x77, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x53, 0x77, 0x61, 0x70, 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x52, 0x04, 0x73, - 0x77, 0x61, 0x70, 0x22, 0xe2, 0x01, 0x0a, 0x16, 0x4e, 0x75, 0x6c, 0x6c, 0x69, 0x66, 0x69, 0x65, - 0x72, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x46, - 0x0a, 0x09, 0x6e, 0x75, 0x6c, 0x6c, 0x69, 0x66, 0x69, 0x65, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x28, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, - 0x65, 0x2e, 0x63, 0x72, 0x79, 0x70, 0x74, 0x6f, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, - 0x31, 0x2e, 0x4e, 0x75, 0x6c, 0x6c, 0x69, 0x66, 0x69, 0x65, 0x72, 0x52, 0x09, 0x6e, 0x75, 0x6c, - 0x6c, 0x69, 0x66, 0x69, 0x65, 0x72, 0x12, 0x27, 0x0a, 0x0f, 0x61, 0x77, 0x61, 0x69, 0x74, 0x5f, - 0x64, 0x65, 0x74, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, - 0x0e, 0x61, 0x77, 0x61, 0x69, 0x74, 0x44, 0x65, 0x74, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, - 0x57, 0x0a, 0x10, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x5f, 0x67, 0x72, 0x6f, 0x75, 0x70, - 0x5f, 0x69, 0x64, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2d, 0x2e, 0x70, 0x65, 0x6e, 0x75, - 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x72, 0x79, 0x70, 0x74, 0x6f, - 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, - 0x74, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x49, 0x64, 0x52, 0x0e, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, - 0x74, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x49, 0x64, 0x22, 0x2f, 0x0a, 0x17, 0x4e, 0x75, 0x6c, 0x6c, - 0x69, 0x66, 0x69, 0x65, 0x72, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x73, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x73, 0x70, 0x65, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x08, 0x52, 0x05, 0x73, 0x70, 0x65, 0x6e, 0x74, 0x22, 0x56, 0x0a, 0x1c, 0x54, 0x72, 0x61, - 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x6e, 0x66, 0x6f, 0x42, 0x79, 0x48, 0x61, - 0x73, 0x68, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x36, 0x0a, 0x02, 0x69, 0x64, 0x18, - 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x26, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, - 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, - 0x6e, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x49, 0x64, 0x52, 0x02, 0x69, - 0x64, 0x22, 0x5a, 0x0a, 0x16, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, - 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x21, 0x0a, 0x0c, 0x73, - 0x74, 0x61, 0x72, 0x74, 0x5f, 0x68, 0x65, 0x69, 0x67, 0x68, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x04, 0x52, 0x0b, 0x73, 0x74, 0x61, 0x72, 0x74, 0x48, 0x65, 0x69, 0x67, 0x68, 0x74, 0x12, 0x1d, - 0x0a, 0x0a, 0x65, 0x6e, 0x64, 0x5f, 0x68, 0x65, 0x69, 0x67, 0x68, 0x74, 0x18, 0x02, 0x20, 0x01, - 0x28, 0x04, 0x52, 0x09, 0x65, 0x6e, 0x64, 0x48, 0x65, 0x69, 0x67, 0x68, 0x74, 0x22, 0xdb, 0x02, - 0x0a, 0x0f, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x6e, 0x66, - 0x6f, 0x12, 0x16, 0x0a, 0x06, 0x68, 0x65, 0x69, 0x67, 0x68, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x04, 0x52, 0x06, 0x68, 0x65, 0x69, 0x67, 0x68, 0x74, 0x12, 0x36, 0x0a, 0x02, 0x69, 0x64, 0x18, - 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x26, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, - 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, - 0x6e, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x49, 0x64, 0x52, 0x02, 0x69, - 0x64, 0x12, 0x51, 0x0a, 0x0b, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, - 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2f, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, - 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, - 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x54, 0x72, 0x61, 0x6e, - 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x0b, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, - 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x5c, 0x0a, 0x0b, 0x70, 0x65, 0x72, 0x73, 0x70, 0x65, 0x63, 0x74, - 0x69, 0x76, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x3a, 0x2e, 0x70, 0x65, 0x6e, 0x75, - 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, - 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x54, - 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x65, 0x72, 0x73, 0x70, 0x65, - 0x63, 0x74, 0x69, 0x76, 0x65, 0x52, 0x0b, 0x70, 0x65, 0x72, 0x73, 0x70, 0x65, 0x63, 0x74, 0x69, - 0x76, 0x65, 0x12, 0x47, 0x0a, 0x04, 0x76, 0x69, 0x65, 0x77, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x33, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, - 0x2e, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x61, - 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, - 0x6e, 0x56, 0x69, 0x65, 0x77, 0x52, 0x04, 0x76, 0x69, 0x65, 0x77, 0x22, 0x5b, 0x0a, 0x17, 0x54, - 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, - 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x40, 0x0a, 0x07, 0x74, 0x78, 0x5f, 0x69, 0x6e, 0x66, - 0x6f, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x27, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, - 0x72, 0x61, 0x2e, 0x76, 0x69, 0x65, 0x77, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, - 0x2e, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x6e, 0x66, 0x6f, - 0x52, 0x06, 0x74, 0x78, 0x49, 0x6e, 0x66, 0x6f, 0x22, 0x61, 0x0a, 0x1d, 0x54, 0x72, 0x61, 0x6e, - 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x6e, 0x66, 0x6f, 0x42, 0x79, 0x48, 0x61, 0x73, - 0x68, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x40, 0x0a, 0x07, 0x74, 0x78, 0x5f, - 0x69, 0x6e, 0x66, 0x6f, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x27, 0x2e, 0x70, 0x65, 0x6e, - 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x76, 0x69, 0x65, 0x77, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, - 0x68, 0x61, 0x31, 0x2e, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x49, - 0x6e, 0x66, 0x6f, 0x52, 0x06, 0x74, 0x78, 0x49, 0x6e, 0x66, 0x6f, 0x22, 0x5d, 0x0a, 0x0d, 0x4e, - 0x6f, 0x74, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x4c, 0x0a, 0x0b, - 0x6e, 0x6f, 0x74, 0x65, 0x5f, 0x72, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x2b, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x76, 0x69, 0x65, - 0x77, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x53, 0x70, 0x65, 0x6e, 0x64, - 0x61, 0x62, 0x6c, 0x65, 0x4e, 0x6f, 0x74, 0x65, 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x52, 0x0a, - 0x6e, 0x6f, 0x74, 0x65, 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x22, 0xb5, 0x01, 0x0a, 0x16, 0x4e, - 0x6f, 0x74, 0x65, 0x73, 0x46, 0x6f, 0x72, 0x56, 0x6f, 0x74, 0x69, 0x6e, 0x67, 0x52, 0x65, 0x73, - 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x4c, 0x0a, 0x0b, 0x6e, 0x6f, 0x74, 0x65, 0x5f, 0x72, 0x65, - 0x63, 0x6f, 0x72, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2b, 0x2e, 0x70, 0x65, 0x6e, - 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x76, 0x69, 0x65, 0x77, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, - 0x68, 0x61, 0x31, 0x2e, 0x53, 0x70, 0x65, 0x6e, 0x64, 0x61, 0x62, 0x6c, 0x65, 0x4e, 0x6f, 0x74, - 0x65, 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x52, 0x0a, 0x6e, 0x6f, 0x74, 0x65, 0x52, 0x65, 0x63, - 0x6f, 0x72, 0x64, 0x12, 0x4d, 0x0a, 0x0c, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x5f, - 0x6b, 0x65, 0x79, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2a, 0x2e, 0x70, 0x65, 0x6e, 0x75, - 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x72, 0x79, 0x70, 0x74, 0x6f, - 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, - 0x74, 0x79, 0x4b, 0x65, 0x79, 0x52, 0x0b, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x4b, - 0x65, 0x79, 0x22, 0xe9, 0x03, 0x0a, 0x13, 0x53, 0x70, 0x65, 0x6e, 0x64, 0x61, 0x62, 0x6c, 0x65, - 0x4e, 0x6f, 0x74, 0x65, 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x12, 0x57, 0x0a, 0x0f, 0x6e, 0x6f, - 0x74, 0x65, 0x5f, 0x63, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x6d, 0x65, 0x6e, 0x74, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x2e, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, - 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x72, 0x79, 0x70, 0x74, 0x6f, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, - 0x68, 0x61, 0x31, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x65, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x6d, - 0x65, 0x6e, 0x74, 0x52, 0x0e, 0x6e, 0x6f, 0x74, 0x65, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x6d, - 0x65, 0x6e, 0x74, 0x12, 0x37, 0x0a, 0x04, 0x6e, 0x6f, 0x74, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x23, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, - 0x65, 0x2e, 0x63, 0x72, 0x79, 0x70, 0x74, 0x6f, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, - 0x31, 0x2e, 0x4e, 0x6f, 0x74, 0x65, 0x52, 0x04, 0x6e, 0x6f, 0x74, 0x65, 0x12, 0x50, 0x0a, 0x0d, - 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x5f, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x18, 0x03, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x2b, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, - 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x72, 0x79, 0x70, 0x74, 0x6f, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, - 0x68, 0x61, 0x31, 0x2e, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x49, 0x6e, 0x64, 0x65, 0x78, - 0x52, 0x0c, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x12, 0x46, - 0x0a, 0x09, 0x6e, 0x75, 0x6c, 0x6c, 0x69, 0x66, 0x69, 0x65, 0x72, 0x18, 0x04, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x28, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, - 0x65, 0x2e, 0x63, 0x72, 0x79, 0x70, 0x74, 0x6f, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, - 0x31, 0x2e, 0x4e, 0x75, 0x6c, 0x6c, 0x69, 0x66, 0x69, 0x65, 0x72, 0x52, 0x09, 0x6e, 0x75, 0x6c, - 0x6c, 0x69, 0x66, 0x69, 0x65, 0x72, 0x12, 0x25, 0x0a, 0x0e, 0x68, 0x65, 0x69, 0x67, 0x68, 0x74, - 0x5f, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x18, 0x05, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0d, - 0x68, 0x65, 0x69, 0x67, 0x68, 0x74, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x12, 0x21, 0x0a, - 0x0c, 0x68, 0x65, 0x69, 0x67, 0x68, 0x74, 0x5f, 0x73, 0x70, 0x65, 0x6e, 0x74, 0x18, 0x06, 0x20, - 0x01, 0x28, 0x04, 0x52, 0x0b, 0x68, 0x65, 0x69, 0x67, 0x68, 0x74, 0x53, 0x70, 0x65, 0x6e, 0x74, - 0x12, 0x1a, 0x0a, 0x08, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x07, 0x20, 0x01, - 0x28, 0x04, 0x52, 0x08, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x40, 0x0a, 0x06, - 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x18, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x28, 0x2e, 0x70, - 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x68, 0x61, - 0x69, 0x6e, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x4e, 0x6f, 0x74, 0x65, - 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x52, 0x06, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x22, 0xc3, - 0x03, 0x0a, 0x0a, 0x53, 0x77, 0x61, 0x70, 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x12, 0x57, 0x0a, - 0x0f, 0x73, 0x77, 0x61, 0x70, 0x5f, 0x63, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x6d, 0x65, 0x6e, 0x74, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2e, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, + 0x77, 0x61, 0x70, 0x22, 0x70, 0x0a, 0x15, 0x55, 0x6e, 0x63, 0x6c, 0x61, 0x69, 0x6d, 0x65, 0x64, + 0x53, 0x77, 0x61, 0x70, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x57, 0x0a, 0x10, + 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x5f, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x5f, 0x69, 0x64, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2d, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x72, 0x79, 0x70, 0x74, 0x6f, 0x2e, 0x76, 0x31, - 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x65, 0x43, 0x6f, 0x6d, 0x6d, - 0x69, 0x74, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x0e, 0x73, 0x77, 0x61, 0x70, 0x43, 0x6f, 0x6d, 0x6d, - 0x69, 0x74, 0x6d, 0x65, 0x6e, 0x74, 0x12, 0x3d, 0x0a, 0x04, 0x73, 0x77, 0x61, 0x70, 0x18, 0x02, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x29, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, - 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x64, 0x65, 0x78, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, - 0x31, 0x2e, 0x53, 0x77, 0x61, 0x70, 0x50, 0x6c, 0x61, 0x69, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x52, - 0x04, 0x73, 0x77, 0x61, 0x70, 0x12, 0x1a, 0x0a, 0x08, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, - 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x04, 0x52, 0x08, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, - 0x6e, 0x12, 0x46, 0x0a, 0x09, 0x6e, 0x75, 0x6c, 0x6c, 0x69, 0x66, 0x69, 0x65, 0x72, 0x18, 0x04, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x28, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, - 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x72, 0x79, 0x70, 0x74, 0x6f, 0x2e, 0x76, 0x31, 0x61, 0x6c, - 0x70, 0x68, 0x61, 0x31, 0x2e, 0x4e, 0x75, 0x6c, 0x6c, 0x69, 0x66, 0x69, 0x65, 0x72, 0x52, 0x09, - 0x6e, 0x75, 0x6c, 0x6c, 0x69, 0x66, 0x69, 0x65, 0x72, 0x12, 0x50, 0x0a, 0x0b, 0x6f, 0x75, 0x74, - 0x70, 0x75, 0x74, 0x5f, 0x64, 0x61, 0x74, 0x61, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2f, - 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x64, - 0x65, 0x78, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x42, 0x61, 0x74, 0x63, - 0x68, 0x53, 0x77, 0x61, 0x70, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x44, 0x61, 0x74, 0x61, 0x52, - 0x0a, 0x6f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x44, 0x61, 0x74, 0x61, 0x12, 0x25, 0x0a, 0x0e, 0x68, - 0x65, 0x69, 0x67, 0x68, 0x74, 0x5f, 0x63, 0x6c, 0x61, 0x69, 0x6d, 0x65, 0x64, 0x18, 0x06, 0x20, - 0x01, 0x28, 0x04, 0x52, 0x0d, 0x68, 0x65, 0x69, 0x67, 0x68, 0x74, 0x43, 0x6c, 0x61, 0x69, 0x6d, - 0x65, 0x64, 0x12, 0x40, 0x0a, 0x06, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x18, 0x07, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x28, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, - 0x72, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, - 0x31, 0x2e, 0x4e, 0x6f, 0x74, 0x65, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x52, 0x06, 0x73, 0x6f, - 0x75, 0x72, 0x63, 0x65, 0x22, 0xb7, 0x01, 0x0a, 0x17, 0x4f, 0x77, 0x6e, 0x65, 0x64, 0x50, 0x6f, - 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x12, 0x50, 0x0a, 0x0e, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x73, 0x74, 0x61, - 0x74, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x29, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, - 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x64, 0x65, 0x78, 0x2e, 0x76, 0x31, 0x61, - 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x74, - 0x61, 0x74, 0x65, 0x52, 0x0d, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x74, 0x61, - 0x74, 0x65, 0x12, 0x4a, 0x0a, 0x0c, 0x74, 0x72, 0x61, 0x64, 0x69, 0x6e, 0x67, 0x5f, 0x70, 0x61, - 0x69, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x27, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, + 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x47, 0x72, + 0x6f, 0x75, 0x70, 0x49, 0x64, 0x52, 0x0e, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x47, 0x72, + 0x6f, 0x75, 0x70, 0x49, 0x64, 0x22, 0x50, 0x0a, 0x16, 0x55, 0x6e, 0x63, 0x6c, 0x61, 0x69, 0x6d, + 0x65, 0x64, 0x53, 0x77, 0x61, 0x70, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, + 0x36, 0x0a, 0x04, 0x73, 0x77, 0x61, 0x70, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x22, 0x2e, + 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x76, 0x69, 0x65, 0x77, 0x2e, 0x76, 0x31, + 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x53, 0x77, 0x61, 0x70, 0x52, 0x65, 0x63, 0x6f, 0x72, + 0x64, 0x52, 0x04, 0x73, 0x77, 0x61, 0x70, 0x22, 0xe2, 0x01, 0x0a, 0x16, 0x4e, 0x75, 0x6c, 0x6c, + 0x69, 0x66, 0x69, 0x65, 0x72, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, + 0x73, 0x74, 0x12, 0x46, 0x0a, 0x09, 0x6e, 0x75, 0x6c, 0x6c, 0x69, 0x66, 0x69, 0x65, 0x72, 0x18, + 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x28, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, + 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x72, 0x79, 0x70, 0x74, 0x6f, 0x2e, 0x76, 0x31, 0x61, + 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x4e, 0x75, 0x6c, 0x6c, 0x69, 0x66, 0x69, 0x65, 0x72, 0x52, + 0x09, 0x6e, 0x75, 0x6c, 0x6c, 0x69, 0x66, 0x69, 0x65, 0x72, 0x12, 0x27, 0x0a, 0x0f, 0x61, 0x77, + 0x61, 0x69, 0x74, 0x5f, 0x64, 0x65, 0x74, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x03, 0x20, + 0x01, 0x28, 0x08, 0x52, 0x0e, 0x61, 0x77, 0x61, 0x69, 0x74, 0x44, 0x65, 0x74, 0x65, 0x63, 0x74, + 0x69, 0x6f, 0x6e, 0x12, 0x57, 0x0a, 0x10, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x5f, 0x67, + 0x72, 0x6f, 0x75, 0x70, 0x5f, 0x69, 0x64, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2d, 0x2e, + 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x72, + 0x79, 0x70, 0x74, 0x6f, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x41, 0x63, + 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x49, 0x64, 0x52, 0x0e, 0x61, 0x63, + 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x49, 0x64, 0x22, 0x2f, 0x0a, 0x17, + 0x4e, 0x75, 0x6c, 0x6c, 0x69, 0x66, 0x69, 0x65, 0x72, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, + 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x73, 0x70, 0x65, 0x6e, 0x74, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x05, 0x73, 0x70, 0x65, 0x6e, 0x74, 0x22, 0x56, 0x0a, + 0x1c, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x6e, 0x66, 0x6f, + 0x42, 0x79, 0x48, 0x61, 0x73, 0x68, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x36, 0x0a, + 0x02, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x26, 0x2e, 0x70, 0x65, 0x6e, 0x75, + 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, + 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x49, + 0x64, 0x52, 0x02, 0x69, 0x64, 0x22, 0x5a, 0x0a, 0x16, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, + 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, + 0x21, 0x0a, 0x0c, 0x73, 0x74, 0x61, 0x72, 0x74, 0x5f, 0x68, 0x65, 0x69, 0x67, 0x68, 0x74, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0b, 0x73, 0x74, 0x61, 0x72, 0x74, 0x48, 0x65, 0x69, 0x67, + 0x68, 0x74, 0x12, 0x1d, 0x0a, 0x0a, 0x65, 0x6e, 0x64, 0x5f, 0x68, 0x65, 0x69, 0x67, 0x68, 0x74, + 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, 0x52, 0x09, 0x65, 0x6e, 0x64, 0x48, 0x65, 0x69, 0x67, 0x68, + 0x74, 0x22, 0xdb, 0x02, 0x0a, 0x0f, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, + 0x6e, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x16, 0x0a, 0x06, 0x68, 0x65, 0x69, 0x67, 0x68, 0x74, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x06, 0x68, 0x65, 0x69, 0x67, 0x68, 0x74, 0x12, 0x36, 0x0a, + 0x02, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x26, 0x2e, 0x70, 0x65, 0x6e, 0x75, + 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, + 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x49, + 0x64, 0x52, 0x02, 0x69, 0x64, 0x12, 0x51, 0x0a, 0x0b, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, + 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2f, 0x2e, 0x70, 0x65, 0x6e, + 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x74, 0x72, 0x61, 0x6e, 0x73, + 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, + 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x0b, 0x74, 0x72, 0x61, + 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x5c, 0x0a, 0x0b, 0x70, 0x65, 0x72, 0x73, + 0x70, 0x65, 0x63, 0x74, 0x69, 0x76, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x3a, 0x2e, + 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x74, 0x72, + 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, + 0x61, 0x31, 0x2e, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x65, + 0x72, 0x73, 0x70, 0x65, 0x63, 0x74, 0x69, 0x76, 0x65, 0x52, 0x0b, 0x70, 0x65, 0x72, 0x73, 0x70, + 0x65, 0x63, 0x74, 0x69, 0x76, 0x65, 0x12, 0x47, 0x0a, 0x04, 0x76, 0x69, 0x65, 0x77, 0x18, 0x05, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x33, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, + 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, + 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, + 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x56, 0x69, 0x65, 0x77, 0x52, 0x04, 0x76, 0x69, 0x65, 0x77, 0x22, + 0x5b, 0x0a, 0x17, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x6e, + 0x66, 0x6f, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x40, 0x0a, 0x07, 0x74, 0x78, + 0x5f, 0x69, 0x6e, 0x66, 0x6f, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x27, 0x2e, 0x70, 0x65, + 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x76, 0x69, 0x65, 0x77, 0x2e, 0x76, 0x31, 0x61, 0x6c, + 0x70, 0x68, 0x61, 0x31, 0x2e, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, + 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x06, 0x74, 0x78, 0x49, 0x6e, 0x66, 0x6f, 0x22, 0x61, 0x0a, 0x1d, + 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x6e, 0x66, 0x6f, 0x42, + 0x79, 0x48, 0x61, 0x73, 0x68, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x40, 0x0a, + 0x07, 0x74, 0x78, 0x5f, 0x69, 0x6e, 0x66, 0x6f, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x27, + 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x76, 0x69, 0x65, 0x77, 0x2e, 0x76, + 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, + 0x69, 0x6f, 0x6e, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x06, 0x74, 0x78, 0x49, 0x6e, 0x66, 0x6f, 0x22, + 0x5d, 0x0a, 0x0d, 0x4e, 0x6f, 0x74, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, + 0x12, 0x4c, 0x0a, 0x0b, 0x6e, 0x6f, 0x74, 0x65, 0x5f, 0x72, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2b, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, + 0x2e, 0x76, 0x69, 0x65, 0x77, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x53, + 0x70, 0x65, 0x6e, 0x64, 0x61, 0x62, 0x6c, 0x65, 0x4e, 0x6f, 0x74, 0x65, 0x52, 0x65, 0x63, 0x6f, + 0x72, 0x64, 0x52, 0x0a, 0x6e, 0x6f, 0x74, 0x65, 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x22, 0xb5, + 0x01, 0x0a, 0x16, 0x4e, 0x6f, 0x74, 0x65, 0x73, 0x46, 0x6f, 0x72, 0x56, 0x6f, 0x74, 0x69, 0x6e, + 0x67, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x4c, 0x0a, 0x0b, 0x6e, 0x6f, 0x74, + 0x65, 0x5f, 0x72, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2b, + 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x76, 0x69, 0x65, 0x77, 0x2e, 0x76, + 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x53, 0x70, 0x65, 0x6e, 0x64, 0x61, 0x62, 0x6c, + 0x65, 0x4e, 0x6f, 0x74, 0x65, 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x52, 0x0a, 0x6e, 0x6f, 0x74, + 0x65, 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x12, 0x4d, 0x0a, 0x0c, 0x69, 0x64, 0x65, 0x6e, 0x74, + 0x69, 0x74, 0x79, 0x5f, 0x6b, 0x65, 0x79, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2a, 0x2e, + 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x72, + 0x79, 0x70, 0x74, 0x6f, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x49, 0x64, + 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x4b, 0x65, 0x79, 0x52, 0x0b, 0x69, 0x64, 0x65, 0x6e, 0x74, + 0x69, 0x74, 0x79, 0x4b, 0x65, 0x79, 0x22, 0xe9, 0x03, 0x0a, 0x13, 0x53, 0x70, 0x65, 0x6e, 0x64, + 0x61, 0x62, 0x6c, 0x65, 0x4e, 0x6f, 0x74, 0x65, 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x12, 0x57, + 0x0a, 0x0f, 0x6e, 0x6f, 0x74, 0x65, 0x5f, 0x63, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x6d, 0x65, 0x6e, + 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2e, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, + 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x72, 0x79, 0x70, 0x74, 0x6f, 0x2e, 0x76, + 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x65, 0x43, 0x6f, 0x6d, + 0x6d, 0x69, 0x74, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x0e, 0x6e, 0x6f, 0x74, 0x65, 0x43, 0x6f, 0x6d, + 0x6d, 0x69, 0x74, 0x6d, 0x65, 0x6e, 0x74, 0x12, 0x37, 0x0a, 0x04, 0x6e, 0x6f, 0x74, 0x65, 0x18, + 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x23, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, + 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x72, 0x79, 0x70, 0x74, 0x6f, 0x2e, 0x76, 0x31, 0x61, + 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x4e, 0x6f, 0x74, 0x65, 0x52, 0x04, 0x6e, 0x6f, 0x74, 0x65, + 0x12, 0x50, 0x0a, 0x0d, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x5f, 0x69, 0x6e, 0x64, 0x65, + 0x78, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2b, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, + 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x72, 0x79, 0x70, 0x74, 0x6f, 0x2e, 0x76, + 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x49, + 0x6e, 0x64, 0x65, 0x78, 0x52, 0x0c, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x49, 0x6e, 0x64, + 0x65, 0x78, 0x12, 0x46, 0x0a, 0x09, 0x6e, 0x75, 0x6c, 0x6c, 0x69, 0x66, 0x69, 0x65, 0x72, 0x18, + 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x28, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, + 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x72, 0x79, 0x70, 0x74, 0x6f, 0x2e, 0x76, 0x31, 0x61, + 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x4e, 0x75, 0x6c, 0x6c, 0x69, 0x66, 0x69, 0x65, 0x72, 0x52, + 0x09, 0x6e, 0x75, 0x6c, 0x6c, 0x69, 0x66, 0x69, 0x65, 0x72, 0x12, 0x25, 0x0a, 0x0e, 0x68, 0x65, + 0x69, 0x67, 0x68, 0x74, 0x5f, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x18, 0x05, 0x20, 0x01, + 0x28, 0x04, 0x52, 0x0d, 0x68, 0x65, 0x69, 0x67, 0x68, 0x74, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, + 0x64, 0x12, 0x21, 0x0a, 0x0c, 0x68, 0x65, 0x69, 0x67, 0x68, 0x74, 0x5f, 0x73, 0x70, 0x65, 0x6e, + 0x74, 0x18, 0x06, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0b, 0x68, 0x65, 0x69, 0x67, 0x68, 0x74, 0x53, + 0x70, 0x65, 0x6e, 0x74, 0x12, 0x1a, 0x0a, 0x08, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, + 0x18, 0x07, 0x20, 0x01, 0x28, 0x04, 0x52, 0x08, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, + 0x12, 0x40, 0x0a, 0x06, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x18, 0x08, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x28, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, + 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, + 0x4e, 0x6f, 0x74, 0x65, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x52, 0x06, 0x73, 0x6f, 0x75, 0x72, + 0x63, 0x65, 0x22, 0xc3, 0x03, 0x0a, 0x0a, 0x53, 0x77, 0x61, 0x70, 0x52, 0x65, 0x63, 0x6f, 0x72, + 0x64, 0x12, 0x57, 0x0a, 0x0f, 0x73, 0x77, 0x61, 0x70, 0x5f, 0x63, 0x6f, 0x6d, 0x6d, 0x69, 0x74, + 0x6d, 0x65, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2e, 0x2e, 0x70, 0x65, 0x6e, + 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x72, 0x79, 0x70, 0x74, + 0x6f, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x65, + 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x0e, 0x73, 0x77, 0x61, 0x70, + 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x6d, 0x65, 0x6e, 0x74, 0x12, 0x3d, 0x0a, 0x04, 0x73, 0x77, + 0x61, 0x70, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x29, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x64, 0x65, 0x78, 0x2e, 0x76, 0x31, 0x61, - 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x54, 0x72, 0x61, 0x64, 0x69, 0x6e, 0x67, 0x50, 0x61, 0x69, - 0x72, 0x52, 0x0b, 0x74, 0x72, 0x61, 0x64, 0x69, 0x6e, 0x67, 0x50, 0x61, 0x69, 0x72, 0x22, 0x63, - 0x0a, 0x18, 0x4f, 0x77, 0x6e, 0x65, 0x64, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x49, - 0x64, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x47, 0x0a, 0x0b, 0x70, 0x6f, - 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x26, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, - 0x64, 0x65, 0x78, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x50, 0x6f, 0x73, - 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x52, 0x0a, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, - 0x6e, 0x49, 0x64, 0x32, 0xc0, 0x13, 0x0a, 0x13, 0x56, 0x69, 0x65, 0x77, 0x50, 0x72, 0x6f, 0x74, - 0x6f, 0x63, 0x6f, 0x6c, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x57, 0x0a, 0x06, 0x53, - 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x25, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, + 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x53, 0x77, 0x61, 0x70, 0x50, 0x6c, 0x61, 0x69, 0x6e, 0x74, + 0x65, 0x78, 0x74, 0x52, 0x04, 0x73, 0x77, 0x61, 0x70, 0x12, 0x1a, 0x0a, 0x08, 0x70, 0x6f, 0x73, + 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x04, 0x52, 0x08, 0x70, 0x6f, 0x73, + 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x46, 0x0a, 0x09, 0x6e, 0x75, 0x6c, 0x6c, 0x69, 0x66, 0x69, + 0x65, 0x72, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x28, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, + 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x72, 0x79, 0x70, 0x74, 0x6f, 0x2e, + 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x4e, 0x75, 0x6c, 0x6c, 0x69, 0x66, 0x69, + 0x65, 0x72, 0x52, 0x09, 0x6e, 0x75, 0x6c, 0x6c, 0x69, 0x66, 0x69, 0x65, 0x72, 0x12, 0x50, 0x0a, + 0x0b, 0x6f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x5f, 0x64, 0x61, 0x74, 0x61, 0x18, 0x05, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x2f, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, + 0x72, 0x65, 0x2e, 0x64, 0x65, 0x78, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, + 0x42, 0x61, 0x74, 0x63, 0x68, 0x53, 0x77, 0x61, 0x70, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x44, + 0x61, 0x74, 0x61, 0x52, 0x0a, 0x6f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x44, 0x61, 0x74, 0x61, 0x12, + 0x25, 0x0a, 0x0e, 0x68, 0x65, 0x69, 0x67, 0x68, 0x74, 0x5f, 0x63, 0x6c, 0x61, 0x69, 0x6d, 0x65, + 0x64, 0x18, 0x06, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0d, 0x68, 0x65, 0x69, 0x67, 0x68, 0x74, 0x43, + 0x6c, 0x61, 0x69, 0x6d, 0x65, 0x64, 0x12, 0x40, 0x0a, 0x06, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, + 0x18, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x28, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, + 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x2e, 0x76, 0x31, 0x61, + 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x4e, 0x6f, 0x74, 0x65, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, + 0x52, 0x06, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x22, 0xb7, 0x01, 0x0a, 0x17, 0x4f, 0x77, 0x6e, + 0x65, 0x64, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x73, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x12, 0x50, 0x0a, 0x0e, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, + 0x5f, 0x73, 0x74, 0x61, 0x74, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x29, 0x2e, 0x70, + 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x64, 0x65, 0x78, + 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, + 0x6f, 0x6e, 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, 0x0d, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, + 0x6e, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x4a, 0x0a, 0x0c, 0x74, 0x72, 0x61, 0x64, 0x69, 0x6e, + 0x67, 0x5f, 0x70, 0x61, 0x69, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x27, 0x2e, 0x70, + 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x64, 0x65, 0x78, + 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x54, 0x72, 0x61, 0x64, 0x69, 0x6e, + 0x67, 0x50, 0x61, 0x69, 0x72, 0x52, 0x0b, 0x74, 0x72, 0x61, 0x64, 0x69, 0x6e, 0x67, 0x50, 0x61, + 0x69, 0x72, 0x22, 0x63, 0x0a, 0x18, 0x4f, 0x77, 0x6e, 0x65, 0x64, 0x50, 0x6f, 0x73, 0x69, 0x74, + 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x47, + 0x0a, 0x0b, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x26, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, + 0x6f, 0x72, 0x65, 0x2e, 0x64, 0x65, 0x78, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, + 0x2e, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x52, 0x0a, 0x70, 0x6f, 0x73, + 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x32, 0xb3, 0x14, 0x0a, 0x13, 0x56, 0x69, 0x65, 0x77, + 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, + 0x57, 0x0a, 0x06, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x25, 0x2e, 0x70, 0x65, 0x6e, 0x75, + 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x76, 0x69, 0x65, 0x77, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, + 0x61, 0x31, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x1a, 0x26, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x76, 0x69, 0x65, 0x77, + 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, + 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x6b, 0x0a, 0x0c, 0x53, 0x74, 0x61, 0x74, + 0x75, 0x73, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x12, 0x2b, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, + 0x62, 0x72, 0x61, 0x2e, 0x76, 0x69, 0x65, 0x77, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, + 0x31, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x52, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2c, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x76, 0x69, 0x65, 0x77, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x53, - 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x26, 0x2e, 0x70, - 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x76, 0x69, 0x65, 0x77, 0x2e, 0x76, 0x31, 0x61, - 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, 0x73, 0x70, - 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x6b, 0x0a, 0x0c, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x53, 0x74, - 0x72, 0x65, 0x61, 0x6d, 0x12, 0x2b, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, - 0x76, 0x69, 0x65, 0x77, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x53, 0x74, - 0x61, 0x74, 0x75, 0x73, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x1a, 0x2c, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x76, 0x69, 0x65, - 0x77, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x75, - 0x73, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x30, - 0x01, 0x12, 0x56, 0x0a, 0x05, 0x4e, 0x6f, 0x74, 0x65, 0x73, 0x12, 0x24, 0x2e, 0x70, 0x65, 0x6e, - 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x76, 0x69, 0x65, 0x77, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, - 0x68, 0x61, 0x31, 0x2e, 0x4e, 0x6f, 0x74, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x1a, 0x25, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x76, 0x69, 0x65, 0x77, - 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x4e, 0x6f, 0x74, 0x65, 0x73, 0x52, - 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x30, 0x01, 0x12, 0x71, 0x0a, 0x0e, 0x4e, 0x6f, 0x74, - 0x65, 0x73, 0x46, 0x6f, 0x72, 0x56, 0x6f, 0x74, 0x69, 0x6e, 0x67, 0x12, 0x2d, 0x2e, 0x70, 0x65, + 0x74, 0x61, 0x74, 0x75, 0x73, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x52, 0x65, 0x73, 0x70, 0x6f, + 0x6e, 0x73, 0x65, 0x30, 0x01, 0x12, 0x56, 0x0a, 0x05, 0x4e, 0x6f, 0x74, 0x65, 0x73, 0x12, 0x24, + 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x76, 0x69, 0x65, 0x77, 0x2e, 0x76, + 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x4e, 0x6f, 0x74, 0x65, 0x73, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x1a, 0x25, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, + 0x76, 0x69, 0x65, 0x77, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x4e, 0x6f, + 0x74, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x30, 0x01, 0x12, 0x71, 0x0a, + 0x0e, 0x4e, 0x6f, 0x74, 0x65, 0x73, 0x46, 0x6f, 0x72, 0x56, 0x6f, 0x74, 0x69, 0x6e, 0x67, 0x12, + 0x2d, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x76, 0x69, 0x65, 0x77, 0x2e, + 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x4e, 0x6f, 0x74, 0x65, 0x73, 0x46, 0x6f, + 0x72, 0x56, 0x6f, 0x74, 0x69, 0x6e, 0x67, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2e, + 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x76, 0x69, 0x65, 0x77, 0x2e, 0x76, + 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x4e, 0x6f, 0x74, 0x65, 0x73, 0x46, 0x6f, 0x72, + 0x56, 0x6f, 0x74, 0x69, 0x6e, 0x67, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x30, 0x01, + 0x12, 0x5a, 0x0a, 0x07, 0x57, 0x69, 0x74, 0x6e, 0x65, 0x73, 0x73, 0x12, 0x26, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x76, 0x69, 0x65, 0x77, 0x2e, 0x76, 0x31, 0x61, 0x6c, - 0x70, 0x68, 0x61, 0x31, 0x2e, 0x4e, 0x6f, 0x74, 0x65, 0x73, 0x46, 0x6f, 0x72, 0x56, 0x6f, 0x74, - 0x69, 0x6e, 0x67, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2e, 0x2e, 0x70, 0x65, 0x6e, - 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x76, 0x69, 0x65, 0x77, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, - 0x68, 0x61, 0x31, 0x2e, 0x4e, 0x6f, 0x74, 0x65, 0x73, 0x46, 0x6f, 0x72, 0x56, 0x6f, 0x74, 0x69, - 0x6e, 0x67, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x30, 0x01, 0x12, 0x5a, 0x0a, 0x07, - 0x57, 0x69, 0x74, 0x6e, 0x65, 0x73, 0x73, 0x12, 0x26, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, - 0x72, 0x61, 0x2e, 0x76, 0x69, 0x65, 0x77, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, - 0x2e, 0x57, 0x69, 0x74, 0x6e, 0x65, 0x73, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, - 0x27, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x76, 0x69, 0x65, 0x77, 0x2e, + 0x70, 0x68, 0x61, 0x31, 0x2e, 0x57, 0x69, 0x74, 0x6e, 0x65, 0x73, 0x73, 0x52, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x1a, 0x27, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x76, + 0x69, 0x65, 0x77, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x57, 0x69, 0x74, + 0x6e, 0x65, 0x73, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x72, 0x0a, 0x0f, + 0x57, 0x69, 0x74, 0x6e, 0x65, 0x73, 0x73, 0x41, 0x6e, 0x64, 0x42, 0x75, 0x69, 0x6c, 0x64, 0x12, + 0x2e, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x76, 0x69, 0x65, 0x77, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x57, 0x69, 0x74, 0x6e, 0x65, 0x73, 0x73, - 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x72, 0x0a, 0x0f, 0x57, 0x69, 0x74, 0x6e, - 0x65, 0x73, 0x73, 0x41, 0x6e, 0x64, 0x42, 0x75, 0x69, 0x6c, 0x64, 0x12, 0x2e, 0x2e, 0x70, 0x65, + 0x41, 0x6e, 0x64, 0x42, 0x75, 0x69, 0x6c, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, + 0x2f, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x76, 0x69, 0x65, 0x77, 0x2e, + 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x57, 0x69, 0x74, 0x6e, 0x65, 0x73, 0x73, + 0x41, 0x6e, 0x64, 0x42, 0x75, 0x69, 0x6c, 0x64, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, + 0x12, 0x59, 0x0a, 0x06, 0x41, 0x73, 0x73, 0x65, 0x74, 0x73, 0x12, 0x25, 0x2e, 0x70, 0x65, 0x6e, + 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x76, 0x69, 0x65, 0x77, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, + 0x68, 0x61, 0x31, 0x2e, 0x41, 0x73, 0x73, 0x65, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0x1a, 0x26, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x76, 0x69, 0x65, + 0x77, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x41, 0x73, 0x73, 0x65, 0x74, + 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x30, 0x01, 0x12, 0x72, 0x0a, 0x0f, 0x43, + 0x68, 0x61, 0x69, 0x6e, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x12, 0x2e, + 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x76, 0x69, 0x65, 0x77, 0x2e, 0x76, + 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x43, 0x68, 0x61, 0x69, 0x6e, 0x50, 0x61, 0x72, + 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2f, + 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x76, 0x69, 0x65, 0x77, 0x2e, 0x76, + 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x43, 0x68, 0x61, 0x69, 0x6e, 0x50, 0x61, 0x72, + 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, + 0x6c, 0x0a, 0x0d, 0x46, 0x4d, 0x44, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, + 0x12, 0x2c, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x76, 0x69, 0x65, 0x77, + 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x46, 0x4d, 0x44, 0x50, 0x61, 0x72, + 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2d, + 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x76, 0x69, 0x65, 0x77, 0x2e, 0x76, + 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x46, 0x4d, 0x44, 0x50, 0x61, 0x72, 0x61, 0x6d, + 0x65, 0x74, 0x65, 0x72, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x6f, 0x0a, + 0x0e, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x42, 0x79, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x12, + 0x2d, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x76, 0x69, 0x65, 0x77, 0x2e, + 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, + 0x42, 0x79, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2e, + 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x76, 0x69, 0x65, 0x77, 0x2e, 0x76, + 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x42, + 0x79, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x6f, + 0x0a, 0x0e, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x42, 0x79, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, + 0x12, 0x2d, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x76, 0x69, 0x65, 0x77, + 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x42, + 0x79, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, + 0x2e, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x76, 0x69, 0x65, 0x77, 0x2e, + 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x42, 0x79, + 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, + 0x75, 0x0a, 0x10, 0x45, 0x70, 0x68, 0x65, 0x6d, 0x65, 0x72, 0x61, 0x6c, 0x41, 0x64, 0x64, 0x72, + 0x65, 0x73, 0x73, 0x12, 0x2f, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x76, + 0x69, 0x65, 0x77, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x45, 0x70, 0x68, + 0x65, 0x6d, 0x65, 0x72, 0x61, 0x6c, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x1a, 0x30, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, + 0x76, 0x69, 0x65, 0x77, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x45, 0x70, + 0x68, 0x65, 0x6d, 0x65, 0x72, 0x61, 0x6c, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x52, 0x65, + 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x5f, 0x0a, 0x08, 0x42, 0x61, 0x6c, 0x61, 0x6e, 0x63, + 0x65, 0x73, 0x12, 0x27, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x76, 0x69, + 0x65, 0x77, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x42, 0x61, 0x6c, 0x61, + 0x6e, 0x63, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x28, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x76, 0x69, 0x65, 0x77, 0x2e, 0x76, 0x31, 0x61, 0x6c, - 0x70, 0x68, 0x61, 0x31, 0x2e, 0x57, 0x69, 0x74, 0x6e, 0x65, 0x73, 0x73, 0x41, 0x6e, 0x64, 0x42, - 0x75, 0x69, 0x6c, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2f, 0x2e, 0x70, 0x65, + 0x70, 0x68, 0x61, 0x31, 0x2e, 0x42, 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x73, 0x52, 0x65, 0x73, + 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x30, 0x01, 0x12, 0x75, 0x0a, 0x10, 0x4e, 0x6f, 0x74, 0x65, 0x42, + 0x79, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x6d, 0x65, 0x6e, 0x74, 0x12, 0x2f, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x76, 0x69, 0x65, 0x77, 0x2e, 0x76, 0x31, 0x61, 0x6c, - 0x70, 0x68, 0x61, 0x31, 0x2e, 0x57, 0x69, 0x74, 0x6e, 0x65, 0x73, 0x73, 0x41, 0x6e, 0x64, 0x42, - 0x75, 0x69, 0x6c, 0x64, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x59, 0x0a, 0x06, - 0x41, 0x73, 0x73, 0x65, 0x74, 0x73, 0x12, 0x25, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, - 0x61, 0x2e, 0x76, 0x69, 0x65, 0x77, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, - 0x41, 0x73, 0x73, 0x65, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x26, 0x2e, - 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x76, 0x69, 0x65, 0x77, 0x2e, 0x76, 0x31, - 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x41, 0x73, 0x73, 0x65, 0x74, 0x73, 0x52, 0x65, 0x73, - 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x30, 0x01, 0x12, 0x72, 0x0a, 0x0f, 0x43, 0x68, 0x61, 0x69, 0x6e, - 0x50, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x12, 0x2e, 0x2e, 0x70, 0x65, 0x6e, - 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x76, 0x69, 0x65, 0x77, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, - 0x68, 0x61, 0x31, 0x2e, 0x43, 0x68, 0x61, 0x69, 0x6e, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, - 0x65, 0x72, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2f, 0x2e, 0x70, 0x65, 0x6e, - 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x76, 0x69, 0x65, 0x77, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, - 0x68, 0x61, 0x31, 0x2e, 0x43, 0x68, 0x61, 0x69, 0x6e, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, - 0x65, 0x72, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x6c, 0x0a, 0x0d, 0x46, - 0x4d, 0x44, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x12, 0x2c, 0x2e, 0x70, + 0x70, 0x68, 0x61, 0x31, 0x2e, 0x4e, 0x6f, 0x74, 0x65, 0x42, 0x79, 0x43, 0x6f, 0x6d, 0x6d, 0x69, + 0x74, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x30, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x76, 0x69, 0x65, 0x77, 0x2e, 0x76, 0x31, 0x61, - 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x46, 0x4d, 0x44, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, - 0x65, 0x72, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2d, 0x2e, 0x70, 0x65, 0x6e, - 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x76, 0x69, 0x65, 0x77, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, - 0x68, 0x61, 0x31, 0x2e, 0x46, 0x4d, 0x44, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, - 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x6f, 0x0a, 0x0e, 0x41, 0x64, 0x64, - 0x72, 0x65, 0x73, 0x73, 0x42, 0x79, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x12, 0x2d, 0x2e, 0x70, 0x65, + 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x4e, 0x6f, 0x74, 0x65, 0x42, 0x79, 0x43, 0x6f, 0x6d, 0x6d, + 0x69, 0x74, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x75, + 0x0a, 0x10, 0x53, 0x77, 0x61, 0x70, 0x42, 0x79, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x6d, 0x65, + 0x6e, 0x74, 0x12, 0x2f, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x76, 0x69, + 0x65, 0x77, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x53, 0x77, 0x61, 0x70, + 0x42, 0x79, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x1a, 0x30, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x76, + 0x69, 0x65, 0x77, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x53, 0x77, 0x61, + 0x70, 0x42, 0x79, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x73, + 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x71, 0x0a, 0x0e, 0x55, 0x6e, 0x63, 0x6c, 0x61, 0x69, 0x6d, + 0x65, 0x64, 0x53, 0x77, 0x61, 0x70, 0x73, 0x12, 0x2d, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, + 0x72, 0x61, 0x2e, 0x76, 0x69, 0x65, 0x77, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, + 0x2e, 0x55, 0x6e, 0x63, 0x6c, 0x61, 0x69, 0x6d, 0x65, 0x64, 0x53, 0x77, 0x61, 0x70, 0x73, 0x52, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2e, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, + 0x61, 0x2e, 0x76, 0x69, 0x65, 0x77, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, + 0x55, 0x6e, 0x63, 0x6c, 0x61, 0x69, 0x6d, 0x65, 0x64, 0x53, 0x77, 0x61, 0x70, 0x73, 0x52, 0x65, + 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x30, 0x01, 0x12, 0x72, 0x0a, 0x0f, 0x4e, 0x75, 0x6c, 0x6c, + 0x69, 0x66, 0x69, 0x65, 0x72, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x2e, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x76, 0x69, 0x65, 0x77, 0x2e, 0x76, 0x31, 0x61, 0x6c, - 0x70, 0x68, 0x61, 0x31, 0x2e, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x42, 0x79, 0x49, 0x6e, - 0x64, 0x65, 0x78, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2e, 0x2e, 0x70, 0x65, 0x6e, - 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x76, 0x69, 0x65, 0x77, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, - 0x68, 0x61, 0x31, 0x2e, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x42, 0x79, 0x49, 0x6e, 0x64, - 0x65, 0x78, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x6f, 0x0a, 0x0e, 0x49, 0x6e, - 0x64, 0x65, 0x78, 0x42, 0x79, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x12, 0x2d, 0x2e, 0x70, - 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x76, 0x69, 0x65, 0x77, 0x2e, 0x76, 0x31, 0x61, - 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x42, 0x79, 0x41, 0x64, 0x64, - 0x72, 0x65, 0x73, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2e, 0x2e, 0x70, 0x65, + 0x70, 0x68, 0x61, 0x31, 0x2e, 0x4e, 0x75, 0x6c, 0x6c, 0x69, 0x66, 0x69, 0x65, 0x72, 0x53, 0x74, + 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2f, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x76, 0x69, 0x65, 0x77, 0x2e, 0x76, 0x31, 0x61, 0x6c, - 0x70, 0x68, 0x61, 0x31, 0x2e, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x42, 0x79, 0x41, 0x64, 0x64, 0x72, - 0x65, 0x73, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x75, 0x0a, 0x10, 0x45, - 0x70, 0x68, 0x65, 0x6d, 0x65, 0x72, 0x61, 0x6c, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x12, - 0x2f, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x76, 0x69, 0x65, 0x77, 0x2e, - 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x45, 0x70, 0x68, 0x65, 0x6d, 0x65, 0x72, - 0x61, 0x6c, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x1a, 0x30, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x76, 0x69, 0x65, 0x77, - 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x45, 0x70, 0x68, 0x65, 0x6d, 0x65, - 0x72, 0x61, 0x6c, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, - 0x73, 0x65, 0x12, 0x5f, 0x0a, 0x08, 0x42, 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x73, 0x12, 0x27, - 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x76, 0x69, 0x65, 0x77, 0x2e, 0x76, - 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x42, 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x73, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x28, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, - 0x72, 0x61, 0x2e, 0x76, 0x69, 0x65, 0x77, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, - 0x2e, 0x42, 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x30, 0x01, 0x12, 0x75, 0x0a, 0x10, 0x4e, 0x6f, 0x74, 0x65, 0x42, 0x79, 0x43, 0x6f, 0x6d, - 0x6d, 0x69, 0x74, 0x6d, 0x65, 0x6e, 0x74, 0x12, 0x2f, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, - 0x72, 0x61, 0x2e, 0x76, 0x69, 0x65, 0x77, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, - 0x2e, 0x4e, 0x6f, 0x74, 0x65, 0x42, 0x79, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x6d, 0x65, 0x6e, - 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x30, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, - 0x62, 0x72, 0x61, 0x2e, 0x76, 0x69, 0x65, 0x77, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, - 0x31, 0x2e, 0x4e, 0x6f, 0x74, 0x65, 0x42, 0x79, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x6d, 0x65, - 0x6e, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x75, 0x0a, 0x10, 0x53, 0x77, - 0x61, 0x70, 0x42, 0x79, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x6d, 0x65, 0x6e, 0x74, 0x12, 0x2f, + 0x70, 0x68, 0x61, 0x31, 0x2e, 0x4e, 0x75, 0x6c, 0x6c, 0x69, 0x66, 0x69, 0x65, 0x72, 0x53, 0x74, + 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x84, 0x01, 0x0a, + 0x15, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x6e, 0x66, 0x6f, + 0x42, 0x79, 0x48, 0x61, 0x73, 0x68, 0x12, 0x34, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, + 0x61, 0x2e, 0x76, 0x69, 0x65, 0x77, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, + 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x6e, 0x66, 0x6f, 0x42, + 0x79, 0x48, 0x61, 0x73, 0x68, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x35, 0x2e, 0x70, + 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x76, 0x69, 0x65, 0x77, 0x2e, 0x76, 0x31, 0x61, + 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, + 0x6e, 0x49, 0x6e, 0x66, 0x6f, 0x42, 0x79, 0x48, 0x61, 0x73, 0x68, 0x52, 0x65, 0x73, 0x70, 0x6f, + 0x6e, 0x73, 0x65, 0x12, 0x74, 0x0a, 0x0f, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, + 0x6f, 0x6e, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x2e, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, + 0x61, 0x2e, 0x76, 0x69, 0x65, 0x77, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, + 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x6e, 0x66, 0x6f, 0x52, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2f, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, + 0x61, 0x2e, 0x76, 0x69, 0x65, 0x77, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, + 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x6e, 0x66, 0x6f, 0x52, + 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x30, 0x01, 0x12, 0x7b, 0x0a, 0x12, 0x54, 0x72, 0x61, + 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x6c, 0x61, 0x6e, 0x6e, 0x65, 0x72, 0x12, + 0x31, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x76, 0x69, 0x65, 0x77, 0x2e, + 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, + 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x6c, 0x61, 0x6e, 0x6e, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, + 0x73, 0x74, 0x1a, 0x32, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x76, 0x69, + 0x65, 0x77, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x54, 0x72, 0x61, 0x6e, + 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x6c, 0x61, 0x6e, 0x6e, 0x65, 0x72, 0x52, 0x65, + 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x81, 0x01, 0x0a, 0x14, 0x42, 0x72, 0x6f, 0x61, 0x64, + 0x63, 0x61, 0x73, 0x74, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, + 0x33, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x76, 0x69, 0x65, 0x77, 0x2e, + 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x42, 0x72, 0x6f, 0x61, 0x64, 0x63, 0x61, + 0x73, 0x74, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x1a, 0x34, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, + 0x76, 0x69, 0x65, 0x77, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x42, 0x72, + 0x6f, 0x61, 0x64, 0x63, 0x61, 0x73, 0x74, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, + 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x77, 0x0a, 0x10, 0x4f, 0x77, + 0x6e, 0x65, 0x64, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x73, 0x12, 0x2f, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x76, 0x69, 0x65, 0x77, 0x2e, 0x76, - 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x53, 0x77, 0x61, 0x70, 0x42, 0x79, 0x43, 0x6f, - 0x6d, 0x6d, 0x69, 0x74, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, + 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x4f, 0x77, 0x6e, 0x65, 0x64, 0x50, 0x6f, 0x73, + 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x30, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x76, 0x69, 0x65, 0x77, 0x2e, - 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x53, 0x77, 0x61, 0x70, 0x42, 0x79, 0x43, - 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x12, 0x72, 0x0a, 0x0f, 0x4e, 0x75, 0x6c, 0x6c, 0x69, 0x66, 0x69, 0x65, 0x72, 0x53, 0x74, - 0x61, 0x74, 0x75, 0x73, 0x12, 0x2e, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, - 0x76, 0x69, 0x65, 0x77, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x4e, 0x75, - 0x6c, 0x6c, 0x69, 0x66, 0x69, 0x65, 0x72, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2f, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, - 0x76, 0x69, 0x65, 0x77, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x4e, 0x75, - 0x6c, 0x6c, 0x69, 0x66, 0x69, 0x65, 0x72, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, 0x73, - 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x84, 0x01, 0x0a, 0x15, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, - 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x6e, 0x66, 0x6f, 0x42, 0x79, 0x48, 0x61, 0x73, 0x68, 0x12, - 0x34, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x76, 0x69, 0x65, 0x77, 0x2e, - 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, - 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x6e, 0x66, 0x6f, 0x42, 0x79, 0x48, 0x61, 0x73, 0x68, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x35, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, - 0x2e, 0x76, 0x69, 0x65, 0x77, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x54, - 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x6e, 0x66, 0x6f, 0x42, 0x79, - 0x48, 0x61, 0x73, 0x68, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x74, 0x0a, 0x0f, - 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x6e, 0x66, 0x6f, 0x12, - 0x2e, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x76, 0x69, 0x65, 0x77, 0x2e, - 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, - 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, - 0x2f, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x76, 0x69, 0x65, 0x77, 0x2e, - 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, - 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 0x30, 0x01, 0x12, 0x7b, 0x0a, 0x12, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, - 0x6e, 0x50, 0x6c, 0x61, 0x6e, 0x6e, 0x65, 0x72, 0x12, 0x31, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, - 0x62, 0x72, 0x61, 0x2e, 0x76, 0x69, 0x65, 0x77, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, - 0x31, 0x2e, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x6c, 0x61, - 0x6e, 0x6e, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x32, 0x2e, 0x70, 0x65, - 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x76, 0x69, 0x65, 0x77, 0x2e, 0x76, 0x31, 0x61, 0x6c, - 0x70, 0x68, 0x61, 0x31, 0x2e, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, - 0x50, 0x6c, 0x61, 0x6e, 0x6e, 0x65, 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, - 0x81, 0x01, 0x0a, 0x14, 0x42, 0x72, 0x6f, 0x61, 0x64, 0x63, 0x61, 0x73, 0x74, 0x54, 0x72, 0x61, - 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x33, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, - 0x62, 0x72, 0x61, 0x2e, 0x76, 0x69, 0x65, 0x77, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, - 0x31, 0x2e, 0x42, 0x72, 0x6f, 0x61, 0x64, 0x63, 0x61, 0x73, 0x74, 0x54, 0x72, 0x61, 0x6e, 0x73, - 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x34, 0x2e, - 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x76, 0x69, 0x65, 0x77, 0x2e, 0x76, 0x31, - 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x42, 0x72, 0x6f, 0x61, 0x64, 0x63, 0x61, 0x73, 0x74, - 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x73, 0x65, 0x12, 0x77, 0x0a, 0x10, 0x4f, 0x77, 0x6e, 0x65, 0x64, 0x50, 0x6f, 0x73, 0x69, - 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x73, 0x12, 0x2f, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, - 0x72, 0x61, 0x2e, 0x76, 0x69, 0x65, 0x77, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, - 0x2e, 0x4f, 0x77, 0x6e, 0x65, 0x64, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x64, - 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x30, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, + 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x4f, 0x77, 0x6e, 0x65, 0x64, 0x50, 0x6f, + 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, + 0x65, 0x30, 0x01, 0x12, 0x78, 0x0a, 0x11, 0x41, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x65, + 0x41, 0x6e, 0x64, 0x42, 0x75, 0x69, 0x6c, 0x64, 0x12, 0x30, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x76, 0x69, 0x65, 0x77, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, - 0x31, 0x2e, 0x4f, 0x77, 0x6e, 0x65, 0x64, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x49, - 0x64, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x30, 0x01, 0x12, 0x78, 0x0a, 0x11, - 0x41, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x65, 0x41, 0x6e, 0x64, 0x42, 0x75, 0x69, 0x6c, - 0x64, 0x12, 0x30, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x76, 0x69, 0x65, - 0x77, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x41, 0x75, 0x74, 0x68, 0x6f, - 0x72, 0x69, 0x7a, 0x65, 0x41, 0x6e, 0x64, 0x42, 0x75, 0x69, 0x6c, 0x64, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x1a, 0x31, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x76, - 0x69, 0x65, 0x77, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x41, 0x75, 0x74, - 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x65, 0x41, 0x6e, 0x64, 0x42, 0x75, 0x69, 0x6c, 0x64, 0x52, 0x65, - 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x32, 0x70, 0x0a, 0x0f, 0x56, 0x69, 0x65, 0x77, 0x41, 0x75, - 0x74, 0x68, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x5d, 0x0a, 0x08, 0x56, 0x69, 0x65, - 0x77, 0x41, 0x75, 0x74, 0x68, 0x12, 0x27, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, + 0x31, 0x2e, 0x41, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x65, 0x41, 0x6e, 0x64, 0x42, 0x75, + 0x69, 0x6c, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x31, 0x2e, 0x70, 0x65, 0x6e, + 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x76, 0x69, 0x65, 0x77, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, + 0x68, 0x61, 0x31, 0x2e, 0x41, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x65, 0x41, 0x6e, 0x64, + 0x42, 0x75, 0x69, 0x6c, 0x64, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x32, 0x70, 0x0a, + 0x0f, 0x56, 0x69, 0x65, 0x77, 0x41, 0x75, 0x74, 0x68, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, + 0x12, 0x5d, 0x0a, 0x08, 0x56, 0x69, 0x65, 0x77, 0x41, 0x75, 0x74, 0x68, 0x12, 0x27, 0x2e, 0x70, + 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x76, 0x69, 0x65, 0x77, 0x2e, 0x76, 0x31, 0x61, + 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x56, 0x69, 0x65, 0x77, 0x41, 0x75, 0x74, 0x68, 0x52, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x28, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x76, 0x69, 0x65, 0x77, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x56, - 0x69, 0x65, 0x77, 0x41, 0x75, 0x74, 0x68, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x28, - 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x76, 0x69, 0x65, 0x77, 0x2e, 0x76, - 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x56, 0x69, 0x65, 0x77, 0x41, 0x75, 0x74, 0x68, - 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x42, 0xf5, 0x01, 0x0a, 0x1a, 0x63, 0x6f, 0x6d, - 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x76, 0x69, 0x65, 0x77, 0x2e, 0x76, - 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x42, 0x09, 0x56, 0x69, 0x65, 0x77, 0x50, 0x72, 0x6f, - 0x74, 0x6f, 0x50, 0x01, 0x5a, 0x52, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, - 0x2f, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2d, 0x7a, 0x6f, 0x6e, 0x65, 0x2f, 0x70, - 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x67, 0x6f, - 0x2f, 0x67, 0x65, 0x6e, 0x2f, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2f, 0x76, 0x69, - 0x65, 0x77, 0x2f, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x3b, 0x76, 0x69, 0x65, 0x77, - 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0xa2, 0x02, 0x03, 0x50, 0x56, 0x58, 0xaa, 0x02, - 0x16, 0x50, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x56, 0x69, 0x65, 0x77, 0x2e, 0x56, - 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0xca, 0x02, 0x16, 0x50, 0x65, 0x6e, 0x75, 0x6d, 0x62, + 0x69, 0x65, 0x77, 0x41, 0x75, 0x74, 0x68, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x42, + 0xf5, 0x01, 0x0a, 0x1a, 0x63, 0x6f, 0x6d, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, + 0x2e, 0x76, 0x69, 0x65, 0x77, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x42, 0x09, + 0x56, 0x69, 0x65, 0x77, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, 0x5a, 0x52, 0x67, 0x69, 0x74, + 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, + 0x2d, 0x7a, 0x6f, 0x6e, 0x65, 0x2f, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2f, 0x70, + 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x67, 0x6f, 0x2f, 0x67, 0x65, 0x6e, 0x2f, 0x70, 0x65, 0x6e, 0x75, + 0x6d, 0x62, 0x72, 0x61, 0x2f, 0x76, 0x69, 0x65, 0x77, 0x2f, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, + 0x61, 0x31, 0x3b, 0x76, 0x69, 0x65, 0x77, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0xa2, + 0x02, 0x03, 0x50, 0x56, 0x58, 0xaa, 0x02, 0x16, 0x50, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, + 0x2e, 0x56, 0x69, 0x65, 0x77, 0x2e, 0x56, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0xca, 0x02, + 0x16, 0x50, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x5c, 0x56, 0x69, 0x65, 0x77, 0x5c, 0x56, + 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0xe2, 0x02, 0x22, 0x50, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x5c, 0x56, 0x69, 0x65, 0x77, 0x5c, 0x56, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, - 0xe2, 0x02, 0x22, 0x50, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x5c, 0x56, 0x69, 0x65, 0x77, - 0x5c, 0x56, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x5c, 0x47, 0x50, 0x42, 0x4d, 0x65, 0x74, - 0x61, 0x64, 0x61, 0x74, 0x61, 0xea, 0x02, 0x18, 0x50, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, - 0x3a, 0x3a, 0x56, 0x69, 0x65, 0x77, 0x3a, 0x3a, 0x56, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, - 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, + 0x5c, 0x47, 0x50, 0x42, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0xea, 0x02, 0x18, 0x50, + 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x3a, 0x3a, 0x56, 0x69, 0x65, 0x77, 0x3a, 0x3a, 0x56, + 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, } var ( @@ -4237,7 +4351,7 @@ func file_penumbra_view_v1alpha1_view_proto_rawDescGZIP() []byte { return file_penumbra_view_v1alpha1_view_proto_rawDescData } -var file_penumbra_view_v1alpha1_view_proto_msgTypes = make([]protoimpl.MessageInfo, 58) +var file_penumbra_view_v1alpha1_view_proto_msgTypes = make([]protoimpl.MessageInfo, 60) var file_penumbra_view_v1alpha1_view_proto_goTypes = []interface{}{ (*AuthorizeAndBuildRequest)(nil), // 0: penumbra.view.v1alpha1.AuthorizeAndBuildRequest (*AuthorizeAndBuildResponse)(nil), // 1: penumbra.view.v1alpha1.AuthorizeAndBuildResponse @@ -4276,210 +4390,216 @@ var file_penumbra_view_v1alpha1_view_proto_goTypes = []interface{}{ (*NoteByCommitmentResponse)(nil), // 34: penumbra.view.v1alpha1.NoteByCommitmentResponse (*SwapByCommitmentRequest)(nil), // 35: penumbra.view.v1alpha1.SwapByCommitmentRequest (*SwapByCommitmentResponse)(nil), // 36: penumbra.view.v1alpha1.SwapByCommitmentResponse - (*NullifierStatusRequest)(nil), // 37: penumbra.view.v1alpha1.NullifierStatusRequest - (*NullifierStatusResponse)(nil), // 38: penumbra.view.v1alpha1.NullifierStatusResponse - (*TransactionInfoByHashRequest)(nil), // 39: penumbra.view.v1alpha1.TransactionInfoByHashRequest - (*TransactionInfoRequest)(nil), // 40: penumbra.view.v1alpha1.TransactionInfoRequest - (*TransactionInfo)(nil), // 41: penumbra.view.v1alpha1.TransactionInfo - (*TransactionInfoResponse)(nil), // 42: penumbra.view.v1alpha1.TransactionInfoResponse - (*TransactionInfoByHashResponse)(nil), // 43: penumbra.view.v1alpha1.TransactionInfoByHashResponse - (*NotesResponse)(nil), // 44: penumbra.view.v1alpha1.NotesResponse - (*NotesForVotingResponse)(nil), // 45: penumbra.view.v1alpha1.NotesForVotingResponse - (*SpendableNoteRecord)(nil), // 46: penumbra.view.v1alpha1.SpendableNoteRecord - (*SwapRecord)(nil), // 47: penumbra.view.v1alpha1.SwapRecord - (*OwnedPositionIdsRequest)(nil), // 48: penumbra.view.v1alpha1.OwnedPositionIdsRequest - (*OwnedPositionIdsResponse)(nil), // 49: penumbra.view.v1alpha1.OwnedPositionIdsResponse - (*TransactionPlannerRequest_Output)(nil), // 50: penumbra.view.v1alpha1.TransactionPlannerRequest.Output - (*TransactionPlannerRequest_Swap)(nil), // 51: penumbra.view.v1alpha1.TransactionPlannerRequest.Swap - (*TransactionPlannerRequest_SwapClaim)(nil), // 52: penumbra.view.v1alpha1.TransactionPlannerRequest.SwapClaim - (*TransactionPlannerRequest_Delegate)(nil), // 53: penumbra.view.v1alpha1.TransactionPlannerRequest.Delegate - (*TransactionPlannerRequest_Undelegate)(nil), // 54: penumbra.view.v1alpha1.TransactionPlannerRequest.Undelegate - (*TransactionPlannerRequest_PositionOpen)(nil), // 55: penumbra.view.v1alpha1.TransactionPlannerRequest.PositionOpen - (*TransactionPlannerRequest_PositionClose)(nil), // 56: penumbra.view.v1alpha1.TransactionPlannerRequest.PositionClose - (*TransactionPlannerRequest_PositionWithdraw)(nil), // 57: penumbra.view.v1alpha1.TransactionPlannerRequest.PositionWithdraw - (*v1alpha1.TransactionPlan)(nil), // 58: penumbra.core.transaction.v1alpha1.TransactionPlan - (*v1alpha1.AuthorizationData)(nil), // 59: penumbra.core.transaction.v1alpha1.AuthorizationData - (*v1alpha1.Transaction)(nil), // 60: penumbra.core.transaction.v1alpha1.Transaction - (*v1alpha1.Id)(nil), // 61: penumbra.core.transaction.v1alpha1.Id - (*v1alpha11.Fee)(nil), // 62: penumbra.core.crypto.v1alpha1.Fee - (*v1alpha1.MemoPlaintext)(nil), // 63: penumbra.core.transaction.v1alpha1.MemoPlaintext - (*v1alpha11.AccountGroupId)(nil), // 64: penumbra.core.crypto.v1alpha1.AccountGroupId - (*v1alpha12.IbcAction)(nil), // 65: penumbra.core.ibc.v1alpha1.IbcAction - (*v1alpha11.AddressIndex)(nil), // 66: penumbra.core.crypto.v1alpha1.AddressIndex - (*v1alpha11.Address)(nil), // 67: penumbra.core.crypto.v1alpha1.Address - (*v1alpha11.AssetId)(nil), // 68: penumbra.core.crypto.v1alpha1.AssetId - (*v1alpha11.Value)(nil), // 69: penumbra.core.crypto.v1alpha1.Value - (*v1alpha11.FullViewingKey)(nil), // 70: penumbra.core.crypto.v1alpha1.FullViewingKey - (*v1alpha11.Amount)(nil), // 71: penumbra.core.crypto.v1alpha1.Amount - (*v1alpha11.StateCommitment)(nil), // 72: penumbra.core.crypto.v1alpha1.StateCommitment - (*v1alpha1.WitnessData)(nil), // 73: penumbra.core.transaction.v1alpha1.WitnessData - (*v1alpha11.Denom)(nil), // 74: penumbra.core.crypto.v1alpha1.Denom - (*v1alpha11.DenomMetadata)(nil), // 75: penumbra.core.crypto.v1alpha1.DenomMetadata - (*v1alpha13.ChainParameters)(nil), // 76: penumbra.core.chain.v1alpha1.ChainParameters - (*v1alpha13.FmdParameters)(nil), // 77: penumbra.core.chain.v1alpha1.FmdParameters - (*v1alpha11.Nullifier)(nil), // 78: penumbra.core.crypto.v1alpha1.Nullifier - (*v1alpha1.TransactionPerspective)(nil), // 79: penumbra.core.transaction.v1alpha1.TransactionPerspective - (*v1alpha1.TransactionView)(nil), // 80: penumbra.core.transaction.v1alpha1.TransactionView - (*v1alpha11.IdentityKey)(nil), // 81: penumbra.core.crypto.v1alpha1.IdentityKey - (*v1alpha11.Note)(nil), // 82: penumbra.core.crypto.v1alpha1.Note - (*v1alpha13.NoteSource)(nil), // 83: penumbra.core.chain.v1alpha1.NoteSource - (*v1alpha14.SwapPlaintext)(nil), // 84: penumbra.core.dex.v1alpha1.SwapPlaintext - (*v1alpha14.BatchSwapOutputData)(nil), // 85: penumbra.core.dex.v1alpha1.BatchSwapOutputData - (*v1alpha14.PositionState)(nil), // 86: penumbra.core.dex.v1alpha1.PositionState - (*v1alpha14.TradingPair)(nil), // 87: penumbra.core.dex.v1alpha1.TradingPair - (*v1alpha14.PositionId)(nil), // 88: penumbra.core.dex.v1alpha1.PositionId - (*v1alpha15.RateData)(nil), // 89: penumbra.core.stake.v1alpha1.RateData - (*v1alpha14.Position)(nil), // 90: penumbra.core.dex.v1alpha1.Position - (*v1alpha14.Reserves)(nil), // 91: penumbra.core.dex.v1alpha1.Reserves + (*UnclaimedSwapsRequest)(nil), // 37: penumbra.view.v1alpha1.UnclaimedSwapsRequest + (*UnclaimedSwapsResponse)(nil), // 38: penumbra.view.v1alpha1.UnclaimedSwapsResponse + (*NullifierStatusRequest)(nil), // 39: penumbra.view.v1alpha1.NullifierStatusRequest + (*NullifierStatusResponse)(nil), // 40: penumbra.view.v1alpha1.NullifierStatusResponse + (*TransactionInfoByHashRequest)(nil), // 41: penumbra.view.v1alpha1.TransactionInfoByHashRequest + (*TransactionInfoRequest)(nil), // 42: penumbra.view.v1alpha1.TransactionInfoRequest + (*TransactionInfo)(nil), // 43: penumbra.view.v1alpha1.TransactionInfo + (*TransactionInfoResponse)(nil), // 44: penumbra.view.v1alpha1.TransactionInfoResponse + (*TransactionInfoByHashResponse)(nil), // 45: penumbra.view.v1alpha1.TransactionInfoByHashResponse + (*NotesResponse)(nil), // 46: penumbra.view.v1alpha1.NotesResponse + (*NotesForVotingResponse)(nil), // 47: penumbra.view.v1alpha1.NotesForVotingResponse + (*SpendableNoteRecord)(nil), // 48: penumbra.view.v1alpha1.SpendableNoteRecord + (*SwapRecord)(nil), // 49: penumbra.view.v1alpha1.SwapRecord + (*OwnedPositionIdsRequest)(nil), // 50: penumbra.view.v1alpha1.OwnedPositionIdsRequest + (*OwnedPositionIdsResponse)(nil), // 51: penumbra.view.v1alpha1.OwnedPositionIdsResponse + (*TransactionPlannerRequest_Output)(nil), // 52: penumbra.view.v1alpha1.TransactionPlannerRequest.Output + (*TransactionPlannerRequest_Swap)(nil), // 53: penumbra.view.v1alpha1.TransactionPlannerRequest.Swap + (*TransactionPlannerRequest_SwapClaim)(nil), // 54: penumbra.view.v1alpha1.TransactionPlannerRequest.SwapClaim + (*TransactionPlannerRequest_Delegate)(nil), // 55: penumbra.view.v1alpha1.TransactionPlannerRequest.Delegate + (*TransactionPlannerRequest_Undelegate)(nil), // 56: penumbra.view.v1alpha1.TransactionPlannerRequest.Undelegate + (*TransactionPlannerRequest_PositionOpen)(nil), // 57: penumbra.view.v1alpha1.TransactionPlannerRequest.PositionOpen + (*TransactionPlannerRequest_PositionClose)(nil), // 58: penumbra.view.v1alpha1.TransactionPlannerRequest.PositionClose + (*TransactionPlannerRequest_PositionWithdraw)(nil), // 59: penumbra.view.v1alpha1.TransactionPlannerRequest.PositionWithdraw + (*v1alpha1.TransactionPlan)(nil), // 60: penumbra.core.transaction.v1alpha1.TransactionPlan + (*v1alpha1.AuthorizationData)(nil), // 61: penumbra.core.transaction.v1alpha1.AuthorizationData + (*v1alpha1.Transaction)(nil), // 62: penumbra.core.transaction.v1alpha1.Transaction + (*v1alpha1.Id)(nil), // 63: penumbra.core.transaction.v1alpha1.Id + (*v1alpha11.Fee)(nil), // 64: penumbra.core.crypto.v1alpha1.Fee + (*v1alpha1.MemoPlaintext)(nil), // 65: penumbra.core.transaction.v1alpha1.MemoPlaintext + (*v1alpha11.AccountGroupId)(nil), // 66: penumbra.core.crypto.v1alpha1.AccountGroupId + (*v1alpha12.IbcAction)(nil), // 67: penumbra.core.ibc.v1alpha1.IbcAction + (*v1alpha11.AddressIndex)(nil), // 68: penumbra.core.crypto.v1alpha1.AddressIndex + (*v1alpha11.Address)(nil), // 69: penumbra.core.crypto.v1alpha1.Address + (*v1alpha11.AssetId)(nil), // 70: penumbra.core.crypto.v1alpha1.AssetId + (*v1alpha11.Value)(nil), // 71: penumbra.core.crypto.v1alpha1.Value + (*v1alpha11.FullViewingKey)(nil), // 72: penumbra.core.crypto.v1alpha1.FullViewingKey + (*v1alpha11.Amount)(nil), // 73: penumbra.core.crypto.v1alpha1.Amount + (*v1alpha11.StateCommitment)(nil), // 74: penumbra.core.crypto.v1alpha1.StateCommitment + (*v1alpha1.WitnessData)(nil), // 75: penumbra.core.transaction.v1alpha1.WitnessData + (*v1alpha11.Denom)(nil), // 76: penumbra.core.crypto.v1alpha1.Denom + (*v1alpha11.DenomMetadata)(nil), // 77: penumbra.core.crypto.v1alpha1.DenomMetadata + (*v1alpha13.ChainParameters)(nil), // 78: penumbra.core.chain.v1alpha1.ChainParameters + (*v1alpha13.FmdParameters)(nil), // 79: penumbra.core.chain.v1alpha1.FmdParameters + (*v1alpha11.Nullifier)(nil), // 80: penumbra.core.crypto.v1alpha1.Nullifier + (*v1alpha1.TransactionPerspective)(nil), // 81: penumbra.core.transaction.v1alpha1.TransactionPerspective + (*v1alpha1.TransactionView)(nil), // 82: penumbra.core.transaction.v1alpha1.TransactionView + (*v1alpha11.IdentityKey)(nil), // 83: penumbra.core.crypto.v1alpha1.IdentityKey + (*v1alpha11.Note)(nil), // 84: penumbra.core.crypto.v1alpha1.Note + (*v1alpha13.NoteSource)(nil), // 85: penumbra.core.chain.v1alpha1.NoteSource + (*v1alpha14.SwapPlaintext)(nil), // 86: penumbra.core.dex.v1alpha1.SwapPlaintext + (*v1alpha14.BatchSwapOutputData)(nil), // 87: penumbra.core.dex.v1alpha1.BatchSwapOutputData + (*v1alpha14.PositionState)(nil), // 88: penumbra.core.dex.v1alpha1.PositionState + (*v1alpha14.TradingPair)(nil), // 89: penumbra.core.dex.v1alpha1.TradingPair + (*v1alpha14.PositionId)(nil), // 90: penumbra.core.dex.v1alpha1.PositionId + (*v1alpha15.RateData)(nil), // 91: penumbra.core.stake.v1alpha1.RateData + (*v1alpha14.Position)(nil), // 92: penumbra.core.dex.v1alpha1.Position + (*v1alpha14.Reserves)(nil), // 93: penumbra.core.dex.v1alpha1.Reserves } var file_penumbra_view_v1alpha1_view_proto_depIdxs = []int32{ - 58, // 0: penumbra.view.v1alpha1.AuthorizeAndBuildRequest.transaction_plan:type_name -> penumbra.core.transaction.v1alpha1.TransactionPlan - 59, // 1: penumbra.view.v1alpha1.AuthorizeAndBuildRequest.authorization_data:type_name -> penumbra.core.transaction.v1alpha1.AuthorizationData - 60, // 2: penumbra.view.v1alpha1.AuthorizeAndBuildResponse.transaction:type_name -> penumbra.core.transaction.v1alpha1.Transaction - 60, // 3: penumbra.view.v1alpha1.BroadcastTransactionRequest.transaction:type_name -> penumbra.core.transaction.v1alpha1.Transaction - 61, // 4: penumbra.view.v1alpha1.BroadcastTransactionResponse.id:type_name -> penumbra.core.transaction.v1alpha1.Id - 62, // 5: penumbra.view.v1alpha1.TransactionPlannerRequest.fee:type_name -> penumbra.core.crypto.v1alpha1.Fee - 63, // 6: penumbra.view.v1alpha1.TransactionPlannerRequest.memo:type_name -> penumbra.core.transaction.v1alpha1.MemoPlaintext - 64, // 7: penumbra.view.v1alpha1.TransactionPlannerRequest.account_group_id:type_name -> penumbra.core.crypto.v1alpha1.AccountGroupId - 50, // 8: penumbra.view.v1alpha1.TransactionPlannerRequest.outputs:type_name -> penumbra.view.v1alpha1.TransactionPlannerRequest.Output - 51, // 9: penumbra.view.v1alpha1.TransactionPlannerRequest.swaps:type_name -> penumbra.view.v1alpha1.TransactionPlannerRequest.Swap - 52, // 10: penumbra.view.v1alpha1.TransactionPlannerRequest.swap_claims:type_name -> penumbra.view.v1alpha1.TransactionPlannerRequest.SwapClaim - 53, // 11: penumbra.view.v1alpha1.TransactionPlannerRequest.delegations:type_name -> penumbra.view.v1alpha1.TransactionPlannerRequest.Delegate - 54, // 12: penumbra.view.v1alpha1.TransactionPlannerRequest.undelegations:type_name -> penumbra.view.v1alpha1.TransactionPlannerRequest.Undelegate - 65, // 13: penumbra.view.v1alpha1.TransactionPlannerRequest.ibc_actions:type_name -> penumbra.core.ibc.v1alpha1.IbcAction - 55, // 14: penumbra.view.v1alpha1.TransactionPlannerRequest.position_opens:type_name -> penumbra.view.v1alpha1.TransactionPlannerRequest.PositionOpen - 56, // 15: penumbra.view.v1alpha1.TransactionPlannerRequest.position_closes:type_name -> penumbra.view.v1alpha1.TransactionPlannerRequest.PositionClose - 57, // 16: penumbra.view.v1alpha1.TransactionPlannerRequest.position_withdraws:type_name -> penumbra.view.v1alpha1.TransactionPlannerRequest.PositionWithdraw - 58, // 17: penumbra.view.v1alpha1.TransactionPlannerResponse.plan:type_name -> penumbra.core.transaction.v1alpha1.TransactionPlan - 66, // 18: penumbra.view.v1alpha1.AddressByIndexRequest.address_index:type_name -> penumbra.core.crypto.v1alpha1.AddressIndex - 67, // 19: penumbra.view.v1alpha1.AddressByIndexResponse.address:type_name -> penumbra.core.crypto.v1alpha1.Address - 67, // 20: penumbra.view.v1alpha1.IndexByAddressRequest.address:type_name -> penumbra.core.crypto.v1alpha1.Address - 66, // 21: penumbra.view.v1alpha1.IndexByAddressResponse.address_index:type_name -> penumbra.core.crypto.v1alpha1.AddressIndex - 66, // 22: penumbra.view.v1alpha1.EphemeralAddressRequest.address_index:type_name -> penumbra.core.crypto.v1alpha1.AddressIndex - 67, // 23: penumbra.view.v1alpha1.EphemeralAddressResponse.address:type_name -> penumbra.core.crypto.v1alpha1.Address - 66, // 24: penumbra.view.v1alpha1.BalancesRequest.account_filter:type_name -> penumbra.core.crypto.v1alpha1.AddressIndex - 68, // 25: penumbra.view.v1alpha1.BalancesRequest.asset_id_filter:type_name -> penumbra.core.crypto.v1alpha1.AssetId - 66, // 26: penumbra.view.v1alpha1.BalancesResponse.account:type_name -> penumbra.core.crypto.v1alpha1.AddressIndex - 69, // 27: penumbra.view.v1alpha1.BalancesResponse.balance:type_name -> penumbra.core.crypto.v1alpha1.Value - 70, // 28: penumbra.view.v1alpha1.ViewAuthRequest.fvk:type_name -> penumbra.core.crypto.v1alpha1.FullViewingKey + 60, // 0: penumbra.view.v1alpha1.AuthorizeAndBuildRequest.transaction_plan:type_name -> penumbra.core.transaction.v1alpha1.TransactionPlan + 61, // 1: penumbra.view.v1alpha1.AuthorizeAndBuildRequest.authorization_data:type_name -> penumbra.core.transaction.v1alpha1.AuthorizationData + 62, // 2: penumbra.view.v1alpha1.AuthorizeAndBuildResponse.transaction:type_name -> penumbra.core.transaction.v1alpha1.Transaction + 62, // 3: penumbra.view.v1alpha1.BroadcastTransactionRequest.transaction:type_name -> penumbra.core.transaction.v1alpha1.Transaction + 63, // 4: penumbra.view.v1alpha1.BroadcastTransactionResponse.id:type_name -> penumbra.core.transaction.v1alpha1.Id + 64, // 5: penumbra.view.v1alpha1.TransactionPlannerRequest.fee:type_name -> penumbra.core.crypto.v1alpha1.Fee + 65, // 6: penumbra.view.v1alpha1.TransactionPlannerRequest.memo:type_name -> penumbra.core.transaction.v1alpha1.MemoPlaintext + 66, // 7: penumbra.view.v1alpha1.TransactionPlannerRequest.account_group_id:type_name -> penumbra.core.crypto.v1alpha1.AccountGroupId + 52, // 8: penumbra.view.v1alpha1.TransactionPlannerRequest.outputs:type_name -> penumbra.view.v1alpha1.TransactionPlannerRequest.Output + 53, // 9: penumbra.view.v1alpha1.TransactionPlannerRequest.swaps:type_name -> penumbra.view.v1alpha1.TransactionPlannerRequest.Swap + 54, // 10: penumbra.view.v1alpha1.TransactionPlannerRequest.swap_claims:type_name -> penumbra.view.v1alpha1.TransactionPlannerRequest.SwapClaim + 55, // 11: penumbra.view.v1alpha1.TransactionPlannerRequest.delegations:type_name -> penumbra.view.v1alpha1.TransactionPlannerRequest.Delegate + 56, // 12: penumbra.view.v1alpha1.TransactionPlannerRequest.undelegations:type_name -> penumbra.view.v1alpha1.TransactionPlannerRequest.Undelegate + 67, // 13: penumbra.view.v1alpha1.TransactionPlannerRequest.ibc_actions:type_name -> penumbra.core.ibc.v1alpha1.IbcAction + 57, // 14: penumbra.view.v1alpha1.TransactionPlannerRequest.position_opens:type_name -> penumbra.view.v1alpha1.TransactionPlannerRequest.PositionOpen + 58, // 15: penumbra.view.v1alpha1.TransactionPlannerRequest.position_closes:type_name -> penumbra.view.v1alpha1.TransactionPlannerRequest.PositionClose + 59, // 16: penumbra.view.v1alpha1.TransactionPlannerRequest.position_withdraws:type_name -> penumbra.view.v1alpha1.TransactionPlannerRequest.PositionWithdraw + 60, // 17: penumbra.view.v1alpha1.TransactionPlannerResponse.plan:type_name -> penumbra.core.transaction.v1alpha1.TransactionPlan + 68, // 18: penumbra.view.v1alpha1.AddressByIndexRequest.address_index:type_name -> penumbra.core.crypto.v1alpha1.AddressIndex + 69, // 19: penumbra.view.v1alpha1.AddressByIndexResponse.address:type_name -> penumbra.core.crypto.v1alpha1.Address + 69, // 20: penumbra.view.v1alpha1.IndexByAddressRequest.address:type_name -> penumbra.core.crypto.v1alpha1.Address + 68, // 21: penumbra.view.v1alpha1.IndexByAddressResponse.address_index:type_name -> penumbra.core.crypto.v1alpha1.AddressIndex + 68, // 22: penumbra.view.v1alpha1.EphemeralAddressRequest.address_index:type_name -> penumbra.core.crypto.v1alpha1.AddressIndex + 69, // 23: penumbra.view.v1alpha1.EphemeralAddressResponse.address:type_name -> penumbra.core.crypto.v1alpha1.Address + 68, // 24: penumbra.view.v1alpha1.BalancesRequest.account_filter:type_name -> penumbra.core.crypto.v1alpha1.AddressIndex + 70, // 25: penumbra.view.v1alpha1.BalancesRequest.asset_id_filter:type_name -> penumbra.core.crypto.v1alpha1.AssetId + 68, // 26: penumbra.view.v1alpha1.BalancesResponse.account:type_name -> penumbra.core.crypto.v1alpha1.AddressIndex + 71, // 27: penumbra.view.v1alpha1.BalancesResponse.balance:type_name -> penumbra.core.crypto.v1alpha1.Value + 72, // 28: penumbra.view.v1alpha1.ViewAuthRequest.fvk:type_name -> penumbra.core.crypto.v1alpha1.FullViewingKey 14, // 29: penumbra.view.v1alpha1.ViewAuthResponse.token:type_name -> penumbra.view.v1alpha1.ViewAuthToken - 64, // 30: penumbra.view.v1alpha1.StatusRequest.account_group_id:type_name -> penumbra.core.crypto.v1alpha1.AccountGroupId - 64, // 31: penumbra.view.v1alpha1.StatusStreamRequest.account_group_id:type_name -> penumbra.core.crypto.v1alpha1.AccountGroupId - 68, // 32: penumbra.view.v1alpha1.NotesRequest.asset_id:type_name -> penumbra.core.crypto.v1alpha1.AssetId - 66, // 33: penumbra.view.v1alpha1.NotesRequest.address_index:type_name -> penumbra.core.crypto.v1alpha1.AddressIndex - 71, // 34: penumbra.view.v1alpha1.NotesRequest.amount_to_spend:type_name -> penumbra.core.crypto.v1alpha1.Amount - 64, // 35: penumbra.view.v1alpha1.NotesRequest.account_group_id:type_name -> penumbra.core.crypto.v1alpha1.AccountGroupId - 66, // 36: penumbra.view.v1alpha1.NotesForVotingRequest.address_index:type_name -> penumbra.core.crypto.v1alpha1.AddressIndex - 64, // 37: penumbra.view.v1alpha1.NotesForVotingRequest.account_group_id:type_name -> penumbra.core.crypto.v1alpha1.AccountGroupId - 72, // 38: penumbra.view.v1alpha1.WitnessRequest.note_commitments:type_name -> penumbra.core.crypto.v1alpha1.StateCommitment - 58, // 39: penumbra.view.v1alpha1.WitnessRequest.transaction_plan:type_name -> penumbra.core.transaction.v1alpha1.TransactionPlan - 64, // 40: penumbra.view.v1alpha1.WitnessRequest.account_group_id:type_name -> penumbra.core.crypto.v1alpha1.AccountGroupId - 73, // 41: penumbra.view.v1alpha1.WitnessResponse.witness_data:type_name -> penumbra.core.transaction.v1alpha1.WitnessData - 58, // 42: penumbra.view.v1alpha1.WitnessAndBuildRequest.transaction_plan:type_name -> penumbra.core.transaction.v1alpha1.TransactionPlan - 59, // 43: penumbra.view.v1alpha1.WitnessAndBuildRequest.authorization_data:type_name -> penumbra.core.transaction.v1alpha1.AuthorizationData - 60, // 44: penumbra.view.v1alpha1.WitnessAndBuildResponse.transaction:type_name -> penumbra.core.transaction.v1alpha1.Transaction - 74, // 45: penumbra.view.v1alpha1.AssetsRequest.include_specific_denominations:type_name -> penumbra.core.crypto.v1alpha1.Denom - 75, // 46: penumbra.view.v1alpha1.AssetsResponse.denom_metadata:type_name -> penumbra.core.crypto.v1alpha1.DenomMetadata - 76, // 47: penumbra.view.v1alpha1.ChainParametersResponse.parameters:type_name -> penumbra.core.chain.v1alpha1.ChainParameters - 77, // 48: penumbra.view.v1alpha1.FMDParametersResponse.parameters:type_name -> penumbra.core.chain.v1alpha1.FmdParameters - 72, // 49: penumbra.view.v1alpha1.NoteByCommitmentRequest.note_commitment:type_name -> penumbra.core.crypto.v1alpha1.StateCommitment - 64, // 50: penumbra.view.v1alpha1.NoteByCommitmentRequest.account_group_id:type_name -> penumbra.core.crypto.v1alpha1.AccountGroupId - 46, // 51: penumbra.view.v1alpha1.NoteByCommitmentResponse.spendable_note:type_name -> penumbra.view.v1alpha1.SpendableNoteRecord - 72, // 52: penumbra.view.v1alpha1.SwapByCommitmentRequest.swap_commitment:type_name -> penumbra.core.crypto.v1alpha1.StateCommitment - 64, // 53: penumbra.view.v1alpha1.SwapByCommitmentRequest.account_group_id:type_name -> penumbra.core.crypto.v1alpha1.AccountGroupId - 47, // 54: penumbra.view.v1alpha1.SwapByCommitmentResponse.swap:type_name -> penumbra.view.v1alpha1.SwapRecord - 78, // 55: penumbra.view.v1alpha1.NullifierStatusRequest.nullifier:type_name -> penumbra.core.crypto.v1alpha1.Nullifier - 64, // 56: penumbra.view.v1alpha1.NullifierStatusRequest.account_group_id:type_name -> penumbra.core.crypto.v1alpha1.AccountGroupId - 61, // 57: penumbra.view.v1alpha1.TransactionInfoByHashRequest.id:type_name -> penumbra.core.transaction.v1alpha1.Id - 61, // 58: penumbra.view.v1alpha1.TransactionInfo.id:type_name -> penumbra.core.transaction.v1alpha1.Id - 60, // 59: penumbra.view.v1alpha1.TransactionInfo.transaction:type_name -> penumbra.core.transaction.v1alpha1.Transaction - 79, // 60: penumbra.view.v1alpha1.TransactionInfo.perspective:type_name -> penumbra.core.transaction.v1alpha1.TransactionPerspective - 80, // 61: penumbra.view.v1alpha1.TransactionInfo.view:type_name -> penumbra.core.transaction.v1alpha1.TransactionView - 41, // 62: penumbra.view.v1alpha1.TransactionInfoResponse.tx_info:type_name -> penumbra.view.v1alpha1.TransactionInfo - 41, // 63: penumbra.view.v1alpha1.TransactionInfoByHashResponse.tx_info:type_name -> penumbra.view.v1alpha1.TransactionInfo - 46, // 64: penumbra.view.v1alpha1.NotesResponse.note_record:type_name -> penumbra.view.v1alpha1.SpendableNoteRecord - 46, // 65: penumbra.view.v1alpha1.NotesForVotingResponse.note_record:type_name -> penumbra.view.v1alpha1.SpendableNoteRecord - 81, // 66: penumbra.view.v1alpha1.NotesForVotingResponse.identity_key:type_name -> penumbra.core.crypto.v1alpha1.IdentityKey - 72, // 67: penumbra.view.v1alpha1.SpendableNoteRecord.note_commitment:type_name -> penumbra.core.crypto.v1alpha1.StateCommitment - 82, // 68: penumbra.view.v1alpha1.SpendableNoteRecord.note:type_name -> penumbra.core.crypto.v1alpha1.Note - 66, // 69: penumbra.view.v1alpha1.SpendableNoteRecord.address_index:type_name -> penumbra.core.crypto.v1alpha1.AddressIndex - 78, // 70: penumbra.view.v1alpha1.SpendableNoteRecord.nullifier:type_name -> penumbra.core.crypto.v1alpha1.Nullifier - 83, // 71: penumbra.view.v1alpha1.SpendableNoteRecord.source:type_name -> penumbra.core.chain.v1alpha1.NoteSource - 72, // 72: penumbra.view.v1alpha1.SwapRecord.swap_commitment:type_name -> penumbra.core.crypto.v1alpha1.StateCommitment - 84, // 73: penumbra.view.v1alpha1.SwapRecord.swap:type_name -> penumbra.core.dex.v1alpha1.SwapPlaintext - 78, // 74: penumbra.view.v1alpha1.SwapRecord.nullifier:type_name -> penumbra.core.crypto.v1alpha1.Nullifier - 85, // 75: penumbra.view.v1alpha1.SwapRecord.output_data:type_name -> penumbra.core.dex.v1alpha1.BatchSwapOutputData - 83, // 76: penumbra.view.v1alpha1.SwapRecord.source:type_name -> penumbra.core.chain.v1alpha1.NoteSource - 86, // 77: penumbra.view.v1alpha1.OwnedPositionIdsRequest.position_state:type_name -> penumbra.core.dex.v1alpha1.PositionState - 87, // 78: penumbra.view.v1alpha1.OwnedPositionIdsRequest.trading_pair:type_name -> penumbra.core.dex.v1alpha1.TradingPair - 88, // 79: penumbra.view.v1alpha1.OwnedPositionIdsResponse.position_id:type_name -> penumbra.core.dex.v1alpha1.PositionId - 69, // 80: penumbra.view.v1alpha1.TransactionPlannerRequest.Output.value:type_name -> penumbra.core.crypto.v1alpha1.Value - 67, // 81: penumbra.view.v1alpha1.TransactionPlannerRequest.Output.address:type_name -> penumbra.core.crypto.v1alpha1.Address - 69, // 82: penumbra.view.v1alpha1.TransactionPlannerRequest.Swap.value:type_name -> penumbra.core.crypto.v1alpha1.Value - 68, // 83: penumbra.view.v1alpha1.TransactionPlannerRequest.Swap.target_asset:type_name -> penumbra.core.crypto.v1alpha1.AssetId - 62, // 84: penumbra.view.v1alpha1.TransactionPlannerRequest.Swap.fee:type_name -> penumbra.core.crypto.v1alpha1.Fee - 67, // 85: penumbra.view.v1alpha1.TransactionPlannerRequest.Swap.claim_address:type_name -> penumbra.core.crypto.v1alpha1.Address - 72, // 86: penumbra.view.v1alpha1.TransactionPlannerRequest.SwapClaim.swap_commitment:type_name -> penumbra.core.crypto.v1alpha1.StateCommitment - 71, // 87: penumbra.view.v1alpha1.TransactionPlannerRequest.Delegate.amount:type_name -> penumbra.core.crypto.v1alpha1.Amount - 89, // 88: penumbra.view.v1alpha1.TransactionPlannerRequest.Delegate.rate_data:type_name -> penumbra.core.stake.v1alpha1.RateData - 69, // 89: penumbra.view.v1alpha1.TransactionPlannerRequest.Undelegate.value:type_name -> penumbra.core.crypto.v1alpha1.Value - 89, // 90: penumbra.view.v1alpha1.TransactionPlannerRequest.Undelegate.rate_data:type_name -> penumbra.core.stake.v1alpha1.RateData - 90, // 91: penumbra.view.v1alpha1.TransactionPlannerRequest.PositionOpen.position:type_name -> penumbra.core.dex.v1alpha1.Position - 88, // 92: penumbra.view.v1alpha1.TransactionPlannerRequest.PositionClose.position_id:type_name -> penumbra.core.dex.v1alpha1.PositionId - 88, // 93: penumbra.view.v1alpha1.TransactionPlannerRequest.PositionWithdraw.position_id:type_name -> penumbra.core.dex.v1alpha1.PositionId - 91, // 94: penumbra.view.v1alpha1.TransactionPlannerRequest.PositionWithdraw.reserves:type_name -> penumbra.core.dex.v1alpha1.Reserves - 87, // 95: penumbra.view.v1alpha1.TransactionPlannerRequest.PositionWithdraw.trading_pair:type_name -> penumbra.core.dex.v1alpha1.TradingPair - 17, // 96: penumbra.view.v1alpha1.ViewProtocolService.Status:input_type -> penumbra.view.v1alpha1.StatusRequest - 19, // 97: penumbra.view.v1alpha1.ViewProtocolService.StatusStream:input_type -> penumbra.view.v1alpha1.StatusStreamRequest - 21, // 98: penumbra.view.v1alpha1.ViewProtocolService.Notes:input_type -> penumbra.view.v1alpha1.NotesRequest - 22, // 99: penumbra.view.v1alpha1.ViewProtocolService.NotesForVoting:input_type -> penumbra.view.v1alpha1.NotesForVotingRequest - 23, // 100: penumbra.view.v1alpha1.ViewProtocolService.Witness:input_type -> penumbra.view.v1alpha1.WitnessRequest - 25, // 101: penumbra.view.v1alpha1.ViewProtocolService.WitnessAndBuild:input_type -> penumbra.view.v1alpha1.WitnessAndBuildRequest - 27, // 102: penumbra.view.v1alpha1.ViewProtocolService.Assets:input_type -> penumbra.view.v1alpha1.AssetsRequest - 29, // 103: penumbra.view.v1alpha1.ViewProtocolService.ChainParameters:input_type -> penumbra.view.v1alpha1.ChainParametersRequest - 31, // 104: penumbra.view.v1alpha1.ViewProtocolService.FMDParameters:input_type -> penumbra.view.v1alpha1.FMDParametersRequest - 6, // 105: penumbra.view.v1alpha1.ViewProtocolService.AddressByIndex:input_type -> penumbra.view.v1alpha1.AddressByIndexRequest - 8, // 106: penumbra.view.v1alpha1.ViewProtocolService.IndexByAddress:input_type -> penumbra.view.v1alpha1.IndexByAddressRequest - 10, // 107: penumbra.view.v1alpha1.ViewProtocolService.EphemeralAddress:input_type -> penumbra.view.v1alpha1.EphemeralAddressRequest - 12, // 108: penumbra.view.v1alpha1.ViewProtocolService.Balances:input_type -> penumbra.view.v1alpha1.BalancesRequest - 33, // 109: penumbra.view.v1alpha1.ViewProtocolService.NoteByCommitment:input_type -> penumbra.view.v1alpha1.NoteByCommitmentRequest - 35, // 110: penumbra.view.v1alpha1.ViewProtocolService.SwapByCommitment:input_type -> penumbra.view.v1alpha1.SwapByCommitmentRequest - 37, // 111: penumbra.view.v1alpha1.ViewProtocolService.NullifierStatus:input_type -> penumbra.view.v1alpha1.NullifierStatusRequest - 39, // 112: penumbra.view.v1alpha1.ViewProtocolService.TransactionInfoByHash:input_type -> penumbra.view.v1alpha1.TransactionInfoByHashRequest - 40, // 113: penumbra.view.v1alpha1.ViewProtocolService.TransactionInfo:input_type -> penumbra.view.v1alpha1.TransactionInfoRequest - 4, // 114: penumbra.view.v1alpha1.ViewProtocolService.TransactionPlanner:input_type -> penumbra.view.v1alpha1.TransactionPlannerRequest - 2, // 115: penumbra.view.v1alpha1.ViewProtocolService.BroadcastTransaction:input_type -> penumbra.view.v1alpha1.BroadcastTransactionRequest - 48, // 116: penumbra.view.v1alpha1.ViewProtocolService.OwnedPositionIds:input_type -> penumbra.view.v1alpha1.OwnedPositionIdsRequest - 0, // 117: penumbra.view.v1alpha1.ViewProtocolService.AuthorizeAndBuild:input_type -> penumbra.view.v1alpha1.AuthorizeAndBuildRequest - 15, // 118: penumbra.view.v1alpha1.ViewAuthService.ViewAuth:input_type -> penumbra.view.v1alpha1.ViewAuthRequest - 18, // 119: penumbra.view.v1alpha1.ViewProtocolService.Status:output_type -> penumbra.view.v1alpha1.StatusResponse - 20, // 120: penumbra.view.v1alpha1.ViewProtocolService.StatusStream:output_type -> penumbra.view.v1alpha1.StatusStreamResponse - 44, // 121: penumbra.view.v1alpha1.ViewProtocolService.Notes:output_type -> penumbra.view.v1alpha1.NotesResponse - 45, // 122: penumbra.view.v1alpha1.ViewProtocolService.NotesForVoting:output_type -> penumbra.view.v1alpha1.NotesForVotingResponse - 24, // 123: penumbra.view.v1alpha1.ViewProtocolService.Witness:output_type -> penumbra.view.v1alpha1.WitnessResponse - 26, // 124: penumbra.view.v1alpha1.ViewProtocolService.WitnessAndBuild:output_type -> penumbra.view.v1alpha1.WitnessAndBuildResponse - 28, // 125: penumbra.view.v1alpha1.ViewProtocolService.Assets:output_type -> penumbra.view.v1alpha1.AssetsResponse - 30, // 126: penumbra.view.v1alpha1.ViewProtocolService.ChainParameters:output_type -> penumbra.view.v1alpha1.ChainParametersResponse - 32, // 127: penumbra.view.v1alpha1.ViewProtocolService.FMDParameters:output_type -> penumbra.view.v1alpha1.FMDParametersResponse - 7, // 128: penumbra.view.v1alpha1.ViewProtocolService.AddressByIndex:output_type -> penumbra.view.v1alpha1.AddressByIndexResponse - 9, // 129: penumbra.view.v1alpha1.ViewProtocolService.IndexByAddress:output_type -> penumbra.view.v1alpha1.IndexByAddressResponse - 11, // 130: penumbra.view.v1alpha1.ViewProtocolService.EphemeralAddress:output_type -> penumbra.view.v1alpha1.EphemeralAddressResponse - 13, // 131: penumbra.view.v1alpha1.ViewProtocolService.Balances:output_type -> penumbra.view.v1alpha1.BalancesResponse - 34, // 132: penumbra.view.v1alpha1.ViewProtocolService.NoteByCommitment:output_type -> penumbra.view.v1alpha1.NoteByCommitmentResponse - 36, // 133: penumbra.view.v1alpha1.ViewProtocolService.SwapByCommitment:output_type -> penumbra.view.v1alpha1.SwapByCommitmentResponse - 38, // 134: penumbra.view.v1alpha1.ViewProtocolService.NullifierStatus:output_type -> penumbra.view.v1alpha1.NullifierStatusResponse - 43, // 135: penumbra.view.v1alpha1.ViewProtocolService.TransactionInfoByHash:output_type -> penumbra.view.v1alpha1.TransactionInfoByHashResponse - 42, // 136: penumbra.view.v1alpha1.ViewProtocolService.TransactionInfo:output_type -> penumbra.view.v1alpha1.TransactionInfoResponse - 5, // 137: penumbra.view.v1alpha1.ViewProtocolService.TransactionPlanner:output_type -> penumbra.view.v1alpha1.TransactionPlannerResponse - 3, // 138: penumbra.view.v1alpha1.ViewProtocolService.BroadcastTransaction:output_type -> penumbra.view.v1alpha1.BroadcastTransactionResponse - 49, // 139: penumbra.view.v1alpha1.ViewProtocolService.OwnedPositionIds:output_type -> penumbra.view.v1alpha1.OwnedPositionIdsResponse - 1, // 140: penumbra.view.v1alpha1.ViewProtocolService.AuthorizeAndBuild:output_type -> penumbra.view.v1alpha1.AuthorizeAndBuildResponse - 16, // 141: penumbra.view.v1alpha1.ViewAuthService.ViewAuth:output_type -> penumbra.view.v1alpha1.ViewAuthResponse - 119, // [119:142] is the sub-list for method output_type - 96, // [96:119] is the sub-list for method input_type - 96, // [96:96] is the sub-list for extension type_name - 96, // [96:96] is the sub-list for extension extendee - 0, // [0:96] is the sub-list for field type_name + 66, // 30: penumbra.view.v1alpha1.StatusRequest.account_group_id:type_name -> penumbra.core.crypto.v1alpha1.AccountGroupId + 66, // 31: penumbra.view.v1alpha1.StatusStreamRequest.account_group_id:type_name -> penumbra.core.crypto.v1alpha1.AccountGroupId + 70, // 32: penumbra.view.v1alpha1.NotesRequest.asset_id:type_name -> penumbra.core.crypto.v1alpha1.AssetId + 68, // 33: penumbra.view.v1alpha1.NotesRequest.address_index:type_name -> penumbra.core.crypto.v1alpha1.AddressIndex + 73, // 34: penumbra.view.v1alpha1.NotesRequest.amount_to_spend:type_name -> penumbra.core.crypto.v1alpha1.Amount + 66, // 35: penumbra.view.v1alpha1.NotesRequest.account_group_id:type_name -> penumbra.core.crypto.v1alpha1.AccountGroupId + 68, // 36: penumbra.view.v1alpha1.NotesForVotingRequest.address_index:type_name -> penumbra.core.crypto.v1alpha1.AddressIndex + 66, // 37: penumbra.view.v1alpha1.NotesForVotingRequest.account_group_id:type_name -> penumbra.core.crypto.v1alpha1.AccountGroupId + 74, // 38: penumbra.view.v1alpha1.WitnessRequest.note_commitments:type_name -> penumbra.core.crypto.v1alpha1.StateCommitment + 60, // 39: penumbra.view.v1alpha1.WitnessRequest.transaction_plan:type_name -> penumbra.core.transaction.v1alpha1.TransactionPlan + 66, // 40: penumbra.view.v1alpha1.WitnessRequest.account_group_id:type_name -> penumbra.core.crypto.v1alpha1.AccountGroupId + 75, // 41: penumbra.view.v1alpha1.WitnessResponse.witness_data:type_name -> penumbra.core.transaction.v1alpha1.WitnessData + 60, // 42: penumbra.view.v1alpha1.WitnessAndBuildRequest.transaction_plan:type_name -> penumbra.core.transaction.v1alpha1.TransactionPlan + 61, // 43: penumbra.view.v1alpha1.WitnessAndBuildRequest.authorization_data:type_name -> penumbra.core.transaction.v1alpha1.AuthorizationData + 62, // 44: penumbra.view.v1alpha1.WitnessAndBuildResponse.transaction:type_name -> penumbra.core.transaction.v1alpha1.Transaction + 76, // 45: penumbra.view.v1alpha1.AssetsRequest.include_specific_denominations:type_name -> penumbra.core.crypto.v1alpha1.Denom + 77, // 46: penumbra.view.v1alpha1.AssetsResponse.denom_metadata:type_name -> penumbra.core.crypto.v1alpha1.DenomMetadata + 78, // 47: penumbra.view.v1alpha1.ChainParametersResponse.parameters:type_name -> penumbra.core.chain.v1alpha1.ChainParameters + 79, // 48: penumbra.view.v1alpha1.FMDParametersResponse.parameters:type_name -> penumbra.core.chain.v1alpha1.FmdParameters + 74, // 49: penumbra.view.v1alpha1.NoteByCommitmentRequest.note_commitment:type_name -> penumbra.core.crypto.v1alpha1.StateCommitment + 66, // 50: penumbra.view.v1alpha1.NoteByCommitmentRequest.account_group_id:type_name -> penumbra.core.crypto.v1alpha1.AccountGroupId + 48, // 51: penumbra.view.v1alpha1.NoteByCommitmentResponse.spendable_note:type_name -> penumbra.view.v1alpha1.SpendableNoteRecord + 74, // 52: penumbra.view.v1alpha1.SwapByCommitmentRequest.swap_commitment:type_name -> penumbra.core.crypto.v1alpha1.StateCommitment + 66, // 53: penumbra.view.v1alpha1.SwapByCommitmentRequest.account_group_id:type_name -> penumbra.core.crypto.v1alpha1.AccountGroupId + 49, // 54: penumbra.view.v1alpha1.SwapByCommitmentResponse.swap:type_name -> penumbra.view.v1alpha1.SwapRecord + 66, // 55: penumbra.view.v1alpha1.UnclaimedSwapsRequest.account_group_id:type_name -> penumbra.core.crypto.v1alpha1.AccountGroupId + 49, // 56: penumbra.view.v1alpha1.UnclaimedSwapsResponse.swap:type_name -> penumbra.view.v1alpha1.SwapRecord + 80, // 57: penumbra.view.v1alpha1.NullifierStatusRequest.nullifier:type_name -> penumbra.core.crypto.v1alpha1.Nullifier + 66, // 58: penumbra.view.v1alpha1.NullifierStatusRequest.account_group_id:type_name -> penumbra.core.crypto.v1alpha1.AccountGroupId + 63, // 59: penumbra.view.v1alpha1.TransactionInfoByHashRequest.id:type_name -> penumbra.core.transaction.v1alpha1.Id + 63, // 60: penumbra.view.v1alpha1.TransactionInfo.id:type_name -> penumbra.core.transaction.v1alpha1.Id + 62, // 61: penumbra.view.v1alpha1.TransactionInfo.transaction:type_name -> penumbra.core.transaction.v1alpha1.Transaction + 81, // 62: penumbra.view.v1alpha1.TransactionInfo.perspective:type_name -> penumbra.core.transaction.v1alpha1.TransactionPerspective + 82, // 63: penumbra.view.v1alpha1.TransactionInfo.view:type_name -> penumbra.core.transaction.v1alpha1.TransactionView + 43, // 64: penumbra.view.v1alpha1.TransactionInfoResponse.tx_info:type_name -> penumbra.view.v1alpha1.TransactionInfo + 43, // 65: penumbra.view.v1alpha1.TransactionInfoByHashResponse.tx_info:type_name -> penumbra.view.v1alpha1.TransactionInfo + 48, // 66: penumbra.view.v1alpha1.NotesResponse.note_record:type_name -> penumbra.view.v1alpha1.SpendableNoteRecord + 48, // 67: penumbra.view.v1alpha1.NotesForVotingResponse.note_record:type_name -> penumbra.view.v1alpha1.SpendableNoteRecord + 83, // 68: penumbra.view.v1alpha1.NotesForVotingResponse.identity_key:type_name -> penumbra.core.crypto.v1alpha1.IdentityKey + 74, // 69: penumbra.view.v1alpha1.SpendableNoteRecord.note_commitment:type_name -> penumbra.core.crypto.v1alpha1.StateCommitment + 84, // 70: penumbra.view.v1alpha1.SpendableNoteRecord.note:type_name -> penumbra.core.crypto.v1alpha1.Note + 68, // 71: penumbra.view.v1alpha1.SpendableNoteRecord.address_index:type_name -> penumbra.core.crypto.v1alpha1.AddressIndex + 80, // 72: penumbra.view.v1alpha1.SpendableNoteRecord.nullifier:type_name -> penumbra.core.crypto.v1alpha1.Nullifier + 85, // 73: penumbra.view.v1alpha1.SpendableNoteRecord.source:type_name -> penumbra.core.chain.v1alpha1.NoteSource + 74, // 74: penumbra.view.v1alpha1.SwapRecord.swap_commitment:type_name -> penumbra.core.crypto.v1alpha1.StateCommitment + 86, // 75: penumbra.view.v1alpha1.SwapRecord.swap:type_name -> penumbra.core.dex.v1alpha1.SwapPlaintext + 80, // 76: penumbra.view.v1alpha1.SwapRecord.nullifier:type_name -> penumbra.core.crypto.v1alpha1.Nullifier + 87, // 77: penumbra.view.v1alpha1.SwapRecord.output_data:type_name -> penumbra.core.dex.v1alpha1.BatchSwapOutputData + 85, // 78: penumbra.view.v1alpha1.SwapRecord.source:type_name -> penumbra.core.chain.v1alpha1.NoteSource + 88, // 79: penumbra.view.v1alpha1.OwnedPositionIdsRequest.position_state:type_name -> penumbra.core.dex.v1alpha1.PositionState + 89, // 80: penumbra.view.v1alpha1.OwnedPositionIdsRequest.trading_pair:type_name -> penumbra.core.dex.v1alpha1.TradingPair + 90, // 81: penumbra.view.v1alpha1.OwnedPositionIdsResponse.position_id:type_name -> penumbra.core.dex.v1alpha1.PositionId + 71, // 82: penumbra.view.v1alpha1.TransactionPlannerRequest.Output.value:type_name -> penumbra.core.crypto.v1alpha1.Value + 69, // 83: penumbra.view.v1alpha1.TransactionPlannerRequest.Output.address:type_name -> penumbra.core.crypto.v1alpha1.Address + 71, // 84: penumbra.view.v1alpha1.TransactionPlannerRequest.Swap.value:type_name -> penumbra.core.crypto.v1alpha1.Value + 70, // 85: penumbra.view.v1alpha1.TransactionPlannerRequest.Swap.target_asset:type_name -> penumbra.core.crypto.v1alpha1.AssetId + 64, // 86: penumbra.view.v1alpha1.TransactionPlannerRequest.Swap.fee:type_name -> penumbra.core.crypto.v1alpha1.Fee + 69, // 87: penumbra.view.v1alpha1.TransactionPlannerRequest.Swap.claim_address:type_name -> penumbra.core.crypto.v1alpha1.Address + 74, // 88: penumbra.view.v1alpha1.TransactionPlannerRequest.SwapClaim.swap_commitment:type_name -> penumbra.core.crypto.v1alpha1.StateCommitment + 73, // 89: penumbra.view.v1alpha1.TransactionPlannerRequest.Delegate.amount:type_name -> penumbra.core.crypto.v1alpha1.Amount + 91, // 90: penumbra.view.v1alpha1.TransactionPlannerRequest.Delegate.rate_data:type_name -> penumbra.core.stake.v1alpha1.RateData + 71, // 91: penumbra.view.v1alpha1.TransactionPlannerRequest.Undelegate.value:type_name -> penumbra.core.crypto.v1alpha1.Value + 91, // 92: penumbra.view.v1alpha1.TransactionPlannerRequest.Undelegate.rate_data:type_name -> penumbra.core.stake.v1alpha1.RateData + 92, // 93: penumbra.view.v1alpha1.TransactionPlannerRequest.PositionOpen.position:type_name -> penumbra.core.dex.v1alpha1.Position + 90, // 94: penumbra.view.v1alpha1.TransactionPlannerRequest.PositionClose.position_id:type_name -> penumbra.core.dex.v1alpha1.PositionId + 90, // 95: penumbra.view.v1alpha1.TransactionPlannerRequest.PositionWithdraw.position_id:type_name -> penumbra.core.dex.v1alpha1.PositionId + 93, // 96: penumbra.view.v1alpha1.TransactionPlannerRequest.PositionWithdraw.reserves:type_name -> penumbra.core.dex.v1alpha1.Reserves + 89, // 97: penumbra.view.v1alpha1.TransactionPlannerRequest.PositionWithdraw.trading_pair:type_name -> penumbra.core.dex.v1alpha1.TradingPair + 17, // 98: penumbra.view.v1alpha1.ViewProtocolService.Status:input_type -> penumbra.view.v1alpha1.StatusRequest + 19, // 99: penumbra.view.v1alpha1.ViewProtocolService.StatusStream:input_type -> penumbra.view.v1alpha1.StatusStreamRequest + 21, // 100: penumbra.view.v1alpha1.ViewProtocolService.Notes:input_type -> penumbra.view.v1alpha1.NotesRequest + 22, // 101: penumbra.view.v1alpha1.ViewProtocolService.NotesForVoting:input_type -> penumbra.view.v1alpha1.NotesForVotingRequest + 23, // 102: penumbra.view.v1alpha1.ViewProtocolService.Witness:input_type -> penumbra.view.v1alpha1.WitnessRequest + 25, // 103: penumbra.view.v1alpha1.ViewProtocolService.WitnessAndBuild:input_type -> penumbra.view.v1alpha1.WitnessAndBuildRequest + 27, // 104: penumbra.view.v1alpha1.ViewProtocolService.Assets:input_type -> penumbra.view.v1alpha1.AssetsRequest + 29, // 105: penumbra.view.v1alpha1.ViewProtocolService.ChainParameters:input_type -> penumbra.view.v1alpha1.ChainParametersRequest + 31, // 106: penumbra.view.v1alpha1.ViewProtocolService.FMDParameters:input_type -> penumbra.view.v1alpha1.FMDParametersRequest + 6, // 107: penumbra.view.v1alpha1.ViewProtocolService.AddressByIndex:input_type -> penumbra.view.v1alpha1.AddressByIndexRequest + 8, // 108: penumbra.view.v1alpha1.ViewProtocolService.IndexByAddress:input_type -> penumbra.view.v1alpha1.IndexByAddressRequest + 10, // 109: penumbra.view.v1alpha1.ViewProtocolService.EphemeralAddress:input_type -> penumbra.view.v1alpha1.EphemeralAddressRequest + 12, // 110: penumbra.view.v1alpha1.ViewProtocolService.Balances:input_type -> penumbra.view.v1alpha1.BalancesRequest + 33, // 111: penumbra.view.v1alpha1.ViewProtocolService.NoteByCommitment:input_type -> penumbra.view.v1alpha1.NoteByCommitmentRequest + 35, // 112: penumbra.view.v1alpha1.ViewProtocolService.SwapByCommitment:input_type -> penumbra.view.v1alpha1.SwapByCommitmentRequest + 37, // 113: penumbra.view.v1alpha1.ViewProtocolService.UnclaimedSwaps:input_type -> penumbra.view.v1alpha1.UnclaimedSwapsRequest + 39, // 114: penumbra.view.v1alpha1.ViewProtocolService.NullifierStatus:input_type -> penumbra.view.v1alpha1.NullifierStatusRequest + 41, // 115: penumbra.view.v1alpha1.ViewProtocolService.TransactionInfoByHash:input_type -> penumbra.view.v1alpha1.TransactionInfoByHashRequest + 42, // 116: penumbra.view.v1alpha1.ViewProtocolService.TransactionInfo:input_type -> penumbra.view.v1alpha1.TransactionInfoRequest + 4, // 117: penumbra.view.v1alpha1.ViewProtocolService.TransactionPlanner:input_type -> penumbra.view.v1alpha1.TransactionPlannerRequest + 2, // 118: penumbra.view.v1alpha1.ViewProtocolService.BroadcastTransaction:input_type -> penumbra.view.v1alpha1.BroadcastTransactionRequest + 50, // 119: penumbra.view.v1alpha1.ViewProtocolService.OwnedPositionIds:input_type -> penumbra.view.v1alpha1.OwnedPositionIdsRequest + 0, // 120: penumbra.view.v1alpha1.ViewProtocolService.AuthorizeAndBuild:input_type -> penumbra.view.v1alpha1.AuthorizeAndBuildRequest + 15, // 121: penumbra.view.v1alpha1.ViewAuthService.ViewAuth:input_type -> penumbra.view.v1alpha1.ViewAuthRequest + 18, // 122: penumbra.view.v1alpha1.ViewProtocolService.Status:output_type -> penumbra.view.v1alpha1.StatusResponse + 20, // 123: penumbra.view.v1alpha1.ViewProtocolService.StatusStream:output_type -> penumbra.view.v1alpha1.StatusStreamResponse + 46, // 124: penumbra.view.v1alpha1.ViewProtocolService.Notes:output_type -> penumbra.view.v1alpha1.NotesResponse + 47, // 125: penumbra.view.v1alpha1.ViewProtocolService.NotesForVoting:output_type -> penumbra.view.v1alpha1.NotesForVotingResponse + 24, // 126: penumbra.view.v1alpha1.ViewProtocolService.Witness:output_type -> penumbra.view.v1alpha1.WitnessResponse + 26, // 127: penumbra.view.v1alpha1.ViewProtocolService.WitnessAndBuild:output_type -> penumbra.view.v1alpha1.WitnessAndBuildResponse + 28, // 128: penumbra.view.v1alpha1.ViewProtocolService.Assets:output_type -> penumbra.view.v1alpha1.AssetsResponse + 30, // 129: penumbra.view.v1alpha1.ViewProtocolService.ChainParameters:output_type -> penumbra.view.v1alpha1.ChainParametersResponse + 32, // 130: penumbra.view.v1alpha1.ViewProtocolService.FMDParameters:output_type -> penumbra.view.v1alpha1.FMDParametersResponse + 7, // 131: penumbra.view.v1alpha1.ViewProtocolService.AddressByIndex:output_type -> penumbra.view.v1alpha1.AddressByIndexResponse + 9, // 132: penumbra.view.v1alpha1.ViewProtocolService.IndexByAddress:output_type -> penumbra.view.v1alpha1.IndexByAddressResponse + 11, // 133: penumbra.view.v1alpha1.ViewProtocolService.EphemeralAddress:output_type -> penumbra.view.v1alpha1.EphemeralAddressResponse + 13, // 134: penumbra.view.v1alpha1.ViewProtocolService.Balances:output_type -> penumbra.view.v1alpha1.BalancesResponse + 34, // 135: penumbra.view.v1alpha1.ViewProtocolService.NoteByCommitment:output_type -> penumbra.view.v1alpha1.NoteByCommitmentResponse + 36, // 136: penumbra.view.v1alpha1.ViewProtocolService.SwapByCommitment:output_type -> penumbra.view.v1alpha1.SwapByCommitmentResponse + 38, // 137: penumbra.view.v1alpha1.ViewProtocolService.UnclaimedSwaps:output_type -> penumbra.view.v1alpha1.UnclaimedSwapsResponse + 40, // 138: penumbra.view.v1alpha1.ViewProtocolService.NullifierStatus:output_type -> penumbra.view.v1alpha1.NullifierStatusResponse + 45, // 139: penumbra.view.v1alpha1.ViewProtocolService.TransactionInfoByHash:output_type -> penumbra.view.v1alpha1.TransactionInfoByHashResponse + 44, // 140: penumbra.view.v1alpha1.ViewProtocolService.TransactionInfo:output_type -> penumbra.view.v1alpha1.TransactionInfoResponse + 5, // 141: penumbra.view.v1alpha1.ViewProtocolService.TransactionPlanner:output_type -> penumbra.view.v1alpha1.TransactionPlannerResponse + 3, // 142: penumbra.view.v1alpha1.ViewProtocolService.BroadcastTransaction:output_type -> penumbra.view.v1alpha1.BroadcastTransactionResponse + 51, // 143: penumbra.view.v1alpha1.ViewProtocolService.OwnedPositionIds:output_type -> penumbra.view.v1alpha1.OwnedPositionIdsResponse + 1, // 144: penumbra.view.v1alpha1.ViewProtocolService.AuthorizeAndBuild:output_type -> penumbra.view.v1alpha1.AuthorizeAndBuildResponse + 16, // 145: penumbra.view.v1alpha1.ViewAuthService.ViewAuth:output_type -> penumbra.view.v1alpha1.ViewAuthResponse + 122, // [122:146] is the sub-list for method output_type + 98, // [98:122] is the sub-list for method input_type + 98, // [98:98] is the sub-list for extension type_name + 98, // [98:98] is the sub-list for extension extendee + 0, // [0:98] is the sub-list for field type_name } func init() { file_penumbra_view_v1alpha1_view_proto_init() } @@ -4933,7 +5053,7 @@ func file_penumbra_view_v1alpha1_view_proto_init() { } } file_penumbra_view_v1alpha1_view_proto_msgTypes[37].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*NullifierStatusRequest); i { + switch v := v.(*UnclaimedSwapsRequest); i { case 0: return &v.state case 1: @@ -4945,7 +5065,7 @@ func file_penumbra_view_v1alpha1_view_proto_init() { } } file_penumbra_view_v1alpha1_view_proto_msgTypes[38].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*NullifierStatusResponse); i { + switch v := v.(*UnclaimedSwapsResponse); i { case 0: return &v.state case 1: @@ -4957,7 +5077,7 @@ func file_penumbra_view_v1alpha1_view_proto_init() { } } file_penumbra_view_v1alpha1_view_proto_msgTypes[39].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*TransactionInfoByHashRequest); i { + switch v := v.(*NullifierStatusRequest); i { case 0: return &v.state case 1: @@ -4969,7 +5089,7 @@ func file_penumbra_view_v1alpha1_view_proto_init() { } } file_penumbra_view_v1alpha1_view_proto_msgTypes[40].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*TransactionInfoRequest); i { + switch v := v.(*NullifierStatusResponse); i { case 0: return &v.state case 1: @@ -4981,7 +5101,7 @@ func file_penumbra_view_v1alpha1_view_proto_init() { } } file_penumbra_view_v1alpha1_view_proto_msgTypes[41].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*TransactionInfo); i { + switch v := v.(*TransactionInfoByHashRequest); i { case 0: return &v.state case 1: @@ -4993,7 +5113,7 @@ func file_penumbra_view_v1alpha1_view_proto_init() { } } file_penumbra_view_v1alpha1_view_proto_msgTypes[42].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*TransactionInfoResponse); i { + switch v := v.(*TransactionInfoRequest); i { case 0: return &v.state case 1: @@ -5005,7 +5125,7 @@ func file_penumbra_view_v1alpha1_view_proto_init() { } } file_penumbra_view_v1alpha1_view_proto_msgTypes[43].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*TransactionInfoByHashResponse); i { + switch v := v.(*TransactionInfo); i { case 0: return &v.state case 1: @@ -5017,7 +5137,7 @@ func file_penumbra_view_v1alpha1_view_proto_init() { } } file_penumbra_view_v1alpha1_view_proto_msgTypes[44].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*NotesResponse); i { + switch v := v.(*TransactionInfoResponse); i { case 0: return &v.state case 1: @@ -5029,7 +5149,7 @@ func file_penumbra_view_v1alpha1_view_proto_init() { } } file_penumbra_view_v1alpha1_view_proto_msgTypes[45].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*NotesForVotingResponse); i { + switch v := v.(*TransactionInfoByHashResponse); i { case 0: return &v.state case 1: @@ -5041,7 +5161,7 @@ func file_penumbra_view_v1alpha1_view_proto_init() { } } file_penumbra_view_v1alpha1_view_proto_msgTypes[46].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*SpendableNoteRecord); i { + switch v := v.(*NotesResponse); i { case 0: return &v.state case 1: @@ -5053,7 +5173,7 @@ func file_penumbra_view_v1alpha1_view_proto_init() { } } file_penumbra_view_v1alpha1_view_proto_msgTypes[47].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*SwapRecord); i { + switch v := v.(*NotesForVotingResponse); i { case 0: return &v.state case 1: @@ -5065,7 +5185,7 @@ func file_penumbra_view_v1alpha1_view_proto_init() { } } file_penumbra_view_v1alpha1_view_proto_msgTypes[48].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*OwnedPositionIdsRequest); i { + switch v := v.(*SpendableNoteRecord); i { case 0: return &v.state case 1: @@ -5077,7 +5197,7 @@ func file_penumbra_view_v1alpha1_view_proto_init() { } } file_penumbra_view_v1alpha1_view_proto_msgTypes[49].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*OwnedPositionIdsResponse); i { + switch v := v.(*SwapRecord); i { case 0: return &v.state case 1: @@ -5089,7 +5209,7 @@ func file_penumbra_view_v1alpha1_view_proto_init() { } } file_penumbra_view_v1alpha1_view_proto_msgTypes[50].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*TransactionPlannerRequest_Output); i { + switch v := v.(*OwnedPositionIdsRequest); i { case 0: return &v.state case 1: @@ -5101,7 +5221,7 @@ func file_penumbra_view_v1alpha1_view_proto_init() { } } file_penumbra_view_v1alpha1_view_proto_msgTypes[51].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*TransactionPlannerRequest_Swap); i { + switch v := v.(*OwnedPositionIdsResponse); i { case 0: return &v.state case 1: @@ -5113,7 +5233,7 @@ func file_penumbra_view_v1alpha1_view_proto_init() { } } file_penumbra_view_v1alpha1_view_proto_msgTypes[52].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*TransactionPlannerRequest_SwapClaim); i { + switch v := v.(*TransactionPlannerRequest_Output); i { case 0: return &v.state case 1: @@ -5125,7 +5245,7 @@ func file_penumbra_view_v1alpha1_view_proto_init() { } } file_penumbra_view_v1alpha1_view_proto_msgTypes[53].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*TransactionPlannerRequest_Delegate); i { + switch v := v.(*TransactionPlannerRequest_Swap); i { case 0: return &v.state case 1: @@ -5137,7 +5257,7 @@ func file_penumbra_view_v1alpha1_view_proto_init() { } } file_penumbra_view_v1alpha1_view_proto_msgTypes[54].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*TransactionPlannerRequest_Undelegate); i { + switch v := v.(*TransactionPlannerRequest_SwapClaim); i { case 0: return &v.state case 1: @@ -5149,7 +5269,7 @@ func file_penumbra_view_v1alpha1_view_proto_init() { } } file_penumbra_view_v1alpha1_view_proto_msgTypes[55].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*TransactionPlannerRequest_PositionOpen); i { + switch v := v.(*TransactionPlannerRequest_Delegate); i { case 0: return &v.state case 1: @@ -5161,7 +5281,7 @@ func file_penumbra_view_v1alpha1_view_proto_init() { } } file_penumbra_view_v1alpha1_view_proto_msgTypes[56].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*TransactionPlannerRequest_PositionClose); i { + switch v := v.(*TransactionPlannerRequest_Undelegate); i { case 0: return &v.state case 1: @@ -5173,6 +5293,30 @@ func file_penumbra_view_v1alpha1_view_proto_init() { } } file_penumbra_view_v1alpha1_view_proto_msgTypes[57].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*TransactionPlannerRequest_PositionOpen); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_penumbra_view_v1alpha1_view_proto_msgTypes[58].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*TransactionPlannerRequest_PositionClose); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_penumbra_view_v1alpha1_view_proto_msgTypes[59].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*TransactionPlannerRequest_PositionWithdraw); i { case 0: return &v.state @@ -5191,7 +5335,7 @@ func file_penumbra_view_v1alpha1_view_proto_init() { GoPackagePath: reflect.TypeOf(x{}).PkgPath(), RawDescriptor: file_penumbra_view_v1alpha1_view_proto_rawDesc, NumEnums: 0, - NumMessages: 58, + NumMessages: 60, NumExtensions: 0, NumServices: 2, }, diff --git a/proto/penumbra/penumbra/view/v1alpha1/view.proto b/proto/penumbra/penumbra/view/v1alpha1/view.proto index 12a2ce151e..6ce937fb29 100644 --- a/proto/penumbra/penumbra/view/v1alpha1/view.proto +++ b/proto/penumbra/penumbra/view/v1alpha1/view.proto @@ -70,6 +70,9 @@ service ViewProtocolService { // Query for a swap by its swap commitment, optionally waiting until the swap is detected. rpc SwapByCommitment(SwapByCommitmentRequest) returns (SwapByCommitmentResponse); + // Query for all unclaimed swaps. + rpc UnclaimedSwaps(UnclaimedSwapsRequest) returns (stream UnclaimedSwapsResponse); + // Query for whether a nullifier has been spent, optionally waiting until it is spent. rpc NullifierStatus(NullifierStatusRequest) returns (NullifierStatusResponse); @@ -401,6 +404,15 @@ message SwapByCommitmentResponse { SwapRecord swap = 1; } +message UnclaimedSwapsRequest { + // Identifies the account group to query. + core.crypto.v1alpha1.AccountGroupId account_group_id = 1; +} + +message UnclaimedSwapsResponse { + SwapRecord swap = 1; +} + message NullifierStatusRequest { core.crypto.v1alpha1.Nullifier nullifier = 2; bool await_detection = 3;